diff options
Diffstat (limited to 'public/admin/view/javascript')
310 files changed, 222322 insertions, 0 deletions
diff --git a/public/admin/view/javascript/bootstrap/css/bootstrap-theme.css b/public/admin/view/javascript/bootstrap/css/bootstrap-theme.css new file mode 100644 index 0000000..c19cd5c --- /dev/null +++ b/public/admin/view/javascript/bootstrap/css/bootstrap-theme.css @@ -0,0 +1,587 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #2e6da4; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/public/admin/view/javascript/bootstrap/css/bootstrap-theme.css.map b/public/admin/view/javascript/bootstrap/css/bootstrap-theme.css.map new file mode 100644 index 0000000..7535311 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;GAIG;ACeH;;;;;;EAME,yCAAA;EC2CA,4FAAA;EACQ,oFAAA;CFvDT;ACgBC;;;;;;;;;;;;ECsCA,yDAAA;EACQ,iDAAA;CFxCT;ACMC;;;;;;;;;;;;;;;;;;ECiCA,yBAAA;EACQ,iBAAA;CFnBT;AC/BD;;;;;;EAuBI,kBAAA;CDgBH;ACyBC;;EAEE,uBAAA;CDvBH;AC4BD;EErEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;EAuC2C,0BAAA;EAA2B,mBAAA;CDjBvE;ACpBC;;EAEE,0BAAA;EACA,6BAAA;CDsBH;ACnBC;;EAEE,0BAAA;EACA,sBAAA;CDqBH;ACfG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6BL;ACbD;EEtEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8DD;AC5DC;;EAEE,0BAAA;EACA,6BAAA;CD8DH;AC3DC;;EAEE,0BAAA;EACA,sBAAA;CD6DH;ACvDG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqEL;ACpDD;EEvEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsGD;ACpGC;;EAEE,0BAAA;EACA,6BAAA;CDsGH;ACnGC;;EAEE,0BAAA;EACA,sBAAA;CDqGH;AC/FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6GL;AC3FD;EExEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ID;AC5IC;;EAEE,0BAAA;EACA,6BAAA;CD8IH;AC3IC;;EAEE,0BAAA;EACA,sBAAA;CD6IH;ACvIG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqJL;AClID;EEzEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsLD;ACpLC;;EAEE,0BAAA;EACA,6BAAA;CDsLH;ACnLC;;EAEE,0BAAA;EACA,sBAAA;CDqLH;AC/KG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6LL;ACzKD;EE1EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ND;AC5NC;;EAEE,0BAAA;EACA,6BAAA;CD8NH;AC3NC;;EAEE,0BAAA;EACA,sBAAA;CD6NH;ACvNG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqOL;AC1MD;;EClCE,mDAAA;EACQ,2CAAA;CFgPT;ACrMD;;EE3FI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF0FF,0BAAA;CD2MD;ACzMD;;;EEhGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFgGF,0BAAA;CD+MD;ACtMD;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EH+HA,mBAAA;ECjEA,4FAAA;EACQ,oFAAA;CF8QT;ACjND;;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,yDAAA;EACQ,iDAAA;CFwRT;AC9MD;;EAEE,+CAAA;CDgND;AC5MD;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EHkJA,mBAAA;CDkND;ACrND;;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,wDAAA;EACQ,gDAAA;CF+ST;AC/ND;;EAYI,0CAAA;CDuNH;AClND;;;EAGE,iBAAA;CDoND;AC/LD;EAfI;;;IAGE,YAAA;IE7JF,yEAAA;IACA,oEAAA;IACA,8FAAA;IAAA,uEAAA;IACA,4BAAA;IACA,uHAAA;GH+WD;CACF;AC3MD;EACE,8CAAA;EC3HA,2FAAA;EACQ,mFAAA;CFyUT;ACnMD;EEtLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+MD;AC1MD;EEvLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuND;ACjND;EExLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+ND;ACxND;EEzLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuOD;ACxND;EEjMI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH4ZH;ACrND;EE3MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHmaH;AC3ND;EE5MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH0aH;ACjOD;EE7MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHibH;ACvOD;EE9MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHwbH;AC7OD;EE/MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH+bH;AChPD;EElLI,8MAAA;EACA,yMAAA;EACA,sMAAA;CHqaH;AC5OD;EACE,mBAAA;EC9KA,mDAAA;EACQ,2CAAA;CF6ZT;AC7OD;;;EAGE,8BAAA;EEnOE,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFiOF,sBAAA;CDmPD;ACxPD;;;EAQI,kBAAA;CDqPH;AC3OD;ECnME,kDAAA;EACQ,0CAAA;CFibT;ACrOD;EE5PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHoeH;AC3OD;EE7PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH2eH;ACjPD;EE9PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHkfH;ACvPD;EE/PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHyfH;AC7PD;EEhQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHggBH;ACnQD;EEjQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHugBH;ACnQD;EExQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFsQF,sBAAA;EC3NA,0FAAA;EACQ,kFAAA;CFqeT","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
\ No newline at end of file diff --git a/public/admin/view/javascript/bootstrap/css/bootstrap-theme.min.css b/public/admin/view/javascript/bootstrap/css/bootstrap-theme.min.css new file mode 100644 index 0000000..61358b1 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/css/bootstrap-theme.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
\ No newline at end of file diff --git a/public/admin/view/javascript/bootstrap/css/bootstrap.css b/public/admin/view/javascript/bootstrap/css/bootstrap.css new file mode 100644 index 0000000..680e768 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/css/bootstrap.css @@ -0,0 +1,6800 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.333333px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 3; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + min-height: 16.42857143px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/public/admin/view/javascript/bootstrap/css/bootstrap.css.map b/public/admin/view/javascript/bootstrap/css/bootstrap.css.map new file mode 100644 index 0000000..9f60ed2 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4EAA4E;ACG5E;EACE,wBAAA;EACA,2BAAA;EACA,+BAAA;CDDD;ACQD;EACE,UAAA;CDND;ACmBD;;;;;;;;;;;;;EAaE,eAAA;CDjBD;ACyBD;;;;EAIE,sBAAA;EACA,yBAAA;CDvBD;AC+BD;EACE,cAAA;EACA,UAAA;CD7BD;ACqCD;;EAEE,cAAA;CDnCD;AC6CD;EACE,8BAAA;CD3CD;ACmDD;;EAEE,WAAA;CDjDD;AC2DD;EACE,0BAAA;CDzDD;ACgED;;EAEE,kBAAA;CD9DD;ACqED;EACE,mBAAA;CDnED;AC2ED;EACE,eAAA;EACA,iBAAA;CDzED;ACgFD;EACE,iBAAA;EACA,YAAA;CD9ED;ACqFD;EACE,eAAA;CDnFD;AC0FD;;EAEE,eAAA;EACA,eAAA;EACA,mBAAA;EACA,yBAAA;CDxFD;AC2FD;EACE,YAAA;CDzFD;AC4FD;EACE,gBAAA;CD1FD;ACoGD;EACE,UAAA;CDlGD;ACyGD;EACE,iBAAA;CDvGD;ACiHD;EACE,iBAAA;CD/GD;ACsHD;EACE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,UAAA;CDpHD;AC2HD;EACE,eAAA;CDzHD;ACgID;;;;EAIE,kCAAA;EACA,eAAA;CD9HD;ACgJD;;;;;EAKE,eAAA;EACA,cAAA;EACA,UAAA;CD9ID;ACqJD;EACE,kBAAA;CDnJD;AC6JD;;EAEE,qBAAA;CD3JD;ACsKD;;;;EAIE,2BAAA;EACA,gBAAA;CDpKD;AC2KD;;EAEE,gBAAA;CDzKD;ACgLD;;EAEE,UAAA;EACA,WAAA;CD9KD;ACsLD;EACE,oBAAA;CDpLD;AC+LD;;EAEE,+BAAA;KAAA,4BAAA;UAAA,uBAAA;EACA,WAAA;CD7LD;ACsMD;;EAEE,aAAA;CDpMD;AC4MD;EACE,8BAAA;EACA,gCAAA;KAAA,6BAAA;UAAA,wBAAA;CD1MD;ACmND;;EAEE,yBAAA;CDjND;ACwND;EACE,0BAAA;EACA,cAAA;EACA,+BAAA;CDtND;AC8ND;EACE,UAAA;EACA,WAAA;CD5ND;ACmOD;EACE,eAAA;CDjOD;ACyOD;EACE,kBAAA;CDvOD;ACiPD;EACE,0BAAA;EACA,kBAAA;CD/OD;ACkPD;;EAEE,WAAA;CDhPD;AACD,qFAAqF;AElFrF;EA7FI;;;IAGI,mCAAA;IACA,uBAAA;IACA,oCAAA;YAAA,4BAAA;IACA,6BAAA;GFkLL;EE/KC;;IAEI,2BAAA;GFiLL;EE9KC;IACI,6BAAA;GFgLL;EE7KC;IACI,8BAAA;GF+KL;EE1KC;;IAEI,YAAA;GF4KL;EEzKC;;IAEI,uBAAA;IACA,yBAAA;GF2KL;EExKC;IACI,4BAAA;GF0KL;EEvKC;;IAEI,yBAAA;GFyKL;EEtKC;IACI,2BAAA;GFwKL;EErKC;;;IAGI,WAAA;IACA,UAAA;GFuKL;EEpKC;;IAEI,wBAAA;GFsKL;EEhKC;IACI,cAAA;GFkKL;EEhKC;;IAGQ,kCAAA;GFiKT;EE9JC;IACI,uBAAA;GFgKL;EE7JC;IACI,qCAAA;GF+JL;EEhKC;;IAKQ,kCAAA;GF+JT;EE5JC;;IAGQ,kCAAA;GF6JT;CACF;AGnPD;EACE,oCAAA;EACA,sDAAA;EACA,gYAAA;CHqPD;AG7OD;EACE,mBAAA;EACA,SAAA;EACA,sBAAA;EACA,oCAAA;EACA,mBAAA;EACA,oBAAA;EACA,eAAA;EACA,oCAAA;EACA,mCAAA;CH+OD;AG3OmC;EAAW,eAAA;CH8O9C;AG7OmC;EAAW,eAAA;CHgP9C;AG9OmC;;EAAW,iBAAA;CHkP9C;AGjPmC;EAAW,iBAAA;CHoP9C;AGnPmC;EAAW,iBAAA;CHsP9C;AGrPmC;EAAW,iBAAA;CHwP9C;AGvPmC;EAAW,iBAAA;CH0P9C;AGzPmC;EAAW,iBAAA;CH4P9C;AG3PmC;EAAW,iBAAA;CH8P9C;AG7PmC;EAAW,iBAAA;CHgQ9C;AG/PmC;EAAW,iBAAA;CHkQ9C;AGjQmC;EAAW,iBAAA;CHoQ9C;AGnQmC;EAAW,iBAAA;CHsQ9C;AGrQmC;EAAW,iBAAA;CHwQ9C;AGvQmC;EAAW,iBAAA;CH0Q9C;AGzQmC;EAAW,iBAAA;CH4Q9C;AG3QmC;EAAW,iBAAA;CH8Q9C;AG7QmC;EAAW,iBAAA;CHgR9C;AG/QmC;EAAW,iBAAA;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;EAAW,iBAAA;CH4tB9C;AG3tBmC;EAAW,iBAAA;CH8tB9C;AG7tBmC;EAAW,iBAAA;CHguB9C;AG/tBmC;EAAW,iBAAA;CHkuB9C;AGjuBmC;EAAW,iBAAA;CHouB9C;AGnuBmC;EAAW,iBAAA;CHsuB9C;AGruBmC;EAAW,iBAAA;CHwuB9C;AGvuBmC;EAAW,iBAAA;CH0uB9C;AGzuBmC;EAAW,iBAAA;CH4uB9C;AG3uBmC;EAAW,iBAAA;CH8uB9C;AG7uBmC;EAAW,iBAAA;CHgvB9C;AIthCD;ECgEE,+BAAA;EACG,4BAAA;EACK,uBAAA;CLy9BT;AIxhCD;;EC6DE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL+9BT;AIthCD;EACE,gBAAA;EACA,8CAAA;CJwhCD;AIrhCD;EACE,4DAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,0BAAA;CJuhCD;AInhCD;;;;EAIE,qBAAA;EACA,mBAAA;EACA,qBAAA;CJqhCD;AI/gCD;EACE,eAAA;EACA,sBAAA;CJihCD;AI/gCC;;EAEE,eAAA;EACA,2BAAA;CJihCH;AI9gCC;EErDA,qBAAA;EAEA,2CAAA;EACA,qBAAA;CNqkCD;AIxgCD;EACE,UAAA;CJ0gCD;AIpgCD;EACE,uBAAA;CJsgCD;AIlgCD;;;;;EGvEE,eAAA;EACA,gBAAA;EACA,aAAA;CPglCD;AItgCD;EACE,mBAAA;CJwgCD;AIlgCD;EACE,aAAA;EACA,wBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EC6FA,yCAAA;EACK,oCAAA;EACG,iCAAA;EEvLR,sBAAA;EACA,gBAAA;EACA,aAAA;CPgmCD;AIlgCD;EACE,mBAAA;CJogCD;AI9/BD;EACE,iBAAA;EACA,oBAAA;EACA,UAAA;EACA,8BAAA;CJggCD;AIx/BD;EACE,mBAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,WAAA;EACA,iBAAA;EACA,uBAAA;EACA,UAAA;CJ0/BD;AIl/BC;;EAEE,iBAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,WAAA;CJo/BH;AIz+BD;EACE,gBAAA;CJ2+BD;AQloCD;;;;;;;;;;;;EAEE,qBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;CR8oCD;AQnpCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,oBAAA;EACA,eAAA;EACA,eAAA;CRoqCH;AQhqCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRqqCD;AQzqCD;;;;;;;;;;;;EAQI,eAAA;CR+qCH;AQ5qCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRirCD;AQrrCD;;;;;;;;;;;;EAQI,eAAA;CR2rCH;AQvrCD;;EAAU,gBAAA;CR2rCT;AQ1rCD;;EAAU,gBAAA;CR8rCT;AQ7rCD;;EAAU,gBAAA;CRisCT;AQhsCD;;EAAU,gBAAA;CRosCT;AQnsCD;;EAAU,gBAAA;CRusCT;AQtsCD;;EAAU,gBAAA;CR0sCT;AQpsCD;EACE,iBAAA;CRssCD;AQnsCD;EACE,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;CRqsCD;AQhsCD;EAAA;IAFI,gBAAA;GRssCD;CACF;AQ9rCD;;EAEE,eAAA;CRgsCD;AQ7rCD;;EAEE,0BAAA;EACA,cAAA;CR+rCD;AQ3rCD;EAAuB,iBAAA;CR8rCtB;AQ7rCD;EAAuB,kBAAA;CRgsCtB;AQ/rCD;EAAuB,mBAAA;CRksCtB;AQjsCD;EAAuB,oBAAA;CRosCtB;AQnsCD;EAAuB,oBAAA;CRssCtB;AQnsCD;EAAuB,0BAAA;CRssCtB;AQrsCD;EAAuB,0BAAA;CRwsCtB;AQvsCD;EAAuB,2BAAA;CR0sCtB;AQvsCD;EACE,eAAA;CRysCD;AQvsCD;ECrGE,eAAA;CT+yCD;AS9yCC;;EAEE,eAAA;CTgzCH;AQ3sCD;ECxGE,eAAA;CTszCD;ASrzCC;;EAEE,eAAA;CTuzCH;AQ/sCD;EC3GE,eAAA;CT6zCD;AS5zCC;;EAEE,eAAA;CT8zCH;AQntCD;EC9GE,eAAA;CTo0CD;ASn0CC;;EAEE,eAAA;CTq0CH;AQvtCD;ECjHE,eAAA;CT20CD;AS10CC;;EAEE,eAAA;CT40CH;AQvtCD;EAGE,YAAA;EE3HA,0BAAA;CVm1CD;AUl1CC;;EAEE,0BAAA;CVo1CH;AQztCD;EE9HE,0BAAA;CV01CD;AUz1CC;;EAEE,0BAAA;CV21CH;AQ7tCD;EEjIE,0BAAA;CVi2CD;AUh2CC;;EAEE,0BAAA;CVk2CH;AQjuCD;EEpIE,0BAAA;CVw2CD;AUv2CC;;EAEE,0BAAA;CVy2CH;AQruCD;EEvIE,0BAAA;CV+2CD;AU92CC;;EAEE,0BAAA;CVg3CH;AQpuCD;EACE,oBAAA;EACA,oBAAA;EACA,iCAAA;CRsuCD;AQ9tCD;;EAEE,cAAA;EACA,oBAAA;CRguCD;AQnuCD;;;;EAMI,iBAAA;CRmuCH;AQ5tCD;EACE,gBAAA;EACA,iBAAA;CR8tCD;AQ1tCD;EALE,gBAAA;EACA,iBAAA;EAMA,kBAAA;CR6tCD;AQ/tCD;EAKI,sBAAA;EACA,kBAAA;EACA,mBAAA;CR6tCH;AQxtCD;EACE,cAAA;EACA,oBAAA;CR0tCD;AQxtCD;;EAEE,wBAAA;CR0tCD;AQxtCD;EACE,kBAAA;CR0tCD;AQxtCD;EACE,eAAA;CR0tCD;AQjsCD;EAAA;IAVM,YAAA;IACA,aAAA;IACA,YAAA;IACA,kBAAA;IGtNJ,iBAAA;IACA,wBAAA;IACA,oBAAA;GXs6CC;EQ3sCH;IAHM,mBAAA;GRitCH;CACF;AQxsCD;;EAGE,aAAA;EACA,kCAAA;CRysCD;AQvsCD;EACE,eAAA;EA9IqB,0BAAA;CRw1CtB;AQrsCD;EACE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,+BAAA;CRusCD;AQlsCG;;;EACE,iBAAA;CRssCL;AQhtCD;;;EAmBI,eAAA;EACA,eAAA;EACA,wBAAA;EACA,eAAA;CRksCH;AQhsCG;;;EACE,uBAAA;CRosCL;AQ5rCD;;EAEE,oBAAA;EACA,gBAAA;EACA,gCAAA;EACA,eAAA;EACA,kBAAA;CR8rCD;AQxrCG;;;;;;EAAW,YAAA;CRgsCd;AQ/rCG;;;;;;EACE,uBAAA;CRssCL;AQhsCD;EACE,oBAAA;EACA,mBAAA;EACA,wBAAA;CRksCD;AYx+CD;;;;EAIE,+DAAA;CZ0+CD;AYt+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CZw+CD;AYp+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;EACA,uDAAA;UAAA,+CAAA;CZs+CD;AY5+CD;EASI,WAAA;EACA,gBAAA;EACA,kBAAA;EACA,yBAAA;UAAA,iBAAA;CZs+CH;AYj+CD;EACE,eAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,sBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;CZm+CD;AY9+CD;EAeI,WAAA;EACA,mBAAA;EACA,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,iBAAA;CZk+CH;AY79CD;EACE,kBAAA;EACA,mBAAA;CZ+9CD;AazhDD;ECHE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;Cd+hDD;AazhDC;EAAA;IAFE,aAAA;Gb+hDD;CACF;Aa3hDC;EAAA;IAFE,aAAA;GbiiDD;CACF;Aa7hDD;EAAA;IAFI,cAAA;GbmiDD;CACF;Aa1hDD;ECvBE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;CdojDD;AavhDD;ECvBE,mBAAA;EACA,oBAAA;CdijDD;AejjDG;EACE,mBAAA;EAEA,gBAAA;EAEA,mBAAA;EACA,oBAAA;CfijDL;AejiDG;EACE,YAAA;CfmiDL;Ae5hDC;EACE,YAAA;Cf8hDH;Ae/hDC;EACE,oBAAA;CfiiDH;AeliDC;EACE,oBAAA;CfoiDH;AeriDC;EACE,WAAA;CfuiDH;AexiDC;EACE,oBAAA;Cf0iDH;Ae3iDC;EACE,oBAAA;Cf6iDH;Ae9iDC;EACE,WAAA;CfgjDH;AejjDC;EACE,oBAAA;CfmjDH;AepjDC;EACE,oBAAA;CfsjDH;AevjDC;EACE,WAAA;CfyjDH;Ae1jDC;EACE,oBAAA;Cf4jDH;Ae7jDC;EACE,mBAAA;Cf+jDH;AejjDC;EACE,YAAA;CfmjDH;AepjDC;EACE,oBAAA;CfsjDH;AevjDC;EACE,oBAAA;CfyjDH;Ae1jDC;EACE,WAAA;Cf4jDH;Ae7jDC;EACE,oBAAA;Cf+jDH;AehkDC;EACE,oBAAA;CfkkDH;AenkDC;EACE,WAAA;CfqkDH;AetkDC;EACE,oBAAA;CfwkDH;AezkDC;EACE,oBAAA;Cf2kDH;Ae5kDC;EACE,WAAA;Cf8kDH;Ae/kDC;EACE,oBAAA;CfilDH;AellDC;EACE,mBAAA;CfolDH;AehlDC;EACE,YAAA;CfklDH;AelmDC;EACE,WAAA;CfomDH;AermDC;EACE,mBAAA;CfumDH;AexmDC;EACE,mBAAA;Cf0mDH;Ae3mDC;EACE,UAAA;Cf6mDH;Ae9mDC;EACE,mBAAA;CfgnDH;AejnDC;EACE,mBAAA;CfmnDH;AepnDC;EACE,UAAA;CfsnDH;AevnDC;EACE,mBAAA;CfynDH;Ae1nDC;EACE,mBAAA;Cf4nDH;Ae7nDC;EACE,UAAA;Cf+nDH;AehoDC;EACE,mBAAA;CfkoDH;AenoDC;EACE,kBAAA;CfqoDH;AejoDC;EACE,WAAA;CfmoDH;AernDC;EACE,kBAAA;CfunDH;AexnDC;EACE,0BAAA;Cf0nDH;Ae3nDC;EACE,0BAAA;Cf6nDH;Ae9nDC;EACE,iBAAA;CfgoDH;AejoDC;EACE,0BAAA;CfmoDH;AepoDC;EACE,0BAAA;CfsoDH;AevoDC;EACE,iBAAA;CfyoDH;Ae1oDC;EACE,0BAAA;Cf4oDH;Ae7oDC;EACE,0BAAA;Cf+oDH;AehpDC;EACE,iBAAA;CfkpDH;AenpDC;EACE,0BAAA;CfqpDH;AetpDC;EACE,yBAAA;CfwpDH;AezpDC;EACE,gBAAA;Cf2pDH;Aa3pDD;EElCI;IACE,YAAA;GfgsDH;EezrDD;IACE,YAAA;Gf2rDD;Ee5rDD;IACE,oBAAA;Gf8rDD;Ee/rDD;IACE,oBAAA;GfisDD;EelsDD;IACE,WAAA;GfosDD;EersDD;IACE,oBAAA;GfusDD;EexsDD;IACE,oBAAA;Gf0sDD;Ee3sDD;IACE,WAAA;Gf6sDD;Ee9sDD;IACE,oBAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,WAAA;GfstDD;EevtDD;IACE,oBAAA;GfytDD;Ee1tDD;IACE,mBAAA;Gf4tDD;Ee9sDD;IACE,YAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,oBAAA;GfstDD;EevtDD;IACE,WAAA;GfytDD;Ee1tDD;IACE,oBAAA;Gf4tDD;Ee7tDD;IACE,oBAAA;Gf+tDD;EehuDD;IACE,WAAA;GfkuDD;EenuDD;IACE,oBAAA;GfquDD;EetuDD;IACE,oBAAA;GfwuDD;EezuDD;IACE,WAAA;Gf2uDD;Ee5uDD;IACE,oBAAA;Gf8uDD;Ee/uDD;IACE,mBAAA;GfivDD;Ee7uDD;IACE,YAAA;Gf+uDD;Ee/vDD;IACE,WAAA;GfiwDD;EelwDD;IACE,mBAAA;GfowDD;EerwDD;IACE,mBAAA;GfuwDD;EexwDD;IACE,UAAA;Gf0wDD;Ee3wDD;IACE,mBAAA;Gf6wDD;Ee9wDD;IACE,mBAAA;GfgxDD;EejxDD;IACE,UAAA;GfmxDD;EepxDD;IACE,mBAAA;GfsxDD;EevxDD;IACE,mBAAA;GfyxDD;Ee1xDD;IACE,UAAA;Gf4xDD;Ee7xDD;IACE,mBAAA;Gf+xDD;EehyDD;IACE,kBAAA;GfkyDD;Ee9xDD;IACE,WAAA;GfgyDD;EelxDD;IACE,kBAAA;GfoxDD;EerxDD;IACE,0BAAA;GfuxDD;EexxDD;IACE,0BAAA;Gf0xDD;Ee3xDD;IACE,iBAAA;Gf6xDD;Ee9xDD;IACE,0BAAA;GfgyDD;EejyDD;IACE,0BAAA;GfmyDD;EepyDD;IACE,iBAAA;GfsyDD;EevyDD;IACE,0BAAA;GfyyDD;Ee1yDD;IACE,0BAAA;Gf4yDD;Ee7yDD;IACE,iBAAA;Gf+yDD;EehzDD;IACE,0BAAA;GfkzDD;EenzDD;IACE,yBAAA;GfqzDD;EetzDD;IACE,gBAAA;GfwzDD;CACF;AahzDD;EE3CI;IACE,YAAA;Gf81DH;Eev1DD;IACE,YAAA;Gfy1DD;Ee11DD;IACE,oBAAA;Gf41DD;Ee71DD;IACE,oBAAA;Gf+1DD;Eeh2DD;IACE,WAAA;Gfk2DD;Een2DD;IACE,oBAAA;Gfq2DD;Eet2DD;IACE,oBAAA;Gfw2DD;Eez2DD;IACE,WAAA;Gf22DD;Ee52DD;IACE,oBAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,WAAA;Gfo3DD;Eer3DD;IACE,oBAAA;Gfu3DD;Eex3DD;IACE,mBAAA;Gf03DD;Ee52DD;IACE,YAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,oBAAA;Gfo3DD;Eer3DD;IACE,WAAA;Gfu3DD;Eex3DD;IACE,oBAAA;Gf03DD;Ee33DD;IACE,oBAAA;Gf63DD;Ee93DD;IACE,WAAA;Gfg4DD;Eej4DD;IACE,oBAAA;Gfm4DD;Eep4DD;IACE,oBAAA;Gfs4DD;Eev4DD;IACE,WAAA;Gfy4DD;Ee14DD;IACE,oBAAA;Gf44DD;Ee74DD;IACE,mBAAA;Gf+4DD;Ee34DD;IACE,YAAA;Gf64DD;Ee75DD;IACE,WAAA;Gf+5DD;Eeh6DD;IACE,mBAAA;Gfk6DD;Een6DD;IACE,mBAAA;Gfq6DD;Eet6DD;IACE,UAAA;Gfw6DD;Eez6DD;IACE,mBAAA;Gf26DD;Ee56DD;IACE,mBAAA;Gf86DD;Ee/6DD;IACE,UAAA;Gfi7DD;Eel7DD;IACE,mBAAA;Gfo7DD;Eer7DD;IACE,mBAAA;Gfu7DD;Eex7DD;IACE,UAAA;Gf07DD;Ee37DD;IACE,mBAAA;Gf67DD;Ee97DD;IACE,kBAAA;Gfg8DD;Ee57DD;IACE,WAAA;Gf87DD;Eeh7DD;IACE,kBAAA;Gfk7DD;Een7DD;IACE,0BAAA;Gfq7DD;Eet7DD;IACE,0BAAA;Gfw7DD;Eez7DD;IACE,iBAAA;Gf27DD;Ee57DD;IACE,0BAAA;Gf87DD;Ee/7DD;IACE,0BAAA;Gfi8DD;Eel8DD;IACE,iBAAA;Gfo8DD;Eer8DD;IACE,0BAAA;Gfu8DD;Eex8DD;IACE,0BAAA;Gf08DD;Ee38DD;IACE,iBAAA;Gf68DD;Ee98DD;IACE,0BAAA;Gfg9DD;Eej9DD;IACE,yBAAA;Gfm9DD;Eep9DD;IACE,gBAAA;Gfs9DD;CACF;Aa38DD;EE9CI;IACE,YAAA;Gf4/DH;Eer/DD;IACE,YAAA;Gfu/DD;Eex/DD;IACE,oBAAA;Gf0/DD;Ee3/DD;IACE,oBAAA;Gf6/DD;Ee9/DD;IACE,WAAA;GfggED;EejgED;IACE,oBAAA;GfmgED;EepgED;IACE,oBAAA;GfsgED;EevgED;IACE,WAAA;GfygED;Ee1gED;IACE,oBAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,WAAA;GfkhED;EenhED;IACE,oBAAA;GfqhED;EethED;IACE,mBAAA;GfwhED;Ee1gED;IACE,YAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,oBAAA;GfkhED;EenhED;IACE,WAAA;GfqhED;EethED;IACE,oBAAA;GfwhED;EezhED;IACE,oBAAA;Gf2hED;Ee5hED;IACE,WAAA;Gf8hED;Ee/hED;IACE,oBAAA;GfiiED;EeliED;IACE,oBAAA;GfoiED;EeriED;IACE,WAAA;GfuiED;EexiED;IACE,oBAAA;Gf0iED;Ee3iED;IACE,mBAAA;Gf6iED;EeziED;IACE,YAAA;Gf2iED;Ee3jED;IACE,WAAA;Gf6jED;Ee9jED;IACE,mBAAA;GfgkED;EejkED;IACE,mBAAA;GfmkED;EepkED;IACE,UAAA;GfskED;EevkED;IACE,mBAAA;GfykED;Ee1kED;IACE,mBAAA;Gf4kED;Ee7kED;IACE,UAAA;Gf+kED;EehlED;IACE,mBAAA;GfklED;EenlED;IACE,mBAAA;GfqlED;EetlED;IACE,UAAA;GfwlED;EezlED;IACE,mBAAA;Gf2lED;Ee5lED;IACE,kBAAA;Gf8lED;Ee1lED;IACE,WAAA;Gf4lED;Ee9kED;IACE,kBAAA;GfglED;EejlED;IACE,0BAAA;GfmlED;EeplED;IACE,0BAAA;GfslED;EevlED;IACE,iBAAA;GfylED;Ee1lED;IACE,0BAAA;Gf4lED;Ee7lED;IACE,0BAAA;Gf+lED;EehmED;IACE,iBAAA;GfkmED;EenmED;IACE,0BAAA;GfqmED;EetmED;IACE,0BAAA;GfwmED;EezmED;IACE,iBAAA;Gf2mED;Ee5mED;IACE,0BAAA;Gf8mED;Ee/mED;IACE,yBAAA;GfinED;EelnED;IACE,gBAAA;GfonED;CACF;AgBxrED;EACE,8BAAA;ChB0rED;AgBxrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChB0rED;AgBxrED;EACE,iBAAA;ChB0rED;AgBprED;EACE,YAAA;EACA,gBAAA;EACA,oBAAA;ChBsrED;AgBzrED;;;;;;EAWQ,aAAA;EACA,wBAAA;EACA,oBAAA;EACA,8BAAA;ChBsrEP;AgBpsED;EAoBI,uBAAA;EACA,iCAAA;ChBmrEH;AgBxsED;;;;;;EA8BQ,cAAA;ChBkrEP;AgBhtED;EAoCI,8BAAA;ChB+qEH;AgBntED;EAyCI,0BAAA;ChB6qEH;AgBtqED;;;;;;EAOQ,aAAA;ChBuqEP;AgB5pED;EACE,0BAAA;ChB8pED;AgB/pED;;;;;;EAQQ,0BAAA;ChB+pEP;AgBvqED;;EAeM,yBAAA;ChB4pEL;AgBlpED;EAEI,0BAAA;ChBmpEH;AgB1oED;EAEI,0BAAA;ChB2oEH;AgBloED;EACE,iBAAA;EACA,YAAA;EACA,sBAAA;ChBooED;AgB/nEG;;EACE,iBAAA;EACA,YAAA;EACA,oBAAA;ChBkoEL;AiB9wEC;;;;;;;;;;;;EAOI,0BAAA;CjBqxEL;AiB/wEC;;;;;EAMI,0BAAA;CjBgxEL;AiBnyEC;;;;;;;;;;;;EAOI,0BAAA;CjB0yEL;AiBpyEC;;;;;EAMI,0BAAA;CjBqyEL;AiBxzEC;;;;;;;;;;;;EAOI,0BAAA;CjB+zEL;AiBzzEC;;;;;EAMI,0BAAA;CjB0zEL;AiB70EC;;;;;;;;;;;;EAOI,0BAAA;CjBo1EL;AiB90EC;;;;;EAMI,0BAAA;CjB+0EL;AiBl2EC;;;;;;;;;;;;EAOI,0BAAA;CjBy2EL;AiBn2EC;;;;;EAMI,0BAAA;CjBo2EL;AgBltED;EACE,iBAAA;EACA,kBAAA;ChBotED;AgBvpED;EAAA;IA1DI,YAAA;IACA,oBAAA;IACA,mBAAA;IACA,6CAAA;IACA,0BAAA;GhBqtED;EgB/pEH;IAlDM,iBAAA;GhBotEH;EgBlqEH;;;;;;IAzCY,oBAAA;GhBmtET;EgB1qEH;IAjCM,UAAA;GhB8sEH;EgB7qEH;;;;;;IAxBY,eAAA;GhB6sET;EgBrrEH;;;;;;IApBY,gBAAA;GhBitET;EgB7rEH;;;;IAPY,iBAAA;GhB0sET;CACF;AkBp6ED;EACE,WAAA;EACA,UAAA;EACA,UAAA;EAIA,aAAA;ClBm6ED;AkBh6ED;EACE,eAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,eAAA;EACA,UAAA;EACA,iCAAA;ClBk6ED;AkB/5ED;EACE,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;ClBi6ED;AkBt5ED;Eb4BE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL63ET;AkBt5ED;;EAEE,gBAAA;EACA,mBAAA;EACA,oBAAA;ClBw5ED;AkBr5ED;EACE,eAAA;ClBu5ED;AkBn5ED;EACE,eAAA;EACA,YAAA;ClBq5ED;AkBj5ED;;EAEE,aAAA;ClBm5ED;AkB/4ED;;;EZvEE,qBAAA;EAEA,2CAAA;EACA,qBAAA;CN09ED;AkB/4ED;EACE,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;ClBi5ED;AkBv3ED;EACE,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,0BAAA;EACA,uBAAA;EACA,0BAAA;EACA,mBAAA;EbxDA,yDAAA;EACQ,iDAAA;EAyHR,uFAAA;EACK,0EAAA;EACG,uEAAA;CL0zET;AmBl8EC;EACE,sBAAA;EACA,WAAA;EdUF,uFAAA;EACQ,+EAAA;CL27ET;AK15EC;EACE,eAAA;EACA,WAAA;CL45EH;AK15EC;EAA0B,eAAA;CL65E3B;AK55EC;EAAgC,eAAA;CL+5EjC;AkB/3EC;;;EAGE,0BAAA;EACA,WAAA;ClBi4EH;AkB93EC;;EAEE,oBAAA;ClBg4EH;AkB53EC;EACE,aAAA;ClB83EH;AkBl3ED;EACE,yBAAA;ClBo3ED;AkB50ED;EAtBI;;;;IACE,kBAAA;GlBw2EH;EkBr2EC;;;;;;;;IAEE,kBAAA;GlB62EH;EkB12EC;;;;;;;;IAEE,kBAAA;GlBk3EH;CACF;AkBx2ED;EACE,oBAAA;ClB02ED;AkBl2ED;;EAEE,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ClBo2ED;AkBz2ED;;EAQI,iBAAA;EACA,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,gBAAA;ClBq2EH;AkBl2ED;;;;EAIE,mBAAA;EACA,mBAAA;EACA,mBAAA;ClBo2ED;AkBj2ED;;EAEE,iBAAA;ClBm2ED;AkB/1ED;;EAEE,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;ClBi2ED;AkB/1ED;;EAEE,cAAA;EACA,kBAAA;ClBi2ED;AkBx1EC;;;;;;EAGE,oBAAA;ClB61EH;AkBv1EC;;;;EAEE,oBAAA;ClB21EH;AkBr1EC;;;;EAGI,oBAAA;ClBw1EL;AkB70ED;EAEE,iBAAA;EACA,oBAAA;EAEA,iBAAA;EACA,iBAAA;ClB60ED;AkB30EC;;EAEE,gBAAA;EACA,iBAAA;ClB60EH;AkBh0ED;EC7PE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBgkFD;AmB9jFC;EACE,aAAA;EACA,kBAAA;CnBgkFH;AmB7jFC;;EAEE,aAAA;CnB+jFH;AkB50ED;EAEI,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;ClB60EH;AkBn1ED;EASI,aAAA;EACA,kBAAA;ClB60EH;AkBv1ED;;EAcI,aAAA;ClB60EH;AkB31ED;EAiBI,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;ClB60EH;AkBz0ED;ECzRE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBqmFD;AmBnmFC;EACE,aAAA;EACA,kBAAA;CnBqmFH;AmBlmFC;;EAEE,aAAA;CnBomFH;AkBr1ED;EAEI,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;ClBs1EH;AkB51ED;EASI,aAAA;EACA,kBAAA;ClBs1EH;AkBh2ED;;EAcI,aAAA;ClBs1EH;AkBp2ED;EAiBI,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ClBs1EH;AkB70ED;EAEE,mBAAA;ClB80ED;AkBh1ED;EAMI,sBAAA;ClB60EH;AkBz0ED;EACE,mBAAA;EACA,OAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,qBAAA;ClB20ED;AkBz0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClB20ED;AkBz0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClB20ED;AkBv0ED;;;;;;;;;;ECpZI,eAAA;CnBuuFH;AkBn1ED;EChZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLwrFT;AmBtuFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL6rFT;AkB71ED;ECtYI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBsuFH;AkBl2ED;EChYI,eAAA;CnBquFH;AkBl2ED;;;;;;;;;;ECvZI,eAAA;CnBqwFH;AkB92ED;ECnZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLstFT;AmBpwFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL2tFT;AkBx3ED;ECzYI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBowFH;AkB73ED;ECnYI,eAAA;CnBmwFH;AkB73ED;;;;;;;;;;EC1ZI,eAAA;CnBmyFH;AkBz4ED;ECtZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLovFT;AmBlyFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CLyvFT;AkBn5ED;EC5YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBkyFH;AkBx5ED;ECtYI,eAAA;CnBiyFH;AkBp5EC;EACG,UAAA;ClBs5EJ;AkBp5EC;EACG,OAAA;ClBs5EJ;AkB54ED;EACE,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;ClB84ED;AkB3zED;EAAA;IA9DM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlB63EH;EkBj0EH;IAvDM,sBAAA;IACA,YAAA;IACA,uBAAA;GlB23EH;EkBt0EH;IAhDM,sBAAA;GlBy3EH;EkBz0EH;IA5CM,sBAAA;IACA,uBAAA;GlBw3EH;EkB70EH;;;IAtCQ,YAAA;GlBw3EL;EkBl1EH;IAhCM,YAAA;GlBq3EH;EkBr1EH;IA5BM,iBAAA;IACA,uBAAA;GlBo3EH;EkBz1EH;;IApBM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlBi3EH;EkBh2EH;;IAdQ,gBAAA;GlBk3EL;EkBp2EH;;IATM,mBAAA;IACA,eAAA;GlBi3EH;EkBz2EH;IAHM,OAAA;GlB+2EH;CACF;AkBr2ED;;;;EASI,cAAA;EACA,iBAAA;EACA,iBAAA;ClBk2EH;AkB72ED;;EAiBI,iBAAA;ClBg2EH;AkBj3ED;EJhhBE,mBAAA;EACA,oBAAA;Cdo4FD;AkB90EC;EAAA;IAVI,kBAAA;IACA,iBAAA;IACA,iBAAA;GlB41EH;CACF;AkB53ED;EAwCI,YAAA;ClBu1EH;AkBz0EC;EAAA;IAJM,yBAAA;IACA,gBAAA;GlBi1EL;CACF;AkBv0EC;EAAA;IAJM,iBAAA;IACA,gBAAA;GlB+0EL;CACF;AoBl6FD;EACE,sBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;EACA,uBAAA;EACA,+BAAA;MAAA,2BAAA;EACA,gBAAA;EACA,uBAAA;EACA,8BAAA;EACA,oBAAA;EC6CA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAAA;EhB4JA,0BAAA;EACG,uBAAA;EACC,sBAAA;EACI,kBAAA;CL6tFT;AoBr6FG;;;;;;EdrBF,qBAAA;EAEA,2CAAA;EACA,qBAAA;CNi8FD;AoBz6FC;;;EAGE,eAAA;EACA,sBAAA;CpB26FH;AoBx6FC;;EAEE,WAAA;EACA,uBAAA;Ef2BF,yDAAA;EACQ,iDAAA;CLg5FT;AoBx6FC;;;EAGE,oBAAA;EE7CF,cAAA;EAGA,0BAAA;EjB8DA,yBAAA;EACQ,iBAAA;CLy5FT;AoBx6FG;;EAEE,qBAAA;CpB06FL;AoBj6FD;EC3DE,eAAA;EACA,0BAAA;EACA,sBAAA;CrB+9FD;AqB79FC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+9FP;AqB79FC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+9FP;AqB79FC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+9FP;AqB79FG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBq+FT;AqBl+FC;;;EAGE,uBAAA;CrBo+FH;AqB/9FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrB6+FT;AoB/9FD;ECTI,eAAA;EACA,0BAAA;CrB2+FH;AoBh+FD;EC9DE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBiiGD;AqB/hGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBiiGP;AqB/hGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBiiGP;AqB/hGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBiiGP;AqB/hGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuiGT;AqBpiGC;;;EAGE,uBAAA;CrBsiGH;AqBjiGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrB+iGT;AoB9hGD;ECZI,eAAA;EACA,0BAAA;CrB6iGH;AoB9hGD;EClEE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBmmGD;AqBjmGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBmmGP;AqBjmGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBmmGP;AqBjmGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBmmGP;AqBjmGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBymGT;AqBtmGC;;;EAGE,uBAAA;CrBwmGH;AqBnmGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBinGT;AoB5lGD;EChBI,eAAA;EACA,0BAAA;CrB+mGH;AoB5lGD;ECtEE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBqqGD;AqBnqGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBqqGP;AqBnqGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBqqGP;AqBnqGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBqqGP;AqBnqGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB2qGT;AqBxqGC;;;EAGE,uBAAA;CrB0qGH;AqBrqGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBmrGT;AoB1pGD;ECpBI,eAAA;EACA,0BAAA;CrBirGH;AoB1pGD;EC1EE,eAAA;EACA,0BAAA;EACA,sBAAA;CrBuuGD;AqBruGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuuGP;AqBruGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuuGP;AqBruGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrBuuGP;AqBruGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB6uGT;AqB1uGC;;;EAGE,uBAAA;CrB4uGH;AqBvuGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBqvGT;AoBxtGD;ECxBI,eAAA;EACA,0BAAA;CrBmvGH;AoBxtGD;EC9EE,eAAA;EACA,0BAAA;EACA,sBAAA;CrByyGD;AqBvyGC;;EAEE,eAAA;EACA,0BAAA;EACI,sBAAA;CrByyGP;AqBvyGC;EACE,eAAA;EACA,0BAAA;EACI,sBAAA;CrByyGP;AqBvyGC;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrByyGP;AqBvyGG;;;;;;;;;EAGE,eAAA;EACA,0BAAA;EACI,sBAAA;CrB+yGT;AqB5yGC;;;EAGE,uBAAA;CrB8yGH;AqBzyGG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACI,sBAAA;CrBuzGT;AoBtxGD;EC5BI,eAAA;EACA,0BAAA;CrBqzGH;AoBjxGD;EACE,eAAA;EACA,oBAAA;EACA,iBAAA;CpBmxGD;AoBjxGC;;;;;EAKE,8BAAA;EfnCF,yBAAA;EACQ,iBAAA;CLuzGT;AoBlxGC;;;;EAIE,0BAAA;CpBoxGH;AoBlxGC;;EAEE,eAAA;EACA,2BAAA;EACA,8BAAA;CpBoxGH;AoBhxGG;;;;EAEE,eAAA;EACA,sBAAA;CpBoxGL;AoB3wGD;;ECrEE,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CrBo1GD;AoB9wGD;;ECzEE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrB21GD;AoBjxGD;;EC7EE,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrBk2GD;AoBhxGD;EACE,eAAA;EACA,YAAA;CpBkxGD;AoB9wGD;EACE,gBAAA;CpBgxGD;AoBzwGC;;;EACE,YAAA;CpB6wGH;AuBv6GD;EACE,WAAA;ElBoLA,yCAAA;EACK,oCAAA;EACG,iCAAA;CLsvGT;AuB16GC;EACE,WAAA;CvB46GH;AuBx6GD;EACE,cAAA;CvB06GD;AuBx6GC;EAAY,eAAA;CvB26Gb;AuB16GC;EAAY,mBAAA;CvB66Gb;AuB56GC;EAAY,yBAAA;CvB+6Gb;AuB56GD;EACE,mBAAA;EACA,UAAA;EACA,iBAAA;ElBuKA,gDAAA;EACQ,2CAAA;KAAA,wCAAA;EAOR,mCAAA;EACQ,8BAAA;KAAA,2BAAA;EAGR,yCAAA;EACQ,oCAAA;KAAA,iCAAA;CLgwGT;AwB18GD;EACE,sBAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,yBAAA;EACA,oCAAA;EACA,mCAAA;CxB48GD;AwBx8GD;;EAEE,mBAAA;CxB08GD;AwBt8GD;EACE,WAAA;CxBw8GD;AwBp8GD;EACE,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,0BAAA;EACA,0BAAA;EACA,sCAAA;EACA,mBAAA;EnBsBA,oDAAA;EACQ,4CAAA;EmBrBR,qCAAA;UAAA,6BAAA;CxBu8GD;AwBl8GC;EACE,SAAA;EACA,WAAA;CxBo8GH;AwB79GD;ECzBE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBy/GD;AwBn+GD;EAmCI,eAAA;EACA,kBAAA;EACA,YAAA;EACA,oBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBm8GH;AwB77GC;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CxB+7GH;AwBz7GC;;;EAGE,eAAA;EACA,sBAAA;EACA,WAAA;EACA,0BAAA;CxB27GH;AwBl7GC;;;EAGE,eAAA;CxBo7GH;AwBh7GC;;EAEE,sBAAA;EACA,8BAAA;EACA,uBAAA;EE3GF,oEAAA;EF6GE,oBAAA;CxBk7GH;AwB76GD;EAGI,eAAA;CxB66GH;AwBh7GD;EAQI,WAAA;CxB26GH;AwBn6GD;EACE,WAAA;EACA,SAAA;CxBq6GD;AwB75GD;EACE,QAAA;EACA,YAAA;CxB+5GD;AwB35GD;EACE,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxB65GD;AwBz5GD;EACE,gBAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;CxB25GD;AwBv5GD;EACE,SAAA;EACA,WAAA;CxBy5GD;AwBj5GD;;EAII,cAAA;EACA,0BAAA;EACA,4BAAA;EACA,YAAA;CxBi5GH;AwBx5GD;;EAWI,UAAA;EACA,aAAA;EACA,mBAAA;CxBi5GH;AwB53GD;EAXE;IApEA,WAAA;IACA,SAAA;GxB+8GC;EwB54GD;IA1DA,QAAA;IACA,YAAA;GxBy8GC;CACF;A2BzlHD;;EAEE,mBAAA;EACA,sBAAA;EACA,uBAAA;C3B2lHD;A2B/lHD;;EAMI,mBAAA;EACA,YAAA;C3B6lHH;A2B3lHG;;;;;;;;EAIE,WAAA;C3BimHL;A2B3lHD;;;;EAKI,kBAAA;C3B4lHH;A2BvlHD;EACE,kBAAA;C3BylHD;A2B1lHD;;;EAOI,YAAA;C3BwlHH;A2B/lHD;;;EAYI,iBAAA;C3BwlHH;A2BplHD;EACE,iBAAA;C3BslHD;A2BllHD;EACE,eAAA;C3BolHD;A2BnlHC;EClDA,8BAAA;EACG,2BAAA;C5BwoHJ;A2BllHD;;EC/CE,6BAAA;EACG,0BAAA;C5BqoHJ;A2BjlHD;EACE,YAAA;C3BmlHD;A2BjlHD;EACE,iBAAA;C3BmlHD;A2BjlHD;;ECnEE,8BAAA;EACG,2BAAA;C5BwpHJ;A2BhlHD;ECjEE,6BAAA;EACG,0BAAA;C5BopHJ;A2B/kHD;;EAEE,WAAA;C3BilHD;A2BhkHD;EACE,kBAAA;EACA,mBAAA;C3BkkHD;A2BhkHD;EACE,mBAAA;EACA,oBAAA;C3BkkHD;A2B7jHD;EtB/CE,yDAAA;EACQ,iDAAA;CL+mHT;A2B7jHC;EtBnDA,yBAAA;EACQ,iBAAA;CLmnHT;A2B1jHD;EACE,eAAA;C3B4jHD;A2BzjHD;EACE,wBAAA;EACA,uBAAA;C3B2jHD;A2BxjHD;EACE,wBAAA;C3B0jHD;A2BnjHD;;;EAII,eAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;C3BojHH;A2B3jHD;EAcM,YAAA;C3BgjHL;A2B9jHD;;;;EAsBI,iBAAA;EACA,eAAA;C3B8iHH;A2BziHC;EACE,iBAAA;C3B2iHH;A2BziHC;EACE,6BAAA;ECpKF,8BAAA;EACC,6BAAA;C5BgtHF;A2B1iHC;EACE,+BAAA;EChLF,2BAAA;EACC,0BAAA;C5B6tHF;A2B1iHD;EACE,iBAAA;C3B4iHD;A2B1iHD;;EC/KE,8BAAA;EACC,6BAAA;C5B6tHF;A2BziHD;EC7LE,2BAAA;EACC,0BAAA;C5ByuHF;A2BriHD;EACE,eAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;C3BuiHD;A2B3iHD;;EAOI,YAAA;EACA,oBAAA;EACA,UAAA;C3BwiHH;A2BjjHD;EAYI,YAAA;C3BwiHH;A2BpjHD;EAgBI,WAAA;C3BuiHH;A2BthHD;;;;EAKM,mBAAA;EACA,uBAAA;EACA,qBAAA;C3BuhHL;A6BjwHD;EACE,mBAAA;EACA,eAAA;EACA,0BAAA;C7BmwHD;A6BhwHC;EACE,YAAA;EACA,gBAAA;EACA,iBAAA;C7BkwHH;A6B3wHD;EAeI,mBAAA;EACA,WAAA;EAKA,YAAA;EAEA,YAAA;EACA,iBAAA;C7B0vHH;A6BjvHD;;;EV8BE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBwtHD;AmBttHC;;;EACE,aAAA;EACA,kBAAA;CnB0tHH;AmBvtHC;;;;;;EAEE,aAAA;CnB6tHH;A6BnwHD;;;EVyBE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnB+uHD;AmB7uHC;;;EACE,aAAA;EACA,kBAAA;CnBivHH;AmB9uHC;;;;;;EAEE,aAAA;CnBovHH;A6BjxHD;;;EAGE,oBAAA;C7BmxHD;A6BjxHC;;;EACE,iBAAA;C7BqxHH;A6BjxHD;;EAEE,UAAA;EACA,oBAAA;EACA,uBAAA;C7BmxHD;A6B9wHD;EACE,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;C7BgxHD;A6B7wHC;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;C7B+wHH;A6B7wHC;EACE,mBAAA;EACA,gBAAA;EACA,mBAAA;C7B+wHH;A6BnyHD;;EA0BI,cAAA;C7B6wHH;A6BxwHD;;;;;;;EDhGE,8BAAA;EACG,2BAAA;C5Bi3HJ;A6BzwHD;EACE,gBAAA;C7B2wHD;A6BzwHD;;;;;;;EDpGE,6BAAA;EACG,0BAAA;C5Bs3HJ;A6B1wHD;EACE,eAAA;C7B4wHD;A6BvwHD;EACE,mBAAA;EAGA,aAAA;EACA,oBAAA;C7BuwHD;A6B5wHD;EAUI,mBAAA;C7BqwHH;A6B/wHD;EAYM,kBAAA;C7BswHL;A6BnwHG;;;EAGE,WAAA;C7BqwHL;A6BhwHC;;EAGI,mBAAA;C7BiwHL;A6B9vHC;;EAGI,WAAA;EACA,kBAAA;C7B+vHL;A8B15HD;EACE,iBAAA;EACA,gBAAA;EACA,iBAAA;C9B45HD;A8B/5HD;EAOI,mBAAA;EACA,eAAA;C9B25HH;A8Bn6HD;EAWM,mBAAA;EACA,eAAA;EACA,mBAAA;C9B25HL;A8B15HK;;EAEE,sBAAA;EACA,0BAAA;C9B45HP;A8Bv5HG;EACE,eAAA;C9By5HL;A8Bv5HK;;EAEE,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,oBAAA;C9By5HP;A8Bl5HG;;;EAGE,0BAAA;EACA,sBAAA;C9Bo5HL;A8B77HD;ELHE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBm8HD;A8Bn8HD;EA0DI,gBAAA;C9B44HH;A8Bn4HD;EACE,iCAAA;C9Bq4HD;A8Bt4HD;EAGI,YAAA;EAEA,oBAAA;C9Bq4HH;A8B14HD;EASM,kBAAA;EACA,wBAAA;EACA,8BAAA;EACA,2BAAA;C9Bo4HL;A8Bn4HK;EACE,sCAAA;C9Bq4HP;A8B/3HK;;;EAGE,eAAA;EACA,0BAAA;EACA,0BAAA;EACA,iCAAA;EACA,gBAAA;C9Bi4HP;A8B53HC;EAqDA,YAAA;EA8BA,iBAAA;C9B6yHD;A8Bh4HC;EAwDE,YAAA;C9B20HH;A8Bn4HC;EA0DI,mBAAA;EACA,mBAAA;C9B40HL;A8Bv4HC;EAgEE,UAAA;EACA,WAAA;C9B00HH;A8B9zHD;EAAA;IAPM,oBAAA;IACA,UAAA;G9By0HH;E8Bn0HH;IAJQ,iBAAA;G9B00HL;CACF;A8Bp5HC;EAuFE,gBAAA;EACA,mBAAA;C9Bg0HH;A8Bx5HC;;;EA8FE,0BAAA;C9B+zHH;A8BjzHD;EAAA;IATM,iCAAA;IACA,2BAAA;G9B8zHH;E8BtzHH;;;IAHM,6BAAA;G9B8zHH;CACF;A8B/5HD;EAEI,YAAA;C9Bg6HH;A8Bl6HD;EAMM,mBAAA;C9B+5HL;A8Br6HD;EASM,iBAAA;C9B+5HL;A8B15HK;;;EAGE,eAAA;EACA,0BAAA;C9B45HP;A8Bp5HD;EAEI,YAAA;C9Bq5HH;A8Bv5HD;EAIM,gBAAA;EACA,eAAA;C9Bs5HL;A8B14HD;EACE,YAAA;C9B44HD;A8B74HD;EAII,YAAA;C9B44HH;A8Bh5HD;EAMM,mBAAA;EACA,mBAAA;C9B64HL;A8Bp5HD;EAYI,UAAA;EACA,WAAA;C9B24HH;A8B/3HD;EAAA;IAPM,oBAAA;IACA,UAAA;G9B04HH;E8Bp4HH;IAJQ,iBAAA;G9B24HL;CACF;A8Bn4HD;EACE,iBAAA;C9Bq4HD;A8Bt4HD;EAKI,gBAAA;EACA,mBAAA;C9Bo4HH;A8B14HD;;;EAYI,0BAAA;C9Bm4HH;A8Br3HD;EAAA;IATM,iCAAA;IACA,2BAAA;G9Bk4HH;E8B13HH;;;IAHM,6BAAA;G9Bk4HH;CACF;A8Bz3HD;EAEI,cAAA;C9B03HH;A8B53HD;EAKI,eAAA;C9B03HH;A8Bj3HD;EAEE,iBAAA;EF3OA,2BAAA;EACC,0BAAA;C5B8lIF;A+BxlID;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,8BAAA;C/B0lID;A+BllID;EAAA;IAFI,mBAAA;G/BwlID;CACF;A+BzkID;EAAA;IAFI,YAAA;G/B+kID;CACF;A+BjkID;EACE,oBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,2DAAA;UAAA,mDAAA;EAEA,kCAAA;C/BkkID;A+BhkIC;EACE,iBAAA;C/BkkIH;A+BtiID;EAAA;IAxBI,YAAA;IACA,cAAA;IACA,yBAAA;YAAA,iBAAA;G/BkkID;E+BhkIC;IACE,0BAAA;IACA,wBAAA;IACA,kBAAA;IACA,6BAAA;G/BkkIH;E+B/jIC;IACE,oBAAA;G/BikIH;E+B5jIC;;;IAGE,gBAAA;IACA,iBAAA;G/B8jIH;CACF;A+B1jID;;EAGI,kBAAA;C/B2jIH;A+BtjIC;EAAA;;IAFI,kBAAA;G/B6jIH;CACF;A+BpjID;;;;EAII,oBAAA;EACA,mBAAA;C/BsjIH;A+BhjIC;EAAA;;;;IAHI,gBAAA;IACA,eAAA;G/B0jIH;CACF;A+B9iID;EACE,cAAA;EACA,sBAAA;C/BgjID;A+B3iID;EAAA;IAFI,iBAAA;G/BijID;CACF;A+B7iID;;EAEE,gBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;C/B+iID;A+BziID;EAAA;;IAFI,iBAAA;G/BgjID;CACF;A+B9iID;EACE,OAAA;EACA,sBAAA;C/BgjID;A+B9iID;EACE,UAAA;EACA,iBAAA;EACA,sBAAA;C/BgjID;A+B1iID;EACE,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;C/B4iID;A+B1iIC;;EAEE,sBAAA;C/B4iIH;A+BrjID;EAaI,eAAA;C/B2iIH;A+BliID;EALI;;IAEE,mBAAA;G/B0iIH;CACF;A+BhiID;EACE,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EC9LA,gBAAA;EACA,mBAAA;ED+LA,8BAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;C/BmiID;A+B/hIC;EACE,WAAA;C/BiiIH;A+B/iID;EAmBI,eAAA;EACA,YAAA;EACA,YAAA;EACA,mBAAA;C/B+hIH;A+BrjID;EAyBI,gBAAA;C/B+hIH;A+BzhID;EAAA;IAFI,cAAA;G/B+hID;CACF;A+BthID;EACE,oBAAA;C/BwhID;A+BzhID;EAII,kBAAA;EACA,qBAAA;EACA,kBAAA;C/BwhIH;A+B5/HC;EAAA;IAtBI,iBAAA;IACA,YAAA;IACA,YAAA;IACA,cAAA;IACA,8BAAA;IACA,UAAA;IACA,yBAAA;YAAA,iBAAA;G/BshIH;E+BtgID;;IAbM,2BAAA;G/BuhIL;E+B1gID;IAVM,kBAAA;G/BuhIL;E+BthIK;;IAEE,uBAAA;G/BwhIP;CACF;A+BtgID;EAAA;IAXI,YAAA;IACA,UAAA;G/BqhID;E+B3gIH;IAPM,YAAA;G/BqhIH;E+B9gIH;IALQ,kBAAA;IACA,qBAAA;G/BshIL;CACF;A+B3gID;EACE,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,qCAAA;E1B9NA,6FAAA;EACQ,qFAAA;E2B/DR,gBAAA;EACA,mBAAA;ChC4yID;AkB5xHD;EAAA;IA9DM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlB81HH;EkBlyHH;IAvDM,sBAAA;IACA,YAAA;IACA,uBAAA;GlB41HH;EkBvyHH;IAhDM,sBAAA;GlB01HH;EkB1yHH;IA5CM,sBAAA;IACA,uBAAA;GlBy1HH;EkB9yHH;;;IAtCQ,YAAA;GlBy1HL;EkBnzHH;IAhCM,YAAA;GlBs1HH;EkBtzHH;IA5BM,iBAAA;IACA,uBAAA;GlBq1HH;EkB1zHH;;IApBM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlBk1HH;EkBj0HH;;IAdQ,gBAAA;GlBm1HL;EkBr0HH;;IATM,mBAAA;IACA,eAAA;GlBk1HH;EkB10HH;IAHM,OAAA;GlBg1HH;CACF;A+BpjIC;EAAA;IANI,mBAAA;G/B8jIH;E+B5jIG;IACE,iBAAA;G/B8jIL;CACF;A+B7iID;EAAA;IARI,YAAA;IACA,UAAA;IACA,eAAA;IACA,gBAAA;IACA,eAAA;IACA,kBAAA;I1BzPF,yBAAA;IACQ,iBAAA;GLmzIP;CACF;A+BnjID;EACE,cAAA;EHpUA,2BAAA;EACC,0BAAA;C5B03IF;A+BnjID;EACE,iBAAA;EHzUA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5By3IF;A+B/iID;EChVE,gBAAA;EACA,mBAAA;ChCk4ID;A+BhjIC;ECnVA,iBAAA;EACA,oBAAA;ChCs4ID;A+BjjIC;ECtVA,iBAAA;EACA,oBAAA;ChC04ID;A+B3iID;EChWE,iBAAA;EACA,oBAAA;ChC84ID;A+BviID;EAAA;IAJI,YAAA;IACA,kBAAA;IACA,mBAAA;G/B+iID;CACF;A+BlhID;EAhBE;IExWA,uBAAA;GjC84IC;E+BriID;IE5WA,wBAAA;IF8WE,oBAAA;G/BuiID;E+BziID;IAKI,gBAAA;G/BuiIH;CACF;A+B9hID;EACE,0BAAA;EACA,sBAAA;C/BgiID;A+BliID;EAKI,eAAA;C/BgiIH;A+B/hIG;;EAEE,eAAA;EACA,8BAAA;C/BiiIL;A+B1iID;EAcI,eAAA;C/B+hIH;A+B7iID;EAmBM,eAAA;C/B6hIL;A+B3hIK;;EAEE,eAAA;EACA,8BAAA;C/B6hIP;A+BzhIK;;;EAGE,eAAA;EACA,0BAAA;C/B2hIP;A+BvhIK;;;EAGE,eAAA;EACA,8BAAA;C/ByhIP;A+BjkID;EA8CI,sBAAA;C/BshIH;A+BrhIG;;EAEE,0BAAA;C/BuhIL;A+BxkID;EAoDM,0BAAA;C/BuhIL;A+B3kID;;EA0DI,sBAAA;C/BqhIH;A+B9gIK;;;EAGE,0BAAA;EACA,eAAA;C/BghIP;A+B/+HC;EAAA;IAzBQ,eAAA;G/B4gIP;E+B3gIO;;IAEE,eAAA;IACA,8BAAA;G/B6gIT;E+BzgIO;;;IAGE,eAAA;IACA,0BAAA;G/B2gIT;E+BvgIO;;;IAGE,eAAA;IACA,8BAAA;G/BygIT;CACF;A+B3mID;EA8GI,eAAA;C/BggIH;A+B//HG;EACE,eAAA;C/BigIL;A+BjnID;EAqHI,eAAA;C/B+/HH;A+B9/HG;;EAEE,eAAA;C/BggIL;A+B5/HK;;;;EAEE,eAAA;C/BggIP;A+Bx/HD;EACE,0BAAA;EACA,sBAAA;C/B0/HD;A+B5/HD;EAKI,eAAA;C/B0/HH;A+Bz/HG;;EAEE,eAAA;EACA,8BAAA;C/B2/HL;A+BpgID;EAcI,eAAA;C/By/HH;A+BvgID;EAmBM,eAAA;C/Bu/HL;A+Br/HK;;EAEE,eAAA;EACA,8BAAA;C/Bu/HP;A+Bn/HK;;;EAGE,eAAA;EACA,0BAAA;C/Bq/HP;A+Bj/HK;;;EAGE,eAAA;EACA,8BAAA;C/Bm/HP;A+B3hID;EA+CI,sBAAA;C/B++HH;A+B9+HG;;EAEE,0BAAA;C/Bg/HL;A+BliID;EAqDM,0BAAA;C/Bg/HL;A+BriID;;EA2DI,sBAAA;C/B8+HH;A+Bx+HK;;;EAGE,0BAAA;EACA,eAAA;C/B0+HP;A+Bn8HC;EAAA;IA/BQ,sBAAA;G/Bs+HP;E+Bv8HD;IA5BQ,0BAAA;G/Bs+HP;E+B18HD;IAzBQ,eAAA;G/Bs+HP;E+Br+HO;;IAEE,eAAA;IACA,8BAAA;G/Bu+HT;E+Bn+HO;;;IAGE,eAAA;IACA,0BAAA;G/Bq+HT;E+Bj+HO;;;IAGE,eAAA;IACA,8BAAA;G/Bm+HT;CACF;A+B3kID;EA+GI,eAAA;C/B+9HH;A+B99HG;EACE,eAAA;C/Bg+HL;A+BjlID;EAsHI,eAAA;C/B89HH;A+B79HG;;EAEE,eAAA;C/B+9HL;A+B39HK;;;;EAEE,eAAA;C/B+9HP;AkCzmJD;EACE,kBAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ClC2mJD;AkChnJD;EAQI,sBAAA;ClC2mJH;AkCnnJD;EAWM,kBAAA;EACA,eAAA;EACA,eAAA;ClC2mJL;AkCxnJD;EAkBI,eAAA;ClCymJH;AmC7nJD;EACE,sBAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;CnC+nJD;AmCnoJD;EAOI,gBAAA;CnC+nJH;AmCtoJD;;EAUM,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,0BAAA;EACA,kBAAA;CnCgoJL;AmC9nJG;;EAGI,eAAA;EPXN,+BAAA;EACG,4BAAA;C5B2oJJ;AmC7nJG;;EPvBF,gCAAA;EACG,6BAAA;C5BwpJJ;AmCxnJG;;;;EAEE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,sBAAA;CnC4nJL;AmCtnJG;;;;;;EAGE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,sBAAA;EACA,gBAAA;CnC2nJL;AmClrJD;;;;;;EAkEM,eAAA;EACA,0BAAA;EACA,sBAAA;EACA,oBAAA;CnCwnJL;AmC/mJD;;EC3EM,mBAAA;EACA,gBAAA;EACA,uBAAA;CpC8rJL;AoC5rJG;;ERKF,+BAAA;EACG,4BAAA;C5B2rJJ;AoC3rJG;;ERTF,gCAAA;EACG,6BAAA;C5BwsJJ;AmC1nJD;;EChFM,kBAAA;EACA,gBAAA;EACA,iBAAA;CpC8sJL;AoC5sJG;;ERKF,+BAAA;EACG,4BAAA;C5B2sJJ;AoC3sJG;;ERTF,gCAAA;EACG,6BAAA;C5BwtJJ;AqC3tJD;EACE,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;CrC6tJD;AqCjuJD;EAOI,gBAAA;CrC6tJH;AqCpuJD;;EAUM,sBAAA;EACA,kBAAA;EACA,0BAAA;EACA,0BAAA;EACA,oBAAA;CrC8tJL;AqC5uJD;;EAmBM,sBAAA;EACA,0BAAA;CrC6tJL;AqCjvJD;;EA2BM,aAAA;CrC0tJL;AqCrvJD;;EAkCM,YAAA;CrCutJL;AqCzvJD;;;;EA2CM,eAAA;EACA,0BAAA;EACA,oBAAA;CrCotJL;AsClwJD;EACE,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,qBAAA;CtCowJD;AsChwJG;;EAEE,eAAA;EACA,sBAAA;EACA,gBAAA;CtCkwJL;AsC7vJC;EACE,cAAA;CtC+vJH;AsC3vJC;EACE,mBAAA;EACA,UAAA;CtC6vJH;AsCtvJD;ECtCE,0BAAA;CvC+xJD;AuC5xJG;;EAEE,0BAAA;CvC8xJL;AsCzvJD;EC1CE,0BAAA;CvCsyJD;AuCnyJG;;EAEE,0BAAA;CvCqyJL;AsC5vJD;EC9CE,0BAAA;CvC6yJD;AuC1yJG;;EAEE,0BAAA;CvC4yJL;AsC/vJD;EClDE,0BAAA;CvCozJD;AuCjzJG;;EAEE,0BAAA;CvCmzJL;AsClwJD;ECtDE,0BAAA;CvC2zJD;AuCxzJG;;EAEE,0BAAA;CvC0zJL;AsCrwJD;EC1DE,0BAAA;CvCk0JD;AuC/zJG;;EAEE,0BAAA;CvCi0JL;AwCn0JD;EACE,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,uBAAA;EACA,oBAAA;EACA,mBAAA;EACA,0BAAA;EACA,oBAAA;CxCq0JD;AwCl0JC;EACE,cAAA;CxCo0JH;AwCh0JC;EACE,mBAAA;EACA,UAAA;CxCk0JH;AwC/zJC;;EAEE,OAAA;EACA,iBAAA;CxCi0JH;AwC5zJG;;EAEE,eAAA;EACA,sBAAA;EACA,gBAAA;CxC8zJL;AwCzzJC;;EAEE,eAAA;EACA,0BAAA;CxC2zJH;AwCxzJC;EACE,aAAA;CxC0zJH;AwCvzJC;EACE,kBAAA;CxCyzJH;AwCtzJC;EACE,iBAAA;CxCwzJH;AyCl3JD;EACE,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,eAAA;EACA,0BAAA;CzCo3JD;AyCz3JD;;EASI,eAAA;CzCo3JH;AyC73JD;EAaI,oBAAA;EACA,gBAAA;EACA,iBAAA;CzCm3JH;AyCl4JD;EAmBI,0BAAA;CzCk3JH;AyC/2JC;;EAEE,mBAAA;CzCi3JH;AyCz4JD;EA4BI,gBAAA;CzCg3JH;AyC91JD;EAAA;IAdI,kBAAA;IACA,qBAAA;GzCg3JD;EyC92JC;;IAEE,mBAAA;IACA,oBAAA;GzCg3JH;EyCx2JH;;IAHM,gBAAA;GzC+2JH;CACF;A0C15JD;EACE,eAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;ErCiLA,4CAAA;EACK,uCAAA;EACG,oCAAA;CL4uJT;A0Ct6JD;;EAaI,kBAAA;EACA,mBAAA;C1C65JH;A0Cz5JC;;;EAGE,sBAAA;C1C25JH;A0Ch7JD;EA0BI,aAAA;EACA,eAAA;C1Cy5JH;A2Cl7JD;EACE,cAAA;EACA,oBAAA;EACA,8BAAA;EACA,mBAAA;C3Co7JD;A2Cx7JD;EAQI,cAAA;EAEA,eAAA;C3Ck7JH;A2C57JD;EAeI,kBAAA;C3Cg7JH;A2C/7JD;;EAqBI,iBAAA;C3C86JH;A2Cn8JD;EAyBI,gBAAA;C3C66JH;A2Cr6JD;;EAEE,oBAAA;C3Cu6JD;A2Cz6JD;;EAMI,mBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;C3Cu6JH;A2C/5JD;ECvDE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Cy9JD;A2Cp6JD;EClDI,0BAAA;C5Cy9JH;A2Cv6JD;EC/CI,eAAA;C5Cy9JH;A2Ct6JD;EC3DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Co+JD;A2C36JD;ECtDI,0BAAA;C5Co+JH;A2C96JD;ECnDI,eAAA;C5Co+JH;A2C76JD;EC/DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C++JD;A2Cl7JD;EC1DI,0BAAA;C5C++JH;A2Cr7JD;ECvDI,eAAA;C5C++JH;A2Cp7JD;ECnEE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C0/JD;A2Cz7JD;EC9DI,0BAAA;C5C0/JH;A2C57JD;EC3DI,eAAA;C5C0/JH;A6C5/JD;EACE;IAAQ,4BAAA;G7C+/JP;E6C9/JD;IAAQ,yBAAA;G7CigKP;CACF;A6C9/JD;EACE;IAAQ,4BAAA;G7CigKP;E6ChgKD;IAAQ,yBAAA;G7CmgKP;CACF;A6CtgKD;EACE;IAAQ,4BAAA;G7CigKP;E6ChgKD;IAAQ,yBAAA;G7CmgKP;CACF;A6C5/JD;EACE,iBAAA;EACA,aAAA;EACA,oBAAA;EACA,0BAAA;EACA,mBAAA;ExCsCA,uDAAA;EACQ,+CAAA;CLy9JT;A6C3/JD;EACE,YAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;ExCyBA,uDAAA;EACQ,+CAAA;EAyHR,oCAAA;EACK,+BAAA;EACG,4BAAA;CL62JT;A6Cx/JD;;ECCI,8MAAA;EACA,yMAAA;EACA,sMAAA;EDAF,mCAAA;UAAA,2BAAA;C7C4/JD;A6Cr/JD;;ExC5CE,2DAAA;EACK,sDAAA;EACG,mDAAA;CLqiKT;A6Cl/JD;EErEE,0BAAA;C/C0jKD;A+CvjKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C0gKH;A6Ct/JD;EEzEE,0BAAA;C/CkkKD;A+C/jKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9CkhKH;A6C1/JD;EE7EE,0BAAA;C/C0kKD;A+CvkKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C0hKH;A6C9/JD;EEjFE,0BAAA;C/CklKD;A+C/kKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9CkiKH;AgD1lKD;EAEE,iBAAA;ChD2lKD;AgDzlKC;EACE,cAAA;ChD2lKH;AgDvlKD;;EAEE,QAAA;EACA,iBAAA;ChDylKD;AgDtlKD;EACE,eAAA;ChDwlKD;AgDrlKD;EACE,eAAA;ChDulKD;AgDplKC;EACE,gBAAA;ChDslKH;AgDllKD;;EAEE,mBAAA;ChDolKD;AgDjlKD;;EAEE,oBAAA;ChDmlKD;AgDhlKD;;;EAGE,oBAAA;EACA,oBAAA;ChDklKD;AgD/kKD;EACE,uBAAA;ChDilKD;AgD9kKD;EACE,uBAAA;ChDglKD;AgD5kKD;EACE,cAAA;EACA,mBAAA;ChD8kKD;AgDxkKD;EACE,gBAAA;EACA,iBAAA;ChD0kKD;AiDjoKD;EAEE,oBAAA;EACA,gBAAA;CjDkoKD;AiD1nKD;EACE,mBAAA;EACA,eAAA;EACA,mBAAA;EAEA,oBAAA;EACA,0BAAA;EACA,0BAAA;CjD2nKD;AiDxnKC;ErB3BA,6BAAA;EACC,4BAAA;C5BspKF;AiDznKC;EACE,iBAAA;ErBvBF,gCAAA;EACC,+BAAA;C5BmpKF;AiDlnKD;;EAEE,eAAA;CjDonKD;AiDtnKD;;EAKI,eAAA;CjDqnKH;AiDjnKC;;;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CjDqnKH;AiDjnKD;EACE,YAAA;EACA,iBAAA;CjDmnKD;AiD9mKC;;;EAGE,0BAAA;EACA,eAAA;EACA,oBAAA;CjDgnKH;AiDrnKC;;;EASI,eAAA;CjDinKL;AiD1nKC;;;EAYI,eAAA;CjDmnKL;AiD9mKC;;;EAGE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,sBAAA;CjDgnKH;AiDtnKC;;;;;;;;;EAYI,eAAA;CjDqnKL;AiDjoKC;;;EAeI,eAAA;CjDunKL;AkDztKC;EACE,eAAA;EACA,0BAAA;ClD2tKH;AkDztKG;;EAEE,eAAA;ClD2tKL;AkD7tKG;;EAKI,eAAA;ClD4tKP;AkDztKK;;;;EAEE,eAAA;EACA,0BAAA;ClD6tKP;AkD3tKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDguKP;AkDtvKC;EACE,eAAA;EACA,0BAAA;ClDwvKH;AkDtvKG;;EAEE,eAAA;ClDwvKL;AkD1vKG;;EAKI,eAAA;ClDyvKP;AkDtvKK;;;;EAEE,eAAA;EACA,0BAAA;ClD0vKP;AkDxvKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD6vKP;AkDnxKC;EACE,eAAA;EACA,0BAAA;ClDqxKH;AkDnxKG;;EAEE,eAAA;ClDqxKL;AkDvxKG;;EAKI,eAAA;ClDsxKP;AkDnxKK;;;;EAEE,eAAA;EACA,0BAAA;ClDuxKP;AkDrxKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD0xKP;AkDhzKC;EACE,eAAA;EACA,0BAAA;ClDkzKH;AkDhzKG;;EAEE,eAAA;ClDkzKL;AkDpzKG;;EAKI,eAAA;ClDmzKP;AkDhzKK;;;;EAEE,eAAA;EACA,0BAAA;ClDozKP;AkDlzKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDuzKP;AiDttKD;EACE,cAAA;EACA,mBAAA;CjDwtKD;AiDttKD;EACE,iBAAA;EACA,iBAAA;CjDwtKD;AmDl1KD;EACE,oBAAA;EACA,0BAAA;EACA,8BAAA;EACA,mBAAA;E9C0DA,kDAAA;EACQ,0CAAA;CL2xKT;AmDj1KD;EACE,cAAA;CnDm1KD;AmD90KD;EACE,mBAAA;EACA,qCAAA;EvBpBA,6BAAA;EACC,4BAAA;C5Bq2KF;AmDp1KD;EAMI,eAAA;CnDi1KH;AmD50KD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;CnD80KD;AmDl1KD;;;;;EAWI,eAAA;CnD80KH;AmDz0KD;EACE,mBAAA;EACA,0BAAA;EACA,8BAAA;EvBxCA,gCAAA;EACC,+BAAA;C5Bo3KF;AmDn0KD;;EAGI,iBAAA;CnDo0KH;AmDv0KD;;EAMM,oBAAA;EACA,iBAAA;CnDq0KL;AmDj0KG;;EAEI,cAAA;EvBvEN,6BAAA;EACC,4BAAA;C5B24KF;AmD/zKG;;EAEI,iBAAA;EvBvEN,gCAAA;EACC,+BAAA;C5By4KF;AmDx1KD;EvB1DE,2BAAA;EACC,0BAAA;C5Bq5KF;AmD3zKD;EAEI,oBAAA;CnD4zKH;AmDzzKD;EACE,oBAAA;CnD2zKD;AmDnzKD;;;EAII,iBAAA;CnDozKH;AmDxzKD;;;EAOM,mBAAA;EACA,oBAAA;CnDszKL;AmD9zKD;;EvBzGE,6BAAA;EACC,4BAAA;C5B26KF;AmDn0KD;;;;EAmBQ,4BAAA;EACA,6BAAA;CnDszKP;AmD10KD;;;;;;;;EAwBU,4BAAA;CnD4zKT;AmDp1KD;;;;;;;;EA4BU,6BAAA;CnDk0KT;AmD91KD;;EvBjGE,gCAAA;EACC,+BAAA;C5Bm8KF;AmDn2KD;;;;EAyCQ,+BAAA;EACA,gCAAA;CnDg0KP;AmD12KD;;;;;;;;EA8CU,+BAAA;CnDs0KT;AmDp3KD;;;;;;;;EAkDU,gCAAA;CnD40KT;AmD93KD;;;;EA2DI,8BAAA;CnDy0KH;AmDp4KD;;EA+DI,cAAA;CnDy0KH;AmDx4KD;;EAmEI,UAAA;CnDy0KH;AmD54KD;;;;;;;;;;;;EA0EU,eAAA;CnDg1KT;AmD15KD;;;;;;;;;;;;EA8EU,gBAAA;CnD01KT;AmDx6KD;;;;;;;;EAuFU,iBAAA;CnD21KT;AmDl7KD;;;;;;;;EAgGU,iBAAA;CnD41KT;AmD57KD;EAsGI,UAAA;EACA,iBAAA;CnDy1KH;AmD/0KD;EACE,oBAAA;CnDi1KD;AmDl1KD;EAKI,iBAAA;EACA,mBAAA;CnDg1KH;AmDt1KD;EASM,gBAAA;CnDg1KL;AmDz1KD;EAcI,iBAAA;CnD80KH;AmD51KD;;EAkBM,8BAAA;CnD80KL;AmDh2KD;EAuBI,cAAA;CnD40KH;AmDn2KD;EAyBM,iCAAA;CnD60KL;AmDt0KD;EC1PE,sBAAA;CpDmkLD;AoDjkLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDmkLH;AoDtkLC;EAMI,0BAAA;CpDmkLL;AoDzkLC;EASI,eAAA;EACA,0BAAA;CpDmkLL;AoDhkLC;EAEI,6BAAA;CpDikLL;AmDr1KD;EC7PE,sBAAA;CpDqlLD;AoDnlLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDqlLH;AoDxlLC;EAMI,0BAAA;CpDqlLL;AoD3lLC;EASI,eAAA;EACA,0BAAA;CpDqlLL;AoDllLC;EAEI,6BAAA;CpDmlLL;AmDp2KD;EChQE,sBAAA;CpDumLD;AoDrmLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDumLH;AoD1mLC;EAMI,0BAAA;CpDumLL;AoD7mLC;EASI,eAAA;EACA,0BAAA;CpDumLL;AoDpmLC;EAEI,6BAAA;CpDqmLL;AmDn3KD;ECnQE,sBAAA;CpDynLD;AoDvnLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDynLH;AoD5nLC;EAMI,0BAAA;CpDynLL;AoD/nLC;EASI,eAAA;EACA,0BAAA;CpDynLL;AoDtnLC;EAEI,6BAAA;CpDunLL;AmDl4KD;ECtQE,sBAAA;CpD2oLD;AoDzoLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD2oLH;AoD9oLC;EAMI,0BAAA;CpD2oLL;AoDjpLC;EASI,eAAA;EACA,0BAAA;CpD2oLL;AoDxoLC;EAEI,6BAAA;CpDyoLL;AmDj5KD;ECzQE,sBAAA;CpD6pLD;AoD3pLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD6pLH;AoDhqLC;EAMI,0BAAA;CpD6pLL;AoDnqLC;EASI,eAAA;EACA,0BAAA;CpD6pLL;AoD1pLC;EAEI,6BAAA;CpD2pLL;AqD3qLD;EACE,mBAAA;EACA,eAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;CrD6qLD;AqDlrLD;;;;;EAYI,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;CrD6qLH;AqDxqLD;EACE,uBAAA;CrD0qLD;AqDtqLD;EACE,oBAAA;CrDwqLD;AsDnsLD;EACE,iBAAA;EACA,cAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EjDwDA,wDAAA;EACQ,gDAAA;CL8oLT;AsD7sLD;EASI,mBAAA;EACA,kCAAA;CtDusLH;AsDlsLD;EACE,cAAA;EACA,mBAAA;CtDosLD;AsDlsLD;EACE,aAAA;EACA,mBAAA;CtDosLD;AuD1tLD;EACE,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,6BAAA;EjCRA,aAAA;EAGA,0BAAA;CtBmuLD;AuD3tLC;;EAEE,eAAA;EACA,sBAAA;EACA,gBAAA;EjCfF,aAAA;EAGA,0BAAA;CtB2uLD;AuDvtLC;EACE,WAAA;EACA,gBAAA;EACA,wBAAA;EACA,UAAA;EACA,yBAAA;CvDytLH;AwD9uLD;EACE,iBAAA;CxDgvLD;AwD5uLD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,kCAAA;EAIA,WAAA;CxD2uLD;AwDxuLC;EnD+GA,sCAAA;EACI,kCAAA;EACC,iCAAA;EACG,8BAAA;EAkER,oDAAA;EAEK,0CAAA;EACG,oCAAA;CL2jLT;AwD9uLC;EnD2GA,mCAAA;EACI,+BAAA;EACC,8BAAA;EACG,2BAAA;CLsoLT;AwDlvLD;EACE,mBAAA;EACA,iBAAA;CxDovLD;AwDhvLD;EACE,mBAAA;EACA,YAAA;EACA,aAAA;CxDkvLD;AwD9uLD;EACE,mBAAA;EACA,0BAAA;EACA,0BAAA;EACA,qCAAA;EACA,mBAAA;EnDaA,iDAAA;EACQ,yCAAA;EmDZR,qCAAA;UAAA,6BAAA;EAEA,WAAA;CxDgvLD;AwD5uLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,0BAAA;CxD8uLD;AwD5uLC;ElCrEA,WAAA;EAGA,yBAAA;CtBkzLD;AwD/uLC;ElCtEA,aAAA;EAGA,0BAAA;CtBszLD;AwD9uLD;EACE,cAAA;EACA,iCAAA;EACA,0BAAA;CxDgvLD;AwD7uLD;EACE,iBAAA;CxD+uLD;AwD3uLD;EACE,UAAA;EACA,wBAAA;CxD6uLD;AwDxuLD;EACE,mBAAA;EACA,cAAA;CxD0uLD;AwDtuLD;EACE,cAAA;EACA,kBAAA;EACA,8BAAA;CxDwuLD;AwD3uLD;EAQI,iBAAA;EACA,iBAAA;CxDsuLH;AwD/uLD;EAaI,kBAAA;CxDquLH;AwDlvLD;EAiBI,eAAA;CxDouLH;AwD/tLD;EACE,mBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;CxDiuLD;AwD/sLD;EAZE;IACE,aAAA;IACA,kBAAA;GxD8tLD;EwD5tLD;InDvEA,kDAAA;IACQ,0CAAA;GLsyLP;EwD3tLD;IAAY,aAAA;GxD8tLX;CACF;AwDztLD;EAFE;IAAY,aAAA;GxD+tLX;CACF;AyD92LD;EACE,mBAAA;EACA,cAAA;EACA,eAAA;ECRA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EDHA,gBAAA;EnCVA,WAAA;EAGA,yBAAA;CtBq4LD;AyD13LC;EnCdA,aAAA;EAGA,0BAAA;CtBy4LD;AyD73LC;EAAW,iBAAA;EAAmB,eAAA;CzDi4L/B;AyDh4LC;EAAW,iBAAA;EAAmB,eAAA;CzDo4L/B;AyDn4LC;EAAW,gBAAA;EAAmB,eAAA;CzDu4L/B;AyDt4LC;EAAW,kBAAA;EAAmB,eAAA;CzD04L/B;AyDt4LD;EACE,iBAAA;EACA,iBAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,mBAAA;CzDw4LD;AyDp4LD;EACE,mBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;CzDs4LD;AyDl4LC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,0BAAA;CzDo4LH;AyDl4LC;EACE,UAAA;EACA,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,0BAAA;CzDo4LH;AyDl4LC;EACE,UAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,0BAAA;CzDo4LH;AyDl4LC;EACE,SAAA;EACA,QAAA;EACA,iBAAA;EACA,4BAAA;EACA,4BAAA;CzDo4LH;AyDl4LC;EACE,SAAA;EACA,SAAA;EACA,iBAAA;EACA,4BAAA;EACA,2BAAA;CzDo4LH;AyDl4LC;EACE,OAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,6BAAA;CzDo4LH;AyDl4LC;EACE,OAAA;EACA,WAAA;EACA,iBAAA;EACA,wBAAA;EACA,6BAAA;CzDo4LH;AyDl4LC;EACE,OAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,6BAAA;CzDo4LH;A2Dj+LD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,aAAA;EDXA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;ECAA,gBAAA;EAEA,0BAAA;EACA,qCAAA;UAAA,6BAAA;EACA,0BAAA;EACA,qCAAA;EACA,mBAAA;EtD8CA,kDAAA;EACQ,0CAAA;CLi8LT;A2D5+LC;EAAY,kBAAA;C3D++Lb;A2D9+LC;EAAY,kBAAA;C3Di/Lb;A2Dh/LC;EAAY,iBAAA;C3Dm/Lb;A2Dl/LC;EAAY,mBAAA;C3Dq/Lb;A2Dl/LD;EACE,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,0BAAA;EACA,iCAAA;EACA,2BAAA;C3Do/LD;A2Dj/LD;EACE,kBAAA;C3Dm/LD;A2D3+LC;;EAEE,mBAAA;EACA,eAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;C3D6+LH;A2D1+LD;EACE,mBAAA;C3D4+LD;A2D1+LD;EACE,mBAAA;EACA,YAAA;C3D4+LD;A2Dx+LC;EACE,UAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;EACA,sCAAA;EACA,cAAA;C3D0+LH;A2Dz+LG;EACE,aAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;C3D2+LL;A2Dx+LC;EACE,SAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,4BAAA;EACA,wCAAA;C3D0+LH;A2Dz+LG;EACE,aAAA;EACA,UAAA;EACA,cAAA;EACA,qBAAA;EACA,4BAAA;C3D2+LL;A2Dx+LC;EACE,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,yCAAA;EACA,WAAA;C3D0+LH;A2Dz+LG;EACE,aAAA;EACA,SAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;C3D2+LL;A2Dv+LC;EACE,SAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;EACA,2BAAA;EACA,uCAAA;C3Dy+LH;A2Dx+LG;EACE,aAAA;EACA,WAAA;EACA,sBAAA;EACA,2BAAA;EACA,cAAA;C3D0+LL;A4DnmMD;EACE,mBAAA;C5DqmMD;A4DlmMD;EACE,mBAAA;EACA,iBAAA;EACA,YAAA;C5DomMD;A4DvmMD;EAMI,cAAA;EACA,mBAAA;EvD6KF,0CAAA;EACK,qCAAA;EACG,kCAAA;CLw7LT;A4D9mMD;;EAcM,eAAA;C5DomML;A4D1kMC;EAAA;IvDiKA,uDAAA;IAEK,6CAAA;IACG,uCAAA;IA7JR,oCAAA;IAEQ,4BAAA;IA+GR,4BAAA;IAEQ,oBAAA;GL69LP;E4DxmMG;;IvDmHJ,2CAAA;IACQ,mCAAA;IuDjHF,QAAA;G5D2mML;E4DzmMG;;IvD8GJ,4CAAA;IACQ,oCAAA;IuD5GF,QAAA;G5D4mML;E4D1mMG;;;IvDyGJ,wCAAA;IACQ,gCAAA;IuDtGF,QAAA;G5D6mML;CACF;A4DnpMD;;;EA6CI,eAAA;C5D2mMH;A4DxpMD;EAiDI,QAAA;C5D0mMH;A4D3pMD;;EAsDI,mBAAA;EACA,OAAA;EACA,YAAA;C5DymMH;A4DjqMD;EA4DI,WAAA;C5DwmMH;A4DpqMD;EA+DI,YAAA;C5DwmMH;A4DvqMD;;EAmEI,QAAA;C5DwmMH;A4D3qMD;EAuEI,YAAA;C5DumMH;A4D9qMD;EA0EI,WAAA;C5DumMH;A4D/lMD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EtC9FA,aAAA;EAGA,0BAAA;EsC6FA,gBAAA;EACA,eAAA;EACA,mBAAA;EACA,0CAAA;C5DkmMD;A4D7lMC;EdlGE,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9CksMH;A4DjmMC;EACE,WAAA;EACA,SAAA;EdvGA,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9C2sMH;A4DnmMC;;EAEE,WAAA;EACA,eAAA;EACA,sBAAA;EtCtHF,aAAA;EAGA,0BAAA;CtB0tMD;A4DpoMD;;;;EAsCI,mBAAA;EACA,SAAA;EACA,kBAAA;EACA,WAAA;EACA,sBAAA;C5DomMH;A4D9oMD;;EA8CI,UAAA;EACA,mBAAA;C5DomMH;A4DnpMD;;EAmDI,WAAA;EACA,oBAAA;C5DomMH;A4DxpMD;;EAwDI,YAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;C5DomMH;A4D/lMG;EACE,iBAAA;C5DimML;A4D7lMG;EACE,iBAAA;C5D+lML;A4DrlMD;EACE,mBAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;C5DulMD;A4DhmMD;EAYI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;EACA,oBAAA;EACA,gBAAA;EAWA,0BAAA;EACA,mCAAA;C5D6kMH;A4D5mMD;EAkCI,UAAA;EACA,YAAA;EACA,aAAA;EACA,0BAAA;C5D6kMH;A4DtkMD;EACE,mBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,eAAA;EACA,mBAAA;EACA,0CAAA;C5DwkMD;A4DvkMC;EACE,kBAAA;C5DykMH;A4DhiMD;EAhCE;;;;IAKI,YAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;G5DkkMH;E4D1kMD;;IAYI,mBAAA;G5DkkMH;E4D9kMD;;IAgBI,oBAAA;G5DkkMH;E4D7jMD;IACE,UAAA;IACA,WAAA;IACA,qBAAA;G5D+jMD;E4D3jMD;IACE,aAAA;G5D6jMD;CACF;A6D3zMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,aAAA;EACA,eAAA;C7Dy1MH;A6Dv1MC;;;;;;;;;;;;;;;EACE,YAAA;C7Du2MH;AiC/2MD;E6BRE,eAAA;EACA,kBAAA;EACA,mBAAA;C9D03MD;AiCj3MD;EACE,wBAAA;CjCm3MD;AiCj3MD;EACE,uBAAA;CjCm3MD;AiC32MD;EACE,yBAAA;CjC62MD;AiC32MD;EACE,0BAAA;CjC62MD;AiC32MD;EACE,mBAAA;CjC62MD;AiC32MD;E8BzBE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,8BAAA;EACA,UAAA;C/Du4MD;AiCz2MD;EACE,yBAAA;CjC22MD;AiCp2MD;EACE,gBAAA;CjCs2MD;AgEv4MD;EACE,oBAAA;ChEy4MD;AgEn4MD;;;;ECdE,yBAAA;CjEu5MD;AgEl4MD;;;;;;;;;;;;EAYE,yBAAA;ChEo4MD;AgE73MD;EAAA;IChDE,0BAAA;GjEi7MC;EiEh7MD;IAAU,0BAAA;GjEm7MT;EiEl7MD;IAAU,8BAAA;GjEq7MT;EiEp7MD;;IACU,+BAAA;GjEu7MT;CACF;AgEv4MD;EAAA;IAFI,0BAAA;GhE64MD;CACF;AgEv4MD;EAAA;IAFI,2BAAA;GhE64MD;CACF;AgEv4MD;EAAA;IAFI,iCAAA;GhE64MD;CACF;AgEt4MD;EAAA;ICrEE,0BAAA;GjE+8MC;EiE98MD;IAAU,0BAAA;GjEi9MT;EiEh9MD;IAAU,8BAAA;GjEm9MT;EiEl9MD;;IACU,+BAAA;GjEq9MT;CACF;AgEh5MD;EAAA;IAFI,0BAAA;GhEs5MD;CACF;AgEh5MD;EAAA;IAFI,2BAAA;GhEs5MD;CACF;AgEh5MD;EAAA;IAFI,iCAAA;GhEs5MD;CACF;AgE/4MD;EAAA;IC1FE,0BAAA;GjE6+MC;EiE5+MD;IAAU,0BAAA;GjE++MT;EiE9+MD;IAAU,8BAAA;GjEi/MT;EiEh/MD;;IACU,+BAAA;GjEm/MT;CACF;AgEz5MD;EAAA;IAFI,0BAAA;GhE+5MD;CACF;AgEz5MD;EAAA;IAFI,2BAAA;GhE+5MD;CACF;AgEz5MD;EAAA;IAFI,iCAAA;GhE+5MD;CACF;AgEx5MD;EAAA;IC/GE,0BAAA;GjE2gNC;EiE1gND;IAAU,0BAAA;GjE6gNT;EiE5gND;IAAU,8BAAA;GjE+gNT;EiE9gND;;IACU,+BAAA;GjEihNT;CACF;AgEl6MD;EAAA;IAFI,0BAAA;GhEw6MD;CACF;AgEl6MD;EAAA;IAFI,2BAAA;GhEw6MD;CACF;AgEl6MD;EAAA;IAFI,iCAAA;GhEw6MD;CACF;AgEj6MD;EAAA;IC5HE,yBAAA;GjEiiNC;CACF;AgEj6MD;EAAA;ICjIE,yBAAA;GjEsiNC;CACF;AgEj6MD;EAAA;ICtIE,yBAAA;GjE2iNC;CACF;AgEj6MD;EAAA;IC3IE,yBAAA;GjEgjNC;CACF;AgE95MD;ECnJE,yBAAA;CjEojND;AgE35MD;EAAA;ICjKE,0BAAA;GjEgkNC;EiE/jND;IAAU,0BAAA;GjEkkNT;EiEjkND;IAAU,8BAAA;GjEokNT;EiEnkND;;IACU,+BAAA;GjEskNT;CACF;AgEz6MD;EACE,yBAAA;ChE26MD;AgEt6MD;EAAA;IAFI,0BAAA;GhE46MD;CACF;AgE16MD;EACE,yBAAA;ChE46MD;AgEv6MD;EAAA;IAFI,2BAAA;GhE66MD;CACF;AgE36MD;EACE,yBAAA;ChE66MD;AgEx6MD;EAAA;IAFI,iCAAA;GhE86MD;CACF;AgEv6MD;EAAA;ICpLE,yBAAA;GjE+lNC;CACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.333333px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #ffffff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #ffffff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #ffffff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #ffffff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #ffffff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #ffffff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #ffffff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 3;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n//\n// Note that as of 8.3, iOS doesn't support `datetime` or `week`.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n &.form-control {\n line-height: @input-height-base;\n }\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: @cursor-disabled;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n min-height: (@line-height-computed + @font-size-base);\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n.form-group-sm {\n .form-control {\n height: @input-height-small;\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n border-radius: @input-border-radius-small;\n }\n select.form-control {\n height: @input-height-small;\n line-height: @input-height-small;\n }\n textarea.form-control,\n select[multiple].form-control {\n height: auto;\n }\n .form-control-static {\n height: @input-height-small;\n min-height: (@line-height-computed + @font-size-small);\n padding: (@padding-small-vertical + 1) @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n }\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n.form-group-lg {\n .form-control {\n height: @input-height-large;\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n border-radius: @input-border-radius-large;\n }\n select.form-control {\n height: @input-height-large;\n line-height: @input-height-large;\n }\n textarea.form-control,\n select[multiple].form-control {\n height: auto;\n }\n .form-control-static {\n height: @input-height-large;\n min-height: (@line-height-computed + @font-size-large);\n padding: (@padding-large-vertical + 1) @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n & ~ .form-control-feedback {\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n }\n &.sr-only ~ .form-control-feedback {\n top: 0;\n }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-static {\n display: inline-block;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Re-override the feedback icon.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n right: floor((@grid-gutter-width / 2));\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n font-size: @font-size-large;\n }\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n font-size: @font-size-small;\n }\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline,\n &.radio label,\n &.checkbox label,\n &.radio-inline label,\n &.checkbox-inline label {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `<a>` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @btn-border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @btn-border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a&,\n button& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n > .panel-heading + .panel-collapse > .list-group {\n .list-group-item:first-child {\n .border-top-radius(0);\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: @panel-body-padding;\n padding-right: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n border-bottom-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-small;\n\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n",".reset-text() {\n font-family: @font-family-base;\n // We deliberately do NOT reset font-size.\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: @line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-base;\n\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~'0.6s ease-in-out');\n .backface-visibility(~'hidden');\n .perspective(1000px);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: -15px;\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: -15px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table !important; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]}
\ No newline at end of file diff --git a/public/admin/view/javascript/bootstrap/css/bootstrap.min.css b/public/admin/view/javascript/bootstrap/css/bootstrap.min.css new file mode 100644 index 0000000..d65c66b --- /dev/null +++ b/public/admin/view/javascript/bootstrap/css/bootstrap.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file diff --git a/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.eot b/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.eot Binary files differnew file mode 100644 index 0000000..b93a495 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.eot diff --git a/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.svg b/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="400" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" /> +<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode=" " /> +<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="433" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="162" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="72" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" /> +<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" /> +<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" /> +<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " /> +<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" /> +<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" /> +<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" /> +<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" /> +<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" /> +<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" /> +<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" /> +<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" /> +<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" /> +<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" /> +<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" /> +<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" /> +<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" /> +<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" /> +<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" /> +<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" /> +<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" /> +<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" /> +<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" /> +<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" /> +<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" /> +<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" /> +<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" /> +<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" /> +<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" /> +<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" /> +<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" /> +<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" /> +<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" /> +<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" /> +<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" /> +<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" /> +<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" /> +<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" /> +<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" /> +<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" /> +<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" /> +<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" /> +<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" /> +<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" /> +<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" /> +<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" /> +<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" /> +<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" /> +<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" /> +<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" /> +<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" /> +<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> +<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" /> +<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" /> +<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" /> +<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" /> +<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> +<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" /> +<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" /> +<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" /> +<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" /> +<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" /> +<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" /> +<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" /> +<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" /> +<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> +<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" /> +<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> +<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" /> +<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" /> +<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" /> +<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" /> +<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" /> +<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" /> +<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> +<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" /> +<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" /> +<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" /> +<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> +<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" /> +<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" /> +<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" /> +<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" /> +<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" /> +<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" /> +<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" /> +<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" /> +<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" /> +<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" /> +<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" /> +<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" /> +<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" /> +<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" /> +<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" /> +<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" /> +<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" /> +<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" /> +<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" /> +<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" /> +<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" /> +<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" /> +<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" /> +<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" /> +<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " /> +<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" /> +<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" /> +<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" /> +<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" /> +<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" /> +<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" /> +<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" /> +<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" /> +<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" /> +<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" /> +<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" /> +<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" /> +<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" /> +<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" /> +<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" /> +<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" /> +<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" /> +<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" /> +<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" /> +<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" /> +<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" /> +<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" /> +<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" /> +<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" /> +<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" /> +<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" /> +</font> +</defs></svg>
\ No newline at end of file diff --git a/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.ttf b/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.ttf Binary files differnew file mode 100644 index 0000000..1413fc6 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.ttf diff --git a/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.woff b/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.woff Binary files differnew file mode 100644 index 0000000..9e61285 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.woff diff --git a/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.woff2 Binary files differnew file mode 100644 index 0000000..64539b5 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/fonts/glyphicons-halflings-regular.woff2 diff --git a/public/admin/view/javascript/bootstrap/js/bootstrap.js b/public/admin/view/javascript/bootstrap/js/bootstrap.js new file mode 100644 index 0000000..b6ac8d9 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/js/bootstrap.js @@ -0,0 +1,2320 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.1 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.1 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.1' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.1 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.1' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.1 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.1' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var delta = direction == 'prev' ? -1 : 1 + var activeIndex = this.getItemIndex(active) + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.1 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.1' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true, + trigger: '[data-toggle="collapse"]' + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this }) + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.1 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.1' + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger('shown.bs.dropdown', relatedTarget) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if ((!isActive && e.which != 27) || (isActive && e.which == 27)) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.divider):visible a' + var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.3.1 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$backdrop = + this.isShown = null + this.scrollbarWidth = 0 + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.1' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + if (that.options.backdrop) that.adjustBackdrop() + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$element.find('.modal-dialog') // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + .off('click.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') + .prependTo(this.$element) + .on('click.dismiss.bs.modal', $.proxy(function (e) { + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus.call(this.$element[0]) + : this.hide.call(this) + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + if (this.options.backdrop) this.adjustBackdrop() + this.adjustDialog() + } + + Modal.prototype.adjustBackdrop = function () { + this.$backdrop + .css('height', 0) + .css('height', this.$element[0].scrollHeight) + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', '') + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.1 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = + this.options = + this.enabled = + this.timeout = + this.hoverState = + this.$element = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.1' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport) + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (self && self.$tip && self.$tip.is(':visible')) { + self.hoverState = 'in' + return + } + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var $container = this.options.container ? $(this.options.container) : this.$element.parent() + var containerDim = this.getPosition($container) + + placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top = offset.top + marginTop + offset.left = offset.left + marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) { + this.arrow() + .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isHorizontal ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = this.tip() + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var elOffset = isBody ? { top: 0, left: 0 } : $element.offset() + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + return (this.$tip = this.$tip || $(this.options.template)) + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + var selector = options && options.selector + + if (!data && option == 'destroy') return + if (selector) { + if (!data) $this.data('bs.tooltip', (data = {})) + if (!data[selector]) data[selector] = new Tooltip(this, options) + } else { + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + } + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.3.1 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.VERSION = '3.3.1' + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + } + + Popover.prototype.tip = function () { + if (!this.$tip) this.$tip = $(this.options.template) + return this.$tip + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + var selector = options && options.selector + + if (!data && option == 'destroy') return + if (selector) { + if (!data) $this.data('bs.popover', (data = {})) + if (!data[selector]) data[selector] = new Popover(this, options) + } else { + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + } + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover + + $.fn.popover = Plugin + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.3.1 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + var process = $.proxy(this.process, this) + + this.$body = $('body') + this.$scrollElement = $(element).is('body') ? $(window) : $(element) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target || '') + ' .nav li > a' + this.offsets = [] + this.targets = [] + this.activeTarget = null + this.scrollHeight = 0 + + this.$scrollElement.on('scroll.bs.scrollspy', process) + this.refresh() + this.process() + } + + ScrollSpy.VERSION = '3.3.1' + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + + ScrollSpy.prototype.refresh = function () { + var offsetMethod = 'offset' + var offsetBase = 0 + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position' + offsetBase = this.$scrollElement.scrollTop() + } + + this.offsets = [] + this.targets = [] + this.scrollHeight = this.getScrollHeight() + + var self = this + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#./.test(href) && $(href) + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + self.offsets.push(this[0]) + self.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.getScrollHeight() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activate(targets[i]) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + this.clear() + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + } + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy + + $.fn.scrollspy = Plugin + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + Plugin.call($spy, $spy.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.3.1 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + this.element = $(element) + } + + Tab.VERSION = '3.3.1' + + Tab.TRANSITION_DURATION = 150 + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.data('target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var $previous = $ul.find('.active:last a') + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }) + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }) + + $previous.trigger(hideEvent) + $this.trigger(showEvent) + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.closest('li'), $ul) + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }) + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length) + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false) + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu')) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab + + $.fn.tab = Plugin + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault() + Plugin.call($(this), 'show') + } + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.3.1 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = + this.unpin = + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.VERSION = '3.3.1' + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0, + target: window + } + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + var targetHeight = this.$target.height() + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null + var colliderTop = initializing ? scrollTop : position.top + var colliderHeight = initializing ? targetHeight : height + + if (offsetTop != null && colliderTop <= offsetTop) return 'top' + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + + return false + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var height = this.$element.height() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var scrollHeight = $('body').height() + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix + + $.fn.affix = Plugin + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom + if (data.offsetTop != null) data.offset.top = data.offsetTop + + Plugin.call($spy, data) + }) + }) + +}(jQuery); diff --git a/public/admin/view/javascript/bootstrap/js/bootstrap.min.js b/public/admin/view/javascript/bootstrap/js/bootstrap.min.js new file mode 100644 index 0000000..133aeec --- /dev/null +++ b/public/admin/view/javascript/bootstrap/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")), +d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/bootstrap/js/npm.js b/public/admin/view/javascript/bootstrap/js/npm.js new file mode 100644 index 0000000..bf6aa80 --- /dev/null +++ b/public/admin/view/javascript/bootstrap/js/npm.js @@ -0,0 +1,13 @@ +// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. +require('../../js/transition.js') +require('../../js/alert.js') +require('../../js/button.js') +require('../../js/carousel.js') +require('../../js/collapse.js') +require('../../js/dropdown.js') +require('../../js/modal.js') +require('../../js/tooltip.js') +require('../../js/popover.js') +require('../../js/scrollspy.js') +require('../../js/tab.js') +require('../../js/affix.js')
\ No newline at end of file diff --git a/public/admin/view/javascript/codemirror/lib/codemirror.css b/public/admin/view/javascript/codemirror/lib/codemirror.css new file mode 100644 index 0000000..4bd815e --- /dev/null +++ b/public/admin/view/javascript/codemirror/lib/codemirror.css @@ -0,0 +1,338 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; + color: black; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + white-space: nowrap; +} + +.CodeMirror-guttermarker { color: black; } +.CodeMirror-guttermarker-subtle { color: #999; } + +/* CURSOR */ + +.CodeMirror-cursor { + border-left: 1px solid black; + border-right: none; + width: 0; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.cm-fat-cursor .CodeMirror-cursor { + width: auto; + border: 0 !important; + background: #7e7; +} +.cm-fat-cursor div.CodeMirror-cursors { + z-index: 1; +} + +.cm-animate-fat-cursor { + width: auto; + border: 0; + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; + background-color: #7e7; +} +@-moz-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@-webkit-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} + +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror-overwrite .CodeMirror-cursor {} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-ruler { + border-left: 1px solid #ccc; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} +.cm-strikethrough {text-decoration: line-through;} + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3 {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +.CodeMirror-composing { border-bottom: 2px solid; } + +/* Default styles for common addons */ + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} +.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + position: relative; + overflow: hidden; + background: white; +} + +.CodeMirror-scroll { + overflow: scroll !important; /* Things will break if this is overridden */ + /* 30px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -30px; margin-right: -30px; + padding-bottom: 30px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; +} +.CodeMirror-sizer { + position: relative; + border-right: 30px solid transparent; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actual scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + min-height: 100%; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + display: inline-block; + vertical-align: top; + margin-bottom: -30px; + /* Hack to make IE7 behave */ + *zoom:1; + *display:inline; +} +.CodeMirror-gutter-wrapper { + position: absolute; + z-index: 4; + background: none !important; + border: none !important; +} +.CodeMirror-gutter-background { + position: absolute; + top: 0; bottom: 0; + z-index: 4; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} +.CodeMirror-gutter-wrapper { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.CodeMirror-lines { + cursor: text; + min-height: 1px; /* prevents collapsing before first draw */ +} +.CodeMirror pre { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; + -webkit-tap-highlight-color: transparent; + -webkit-font-variant-ligatures: none; + font-variant-ligatures: none; +} +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + overflow: auto; +} + +.CodeMirror-widget {} + +.CodeMirror-code { + outline: none; +} + +/* Force content-box sizing for the elements where we expect it */ +.CodeMirror-scroll, +.CodeMirror-sizer, +.CodeMirror-gutter, +.CodeMirror-gutters, +.CodeMirror-linenumber { + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.CodeMirror-cursor { position: absolute; } +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 3; +} +div.CodeMirror-dragcursors { + visibility: visible; +} + +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } +.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } + +.cm-searching { + background: #ffa; + background: rgba(255, 255, 0, .4); +} + +/* IE7 hack to prevent it from returning funny offsetTops on the spans */ +.CodeMirror span { *vertical-align: text-bottom; } + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} + +/* See issue #2901 */ +.cm-tab-wrap-hack:after { content: ''; } + +/* Help users use markselection to safely style text background */ +span.CodeMirror-selectedtext { background: none; } diff --git a/public/admin/view/javascript/codemirror/lib/codemirror.js b/public/admin/view/javascript/codemirror/lib/codemirror.js new file mode 100644 index 0000000..c56e147 --- /dev/null +++ b/public/admin/view/javascript/codemirror/lib/codemirror.js @@ -0,0 +1,8908 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// This is CodeMirror (http://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + module.exports = mod(); + else if (typeof define == "function" && define.amd) // AMD + return define([], mod); + else // Plain browser env + (this || window).CodeMirror = mod(); +})(function() { + "use strict"; + + // BROWSER SNIFFING + + // Kludges for bugs and behavior differences that can't be feature + // detected are enabled based on userAgent etc sniffing. + var userAgent = navigator.userAgent; + var platform = navigator.platform; + + var gecko = /gecko\/\d/i.test(userAgent); + var ie_upto10 = /MSIE \d/.test(userAgent); + var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); + var ie = ie_upto10 || ie_11up; + var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]); + var webkit = /WebKit\//.test(userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); + var chrome = /Chrome\//.test(userAgent); + var presto = /Opera\//.test(userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); + var phantom = /PhantomJS/.test(userAgent); + + var ios = /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); + var mac = ios || /Mac/.test(platform); + var chromeOS = /\bCrOS\b/.test(userAgent); + var windows = /win/i.test(platform); + + var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); + if (presto_version) presto_version = Number(presto_version[1]); + if (presto_version && presto_version >= 15) { presto = false; webkit = true; } + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); + var captureRightClick = gecko || (ie && ie_version >= 9); + + // Optimize some code when these features are not used. + var sawReadOnlySpans = false, sawCollapsedSpans = false; + + // EDITOR CONSTRUCTOR + + // A CodeMirror instance represents an editor. This is the object + // that user code is usually dealing with. + + function CodeMirror(place, options) { + if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); + + this.options = options = options ? copyObj(options) : {}; + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false); + setGuttersForLineNumbers(options); + + var doc = options.value; + if (typeof doc == "string") doc = new Doc(doc, options.mode, null, options.lineSeparator); + this.doc = doc; + + var input = new CodeMirror.inputStyles[options.inputStyle](this); + var display = this.display = new Display(place, doc, input); + display.wrapper.CodeMirror = this; + updateGutters(this); + themeChanged(this); + if (options.lineWrapping) + this.display.wrapper.className += " CodeMirror-wrap"; + if (options.autofocus && !mobile) display.input.focus(); + initScrollbars(this); + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), // stores highlight worker timeout + keySeq: null, // Unfinished key sequence + specialChars: null + }; + + var cm = this; + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20); + + registerEventHandlers(this); + ensureGlobalHandlers(); + + startOperation(this); + this.curOp.forceUpdate = true; + attachDoc(this, doc); + + if ((options.autofocus && !mobile) || cm.hasFocus()) + setTimeout(bind(onFocus, this), 20); + else + onBlur(this); + + for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) + optionHandlers[opt](this, options[opt], Init); + maybeUpdateLineNumberWidth(this); + if (options.finishInit) options.finishInit(this); + for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); + endOperation(this); + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && + getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") + display.lineDiv.style.textRendering = "auto"; + } + + // DISPLAY CONSTRUCTOR + + // The display handles the DOM integration, both for input reading + // and content drawing. It holds references to DOM nodes and + // display-related state. + + function Display(place, doc, input) { + var d = this; + this.input = input; + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + d.scrollbarFiller.setAttribute("cm-not-content", "true"); + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + d.gutterFiller.setAttribute("cm-not-content", "true"); + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = elt("div", null, "CodeMirror-code"); + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + d.cursorDiv = elt("div", null, "CodeMirror-cursors"); + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure"); + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none"); + // Moved around its parent to cover visible view. + d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + d.sizerWidth = null; + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + if (!webkit && !(gecko && mobile)) d.scroller.draggable = true; + + if (place) { + if (place.appendChild) place.appendChild(d.wrapper); + else place(d.wrapper); + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first; + d.reportedViewFrom = d.reportedViewTo = doc.first; + // Information about the rendered lines. + d.view = []; + d.renderedView = null; + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null; + // Empty space (in pixels) above the view + d.viewOffset = 0; + d.lastWrapHeight = d.lastWrapWidth = 0; + d.updateLineNumbers = null; + + d.nativeBarWidth = d.barHeight = d.barWidth = 0; + d.scrollbarsClipped = false; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false; + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + // True when shift is held down. + d.shift = false; + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null; + + d.activeTouch = null; + + input.init(d); + } + + // STATE UPDATES + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); + resetModeState(cm); + } + + function resetModeState(cm) { + cm.doc.iter(function(line) { + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + }); + cm.doc.frontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) regChange(cm); + } + + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap"); + cm.display.sizer.style.minWidth = ""; + cm.display.sizerWidth = null; + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap"); + findMaxLine(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function(){updateScrollbars(cm);}, 100); + } + + // Returns a function that estimates the height of a line, to use as + // first approximation until the line becomes visible (and is thus + // properly measurable). + function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function(line) { + if (lineIsHidden(cm.doc, line)) return 0; + + var widgetsHeight = 0; + if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; + } + + if (wrapping) + return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; + else + return widgetsHeight + th; + }; + } + + function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm); + doc.iter(function(line) { + var estHeight = est(line); + if (estHeight != line.height) updateLineHeight(line, estHeight); + }); + } + + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + + function guttersChanged(cm) { + updateGutters(cm); + regChange(cm); + setTimeout(function(){alignHorizontally(cm);}, 20); + } + + // Rebuild the gutter elements, ensure the margin to the left of the + // code matches their width. + function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters; + removeChildren(gutters); + for (var i = 0; i < specs.length; ++i) { + var gutterClass = specs[i]; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt; + gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = i ? "" : "none"; + updateGutterSpace(cm); + } + + function updateGutterSpace(cm) { + var width = cm.display.gutters.offsetWidth; + cm.display.sizer.style.marginLeft = width + "px"; + } + + // Compute the character length of a line, taking into account + // collapsed ranges (see markText) that might hide parts, and join + // other lines onto it. + function lineLength(line) { + if (line.height == 0) return 0; + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true); + cur = found.from.line; + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found = merged.find(0, true); + len -= cur.text.length - found.from.ch; + cur = found.to.line; + len += cur.text.length - found.to.ch; + } + return len; + } + + // Find the longest line in the document. + function findMaxLine(cm) { + var d = cm.display, doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(d.maxLine); + d.maxLineChanged = true; + doc.iter(function(line) { + var len = lineLength(line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // Make sure the gutters options contains the element + // "CodeMirror-linenumbers" when the lineNumbers option is true. + function setGuttersForLineNumbers(options) { + var found = indexOf(options.gutters, "CodeMirror-linenumbers"); + if (found == -1 && options.lineNumbers) { + options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); + } else if (found > -1 && !options.lineNumbers) { + options.gutters = options.gutters.slice(0); + options.gutters.splice(found, 1); + } + } + + // SCROLLBARS + + // Prepare DOM reads needed to update the scrollbars. Done in one + // shot to minimize update/measure roundtrips. + function measureForScrollbars(cm) { + var d = cm.display, gutterW = d.gutters.offsetWidth; + var docH = Math.round(cm.doc.height + paddingVert(cm.display)); + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + }; + } + + function NativeScrollbars(place, scroll, cm) { + this.cm = cm; + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); + place(vert); place(horiz); + + on(vert, "scroll", function() { + if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); + }); + on(horiz, "scroll", function() { + if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); + }); + + this.checkedZeroWidth = false; + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; + } + + NativeScrollbars.prototype = copyObj({ + update: function(measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1; + var needsV = measure.scrollHeight > measure.clientHeight + 1; + var sWidth = measure.nativeBarWidth; + + if (needsV) { + this.vert.style.display = "block"; + this.vert.style.bottom = needsH ? sWidth + "px" : "0"; + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = + Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; + } else { + this.vert.style.display = ""; + this.vert.firstChild.style.height = "0"; + } + + if (needsH) { + this.horiz.style.display = "block"; + this.horiz.style.right = needsV ? sWidth + "px" : "0"; + this.horiz.style.left = measure.barLeft + "px"; + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); + this.horiz.firstChild.style.width = + (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; + } else { + this.horiz.style.display = ""; + this.horiz.firstChild.style.width = "0"; + } + + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) this.zeroWidthHack(); + this.checkedZeroWidth = true; + } + + return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}; + }, + setScrollLeft: function(pos) { + if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; + if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz); + }, + setScrollTop: function(pos) { + if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; + if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert); + }, + zeroWidthHack: function() { + var w = mac && !mac_geMountainLion ? "12px" : "18px"; + this.horiz.style.height = this.vert.style.width = w; + this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; + this.disableHoriz = new Delayed; + this.disableVert = new Delayed; + }, + enableZeroWidthBar: function(bar, delay) { + bar.style.pointerEvents = "auto"; + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // left corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect(); + var elt = document.elementFromPoint(box.left + 1, box.bottom - 1); + if (elt != bar) bar.style.pointerEvents = "none"; + else delay.set(1000, maybeDisable); + } + delay.set(1000, maybeDisable); + }, + clear: function() { + var parent = this.horiz.parentNode; + parent.removeChild(this.horiz); + parent.removeChild(this.vert); + } + }, NativeScrollbars.prototype); + + function NullScrollbars() {} + + NullScrollbars.prototype = copyObj({ + update: function() { return {bottom: 0, right: 0}; }, + setScrollLeft: function() {}, + setScrollTop: function() {}, + clear: function() {} + }, NullScrollbars.prototype); + + CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; + + function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear(); + if (cm.display.scrollbars.addClass) + rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); + } + + cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function() { + if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0); + }); + node.setAttribute("cm-not-content", "true"); + }, function(pos, axis) { + if (axis == "horizontal") setScrollLeft(cm, pos); + else setScrollTop(cm, pos); + }, cm); + if (cm.display.scrollbars.addClass) + addClass(cm.display.wrapper, cm.display.scrollbars.addClass); + } + + function updateScrollbars(cm, measure) { + if (!measure) measure = measureForScrollbars(cm); + var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; + updateScrollbarsInner(cm, measure); + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) + updateHeightsInViewport(cm); + updateScrollbarsInner(cm, measureForScrollbars(cm)); + startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; + } + } + + // Re-synchronize the fake scrollbars with the actual size of the + // content. + function updateScrollbarsInner(cm, measure) { + var d = cm.display; + var sizes = d.scrollbars.update(measure); + + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; + d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent" + + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = sizes.bottom + "px"; + d.scrollbarFiller.style.width = sizes.right + "px"; + } else d.scrollbarFiller.style.display = ""; + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = sizes.bottom + "px"; + d.gutterFiller.style.width = measure.gutterWidth + "px"; + } else d.gutterFiller.style.display = ""; + } + + // Compute the lines that are visible in a given viewport (defaults + // the the current scroll position). viewport may contain top, + // height, and ensure (see op.scrollToPos) properties. + function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; + top = Math.floor(top - paddingTop(display)); + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; + if (ensureFrom < from) { + from = ensureFrom; + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); + to = ensureTo; + } + } + return {from: from, to: Math.max(to, from + 1)}; + } + + // LINE NUMBERS + + // Re-align line numbers and gutter marks to compensate for + // horizontal scrolling. + function alignHorizontally(cm) { + var display = cm.display, view = display.view; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, left = comp + "px"; + for (var i = 0; i < view.length; i++) if (!view[i].hidden) { + if (cm.options.fixedGutter && view[i].gutter) + view[i].gutter.style.left = left; + var align = view[i].alignable; + if (align) for (var j = 0; j < align.length; j++) + align[j].style.left = left; + } + if (cm.options.fixedGutter) + display.gutters.style.left = (comp + gutterW) + "px"; + } + + // Used to ensure that the line number gutter is still the right + // size for the current document size. Returns true when an update + // is needed. + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) return false; + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + updateGutterSpace(cm); + return true; + } + return false; + } + + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)); + } + + // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, + // but using getBoundingClientRect to get a sub-pixel-accurate + // result. + function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; + } + + // DISPLAY DRAWING + + function DisplayUpdate(cm, viewport, force) { + var display = cm.display; + + this.viewport = viewport; + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport); + this.editorIsHidden = !display.wrapper.offsetWidth; + this.wrapperHeight = display.wrapper.clientHeight; + this.wrapperWidth = display.wrapper.clientWidth; + this.oldDisplayWidth = displayWidth(cm); + this.force = force; + this.dims = getDimensions(cm); + this.events = []; + } + + DisplayUpdate.prototype.signal = function(emitter, type) { + if (hasHandler(emitter, type)) + this.events.push(arguments); + }; + DisplayUpdate.prototype.finish = function() { + for (var i = 0; i < this.events.length; i++) + signal.apply(null, this.events[i]); + }; + + function maybeClipScrollbars(cm) { + var display = cm.display; + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; + display.heightForcer.style.height = scrollGap(cm) + "px"; + display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; + display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; + display.scrollbarsClipped = true; + } + } + + // Does the actual updating of the line display. Bails out + // (returning false) when there is nothing to be done and forced is + // false. + function updateDisplayIfNeeded(cm, update) { + var display = cm.display, doc = cm.doc; + + if (update.editorIsHidden) { + resetView(cm); + return false; + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && + update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && + display.renderedView == display.view && countDirtyView(cm) == 0) + return false; + + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm); + update.dims = getDimensions(cm); + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size; + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, update.visible.to + cm.options.viewportMargin); + if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); + if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from); + to = visualLineEndNo(cm.doc, to); + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; + adjustView(cm, from, to); + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px"; + + var toUpdate = countDirtyView(cm); + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) + return false; + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var focused = activeElt(); + if (toUpdate > 4) display.lineDiv.style.display = "none"; + patchDisplay(cm, display.updateLineNumbers, update.dims); + if (toUpdate > 4) display.lineDiv.style.display = ""; + display.renderedView = display.view; + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv); + removeChildren(display.selectionDiv); + display.gutters.style.height = display.sizer.style.minHeight = 0; + + if (different) { + display.lastWrapHeight = update.wrapperHeight; + display.lastWrapWidth = update.wrapperWidth; + startWorker(cm, 400); + } + + display.updateLineNumbers = null; + + return true; + } + + function postUpdateDisplay(cm, update) { + var viewport = update.viewport; + + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) + viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport); + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) + break; + } + if (!updateDisplayIfNeeded(cm, update)) break; + updateHeightsInViewport(cm); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + } + + update.signal(cm, "update", cm); + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); + cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; + } + } + + function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport); + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm); + postUpdateDisplay(cm, update); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.finish(); + } + } + + function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px"; + cm.display.heightForcer.style.top = measure.docHeight + "px"; + cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"; + } + + // Read the actual heights of the rendered lines, and update their + // stored heights to match. + function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], height; + if (cur.hidden) continue; + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = cur.node.getBoundingClientRect(); + height = box.bottom - box.top; + } + var diff = cur.line.height - height; + if (height < 2) height = textHeight(display); + if (diff > .001 || diff < -.001) { + updateLineHeight(cur.line, height); + updateWidgetHeight(cur.line); + if (cur.rest) for (var j = 0; j < cur.rest.length; j++) + updateWidgetHeight(cur.rest[j]); + } + } + } + + // Read and store the height of line widgets associated with the + // given line. + function updateWidgetHeight(line) { + if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) + line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight; + } + + // Do a bulk-read of the DOM positions and sizes needed to draw the + // view, so that we don't interleave reading and writing to the DOM. + function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + var gutterLeft = d.gutters.clientLeft; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; + width[cm.options.gutters[i]] = n.clientWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth}; + } + + // Sync the actual display DOM structure with display.view, removing + // nodes for lines that are no longer in view, and creating the ones + // that are not there yet, and updating the ones that are out of + // date. + function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers; + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + node.style.display = "none"; + else + node.parentNode.removeChild(node); + return next; + } + + var view = display.view, lineN = display.viewFrom; + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (lineView.hidden) { + } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims); + container.insertBefore(node, cur); + } else { // Already drawn + while (cur != lineView.node) cur = rm(cur); + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber; + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; + updateLineForChanges(cm, lineView, lineN, dims); + } + if (updateNumber) { + removeChildren(lineView.lineNumber); + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); + } + cur = lineView.node.nextSibling; + } + lineN += lineView.size; + } + while (cur) cur = rm(cur); + } + + // When an aspect of a line changes, a string is added to + // lineView.changes. This updates the relevant part of the line's + // DOM structure. + function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j]; + if (type == "text") updateLineText(cm, lineView); + else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); + else if (type == "class") updateLineClasses(lineView); + else if (type == "widget") updateLineWidgets(cm, lineView, dims); + } + lineView.changes = null; + } + + // Lines with gutter elements, widgets or a background class need to + // be wrapped, and have the extra elements added to the wrapper div + function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative"); + if (lineView.text.parentNode) + lineView.text.parentNode.replaceChild(lineView.node, lineView.text); + lineView.node.appendChild(lineView.text); + if (ie && ie_version < 8) lineView.node.style.zIndex = 2; + } + return lineView.node; + } + + function updateLineBackground(lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; + if (cls) cls += " CodeMirror-linebackground"; + if (lineView.background) { + if (cls) lineView.background.className = cls; + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } + } else if (cls) { + var wrap = ensureLineWrapped(lineView); + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); + } + } + + // Wrapper around buildLineContent which will reuse the structure + // in display.externalMeasured when possible. + function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured; + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null; + lineView.measure = ext.measure; + return ext.built; + } + return buildLineContent(cm, lineView); + } + + // Redraw the line's text. Interacts with the background and text + // classes because the mode may output tokens that influence these + // classes. + function updateLineText(cm, lineView) { + var cls = lineView.text.className; + var built = getLineContent(cm, lineView); + if (lineView.text == lineView.node) lineView.node = built.pre; + lineView.text.parentNode.replaceChild(built.pre, lineView.text); + lineView.text = built.pre; + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass; + lineView.textClass = built.textClass; + updateLineClasses(lineView); + } else if (cls) { + lineView.text.className = cls; + } + } + + function updateLineClasses(lineView) { + updateLineBackground(lineView); + if (lineView.line.wrapClass) + ensureLineWrapped(lineView).className = lineView.line.wrapClass; + else if (lineView.node != lineView.text) + lineView.node.className = ""; + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; + lineView.text.className = textClass || ""; + } + + function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter); + lineView.gutter = null; + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground); + lineView.gutterBackground = null; + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView); + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, + "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + + "px; width: " + dims.gutterTotalWidth + "px"); + wrap.insertBefore(lineView.gutterBackground, lineView.text); + } + var markers = lineView.line.gutterMarkers; + if (cm.options.lineNumbers || markers) { + var wrap = ensureLineWrapped(lineView); + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"); + cm.display.input.setUneditable(gutterWrap); + wrap.insertBefore(gutterWrap, lineView.text); + if (lineView.line.gutterClass) + gutterWrap.className += " " + lineView.line.gutterClass; + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + + cm.display.lineNumInnerWidth + "px")); + if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; + if (found) + gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); + } + } + } + + function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) lineView.alignable = null; + for (var node = lineView.node.firstChild, next; node; node = next) { + var next = node.nextSibling; + if (node.className == "CodeMirror-linewidget") + lineView.node.removeChild(node); + } + insertLineWidgets(cm, lineView, dims); + } + + // Build a line's DOM representation from scratch + function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView); + lineView.text = lineView.node = built.pre; + if (built.bgClass) lineView.bgClass = built.bgClass; + if (built.textClass) lineView.textClass = built.textClass; + + updateLineClasses(lineView); + updateLineGutter(cm, lineView, lineN, dims); + insertLineWidgets(cm, lineView, dims); + return lineView.node; + } + + // A lineView may contain multiple logical lines (when merged by + // collapsed spans). The widgets for all of them need to be drawn. + function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); + if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) + insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); + } + + function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) return; + var wrap = ensureLineWrapped(lineView); + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); + if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); + positionLineWidget(widget, node, lineView, dims); + cm.display.input.setUneditable(node); + if (allowAbove && widget.above) + wrap.insertBefore(node, lineView.gutter || lineView.text); + else + wrap.appendChild(node); + signalLater(widget, "redraw"); + } + } + + function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + (lineView.alignable || (lineView.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; + } + } + + // POSITION OBJECT + + // A Pos instance represents a position within the text. + var Pos = CodeMirror.Pos = function(line, ch) { + if (!(this instanceof Pos)) return new Pos(line, ch); + this.line = line; this.ch = ch; + }; + + // Compare two positions, return 0 if they are the same, a negative + // number when a is less, and a positive number otherwise. + var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; + + function copyPos(x) {return Pos(x.line, x.ch);} + function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } + function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } + + // INPUT HANDLING + + function ensureFocus(cm) { + if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } + } + + // This will be set to a {lineWise: bool, text: [string]} object, so + // that, when pasting, we know what kind of selections the copied + // text was made out of. + var lastCopied = null; + + function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc; + cm.display.shift = false; + if (!sel) sel = doc.sel; + + var paste = cm.state.pasteIncoming || origin == "paste"; + var textLines = doc.splitLines(inserted), multiPaste = null + // When pasing N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.text.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.text.length == 0) { + multiPaste = []; + for (var i = 0; i < lastCopied.text.length; i++) + multiPaste.push(doc.splitLines(lastCopied.text[i])); + } + } else if (textLines.length == sel.ranges.length) { + multiPaste = map(textLines, function(l) { return [l]; }); + } + } + + // Normal behavior is to insert the new text into every selection + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i]; + var from = range.from(), to = range.to(); + if (range.empty()) { + if (deleted && deleted > 0) // Handle deletion + from = Pos(from.line, from.ch - deleted); + else if (cm.state.overwrite && !paste) // Handle overwrite + to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); + else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted) + from = to = Pos(from.line, 0) + } + var updateInput = cm.curOp.updateInput; + var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}; + makeChange(cm.doc, changeEvent); + signalLater(cm, "inputRead", cm, changeEvent); + } + if (inserted && !paste) + triggerElectric(cm, inserted); + + ensureCursorVisible(cm); + cm.curOp.updateInput = updateInput; + cm.curOp.typing = true; + cm.state.pasteIncoming = cm.state.cutIncoming = false; + } + + function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("text/plain"); + if (pasted) { + e.preventDefault(); + if (!cm.isReadOnly() && !cm.options.disableInput) + runInOp(cm, function() { applyTextInput(cm, pasted, 0, null, "paste"); }); + return true; + } + } + + function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) return; + var sel = cm.doc.sel; + + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i]; + if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) continue; + var mode = cm.getModeAt(range.head); + var indented = false; + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) + if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range.head.line, "smart"); + break; + } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) + indented = indentLine(cm, range.head.line, "smart"); + } + if (indented) signalLater(cm, "electricInput", cm, range.head.line); + } + } + + function copyableRanges(cm) { + var text = [], ranges = []; + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line; + var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; + ranges.push(lineRange); + text.push(cm.getRange(lineRange.anchor, lineRange.head)); + } + return {text: text, ranges: ranges}; + } + + function disableBrowserMagic(field) { + field.setAttribute("autocorrect", "off"); + field.setAttribute("autocapitalize", "off"); + field.setAttribute("spellcheck", "false"); + } + + // TEXTAREA INPUT STYLE + + function TextareaInput(cm) { + this.cm = cm; + // See input.poll and input.reset + this.prevInput = ""; + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false; + // Self-resetting timeout for the poller + this.polling = new Delayed(); + // Tracks when input.reset has punted to just putting a short + // string into the textarea instead of the full selection. + this.inaccurateSelection = false; + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false; + this.composing = null; + }; + + function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"); + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) te.style.width = "1000px"; + else te.setAttribute("wrap", "off"); + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) te.style.border = "1px solid black"; + disableBrowserMagic(te); + return div; + } + + TextareaInput.prototype = copyObj({ + init: function(display) { + var input = this, cm = this.cm; + + // Wraps and hides input textarea + var div = this.wrapper = hiddenTextarea(); + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + var te = this.textarea = div.firstChild; + display.wrapper.insertBefore(div, display.wrapper.firstChild); + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) te.style.width = "0px"; + + on(te, "input", function() { + if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null; + input.poll(); + }); + + on(te, "paste", function(e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return + + cm.state.pasteIncoming = true; + input.fastPoll(); + }); + + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) return + if (cm.somethingSelected()) { + lastCopied = {lineWise: false, text: cm.getSelections()}; + if (input.inaccurateSelection) { + input.prevInput = ""; + input.inaccurateSelection = false; + te.value = lastCopied.text.join("\n"); + selectInput(te); + } + } else if (!cm.options.lineWiseCopyCut) { + return; + } else { + var ranges = copyableRanges(cm); + lastCopied = {lineWise: true, text: ranges.text}; + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll); + } else { + input.prevInput = ""; + te.value = ranges.text.join("\n"); + selectInput(te); + } + } + if (e.type == "cut") cm.state.cutIncoming = true; + } + on(te, "cut", prepareCopyCut); + on(te, "copy", prepareCopyCut); + + on(display.scroller, "paste", function(e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) return; + cm.state.pasteIncoming = true; + input.focus(); + }); + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function(e) { + if (!eventInWidget(display, e)) e_preventDefault(e); + }); + + on(te, "compositionstart", function() { + var start = cm.getCursor("from"); + if (input.composing) input.composing.range.clear() + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) + }; + }); + on(te, "compositionend", function() { + if (input.composing) { + input.poll(); + input.composing.range.clear(); + input.composing = null; + } + }); + }, + + prepareSelection: function() { + // Redraw the selection and/or cursor + var cm = this.cm, display = cm.display, doc = cm.doc; + var result = prepareSelection(cm); + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)); + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)); + } + + return result; + }, + + showSelection: function(drawn) { + var cm = this.cm, display = cm.display; + removeChildrenAndAdd(display.cursorDiv, drawn.cursors); + removeChildrenAndAdd(display.selectionDiv, drawn.selection); + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px"; + this.wrapper.style.left = drawn.teLeft + "px"; + } + }, + + // Reset the input to correspond to the selection (or to be empty, + // when not typing and nothing is selected) + reset: function(typing) { + if (this.contextMenuPending) return; + var minimal, selected, cm = this.cm, doc = cm.doc; + if (cm.somethingSelected()) { + this.prevInput = ""; + var range = doc.sel.primary(); + minimal = hasCopyEvent && + (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); + var content = minimal ? "-" : selected || cm.getSelection(); + this.textarea.value = content; + if (cm.state.focused) selectInput(this.textarea); + if (ie && ie_version >= 9) this.hasSelection = content; + } else if (!typing) { + this.prevInput = this.textarea.value = ""; + if (ie && ie_version >= 9) this.hasSelection = null; + } + this.inaccurateSelection = minimal; + }, + + getField: function() { return this.textarea; }, + + supportsTouch: function() { return false; }, + + focus: function() { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + try { this.textarea.focus(); } + catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } + }, + + blur: function() { this.textarea.blur(); }, + + resetPosition: function() { + this.wrapper.style.top = this.wrapper.style.left = 0; + }, + + receivedFocus: function() { this.slowPoll(); }, + + // Poll for input changes, using the normal rate of polling. This + // runs as long as the editor is focused. + slowPoll: function() { + var input = this; + if (input.pollingFast) return; + input.polling.set(this.cm.options.pollInterval, function() { + input.poll(); + if (input.cm.state.focused) input.slowPoll(); + }); + }, + + // When an event has just come in that is likely to add or change + // something in the input textarea, we poll faster, to ensure that + // the change appears on the screen quickly. + fastPoll: function() { + var missed = false, input = this; + input.pollingFast = true; + function p() { + var changed = input.poll(); + if (!changed && !missed) {missed = true; input.polling.set(60, p);} + else {input.pollingFast = false; input.slowPoll();} + } + input.polling.set(20, p); + }, + + // Read input from the textarea, and update the document to match. + // When something is selected, it is present in the textarea, and + // selected (unless it is huge, in which case a placeholder is + // used). When nothing is selected, the cursor sits after previously + // seen text (can be empty), which is stored in prevInput (we must + // not reset the textarea when typing, because that breaks IME). + poll: function() { + var cm = this.cm, input = this.textarea, prevInput = this.prevInput; + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || !cm.state.focused || + (hasSelection(input) && !prevInput && !this.composing) || + cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) + return false; + + var text = input.value; + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) return false; + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || + mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset(); + return false; + } + + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0); + if (first == 0x200b && !prevInput) prevInput = "\u200b"; + if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo"); } + } + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; + + var self = this; + runInOp(cm, function() { + applyTextInput(cm, text.slice(same), prevInput.length - same, + null, self.composing ? "*compose" : null); + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) input.value = self.prevInput = ""; + else self.prevInput = text; + + if (self.composing) { + self.composing.range.clear(); + self.composing.range = cm.markText(self.composing.start, cm.getCursor("to"), + {className: "CodeMirror-composing"}); + } + }); + return true; + }, + + ensurePolled: function() { + if (this.pollingFast && this.poll()) this.pollingFast = false; + }, + + onKeyPress: function() { + if (ie && ie_version >= 9) this.hasSelection = null; + this.fastPoll(); + }, + + onContextMenu: function(e) { + var input = this, cm = input.cm, display = cm.display, te = input.textarea; + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || presto) return; // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu; + if (reset && cm.doc.sel.contains(pos) == -1) + operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); + + var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; + input.wrapper.style.cssText = "position: absolute" + var wrapperBox = input.wrapper.getBoundingClientRect() + te.style.cssText = "position: absolute; width: 30px; height: 30px; top: " + (e.clientY - wrapperBox.top - 5) + + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px; z-index: 1000; background: " + + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + + "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712) + display.input.focus(); + if (webkit) window.scrollTo(null, oldScrollY); + display.input.reset(); + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) te.value = input.prevInput = " "; + input.contextMenuPending = true; + display.selForContextMenu = cm.doc.sel; + clearTimeout(display.detectingSelectAll); + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected(); + var extval = "\u200b" + (selected ? te.value : ""); + te.value = "\u21da"; // Used to catch context-menu undo + te.value = extval; + input.prevInput = selected ? "" : "\u200b"; + te.selectionStart = 1; te.selectionEnd = extval.length; + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel; + } + } + function rehide() { + input.contextMenuPending = false; + input.wrapper.style.cssText = oldWrapperCSS + te.style.cssText = oldCSS; + if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || (ie && ie_version < 9)) prepareSelectAllHack(); + var i = 0, poll = function() { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && + te.selectionEnd > 0 && input.prevInput == "\u200b") + operation(cm, commands.selectAll)(cm); + else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500); + else display.input.reset(); + }; + display.detectingSelectAll = setTimeout(poll, 200); + } + } + + if (ie && ie_version >= 9) prepareSelectAllHack(); + if (captureRightClick) { + e_stop(e); + var mouseup = function() { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + }, + + readOnlyChanged: function(val) { + if (!val) this.reset(); + }, + + setUneditable: nothing, + + needsContentAttribute: false + }, TextareaInput.prototype); + + // CONTENTEDITABLE INPUT STYLE + + function ContentEditableInput(cm) { + this.cm = cm; + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; + this.polling = new Delayed(); + this.gracePeriod = false; + } + + ContentEditableInput.prototype = copyObj({ + init: function(display) { + var input = this, cm = input.cm; + var div = input.div = display.lineDiv; + disableBrowserMagic(div); + + on(div, "paste", function(e) { + if (!signalDOMEvent(cm, e)) handlePaste(e, cm); + }) + + on(div, "compositionstart", function(e) { + var data = e.data; + input.composing = {sel: cm.doc.sel, data: data, startData: data}; + if (!data) return; + var prim = cm.doc.sel.primary(); + var line = cm.getLine(prim.head.line); + var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length)); + if (found > -1 && found <= prim.head.ch) + input.composing.sel = simpleSelection(Pos(prim.head.line, found), + Pos(prim.head.line, found + data.length)); + }); + on(div, "compositionupdate", function(e) { + input.composing.data = e.data; + }); + on(div, "compositionend", function(e) { + var ours = input.composing; + if (!ours) return; + if (e.data != ours.startData && !/\u200b/.test(e.data)) + ours.data = e.data; + // Need a small delay to prevent other code (input event, + // selection polling) from doing damage when fired right after + // compositionend. + setTimeout(function() { + if (!ours.handled) + input.applyComposition(ours); + if (input.composing == ours) + input.composing = null; + }, 50); + }); + + on(div, "touchstart", function() { + input.forceCompositionEnd(); + }); + + on(div, "input", function() { + if (input.composing) return; + if (cm.isReadOnly() || !input.pollContent()) + runInOp(input.cm, function() {regChange(cm);}); + }); + + function onCopyCut(e) { + if (signalDOMEvent(cm, e)) return + if (cm.somethingSelected()) { + lastCopied = {lineWise: false, text: cm.getSelections()}; + if (e.type == "cut") cm.replaceSelection("", null, "cut"); + } else if (!cm.options.lineWiseCopyCut) { + return; + } else { + var ranges = copyableRanges(cm); + lastCopied = {lineWise: true, text: ranges.text}; + if (e.type == "cut") { + cm.operation(function() { + cm.setSelections(ranges.ranges, 0, sel_dontScroll); + cm.replaceSelection("", null, "cut"); + }); + } + } + // iOS exposes the clipboard API, but seems to discard content inserted into it + if (e.clipboardData && !ios) { + e.preventDefault(); + e.clipboardData.clearData(); + e.clipboardData.setData("text/plain", lastCopied.text.join("\n")); + } else { + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), te = kludge.firstChild; + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); + te.value = lastCopied.text.join("\n"); + var hadFocus = document.activeElement; + selectInput(te); + setTimeout(function() { + cm.display.lineSpace.removeChild(kludge); + hadFocus.focus(); + }, 50); + } + } + on(div, "copy", onCopyCut); + on(div, "cut", onCopyCut); + }, + + prepareSelection: function() { + var result = prepareSelection(this.cm, false); + result.focus = this.cm.state.focused; + return result; + }, + + showSelection: function(info, takeFocus) { + if (!info || !this.cm.display.view.length) return; + if (info.focus || takeFocus) this.showPrimarySelection(); + this.showMultipleSelections(info); + }, + + showPrimarySelection: function() { + var sel = window.getSelection(), prim = this.cm.doc.sel.primary(); + var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset); + var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset); + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && + cmp(minPos(curAnchor, curFocus), prim.from()) == 0 && + cmp(maxPos(curAnchor, curFocus), prim.to()) == 0) + return; + + var start = posToDOM(this.cm, prim.from()); + var end = posToDOM(this.cm, prim.to()); + if (!start && !end) return; + + var view = this.cm.display.view; + var old = sel.rangeCount && sel.getRangeAt(0); + if (!start) { + start = {node: view[0].measure.map[2], offset: 0}; + } else if (!end) { // FIXME dangerously hacky + var measure = view[view.length - 1].measure; + var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; + end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; + } + + try { var rng = range(start.node, start.offset, end.offset, end.node); } + catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && this.cm.state.focused) { + sel.collapse(start.node, start.offset); + if (!rng.collapsed) sel.addRange(rng); + } else { + sel.removeAllRanges(); + sel.addRange(rng); + } + if (old && sel.anchorNode == null) sel.addRange(old); + else if (gecko) this.startGracePeriod(); + } + this.rememberSelection(); + }, + + startGracePeriod: function() { + var input = this; + clearTimeout(this.gracePeriod); + this.gracePeriod = setTimeout(function() { + input.gracePeriod = false; + if (input.selectionChanged()) + input.cm.operation(function() { input.cm.curOp.selectionChanged = true; }); + }, 20); + }, + + showMultipleSelections: function(info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); + }, + + rememberSelection: function() { + var sel = window.getSelection(); + this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; + this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; + }, + + selectionInEditor: function() { + var sel = window.getSelection(); + if (!sel.rangeCount) return false; + var node = sel.getRangeAt(0).commonAncestorContainer; + return contains(this.div, node); + }, + + focus: function() { + if (this.cm.options.readOnly != "nocursor") this.div.focus(); + }, + blur: function() { this.div.blur(); }, + getField: function() { return this.div; }, + + supportsTouch: function() { return true; }, + + receivedFocus: function() { + var input = this; + if (this.selectionInEditor()) + this.pollSelection(); + else + runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; }); + + function poll() { + if (input.cm.state.focused) { + input.pollSelection(); + input.polling.set(input.cm.options.pollInterval, poll); + } + } + this.polling.set(this.cm.options.pollInterval, poll); + }, + + selectionChanged: function() { + var sel = window.getSelection(); + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || + sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; + }, + + pollSelection: function() { + if (!this.composing && !this.gracePeriod && this.selectionChanged()) { + var sel = window.getSelection(), cm = this.cm; + this.rememberSelection(); + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var head = domToPos(cm, sel.focusNode, sel.focusOffset); + if (anchor && head) runInOp(cm, function() { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); + if (anchor.bad || head.bad) cm.curOp.selectionChanged = true; + }); + } + }, + + pollContent: function() { + var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); + var from = sel.from(), to = sel.to(); + if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false; + + var fromIndex; + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + var fromLine = lineNo(display.view[0].line); + var fromNode = display.view[0].node; + } else { + var fromLine = lineNo(display.view[fromIndex].line); + var fromNode = display.view[fromIndex - 1].node.nextSibling; + } + var toIndex = findViewIndex(cm, to.line); + if (toIndex == display.view.length - 1) { + var toLine = display.viewTo - 1; + var toNode = display.lineDiv.lastChild; + } else { + var toLine = lineNo(display.view[toIndex + 1].line) - 1; + var toNode = display.view[toIndex + 1].node.previousSibling; + } + + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } + else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } + else break; + } + + var cutFront = 0, cutEnd = 0; + var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) + ++cutFront; + var newBot = lst(newText), oldBot = lst(oldText); + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), + oldBot.length - (oldText.length == 1 ? cutFront : 0)); + while (cutEnd < maxCutEnd && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) + ++cutEnd; + + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd); + newText[0] = newText[0].slice(cutFront); + + var chFrom = Pos(fromLine, cutFront); + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input"); + return true; + } + }, + + ensurePolled: function() { + this.forceCompositionEnd(); + }, + reset: function() { + this.forceCompositionEnd(); + }, + forceCompositionEnd: function() { + if (!this.composing || this.composing.handled) return; + this.applyComposition(this.composing); + this.composing.handled = true; + this.div.blur(); + this.div.focus(); + }, + applyComposition: function(composing) { + if (this.cm.isReadOnly()) + operation(this.cm, regChange)(this.cm) + else if (composing.data && composing.data != composing.startData) + operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel); + }, + + setUneditable: function(node) { + node.contentEditable = "false" + }, + + onKeyPress: function(e) { + e.preventDefault(); + if (!this.cm.isReadOnly()) + operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); + }, + + readOnlyChanged: function(val) { + this.div.contentEditable = String(val != "nocursor") + }, + + onContextMenu: nothing, + resetPosition: nothing, + + needsContentAttribute: true + }, ContentEditableInput.prototype); + + function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line); + if (!view || view.hidden) return null; + var line = getLine(cm.doc, pos.line); + var info = mapFromLineView(view, line, pos.line); + + var order = getOrder(line), side = "left"; + if (order) { + var partPos = getBidiPartAt(order, pos.ch); + side = partPos % 2 ? "right" : "left"; + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); + result.offset = result.collapse == "right" ? result.end : result.start; + return result; + } + + function badPos(pos, bad) { if (bad) pos.bad = true; return pos; } + + function domToPos(cm, node, offset) { + var lineNode; + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset]; + if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); + node = null; offset = 0; + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) return null; + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break; + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i]; + if (lineView.node == lineNode) + return locateNodeInLineView(lineView, node, offset); + } + } + + function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, bad = false; + if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true); + if (node == wrapper) { + bad = true; + node = wrapper.childNodes[offset]; + offset = 0; + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line; + return badPos(Pos(lineNo(line), line.text.length), bad); + } + } + + var textNode = node.nodeType == 3 ? node : null, topNode = node; + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild; + if (offset) offset = textNode.nodeValue.length; + } + while (topNode.parentNode != wrapper) topNode = topNode.parentNode; + var measure = lineView.measure, maps = measure.maps; + + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map = i < 0 ? measure.map : maps[i]; + for (var j = 0; j < map.length; j += 3) { + var curNode = map[j + 2]; + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); + var ch = map[j] + offset; + if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)]; + return Pos(line, ch); + } + } + } + } + var found = find(textNode, topNode, offset); + if (found) return badPos(found, bad); + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0); + if (found) + return badPos(Pos(found.line, found.ch - dist), bad); + else + dist += after.textContent.length; + } + for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1); + if (found) + return badPos(Pos(found.line, found.ch + dist), bad); + else + dist += after.textContent.length; + } + } + + function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", closing = false, lineSep = cm.doc.lineSeparator(); + function recognizeMarker(id) { return function(marker) { return marker.id == id; }; } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text"); + if (cmText != null) { + if (cmText == "") cmText = node.textContent.replace(/\u200b/g, ""); + text += cmText; + return; + } + var markerID = node.getAttribute("cm-marker"), range; + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); + if (found.length && (range = found[0].find())) + text += getBetween(cm.doc, range.from, range.to).join(lineSep); + return; + } + if (node.getAttribute("contenteditable") == "false") return; + for (var i = 0; i < node.childNodes.length; i++) + walk(node.childNodes[i]); + if (/^(pre|div|p)$/i.test(node.nodeName)) + closing = true; + } else if (node.nodeType == 3) { + var val = node.nodeValue; + if (!val) return; + if (closing) { + text += lineSep; + closing = false; + } + text += val; + } + } + for (;;) { + walk(from); + if (from == to) break; + from = from.nextSibling; + } + return text; + } + + CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; + + // SELECTION / CURSOR + + // Selection objects are immutable. A new one is created every time + // the selection changes. A selection is one or more non-overlapping + // (and non-touching) ranges, sorted, and an integer that indicates + // which one is the primary selection (the one that's scrolled into + // view, that getCursor returns, etc). + function Selection(ranges, primIndex) { + this.ranges = ranges; + this.primIndex = primIndex; + } + + Selection.prototype = { + primary: function() { return this.ranges[this.primIndex]; }, + equals: function(other) { + if (other == this) return true; + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; + for (var i = 0; i < this.ranges.length; i++) { + var here = this.ranges[i], there = other.ranges[i]; + if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; + } + return true; + }, + deepCopy: function() { + for (var out = [], i = 0; i < this.ranges.length; i++) + out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); + return new Selection(out, this.primIndex); + }, + somethingSelected: function() { + for (var i = 0; i < this.ranges.length; i++) + if (!this.ranges[i].empty()) return true; + return false; + }, + contains: function(pos, end) { + if (!end) end = pos; + for (var i = 0; i < this.ranges.length; i++) { + var range = this.ranges[i]; + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + return i; + } + return -1; + } + }; + + function Range(anchor, head) { + this.anchor = anchor; this.head = head; + } + + Range.prototype = { + from: function() { return minPos(this.anchor, this.head); }, + to: function() { return maxPos(this.anchor, this.head); }, + empty: function() { + return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; + } + }; + + // Take an unsorted, potentially overlapping set of ranges, and + // build a selection out of it. 'Consumes' ranges array (modifying + // it). + function normalizeSelection(ranges, primIndex) { + var prim = ranges[primIndex]; + ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); + primIndex = indexOf(ranges, prim); + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1]; + if (cmp(prev.to(), cur.from()) >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; + if (i <= primIndex) --primIndex; + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); + } + } + return new Selection(ranges, primIndex); + } + + function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0); + } + + // Most of the external API clips given positions to make sure they + // actually exist within the document. + function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} + function clipPos(doc, pos) { + if (pos.line < doc.first) return Pos(doc.first, 0); + var last = doc.first + doc.size - 1; + if (pos.line > last) return Pos(last, getLine(doc, last).text.length); + return clipToLen(pos, getLine(doc, pos.line).text.length); + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) return Pos(pos.line, linelen); + else if (ch < 0) return Pos(pos.line, 0); + else return pos; + } + function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} + function clipPosArray(doc, array) { + for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); + return out; + } + + // SELECTION UPDATES + + // The 'scroll' parameter given to many of these indicated whether + // the new cursor position should be scrolled into view after + // modifying the selection. + + // If shift is held or the extend flag is set, extends a range to + // include a given position (and optionally a second position). + // Otherwise, simply returns the range between the given positions. + // Used for cursor motion and such. + function extendRange(doc, range, head, other) { + if (doc.cm && doc.cm.display.shift || doc.extend) { + var anchor = range.anchor; + if (other) { + var posBefore = cmp(head, anchor) < 0; + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head; + head = other; + } else if (posBefore != (cmp(head, other) < 0)) { + head = other; + } + } + return new Range(anchor, head); + } else { + return new Range(other || head, head); + } + } + + // Extend the primary selection range, discard the rest. + function extendSelection(doc, head, other, options) { + setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); + } + + // Extend all selections (pos is an array of selections with length + // equal the number of selections) + function extendSelections(doc, heads, options) { + for (var out = [], i = 0; i < doc.sel.ranges.length; i++) + out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); + var newSel = normalizeSelection(out, doc.sel.primIndex); + setSelection(doc, newSel, options); + } + + // Updates a single range in the selection. + function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0); + ranges[i] = range; + setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); + } + + // Reset the selection to a single range. + function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options); + } + + // Give beforeSelectionChange handlers a change to influence a + // selection update. + function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + this.ranges = []; + for (var i = 0; i < ranges.length; i++) + this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)); + }, + origin: options && options.origin + }; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); + if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); + else return sel; + } + + function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done); + if (last && last.ranges) { + done[done.length - 1] = sel; + setSelectionNoUndo(doc, sel, options); + } else { + setSelection(doc, sel, options); + } + } + + // Set a new selection. + function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options); + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); + } + + function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + sel = filterSelectionChange(doc, sel, options); + + var bias = options && options.bias || + (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); + + if (!(options && options.scroll === false) && doc.cm) + ensureCursorVisible(doc.cm); + } + + function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) return; + + doc.sel = sel; + + if (doc.cm) { + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; + signalCursorActivity(doc.cm); + } + signalLater(doc, "cursorActivity", doc); + } + + // Verify that the selection does not partially select any atomic + // marked ranges. + function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); + } + + // Return a selection that does not partially select any atomic + // ranges. + function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); + var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) out = sel.ranges.slice(0, i); + out[i] = new Range(newAnchor, newHead); + } + } + return out ? normalizeSelection(out, sel.primIndex) : sel; + } + + function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line); + if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) break; + else {--i; continue;} + } + } + if (!m.atomic) continue; + + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), diff; + if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) + near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) + return skipAtomicInner(doc, near, pos, dir, mayClear); + } + + var far = m.find(dir < 0 ? -1 : 1); + if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) + far = movePos(doc, far, dir, far.line == pos.line ? line : null); + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null; + } + } + return pos; + } + + // Ensure a given position is not inside an atomic range. + function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1; + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || + skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); + if (!found) { + doc.cantEdit = true; + return Pos(doc.first, 0); + } + return found; + } + + function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) return clipPos(doc, Pos(pos.line - 1)); + else return null; + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) return Pos(pos.line + 1, 0); + else return null; + } else { + return new Pos(pos.line, pos.ch + dir); + } + } + + // SELECTION DRAWING + + function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()); + } + + function prepareSelection(cm, primary) { + var doc = cm.doc, result = {}; + var curFragment = result.cursors = document.createDocumentFragment(); + var selFragment = result.selection = document.createDocumentFragment(); + + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (primary === false && i == doc.sel.primIndex) continue; + var range = doc.sel.ranges[i]; + if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) continue; + var collapsed = range.empty(); + if (collapsed || cm.options.showCursorWhenSelecting) + drawSelectionCursor(cm, range.head, curFragment); + if (!collapsed) + drawSelectionRange(cm, range, selFragment); + } + return result; + } + + // Draws a cursor for the given range + function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); + cursor.style.left = pos.left + "px"; + cursor.style.top = pos.top + "px"; + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); + otherCursor.style.display = ""; + otherCursor.style.left = pos.other.left + "px"; + otherCursor.style.top = pos.other.top + "px"; + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } + } + + // Draws the given range as a highlighted selection + function drawSelectionRange(cm, range, output) { + var display = cm.display, doc = cm.doc; + var fragment = document.createDocumentFragment(); + var padding = paddingH(cm.display), leftSide = padding.left; + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; + + function add(left, top, width, bottom) { + if (top < 0) top = 0; + top = Math.round(top); + bottom = Math.round(bottom); + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + + "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + + "px; height: " + (bottom - top) + "px")); + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias); + } + + iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { + var leftPos = coords(from, "left"), rightPos, left, right; + if (from == to) { + rightPos = leftPos; + left = right = leftPos.left; + } else { + rightPos = coords(to - 1, "right"); + if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } + left = leftPos.left; + right = rightPos.right; + } + if (fromArg == null && from == 0) left = leftSide; + if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part + add(left, leftPos.top, null, leftPos.bottom); + left = leftSide; + if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); + } + if (toArg == null && to == lineLen) right = rightSide; + if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) + start = leftPos; + if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) + end = rightPos; + if (left < leftSide + 1) left = leftSide; + add(left, rightPos.top, right - left, rightPos.bottom); + }); + return {start: start, end: end}; + } + + var sFrom = range.from(), sTo = range.to(); + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch); + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); + var singleVLine = visualLine(fromLine) == visualLine(toLine); + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) + add(leftSide, leftEnd.bottom, null, rightStart.top); + } + + output.appendChild(fragment); + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) return; + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursorDiv.style.visibility = ""; + if (cm.options.cursorBlinkRate > 0) + display.blinker = setInterval(function() { + display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); + else if (cm.options.cursorBlinkRate < 0) + display.cursorDiv.style.visibility = "hidden"; + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) + cm.state.highlight.set(time, bind(highlightWorker, cm)); + } + + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.frontier < doc.first) doc.frontier = doc.first; + if (doc.frontier >= cm.display.viewTo) return; + var end = +new Date + cm.options.workTime; + var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); + var changedLines = []; + + doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { + if (doc.frontier >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength; + var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true); + line.styles = highlighted.styles; + var oldCls = line.styleClasses, newCls = highlighted.classes; + if (newCls) line.styleClasses = newCls; + else if (oldCls) line.styleClasses = null; + var ischange = !oldStyles || oldStyles.length != line.styles.length || + oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); + for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; + if (ischange) changedLines.push(doc.frontier); + line.stateAfter = tooLong ? state : copyState(doc.mode, state); + } else { + if (line.text.length <= cm.options.maxHighlightLength) + processLine(cm, line.text, state); + line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; + } + ++doc.frontier; + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true; + } + }); + if (changedLines.length) runInOp(cm, function() { + for (var i = 0; i < changedLines.length; i++) + regLineChange(cm, changedLines[i], "text"); + }); + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc; + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); + for (var search = n; search > lim; --search) { + if (search <= doc.first) return doc.first; + var line = getLine(doc, search - 1); + if (line.stateAfter && (!precise || search <= doc.frontier)) return search; + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + + function getStateBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display; + if (!doc.mode.startState) return true; + var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; + if (!state) state = startState(doc.mode); + else state = copyState(doc.mode, state); + doc.iter(pos, n, function(line) { + processLine(cm, line.text, state); + var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; + line.stateAfter = save ? copyState(doc.mode, state) : null; + ++pos; + }); + if (precise) doc.frontier = pos; + return state; + } + + // POSITION MEASUREMENT + + function paddingTop(display) {return display.lineSpace.offsetTop;} + function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} + function paddingH(display) { + if (display.cachedPaddingH) return display.cachedPaddingH; + var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; + var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; + if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; + return data; + } + + function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } + function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; + } + function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; + } + + // Ensure the lineView.wrapping.heights array is populated. This is + // an array of bottom offsets for the lines that make up a drawn + // line. When lineWrapping is on, there might be more than one + // height. + function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping; + var curWidth = wrapping && displayWidth(cm); + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = []; + if (wrapping) { + lineView.measure.width = curWidth; + var rects = lineView.text.firstChild.getClientRects(); + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1]; + if (Math.abs(cur.bottom - next.bottom) > 2) + heights.push((cur.bottom + next.top) / 2 - rect.top); + } + } + heights.push(rect.bottom - rect.top); + } + } + + // Find a line map (mapping character offsets to text nodes) and a + // measurement cache for the given line number. (A line view might + // contain multiple lines when collapsed ranges are present.) + function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + return {map: lineView.measure.map, cache: lineView.measure.cache}; + for (var i = 0; i < lineView.rest.length; i++) + if (lineView.rest[i] == line) + return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; + for (var i = 0; i < lineView.rest.length; i++) + if (lineNo(lineView.rest[i]) > lineN) + return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; + } + + // Render a line into the hidden node display.externalMeasured. Used + // when measurement is needed for a line that's not in the viewport. + function updateExternalMeasurement(cm, line) { + line = visualLine(line); + var lineN = lineNo(line); + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); + view.lineN = lineN; + var built = view.built = buildLineContent(cm, view); + view.text = built.pre; + removeChildrenAndAdd(cm.display.lineMeasure, built.pre); + return view; + } + + // Get a {top, bottom, left, right} box (in line-local coordinates) + // for a given character. + function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); + } + + // Find a line view that corresponds to the given line number. + function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + return cm.display.view[findViewIndex(cm, lineN)]; + var ext = cm.display.externalMeasured; + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + return ext; + } + + // Measurement can be split in two steps, the set-up work that + // applies to the whole line, and the measurement of the actual + // character. Functions like coordsChar, that need to do a lot of + // measurements in a row, can thus ensure that the set-up work is + // only done once. + function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line); + var view = findViewForLine(cm, lineN); + if (view && !view.text) { + view = null; + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)); + cm.curOp.forceUpdate = true; + } + if (!view) + view = updateExternalMeasurement(cm, line); + + var info = mapFromLineView(view, line, lineN); + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + }; + } + + // Given a prepared measurement object, measures the position of an + // actual character (or fetches it from the cache). + function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) ch = -1; + var key = ch + (bias || ""), found; + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key]; + } else { + if (!prepared.rect) + prepared.rect = prepared.view.text.getBoundingClientRect(); + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect); + prepared.hasHeights = true; + } + found = measureCharInner(cm, prepared, ch, bias); + if (!found.bogus) prepared.cache[key] = found; + } + return {left: found.left, right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom}; + } + + var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; + + function nodeAndOffsetInLineMap(map, ch, bias) { + var node, start, end, collapse; + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + var mStart = map[i], mEnd = map[i + 1]; + if (ch < mStart) { + start = 0; end = 1; + collapse = "left"; + } else if (ch < mEnd) { + start = ch - mStart; + end = start + 1; + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart; + start = end - 1; + if (ch >= mEnd) collapse = "right"; + } + if (start != null) { + node = map[i + 2]; + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + collapse = bias; + if (bias == "left" && start == 0) + while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2]; + collapse = "left"; + } + if (bias == "right" && start == mEnd - mStart) + while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2]; + collapse = "right"; + } + break; + } + } + return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}; + } + + function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); + var node = place.node, start = place.start, end = place.end, collapse = place.collapse; + + var rect; + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { + rect = node.parentNode.getBoundingClientRect(); + } else if (ie && cm.options.lineWrapping) { + var rects = range(node, start, end).getClientRects(); + if (rects.length) + rect = rects[bias == "right" ? rects.length - 1 : 0]; + else + rect = nullRect; + } else { + rect = range(node, start, end).getBoundingClientRect() || nullRect; + } + if (rect.left || rect.right || start == 0) break; + end = start; + start = start - 1; + collapse = "right"; + } + if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) collapse = bias = "right"; + var rects; + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + rect = rects[bias == "right" ? rects.length - 1 : 0]; + else + rect = node.getBoundingClientRect(); + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0]; + if (rSpan) + rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; + else + rect = nullRect; + } + + var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; + var mid = (rtop + rbot) / 2; + var heights = prepared.view.measure.heights; + for (var i = 0; i < heights.length - 1; i++) + if (mid < heights[i]) break; + var top = i ? heights[i - 1] : 0, bot = heights[i]; + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot}; + if (!rect.left && !rect.right) result.bogus = true; + if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } + + return result; + } + + // Work around problem with bounding client rects on ranges being + // returned incorrectly when zoomed on IE10 and below. + function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || + screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) + return rect; + var scaleX = screen.logicalXDPI / screen.deviceXDPI; + var scaleY = screen.logicalYDPI / screen.deviceYDPI; + return {left: rect.left * scaleX, right: rect.right * scaleX, + top: rect.top * scaleY, bottom: rect.bottom * scaleY}; + } + + function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {}; + lineView.measure.heights = null; + if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) + lineView.measure.caches[i] = {}; + } + } + + function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null; + removeChildren(cm.display.lineMeasure); + for (var i = 0; i < cm.display.view.length; i++) + clearLineMeasurementCacheFor(cm.display.view[i]); + } + + function clearCaches(cm) { + clearLineMeasurementCache(cm); + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; + if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; + cm.display.lineNumChars = null; + } + + function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } + function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } + + // Converts a {top, bottom, left, right} box from line-local + // coordinates into another coordinate system. Context may be one of + // "line", "div" (display.lineDiv), "local"/null (editor), "window", + // or "page". + function intoCoordSystem(cm, lineObj, rect, context) { + if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { + var size = widgetHeight(lineObj.widgets[i]); + rect.top += size; rect.bottom += size; + } + if (context == "line") return rect; + if (!context) context = "local"; + var yOff = heightAtLine(lineObj); + if (context == "local") yOff += paddingTop(cm.display); + else yOff -= cm.display.viewOffset; + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect; + } + + // Coverts a box from "div" coords to another coordinate system. + // Context may be "window", "page", "div", or "local"/null. + function fromCoordSystem(cm, coords, context) { + if (context == "div") return coords; + var left = coords.left, top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(); + top -= pageScrollY(); + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect(); + left += localBox.left; + top += localBox.top; + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; + } + + function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) lineObj = getLine(cm.doc, pos.line); + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); + } + + // Returns a box for a given cursor position, which may have an + // 'other' property containing the position of the secondary cursor + // on a bidi boundary. + function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); + if (right) m.left = m.right; else m.right = m.left; + return intoCoordSystem(cm, lineObj, m, context); + } + function getBidi(ch, partPos) { + var part = order[partPos], right = part.level % 2; + if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { + part = order[--partPos]; + ch = bidiRight(part) - (part.level % 2 ? 0 : 1); + right = true; + } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { + part = order[++partPos]; + ch = bidiLeft(part) - part.level % 2; + right = false; + } + if (right && ch == part.to && ch > part.from) return get(ch - 1); + return get(ch, right); + } + var order = getOrder(lineObj), ch = pos.ch; + if (!order) return get(ch); + var partPos = getBidiPartAt(order, ch); + var val = getBidi(ch, partPos); + if (bidiOther != null) val.other = getBidi(ch, bidiOther); + return val; + } + + // Used to cheaply estimate the coordinates for a position. Used for + // intermediate scroll updates. + function estimateCoords(cm, pos) { + var left = 0, pos = clipPos(cm.doc, pos); + if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; + var lineObj = getLine(cm.doc, pos.line); + var top = heightAtLine(lineObj) + paddingTop(cm.display); + return {left: left, right: left, top: top, bottom: top + lineObj.height}; + } + + // Positions returned by coordsChar contain some extra information. + // xRel is the relative x position of the input coordinates compared + // to the found position (so xRel > 0 means the coordinates are to + // the right of the character position, for example). When outside + // is true, that means the coordinates lie outside the line's + // vertical range. + function PosWithInfo(line, ch, outside, xRel) { + var pos = Pos(line, ch); + pos.xRel = xRel; + if (outside) pos.outside = true; + return pos; + } + + // Compute the character position closest to the given coordinates. + // Input must be lineSpace-local ("div" coordinate system). + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) return PosWithInfo(doc.first, 0, true, -1); + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; + if (lineN > last) + return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); + if (x < 0) x = 0; + + var lineObj = getLine(doc, lineN); + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y); + var merged = collapsedSpanAtEnd(lineObj); + var mergedPos = merged && merged.find(0, true); + if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) + lineN = lineNo(lineObj = mergedPos.to.line); + else + return found; + } + } + + function coordsCharInner(cm, lineObj, lineNo, x, y) { + var innerOff = y - heightAtLine(lineObj); + var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; + var preparedMeasure = prepareMeasureForLine(cm, lineObj); + + function getX(ch) { + var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); + wrongLine = true; + if (innerOff > sp.bottom) return sp.left - adjust; + else if (innerOff < sp.top) return sp.left + adjust; + else wrongLine = false; + return sp.left; + } + + var bidi = getOrder(lineObj), dist = lineObj.text.length; + var from = lineLeft(lineObj), to = lineRight(lineObj); + var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; + + if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); + // Do a binary search between these bounds. + for (;;) { + if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { + var ch = x < fromX || x - fromX <= toX - x ? from : to; + var xDiff = x - (ch == from ? fromX : toX); + while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; + var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, + xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); + return pos; + } + var step = Math.ceil(dist / 2), middle = from + step; + if (bidi) { + middle = from; + for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); + } + var middleX = getX(middle); + if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} + else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} + } + } + + var measureText; + // Compute the default text height. + function textHeight(display) { + if (display.cachedTextHeight != null) return display.cachedTextHeight; + if (measureText == null) { + measureText = elt("pre"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) display.cachedTextHeight = height; + removeChildren(display.measure); + return height || 1; + } + + // Compute the default character width. + function charWidth(display) { + if (display.cachedCharWidth != null) return display.cachedCharWidth; + var anchor = elt("span", "xxxxxxxxxx"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(display.measure, pre); + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; + if (width > 2) display.cachedCharWidth = width; + return width || 10; + } + + // OPERATIONS + + // Operations are used to wrap a series of changes to the editor + // state in such a way that each change won't have to update the + // cursor and display (which would be awkward, slow, and + // error-prone). Instead, display updates are batched and then all + // combined and executed at once. + + var operationGroup = null; + + var nextOpId = 0; + // Start a new operation. + function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: null, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + focus: false, + id: ++nextOpId // Unique ID + }; + if (operationGroup) { + operationGroup.ops.push(cm.curOp); + } else { + cm.curOp.ownsGroup = operationGroup = { + ops: [cm.curOp], + delayedCallbacks: [] + }; + } + } + + function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, i = 0; + do { + for (; i < callbacks.length; i++) + callbacks[i].call(null); + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j]; + if (op.cursorActivityHandlers) + while (op.cursorActivityCalled < op.cursorActivityHandlers.length) + op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); + } + } while (i < callbacks.length); + } + + // Finish an operation, updating the display and signalling delayed events + function endOperation(cm) { + var op = cm.curOp, group = op.ownsGroup; + if (!group) return; + + try { fireCallbacksForOps(group); } + finally { + operationGroup = null; + for (var i = 0; i < group.ops.length; i++) + group.ops[i].cm.curOp = null; + endOperations(group); + } + } + + // The DOM updates done when an operation finishes are batched so + // that the minimum number of relayouts are required. + function endOperations(group) { + var ops = group.ops; + for (var i = 0; i < ops.length; i++) // Read DOM + endOperation_R1(ops[i]); + for (var i = 0; i < ops.length; i++) // Write DOM (maybe) + endOperation_W1(ops[i]); + for (var i = 0; i < ops.length; i++) // Read DOM + endOperation_R2(ops[i]); + for (var i = 0; i < ops.length; i++) // Write DOM (maybe) + endOperation_W2(ops[i]); + for (var i = 0; i < ops.length; i++) // Read DOM + endOperation_finish(ops[i]); + } + + function endOperation_R1(op) { + var cm = op.cm, display = cm.display; + maybeClipScrollbars(cm); + if (op.updateMaxLine) findMaxLine(cm); + + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping; + op.update = op.mustUpdate && + new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); + } + + function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); + } + + function endOperation_R2(op) { + var cm = op.cm, display = cm.display; + if (op.updatedDisplay) updateHeightsInViewport(cm); + + op.barMeasure = measureForScrollbars(cm); + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; + cm.display.sizerWidth = op.adjustWidthTo; + op.barMeasure.scrollWidth = + Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); + } + + if (op.updatedDisplay || op.selectionChanged) + op.preparedSelection = display.input.prepareSelection(op.focus); + } + + function endOperation_W2(op) { + var cm = op.cm; + + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; + if (op.maxScrollLeft < cm.doc.scrollLeft) + setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); + cm.display.maxLineChanged = false; + } + + var takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus()) + if (op.preparedSelection) + cm.display.input.showSelection(op.preparedSelection, takeFocus); + if (op.updatedDisplay || op.startHeight != cm.doc.height) + updateScrollbars(cm, op.barMeasure); + if (op.updatedDisplay) + setDocumentHeight(cm, op.barMeasure); + + if (op.selectionChanged) restartBlink(cm); + + if (cm.state.focused && op.updateInput) + cm.display.input.reset(op.typing); + if (takeFocus) ensureFocus(op.cm); + } + + function endOperation_finish(op) { + var cm = op.cm, display = cm.display, doc = cm.doc; + + if (op.updatedDisplay) postUpdateDisplay(cm, op.update); + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) + display.wheelStartX = display.wheelStartY = null; + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { + doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); + display.scrollbars.setScrollTop(doc.scrollTop); + display.scroller.scrollTop = doc.scrollTop; + } + if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { + doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft)); + display.scrollbars.setScrollLeft(doc.scrollLeft); + display.scroller.scrollLeft = doc.scrollLeft; + alignHorizontally(cm); + } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), + clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); + if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; + if (hidden) for (var i = 0; i < hidden.length; ++i) + if (!hidden[i].lines.length) signal(hidden[i], "hide"); + if (unhidden) for (var i = 0; i < unhidden.length; ++i) + if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); + + if (display.wrapper.offsetHeight) + doc.scrollTop = cm.display.scroller.scrollTop; + + // Fire change events, and delayed event handlers + if (op.changeObjs) + signal(cm, "changes", cm, op.changeObjs); + if (op.update) + op.update.finish(); + } + + // Run the given function in an operation + function runInOp(cm, f) { + if (cm.curOp) return f(); + startOperation(cm); + try { return f(); } + finally { endOperation(cm); } + } + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm, f) { + return function() { + if (cm.curOp) return f.apply(cm, arguments); + startOperation(cm); + try { return f.apply(cm, arguments); } + finally { endOperation(cm); } + }; + } + // Used to add methods to editor and doc instances, wrapping them in + // operations. + function methodOp(f) { + return function() { + if (this.curOp) return f.apply(this, arguments); + startOperation(this); + try { return f.apply(this, arguments); } + finally { endOperation(this); } + }; + } + function docMethodOp(f) { + return function() { + var cm = this.cm; + if (!cm || cm.curOp) return f.apply(this, arguments); + startOperation(cm); + try { return f.apply(this, arguments); } + finally { endOperation(cm); } + }; + } + + // VIEW TRACKING + + // These objects are used to represent the visible (currently drawn) + // part of the document. A LineView may correspond to multiple + // logical lines, if those are connected by collapsed ranges. + function LineView(doc, line, lineN) { + // The starting line + this.line = line; + // Continuing lines, if any + this.rest = visualLineContinued(line); + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; + this.node = this.text = null; + this.hidden = lineIsHidden(doc, line); + } + + // Create a range of LineView objects for the given lines. + function buildViewArray(cm, from, to) { + var array = [], nextPos; + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); + nextPos = pos + view.size; + array.push(view); + } + return array; + } + + // Updates the display.view data structure for a given change to the + // document. From and to are in pre-change coordinates. Lendiff is + // the amount of lines added or subtracted by the change. This is + // used for changes that span multiple lines, or change the way + // lines are divided into visual lines. regLineChange (below) + // registers single-line changes. + function regChange(cm, from, to, lendiff) { + if (from == null) from = cm.doc.first; + if (to == null) to = cm.doc.first + cm.doc.size; + if (!lendiff) lendiff = 0; + + var display = cm.display; + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + display.updateLineNumbers = from; + + cm.curOp.viewChanged = true; + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + resetView(cm); + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm); + } else { + display.viewFrom += lendiff; + display.viewTo += lendiff; + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm); + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cut) { + display.view = display.view.slice(cut.index); + display.viewFrom = cut.lineN; + display.viewTo += lendiff; + } else { + resetView(cm); + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut = viewCuttingPoint(cm, from, from, -1); + if (cut) { + display.view = display.view.slice(0, cut.index); + display.viewTo = cut.lineN; + } else { + resetView(cm); + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1); + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)); + display.viewTo += lendiff; + } else { + resetView(cm); + } + } + + var ext = display.externalMeasured; + if (ext) { + if (to < ext.lineN) + ext.lineN += lendiff; + else if (from < ext.lineN + ext.size) + display.externalMeasured = null; + } + } + + // Register a change to a single line. Type must be one of "text", + // "gutter", "class", "widget" + function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true; + var display = cm.display, ext = cm.display.externalMeasured; + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + display.externalMeasured = null; + + if (line < display.viewFrom || line >= display.viewTo) return; + var lineView = display.view[findViewIndex(cm, line)]; + if (lineView.node == null) return; + var arr = lineView.changes || (lineView.changes = []); + if (indexOf(arr, type) == -1) arr.push(type); + } + + // Clear the view. + function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first; + cm.display.view = []; + cm.display.viewOffset = 0; + } + + // Find the view element corresponding to a given line. Return null + // when the line isn't visible. + function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) return null; + n -= cm.display.viewFrom; + if (n < 0) return null; + var view = cm.display.view; + for (var i = 0; i < view.length; i++) { + n -= view[i].size; + if (n < 0) return i; + } + } + + function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view; + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) + return {index: index, lineN: newN}; + for (var i = 0, n = cm.display.viewFrom; i < index; i++) + n += view[i].size; + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) return null; + diff = (n + view[index].size) - oldN; + index++; + } else { + diff = n - oldN; + } + oldN += diff; newN += diff; + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) return null; + newN += dir * view[index - (dir < 0 ? 1 : 0)].size; + index += dir; + } + return {index: index, lineN: newN}; + } + + // Force the view to cover a given range, adding empty view element + // or clipping off existing ones as needed. + function adjustView(cm, from, to) { + var display = cm.display, view = display.view; + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to); + display.viewFrom = from; + } else { + if (display.viewFrom > from) + display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); + else if (display.viewFrom < from) + display.view = display.view.slice(findViewIndex(cm, from)); + display.viewFrom = from; + if (display.viewTo < to) + display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); + else if (display.viewTo > to) + display.view = display.view.slice(0, findViewIndex(cm, to)); + } + display.viewTo = to; + } + + // Count the number of lines in the view whose DOM representation is + // out of date (or nonexistent). + function countDirtyView(cm) { + var view = cm.display.view, dirty = 0; + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; + } + return dirty; + } + + // EVENT HANDLERS + + // Attach the necessary event handlers when initializing the editor + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) + on(d.scroller, "dblclick", operation(cm, function(e) { + if (signalDOMEvent(cm, e)) return; + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; + e_preventDefault(e); + var word = cm.findWordAt(pos); + extendSelection(cm.doc, word.anchor, word.head); + })); + else + on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); + + // Used to suppress mouse event handling when a touch happens + var touchFinished, prevTouch = {end: 0}; + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000); + prevTouch = d.activeTouch; + prevTouch.end = +new Date; + } + }; + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) return false; + var touch = e.touches[0]; + return touch.radiusX <= 1 && touch.radiusY <= 1; + } + function farAway(touch, other) { + if (other.left == null) return true; + var dx = other.left - touch.left, dy = other.top - touch.top; + return dx * dx + dy * dy > 20 * 20; + } + on(d.scroller, "touchstart", function(e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) { + clearTimeout(touchFinished); + var now = +new Date; + d.activeTouch = {start: now, moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null}; + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX; + d.activeTouch.top = e.touches[0].pageY; + } + } + }); + on(d.scroller, "touchmove", function() { + if (d.activeTouch) d.activeTouch.moved = true; + }); + on(d.scroller, "touchend", function(e) { + var touch = d.activeTouch; + if (touch && !eventInWidget(d, e) && touch.left != null && + !touch.moved && new Date - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), range; + if (!touch.prev || farAway(touch, touch.prev)) // Single tap + range = new Range(pos, pos); + else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap + range = cm.findWordAt(pos); + else // Triple tap + range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); + cm.setSelection(range.anchor, range.head); + cm.focus(); + e_preventDefault(e); + } + finishTouch(); + }); + on(d.scroller, "touchcancel", finishTouch); + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function() { + if (d.scroller.clientHeight) { + setScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); + on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + + d.dragFunctions = { + enter: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);}, + over: function(e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, + start: function(e){onDragStart(cm, e);}, + drop: operation(cm, onDrop), + leave: function(e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }} + }; + + var inp = d.input.getField(); + on(inp, "keyup", function(e) { onKeyUp.call(cm, e); }); + on(inp, "keydown", operation(cm, onKeyDown)); + on(inp, "keypress", operation(cm, onKeyPress)); + on(inp, "focus", bind(onFocus, cm)); + on(inp, "blur", bind(onBlur, cm)); + } + + function dragDropChanged(cm, value, old) { + var wasOn = old && old != CodeMirror.Init; + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions; + var toggle = value ? on : off; + toggle(cm.display.scroller, "dragstart", funcs.start); + toggle(cm.display.scroller, "dragenter", funcs.enter); + toggle(cm.display.scroller, "dragover", funcs.over); + toggle(cm.display.scroller, "dragleave", funcs.leave); + toggle(cm.display.scroller, "drop", funcs.drop); + } + } + + // Called when the window resizes + function onResize(cm) { + var d = cm.display; + if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) + return; + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + d.scrollbarsClipped = false; + cm.setSize(); + } + + // MOUSE EVENTS + + // Return true when the given mouse event happened in a widget + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || + (n.parentNode == display.sizer && n != display.mover)) + return true; + } + } + + // Given a mouse event, find the corresponding position. If liberal + // is false, it checks whether a gutter or scrollbar was clicked, + // and returns null if it was. forRect is used by rectangular + // selections, and tries to estimate a character position even for + // coordinates beyond the right of the text. + function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display; + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null; + + var x, y, space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top; } + catch (e) { return null; } + var coords = coordsChar(cm, x, y), line; + if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); + } + return coords; + } + + // A mouse down can be a single click, double click, triple click, + // start of selection drag, start of text drag, new cursor + // (ctrl-click), rectangle drag (alt-drag), or xwin + // middle-click-paste. Or it might be a click on something we should + // not interfere with, such as a scrollbar or widget. + function onMouseDown(e) { + var cm = this, display = cm.display; + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) return; + display.shift = e.shiftKey; + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false; + setTimeout(function(){display.scroller.draggable = true;}, 100); + } + return; + } + if (clickInGutter(cm, e)) return; + var start = posFromMouse(cm, e); + window.focus(); + + switch (e_button(e)) { + case 1: + // #3261: make sure, that we're not starting a second selection + if (cm.state.selectingText) + cm.state.selectingText(e); + else if (start) + leftButtonDown(cm, e, start); + else if (e_target(e) == display.scroller) + e_preventDefault(e); + break; + case 2: + if (webkit) cm.state.lastMiddleDown = +new Date; + if (start) extendSelection(cm.doc, start); + setTimeout(function() {display.input.focus();}, 20); + e_preventDefault(e); + break; + case 3: + if (captureRightClick) onContextMenu(cm, e); + else delayBlurEvent(cm); + break; + } + } + + var lastClick, lastDoubleClick; + function leftButtonDown(cm, e, start) { + if (ie) setTimeout(bind(ensureFocus, cm), 0); + else cm.curOp.focus = activeElt(); + + var now = +new Date, type; + if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { + type = "triple"; + } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { + type = "double"; + lastDoubleClick = {time: now, pos: start}; + } else { + type = "single"; + lastClick = {time: now, pos: start}; + } + + var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained; + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && + type == "single" && (contained = sel.contains(start)) > -1 && + (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) && + (cmp(contained.to(), start) > 0 || start.xRel < 0)) + leftButtonStartDrag(cm, e, start, modifier); + else + leftButtonSelect(cm, e, start, type, modifier); + } + + // Start a text drag. When it ends, see if any dragging actually + // happen, and treat as a click if it didn't. + function leftButtonStartDrag(cm, e, start, modifier) { + var display = cm.display, startTime = +new Date; + var dragEnd = operation(cm, function(e2) { + if (webkit) display.scroller.draggable = false; + cm.state.draggingText = false; + off(document, "mouseup", dragEnd); + off(display.scroller, "drop", dragEnd); + if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { + e_preventDefault(e2); + if (!modifier && +new Date - 200 < startTime) + extendSelection(cm.doc, start); + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if (webkit || ie && ie_version == 9) + setTimeout(function() {document.body.focus(); display.input.focus();}, 20); + else + display.input.focus(); + } + }); + // Let the drag handler handle this. + if (webkit) display.scroller.draggable = true; + cm.state.draggingText = dragEnd; + // IE's approach to draggable + if (display.scroller.dragDrop) display.scroller.dragDrop(); + on(document, "mouseup", dragEnd); + on(display.scroller, "drop", dragEnd); + } + + // Normal selection, as opposed to text dragging. + function leftButtonSelect(cm, e, start, type, addNew) { + var display = cm.display, doc = cm.doc; + e_preventDefault(e); + + var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; + if (addNew && !e.shiftKey) { + ourIndex = doc.sel.contains(start); + if (ourIndex > -1) + ourRange = ranges[ourIndex]; + else + ourRange = new Range(start, start); + } else { + ourRange = doc.sel.primary(); + ourIndex = doc.sel.primIndex; + } + + if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) { + type = "rect"; + if (!addNew) ourRange = new Range(start, start); + start = posFromMouse(cm, e, true, true); + ourIndex = -1; + } else if (type == "double") { + var word = cm.findWordAt(start); + if (cm.display.shift || doc.extend) + ourRange = extendRange(doc, ourRange, word.anchor, word.head); + else + ourRange = word; + } else if (type == "triple") { + var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); + if (cm.display.shift || doc.extend) + ourRange = extendRange(doc, ourRange, line.anchor, line.head); + else + ourRange = line; + } else { + ourRange = extendRange(doc, ourRange, start); + } + + if (!addNew) { + ourIndex = 0; + setSelection(doc, new Selection([ourRange], 0), sel_mouse); + startSel = doc.sel; + } else if (ourIndex == -1) { + ourIndex = ranges.length; + setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}); + } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { + setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), + {scroll: false, origin: "*mouse"}); + startSel = doc.sel; + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + } + + var lastPos = start; + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) return; + lastPos = pos; + + if (type == "rect") { + var ranges = [], tabSize = cm.options.tabSize; + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); + if (left == right) + ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); + else if (text.length > leftPos) + ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); + } + if (!ranges.length) ranges.push(new Range(start, start)); + setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), + {origin: "*mouse", scroll: false}); + cm.scrollIntoView(pos); + } else { + var oldRange = ourRange; + var anchor = oldRange.anchor, head = pos; + if (type != "single") { + if (type == "double") + var range = cm.findWordAt(pos); + else + var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); + if (cmp(range.anchor, anchor) > 0) { + head = range.head; + anchor = minPos(oldRange.from(), range.anchor); + } else { + head = range.anchor; + anchor = maxPos(oldRange.to(), range.head); + } + } + var ranges = startSel.ranges.slice(0); + ranges[ourIndex] = new Range(clipPos(doc, anchor), head); + setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); + } + } + + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true, type == "rect"); + if (!cur) return; + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt(); + extendTo(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) setTimeout(operation(cm, function() { + if (counter != curCount) return; + display.scroller.scrollTop += outside; + extend(e); + }), 50); + } + } + + function done(e) { + cm.state.selectingText = false; + counter = Infinity; + e_preventDefault(e); + display.input.focus(); + off(document, "mousemove", move); + off(document, "mouseup", up); + doc.history.lastSelOrigin = null; + } + + var move = operation(cm, function(e) { + if (!e_button(e)) done(e); + else extend(e); + }); + var up = operation(cm, done); + cm.state.selectingText = up; + on(document, "mousemove", move); + on(document, "mouseup", up); + } + + // Determines whether an event happened in the gutter, and fires the + // handlers for the corresponding event. + function gutterEvent(cm, e, type, prevent) { + try { var mX = e.clientX, mY = e.clientY; } + catch(e) { return false; } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; + if (prevent) e_preventDefault(e); + + var display = cm.display; + var lineBox = display.lineDiv.getBoundingClientRect(); + + if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.options.gutters[i]; + signal(cm, type, cm, line, gutter, e); + return e_defaultPrevented(e); + } + } + } + + function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true); + } + + // Kludge to work around strange IE behavior where it'll sometimes + // re-fire a series of drag-related events right after the drop (#1551) + var lastDrop = 0; + + function onDrop(e) { + var cm = this; + clearDragCursor(cm); + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + return; + e_preventDefault(e); + if (ie) lastDrop = +new Date; + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || cm.isReadOnly()) return; + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function(file, i) { + if (cm.options.allowDropFileTypes && + indexOf(cm.options.allowDropFileTypes, file.type) == -1) + return; + + var reader = new FileReader; + reader.onload = operation(cm, function() { + var content = reader.result; + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) content = ""; + text[i] = content; + if (++read == n) { + pos = clipPos(cm.doc, pos); + var change = {from: pos, to: pos, + text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), + origin: "paste"}; + makeChange(cm.doc, change); + setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); + } + }); + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) loadFile(files[i], i); + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(function() {cm.display.input.focus();}, 20); + return; + } + try { + var text = e.dataTransfer.getData("Text"); + if (text) { + if (cm.state.draggingText && !(mac ? e.altKey : e.ctrlKey)) + var selected = cm.listSelections(); + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); + if (selected) for (var i = 0; i < selected.length; ++i) + replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); + cm.replaceSelection(text, "around", "paste"); + cm.display.input.focus(); + } + } + catch(e){} + } + } + + function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; + + e.dataTransfer.setData("Text", cm.getSelection()); + e.dataTransfer.effectAllowed = "copyMove" + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (presto) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (presto) img.parentNode.removeChild(img); + } + } + + function onDragOver(cm, e) { + var pos = posFromMouse(cm, e); + if (!pos) return; + var frag = document.createDocumentFragment(); + drawSelectionCursor(cm, pos, frag); + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); + } + removeChildrenAndAdd(cm.display.dragCursor, frag); + } + + function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor); + cm.display.dragCursor = null; + } + } + + // SCROLL EVENTS + + // Sync the scrollable area and scrollbars, ensure the viewport + // covers the visible area. + function setScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) return; + cm.doc.scrollTop = val; + if (!gecko) updateDisplaySimple(cm, {top: val}); + if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; + cm.display.scrollbars.setScrollTop(val); + if (gecko) updateDisplaySimple(cm); + startWorker(cm, 100); + } + // Sync scroller and scrollbar, ensure the gutter elements are + // aligned. + function setScrollLeft(cm, val, isScroller) { + if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; + cm.display.scrollbars.setScrollLeft(val); + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) wheelPixelsPerUnit = -.53; + else if (gecko) wheelPixelsPerUnit = 15; + else if (chrome) wheelPixelsPerUnit = -.7; + else if (safari) wheelPixelsPerUnit = -1/3; + + var wheelEventDelta = function(e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; + else if (dy == null) dy = e.wheelDelta; + return {x: dx, y: dy}; + }; + CodeMirror.wheelEventPixels = function(e) { + var delta = wheelEventDelta(e); + delta.x *= wheelPixelsPerUnit; + delta.y *= wheelPixelsPerUnit; + return delta; + }; + + function onScrollWheel(cm, e) { + var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; + + var display = cm.display, scroll = display.scroller; + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth; + var canScrollY = scroll.scrollHeight > scroll.clientHeight; + if (!(dx && canScrollX || dy && canScrollY)) return; + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur; + break outer; + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { + if (dy && canScrollY) + setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); + setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || (dy && canScrollY)) + e_preventDefault(e); + display.wheelStartX = null; // Abort measurement, if in progress + return; + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit; + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; + if (pixels < 0) top = Math.max(0, top + pixels - 50); + else bot = Math.min(cm.doc.height, bot + pixels + 50); + updateDisplaySimple(cm, {top: top, bottom: bot}); + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; display.wheelDY = dy; + setTimeout(function() { + if (display.wheelStartX == null) return; + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX); + display.wheelStartX = display.wheelStartY = null; + if (!sample) return; + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; display.wheelDY += dy; + } + } + } + + // KEY EVENTS + + // Run a handler that was bound to a key. + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) return false; + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled(); + var prevShift = cm.display.shift, done = false; + try { + if (cm.isReadOnly()) cm.state.suppressEdits = true; + if (dropShift) cm.display.shift = false; + done = bound(cm) != Pass; + } finally { + cm.display.shift = prevShift; + cm.state.suppressEdits = false; + } + return done; + } + + function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); + if (result) return result; + } + return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) + || lookupKey(name, cm.options.keyMap, handle, cm); + } + + var stopSeq = new Delayed; + function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq; + if (seq) { + if (isModifierKey(name)) return "handled"; + stopSeq.set(50, function() { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null; + cm.display.input.reset(); + } + }); + name = seq + " " + name; + } + var result = lookupKeyForEditor(cm, name, handle); + + if (result == "multi") + cm.state.keySeq = name; + if (result == "handled") + signalLater(cm, "keyHandled", cm, name, e); + + if (result == "handled" || result == "multi") { + e_preventDefault(e); + restartBlink(cm); + } + + if (seq && !result && /\'$/.test(name)) { + e_preventDefault(e); + return true; + } + return !!result; + } + + // Handle a key from the keydown event. + function handleKeyBinding(cm, e) { + var name = keyName(e, true); + if (!name) return false; + + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);}) + || dispatchKey(cm, name, e, function(b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + return doHandleBinding(cm, b); + }); + } else { + return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); + } + } + + // Handle a key from the keypress event + function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, + function(b) { return doHandleBinding(cm, b, true); }); + } + + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + cm.curOp.focus = activeElt(); + if (signalDOMEvent(cm, e)) return; + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; + var code = e.keyCode; + cm.display.shift = code == 16 || e.shiftKey; + var handled = handleKeyBinding(cm, e); + if (presto) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + cm.replaceSelection("", null, "cut"); + } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) + showCrossHair(cm); + } + + function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv; + addClass(lineDiv, "CodeMirror-crosshair"); + + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair"); + off(document, "keyup", up); + off(document, "mouseover", up); + } + } + on(document, "keyup", up); + on(document, "mouseover", up); + } + + function onKeyUp(e) { + if (e.keyCode == 16) this.doc.sel.shift = false; + signalDOMEvent(this, e); + } + + function onKeyPress(e) { + var cm = this; + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; + var keyCode = e.keyCode, charCode = e.charCode; + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} + if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return; + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + if (handleCharBinding(cm, e, ch)) return; + cm.display.input.onKeyPress(e); + } + + // FOCUS/BLUR EVENTS + + function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true; + setTimeout(function() { + if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false; + onBlur(cm); + } + }, 100); + } + + function onFocus(cm) { + if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false; + + if (cm.options.readOnly == "nocursor") return; + if (!cm.state.focused) { + signal(cm, "focus", cm); + cm.state.focused = true; + addClass(cm.display.wrapper, "CodeMirror-focused"); + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset(); + if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730 + } + cm.display.input.receivedFocus(); + } + restartBlink(cm); + } + function onBlur(cm) { + if (cm.state.delayingBlurEvent) return; + + if (cm.state.focused) { + signal(cm, "blur", cm); + cm.state.focused = false; + rmClass(cm.display.wrapper, "CodeMirror-focused"); + } + clearInterval(cm.display.blinker); + setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); + } + + // CONTEXT MENU HANDLING + + // To make the context menu work, we need to briefly unhide the + // textarea (making it as unobtrusive as possible) to let the + // right-click take effect on it. + function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return; + if (signalDOMEvent(cm, e, "contextmenu")) return; + cm.display.input.onContextMenu(e); + } + + function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) return false; + return gutterEvent(cm, e, "gutterContextMenu", false); + } + + // UPDATING + + // Compute the position of the end of a change (its 'to' property + // refers to the pre-change end). + var changeEnd = CodeMirror.changeEnd = function(change) { + if (!change.text) return change.to; + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); + }; + + // Adjust a position to refer to the post-change position of the + // same text, or the end of the change if the change covers it. + function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) return pos; + if (cmp(pos, change.to) <= 0) return changeEnd(change); + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; + if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; + return Pos(line, ch); + } + + function computeSelAfterChange(doc, change) { + var out = []; + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))); + } + return normalizeSelection(out, doc.sel.primIndex); + } + + function offsetPos(pos, old, nw) { + if (pos.line == old.line) + return Pos(nw.line, pos.ch - old.ch + nw.ch); + else + return Pos(nw.line + (pos.line - old.line), pos.ch); + } + + // Used by replaceSelections to allow moving the selection to the + // start or around the replaced test. Hint may be "start" or "around". + function computeReplacedSel(doc, changes, hint) { + var out = []; + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + var from = offsetPos(change.from, oldPrev, newPrev); + var to = offsetPos(changeEnd(change), oldPrev, newPrev); + oldPrev = change.to; + newPrev = to; + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; + out[i] = new Range(inv ? to : from, inv ? from : to); + } else { + out[i] = new Range(from, from); + } + } + return new Selection(out, doc.sel.primIndex); + } + + // Allow "beforeChange" event handlers to influence a change + function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function() { this.canceled = true; } + }; + if (update) obj.update = function(from, to, text, origin) { + if (from) this.from = clipPos(doc, from); + if (to) this.to = clipPos(doc, to); + if (text) this.text = text; + if (origin !== undefined) this.origin = origin; + }; + signal(doc, "beforeChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); + + if (obj.canceled) return null; + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; + } + + // Apply a change to a document, and add it to the document's + // history, and propagating it to all linked documents. + function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); + if (doc.cm.state.suppressEdits) return; + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) return; + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 0; --i) + makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); + } else { + makeChangeInner(doc, change); + } + } + + function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; + var selAfter = computeSelAfterChange(doc, change); + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + // Revert a change stored in a document's history. + function makeChangeFromHistory(doc, type, allowSelectionOnly) { + if (doc.cm && doc.cm.state.suppressEdits) return; + + var hist = doc.history, event, selAfter = doc.sel; + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + for (var i = 0; i < source.length; i++) { + event = source[i]; + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + break; + } + if (i == source.length) return; + hist.lastOrigin = hist.lastSelOrigin = null; + + for (;;) { + event = source.pop(); + if (event.ranges) { + pushSelectionToHistory(event, dest); + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}); + return; + } + selAfter = event; + } + else break; + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = []; + pushSelectionToHistory(selAfter, dest); + dest.push({changes: antiChanges, generation: hist.generation}); + hist.generation = event.generation || ++hist.maxGeneration; + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + + for (var i = event.changes.length - 1; i >= 0; --i) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + source.length = 0; + return; + } + + antiChanges.push(historyChangeFromChange(doc, change)); + + var after = i ? computeSelAfterChange(doc, change) : lst(source); + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); + var rebased = []; + + // Propagate to the linked documents + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + } + } + + // Sub-views need their line numbers shifted when text is added + // above or below them in the parent document. + function shiftDoc(doc, distance) { + if (distance == 0) return; + doc.first += distance; + doc.sel = new Selection(map(doc.sel.ranges, function(range) { + return new Range(Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch)); + }), doc.sel.primIndex); + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance); + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) + regLineChange(doc.cm, l, "gutter"); + } + } + + // More lower-level change function, handling only a single document + // (not linked ones). + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return; + } + if (change.from.line > doc.lastLine()) return; + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin}; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin}; + } + + change.removed = getBetween(doc, change.from, change.to); + + if (!selAfter) selAfter = computeSelAfterChange(doc, change); + if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); + else updateDoc(doc, change, spans); + setSelectionNoUndo(doc, selAfter, sel_dontScroll); + } + + // Handle the interaction of a change to a document with the editor + // that this document is part of. + function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to; + + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function(line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true; + } + }); + } + + if (doc.sel.contains(change.from, change.to) > -1) + signalCursorActivity(cm); + + updateDoc(doc, change, spans, estimateHeight(cm)); + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function(line) { + var len = lineLength(line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) cm.curOp.updateMaxLine = true; + } + + // Adjust frontier, schedule worker + doc.frontier = Math.min(doc.frontier, from.line); + startWorker(cm, 400); + + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + if (change.full) + regChange(cm); + else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + regLineChange(cm, from.line, "text"); + else + regChange(cm, from.line, to.line + 1, lendiff); + + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); + if (changeHandler || changesHandler) { + var obj = { + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + }; + if (changeHandler) signalLater(cm, "change", cm, obj); + if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); + } + cm.display.selForContextMenu = null; + } + + function replaceRange(doc, code, from, to, origin) { + if (!to) to = from; + if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } + if (typeof code == "string") code = doc.splitLines(code); + makeChange(doc, {from: from, to: to, text: code, origin: origin}); + } + + // SCROLLING THINGS INTO VIEW + + // If an editor sits on the top or bottom of the window, partially + // scrolled out of view, this ensures that the cursor is visible. + function maybeScrollWindow(cm, coords) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) return; + + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; + if (coords.top + box.top < 0) doScroll = true; + else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + + (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + + (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " + + coords.left + "px; width: 2px;"); + cm.display.lineSpace.appendChild(scrollNode); + scrollNode.scrollIntoView(doScroll); + cm.display.lineSpace.removeChild(scrollNode); + } + } + + // Scroll a given position into view (immediately), verifying that + // it actually became visible (as line heights are accurately + // measured, the position of something may 'drift' during drawing). + function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) margin = 0; + for (var limit = 0; limit < 5; limit++) { + var changed = false, coords = cursorCoords(cm, pos); + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); + var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), + Math.min(coords.top, endCoords.top) - margin, + Math.max(coords.left, endCoords.left), + Math.max(coords.bottom, endCoords.bottom) + margin); + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + setScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; + } + if (!changed) break; + } + return coords; + } + + // Scroll a given set of coordinates into view (immediately). + function scrollIntoView(cm, x1, y1, x2, y2) { + var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); + if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); + if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); + } + + // Calculate a new scroll position needed to scroll the given + // rectangle into view. Returns an object with scrollTop and + // scrollLeft properties. When these are undefined, the + // vertical/horizontal position does not need to be adjusted. + function calculateScrollPos(cm, x1, y1, x2, y2) { + var display = cm.display, snapMargin = textHeight(cm.display); + if (y1 < 0) y1 = 0; + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; + var screen = displayHeight(cm), result = {}; + if (y2 - y1 > screen) y2 = y1 + screen; + var docBottom = cm.doc.height + paddingVert(display); + var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; + if (y1 < screentop) { + result.scrollTop = atTop ? 0 : y1; + } else if (y2 > screentop + screen) { + var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); + if (newTop != screentop) result.scrollTop = newTop; + } + + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; + var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); + var tooWide = x2 - x1 > screenw; + if (tooWide) x2 = x1 + screenw; + if (x1 < 10) + result.scrollLeft = 0; + else if (x1 < screenleft) + result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)); + else if (x2 > screenw + screenleft - 3) + result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw; + return result; + } + + // Store a relative adjustment to the scroll position in the current + // operation (to be applied when the operation finishes). + function addToScrollPos(cm, left, top) { + if (left != null || top != null) resolveScrollToPos(cm); + if (left != null) + cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; + if (top != null) + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; + } + + // Make sure that at the end of the operation the current cursor is + // shown. + function ensureCursorVisible(cm) { + resolveScrollToPos(cm); + var cur = cm.getCursor(), from = cur, to = cur; + if (!cm.options.lineWrapping) { + from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; + to = Pos(cur.line, cur.ch + 1); + } + cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; + } + + // When an operation has its scrollToPos property set, and another + // scroll action is applied before the end of the operation, this + // 'simulates' scrolling that position into view in a cheap way, so + // that the effect of intermediate scroll commands is not ignored. + function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos; + if (range) { + cm.curOp.scrollToPos = null; + var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); + var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), + Math.min(from.top, to.top) - range.margin, + Math.max(from.right, to.right), + Math.max(from.bottom, to.bottom) + range.margin); + cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); + } + } + + // API UTILITIES + + // Indent the given line. The how parameter can be "smart", + // "add"/null, "subtract", or "prev". When aggressive is false + // (typically set to true for forced single-line indents), empty + // lines are not indented, and places where the mode returns Pass + // are left alone. + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state; + if (how == null) how = "add"; + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) how = "prev"; + else state = getStateBefore(cm, n); + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + if (line.stateAfter) line.stateAfter = null; + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0; + how = "not"; + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass || indentation > 150) { + if (!aggressive) return; + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); + else indentation = 0; + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} + if (pos < indentation) indentString += spaceStr(indentation - pos); + + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + line.stateAfter = null; + return true; + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos = Pos(n, curSpaceString.length); + replaceOneSelection(doc, i, new Range(pos, pos)); + break; + } + } + } + } + + // Utility for applying a change to a line by handle or number, + // returning the number and optionally registering the line as + // changed. + function changeLine(doc, handle, changeType, op) { + var no = handle, line = handle; + if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); + else no = lineNo(handle); + if (no == null) return null; + if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType); + return line; + } + + // Helper for deleting text near the selection(s), used to implement + // backspace, delete, and similar functionality. + function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = []; + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]); + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop(); + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from; + break; + } + } + kill.push(toKill); + } + // Next, remove those actual ranges. + runInOp(cm, function() { + for (var i = kill.length - 1; i >= 0; i--) + replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); + ensureCursorVisible(cm); + }); + } + + // Used for horizontal relative motion. Dir is -1 or 1 (left or + // right), unit can be "char", "column" (like char, but doesn't + // cross line boundaries), "word" (across next word), or "group" (to + // the start of next group of word or non-word-non-whitespace + // chars). The visually param controls whether, in right-to-left + // text, direction 1 means to move towards the next index in the + // string, or towards the character to the right of the current + // position. The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosH(doc, pos, dir, unit, visually) { + var line = pos.line, ch = pos.ch, origDir = dir; + var lineObj = getLine(doc, line); + function findNextLine() { + var l = line + dir; + if (l < doc.first || l >= doc.first + doc.size) return false + line = l; + return lineObj = getLine(doc, l); + } + function moveOnce(boundToLine) { + var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); + if (next == null) { + if (!boundToLine && findNextLine()) { + if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); + else ch = dir < 0 ? lineObj.text.length : 0; + } else return false + } else ch = next; + return true; + } + + if (unit == "char") { + moveOnce() + } else if (unit == "column") { + moveOnce(true) + } else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group"; + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) break; + var cur = lineObj.text.charAt(ch) || "\n"; + var type = isWordChar(cur, helper) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p"; + if (group && !first && !type) type = "s"; + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce();} + break; + } + + if (type) sawType = type; + if (dir > 0 && !moveOnce(!first)) break; + } + } + var result = skipAtomic(doc, Pos(line, ch), pos, origDir, true); + if (!cmp(pos, result)) result.hitSide = true; + return result; + } + + // For relative vertical movement. Dir may be -1 or 1. Unit can be + // "page" or "line". The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + for (;;) { + var target = coordsChar(cm, x, y); + if (!target.outside) break; + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } + y += dir * 5; + } + return target; + } + + // EDITOR METHODS + + // The publicly visible API. Note that methodOp(f) means + // 'wrap f in an operation, performed on its `this` parameter'. + + // This is not the complete set of editor methods. Most of the + // methods defined on the Doc type are also injected into + // CodeMirror.prototype, for backwards compatibility and + // convenience. + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); this.display.input.focus();}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") return; + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + operation(this, optionHandlers[option])(this, value, old); + }, + + getOption: function(option) {return this.options[option];}, + getDoc: function() {return this.doc;}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) + if (maps[i] == map || maps[i].name == map) { + maps.splice(i, 1); + return true; + } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) throw new Error("Overlays may not be stateful."); + this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: methodOp(function(spec) { + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this.state.modeGen++; + regChange(this); + return; + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; + else dir = dir ? "add" : "subtract"; + } + if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); + }), + indentSelection: methodOp(function(how) { + var ranges = this.doc.sel.ranges, end = -1; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (!range.empty()) { + var from = range.from(), to = range.to(); + var start = Math.max(end, from.line); + end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; + for (var j = start; j < end; ++j) + indentLine(this, j, how); + var newRanges = this.doc.sel.ranges; + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) + replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); + } else if (range.head.line > end) { + indentLine(this, range.head.line, how, true); + end = range.head.line; + if (i == this.doc.sel.primIndex) ensureCursorVisible(this); + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + return takeToken(this, pos, precise); + }, + + getLineTokens: function(line, precise) { + return takeToken(this, Pos(line), precise, true); + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; + var type; + if (ch == 0) type = styles[2]; + else for (;;) { + var mid = (before + after) >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; + else if (styles[mid * 2 + 1] < ch) before = mid + 1; + else { type = styles[mid * 2 + 2]; break; } + } + var cut = type ? type.indexOf("cm-overlay ") : -1; + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); + }, + + getModeAt: function(pos) { + var mode = this.doc.mode; + if (!mode.innerMode) return mode; + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0]; + }, + + getHelpers: function(pos, type) { + var found = []; + if (!helpers.hasOwnProperty(type)) return found; + var help = helpers[type], mode = this.getModeAt(pos); + if (typeof mode[type] == "string") { + if (help[mode[type]]) found.push(help[mode[type]]); + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]]; + if (val) found.push(val); + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]); + } else if (help[mode.name]) { + found.push(help[mode.name]); + } + for (var i = 0; i < help._global.length; i++) { + var cur = help._global[i]; + if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) + found.push(cur.val); + } + return found; + }, + + getStateAfter: function(line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); + return getStateBefore(this, line + 1, precise); + }, + + cursorCoords: function(start, mode) { + var pos, range = this.doc.sel.primary(); + if (start == null) pos = range.head; + else if (typeof start == "object") pos = clipPos(this.doc, start); + else pos = start ? range.from() : range.to(); + return cursorCoords(this, pos, mode || "page"); + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page"); + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top); + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset); + }, + heightAtLine: function(line, mode) { + var end = false, lineObj; + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) line = this.doc.first; + else if (line > last) { line = last; end = true; } + lineObj = getLine(this.doc, line); + } else { + lineObj = line; + } + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + + (end ? this.doc.height - heightAtLine(lineObj) : 0); + }, + + defaultTextHeight: function() { return textHeight(this.display); }, + defaultCharWidth: function() { return charWidth(this.display); }, + + setGutterMarker: methodOp(function(line, gutterID, value) { + return changeLine(this.doc, line, "gutter", function(line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) line.gutterMarkers = null; + return true; + }); + }), + + clearGutter: methodOp(function(gutterID) { + var cm = this, doc = cm.doc, i = doc.first; + doc.iter(function(line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + line.gutterMarkers[gutterID] = null; + regLineChange(cm, i, "gutter"); + if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; + } + ++i; + }); + }), + + lineInfo: function(line) { + if (typeof line == "number") { + if (!isLine(this.doc, line)) return null; + var n = line; + line = getLine(this.doc, line); + if (!line) return null; + } else { + var n = lineNo(line); + if (n == null) return null; + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets}; + }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, left = pos.left; + node.style.position = "absolute"; + node.setAttribute("cm-ignore-events", "true"); + this.display.input.setUneditable(node); + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + top = pos.top - node.offsetHeight; + else if (pos.bottom + node.offsetHeight <= vspace) + top = pos.bottom; + if (left + node.offsetWidth > hspace) + left = hspace - node.offsetWidth; + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") left = 0; + else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; + node.style.left = left + "px"; + } + if (scroll) + scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + return commands[cmd].call(null, this); + }, + + triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), + + findPosH: function(from, amount, unit, visually) { + var dir = 1; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + cur = findPosH(this.doc, cur, dir, unit, visually); + if (cur.hitSide) break; + } + return cur; + }, + + moveH: methodOp(function(dir, unit) { + var cm = this; + cm.extendSelectionsBy(function(range) { + if (cm.display.shift || cm.doc.extend || range.empty()) + return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); + else + return dir < 0 ? range.from() : range.to(); + }, sel_move); + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc; + if (sel.somethingSelected()) + doc.replaceSelection("", null, "+delete"); + else + deleteNearSelection(this, function(range) { + var other = findPosH(doc, range.head, dir, unit, false); + return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; + }); + }), + + findPosV: function(from, amount, unit, goalColumn) { + var dir = 1, x = goalColumn; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + var coords = cursorCoords(this, cur, "div"); + if (x == null) x = coords.left; + else coords.left = x; + cur = findPosV(this, coords, dir, unit); + if (cur.hitSide) break; + } + return cur; + }, + + moveV: methodOp(function(dir, unit) { + var cm = this, doc = this.doc, goals = []; + var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); + doc.extendSelectionsBy(function(range) { + if (collapse) + return dir < 0 ? range.from() : range.to(); + var headPos = cursorCoords(cm, range.head, "div"); + if (range.goalColumn != null) headPos.left = range.goalColumn; + goals.push(headPos.left); + var pos = findPosV(cm, headPos, dir, unit); + if (unit == "page" && range == doc.sel.primary()) + addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); + return pos; + }, sel_move); + if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) + doc.sel.ranges[i].goalColumn = goals[i]; + }), + + // Find the word at the given position (as returned by coordsChar). + findWordAt: function(pos) { + var doc = this.doc, line = getLine(doc, pos.line).text; + var start = pos.ch, end = pos.ch; + if (line) { + var helper = this.getHelper(pos, "wordChars"); + if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; + var startChar = line.charAt(start); + var check = isWordChar(startChar, helper) + ? function(ch) { return isWordChar(ch, helper); } + : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} + : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; + while (start > 0 && check(line.charAt(start - 1))) --start; + while (end < line.length && check(line.charAt(end))) ++end; + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)); + }, + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) return; + if (this.state.overwrite = !this.state.overwrite) + addClass(this.display.cursorDiv, "CodeMirror-overwrite"); + else + rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); + + signal(this, "overwriteToggle", this, this.state.overwrite); + }, + hasFocus: function() { return this.display.input.getField() == activeElt(); }, + isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit); }, + + scrollTo: methodOp(function(x, y) { + if (x != null || y != null) resolveScrollToPos(this); + if (x != null) this.curOp.scrollLeft = x; + if (y != null) this.curOp.scrollTop = y; + }), + getScrollInfo: function() { + var scroller = this.display.scroller; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), clientWidth: displayWidth(this)}; + }, + + scrollIntoView: methodOp(function(range, margin) { + if (range == null) { + range = {from: this.doc.sel.primary().head, to: null}; + if (margin == null) margin = this.options.cursorScrollMargin; + } else if (typeof range == "number") { + range = {from: Pos(range, 0), to: null}; + } else if (range.from == null) { + range = {from: range, to: null}; + } + if (!range.to) range.to = range.from; + range.margin = margin || 0; + + if (range.from.line != null) { + resolveScrollToPos(this); + this.curOp.scrollToPos = range; + } else { + var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), + Math.min(range.from.top, range.to.top) - range.margin, + Math.max(range.from.right, range.to.right), + Math.max(range.from.bottom, range.to.bottom) + range.margin); + this.scrollTo(sPos.scrollLeft, sPos.scrollTop); + } + }), + + setSize: methodOp(function(width, height) { + var cm = this; + function interpret(val) { + return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; + } + if (width != null) cm.display.wrapper.style.width = interpret(width); + if (height != null) cm.display.wrapper.style.height = interpret(height); + if (cm.options.lineWrapping) clearLineMeasurementCache(this); + var lineNo = cm.display.viewFrom; + cm.doc.iter(lineNo, cm.display.viewTo, function(line) { + if (line.widgets) for (var i = 0; i < line.widgets.length; i++) + if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; } + ++lineNo; + }); + cm.curOp.forceUpdate = true; + signal(cm, "refresh", this); + }), + + operation: function(f){return runInOp(this, f);}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight; + regChange(this); + this.curOp.forceUpdate = true; + clearCaches(this); + this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); + updateGutterSpace(this); + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) + estimateLineHeights(this); + signal(this, "refresh", this); + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc; + old.cm = null; + attachDoc(this, doc); + clearCaches(this); + this.display.input.reset(); + this.scrollTo(doc.scrollLeft, doc.scrollTop); + this.curOp.forceScroll = true; + signalLater(this, "swapDoc", this, old); + return old; + }), + + getInputField: function(){return this.display.input.getField();}, + getWrapperElement: function(){return this.display.wrapper;}, + getScrollerElement: function(){return this.display.scroller;}, + getGutterElement: function(){return this.display.gutters;} + }; + eventMixin(CodeMirror); + + // OPTION DEFAULTS + + // The default configuration options. + var defaults = CodeMirror.defaults = {}; + // Functions to run when options are changed. + var optionHandlers = CodeMirror.optionHandlers = {}; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) optionHandlers[name] = + notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; + } + + // Passed to option handlers when there is no old value. + var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function(cm, val) { + cm.setValue(val); + }, true); + option("mode", null, function(cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function(cm) { + resetModeState(cm); + clearCaches(cm); + regChange(cm); + }, true); + option("lineSeparator", null, function(cm, val) { + cm.doc.lineSep = val; + if (!val) return; + var newBreaks = [], lineNo = cm.doc.first; + cm.doc.iter(function(line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos); + if (found == -1) break; + pos = found + val.length; + newBreaks.push(Pos(lineNo, found)); + } + lineNo++; + }); + for (var i = newBreaks.length - 1; i >= 0; i--) + replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) + }); + option("specialChars", /[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); + if (old != CodeMirror.Init) cm.refresh(); + }); + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); + option("electricChars", true); + option("inputStyle", mobile ? "contenteditable" : "textarea", function() { + throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME + }, true); + option("rtlMoveVisually", !windows); + option("wholeLineUpdateBefore", true); + + option("theme", "default", function(cm) { + themeChanged(cm); + guttersChanged(cm); + }, true); + option("keyMap", "default", function(cm, val, old) { + var next = getKeyMap(val); + var prev = old != CodeMirror.Init && getKeyMap(old); + if (prev && prev.detach) prev.detach(cm, next); + if (next.attach) next.attach(cm, prev || null); + }); + option("extraKeys", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("fixedGutter", true, function(cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true); + option("scrollbarStyle", "native", function(cm) { + initScrollbars(cm); + updateScrollbars(cm); + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); + }, true); + option("lineNumbers", false, function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("firstLineNumber", 1, guttersChanged, true); + option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("resetSelectionOnContextMenu", true); + option("lineWiseCopyCut", true); + + option("readOnly", false, function(cm, val) { + if (val == "nocursor") { + onBlur(cm); + cm.display.input.blur(); + cm.display.disabled = true; + } else { + cm.display.disabled = false; + } + cm.display.input.readOnlyChanged(val) + }); + option("disableInput", false, function(cm, val) {if (!val) cm.display.input.reset();}, true); + option("dragDrop", true, dragDropChanged); + option("allowDropFileTypes", null); + + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1, updateSelection, true); + option("singleCursorHeightPerLine", true, updateSelection, true); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true, resetModeState, true); + option("addModeClass", false, resetModeState, true); + option("pollInterval", 100); + option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); + option("historyEventDelay", 1250); + option("viewportMargin", 10, function(cm){cm.refresh();}, true); + option("maxHighlightLength", 10000, resetModeState, true); + option("moveInputWithCursor", true, function(cm, val) { + if (!val) cm.display.input.resetPosition(); + }); + + option("tabindex", null, function(cm, val) { + cm.display.input.getField().tabIndex = val || ""; + }); + option("autofocus", null); + + // MODE DEFINITION AND QUERYING + + // Known modes, by name and by MIME + var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + CodeMirror.defineMode = function(name, mode) { + if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; + if (arguments.length > 2) + mode.dependencies = Array.prototype.slice.call(arguments, 2); + modes[name] = mode; + }; + + CodeMirror.defineMIME = function(mime, spec) { + mimeModes[mime] = spec; + }; + + // Given a MIME type, a {name, ...options} config object, or a name + // string, return a mode config object. + CodeMirror.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + if (typeof found == "string") found = {name: found}; + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return CodeMirror.resolveMode("application/xml"); + } + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; + }; + + // Given a mode spec (anything that resolveMode accepts), find and + // initialize an actual mode object. + CodeMirror.getMode = function(options, spec) { + var spec = CodeMirror.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) return CodeMirror.getMode(options, "text/plain"); + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) continue; + if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) modeObj.helperType = spec.helperType; + if (spec.modeProps) for (var prop in spec.modeProps) + modeObj[prop] = spec.modeProps[prop]; + + return modeObj; + }; + + // Minimal default mode. + CodeMirror.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; + }); + CodeMirror.defineMIME("text/plain", "null"); + + // This can be used to attach properties to mode objects from + // outside the actual mode definition. + var modeExtensions = CodeMirror.modeExtensions = {}; + CodeMirror.extendMode = function(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); + }; + + // EXTENSIONS + + CodeMirror.defineExtension = function(name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function(name, func) { + Doc.prototype[name] = func; + }; + CodeMirror.defineOption = option; + + var initHooks = []; + CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; + + var helpers = CodeMirror.helpers = {}; + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; + helpers[type][name] = value; + }; + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value); + helpers[type]._global.push({pred: predicate, val: value}); + }; + + // MODE STATE HANDLING + + // Utility functions for working with state. Exported because nested + // modes need to do this for their inner modes. + + var copyState = CodeMirror.copyState = function(mode, state) { + if (state === true) return state; + if (mode.copyState) return mode.copyState(state); + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) val = val.concat([]); + nstate[n] = val; + } + return nstate; + }; + + var startState = CodeMirror.startState = function(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + }; + + // Given a mode and a state (for that mode), find the inner mode and + // state at the position that the state refers to. + CodeMirror.innerMode = function(mode, state) { + while (mode.innerMode) { + var info = mode.innerMode(state); + if (!info || info.mode == mode) break; + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state}; + }; + + // STANDARD COMMANDS + + // Commands are parameter-less actions that can be performed on an + // editor, mostly used for keybindings. + var commands = CodeMirror.commands = { + selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, + singleSelection: function(cm) { + cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); + }, + killLine: function(cm) { + deleteNearSelection(cm, function(range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length; + if (range.head.ch == len && range.head.line < cm.lastLine()) + return {from: range.head, to: Pos(range.head.line + 1, 0)}; + else + return {from: range.head, to: Pos(range.head.line, len)}; + } else { + return {from: range.from(), to: range.to()}; + } + }); + }, + deleteLine: function(cm) { + deleteNearSelection(cm, function(range) { + return {from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; + }); + }, + delLineLeft: function(cm) { + deleteNearSelection(cm, function(range) { + return {from: Pos(range.from().line, 0), to: range.from()}; + }); + }, + delWrappedLineLeft: function(cm) { + deleteNearSelection(cm, function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + var leftPos = cm.coordsChar({left: 0, top: top}, "div"); + return {from: leftPos, to: range.from()}; + }); + }, + delWrappedLineRight: function(cm) { + deleteNearSelection(cm, function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); + return {from: range.from(), to: rightPos }; + }); + }, + undo: function(cm) {cm.undo();}, + redo: function(cm) {cm.redo();}, + undoSelection: function(cm) {cm.undoSelection();}, + redoSelection: function(cm) {cm.redoSelection();}, + goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, + goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, + goLineStart: function(cm) { + cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, + {origin: "+move", bias: 1}); + }, + goLineStartSmart: function(cm) { + cm.extendSelectionsBy(function(range) { + return lineStartSmart(cm, range.head); + }, {origin: "+move", bias: 1}); + }, + goLineEnd: function(cm) { + cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, + {origin: "+move", bias: -1}); + }, + goLineRight: function(cm) { + cm.extendSelectionsBy(function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); + }, sel_move); + }, + goLineLeft: function(cm) { + cm.extendSelectionsBy(function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + return cm.coordsChar({left: 0, top: top}, "div"); + }, sel_move); + }, + goLineLeftSmart: function(cm) { + cm.extendSelectionsBy(function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + var pos = cm.coordsChar({left: 0, top: top}, "div"); + if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head); + return pos; + }, sel_move); + }, + goLineUp: function(cm) {cm.moveV(-1, "line");}, + goLineDown: function(cm) {cm.moveV(1, "line");}, + goPageUp: function(cm) {cm.moveV(-1, "page");}, + goPageDown: function(cm) {cm.moveV(1, "page");}, + goCharLeft: function(cm) {cm.moveH(-1, "char");}, + goCharRight: function(cm) {cm.moveH(1, "char");}, + goColumnLeft: function(cm) {cm.moveH(-1, "column");}, + goColumnRight: function(cm) {cm.moveH(1, "column");}, + goWordLeft: function(cm) {cm.moveH(-1, "word");}, + goGroupRight: function(cm) {cm.moveH(1, "group");}, + goGroupLeft: function(cm) {cm.moveH(-1, "group");}, + goWordRight: function(cm) {cm.moveH(1, "word");}, + delCharBefore: function(cm) {cm.deleteH(-1, "char");}, + delCharAfter: function(cm) {cm.deleteH(1, "char");}, + delWordBefore: function(cm) {cm.deleteH(-1, "word");}, + delWordAfter: function(cm) {cm.deleteH(1, "word");}, + delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, + delGroupAfter: function(cm) {cm.deleteH(1, "group");}, + indentAuto: function(cm) {cm.indentSelection("smart");}, + indentMore: function(cm) {cm.indentSelection("add");}, + indentLess: function(cm) {cm.indentSelection("subtract");}, + insertTab: function(cm) {cm.replaceSelection("\t");}, + insertSoftTab: function(cm) { + var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from(); + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); + spaces.push(spaceStr(tabSize - col % tabSize)); + } + cm.replaceSelections(spaces); + }, + defaultTab: function(cm) { + if (cm.somethingSelected()) cm.indentSelection("add"); + else cm.execCommand("insertTab"); + }, + transposeChars: function(cm) { + runInOp(cm, function() { + var ranges = cm.listSelections(), newSel = []; + for (var i = 0; i < ranges.length; i++) { + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; + if (line) { + if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1); + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), + Pos(cur.line, cur.ch - 2), cur, "+transpose"); + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text; + if (prev) + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + + prev.charAt(prev.length - 1), + Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose"); + } + } + newSel.push(new Range(cur, cur)); + } + cm.setSelections(newSel); + }); + }, + newlineAndIndent: function(cm) { + runInOp(cm, function() { + var len = cm.listSelections().length; + for (var i = 0; i < len; i++) { + var range = cm.listSelections()[i]; + cm.replaceRange(cm.doc.lineSeparator(), range.anchor, range.head, "+input"); + cm.indentLine(range.from().line + 1, null, true); + } + ensureCursorVisible(cm); + }); + }, + openLine: function(cm) {cm.replaceSelection("\n", "start")}, + toggleOverwrite: function(cm) {cm.toggleOverwrite();} + }; + + + // STANDARD KEYMAPS + + var keyMap = CodeMirror.keyMap = {}; + + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" + }; + // Note that the save and find-related commands aren't defined by + // default. User code or addons can define them. Unknown commands + // are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + fallthrough: "basic" + }; + // Very basic readline/emacs-style bindings, which are standard on Mac. + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", + "Ctrl-O": "openLine" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", + fallthrough: ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + + // KEYMAP DISPATCH + + function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/), name = parts[parts.length - 1]; + var alt, ctrl, shift, cmd; + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i]; + if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; + else if (/^a(lt)?$/i.test(mod)) alt = true; + else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; + else if (/^s(hift)$/i.test(mod)) shift = true; + else throw new Error("Unrecognized modifier name: " + mod); + } + if (alt) name = "Alt-" + name; + if (ctrl) name = "Ctrl-" + name; + if (cmd) name = "Cmd-" + name; + if (shift) name = "Shift-" + name; + return name; + } + + // This is a kludge to keep keymaps mostly working as raw objects + // (backwards compatibility) while at the same time support features + // like normalization and multi-stroke key bindings. It compiles a + // new normalized keymap, and then updates the old object to reflect + // this. + CodeMirror.normalizeKeyMap = function(keymap) { + var copy = {}; + for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname]; + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; + if (value == "...") { delete keymap[keyname]; continue; } + + var keys = map(keyname.split(" "), normalizeKeyName); + for (var i = 0; i < keys.length; i++) { + var val, name; + if (i == keys.length - 1) { + name = keys.join(" "); + val = value; + } else { + name = keys.slice(0, i + 1).join(" "); + val = "..."; + } + var prev = copy[name]; + if (!prev) copy[name] = val; + else if (prev != val) throw new Error("Inconsistent bindings for " + name); + } + delete keymap[keyname]; + } + for (var prop in copy) keymap[prop] = copy[prop]; + return keymap; + }; + + var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) { + map = getKeyMap(map); + var found = map.call ? map.call(key, context) : map[key]; + if (found === false) return "nothing"; + if (found === "...") return "multi"; + if (found != null && handle(found)) return "handled"; + + if (map.fallthrough) { + if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") + return lookupKey(key, map.fallthrough, handle, context); + for (var i = 0; i < map.fallthrough.length; i++) { + var result = lookupKey(key, map.fallthrough[i], handle, context); + if (result) return result; + } + } + }; + + // Modifier key presses don't count as 'real' key presses for the + // purpose of keymap fallthrough. + var isModifierKey = CodeMirror.isModifierKey = function(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + }; + + // Look up the name of a key as indicated by an event object. + var keyName = CodeMirror.keyName = function(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) return false; + var base = keyNames[event.keyCode], name = base; + if (name == null || event.altGraphKey) return false; + if (event.altKey && base != "Alt") name = "Alt-" + name; + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name; + if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; + return name; + }; + + function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val; + } + + // FROMTEXTAREA + + CodeMirror.fromTextArea = function(textarea, options) { + options = options ? copyObj(options) : {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabIndex) + options.tabindex = textarea.tabIndex; + if (!options.placeholder && textarea.placeholder) + options.placeholder = textarea.placeholder; + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt(); + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form, realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function() { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + } + + options.finishInit = function(cm) { + cm.save = save; + cm.getTextArea = function() { return textarea; }; + cm.toTextArea = function() { + cm.toTextArea = isNaN; // Prevent this from being ran twice + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (typeof textarea.form.submit == "function") + textarea.form.submit = realSubmit; + } + }; + }; + + textarea.style.display = "none"; + var cm = CodeMirror(function(node) { + textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + return cm; + }; + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + var StringStream = CodeMirror.StringStream = function(string, tabSize) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; + }; + + StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == this.lineStart;}, + peek: function() {return this.string.charAt(this.pos) || undefined;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }, + indentation: function() { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) return null; + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);}, + hideFirstChars: function(n, inner) { + this.lineStart += n; + try { return inner(); } + finally { this.lineStart -= n; } + } + }; + + // TEXTMARKERS + + // Created with markText and setBookmark methods. A TextMarker is a + // handle that can be used to clear or find a marked position in the + // document. Line objects hold arrays (markedSpans) containing + // {from, to, marker} object pointing to such marker objects, and + // indicating that such a marker is present on that line. Multiple + // lines may point to the same marker when it spans across lines. + // The spans will have null for their from/to properties when the + // marker continues beyond the start/end of the line. Markers have + // links back to the lines they currently touch. + + var nextMarkerId = 0; + + var TextMarker = CodeMirror.TextMarker = function(doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + this.id = ++nextMarkerId; + }; + eventMixin(TextMarker); + + // Clear the marker. + TextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + var cm = this.doc.cm, withOp = cm && !cm.curOp; + if (withOp) startOperation(cm); + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) signalLater(this, "clear", found.from, found.to); + } + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); + else if (cm) { + if (span.to != null) max = lineNo(line); + if (span.from != null) min = lineNo(line); + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) + updateLineHeight(line, textHeight(cm.display)); + } + if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { + var visual = visualLine(this.lines[i]), len = lineLength(visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } + + if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) reCheckSelection(cm.doc); + } + if (cm) signalLater(cm, "markerCleared", cm, this); + if (withOp) endOperation(cm); + if (this.parent) this.parent.clear(); + }; + + // Find the position of the marker in the document. Returns a {from, + // to} object by default. Side can be passed to get a specific side + // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the + // Pos objects returned contain a line object, rather than a line + // number (used to prevent looking up the same line twice). + TextMarker.prototype.find = function(side, lineObj) { + if (side == null && this.type == "bookmark") side = 1; + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from); + if (side == -1) return from; + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to); + if (side == 1) return to; + } + } + return from && {from: from, to: to}; + }; + + // Signals that the marker's widget changed, and surrounding layout + // should be recomputed. + TextMarker.prototype.changed = function() { + var pos = this.find(-1, true), widget = this, cm = this.doc.cm; + if (!pos || !cm) return; + runInOp(cm, function() { + var line = pos.line, lineN = lineNo(pos.line); + var view = findViewForLine(cm, lineN); + if (view) { + clearLineMeasurementCacheFor(view); + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; + } + cm.curOp.updateMaxLine = true; + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height; + widget.height = null; + var dHeight = widgetHeight(widget) - oldHeight; + if (dHeight) + updateLineHeight(line, line.height + dHeight); + } + }); + }; + + TextMarker.prototype.attachLine = function(line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); + } + this.lines.push(line); + }; + TextMarker.prototype.detachLine = function(line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + + // Collapsed markers have unique ids, in order to be able to order + // them, which is needed for uniquely determining an outer marker + // when they overlap (they may nest, but not partially overlap). + var nextMarkerId = 0; + + // Create a marker, wire it up to the right lines, and + function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) return markTextShared(doc, from, to, options, type); + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); + + var marker = new TextMarker(doc, type), diff = cmp(from, to); + if (options) copyObj(options, marker, false); + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + return marker; + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true; + marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); + if (options.insertLeft) marker.widgetNode.insertLeft = true; + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + throw new Error("Inserting collapsed marker partially overlapping an existing one"); + sawCollapsedSpans = true; + } + + if (marker.addToHistory) + addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); + + var curLine = from.line, cm = doc.cm, updateMaxLine; + doc.iter(curLine, to.line + 1, function(line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + updateMaxLine = true; + if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null)); + ++curLine; + }); + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { + if (lineIsHidden(doc, line)) updateLineHeight(line, 0); + }); + + if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); + + if (marker.readOnly) { + sawReadOnlySpans = true; + if (doc.history.done.length || doc.history.undone.length) + doc.clearHistory(); + } + if (marker.collapsed) { + marker.id = ++nextMarkerId; + marker.atomic = true; + } + if (cm) { + // Sync editor state + if (updateMaxLine) cm.curOp.updateMaxLine = true; + if (marker.collapsed) + regChange(cm, from.line, to.line + 1); + else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) + for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); + if (marker.atomic) reCheckSelection(cm.doc); + signalLater(cm, "markerAdded", cm, marker); + } + return marker; + } + + // SHARED TEXTMARKERS + + // A shared marker spans multiple linked documents. It is + // implemented as a meta-marker-object controlling multiple normal + // markers. + var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { + this.markers = markers; + this.primary = primary; + for (var i = 0; i < markers.length; ++i) + markers[i].parent = this; + }; + eventMixin(SharedTextMarker); + + SharedTextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) + this.markers[i].clear(); + signalLater(this, "clear"); + }; + SharedTextMarker.prototype.find = function(side, lineObj) { + return this.primary.find(side, lineObj); + }; + + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], primary = markers[0]; + var widget = options.widgetNode; + linkedDocs(doc, function(doc) { + if (widget) options.widgetNode = widget.cloneNode(true); + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) + if (doc.linked[i].isParent) return; + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary); + } + + function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), + function(m) { return m.parent; }); + } + + function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], pos = marker.find(); + var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); + marker.markers.push(subMark); + subMark.parent = marker; + } + } + } + + function detachSharedMarkers(markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], linked = [marker.primary.doc];; + linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j]; + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null; + marker.markers.splice(j--, 1); + } + } + } + } + + // TEXTMARKER SPANS + + function MarkedSpan(marker, from, to) { + this.marker = marker; + this.from = from; this.to = to; + } + + // Search an array of spans for a span matching the given marker. + function getMarkedSpanFor(spans, marker) { + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) return span; + } + } + // Remove a span from an array, returning undefined if no spans are + // left (we don't store arrays for lines without spans). + function removeMarkedSpan(spans, span) { + for (var r, i = 0; i < spans.length; ++i) + if (spans[i] != span) (r || (r = [])).push(spans[i]); + return r; + } + // Add a span to a line. + function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + span.marker.attachLine(line); + } + + // Used for the algorithm that adjusts markers for a change in the + // document. These functions cut an array of spans at a given + // character position, returning an array of remaining chunks (or + // undefined if nothing remains). + function markedSpansBefore(old, startCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); + (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); + } + } + return nw; + } + function markedSpansAfter(old, endCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); + (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)); + } + } + return nw; + } + + // Given a change object, compute the new set of marker spans that + // cover the line in which the change took place. Removes spans + // entirely within the change, reconnects spans belonging to the + // same marker that appear on both sides of the change, and cuts off + // spans partially within the change. Returns an array of span + // arrays with one element for each line in (after) the change. + function stretchSpansOverChange(doc, change) { + if (change.full) return null; + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) return null; + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) span.to = startCh; + else if (sameLine) span.to = found.to == null ? null : found.to + offset; + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i = 0; i < last.length; ++i) { + var span = last[i]; + if (span.to != null) span.to += offset; + if (span.from == null) { + var found = getMarkedSpanFor(first, span.marker); + if (!found) { + span.from = offset; + if (sameLine) (first || (first = [])).push(span); + } + } else { + span.from += offset; + if (sameLine) (first || (first = [])).push(span); + } + } + } + // Make sure we didn't create any zero-length spans + if (first) first = clearEmptySpans(first); + if (last && last != first) last = clearEmptySpans(last); + + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers; + if (gap > 0 && first) + for (var i = 0; i < first.length; ++i) + if (first[i].to == null) + (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); + for (var i = 0; i < gap; ++i) + newMarkers.push(gapMarkers); + newMarkers.push(last); + } + return newMarkers; + } + + // Remove spans that are empty and don't have a clearWhenEmpty + // option of false. + function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + spans.splice(i--, 1); + } + if (!spans.length) return null; + return spans; + } + + // Used for un/re-doing changes from the history. Combines the + // result of computing the existing spans with the set of spans that + // existed in the history (so that deleting around a span and then + // undoing brings back the span). + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) return stretched; + if (!stretched) return old; + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) + if (oldCur[k].marker == span.marker) continue spans; + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old; + } + + // Used to 'clip' out readOnly ranges when making a change. + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function(line) { + if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + (markers || (markers = [])).push(mark); + } + }); + if (!markers) return null; + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + newParts.push({from: p.from, to: m.from}); + if (dto > 0 || !mk.inclusiveRight && !dto) + newParts.push({from: m.to, to: p.to}); + parts.splice.apply(parts, newParts); + j += newParts.length - 1; + } + } + return parts; + } + + // Connect or disconnect spans from a line. + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.detachLine(line); + line.markedSpans = null; + } + function attachMarkedSpans(line, spans) { + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.attachLine(line); + line.markedSpans = spans; + } + + // Helpers used when computing which overlapping collapsed span + // counts as the larger one. + function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } + function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } + + // Returns a number indicating which of two overlapping collapsed + // spans is larger (and thus includes the other). Falls back to + // comparing ids when the spans cover exactly the same range. + function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length; + if (lenDiff != 0) return lenDiff; + var aPos = a.find(), bPos = b.find(); + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); + if (fromCmp) return -fromCmp; + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); + if (toCmp) return toCmp; + return b.id - a.id; + } + + // Find out whether a line ends or starts in a collapsed span. If + // so, return the marker for that span. + function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + found = sp.marker; + } + return found; + } + function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } + function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } + + // Test whether there exists a collapsed span that partially + // overlaps (covers the start or end, but not both) of a new span. + // Such overlap is not allowed. + function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo); + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (!sp.marker.collapsed) continue; + var found = sp.marker.find(0); + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; + if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || + fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) + return true; + } + } + + // A visual line is a line as drawn on the screen. Folding, for + // example, can cause multiple logical lines to appear on the same + // visual line. This finds the start of the visual line that the + // given line is part of (usually that is the line itself). + function visualLine(line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + line = merged.find(-1, true).line; + return line; + } + + // Returns an array of logical lines that continue the visual line + // started by the argument, or undefined if there are no such lines. + function visualLineContinued(line) { + var merged, lines; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + (lines || (lines = [])).push(line); + } + return lines; + } + + // Get the line number of the start of the visual line that the + // given line number is part of. + function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line); + if (line == vis) return lineN; + return lineNo(vis); + } + // Get the line number of the start of the next visual line after + // the given line. + function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) return lineN; + var line = getLine(doc, lineN), merged; + if (!lineIsHidden(doc, line)) return lineN; + while (merged = collapsedSpanAtEnd(line)) + line = merged.find(1, true).line; + return lineNo(line) + 1; + } + + // Compute whether a line is hidden. Lines count as hidden when they + // are part of a visual line that starts with another line, or when + // they are entirely covered by collapsed, non-widget span. + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) continue; + if (sp.from == null) return true; + if (sp.marker.widgetNode) continue; + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + return true; + } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true); + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); + } + if (span.marker.inclusiveRight && span.to == line.text.length) + return true; + for (var sp, i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) return true; + } + } + + // LINE WIDGETS + + // Line widgets are block elements displayed above or below a line. + + var LineWidget = CodeMirror.LineWidget = function(doc, node, options) { + if (options) for (var opt in options) if (options.hasOwnProperty(opt)) + this[opt] = options[opt]; + this.doc = doc; + this.node = node; + }; + eventMixin(LineWidget); + + function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + addToScrollPos(cm, null, diff); + } + + LineWidget.prototype.clear = function() { + var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); + if (no == null || !ws) return; + for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); + if (!ws.length) line.widgets = null; + var height = widgetHeight(this); + updateLineHeight(line, Math.max(0, line.height - height)); + if (cm) runInOp(cm, function() { + adjustScrollWhenAboveVisible(cm, line, -height); + regLineChange(cm, no, "widget"); + }); + }; + LineWidget.prototype.changed = function() { + var oldH = this.height, cm = this.doc.cm, line = this.line; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) return; + updateLineHeight(line, line.height + diff); + if (cm) runInOp(cm, function() { + cm.curOp.forceUpdate = true; + adjustScrollWhenAboveVisible(cm, line, diff); + }); + }; + + function widgetHeight(widget) { + if (widget.height != null) return widget.height; + var cm = widget.doc.cm; + if (!cm) return 0; + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;"; + if (widget.coverGutter) + parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; + if (widget.noHScroll) + parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); + } + return widget.height = widget.node.parentNode.offsetHeight; + } + + function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options); + var cm = doc.cm; + if (cm && widget.noHScroll) cm.display.alignWidgets = true; + changeLine(doc, handle, "widget", function(line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) widgets.push(widget); + else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); + widget.line = line; + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) addToScrollPos(cm, null, widget.height); + cm.curOp.forceUpdate = true; + } + return true; + }); + return widget; + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; + }; + eventMixin(Line); + Line.prototype.lineNo = function() { return lineNo(this); }; + + // Change the content (text, markers) of a line. Automatically + // invalidates cached information and tries to re-estimate the + // line's height. + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + if (line.order != null) line.order = null; + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) updateLineHeight(line, estHeight); + } + + // Detach a line from the document tree and its markers. + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + function extractLineClasses(type, output) { + if (type) for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); + if (!lineClass) break; + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); + var prop = lineClass[1] ? "bgClass" : "textClass"; + if (output[prop] == null) + output[prop] = lineClass[2]; + else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) + output[prop] += " " + lineClass[2]; + } + return type; + } + + function callBlankLine(mode, state) { + if (mode.blankLine) return mode.blankLine(state); + if (!mode.innerMode) return; + var inner = CodeMirror.innerMode(mode, state); + if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); + } + + function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode; + var style = mode.token(stream, state); + if (stream.pos > stream.start) return style; + } + throw new Error("Mode " + mode.name + " failed to advance stream."); + } + + // Utility for getTokenAt and getLineTokens + function takeToken(cm, pos, precise, asArray) { + function getObj(copy) { + return {start: stream.start, end: stream.pos, + string: stream.current(), + type: style || null, + state: copy ? copyState(doc.mode, state) : state}; + } + + var doc = cm.doc, mode = doc.mode, style; + pos = clipPos(doc, pos); + var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise); + var stream = new StringStream(line.text, cm.options.tabSize), tokens; + if (asArray) tokens = []; + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos; + style = readToken(mode, stream, state); + if (asArray) tokens.push(getObj(true)); + } + return asArray ? tokens : getObj(); + } + + // Run the given mode's parser over a line, calling f for each token. + function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; + var curStart = 0, curStyle = null; + var stream = new StringStream(text, cm.options.tabSize), style; + var inner = cm.options.addModeClass && [null]; + if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + if (forceToEnd) processLine(cm, text, state, stream.pos); + stream.pos = text.length; + style = null; + } else { + style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses); + } + if (inner) { + var mName = inner[0].name; + if (mName) style = "m-" + (style ? mName + " " + style : mName); + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 50000); + f(curStart, curStyle); + } + curStyle = style; + } + stream.start = stream.pos; + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 characters + var pos = Math.min(stream.pos, curStart + 50000); + f(pos, curStyle); + curStart = pos; + } + } + + // Compute a style array (an array starting with a mode generation + // -- for invalidation -- followed by pairs of end positions and + // style strings), which is used to highlight the tokens on the + // line. + function highlightLine(cm, line, state, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], lineClasses = {}; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, state, function(end, style) { + st.push(end, style); + }, lineClasses, forceToEnd); + + // Run overlays, adjust style array. + for (var o = 0; o < cm.state.overlays.length; ++o) { + var overlay = cm.state.overlays[o], i = 1, at = 0; + runMode(cm, line.text, overlay.mode, true, function(end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) + st.splice(i, 1, end, st[i+1], i_end); + i += 2; + at = Math.min(end, i_end); + } + if (!style) return; + if (overlay.opaque) { + st.splice(start, i - start, end, "cm-overlay " + style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start+1]; + st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; + } + } + }, lineClasses); + } + + return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; + } + + function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var state = getStateBefore(cm, lineNo(line)); + var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state); + line.stateAfter = state; + line.styles = result.styles; + if (result.classes) line.styleClasses = result.classes; + else if (line.styleClasses) line.styleClasses = null; + if (updateFrontier === cm.doc.frontier) cm.doc.frontier++; + } + return line.styles; + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. Used for lines that + // aren't currently visible. + function processLine(cm, text, state, startAt) { + var mode = cm.doc.mode; + var stream = new StringStream(text, cm.options.tabSize); + stream.start = stream.pos = startAt || 0; + if (text == "") callBlankLine(mode, state); + while (!stream.eol()) { + readToken(mode, stream, state); + stream.start = stream.pos; + } + } + + // Convert a style as returned by a mode (either null, or a string + // containing one or more styles) to a CSS style. This is cached, + // and also looks for line-wide styles. + var styleToClassCache = {}, styleToClassCacheWithMode = {}; + function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) return null; + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")); + } + + // Render the DOM representation of the text of a line. Also builds + // up a 'line map', which points at the DOM nodes that represent + // specific stretches of text, and is used by the measuring code. + // The returned object contains the DOM node, this map, and + // information about line-wide styles that were set by the mode. + function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); + var builder = {pre: elt("pre", [content], "CodeMirror-line"), content: content, + col: 0, pos: 0, cm: cm, + splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}; + lineView.measure = {}; + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order; + builder.pos = 0; + builder.addToken = buildToken; + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) + builder.addToken = buildTokenBadBidi(builder.addToken, order); + builder.map = []; + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); + if (line.styleClasses) { + if (line.styleClasses.bgClass) + builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); + if (line.styleClasses.textClass) + builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map; + lineView.measure.cache = {}; + } else { + (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); + (lineView.measure.caches || (lineView.measure.caches = [])).push({}); + } + } + + // See issue #2901 + if (webkit) { + var last = builder.content.lastChild + if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) + builder.content.className = "cm-tab-wrap-hack"; + } + + signal(cm, "renderLine", cm, lineView.line, builder.pre); + if (builder.pre.className) + builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); + + return builder; + } + + function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + ch.charCodeAt(0).toString(16); + token.setAttribute("aria-label", token.title); + return token; + } + + // Build up the DOM representation for a single token, and add it to + // the line map. Takes care to render special characters separately. + function buildToken(builder, text, style, startStyle, endStyle, title, css) { + if (!text) return; + var displayText = builder.splitSpaces ? text.replace(/ {3,}/g, splitSpaces) : text; + var special = builder.cm.state.specialChars, mustWrap = false; + if (!special.test(text)) { + builder.col += text.length; + var content = document.createTextNode(displayText); + builder.map.push(builder.pos, builder.pos + text.length, content); + if (ie && ie_version < 9) mustWrap = true; + builder.pos += text.length; + } else { + var content = document.createDocumentFragment(), pos = 0; + while (true) { + special.lastIndex = pos; + var m = special.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); + if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); + else content.appendChild(txt); + builder.map.push(builder.pos, builder.pos + skipped, txt); + builder.col += skipped; + builder.pos += skipped; + } + if (!m) break; + pos += skipped + 1; + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + txt.setAttribute("role", "presentation"); + txt.setAttribute("cm-text", "\t"); + builder.col += tabWidth; + } else if (m[0] == "\r" || m[0] == "\n") { + var txt = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); + txt.setAttribute("cm-text", m[0]); + builder.col += 1; + } else { + var txt = builder.cm.options.specialCharPlaceholder(m[0]); + txt.setAttribute("cm-text", m[0]); + if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); + else content.appendChild(txt); + builder.col += 1; + } + builder.map.push(builder.pos, builder.pos + 1, txt); + builder.pos++; + } + } + if (style || startStyle || endStyle || mustWrap || css) { + var fullStyle = style || ""; + if (startStyle) fullStyle += startStyle; + if (endStyle) fullStyle += endStyle; + var token = elt("span", [content], fullStyle, css); + if (title) token.title = title; + return builder.content.appendChild(token); + } + builder.content.appendChild(content); + } + + function splitSpaces(old) { + var out = " "; + for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; + out += " "; + return out; + } + + // Work around nonsense dimensions being reported for stretches of + // right-to-left text. + function buildTokenBadBidi(inner, order) { + return function(builder, text, style, startStyle, endStyle, title, css) { + style = style ? style + " cm-force-border" : "cm-force-border"; + var start = builder.pos, end = start + text.length; + for (;;) { + // Find the part that overlaps with the start of this text + for (var i = 0; i < order.length; i++) { + var part = order[i]; + if (part.to > start && part.from <= start) break; + } + if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css); + inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css); + startStyle = null; + text = text.slice(part.to - start); + start = part.to; + } + }; + } + + function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode; + if (widget) builder.map.push(builder.pos, builder.pos + size, widget); + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) + widget = builder.content.appendChild(document.createElement("span")); + widget.setAttribute("cm-marker", marker.id); + } + if (widget) { + builder.cm.display.input.setUneditable(widget); + builder.content.appendChild(widget); + } + builder.pos += size; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0; + if (!spans) { + for (var i = 1; i < styles.length; i+=2) + builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); + return; + } + + var len = allText.length, pos = 0, i = 1, text = "", style, css; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = title = css = ""; + collapsed = null; nextChange = Infinity; + var foundBookmarks = [], endStyles + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m); + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to; + spanEndStyle = ""; + } + if (m.className) spanStyle += " " + m.className; + if (m.css) css = (css ? css + ";" : "") + m.css; + if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; + if (m.endStyle && sp.to == nextChange) (endStyles || (endStyles = [])).push(m.endStyle, sp.to) + if (m.title && !title) title = m.title; + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + collapsed = sp; + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + } + if (endStyles) for (var j = 0; j < endStyles.length; j += 2) + if (endStyles[j + 1] == nextChange) spanEndStyle += " " + endStyles[j] + + if (!collapsed || collapsed.from == pos) for (var j = 0; j < foundBookmarks.length; ++j) + buildCollapsedSpan(builder, 0, foundBookmarks[j]); + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null); + if (collapsed.to == null) return; + if (collapsed.to == pos) collapsed = false; + } + } + if (pos >= len) break; + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = interpretTokenStyle(styles[i++], builder.cm.options); + } + } + } + + // DOCUMENT DATA STRUCTURE + + // By default, updates that start and end at the beginning of a line + // are treated specially, in order to make the association of line + // widgets and marker elements with the text behave more intuitive. + function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore); + } + + // Perform a change on the document data structure. + function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null;} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight); + signalLater(line, "change", line, change); + } + function linesFor(start, end) { + for (var i = start, result = []; i < end; ++i) + result.push(new Line(text[i], spansFor(i), estimateHeight)); + return result; + } + + var from = change.from, to = change.to, text = change.text; + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)); + doc.remove(text.length, doc.size - text.length); + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1); + update(lastLine, lastLine.text, lastSpans); + if (nlines) doc.remove(from.line, nlines); + if (added.length) doc.insert(from.line, added); + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + var added = linesFor(1, text.length - 1); + added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + var added = linesFor(1, text.length - 1); + if (nlines > 1) doc.remove(from.line + 1, nlines - 1); + doc.insert(from.line + 1, added); + } + + signalLater(doc, "change", doc, change); + } + + // The document is represented as a BTree consisting of leaves, with + // chunk of lines in them, and branches, with up to ten leaves or + // other branch nodes below them. The top node is always a branch + // node, and is the document object itself (meaning it has + // additional methods and properties). + // + // All nodes have parent links. The tree is used both to go from + // line numbers to line objects, and to go from objects to numbers. + // It also indexes by height, and is used to convert between height + // and line object, and to find the total height of the document. + // + // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + for (var i = 0, height = 0; i < lines.length; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length; }, + // Remove the n lines at offset 'at'. + removeInner: function(at, n) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + // Helper used to collapse a small branch into a single leaf. + collapse: function(lines) { + lines.push.apply(lines, this.lines); + }, + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0; i < lines.length; ++i) lines[i].parent = this; + }, + // Used to iterate over a part of the tree. + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + if (op(this.lines[at])) return true; + } + }; + + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0; i < children.length; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + + BranchChunk.prototype = { + chunkSize: function() { return this.size; }, + removeInner: function(at, n) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.removeInner(at, rm); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) break; + at = 0; + } else at -= sz; + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function(lines) { + for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); + }, + insertInner: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. + // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. + var remaining = child.lines.length % 25 + 25 + for (var pos = remaining; pos < child.lines.length;) { + var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); + child.height -= leaf.height; + this.children.splice(++i, 0, leaf); + leaf.parent = this; + } + child.lines = child.lines.slice(0, remaining); + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + // When a node has grown, check whether it should be split. + maybeSpill: function() { + if (this.children.length <= 10) return; + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iterN: function(at, n, op) { + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) return true; + if ((n -= used) == 0) break; + at = 0; + } else at -= sz; + } + } + }; + + var nextDocId = 0; + var Doc = CodeMirror.Doc = function(text, mode, firstLine, lineSep) { + if (!(this instanceof Doc)) return new Doc(text, mode, firstLine, lineSep); + if (firstLine == null) firstLine = 0; + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.cleanGeneration = 1; + this.frontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = simpleSelection(start); + this.history = new History(null); + this.id = ++nextDocId; + this.modeOption = mode; + this.lineSep = lineSep; + this.extend = false; + + if (typeof text == "string") text = this.splitLines(text); + updateDoc(this, {from: start, to: start, text: text}); + setSelection(this, simpleSelection(start), sel_dontScroll); + }; + + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) this.iterN(from - this.first, to - from, op); + else this.iterN(this.first, this.first + this.size, from); + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0; + for (var i = 0; i < lines.length; ++i) height += lines[i].height; + this.insertInner(at - this.first, lines, height); + }, + remove: function(at, n) { this.removeInner(at - this.first, n); }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) return lines; + return lines.join(lineSep || this.lineSeparator()); + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1; + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), origin: "setValue", full: true}, true); + setSelection(this, simpleSelection(top)); + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) return lines; + return lines.join(lineSep || this.lineSeparator()); + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, + + getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, + getLineNumber: function(line) {return lineNo(line);}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") line = getLine(this, line); + return visualLine(line); + }, + + lineCount: function() {return this.size;}, + firstLine: function() {return this.first;}, + lastLine: function() {return this.first + this.size - 1;}, + + clipPos: function(pos) {return clipPos(this, pos);}, + + getCursor: function(start) { + var range = this.sel.primary(), pos; + if (start == null || start == "head") pos = range.head; + else if (start == "anchor") pos = range.anchor; + else if (start == "end" || start == "to" || start === false) pos = range.to(); + else pos = range.from(); + return pos; + }, + listSelections: function() { return this.sel.ranges; }, + somethingSelected: function() {return this.sel.somethingSelected();}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads), options); + }), + extendSelectionsBy: docMethodOp(function(f, options) { + var heads = map(this.sel.ranges, f); + extendSelections(this, clipPosArray(this, heads), options); + }), + setSelections: docMethodOp(function(ranges, primary, options) { + if (!ranges.length) return; + for (var i = 0, out = []; i < ranges.length; i++) + out[i] = new Range(clipPos(this, ranges[i].anchor), + clipPos(this, ranges[i].head)); + if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); + setSelection(this, normalizeSelection(out, primary), options); + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0); + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); + setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); + }), + + getSelection: function(lineSep) { + var ranges = this.sel.ranges, lines; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + lines = lines ? lines.concat(sel) : sel; + } + if (lineSep === false) return lines; + else return lines.join(lineSep || this.lineSeparator()); + }, + getSelections: function(lineSep) { + var parts = [], ranges = this.sel.ranges; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + if (lineSep !== false) sel = sel.join(lineSep || this.lineSeparator()); + parts[i] = sel; + } + return parts; + }, + replaceSelection: function(code, collapse, origin) { + var dup = []; + for (var i = 0; i < this.sel.ranges.length; i++) + dup[i] = code; + this.replaceSelections(dup, collapse, origin || "+input"); + }, + replaceSelections: docMethodOp(function(code, collapse, origin) { + var changes = [], sel = this.sel; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin}; + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); + for (var i = changes.length - 1; i >= 0; i--) + makeChange(this, changes[i]); + if (newSel) setSelectionReplaceHistory(this, newSel); + else if (this.cm) ensureCursorVisible(this.cm); + }), + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), + + setExtending: function(val) {this.extend = val;}, + getExtending: function() {return this.extend;}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0; + for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; + for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; + return {undo: done, redo: undone}; + }, + clearHistory: function() {this.history = new History(this.history.maxGeneration);}, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true); + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; + return this.history.generation; + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration); + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)}; + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history.maxGeneration); + hist.done = copyHistoryArray(histData.done.slice(0), null, true); + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); + }, + + addLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + if (!line[prop]) line[prop] = cls; + else if (classTest(cls).test(line[prop])) return false; + else line[prop] += " " + cls; + return true; + }); + }), + removeLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) return false; + else if (cls == null) line[prop] = null; + else { + var found = cur.match(classTest(cls)); + if (!found) return false; + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true; + }); + }), + + addLineWidget: docMethodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options); + }), + removeLineWidget: function(widget) { widget.clear(); }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range"); + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents}; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark"); + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos); + var markers = [], spans = getLine(this, pos.line).markedSpans; + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + markers.push(span.marker.parent || span.marker); + } + return markers; + }, + findMarks: function(from, to, filter) { + from = clipPos(this, from); to = clipPos(this, to); + var found = [], lineNo = from.line; + this.iter(from.line, to.line + 1, function(line) { + var spans = line.markedSpans; + if (spans) for (var i = 0; i < spans.length; i++) { + var span = spans[i]; + if (!(span.to != null && lineNo == from.line && from.ch >= span.to || + span.from == null && lineNo != from.line || + span.from != null && lineNo == to.line && span.from >= to.ch) && + (!filter || filter(span.marker))) + found.push(span.marker.parent || span.marker); + } + ++lineNo; + }); + return found; + }, + getAllMarks: function() { + var markers = []; + this.iter(function(line) { + var sps = line.markedSpans; + if (sps) for (var i = 0; i < sps.length; ++i) + if (sps[i].from != null) markers.push(sps[i].marker); + }); + return markers; + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first, sepSize = this.lineSeparator().length; + this.iter(function(line) { + var sz = line.text.length + sepSize; + if (sz > off) { ch = off; return true; } + off -= sz; + ++lineNo; + }); + return clipPos(this, Pos(lineNo, ch)); + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) return 0; + var sepSize = this.lineSeparator().length; + this.iter(this.first, coords.line, function (line) { + index += line.text.length + sepSize; + }); + return index; + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), + this.modeOption, this.first, this.lineSep); + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; + doc.sel = this.sel; + doc.extend = false; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc; + }, + + linkedDoc: function(options) { + if (!options) options = {}; + var from = this.first, to = this.first + this.size; + if (options.from != null && options.from > from) from = options.from; + if (options.to != null && options.to < to) to = options.to; + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep); + if (options.sharedHist) copy.history = this.history; + (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; + copySharedMarkers(copy, findSharedMarkers(this)); + return copy; + }, + unlinkDoc: function(other) { + if (other instanceof CodeMirror) other = other.doc; + if (this.linked) for (var i = 0; i < this.linked.length; ++i) { + var link = this.linked[i]; + if (link.doc != other) continue; + this.linked.splice(i, 1); + other.unlinkDoc(this); + detachSharedMarkers(findSharedMarkers(this)); + break; + } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); + other.history = new History(null); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f);}, + + getMode: function() {return this.mode;}, + getEditor: function() {return this.cm;}, + + splitLines: function(str) { + if (this.lineSep) return str.split(this.lineSep); + return splitLinesAuto(str); + }, + lineSeparator: function() { return this.lineSep || "\n"; } + }); + + // Public alias. + Doc.prototype.eachLine = Doc.prototype.iter; + + // Set up methods on CodeMirror's prototype to redirect to the editor's document. + var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); + for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments);}; + })(Doc.prototype[prop]); + + eventMixin(Doc); + + // Call f for all linked documents. + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) continue; + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) continue; + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } + } + propagate(doc, null, true); + } + + // Attach a document to an editor. + function attachDoc(cm, doc) { + if (doc.cm) throw new Error("This document is already in use."); + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + if (!cm.options.lineWrapping) findMaxLine(cm); + cm.options.mode = doc.modeOption; + regChange(cm); + } + + // LINE UTILITIES + + // Find the line object corresponding to the given line number. + function getLine(doc, n) { + n -= doc.first; + if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); + for (var chunk = doc; !chunk.lines;) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break; } + n -= sz; + } + } + return chunk.lines[n]; + } + + // Get the part of a document between two positions, as an array of + // strings. + function getBetween(doc, start, end) { + var out = [], n = start.line; + doc.iter(start.line, end.line + 1, function(line) { + var text = line.text; + if (n == end.line) text = text.slice(0, end.ch); + if (n == start.line) text = text.slice(start.ch); + out.push(text); + ++n; + }); + return out; + } + // Get the lines between from and to, as array of strings. + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function(line) { out.push(line.text); }); + return out; + } + + // Update the height of a line, propagating the height change + // upwards to parent nodes. + function updateLineHeight(line, height) { + var diff = height - line.height; + if (diff) for (var n = line; n; n = n.parent) n.height += diff; + } + + // Given a line object, find its line number by walking up through + // its parent links. + function lineNo(line) { + if (line.parent == null) return null; + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) break; + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first; + } + + // Find the line at the given vertical position, using the height + // information in the document tree. + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i = 0; i < chunk.children.length; ++i) { + var child = chunk.children[i], ch = child.height; + if (h < ch) { chunk = child; continue outer; } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) break; + h -= lh; + } + return n + i; + } + + + // Find the height above the given line. + function heightAtLine(lineObj) { + lineObj = visualLine(lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) break; + else h += line.height; + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i = 0; i < p.children.length; ++i) { + var cur = p.children[i]; + if (cur == chunk) break; + else h += cur.height; + } + } + return h; + } + + // Get the bidi ordering for the given line (and cache it). Returns + // false for lines that are fully left-to-right, and an array of + // BidiSpan objects otherwise. + function getOrder(line) { + var order = line.order; + if (order == null) order = line.order = bidiOrdering(line.text); + return order; + } + + // HISTORY + + function History(startGen) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = []; + this.undoDepth = Infinity; + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0; + this.lastOp = this.lastSelOp = null; + this.lastOrigin = this.lastSelOrigin = null; + // Used by the isClean() method + this.generation = this.maxGeneration = startGen || 1; + } + + // Create a history change event from an updateDoc-style change + // object. + function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); + return histChange; + } + + // Pop all selection events off the end of a history array. Stop at + // a change event. + function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array); + if (last.ranges) array.pop(); + else break; + } + } + + // Find the top change event in the history. Pop off selection + // events that are in the way. + function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done); + return lst(hist.done); + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done); + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop(); + return lst(hist.done); + } + } + + // Register a change in the history. Merges changes that are within + // a single operation, ore are close together with an origin that + // allows merging (starting with "+") into a single event. + function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date, cur; + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + var last = lst(cur.changes); + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done); + if (!before || !before.ranges) + pushSelectionToHistory(doc.sel, hist.done); + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation}; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) { + hist.done.shift(); + if (!hist.done[0].ranges) hist.done.shift(); + } + } + hist.done.push(selAfter); + hist.generation = ++hist.maxGeneration; + hist.lastModTime = hist.lastSelTime = time; + hist.lastOp = hist.lastSelOp = opId; + hist.lastOrigin = hist.lastSelOrigin = change.origin; + + if (!last) signal(doc, "historyAdded"); + } + + function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0); + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); + } + + // Called whenever the selection changes, sets the new selection as + // the pending selection in the history, and pushes the old pending + // selection into the 'done' array when it was significantly + // different (in number of selected ranges, emptiness, or time). + function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin; + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + hist.done[hist.done.length - 1] = sel; + else + pushSelectionToHistory(sel, hist.done); + + hist.lastSelTime = +new Date; + hist.lastSelOrigin = origin; + hist.lastSelOp = opId; + if (options && options.clearRedo !== false) + clearSelectionEvents(hist.undone); + } + + function pushSelectionToHistory(sel, dest) { + var top = lst(dest); + if (!(top && top.ranges && top.equals(sel))) + dest.push(sel); + } + + // Used to store marked span information in the history. + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { + if (line.markedSpans) + (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; + ++n; + }); + } + + // When un/re-doing restores text containing marked spans, those + // that have been explicitly cleared should not be restored. + function removeClearedSpans(spans) { + if (!spans) return null; + for (var i = 0, out; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } + else if (out) out.push(spans[i]); + } + return !out ? spans : out.length ? out : null; + } + + // Retrieve and filter the old marked spans stored in a change event. + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) return null; + for (var i = 0, nw = []; i < change.text.length; ++i) + nw.push(removeClearedSpans(found[i])); + return nw; + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup, instantiateSel) { + for (var i = 0, copy = []; i < events.length; ++i) { + var event = events[i]; + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); + continue; + } + var changes = event.changes, newChanges = []; + copy.push({changes: newChanges}); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m; + newChanges.push({from: change.from, to: change.to, text: change.text}); + if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } + } + } + return copy; + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true; + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); + } + continue; + } + for (var j = 0; j < sub.changes.length; ++j) { + var cur = sub.changes[j]; + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch); + cur.to = Pos(cur.to.line + diff, cur.to.ch); + } else if (from <= cur.to.line) { + ok = false; + break; + } + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } + } + } + + function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // EVENT UTILITIES + + // Due to the fact that we still support jurassic IE versions, some + // compatibility wrappers are needed. + + var e_preventDefault = CodeMirror.e_preventDefault = function(e) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + }; + var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { + if (e.stopPropagation) e.stopPropagation(); + else e.cancelBubble = true; + }; + function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; + } + var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; + + function e_target(e) {return e.target || e.srcElement;} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) b = 1; + else if (e.button & 2) b = 3; + else if (e.button & 4) b = 2; + } + if (mac && e.ctrlKey && b == 1) b = 3; + return b; + } + + // EVENT HANDLING + + // Lightweight event framework. on/off also work on DOM nodes, + // registering native DOM handlers. + + var on = CodeMirror.on = function(emitter, type, f) { + if (emitter.addEventListener) + emitter.addEventListener(type, f, false); + else if (emitter.attachEvent) + emitter.attachEvent("on" + type, f); + else { + var map = emitter._handlers || (emitter._handlers = {}); + var arr = map[type] || (map[type] = []); + arr.push(f); + } + }; + + var noHandlers = [] + function getHandlers(emitter, type, copy) { + var arr = emitter._handlers && emitter._handlers[type] + if (copy) return arr && arr.length > 0 ? arr.slice() : noHandlers + else return arr || noHandlers + } + + var off = CodeMirror.off = function(emitter, type, f) { + if (emitter.removeEventListener) + emitter.removeEventListener(type, f, false); + else if (emitter.detachEvent) + emitter.detachEvent("on" + type, f); + else { + var handlers = getHandlers(emitter, type, false) + for (var i = 0; i < handlers.length; ++i) + if (handlers[i] == f) { handlers.splice(i, 1); break; } + } + }; + + var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type, true) + if (!handlers.length) return; + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < handlers.length; ++i) handlers[i].apply(null, args); + }; + + var orphanDelayedCallbacks = null; + + // Often, we want to signal events at a point where we are in the + // middle of some work, but don't want the handler to start calling + // other methods on the editor, which might be in an inconsistent + // state or simply not expect any other events to happen. + // signalLater looks whether there are any handlers, and schedules + // them to be executed when the last operation ends, or, if no + // operation is active, when a timeout fires. + function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type, false) + if (!arr.length) return; + var args = Array.prototype.slice.call(arguments, 2), list; + if (operationGroup) { + list = operationGroup.delayedCallbacks; + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks; + } else { + list = orphanDelayedCallbacks = []; + setTimeout(fireOrphanDelayed, 0); + } + function bnd(f) {return function(){f.apply(null, args);};}; + for (var i = 0; i < arr.length; ++i) + list.push(bnd(arr[i])); + } + + function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks; + orphanDelayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) delayed[i](); + } + + // The DOM events that CodeMirror handles can be overridden by + // registering a (non-DOM) handler on the editor for the event name, + // and preventDefault-ing the event in that handler. + function signalDOMEvent(cm, e, override) { + if (typeof e == "string") + e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore; + } + + function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity; + if (!arr) return; + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); + for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) + set.push(arr[i]); + } + + function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0 + } + + // Add on and off methods to a constructor's prototype, to make + // registering events on such objects more convenient. + function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f);}; + ctor.prototype.off = function(type, f) {off(this, type, f);}; + } + + // MISC UTILITIES + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerGap = 30; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; + + // Reused option objects for setSelection & friends + var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; + + function Delayed() {this.id = null;} + Delayed.prototype.set = function(ms, f) { + clearTimeout(this.id); + this.id = setTimeout(f, ms); + }; + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) end = string.length; + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) + return n + (end - i); + n += nextTab - i; + n += tabSize - (n % tabSize); + i = nextTab + 1; + } + }; + + // The inverse of countColumn -- find the offset that corresponds to + // a particular column. + var findColumn = CodeMirror.findColumn = function(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos); + if (nextTab == -1) nextTab = string.length; + var skipped = nextTab - pos; + if (nextTab == string.length || col + skipped >= goal) + return pos + Math.min(skipped, goal - col); + col += nextTab - pos; + col += tabSize - (col % tabSize); + pos = nextTab + 1; + if (col >= goal) return pos; + } + } + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + spaceStrs.push(lst(spaceStrs) + " "); + return spaceStrs[n]; + } + + function lst(arr) { return arr[arr.length-1]; } + + var selectInput = function(node) { node.select(); }; + if (ios) // Mobile Safari apparently has a bug where select() is broken. + selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; + else if (ie) // Suppress mysterious IE10 errors + selectInput = function(node) { try { node.select(); } catch(_e) {} }; + + function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + if (array[i] == elt) return i; + return -1; + } + function map(array, f) { + var out = []; + for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); + return out; + } + + function nothing() {} + + function createObj(base, props) { + var inst; + if (Object.create) { + inst = Object.create(base); + } else { + nothing.prototype = base; + inst = new nothing(); + } + if (props) copyObj(props, inst); + return inst; + }; + + function copyObj(obj, target, overwrite) { + if (!target) target = {}; + for (var prop in obj) + if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + target[prop] = obj[prop]; + return target; + } + + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args);}; + } + + var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + var isWordCharBasic = CodeMirror.isWordChar = function(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); + }; + function isWordChar(ch, helper) { + if (!helper) return isWordCharBasic(ch); + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; + return helper.test(ch); + } + + function isEmpty(obj) { + for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; + return true; + } + + // Extending unicode characters. A series of a non-extending char + + // any number of extending chars is treated as a single unit as far + // as editing and measuring is concerned. This is not fully correct, + // since some scripts/fonts/browsers also treat other configurations + // of code points as a group. + var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; + function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } + + // DOM UTILITIES + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") e.appendChild(document.createTextNode(content)); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + + var range; + if (document.createRange) range = function(node, start, end, endNode) { + var r = document.createRange(); + r.setEnd(endNode || node, end); + r.setStart(node, start); + return r; + }; + else range = function(node, start, end) { + var r = document.body.createTextRange(); + try { r.moveToElementText(node.parentNode); } + catch(e) { return r; } + r.collapse(true); + r.moveEnd("character", end); + r.moveStart("character", start); + return r; + }; + + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + e.removeChild(e.firstChild); + return e; + } + + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e); + } + + var contains = CodeMirror.contains = function(parent, child) { + if (child.nodeType == 3) // Android browser always returns false when child is a textnode + child = child.parentNode; + if (parent.contains) + return parent.contains(child); + do { + if (child.nodeType == 11) child = child.host; + if (child == parent) return true; + } while (child = child.parentNode); + }; + + function activeElt() { + var activeElement = document.activeElement; + while (activeElement && activeElement.root && activeElement.root.activeElement) + activeElement = activeElement.root.activeElement; + return activeElement; + } + // Older versions of IE throws unspecified error when touching + // document.activeElement in some cases (during loading, in iframe) + if (ie && ie_version < 11) activeElt = function() { + try { return document.activeElement; } + catch(e) { return document.body; } + }; + + function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } + var rmClass = CodeMirror.rmClass = function(node, cls) { + var current = node.className; + var match = classTest(cls).exec(current); + if (match) { + var after = current.slice(match.index + match[0].length); + node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); + } + }; + var addClass = CodeMirror.addClass = function(node, cls) { + var current = node.className; + if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; + }; + function joinClasses(a, b) { + var as = a.split(" "); + for (var i = 0; i < as.length; i++) + if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; + return b; + } + + // WINDOW-WIDE EVENTS + + // These must be handled carefully, because naively registering a + // handler for each editor will cause the editors to never be + // garbage collected. + + function forEachCodeMirror(f) { + if (!document.body.getElementsByClassName) return; + var byClass = document.body.getElementsByClassName("CodeMirror"); + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror; + if (cm) f(cm); + } + } + + var globalsRegistered = false; + function ensureGlobalHandlers() { + if (globalsRegistered) return; + registerGlobalHandlers(); + globalsRegistered = true; + } + function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer; + on(window, "resize", function() { + if (resizeTimer == null) resizeTimer = setTimeout(function() { + resizeTimer = null; + forEachCodeMirror(onResize); + }, 100); + }); + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function() { + forEachCodeMirror(onBlur); + }); + } + + // FEATURE DETECTION + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) return false; + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); + } + var node = zwspSupported ? elt("span", "\u200b") : + elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + node.setAttribute("cm-text", ""); + return node; + } + + // Feature-detect IE's crummy client rect reporting for bidi text + var badBidiRects; + function hasBadBidiRects(measure) { + if (badBidiRects != null) return badBidiRects; + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); + var r0 = range(txt, 0, 1).getBoundingClientRect(); + if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780) + var r1 = range(txt, 1, 2).getBoundingClientRect(); + return badBidiRects = (r1.right - r0.right < 3); + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLinesAuto = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) nl = string.length; + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function(string){return string.split(/\r\n?|\n/);}; + + var hasSelection = window.getSelection ? function(te) { + try { return te.selectionStart != te.selectionEnd; } + catch(e) { return false; } + } : function(te) { + try {var range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) return false; + return range.compareEndPoints("StartToEnd", range) != 0; + }; + + var hasCopyEvent = (function() { + var e = elt("div"); + if ("oncopy" in e) return true; + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == "function"; + })(); + + var badZoomedRects = null; + function hasBadZoomedRects(measure) { + if (badZoomedRects != null) return badZoomedRects; + var node = removeChildrenAndAdd(measure, elt("span", "x")); + var normal = node.getBoundingClientRect(); + var fromRange = range(node, 0, 1).getBoundingClientRect(); + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; + } + + // KEY NAMES + + var keyNames = CodeMirror.keyNames = { + 3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", + 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" + }; + (function() { + // Number keys + for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); + // Alphabetic keys + for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); + // Function keys + for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; + })(); + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) return f(from, to, "ltr"); + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); + found = true; + } + } + if (!found) f(from, to, "ltr"); + } + + function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } + function bidiRight(part) { return part.level % 2 ? part.from : part.to; } + + function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } + function lineRight(line) { + var order = getOrder(line); + if (!order) return line.text.length; + return bidiRight(lst(order)); + } + + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(line); + if (visual != line) lineN = lineNo(visual); + var order = getOrder(visual); + var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); + return Pos(lineN, ch); + } + function lineEnd(cm, lineN) { + var merged, line = getLine(cm.doc, lineN); + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + lineN = null; + } + var order = getOrder(line); + var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); + return Pos(lineN == null ? lineNo(line) : lineN, ch); + } + function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line); + var line = getLine(cm.doc, start.line); + var order = getOrder(line); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)); + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; + return Pos(start.line, inWS ? 0 : firstNonWS); + } + return start; + } + + function compareBidiLevel(order, a, b) { + var linedir = order[0].level; + if (a == linedir) return true; + if (b == linedir) return false; + return a < b; + } + var bidiOther; + function getBidiPartAt(order, pos) { + bidiOther = null; + for (var i = 0, found; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < pos && cur.to > pos) return i; + if ((cur.from == pos || cur.to == pos)) { + if (found == null) { + found = i; + } else if (compareBidiLevel(order, cur.level, order[found].level)) { + if (cur.from != cur.to) bidiOther = found; + return i; + } else { + if (cur.from != cur.to) bidiOther = i; + return found; + } + } + } + return found; + } + + function moveInLine(line, pos, dir, byUnit) { + if (!byUnit) return pos + dir; + do pos += dir; + while (pos > 0 && isExtendingChar(line.text.charAt(pos))); + return pos; + } + + // This is needed in order to move 'visually' through bi-directional + // text -- i.e., pressing left should make the cursor go left, even + // when in RTL text. The tricky part is the 'jumps', where RTL and + // LTR text touch each other. This often requires the cursor offset + // to move more than one unit, in order to visually move one unit. + function moveVisually(line, start, dir, byUnit) { + var bidi = getOrder(line); + if (!bidi) return moveLogically(line, start, dir, byUnit); + var pos = getBidiPartAt(bidi, start), part = bidi[pos]; + var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); + + for (;;) { + if (target > part.from && target < part.to) return target; + if (target == part.from || target == part.to) { + if (getBidiPartAt(bidi, target) == pos) return target; + part = bidi[pos += dir]; + return (dir > 0) == part.level % 2 ? part.to : part.from; + } else { + part = bidi[pos += dir]; + if (!part) return null; + if ((dir > 0) == part.level % 2) + target = moveInLine(line, part.to, -1, byUnit); + else + target = moveInLine(line, part.from, 1, byUnit); + } + } + } + + function moveLogically(line, start, dir, byUnit) { + var target = start + dir; + if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; + return target < 0 || target > line.text.length ? null : target; + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; + // Character types for codepoints 0x600 to 0x6ff + var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; + function charType(code) { + if (code <= 0xf7) return lowTypes.charAt(code); + else if (0x590 <= code && code <= 0x5f4) return "R"; + else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); + else if (0x6ee <= code && code <= 0x8ac) return "r"; + else if (0x2000 <= code && code <= 0x200b) return "w"; + else if (code == 0x200c) return "b"; + else return "L"; + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + // Browsers seem to always treat the boundaries of block elements as being L. + var outerType = "L"; + + function BidiSpan(level, from, to) { + this.level = level; + this.from = from; this.to = to; + } + + return function(str) { + if (!bidiRE.test(str)) return false; + var len = str.length, types = []; + for (var i = 0, type; i < len; ++i) + types.push(type = charType(str.charCodeAt(i))); + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i = 0, prev = outerType; i < len; ++i) { + var type = types[i]; + if (type == "m") types[i] = prev; + else prev = type; + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (type == "1" && cur == "r") types[i] = "n"; + else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i = 1, prev = types[0]; i < len - 1; ++i) { + var type = types[i]; + if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; + else if (type == "," && prev == types[i+1] && + (prev == "1" || prev == "n")) types[i] = prev; + prev = type; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i = 0; i < len; ++i) { + var type = types[i]; + if (type == ",") types[i] = "N"; + else if (type == "%") { + for (var end = i + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (cur == "L" && type == "1") types[i] = "L"; + else if (isStrong.test(type)) cur = type; + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i = 0; i < len; ++i) { + if (isNeutral.test(types[i])) { + for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} + var before = (i ? types[i-1] : outerType) == "L"; + var after = (end < len ? types[end] : outerType) == "L"; + var replace = before || after ? "L" : "R"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i = 0; i < len;) { + if (countsAsLeft.test(types[i])) { + var start = i; + for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} + order.push(new BidiSpan(0, start, i)); + } else { + var pos = i, at = order.length; + for (++i; i < len && types[i] != "L"; ++i) {} + for (var j = pos; j < i;) { + if (countsAsNum.test(types[j])) { + if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); + var nstart = j; + for (++j; j < i && countsAsNum.test(types[j]); ++j) {} + order.splice(at, 0, new BidiSpan(2, nstart, j)); + pos = j; + } else ++j; + } + if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); + } + } + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift(new BidiSpan(0, 0, m[0].length)); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push(new BidiSpan(0, len - m[0].length, len)); + } + if (order[0].level == 2) + order.unshift(new BidiSpan(1, order[0].to, order[0].to)); + if (order[0].level != lst(order).level) + order.push(new BidiSpan(order[0].level, len, len)); + + return order; + }; + })(); + + // THE END + + CodeMirror.version = "5.15.3"; + + return CodeMirror; +}); diff --git a/public/admin/view/javascript/codemirror/lib/formatting.js b/public/admin/view/javascript/codemirror/lib/formatting.js new file mode 100644 index 0000000..00ffe78 --- /dev/null +++ b/public/admin/view/javascript/codemirror/lib/formatting.js @@ -0,0 +1,196 @@ +// ============== Formatting extensions ============================ +(function() { + // Define extensions for a few modes + CodeMirror.extendMode("css", { + commentStart: "/*", + commentEnd: "*/", + wordWrapChars: [";", "\\{", "\\}"], + autoFormatLineBreaks: function (text) { + return text.replace(new RegExp("(;|\\{|\\})([^\r\n])", "g"), "$1\n$2"); + } + }); + + function jsNonBreakableBlocks(text) { + var nonBreakableRegexes = [/for\s*?\((.*?)\)/, + /\"(.*?)(\"|$)/, + /\'(.*?)(\'|$)/, + /\/\*(.*?)(\*\/|$)/, + /\/\/.*/]; + var nonBreakableBlocks = []; + for (var i = 0; i < nonBreakableRegexes.length; i++) { + var curPos = 0; + while (curPos < text.length) { + var m = text.substr(curPos).match(nonBreakableRegexes[i]); + if (m != null) { + nonBreakableBlocks.push({ + start: curPos + m.index, + end: curPos + m.index + m[0].length + }); + curPos += m.index + Math.max(1, m[0].length); + } + else { // No more matches + break; + } + } + } + nonBreakableBlocks.sort(function (a, b) { + return a.start - b.start; + }); + + return nonBreakableBlocks; + } + + CodeMirror.extendMode("javascript", { + commentStart: "/*", + commentEnd: "*/", + wordWrapChars: [";", "\\{", "\\}"], + + autoFormatLineBreaks: function (text) { + var curPos = 0; + var split = this.jsonMode ? function(str) { + return str.replace(/([,{])/g, "$1\n").replace(/}/g, "\n}"); + } : function(str) { + return str.replace(/(;|\{|\})([^\r\n;])/g, "$1\n$2"); + }; + var nonBreakableBlocks = jsNonBreakableBlocks(text), res = ""; + if (nonBreakableBlocks != null) { + for (var i = 0; i < nonBreakableBlocks.length; i++) { + if (nonBreakableBlocks[i].start > curPos) { // Break lines till the block + res += split(text.substring(curPos, nonBreakableBlocks[i].start)); + curPos = nonBreakableBlocks[i].start; + } + if (nonBreakableBlocks[i].start <= curPos + && nonBreakableBlocks[i].end >= curPos) { // Skip non-breakable block + res += text.substring(curPos, nonBreakableBlocks[i].end); + curPos = nonBreakableBlocks[i].end; + } + } + if (curPos < text.length) + res += split(text.substr(curPos)); + } else { + res = split(text); + } + return res.replace(/^\n*|\n*$/, ""); + } + }); + + CodeMirror.extendMode("xml", { + commentStart: "<!--", + commentEnd: "-->", + wordWrapChars: [">"], + + autoFormatLineBreaks: function (text) { + var lines = text.split("\n"); + var reProcessedPortion = new RegExp("(^\\s*?<|^[^<]*?)(.+)(>\\s*?$|[^>]*?$)"); + var reOpenBrackets = new RegExp("<", "g"); + var reCloseBrackets = new RegExp("(>)([^\r\n])", "g"); + for (var i = 0; i < lines.length; i++) { + var mToProcess = lines[i].match(reProcessedPortion); + if (mToProcess != null && mToProcess.length > 3) { // The line starts with whitespaces and ends with whitespaces + lines[i] = mToProcess[1] + + mToProcess[2].replace(reOpenBrackets, "\n$&").replace(reCloseBrackets, "$1\n$2") + + mToProcess[3]; + continue; + } + } + return lines.join("\n"); + } + }); + + function localModeAt(cm, pos) { + return CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(pos).state).mode; + } + + function enumerateModesBetween(cm, line, start, end) { + var outer = cm.getMode(), text = cm.getLine(line); + if (end == null) end = text.length; + if (!outer.innerMode) return [{from: start, to: end, mode: outer}]; + var state = cm.getTokenAt({line: line, ch: start}).state; + var mode = CodeMirror.innerMode(outer, state).mode; + var found = [], stream = new CodeMirror.StringStream(text); + stream.pos = stream.start = start; + for (;;) { + outer.token(stream, state); + var curMode = CodeMirror.innerMode(outer, state).mode; + if (curMode != mode) { + var cut = stream.start; + // Crappy heuristic to deal with the fact that a change in + // mode can occur both at the end and the start of a token, + // and we don't know which it was. + if (mode.name == "xml" && text.charAt(stream.pos - 1) == ">") cut = stream.pos; + found.push({from: start, to: cut, mode: mode}); + start = cut; + mode = curMode; + } + if (stream.pos >= end) break; + stream.start = stream.pos; + } + if (start < end) found.push({from: start, to: end, mode: mode}); + return found; + } + + // Comment/uncomment the specified range + CodeMirror.defineExtension("commentRange", function (isComment, from, to) { + var curMode = localModeAt(this, from), cm = this; + this.operation(function() { + if (isComment) { // Comment range + cm.replaceRange(curMode.commentEnd, to); + cm.replaceRange(curMode.commentStart, from); + if (from.line == to.line && from.ch == to.ch) // An empty comment inserted - put cursor inside + cm.setCursor(from.line, from.ch + curMode.commentStart.length); + } else { // Uncomment range + var selText = cm.getRange(from, to); + var startIndex = selText.indexOf(curMode.commentStart); + var endIndex = selText.lastIndexOf(curMode.commentEnd); + if (startIndex > -1 && endIndex > -1 && endIndex > startIndex) { + // Take string till comment start + selText = selText.substr(0, startIndex) + // From comment start till comment end + + selText.substring(startIndex + curMode.commentStart.length, endIndex) + // From comment end till string end + + selText.substr(endIndex + curMode.commentEnd.length); + } + cm.replaceRange(selText, from, to); + } + }); + }); + + // Applies automatic mode-aware indentation to the specified range + CodeMirror.defineExtension("autoIndentRange", function (from, to) { + var cmInstance = this; + this.operation(function () { + for (var i = from.line; i <= to.line; i++) { + cmInstance.indentLine(i, "smart"); + } + }); + }); + + // Applies automatic formatting to the specified range + CodeMirror.defineExtension("autoFormatRange", function (from, to) { + var cm = this; + cm.operation(function () { + for (var cur = from.line, end = to.line; cur <= end; ++cur) { + var f = {line: cur, ch: cur == from.line ? from.ch : 0}; + var t = {line: cur, ch: cur == end ? to.ch : null}; + var modes = enumerateModesBetween(cm, cur, f.ch, t.ch), mangled = ""; + var text = cm.getRange(f, t); + for (var i = 0; i < modes.length; ++i) { + var part = modes.length > 1 ? text.slice(modes[i].from, modes[i].to) : text; + if (mangled) mangled += "\n"; + if (modes[i].mode.autoFormatLineBreaks) { + mangled += modes[i].mode.autoFormatLineBreaks(part); + } else mangled += text; + } + if (mangled != text) { + for (var count = 0, pos = mangled.indexOf("\n"); pos != -1; pos = mangled.indexOf("\n", pos + 1), ++count) {} + cm.replaceRange(mangled, f, t); + cur += count; + end += count; + } + } + for (var cur = from.line + 1; cur <= end; ++cur) + cm.indentLine(cur, "smart"); + cm.setSelection(from, cm.getCursor(false)); + }); + }); +})(); diff --git a/public/admin/view/javascript/codemirror/lib/xml.js b/public/admin/view/javascript/codemirror/lib/xml.js new file mode 100644 index 0000000..4f49e07 --- /dev/null +++ b/public/admin/view/javascript/codemirror/lib/xml.js @@ -0,0 +1,345 @@ +CodeMirror.defineMode("xml", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var multilineTagIndentFactor = parserConfig.multilineTagIndentFactor || 1; + var multilineTagIndentPastTag = parserConfig.multilineTagIndentPastTag || true; + + var Kludges = parserConfig.htmlMode ? { + autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, + 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, + 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, + 'track': true, 'wbr': true}, + implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, + 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, + 'th': true, 'tr': true}, + contextGrabbers: { + 'dd': {'dd': true, 'dt': true}, + 'dt': {'dd': true, 'dt': true}, + 'li': {'li': true}, + 'option': {'option': true, 'optgroup': true}, + 'optgroup': {'optgroup': true}, + 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, + 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, + 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, + 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, + 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, + 'rp': {'rp': true, 'rt': true}, + 'rt': {'rp': true, 'rt': true}, + 'tbody': {'tbody': true, 'tfoot': true}, + 'td': {'td': true, 'th': true}, + 'tfoot': {'tbody': true}, + 'th': {'td': true, 'th': true}, + 'thead': {'tbody': true, 'tfoot': true}, + 'tr': {'tr': true} + }, + doNotIndent: {"pre": true}, + allowUnquoted: true, + allowMissing: true + } : { + autoSelfClosers: {}, + implicitlyClosed: {}, + contextGrabbers: {}, + doNotIndent: {}, + allowUnquoted: false, + allowMissing: false + }; + var alignCDATA = parserConfig.alignCDATA; + + // Return variables for tokenizers + var tagName, type; + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var ch = stream.next(); + if (ch == "<") { + if (stream.eat("!")) { + if (stream.eat("[")) { + if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); + else return null; + } else if (stream.match("--")) { + return chain(inBlock("comment", "-->")); + } else if (stream.match("DOCTYPE", true, true)) { + stream.eatWhile(/[\w\._\-]/); + return chain(doctype(1)); + } else { + return null; + } + } else if (stream.eat("?")) { + stream.eatWhile(/[\w\._\-]/); + state.tokenize = inBlock("meta", "?>"); + return "meta"; + } else { + var isClose = stream.eat("/"); + tagName = ""; + var c; + while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; + if (!tagName) return "tag error"; + type = isClose ? "closeTag" : "openTag"; + state.tokenize = inTag; + return "tag"; + } + } else if (ch == "&") { + var ok; + if (stream.eat("#")) { + if (stream.eat("x")) { + ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); + } else { + ok = stream.eatWhile(/[\d]/) && stream.eat(";"); + } + } else { + ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); + } + return ok ? "atom" : "error"; + } else { + stream.eatWhile(/[^&<]/); + return null; + } + } + + function inTag(stream, state) { + var ch = stream.next(); + if (ch == ">" || (ch == "/" && stream.eat(">"))) { + state.tokenize = inText; + type = ch == ">" ? "endTag" : "selfcloseTag"; + return "tag"; + } else if (ch == "=") { + type = "equals"; + return null; + } else if (ch == "<") { + state.tokenize = inText; + var next = state.tokenize(stream, state); + return next ? next + " error" : "error"; + } else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + state.stringStartCol = stream.column(); + return state.tokenize(stream, state); + } else { + stream.eatWhile(/[^\s\u00a0=<>\"\']/); + return "word"; + } + } + + function inAttribute(quote) { + var closure = function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inTag; + break; + } + } + return "string"; + }; + closure.isInAttribute = true; + return closure; + } + + function inBlock(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + return style; + }; + } + function doctype(depth) { + return function(stream, state) { + var ch; + while ((ch = stream.next()) != null) { + if (ch == "<") { + state.tokenize = doctype(depth + 1); + return state.tokenize(stream, state); + } else if (ch == ">") { + if (depth == 1) { + state.tokenize = inText; + break; + } else { + state.tokenize = doctype(depth - 1); + return state.tokenize(stream, state); + } + } + } + return "meta"; + }; + } + + var curState, curStream, setStyle; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + + function pushContext(tagName, startOfLine) { + var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName) || (curState.context && curState.context.noIndent); + curState.context = { + prev: curState.context, + tagName: tagName, + indent: curState.indented, + startOfLine: startOfLine, + noIndent: noIndent + }; + } + function popContext() { + if (curState.context) curState.context = curState.context.prev; + } + + function element(type) { + if (type == "openTag") { + curState.tagName = tagName; + curState.tagStart = curStream.column(); + return cont(attributes, endtag(curState.startOfLine)); + } else if (type == "closeTag") { + var err = false; + if (curState.context) { + if (curState.context.tagName != tagName) { + if (Kludges.implicitlyClosed.hasOwnProperty(curState.context.tagName.toLowerCase())) { + popContext(); + } + err = !curState.context || curState.context.tagName != tagName; + } + } else { + err = true; + } + if (err) setStyle = "error"; + return cont(endclosetag(err)); + } + return cont(); + } + function endtag(startOfLine) { + return function(type) { + var tagName = curState.tagName; + curState.tagName = curState.tagStart = null; + if (type == "selfcloseTag" || + (type == "endTag" && Kludges.autoSelfClosers.hasOwnProperty(tagName.toLowerCase()))) { + maybePopContext(tagName.toLowerCase()); + return cont(); + } + if (type == "endTag") { + maybePopContext(tagName.toLowerCase()); + pushContext(tagName, startOfLine); + return cont(); + } + return cont(); + }; + } + function endclosetag(err) { + return function(type) { + if (err) setStyle = "error"; + if (type == "endTag") { popContext(); return cont(); } + setStyle = "error"; + return cont(arguments.callee); + }; + } + function maybePopContext(nextTagName) { + var parentTagName; + while (true) { + if (!curState.context) { + return; + } + parentTagName = curState.context.tagName.toLowerCase(); + if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) || + !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { + return; + } + popContext(); + } + } + + function attributes(type) { + if (type == "word") {setStyle = "attribute"; return cont(attribute, attributes);} + if (type == "endTag" || type == "selfcloseTag") return pass(); + setStyle = "error"; + return cont(attributes); + } + function attribute(type) { + if (type == "equals") return cont(attvalue, attributes); + if (!Kludges.allowMissing) setStyle = "error"; + else if (type == "word") {setStyle = "attribute"; return cont(attribute, attributes);} + return (type == "endTag" || type == "selfcloseTag") ? pass() : cont(); + } + function attvalue(type) { + if (type == "string") return cont(attvaluemaybe); + if (type == "word" && Kludges.allowUnquoted) {setStyle = "string"; return cont();} + setStyle = "error"; + return (type == "endTag" || type == "selfCloseTag") ? pass() : cont(); + } + function attvaluemaybe(type) { + if (type == "string") return cont(attvaluemaybe); + else return pass(); + } + + return { + startState: function() { + return {tokenize: inText, cc: [], indented: 0, startOfLine: true, tagName: null, tagStart: null, context: null}; + }, + + token: function(stream, state) { + if (!state.tagName && stream.sol()) { + state.startOfLine = true; + state.indented = stream.indentation(); + } + if (stream.eatSpace()) return null; + + setStyle = type = tagName = null; + var style = state.tokenize(stream, state); + state.type = type; + if ((style || type) && style != "comment") { + curState = state; curStream = stream; + while (true) { + var comb = state.cc.pop() || element; + if (comb(type || style)) break; + } + } + state.startOfLine = false; + if (setStyle) + style = setStyle == "error" ? style + " error" : setStyle; + return style; + }, + + indent: function(state, textAfter, fullLine) { + var context = state.context; + // Indent multi-line strings (e.g. css). + if (state.tokenize.isInAttribute) { + return state.stringStartCol + 1; + } + if ((state.tokenize != inTag && state.tokenize != inText) || + context && context.noIndent) + return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; + // Indent the starts of attribute names. + if (state.tagName) { + if (multilineTagIndentPastTag) + return state.tagStart + state.tagName.length + 2; + else + return state.tagStart + indentUnit * multilineTagIndentFactor; + } + if (alignCDATA && /<!\[CDATA\[/.test(textAfter)) return 0; + if (context && /^<\//.test(textAfter)) + context = context.prev; + while (context && !context.startOfLine) + context = context.prev; + if (context) return context.indent + indentUnit; + else return 0; + }, + + electricChars: "/", + blockCommentStart: "<!--", + blockCommentEnd: "-->", + + configuration: parserConfig.htmlMode ? "html" : "xml", + helperType: parserConfig.htmlMode ? "html" : "xml" + }; +}); + +CodeMirror.defineMIME("text/xml", "xml"); +CodeMirror.defineMIME("application/xml", "xml"); +if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) + CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); diff --git a/public/admin/view/javascript/codemirror/theme/3024-day.css b/public/admin/view/javascript/codemirror/theme/3024-day.css new file mode 100644 index 0000000..7132655 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/3024-day.css @@ -0,0 +1,41 @@ +/* + + Name: 3024 day + Author: Jan T. Sott (http://github.com/idleberg) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-3024-day.CodeMirror { background: #f7f7f7; color: #3a3432; } +.cm-s-3024-day div.CodeMirror-selected { background: #d6d5d4; } + +.cm-s-3024-day .CodeMirror-line::selection, .cm-s-3024-day .CodeMirror-line > span::selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d6d5d4; } +.cm-s-3024-day .CodeMirror-line::-moz-selection, .cm-s-3024-day .CodeMirror-line > span::-moz-selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d9d9d9; } + +.cm-s-3024-day .CodeMirror-gutters { background: #f7f7f7; border-right: 0px; } +.cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; } +.cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; } +.cm-s-3024-day .CodeMirror-linenumber { color: #807d7c; } + +.cm-s-3024-day .CodeMirror-cursor { border-left: 1px solid #5c5855; } + +.cm-s-3024-day span.cm-comment { color: #cdab53; } +.cm-s-3024-day span.cm-atom { color: #a16a94; } +.cm-s-3024-day span.cm-number { color: #a16a94; } + +.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute { color: #01a252; } +.cm-s-3024-day span.cm-keyword { color: #db2d20; } +.cm-s-3024-day span.cm-string { color: #fded02; } + +.cm-s-3024-day span.cm-variable { color: #01a252; } +.cm-s-3024-day span.cm-variable-2 { color: #01a0e4; } +.cm-s-3024-day span.cm-def { color: #e8bbd0; } +.cm-s-3024-day span.cm-bracket { color: #3a3432; } +.cm-s-3024-day span.cm-tag { color: #db2d20; } +.cm-s-3024-day span.cm-link { color: #a16a94; } +.cm-s-3024-day span.cm-error { background: #db2d20; color: #5c5855; } + +.cm-s-3024-day .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important; } diff --git a/public/admin/view/javascript/codemirror/theme/3024-night.css b/public/admin/view/javascript/codemirror/theme/3024-night.css new file mode 100644 index 0000000..adc5900 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/3024-night.css @@ -0,0 +1,39 @@ +/* + + Name: 3024 night + Author: Jan T. Sott (http://github.com/idleberg) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-3024-night.CodeMirror { background: #090300; color: #d6d5d4; } +.cm-s-3024-night div.CodeMirror-selected { background: #3a3432; } +.cm-s-3024-night .CodeMirror-line::selection, .cm-s-3024-night .CodeMirror-line > span::selection, .cm-s-3024-night .CodeMirror-line > span > span::selection { background: rgba(58, 52, 50, .99); } +.cm-s-3024-night .CodeMirror-line::-moz-selection, .cm-s-3024-night .CodeMirror-line > span::-moz-selection, .cm-s-3024-night .CodeMirror-line > span > span::-moz-selection { background: rgba(58, 52, 50, .99); } +.cm-s-3024-night .CodeMirror-gutters { background: #090300; border-right: 0px; } +.cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; } +.cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; } +.cm-s-3024-night .CodeMirror-linenumber { color: #5c5855; } + +.cm-s-3024-night .CodeMirror-cursor { border-left: 1px solid #807d7c; } + +.cm-s-3024-night span.cm-comment { color: #cdab53; } +.cm-s-3024-night span.cm-atom { color: #a16a94; } +.cm-s-3024-night span.cm-number { color: #a16a94; } + +.cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute { color: #01a252; } +.cm-s-3024-night span.cm-keyword { color: #db2d20; } +.cm-s-3024-night span.cm-string { color: #fded02; } + +.cm-s-3024-night span.cm-variable { color: #01a252; } +.cm-s-3024-night span.cm-variable-2 { color: #01a0e4; } +.cm-s-3024-night span.cm-def { color: #e8bbd0; } +.cm-s-3024-night span.cm-bracket { color: #d6d5d4; } +.cm-s-3024-night span.cm-tag { color: #db2d20; } +.cm-s-3024-night span.cm-link { color: #a16a94; } +.cm-s-3024-night span.cm-error { background: #db2d20; color: #807d7c; } + +.cm-s-3024-night .CodeMirror-activeline-background { background: #2F2F2F; } +.cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/abcdef.css b/public/admin/view/javascript/codemirror/theme/abcdef.css new file mode 100644 index 0000000..7f9d788 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/abcdef.css @@ -0,0 +1,32 @@ +.cm-s-abcdef.CodeMirror { background: #0f0f0f; color: #defdef; } +.cm-s-abcdef div.CodeMirror-selected { background: #515151; } +.cm-s-abcdef .CodeMirror-line::selection, .cm-s-abcdef .CodeMirror-line > span::selection, .cm-s-abcdef .CodeMirror-line > span > span::selection { background: rgba(56, 56, 56, 0.99); } +.cm-s-abcdef .CodeMirror-line::-moz-selection, .cm-s-abcdef .CodeMirror-line > span::-moz-selection, .cm-s-abcdef .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 56, 56, 0.99); } +.cm-s-abcdef .CodeMirror-gutters { background: #555; border-right: 2px solid #314151; } +.cm-s-abcdef .CodeMirror-guttermarker { color: #222; } +.cm-s-abcdef .CodeMirror-guttermarker-subtle { color: azure; } +.cm-s-abcdef .CodeMirror-linenumber { color: #FFFFFF; } +.cm-s-abcdef .CodeMirror-cursor { border-left: 1px solid #00FF00; } + +.cm-s-abcdef span.cm-keyword { color: darkgoldenrod; font-weight: bold; } +.cm-s-abcdef span.cm-atom { color: #77F; } +.cm-s-abcdef span.cm-number { color: violet; } +.cm-s-abcdef span.cm-def { color: #fffabc; } +.cm-s-abcdef span.cm-variable { color: #abcdef; } +.cm-s-abcdef span.cm-variable-2 { color: #cacbcc; } +.cm-s-abcdef span.cm-variable-3 { color: #def; } +.cm-s-abcdef span.cm-property { color: #fedcba; } +.cm-s-abcdef span.cm-operator { color: #ff0; } +.cm-s-abcdef span.cm-comment { color: #7a7b7c; font-style: italic;} +.cm-s-abcdef span.cm-string { color: #2b4; } +.cm-s-abcdef span.cm-meta { color: #C9F; } +.cm-s-abcdef span.cm-qualifier { color: #FFF700; } +.cm-s-abcdef span.cm-builtin { color: #30aabc; } +.cm-s-abcdef span.cm-bracket { color: #8a8a8a; } +.cm-s-abcdef span.cm-tag { color: #FFDD44; } +.cm-s-abcdef span.cm-attribute { color: #DDFF00; } +.cm-s-abcdef span.cm-error { color: #FF0000; } +.cm-s-abcdef span.cm-header { color: aquamarine; font-weight: bold; } +.cm-s-abcdef span.cm-link { color: blueviolet; } + +.cm-s-abcdef .CodeMirror-activeline-background { background: #314151; } diff --git a/public/admin/view/javascript/codemirror/theme/ambiance-mobile.css b/public/admin/view/javascript/codemirror/theme/ambiance-mobile.css new file mode 100644 index 0000000..88d332e --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/ambiance-mobile.css @@ -0,0 +1,5 @@ +.cm-s-ambiance.CodeMirror { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} diff --git a/public/admin/view/javascript/codemirror/theme/ambiance.css b/public/admin/view/javascript/codemirror/theme/ambiance.css new file mode 100644 index 0000000..bce3446 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/ambiance.css @@ -0,0 +1,74 @@ +/* ambiance theme for codemirror */ + +/* Color scheme */ + +.cm-s-ambiance .cm-header { color: blue; } +.cm-s-ambiance .cm-quote { color: #24C2C7; } + +.cm-s-ambiance .cm-keyword { color: #cda869; } +.cm-s-ambiance .cm-atom { color: #CF7EA9; } +.cm-s-ambiance .cm-number { color: #78CF8A; } +.cm-s-ambiance .cm-def { color: #aac6e3; } +.cm-s-ambiance .cm-variable { color: #ffb795; } +.cm-s-ambiance .cm-variable-2 { color: #eed1b3; } +.cm-s-ambiance .cm-variable-3 { color: #faded3; } +.cm-s-ambiance .cm-property { color: #eed1b3; } +.cm-s-ambiance .cm-operator { color: #fa8d6a; } +.cm-s-ambiance .cm-comment { color: #555; font-style:italic; } +.cm-s-ambiance .cm-string { color: #8f9d6a; } +.cm-s-ambiance .cm-string-2 { color: #9d937c; } +.cm-s-ambiance .cm-meta { color: #D2A8A1; } +.cm-s-ambiance .cm-qualifier { color: yellow; } +.cm-s-ambiance .cm-builtin { color: #9999cc; } +.cm-s-ambiance .cm-bracket { color: #24C2C7; } +.cm-s-ambiance .cm-tag { color: #fee4ff; } +.cm-s-ambiance .cm-attribute { color: #9B859D; } +.cm-s-ambiance .cm-hr { color: pink; } +.cm-s-ambiance .cm-link { color: #F4C20B; } +.cm-s-ambiance .cm-special { color: #FF9D00; } +.cm-s-ambiance .cm-error { color: #AF2018; } + +.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; } +.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; } + +.cm-s-ambiance div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); } +.cm-s-ambiance.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-ambiance .CodeMirror-line::selection, .cm-s-ambiance .CodeMirror-line > span::selection, .cm-s-ambiance .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-ambiance .CodeMirror-line::-moz-selection, .cm-s-ambiance .CodeMirror-line > span::-moz-selection, .cm-s-ambiance .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } + +/* Editor styling */ + +.cm-s-ambiance.CodeMirror { + line-height: 1.40em; + color: #E6E1DC; + background-color: #202020; + -webkit-box-shadow: inset 0 0 10px black; + -moz-box-shadow: inset 0 0 10px black; + box-shadow: inset 0 0 10px black; +} + +.cm-s-ambiance .CodeMirror-gutters { + background: #3D3D3D; + border-right: 1px solid #4D4D4D; + box-shadow: 0 10px 20px black; +} + +.cm-s-ambiance .CodeMirror-linenumber { + text-shadow: 0px 1px 1px #4d4d4d; + color: #111; + padding: 0 5px; +} + +.cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; } +.cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; } + +.cm-s-ambiance .CodeMirror-cursor { border-left: 1px solid #7991E8; } + +.cm-s-ambiance .CodeMirror-activeline-background { + background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031); +} + +.cm-s-ambiance.CodeMirror, +.cm-s-ambiance .CodeMirror-gutters { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC"); +} diff --git a/public/admin/view/javascript/codemirror/theme/base16-dark.css b/public/admin/view/javascript/codemirror/theme/base16-dark.css new file mode 100644 index 0000000..026a816 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/base16-dark.css @@ -0,0 +1,38 @@ +/* + + Name: Base16 Default Dark + Author: Chris Kempson (http://chriskempson.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-base16-dark.CodeMirror { background: #151515; color: #e0e0e0; } +.cm-s-base16-dark div.CodeMirror-selected { background: #303030; } +.cm-s-base16-dark .CodeMirror-line::selection, .cm-s-base16-dark .CodeMirror-line > span::selection, .cm-s-base16-dark .CodeMirror-line > span > span::selection { background: rgba(48, 48, 48, .99); } +.cm-s-base16-dark .CodeMirror-line::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(48, 48, 48, .99); } +.cm-s-base16-dark .CodeMirror-gutters { background: #151515; border-right: 0px; } +.cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; } +.cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; } +.cm-s-base16-dark .CodeMirror-linenumber { color: #505050; } +.cm-s-base16-dark .CodeMirror-cursor { border-left: 1px solid #b0b0b0; } + +.cm-s-base16-dark span.cm-comment { color: #8f5536; } +.cm-s-base16-dark span.cm-atom { color: #aa759f; } +.cm-s-base16-dark span.cm-number { color: #aa759f; } + +.cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute { color: #90a959; } +.cm-s-base16-dark span.cm-keyword { color: #ac4142; } +.cm-s-base16-dark span.cm-string { color: #f4bf75; } + +.cm-s-base16-dark span.cm-variable { color: #90a959; } +.cm-s-base16-dark span.cm-variable-2 { color: #6a9fb5; } +.cm-s-base16-dark span.cm-def { color: #d28445; } +.cm-s-base16-dark span.cm-bracket { color: #e0e0e0; } +.cm-s-base16-dark span.cm-tag { color: #ac4142; } +.cm-s-base16-dark span.cm-link { color: #aa759f; } +.cm-s-base16-dark span.cm-error { background: #ac4142; color: #b0b0b0; } + +.cm-s-base16-dark .CodeMirror-activeline-background { background: #202020; } +.cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/base16-light.css b/public/admin/view/javascript/codemirror/theme/base16-light.css new file mode 100644 index 0000000..474e0ca --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/base16-light.css @@ -0,0 +1,38 @@ +/* + + Name: Base16 Default Light + Author: Chris Kempson (http://chriskempson.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-base16-light.CodeMirror { background: #f5f5f5; color: #202020; } +.cm-s-base16-light div.CodeMirror-selected { background: #e0e0e0; } +.cm-s-base16-light .CodeMirror-line::selection, .cm-s-base16-light .CodeMirror-line > span::selection, .cm-s-base16-light .CodeMirror-line > span > span::selection { background: #e0e0e0; } +.cm-s-base16-light .CodeMirror-line::-moz-selection, .cm-s-base16-light .CodeMirror-line > span::-moz-selection, .cm-s-base16-light .CodeMirror-line > span > span::-moz-selection { background: #e0e0e0; } +.cm-s-base16-light .CodeMirror-gutters { background: #f5f5f5; border-right: 0px; } +.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; } +.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; } +.cm-s-base16-light .CodeMirror-linenumber { color: #b0b0b0; } +.cm-s-base16-light .CodeMirror-cursor { border-left: 1px solid #505050; } + +.cm-s-base16-light span.cm-comment { color: #8f5536; } +.cm-s-base16-light span.cm-atom { color: #aa759f; } +.cm-s-base16-light span.cm-number { color: #aa759f; } + +.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute { color: #90a959; } +.cm-s-base16-light span.cm-keyword { color: #ac4142; } +.cm-s-base16-light span.cm-string { color: #f4bf75; } + +.cm-s-base16-light span.cm-variable { color: #90a959; } +.cm-s-base16-light span.cm-variable-2 { color: #6a9fb5; } +.cm-s-base16-light span.cm-def { color: #d28445; } +.cm-s-base16-light span.cm-bracket { color: #202020; } +.cm-s-base16-light span.cm-tag { color: #ac4142; } +.cm-s-base16-light span.cm-link { color: #aa759f; } +.cm-s-base16-light span.cm-error { background: #ac4142; color: #505050; } + +.cm-s-base16-light .CodeMirror-activeline-background { background: #DDDCDC; } +.cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/bespin.css b/public/admin/view/javascript/codemirror/theme/bespin.css new file mode 100644 index 0000000..60913ba --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/bespin.css @@ -0,0 +1,34 @@ +/* + + Name: Bespin + Author: Mozilla / Jan T. Sott + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-bespin.CodeMirror {background: #28211c; color: #9d9b97;} +.cm-s-bespin div.CodeMirror-selected {background: #36312e !important;} +.cm-s-bespin .CodeMirror-gutters {background: #28211c; border-right: 0px;} +.cm-s-bespin .CodeMirror-linenumber {color: #666666;} +.cm-s-bespin .CodeMirror-cursor {border-left: 1px solid #797977 !important;} + +.cm-s-bespin span.cm-comment {color: #937121;} +.cm-s-bespin span.cm-atom {color: #9b859d;} +.cm-s-bespin span.cm-number {color: #9b859d;} + +.cm-s-bespin span.cm-property, .cm-s-bespin span.cm-attribute {color: #54be0d;} +.cm-s-bespin span.cm-keyword {color: #cf6a4c;} +.cm-s-bespin span.cm-string {color: #f9ee98;} + +.cm-s-bespin span.cm-variable {color: #54be0d;} +.cm-s-bespin span.cm-variable-2 {color: #5ea6ea;} +.cm-s-bespin span.cm-def {color: #cf7d34;} +.cm-s-bespin span.cm-error {background: #cf6a4c; color: #797977;} +.cm-s-bespin span.cm-bracket {color: #9d9b97;} +.cm-s-bespin span.cm-tag {color: #cf6a4c;} +.cm-s-bespin span.cm-link {color: #9b859d;} + +.cm-s-bespin .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-bespin .CodeMirror-activeline-background { background: #404040; } diff --git a/public/admin/view/javascript/codemirror/theme/blackboard.css b/public/admin/view/javascript/codemirror/theme/blackboard.css new file mode 100644 index 0000000..b6eaedb --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/blackboard.css @@ -0,0 +1,32 @@ +/* Port of TextMate's Blackboard theme */ + +.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } +.cm-s-blackboard div.CodeMirror-selected { background: #253B76; } +.cm-s-blackboard .CodeMirror-line::selection, .cm-s-blackboard .CodeMirror-line > span::selection, .cm-s-blackboard .CodeMirror-line > span > span::selection { background: rgba(37, 59, 118, .99); } +.cm-s-blackboard .CodeMirror-line::-moz-selection, .cm-s-blackboard .CodeMirror-line > span::-moz-selection, .cm-s-blackboard .CodeMirror-line > span > span::-moz-selection { background: rgba(37, 59, 118, .99); } +.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } +.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; } +.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; } +.cm-s-blackboard .CodeMirror-linenumber { color: #888; } +.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7; } + +.cm-s-blackboard .cm-keyword { color: #FBDE2D; } +.cm-s-blackboard .cm-atom { color: #D8FA3C; } +.cm-s-blackboard .cm-number { color: #D8FA3C; } +.cm-s-blackboard .cm-def { color: #8DA6CE; } +.cm-s-blackboard .cm-variable { color: #FF6400; } +.cm-s-blackboard .cm-operator { color: #FBDE2D; } +.cm-s-blackboard .cm-comment { color: #AEAEAE; } +.cm-s-blackboard .cm-string { color: #61CE3C; } +.cm-s-blackboard .cm-string-2 { color: #61CE3C; } +.cm-s-blackboard .cm-meta { color: #D8FA3C; } +.cm-s-blackboard .cm-builtin { color: #8DA6CE; } +.cm-s-blackboard .cm-tag { color: #8DA6CE; } +.cm-s-blackboard .cm-attribute { color: #8DA6CE; } +.cm-s-blackboard .cm-header { color: #FF6400; } +.cm-s-blackboard .cm-hr { color: #AEAEAE; } +.cm-s-blackboard .cm-link { color: #8DA6CE; } +.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } + +.cm-s-blackboard .CodeMirror-activeline-background { background: #3C3636; } +.cm-s-blackboard .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/cobalt.css b/public/admin/view/javascript/codemirror/theme/cobalt.css new file mode 100644 index 0000000..d88223e --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/cobalt.css @@ -0,0 +1,25 @@ +.cm-s-cobalt.CodeMirror { background: #002240; color: white; } +.cm-s-cobalt div.CodeMirror-selected { background: #b36539; } +.cm-s-cobalt .CodeMirror-line::selection, .cm-s-cobalt .CodeMirror-line > span::selection, .cm-s-cobalt .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); } +.cm-s-cobalt .CodeMirror-line::-moz-selection, .cm-s-cobalt .CodeMirror-line > span::-moz-selection, .cm-s-cobalt .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); } +.cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; } +.cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-cobalt span.cm-comment { color: #08f; } +.cm-s-cobalt span.cm-atom { color: #845dc4; } +.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; } +.cm-s-cobalt span.cm-keyword { color: #ffee80; } +.cm-s-cobalt span.cm-string { color: #3ad900; } +.cm-s-cobalt span.cm-meta { color: #ff9d00; } +.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } +.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; } +.cm-s-cobalt span.cm-bracket { color: #d8d8d8; } +.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } +.cm-s-cobalt span.cm-link { color: #845dc4; } +.cm-s-cobalt span.cm-error { color: #9d1e15; } + +.cm-s-cobalt .CodeMirror-activeline-background { background: #002D57; } +.cm-s-cobalt .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/colorforth.css b/public/admin/view/javascript/codemirror/theme/colorforth.css new file mode 100644 index 0000000..606899f --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/colorforth.css @@ -0,0 +1,33 @@ +.cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; } +.cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; } +.cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; } +.cm-s-colorforth .CodeMirror-linenumber { color: #bababa; } +.cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-colorforth span.cm-comment { color: #ededed; } +.cm-s-colorforth span.cm-def { color: #ff1c1c; font-weight:bold; } +.cm-s-colorforth span.cm-keyword { color: #ffd900; } +.cm-s-colorforth span.cm-builtin { color: #00d95a; } +.cm-s-colorforth span.cm-variable { color: #73ff00; } +.cm-s-colorforth span.cm-string { color: #007bff; } +.cm-s-colorforth span.cm-number { color: #00c4ff; } +.cm-s-colorforth span.cm-atom { color: #606060; } + +.cm-s-colorforth span.cm-variable-2 { color: #EEE; } +.cm-s-colorforth span.cm-variable-3 { color: #DDD; } +.cm-s-colorforth span.cm-property {} +.cm-s-colorforth span.cm-operator {} + +.cm-s-colorforth span.cm-meta { color: yellow; } +.cm-s-colorforth span.cm-qualifier { color: #FFF700; } +.cm-s-colorforth span.cm-bracket { color: #cc7; } +.cm-s-colorforth span.cm-tag { color: #FFBD40; } +.cm-s-colorforth span.cm-attribute { color: #FFF700; } +.cm-s-colorforth span.cm-error { color: #f00; } + +.cm-s-colorforth div.CodeMirror-selected { background: #333d53; } + +.cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); } + +.cm-s-colorforth .CodeMirror-activeline-background { background: #253540; } diff --git a/public/admin/view/javascript/codemirror/theme/dracula.css b/public/admin/view/javascript/codemirror/theme/dracula.css new file mode 100644 index 0000000..57f979a --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/dracula.css @@ -0,0 +1,41 @@ +/* + + Name: dracula + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme) + +*/ + + +.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters { + background-color: #282a36 !important; + color: #f8f8f2 !important; + border: none; +} +.cm-s-dracula .CodeMirror-gutters { color: #282a36; } +.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; } +.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; } +.cm-s-dracula.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-dracula span.cm-comment { color: #6272a4; } +.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; } +.cm-s-dracula span.cm-number { color: #bd93f9; } +.cm-s-dracula span.cm-variable { color: #50fa7b; } +.cm-s-dracula span.cm-variable-2 { color: white; } +.cm-s-dracula span.cm-def { color: #ffb86c; } +.cm-s-dracula span.cm-keyword { color: #ff79c6; } +.cm-s-dracula span.cm-operator { color: #ff79c6; } +.cm-s-dracula span.cm-keyword { color: #ff79c6; } +.cm-s-dracula span.cm-atom { color: #bd93f9; } +.cm-s-dracula span.cm-meta { color: #f8f8f2; } +.cm-s-dracula span.cm-tag { color: #ff79c6; } +.cm-s-dracula span.cm-attribute { color: #50fa7b; } +.cm-s-dracula span.cm-qualifier { color: #50fa7b; } +.cm-s-dracula span.cm-property { color: #66d9ef; } +.cm-s-dracula span.cm-builtin { color: #50fa7b; } +.cm-s-dracula span.cm-variable-3 { color: #50fa7b; } + +.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); } +.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/eclipse.css b/public/admin/view/javascript/codemirror/theme/eclipse.css new file mode 100644 index 0000000..1bde460 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/eclipse.css @@ -0,0 +1,23 @@ +.cm-s-eclipse span.cm-meta { color: #FF1717; } +.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } +.cm-s-eclipse span.cm-atom { color: #219; } +.cm-s-eclipse span.cm-number { color: #164; } +.cm-s-eclipse span.cm-def { color: #00f; } +.cm-s-eclipse span.cm-variable { color: black; } +.cm-s-eclipse span.cm-variable-2 { color: #0000C0; } +.cm-s-eclipse span.cm-variable-3 { color: #0000C0; } +.cm-s-eclipse span.cm-property { color: black; } +.cm-s-eclipse span.cm-operator { color: black; } +.cm-s-eclipse span.cm-comment { color: #3F7F5F; } +.cm-s-eclipse span.cm-string { color: #2A00FF; } +.cm-s-eclipse span.cm-string-2 { color: #f50; } +.cm-s-eclipse span.cm-qualifier { color: #555; } +.cm-s-eclipse span.cm-builtin { color: #30a; } +.cm-s-eclipse span.cm-bracket { color: #cc7; } +.cm-s-eclipse span.cm-tag { color: #170; } +.cm-s-eclipse span.cm-attribute { color: #00c; } +.cm-s-eclipse span.cm-link { color: #219; } +.cm-s-eclipse span.cm-error { color: #f00; } + +.cm-s-eclipse .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-eclipse .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } diff --git a/public/admin/view/javascript/codemirror/theme/elegant.css b/public/admin/view/javascript/codemirror/theme/elegant.css new file mode 100644 index 0000000..45b3ea6 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/elegant.css @@ -0,0 +1,13 @@ +.cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom { color: #762; } +.cm-s-elegant span.cm-comment { color: #262; font-style: italic; line-height: 1em; } +.cm-s-elegant span.cm-meta { color: #555; font-style: italic; line-height: 1em; } +.cm-s-elegant span.cm-variable { color: black; } +.cm-s-elegant span.cm-variable-2 { color: #b11; } +.cm-s-elegant span.cm-qualifier { color: #555; } +.cm-s-elegant span.cm-keyword { color: #730; } +.cm-s-elegant span.cm-builtin { color: #30a; } +.cm-s-elegant span.cm-link { color: #762; } +.cm-s-elegant span.cm-error { background-color: #fdd; } + +.cm-s-elegant .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-elegant .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } diff --git a/public/admin/view/javascript/codemirror/theme/erlang-dark.css b/public/admin/view/javascript/codemirror/theme/erlang-dark.css new file mode 100644 index 0000000..65fe481 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/erlang-dark.css @@ -0,0 +1,34 @@ +.cm-s-erlang-dark.CodeMirror { background: #002240; color: white; } +.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539; } +.cm-s-erlang-dark .CodeMirror-line::selection, .cm-s-erlang-dark .CodeMirror-line > span::selection, .cm-s-erlang-dark .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); } +.cm-s-erlang-dark .CodeMirror-line::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); } +.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-erlang-dark .CodeMirror-guttermarker { color: white; } +.cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-erlang-dark span.cm-quote { color: #ccc; } +.cm-s-erlang-dark span.cm-atom { color: #f133f1; } +.cm-s-erlang-dark span.cm-attribute { color: #ff80e1; } +.cm-s-erlang-dark span.cm-bracket { color: #ff9d00; } +.cm-s-erlang-dark span.cm-builtin { color: #eaa; } +.cm-s-erlang-dark span.cm-comment { color: #77f; } +.cm-s-erlang-dark span.cm-def { color: #e7a; } +.cm-s-erlang-dark span.cm-keyword { color: #ffee80; } +.cm-s-erlang-dark span.cm-meta { color: #50fefe; } +.cm-s-erlang-dark span.cm-number { color: #ffd0d0; } +.cm-s-erlang-dark span.cm-operator { color: #d55; } +.cm-s-erlang-dark span.cm-property { color: #ccc; } +.cm-s-erlang-dark span.cm-qualifier { color: #ccc; } +.cm-s-erlang-dark span.cm-special { color: #ffbbbb; } +.cm-s-erlang-dark span.cm-string { color: #3ad900; } +.cm-s-erlang-dark span.cm-string-2 { color: #ccc; } +.cm-s-erlang-dark span.cm-tag { color: #9effff; } +.cm-s-erlang-dark span.cm-variable { color: #50fe50; } +.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; } +.cm-s-erlang-dark span.cm-variable-3 { color: #ccc; } +.cm-s-erlang-dark span.cm-error { color: #9d1e15; } + +.cm-s-erlang-dark .CodeMirror-activeline-background { background: #013461; } +.cm-s-erlang-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/hopscotch.css b/public/admin/view/javascript/codemirror/theme/hopscotch.css new file mode 100644 index 0000000..7d05431 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/hopscotch.css @@ -0,0 +1,34 @@ +/* + + Name: Hopscotch + Author: Jan T. Sott + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-hopscotch.CodeMirror {background: #322931; color: #d5d3d5;} +.cm-s-hopscotch div.CodeMirror-selected {background: #433b42 !important;} +.cm-s-hopscotch .CodeMirror-gutters {background: #322931; border-right: 0px;} +.cm-s-hopscotch .CodeMirror-linenumber {color: #797379;} +.cm-s-hopscotch .CodeMirror-cursor {border-left: 1px solid #989498 !important;} + +.cm-s-hopscotch span.cm-comment {color: #b33508;} +.cm-s-hopscotch span.cm-atom {color: #c85e7c;} +.cm-s-hopscotch span.cm-number {color: #c85e7c;} + +.cm-s-hopscotch span.cm-property, .cm-s-hopscotch span.cm-attribute {color: #8fc13e;} +.cm-s-hopscotch span.cm-keyword {color: #dd464c;} +.cm-s-hopscotch span.cm-string {color: #fdcc59;} + +.cm-s-hopscotch span.cm-variable {color: #8fc13e;} +.cm-s-hopscotch span.cm-variable-2 {color: #1290bf;} +.cm-s-hopscotch span.cm-def {color: #fd8b19;} +.cm-s-hopscotch span.cm-error {background: #dd464c; color: #989498;} +.cm-s-hopscotch span.cm-bracket {color: #d5d3d5;} +.cm-s-hopscotch span.cm-tag {color: #dd464c;} +.cm-s-hopscotch span.cm-link {color: #c85e7c;} + +.cm-s-hopscotch .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-hopscotch .CodeMirror-activeline-background { background: #302020; } diff --git a/public/admin/view/javascript/codemirror/theme/icecoder.css b/public/admin/view/javascript/codemirror/theme/icecoder.css new file mode 100644 index 0000000..ffebaf2 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/icecoder.css @@ -0,0 +1,43 @@ +/* +ICEcoder default theme by Matt Pass, used in code editor available at https://icecoder.net +*/ + +.cm-s-icecoder { color: #666; background: #1d1d1b; } + +.cm-s-icecoder span.cm-keyword { color: #eee; font-weight:bold; } /* off-white 1 */ +.cm-s-icecoder span.cm-atom { color: #e1c76e; } /* yellow */ +.cm-s-icecoder span.cm-number { color: #6cb5d9; } /* blue */ +.cm-s-icecoder span.cm-def { color: #b9ca4a; } /* green */ + +.cm-s-icecoder span.cm-variable { color: #6cb5d9; } /* blue */ +.cm-s-icecoder span.cm-variable-2 { color: #cc1e5c; } /* pink */ +.cm-s-icecoder span.cm-variable-3 { color: #f9602c; } /* orange */ + +.cm-s-icecoder span.cm-property { color: #eee; } /* off-white 1 */ +.cm-s-icecoder span.cm-operator { color: #9179bb; } /* purple */ +.cm-s-icecoder span.cm-comment { color: #97a3aa; } /* grey-blue */ + +.cm-s-icecoder span.cm-string { color: #b9ca4a; } /* green */ +.cm-s-icecoder span.cm-string-2 { color: #6cb5d9; } /* blue */ + +.cm-s-icecoder span.cm-meta { color: #555; } /* grey */ + +.cm-s-icecoder span.cm-qualifier { color: #555; } /* grey */ +.cm-s-icecoder span.cm-builtin { color: #214e7b; } /* bright blue */ +.cm-s-icecoder span.cm-bracket { color: #cc7; } /* grey-yellow */ + +.cm-s-icecoder span.cm-tag { color: #e8e8e8; } /* off-white 2 */ +.cm-s-icecoder span.cm-attribute { color: #099; } /* teal */ + +.cm-s-icecoder span.cm-header { color: #6a0d6a; } /* purple-pink */ +.cm-s-icecoder span.cm-quote { color: #186718; } /* dark green */ +.cm-s-icecoder span.cm-hr { color: #888; } /* mid-grey */ +.cm-s-icecoder span.cm-link { color: #e1c76e; } /* yellow */ +.cm-s-icecoder span.cm-error { color: #d00; } /* red */ + +.cm-s-icecoder .CodeMirror-cursor { border-left: 1px solid white; } +.cm-s-icecoder div.CodeMirror-selected { color: #fff; background: #037; } +.cm-s-icecoder .CodeMirror-gutters { background: #1d1d1b; min-width: 41px; border-right: 0; } +.cm-s-icecoder .CodeMirror-linenumber { color: #555; cursor: default; } +.cm-s-icecoder .CodeMirror-matchingbracket { color: #fff !important; background: #555 !important; } +.cm-s-icecoder .CodeMirror-activeline-background { background: #000; } diff --git a/public/admin/view/javascript/codemirror/theme/isotope.css b/public/admin/view/javascript/codemirror/theme/isotope.css new file mode 100644 index 0000000..d0d6263 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/isotope.css @@ -0,0 +1,34 @@ +/* + + Name: Isotope + Author: David Desandro / Jan T. Sott + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-isotope.CodeMirror {background: #000000; color: #e0e0e0;} +.cm-s-isotope div.CodeMirror-selected {background: #404040 !important;} +.cm-s-isotope .CodeMirror-gutters {background: #000000; border-right: 0px;} +.cm-s-isotope .CodeMirror-linenumber {color: #808080;} +.cm-s-isotope .CodeMirror-cursor {border-left: 1px solid #c0c0c0 !important;} + +.cm-s-isotope span.cm-comment {color: #3300ff;} +.cm-s-isotope span.cm-atom {color: #cc00ff;} +.cm-s-isotope span.cm-number {color: #cc00ff;} + +.cm-s-isotope span.cm-property, .cm-s-isotope span.cm-attribute {color: #33ff00;} +.cm-s-isotope span.cm-keyword {color: #ff0000;} +.cm-s-isotope span.cm-string {color: #ff0099;} + +.cm-s-isotope span.cm-variable {color: #33ff00;} +.cm-s-isotope span.cm-variable-2 {color: #0066ff;} +.cm-s-isotope span.cm-def {color: #ff9900;} +.cm-s-isotope span.cm-error {background: #ff0000; color: #c0c0c0;} +.cm-s-isotope span.cm-bracket {color: #e0e0e0;} +.cm-s-isotope span.cm-tag {color: #ff0000;} +.cm-s-isotope span.cm-link {color: #cc00ff;} + +.cm-s-isotope .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-isotope .CodeMirror-activeline-background { background: #202020; } diff --git a/public/admin/view/javascript/codemirror/theme/lesser-dark.css b/public/admin/view/javascript/codemirror/theme/lesser-dark.css new file mode 100644 index 0000000..690c183 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/lesser-dark.css @@ -0,0 +1,47 @@ +/* +http://lesscss.org/ dark theme +Ported to CodeMirror by Peter Kroon +*/ +.cm-s-lesser-dark { + line-height: 1.3em; +} +.cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; } +.cm-s-lesser-dark div.CodeMirror-selected { background: #45443B; } /* 33322B*/ +.cm-s-lesser-dark .CodeMirror-line::selection, .cm-s-lesser-dark .CodeMirror-line > span::selection, .cm-s-lesser-dark .CodeMirror-line > span > span::selection { background: rgba(69, 68, 59, .99); } +.cm-s-lesser-dark .CodeMirror-line::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(69, 68, 59, .99); } +.cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white; } +.cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/ + +.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/ + +.cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; } +.cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; } +.cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-lesser-dark .CodeMirror-linenumber { color: #777; } + +.cm-s-lesser-dark span.cm-header { color: #a0a; } +.cm-s-lesser-dark span.cm-quote { color: #090; } +.cm-s-lesser-dark span.cm-keyword { color: #599eff; } +.cm-s-lesser-dark span.cm-atom { color: #C2B470; } +.cm-s-lesser-dark span.cm-number { color: #B35E4D; } +.cm-s-lesser-dark span.cm-def { color: white; } +.cm-s-lesser-dark span.cm-variable { color:#D9BF8C; } +.cm-s-lesser-dark span.cm-variable-2 { color: #669199; } +.cm-s-lesser-dark span.cm-variable-3 { color: white; } +.cm-s-lesser-dark span.cm-property { color: #92A75C; } +.cm-s-lesser-dark span.cm-operator { color: #92A75C; } +.cm-s-lesser-dark span.cm-comment { color: #666; } +.cm-s-lesser-dark span.cm-string { color: #BCD279; } +.cm-s-lesser-dark span.cm-string-2 { color: #f50; } +.cm-s-lesser-dark span.cm-meta { color: #738C73; } +.cm-s-lesser-dark span.cm-qualifier { color: #555; } +.cm-s-lesser-dark span.cm-builtin { color: #ff9e59; } +.cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; } +.cm-s-lesser-dark span.cm-tag { color: #669199; } +.cm-s-lesser-dark span.cm-attribute { color: #00c; } +.cm-s-lesser-dark span.cm-hr { color: #999; } +.cm-s-lesser-dark span.cm-link { color: #00c; } +.cm-s-lesser-dark span.cm-error { color: #9d1e15; } + +.cm-s-lesser-dark .CodeMirror-activeline-background { background: #3C3A3A; } +.cm-s-lesser-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/liquibyte.css b/public/admin/view/javascript/codemirror/theme/liquibyte.css new file mode 100644 index 0000000..9db8bde --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/liquibyte.css @@ -0,0 +1,95 @@ +.cm-s-liquibyte.CodeMirror { + background-color: #000; + color: #fff; + line-height: 1.2em; + font-size: 1em; +} +.cm-s-liquibyte .CodeMirror-focused .cm-matchhighlight { + text-decoration: underline; + text-decoration-color: #0f0; + text-decoration-style: wavy; +} +.cm-s-liquibyte .cm-trailingspace { + text-decoration: line-through; + text-decoration-color: #f00; + text-decoration-style: dotted; +} +.cm-s-liquibyte .cm-tab { + text-decoration: line-through; + text-decoration-color: #404040; + text-decoration-style: dotted; +} +.cm-s-liquibyte .CodeMirror-gutters { background-color: #262626; border-right: 1px solid #505050; padding-right: 0.8em; } +.cm-s-liquibyte .CodeMirror-gutter-elt div { font-size: 1.2em; } +.cm-s-liquibyte .CodeMirror-guttermarker { } +.cm-s-liquibyte .CodeMirror-guttermarker-subtle { } +.cm-s-liquibyte .CodeMirror-linenumber { color: #606060; padding-left: 0; } +.cm-s-liquibyte .CodeMirror-cursor { border-left: 1px solid #eee; } + +.cm-s-liquibyte span.cm-comment { color: #008000; } +.cm-s-liquibyte span.cm-def { color: #ffaf40; font-weight: bold; } +.cm-s-liquibyte span.cm-keyword { color: #c080ff; font-weight: bold; } +.cm-s-liquibyte span.cm-builtin { color: #ffaf40; font-weight: bold; } +.cm-s-liquibyte span.cm-variable { color: #5967ff; font-weight: bold; } +.cm-s-liquibyte span.cm-string { color: #ff8000; } +.cm-s-liquibyte span.cm-number { color: #0f0; font-weight: bold; } +.cm-s-liquibyte span.cm-atom { color: #bf3030; font-weight: bold; } + +.cm-s-liquibyte span.cm-variable-2 { color: #007f7f; font-weight: bold; } +.cm-s-liquibyte span.cm-variable-3 { color: #c080ff; font-weight: bold; } +.cm-s-liquibyte span.cm-property { color: #999; font-weight: bold; } +.cm-s-liquibyte span.cm-operator { color: #fff; } + +.cm-s-liquibyte span.cm-meta { color: #0f0; } +.cm-s-liquibyte span.cm-qualifier { color: #fff700; font-weight: bold; } +.cm-s-liquibyte span.cm-bracket { color: #cc7; } +.cm-s-liquibyte span.cm-tag { color: #ff0; font-weight: bold; } +.cm-s-liquibyte span.cm-attribute { color: #c080ff; font-weight: bold; } +.cm-s-liquibyte span.cm-error { color: #f00; } + +.cm-s-liquibyte div.CodeMirror-selected { background-color: rgba(255, 0, 0, 0.25); } + +.cm-s-liquibyte span.cm-compilation { background-color: rgba(255, 255, 255, 0.12); } + +.cm-s-liquibyte .CodeMirror-activeline-background { background-color: rgba(0, 255, 0, 0.15); } + +/* Default styles for common addons */ +.cm-s-liquibyte .CodeMirror span.CodeMirror-matchingbracket { color: #0f0; font-weight: bold; } +.cm-s-liquibyte .CodeMirror span.CodeMirror-nonmatchingbracket { color: #f00; font-weight: bold; } +.CodeMirror-matchingtag { background-color: rgba(150, 255, 0, .3); } +/* Scrollbars */ +/* Simple */ +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div:hover, div.CodeMirror-simplescroll-vertical div:hover { + background-color: rgba(80, 80, 80, .7); +} +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div, div.CodeMirror-simplescroll-vertical div { + background-color: rgba(80, 80, 80, .3); + border: 1px solid #404040; + border-radius: 5px; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-vertical div { + border-top: 1px solid #404040; + border-bottom: 1px solid #404040; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div { + border-left: 1px solid #404040; + border-right: 1px solid #404040; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-vertical { + background-color: #262626; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal { + background-color: #262626; + border-top: 1px solid #404040; +} +/* Overlay */ +.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div, div.CodeMirror-overlayscroll-vertical div { + background-color: #404040; + border-radius: 5px; +} +.cm-s-liquibyte div.CodeMirror-overlayscroll-vertical div { + border: 1px solid #404040; +} +.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div { + border: 1px solid #404040; +} diff --git a/public/admin/view/javascript/codemirror/theme/material.css b/public/admin/view/javascript/codemirror/theme/material.css new file mode 100644 index 0000000..91ed6ce --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/material.css @@ -0,0 +1,53 @@ +/* + + Name: material + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original material color scheme by Mattia Astorino (https://github.com/equinusocio/material-theme) + +*/ + +.cm-s-material { + background-color: #263238; + color: rgba(233, 237, 237, 1); +} +.cm-s-material .CodeMirror-gutters { + background: #263238; + color: rgb(83,127,126); + border: none; +} +.cm-s-material .CodeMirror-guttermarker, .cm-s-material .CodeMirror-guttermarker-subtle, .cm-s-material .CodeMirror-linenumber { color: rgb(83,127,126); } +.cm-s-material .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } +.cm-s-material div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); } +.cm-s-material.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-material .CodeMirror-line::selection, .cm-s-material .CodeMirror-line > span::selection, .cm-s-material .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-material .CodeMirror-line::-moz-selection, .cm-s-material .CodeMirror-line > span::-moz-selection, .cm-s-material .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } + +.cm-s-material .CodeMirror-activeline-background { background: rgba(0, 0, 0, 0); } +.cm-s-material .cm-keyword { color: rgba(199, 146, 234, 1); } +.cm-s-material .cm-operator { color: rgba(233, 237, 237, 1); } +.cm-s-material .cm-variable-2 { color: #80CBC4; } +.cm-s-material .cm-variable-3 { color: #82B1FF; } +.cm-s-material .cm-builtin { color: #DECB6B; } +.cm-s-material .cm-atom { color: #F77669; } +.cm-s-material .cm-number { color: #F77669; } +.cm-s-material .cm-def { color: rgba(233, 237, 237, 1); } +.cm-s-material .cm-string { color: #C3E88D; } +.cm-s-material .cm-string-2 { color: #80CBC4; } +.cm-s-material .cm-comment { color: #546E7A; } +.cm-s-material .cm-variable { color: #82B1FF; } +.cm-s-material .cm-tag { color: #80CBC4; } +.cm-s-material .cm-meta { color: #80CBC4; } +.cm-s-material .cm-attribute { color: #FFCB6B; } +.cm-s-material .cm-property { color: #80CBAE; } +.cm-s-material .cm-qualifier { color: #DECB6B; } +.cm-s-material .cm-variable-3 { color: #DECB6B; } +.cm-s-material .cm-tag { color: rgba(255, 83, 112, 1); } +.cm-s-material .cm-error { + color: rgba(255, 255, 255, 1.0); + background-color: #EC5F67; +} +.cm-s-material .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/public/admin/view/javascript/codemirror/theme/mbo.css b/public/admin/view/javascript/codemirror/theme/mbo.css new file mode 100644 index 0000000..e164fcf --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/mbo.css @@ -0,0 +1,37 @@ +/****************************************************************/ +/* Based on mbonaci's Brackets mbo theme */ +/* https://github.com/mbonaci/global/blob/master/Mbo.tmTheme */ +/* Create your own: http://tmtheme-editor.herokuapp.com */ +/****************************************************************/ + +.cm-s-mbo.CodeMirror { background: #2c2c2c; color: #ffffec; } +.cm-s-mbo div.CodeMirror-selected { background: #716C62; } +.cm-s-mbo .CodeMirror-line::selection, .cm-s-mbo .CodeMirror-line > span::selection, .cm-s-mbo .CodeMirror-line > span > span::selection { background: rgba(113, 108, 98, .99); } +.cm-s-mbo .CodeMirror-line::-moz-selection, .cm-s-mbo .CodeMirror-line > span::-moz-selection, .cm-s-mbo .CodeMirror-line > span > span::-moz-selection { background: rgba(113, 108, 98, .99); } +.cm-s-mbo .CodeMirror-gutters { background: #4e4e4e; border-right: 0px; } +.cm-s-mbo .CodeMirror-guttermarker { color: white; } +.cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; } +.cm-s-mbo .CodeMirror-linenumber { color: #dadada; } +.cm-s-mbo .CodeMirror-cursor { border-left: 1px solid #ffffec; } + +.cm-s-mbo span.cm-comment { color: #95958a; } +.cm-s-mbo span.cm-atom { color: #00a8c6; } +.cm-s-mbo span.cm-number { color: #00a8c6; } + +.cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute { color: #9ddfe9; } +.cm-s-mbo span.cm-keyword { color: #ffb928; } +.cm-s-mbo span.cm-string { color: #ffcf6c; } +.cm-s-mbo span.cm-string.cm-property { color: #ffffec; } + +.cm-s-mbo span.cm-variable { color: #ffffec; } +.cm-s-mbo span.cm-variable-2 { color: #00a8c6; } +.cm-s-mbo span.cm-def { color: #ffffec; } +.cm-s-mbo span.cm-bracket { color: #fffffc; font-weight: bold; } +.cm-s-mbo span.cm-tag { color: #9ddfe9; } +.cm-s-mbo span.cm-link { color: #f54b07; } +.cm-s-mbo span.cm-error { border-bottom: #636363; color: #ffffec; } +.cm-s-mbo span.cm-qualifier { color: #ffffec; } + +.cm-s-mbo .CodeMirror-activeline-background { background: #494b41; } +.cm-s-mbo .CodeMirror-matchingbracket { color: #ffb928 !important; } +.cm-s-mbo .CodeMirror-matchingtag { background: rgba(255, 255, 255, .37); } diff --git a/public/admin/view/javascript/codemirror/theme/mdn-like.css b/public/admin/view/javascript/codemirror/theme/mdn-like.css new file mode 100644 index 0000000..f325d45 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/mdn-like.css @@ -0,0 +1,46 @@ +/* + MDN-LIKE Theme - Mozilla + Ported to CodeMirror by Peter Kroon <plakroon@gmail.com> + Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues + GitHub: @peterkroon + + The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation + +*/ +.cm-s-mdn-like.CodeMirror { color: #999; background-color: #fff; } +.cm-s-mdn-like div.CodeMirror-selected { background: #cfc; } +.cm-s-mdn-like .CodeMirror-line::selection, .cm-s-mdn-like .CodeMirror-line > span::selection, .cm-s-mdn-like .CodeMirror-line > span > span::selection { background: #cfc; } +.cm-s-mdn-like .CodeMirror-line::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span > span::-moz-selection { background: #cfc; } + +.cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; } +.cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; padding-left: 8px; } +.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; } + +.cm-s-mdn-like .cm-keyword { color: #6262FF; } +.cm-s-mdn-like .cm-atom { color: #F90; } +.cm-s-mdn-like .cm-number { color: #ca7841; } +.cm-s-mdn-like .cm-def { color: #8DA6CE; } +.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; } +.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def { color: #07a; } + +.cm-s-mdn-like .cm-variable { color: #07a; } +.cm-s-mdn-like .cm-property { color: #905; } +.cm-s-mdn-like .cm-qualifier { color: #690; } + +.cm-s-mdn-like .cm-operator { color: #cda869; } +.cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; } +.cm-s-mdn-like .cm-string { color:#07a; font-style:italic; } +.cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/ +.cm-s-mdn-like .cm-meta { color: #000; } /*?*/ +.cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/ +.cm-s-mdn-like .cm-tag { color: #997643; } +.cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/ +.cm-s-mdn-like .cm-header { color: #FF6400; } +.cm-s-mdn-like .cm-hr { color: #AEAEAE; } +.cm-s-mdn-like .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } +.cm-s-mdn-like .cm-error { border-bottom: 1px solid red; } + +div.cm-s-mdn-like .CodeMirror-activeline-background { background: #efefff; } +div.cm-s-mdn-like span.CodeMirror-matchingbracket { outline:1px solid grey; color: inherit; } + +.cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); } diff --git a/public/admin/view/javascript/codemirror/theme/midnight.css b/public/admin/view/javascript/codemirror/theme/midnight.css new file mode 100644 index 0000000..e41f105 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/midnight.css @@ -0,0 +1,45 @@ +/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ + +/*<!--match-->*/ +.cm-s-midnight span.CodeMirror-matchhighlight { background: #494949; } +.cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; } + +/*<!--activeline-->*/ +.cm-s-midnight .CodeMirror-activeline-background { background: #253540; } + +.cm-s-midnight.CodeMirror { + background: #0F192A; + color: #D1EDFF; +} + +.cm-s-midnight.CodeMirror { border-top: 1px solid black; border-bottom: 1px solid black; } + +.cm-s-midnight div.CodeMirror-selected { background: #314D67; } +.cm-s-midnight .CodeMirror-line::selection, .cm-s-midnight .CodeMirror-line > span::selection, .cm-s-midnight .CodeMirror-line > span > span::selection { background: rgba(49, 77, 103, .99); } +.cm-s-midnight .CodeMirror-line::-moz-selection, .cm-s-midnight .CodeMirror-line > span::-moz-selection, .cm-s-midnight .CodeMirror-line > span > span::-moz-selection { background: rgba(49, 77, 103, .99); } +.cm-s-midnight .CodeMirror-gutters { background: #0F192A; border-right: 1px solid; } +.cm-s-midnight .CodeMirror-guttermarker { color: white; } +.cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-midnight .CodeMirror-linenumber { color: #D0D0D0; } +.cm-s-midnight .CodeMirror-cursor { border-left: 1px solid #F8F8F0; } + +.cm-s-midnight span.cm-comment { color: #428BDD; } +.cm-s-midnight span.cm-atom { color: #AE81FF; } +.cm-s-midnight span.cm-number { color: #D1EDFF; } + +.cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute { color: #A6E22E; } +.cm-s-midnight span.cm-keyword { color: #E83737; } +.cm-s-midnight span.cm-string { color: #1DC116; } + +.cm-s-midnight span.cm-variable { color: #FFAA3E; } +.cm-s-midnight span.cm-variable-2 { color: #FFAA3E; } +.cm-s-midnight span.cm-def { color: #4DD; } +.cm-s-midnight span.cm-bracket { color: #D1EDFF; } +.cm-s-midnight span.cm-tag { color: #449; } +.cm-s-midnight span.cm-link { color: #AE81FF; } +.cm-s-midnight span.cm-error { background: #F92672; color: #F8F8F0; } + +.cm-s-midnight .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/public/admin/view/javascript/codemirror/theme/monokai.css b/public/admin/view/javascript/codemirror/theme/monokai.css new file mode 100644 index 0000000..7c8a4c5 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/monokai.css @@ -0,0 +1,36 @@ +/* Based on Sublime Text's Monokai theme */ + +.cm-s-monokai.CodeMirror { background: #272822; color: #f8f8f2; } +.cm-s-monokai div.CodeMirror-selected { background: #49483E; } +.cm-s-monokai .CodeMirror-line::selection, .cm-s-monokai .CodeMirror-line > span::selection, .cm-s-monokai .CodeMirror-line > span > span::selection { background: rgba(73, 72, 62, .99); } +.cm-s-monokai .CodeMirror-line::-moz-selection, .cm-s-monokai .CodeMirror-line > span::-moz-selection, .cm-s-monokai .CodeMirror-line > span > span::-moz-selection { background: rgba(73, 72, 62, .99); } +.cm-s-monokai .CodeMirror-gutters { background: #272822; border-right: 0px; } +.cm-s-monokai .CodeMirror-guttermarker { color: white; } +.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-monokai .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-monokai .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } + +.cm-s-monokai span.cm-comment { color: #75715e; } +.cm-s-monokai span.cm-atom { color: #ae81ff; } +.cm-s-monokai span.cm-number { color: #ae81ff; } + +.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute { color: #a6e22e; } +.cm-s-monokai span.cm-keyword { color: #f92672; } +.cm-s-monokai span.cm-builtin { color: #66d9ef; } +.cm-s-monokai span.cm-string { color: #e6db74; } + +.cm-s-monokai span.cm-variable { color: #f8f8f2; } +.cm-s-monokai span.cm-variable-2 { color: #9effff; } +.cm-s-monokai span.cm-variable-3 { color: #66d9ef; } +.cm-s-monokai span.cm-def { color: #fd971f; } +.cm-s-monokai span.cm-bracket { color: #f8f8f2; } +.cm-s-monokai span.cm-tag { color: #f92672; } +.cm-s-monokai span.cm-header { color: #ae81ff; } +.cm-s-monokai span.cm-link { color: #ae81ff; } +.cm-s-monokai span.cm-error { background: #f92672; color: #f8f8f0; } + +.cm-s-monokai .CodeMirror-activeline-background { background: #373831; } +.cm-s-monokai .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/public/admin/view/javascript/codemirror/theme/neat.css b/public/admin/view/javascript/codemirror/theme/neat.css new file mode 100644 index 0000000..4267b1a --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/neat.css @@ -0,0 +1,12 @@ +.cm-s-neat span.cm-comment { color: #a86; } +.cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } +.cm-s-neat span.cm-string { color: #a22; } +.cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } +.cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } +.cm-s-neat span.cm-variable { color: black; } +.cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } +.cm-s-neat span.cm-meta { color: #555; } +.cm-s-neat span.cm-link { color: #3a3; } + +.cm-s-neat .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-neat .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } diff --git a/public/admin/view/javascript/codemirror/theme/neo.css b/public/admin/view/javascript/codemirror/theme/neo.css new file mode 100644 index 0000000..b28d5c6 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/neo.css @@ -0,0 +1,43 @@ +/* neo theme for codemirror */ + +/* Color scheme */ + +.cm-s-neo.CodeMirror { + background-color:#ffffff; + color:#2e383c; + line-height:1.4375; +} +.cm-s-neo .cm-comment { color:#75787b; } +.cm-s-neo .cm-keyword, .cm-s-neo .cm-property { color:#1d75b3; } +.cm-s-neo .cm-atom,.cm-s-neo .cm-number { color:#75438a; } +.cm-s-neo .cm-node,.cm-s-neo .cm-tag { color:#9c3328; } +.cm-s-neo .cm-string { color:#b35e14; } +.cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier { color:#047d65; } + + +/* Editor styling */ + +.cm-s-neo pre { + padding:0; +} + +.cm-s-neo .CodeMirror-gutters { + border:none; + border-right:10px solid transparent; + background-color:transparent; +} + +.cm-s-neo .CodeMirror-linenumber { + padding:0; + color:#e0e2e5; +} + +.cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } +.cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } + +.cm-s-neo .CodeMirror-cursor { + width: auto; + border: 0; + background: rgba(155,157,162,0.37); + z-index: 1; +} diff --git a/public/admin/view/javascript/codemirror/theme/night.css b/public/admin/view/javascript/codemirror/theme/night.css new file mode 100644 index 0000000..fd4e561 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/night.css @@ -0,0 +1,27 @@ +/* Loosely based on the Midnight Textmate theme */ + +.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; } +.cm-s-night div.CodeMirror-selected { background: #447; } +.cm-s-night .CodeMirror-line::selection, .cm-s-night .CodeMirror-line > span::selection, .cm-s-night .CodeMirror-line > span > span::selection { background: rgba(68, 68, 119, .99); } +.cm-s-night .CodeMirror-line::-moz-selection, .cm-s-night .CodeMirror-line > span::-moz-selection, .cm-s-night .CodeMirror-line > span > span::-moz-selection { background: rgba(68, 68, 119, .99); } +.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-night .CodeMirror-guttermarker { color: white; } +.cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; } +.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; } +.cm-s-night .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-night span.cm-comment { color: #8900d1; } +.cm-s-night span.cm-atom { color: #845dc4; } +.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; } +.cm-s-night span.cm-keyword { color: #599eff; } +.cm-s-night span.cm-string { color: #37f14a; } +.cm-s-night span.cm-meta { color: #7678e2; } +.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; } +.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; } +.cm-s-night span.cm-bracket { color: #8da6ce; } +.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; } +.cm-s-night span.cm-link { color: #845dc4; } +.cm-s-night span.cm-error { color: #9d1e15; } + +.cm-s-night .CodeMirror-activeline-background { background: #1C005A; } +.cm-s-night .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/paraiso-dark.css b/public/admin/view/javascript/codemirror/theme/paraiso-dark.css new file mode 100644 index 0000000..aa9d207 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/paraiso-dark.css @@ -0,0 +1,38 @@ +/* + + Name: Paraíso (Dark) + Author: Jan T. Sott + + Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) + +*/ + +.cm-s-paraiso-dark.CodeMirror { background: #2f1e2e; color: #b9b6b0; } +.cm-s-paraiso-dark div.CodeMirror-selected { background: #41323f; } +.cm-s-paraiso-dark .CodeMirror-line::selection, .cm-s-paraiso-dark .CodeMirror-line > span::selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::selection { background: rgba(65, 50, 63, .99); } +.cm-s-paraiso-dark .CodeMirror-line::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(65, 50, 63, .99); } +.cm-s-paraiso-dark .CodeMirror-gutters { background: #2f1e2e; border-right: 0px; } +.cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; } +.cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; } +.cm-s-paraiso-dark .CodeMirror-linenumber { color: #776e71; } +.cm-s-paraiso-dark .CodeMirror-cursor { border-left: 1px solid #8d8687; } + +.cm-s-paraiso-dark span.cm-comment { color: #e96ba8; } +.cm-s-paraiso-dark span.cm-atom { color: #815ba4; } +.cm-s-paraiso-dark span.cm-number { color: #815ba4; } + +.cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute { color: #48b685; } +.cm-s-paraiso-dark span.cm-keyword { color: #ef6155; } +.cm-s-paraiso-dark span.cm-string { color: #fec418; } + +.cm-s-paraiso-dark span.cm-variable { color: #48b685; } +.cm-s-paraiso-dark span.cm-variable-2 { color: #06b6ef; } +.cm-s-paraiso-dark span.cm-def { color: #f99b15; } +.cm-s-paraiso-dark span.cm-bracket { color: #b9b6b0; } +.cm-s-paraiso-dark span.cm-tag { color: #ef6155; } +.cm-s-paraiso-dark span.cm-link { color: #815ba4; } +.cm-s-paraiso-dark span.cm-error { background: #ef6155; color: #8d8687; } + +.cm-s-paraiso-dark .CodeMirror-activeline-background { background: #4D344A; } +.cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/paraiso-light.css b/public/admin/view/javascript/codemirror/theme/paraiso-light.css new file mode 100644 index 0000000..ae0c755 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/paraiso-light.css @@ -0,0 +1,38 @@ +/* + + Name: Paraíso (Light) + Author: Jan T. Sott + + Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) + +*/ + +.cm-s-paraiso-light.CodeMirror { background: #e7e9db; color: #41323f; } +.cm-s-paraiso-light div.CodeMirror-selected { background: #b9b6b0; } +.cm-s-paraiso-light .CodeMirror-line::selection, .cm-s-paraiso-light .CodeMirror-line > span::selection, .cm-s-paraiso-light .CodeMirror-line > span > span::selection { background: #b9b6b0; } +.cm-s-paraiso-light .CodeMirror-line::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span > span::-moz-selection { background: #b9b6b0; } +.cm-s-paraiso-light .CodeMirror-gutters { background: #e7e9db; border-right: 0px; } +.cm-s-paraiso-light .CodeMirror-guttermarker { color: black; } +.cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; } +.cm-s-paraiso-light .CodeMirror-linenumber { color: #8d8687; } +.cm-s-paraiso-light .CodeMirror-cursor { border-left: 1px solid #776e71; } + +.cm-s-paraiso-light span.cm-comment { color: #e96ba8; } +.cm-s-paraiso-light span.cm-atom { color: #815ba4; } +.cm-s-paraiso-light span.cm-number { color: #815ba4; } + +.cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute { color: #48b685; } +.cm-s-paraiso-light span.cm-keyword { color: #ef6155; } +.cm-s-paraiso-light span.cm-string { color: #fec418; } + +.cm-s-paraiso-light span.cm-variable { color: #48b685; } +.cm-s-paraiso-light span.cm-variable-2 { color: #06b6ef; } +.cm-s-paraiso-light span.cm-def { color: #f99b15; } +.cm-s-paraiso-light span.cm-bracket { color: #41323f; } +.cm-s-paraiso-light span.cm-tag { color: #ef6155; } +.cm-s-paraiso-light span.cm-link { color: #815ba4; } +.cm-s-paraiso-light span.cm-error { background: #ef6155; color: #776e71; } + +.cm-s-paraiso-light .CodeMirror-activeline-background { background: #CFD1C4; } +.cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/pastel-on-dark.css b/public/admin/view/javascript/codemirror/theme/pastel-on-dark.css new file mode 100644 index 0000000..7197509 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/pastel-on-dark.css @@ -0,0 +1,53 @@ +/** + * Pastel On Dark theme ported from ACE editor + * @license MIT + * @copyright AtomicPages LLC 2014 + * @author Dennis Thompson, AtomicPages LLC + * @version 1.1 + * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme + */ + +.cm-s-pastel-on-dark.CodeMirror { + background: #2c2827; + color: #8F938F; + line-height: 1.5; + font-size: 14px; +} +.cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2); } +.cm-s-pastel-on-dark .CodeMirror-line::selection, .cm-s-pastel-on-dark .CodeMirror-line > span::selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::selection { background: rgba(221,240,255,0.2); } +.cm-s-pastel-on-dark .CodeMirror-line::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(221,240,255,0.2); } + +.cm-s-pastel-on-dark .CodeMirror-gutters { + background: #34302f; + border-right: 0px; + padding: 0 3px; +} +.cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; } +.cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; } +.cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; } +.cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7; } +.cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; } +.cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; } +.cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; } +.cm-s-pastel-on-dark span.cm-property { color: #8F938F; } +.cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; } +.cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; } +.cm-s-pastel-on-dark span.cm-string { color: #66A968; } +.cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; } +.cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; } +.cm-s-pastel-on-dark span.cm-variable-3 { color: #DE8E30; } +.cm-s-pastel-on-dark span.cm-def { color: #757aD8; } +.cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; } +.cm-s-pastel-on-dark span.cm-tag { color: #C1C144; } +.cm-s-pastel-on-dark span.cm-link { color: #ae81ff; } +.cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; } +.cm-s-pastel-on-dark span.cm-error { + background: #757aD8; + color: #f8f8f0; +} +.cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031); } +.cm-s-pastel-on-dark .CodeMirror-matchingbracket { + border: 1px solid rgba(255,255,255,0.25); + color: #8F938F !important; + margin: -1px -1px 0 -1px; +} diff --git a/public/admin/view/javascript/codemirror/theme/railscasts.css b/public/admin/view/javascript/codemirror/theme/railscasts.css new file mode 100644 index 0000000..aeff044 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/railscasts.css @@ -0,0 +1,34 @@ +/* + + Name: Railscasts + Author: Ryan Bates (http://railscasts.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-railscasts.CodeMirror {background: #2b2b2b; color: #f4f1ed;} +.cm-s-railscasts div.CodeMirror-selected {background: #272935 !important;} +.cm-s-railscasts .CodeMirror-gutters {background: #2b2b2b; border-right: 0px;} +.cm-s-railscasts .CodeMirror-linenumber {color: #5a647e;} +.cm-s-railscasts .CodeMirror-cursor {border-left: 1px solid #d4cfc9 !important;} + +.cm-s-railscasts span.cm-comment {color: #bc9458;} +.cm-s-railscasts span.cm-atom {color: #b6b3eb;} +.cm-s-railscasts span.cm-number {color: #b6b3eb;} + +.cm-s-railscasts span.cm-property, .cm-s-railscasts span.cm-attribute {color: #a5c261;} +.cm-s-railscasts span.cm-keyword {color: #da4939;} +.cm-s-railscasts span.cm-string {color: #ffc66d;} + +.cm-s-railscasts span.cm-variable {color: #a5c261;} +.cm-s-railscasts span.cm-variable-2 {color: #6d9cbe;} +.cm-s-railscasts span.cm-def {color: #cc7833;} +.cm-s-railscasts span.cm-error {background: #da4939; color: #d4cfc9;} +.cm-s-railscasts span.cm-bracket {color: #f4f1ed;} +.cm-s-railscasts span.cm-tag {color: #da4939;} +.cm-s-railscasts span.cm-link {color: #b6b3eb;} + +.cm-s-railscasts .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-railscasts .CodeMirror-activeline-background { background: #303040; } diff --git a/public/admin/view/javascript/codemirror/theme/rubyblue.css b/public/admin/view/javascript/codemirror/theme/rubyblue.css new file mode 100644 index 0000000..76d33e7 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/rubyblue.css @@ -0,0 +1,25 @@ +.cm-s-rubyblue.CodeMirror { background: #112435; color: white; } +.cm-s-rubyblue div.CodeMirror-selected { background: #38566F; } +.cm-s-rubyblue .CodeMirror-line::selection, .cm-s-rubyblue .CodeMirror-line > span::selection, .cm-s-rubyblue .CodeMirror-line > span > span::selection { background: rgba(56, 86, 111, 0.99); } +.cm-s-rubyblue .CodeMirror-line::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 86, 111, 0.99); } +.cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } +.cm-s-rubyblue .CodeMirror-guttermarker { color: white; } +.cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; } +.cm-s-rubyblue .CodeMirror-linenumber { color: white; } +.cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; } +.cm-s-rubyblue span.cm-atom { color: #F4C20B; } +.cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; } +.cm-s-rubyblue span.cm-keyword { color: #F0F; } +.cm-s-rubyblue span.cm-string { color: #F08047; } +.cm-s-rubyblue span.cm-meta { color: #F0F; } +.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; } +.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; } +.cm-s-rubyblue span.cm-bracket { color: #F0F; } +.cm-s-rubyblue span.cm-link { color: #F4C20B; } +.cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; } +.cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; } +.cm-s-rubyblue span.cm-error { color: #AF2018; } + +.cm-s-rubyblue .CodeMirror-activeline-background { background: #173047; } diff --git a/public/admin/view/javascript/codemirror/theme/seti.css b/public/admin/view/javascript/codemirror/theme/seti.css new file mode 100644 index 0000000..6632d3f --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/seti.css @@ -0,0 +1,44 @@ +/* + + Name: seti + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original seti color scheme by Jesse Weed (https://github.com/jesseweed/seti-syntax) + +*/ + + +.cm-s-seti.CodeMirror { + background-color: #151718 !important; + color: #CFD2D1 !important; + border: none; +} +.cm-s-seti .CodeMirror-gutters { + color: #404b53; + background-color: #0E1112; + border: none; +} +.cm-s-seti .CodeMirror-cursor { border-left: solid thin #f8f8f0; } +.cm-s-seti .CodeMirror-linenumber { color: #6D8A88; } +.cm-s-seti.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-seti .CodeMirror-line::selection, .cm-s-seti .CodeMirror-line > span::selection, .cm-s-seti .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-seti .CodeMirror-line::-moz-selection, .cm-s-seti .CodeMirror-line > span::-moz-selection, .cm-s-seti .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-seti span.cm-comment { color: #41535b; } +.cm-s-seti span.cm-string, .cm-s-seti span.cm-string-2 { color: #55b5db; } +.cm-s-seti span.cm-number { color: #cd3f45; } +.cm-s-seti span.cm-variable { color: #55b5db; } +.cm-s-seti span.cm-variable-2 { color: #a074c4; } +.cm-s-seti span.cm-def { color: #55b5db; } +.cm-s-seti span.cm-keyword { color: #ff79c6; } +.cm-s-seti span.cm-operator { color: #9fca56; } +.cm-s-seti span.cm-keyword { color: #e6cd69; } +.cm-s-seti span.cm-atom { color: #cd3f45; } +.cm-s-seti span.cm-meta { color: #55b5db; } +.cm-s-seti span.cm-tag { color: #55b5db; } +.cm-s-seti span.cm-attribute { color: #9fca56; } +.cm-s-seti span.cm-qualifier { color: #9fca56; } +.cm-s-seti span.cm-property { color: #a074c4; } +.cm-s-seti span.cm-variable-3 { color: #9fca56; } +.cm-s-seti span.cm-builtin { color: #9fca56; } +.cm-s-seti .CodeMirror-activeline-background { background: #101213; } +.cm-s-seti .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/solarized.css b/public/admin/view/javascript/codemirror/theme/solarized.css new file mode 100644 index 0000000..7882c93 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/solarized.css @@ -0,0 +1,163 @@ +/* +Solarized theme for code-mirror +http://ethanschoonover.com/solarized +*/ + +/* +Solarized color pallet +http://ethanschoonover.com/solarized/img/solarized-palette.png +*/ + +.solarized.base03 { color: #002b36; } +.solarized.base02 { color: #073642; } +.solarized.base01 { color: #586e75; } +.solarized.base00 { color: #657b83; } +.solarized.base0 { color: #839496; } +.solarized.base1 { color: #93a1a1; } +.solarized.base2 { color: #eee8d5; } +.solarized.base3 { color: #fdf6e3; } +.solarized.solar-yellow { color: #b58900; } +.solarized.solar-orange { color: #cb4b16; } +.solarized.solar-red { color: #dc322f; } +.solarized.solar-magenta { color: #d33682; } +.solarized.solar-violet { color: #6c71c4; } +.solarized.solar-blue { color: #268bd2; } +.solarized.solar-cyan { color: #2aa198; } +.solarized.solar-green { color: #859900; } + +/* Color scheme for code-mirror */ + +.cm-s-solarized { + line-height: 1.45em; + color-profile: sRGB; + rendering-intent: auto; +} +.cm-s-solarized.cm-s-dark { + color: #839496; + background-color: #002b36; + text-shadow: #002b36 0 1px; +} +.cm-s-solarized.cm-s-light { + background-color: #fdf6e3; + color: #657b83; + text-shadow: #eee8d5 0 1px; +} + +.cm-s-solarized .CodeMirror-widget { + text-shadow: none; +} + +.cm-s-solarized .cm-header { color: #586e75; } +.cm-s-solarized .cm-quote { color: #93a1a1; } + +.cm-s-solarized .cm-keyword { color: #cb4b16; } +.cm-s-solarized .cm-atom { color: #d33682; } +.cm-s-solarized .cm-number { color: #d33682; } +.cm-s-solarized .cm-def { color: #2aa198; } + +.cm-s-solarized .cm-variable { color: #839496; } +.cm-s-solarized .cm-variable-2 { color: #b58900; } +.cm-s-solarized .cm-variable-3 { color: #6c71c4; } + +.cm-s-solarized .cm-property { color: #2aa198; } +.cm-s-solarized .cm-operator { color: #6c71c4; } + +.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; } + +.cm-s-solarized .cm-string { color: #859900; } +.cm-s-solarized .cm-string-2 { color: #b58900; } + +.cm-s-solarized .cm-meta { color: #859900; } +.cm-s-solarized .cm-qualifier { color: #b58900; } +.cm-s-solarized .cm-builtin { color: #d33682; } +.cm-s-solarized .cm-bracket { color: #cb4b16; } +.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; } +.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; } +.cm-s-solarized .cm-tag { color: #93a1a1; } +.cm-s-solarized .cm-attribute { color: #2aa198; } +.cm-s-solarized .cm-hr { + color: transparent; + border-top: 1px solid #586e75; + display: block; +} +.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; } +.cm-s-solarized .cm-special { color: #6c71c4; } +.cm-s-solarized .cm-em { + color: #999; + text-decoration: underline; + text-decoration-style: dotted; +} +.cm-s-solarized .cm-strong { color: #eee; } +.cm-s-solarized .cm-error, +.cm-s-solarized .cm-invalidchar { + color: #586e75; + border-bottom: 1px dotted #dc322f; +} + +.cm-s-solarized.cm-s-dark div.CodeMirror-selected { background: #073642; } +.cm-s-solarized.cm-s-dark.CodeMirror ::selection { background: rgba(7, 54, 66, 0.99); } +.cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection, .cm-s-dark .CodeMirror-line > span::-moz-selection, .cm-s-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(7, 54, 66, 0.99); } + +.cm-s-solarized.cm-s-light div.CodeMirror-selected { background: #eee8d5; } +.cm-s-solarized.cm-s-light .CodeMirror-line::selection, .cm-s-light .CodeMirror-line > span::selection, .cm-s-light .CodeMirror-line > span > span::selection { background: #eee8d5; } +.cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection, .cm-s-ligh .CodeMirror-line > span::-moz-selection, .cm-s-ligh .CodeMirror-line > span > span::-moz-selection { background: #eee8d5; } + +/* Editor styling */ + + + +/* Little shadow on the view-port of the buffer view */ +.cm-s-solarized.CodeMirror { + -moz-box-shadow: inset 7px 0 12px -6px #000; + -webkit-box-shadow: inset 7px 0 12px -6px #000; + box-shadow: inset 7px 0 12px -6px #000; +} + +/* Gutter border and some shadow from it */ +.cm-s-solarized .CodeMirror-gutters { + border-right: 1px solid; +} + +/* Gutter colors and line number styling based of color scheme (dark / light) */ + +/* Dark */ +.cm-s-solarized.cm-s-dark .CodeMirror-gutters { + background-color: #002b36; + border-color: #00232c; +} + +.cm-s-solarized.cm-s-dark .CodeMirror-linenumber { + text-shadow: #021014 0 -1px; +} + +/* Light */ +.cm-s-solarized.cm-s-light .CodeMirror-gutters { + background-color: #fdf6e3; + border-color: #eee8d5; +} + +/* Common */ +.cm-s-solarized .CodeMirror-linenumber { + color: #586e75; + padding: 0 5px; +} +.cm-s-solarized .CodeMirror-guttermarker-subtle { color: #586e75; } +.cm-s-solarized.cm-s-dark .CodeMirror-guttermarker { color: #ddd; } +.cm-s-solarized.cm-s-light .CodeMirror-guttermarker { color: #cb4b16; } + +.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text { + color: #586e75; +} + +.cm-s-solarized .CodeMirror-cursor { border-left: 1px solid #819090; } + +/* +Active line. Negative margin compensates left padding of the text in the +view-port +*/ +.cm-s-solarized.cm-s-dark .CodeMirror-activeline-background { + background: rgba(255, 255, 255, 0.10); +} +.cm-s-solarized.cm-s-light .CodeMirror-activeline-background { + background: rgba(0, 0, 0, 0.10); +} diff --git a/public/admin/view/javascript/codemirror/theme/the-matrix.css b/public/admin/view/javascript/codemirror/theme/the-matrix.css new file mode 100644 index 0000000..3912a8d --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/the-matrix.css @@ -0,0 +1,30 @@ +.cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; } +.cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D; } +.cm-s-the-matrix .CodeMirror-line::selection, .cm-s-the-matrix .CodeMirror-line > span::selection, .cm-s-the-matrix .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-the-matrix .CodeMirror-line::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; } +.cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; } +.cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; } +.cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; } +.cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00; } + +.cm-s-the-matrix span.cm-keyword { color: #008803; font-weight: bold; } +.cm-s-the-matrix span.cm-atom { color: #3FF; } +.cm-s-the-matrix span.cm-number { color: #FFB94F; } +.cm-s-the-matrix span.cm-def { color: #99C; } +.cm-s-the-matrix span.cm-variable { color: #F6C; } +.cm-s-the-matrix span.cm-variable-2 { color: #C6F; } +.cm-s-the-matrix span.cm-variable-3 { color: #96F; } +.cm-s-the-matrix span.cm-property { color: #62FFA0; } +.cm-s-the-matrix span.cm-operator { color: #999; } +.cm-s-the-matrix span.cm-comment { color: #CCCCCC; } +.cm-s-the-matrix span.cm-string { color: #39C; } +.cm-s-the-matrix span.cm-meta { color: #C9F; } +.cm-s-the-matrix span.cm-qualifier { color: #FFF700; } +.cm-s-the-matrix span.cm-builtin { color: #30a; } +.cm-s-the-matrix span.cm-bracket { color: #cc7; } +.cm-s-the-matrix span.cm-tag { color: #FFBD40; } +.cm-s-the-matrix span.cm-attribute { color: #FFF700; } +.cm-s-the-matrix span.cm-error { color: #FF0000; } + +.cm-s-the-matrix .CodeMirror-activeline-background { background: #040; } diff --git a/public/admin/view/javascript/codemirror/theme/tomorrow-night-bright.css b/public/admin/view/javascript/codemirror/theme/tomorrow-night-bright.css new file mode 100644 index 0000000..b6dd4a9 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/tomorrow-night-bright.css @@ -0,0 +1,35 @@ +/* + + Name: Tomorrow Night - Bright + Author: Chris Kempson + + Port done by Gerard Braad <me@gbraad.nl> + +*/ + +.cm-s-tomorrow-night-bright.CodeMirror { background: #000000; color: #eaeaea; } +.cm-s-tomorrow-night-bright div.CodeMirror-selected { background: #424242; } +.cm-s-tomorrow-night-bright .CodeMirror-gutters { background: #000000; border-right: 0px; } +.cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; } +.cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-tomorrow-night-bright .CodeMirror-linenumber { color: #424242; } +.cm-s-tomorrow-night-bright .CodeMirror-cursor { border-left: 1px solid #6A6A6A; } + +.cm-s-tomorrow-night-bright span.cm-comment { color: #d27b53; } +.cm-s-tomorrow-night-bright span.cm-atom { color: #a16a94; } +.cm-s-tomorrow-night-bright span.cm-number { color: #a16a94; } + +.cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute { color: #99cc99; } +.cm-s-tomorrow-night-bright span.cm-keyword { color: #d54e53; } +.cm-s-tomorrow-night-bright span.cm-string { color: #e7c547; } + +.cm-s-tomorrow-night-bright span.cm-variable { color: #b9ca4a; } +.cm-s-tomorrow-night-bright span.cm-variable-2 { color: #7aa6da; } +.cm-s-tomorrow-night-bright span.cm-def { color: #e78c45; } +.cm-s-tomorrow-night-bright span.cm-bracket { color: #eaeaea; } +.cm-s-tomorrow-night-bright span.cm-tag { color: #d54e53; } +.cm-s-tomorrow-night-bright span.cm-link { color: #a16a94; } +.cm-s-tomorrow-night-bright span.cm-error { background: #d54e53; color: #6A6A6A; } + +.cm-s-tomorrow-night-bright .CodeMirror-activeline-background { background: #2a2a2a; } +.cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/tomorrow-night-eighties.css b/public/admin/view/javascript/codemirror/theme/tomorrow-night-eighties.css new file mode 100644 index 0000000..2a9debc --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/tomorrow-night-eighties.css @@ -0,0 +1,38 @@ +/* + + Name: Tomorrow Night - Eighties + Author: Chris Kempson + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-tomorrow-night-eighties.CodeMirror { background: #000000; color: #CCCCCC; } +.cm-s-tomorrow-night-eighties div.CodeMirror-selected { background: #2D2D2D; } +.cm-s-tomorrow-night-eighties .CodeMirror-line::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-tomorrow-night-eighties .CodeMirror-line::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-tomorrow-night-eighties .CodeMirror-gutters { background: #000000; border-right: 0px; } +.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; } +.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-tomorrow-night-eighties .CodeMirror-linenumber { color: #515151; } +.cm-s-tomorrow-night-eighties .CodeMirror-cursor { border-left: 1px solid #6A6A6A; } + +.cm-s-tomorrow-night-eighties span.cm-comment { color: #d27b53; } +.cm-s-tomorrow-night-eighties span.cm-atom { color: #a16a94; } +.cm-s-tomorrow-night-eighties span.cm-number { color: #a16a94; } + +.cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute { color: #99cc99; } +.cm-s-tomorrow-night-eighties span.cm-keyword { color: #f2777a; } +.cm-s-tomorrow-night-eighties span.cm-string { color: #ffcc66; } + +.cm-s-tomorrow-night-eighties span.cm-variable { color: #99cc99; } +.cm-s-tomorrow-night-eighties span.cm-variable-2 { color: #6699cc; } +.cm-s-tomorrow-night-eighties span.cm-def { color: #f99157; } +.cm-s-tomorrow-night-eighties span.cm-bracket { color: #CCCCCC; } +.cm-s-tomorrow-night-eighties span.cm-tag { color: #f2777a; } +.cm-s-tomorrow-night-eighties span.cm-link { color: #a16a94; } +.cm-s-tomorrow-night-eighties span.cm-error { background: #f2777a; color: #6A6A6A; } + +.cm-s-tomorrow-night-eighties .CodeMirror-activeline-background { background: #343600; } +.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/ttcn.css b/public/admin/view/javascript/codemirror/theme/ttcn.css new file mode 100644 index 0000000..b3d4656 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/ttcn.css @@ -0,0 +1,64 @@ +.cm-s-ttcn .cm-quote { color: #090; } +.cm-s-ttcn .cm-negative { color: #d44; } +.cm-s-ttcn .cm-positive { color: #292; } +.cm-s-ttcn .cm-header, .cm-strong { font-weight: bold; } +.cm-s-ttcn .cm-em { font-style: italic; } +.cm-s-ttcn .cm-link { text-decoration: underline; } +.cm-s-ttcn .cm-strikethrough { text-decoration: line-through; } +.cm-s-ttcn .cm-header { color: #00f; font-weight: bold; } + +.cm-s-ttcn .cm-atom { color: #219; } +.cm-s-ttcn .cm-attribute { color: #00c; } +.cm-s-ttcn .cm-bracket { color: #997; } +.cm-s-ttcn .cm-comment { color: #333333; } +.cm-s-ttcn .cm-def { color: #00f; } +.cm-s-ttcn .cm-em { font-style: italic; } +.cm-s-ttcn .cm-error { color: #f00; } +.cm-s-ttcn .cm-hr { color: #999; } +.cm-s-ttcn .cm-invalidchar { color: #f00; } +.cm-s-ttcn .cm-keyword { font-weight:bold; } +.cm-s-ttcn .cm-link { color: #00c; text-decoration: underline; } +.cm-s-ttcn .cm-meta { color: #555; } +.cm-s-ttcn .cm-negative { color: #d44; } +.cm-s-ttcn .cm-positive { color: #292; } +.cm-s-ttcn .cm-qualifier { color: #555; } +.cm-s-ttcn .cm-strikethrough { text-decoration: line-through; } +.cm-s-ttcn .cm-string { color: #006400; } +.cm-s-ttcn .cm-string-2 { color: #f50; } +.cm-s-ttcn .cm-strong { font-weight: bold; } +.cm-s-ttcn .cm-tag { color: #170; } +.cm-s-ttcn .cm-variable { color: #8B2252; } +.cm-s-ttcn .cm-variable-2 { color: #05a; } +.cm-s-ttcn .cm-variable-3 { color: #085; } + +.cm-s-ttcn .cm-invalidchar { color: #f00; } + +/* ASN */ +.cm-s-ttcn .cm-accessTypes, +.cm-s-ttcn .cm-compareTypes { color: #27408B; } +.cm-s-ttcn .cm-cmipVerbs { color: #8B2252; } +.cm-s-ttcn .cm-modifier { color:#D2691E; } +.cm-s-ttcn .cm-status { color:#8B4545; } +.cm-s-ttcn .cm-storage { color:#A020F0; } +.cm-s-ttcn .cm-tags { color:#006400; } + +/* CFG */ +.cm-s-ttcn .cm-externalCommands { color: #8B4545; font-weight:bold; } +.cm-s-ttcn .cm-fileNCtrlMaskOptions, +.cm-s-ttcn .cm-sectionTitle { color: #2E8B57; font-weight:bold; } + +/* TTCN */ +.cm-s-ttcn .cm-booleanConsts, +.cm-s-ttcn .cm-otherConsts, +.cm-s-ttcn .cm-verdictConsts { color: #006400; } +.cm-s-ttcn .cm-configOps, +.cm-s-ttcn .cm-functionOps, +.cm-s-ttcn .cm-portOps, +.cm-s-ttcn .cm-sutOps, +.cm-s-ttcn .cm-timerOps, +.cm-s-ttcn .cm-verdictOps { color: #0000FF; } +.cm-s-ttcn .cm-preprocessor, +.cm-s-ttcn .cm-templateMatch, +.cm-s-ttcn .cm-ttcn3Macros { color: #27408B; } +.cm-s-ttcn .cm-types { color: #A52A2A; font-weight:bold; } +.cm-s-ttcn .cm-visibilityModifiers { font-weight:bold; } diff --git a/public/admin/view/javascript/codemirror/theme/twilight.css b/public/admin/view/javascript/codemirror/theme/twilight.css new file mode 100644 index 0000000..d342b89 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/twilight.css @@ -0,0 +1,32 @@ +.cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/ +.cm-s-twilight div.CodeMirror-selected { background: #323232; } /**/ +.cm-s-twilight .CodeMirror-line::selection, .cm-s-twilight .CodeMirror-line > span::selection, .cm-s-twilight .CodeMirror-line > span > span::selection { background: rgba(50, 50, 50, 0.99); } +.cm-s-twilight .CodeMirror-line::-moz-selection, .cm-s-twilight .CodeMirror-line > span::-moz-selection, .cm-s-twilight .CodeMirror-line > span > span::-moz-selection { background: rgba(50, 50, 50, 0.99); } + +.cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; } +.cm-s-twilight .CodeMirror-guttermarker { color: white; } +.cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; } +.cm-s-twilight .CodeMirror-linenumber { color: #aaa; } +.cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-twilight .cm-keyword { color: #f9ee98; } /**/ +.cm-s-twilight .cm-atom { color: #FC0; } +.cm-s-twilight .cm-number { color: #ca7841; } /**/ +.cm-s-twilight .cm-def { color: #8DA6CE; } +.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/ +.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/ +.cm-s-twilight .cm-operator { color: #cda869; } /**/ +.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/ +.cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/ +.cm-s-twilight .cm-string-2 { color:#bd6b18; } /*?*/ +.cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/ +.cm-s-twilight .cm-builtin { color: #cda869; } /*?*/ +.cm-s-twilight .cm-tag { color: #997643; } /**/ +.cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/ +.cm-s-twilight .cm-header { color: #FF6400; } +.cm-s-twilight .cm-hr { color: #AEAEAE; } +.cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/ +.cm-s-twilight .cm-error { border-bottom: 1px solid red; } + +.cm-s-twilight .CodeMirror-activeline-background { background: #27282E; } +.cm-s-twilight .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/vibrant-ink.css b/public/admin/view/javascript/codemirror/theme/vibrant-ink.css new file mode 100644 index 0000000..ac4ec6d --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/vibrant-ink.css @@ -0,0 +1,34 @@ +/* Taken from the popular Visual Studio Vibrant Ink Schema */ + +.cm-s-vibrant-ink.CodeMirror { background: black; color: white; } +.cm-s-vibrant-ink div.CodeMirror-selected { background: #35493c; } +.cm-s-vibrant-ink .CodeMirror-line::selection, .cm-s-vibrant-ink .CodeMirror-line > span::selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::selection { background: rgba(53, 73, 60, 0.99); } +.cm-s-vibrant-ink .CodeMirror-line::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::-moz-selection { background: rgba(53, 73, 60, 0.99); } + +.cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; } +.cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-vibrant-ink .cm-keyword { color: #CC7832; } +.cm-s-vibrant-ink .cm-atom { color: #FC0; } +.cm-s-vibrant-ink .cm-number { color: #FFEE98; } +.cm-s-vibrant-ink .cm-def { color: #8DA6CE; } +.cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D; } +.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D; } +.cm-s-vibrant-ink .cm-operator { color: #888; } +.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; } +.cm-s-vibrant-ink .cm-string { color: #A5C25C; } +.cm-s-vibrant-ink .cm-string-2 { color: red; } +.cm-s-vibrant-ink .cm-meta { color: #D8FA3C; } +.cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-tag { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-header { color: #FF6400; } +.cm-s-vibrant-ink .cm-hr { color: #AEAEAE; } +.cm-s-vibrant-ink .cm-link { color: blue; } +.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; } + +.cm-s-vibrant-ink .CodeMirror-activeline-background { background: #27282E; } +.cm-s-vibrant-ink .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/xq-dark.css b/public/admin/view/javascript/codemirror/theme/xq-dark.css new file mode 100644 index 0000000..e3bd960 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/xq-dark.css @@ -0,0 +1,53 @@ +/* +Copyright (C) 2011 by MarkLogic Corporation +Author: Mike Brevoort <mike@brevoort.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. +*/ +.cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; } +.cm-s-xq-dark div.CodeMirror-selected { background: #27007A; } +.cm-s-xq-dark .CodeMirror-line::selection, .cm-s-xq-dark .CodeMirror-line > span::selection, .cm-s-xq-dark .CodeMirror-line > span > span::selection { background: rgba(39, 0, 122, 0.99); } +.cm-s-xq-dark .CodeMirror-line::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(39, 0, 122, 0.99); } +.cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; } +.cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; } +.cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; } +.cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-xq-dark span.cm-keyword { color: #FFBD40; } +.cm-s-xq-dark span.cm-atom { color: #6C8CD5; } +.cm-s-xq-dark span.cm-number { color: #164; } +.cm-s-xq-dark span.cm-def { color: #FFF; text-decoration:underline; } +.cm-s-xq-dark span.cm-variable { color: #FFF; } +.cm-s-xq-dark span.cm-variable-2 { color: #EEE; } +.cm-s-xq-dark span.cm-variable-3 { color: #DDD; } +.cm-s-xq-dark span.cm-property {} +.cm-s-xq-dark span.cm-operator {} +.cm-s-xq-dark span.cm-comment { color: gray; } +.cm-s-xq-dark span.cm-string { color: #9FEE00; } +.cm-s-xq-dark span.cm-meta { color: yellow; } +.cm-s-xq-dark span.cm-qualifier { color: #FFF700; } +.cm-s-xq-dark span.cm-builtin { color: #30a; } +.cm-s-xq-dark span.cm-bracket { color: #cc7; } +.cm-s-xq-dark span.cm-tag { color: #FFBD40; } +.cm-s-xq-dark span.cm-attribute { color: #FFF700; } +.cm-s-xq-dark span.cm-error { color: #f00; } + +.cm-s-xq-dark .CodeMirror-activeline-background { background: #27282E; } +.cm-s-xq-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/public/admin/view/javascript/codemirror/theme/xq-light.css b/public/admin/view/javascript/codemirror/theme/xq-light.css new file mode 100644 index 0000000..8d2fcb6 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/xq-light.css @@ -0,0 +1,43 @@ +/* +Copyright (C) 2011 by MarkLogic Corporation +Author: Mike Brevoort <mike@brevoort.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. +*/ +.cm-s-xq-light span.cm-keyword { line-height: 1em; font-weight: bold; color: #5A5CAD; } +.cm-s-xq-light span.cm-atom { color: #6C8CD5; } +.cm-s-xq-light span.cm-number { color: #164; } +.cm-s-xq-light span.cm-def { text-decoration:underline; } +.cm-s-xq-light span.cm-variable { color: black; } +.cm-s-xq-light span.cm-variable-2 { color:black; } +.cm-s-xq-light span.cm-variable-3 { color: black; } +.cm-s-xq-light span.cm-property {} +.cm-s-xq-light span.cm-operator {} +.cm-s-xq-light span.cm-comment { color: #0080FF; font-style: italic; } +.cm-s-xq-light span.cm-string { color: red; } +.cm-s-xq-light span.cm-meta { color: yellow; } +.cm-s-xq-light span.cm-qualifier { color: grey; } +.cm-s-xq-light span.cm-builtin { color: #7EA656; } +.cm-s-xq-light span.cm-bracket { color: #cc7; } +.cm-s-xq-light span.cm-tag { color: #3F7F7F; } +.cm-s-xq-light span.cm-attribute { color: #7F007F; } +.cm-s-xq-light span.cm-error { color: #f00; } + +.cm-s-xq-light .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-xq-light .CodeMirror-matchingbracket { outline:1px solid grey;color:black !important;background:yellow; } diff --git a/public/admin/view/javascript/codemirror/theme/yeti.css b/public/admin/view/javascript/codemirror/theme/yeti.css new file mode 100644 index 0000000..c70d4d2 --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/yeti.css @@ -0,0 +1,44 @@ +/* + + Name: yeti + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original yeti color scheme by Jesse Weed (https://github.com/jesseweed/yeti-syntax) + +*/ + + +.cm-s-yeti.CodeMirror { + background-color: #ECEAE8 !important; + color: #d1c9c0 !important; + border: none; +} + +.cm-s-yeti .CodeMirror-gutters { + color: #adaba6; + background-color: #E5E1DB; + border: none; +} +.cm-s-yeti .CodeMirror-cursor { border-left: solid thin #d1c9c0; } +.cm-s-yeti .CodeMirror-linenumber { color: #adaba6; } +.cm-s-yeti.CodeMirror-focused div.CodeMirror-selected { background: #DCD8D2; } +.cm-s-yeti .CodeMirror-line::selection, .cm-s-yeti .CodeMirror-line > span::selection, .cm-s-yeti .CodeMirror-line > span > span::selection { background: #DCD8D2; } +.cm-s-yeti .CodeMirror-line::-moz-selection, .cm-s-yeti .CodeMirror-line > span::-moz-selection, .cm-s-yeti .CodeMirror-line > span > span::-moz-selection { background: #DCD8D2; } +.cm-s-yeti span.cm-comment { color: #d4c8be; } +.cm-s-yeti span.cm-string, .cm-s-yeti span.cm-string-2 { color: #96c0d8; } +.cm-s-yeti span.cm-number { color: #a074c4; } +.cm-s-yeti span.cm-variable { color: #55b5db; } +.cm-s-yeti span.cm-variable-2 { color: #a074c4; } +.cm-s-yeti span.cm-def { color: #55b5db; } +.cm-s-yeti span.cm-operator { color: #9fb96e; } +.cm-s-yeti span.cm-keyword { color: #9fb96e; } +.cm-s-yeti span.cm-atom { color: #a074c4; } +.cm-s-yeti span.cm-meta { color: #96c0d8; } +.cm-s-yeti span.cm-tag { color: #96c0d8; } +.cm-s-yeti span.cm-attribute { color: #9fb96e; } +.cm-s-yeti span.cm-qualifier { color: #96c0d8; } +.cm-s-yeti span.cm-property { color: #a074c4; } +.cm-s-yeti span.cm-builtin { color: #a074c4; } +.cm-s-yeti span.cm-variable-3 { color: #96c0d8; } +.cm-s-yeti .CodeMirror-activeline-background { background: #E7E4E0; } +.cm-s-yeti .CodeMirror-matchingbracket { text-decoration: underline; } diff --git a/public/admin/view/javascript/codemirror/theme/zenburn.css b/public/admin/view/javascript/codemirror/theme/zenburn.css new file mode 100644 index 0000000..781c40a --- /dev/null +++ b/public/admin/view/javascript/codemirror/theme/zenburn.css @@ -0,0 +1,37 @@ +/** + * " + * Using Zenburn color palette from the Emacs Zenburn Theme + * https://github.com/bbatsov/zenburn-emacs/blob/master/zenburn-theme.el + * + * Also using parts of https://github.com/xavi/coderay-lighttable-theme + * " + * From: https://github.com/wisenomad/zenburn-lighttable-theme/blob/master/zenburn.css + */ + +.cm-s-zenburn .CodeMirror-gutters { background: #3f3f3f !important; } +.cm-s-zenburn .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { color: #999; } +.cm-s-zenburn .CodeMirror-cursor { border-left: 1px solid white; } +.cm-s-zenburn { background-color: #3f3f3f; color: #dcdccc; } +.cm-s-zenburn span.cm-builtin { color: #dcdccc; font-weight: bold; } +.cm-s-zenburn span.cm-comment { color: #7f9f7f; } +.cm-s-zenburn span.cm-keyword { color: #f0dfaf; font-weight: bold; } +.cm-s-zenburn span.cm-atom { color: #bfebbf; } +.cm-s-zenburn span.cm-def { color: #dcdccc; } +.cm-s-zenburn span.cm-variable { color: #dfaf8f; } +.cm-s-zenburn span.cm-variable-2 { color: #dcdccc; } +.cm-s-zenburn span.cm-string { color: #cc9393; } +.cm-s-zenburn span.cm-string-2 { color: #cc9393; } +.cm-s-zenburn span.cm-number { color: #dcdccc; } +.cm-s-zenburn span.cm-tag { color: #93e0e3; } +.cm-s-zenburn span.cm-property { color: #dfaf8f; } +.cm-s-zenburn span.cm-attribute { color: #dfaf8f; } +.cm-s-zenburn span.cm-qualifier { color: #7cb8bb; } +.cm-s-zenburn span.cm-meta { color: #f0dfaf; } +.cm-s-zenburn span.cm-header { color: #f0efd0; } +.cm-s-zenburn span.cm-operator { color: #f0efd0; } +.cm-s-zenburn span.CodeMirror-matchingbracket { box-sizing: border-box; background: transparent; border-bottom: 1px solid; } +.cm-s-zenburn span.CodeMirror-nonmatchingbracket { border-bottom: 1px solid; background: none; } +.cm-s-zenburn .CodeMirror-activeline { background: #000000; } +.cm-s-zenburn .CodeMirror-activeline-background { background: #000000; } +.cm-s-zenburn div.CodeMirror-selected { background: #545454; } +.cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected { background: #4f4f4f; } diff --git a/public/admin/view/javascript/common.js b/public/admin/view/javascript/common.js new file mode 100644 index 0000000..eeae022 --- /dev/null +++ b/public/admin/view/javascript/common.js @@ -0,0 +1,282 @@ +function getURLVar(key) { + var value = []; + + var query = String(document.location).split('?'); + + if (query[1]) { + var part = query[1].split('&'); + + for (i = 0; i < part.length; i++) { + var data = part[i].split('='); + + if (data[0] && data[1]) { + value[data[0]] = data[1]; + } + } + + if (value[key]) { + return value[key]; + } else { + return ''; + } + } +} + +$(document).ready(function() { + //Form Submit for IE Browser + $('button[type=\'submit\']').on('click', function() { + $("form[id*='form-']").submit(); + }); + + // Highlight any found errors + $('.text-danger').each(function() { + var element = $(this).parent().parent(); + + if (element.hasClass('form-group')) { + element.addClass('has-error'); + } + }); + + // tooltips on hover + $('[data-toggle=\'tooltip\']').tooltip({container: 'body', html: true}); + + // Makes tooltips work on ajax generated content + $(document).ajaxStop(function() { + $('[data-toggle=\'tooltip\']').tooltip({container: 'body'}); + }); + + // https://github.com/opencart/opencart/issues/2595 + $.event.special.remove = { + remove: function(o) { + if (o.handler) { + o.handler.apply(this, arguments); + } + } + } + + // tooltip remove + $('[data-toggle=\'tooltip\']').on('remove', function() { + $(this).tooltip('destroy'); + }); + + // Tooltip remove fixed + $(document).on('click', '[data-toggle=\'tooltip\']', function(e) { + $('body > .tooltip').remove(); + }); + + $('#button-menu').on('click', function(e) { + e.preventDefault(); + + $('#column-left').toggleClass('active'); + }); + + // Set last page opened on the menu + $('#menu a[href]').on('click', function() { + sessionStorage.setItem('menu', $(this).attr('href')); + }); + + if (!sessionStorage.getItem('menu')) { + $('#menu #dashboard').addClass('active'); + } else { + // Sets active and open to selected page in the left column menu. + $('#menu a[href=\'' + sessionStorage.getItem('menu') + '\']').parent().addClass('active'); + } + + $('#menu a[href=\'' + sessionStorage.getItem('menu') + '\']').parents('li > a').removeClass('collapsed'); + + $('#menu a[href=\'' + sessionStorage.getItem('menu') + '\']').parents('ul').addClass('in'); + + $('#menu a[href=\'' + sessionStorage.getItem('menu') + '\']').parents('li').addClass('active'); + + // Image Manager + $(document).on('click', 'a[data-toggle=\'image\']', function(e) { + var $element = $(this); + var $popover = $element.data('bs.popover'); // element has bs popover? + + e.preventDefault(); + + // destroy all image popovers + $('a[data-toggle="image"]').popover('destroy'); + + // remove flickering (do not re-add popover when clicking for removal) + if ($popover) { + return; + } + + $element.popover({ + html: true, + placement: 'right', + trigger: 'manual', + content: function() { + return '<button type="button" id="button-image" class="btn btn-primary"><i class="fa fa-pencil"></i></button> <button type="button" id="button-clear" class="btn btn-danger"><i class="fa fa-trash-o"></i></button>'; + } + }); + + $element.popover('show'); + + $('#button-image').on('click', function() { + var $button = $(this); + var $icon = $button.find('> i'); + + $('#modal-image').remove(); + + $.ajax({ + url: 'index.php?route=common/filemanager&user_token=' + getURLVar('user_token') + '&target=' + $element.parent().find('input').attr('id') + '&thumb=' + $element.attr('id'), + dataType: 'html', + beforeSend: function() { + $button.prop('disabled', true); + if ($icon.length) { + $icon.attr('class', 'fa fa-circle-o-notch fa-spin'); + } + }, + complete: function() { + $button.prop('disabled', false); + + if ($icon.length) { + $icon.attr('class', 'fa fa-pencil'); + } + }, + success: function(html) { + $('body').append('<div id="modal-image" class="modal">' + html + '</div>'); + + $('#modal-image').modal('show'); + } + }); + + $element.popover('destroy'); + }); + + $('#button-clear').on('click', function() { + $element.find('img').attr('src', $element.find('img').attr('data-placeholder')); + + $element.parent().find('input').val(''); + + $element.popover('destroy'); + }); + }); +}); + +// Autocomplete */ +(function($) { + $.fn.autocomplete = function(option) { + return this.each(function() { + var $this = $(this); + var $dropdown = $('<ul class="dropdown-menu" />'); + + this.timer = null; + this.items = []; + + $.extend(this, option); + + $this.attr('autocomplete', 'off'); + + // Focus + $this.on('focus', function() { + this.request(); + }); + + // Blur + $this.on('blur', function() { + setTimeout(function(object) { + object.hide(); + }, 200, this); + }); + + // Keydown + $this.on('keydown', function(event) { + switch(event.keyCode) { + case 27: // escape + this.hide(); + break; + default: + this.request(); + break; + } + }); + + // Click + this.click = function(event) { + event.preventDefault(); + + var value = $(event.target).parent().attr('data-value'); + + if (value && this.items[value]) { + this.select(this.items[value]); + } + } + + // Show + this.show = function() { + var pos = $this.position(); + + $dropdown.css({ + top: pos.top + $this.outerHeight(), + left: pos.left + }); + + $dropdown.show(); + } + + // Hide + this.hide = function() { + $dropdown.hide(); + } + + // Request + this.request = function() { + clearTimeout(this.timer); + + this.timer = setTimeout(function(object) { + object.source($(object).val(), $.proxy(object.response, object)); + }, 200, this); + } + + // Response + this.response = function(json) { + var html = ''; + var category = {}; + var name; + var i = 0, j = 0; + + if (json.length) { + for (i = 0; i < json.length; i++) { + // update element items + this.items[json[i]['value']] = json[i]; + + if (!json[i]['category']) { + // ungrouped items + html += '<li data-value="' + json[i]['value'] + '"><a href="#">' + json[i]['label'] + '</a></li>'; + } else { + // grouped items + name = json[i]['category']; + if (!category[name]) { + category[name] = []; + } + + category[name].push(json[i]); + } + } + + for (name in category) { + html += '<li class="dropdown-header">' + name + '</li>'; + + for (j = 0; j < category[name].length; j++) { + html += '<li data-value="' + category[name][j]['value'] + '"><a href="#"> ' + category[name][j]['label'] + '</a></li>'; + } + } + } + + if (html) { + this.show(); + } else { + this.hide(); + } + + $dropdown.html(html); + } + + $dropdown.on('click', '> li > a', $.proxy(this.click, this)); + $this.after($dropdown); + }); + } +})(window.jQuery); diff --git a/public/admin/view/javascript/font-awesome/css/font-awesome.css b/public/admin/view/javascript/font-awesome/css/font-awesome.css new file mode 100644 index 0000000..ee906a8 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/css/font-awesome.css @@ -0,0 +1,2337 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper-pp:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/public/admin/view/javascript/font-awesome/css/font-awesome.min.css b/public/admin/view/javascript/font-awesome/css/font-awesome.min.css new file mode 100644 index 0000000..540440c --- /dev/null +++ b/public/admin/view/javascript/font-awesome/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/public/admin/view/javascript/font-awesome/fonts/FontAwesome.otf b/public/admin/view/javascript/font-awesome/fonts/FontAwesome.otf Binary files differnew file mode 100644 index 0000000..401ec0f --- /dev/null +++ b/public/admin/view/javascript/font-awesome/fonts/FontAwesome.otf diff --git a/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.eot b/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.eot Binary files differnew file mode 100644 index 0000000..e9f60ca --- /dev/null +++ b/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.eot diff --git a/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.svg b/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg> +<metadata> +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. +</metadata> +<defs> +<font id="FontAwesome" horiz-adv-x="1536" > + <font-face + font-family="FontAwesome" + font-weight="400" + font-stretch="normal" + units-per-em="1792" + panose-1="0 0 0 0 0 0 0 0 0 0" + ascent="1536" + descent="-256" + bbox="-1.02083 -256.962 2304.6 1537.02" + underline-thickness="0" + underline-position="0" + unicode-range="U+0020-F500" + /> +<missing-glyph horiz-adv-x="896" +d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" /> + <glyph glyph-name=".notdef" horiz-adv-x="896" +d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" /> + <glyph glyph-name=".null" horiz-adv-x="0" + /> + <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597" + /> + <glyph glyph-name="space" unicode=" " horiz-adv-x="448" + /> + <glyph glyph-name="dieresis" unicode="¨" horiz-adv-x="1792" + /> + <glyph glyph-name="copyright" unicode="©" horiz-adv-x="1792" + /> + <glyph glyph-name="registered" unicode="®" horiz-adv-x="1792" + /> + <glyph glyph-name="acute" unicode="´" horiz-adv-x="1792" + /> + <glyph glyph-name="AE" unicode="Æ" horiz-adv-x="1792" + /> + <glyph glyph-name="Oslash" unicode="Ø" horiz-adv-x="1792" + /> + <glyph glyph-name="trademark" unicode="™" horiz-adv-x="1792" + /> + <glyph glyph-name="infinity" unicode="∞" horiz-adv-x="1792" + /> + <glyph glyph-name="notequal" unicode="≠" horiz-adv-x="1792" + /> + <glyph glyph-name="glass" unicode="" horiz-adv-x="1792" +d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" /> + <glyph glyph-name="music" unicode="" +d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 +t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" /> + <glyph glyph-name="search" unicode="" horiz-adv-x="1664" +d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 +t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> + <glyph glyph-name="envelope" unicode="" horiz-adv-x="1792" +d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 +t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z +M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> + <glyph glyph-name="heart" unicode="" horiz-adv-x="1792" +d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 +q-18 -18 -44 -18z" /> + <glyph glyph-name="star" unicode="" horiz-adv-x="1664" +d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 +l502 -73q56 -9 56 -46z" /> + <glyph glyph-name="star_empty" unicode="" horiz-adv-x="1664" +d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 +l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" /> + <glyph glyph-name="user" unicode="" horiz-adv-x="1280" +d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5 +t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" /> + <glyph glyph-name="film" unicode="" horiz-adv-x="1920" +d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 +q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 +t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 +q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 +t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> + <glyph glyph-name="th_large" unicode="" horiz-adv-x="1664" +d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 +h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> + <glyph glyph-name="th" unicode="" horiz-adv-x="1792" +d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 +q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 +h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 +q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" /> + <glyph glyph-name="th_list" unicode="" horiz-adv-x="1792" +d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 +q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 +h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" /> + <glyph glyph-name="ok" unicode="" horiz-adv-x="1792" +d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" /> + <glyph glyph-name="remove" unicode="" horiz-adv-x="1408" +d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 +t-28 -68l-294 -294l294 -294q28 -28 28 -68z" /> + <glyph glyph-name="zoom_in" unicode="" horiz-adv-x="1664" +d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 +q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 +t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> + <glyph glyph-name="zoom_out" unicode="" horiz-adv-x="1664" +d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z +M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z +" /> + <glyph glyph-name="off" unicode="" +d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 +t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" /> + <glyph glyph-name="signal" unicode="" horiz-adv-x="1792" +d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 +v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" /> + <glyph glyph-name="cog" unicode="" +d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 +q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 +l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 +q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" /> + <glyph glyph-name="trash" unicode="" horiz-adv-x="1408" +d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 +q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 +q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> + <glyph glyph-name="home" unicode="" horiz-adv-x="1664" +d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 +l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" /> + <glyph glyph-name="file_alt" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +" /> + <glyph glyph-name="time" unicode="" +d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="road" unicode="" horiz-adv-x="1920" +d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 +q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" /> + <glyph glyph-name="download_alt" unicode="" horiz-adv-x="1664" +d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 +q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" /> + <glyph glyph-name="download" unicode="" +d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 +t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="upload" unicode="" +d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 +t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="inbox" unicode="" +d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 +q25 -61 25 -123z" /> + <glyph glyph-name="play_circle" unicode="" +d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="repeat" unicode="" +d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9 +l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /> + <glyph glyph-name="refresh" unicode="" +d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 +q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 +q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" /> + <glyph glyph-name="list_alt" unicode="" horiz-adv-x="1792" +d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z +M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 +t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 +t47 -113z" /> + <glyph glyph-name="lock" unicode="" horiz-adv-x="1152" +d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /> + <glyph glyph-name="flag" unicode="" horiz-adv-x="1792" +d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 +t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" /> + <glyph glyph-name="headphones" unicode="" horiz-adv-x="1664" +d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 +t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 +t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" /> + <glyph glyph-name="volume_off" unicode="" horiz-adv-x="768" +d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" /> + <glyph glyph-name="volume_down" unicode="" horiz-adv-x="1152" +d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36 +t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" /> + <glyph glyph-name="volume_up" unicode="" horiz-adv-x="1664" +d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36 +t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 +t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 +t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" /> + <glyph glyph-name="qrcode" unicode="" horiz-adv-x="1408" +d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z +M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" /> + <glyph glyph-name="barcode" unicode="" horiz-adv-x="1792" +d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z +M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" /> + <glyph glyph-name="tag" unicode="" +d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 +l715 -714q37 -39 37 -91z" /> + <glyph glyph-name="tags" unicode="" horiz-adv-x="1920" +d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 +l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" /> + <glyph glyph-name="book" unicode="" horiz-adv-x="1664" +d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 +q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 +q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 +t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" /> + <glyph glyph-name="bookmark" unicode="" horiz-adv-x="1280" +d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> + <glyph glyph-name="print" unicode="" horiz-adv-x="1664" +d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 +v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" /> + <glyph glyph-name="camera" unicode="" horiz-adv-x="1920" +d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 +q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="font" unicode="" horiz-adv-x="1664" +d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 +q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 +q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" /> + <glyph glyph-name="bold" unicode="" horiz-adv-x="1408" +d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 +q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 +t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 +t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" /> + <glyph glyph-name="italic" unicode="" horiz-adv-x="1024" +d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 +q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" /> + <glyph glyph-name="text_height" unicode="" horiz-adv-x="1792" +d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 +t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 +q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 +q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" /> + <glyph glyph-name="text_width" unicode="" +d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 +t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 +q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 +t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 +t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" /> + <glyph glyph-name="align_left" unicode="" horiz-adv-x="1792" +d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 +t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> + <glyph glyph-name="align_center" unicode="" horiz-adv-x="1792" +d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 +h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" /> + <glyph glyph-name="align_right" unicode="" horiz-adv-x="1792" +d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 +t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> + <glyph glyph-name="align_justify" unicode="" horiz-adv-x="1792" +d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 +t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> + <glyph glyph-name="list" unicode="" horiz-adv-x="1792" +d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 +t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 +q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 +t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 +q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" /> + <glyph glyph-name="indent_left" unicode="" horiz-adv-x="1792" +d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 +t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 +q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> + <glyph glyph-name="indent_right" unicode="" horiz-adv-x="1792" +d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 +t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 +q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> + <glyph glyph-name="facetime_video" unicode="" horiz-adv-x="1792" +d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 +q39 -17 39 -59z" /> + <glyph glyph-name="picture" unicode="" horiz-adv-x="1920" +d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 +q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> + <glyph glyph-name="pencil" unicode="" +d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 +q53 0 91 -38l235 -234q37 -39 37 -91z" /> + <glyph glyph-name="map_marker" unicode="" horiz-adv-x="1024" +d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" /> + <glyph glyph-name="adjust" unicode="" +d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="tint" unicode="" horiz-adv-x="1024" +d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 +q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" /> + <glyph glyph-name="edit" unicode="" horiz-adv-x="1792" +d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 +q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 +l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" /> + <glyph glyph-name="share" unicode="" horiz-adv-x="1664" +d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 +q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 +t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" /> + <glyph glyph-name="check" unicode="" horiz-adv-x="1664" +d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 +q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 +q24 -24 24 -57t-24 -57z" /> + <glyph glyph-name="move" unicode="" horiz-adv-x="1792" +d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 +t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> + <glyph glyph-name="step_backward" unicode="" horiz-adv-x="1024" +d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" /> + <glyph glyph-name="fast_backward" unicode="" horiz-adv-x="1792" +d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710 +q19 19 32 13t13 -32v-710q4 10 13 19z" /> + <glyph glyph-name="backward" unicode="" horiz-adv-x="1664" +d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" /> + <glyph glyph-name="play" unicode="" horiz-adv-x="1408" +d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" /> + <glyph glyph-name="pause" unicode="" +d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" /> + <glyph glyph-name="stop" unicode="" +d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> + <glyph glyph-name="forward" unicode="" horiz-adv-x="1664" +d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" /> + <glyph glyph-name="fast_forward" unicode="" horiz-adv-x="1792" +d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710 +q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" /> + <glyph glyph-name="step_forward" unicode="" horiz-adv-x="1024" +d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" /> + <glyph glyph-name="eject" unicode="" horiz-adv-x="1538" +d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" /> + <glyph glyph-name="chevron_left" unicode="" horiz-adv-x="1280" +d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" /> + <glyph glyph-name="chevron_right" unicode="" horiz-adv-x="1280" +d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" /> + <glyph glyph-name="plus_sign" unicode="" +d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 +t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="minus_sign" unicode="" +d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 +t103 -385.5z" /> + <glyph glyph-name="remove_sign" unicode="" +d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 +q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="ok_sign" unicode="" +d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 +t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="question_sign" unicode="" +d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 +q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 +t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="info_sign" unicode="" +d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 +t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="screenshot" unicode="" +d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 +q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 +q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" /> + <glyph glyph-name="remove_circle" unicode="" +d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 +l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 +t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="ok_circle" unicode="" +d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 +t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="ban_circle" unicode="" +d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 +t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" /> + <glyph glyph-name="arrow_left" unicode="" +d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 +t32.5 -90.5z" /> + <glyph glyph-name="arrow_right" unicode="" +d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" /> + <glyph glyph-name="arrow_up" unicode="" horiz-adv-x="1664" +d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 +q37 -39 37 -91z" /> + <glyph glyph-name="arrow_down" unicode="" horiz-adv-x="1664" +d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" /> + <glyph glyph-name="share_alt" unicode="" horiz-adv-x="1792" +d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 +t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" /> + <glyph glyph-name="resize_full" unicode="" +d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 +q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" /> + <glyph glyph-name="resize_small" unicode="" +d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 +t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" /> + <glyph glyph-name="plus" unicode="" horiz-adv-x="1408" +d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" /> + <glyph glyph-name="minus" unicode="" horiz-adv-x="1408" +d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" /> + <glyph glyph-name="asterisk" unicode="" horiz-adv-x="1664" +d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 +q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" /> + <glyph glyph-name="exclamation_sign" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 +q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" /> + <glyph glyph-name="gift" unicode="" +d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 +q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 +t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" /> + <glyph glyph-name="leaf" unicode="" horiz-adv-x="1792" +d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 +q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 +t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" /> + <glyph glyph-name="fire" unicode="" horiz-adv-x="1408" +d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 +q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" /> + <glyph glyph-name="eye_open" unicode="" horiz-adv-x="1792" +d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 +t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" /> + <glyph glyph-name="eye_close" unicode="" horiz-adv-x="1792" +d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 +q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 +q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z +" /> + <glyph glyph-name="warning_sign" unicode="" horiz-adv-x="1792" +d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 +q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" /> + <glyph glyph-name="plane" unicode="" horiz-adv-x="1408" +d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 +q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" /> + <glyph glyph-name="calendar" unicode="" horiz-adv-x="1664" +d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z +M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 +q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 +h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> + <glyph glyph-name="random" unicode="" horiz-adv-x="1792" +d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 +t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 +v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 +t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> + <glyph glyph-name="comment" unicode="" horiz-adv-x="1792" +d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 +q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" /> + <glyph glyph-name="magnet" unicode="" +d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 +q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" /> + <glyph glyph-name="chevron_up" unicode="" horiz-adv-x="1792" +d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" /> + <glyph glyph-name="chevron_down" unicode="" horiz-adv-x="1792" +d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" /> + <glyph glyph-name="retweet" unicode="" horiz-adv-x="1920" +d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21 +zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z +" /> + <glyph glyph-name="shopping_cart" unicode="" horiz-adv-x="1664" +d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45 +t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" /> + <glyph glyph-name="folder_close" unicode="" horiz-adv-x="1664" +d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> + <glyph glyph-name="folder_open" unicode="" horiz-adv-x="1920" +d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 +t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" /> + <glyph glyph-name="resize_vertical" unicode="" horiz-adv-x="768" +d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" /> + <glyph glyph-name="resize_horizontal" unicode="" horiz-adv-x="1792" +d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> + <glyph glyph-name="bar_chart" unicode="" horiz-adv-x="2048" +d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" /> + <glyph glyph-name="twitter_sign" unicode="" +d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 +q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 +t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="facebook_sign" unicode="" +d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960 +q0 119 84.5 203.5t203.5 84.5h960z" /> + <glyph glyph-name="camera_retro" unicode="" horiz-adv-x="1792" +d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 +t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 +q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" /> + <glyph glyph-name="key" unicode="" horiz-adv-x="1792" +d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 +l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 +t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" /> + <glyph glyph-name="cogs" unicode="" horiz-adv-x="1920" +d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 +t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 +l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 +l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 +q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 +t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 +q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 +q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" /> + <glyph glyph-name="comments" unicode="" horiz-adv-x="1792" +d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 +q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 +q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" /> + <glyph glyph-name="thumbs_up_alt" unicode="" +d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 +t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 +q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 +q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" /> + <glyph glyph-name="thumbs_down_alt" unicode="" +d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 +t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z +M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 +h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" /> + <glyph glyph-name="star_half" unicode="" horiz-adv-x="896" +d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" /> + <glyph glyph-name="heart_empty" unicode="" horiz-adv-x="1792" +d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 +q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 +q224 0 351 -124t127 -344z" /> + <glyph glyph-name="signout" unicode="" horiz-adv-x="1664" +d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 +q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" /> + <glyph glyph-name="linkedin_sign" unicode="" +d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 +q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="pushpin" unicode="" horiz-adv-x="1152" +d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 +t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" /> + <glyph glyph-name="external_link" unicode="" horiz-adv-x="1792" +d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 +q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" /> + <glyph glyph-name="signin" unicode="" +d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 +q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="trophy" unicode="" horiz-adv-x="1664" +d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 +t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 +q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" /> + <glyph glyph-name="github_sign" unicode="" +d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4 +q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4 +t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16 +q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="upload_alt" unicode="" horiz-adv-x="1664" +d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 +t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" /> + <glyph glyph-name="lemon" unicode="" +d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 +q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 +q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 +q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" /> + <glyph glyph-name="phone" unicode="" horiz-adv-x="1408" +d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186 +q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14 +t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" /> + <glyph glyph-name="check_empty" unicode="" horiz-adv-x="1408" +d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 +q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="bookmark_empty" unicode="" horiz-adv-x="1280" +d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 +q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> + <glyph glyph-name="phone_sign" unicode="" +d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5 +t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5 +t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z +" /> + <glyph glyph-name="twitter" unicode="" horiz-adv-x="1664" +d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 +q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" /> + <glyph glyph-name="facebook" unicode="" horiz-adv-x="1024" +d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" /> + <glyph glyph-name="github" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24 +q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5 +t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12 +q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z +M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" /> + <glyph glyph-name="unlock" unicode="" horiz-adv-x="1664" +d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 +t316.5 -131.5t131.5 -316.5z" /> + <glyph glyph-name="credit_card" unicode="" horiz-adv-x="1920" +d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 +q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" /> + <glyph glyph-name="rss" unicode="" horiz-adv-x="1408" +d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 +t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 +q187 -186 294 -425.5t120 -501.5z" /> + <glyph glyph-name="hdd" unicode="" +d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 +h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 +l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" /> + <glyph glyph-name="bullhorn" unicode="" horiz-adv-x="1792" +d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 +t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" /> + <glyph glyph-name="bell" unicode="" horiz-adv-x="1792" +d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z +M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 +t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> + <glyph glyph-name="certificate" unicode="" +d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 +l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 +l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" /> + <glyph glyph-name="hand_right" unicode="" horiz-adv-x="1792" +d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 +q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 +q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 +t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" /> + <glyph glyph-name="hand_left" unicode="" horiz-adv-x="1792" +d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5 +t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z +M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67 +q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" /> + <glyph glyph-name="hand_up" unicode="" +d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 +q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 +t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 +q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" /> + <glyph glyph-name="hand_down" unicode="" +d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 +t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 +q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 +q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" /> + <glyph glyph-name="circle_arrow_left" unicode="" +d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="circle_arrow_right" unicode="" +d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="circle_arrow_up" unicode="" +d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="circle_arrow_down" unicode="" +d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="globe" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 +q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 +q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 +q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 +t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 +q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 +q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 +t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 +t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 +q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 +q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 +q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 +t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 +q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 +q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" /> + <glyph glyph-name="wrench" unicode="" horiz-adv-x="1664" +d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 +t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" /> + <glyph glyph-name="tasks" unicode="" horiz-adv-x="1792" +d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 +t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> + <glyph glyph-name="filter" unicode="" horiz-adv-x="1408" +d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" /> + <glyph glyph-name="briefcase" unicode="" horiz-adv-x="1792" +d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 +t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" /> + <glyph glyph-name="fullscreen" unicode="" +d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 +l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z +" /> + <glyph glyph-name="group" unicode="" horiz-adv-x="1920" +d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 +t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 +t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 +t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" /> + <glyph glyph-name="link" unicode="" horiz-adv-x="1664" +d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 +l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 +t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 +q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" /> + <glyph glyph-name="cloud" unicode="" horiz-adv-x="1920" +d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z +" /> + <glyph glyph-name="beaker" unicode="" horiz-adv-x="1664" +d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" /> + <glyph glyph-name="cut" unicode="" horiz-adv-x="1792" +d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 +q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 +q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 +q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 +q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" /> + <glyph glyph-name="copy" unicode="" horiz-adv-x="1792" +d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 +h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" /> + <glyph glyph-name="paper_clip" unicode="" horiz-adv-x="1408" +d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 +l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 +z" /> + <glyph glyph-name="save" unicode="" +d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 +h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" /> + <glyph glyph-name="sign_blank" unicode="" +d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="reorder" unicode="" +d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 +t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> + <glyph glyph-name="ul" unicode="" horiz-adv-x="1792" +d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 +t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z +M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> + <glyph glyph-name="ol" unicode="" horiz-adv-x="1792" +d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 +q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 +t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216 +q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> + <glyph glyph-name="strikethrough" unicode="" horiz-adv-x="1792" +d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 +l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 +l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" /> + <glyph glyph-name="underline" unicode="" +d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 +q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 +q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 +q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" /> + <glyph glyph-name="table" unicode="" horiz-adv-x="1664" +d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 +v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 +q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 +q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 +z" /> + <glyph glyph-name="magic" unicode="" horiz-adv-x="1664" +d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 +l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" /> + <glyph glyph-name="truck" unicode="" horiz-adv-x="1792" +d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 +t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 +t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" /> + <glyph glyph-name="pinterest" unicode="" +d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 +q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 +q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="pinterest_sign" unicode="" +d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 +t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 +t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" /> + <glyph glyph-name="google_plus_sign" unicode="" +d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585 +h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="google_plus" unicode="" horiz-adv-x="2304" +d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62 +q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" /> + <glyph glyph-name="money" unicode="" horiz-adv-x="1920" +d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 +v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" /> + <glyph glyph-name="caret_down" unicode="" horiz-adv-x="1024" +d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> + <glyph glyph-name="caret_up" unicode="" horiz-adv-x="1024" +d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> + <glyph glyph-name="caret_left" unicode="" horiz-adv-x="640" +d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" /> + <glyph glyph-name="caret_right" unicode="" horiz-adv-x="640" +d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" /> + <glyph glyph-name="columns" unicode="" horiz-adv-x="1664" +d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" /> + <glyph glyph-name="sort" unicode="" horiz-adv-x="1024" +d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> + <glyph glyph-name="sort_down" unicode="" horiz-adv-x="1024" +d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> + <glyph glyph-name="sort_up" unicode="" horiz-adv-x="1024" +d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> + <glyph glyph-name="envelope_alt" unicode="" horiz-adv-x="1792" +d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 +q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" /> + <glyph glyph-name="linkedin" unicode="" +d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 +q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" /> + <glyph glyph-name="undo" unicode="" +d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 +t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" /> + <glyph glyph-name="legal" unicode="" horiz-adv-x="1792" +d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 +t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 +q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 +q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" /> + <glyph glyph-name="dashboard" unicode="" horiz-adv-x="1792" +d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 +t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 +t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 +q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="comment_alt" unicode="" horiz-adv-x="1792" +d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 +q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 +t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" /> + <glyph glyph-name="comments_alt" unicode="" horiz-adv-x="1792" +d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 +t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 +t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 +q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" /> + <glyph glyph-name="bolt" unicode="" horiz-adv-x="896" +d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" /> + <glyph glyph-name="sitemap" unicode="" horiz-adv-x="1792" +d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 +q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 +z" /> + <glyph glyph-name="umbrella" unicode="" horiz-adv-x="1664" +d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 +q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 +q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" /> + <glyph glyph-name="paste" unicode="" horiz-adv-x="1792" +d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 +h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" /> + <glyph glyph-name="light_bulb" unicode="" horiz-adv-x="1024" +d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 +q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 +q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 +t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" /> + <glyph glyph-name="exchange" unicode="" horiz-adv-x="1792" +d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 +q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> + <glyph glyph-name="cloud_download" unicode="" horiz-adv-x="1920" +d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 +q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> + <glyph glyph-name="cloud_upload" unicode="" horiz-adv-x="1920" +d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 +q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> + <glyph glyph-name="user_md" unicode="" horiz-adv-x="1408" +d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 +t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 +t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 +t271.5 -112.5t112.5 -271.5z" /> + <glyph glyph-name="stethoscope" unicode="" horiz-adv-x="1408" +d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 +t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 +t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" /> + <glyph glyph-name="suitcase" unicode="" horiz-adv-x="1792" +d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 +t66 -158z" /> + <glyph glyph-name="bell_alt" unicode="" horiz-adv-x="1792" +d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 +t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> + <glyph glyph-name="coffee" unicode="" horiz-adv-x="1920" +d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 +t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" /> + <glyph glyph-name="food" unicode="" horiz-adv-x="1408" +d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 +t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" /> + <glyph glyph-name="file_text_alt" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 +q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" /> + <glyph glyph-name="building" unicode="" horiz-adv-x="1408" +d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" /> + <glyph glyph-name="hospital" unicode="" horiz-adv-x="1408" +d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z +M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 +t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 +v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" /> + <glyph glyph-name="ambulance" unicode="" horiz-adv-x="1920" +d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 +t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 +q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> + <glyph glyph-name="medkit" unicode="" horiz-adv-x="1792" +d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 +q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" /> + <glyph glyph-name="fighter_jet" unicode="" horiz-adv-x="1920" +d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 +q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" /> + <glyph glyph-name="beer" unicode="" horiz-adv-x="1664" +d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" /> + <glyph glyph-name="h_sign" unicode="" +d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="f0fe" unicode="" +d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="double_angle_left" unicode="" horiz-adv-x="1024" +d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 +t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" /> + <glyph glyph-name="double_angle_right" unicode="" horiz-adv-x="1024" +d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 +l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> + <glyph glyph-name="double_angle_up" unicode="" horiz-adv-x="1152" +d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 +q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> + <glyph glyph-name="double_angle_down" unicode="" horiz-adv-x="1152" +d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 +t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> + <glyph glyph-name="angle_left" unicode="" horiz-adv-x="640" +d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> + <glyph glyph-name="angle_right" unicode="" horiz-adv-x="640" +d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> + <glyph glyph-name="angle_up" unicode="" horiz-adv-x="1152" +d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> + <glyph glyph-name="angle_down" unicode="" horiz-adv-x="1152" +d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> + <glyph glyph-name="desktop" unicode="" horiz-adv-x="1920" +d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 +t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> + <glyph glyph-name="laptop" unicode="" horiz-adv-x="1920" +d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z +M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" /> + <glyph glyph-name="tablet" unicode="" horiz-adv-x="1152" +d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 +q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" /> + <glyph glyph-name="mobile_phone" unicode="" horiz-adv-x="768" +d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 +q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> + <glyph glyph-name="circle_blank" unicode="" +d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 +t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="quote_left" unicode="" horiz-adv-x="1664" +d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z +M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" /> + <glyph glyph-name="quote_right" unicode="" horiz-adv-x="1664" +d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 +v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" /> + <glyph glyph-name="spinner" unicode="" horiz-adv-x="1792" +d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5 +t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z +M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5 +q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" /> + <glyph glyph-name="circle" unicode="" +d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="reply" unicode="" horiz-adv-x="1792" +d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 +l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" /> + <glyph glyph-name="github_alt" unicode="" horiz-adv-x="1664" +d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 +q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 +t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 +q0 -87 -27 -168q136 -160 136 -398z" /> + <glyph glyph-name="folder_close_alt" unicode="" horiz-adv-x="1664" +d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 +q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> + <glyph glyph-name="folder_open_alt" unicode="" horiz-adv-x="1920" +d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 +v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z +" /> + <glyph glyph-name="expand_alt" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="collapse_alt" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="smile" unicode="" +d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 +t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 +t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="frown" unicode="" +d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 +t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 +t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="meh" unicode="" +d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 +t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="gamepad" unicode="" horiz-adv-x="1920" +d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 +t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 +t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" /> + <glyph glyph-name="keyboard" unicode="" horiz-adv-x="1920" +d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 +h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 +h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 +q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 +h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" /> + <glyph glyph-name="flag_alt" unicode="" horiz-adv-x="1792" +d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 +h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 +q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> + <glyph glyph-name="flag_checkered" unicode="" horiz-adv-x="1792" +d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 +q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 +q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 +q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> + <glyph glyph-name="terminal" unicode="" horiz-adv-x="1664" +d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 +t9 -23z" /> + <glyph glyph-name="code" unicode="" horiz-adv-x="1920" +d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 +l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" /> + <glyph glyph-name="reply_all" unicode="" horiz-adv-x="1792" +d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 +q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" /> + <glyph glyph-name="star_half_empty" unicode="" horiz-adv-x="1664" +d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 +l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" /> + <glyph glyph-name="location_arrow" unicode="" horiz-adv-x="1408" +d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" /> + <glyph glyph-name="crop" unicode="" horiz-adv-x="1664" +d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 +v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" /> + <glyph glyph-name="code_fork" unicode="" horiz-adv-x="1024" +d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 +q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 +q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" /> + <glyph glyph-name="unlink" unicode="" horiz-adv-x="1664" +d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 +q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 +l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 +t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> + <glyph glyph-name="question" unicode="" horiz-adv-x="1024" +d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 +t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" /> + <glyph glyph-name="_279" unicode="" horiz-adv-x="640" +d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 +q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" /> + <glyph glyph-name="exclamation" unicode="" horiz-adv-x="640" +d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" /> + <glyph glyph-name="superscript" unicode="" +d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z +M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5 +t-65.5 -51.5t-30.5 -63h232v80h126z" /> + <glyph glyph-name="subscript" unicode="" +d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z +M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73 +h232v80h126z" /> + <glyph glyph-name="_283" unicode="" horiz-adv-x="1920" +d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" /> + <glyph glyph-name="puzzle_piece" unicode="" horiz-adv-x="1664" +d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 +t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 +q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 +q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" /> + <glyph glyph-name="microphone" unicode="" horiz-adv-x="1152" +d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 +t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" /> + <glyph glyph-name="microphone_off" unicode="" horiz-adv-x="1408" +d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 +q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 +t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" /> + <glyph glyph-name="shield" unicode="" horiz-adv-x="1280" +d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 +t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> + <glyph glyph-name="calendar_empty" unicode="" horiz-adv-x="1664" +d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 +q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> + <glyph glyph-name="fire_extinguisher" unicode="" horiz-adv-x="1408" +d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 +q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 +q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" /> + <glyph glyph-name="rocket" unicode="" horiz-adv-x="1664" +d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 +q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" /> + <glyph glyph-name="maxcdn" unicode="" horiz-adv-x="1792" +d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" /> + <glyph glyph-name="chevron_sign_left" unicode="" +d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 +t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="chevron_sign_right" unicode="" +d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 +t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="chevron_sign_up" unicode="" +d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 +t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="chevron_sign_down" unicode="" +d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 +t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="html5" unicode="" horiz-adv-x="1408" +d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" /> + <glyph glyph-name="css3" unicode="" horiz-adv-x="1792" +d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" /> + <glyph glyph-name="anchor" unicode="" horiz-adv-x="1792" +d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 +q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 +t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" /> + <glyph glyph-name="unlock_alt" unicode="" horiz-adv-x="1152" +d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 +v-320h736z" /> + <glyph glyph-name="bullseye" unicode="" +d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 +t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 +q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="ellipsis_horizontal" unicode="" horiz-adv-x="1408" +d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 +q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> + <glyph glyph-name="ellipsis_vertical" unicode="" horiz-adv-x="384" +d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 +q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> + <glyph glyph-name="_303" unicode="" +d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128 +q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="play_sign" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 +q16 -8 32 -8q17 0 32 9z" /> + <glyph glyph-name="ticket" unicode="" horiz-adv-x="1792" +d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 +t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" /> + <glyph glyph-name="minus_sign_alt" unicode="" +d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 +t84.5 -203.5z" /> + <glyph glyph-name="check_minus" unicode="" horiz-adv-x="1408" +d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 +t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="level_up" unicode="" horiz-adv-x="1024" +d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" /> + <glyph glyph-name="level_down" unicode="" horiz-adv-x="1024" +d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" /> + <glyph glyph-name="check_sign" unicode="" +d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 +t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="edit_sign" unicode="" +d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 +v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_312" unicode="" +d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 +q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="share_sign" unicode="" +d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 +t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="compass" unicode="" +d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 +t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="collapse" unicode="" +d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 +v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="collapse_top" unicode="" +d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_317" unicode="" +d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 +t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="eur" unicode="" horiz-adv-x="1024" +d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 +t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 +l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" /> + <glyph glyph-name="gbp" unicode="" horiz-adv-x="1024" +d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 +q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" /> + <glyph glyph-name="usd" unicode="" horiz-adv-x="1024" +d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 +t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 +t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 +t53 -63.5t31.5 -76.5t13 -94z" /> + <glyph glyph-name="inr" unicode="" horiz-adv-x="898" +d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 +q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" /> + <glyph glyph-name="jpy" unicode="" horiz-adv-x="1027" +d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 +l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" /> + <glyph glyph-name="rub" unicode="" horiz-adv-x="1280" +d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 +q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" /> + <glyph glyph-name="krw" unicode="" horiz-adv-x="1792" +d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 +t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 +q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" /> + <glyph glyph-name="btc" unicode="" horiz-adv-x="1280" +d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 +l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 +t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" /> + <glyph glyph-name="file" unicode="" +d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" /> + <glyph glyph-name="file_text" unicode="" +d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 +q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" /> + <glyph glyph-name="sort_by_alphabet" unicode="" horiz-adv-x="1664" +d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 +v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 +l230 -662h70z" /> + <glyph glyph-name="_329" unicode="" horiz-adv-x="1664" +d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 +v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 +v119h121z" /> + <glyph glyph-name="sort_by_attributes" unicode="" horiz-adv-x="1792" +d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 +q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 +q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" /> + <glyph glyph-name="sort_by_attributes_alt" unicode="" horiz-adv-x="1792" +d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 +q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 +q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" /> + <glyph glyph-name="sort_by_order" unicode="" +d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 +zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 +t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" /> + <glyph glyph-name="sort_by_order_alt" unicode="" +d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 +t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 +q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" /> + <glyph glyph-name="_334" unicode="" horiz-adv-x="1664" +d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 +q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 +t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" /> + <glyph glyph-name="_335" unicode="" horiz-adv-x="1664" +d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 +t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 +t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" /> + <glyph glyph-name="youtube_sign" unicode="" +d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 +q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 +q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 +q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38 +q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5 +h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="youtube" unicode="" +d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 +q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 +q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 +q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51 +q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" /> + <glyph glyph-name="xing" unicode="" horiz-adv-x="1408" +d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 +q25 45 64 45h241q22 0 31 -15z" /> + <glyph glyph-name="xing_sign" unicode="" +d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 +l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="youtube_play" unicode="" horiz-adv-x="1792" +d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5 +l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136 +q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" /> + <glyph glyph-name="dropbox" unicode="" horiz-adv-x="1792" +d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" /> + <glyph glyph-name="stackexchange" unicode="" +d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" /> + <glyph glyph-name="instagram" unicode="" +d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270 +q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5 +t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317 +q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" /> + <glyph glyph-name="flickr" unicode="" +d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 +t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" /> + <glyph glyph-name="adn" unicode="" +d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="f171" unicode="" horiz-adv-x="1408" +d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 +t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 +t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 +t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" /> + <glyph glyph-name="bitbucket_sign" unicode="" +d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 +t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z +M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 +v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="tumblr" unicode="" horiz-adv-x="1024" +d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 +q78 2 134 29z" /> + <glyph glyph-name="tumblr_sign" unicode="" +d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z +M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="long_arrow_down" unicode="" horiz-adv-x="768" +d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" /> + <glyph glyph-name="long_arrow_up" unicode="" horiz-adv-x="768" +d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" /> + <glyph glyph-name="long_arrow_left" unicode="" horiz-adv-x="1792" +d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" /> + <glyph glyph-name="long_arrow_right" unicode="" horiz-adv-x="1792" +d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" /> + <glyph glyph-name="apple" unicode="" horiz-adv-x="1408" +d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 +q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" /> + <glyph glyph-name="windows" unicode="" horiz-adv-x="1664" +d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" /> + <glyph glyph-name="android" unicode="" horiz-adv-x="1408" +d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 +t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 +h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" /> + <glyph glyph-name="linux" unicode="" +d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z +M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 +q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 +q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 +t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 +q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 +q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 +q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 +q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4 +t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5 +t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43 +q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49 +t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54 +q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5 +t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5 +t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" /> + <glyph glyph-name="dribble" unicode="" +d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 +t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 +q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 +t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="skype" unicode="" +d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 +t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 +q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 +q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" /> + <glyph glyph-name="foursquare" unicode="" horiz-adv-x="1280" +d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z +M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 +l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" /> + <glyph glyph-name="trello" unicode="" +d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 +q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> + <glyph glyph-name="female" unicode="" horiz-adv-x="1280" +d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 +q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> + <glyph glyph-name="male" unicode="" horiz-adv-x="1024" +d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z +M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> + <glyph glyph-name="gittip" unicode="" +d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 +t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="sun" unicode="" horiz-adv-x="1792" +d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 +l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 +q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" /> + <glyph glyph-name="_366" unicode="" +d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 +t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" /> + <glyph glyph-name="archive" unicode="" horiz-adv-x="1792" +d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 +q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" /> + <glyph glyph-name="bug" unicode="" horiz-adv-x="1664" +d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 +q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 +t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" /> + <glyph glyph-name="vk" unicode="" horiz-adv-x="1920" +d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 +t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 +q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24 +q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 +q39 5 64 -2.5t31 -16.5z" /> + <glyph glyph-name="weibo" unicode="" horiz-adv-x="1792" +d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 +q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 +q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 +q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z +M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" /> + <glyph glyph-name="renren" unicode="" +d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 +q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" /> + <glyph glyph-name="_372" unicode="" horiz-adv-x="1408" +d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 +t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 +t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 +t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" /> + <glyph glyph-name="stack_exchange" unicode="" horiz-adv-x="1280" +d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z +" /> + <glyph glyph-name="_374" unicode="" +d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 +t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="arrow_circle_alt_left" unicode="" +d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 +t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_376" unicode="" +d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z +M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="dot_circle_alt" unicode="" +d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 +t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_378" unicode="" horiz-adv-x="1664" +d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 +q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" /> + <glyph glyph-name="vimeo_square" unicode="" +d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179 +q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_380" unicode="" horiz-adv-x="1152" +d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 +q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> + <glyph glyph-name="plus_square_o" unicode="" horiz-adv-x="1408" +d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 +q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_382" unicode="" horiz-adv-x="2176" +d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 +t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 +q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" /> + <glyph glyph-name="_383" unicode="" horiz-adv-x="1664" +d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 +q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 +t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" /> + <glyph glyph-name="_384" unicode="" +d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 +q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 +t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" /> + <glyph glyph-name="_385" unicode="" horiz-adv-x="1792" +d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 +t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 +t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 +t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 +t273 -182.5t331.5 -68z" /> + <glyph glyph-name="_386" unicode="" horiz-adv-x="1792" +d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" /> + <glyph glyph-name="_387" unicode="" horiz-adv-x="2048" +d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 +q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" /> + <glyph glyph-name="_388" unicode="" horiz-adv-x="2304" +d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 +q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" /> + <glyph glyph-name="_389" unicode="" +d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 +q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" /> + <glyph glyph-name="uniF1A0" unicode="" +d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5 +t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" /> + <glyph glyph-name="f1a1" unicode="" horiz-adv-x="1792" +d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26 +t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37 +q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191 +t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="_392" unicode="" +d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54 +q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83 +q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 +q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_393" unicode="" +d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 +v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 +t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="f1a4" unicode="" horiz-adv-x="1920" +d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 +v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" /> + <glyph glyph-name="_395" unicode="" +d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 +t84.5 -203.5z" /> + <glyph glyph-name="_396" unicode="" horiz-adv-x="2048" +d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 +v-369h123z" /> + <glyph glyph-name="_397" unicode="" +d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 +v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 +q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_398" unicode="" horiz-adv-x="2038" +d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 +q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 +q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 +q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 +t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 +q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 +t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 +t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" /> + <glyph glyph-name="_399" unicode="" +d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 +q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 +q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 +t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 +q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" /> + <glyph glyph-name="_400" unicode="" +d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z +M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 +t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 +q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 +t135.5 51q85 0 145 -60.5t60 -145.5z" /> + <glyph glyph-name="f1ab" unicode="" +d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 +q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 +q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z +M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 +q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 +q20 0 20 -21v-418z" /> + <glyph glyph-name="_402" unicode="" horiz-adv-x="1792" +d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 +l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 +t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 +q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 +q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" /> + <glyph glyph-name="_403" unicode="" +d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 +t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 +q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 +q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 +t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 +q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 +q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 +t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" /> + <glyph glyph-name="_404" unicode="" horiz-adv-x="1280" +d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152 +q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> + <glyph glyph-name="uniF1B1" unicode="" horiz-adv-x="1664" +d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 +q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 +q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 +t100.5 134t141.5 55.5z" /> + <glyph glyph-name="_406" unicode="" horiz-adv-x="768" +d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" /> + <glyph glyph-name="_407" unicode="" horiz-adv-x="1792" +d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z +" /> + <glyph glyph-name="_408" unicode="" horiz-adv-x="2304" +d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 +t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 +v-400l434 -186q36 -16 57 -48t21 -70z" /> + <glyph glyph-name="_409" unicode="" horiz-adv-x="2048" +d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 +q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 +q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" /> + <glyph glyph-name="_410" unicode="" +d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 +t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 +t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" /> + <glyph glyph-name="_411" unicode="" horiz-adv-x="1792" +d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 +q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 +q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" /> + <glyph glyph-name="_412" unicode="" +d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 +q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 +q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z +" /> + <glyph glyph-name="_413" unicode="" horiz-adv-x="1792" +d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 +l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 +t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 +q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" /> + <glyph glyph-name="_414" unicode="" horiz-adv-x="2048" +d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 +q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 +l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" /> + <glyph glyph-name="_415" unicode="" horiz-adv-x="2048" +d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 +t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z +M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" /> + <glyph glyph-name="_416" unicode="" +d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 +q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" /> + <glyph glyph-name="_417" unicode="" +d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 +q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 +q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_418" unicode="" horiz-adv-x="1024" +d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" /> + <glyph glyph-name="_419" unicode="" horiz-adv-x="2304" +d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 +q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 +q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 +l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 +q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236 +q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786 +q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" /> + <glyph glyph-name="uniF1C0" unicode="" +d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 +t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 +t-103 128v128q0 69 103 128t280 93.5t385 34.5z" /> + <glyph glyph-name="uniF1C1" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 +q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 +q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" /> + <glyph glyph-name="_422" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5 +t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" /> + <glyph glyph-name="_423" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 +h-290v-107h68l189 -272l-194 -283h-68z" /> + <glyph glyph-name="_424" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" /> + <glyph glyph-name="_425" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" /> + <glyph glyph-name="_426" unicode="" +d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 +v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 +q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" /> + <glyph glyph-name="_427" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 +q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" /> + <glyph glyph-name="_428" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" /> + <glyph glyph-name="_429" unicode="" +d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z +M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 +l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" /> + <glyph glyph-name="_430" unicode="" +d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 +q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" /> + <glyph glyph-name="_431" unicode="" horiz-adv-x="1792" +d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 +q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" /> + <glyph glyph-name="_432" unicode="" horiz-adv-x="2048" +d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 +q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 +t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" /> + <glyph glyph-name="_433" unicode="" horiz-adv-x="1792" +d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 +q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 +t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" /> + <glyph glyph-name="_434" unicode="" horiz-adv-x="1792" +d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5 +t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" /> + <glyph glyph-name="uniF1D0" unicode="" horiz-adv-x="1792" +d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 +t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 +t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 +q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" /> + <glyph glyph-name="uniF1D1" unicode="" horiz-adv-x="1792" +d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 +l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 +q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 +q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 +t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 +t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF1D2" unicode="" +d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 +q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 +q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 +q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_438" unicode="" horiz-adv-x="1792" +d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 +q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 +q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 +v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" /> + <glyph glyph-name="_439" unicode="" +d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="uniF1D5" unicode="" horiz-adv-x="1280" +d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 +t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 +t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" /> + <glyph glyph-name="uniF1D6" unicode="" horiz-adv-x="1792" +d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 +q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 +t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 +t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" /> + <glyph glyph-name="uniF1D7" unicode="" horiz-adv-x="2048" +d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 +q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 +q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 +q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" /> + <glyph glyph-name="_443" unicode="" horiz-adv-x="1792" +d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" /> + <glyph glyph-name="_444" unicode="" horiz-adv-x="1792" +d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 +l863 639l-478 -797z" /> + <glyph glyph-name="_445" unicode="" +d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 +t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 +t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" /> + <glyph glyph-name="_446" unicode="" +d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 +t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_447" unicode="" horiz-adv-x="1792" +d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 +t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 +t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 +q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 +q0 -26 -12 -48t-36 -22z" /> + <glyph glyph-name="_448" unicode="" horiz-adv-x="1280" +d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 +q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" /> + <glyph glyph-name="_449" unicode="" +d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 +q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" /> + <glyph glyph-name="uniF1E0" unicode="" +d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 +t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" /> + <glyph glyph-name="_451" unicode="" +d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 +t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_452" unicode="" horiz-adv-x="1792" +d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 +t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 +q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 +t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> + <glyph glyph-name="_453" unicode="" horiz-adv-x="1792" +d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 +l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" /> + <glyph glyph-name="_454" unicode="" horiz-adv-x="1792" +d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 +v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 +q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 +zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 +t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" /> + <glyph glyph-name="_455" unicode="" horiz-adv-x="1792" +d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z +M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" /> + <glyph glyph-name="_456" unicode="" horiz-adv-x="1792" +d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234 +l401 400q38 37 91 37t90 -37z" /> + <glyph glyph-name="_457" unicode="" horiz-adv-x="1792" +d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 +t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z +M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7 +t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" /> + <glyph glyph-name="_458" unicode="" horiz-adv-x="1792" +d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" /> + <glyph glyph-name="_459" unicode="" +d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 +q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 +t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 +q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" /> + <glyph glyph-name="_460" unicode="" horiz-adv-x="2048" +d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 +t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" /> + <glyph glyph-name="_461" unicode="" horiz-adv-x="2048" +d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 +q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z +M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" /> + <glyph glyph-name="_462" unicode="" horiz-adv-x="1792" +d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 +t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 +t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 +t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z +M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 +h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_463" unicode="" +d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246 +q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598 +q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" /> + <glyph glyph-name="_464" unicode="" horiz-adv-x="1792" +d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640 +q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" /> + <glyph glyph-name="uniF1F0" unicode="" horiz-adv-x="2304" +d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 +q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 +q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_466" unicode="" horiz-adv-x="2304" +d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249 +q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z +M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32 +h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4 +q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75 +q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14 +q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22 +q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12 +q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122 +h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5 +t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_467" unicode="" horiz-adv-x="2304" +d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 +q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 +v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 +q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 +t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" /> + <glyph glyph-name="f1f3" unicode="" horiz-adv-x="2304" +d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z +M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 +l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 +v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 +q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 +q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 +t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 +h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 +t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" /> + <glyph glyph-name="_469" unicode="" horiz-adv-x="2304" +d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16 +t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76 +q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59 +t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489 +l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66 +q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_470" unicode="" horiz-adv-x="2304" +d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 +q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 +q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 +q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 +q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_471" unicode="" horiz-adv-x="2048" +d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 +l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 +l418 363q10 8 23.5 7t21.5 -11z" /> + <glyph glyph-name="_472" unicode="" horiz-adv-x="2048" +d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 +q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 +q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" /> + <glyph glyph-name="_473" unicode="" horiz-adv-x="1408" +d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 +q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 +q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> + <glyph glyph-name="_474" unicode="" +d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 +t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 +t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_475" unicode="" +d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 +q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 +t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 +t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" /> + <glyph glyph-name="_476" unicode="" horiz-adv-x="1792" +d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 +t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" /> + <glyph glyph-name="f1fc" unicode="" horiz-adv-x="1792" +d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 +t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" /> + <glyph glyph-name="_478" unicode="" horiz-adv-x="1792" +d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5 +t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38 +t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448 +h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5 +q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" /> + <glyph glyph-name="_479" unicode="" horiz-adv-x="2048" +d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" /> + <glyph glyph-name="_480" unicode="" horiz-adv-x="1792" +d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_481" unicode="" horiz-adv-x="2048" +d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 +t9 -23z" /> + <glyph glyph-name="_482" unicode="" horiz-adv-x="1792" +d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 +q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 +t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 +q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" /> + <glyph glyph-name="_483" unicode="" +d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 +q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 +q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 +q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_484" unicode="" horiz-adv-x="2048" +d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 +t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 +t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" /> + <glyph glyph-name="_485" unicode="" horiz-adv-x="2048" +d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 +t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" /> + <glyph glyph-name="_486" unicode="" horiz-adv-x="2304" +d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 +q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 +q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 +q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" /> + <glyph glyph-name="_487" unicode="" +d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 +h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 +t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" /> + <glyph glyph-name="_488" unicode="" horiz-adv-x="2048" +d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 +q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 +q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" /> + <glyph glyph-name="_489" unicode="" horiz-adv-x="1280" +d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 +t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 +t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 +q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 +q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 +t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" /> + <glyph glyph-name="_490" unicode="" horiz-adv-x="2048" +d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 +q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 +t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 +t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" /> + <glyph glyph-name="_491" unicode="" +d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 +t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> + <glyph glyph-name="_492" unicode="" +d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 +q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 +q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" /> + <glyph glyph-name="_493" unicode="" +d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" /> + <glyph glyph-name="_494" unicode="" horiz-adv-x="2048" +d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335 +q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5 +q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438 +h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66 +l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946 +l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82 +zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" /> + <glyph glyph-name="f210" unicode="" +d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" /> + <glyph glyph-name="_496" unicode="" +d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384 +q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" /> + <glyph glyph-name="f212" unicode="" horiz-adv-x="2048" +d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021 +q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25 +q209 0 374 -102q172 107 374 102z" /> + <glyph glyph-name="_498" unicode="" horiz-adv-x="2048" +d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101 +q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284 +q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" /> + <glyph glyph-name="_499" unicode="" +d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34 +l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114 +v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z +M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378 +v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51 +h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5 +t-43 -34t-16.5 -53.5z" /> + <glyph glyph-name="_500" unicode="" horiz-adv-x="2048" +d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832 +q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" /> + <glyph glyph-name="_501" unicode="" horiz-adv-x="2048" +d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5 +t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113 +t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5 +q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" /> + <glyph glyph-name="_502" unicode="" horiz-adv-x="1664" +d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 +t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 +q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> + <glyph glyph-name="_503" unicode="" horiz-adv-x="1664" +d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 +t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 +q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> + <glyph glyph-name="_504" unicode="" horiz-adv-x="2048" +d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20 +l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" /> + <glyph glyph-name="_505" unicode="" horiz-adv-x="2048" +d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 +q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83 +q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314 +v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 +q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" /> + <glyph glyph-name="_506" unicode="" +d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14 +t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5 +q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31 +t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" /> + <glyph glyph-name="_507" unicode="" horiz-adv-x="2304" +d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5 +t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105 +l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226 +t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" /> + <glyph glyph-name="_508" unicode="" +d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12 +q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384 +q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5 +t158.5 -65.5t65.5 -158.5z" /> + <glyph glyph-name="_509" unicode="" horiz-adv-x="1792" +d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221 +q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124 +t127 -344z" /> + <glyph glyph-name="venus" unicode="" horiz-adv-x="1280" +d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292 +q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" /> + <glyph glyph-name="_511" unicode="" +d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5 +q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_512" unicode="" horiz-adv-x="1280" +d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5 +t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 +t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_513" unicode="" +d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 +q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 +t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_514" unicode="" horiz-adv-x="1792" +d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 +q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9 +t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5 +t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_515" unicode="" horiz-adv-x="1792" +d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23 +t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391 +q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391 +q0 -226 -154 -391q103 -57 218 -57z" /> + <glyph glyph-name="_516" unicode="" horiz-adv-x="1920" +d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230 +q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9 +t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128 +q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" /> + <glyph glyph-name="_517" unicode="" horiz-adv-x="2048" +d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23 +t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9 +t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5 +t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" /> + <glyph glyph-name="_518" unicode="" +d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5 +t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 +t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_519" unicode="" horiz-adv-x="1280" +d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22 +t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5 +t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_520" unicode="" horiz-adv-x="2048" +d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5 +t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5 +t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_521" unicode="" horiz-adv-x="1280" +d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5 +t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> + <glyph glyph-name="_522" unicode="" horiz-adv-x="1280" +d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123 +t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" /> + <glyph glyph-name="_523" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="_524" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="_525" unicode="" +d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" /> + <glyph glyph-name="_526" unicode="" horiz-adv-x="1280" +d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5 +l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5 +q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" /> + <glyph glyph-name="_527" unicode="" +d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5 +t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233 +l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" /> + <glyph glyph-name="_528" unicode="" horiz-adv-x="1792" +d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216 +q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" /> + <glyph glyph-name="_529" unicode="" horiz-adv-x="2048" +d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5 +t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5 +t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" /> + <glyph glyph-name="_530" unicode="" horiz-adv-x="2048" +d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136 +q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69 +t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" /> + <glyph glyph-name="_531" unicode="" horiz-adv-x="2048" +d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704 +q-26 0 -45 -19t-19 -45v-384h1152z" /> + <glyph glyph-name="_532" unicode="" +d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" /> + <glyph glyph-name="_533" unicode="" +d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 +t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" /> + <glyph glyph-name="_534" unicode="" +d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 +t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" /> + <glyph glyph-name="_535" unicode="" horiz-adv-x="1792" +d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116 +q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" /> + <glyph glyph-name="_536" unicode="" +d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" /> + <glyph glyph-name="_537" unicode="" horiz-adv-x="2296" +d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5 +q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5 +q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42 +q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37 +q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5 +q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139 +q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8 +t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132 +q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132 +q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z +M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86 +t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103 +q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4 +l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130 +t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150 +q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12 +q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" /> + <glyph glyph-name="_538" unicode="" horiz-adv-x="2304" +d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5 +t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5 +t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" /> + <glyph glyph-name="_539" unicode="" horiz-adv-x="1792" +d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348 +t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23 +t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96 +q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512 +q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" /> + <glyph glyph-name="_540" unicode="" horiz-adv-x="2304" +d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113 +v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" /> + <glyph glyph-name="_541" unicode="" horiz-adv-x="2304" +d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 +h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" /> + <glyph glyph-name="_542" unicode="" horiz-adv-x="2304" +d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 +h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" /> + <glyph glyph-name="_543" unicode="" horiz-adv-x="2304" +d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 +h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" /> + <glyph glyph-name="_544" unicode="" horiz-adv-x="2304" +d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23 +v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" /> + <glyph glyph-name="_545" unicode="" horiz-adv-x="1280" +d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" /> + <glyph glyph-name="_546" unicode="" horiz-adv-x="1024" +d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" /> + <glyph glyph-name="_547" unicode="" horiz-adv-x="2048" +d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128 +h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" /> + <glyph glyph-name="_548" unicode="" horiz-adv-x="2304" +d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256 +v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" /> + <glyph glyph-name="_549" unicode="" +d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" /> + <glyph glyph-name="_550" unicode="" +d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68 +z" /> + <glyph glyph-name="_551" unicode="" horiz-adv-x="2304" +d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5 +t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88 +t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90 +t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_552" unicode="" horiz-adv-x="2304" +d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294 +t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z +M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_553" unicode="" horiz-adv-x="1792" +d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113 +zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" /> + <glyph glyph-name="_554" unicode="" horiz-adv-x="2304" +d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64 +q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91 +t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5 +t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" /> + <glyph glyph-name="_555" unicode="" +d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 +t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5 +t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" /> + <glyph glyph-name="_556" unicode="" +d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 +t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" /> + <glyph glyph-name="_557" unicode="" +d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 +t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" /> + <glyph glyph-name="_558" unicode="" +d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 +t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196 +h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" /> + <glyph glyph-name="_559" unicode="" +d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87 +t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9 +h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" /> + <glyph glyph-name="_560" unicode="" +d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25 +q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27 +t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21 +q72 69 174 69z" /> + <glyph glyph-name="_561" unicode="" horiz-adv-x="1792" +d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33 +t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52 +h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" /> + <glyph glyph-name="_562" unicode="" horiz-adv-x="1792" +d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668 +q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17 +t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5 +t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5 +q0 -42 -23 -78t-61 -53l-310 -141h91z" /> + <glyph glyph-name="_563" unicode="" horiz-adv-x="2048" +d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32 +q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68 +q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" /> + <glyph glyph-name="_564" unicode="" horiz-adv-x="2048" +d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79 +t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24 +q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26 +l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" /> + <glyph glyph-name="_565" unicode="" horiz-adv-x="1792" +d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5 +q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5 +v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32 +v-384h32z" /> + <glyph glyph-name="_566" unicode="" +d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181 +v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46 +q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5 +q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308 +q0 -53 37.5 -90.5t90.5 -37.5h668z" /> + <glyph glyph-name="_567" unicode="" horiz-adv-x="1973" +d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5 +t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141 +q13 0 22 -8.5t10 -20.5z" /> + <glyph glyph-name="_568" unicode="" horiz-adv-x="1792" +d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109 +t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640 +q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="_569" unicode="" horiz-adv-x="1792" +d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78 +q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5 +t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376 +q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191 +t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" /> + <glyph glyph-name="f260" unicode="" horiz-adv-x="2048" +d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" /> + <glyph glyph-name="f261" unicode="" horiz-adv-x="1792" +d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191 +t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="_572" unicode="" horiz-adv-x="2304" +d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57 +t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197 +t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5 +t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5 +t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5 +q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" /> + <glyph glyph-name="f263" unicode="" horiz-adv-x="1280" +d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5 +t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94 +q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" /> + <glyph glyph-name="_574" unicode="" +d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32 +q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5 +zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="_575" unicode="" horiz-adv-x="1720" +d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33 +l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" /> + <glyph glyph-name="_576" unicode="" horiz-adv-x="2304" +d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540 +q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81 +l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" /> + <glyph glyph-name="_577" unicode="" horiz-adv-x="1792" +d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640 +q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5 +t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5 +t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5 +t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191 +t191 -286t71 -348z" /> + <glyph glyph-name="_578" unicode="" horiz-adv-x="1792" +d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962 +q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" /> + <glyph glyph-name="_579" unicode="" horiz-adv-x="1792" +d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5 +q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5 +q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" /> + <glyph glyph-name="_580" unicode="" horiz-adv-x="1792" +d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339 +q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z +" /> + <glyph glyph-name="_581" unicode="" horiz-adv-x="1792" +d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606 +q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z +M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" /> + <glyph glyph-name="_582" unicode="" horiz-adv-x="2048" +d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23 +v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> + <glyph glyph-name="_583" unicode="" horiz-adv-x="1792" +d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34 +h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100 +q-68 175 -180 287z" /> + <glyph glyph-name="_584" unicode="" +d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6 +q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13 +q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249 +q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183 +q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46 +t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" /> + <glyph glyph-name="_585" unicode="" horiz-adv-x="1792" +d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z +M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30 +q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57 +t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133 +q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" /> + <glyph glyph-name="_586" unicode="" horiz-adv-x="1792" +d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9 +h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224 +v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" /> + <glyph glyph-name="_587" unicode="" horiz-adv-x="1792" +d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23 +t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47 +t47 -113v-96h128q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_588" unicode="" horiz-adv-x="1792" +d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z +M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 +q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_589" unicode="" horiz-adv-x="1792" +d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23 +t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47 +t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> + <glyph glyph-name="_590" unicode="" horiz-adv-x="1792" +d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" /> + <glyph glyph-name="_591" unicode="" horiz-adv-x="1024" +d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249 +q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" /> + <glyph glyph-name="_592" unicode="" horiz-adv-x="1792" +d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768 +q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" /> + <glyph glyph-name="_593" unicode="" horiz-adv-x="2048" +d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173 +v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" /> + <glyph glyph-name="_594" unicode="" horiz-adv-x="1792" +d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472 +q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" /> + <glyph glyph-name="_595" unicode="" horiz-adv-x="1792" +d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5 +t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37 +t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" /> + <glyph glyph-name="_596" unicode="" horiz-adv-x="1792" +d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5 +t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5 +t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51 +t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" /> + <glyph glyph-name="_597" unicode="" horiz-adv-x="1024" +d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" /> + <glyph glyph-name="_598" unicode="" horiz-adv-x="1792" +d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246 +q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" /> + <glyph glyph-name="f27e" unicode="" +d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" /> + <glyph glyph-name="uniF280" unicode="" +d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72 +h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275 +l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" /> + <glyph glyph-name="uniF281" unicode="" horiz-adv-x="1792" +d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5 +l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44 +t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106 +q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" /> + <glyph glyph-name="_602" unicode="" horiz-adv-x="1792" +d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53 +q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" /> + <glyph glyph-name="_603" unicode="" horiz-adv-x="2304" +d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" /> + <glyph glyph-name="_604" unicode="" horiz-adv-x="1792" +d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308 +t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20 +t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" /> + <glyph glyph-name="uniF285" unicode="" horiz-adv-x="1792" +d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" /> + <glyph glyph-name="uniF286" unicode="" horiz-adv-x="1792" +d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96 +q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5 +q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96 +q16 0 16 -16z" /> + <glyph glyph-name="_607" unicode="" horiz-adv-x="2304" +d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96 +q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5 +t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" /> + <glyph glyph-name="_608" unicode="" horiz-adv-x="1792" +d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348 +t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="_609" unicode="" horiz-adv-x="2304" +d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22 +q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5 +q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13 +q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" /> + <glyph glyph-name="_610" unicode="" +d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83 +t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20 +q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5 +t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" /> + <glyph glyph-name="_611" unicode="" +d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103 +t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_612" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 +t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" /> + <glyph glyph-name="_613" unicode="" +d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 +t103 -385.5z" /> + <glyph glyph-name="_614" unicode="" +d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 +t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" /> + <glyph glyph-name="_615" unicode="" horiz-adv-x="1792" +d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5 +t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" /> + <glyph glyph-name="_616" unicode="" horiz-adv-x="2048" +d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5 +t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416 +q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441 +h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" /> + <glyph glyph-name="_617" unicode="" horiz-adv-x="1792" +d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12 +q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311 +q15 0 25 -12q9 -12 6 -28z" /> + <glyph glyph-name="_618" unicode="" +d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5 +t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" /> + <glyph glyph-name="_619" unicode="" horiz-adv-x="1024" +d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" /> + <glyph glyph-name="_620" unicode="" +d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5 +t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 +t271.5 -112.5t112.5 -271.5z" /> + <glyph glyph-name="_621" unicode="" horiz-adv-x="1792" +d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" /> + <glyph glyph-name="_622" unicode="" horiz-adv-x="1792" +d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111 +q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" /> + <glyph glyph-name="_623" unicode="" +d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14 +t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" /> + <glyph glyph-name="_624" unicode="" horiz-adv-x="1792" +d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57 +q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285 +q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" /> + <glyph glyph-name="_625" unicode="" horiz-adv-x="1792" +d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42 +q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z +M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298 +t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="_626" unicode="" +d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300 +l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z +M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" /> + <glyph glyph-name="_627" unicode="" +d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5 +t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5 +t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5 +t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="_628" unicode="" horiz-adv-x="1408" +d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457 +q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521 +q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661 +q3 -1 7 1t7 4l3 2q11 9 11 17z" /> + <glyph glyph-name="_629" unicode="" horiz-adv-x="2304" +d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10 +t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5 +t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5 +h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96 +t9.5 -70.5z" /> + <glyph glyph-name="uniF2A0" unicode="" horiz-adv-x="1408" +d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5 +q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127 +l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272 +t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249 +q-18 -19 -45 -19z" /> + <glyph glyph-name="uniF2A1" unicode="" horiz-adv-x="2176" +d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352 +q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864 +q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136 +t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56 +t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56 +t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136 +t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" /> + <glyph glyph-name="uniF2A2" unicode="" horiz-adv-x="1792" +d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z +M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72 +t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45 +t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4 +q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" /> + <glyph glyph-name="uniF2A3" unicode="" horiz-adv-x="2304" +d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55 +q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5 +q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101 +q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35 +q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5 +q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" /> + <glyph glyph-name="uniF2A4" unicode="" horiz-adv-x="1792" +d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19 +t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74 +t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233 +l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" /> + <glyph glyph-name="uniF2A5" unicode="" +d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2 +q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10 +q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5 +t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="uniF2A6" unicode="" horiz-adv-x="1535" +d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5 +l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5 +q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9 +q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" /> + <glyph glyph-name="uniF2A7" unicode="" horiz-adv-x="1664" +d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37 +t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38 +l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148 +q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26 +l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" /> + <glyph glyph-name="uniF2A8" unicode="" horiz-adv-x="1792" +d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5 +q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841 +q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5 +q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" /> + <glyph glyph-name="uniF2A9" unicode="" horiz-adv-x="1280" +d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5 +q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z +M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" /> + <glyph glyph-name="uniF2AA" unicode="" +d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z +M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5 +q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 +t84.5 -203.5z" /> + <glyph glyph-name="uniF2AB" unicode="" +d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114 +q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5 +t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 +t103 -385.5z" /> + <glyph glyph-name="uniF2AC" unicode="" horiz-adv-x="1664" +d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35 +q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5 +t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" /> + <glyph glyph-name="uniF2AD" unicode="" +d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115 +q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15 +t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 +q119 0 203.5 -84.5t84.5 -203.5z" /> + <glyph glyph-name="uniF2AE" unicode="" horiz-adv-x="2304" +d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7 +q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158 +q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" /> + <glyph glyph-name="uniF2B0" unicode="" +d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104 +q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108 +l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z +M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" /> + <glyph glyph-name="uniF2B1" unicode="" horiz-adv-x="1664" +d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5 +t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" /> + <glyph glyph-name="uniF2B2" unicode="" horiz-adv-x="1792" +d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5 +t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114 +q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50 +q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5 +t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46 +q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5 +q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177 +t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" /> + <glyph glyph-name="uniF2B3" unicode="" +d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110 +h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> + <glyph glyph-name="uniF2B4" unicode="" +d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5 +q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" /> + <glyph glyph-name="uniF2B5" unicode="" horiz-adv-x="2304" +d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66 +l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180 +q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z +M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421 +q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" /> + <glyph glyph-name="uniF2B6" unicode="" horiz-adv-x="1792" +d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107 +t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39 +q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" /> + <glyph glyph-name="uniF2B7" unicode="" horiz-adv-x="1792" +d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5 +l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5 +h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94 +q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" /> + <glyph glyph-name="uniF2B8" unicode="" +d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465 +l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161 +q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74 +q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" /> + <glyph glyph-name="uniF2B9" unicode="" horiz-adv-x="1664" +d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576 +q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216 +q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" /> + <glyph glyph-name="uniF2BA" unicode="" horiz-adv-x="1664" +d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5 +t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96 +q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216 +q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" /> + <glyph glyph-name="uniF2BB" unicode="" horiz-adv-x="2048" +d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z +M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568 +q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9 +h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2BC" unicode="" horiz-adv-x="2048" +d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925 +q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568 +q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5 +t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113 +t113 47h1728q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2BD" unicode="" horiz-adv-x="1792" +d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5 +t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF2BE" unicode="" horiz-adv-x="1792" +d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61 +t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z" /> + <glyph glyph-name="uniF2C0" unicode="" +d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5 +t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145 +q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" /> + <glyph glyph-name="uniF2C1" unicode="" horiz-adv-x="1280" +d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5 +t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352 +q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2C2" unicode="" horiz-adv-x="2048" +d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56 +t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23 +v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728 +q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2C3" unicode="" horiz-adv-x="2048" +d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z +M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64 +q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47 +h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2C4" unicode="" horiz-adv-x="1792" +d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117 +q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5 +t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" /> + <glyph glyph-name="uniF2C5" unicode="" horiz-adv-x="2304" +d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21 +t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46 +t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54 +t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29 +q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5 +t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314 +q2 -42 2 -64z" /> + <glyph glyph-name="uniF2C6" unicode="" horiz-adv-x="1792" +d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 +t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF2C7" unicode="" horiz-adv-x="1024" +d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5 +t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192 +v128h192z" /> + <glyph glyph-name="uniF2C8" unicode="" horiz-adv-x="1024" +d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5 +t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192 +v128h192z" /> + <glyph glyph-name="uniF2C9" unicode="" horiz-adv-x="1024" +d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5 +t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192 +v128h192z" /> + <glyph glyph-name="uniF2CA" unicode="" horiz-adv-x="1024" +d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5 +t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192 +v128h192z" /> + <glyph glyph-name="uniF2CB" unicode="" horiz-adv-x="1024" +d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z +M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" /> + <glyph glyph-name="uniF2CC" unicode="" horiz-adv-x="1920" +d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41 +t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19 +t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768 +q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19 +t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384 +q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" /> + <glyph glyph-name="uniF2CD" unicode="" horiz-adv-x="1792" +d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9 +t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9 +t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42 +q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9 +t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23 +t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" /> + <glyph glyph-name="uniF2CE" unicode="" +d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5 +t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70 +q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20 +q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5 +t72.5 -263.5z" /> + <glyph glyph-name="uniF2D0" unicode="" horiz-adv-x="1792" +d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2D1" unicode="" horiz-adv-x="1792" +d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2D2" unicode="" horiz-adv-x="2048" +d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47 +t47 -113z" /> + <glyph glyph-name="uniF2D3" unicode="" horiz-adv-x="1792" +d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10 +l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2D4" unicode="" horiz-adv-x="1792" +d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 +l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2D5" unicode="" horiz-adv-x="1792" +d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF2D6" unicode="" horiz-adv-x="1794" +d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12 +t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5 +t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5 +q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5 +q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34 +q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5 +t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF2D7" unicode="" +d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89 +q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5 +t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" /> + <glyph glyph-name="uniF2D8" unicode="" +d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7 +t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5 +h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113 +v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" /> + <glyph glyph-name="uniF2D9" unicode="" horiz-adv-x="2176" +d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584 +q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5 +q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15 +q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82 +q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104 +t302 11t306.5 -97q220 -115 333 -336t87 -474z" /> + <glyph glyph-name="uniF2DA" unicode="" horiz-adv-x="1792" +d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178 +q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199 +t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297 +t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208 +t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" /> + <glyph glyph-name="uniF2DB" unicode="" +d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16 +q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28 +t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32 +q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16 +h48q16 0 16 -16z" /> + <glyph glyph-name="uniF2DC" unicode="" horiz-adv-x="1664" +d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45 +t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33 +q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313 +l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106 +q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" /> + <glyph glyph-name="uniF2DD" unicode="" horiz-adv-x="1792" +d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321 +q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" /> + <glyph glyph-name="uniF2DE" unicode="" horiz-adv-x="1792" +d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62 +t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71 +t286 -191t191 -286t71 -348z" /> + <glyph glyph-name="uniF2E0" unicode="" horiz-adv-x="1920" +d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3 +t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53 +q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5 +q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5 +t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5 +q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z +M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21 +q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16 +q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" /> + <glyph glyph-name="uniF2E1" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E2" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E3" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E4" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E5" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E6" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E7" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="_698" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2E9" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2EA" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2EB" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2EC" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2ED" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="uniF2EE" unicode="" horiz-adv-x="1792" + /> + <glyph glyph-name="lessequal" unicode="" horiz-adv-x="1792" + /> + </font> +</defs></svg> diff --git a/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.ttf b/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.ttf Binary files differnew file mode 100644 index 0000000..35acda2 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.ttf diff --git a/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.woff b/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.woff Binary files differnew file mode 100644 index 0000000..400014a --- /dev/null +++ b/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.woff diff --git a/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.woff2 b/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.woff2 Binary files differnew file mode 100644 index 0000000..4d13fc6 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/fonts/fontawesome-webfont.woff2 diff --git a/public/admin/view/javascript/font-awesome/less/animated.less b/public/admin/view/javascript/font-awesome/less/animated.less new file mode 100644 index 0000000..66ad52a --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/animated.less @@ -0,0 +1,34 @@ +// Animated Icons +// -------------------------- + +.@{fa-css-prefix}-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} + +.@{fa-css-prefix}-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/public/admin/view/javascript/font-awesome/less/bordered-pulled.less b/public/admin/view/javascript/font-awesome/less/bordered-pulled.less new file mode 100644 index 0000000..f1c8ad7 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/bordered-pulled.less @@ -0,0 +1,25 @@ +// Bordered & Pulled +// ------------------------- + +.@{fa-css-prefix}-border { + padding: .2em .25em .15em; + border: solid .08em @fa-border-color; + border-radius: .1em; +} + +.@{fa-css-prefix}-pull-left { float: left; } +.@{fa-css-prefix}-pull-right { float: right; } + +.@{fa-css-prefix} { + &.@{fa-css-prefix}-pull-left { margin-right: .3em; } + &.@{fa-css-prefix}-pull-right { margin-left: .3em; } +} + +/* Deprecated as of 4.4.0 */ +.pull-right { float: right; } +.pull-left { float: left; } + +.@{fa-css-prefix} { + &.pull-left { margin-right: .3em; } + &.pull-right { margin-left: .3em; } +} diff --git a/public/admin/view/javascript/font-awesome/less/core.less b/public/admin/view/javascript/font-awesome/less/core.less new file mode 100644 index 0000000..c577ac8 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/core.less @@ -0,0 +1,12 @@ +// Base Class Definition +// ------------------------- + +.@{fa-css-prefix} { + display: inline-block; + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} diff --git a/public/admin/view/javascript/font-awesome/less/fixed-width.less b/public/admin/view/javascript/font-awesome/less/fixed-width.less new file mode 100644 index 0000000..110289f --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/fixed-width.less @@ -0,0 +1,6 @@ +// Fixed Width Icons +// ------------------------- +.@{fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/public/admin/view/javascript/font-awesome/less/font-awesome.less b/public/admin/view/javascript/font-awesome/less/font-awesome.less new file mode 100644 index 0000000..c3677de --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/font-awesome.less @@ -0,0 +1,18 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + +@import "variables.less"; +@import "mixins.less"; +@import "path.less"; +@import "core.less"; +@import "larger.less"; +@import "fixed-width.less"; +@import "list.less"; +@import "bordered-pulled.less"; +@import "animated.less"; +@import "rotated-flipped.less"; +@import "stacked.less"; +@import "icons.less"; +@import "screen-reader.less"; diff --git a/public/admin/view/javascript/font-awesome/less/icons.less b/public/admin/view/javascript/font-awesome/less/icons.less new file mode 100644 index 0000000..159d600 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/icons.less @@ -0,0 +1,789 @@ +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ + +.@{fa-css-prefix}-glass:before { content: @fa-var-glass; } +.@{fa-css-prefix}-music:before { content: @fa-var-music; } +.@{fa-css-prefix}-search:before { content: @fa-var-search; } +.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; } +.@{fa-css-prefix}-heart:before { content: @fa-var-heart; } +.@{fa-css-prefix}-star:before { content: @fa-var-star; } +.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; } +.@{fa-css-prefix}-user:before { content: @fa-var-user; } +.@{fa-css-prefix}-film:before { content: @fa-var-film; } +.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; } +.@{fa-css-prefix}-th:before { content: @fa-var-th; } +.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; } +.@{fa-css-prefix}-check:before { content: @fa-var-check; } +.@{fa-css-prefix}-remove:before, +.@{fa-css-prefix}-close:before, +.@{fa-css-prefix}-times:before { content: @fa-var-times; } +.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; } +.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; } +.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; } +.@{fa-css-prefix}-signal:before { content: @fa-var-signal; } +.@{fa-css-prefix}-gear:before, +.@{fa-css-prefix}-cog:before { content: @fa-var-cog; } +.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; } +.@{fa-css-prefix}-home:before { content: @fa-var-home; } +.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; } +.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; } +.@{fa-css-prefix}-road:before { content: @fa-var-road; } +.@{fa-css-prefix}-download:before { content: @fa-var-download; } +.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; } +.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; } +.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; } +.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; } +.@{fa-css-prefix}-rotate-right:before, +.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; } +.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; } +.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; } +.@{fa-css-prefix}-lock:before { content: @fa-var-lock; } +.@{fa-css-prefix}-flag:before { content: @fa-var-flag; } +.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; } +.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; } +.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; } +.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; } +.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; } +.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; } +.@{fa-css-prefix}-tag:before { content: @fa-var-tag; } +.@{fa-css-prefix}-tags:before { content: @fa-var-tags; } +.@{fa-css-prefix}-book:before { content: @fa-var-book; } +.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; } +.@{fa-css-prefix}-print:before { content: @fa-var-print; } +.@{fa-css-prefix}-camera:before { content: @fa-var-camera; } +.@{fa-css-prefix}-font:before { content: @fa-var-font; } +.@{fa-css-prefix}-bold:before { content: @fa-var-bold; } +.@{fa-css-prefix}-italic:before { content: @fa-var-italic; } +.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; } +.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; } +.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; } +.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; } +.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; } +.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; } +.@{fa-css-prefix}-list:before { content: @fa-var-list; } +.@{fa-css-prefix}-dedent:before, +.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; } +.@{fa-css-prefix}-indent:before { content: @fa-var-indent; } +.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; } +.@{fa-css-prefix}-photo:before, +.@{fa-css-prefix}-image:before, +.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; } +.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; } +.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; } +.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; } +.@{fa-css-prefix}-tint:before { content: @fa-var-tint; } +.@{fa-css-prefix}-edit:before, +.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; } +.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; } +.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; } +.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; } +.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; } +.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; } +.@{fa-css-prefix}-backward:before { content: @fa-var-backward; } +.@{fa-css-prefix}-play:before { content: @fa-var-play; } +.@{fa-css-prefix}-pause:before { content: @fa-var-pause; } +.@{fa-css-prefix}-stop:before { content: @fa-var-stop; } +.@{fa-css-prefix}-forward:before { content: @fa-var-forward; } +.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; } +.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; } +.@{fa-css-prefix}-eject:before { content: @fa-var-eject; } +.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; } +.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; } +.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; } +.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; } +.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; } +.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; } +.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; } +.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; } +.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; } +.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; } +.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; } +.@{fa-css-prefix}-ban:before { content: @fa-var-ban; } +.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; } +.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; } +.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; } +.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; } +.@{fa-css-prefix}-mail-forward:before, +.@{fa-css-prefix}-share:before { content: @fa-var-share; } +.@{fa-css-prefix}-expand:before { content: @fa-var-expand; } +.@{fa-css-prefix}-compress:before { content: @fa-var-compress; } +.@{fa-css-prefix}-plus:before { content: @fa-var-plus; } +.@{fa-css-prefix}-minus:before { content: @fa-var-minus; } +.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; } +.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; } +.@{fa-css-prefix}-gift:before { content: @fa-var-gift; } +.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; } +.@{fa-css-prefix}-fire:before { content: @fa-var-fire; } +.@{fa-css-prefix}-eye:before { content: @fa-var-eye; } +.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; } +.@{fa-css-prefix}-warning:before, +.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; } +.@{fa-css-prefix}-plane:before { content: @fa-var-plane; } +.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; } +.@{fa-css-prefix}-random:before { content: @fa-var-random; } +.@{fa-css-prefix}-comment:before { content: @fa-var-comment; } +.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; } +.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; } +.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; } +.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; } +.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; } +.@{fa-css-prefix}-folder:before { content: @fa-var-folder; } +.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; } +.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; } +.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; } +.@{fa-css-prefix}-bar-chart-o:before, +.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; } +.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; } +.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; } +.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; } +.@{fa-css-prefix}-key:before { content: @fa-var-key; } +.@{fa-css-prefix}-gears:before, +.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; } +.@{fa-css-prefix}-comments:before { content: @fa-var-comments; } +.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; } +.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; } +.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; } +.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; } +.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; } +.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; } +.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; } +.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; } +.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; } +.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; } +.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; } +.@{fa-css-prefix}-upload:before { content: @fa-var-upload; } +.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; } +.@{fa-css-prefix}-phone:before { content: @fa-var-phone; } +.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; } +.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; } +.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; } +.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; } +.@{fa-css-prefix}-facebook-f:before, +.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; } +.@{fa-css-prefix}-github:before { content: @fa-var-github; } +.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; } +.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; } +.@{fa-css-prefix}-feed:before, +.@{fa-css-prefix}-rss:before { content: @fa-var-rss; } +.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; } +.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; } +.@{fa-css-prefix}-bell:before { content: @fa-var-bell; } +.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; } +.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; } +.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; } +.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; } +.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; } +.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; } +.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; } +.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; } +.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; } +.@{fa-css-prefix}-globe:before { content: @fa-var-globe; } +.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; } +.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; } +.@{fa-css-prefix}-filter:before { content: @fa-var-filter; } +.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; } +.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; } +.@{fa-css-prefix}-group:before, +.@{fa-css-prefix}-users:before { content: @fa-var-users; } +.@{fa-css-prefix}-chain:before, +.@{fa-css-prefix}-link:before { content: @fa-var-link; } +.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; } +.@{fa-css-prefix}-flask:before { content: @fa-var-flask; } +.@{fa-css-prefix}-cut:before, +.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; } +.@{fa-css-prefix}-copy:before, +.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; } +.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; } +.@{fa-css-prefix}-save:before, +.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; } +.@{fa-css-prefix}-square:before { content: @fa-var-square; } +.@{fa-css-prefix}-navicon:before, +.@{fa-css-prefix}-reorder:before, +.@{fa-css-prefix}-bars:before { content: @fa-var-bars; } +.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; } +.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; } +.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; } +.@{fa-css-prefix}-underline:before { content: @fa-var-underline; } +.@{fa-css-prefix}-table:before { content: @fa-var-table; } +.@{fa-css-prefix}-magic:before { content: @fa-var-magic; } +.@{fa-css-prefix}-truck:before { content: @fa-var-truck; } +.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; } +.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; } +.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; } +.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; } +.@{fa-css-prefix}-money:before { content: @fa-var-money; } +.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; } +.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; } +.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; } +.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; } +.@{fa-css-prefix}-columns:before { content: @fa-var-columns; } +.@{fa-css-prefix}-unsorted:before, +.@{fa-css-prefix}-sort:before { content: @fa-var-sort; } +.@{fa-css-prefix}-sort-down:before, +.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; } +.@{fa-css-prefix}-sort-up:before, +.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; } +.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; } +.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; } +.@{fa-css-prefix}-rotate-left:before, +.@{fa-css-prefix}-undo:before { content: @fa-var-undo; } +.@{fa-css-prefix}-legal:before, +.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; } +.@{fa-css-prefix}-dashboard:before, +.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; } +.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; } +.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; } +.@{fa-css-prefix}-flash:before, +.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; } +.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; } +.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; } +.@{fa-css-prefix}-paste:before, +.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; } +.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; } +.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; } +.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; } +.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; } +.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; } +.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; } +.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; } +.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; } +.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; } +.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; } +.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; } +.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; } +.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; } +.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; } +.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; } +.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; } +.@{fa-css-prefix}-beer:before { content: @fa-var-beer; } +.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; } +.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; } +.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; } +.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; } +.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; } +.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; } +.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; } +.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; } +.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; } +.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; } +.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; } +.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; } +.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; } +.@{fa-css-prefix}-mobile-phone:before, +.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; } +.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; } +.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; } +.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; } +.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; } +.@{fa-css-prefix}-circle:before { content: @fa-var-circle; } +.@{fa-css-prefix}-mail-reply:before, +.@{fa-css-prefix}-reply:before { content: @fa-var-reply; } +.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; } +.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; } +.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; } +.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; } +.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; } +.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; } +.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; } +.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; } +.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; } +.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; } +.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; } +.@{fa-css-prefix}-code:before { content: @fa-var-code; } +.@{fa-css-prefix}-mail-reply-all:before, +.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; } +.@{fa-css-prefix}-star-half-empty:before, +.@{fa-css-prefix}-star-half-full:before, +.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; } +.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; } +.@{fa-css-prefix}-crop:before { content: @fa-var-crop; } +.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; } +.@{fa-css-prefix}-unlink:before, +.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; } +.@{fa-css-prefix}-question:before { content: @fa-var-question; } +.@{fa-css-prefix}-info:before { content: @fa-var-info; } +.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; } +.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; } +.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; } +.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; } +.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; } +.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; } +.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; } +.@{fa-css-prefix}-shield:before { content: @fa-var-shield; } +.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; } +.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; } +.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; } +.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; } +.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; } +.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; } +.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; } +.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; } +.@{fa-css-prefix}-html5:before { content: @fa-var-html5; } +.@{fa-css-prefix}-css3:before { content: @fa-var-css3; } +.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; } +.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; } +.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; } +.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; } +.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; } +.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; } +.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; } +.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; } +.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; } +.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; } +.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; } +.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; } +.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; } +.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; } +.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; } +.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; } +.@{fa-css-prefix}-compass:before { content: @fa-var-compass; } +.@{fa-css-prefix}-toggle-down:before, +.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; } +.@{fa-css-prefix}-toggle-up:before, +.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; } +.@{fa-css-prefix}-toggle-right:before, +.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; } +.@{fa-css-prefix}-euro:before, +.@{fa-css-prefix}-eur:before { content: @fa-var-eur; } +.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; } +.@{fa-css-prefix}-dollar:before, +.@{fa-css-prefix}-usd:before { content: @fa-var-usd; } +.@{fa-css-prefix}-rupee:before, +.@{fa-css-prefix}-inr:before { content: @fa-var-inr; } +.@{fa-css-prefix}-cny:before, +.@{fa-css-prefix}-rmb:before, +.@{fa-css-prefix}-yen:before, +.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; } +.@{fa-css-prefix}-ruble:before, +.@{fa-css-prefix}-rouble:before, +.@{fa-css-prefix}-rub:before { content: @fa-var-rub; } +.@{fa-css-prefix}-won:before, +.@{fa-css-prefix}-krw:before { content: @fa-var-krw; } +.@{fa-css-prefix}-bitcoin:before, +.@{fa-css-prefix}-btc:before { content: @fa-var-btc; } +.@{fa-css-prefix}-file:before { content: @fa-var-file; } +.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; } +.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; } +.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; } +.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; } +.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; } +.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; } +.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; } +.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; } +.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; } +.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; } +.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; } +.@{fa-css-prefix}-xing:before { content: @fa-var-xing; } +.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; } +.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; } +.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; } +.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; } +.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; } +.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; } +.@{fa-css-prefix}-adn:before { content: @fa-var-adn; } +.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; } +.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; } +.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; } +.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; } +.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; } +.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; } +.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; } +.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; } +.@{fa-css-prefix}-apple:before { content: @fa-var-apple; } +.@{fa-css-prefix}-windows:before { content: @fa-var-windows; } +.@{fa-css-prefix}-android:before { content: @fa-var-android; } +.@{fa-css-prefix}-linux:before { content: @fa-var-linux; } +.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; } +.@{fa-css-prefix}-skype:before { content: @fa-var-skype; } +.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; } +.@{fa-css-prefix}-trello:before { content: @fa-var-trello; } +.@{fa-css-prefix}-female:before { content: @fa-var-female; } +.@{fa-css-prefix}-male:before { content: @fa-var-male; } +.@{fa-css-prefix}-gittip:before, +.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; } +.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; } +.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; } +.@{fa-css-prefix}-archive:before { content: @fa-var-archive; } +.@{fa-css-prefix}-bug:before { content: @fa-var-bug; } +.@{fa-css-prefix}-vk:before { content: @fa-var-vk; } +.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; } +.@{fa-css-prefix}-renren:before { content: @fa-var-renren; } +.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; } +.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; } +.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; } +.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; } +.@{fa-css-prefix}-toggle-left:before, +.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; } +.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; } +.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; } +.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; } +.@{fa-css-prefix}-turkish-lira:before, +.@{fa-css-prefix}-try:before { content: @fa-var-try; } +.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; } +.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; } +.@{fa-css-prefix}-slack:before { content: @fa-var-slack; } +.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; } +.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; } +.@{fa-css-prefix}-openid:before { content: @fa-var-openid; } +.@{fa-css-prefix}-institution:before, +.@{fa-css-prefix}-bank:before, +.@{fa-css-prefix}-university:before { content: @fa-var-university; } +.@{fa-css-prefix}-mortar-board:before, +.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; } +.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; } +.@{fa-css-prefix}-google:before { content: @fa-var-google; } +.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; } +.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; } +.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; } +.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; } +.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; } +.@{fa-css-prefix}-digg:before { content: @fa-var-digg; } +.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; } +.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; } +.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; } +.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; } +.@{fa-css-prefix}-language:before { content: @fa-var-language; } +.@{fa-css-prefix}-fax:before { content: @fa-var-fax; } +.@{fa-css-prefix}-building:before { content: @fa-var-building; } +.@{fa-css-prefix}-child:before { content: @fa-var-child; } +.@{fa-css-prefix}-paw:before { content: @fa-var-paw; } +.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; } +.@{fa-css-prefix}-cube:before { content: @fa-var-cube; } +.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; } +.@{fa-css-prefix}-behance:before { content: @fa-var-behance; } +.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; } +.@{fa-css-prefix}-steam:before { content: @fa-var-steam; } +.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; } +.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; } +.@{fa-css-prefix}-automobile:before, +.@{fa-css-prefix}-car:before { content: @fa-var-car; } +.@{fa-css-prefix}-cab:before, +.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; } +.@{fa-css-prefix}-tree:before { content: @fa-var-tree; } +.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; } +.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; } +.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; } +.@{fa-css-prefix}-database:before { content: @fa-var-database; } +.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; } +.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; } +.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; } +.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; } +.@{fa-css-prefix}-file-photo-o:before, +.@{fa-css-prefix}-file-picture-o:before, +.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; } +.@{fa-css-prefix}-file-zip-o:before, +.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; } +.@{fa-css-prefix}-file-sound-o:before, +.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; } +.@{fa-css-prefix}-file-movie-o:before, +.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; } +.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; } +.@{fa-css-prefix}-vine:before { content: @fa-var-vine; } +.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; } +.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; } +.@{fa-css-prefix}-life-bouy:before, +.@{fa-css-prefix}-life-buoy:before, +.@{fa-css-prefix}-life-saver:before, +.@{fa-css-prefix}-support:before, +.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; } +.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; } +.@{fa-css-prefix}-ra:before, +.@{fa-css-prefix}-resistance:before, +.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; } +.@{fa-css-prefix}-ge:before, +.@{fa-css-prefix}-empire:before { content: @fa-var-empire; } +.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; } +.@{fa-css-prefix}-git:before { content: @fa-var-git; } +.@{fa-css-prefix}-y-combinator-square:before, +.@{fa-css-prefix}-yc-square:before, +.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; } +.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; } +.@{fa-css-prefix}-qq:before { content: @fa-var-qq; } +.@{fa-css-prefix}-wechat:before, +.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; } +.@{fa-css-prefix}-send:before, +.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; } +.@{fa-css-prefix}-send-o:before, +.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; } +.@{fa-css-prefix}-history:before { content: @fa-var-history; } +.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; } +.@{fa-css-prefix}-header:before { content: @fa-var-header; } +.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; } +.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; } +.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; } +.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; } +.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; } +.@{fa-css-prefix}-soccer-ball-o:before, +.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; } +.@{fa-css-prefix}-tty:before { content: @fa-var-tty; } +.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; } +.@{fa-css-prefix}-plug:before { content: @fa-var-plug; } +.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; } +.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; } +.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; } +.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; } +.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; } +.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; } +.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; } +.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; } +.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; } +.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; } +.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; } +.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; } +.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; } +.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; } +.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; } +.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; } +.@{fa-css-prefix}-trash:before { content: @fa-var-trash; } +.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; } +.@{fa-css-prefix}-at:before { content: @fa-var-at; } +.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; } +.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; } +.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; } +.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; } +.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; } +.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; } +.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; } +.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; } +.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; } +.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; } +.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; } +.@{fa-css-prefix}-bus:before { content: @fa-var-bus; } +.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; } +.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; } +.@{fa-css-prefix}-cc:before { content: @fa-var-cc; } +.@{fa-css-prefix}-shekel:before, +.@{fa-css-prefix}-sheqel:before, +.@{fa-css-prefix}-ils:before { content: @fa-var-ils; } +.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; } +.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; } +.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; } +.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; } +.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; } +.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; } +.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; } +.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; } +.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; } +.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; } +.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; } +.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; } +.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; } +.@{fa-css-prefix}-ship:before { content: @fa-var-ship; } +.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; } +.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; } +.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; } +.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; } +.@{fa-css-prefix}-venus:before { content: @fa-var-venus; } +.@{fa-css-prefix}-mars:before { content: @fa-var-mars; } +.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; } +.@{fa-css-prefix}-intersex:before, +.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; } +.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; } +.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; } +.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; } +.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; } +.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; } +.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; } +.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; } +.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; } +.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; } +.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; } +.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; } +.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; } +.@{fa-css-prefix}-server:before { content: @fa-var-server; } +.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; } +.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; } +.@{fa-css-prefix}-hotel:before, +.@{fa-css-prefix}-bed:before { content: @fa-var-bed; } +.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; } +.@{fa-css-prefix}-train:before { content: @fa-var-train; } +.@{fa-css-prefix}-subway:before { content: @fa-var-subway; } +.@{fa-css-prefix}-medium:before { content: @fa-var-medium; } +.@{fa-css-prefix}-yc:before, +.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; } +.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; } +.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; } +.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; } +.@{fa-css-prefix}-battery-4:before, +.@{fa-css-prefix}-battery:before, +.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; } +.@{fa-css-prefix}-battery-3:before, +.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; } +.@{fa-css-prefix}-battery-2:before, +.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; } +.@{fa-css-prefix}-battery-1:before, +.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; } +.@{fa-css-prefix}-battery-0:before, +.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; } +.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; } +.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; } +.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; } +.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; } +.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; } +.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; } +.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; } +.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; } +.@{fa-css-prefix}-clone:before { content: @fa-var-clone; } +.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; } +.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; } +.@{fa-css-prefix}-hourglass-1:before, +.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; } +.@{fa-css-prefix}-hourglass-2:before, +.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; } +.@{fa-css-prefix}-hourglass-3:before, +.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; } +.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; } +.@{fa-css-prefix}-hand-grab-o:before, +.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; } +.@{fa-css-prefix}-hand-stop-o:before, +.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; } +.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; } +.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; } +.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; } +.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; } +.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; } +.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; } +.@{fa-css-prefix}-registered:before { content: @fa-var-registered; } +.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; } +.@{fa-css-prefix}-gg:before { content: @fa-var-gg; } +.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; } +.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; } +.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; } +.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; } +.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; } +.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; } +.@{fa-css-prefix}-safari:before { content: @fa-var-safari; } +.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; } +.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; } +.@{fa-css-prefix}-opera:before { content: @fa-var-opera; } +.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; } +.@{fa-css-prefix}-tv:before, +.@{fa-css-prefix}-television:before { content: @fa-var-television; } +.@{fa-css-prefix}-contao:before { content: @fa-var-contao; } +.@{fa-css-prefix}-500px:before { content: @fa-var-500px; } +.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; } +.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; } +.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; } +.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; } +.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; } +.@{fa-css-prefix}-industry:before { content: @fa-var-industry; } +.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; } +.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; } +.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; } +.@{fa-css-prefix}-map:before { content: @fa-var-map; } +.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; } +.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; } +.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; } +.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; } +.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; } +.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; } +.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; } +.@{fa-css-prefix}-edge:before { content: @fa-var-edge; } +.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; } +.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; } +.@{fa-css-prefix}-modx:before { content: @fa-var-modx; } +.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; } +.@{fa-css-prefix}-usb:before { content: @fa-var-usb; } +.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; } +.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; } +.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; } +.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; } +.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; } +.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; } +.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; } +.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; } +.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; } +.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; } +.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; } +.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; } +.@{fa-css-prefix}-percent:before { content: @fa-var-percent; } +.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; } +.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; } +.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; } +.@{fa-css-prefix}-envira:before { content: @fa-var-envira; } +.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; } +.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; } +.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; } +.@{fa-css-prefix}-blind:before { content: @fa-var-blind; } +.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; } +.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; } +.@{fa-css-prefix}-braille:before { content: @fa-var-braille; } +.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; } +.@{fa-css-prefix}-asl-interpreting:before, +.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; } +.@{fa-css-prefix}-deafness:before, +.@{fa-css-prefix}-hard-of-hearing:before, +.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; } +.@{fa-css-prefix}-glide:before { content: @fa-var-glide; } +.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; } +.@{fa-css-prefix}-signing:before, +.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; } +.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; } +.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; } +.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; } +.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; } +.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; } +.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; } +.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; } +.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; } +.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; } +.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; } +.@{fa-css-prefix}-google-plus-circle:before, +.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; } +.@{fa-css-prefix}-fa:before, +.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; } +.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; } +.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; } +.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; } +.@{fa-css-prefix}-linode:before { content: @fa-var-linode; } +.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; } +.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; } +.@{fa-css-prefix}-vcard:before, +.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; } +.@{fa-css-prefix}-vcard-o:before, +.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; } +.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; } +.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; } +.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; } +.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; } +.@{fa-css-prefix}-drivers-license:before, +.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; } +.@{fa-css-prefix}-drivers-license-o:before, +.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; } +.@{fa-css-prefix}-quora:before { content: @fa-var-quora; } +.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; } +.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; } +.@{fa-css-prefix}-thermometer-4:before, +.@{fa-css-prefix}-thermometer:before, +.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; } +.@{fa-css-prefix}-thermometer-3:before, +.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; } +.@{fa-css-prefix}-thermometer-2:before, +.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; } +.@{fa-css-prefix}-thermometer-1:before, +.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; } +.@{fa-css-prefix}-thermometer-0:before, +.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; } +.@{fa-css-prefix}-shower:before { content: @fa-var-shower; } +.@{fa-css-prefix}-bathtub:before, +.@{fa-css-prefix}-s15:before, +.@{fa-css-prefix}-bath:before { content: @fa-var-bath; } +.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; } +.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; } +.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; } +.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; } +.@{fa-css-prefix}-times-rectangle:before, +.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; } +.@{fa-css-prefix}-times-rectangle-o:before, +.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; } +.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; } +.@{fa-css-prefix}-grav:before { content: @fa-var-grav; } +.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; } +.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; } +.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; } +.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; } +.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; } +.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; } +.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; } +.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; } +.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; } diff --git a/public/admin/view/javascript/font-awesome/less/larger.less b/public/admin/view/javascript/font-awesome/less/larger.less new file mode 100644 index 0000000..c9d6467 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/larger.less @@ -0,0 +1,13 @@ +// Icon Sizes +// ------------------------- + +/* makes the font 33% larger relative to the icon container */ +.@{fa-css-prefix}-lg { + font-size: (4em / 3); + line-height: (3em / 4); + vertical-align: -15%; +} +.@{fa-css-prefix}-2x { font-size: 2em; } +.@{fa-css-prefix}-3x { font-size: 3em; } +.@{fa-css-prefix}-4x { font-size: 4em; } +.@{fa-css-prefix}-5x { font-size: 5em; } diff --git a/public/admin/view/javascript/font-awesome/less/list.less b/public/admin/view/javascript/font-awesome/less/list.less new file mode 100644 index 0000000..0b44038 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/list.less @@ -0,0 +1,19 @@ +// List Icons +// ------------------------- + +.@{fa-css-prefix}-ul { + padding-left: 0; + margin-left: @fa-li-width; + list-style-type: none; + > li { position: relative; } +} +.@{fa-css-prefix}-li { + position: absolute; + left: -@fa-li-width; + width: @fa-li-width; + top: (2em / 14); + text-align: center; + &.@{fa-css-prefix}-lg { + left: (-@fa-li-width + (4em / 14)); + } +} diff --git a/public/admin/view/javascript/font-awesome/less/mixins.less b/public/admin/view/javascript/font-awesome/less/mixins.less new file mode 100644 index 0000000..beef231 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/mixins.less @@ -0,0 +1,60 @@ +// Mixins +// -------------------------- + +.fa-icon() { + display: inline-block; + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} + +.fa-icon-rotate(@degrees, @rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; + -webkit-transform: rotate(@degrees); + -ms-transform: rotate(@degrees); + transform: rotate(@degrees); +} + +.fa-icon-flip(@horiz, @vert, @rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; + -webkit-transform: scale(@horiz, @vert); + -ms-transform: scale(@horiz, @vert); + transform: scale(@horiz, @vert); +} + + +// Only display content to screen readers. A la Bootstrap 4. +// +// See: http://a11yproject.com/posts/how-to-hide-content/ + +.sr-only() { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// Use in conjunction with .sr-only to only display content when it's focused. +// +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 +// +// Credit: HTML5 Boilerplate + +.sr-only-focusable() { + &:active, + &:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} diff --git a/public/admin/view/javascript/font-awesome/less/path.less b/public/admin/view/javascript/font-awesome/less/path.less new file mode 100644 index 0000000..835be41 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/path.less @@ -0,0 +1,15 @@ +/* FONT PATH + * -------------------------- */ + +@font-face { + font-family: 'FontAwesome'; + src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); + src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), + url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), + url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), + url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), + url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); + // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts + font-weight: normal; + font-style: normal; +} diff --git a/public/admin/view/javascript/font-awesome/less/rotated-flipped.less b/public/admin/view/javascript/font-awesome/less/rotated-flipped.less new file mode 100644 index 0000000..f6ba814 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/rotated-flipped.less @@ -0,0 +1,20 @@ +// Rotated & Flipped Icons +// ------------------------- + +.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } +.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } +.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } + +.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } +.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } + +// Hook for IE8-9 +// ------------------------- + +:root .@{fa-css-prefix}-rotate-90, +:root .@{fa-css-prefix}-rotate-180, +:root .@{fa-css-prefix}-rotate-270, +:root .@{fa-css-prefix}-flip-horizontal, +:root .@{fa-css-prefix}-flip-vertical { + filter: none; +} diff --git a/public/admin/view/javascript/font-awesome/less/screen-reader.less b/public/admin/view/javascript/font-awesome/less/screen-reader.less new file mode 100644 index 0000000..11c1881 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/screen-reader.less @@ -0,0 +1,5 @@ +// Screen Readers +// ------------------------- + +.sr-only { .sr-only(); } +.sr-only-focusable { .sr-only-focusable(); } diff --git a/public/admin/view/javascript/font-awesome/less/stacked.less b/public/admin/view/javascript/font-awesome/less/stacked.less new file mode 100644 index 0000000..fc53fb0 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/stacked.less @@ -0,0 +1,20 @@ +// Stacked Icons +// ------------------------- + +.@{fa-css-prefix}-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.@{fa-css-prefix}-stack-1x { line-height: inherit; } +.@{fa-css-prefix}-stack-2x { font-size: 2em; } +.@{fa-css-prefix}-inverse { color: @fa-inverse; } diff --git a/public/admin/view/javascript/font-awesome/less/variables.less b/public/admin/view/javascript/font-awesome/less/variables.less new file mode 100644 index 0000000..7ddbbc0 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/less/variables.less @@ -0,0 +1,800 @@ +// Variables +// -------------------------- + +@fa-font-path: "../fonts"; +@fa-font-size-base: 14px; +@fa-line-height-base: 1; +//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly +@fa-css-prefix: fa; +@fa-version: "4.7.0"; +@fa-border-color: #eee; +@fa-inverse: #fff; +@fa-li-width: (30em / 14); + +@fa-var-500px: "\f26e"; +@fa-var-address-book: "\f2b9"; +@fa-var-address-book-o: "\f2ba"; +@fa-var-address-card: "\f2bb"; +@fa-var-address-card-o: "\f2bc"; +@fa-var-adjust: "\f042"; +@fa-var-adn: "\f170"; +@fa-var-align-center: "\f037"; +@fa-var-align-justify: "\f039"; +@fa-var-align-left: "\f036"; +@fa-var-align-right: "\f038"; +@fa-var-amazon: "\f270"; +@fa-var-ambulance: "\f0f9"; +@fa-var-american-sign-language-interpreting: "\f2a3"; +@fa-var-anchor: "\f13d"; +@fa-var-android: "\f17b"; +@fa-var-angellist: "\f209"; +@fa-var-angle-double-down: "\f103"; +@fa-var-angle-double-left: "\f100"; +@fa-var-angle-double-right: "\f101"; +@fa-var-angle-double-up: "\f102"; +@fa-var-angle-down: "\f107"; +@fa-var-angle-left: "\f104"; +@fa-var-angle-right: "\f105"; +@fa-var-angle-up: "\f106"; +@fa-var-apple: "\f179"; +@fa-var-archive: "\f187"; +@fa-var-area-chart: "\f1fe"; +@fa-var-arrow-circle-down: "\f0ab"; +@fa-var-arrow-circle-left: "\f0a8"; +@fa-var-arrow-circle-o-down: "\f01a"; +@fa-var-arrow-circle-o-left: "\f190"; +@fa-var-arrow-circle-o-right: "\f18e"; +@fa-var-arrow-circle-o-up: "\f01b"; +@fa-var-arrow-circle-right: "\f0a9"; +@fa-var-arrow-circle-up: "\f0aa"; +@fa-var-arrow-down: "\f063"; +@fa-var-arrow-left: "\f060"; +@fa-var-arrow-right: "\f061"; +@fa-var-arrow-up: "\f062"; +@fa-var-arrows: "\f047"; +@fa-var-arrows-alt: "\f0b2"; +@fa-var-arrows-h: "\f07e"; +@fa-var-arrows-v: "\f07d"; +@fa-var-asl-interpreting: "\f2a3"; +@fa-var-assistive-listening-systems: "\f2a2"; +@fa-var-asterisk: "\f069"; +@fa-var-at: "\f1fa"; +@fa-var-audio-description: "\f29e"; +@fa-var-automobile: "\f1b9"; +@fa-var-backward: "\f04a"; +@fa-var-balance-scale: "\f24e"; +@fa-var-ban: "\f05e"; +@fa-var-bandcamp: "\f2d5"; +@fa-var-bank: "\f19c"; +@fa-var-bar-chart: "\f080"; +@fa-var-bar-chart-o: "\f080"; +@fa-var-barcode: "\f02a"; +@fa-var-bars: "\f0c9"; +@fa-var-bath: "\f2cd"; +@fa-var-bathtub: "\f2cd"; +@fa-var-battery: "\f240"; +@fa-var-battery-0: "\f244"; +@fa-var-battery-1: "\f243"; +@fa-var-battery-2: "\f242"; +@fa-var-battery-3: "\f241"; +@fa-var-battery-4: "\f240"; +@fa-var-battery-empty: "\f244"; +@fa-var-battery-full: "\f240"; +@fa-var-battery-half: "\f242"; +@fa-var-battery-quarter: "\f243"; +@fa-var-battery-three-quarters: "\f241"; +@fa-var-bed: "\f236"; +@fa-var-beer: "\f0fc"; +@fa-var-behance: "\f1b4"; +@fa-var-behance-square: "\f1b5"; +@fa-var-bell: "\f0f3"; +@fa-var-bell-o: "\f0a2"; +@fa-var-bell-slash: "\f1f6"; +@fa-var-bell-slash-o: "\f1f7"; +@fa-var-bicycle: "\f206"; +@fa-var-binoculars: "\f1e5"; +@fa-var-birthday-cake: "\f1fd"; +@fa-var-bitbucket: "\f171"; +@fa-var-bitbucket-square: "\f172"; +@fa-var-bitcoin: "\f15a"; +@fa-var-black-tie: "\f27e"; +@fa-var-blind: "\f29d"; +@fa-var-bluetooth: "\f293"; +@fa-var-bluetooth-b: "\f294"; +@fa-var-bold: "\f032"; +@fa-var-bolt: "\f0e7"; +@fa-var-bomb: "\f1e2"; +@fa-var-book: "\f02d"; +@fa-var-bookmark: "\f02e"; +@fa-var-bookmark-o: "\f097"; +@fa-var-braille: "\f2a1"; +@fa-var-briefcase: "\f0b1"; +@fa-var-btc: "\f15a"; +@fa-var-bug: "\f188"; +@fa-var-building: "\f1ad"; +@fa-var-building-o: "\f0f7"; +@fa-var-bullhorn: "\f0a1"; +@fa-var-bullseye: "\f140"; +@fa-var-bus: "\f207"; +@fa-var-buysellads: "\f20d"; +@fa-var-cab: "\f1ba"; +@fa-var-calculator: "\f1ec"; +@fa-var-calendar: "\f073"; +@fa-var-calendar-check-o: "\f274"; +@fa-var-calendar-minus-o: "\f272"; +@fa-var-calendar-o: "\f133"; +@fa-var-calendar-plus-o: "\f271"; +@fa-var-calendar-times-o: "\f273"; +@fa-var-camera: "\f030"; +@fa-var-camera-retro: "\f083"; +@fa-var-car: "\f1b9"; +@fa-var-caret-down: "\f0d7"; +@fa-var-caret-left: "\f0d9"; +@fa-var-caret-right: "\f0da"; +@fa-var-caret-square-o-down: "\f150"; +@fa-var-caret-square-o-left: "\f191"; +@fa-var-caret-square-o-right: "\f152"; +@fa-var-caret-square-o-up: "\f151"; +@fa-var-caret-up: "\f0d8"; +@fa-var-cart-arrow-down: "\f218"; +@fa-var-cart-plus: "\f217"; +@fa-var-cc: "\f20a"; +@fa-var-cc-amex: "\f1f3"; +@fa-var-cc-diners-club: "\f24c"; +@fa-var-cc-discover: "\f1f2"; +@fa-var-cc-jcb: "\f24b"; +@fa-var-cc-mastercard: "\f1f1"; +@fa-var-cc-paypal: "\f1f4"; +@fa-var-cc-stripe: "\f1f5"; +@fa-var-cc-visa: "\f1f0"; +@fa-var-certificate: "\f0a3"; +@fa-var-chain: "\f0c1"; +@fa-var-chain-broken: "\f127"; +@fa-var-check: "\f00c"; +@fa-var-check-circle: "\f058"; +@fa-var-check-circle-o: "\f05d"; +@fa-var-check-square: "\f14a"; +@fa-var-check-square-o: "\f046"; +@fa-var-chevron-circle-down: "\f13a"; +@fa-var-chevron-circle-left: "\f137"; +@fa-var-chevron-circle-right: "\f138"; +@fa-var-chevron-circle-up: "\f139"; +@fa-var-chevron-down: "\f078"; +@fa-var-chevron-left: "\f053"; +@fa-var-chevron-right: "\f054"; +@fa-var-chevron-up: "\f077"; +@fa-var-child: "\f1ae"; +@fa-var-chrome: "\f268"; +@fa-var-circle: "\f111"; +@fa-var-circle-o: "\f10c"; +@fa-var-circle-o-notch: "\f1ce"; +@fa-var-circle-thin: "\f1db"; +@fa-var-clipboard: "\f0ea"; +@fa-var-clock-o: "\f017"; +@fa-var-clone: "\f24d"; +@fa-var-close: "\f00d"; +@fa-var-cloud: "\f0c2"; +@fa-var-cloud-download: "\f0ed"; +@fa-var-cloud-upload: "\f0ee"; +@fa-var-cny: "\f157"; +@fa-var-code: "\f121"; +@fa-var-code-fork: "\f126"; +@fa-var-codepen: "\f1cb"; +@fa-var-codiepie: "\f284"; +@fa-var-coffee: "\f0f4"; +@fa-var-cog: "\f013"; +@fa-var-cogs: "\f085"; +@fa-var-columns: "\f0db"; +@fa-var-comment: "\f075"; +@fa-var-comment-o: "\f0e5"; +@fa-var-commenting: "\f27a"; +@fa-var-commenting-o: "\f27b"; +@fa-var-comments: "\f086"; +@fa-var-comments-o: "\f0e6"; +@fa-var-compass: "\f14e"; +@fa-var-compress: "\f066"; +@fa-var-connectdevelop: "\f20e"; +@fa-var-contao: "\f26d"; +@fa-var-copy: "\f0c5"; +@fa-var-copyright: "\f1f9"; +@fa-var-creative-commons: "\f25e"; +@fa-var-credit-card: "\f09d"; +@fa-var-credit-card-alt: "\f283"; +@fa-var-crop: "\f125"; +@fa-var-crosshairs: "\f05b"; +@fa-var-css3: "\f13c"; +@fa-var-cube: "\f1b2"; +@fa-var-cubes: "\f1b3"; +@fa-var-cut: "\f0c4"; +@fa-var-cutlery: "\f0f5"; +@fa-var-dashboard: "\f0e4"; +@fa-var-dashcube: "\f210"; +@fa-var-database: "\f1c0"; +@fa-var-deaf: "\f2a4"; +@fa-var-deafness: "\f2a4"; +@fa-var-dedent: "\f03b"; +@fa-var-delicious: "\f1a5"; +@fa-var-desktop: "\f108"; +@fa-var-deviantart: "\f1bd"; +@fa-var-diamond: "\f219"; +@fa-var-digg: "\f1a6"; +@fa-var-dollar: "\f155"; +@fa-var-dot-circle-o: "\f192"; +@fa-var-download: "\f019"; +@fa-var-dribbble: "\f17d"; +@fa-var-drivers-license: "\f2c2"; +@fa-var-drivers-license-o: "\f2c3"; +@fa-var-dropbox: "\f16b"; +@fa-var-drupal: "\f1a9"; +@fa-var-edge: "\f282"; +@fa-var-edit: "\f044"; +@fa-var-eercast: "\f2da"; +@fa-var-eject: "\f052"; +@fa-var-ellipsis-h: "\f141"; +@fa-var-ellipsis-v: "\f142"; +@fa-var-empire: "\f1d1"; +@fa-var-envelope: "\f0e0"; +@fa-var-envelope-o: "\f003"; +@fa-var-envelope-open: "\f2b6"; +@fa-var-envelope-open-o: "\f2b7"; +@fa-var-envelope-square: "\f199"; +@fa-var-envira: "\f299"; +@fa-var-eraser: "\f12d"; +@fa-var-etsy: "\f2d7"; +@fa-var-eur: "\f153"; +@fa-var-euro: "\f153"; +@fa-var-exchange: "\f0ec"; +@fa-var-exclamation: "\f12a"; +@fa-var-exclamation-circle: "\f06a"; +@fa-var-exclamation-triangle: "\f071"; +@fa-var-expand: "\f065"; +@fa-var-expeditedssl: "\f23e"; +@fa-var-external-link: "\f08e"; +@fa-var-external-link-square: "\f14c"; +@fa-var-eye: "\f06e"; +@fa-var-eye-slash: "\f070"; +@fa-var-eyedropper: "\f1fb"; +@fa-var-fa: "\f2b4"; +@fa-var-facebook: "\f09a"; +@fa-var-facebook-f: "\f09a"; +@fa-var-facebook-official: "\f230"; +@fa-var-facebook-square: "\f082"; +@fa-var-fast-backward: "\f049"; +@fa-var-fast-forward: "\f050"; +@fa-var-fax: "\f1ac"; +@fa-var-feed: "\f09e"; +@fa-var-female: "\f182"; +@fa-var-fighter-jet: "\f0fb"; +@fa-var-file: "\f15b"; +@fa-var-file-archive-o: "\f1c6"; +@fa-var-file-audio-o: "\f1c7"; +@fa-var-file-code-o: "\f1c9"; +@fa-var-file-excel-o: "\f1c3"; +@fa-var-file-image-o: "\f1c5"; +@fa-var-file-movie-o: "\f1c8"; +@fa-var-file-o: "\f016"; +@fa-var-file-pdf-o: "\f1c1"; +@fa-var-file-photo-o: "\f1c5"; +@fa-var-file-picture-o: "\f1c5"; +@fa-var-file-powerpoint-o: "\f1c4"; +@fa-var-file-sound-o: "\f1c7"; +@fa-var-file-text: "\f15c"; +@fa-var-file-text-o: "\f0f6"; +@fa-var-file-video-o: "\f1c8"; +@fa-var-file-word-o: "\f1c2"; +@fa-var-file-zip-o: "\f1c6"; +@fa-var-files-o: "\f0c5"; +@fa-var-film: "\f008"; +@fa-var-filter: "\f0b0"; +@fa-var-fire: "\f06d"; +@fa-var-fire-extinguisher: "\f134"; +@fa-var-firefox: "\f269"; +@fa-var-first-order: "\f2b0"; +@fa-var-flag: "\f024"; +@fa-var-flag-checkered: "\f11e"; +@fa-var-flag-o: "\f11d"; +@fa-var-flash: "\f0e7"; +@fa-var-flask: "\f0c3"; +@fa-var-flickr: "\f16e"; +@fa-var-floppy-o: "\f0c7"; +@fa-var-folder: "\f07b"; +@fa-var-folder-o: "\f114"; +@fa-var-folder-open: "\f07c"; +@fa-var-folder-open-o: "\f115"; +@fa-var-font: "\f031"; +@fa-var-font-awesome: "\f2b4"; +@fa-var-fonticons: "\f280"; +@fa-var-fort-awesome: "\f286"; +@fa-var-forumbee: "\f211"; +@fa-var-forward: "\f04e"; +@fa-var-foursquare: "\f180"; +@fa-var-free-code-camp: "\f2c5"; +@fa-var-frown-o: "\f119"; +@fa-var-futbol-o: "\f1e3"; +@fa-var-gamepad: "\f11b"; +@fa-var-gavel: "\f0e3"; +@fa-var-gbp: "\f154"; +@fa-var-ge: "\f1d1"; +@fa-var-gear: "\f013"; +@fa-var-gears: "\f085"; +@fa-var-genderless: "\f22d"; +@fa-var-get-pocket: "\f265"; +@fa-var-gg: "\f260"; +@fa-var-gg-circle: "\f261"; +@fa-var-gift: "\f06b"; +@fa-var-git: "\f1d3"; +@fa-var-git-square: "\f1d2"; +@fa-var-github: "\f09b"; +@fa-var-github-alt: "\f113"; +@fa-var-github-square: "\f092"; +@fa-var-gitlab: "\f296"; +@fa-var-gittip: "\f184"; +@fa-var-glass: "\f000"; +@fa-var-glide: "\f2a5"; +@fa-var-glide-g: "\f2a6"; +@fa-var-globe: "\f0ac"; +@fa-var-google: "\f1a0"; +@fa-var-google-plus: "\f0d5"; +@fa-var-google-plus-circle: "\f2b3"; +@fa-var-google-plus-official: "\f2b3"; +@fa-var-google-plus-square: "\f0d4"; +@fa-var-google-wallet: "\f1ee"; +@fa-var-graduation-cap: "\f19d"; +@fa-var-gratipay: "\f184"; +@fa-var-grav: "\f2d6"; +@fa-var-group: "\f0c0"; +@fa-var-h-square: "\f0fd"; +@fa-var-hacker-news: "\f1d4"; +@fa-var-hand-grab-o: "\f255"; +@fa-var-hand-lizard-o: "\f258"; +@fa-var-hand-o-down: "\f0a7"; +@fa-var-hand-o-left: "\f0a5"; +@fa-var-hand-o-right: "\f0a4"; +@fa-var-hand-o-up: "\f0a6"; +@fa-var-hand-paper-o: "\f256"; +@fa-var-hand-peace-o: "\f25b"; +@fa-var-hand-pointer-o: "\f25a"; +@fa-var-hand-rock-o: "\f255"; +@fa-var-hand-scissors-o: "\f257"; +@fa-var-hand-spock-o: "\f259"; +@fa-var-hand-stop-o: "\f256"; +@fa-var-handshake-o: "\f2b5"; +@fa-var-hard-of-hearing: "\f2a4"; +@fa-var-hashtag: "\f292"; +@fa-var-hdd-o: "\f0a0"; +@fa-var-header: "\f1dc"; +@fa-var-headphones: "\f025"; +@fa-var-heart: "\f004"; +@fa-var-heart-o: "\f08a"; +@fa-var-heartbeat: "\f21e"; +@fa-var-history: "\f1da"; +@fa-var-home: "\f015"; +@fa-var-hospital-o: "\f0f8"; +@fa-var-hotel: "\f236"; +@fa-var-hourglass: "\f254"; +@fa-var-hourglass-1: "\f251"; +@fa-var-hourglass-2: "\f252"; +@fa-var-hourglass-3: "\f253"; +@fa-var-hourglass-end: "\f253"; +@fa-var-hourglass-half: "\f252"; +@fa-var-hourglass-o: "\f250"; +@fa-var-hourglass-start: "\f251"; +@fa-var-houzz: "\f27c"; +@fa-var-html5: "\f13b"; +@fa-var-i-cursor: "\f246"; +@fa-var-id-badge: "\f2c1"; +@fa-var-id-card: "\f2c2"; +@fa-var-id-card-o: "\f2c3"; +@fa-var-ils: "\f20b"; +@fa-var-image: "\f03e"; +@fa-var-imdb: "\f2d8"; +@fa-var-inbox: "\f01c"; +@fa-var-indent: "\f03c"; +@fa-var-industry: "\f275"; +@fa-var-info: "\f129"; +@fa-var-info-circle: "\f05a"; +@fa-var-inr: "\f156"; +@fa-var-instagram: "\f16d"; +@fa-var-institution: "\f19c"; +@fa-var-internet-explorer: "\f26b"; +@fa-var-intersex: "\f224"; +@fa-var-ioxhost: "\f208"; +@fa-var-italic: "\f033"; +@fa-var-joomla: "\f1aa"; +@fa-var-jpy: "\f157"; +@fa-var-jsfiddle: "\f1cc"; +@fa-var-key: "\f084"; +@fa-var-keyboard-o: "\f11c"; +@fa-var-krw: "\f159"; +@fa-var-language: "\f1ab"; +@fa-var-laptop: "\f109"; +@fa-var-lastfm: "\f202"; +@fa-var-lastfm-square: "\f203"; +@fa-var-leaf: "\f06c"; +@fa-var-leanpub: "\f212"; +@fa-var-legal: "\f0e3"; +@fa-var-lemon-o: "\f094"; +@fa-var-level-down: "\f149"; +@fa-var-level-up: "\f148"; +@fa-var-life-bouy: "\f1cd"; +@fa-var-life-buoy: "\f1cd"; +@fa-var-life-ring: "\f1cd"; +@fa-var-life-saver: "\f1cd"; +@fa-var-lightbulb-o: "\f0eb"; +@fa-var-line-chart: "\f201"; +@fa-var-link: "\f0c1"; +@fa-var-linkedin: "\f0e1"; +@fa-var-linkedin-square: "\f08c"; +@fa-var-linode: "\f2b8"; +@fa-var-linux: "\f17c"; +@fa-var-list: "\f03a"; +@fa-var-list-alt: "\f022"; +@fa-var-list-ol: "\f0cb"; +@fa-var-list-ul: "\f0ca"; +@fa-var-location-arrow: "\f124"; +@fa-var-lock: "\f023"; +@fa-var-long-arrow-down: "\f175"; +@fa-var-long-arrow-left: "\f177"; +@fa-var-long-arrow-right: "\f178"; +@fa-var-long-arrow-up: "\f176"; +@fa-var-low-vision: "\f2a8"; +@fa-var-magic: "\f0d0"; +@fa-var-magnet: "\f076"; +@fa-var-mail-forward: "\f064"; +@fa-var-mail-reply: "\f112"; +@fa-var-mail-reply-all: "\f122"; +@fa-var-male: "\f183"; +@fa-var-map: "\f279"; +@fa-var-map-marker: "\f041"; +@fa-var-map-o: "\f278"; +@fa-var-map-pin: "\f276"; +@fa-var-map-signs: "\f277"; +@fa-var-mars: "\f222"; +@fa-var-mars-double: "\f227"; +@fa-var-mars-stroke: "\f229"; +@fa-var-mars-stroke-h: "\f22b"; +@fa-var-mars-stroke-v: "\f22a"; +@fa-var-maxcdn: "\f136"; +@fa-var-meanpath: "\f20c"; +@fa-var-medium: "\f23a"; +@fa-var-medkit: "\f0fa"; +@fa-var-meetup: "\f2e0"; +@fa-var-meh-o: "\f11a"; +@fa-var-mercury: "\f223"; +@fa-var-microchip: "\f2db"; +@fa-var-microphone: "\f130"; +@fa-var-microphone-slash: "\f131"; +@fa-var-minus: "\f068"; +@fa-var-minus-circle: "\f056"; +@fa-var-minus-square: "\f146"; +@fa-var-minus-square-o: "\f147"; +@fa-var-mixcloud: "\f289"; +@fa-var-mobile: "\f10b"; +@fa-var-mobile-phone: "\f10b"; +@fa-var-modx: "\f285"; +@fa-var-money: "\f0d6"; +@fa-var-moon-o: "\f186"; +@fa-var-mortar-board: "\f19d"; +@fa-var-motorcycle: "\f21c"; +@fa-var-mouse-pointer: "\f245"; +@fa-var-music: "\f001"; +@fa-var-navicon: "\f0c9"; +@fa-var-neuter: "\f22c"; +@fa-var-newspaper-o: "\f1ea"; +@fa-var-object-group: "\f247"; +@fa-var-object-ungroup: "\f248"; +@fa-var-odnoklassniki: "\f263"; +@fa-var-odnoklassniki-square: "\f264"; +@fa-var-opencart: "\f23d"; +@fa-var-openid: "\f19b"; +@fa-var-opera: "\f26a"; +@fa-var-optin-monster: "\f23c"; +@fa-var-outdent: "\f03b"; +@fa-var-pagelines: "\f18c"; +@fa-var-paint-brush: "\f1fc"; +@fa-var-paper-plane: "\f1d8"; +@fa-var-paper-plane-o: "\f1d9"; +@fa-var-paperclip: "\f0c6"; +@fa-var-paragraph: "\f1dd"; +@fa-var-paste: "\f0ea"; +@fa-var-pause: "\f04c"; +@fa-var-pause-circle: "\f28b"; +@fa-var-pause-circle-o: "\f28c"; +@fa-var-paw: "\f1b0"; +@fa-var-paypal: "\f1ed"; +@fa-var-pencil: "\f040"; +@fa-var-pencil-square: "\f14b"; +@fa-var-pencil-square-o: "\f044"; +@fa-var-percent: "\f295"; +@fa-var-phone: "\f095"; +@fa-var-phone-square: "\f098"; +@fa-var-photo: "\f03e"; +@fa-var-picture-o: "\f03e"; +@fa-var-pie-chart: "\f200"; +@fa-var-pied-piper: "\f2ae"; +@fa-var-pied-piper-alt: "\f1a8"; +@fa-var-pied-piper-pp: "\f1a7"; +@fa-var-pinterest: "\f0d2"; +@fa-var-pinterest-p: "\f231"; +@fa-var-pinterest-square: "\f0d3"; +@fa-var-plane: "\f072"; +@fa-var-play: "\f04b"; +@fa-var-play-circle: "\f144"; +@fa-var-play-circle-o: "\f01d"; +@fa-var-plug: "\f1e6"; +@fa-var-plus: "\f067"; +@fa-var-plus-circle: "\f055"; +@fa-var-plus-square: "\f0fe"; +@fa-var-plus-square-o: "\f196"; +@fa-var-podcast: "\f2ce"; +@fa-var-power-off: "\f011"; +@fa-var-print: "\f02f"; +@fa-var-product-hunt: "\f288"; +@fa-var-puzzle-piece: "\f12e"; +@fa-var-qq: "\f1d6"; +@fa-var-qrcode: "\f029"; +@fa-var-question: "\f128"; +@fa-var-question-circle: "\f059"; +@fa-var-question-circle-o: "\f29c"; +@fa-var-quora: "\f2c4"; +@fa-var-quote-left: "\f10d"; +@fa-var-quote-right: "\f10e"; +@fa-var-ra: "\f1d0"; +@fa-var-random: "\f074"; +@fa-var-ravelry: "\f2d9"; +@fa-var-rebel: "\f1d0"; +@fa-var-recycle: "\f1b8"; +@fa-var-reddit: "\f1a1"; +@fa-var-reddit-alien: "\f281"; +@fa-var-reddit-square: "\f1a2"; +@fa-var-refresh: "\f021"; +@fa-var-registered: "\f25d"; +@fa-var-remove: "\f00d"; +@fa-var-renren: "\f18b"; +@fa-var-reorder: "\f0c9"; +@fa-var-repeat: "\f01e"; +@fa-var-reply: "\f112"; +@fa-var-reply-all: "\f122"; +@fa-var-resistance: "\f1d0"; +@fa-var-retweet: "\f079"; +@fa-var-rmb: "\f157"; +@fa-var-road: "\f018"; +@fa-var-rocket: "\f135"; +@fa-var-rotate-left: "\f0e2"; +@fa-var-rotate-right: "\f01e"; +@fa-var-rouble: "\f158"; +@fa-var-rss: "\f09e"; +@fa-var-rss-square: "\f143"; +@fa-var-rub: "\f158"; +@fa-var-ruble: "\f158"; +@fa-var-rupee: "\f156"; +@fa-var-s15: "\f2cd"; +@fa-var-safari: "\f267"; +@fa-var-save: "\f0c7"; +@fa-var-scissors: "\f0c4"; +@fa-var-scribd: "\f28a"; +@fa-var-search: "\f002"; +@fa-var-search-minus: "\f010"; +@fa-var-search-plus: "\f00e"; +@fa-var-sellsy: "\f213"; +@fa-var-send: "\f1d8"; +@fa-var-send-o: "\f1d9"; +@fa-var-server: "\f233"; +@fa-var-share: "\f064"; +@fa-var-share-alt: "\f1e0"; +@fa-var-share-alt-square: "\f1e1"; +@fa-var-share-square: "\f14d"; +@fa-var-share-square-o: "\f045"; +@fa-var-shekel: "\f20b"; +@fa-var-sheqel: "\f20b"; +@fa-var-shield: "\f132"; +@fa-var-ship: "\f21a"; +@fa-var-shirtsinbulk: "\f214"; +@fa-var-shopping-bag: "\f290"; +@fa-var-shopping-basket: "\f291"; +@fa-var-shopping-cart: "\f07a"; +@fa-var-shower: "\f2cc"; +@fa-var-sign-in: "\f090"; +@fa-var-sign-language: "\f2a7"; +@fa-var-sign-out: "\f08b"; +@fa-var-signal: "\f012"; +@fa-var-signing: "\f2a7"; +@fa-var-simplybuilt: "\f215"; +@fa-var-sitemap: "\f0e8"; +@fa-var-skyatlas: "\f216"; +@fa-var-skype: "\f17e"; +@fa-var-slack: "\f198"; +@fa-var-sliders: "\f1de"; +@fa-var-slideshare: "\f1e7"; +@fa-var-smile-o: "\f118"; +@fa-var-snapchat: "\f2ab"; +@fa-var-snapchat-ghost: "\f2ac"; +@fa-var-snapchat-square: "\f2ad"; +@fa-var-snowflake-o: "\f2dc"; +@fa-var-soccer-ball-o: "\f1e3"; +@fa-var-sort: "\f0dc"; +@fa-var-sort-alpha-asc: "\f15d"; +@fa-var-sort-alpha-desc: "\f15e"; +@fa-var-sort-amount-asc: "\f160"; +@fa-var-sort-amount-desc: "\f161"; +@fa-var-sort-asc: "\f0de"; +@fa-var-sort-desc: "\f0dd"; +@fa-var-sort-down: "\f0dd"; +@fa-var-sort-numeric-asc: "\f162"; +@fa-var-sort-numeric-desc: "\f163"; +@fa-var-sort-up: "\f0de"; +@fa-var-soundcloud: "\f1be"; +@fa-var-space-shuttle: "\f197"; +@fa-var-spinner: "\f110"; +@fa-var-spoon: "\f1b1"; +@fa-var-spotify: "\f1bc"; +@fa-var-square: "\f0c8"; +@fa-var-square-o: "\f096"; +@fa-var-stack-exchange: "\f18d"; +@fa-var-stack-overflow: "\f16c"; +@fa-var-star: "\f005"; +@fa-var-star-half: "\f089"; +@fa-var-star-half-empty: "\f123"; +@fa-var-star-half-full: "\f123"; +@fa-var-star-half-o: "\f123"; +@fa-var-star-o: "\f006"; +@fa-var-steam: "\f1b6"; +@fa-var-steam-square: "\f1b7"; +@fa-var-step-backward: "\f048"; +@fa-var-step-forward: "\f051"; +@fa-var-stethoscope: "\f0f1"; +@fa-var-sticky-note: "\f249"; +@fa-var-sticky-note-o: "\f24a"; +@fa-var-stop: "\f04d"; +@fa-var-stop-circle: "\f28d"; +@fa-var-stop-circle-o: "\f28e"; +@fa-var-street-view: "\f21d"; +@fa-var-strikethrough: "\f0cc"; +@fa-var-stumbleupon: "\f1a4"; +@fa-var-stumbleupon-circle: "\f1a3"; +@fa-var-subscript: "\f12c"; +@fa-var-subway: "\f239"; +@fa-var-suitcase: "\f0f2"; +@fa-var-sun-o: "\f185"; +@fa-var-superpowers: "\f2dd"; +@fa-var-superscript: "\f12b"; +@fa-var-support: "\f1cd"; +@fa-var-table: "\f0ce"; +@fa-var-tablet: "\f10a"; +@fa-var-tachometer: "\f0e4"; +@fa-var-tag: "\f02b"; +@fa-var-tags: "\f02c"; +@fa-var-tasks: "\f0ae"; +@fa-var-taxi: "\f1ba"; +@fa-var-telegram: "\f2c6"; +@fa-var-television: "\f26c"; +@fa-var-tencent-weibo: "\f1d5"; +@fa-var-terminal: "\f120"; +@fa-var-text-height: "\f034"; +@fa-var-text-width: "\f035"; +@fa-var-th: "\f00a"; +@fa-var-th-large: "\f009"; +@fa-var-th-list: "\f00b"; +@fa-var-themeisle: "\f2b2"; +@fa-var-thermometer: "\f2c7"; +@fa-var-thermometer-0: "\f2cb"; +@fa-var-thermometer-1: "\f2ca"; +@fa-var-thermometer-2: "\f2c9"; +@fa-var-thermometer-3: "\f2c8"; +@fa-var-thermometer-4: "\f2c7"; +@fa-var-thermometer-empty: "\f2cb"; +@fa-var-thermometer-full: "\f2c7"; +@fa-var-thermometer-half: "\f2c9"; +@fa-var-thermometer-quarter: "\f2ca"; +@fa-var-thermometer-three-quarters: "\f2c8"; +@fa-var-thumb-tack: "\f08d"; +@fa-var-thumbs-down: "\f165"; +@fa-var-thumbs-o-down: "\f088"; +@fa-var-thumbs-o-up: "\f087"; +@fa-var-thumbs-up: "\f164"; +@fa-var-ticket: "\f145"; +@fa-var-times: "\f00d"; +@fa-var-times-circle: "\f057"; +@fa-var-times-circle-o: "\f05c"; +@fa-var-times-rectangle: "\f2d3"; +@fa-var-times-rectangle-o: "\f2d4"; +@fa-var-tint: "\f043"; +@fa-var-toggle-down: "\f150"; +@fa-var-toggle-left: "\f191"; +@fa-var-toggle-off: "\f204"; +@fa-var-toggle-on: "\f205"; +@fa-var-toggle-right: "\f152"; +@fa-var-toggle-up: "\f151"; +@fa-var-trademark: "\f25c"; +@fa-var-train: "\f238"; +@fa-var-transgender: "\f224"; +@fa-var-transgender-alt: "\f225"; +@fa-var-trash: "\f1f8"; +@fa-var-trash-o: "\f014"; +@fa-var-tree: "\f1bb"; +@fa-var-trello: "\f181"; +@fa-var-tripadvisor: "\f262"; +@fa-var-trophy: "\f091"; +@fa-var-truck: "\f0d1"; +@fa-var-try: "\f195"; +@fa-var-tty: "\f1e4"; +@fa-var-tumblr: "\f173"; +@fa-var-tumblr-square: "\f174"; +@fa-var-turkish-lira: "\f195"; +@fa-var-tv: "\f26c"; +@fa-var-twitch: "\f1e8"; +@fa-var-twitter: "\f099"; +@fa-var-twitter-square: "\f081"; +@fa-var-umbrella: "\f0e9"; +@fa-var-underline: "\f0cd"; +@fa-var-undo: "\f0e2"; +@fa-var-universal-access: "\f29a"; +@fa-var-university: "\f19c"; +@fa-var-unlink: "\f127"; +@fa-var-unlock: "\f09c"; +@fa-var-unlock-alt: "\f13e"; +@fa-var-unsorted: "\f0dc"; +@fa-var-upload: "\f093"; +@fa-var-usb: "\f287"; +@fa-var-usd: "\f155"; +@fa-var-user: "\f007"; +@fa-var-user-circle: "\f2bd"; +@fa-var-user-circle-o: "\f2be"; +@fa-var-user-md: "\f0f0"; +@fa-var-user-o: "\f2c0"; +@fa-var-user-plus: "\f234"; +@fa-var-user-secret: "\f21b"; +@fa-var-user-times: "\f235"; +@fa-var-users: "\f0c0"; +@fa-var-vcard: "\f2bb"; +@fa-var-vcard-o: "\f2bc"; +@fa-var-venus: "\f221"; +@fa-var-venus-double: "\f226"; +@fa-var-venus-mars: "\f228"; +@fa-var-viacoin: "\f237"; +@fa-var-viadeo: "\f2a9"; +@fa-var-viadeo-square: "\f2aa"; +@fa-var-video-camera: "\f03d"; +@fa-var-vimeo: "\f27d"; +@fa-var-vimeo-square: "\f194"; +@fa-var-vine: "\f1ca"; +@fa-var-vk: "\f189"; +@fa-var-volume-control-phone: "\f2a0"; +@fa-var-volume-down: "\f027"; +@fa-var-volume-off: "\f026"; +@fa-var-volume-up: "\f028"; +@fa-var-warning: "\f071"; +@fa-var-wechat: "\f1d7"; +@fa-var-weibo: "\f18a"; +@fa-var-weixin: "\f1d7"; +@fa-var-whatsapp: "\f232"; +@fa-var-wheelchair: "\f193"; +@fa-var-wheelchair-alt: "\f29b"; +@fa-var-wifi: "\f1eb"; +@fa-var-wikipedia-w: "\f266"; +@fa-var-window-close: "\f2d3"; +@fa-var-window-close-o: "\f2d4"; +@fa-var-window-maximize: "\f2d0"; +@fa-var-window-minimize: "\f2d1"; +@fa-var-window-restore: "\f2d2"; +@fa-var-windows: "\f17a"; +@fa-var-won: "\f159"; +@fa-var-wordpress: "\f19a"; +@fa-var-wpbeginner: "\f297"; +@fa-var-wpexplorer: "\f2de"; +@fa-var-wpforms: "\f298"; +@fa-var-wrench: "\f0ad"; +@fa-var-xing: "\f168"; +@fa-var-xing-square: "\f169"; +@fa-var-y-combinator: "\f23b"; +@fa-var-y-combinator-square: "\f1d4"; +@fa-var-yahoo: "\f19e"; +@fa-var-yc: "\f23b"; +@fa-var-yc-square: "\f1d4"; +@fa-var-yelp: "\f1e9"; +@fa-var-yen: "\f157"; +@fa-var-yoast: "\f2b1"; +@fa-var-youtube: "\f167"; +@fa-var-youtube-play: "\f16a"; +@fa-var-youtube-square: "\f166"; + diff --git a/public/admin/view/javascript/font-awesome/scss/_animated.scss b/public/admin/view/javascript/font-awesome/scss/_animated.scss new file mode 100644 index 0000000..8a020db --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_animated.scss @@ -0,0 +1,34 @@ +// Spinning Icons +// -------------------------- + +.#{$fa-css-prefix}-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} + +.#{$fa-css-prefix}-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/public/admin/view/javascript/font-awesome/scss/_bordered-pulled.scss b/public/admin/view/javascript/font-awesome/scss/_bordered-pulled.scss new file mode 100644 index 0000000..d4b85a0 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_bordered-pulled.scss @@ -0,0 +1,25 @@ +// Bordered & Pulled +// ------------------------- + +.#{$fa-css-prefix}-border { + padding: .2em .25em .15em; + border: solid .08em $fa-border-color; + border-radius: .1em; +} + +.#{$fa-css-prefix}-pull-left { float: left; } +.#{$fa-css-prefix}-pull-right { float: right; } + +.#{$fa-css-prefix} { + &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } + &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } +} + +/* Deprecated as of 4.4.0 */ +.pull-right { float: right; } +.pull-left { float: left; } + +.#{$fa-css-prefix} { + &.pull-left { margin-right: .3em; } + &.pull-right { margin-left: .3em; } +} diff --git a/public/admin/view/javascript/font-awesome/scss/_core.scss b/public/admin/view/javascript/font-awesome/scss/_core.scss new file mode 100644 index 0000000..7425ef8 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_core.scss @@ -0,0 +1,12 @@ +// Base Class Definition +// ------------------------- + +.#{$fa-css-prefix} { + display: inline-block; + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} diff --git a/public/admin/view/javascript/font-awesome/scss/_fixed-width.scss b/public/admin/view/javascript/font-awesome/scss/_fixed-width.scss new file mode 100644 index 0000000..b221c98 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_fixed-width.scss @@ -0,0 +1,6 @@ +// Fixed Width Icons +// ------------------------- +.#{$fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/public/admin/view/javascript/font-awesome/scss/_icons.scss b/public/admin/view/javascript/font-awesome/scss/_icons.scss new file mode 100644 index 0000000..e63e702 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_icons.scss @@ -0,0 +1,789 @@ +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ + +.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; } +.#{$fa-css-prefix}-music:before { content: $fa-var-music; } +.#{$fa-css-prefix}-search:before { content: $fa-var-search; } +.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; } +.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; } +.#{$fa-css-prefix}-star:before { content: $fa-var-star; } +.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; } +.#{$fa-css-prefix}-user:before { content: $fa-var-user; } +.#{$fa-css-prefix}-film:before { content: $fa-var-film; } +.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; } +.#{$fa-css-prefix}-th:before { content: $fa-var-th; } +.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; } +.#{$fa-css-prefix}-check:before { content: $fa-var-check; } +.#{$fa-css-prefix}-remove:before, +.#{$fa-css-prefix}-close:before, +.#{$fa-css-prefix}-times:before { content: $fa-var-times; } +.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; } +.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; } +.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; } +.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; } +.#{$fa-css-prefix}-gear:before, +.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; } +.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; } +.#{$fa-css-prefix}-home:before { content: $fa-var-home; } +.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; } +.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; } +.#{$fa-css-prefix}-road:before { content: $fa-var-road; } +.#{$fa-css-prefix}-download:before { content: $fa-var-download; } +.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; } +.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; } +.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; } +.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; } +.#{$fa-css-prefix}-rotate-right:before, +.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; } +.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; } +.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; } +.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; } +.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; } +.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; } +.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; } +.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; } +.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; } +.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; } +.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; } +.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; } +.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; } +.#{$fa-css-prefix}-book:before { content: $fa-var-book; } +.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; } +.#{$fa-css-prefix}-print:before { content: $fa-var-print; } +.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; } +.#{$fa-css-prefix}-font:before { content: $fa-var-font; } +.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; } +.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; } +.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; } +.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; } +.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; } +.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; } +.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; } +.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; } +.#{$fa-css-prefix}-list:before { content: $fa-var-list; } +.#{$fa-css-prefix}-dedent:before, +.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; } +.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; } +.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; } +.#{$fa-css-prefix}-photo:before, +.#{$fa-css-prefix}-image:before, +.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; } +.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; } +.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; } +.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; } +.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; } +.#{$fa-css-prefix}-edit:before, +.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; } +.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; } +.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; } +.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; } +.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; } +.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; } +.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; } +.#{$fa-css-prefix}-play:before { content: $fa-var-play; } +.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; } +.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; } +.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; } +.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; } +.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; } +.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; } +.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; } +.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; } +.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; } +.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; } +.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; } +.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; } +.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; } +.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; } +.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; } +.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; } +.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; } +.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; } +.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; } +.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; } +.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; } +.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; } +.#{$fa-css-prefix}-mail-forward:before, +.#{$fa-css-prefix}-share:before { content: $fa-var-share; } +.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; } +.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; } +.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; } +.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; } +.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; } +.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; } +.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; } +.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; } +.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; } +.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; } +.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; } +.#{$fa-css-prefix}-warning:before, +.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; } +.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; } +.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; } +.#{$fa-css-prefix}-random:before { content: $fa-var-random; } +.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; } +.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; } +.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; } +.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; } +.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; } +.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; } +.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; } +.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; } +.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; } +.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; } +.#{$fa-css-prefix}-bar-chart-o:before, +.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; } +.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; } +.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; } +.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; } +.#{$fa-css-prefix}-key:before { content: $fa-var-key; } +.#{$fa-css-prefix}-gears:before, +.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; } +.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; } +.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; } +.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; } +.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; } +.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; } +.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; } +.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; } +.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; } +.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; } +.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; } +.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; } +.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; } +.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; } +.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; } +.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; } +.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; } +.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; } +.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; } +.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; } +.#{$fa-css-prefix}-facebook-f:before, +.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; } +.#{$fa-css-prefix}-github:before { content: $fa-var-github; } +.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; } +.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; } +.#{$fa-css-prefix}-feed:before, +.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; } +.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; } +.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; } +.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; } +.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; } +.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; } +.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; } +.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; } +.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; } +.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; } +.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; } +.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; } +.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; } +.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; } +.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; } +.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; } +.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; } +.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; } +.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; } +.#{$fa-css-prefix}-group:before, +.#{$fa-css-prefix}-users:before { content: $fa-var-users; } +.#{$fa-css-prefix}-chain:before, +.#{$fa-css-prefix}-link:before { content: $fa-var-link; } +.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; } +.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; } +.#{$fa-css-prefix}-cut:before, +.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; } +.#{$fa-css-prefix}-copy:before, +.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; } +.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; } +.#{$fa-css-prefix}-save:before, +.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; } +.#{$fa-css-prefix}-square:before { content: $fa-var-square; } +.#{$fa-css-prefix}-navicon:before, +.#{$fa-css-prefix}-reorder:before, +.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; } +.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; } +.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; } +.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; } +.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; } +.#{$fa-css-prefix}-table:before { content: $fa-var-table; } +.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; } +.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; } +.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; } +.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; } +.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; } +.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; } +.#{$fa-css-prefix}-money:before { content: $fa-var-money; } +.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; } +.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; } +.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; } +.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; } +.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; } +.#{$fa-css-prefix}-unsorted:before, +.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; } +.#{$fa-css-prefix}-sort-down:before, +.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; } +.#{$fa-css-prefix}-sort-up:before, +.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; } +.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; } +.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; } +.#{$fa-css-prefix}-rotate-left:before, +.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; } +.#{$fa-css-prefix}-legal:before, +.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; } +.#{$fa-css-prefix}-dashboard:before, +.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; } +.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; } +.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; } +.#{$fa-css-prefix}-flash:before, +.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; } +.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; } +.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; } +.#{$fa-css-prefix}-paste:before, +.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; } +.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; } +.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; } +.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; } +.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; } +.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; } +.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; } +.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; } +.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; } +.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; } +.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; } +.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; } +.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; } +.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; } +.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; } +.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; } +.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; } +.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; } +.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; } +.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; } +.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; } +.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; } +.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; } +.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; } +.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; } +.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; } +.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; } +.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; } +.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; } +.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; } +.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; } +.#{$fa-css-prefix}-mobile-phone:before, +.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; } +.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; } +.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; } +.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; } +.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; } +.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; } +.#{$fa-css-prefix}-mail-reply:before, +.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; } +.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; } +.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; } +.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; } +.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; } +.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; } +.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; } +.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; } +.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; } +.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; } +.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; } +.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; } +.#{$fa-css-prefix}-code:before { content: $fa-var-code; } +.#{$fa-css-prefix}-mail-reply-all:before, +.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; } +.#{$fa-css-prefix}-star-half-empty:before, +.#{$fa-css-prefix}-star-half-full:before, +.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; } +.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; } +.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; } +.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; } +.#{$fa-css-prefix}-unlink:before, +.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; } +.#{$fa-css-prefix}-question:before { content: $fa-var-question; } +.#{$fa-css-prefix}-info:before { content: $fa-var-info; } +.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; } +.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; } +.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; } +.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; } +.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; } +.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; } +.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; } +.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; } +.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; } +.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; } +.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; } +.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; } +.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; } +.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; } +.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; } +.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; } +.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; } +.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; } +.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; } +.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; } +.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; } +.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; } +.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; } +.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; } +.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; } +.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; } +.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; } +.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; } +.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; } +.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; } +.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; } +.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; } +.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; } +.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; } +.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; } +.#{$fa-css-prefix}-toggle-down:before, +.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; } +.#{$fa-css-prefix}-toggle-up:before, +.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; } +.#{$fa-css-prefix}-toggle-right:before, +.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; } +.#{$fa-css-prefix}-euro:before, +.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; } +.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; } +.#{$fa-css-prefix}-dollar:before, +.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; } +.#{$fa-css-prefix}-rupee:before, +.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; } +.#{$fa-css-prefix}-cny:before, +.#{$fa-css-prefix}-rmb:before, +.#{$fa-css-prefix}-yen:before, +.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; } +.#{$fa-css-prefix}-ruble:before, +.#{$fa-css-prefix}-rouble:before, +.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; } +.#{$fa-css-prefix}-won:before, +.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; } +.#{$fa-css-prefix}-bitcoin:before, +.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; } +.#{$fa-css-prefix}-file:before { content: $fa-var-file; } +.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; } +.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; } +.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; } +.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; } +.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; } +.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; } +.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; } +.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; } +.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; } +.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; } +.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; } +.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; } +.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; } +.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; } +.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; } +.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; } +.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; } +.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; } +.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; } +.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; } +.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; } +.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; } +.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; } +.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; } +.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; } +.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; } +.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; } +.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; } +.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; } +.#{$fa-css-prefix}-android:before { content: $fa-var-android; } +.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; } +.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; } +.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; } +.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; } +.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; } +.#{$fa-css-prefix}-female:before { content: $fa-var-female; } +.#{$fa-css-prefix}-male:before { content: $fa-var-male; } +.#{$fa-css-prefix}-gittip:before, +.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; } +.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; } +.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; } +.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; } +.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; } +.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; } +.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; } +.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; } +.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; } +.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; } +.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; } +.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; } +.#{$fa-css-prefix}-toggle-left:before, +.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; } +.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; } +.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; } +.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; } +.#{$fa-css-prefix}-turkish-lira:before, +.#{$fa-css-prefix}-try:before { content: $fa-var-try; } +.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; } +.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; } +.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; } +.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; } +.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; } +.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; } +.#{$fa-css-prefix}-institution:before, +.#{$fa-css-prefix}-bank:before, +.#{$fa-css-prefix}-university:before { content: $fa-var-university; } +.#{$fa-css-prefix}-mortar-board:before, +.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; } +.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; } +.#{$fa-css-prefix}-google:before { content: $fa-var-google; } +.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; } +.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; } +.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; } +.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; } +.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; } +.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; } +.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; } +.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; } +.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; } +.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; } +.#{$fa-css-prefix}-language:before { content: $fa-var-language; } +.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; } +.#{$fa-css-prefix}-building:before { content: $fa-var-building; } +.#{$fa-css-prefix}-child:before { content: $fa-var-child; } +.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; } +.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; } +.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; } +.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; } +.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; } +.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; } +.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; } +.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; } +.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; } +.#{$fa-css-prefix}-automobile:before, +.#{$fa-css-prefix}-car:before { content: $fa-var-car; } +.#{$fa-css-prefix}-cab:before, +.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; } +.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; } +.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; } +.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; } +.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; } +.#{$fa-css-prefix}-database:before { content: $fa-var-database; } +.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; } +.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; } +.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; } +.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; } +.#{$fa-css-prefix}-file-photo-o:before, +.#{$fa-css-prefix}-file-picture-o:before, +.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; } +.#{$fa-css-prefix}-file-zip-o:before, +.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; } +.#{$fa-css-prefix}-file-sound-o:before, +.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; } +.#{$fa-css-prefix}-file-movie-o:before, +.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; } +.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; } +.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; } +.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; } +.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; } +.#{$fa-css-prefix}-life-bouy:before, +.#{$fa-css-prefix}-life-buoy:before, +.#{$fa-css-prefix}-life-saver:before, +.#{$fa-css-prefix}-support:before, +.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; } +.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; } +.#{$fa-css-prefix}-ra:before, +.#{$fa-css-prefix}-resistance:before, +.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; } +.#{$fa-css-prefix}-ge:before, +.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; } +.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; } +.#{$fa-css-prefix}-git:before { content: $fa-var-git; } +.#{$fa-css-prefix}-y-combinator-square:before, +.#{$fa-css-prefix}-yc-square:before, +.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; } +.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; } +.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; } +.#{$fa-css-prefix}-wechat:before, +.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; } +.#{$fa-css-prefix}-send:before, +.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; } +.#{$fa-css-prefix}-send-o:before, +.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; } +.#{$fa-css-prefix}-history:before { content: $fa-var-history; } +.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; } +.#{$fa-css-prefix}-header:before { content: $fa-var-header; } +.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; } +.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; } +.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; } +.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; } +.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; } +.#{$fa-css-prefix}-soccer-ball-o:before, +.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; } +.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; } +.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; } +.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; } +.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; } +.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; } +.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; } +.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; } +.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; } +.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; } +.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; } +.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; } +.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; } +.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; } +.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; } +.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; } +.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; } +.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; } +.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; } +.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; } +.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; } +.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; } +.#{$fa-css-prefix}-at:before { content: $fa-var-at; } +.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; } +.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; } +.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; } +.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; } +.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; } +.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; } +.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; } +.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; } +.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; } +.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; } +.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; } +.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; } +.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; } +.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; } +.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; } +.#{$fa-css-prefix}-shekel:before, +.#{$fa-css-prefix}-sheqel:before, +.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; } +.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; } +.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; } +.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; } +.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; } +.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; } +.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; } +.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; } +.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; } +.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; } +.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; } +.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; } +.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; } +.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; } +.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; } +.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; } +.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; } +.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; } +.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; } +.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; } +.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; } +.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; } +.#{$fa-css-prefix}-intersex:before, +.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; } +.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; } +.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; } +.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; } +.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; } +.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; } +.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; } +.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; } +.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; } +.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; } +.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; } +.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; } +.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; } +.#{$fa-css-prefix}-server:before { content: $fa-var-server; } +.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; } +.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; } +.#{$fa-css-prefix}-hotel:before, +.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; } +.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; } +.#{$fa-css-prefix}-train:before { content: $fa-var-train; } +.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; } +.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; } +.#{$fa-css-prefix}-yc:before, +.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; } +.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; } +.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; } +.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; } +.#{$fa-css-prefix}-battery-4:before, +.#{$fa-css-prefix}-battery:before, +.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; } +.#{$fa-css-prefix}-battery-3:before, +.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; } +.#{$fa-css-prefix}-battery-2:before, +.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; } +.#{$fa-css-prefix}-battery-1:before, +.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; } +.#{$fa-css-prefix}-battery-0:before, +.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; } +.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; } +.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; } +.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; } +.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; } +.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; } +.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; } +.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; } +.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; } +.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; } +.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; } +.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; } +.#{$fa-css-prefix}-hourglass-1:before, +.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; } +.#{$fa-css-prefix}-hourglass-2:before, +.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; } +.#{$fa-css-prefix}-hourglass-3:before, +.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; } +.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; } +.#{$fa-css-prefix}-hand-grab-o:before, +.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; } +.#{$fa-css-prefix}-hand-stop-o:before, +.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; } +.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; } +.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; } +.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; } +.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; } +.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; } +.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; } +.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; } +.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; } +.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; } +.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; } +.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; } +.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; } +.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; } +.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; } +.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; } +.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; } +.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; } +.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; } +.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; } +.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; } +.#{$fa-css-prefix}-tv:before, +.#{$fa-css-prefix}-television:before { content: $fa-var-television; } +.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; } +.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; } +.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; } +.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; } +.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; } +.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; } +.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; } +.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; } +.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; } +.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; } +.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; } +.#{$fa-css-prefix}-map:before { content: $fa-var-map; } +.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; } +.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; } +.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; } +.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; } +.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; } +.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; } +.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; } +.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; } +.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; } +.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; } +.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; } +.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; } +.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; } +.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; } +.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; } +.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; } +.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; } +.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; } +.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; } +.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; } +.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; } +.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; } +.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; } +.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; } +.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; } +.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; } +.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; } +.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; } +.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; } +.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; } +.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; } +.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; } +.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; } +.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; } +.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; } +.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; } +.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; } +.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; } +.#{$fa-css-prefix}-asl-interpreting:before, +.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; } +.#{$fa-css-prefix}-deafness:before, +.#{$fa-css-prefix}-hard-of-hearing:before, +.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; } +.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; } +.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; } +.#{$fa-css-prefix}-signing:before, +.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; } +.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; } +.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; } +.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; } +.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; } +.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; } +.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; } +.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; } +.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; } +.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; } +.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; } +.#{$fa-css-prefix}-google-plus-circle:before, +.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; } +.#{$fa-css-prefix}-fa:before, +.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; } +.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; } +.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; } +.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; } +.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; } +.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; } +.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; } +.#{$fa-css-prefix}-vcard:before, +.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; } +.#{$fa-css-prefix}-vcard-o:before, +.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; } +.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; } +.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; } +.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; } +.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; } +.#{$fa-css-prefix}-drivers-license:before, +.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; } +.#{$fa-css-prefix}-drivers-license-o:before, +.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; } +.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; } +.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; } +.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; } +.#{$fa-css-prefix}-thermometer-4:before, +.#{$fa-css-prefix}-thermometer:before, +.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; } +.#{$fa-css-prefix}-thermometer-3:before, +.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; } +.#{$fa-css-prefix}-thermometer-2:before, +.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; } +.#{$fa-css-prefix}-thermometer-1:before, +.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; } +.#{$fa-css-prefix}-thermometer-0:before, +.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; } +.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; } +.#{$fa-css-prefix}-bathtub:before, +.#{$fa-css-prefix}-s15:before, +.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; } +.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; } +.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; } +.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; } +.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; } +.#{$fa-css-prefix}-times-rectangle:before, +.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; } +.#{$fa-css-prefix}-times-rectangle-o:before, +.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; } +.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; } +.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; } +.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; } +.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; } +.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; } +.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; } +.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; } +.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; } +.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; } +.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; } +.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; } diff --git a/public/admin/view/javascript/font-awesome/scss/_larger.scss b/public/admin/view/javascript/font-awesome/scss/_larger.scss new file mode 100644 index 0000000..41e9a81 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_larger.scss @@ -0,0 +1,13 @@ +// Icon Sizes +// ------------------------- + +/* makes the font 33% larger relative to the icon container */ +.#{$fa-css-prefix}-lg { + font-size: (4em / 3); + line-height: (3em / 4); + vertical-align: -15%; +} +.#{$fa-css-prefix}-2x { font-size: 2em; } +.#{$fa-css-prefix}-3x { font-size: 3em; } +.#{$fa-css-prefix}-4x { font-size: 4em; } +.#{$fa-css-prefix}-5x { font-size: 5em; } diff --git a/public/admin/view/javascript/font-awesome/scss/_list.scss b/public/admin/view/javascript/font-awesome/scss/_list.scss new file mode 100644 index 0000000..7d1e4d5 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_list.scss @@ -0,0 +1,19 @@ +// List Icons +// ------------------------- + +.#{$fa-css-prefix}-ul { + padding-left: 0; + margin-left: $fa-li-width; + list-style-type: none; + > li { position: relative; } +} +.#{$fa-css-prefix}-li { + position: absolute; + left: -$fa-li-width; + width: $fa-li-width; + top: (2em / 14); + text-align: center; + &.#{$fa-css-prefix}-lg { + left: -$fa-li-width + (4em / 14); + } +} diff --git a/public/admin/view/javascript/font-awesome/scss/_mixins.scss b/public/admin/view/javascript/font-awesome/scss/_mixins.scss new file mode 100644 index 0000000..c3bbd57 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_mixins.scss @@ -0,0 +1,60 @@ +// Mixins +// -------------------------- + +@mixin fa-icon() { + display: inline-block; + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} + +@mixin fa-icon-rotate($degrees, $rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; + -webkit-transform: rotate($degrees); + -ms-transform: rotate($degrees); + transform: rotate($degrees); +} + +@mixin fa-icon-flip($horiz, $vert, $rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; + -webkit-transform: scale($horiz, $vert); + -ms-transform: scale($horiz, $vert); + transform: scale($horiz, $vert); +} + + +// Only display content to screen readers. A la Bootstrap 4. +// +// See: http://a11yproject.com/posts/how-to-hide-content/ + +@mixin sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// Use in conjunction with .sr-only to only display content when it's focused. +// +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 +// +// Credit: HTML5 Boilerplate + +@mixin sr-only-focusable { + &:active, + &:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} diff --git a/public/admin/view/javascript/font-awesome/scss/_path.scss b/public/admin/view/javascript/font-awesome/scss/_path.scss new file mode 100644 index 0000000..bb457c2 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_path.scss @@ -0,0 +1,15 @@ +/* FONT PATH + * -------------------------- */ + +@font-face { + font-family: 'FontAwesome'; + src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); + src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), + url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), + url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), + url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), + url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); +// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts + font-weight: normal; + font-style: normal; +} diff --git a/public/admin/view/javascript/font-awesome/scss/_rotated-flipped.scss b/public/admin/view/javascript/font-awesome/scss/_rotated-flipped.scss new file mode 100644 index 0000000..a3558fd --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_rotated-flipped.scss @@ -0,0 +1,20 @@ +// Rotated & Flipped Icons +// ------------------------- + +.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } +.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } +.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } + +.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } +.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } + +// Hook for IE8-9 +// ------------------------- + +:root .#{$fa-css-prefix}-rotate-90, +:root .#{$fa-css-prefix}-rotate-180, +:root .#{$fa-css-prefix}-rotate-270, +:root .#{$fa-css-prefix}-flip-horizontal, +:root .#{$fa-css-prefix}-flip-vertical { + filter: none; +} diff --git a/public/admin/view/javascript/font-awesome/scss/_screen-reader.scss b/public/admin/view/javascript/font-awesome/scss/_screen-reader.scss new file mode 100644 index 0000000..637426f --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_screen-reader.scss @@ -0,0 +1,5 @@ +// Screen Readers +// ------------------------- + +.sr-only { @include sr-only(); } +.sr-only-focusable { @include sr-only-focusable(); } diff --git a/public/admin/view/javascript/font-awesome/scss/_stacked.scss b/public/admin/view/javascript/font-awesome/scss/_stacked.scss new file mode 100644 index 0000000..aef7403 --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_stacked.scss @@ -0,0 +1,20 @@ +// Stacked Icons +// ------------------------- + +.#{$fa-css-prefix}-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.#{$fa-css-prefix}-stack-1x { line-height: inherit; } +.#{$fa-css-prefix}-stack-2x { font-size: 2em; } +.#{$fa-css-prefix}-inverse { color: $fa-inverse; } diff --git a/public/admin/view/javascript/font-awesome/scss/_variables.scss b/public/admin/view/javascript/font-awesome/scss/_variables.scss new file mode 100644 index 0000000..498fc4a --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/_variables.scss @@ -0,0 +1,800 @@ +// Variables +// -------------------------- + +$fa-font-path: "../fonts" !default; +$fa-font-size-base: 14px !default; +$fa-line-height-base: 1 !default; +//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly +$fa-css-prefix: fa !default; +$fa-version: "4.7.0" !default; +$fa-border-color: #eee !default; +$fa-inverse: #fff !default; +$fa-li-width: (30em / 14) !default; + +$fa-var-500px: "\f26e"; +$fa-var-address-book: "\f2b9"; +$fa-var-address-book-o: "\f2ba"; +$fa-var-address-card: "\f2bb"; +$fa-var-address-card-o: "\f2bc"; +$fa-var-adjust: "\f042"; +$fa-var-adn: "\f170"; +$fa-var-align-center: "\f037"; +$fa-var-align-justify: "\f039"; +$fa-var-align-left: "\f036"; +$fa-var-align-right: "\f038"; +$fa-var-amazon: "\f270"; +$fa-var-ambulance: "\f0f9"; +$fa-var-american-sign-language-interpreting: "\f2a3"; +$fa-var-anchor: "\f13d"; +$fa-var-android: "\f17b"; +$fa-var-angellist: "\f209"; +$fa-var-angle-double-down: "\f103"; +$fa-var-angle-double-left: "\f100"; +$fa-var-angle-double-right: "\f101"; +$fa-var-angle-double-up: "\f102"; +$fa-var-angle-down: "\f107"; +$fa-var-angle-left: "\f104"; +$fa-var-angle-right: "\f105"; +$fa-var-angle-up: "\f106"; +$fa-var-apple: "\f179"; +$fa-var-archive: "\f187"; +$fa-var-area-chart: "\f1fe"; +$fa-var-arrow-circle-down: "\f0ab"; +$fa-var-arrow-circle-left: "\f0a8"; +$fa-var-arrow-circle-o-down: "\f01a"; +$fa-var-arrow-circle-o-left: "\f190"; +$fa-var-arrow-circle-o-right: "\f18e"; +$fa-var-arrow-circle-o-up: "\f01b"; +$fa-var-arrow-circle-right: "\f0a9"; +$fa-var-arrow-circle-up: "\f0aa"; +$fa-var-arrow-down: "\f063"; +$fa-var-arrow-left: "\f060"; +$fa-var-arrow-right: "\f061"; +$fa-var-arrow-up: "\f062"; +$fa-var-arrows: "\f047"; +$fa-var-arrows-alt: "\f0b2"; +$fa-var-arrows-h: "\f07e"; +$fa-var-arrows-v: "\f07d"; +$fa-var-asl-interpreting: "\f2a3"; +$fa-var-assistive-listening-systems: "\f2a2"; +$fa-var-asterisk: "\f069"; +$fa-var-at: "\f1fa"; +$fa-var-audio-description: "\f29e"; +$fa-var-automobile: "\f1b9"; +$fa-var-backward: "\f04a"; +$fa-var-balance-scale: "\f24e"; +$fa-var-ban: "\f05e"; +$fa-var-bandcamp: "\f2d5"; +$fa-var-bank: "\f19c"; +$fa-var-bar-chart: "\f080"; +$fa-var-bar-chart-o: "\f080"; +$fa-var-barcode: "\f02a"; +$fa-var-bars: "\f0c9"; +$fa-var-bath: "\f2cd"; +$fa-var-bathtub: "\f2cd"; +$fa-var-battery: "\f240"; +$fa-var-battery-0: "\f244"; +$fa-var-battery-1: "\f243"; +$fa-var-battery-2: "\f242"; +$fa-var-battery-3: "\f241"; +$fa-var-battery-4: "\f240"; +$fa-var-battery-empty: "\f244"; +$fa-var-battery-full: "\f240"; +$fa-var-battery-half: "\f242"; +$fa-var-battery-quarter: "\f243"; +$fa-var-battery-three-quarters: "\f241"; +$fa-var-bed: "\f236"; +$fa-var-beer: "\f0fc"; +$fa-var-behance: "\f1b4"; +$fa-var-behance-square: "\f1b5"; +$fa-var-bell: "\f0f3"; +$fa-var-bell-o: "\f0a2"; +$fa-var-bell-slash: "\f1f6"; +$fa-var-bell-slash-o: "\f1f7"; +$fa-var-bicycle: "\f206"; +$fa-var-binoculars: "\f1e5"; +$fa-var-birthday-cake: "\f1fd"; +$fa-var-bitbucket: "\f171"; +$fa-var-bitbucket-square: "\f172"; +$fa-var-bitcoin: "\f15a"; +$fa-var-black-tie: "\f27e"; +$fa-var-blind: "\f29d"; +$fa-var-bluetooth: "\f293"; +$fa-var-bluetooth-b: "\f294"; +$fa-var-bold: "\f032"; +$fa-var-bolt: "\f0e7"; +$fa-var-bomb: "\f1e2"; +$fa-var-book: "\f02d"; +$fa-var-bookmark: "\f02e"; +$fa-var-bookmark-o: "\f097"; +$fa-var-braille: "\f2a1"; +$fa-var-briefcase: "\f0b1"; +$fa-var-btc: "\f15a"; +$fa-var-bug: "\f188"; +$fa-var-building: "\f1ad"; +$fa-var-building-o: "\f0f7"; +$fa-var-bullhorn: "\f0a1"; +$fa-var-bullseye: "\f140"; +$fa-var-bus: "\f207"; +$fa-var-buysellads: "\f20d"; +$fa-var-cab: "\f1ba"; +$fa-var-calculator: "\f1ec"; +$fa-var-calendar: "\f073"; +$fa-var-calendar-check-o: "\f274"; +$fa-var-calendar-minus-o: "\f272"; +$fa-var-calendar-o: "\f133"; +$fa-var-calendar-plus-o: "\f271"; +$fa-var-calendar-times-o: "\f273"; +$fa-var-camera: "\f030"; +$fa-var-camera-retro: "\f083"; +$fa-var-car: "\f1b9"; +$fa-var-caret-down: "\f0d7"; +$fa-var-caret-left: "\f0d9"; +$fa-var-caret-right: "\f0da"; +$fa-var-caret-square-o-down: "\f150"; +$fa-var-caret-square-o-left: "\f191"; +$fa-var-caret-square-o-right: "\f152"; +$fa-var-caret-square-o-up: "\f151"; +$fa-var-caret-up: "\f0d8"; +$fa-var-cart-arrow-down: "\f218"; +$fa-var-cart-plus: "\f217"; +$fa-var-cc: "\f20a"; +$fa-var-cc-amex: "\f1f3"; +$fa-var-cc-diners-club: "\f24c"; +$fa-var-cc-discover: "\f1f2"; +$fa-var-cc-jcb: "\f24b"; +$fa-var-cc-mastercard: "\f1f1"; +$fa-var-cc-paypal: "\f1f4"; +$fa-var-cc-stripe: "\f1f5"; +$fa-var-cc-visa: "\f1f0"; +$fa-var-certificate: "\f0a3"; +$fa-var-chain: "\f0c1"; +$fa-var-chain-broken: "\f127"; +$fa-var-check: "\f00c"; +$fa-var-check-circle: "\f058"; +$fa-var-check-circle-o: "\f05d"; +$fa-var-check-square: "\f14a"; +$fa-var-check-square-o: "\f046"; +$fa-var-chevron-circle-down: "\f13a"; +$fa-var-chevron-circle-left: "\f137"; +$fa-var-chevron-circle-right: "\f138"; +$fa-var-chevron-circle-up: "\f139"; +$fa-var-chevron-down: "\f078"; +$fa-var-chevron-left: "\f053"; +$fa-var-chevron-right: "\f054"; +$fa-var-chevron-up: "\f077"; +$fa-var-child: "\f1ae"; +$fa-var-chrome: "\f268"; +$fa-var-circle: "\f111"; +$fa-var-circle-o: "\f10c"; +$fa-var-circle-o-notch: "\f1ce"; +$fa-var-circle-thin: "\f1db"; +$fa-var-clipboard: "\f0ea"; +$fa-var-clock-o: "\f017"; +$fa-var-clone: "\f24d"; +$fa-var-close: "\f00d"; +$fa-var-cloud: "\f0c2"; +$fa-var-cloud-download: "\f0ed"; +$fa-var-cloud-upload: "\f0ee"; +$fa-var-cny: "\f157"; +$fa-var-code: "\f121"; +$fa-var-code-fork: "\f126"; +$fa-var-codepen: "\f1cb"; +$fa-var-codiepie: "\f284"; +$fa-var-coffee: "\f0f4"; +$fa-var-cog: "\f013"; +$fa-var-cogs: "\f085"; +$fa-var-columns: "\f0db"; +$fa-var-comment: "\f075"; +$fa-var-comment-o: "\f0e5"; +$fa-var-commenting: "\f27a"; +$fa-var-commenting-o: "\f27b"; +$fa-var-comments: "\f086"; +$fa-var-comments-o: "\f0e6"; +$fa-var-compass: "\f14e"; +$fa-var-compress: "\f066"; +$fa-var-connectdevelop: "\f20e"; +$fa-var-contao: "\f26d"; +$fa-var-copy: "\f0c5"; +$fa-var-copyright: "\f1f9"; +$fa-var-creative-commons: "\f25e"; +$fa-var-credit-card: "\f09d"; +$fa-var-credit-card-alt: "\f283"; +$fa-var-crop: "\f125"; +$fa-var-crosshairs: "\f05b"; +$fa-var-css3: "\f13c"; +$fa-var-cube: "\f1b2"; +$fa-var-cubes: "\f1b3"; +$fa-var-cut: "\f0c4"; +$fa-var-cutlery: "\f0f5"; +$fa-var-dashboard: "\f0e4"; +$fa-var-dashcube: "\f210"; +$fa-var-database: "\f1c0"; +$fa-var-deaf: "\f2a4"; +$fa-var-deafness: "\f2a4"; +$fa-var-dedent: "\f03b"; +$fa-var-delicious: "\f1a5"; +$fa-var-desktop: "\f108"; +$fa-var-deviantart: "\f1bd"; +$fa-var-diamond: "\f219"; +$fa-var-digg: "\f1a6"; +$fa-var-dollar: "\f155"; +$fa-var-dot-circle-o: "\f192"; +$fa-var-download: "\f019"; +$fa-var-dribbble: "\f17d"; +$fa-var-drivers-license: "\f2c2"; +$fa-var-drivers-license-o: "\f2c3"; +$fa-var-dropbox: "\f16b"; +$fa-var-drupal: "\f1a9"; +$fa-var-edge: "\f282"; +$fa-var-edit: "\f044"; +$fa-var-eercast: "\f2da"; +$fa-var-eject: "\f052"; +$fa-var-ellipsis-h: "\f141"; +$fa-var-ellipsis-v: "\f142"; +$fa-var-empire: "\f1d1"; +$fa-var-envelope: "\f0e0"; +$fa-var-envelope-o: "\f003"; +$fa-var-envelope-open: "\f2b6"; +$fa-var-envelope-open-o: "\f2b7"; +$fa-var-envelope-square: "\f199"; +$fa-var-envira: "\f299"; +$fa-var-eraser: "\f12d"; +$fa-var-etsy: "\f2d7"; +$fa-var-eur: "\f153"; +$fa-var-euro: "\f153"; +$fa-var-exchange: "\f0ec"; +$fa-var-exclamation: "\f12a"; +$fa-var-exclamation-circle: "\f06a"; +$fa-var-exclamation-triangle: "\f071"; +$fa-var-expand: "\f065"; +$fa-var-expeditedssl: "\f23e"; +$fa-var-external-link: "\f08e"; +$fa-var-external-link-square: "\f14c"; +$fa-var-eye: "\f06e"; +$fa-var-eye-slash: "\f070"; +$fa-var-eyedropper: "\f1fb"; +$fa-var-fa: "\f2b4"; +$fa-var-facebook: "\f09a"; +$fa-var-facebook-f: "\f09a"; +$fa-var-facebook-official: "\f230"; +$fa-var-facebook-square: "\f082"; +$fa-var-fast-backward: "\f049"; +$fa-var-fast-forward: "\f050"; +$fa-var-fax: "\f1ac"; +$fa-var-feed: "\f09e"; +$fa-var-female: "\f182"; +$fa-var-fighter-jet: "\f0fb"; +$fa-var-file: "\f15b"; +$fa-var-file-archive-o: "\f1c6"; +$fa-var-file-audio-o: "\f1c7"; +$fa-var-file-code-o: "\f1c9"; +$fa-var-file-excel-o: "\f1c3"; +$fa-var-file-image-o: "\f1c5"; +$fa-var-file-movie-o: "\f1c8"; +$fa-var-file-o: "\f016"; +$fa-var-file-pdf-o: "\f1c1"; +$fa-var-file-photo-o: "\f1c5"; +$fa-var-file-picture-o: "\f1c5"; +$fa-var-file-powerpoint-o: "\f1c4"; +$fa-var-file-sound-o: "\f1c7"; +$fa-var-file-text: "\f15c"; +$fa-var-file-text-o: "\f0f6"; +$fa-var-file-video-o: "\f1c8"; +$fa-var-file-word-o: "\f1c2"; +$fa-var-file-zip-o: "\f1c6"; +$fa-var-files-o: "\f0c5"; +$fa-var-film: "\f008"; +$fa-var-filter: "\f0b0"; +$fa-var-fire: "\f06d"; +$fa-var-fire-extinguisher: "\f134"; +$fa-var-firefox: "\f269"; +$fa-var-first-order: "\f2b0"; +$fa-var-flag: "\f024"; +$fa-var-flag-checkered: "\f11e"; +$fa-var-flag-o: "\f11d"; +$fa-var-flash: "\f0e7"; +$fa-var-flask: "\f0c3"; +$fa-var-flickr: "\f16e"; +$fa-var-floppy-o: "\f0c7"; +$fa-var-folder: "\f07b"; +$fa-var-folder-o: "\f114"; +$fa-var-folder-open: "\f07c"; +$fa-var-folder-open-o: "\f115"; +$fa-var-font: "\f031"; +$fa-var-font-awesome: "\f2b4"; +$fa-var-fonticons: "\f280"; +$fa-var-fort-awesome: "\f286"; +$fa-var-forumbee: "\f211"; +$fa-var-forward: "\f04e"; +$fa-var-foursquare: "\f180"; +$fa-var-free-code-camp: "\f2c5"; +$fa-var-frown-o: "\f119"; +$fa-var-futbol-o: "\f1e3"; +$fa-var-gamepad: "\f11b"; +$fa-var-gavel: "\f0e3"; +$fa-var-gbp: "\f154"; +$fa-var-ge: "\f1d1"; +$fa-var-gear: "\f013"; +$fa-var-gears: "\f085"; +$fa-var-genderless: "\f22d"; +$fa-var-get-pocket: "\f265"; +$fa-var-gg: "\f260"; +$fa-var-gg-circle: "\f261"; +$fa-var-gift: "\f06b"; +$fa-var-git: "\f1d3"; +$fa-var-git-square: "\f1d2"; +$fa-var-github: "\f09b"; +$fa-var-github-alt: "\f113"; +$fa-var-github-square: "\f092"; +$fa-var-gitlab: "\f296"; +$fa-var-gittip: "\f184"; +$fa-var-glass: "\f000"; +$fa-var-glide: "\f2a5"; +$fa-var-glide-g: "\f2a6"; +$fa-var-globe: "\f0ac"; +$fa-var-google: "\f1a0"; +$fa-var-google-plus: "\f0d5"; +$fa-var-google-plus-circle: "\f2b3"; +$fa-var-google-plus-official: "\f2b3"; +$fa-var-google-plus-square: "\f0d4"; +$fa-var-google-wallet: "\f1ee"; +$fa-var-graduation-cap: "\f19d"; +$fa-var-gratipay: "\f184"; +$fa-var-grav: "\f2d6"; +$fa-var-group: "\f0c0"; +$fa-var-h-square: "\f0fd"; +$fa-var-hacker-news: "\f1d4"; +$fa-var-hand-grab-o: "\f255"; +$fa-var-hand-lizard-o: "\f258"; +$fa-var-hand-o-down: "\f0a7"; +$fa-var-hand-o-left: "\f0a5"; +$fa-var-hand-o-right: "\f0a4"; +$fa-var-hand-o-up: "\f0a6"; +$fa-var-hand-paper-o: "\f256"; +$fa-var-hand-peace-o: "\f25b"; +$fa-var-hand-pointer-o: "\f25a"; +$fa-var-hand-rock-o: "\f255"; +$fa-var-hand-scissors-o: "\f257"; +$fa-var-hand-spock-o: "\f259"; +$fa-var-hand-stop-o: "\f256"; +$fa-var-handshake-o: "\f2b5"; +$fa-var-hard-of-hearing: "\f2a4"; +$fa-var-hashtag: "\f292"; +$fa-var-hdd-o: "\f0a0"; +$fa-var-header: "\f1dc"; +$fa-var-headphones: "\f025"; +$fa-var-heart: "\f004"; +$fa-var-heart-o: "\f08a"; +$fa-var-heartbeat: "\f21e"; +$fa-var-history: "\f1da"; +$fa-var-home: "\f015"; +$fa-var-hospital-o: "\f0f8"; +$fa-var-hotel: "\f236"; +$fa-var-hourglass: "\f254"; +$fa-var-hourglass-1: "\f251"; +$fa-var-hourglass-2: "\f252"; +$fa-var-hourglass-3: "\f253"; +$fa-var-hourglass-end: "\f253"; +$fa-var-hourglass-half: "\f252"; +$fa-var-hourglass-o: "\f250"; +$fa-var-hourglass-start: "\f251"; +$fa-var-houzz: "\f27c"; +$fa-var-html5: "\f13b"; +$fa-var-i-cursor: "\f246"; +$fa-var-id-badge: "\f2c1"; +$fa-var-id-card: "\f2c2"; +$fa-var-id-card-o: "\f2c3"; +$fa-var-ils: "\f20b"; +$fa-var-image: "\f03e"; +$fa-var-imdb: "\f2d8"; +$fa-var-inbox: "\f01c"; +$fa-var-indent: "\f03c"; +$fa-var-industry: "\f275"; +$fa-var-info: "\f129"; +$fa-var-info-circle: "\f05a"; +$fa-var-inr: "\f156"; +$fa-var-instagram: "\f16d"; +$fa-var-institution: "\f19c"; +$fa-var-internet-explorer: "\f26b"; +$fa-var-intersex: "\f224"; +$fa-var-ioxhost: "\f208"; +$fa-var-italic: "\f033"; +$fa-var-joomla: "\f1aa"; +$fa-var-jpy: "\f157"; +$fa-var-jsfiddle: "\f1cc"; +$fa-var-key: "\f084"; +$fa-var-keyboard-o: "\f11c"; +$fa-var-krw: "\f159"; +$fa-var-language: "\f1ab"; +$fa-var-laptop: "\f109"; +$fa-var-lastfm: "\f202"; +$fa-var-lastfm-square: "\f203"; +$fa-var-leaf: "\f06c"; +$fa-var-leanpub: "\f212"; +$fa-var-legal: "\f0e3"; +$fa-var-lemon-o: "\f094"; +$fa-var-level-down: "\f149"; +$fa-var-level-up: "\f148"; +$fa-var-life-bouy: "\f1cd"; +$fa-var-life-buoy: "\f1cd"; +$fa-var-life-ring: "\f1cd"; +$fa-var-life-saver: "\f1cd"; +$fa-var-lightbulb-o: "\f0eb"; +$fa-var-line-chart: "\f201"; +$fa-var-link: "\f0c1"; +$fa-var-linkedin: "\f0e1"; +$fa-var-linkedin-square: "\f08c"; +$fa-var-linode: "\f2b8"; +$fa-var-linux: "\f17c"; +$fa-var-list: "\f03a"; +$fa-var-list-alt: "\f022"; +$fa-var-list-ol: "\f0cb"; +$fa-var-list-ul: "\f0ca"; +$fa-var-location-arrow: "\f124"; +$fa-var-lock: "\f023"; +$fa-var-long-arrow-down: "\f175"; +$fa-var-long-arrow-left: "\f177"; +$fa-var-long-arrow-right: "\f178"; +$fa-var-long-arrow-up: "\f176"; +$fa-var-low-vision: "\f2a8"; +$fa-var-magic: "\f0d0"; +$fa-var-magnet: "\f076"; +$fa-var-mail-forward: "\f064"; +$fa-var-mail-reply: "\f112"; +$fa-var-mail-reply-all: "\f122"; +$fa-var-male: "\f183"; +$fa-var-map: "\f279"; +$fa-var-map-marker: "\f041"; +$fa-var-map-o: "\f278"; +$fa-var-map-pin: "\f276"; +$fa-var-map-signs: "\f277"; +$fa-var-mars: "\f222"; +$fa-var-mars-double: "\f227"; +$fa-var-mars-stroke: "\f229"; +$fa-var-mars-stroke-h: "\f22b"; +$fa-var-mars-stroke-v: "\f22a"; +$fa-var-maxcdn: "\f136"; +$fa-var-meanpath: "\f20c"; +$fa-var-medium: "\f23a"; +$fa-var-medkit: "\f0fa"; +$fa-var-meetup: "\f2e0"; +$fa-var-meh-o: "\f11a"; +$fa-var-mercury: "\f223"; +$fa-var-microchip: "\f2db"; +$fa-var-microphone: "\f130"; +$fa-var-microphone-slash: "\f131"; +$fa-var-minus: "\f068"; +$fa-var-minus-circle: "\f056"; +$fa-var-minus-square: "\f146"; +$fa-var-minus-square-o: "\f147"; +$fa-var-mixcloud: "\f289"; +$fa-var-mobile: "\f10b"; +$fa-var-mobile-phone: "\f10b"; +$fa-var-modx: "\f285"; +$fa-var-money: "\f0d6"; +$fa-var-moon-o: "\f186"; +$fa-var-mortar-board: "\f19d"; +$fa-var-motorcycle: "\f21c"; +$fa-var-mouse-pointer: "\f245"; +$fa-var-music: "\f001"; +$fa-var-navicon: "\f0c9"; +$fa-var-neuter: "\f22c"; +$fa-var-newspaper-o: "\f1ea"; +$fa-var-object-group: "\f247"; +$fa-var-object-ungroup: "\f248"; +$fa-var-odnoklassniki: "\f263"; +$fa-var-odnoklassniki-square: "\f264"; +$fa-var-opencart: "\f23d"; +$fa-var-openid: "\f19b"; +$fa-var-opera: "\f26a"; +$fa-var-optin-monster: "\f23c"; +$fa-var-outdent: "\f03b"; +$fa-var-pagelines: "\f18c"; +$fa-var-paint-brush: "\f1fc"; +$fa-var-paper-plane: "\f1d8"; +$fa-var-paper-plane-o: "\f1d9"; +$fa-var-paperclip: "\f0c6"; +$fa-var-paragraph: "\f1dd"; +$fa-var-paste: "\f0ea"; +$fa-var-pause: "\f04c"; +$fa-var-pause-circle: "\f28b"; +$fa-var-pause-circle-o: "\f28c"; +$fa-var-paw: "\f1b0"; +$fa-var-paypal: "\f1ed"; +$fa-var-pencil: "\f040"; +$fa-var-pencil-square: "\f14b"; +$fa-var-pencil-square-o: "\f044"; +$fa-var-percent: "\f295"; +$fa-var-phone: "\f095"; +$fa-var-phone-square: "\f098"; +$fa-var-photo: "\f03e"; +$fa-var-picture-o: "\f03e"; +$fa-var-pie-chart: "\f200"; +$fa-var-pied-piper: "\f2ae"; +$fa-var-pied-piper-alt: "\f1a8"; +$fa-var-pied-piper-pp: "\f1a7"; +$fa-var-pinterest: "\f0d2"; +$fa-var-pinterest-p: "\f231"; +$fa-var-pinterest-square: "\f0d3"; +$fa-var-plane: "\f072"; +$fa-var-play: "\f04b"; +$fa-var-play-circle: "\f144"; +$fa-var-play-circle-o: "\f01d"; +$fa-var-plug: "\f1e6"; +$fa-var-plus: "\f067"; +$fa-var-plus-circle: "\f055"; +$fa-var-plus-square: "\f0fe"; +$fa-var-plus-square-o: "\f196"; +$fa-var-podcast: "\f2ce"; +$fa-var-power-off: "\f011"; +$fa-var-print: "\f02f"; +$fa-var-product-hunt: "\f288"; +$fa-var-puzzle-piece: "\f12e"; +$fa-var-qq: "\f1d6"; +$fa-var-qrcode: "\f029"; +$fa-var-question: "\f128"; +$fa-var-question-circle: "\f059"; +$fa-var-question-circle-o: "\f29c"; +$fa-var-quora: "\f2c4"; +$fa-var-quote-left: "\f10d"; +$fa-var-quote-right: "\f10e"; +$fa-var-ra: "\f1d0"; +$fa-var-random: "\f074"; +$fa-var-ravelry: "\f2d9"; +$fa-var-rebel: "\f1d0"; +$fa-var-recycle: "\f1b8"; +$fa-var-reddit: "\f1a1"; +$fa-var-reddit-alien: "\f281"; +$fa-var-reddit-square: "\f1a2"; +$fa-var-refresh: "\f021"; +$fa-var-registered: "\f25d"; +$fa-var-remove: "\f00d"; +$fa-var-renren: "\f18b"; +$fa-var-reorder: "\f0c9"; +$fa-var-repeat: "\f01e"; +$fa-var-reply: "\f112"; +$fa-var-reply-all: "\f122"; +$fa-var-resistance: "\f1d0"; +$fa-var-retweet: "\f079"; +$fa-var-rmb: "\f157"; +$fa-var-road: "\f018"; +$fa-var-rocket: "\f135"; +$fa-var-rotate-left: "\f0e2"; +$fa-var-rotate-right: "\f01e"; +$fa-var-rouble: "\f158"; +$fa-var-rss: "\f09e"; +$fa-var-rss-square: "\f143"; +$fa-var-rub: "\f158"; +$fa-var-ruble: "\f158"; +$fa-var-rupee: "\f156"; +$fa-var-s15: "\f2cd"; +$fa-var-safari: "\f267"; +$fa-var-save: "\f0c7"; +$fa-var-scissors: "\f0c4"; +$fa-var-scribd: "\f28a"; +$fa-var-search: "\f002"; +$fa-var-search-minus: "\f010"; +$fa-var-search-plus: "\f00e"; +$fa-var-sellsy: "\f213"; +$fa-var-send: "\f1d8"; +$fa-var-send-o: "\f1d9"; +$fa-var-server: "\f233"; +$fa-var-share: "\f064"; +$fa-var-share-alt: "\f1e0"; +$fa-var-share-alt-square: "\f1e1"; +$fa-var-share-square: "\f14d"; +$fa-var-share-square-o: "\f045"; +$fa-var-shekel: "\f20b"; +$fa-var-sheqel: "\f20b"; +$fa-var-shield: "\f132"; +$fa-var-ship: "\f21a"; +$fa-var-shirtsinbulk: "\f214"; +$fa-var-shopping-bag: "\f290"; +$fa-var-shopping-basket: "\f291"; +$fa-var-shopping-cart: "\f07a"; +$fa-var-shower: "\f2cc"; +$fa-var-sign-in: "\f090"; +$fa-var-sign-language: "\f2a7"; +$fa-var-sign-out: "\f08b"; +$fa-var-signal: "\f012"; +$fa-var-signing: "\f2a7"; +$fa-var-simplybuilt: "\f215"; +$fa-var-sitemap: "\f0e8"; +$fa-var-skyatlas: "\f216"; +$fa-var-skype: "\f17e"; +$fa-var-slack: "\f198"; +$fa-var-sliders: "\f1de"; +$fa-var-slideshare: "\f1e7"; +$fa-var-smile-o: "\f118"; +$fa-var-snapchat: "\f2ab"; +$fa-var-snapchat-ghost: "\f2ac"; +$fa-var-snapchat-square: "\f2ad"; +$fa-var-snowflake-o: "\f2dc"; +$fa-var-soccer-ball-o: "\f1e3"; +$fa-var-sort: "\f0dc"; +$fa-var-sort-alpha-asc: "\f15d"; +$fa-var-sort-alpha-desc: "\f15e"; +$fa-var-sort-amount-asc: "\f160"; +$fa-var-sort-amount-desc: "\f161"; +$fa-var-sort-asc: "\f0de"; +$fa-var-sort-desc: "\f0dd"; +$fa-var-sort-down: "\f0dd"; +$fa-var-sort-numeric-asc: "\f162"; +$fa-var-sort-numeric-desc: "\f163"; +$fa-var-sort-up: "\f0de"; +$fa-var-soundcloud: "\f1be"; +$fa-var-space-shuttle: "\f197"; +$fa-var-spinner: "\f110"; +$fa-var-spoon: "\f1b1"; +$fa-var-spotify: "\f1bc"; +$fa-var-square: "\f0c8"; +$fa-var-square-o: "\f096"; +$fa-var-stack-exchange: "\f18d"; +$fa-var-stack-overflow: "\f16c"; +$fa-var-star: "\f005"; +$fa-var-star-half: "\f089"; +$fa-var-star-half-empty: "\f123"; +$fa-var-star-half-full: "\f123"; +$fa-var-star-half-o: "\f123"; +$fa-var-star-o: "\f006"; +$fa-var-steam: "\f1b6"; +$fa-var-steam-square: "\f1b7"; +$fa-var-step-backward: "\f048"; +$fa-var-step-forward: "\f051"; +$fa-var-stethoscope: "\f0f1"; +$fa-var-sticky-note: "\f249"; +$fa-var-sticky-note-o: "\f24a"; +$fa-var-stop: "\f04d"; +$fa-var-stop-circle: "\f28d"; +$fa-var-stop-circle-o: "\f28e"; +$fa-var-street-view: "\f21d"; +$fa-var-strikethrough: "\f0cc"; +$fa-var-stumbleupon: "\f1a4"; +$fa-var-stumbleupon-circle: "\f1a3"; +$fa-var-subscript: "\f12c"; +$fa-var-subway: "\f239"; +$fa-var-suitcase: "\f0f2"; +$fa-var-sun-o: "\f185"; +$fa-var-superpowers: "\f2dd"; +$fa-var-superscript: "\f12b"; +$fa-var-support: "\f1cd"; +$fa-var-table: "\f0ce"; +$fa-var-tablet: "\f10a"; +$fa-var-tachometer: "\f0e4"; +$fa-var-tag: "\f02b"; +$fa-var-tags: "\f02c"; +$fa-var-tasks: "\f0ae"; +$fa-var-taxi: "\f1ba"; +$fa-var-telegram: "\f2c6"; +$fa-var-television: "\f26c"; +$fa-var-tencent-weibo: "\f1d5"; +$fa-var-terminal: "\f120"; +$fa-var-text-height: "\f034"; +$fa-var-text-width: "\f035"; +$fa-var-th: "\f00a"; +$fa-var-th-large: "\f009"; +$fa-var-th-list: "\f00b"; +$fa-var-themeisle: "\f2b2"; +$fa-var-thermometer: "\f2c7"; +$fa-var-thermometer-0: "\f2cb"; +$fa-var-thermometer-1: "\f2ca"; +$fa-var-thermometer-2: "\f2c9"; +$fa-var-thermometer-3: "\f2c8"; +$fa-var-thermometer-4: "\f2c7"; +$fa-var-thermometer-empty: "\f2cb"; +$fa-var-thermometer-full: "\f2c7"; +$fa-var-thermometer-half: "\f2c9"; +$fa-var-thermometer-quarter: "\f2ca"; +$fa-var-thermometer-three-quarters: "\f2c8"; +$fa-var-thumb-tack: "\f08d"; +$fa-var-thumbs-down: "\f165"; +$fa-var-thumbs-o-down: "\f088"; +$fa-var-thumbs-o-up: "\f087"; +$fa-var-thumbs-up: "\f164"; +$fa-var-ticket: "\f145"; +$fa-var-times: "\f00d"; +$fa-var-times-circle: "\f057"; +$fa-var-times-circle-o: "\f05c"; +$fa-var-times-rectangle: "\f2d3"; +$fa-var-times-rectangle-o: "\f2d4"; +$fa-var-tint: "\f043"; +$fa-var-toggle-down: "\f150"; +$fa-var-toggle-left: "\f191"; +$fa-var-toggle-off: "\f204"; +$fa-var-toggle-on: "\f205"; +$fa-var-toggle-right: "\f152"; +$fa-var-toggle-up: "\f151"; +$fa-var-trademark: "\f25c"; +$fa-var-train: "\f238"; +$fa-var-transgender: "\f224"; +$fa-var-transgender-alt: "\f225"; +$fa-var-trash: "\f1f8"; +$fa-var-trash-o: "\f014"; +$fa-var-tree: "\f1bb"; +$fa-var-trello: "\f181"; +$fa-var-tripadvisor: "\f262"; +$fa-var-trophy: "\f091"; +$fa-var-truck: "\f0d1"; +$fa-var-try: "\f195"; +$fa-var-tty: "\f1e4"; +$fa-var-tumblr: "\f173"; +$fa-var-tumblr-square: "\f174"; +$fa-var-turkish-lira: "\f195"; +$fa-var-tv: "\f26c"; +$fa-var-twitch: "\f1e8"; +$fa-var-twitter: "\f099"; +$fa-var-twitter-square: "\f081"; +$fa-var-umbrella: "\f0e9"; +$fa-var-underline: "\f0cd"; +$fa-var-undo: "\f0e2"; +$fa-var-universal-access: "\f29a"; +$fa-var-university: "\f19c"; +$fa-var-unlink: "\f127"; +$fa-var-unlock: "\f09c"; +$fa-var-unlock-alt: "\f13e"; +$fa-var-unsorted: "\f0dc"; +$fa-var-upload: "\f093"; +$fa-var-usb: "\f287"; +$fa-var-usd: "\f155"; +$fa-var-user: "\f007"; +$fa-var-user-circle: "\f2bd"; +$fa-var-user-circle-o: "\f2be"; +$fa-var-user-md: "\f0f0"; +$fa-var-user-o: "\f2c0"; +$fa-var-user-plus: "\f234"; +$fa-var-user-secret: "\f21b"; +$fa-var-user-times: "\f235"; +$fa-var-users: "\f0c0"; +$fa-var-vcard: "\f2bb"; +$fa-var-vcard-o: "\f2bc"; +$fa-var-venus: "\f221"; +$fa-var-venus-double: "\f226"; +$fa-var-venus-mars: "\f228"; +$fa-var-viacoin: "\f237"; +$fa-var-viadeo: "\f2a9"; +$fa-var-viadeo-square: "\f2aa"; +$fa-var-video-camera: "\f03d"; +$fa-var-vimeo: "\f27d"; +$fa-var-vimeo-square: "\f194"; +$fa-var-vine: "\f1ca"; +$fa-var-vk: "\f189"; +$fa-var-volume-control-phone: "\f2a0"; +$fa-var-volume-down: "\f027"; +$fa-var-volume-off: "\f026"; +$fa-var-volume-up: "\f028"; +$fa-var-warning: "\f071"; +$fa-var-wechat: "\f1d7"; +$fa-var-weibo: "\f18a"; +$fa-var-weixin: "\f1d7"; +$fa-var-whatsapp: "\f232"; +$fa-var-wheelchair: "\f193"; +$fa-var-wheelchair-alt: "\f29b"; +$fa-var-wifi: "\f1eb"; +$fa-var-wikipedia-w: "\f266"; +$fa-var-window-close: "\f2d3"; +$fa-var-window-close-o: "\f2d4"; +$fa-var-window-maximize: "\f2d0"; +$fa-var-window-minimize: "\f2d1"; +$fa-var-window-restore: "\f2d2"; +$fa-var-windows: "\f17a"; +$fa-var-won: "\f159"; +$fa-var-wordpress: "\f19a"; +$fa-var-wpbeginner: "\f297"; +$fa-var-wpexplorer: "\f2de"; +$fa-var-wpforms: "\f298"; +$fa-var-wrench: "\f0ad"; +$fa-var-xing: "\f168"; +$fa-var-xing-square: "\f169"; +$fa-var-y-combinator: "\f23b"; +$fa-var-y-combinator-square: "\f1d4"; +$fa-var-yahoo: "\f19e"; +$fa-var-yc: "\f23b"; +$fa-var-yc-square: "\f1d4"; +$fa-var-yelp: "\f1e9"; +$fa-var-yen: "\f157"; +$fa-var-yoast: "\f2b1"; +$fa-var-youtube: "\f167"; +$fa-var-youtube-play: "\f16a"; +$fa-var-youtube-square: "\f166"; + diff --git a/public/admin/view/javascript/font-awesome/scss/font-awesome.scss b/public/admin/view/javascript/font-awesome/scss/font-awesome.scss new file mode 100644 index 0000000..f1c83aa --- /dev/null +++ b/public/admin/view/javascript/font-awesome/scss/font-awesome.scss @@ -0,0 +1,18 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + +@import "variables"; +@import "mixins"; +@import "path"; +@import "core"; +@import "larger"; +@import "fixed-width"; +@import "list"; +@import "bordered-pulled"; +@import "animated"; +@import "rotated-flipped"; +@import "stacked"; +@import "icons"; +@import "screen-reader"; diff --git a/public/admin/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.css b/public/admin/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.css new file mode 100644 index 0000000..cf838a3 --- /dev/null +++ b/public/admin/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.css @@ -0,0 +1,5 @@ +/*! + * Datetimepicker for Bootstrap v3 +//! version : 3.1.3 + * https://github.com/Eonasdan/bootstrap-datetimepicker/ + */.bootstrap-datetimepicker-widget{top:0;left:0;width:250px;padding:4px;margin-top:1px;z-index:99999!important;border-radius:4px}.bootstrap-datetimepicker-widget.timepicker-sbs{width:600px}.bootstrap-datetimepicker-widget.bottom:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:7px}.bootstrap-datetimepicker-widget.bottom:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:8px}.bootstrap-datetimepicker-widget.top:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.top:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;position:absolute;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget .dow{width:14.2857%}.bootstrap-datetimepicker-widget.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget>ul{list-style-type:none;margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator{width:4px;padding:0;margin:0}.bootstrap-datetimepicker-widget .datepicker>div{display:none}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget td,.bootstrap-datetimepicker-widget th{text-align:center;border-radius:4px}.bootstrap-datetimepicker-widget td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget td.cw{font-size:10px;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget td.day:hover,.bootstrap-datetimepicker-widget td.hour:hover,.bootstrap-datetimepicker-widget td.minute:hover,.bootstrap-datetimepicker-widget td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget td.old,.bootstrap-datetimepicker-widget td.new{color:#777}.bootstrap-datetimepicker-widget td.today{position:relative}.bootstrap-datetimepicker-widget td.today:before{content:'';display:inline-block;border-left:7px solid transparent;border-bottom:7px solid #428bca;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget td.active,.bootstrap-datetimepicker-widget td.active:hover{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget td.disabled,.bootstrap-datetimepicker-widget td.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget td span:hover{background:#eee}.bootstrap-datetimepicker-widget td span.active{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td span.old{color:#777}.bootstrap-datetimepicker-widget td span.disabled,.bootstrap-datetimepicker-widget td span.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget th.picker-switch{width:145px}.bootstrap-datetimepicker-widget th.next,.bootstrap-datetimepicker-widget th.prev{font-size:21px}.bootstrap-datetimepicker-widget th.disabled,.bootstrap-datetimepicker-widget th.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget thead tr:first-child th:hover{background:#eee}.input-group.date .input-group-addon span{display:block;cursor:pointer;width:16px;height:16px}.bootstrap-datetimepicker-widget.left-oriented:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.left-oriented:after{left:auto;right:7px}.bootstrap-datetimepicker-widget ul.list-unstyled li div.timepicker div.timepicker-picker table.table-condensed tbody>tr>td{padding:0!important}@media screen and (max-width:767px){.bootstrap-datetimepicker-widget.timepicker-sbs{width:283px}}
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.js b/public/admin/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.js new file mode 100644 index 0000000..44abcc1 --- /dev/null +++ b/public/admin/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.js @@ -0,0 +1,1384 @@ +/* +//! version : 3.1.3 +========================================================= +bootstrap-datetimepicker.js +https://github.com/Eonasdan/bootstrap-datetimepicker +========================================================= +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Peterson + +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. +*/ +;(function (root, factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // AMD is used - Register as an anonymous module. + define(['jquery', 'moment'], factory); + } else if (typeof exports === 'object') { + factory(require('jquery'), require('moment')); + } + else { + // Neither AMD or CommonJS used. Use global variables. + if (!jQuery) { + throw new Error('bootstrap-datetimepicker requires jQuery to be loaded first'); + } + if (!moment) { + throw new Error('bootstrap-datetimepicker requires moment.js to be loaded first'); + } + factory(root.jQuery, moment); + } +}(this, function ($, moment) { + 'use strict'; + if (typeof moment === 'undefined') { + throw new Error('momentjs is required'); + } + + var dpgId = 0, + + DateTimePicker = function (element, options) { + var defaults = $.fn.datetimepicker.defaults, + + icons = { + time: 'glyphicon glyphicon-time', + date: 'glyphicon glyphicon-calendar', + up: 'glyphicon glyphicon-chevron-up', + down: 'glyphicon glyphicon-chevron-down' + }, + + picker = this, + errored = false, + dDate, + + init = function () { + var icon = false, localeData, rInterval; + picker.options = $.extend({}, defaults, options); + picker.options.icons = $.extend({}, icons, picker.options.icons); + + picker.element = $(element); + + dataToOptions(); + + if (!(picker.options.pickTime || picker.options.pickDate)) { + throw new Error('Must choose at least one picker'); + } + + picker.id = dpgId++; + moment.locale(picker.options.language); + picker.date = moment(); + picker.unset = false; + picker.isInput = picker.element.is('input'); + picker.component = false; + + if (picker.element.hasClass('input-group')) { + if (picker.element.find('.datepickerbutton').size() === 0) {//in case there is more then one 'input-group-addon' Issue #48 + picker.component = picker.element.find('[class^="input-group-"]'); + } + else { + picker.component = picker.element.find('.datepickerbutton'); + } + } + picker.format = picker.options.format; + + localeData = moment().localeData(); + + if (!picker.format) { + picker.format = (picker.options.pickDate ? localeData.longDateFormat('L') : ''); + if (picker.options.pickDate && picker.options.pickTime) { + picker.format += ' '; + } + picker.format += (picker.options.pickTime ? localeData.longDateFormat('LT') : ''); + if (picker.options.useSeconds) { + if (localeData.longDateFormat('LT').indexOf(' A') !== -1) { + picker.format = picker.format.split(' A')[0] + ':ss A'; + } + else { + picker.format += ':ss'; + } + } + } + picker.use24hours = (picker.format.toLowerCase().indexOf('a') < 0 && picker.format.indexOf('h') < 0); + + if (picker.component) { + icon = picker.component.find('span'); + } + + if (picker.options.pickTime) { + if (icon) { + icon.addClass(picker.options.icons.time); + } + } + if (picker.options.pickDate) { + if (icon) { + icon.removeClass(picker.options.icons.time); + icon.addClass(picker.options.icons.date); + } + } + + picker.options.widgetParent = + typeof picker.options.widgetParent === 'string' && picker.options.widgetParent || + picker.element.parents().filter(function () { + return 'scroll' === $(this).css('overflow-y'); + }).get(0) || + 'body'; + + picker.widget = $(getTemplate()).appendTo(picker.options.widgetParent); + + picker.minViewMode = picker.options.minViewMode || 0; + if (typeof picker.minViewMode === 'string') { + switch (picker.minViewMode) { + case 'months': + picker.minViewMode = 1; + break; + case 'years': + picker.minViewMode = 2; + break; + default: + picker.minViewMode = 0; + break; + } + } + picker.viewMode = picker.options.viewMode || 0; + if (typeof picker.viewMode === 'string') { + switch (picker.viewMode) { + case 'months': + picker.viewMode = 1; + break; + case 'years': + picker.viewMode = 2; + break; + default: + picker.viewMode = 0; + break; + } + } + + picker.viewMode = Math.max(picker.viewMode, picker.minViewMode); + + picker.options.disabledDates = indexGivenDates(picker.options.disabledDates); + picker.options.enabledDates = indexGivenDates(picker.options.enabledDates); + + picker.startViewMode = picker.viewMode; + picker.setMinDate(picker.options.minDate); + picker.setMaxDate(picker.options.maxDate); + fillDow(); + fillMonths(); + fillHours(); + fillMinutes(); + fillSeconds(); + update(); + showMode(); + if (!getPickerInput().prop('disabled')) { + attachDatePickerEvents(); + } + if (picker.options.defaultDate !== '' && getPickerInput().val() === '') { + picker.setValue(picker.options.defaultDate); + } + if (picker.options.minuteStepping !== 1) { + rInterval = picker.options.minuteStepping; + picker.date.minutes((Math.round(picker.date.minutes() / rInterval) * rInterval) % 60).seconds(0); + } + }, + + getPickerInput = function () { + var input; + + if (picker.isInput) { + return picker.element; + } + input = picker.element.find('.datepickerinput'); + if (input.size() === 0) { + input = picker.element.find('input'); + } + else if (!input.is('input')) { + throw new Error('CSS class "datepickerinput" cannot be applied to non input element'); + } + return input; + }, + + dataToOptions = function () { + var eData; + if (picker.element.is('input')) { + eData = picker.element.data(); + } + else { + eData = picker.element.find('input').data(); + } + if (eData.dateFormat !== undefined) { + picker.options.format = eData.dateFormat; + } + if (eData.datePickdate !== undefined) { + picker.options.pickDate = eData.datePickdate; + } + if (eData.datePicktime !== undefined) { + picker.options.pickTime = eData.datePicktime; + } + if (eData.dateUseminutes !== undefined) { + picker.options.useMinutes = eData.dateUseminutes; + } + if (eData.dateUseseconds !== undefined) { + picker.options.useSeconds = eData.dateUseseconds; + } + if (eData.dateUsecurrent !== undefined) { + picker.options.useCurrent = eData.dateUsecurrent; + } + if (eData.calendarWeeks !== undefined) { + picker.options.calendarWeeks = eData.calendarWeeks; + } + if (eData.dateMinutestepping !== undefined) { + picker.options.minuteStepping = eData.dateMinutestepping; + } + if (eData.dateMindate !== undefined) { + picker.options.minDate = eData.dateMindate; + } + if (eData.dateMaxdate !== undefined) { + picker.options.maxDate = eData.dateMaxdate; + } + if (eData.dateShowtoday !== undefined) { + picker.options.showToday = eData.dateShowtoday; + } + if (eData.dateCollapse !== undefined) { + picker.options.collapse = eData.dateCollapse; + } + if (eData.dateLanguage !== undefined) { + picker.options.language = eData.dateLanguage; + } + if (eData.dateDefaultdate !== undefined) { + picker.options.defaultDate = eData.dateDefaultdate; + } + if (eData.dateDisableddates !== undefined) { + picker.options.disabledDates = eData.dateDisableddates; + } + if (eData.dateEnableddates !== undefined) { + picker.options.enabledDates = eData.dateEnableddates; + } + if (eData.dateIcons !== undefined) { + picker.options.icons = eData.dateIcons; + } + if (eData.dateUsestrict !== undefined) { + picker.options.useStrict = eData.dateUsestrict; + } + if (eData.dateDirection !== undefined) { + picker.options.direction = eData.dateDirection; + } + if (eData.dateSidebyside !== undefined) { + picker.options.sideBySide = eData.dateSidebyside; + } + if (eData.dateDaysofweekdisabled !== undefined) { + picker.options.daysOfWeekDisabled = eData.dateDaysofweekdisabled; + } + }, + + place = function () { + var position = 'absolute', + offset = picker.component ? picker.component.offset() : picker.element.offset(), + $window = $(window), + placePosition; + + picker.width = picker.component ? picker.component.outerWidth() : picker.element.outerWidth(); + offset.top = offset.top + picker.element.outerHeight(); + + if (picker.options.direction === 'up') { + placePosition = 'top'; + } else if (picker.options.direction === 'bottom') { + placePosition = 'bottom'; + } else if (picker.options.direction === 'auto') { + if (offset.top + picker.widget.height() > $window.height() + $window.scrollTop() && picker.widget.height() + picker.element.outerHeight() < offset.top) { + placePosition = 'top'; + } else { + placePosition = 'bottom'; + } + } + if (placePosition === 'top') { + offset.bottom = $window.height() - offset.top + picker.element.outerHeight() + 3; + picker.widget.addClass('top').removeClass('bottom'); + } else { + offset.top += 1; + picker.widget.addClass('bottom').removeClass('top'); + } + + if (picker.options.width !== undefined) { + picker.widget.width(picker.options.width); + } + + if (picker.options.orientation === 'left') { + picker.widget.addClass('left-oriented'); + offset.left = offset.left - picker.widget.width() + 20; + } + + if (isInFixed()) { + position = 'fixed'; + offset.top -= $window.scrollTop(); + offset.left -= $window.scrollLeft(); + } + + if ($window.width() < offset.left + picker.widget.outerWidth()) { + offset.right = $window.width() - offset.left - picker.width; + offset.left = 'auto'; + picker.widget.addClass('pull-right'); + } else { + offset.right = 'auto'; + picker.widget.removeClass('pull-right'); + } + + if (placePosition === 'top') { + picker.widget.css({ + position: position, + bottom: offset.bottom, + top: 'auto', + left: offset.left, + right: offset.right + }); + } else { + picker.widget.css({ + position: position, + top: offset.top, + bottom: 'auto', + left: offset.left, + right: offset.right + }); + } + }, + + notifyChange = function (oldDate, eventType) { + if (moment(picker.date).isSame(moment(oldDate)) && !errored) { + return; + } + errored = false; + picker.element.trigger({ + type: 'dp.change', + date: moment(picker.date), + oldDate: moment(oldDate) + }); + + if (eventType !== 'change') { + picker.element.change(); + } + }, + + notifyError = function (date) { + errored = true; + picker.element.trigger({ + type: 'dp.error', + date: moment(date, picker.format, picker.options.useStrict) + }); + }, + + update = function (newDate) { + moment.locale(picker.options.language); + var dateStr = newDate; + if (!dateStr) { + dateStr = getPickerInput().val(); + if (dateStr) { + picker.date = moment(dateStr, picker.format, picker.options.useStrict); + } + if (!picker.date) { + picker.date = moment(); + } + } + picker.viewDate = moment(picker.date).startOf('month'); + fillDate(); + fillTime(); + }, + + fillDow = function () { + moment.locale(picker.options.language); + var html = $('<tr>'), weekdaysMin = moment.weekdaysMin(), i; + if (picker.options.calendarWeeks === true) { + html.append('<th class="cw">#</th>'); + } + if (moment().localeData()._week.dow === 0) { // starts on Sunday + for (i = 0; i < 7; i++) { + html.append('<th class="dow">' + weekdaysMin[i] + '</th>'); + } + } else { + for (i = 1; i < 8; i++) { + if (i === 7) { + html.append('<th class="dow">' + weekdaysMin[0] + '</th>'); + } else { + html.append('<th class="dow">' + weekdaysMin[i] + '</th>'); + } + } + } + picker.widget.find('.datepicker-days thead').append(html); + }, + + fillMonths = function () { + moment.locale(picker.options.language); + var html = '', i, monthsShort = moment.monthsShort(); + for (i = 0; i < 12; i++) { + html += '<span class="month">' + monthsShort[i] + '</span>'; + } + picker.widget.find('.datepicker-months td').append(html); + }, + + fillDate = function () { + if (!picker.options.pickDate) { + return; + } + moment.locale(picker.options.language); + var year = picker.viewDate.year(), + month = picker.viewDate.month(), + startYear = picker.options.minDate.year(), + startMonth = picker.options.minDate.month(), + endYear = picker.options.maxDate.year(), + endMonth = picker.options.maxDate.month(), + currentDate, + prevMonth, nextMonth, html = [], row, clsName, i, days, yearCont, currentYear, months = moment.months(); + + picker.widget.find('.datepicker-days').find('.disabled').removeClass('disabled'); + picker.widget.find('.datepicker-months').find('.disabled').removeClass('disabled'); + picker.widget.find('.datepicker-years').find('.disabled').removeClass('disabled'); + + picker.widget.find('.datepicker-days th:eq(1)').text( + months[month] + ' ' + year); + + prevMonth = moment(picker.viewDate, picker.format, picker.options.useStrict).subtract(1, 'months'); + days = prevMonth.daysInMonth(); + prevMonth.date(days).startOf('week'); + if ((year === startYear && month <= startMonth) || year < startYear) { + picker.widget.find('.datepicker-days th:eq(0)').addClass('disabled'); + } + if ((year === endYear && month >= endMonth) || year > endYear) { + picker.widget.find('.datepicker-days th:eq(2)').addClass('disabled'); + } + + nextMonth = moment(prevMonth).add(42, 'd'); + while (prevMonth.isBefore(nextMonth)) { + if (prevMonth.weekday() === moment().startOf('week').weekday()) { + row = $('<tr>'); + html.push(row); + if (picker.options.calendarWeeks === true) { + row.append('<td class="cw">' + prevMonth.week() + '</td>'); + } + } + clsName = ''; + if (prevMonth.year() < year || (prevMonth.year() === year && prevMonth.month() < month)) { + clsName += ' old'; + } else if (prevMonth.year() > year || (prevMonth.year() === year && prevMonth.month() > month)) { + clsName += ' new'; + } + if (prevMonth.isSame(moment({y: picker.date.year(), M: picker.date.month(), d: picker.date.date()}))) { + clsName += ' active'; + } + if (isInDisableDates(prevMonth, 'day') || !isInEnableDates(prevMonth)) { + clsName += ' disabled'; + } + if (picker.options.showToday === true) { + if (prevMonth.isSame(moment(), 'day')) { + clsName += ' today'; + } + } + if (picker.options.daysOfWeekDisabled) { + for (i = 0; i < picker.options.daysOfWeekDisabled.length; i++) { + if (prevMonth.day() === picker.options.daysOfWeekDisabled[i]) { + clsName += ' disabled'; + break; + } + } + } + row.append('<td class="day' + clsName + '">' + prevMonth.date() + '</td>'); + + currentDate = prevMonth.date(); + prevMonth.add(1, 'd'); + + if (currentDate === prevMonth.date()) { + prevMonth.add(1, 'd'); + } + } + picker.widget.find('.datepicker-days tbody').empty().append(html); + currentYear = picker.date.year(); + months = picker.widget.find('.datepicker-months').find('th:eq(1)').text(year).end().find('span').removeClass('active'); + if (currentYear === year) { + months.eq(picker.date.month()).addClass('active'); + } + if (year - 1 < startYear) { + picker.widget.find('.datepicker-months th:eq(0)').addClass('disabled'); + } + if (year + 1 > endYear) { + picker.widget.find('.datepicker-months th:eq(2)').addClass('disabled'); + } + for (i = 0; i < 12; i++) { + if ((year === startYear && startMonth > i) || (year < startYear)) { + $(months[i]).addClass('disabled'); + } else if ((year === endYear && endMonth < i) || (year > endYear)) { + $(months[i]).addClass('disabled'); + } + } + + html = ''; + year = parseInt(year / 10, 10) * 10; + yearCont = picker.widget.find('.datepicker-years').find( + 'th:eq(1)').text(year + '-' + (year + 9)).parents('table').find('td'); + picker.widget.find('.datepicker-years').find('th').removeClass('disabled'); + if (startYear > year) { + picker.widget.find('.datepicker-years').find('th:eq(0)').addClass('disabled'); + } + if (endYear < year + 9) { + picker.widget.find('.datepicker-years').find('th:eq(2)').addClass('disabled'); + } + year -= 1; + for (i = -1; i < 11; i++) { + html += '<span class="year' + (i === -1 || i === 10 ? ' old' : '') + (currentYear === year ? ' active' : '') + ((year < startYear || year > endYear) ? ' disabled' : '') + '">' + year + '</span>'; + year += 1; + } + yearCont.html(html); + }, + + fillHours = function () { + moment.locale(picker.options.language); + var table = picker.widget.find('.timepicker .timepicker-hours table'), html = '', current, i, j; + table.parent().hide(); + if (picker.use24hours) { + current = 0; + for (i = 0; i < 6; i += 1) { + html += '<tr>'; + for (j = 0; j < 4; j += 1) { + html += '<td class="hour">' + padLeft(current.toString()) + '</td>'; + current++; + } + html += '</tr>'; + } + } + else { + current = 1; + for (i = 0; i < 3; i += 1) { + html += '<tr>'; + for (j = 0; j < 4; j += 1) { + html += '<td class="hour">' + padLeft(current.toString()) + '</td>'; + current++; + } + html += '</tr>'; + } + } + table.html(html); + }, + + fillMinutes = function () { + var table = picker.widget.find('.timepicker .timepicker-minutes table'), html = '', current = 0, i, j, step = picker.options.minuteStepping; + table.parent().hide(); + if (step === 1) { + step = 5; + } + for (i = 0; i < Math.ceil(60 / step / 4) ; i++) { + html += '<tr>'; + for (j = 0; j < 4; j += 1) { + if (current < 60) { + html += '<td class="minute">' + padLeft(current.toString()) + '</td>'; + current += step; + } else { + html += '<td></td>'; + } + } + html += '</tr>'; + } + table.html(html); + }, + + fillSeconds = function () { + var table = picker.widget.find('.timepicker .timepicker-seconds table'), html = '', current = 0, i, j; + table.parent().hide(); + for (i = 0; i < 3; i++) { + html += '<tr>'; + for (j = 0; j < 4; j += 1) { + html += '<td class="second">' + padLeft(current.toString()) + '</td>'; + current += 5; + } + html += '</tr>'; + } + table.html(html); + }, + + fillTime = function () { + if (!picker.date) { + return; + } + var timeComponents = picker.widget.find('.timepicker span[data-time-component]'), + hour = picker.date.hours(), + period = picker.date.format('A'); + if (!picker.use24hours) { + if (hour === 0) { + hour = 12; + } else if (hour !== 12) { + hour = hour % 12; + } + picker.widget.find('.timepicker [data-action=togglePeriod]').text(period); + } + timeComponents.filter('[data-time-component=hours]').text(padLeft(hour)); + timeComponents.filter('[data-time-component=minutes]').text(padLeft(picker.date.minutes())); + timeComponents.filter('[data-time-component=seconds]').text(padLeft(picker.date.second())); + }, + + click = function (e) { + e.stopPropagation(); + e.preventDefault(); + picker.unset = false; + var target = $(e.target).closest('span, td, th'), month, year, step, day, oldDate = moment(picker.date); + if (target.length === 1) { + if (!target.is('.disabled')) { + switch (target[0].nodeName.toLowerCase()) { + case 'th': + switch (target[0].className) { + case 'picker-switch': + showMode(1); + break; + case 'prev': + case 'next': + step = dpGlobal.modes[picker.viewMode].navStep; + if (target[0].className === 'prev') { + step = step * -1; + } + picker.viewDate.add(step, dpGlobal.modes[picker.viewMode].navFnc); + fillDate(); + break; + } + break; + case 'span': + if (target.is('.month')) { + month = target.parent().find('span').index(target); + picker.viewDate.month(month); + } else { + year = parseInt(target.text(), 10) || 0; + picker.viewDate.year(year); + } + if (picker.viewMode === picker.minViewMode) { + picker.date = moment({ + y: picker.viewDate.year(), + M: picker.viewDate.month(), + d: picker.viewDate.date(), + h: picker.date.hours(), + m: picker.date.minutes(), + s: picker.date.seconds() + }); + set(); + notifyChange(oldDate, e.type); + } + showMode(-1); + fillDate(); + break; + case 'td': + if (target.is('.day')) { + day = parseInt(target.text(), 10) || 1; + month = picker.viewDate.month(); + year = picker.viewDate.year(); + if (target.is('.old')) { + if (month === 0) { + month = 11; + year -= 1; + } else { + month -= 1; + } + } else if (target.is('.new')) { + if (month === 11) { + month = 0; + year += 1; + } else { + month += 1; + } + } + picker.date = moment({ + y: year, + M: month, + d: day, + h: picker.date.hours(), + m: picker.date.minutes(), + s: picker.date.seconds() + } + ); + picker.viewDate = moment({ + y: year, M: month, d: Math.min(28, day) + }); + fillDate(); + set(); + notifyChange(oldDate, e.type); + } + break; + } + } + } + }, + + actions = { + incrementHours: function () { + checkDate('add', 'hours', 1); + }, + + incrementMinutes: function () { + checkDate('add', 'minutes', picker.options.minuteStepping); + }, + + incrementSeconds: function () { + checkDate('add', 'seconds', 1); + }, + + decrementHours: function () { + checkDate('subtract', 'hours', 1); + }, + + decrementMinutes: function () { + checkDate('subtract', 'minutes', picker.options.minuteStepping); + }, + + decrementSeconds: function () { + checkDate('subtract', 'seconds', 1); + }, + + togglePeriod: function () { + var hour = picker.date.hours(); + if (hour >= 12) { + hour -= 12; + } else { + hour += 12; + } + picker.date.hours(hour); + }, + + showPicker: function () { + picker.widget.find('.timepicker > div:not(.timepicker-picker)').hide(); + picker.widget.find('.timepicker .timepicker-picker').show(); + }, + + showHours: function () { + picker.widget.find('.timepicker .timepicker-picker').hide(); + picker.widget.find('.timepicker .timepicker-hours').show(); + }, + + showMinutes: function () { + picker.widget.find('.timepicker .timepicker-picker').hide(); + picker.widget.find('.timepicker .timepicker-minutes').show(); + }, + + showSeconds: function () { + picker.widget.find('.timepicker .timepicker-picker').hide(); + picker.widget.find('.timepicker .timepicker-seconds').show(); + }, + + selectHour: function (e) { + var hour = parseInt($(e.target).text(), 10); + if (!picker.use24hours) { + if (picker.date.hours() >= 12) { + if (hour !== 12) { + hour += 12; + } + } else { + if (hour === 12) { + hour = 0; + } + } + } + picker.date.hours(hour); + actions.showPicker.call(picker); + }, + + selectMinute: function (e) { + picker.date.minutes(parseInt($(e.target).text(), 10)); + actions.showPicker.call(picker); + }, + + selectSecond: function (e) { + picker.date.seconds(parseInt($(e.target).text(), 10)); + actions.showPicker.call(picker); + } + }, + + doAction = function (e) { + var oldDate = moment(picker.date), + action = $(e.currentTarget).data('action'), + rv = actions[action].apply(picker, arguments); + stopEvent(e); + if (!picker.date) { + picker.date = moment({y: 1970}); + } + set(); + fillTime(); + notifyChange(oldDate, e.type); + return rv; + }, + + stopEvent = function (e) { + e.stopPropagation(); + e.preventDefault(); + }, + + keydown = function (e) { + if (e.keyCode === 27) { // allow escape to hide picker + picker.hide(); + } + }, + + change = function (e) { + moment.locale(picker.options.language); + var input = $(e.target), oldDate = moment(picker.date), newDate = moment(input.val(), picker.format, picker.options.useStrict); + if (newDate.isValid() && !isInDisableDates(newDate) && isInEnableDates(newDate)) { + update(); + picker.setValue(newDate); + notifyChange(oldDate, e.type); + set(); + } + else { + picker.viewDate = oldDate; + picker.unset = true; + notifyChange(oldDate, e.type); + notifyError(newDate); + } + }, + + showMode = function (dir) { + if (dir) { + picker.viewMode = Math.max(picker.minViewMode, Math.min(2, picker.viewMode + dir)); + } + picker.widget.find('.datepicker > div').hide().filter('.datepicker-' + dpGlobal.modes[picker.viewMode].clsName).show(); + }, + + attachDatePickerEvents = function () { + var $this, $parent, expanded, closed, collapseData; + picker.widget.on('click', '.datepicker *', $.proxy(click, this)); // this handles date picker clicks + picker.widget.on('click', '[data-action]', $.proxy(doAction, this)); // this handles time picker clicks + picker.widget.on('mousedown', $.proxy(stopEvent, this)); + picker.element.on('keydown', $.proxy(keydown, this)); + if (picker.options.pickDate && picker.options.pickTime) { + picker.widget.on('click.togglePicker', '.accordion-toggle', function (e) { + e.stopPropagation(); + $this = $(this); + $parent = $this.closest('ul'); + expanded = $parent.find('.in'); + closed = $parent.find('.collapse:not(.in)'); + + if (expanded && expanded.length) { + collapseData = expanded.data('collapse'); + if (collapseData && collapseData.transitioning) { + return; + } + expanded.collapse('hide'); + closed.collapse('show'); + $this.find('span').toggleClass(picker.options.icons.time + ' ' + picker.options.icons.date); + if (picker.component) { + picker.component.find('span').toggleClass(picker.options.icons.time + ' ' + picker.options.icons.date); + } + } + }); + } + if (picker.isInput) { + picker.element.on({ + 'click': $.proxy(picker.show, this), + 'focus': $.proxy(picker.show, this), + 'change': $.proxy(change, this), + 'blur': $.proxy(picker.hide, this) + }); + } else { + picker.element.on({ + 'change': $.proxy(change, this) + }, 'input'); + if (picker.component) { + picker.component.on('click', $.proxy(picker.show, this)); + picker.component.on('mousedown', $.proxy(stopEvent, this)); + } else { + picker.element.on('click', $.proxy(picker.show, this)); + } + } + }, + + attachDatePickerGlobalEvents = function () { + $(window).on( + 'resize.datetimepicker' + picker.id, $.proxy(place, this)); + if (!picker.isInput) { + $(document).on( + 'mousedown.datetimepicker' + picker.id, $.proxy(picker.hide, this)); + } + }, + + detachDatePickerEvents = function () { + picker.widget.off('click', '.datepicker *', picker.click); + picker.widget.off('click', '[data-action]'); + picker.widget.off('mousedown', picker.stopEvent); + if (picker.options.pickDate && picker.options.pickTime) { + picker.widget.off('click.togglePicker'); + } + if (picker.isInput) { + picker.element.off({ + 'focus': picker.show, + 'change': change, + 'click': picker.show, + 'blur' : picker.hide + }); + } else { + picker.element.off({ + 'change': change + }, 'input'); + if (picker.component) { + picker.component.off('click', picker.show); + picker.component.off('mousedown', picker.stopEvent); + } else { + picker.element.off('click', picker.show); + } + } + }, + + detachDatePickerGlobalEvents = function () { + $(window).off('resize.datetimepicker' + picker.id); + if (!picker.isInput) { + $(document).off('mousedown.datetimepicker' + picker.id); + } + }, + + isInFixed = function () { + if (picker.element) { + var parents = picker.element.parents(), inFixed = false, i; + for (i = 0; i < parents.length; i++) { + if ($(parents[i]).css('position') === 'fixed') { + inFixed = true; + break; + } + } + return inFixed; + } else { + return false; + } + }, + + set = function () { + moment.locale(picker.options.language); + var formatted = ''; + if (!picker.unset) { + formatted = moment(picker.date).format(picker.format); + } + getPickerInput().val(formatted); + picker.element.data('date', formatted); + if (!picker.options.pickTime) { + picker.hide(); + } + }, + + checkDate = function (direction, unit, amount) { + moment.locale(picker.options.language); + var newDate; + if (direction === 'add') { + newDate = moment(picker.date); + if (newDate.hours() === 23) { + newDate.add(amount, unit); + } + newDate.add(amount, unit); + } + else { + newDate = moment(picker.date).subtract(amount, unit); + } + if (isInDisableDates(moment(newDate.subtract(amount, unit))) || isInDisableDates(newDate)) { + notifyError(newDate.format(picker.format)); + return; + } + + if (direction === 'add') { + picker.date.add(amount, unit); + } + else { + picker.date.subtract(amount, unit); + } + picker.unset = false; + }, + + isInDisableDates = function (date, timeUnit) { + moment.locale(picker.options.language); + var maxDate = moment(picker.options.maxDate, picker.format, picker.options.useStrict), + minDate = moment(picker.options.minDate, picker.format, picker.options.useStrict); + + if (timeUnit) { + maxDate = maxDate.endOf(timeUnit); + minDate = minDate.startOf(timeUnit); + } + + if (date.isAfter(maxDate) || date.isBefore(minDate)) { + return true; + } + if (picker.options.disabledDates === false) { + return false; + } + return picker.options.disabledDates[date.format('YYYY-MM-DD')] === true; + }, + isInEnableDates = function (date) { + moment.locale(picker.options.language); + if (picker.options.enabledDates === false) { + return true; + } + return picker.options.enabledDates[date.format('YYYY-MM-DD')] === true; + }, + + indexGivenDates = function (givenDatesArray) { + // Store given enabledDates and disabledDates as keys. + // This way we can check their existence in O(1) time instead of looping through whole array. + // (for example: picker.options.enabledDates['2014-02-27'] === true) + var givenDatesIndexed = {}, givenDatesCount = 0, i; + for (i = 0; i < givenDatesArray.length; i++) { + if (moment.isMoment(givenDatesArray[i]) || givenDatesArray[i] instanceof Date) { + dDate = moment(givenDatesArray[i]); + } else { + dDate = moment(givenDatesArray[i], picker.format, picker.options.useStrict); + } + if (dDate.isValid()) { + givenDatesIndexed[dDate.format('YYYY-MM-DD')] = true; + givenDatesCount++; + } + } + if (givenDatesCount > 0) { + return givenDatesIndexed; + } + return false; + }, + + padLeft = function (string) { + string = string.toString(); + if (string.length >= 2) { + return string; + } + return '0' + string; + }, + + getTemplate = function () { + var + headTemplate = + '<thead>' + + '<tr>' + + '<th class="prev">‹</th><th colspan="' + (picker.options.calendarWeeks ? '6' : '5') + '" class="picker-switch"></th><th class="next">›</th>' + + '</tr>' + + '</thead>', + contTemplate = + '<tbody><tr><td colspan="' + (picker.options.calendarWeeks ? '8' : '7') + '"></td></tr></tbody>', + template = '<div class="datepicker-days">' + + '<table class="table-condensed">' + headTemplate + '<tbody></tbody></table>' + + '</div>' + + '<div class="datepicker-months">' + + '<table class="table-condensed">' + headTemplate + contTemplate + '</table>' + + '</div>' + + '<div class="datepicker-years">' + + '<table class="table-condensed">' + headTemplate + contTemplate + '</table>' + + '</div>', + ret = ''; + if (picker.options.pickDate && picker.options.pickTime) { + ret = '<div class="bootstrap-datetimepicker-widget' + (picker.options.sideBySide ? ' timepicker-sbs' : '') + (picker.use24hours ? ' usetwentyfour' : '') + ' dropdown-menu" style="z-index:9999 !important;">'; + if (picker.options.sideBySide) { + ret += '<div class="row">' + + '<div class="col-sm-6 datepicker">' + template + '</div>' + + '<div class="col-sm-6 timepicker">' + tpGlobal.getTemplate() + '</div>' + + '</div>'; + } else { + ret += '<ul class="list-unstyled">' + + '<li' + (picker.options.collapse ? ' class="collapse in"' : '') + '>' + + '<div class="datepicker">' + template + '</div>' + + '</li>' + + '<li class="picker-switch accordion-toggle"><a class="btn" style="width:100%"><span class="' + picker.options.icons.time + '"></span></a></li>' + + '<li' + (picker.options.collapse ? ' class="collapse"' : '') + '>' + + '<div class="timepicker">' + tpGlobal.getTemplate() + '</div>' + + '</li>' + + '</ul>'; + } + ret += '</div>'; + return ret; + } + if (picker.options.pickTime) { + return ( + '<div class="bootstrap-datetimepicker-widget dropdown-menu">' + + '<div class="timepicker">' + tpGlobal.getTemplate() + '</div>' + + '</div>' + ); + } + return ( + '<div class="bootstrap-datetimepicker-widget dropdown-menu">' + + '<div class="datepicker">' + template + '</div>' + + '</div>' + ); + }, + + dpGlobal = { + modes: [ + { + clsName: 'days', + navFnc: 'month', + navStep: 1 + }, + { + clsName: 'months', + navFnc: 'year', + navStep: 1 + }, + { + clsName: 'years', + navFnc: 'year', + navStep: 10 + } + ] + }, + + tpGlobal = { + hourTemplate: '<span data-action="showHours" data-time-component="hours" class="timepicker-hour"></span>', + minuteTemplate: '<span data-action="showMinutes" data-time-component="minutes" class="timepicker-minute"></span>', + secondTemplate: '<span data-action="showSeconds" data-time-component="seconds" class="timepicker-second"></span>' + }; + + tpGlobal.getTemplate = function () { + return ( + '<div class="timepicker-picker">' + + '<table class="table-condensed">' + + '<tr>' + + '<td><a href="#" class="btn" data-action="incrementHours"><span class="' + picker.options.icons.up + '"></span></a></td>' + + '<td class="separator"></td>' + + '<td>' + (picker.options.useMinutes ? '<a href="#" class="btn" data-action="incrementMinutes"><span class="' + picker.options.icons.up + '"></span></a>' : '') + '</td>' + + (picker.options.useSeconds ? + '<td class="separator"></td><td><a href="#" class="btn" data-action="incrementSeconds"><span class="' + picker.options.icons.up + '"></span></a></td>' : '') + + (picker.use24hours ? '' : '<td class="separator"></td>') + + '</tr>' + + '<tr>' + + '<td>' + tpGlobal.hourTemplate + '</td> ' + + '<td class="separator">:</td>' + + '<td>' + (picker.options.useMinutes ? tpGlobal.minuteTemplate : '<span class="timepicker-minute">00</span>') + '</td> ' + + (picker.options.useSeconds ? + '<td class="separator">:</td><td>' + tpGlobal.secondTemplate + '</td>' : '') + + (picker.use24hours ? '' : '<td class="separator"></td>' + + '<td><button type="button" class="btn btn-primary" data-action="togglePeriod"></button></td>') + + '</tr>' + + '<tr>' + + '<td><a href="#" class="btn" data-action="decrementHours"><span class="' + picker.options.icons.down + '"></span></a></td>' + + '<td class="separator"></td>' + + '<td>' + (picker.options.useMinutes ? '<a href="#" class="btn" data-action="decrementMinutes"><span class="' + picker.options.icons.down + '"></span></a>' : '') + '</td>' + + (picker.options.useSeconds ? + '<td class="separator"></td><td><a href="#" class="btn" data-action="decrementSeconds"><span class="' + picker.options.icons.down + '"></span></a></td>' : '') + + (picker.use24hours ? '' : '<td class="separator"></td>') + + '</tr>' + + '</table>' + + '</div>' + + '<div class="timepicker-hours" data-action="selectHour">' + + '<table class="table-condensed"></table>' + + '</div>' + + '<div class="timepicker-minutes" data-action="selectMinute">' + + '<table class="table-condensed"></table>' + + '</div>' + + (picker.options.useSeconds ? + '<div class="timepicker-seconds" data-action="selectSecond"><table class="table-condensed"></table></div>' : '') + ); + }; + + picker.destroy = function () { + detachDatePickerEvents(); + detachDatePickerGlobalEvents(); + picker.widget.remove(); + picker.element.removeData('DateTimePicker'); + if (picker.component) { + picker.component.removeData('DateTimePicker'); + } + }; + + picker.show = function (e) { + if (getPickerInput().prop('disabled')) { + return; + } + if (picker.options.useCurrent) { + if (getPickerInput().val() === '') { + if (picker.options.minuteStepping !== 1) { + var mDate = moment(), + rInterval = picker.options.minuteStepping; + mDate.minutes((Math.round(mDate.minutes() / rInterval) * rInterval) % 60).seconds(0); + picker.setValue(mDate.format(picker.format)); + } else { + picker.setValue(moment().format(picker.format)); + } + notifyChange('', e.type); + } + } + // if this is a click event on the input field and picker is already open don't hide it + if (e && e.type === 'click' && picker.isInput && picker.widget.hasClass('picker-open')) { + return; + } + if (picker.widget.hasClass('picker-open')) { + picker.widget.hide(); + picker.widget.removeClass('picker-open'); + } + else { + picker.widget.show(); + picker.widget.addClass('picker-open'); + } + picker.height = picker.component ? picker.component.outerHeight() : picker.element.outerHeight(); + place(); + picker.element.trigger({ + type: 'dp.show', + date: moment(picker.date) + }); + attachDatePickerGlobalEvents(); + if (e) { + stopEvent(e); + } + }; + + picker.disable = function () { + var input = getPickerInput(); + if (input.prop('disabled')) { + return; + } + input.prop('disabled', true); + detachDatePickerEvents(); + }; + + picker.enable = function () { + var input = getPickerInput(); + if (!input.prop('disabled')) { + return; + } + input.prop('disabled', false); + attachDatePickerEvents(); + }; + + picker.hide = function () { + // Ignore event if in the middle of a picker transition + var collapse = picker.widget.find('.collapse'), i, collapseData; + for (i = 0; i < collapse.length; i++) { + collapseData = collapse.eq(i).data('collapse'); + if (collapseData && collapseData.transitioning) { + return; + } + } + picker.widget.hide(); + picker.widget.removeClass('picker-open'); + picker.viewMode = picker.startViewMode; + showMode(); + picker.element.trigger({ + type: 'dp.hide', + date: moment(picker.date) + }); + detachDatePickerGlobalEvents(); + }; + + picker.setValue = function (newDate) { + moment.locale(picker.options.language); + if (!newDate) { + picker.unset = true; + set(); + } else { + picker.unset = false; + } + if (!moment.isMoment(newDate)) { + newDate = (newDate instanceof Date) ? moment(newDate) : moment(newDate, picker.format, picker.options.useStrict); + } else { + newDate = newDate.locale(picker.options.language); + } + if (newDate.isValid()) { + picker.date = newDate; + set(); + picker.viewDate = moment({y: picker.date.year(), M: picker.date.month()}); + fillDate(); + fillTime(); + } + else { + notifyError(newDate); + } + }; + + picker.getDate = function () { + if (picker.unset) { + return null; + } + return moment(picker.date); + }; + + picker.setDate = function (date) { + var oldDate = moment(picker.date); + if (!date) { + picker.setValue(null); + } else { + picker.setValue(date); + } + notifyChange(oldDate, 'function'); + }; + + picker.setDisabledDates = function (dates) { + picker.options.disabledDates = indexGivenDates(dates); + if (picker.viewDate) { + update(); + } + }; + + picker.setEnabledDates = function (dates) { + picker.options.enabledDates = indexGivenDates(dates); + if (picker.viewDate) { + update(); + } + }; + + picker.setMaxDate = function (date) { + if (date === undefined) { + return; + } + if (moment.isMoment(date) || date instanceof Date) { + picker.options.maxDate = moment(date); + } else { + picker.options.maxDate = moment(date, picker.format, picker.options.useStrict); + } + if (picker.viewDate) { + update(); + } + }; + + picker.setMinDate = function (date) { + if (date === undefined) { + return; + } + if (moment.isMoment(date) || date instanceof Date) { + picker.options.minDate = moment(date); + } else { + picker.options.minDate = moment(date, picker.format, picker.options.useStrict); + } + if (picker.viewDate) { + update(); + } + }; + + init(); + }; + + $.fn.datetimepicker = function (options) { + return this.each(function () { + var $this = $(this), + data = $this.data('DateTimePicker'); + if (!data) { + $this.data('DateTimePicker', new DateTimePicker(this, options)); + } + }); + }; + + $.fn.datetimepicker.defaults = { + format: false, + pickDate: true, + pickTime: true, + useMinutes: true, + useSeconds: false, + useCurrent: true, + calendarWeeks: false, + minuteStepping: 1, + minDate: moment({y: 1900}), + maxDate: moment().add(100, 'y'), + showToday: true, + collapse: true, + language: moment.locale(), + defaultDate: '', + disabledDates: false, + enabledDates: false, + icons: {}, + useStrict: false, + direction: 'auto', + sideBySide: false, + daysOfWeekDisabled: [], + widgetParent: false + }; +})); diff --git a/public/admin/view/javascript/jquery/datetimepicker/moment/locales.js b/public/admin/view/javascript/jquery/datetimepicker/moment/locales.js new file mode 100644 index 0000000..583ab58 --- /dev/null +++ b/public/admin/view/javascript/jquery/datetimepicker/moment/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 <jeeeyul@gmail.com> + +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č <miodrag@restartit.me> : 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 <robbiecloset@gmail.com> : 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ć<milanjanackovic@gmail.com> : 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ć<milanjanackovic@gmail.com> : 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<mail@nicolai.io> : 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/public/admin/view/javascript/jquery/datetimepicker/moment/locales.min.js b/public/admin/view/javascript/jquery/datetimepicker/moment/locales.min.js new file mode 100644 index 0000000..54698df --- /dev/null +++ b/public/admin/view/javascript/jquery/datetimepicker/moment/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 <jeeeyul@gmail.com> +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č <miodrag@restartit.me> : 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 <robbiecloset@gmail.com> : 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ć<milanjanackovic@gmail.com> : 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ć<milanjanackovic@gmail.com> : 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<mail@nicolai.io> : 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/public/admin/view/javascript/jquery/datetimepicker/moment/moment-with-locales.js b/public/admin/view/javascript/jquery/datetimepicker/moment/moment-with-locales.js new file mode 100644 index 0000000..67447c2 --- /dev/null +++ b/public/admin/view/javascript/jquery/datetimepicker/moment/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 <jeeeyul@gmail.com> + +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č <miodrag@restartit.me> : 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 <robbiecloset@gmail.com> : 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ć<milanjanackovic@gmail.com> : 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ć<milanjanackovic@gmail.com> : 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<mail@nicolai.io> : 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/public/admin/view/javascript/jquery/datetimepicker/moment/moment-with-locales.min.js b/public/admin/view/javascript/jquery/datetimepicker/moment/moment-with-locales.min.js new file mode 100644 index 0000000..a2842a7 --- /dev/null +++ b/public/admin/view/javascript/jquery/datetimepicker/moment/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;c<a.length;++c)d.push(b(a[c],c));return d}function j(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function k(a,b){for(var c in b)j(b,c)&&(a[c]=b[c]);return j(b,"toString")&&(a.toString=b.toString),j(b,"valueOf")&&(a.valueOf=b.valueOf),a}function l(a,b,c,d){return sb(a,b,c,d,!0).utc()}function m(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function n(a){return null==a._pf&&(a._pf=m()),a._pf}function o(a){if(null==a._isValid){var b=n(a),c=te.call(b.parsedDateParts,function(a){return null!=a}),d=!isNaN(a._d.getTime())&&b.overflow<0&&!b.empty&&!b.invalidMonth&&!b.invalidWeekday&&!b.nullInput&&!b.invalidFormat&&!b.userInvalidated&&(!b.meridiem||b.meridiem&&c);if(a._strict&&(d=d&&0===b.charsLeftOver&&0===b.unusedTokens.length&&void 0===b.bigHour),null!=Object.isFrozen&&Object.isFrozen(a))return d;a._isValid=d}return a._isValid}function p(a){var b=l(NaN);return null!=a?k(n(b),a):n(b).userInvalidated=!0,b}function q(a,b){var c,d,e;if(f(b._isAMomentObject)||(a._isAMomentObject=b._isAMomentObject),f(b._i)||(a._i=b._i),f(b._f)||(a._f=b._f),f(b._l)||(a._l=b._l),f(b._strict)||(a._strict=b._strict),f(b._tzm)||(a._tzm=b._tzm),f(b._isUTC)||(a._isUTC=b._isUTC),f(b._offset)||(a._offset=b._offset),f(b._pf)||(a._pf=n(b)),f(b._locale)||(a._locale=b._locale),ue.length>0)for(c=0;c<ue.length;c++)d=ue[c],e=b[d],f(e)||(a[d]=e);return a}function r(b){q(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),ve===!1&&(ve=!0,a.updateOffset(this),ve=!1)}function s(a){return a instanceof r||null!=a&&null!=a._isAMomentObject}function t(a){return a<0?Math.ceil(a)||0:Math.floor(a)}function u(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=t(b)),c}function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;d<e;d++)(c&&a[d]!==b[d]||!c&&u(a[d])!==u(b[d]))&&g++;return g+f}function w(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function x(b,c){var d=!0;return k(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,b),d){for(var e,f=[],g=0;g<arguments.length;g++){if(e="","object"==typeof arguments[g]){e+="\n["+g+"] ";for(var h in arguments[0])e+=h+": "+arguments[0][h]+", ";e=e.slice(0,-2)}else e=arguments[g];f.push(e)}w(b+"\nArguments: "+Array.prototype.slice.call(f).join("")+"\n"+(new Error).stack),d=!1}return c.apply(this,arguments)},c)}function y(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),we[b]||(w(c),we[b]=!0)}function z(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function A(a){var b,c;for(c in a)b=a[c],z(b)?this[c]=b:this["_"+c]=b;this._config=a,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function B(a,b){var c,e=k({},a);for(c in b)j(b,c)&&(d(a[c])&&d(b[c])?(e[c]={},k(e[c],a[c]),k(e[c],b[c])):null!=b[c]?e[c]=b[c]:delete e[c]);for(c in a)j(a,c)&&!j(b,c)&&d(a[c])&&(e[c]=k({},e[c]));return e}function C(a){null!=a&&this.set(a)}function D(a,b,c){var d=this._calendar[a]||this._calendar.sameElse;return z(d)?d.call(b,c):d}function E(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function F(){return this._invalidDate}function G(a){return this._ordinal.replace("%d",a)}function H(a,b,c,d){var e=this._relativeTime[c];return z(e)?e(a,b,c,d):e.replace(/%d/i,a)}function I(a,b){var c=this._relativeTime[a>0?"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<c.length;d++)this[c[d].unit](a[c[d].unit])}else if(a=K(a),z(this[a]))return this[a](b);return this}function T(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=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<c;b++)Le[d[b]]?d[b]=Le[d[b]]:d[b]=V(d[b]);return function(b){var e,f="";for(e=0;e<c;e++)f+=z(d[e])?d[e].call(b,a):d[e];return f}}function X(a,b){return a.isValid()?(b=Y(b,a.localeData()),Ke[b]=Ke[b]||W(b),Ke[b](a)):a.localeData().invalidDate()}function Y(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Je.lastIndex=0;d>=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<a.length;c++)cf[a[c]]=d}function ca(a,b){ba(a,function(a,c,d,e){d._w=d._w||{},b(a,d._w,d,e)})}function da(a,b,c){null!=b&&j(cf,a)&&cf[a](b,c._a,c,a)}function ea(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function fa(a,b){return a?c(this._months)?this._months[a.month()]:this._months[(this._months.isFormat||of).test(b)?"format":"standalone"][a.month()]:c(this._months)?this._months:this._months.standalone}function ga(a,b){return a?c(this._monthsShort)?this._monthsShort[a.month()]:this._monthsShort[of.test(b)?"format":"standalone"][a.month()]:c(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ha(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;d<12;++d)f=l([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,"").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,"").toLocaleLowerCase();return c?"MMM"===b?(e=nf.call(this._shortMonthsParse,g),e!==-1?e:null):(e=nf.call(this._longMonthsParse,g),e!==-1?e:null):"MMM"===b?(e=nf.call(this._shortMonthsParse,g),e!==-1?e:(e=nf.call(this._longMonthsParse,g),e!==-1?e:null)):(e=nf.call(this._longMonthsParse,g),e!==-1?e:(e=nf.call(this._shortMonthsParse,g),e!==-1?e:null))}function ia(a,b,c){var d,e,f;if(this._monthsParseExact)return ha.call(this,a,b,c);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;d<12;d++){if(e=l([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function ja(a,b){var c;if(!a.isValid())return a;if("string"==typeof b)if(/^\d+$/.test(b))b=u(b);else if(b=a.localeData().monthsParse(b),!g(b))return a;return c=Math.min(a.date(),ea(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function ka(b){return null!=b?(ja(this,b),a.updateOffset(this,!0),this):P(this,"Month")}function la(){return ea(this.year(),this.month())}function ma(a){return this._monthsParseExact?(j(this,"_monthsRegex")||oa.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):(j(this,"_monthsShortRegex")||(this._monthsShortRegex=rf),this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex)}function na(a){return this._monthsParseExact?(j(this,"_monthsRegex")||oa.call(this),a?this._monthsStrictRegex:this._monthsRegex):(j(this,"_monthsRegex")||(this._monthsRegex=sf),this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex)}function oa(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;b<12;b++)c=l([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(d.sort(a),e.sort(a),f.sort(a),b=0;b<12;b++)d[b]=aa(d[b]),e[b]=aa(e[b]);for(b=0;b<24;b++)f[b]=aa(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")","i")}function pa(a){return qa(a)?366:365}function qa(a){return a%4===0&&a%100!==0||a%400===0}function ra(){return qa(this.year())}function sa(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return a<100&&a>=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;f<a.length;){for(e=Xa(a[f]).split("-"),b=e.length,c=Xa(a[f+1]),c=c?c.split("-"):null;b>0;){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&&(b<df||b>ff)&&(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;b<c;b++)if(Kf[b][1].exec(i[1])){e=Kf[b][0],d=Kf[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=Lf.length;b<c;b++)if(Lf[b][1].exec(i[3])){f=(i[2]||" ")+Lf[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!Jf.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),lb(a)}else a._isValid=!1}function fb(a){var b,c,d,e,f,g,h,i,j={" GMT":" +0000"," EDT":" -0400"," EST":" -0500"," CDT":" -0500"," CST":" -0600"," MDT":" -0600"," MST":" -0700"," PDT":" -0700"," PST":" -0800"},k="YXWVUTSRQPONZABCDEFGHIKLM";if(b=a._i.replace(/\([^\)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s|\s$/g,""),c=Nf.exec(b)){if(d=c[1]?"ddd"+(5===c[1].length?", ":" "):"",e="D MMM "+(c[2].length>10?"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;c<e.length;c++)f=e[c],d=(h.match($(f,b))||[])[0],d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&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;e<a._f.length;e++)f=0,b=q({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._f=a._f[e],lb(b),o(b)&&(f+=n(b).charsLeftOver,f+=10*n(b).unusedTokens.length,n(b).score=f,(null==d||f<d)&&(d=f,c=b));k(a,c||b)}function ob(a){if(!a._d){var b=L(a._i);a._a=i([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),jb(a)}}function pb(a){var b=new r(db(qb(a)));return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function qb(a){var b=a._i,d=a._f;return a._locale=a._locale||bb(a._l),null===b||void 0===d&&""===b?p({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),s(b)?new r(db(b)):(h(b)?a._d=b:c(d)?nb(a):d?lb(a):rb(a),o(a)||(a._d=null),a))}function rb(b){var e=b._i;f(e)?b._d=new Date(a.now()):h(e)?b._d=new Date(e.valueOf()):"string"==typeof e?gb(b):c(e)?(b._a=i(e.slice(0),function(a){return parseInt(a,10)}),jb(b)):d(e)?ob(b):g(e)?b._d=new Date(e):a.createFromInputFallback(b)}function sb(a,b,f,g,h){var i={};return f!==!0&&f!==!1||(g=f,f=void 0),(d(a)&&e(a)||c(a)&&0===a.length)&&(a=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=h,i._l=f,i._i=a,i._f=b,i._strict=g,pb(i)}function tb(a,b,c,d){return sb(a,b,c,d,!1)}function ub(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return tb();for(d=b[0],e=1;e<b.length;++e)b[e].isValid()&&!b[e][a](d)||(d=b[e]);return d}function vb(){var a=[].slice.call(arguments,0);return ub("isBefore",a)}function wb(){var a=[].slice.call(arguments,0);return ub("isAfter",a)}function xb(a){for(var b in a)if(Rf.indexOf(b)===-1||null!=a[b]&&isNaN(a[b]))return!1;for(var c=!1,d=0;d<Rf.length;++d)if(a[Rf[d]]){if(c)return!1;parseFloat(a[Rf[d]])!==u(a[Rf[d]])&&(c=!0)}return!0}function yb(){return this._isValid}function zb(){return Sb(NaN)}function Ab(a){var b=L(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._isValid=xb(b),this._milliseconds=+k+1e3*j+6e4*i+1e3*h*60*60,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=bb(),this._bubble()}function Bb(a){return a instanceof Ab}function Cb(a){return a<0?Math.round(-1*a)*-1:Math.round(a)}function Db(a,b){U(a,0,0,function(){var a=this.utcOffset(),c="+";return a<0&&(a=-a,c="-"),c+T(~~(a/60),2)+b+T(~~a%60,2)})}function Eb(a,b){var c=(b||"").match(a);if(null===c)return null;var d=c[c.length-1]||[],e=(d+"").match(Sf)||["-",0,0],f=+(60*e[1])+u(e[2]);return 0===f?0:"+"===e[0]?f:-f}function Fb(b,c){var d,e;return c._isUTC?(d=c.clone(),e=(s(b)||h(b)?b.valueOf():tb(b).valueOf())-d.valueOf(),d._d.setTime(d._d.valueOf()+e),a.updateOffset(d,!1),d):tb(b).local()}function Gb(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Hb(b,c,d){var e,f=this._offset||0;if(!this.isValid())return null!=b?this:NaN;if(null!=b){if("string"==typeof b){if(b=Eb($e,b),null===b)return this}else Math.abs(b)<16&&!d&&(b=60*b);return!this._isUTC&&c&&(e=Gb(this)),this._offset=b,this._isUTC=!0,null!=e&&this.add(e,"m"),f!==b&&(!c||this._changeInProgress?Xb(this,Sb(b-f,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?f:Gb(this)}function Ib(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Jb(a){return this.utcOffset(0,a)}function Kb(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Gb(this),"m")),this}function Lb(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var a=Eb(Ze,this._i);null!=a?this.utcOffset(a):this.utcOffset(0,!0)}return this}function Mb(a){return!!this.isValid()&&(a=a?tb(a).utcOffset():0,(this.utcOffset()-a)%60===0)}function Nb(){return this.utcOffset()>this.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()<this.clone().startOf(b).valueOf())}function ac(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():this.clone().endOf(b).valueOf()<c.valueOf())}function bc(a,b,c,d){return d=d||"()",("("===d[0]?this.isAfter(a,c):!this.isBefore(a,c))&&(")"===d[1]?this.isBefore(b,c):!this.isAfter(b,c))}function cc(a,b){var c,d=s(a)?a:tb(a);return!(!this.isValid()||!d.isValid())&&(b=K(b||"millisecond"),"millisecond"===b?this.valueOf()===d.valueOf():(c=d.valueOf(),this.clone().startOf(b).valueOf()<=c&&c<=this.clone().endOf(b).valueOf()))}function dc(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function ec(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function fc(a,b,c){var d,e,f,g;return this.isValid()?(d=Fb(a,this),d.isValid()?(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b),"year"===b||"month"===b||"quarter"===b?(g=gc(this,d),"quarter"===b?g/=3:"year"===b&&(g/=12)):(f=this-d,g="second"===b?f/1e3:"minute"===b?f/6e4:"hour"===b?f/36e5:"day"===b?(f-e)/864e5:"week"===b?(f-e)/6048e5:f),c?g:t(g)):NaN):NaN}function gc(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return b-f<0?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)||0}function hc(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ic(){if(!this.isValid())return null;var a=this.clone().utc();return a.year()<0||a.year()>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]||e<ug.s&&["ss",e]||f<=1&&["m"]||f<ug.m&&["mm",f]||g<=1&&["h"]||g<ug.h&&["hh",g]||h<=1&&["d"]||h<ug.d&&["dd",h]||i<=1&&["M"]||i<ug.M&&["MM",i]||j<=1&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,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;d<c;d++)if(d in b&&a.call(this,b[d],d,b))return!0;return!1};var te=se,ue=a.momentProperties=[],ve=!1,we={};a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;var xe;xe=Object.keys?Object.keys:function(a){var b,c=[];for(b in a)j(a,b)&&c.push(b);return c};var ye,ze=xe,Ae={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Be={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"},Ce="Invalid date",De="%d",Ee=/\d{1,2}/,Fe={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"},Ge={},He={},Ie=/(\[[^\[]*\])|(\\)?([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,Je=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ke={},Le={},Me=/\d/,Ne=/\d\d/,Oe=/\d{3}/,Pe=/\d{4}/,Qe=/[+-]?\d{6}/,Re=/\d\d?/,Se=/\d\d\d\d?/,Te=/\d\d\d\d\d\d?/,Ue=/\d{1,3}/,Ve=/\d{1,4}/,We=/[+-]?\d{1,6}/,Xe=/\d+/,Ye=/[+-]?\d+/,Ze=/Z|[+-]\d\d:?\d\d/gi,$e=/Z|[+-]\d\d(?::?\d\d)?/gi,_e=/[+-]?\d+(\.\d{1,3})?/,af=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,bf={},cf={},df=0,ef=1,ff=2,gf=3,hf=4,jf=5,kf=6,lf=7,mf=8;ye=Array.prototype.indexOf?Array.prototype.indexOf:function(a){var b;for(b=0;b<this.length;++b)if(this[b]===a)return b;return-1};var nf=ye;U("M",["MM",2],"Mo",function(){return this.month()+1}),U("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),U("MMMM",0,0,function(a){return this.localeData().months(this,a)}),J("month","M"),M("month",8),Z("M",Re),Z("MM",Re,Ne),Z("MMM",function(a,b){return b.monthsShortRegex(a)}),Z("MMMM",function(a,b){return b.monthsRegex(a)}),ba(["M","MM"],function(a,b){b[ef]=u(a)-1}),ba(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[ef]=e:n(c).invalidMonth=a});var of=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,pf="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),qf="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),rf=af,sf=af;U("Y",0,0,function(){var a=this.year();return a<=9999?""+a:"+"+a}),U(0,["YY",2],0,function(){return this.year()%100}),U(0,["YYYY",4],0,"year"),U(0,["YYYYY",5],0,"year"),U(0,["YYYYYY",6,!0],0,"year"),J("year","y"),M("year",1),Z("Y",Ye),Z("YY",Re,Ne),Z("YYYY",Ve,Pe),Z("YYYYY",We,Qe),Z("YYYYYY",We,Qe),ba(["YYYYY","YYYYYY"],df),ba("YYYY",function(b,c){c[df]=2===b.length?a.parseTwoDigitYear(b):u(b)}),ba("YY",function(b,c){c[df]=a.parseTwoDigitYear(b)}),ba("Y",function(a,b){b[df]=parseInt(a,10)}),a.parseTwoDigitYear=function(a){return u(a)+(u(a)>68?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()?a<this?this:a:p()}),Pf=x("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=tb.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?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 <jeeeyul@gmail.com> +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č <miodrag@restartit.me> : 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 <robbiecloset@gmail.com> : 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ć<milanjanackovic@gmail.com> : 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ć<milanjanackovic@gmail.com> : 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<mail@nicolai.io> : 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/public/admin/view/javascript/jquery/datetimepicker/moment/moment.min.js b/public/admin/view/javascript/jquery/datetimepicker/moment/moment.min.js new file mode 100644 index 0000000..770f8bc --- /dev/null +++ b/public/admin/view/javascript/jquery/datetimepicker/moment/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;c<a.length;++c)d.push(b(a[c],c));return d}function j(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function k(a,b){for(var c in b)j(b,c)&&(a[c]=b[c]);return j(b,"toString")&&(a.toString=b.toString),j(b,"valueOf")&&(a.valueOf=b.valueOf),a}function l(a,b,c,d){return sb(a,b,c,d,!0).utc()}function m(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function n(a){return null==a._pf&&(a._pf=m()),a._pf}function o(a){if(null==a._isValid){var b=n(a),c=ud.call(b.parsedDateParts,function(a){return null!=a}),d=!isNaN(a._d.getTime())&&b.overflow<0&&!b.empty&&!b.invalidMonth&&!b.invalidWeekday&&!b.nullInput&&!b.invalidFormat&&!b.userInvalidated&&(!b.meridiem||b.meridiem&&c);if(a._strict&&(d=d&&0===b.charsLeftOver&&0===b.unusedTokens.length&&void 0===b.bigHour),null!=Object.isFrozen&&Object.isFrozen(a))return d;a._isValid=d}return a._isValid}function p(a){var b=l(NaN);return null!=a?k(n(b),a):n(b).userInvalidated=!0,b}function q(a,b){var c,d,e;if(f(b._isAMomentObject)||(a._isAMomentObject=b._isAMomentObject),f(b._i)||(a._i=b._i),f(b._f)||(a._f=b._f),f(b._l)||(a._l=b._l),f(b._strict)||(a._strict=b._strict),f(b._tzm)||(a._tzm=b._tzm),f(b._isUTC)||(a._isUTC=b._isUTC),f(b._offset)||(a._offset=b._offset),f(b._pf)||(a._pf=n(b)),f(b._locale)||(a._locale=b._locale),vd.length>0)for(c=0;c<vd.length;c++)d=vd[c],e=b[d],f(e)||(a[d]=e);return a}function r(b){q(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),wd===!1&&(wd=!0,a.updateOffset(this),wd=!1)}function s(a){return a instanceof r||null!=a&&null!=a._isAMomentObject}function t(a){return a<0?Math.ceil(a)||0:Math.floor(a)}function u(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=t(b)),c}function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;d<e;d++)(c&&a[d]!==b[d]||!c&&u(a[d])!==u(b[d]))&&g++;return g+f}function w(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function x(b,c){var d=!0;return k(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,b),d){for(var e,f=[],g=0;g<arguments.length;g++){if(e="","object"==typeof arguments[g]){e+="\n["+g+"] ";for(var h in arguments[0])e+=h+": "+arguments[0][h]+", ";e=e.slice(0,-2)}else e=arguments[g];f.push(e)}w(b+"\nArguments: "+Array.prototype.slice.call(f).join("")+"\n"+(new Error).stack),d=!1}return c.apply(this,arguments)},c)}function y(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),xd[b]||(w(c),xd[b]=!0)}function z(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function A(a){var b,c;for(c in a)b=a[c],z(b)?this[c]=b:this["_"+c]=b;this._config=a,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function B(a,b){var c,e=k({},a);for(c in b)j(b,c)&&(d(a[c])&&d(b[c])?(e[c]={},k(e[c],a[c]),k(e[c],b[c])):null!=b[c]?e[c]=b[c]:delete e[c]);for(c in a)j(a,c)&&!j(b,c)&&d(a[c])&&(e[c]=k({},e[c]));return e}function C(a){null!=a&&this.set(a)}function D(a,b,c){var d=this._calendar[a]||this._calendar.sameElse;return z(d)?d.call(b,c):d}function E(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function F(){return this._invalidDate}function G(a){return this._ordinal.replace("%d",a)}function H(a,b,c,d){var e=this._relativeTime[c];return z(e)?e(a,b,c,d):e.replace(/%d/i,a)}function I(a,b){var c=this._relativeTime[a>0?"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<c.length;d++)this[c[d].unit](a[c[d].unit])}else if(a=K(a),z(this[a]))return this[a](b);return this}function T(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=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<c;b++)Md[d[b]]?d[b]=Md[d[b]]:d[b]=V(d[b]);return function(b){var e,f="";for(e=0;e<c;e++)f+=z(d[e])?d[e].call(b,a):d[e];return f}}function X(a,b){return a.isValid()?(b=Y(b,a.localeData()),Ld[b]=Ld[b]||W(b),Ld[b](a)):a.localeData().invalidDate()}function Y(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Kd.lastIndex=0;d>=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<a.length;c++)de[a[c]]=d}function ca(a,b){ba(a,function(a,c,d,e){d._w=d._w||{},b(a,d._w,d,e)})}function da(a,b,c){null!=b&&j(de,a)&&de[a](b,c._a,c,a)}function ea(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function fa(a,b){return a?c(this._months)?this._months[a.month()]:this._months[(this._months.isFormat||oe).test(b)?"format":"standalone"][a.month()]:c(this._months)?this._months:this._months.standalone}function ga(a,b){return a?c(this._monthsShort)?this._monthsShort[a.month()]:this._monthsShort[oe.test(b)?"format":"standalone"][a.month()]:c(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ha(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;d<12;++d)f=l([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,"").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,"").toLocaleLowerCase();return c?"MMM"===b?(e=ne.call(this._shortMonthsParse,g),e!==-1?e:null):(e=ne.call(this._longMonthsParse,g),e!==-1?e:null):"MMM"===b?(e=ne.call(this._shortMonthsParse,g),e!==-1?e:(e=ne.call(this._longMonthsParse,g),e!==-1?e:null)):(e=ne.call(this._longMonthsParse,g),e!==-1?e:(e=ne.call(this._shortMonthsParse,g),e!==-1?e:null))}function ia(a,b,c){var d,e,f;if(this._monthsParseExact)return ha.call(this,a,b,c);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;d<12;d++){if(e=l([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function ja(a,b){var c;if(!a.isValid())return a;if("string"==typeof b)if(/^\d+$/.test(b))b=u(b);else if(b=a.localeData().monthsParse(b),!g(b))return a;return c=Math.min(a.date(),ea(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function ka(b){return null!=b?(ja(this,b),a.updateOffset(this,!0),this):P(this,"Month")}function la(){return ea(this.year(),this.month())}function ma(a){return this._monthsParseExact?(j(this,"_monthsRegex")||oa.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):(j(this,"_monthsShortRegex")||(this._monthsShortRegex=re),this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex)}function na(a){return this._monthsParseExact?(j(this,"_monthsRegex")||oa.call(this),a?this._monthsStrictRegex:this._monthsRegex):(j(this,"_monthsRegex")||(this._monthsRegex=se),this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex)}function oa(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;b<12;b++)c=l([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(d.sort(a),e.sort(a),f.sort(a),b=0;b<12;b++)d[b]=aa(d[b]),e[b]=aa(e[b]);for(b=0;b<24;b++)f[b]=aa(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")","i")}function pa(a){return qa(a)?366:365}function qa(a){return a%4===0&&a%100!==0||a%400===0}function ra(){return qa(this.year())}function sa(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return a<100&&a>=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;f<a.length;){for(e=Xa(a[f]).split("-"),b=e.length,c=Xa(a[f+1]),c=c?c.split("-"):null;b>0;){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&&(b<ee||b>ge)&&(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;b<c;b++)if(Ke[b][1].exec(i[1])){e=Ke[b][0],d=Ke[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=Le.length;b<c;b++)if(Le[b][1].exec(i[3])){f=(i[2]||" ")+Le[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!Je.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),lb(a)}else a._isValid=!1}function fb(a){var b,c,d,e,f,g,h,i,j={" GMT":" +0000"," EDT":" -0400"," EST":" -0500"," CDT":" -0500"," CST":" -0600"," MDT":" -0600"," MST":" -0700"," PDT":" -0700"," PST":" -0800"},k="YXWVUTSRQPONZABCDEFGHIKLM";if(b=a._i.replace(/\([^\)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s|\s$/g,""),c=Ne.exec(b)){if(d=c[1]?"ddd"+(5===c[1].length?", ":" "):"",e="D MMM "+(c[2].length>10?"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;c<e.length;c++)f=e[c],d=(h.match($(f,b))||[])[0],d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&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;e<a._f.length;e++)f=0,b=q({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._f=a._f[e],lb(b),o(b)&&(f+=n(b).charsLeftOver,f+=10*n(b).unusedTokens.length,n(b).score=f,(null==d||f<d)&&(d=f,c=b));k(a,c||b)}function ob(a){if(!a._d){var b=L(a._i);a._a=i([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),jb(a)}}function pb(a){var b=new r(db(qb(a)));return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function qb(a){var b=a._i,d=a._f;return a._locale=a._locale||bb(a._l),null===b||void 0===d&&""===b?p({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),s(b)?new r(db(b)):(h(b)?a._d=b:c(d)?nb(a):d?lb(a):rb(a),o(a)||(a._d=null),a))}function rb(b){var e=b._i;f(e)?b._d=new Date(a.now()):h(e)?b._d=new Date(e.valueOf()):"string"==typeof e?gb(b):c(e)?(b._a=i(e.slice(0),function(a){return parseInt(a,10)}),jb(b)):d(e)?ob(b):g(e)?b._d=new Date(e):a.createFromInputFallback(b)}function sb(a,b,f,g,h){var i={};return f!==!0&&f!==!1||(g=f,f=void 0),(d(a)&&e(a)||c(a)&&0===a.length)&&(a=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=h,i._l=f,i._i=a,i._f=b,i._strict=g,pb(i)}function tb(a,b,c,d){return sb(a,b,c,d,!1)}function ub(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return tb();for(d=b[0],e=1;e<b.length;++e)b[e].isValid()&&!b[e][a](d)||(d=b[e]);return d}function vb(){var a=[].slice.call(arguments,0);return ub("isBefore",a)}function wb(){var a=[].slice.call(arguments,0);return ub("isAfter",a)}function xb(a){for(var b in a)if(Re.indexOf(b)===-1||null!=a[b]&&isNaN(a[b]))return!1;for(var c=!1,d=0;d<Re.length;++d)if(a[Re[d]]){if(c)return!1;parseFloat(a[Re[d]])!==u(a[Re[d]])&&(c=!0)}return!0}function yb(){return this._isValid}function zb(){return Sb(NaN)}function Ab(a){var b=L(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._isValid=xb(b),this._milliseconds=+k+1e3*j+6e4*i+1e3*h*60*60,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=bb(),this._bubble()}function Bb(a){return a instanceof Ab}function Cb(a){return a<0?Math.round(-1*a)*-1:Math.round(a)}function Db(a,b){U(a,0,0,function(){var a=this.utcOffset(),c="+";return a<0&&(a=-a,c="-"),c+T(~~(a/60),2)+b+T(~~a%60,2)})}function Eb(a,b){var c=(b||"").match(a);if(null===c)return null;var d=c[c.length-1]||[],e=(d+"").match(Se)||["-",0,0],f=+(60*e[1])+u(e[2]);return 0===f?0:"+"===e[0]?f:-f}function Fb(b,c){var d,e;return c._isUTC?(d=c.clone(),e=(s(b)||h(b)?b.valueOf():tb(b).valueOf())-d.valueOf(),d._d.setTime(d._d.valueOf()+e),a.updateOffset(d,!1),d):tb(b).local()}function Gb(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Hb(b,c,d){var e,f=this._offset||0;if(!this.isValid())return null!=b?this:NaN;if(null!=b){if("string"==typeof b){if(b=Eb(_d,b),null===b)return this}else Math.abs(b)<16&&!d&&(b=60*b);return!this._isUTC&&c&&(e=Gb(this)),this._offset=b,this._isUTC=!0,null!=e&&this.add(e,"m"),f!==b&&(!c||this._changeInProgress?Xb(this,Sb(b-f,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?f:Gb(this)}function Ib(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Jb(a){return this.utcOffset(0,a)}function Kb(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Gb(this),"m")),this}function Lb(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var a=Eb($d,this._i);null!=a?this.utcOffset(a):this.utcOffset(0,!0)}return this}function Mb(a){return!!this.isValid()&&(a=a?tb(a).utcOffset():0,(this.utcOffset()-a)%60===0)}function Nb(){return this.utcOffset()>this.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()<this.clone().startOf(b).valueOf())}function ac(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():this.clone().endOf(b).valueOf()<c.valueOf())}function bc(a,b,c,d){return d=d||"()",("("===d[0]?this.isAfter(a,c):!this.isBefore(a,c))&&(")"===d[1]?this.isBefore(b,c):!this.isAfter(b,c))}function cc(a,b){var c,d=s(a)?a:tb(a);return!(!this.isValid()||!d.isValid())&&(b=K(b||"millisecond"),"millisecond"===b?this.valueOf()===d.valueOf():(c=d.valueOf(),this.clone().startOf(b).valueOf()<=c&&c<=this.clone().endOf(b).valueOf()))}function dc(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function ec(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function fc(a,b,c){var d,e,f,g;return this.isValid()?(d=Fb(a,this),d.isValid()?(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b),"year"===b||"month"===b||"quarter"===b?(g=gc(this,d),"quarter"===b?g/=3:"year"===b&&(g/=12)):(f=this-d,g="second"===b?f/1e3:"minute"===b?f/6e4:"hour"===b?f/36e5:"day"===b?(f-e)/864e5:"week"===b?(f-e)/6048e5:f),c?g:t(g)):NaN):NaN}function gc(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return b-f<0?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)||0}function hc(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ic(){if(!this.isValid())return null;var a=this.clone().utc();return a.year()<0||a.year()>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]||e<vf.s&&["ss",e]||f<=1&&["m"]||f<vf.m&&["mm",f]||g<=1&&["h"]||g<vf.h&&["hh",g]||h<=1&&["d"]||h<vf.d&&["dd",h]||i<=1&&["M"]||i<vf.M&&["MM",i]||j<=1&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,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;d<c;d++)if(d in b&&a.call(this,b[d],d,b))return!0;return!1};var ud=td,vd=a.momentProperties=[],wd=!1,xd={};a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;var yd;yd=Object.keys?Object.keys:function(a){var b,c=[];for(b in a)j(a,b)&&c.push(b);return c};var zd,Ad=yd,Bd={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Cd={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"},Dd="Invalid date",Ed="%d",Fd=/\d{1,2}/,Gd={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"},Hd={},Id={},Jd=/(\[[^\[]*\])|(\\)?([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,Kd=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ld={},Md={},Nd=/\d/,Od=/\d\d/,Pd=/\d{3}/,Qd=/\d{4}/,Rd=/[+-]?\d{6}/,Sd=/\d\d?/,Td=/\d\d\d\d?/,Ud=/\d\d\d\d\d\d?/,Vd=/\d{1,3}/,Wd=/\d{1,4}/,Xd=/[+-]?\d{1,6}/,Yd=/\d+/,Zd=/[+-]?\d+/,$d=/Z|[+-]\d\d:?\d\d/gi,_d=/Z|[+-]\d\d(?::?\d\d)?/gi,ae=/[+-]?\d+(\.\d{1,3})?/,be=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,ce={},de={},ee=0,fe=1,ge=2,he=3,ie=4,je=5,ke=6,le=7,me=8;zd=Array.prototype.indexOf?Array.prototype.indexOf:function(a){var b;for(b=0;b<this.length;++b)if(this[b]===a)return b;return-1};var ne=zd;U("M",["MM",2],"Mo",function(){return this.month()+1}),U("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),U("MMMM",0,0,function(a){return this.localeData().months(this,a)}),J("month","M"),M("month",8),Z("M",Sd),Z("MM",Sd,Od),Z("MMM",function(a,b){return b.monthsShortRegex(a)}),Z("MMMM",function(a,b){return b.monthsRegex(a)}),ba(["M","MM"],function(a,b){b[fe]=u(a)-1}),ba(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[fe]=e:n(c).invalidMonth=a});var oe=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,pe="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),qe="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),re=be,se=be;U("Y",0,0,function(){var a=this.year();return a<=9999?""+a:"+"+a}),U(0,["YY",2],0,function(){return this.year()%100}),U(0,["YYYY",4],0,"year"),U(0,["YYYYY",5],0,"year"),U(0,["YYYYYY",6,!0],0,"year"),J("year","y"),M("year",1),Z("Y",Zd),Z("YY",Sd,Od),Z("YYYY",Wd,Qd),Z("YYYYY",Xd,Rd),Z("YYYYYY",Xd,Rd),ba(["YYYYY","YYYYYY"],ee),ba("YYYY",function(b,c){c[ee]=2===b.length?a.parseTwoDigitYear(b):u(b)}),ba("YY",function(b,c){c[ee]=a.parseTwoDigitYear(b)}),ba("Y",function(a,b){b[ee]=parseInt(a,10)}),a.parseTwoDigitYear=function(a){return u(a)+(u(a)>68?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()?a<this?this:a:p()}),Pe=x("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=tb.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?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/public/admin/view/javascript/jquery/datetimepicker/moment/tests.js b/public/admin/view/javascript/jquery/datetimepicker/moment/tests.js new file mode 100644 index 0000000..cf9dfce --- /dev/null +++ b/public/admin/view/javascript/jquery/datetimepicker/moment/tests.js @@ -0,0 +1,78265 @@ + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('af'); + +test('parse', function (assert) { + var tests = 'Januarie Jan_Februarie Feb_Maart Mrt_April Apr_Mei Mei_Junie Jun_Julie Jul_Augustus Aug_September Sep_Oktober Okt_November Nov_Desember Des'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sondag, Februarie 14de 2010, 3:25:50 nm'], + ['ddd, hA', 'Son, 3NM'], + ['M Mo MM MMMM MMM', '2 2de 02 Februarie Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14de 14'], + ['d do dddd ddd dd', '0 0de Sondag Son So'], + ['DDD DDDo DDDD', '45 45ste 045'], + ['w wo ww', '6 6de 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'nm NM'], + ['[the] DDDo [day of the year]', 'the 45ste day of the year'], + ['LT', '15:25'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 Februarie 2010'], + ['LLL', '14 Februarie 2010 15:25'], + ['LLLL', 'Sondag, 14 Februarie 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 15:25'], + ['llll', 'Son, 14 Feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste'); +}); + +test('format month', function (assert) { + var expected = 'Januarie Jan_Februarie Feb_Maart Mrt_April Apr_Mei Mei_Junie Jun_Julie Jul_Augustus Aug_September Sep_Oktober Okt_November Nov_Desember Des'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Sondag Son So_Maandag Maa Ma_Dinsdag Din Di_Woensdag Woe Wo_Donderdag Don Do_Vrydag Vry Vr_Saterdag Sat Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '\'n paar sekondes', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '\'n minuut', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '\'n minuut', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minute', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minute', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '\'n uur', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '\'n uur', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ure', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ure', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ure', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '\'n dag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '\'n dag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dae', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '\'n dag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dae', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dae', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '\'n maand', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '\'n maand', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '\'n maand', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 maande', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 maande', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 maande', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '\'n maand', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 maande', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '\'n jaar', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jaar', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '\'n jaar', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jaar', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'oor \'n paar sekondes', 'prefix'); + assert.equal(moment(0).from(30000), '\'n paar sekondes gelede', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), '\'n paar sekondes gelede', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'oor \'n paar sekondes', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'oor 5 dae', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Vandag om 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Vandag om 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Vandag om 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Môre om 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Vandag om 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Gister om 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Laas] dddd [om] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Laas] dddd [om] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Laas] dddd [om] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ar-dz'); + +test('parse', function (assert) { + var tests = 'جانفي:جانفي_فيفري:فيفري_مارس:مارس_أفريل:أفريل_ماي:ماي_جوان:جوان_جويلية:جويلية_أوت:أوت_سبتمبر:سبتمبر_أكتوبر:أكتوبر_نوفمبر:نوفمبر_ديسمبر:ديسمبر'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(':'); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد, فيفري 14 2010, 3:25:50 pm'], + ['ddd, hA', 'احد, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 فيفري فيفري'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 الأحد احد أح'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LT', '15:25'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 فيفري 2010'], + ['LLL', '14 فيفري 2010 15:25'], + ['LLLL', 'الأحد 14 فيفري 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 فيفري 2010'], + ['lll', '14 فيفري 2010 15:25'], + ['llll', 'احد 14 فيفري 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'جانفي جانفي_فيفري فيفري_مارس مارس_أفريل أفريل_ماي ماي_جوان جوان_جويلية جويلية_أوت أوت_سبتمبر سبتمبر_أكتوبر أكتوبر_نوفمبر نوفمبر_ديسمبر ديسمبر'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'الأحد احد أح_الإثنين اثنين إث_الثلاثاء ثلاثاء ثلا_الأربعاء اربعاء أر_الخميس خميس خم_الجمعة جمعة جم_السبت سبت سب'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ثوان', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 دقائق', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 دقائق', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ساعات', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ساعات', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ساعات', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 أيام', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 أيام', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 أيام', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 أشهر', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 أشهر', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 أشهر', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 أشهر', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'سنة', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 سنوات', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'سنة', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 سنوات', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'في ثوان', 'prefix'); + assert.equal(moment(0).from(30000), 'منذ ثوان', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'منذ ثوان', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'في ثوان', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'في 5 أيام', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'اليوم على الساعة 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم على الساعة 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم على الساعة 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'غدا على الساعة 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم على الساعة 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس على الساعة 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2016, 1, 4]).format('w ww wo'), '5 05 5', 'Feb 4 2016 should be week 5'); + assert.equal(moment([2016, 0, 6]).format('w ww wo'), '1 01 1', 'Jan 6 2016 should be week 1'); + assert.equal(moment([2016, 0, 7]).format('w ww wo'), '1 01 1', 'Jan 7 2016 should be week 1'); + assert.equal(moment([2016, 0, 13]).format('w ww wo'), '2 02 2', 'Jan 13 2016 should be week 2'); + assert.equal(moment([2016, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2016 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ar-kw'); + +test('parse', function (assert) { + var tests = 'يناير:يناير_فبراير:فبراير_مارس:مارس_أبريل:أبريل_ماي:ماي_يونيو:يونيو_يوليوز:يوليوز_غشت:غشت_شتنبر:شتنبر_أكتوبر:أكتوبر_نونبر:نونبر_دجنبر:دجنبر'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(':'); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد, فبراير 14 2010, 3:25:50 pm'], + ['ddd, hA', 'احد, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 فبراير فبراير'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 الأحد احد ح'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '9 9 09'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LT', '15:25'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 فبراير 2010'], + ['LLL', '14 فبراير 2010 15:25'], + ['LLLL', 'الأحد 14 فبراير 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 فبراير 2010'], + ['lll', '14 فبراير 2010 15:25'], + ['llll', 'احد 14 فبراير 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'يناير يناير_فبراير فبراير_مارس مارس_أبريل أبريل_ماي ماي_يونيو يونيو_يوليوز يوليوز_غشت غشت_شتنبر شتنبر_أكتوبر أكتوبر_نونبر نونبر_دجنبر دجنبر'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'الأحد احد ح_الإتنين اتنين ن_الثلاثاء ثلاثاء ث_الأربعاء اربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ثوان', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 دقائق', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 دقائق', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ساعات', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ساعات', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ساعات', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 أيام', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 أيام', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 أيام', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 أشهر', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 أشهر', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 أشهر', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 أشهر', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'سنة', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 سنوات', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'سنة', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 سنوات', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'في ثوان', 'prefix'); + assert.equal(moment(0).from(30000), 'منذ ثوان', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'منذ ثوان', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'في ثوان', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'في 5 أيام', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'اليوم على الساعة 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم على الساعة 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم على الساعة 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'غدا على الساعة 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم على الساعة 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس على الساعة 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', 'Dec 31 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '2 02 2', 'Jan 1 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '3 03 3', 'Jan 8 2012 should be week 3'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 should be week 3'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '4 04 4', 'Jan 15 2012 should be week 4'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ar-ly'); + +var months = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر' +]; + +test('parse', function (assert) { + var tests = months, i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month()); + } + for (i = 0; i < 12; i++) { + equalTest(tests[i], 'MMM', i); + equalTest(tests[i], 'MMM', i); + equalTest(tests[i], 'MMMM', i); + equalTest(tests[i], 'MMMM', i); + equalTest(tests[i].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد، فبراير 14 2010، 3:25:50 م'], + ['ddd, hA', 'أحد، 3م'], + ['M Mo MM MMMM MMM', '2 2 02 فبراير فبراير'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 الأحد أحد ح'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'م م'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LT', '15:25'], + ['LTS', '15:25:50'], + ['L', '14/\u200f2/\u200f2010'], + ['LL', '14 فبراير 2010'], + ['LLL', '14 فبراير 2010 15:25'], + ['LLLL', 'الأحد 14 فبراير 2010 15:25'], + ['l', '14/\u200f2/\u200f2010'], + ['ll', '14 فبراير 2010'], + ['lll', '14 فبراير 2010 15:25'], + ['llll', 'أحد 14 فبراير 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = months, i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM'), expected[i], expected[i]); + assert.equal(moment([2011, i, 1]).format('MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'الأحد أحد ح_الإثنين إثنين ن_الثلاثاء ثلاثاء ث_الأربعاء أربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '44 ثانية', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة واحدة', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة واحدة', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'دقيقتان', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 دقيقة', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة واحدة', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة واحدة', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'ساعتان', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ساعات', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ساعة', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم واحد', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم واحد', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'يومان', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم واحد', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 أيام', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 يومًا', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر واحد', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر واحد', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر واحد', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'شهران', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'شهران', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 أشهر', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر واحد', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 أشهر', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'عام واحد', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'عامان', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'عام واحد', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 أعوام', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'بعد 30 ثانية', 'prefix'); + assert.equal(moment(0).from(30000), 'منذ 30 ثانية', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'منذ ثانية واحدة', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'بعد 30 ثانية', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'بعد 5 أيام', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'اليوم عند الساعة 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم عند الساعة 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم عند الساعة 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'غدًا عند الساعة 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم عند الساعة 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس عند الساعة 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting wednesday custom', function (assert) { + assert.equal(moment('2003 1 6', 'gggg w d').format('YYYY-MM-DD'), '2002-12-28', 'Week 1 of 2003 should be Dec 28 2002'); + assert.equal(moment('2003 1 0', 'gggg w e').format('YYYY-MM-DD'), '2002-12-28', 'Week 1 of 2003 should be Dec 28 2002'); + assert.equal(moment('2003 1 6', 'gggg w d').format('gggg w d'), '2003 1 6', 'Saturday of week 1 of 2003 parsed should be formatted as 2003 1 6'); + assert.equal(moment('2003 1 0', 'gggg w e').format('gggg w e'), '2003 1 0', '1st day of week 1 of 2003 parsed should be formatted as 2003 1 0'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', 'Dec 31 2011 should be week 1'); + assert.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', 'Jan 6 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 should be week 2'); + assert.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', 'Jan 13 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 should be week 3'); +}); + +test('no leading zeros in long date formats', function (assert) { + var i, j, longDateStr, shortDateStr; + for (i = 1; i <= 9; ++i) { + for (j = 1; j <= 9; ++j) { + longDateStr = moment([2014, i, j]).format('L'); + shortDateStr = moment([2014, i, j]).format('l'); + assert.equal(longDateStr, shortDateStr, 'should not have leading zeros in month or day'); + } + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ar-ma'); + +test('parse', function (assert) { + var tests = 'يناير:يناير_فبراير:فبراير_مارس:مارس_أبريل:أبريل_ماي:ماي_يونيو:يونيو_يوليوز:يوليوز_غشت:غشت_شتنبر:شتنبر_أكتوبر:أكتوبر_نونبر:نونبر_دجنبر:دجنبر'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(':'); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد, فبراير 14 2010, 3:25:50 pm'], + ['ddd, hA', 'احد, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 فبراير فبراير'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 الأحد احد ح'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LT', '15:25'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 فبراير 2010'], + ['LLL', '14 فبراير 2010 15:25'], + ['LLLL', 'الأحد 14 فبراير 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 فبراير 2010'], + ['lll', '14 فبراير 2010 15:25'], + ['llll', 'احد 14 فبراير 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'يناير يناير_فبراير فبراير_مارس مارس_أبريل أبريل_ماي ماي_يونيو يونيو_يوليوز يوليوز_غشت غشت_شتنبر شتنبر_أكتوبر أكتوبر_نونبر نونبر_دجنبر دجنبر'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'الأحد احد ح_الإتنين اتنين ن_الثلاثاء ثلاثاء ث_الأربعاء اربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ثوان', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 دقائق', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 دقائق', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ساعات', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ساعات', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ساعات', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 أيام', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 أيام', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 أيام', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 أشهر', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 أشهر', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 أشهر', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 أشهر', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'سنة', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 سنوات', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'سنة', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 سنوات', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'في ثوان', 'prefix'); + assert.equal(moment(0).from(30000), 'منذ ثوان', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'منذ ثوان', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'في ثوان', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'في 5 أيام', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'اليوم على الساعة 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم على الساعة 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم على الساعة 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'غدا على الساعة 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم على الساعة 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس على الساعة 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', 'Dec 31 2011 should be week 1'); + assert.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', 'Jan 6 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 should be week 2'); + assert.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', 'Jan 13 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ar-sa'); + +test('parse', function (assert) { + var tests = 'يناير:يناير_فبراير:فبراير_مارس:مارس_أبريل:أبريل_مايو:مايو_يونيو:يونيو_يوليو:يوليو_أغسطس:أغسطس_سبتمبر:سبتمبر_أكتوبر:أكتوبر_نوفمبر:نوفمبر_ديسمبر:ديسمبر'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month()); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(':'); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد، فبراير ١٤ ٢٠١٠، ٣:٢٥:٥٠ م'], + ['ddd, hA', 'أحد، ٣م'], + ['M Mo MM MMMM MMM', '٢ ٢ ٠٢ فبراير فبراير'], + ['YYYY YY', '٢٠١٠ ١٠'], + ['D Do DD', '١٤ ١٤ ١٤'], + ['d do dddd ddd dd', '٠ ٠ الأحد أحد ح'], + ['DDD DDDo DDDD', '٤٥ ٤٥ ٠٤٥'], + ['w wo ww', '٨ ٨ ٠٨'], + ['h hh', '٣ ٠٣'], + ['H HH', '١٥ ١٥'], + ['m mm', '٢٥ ٢٥'], + ['s ss', '٥٠ ٥٠'], + ['a A', 'م م'], + ['[the] DDDo [day of the year]', 'the ٤٥ day of the year'], + ['LT', '١٥:٢٥'], + ['LTS', '١٥:٢٥:٥٠'], + ['L', '١٤/٠٢/٢٠١٠'], + ['LL', '١٤ فبراير ٢٠١٠'], + ['LLL', '١٤ فبراير ٢٠١٠ ١٥:٢٥'], + ['LLLL', 'الأحد ١٤ فبراير ٢٠١٠ ١٥:٢٥'], + ['l', '١٤/٢/٢٠١٠'], + ['ll', '١٤ فبراير ٢٠١٠'], + ['lll', '١٤ فبراير ٢٠١٠ ١٥:٢٥'], + ['llll', 'أحد ١٤ فبراير ٢٠١٠ ١٥:٢٥'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '١', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '٢', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '٣', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '٤', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '٥', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '٦', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '٧', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '٨', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '٩', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '١٠', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '١١', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '١٢', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '١٣', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '١٤', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '١٥', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '١٦', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '١٧', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '١٨', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '١٩', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '٢٠', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '٢١', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '٢٢', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '٢٣', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '٢٤', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '٢٥', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '٢٦', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '٢٧', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '٢٨', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '٢٩', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '٣٠', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '٣١', '31'); +}); + +test('format month', function (assert) { + var expected = 'يناير يناير_فبراير فبراير_مارس مارس_أبريل أبريل_مايو مايو_يونيو يونيو_يوليو يوليو_أغسطس أغسطس_سبتمبر سبتمبر_أكتوبر أكتوبر_نوفمبر نوفمبر_ديسمبر ديسمبر'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'الأحد أحد ح_الإثنين إثنين ن_الثلاثاء ثلاثاء ث_الأربعاء أربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ثوان', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '٢ دقائق', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '٤٤ دقائق', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '٢ ساعات', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '٥ ساعات', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '٢١ ساعات', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '٢ أيام', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '٥ أيام', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '٢٥ أيام', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '٢ أشهر', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '٢ أشهر', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '٣ أشهر', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '٥ أشهر', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'سنة', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '٢ سنوات', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'سنة', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '٥ سنوات', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'في ثوان', 'prefix'); + assert.equal(moment(0).from(30000), 'منذ ثوان', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'منذ ثوان', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'في ثوان', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'في ٥ أيام', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'اليوم على الساعة ١٢:٠٠', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم على الساعة ١٢:٢٥', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم على الساعة ١٣:٠٠', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'غدا على الساعة ١٢:٠٠', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم على الساعة ١١:٠٠', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس على الساعة ١٢:٠٠', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting wednesday custom', function (assert) { + assert.equal(moment('2003 1 6', 'gggg w d').format('YYYY-MM-DD'), '٢٠٠٣-٠١-٠٤', '2003 1 6 : gggg w d'); + assert.equal(moment('2003 1 0', 'gggg w e').format('YYYY-MM-DD'), '٢٠٠٢-١٢-٢٩', '2003 1 0 : gggg w e'); + assert.equal(moment('2003 1 6', 'gggg w d').format('gggg w d'), '٢٠٠٣ ١ ٦', '2003 1 6 : gggg w d'); + assert.equal(moment('2003 1 0', 'gggg w e').format('gggg w e'), '٢٠٠٣ ١ ٠', '2003 1 0 : gggg w e'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 31]).format('w ww wo'), '٥٣ ٥٣ ٥٣', '2011 11 31'); + assert.equal(moment([2012, 0, 6]).format('w ww wo'), '١ ٠١ ١', '2012 0 6'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '١ ٠١ ١', '2012 0 7'); + assert.equal(moment([2012, 0, 13]).format('w ww wo'), '٢ ٠٢ ٢', '2012 0 13'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '٢ ٠٢ ٢', '2012 0 14'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ar-tn'); + +test('parse', function (assert) { + var tests = 'جانفي:جانفي_فيفري:فيفري_مارس:مارس_أفريل:أفريل_ماي:ماي_جوان:جوان_جويلية:جويلية_أوت:أوت_سبتمبر:سبتمبر_أكتوبر:أكتوبر_نوفمبر:نوفمبر_ديسمبر:ديسمبر'.split('_'), + i; + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(':'); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد, فيفري 14 2010, 3:25:50 pm'], + ['ddd, hA', 'أحد, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 فيفري فيفري'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 الأحد أحد ح'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LT', '15:25'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 فيفري 2010'], + ['LLL', '14 فيفري 2010 15:25'], + ['LLLL', 'الأحد 14 فيفري 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 فيفري 2010'], + ['lll', '14 فيفري 2010 15:25'], + ['llll', 'أحد 14 فيفري 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'جانفي جانفي_فيفري فيفري_مارس مارس_أفريل أفريل_ماي ماي_جوان جوان_جويلية جويلية_أوت أوت_سبتمبر سبتمبر_أكتوبر أكتوبر_نوفمبر نوفمبر_ديسمبر ديسمبر'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'الأحد أحد ح_الإثنين إثنين ن_الثلاثاء ثلاثاء ث_الأربعاء أربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({ + s: 44 + }), true), 'ثوان', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + s: 45 + }), true), 'دقيقة', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + s: 89 + }), true), 'دقيقة', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + s: 90 + }), true), '2 دقائق', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + m: 44 + }), true), '44 دقائق', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + m: 45 + }), true), 'ساعة', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + m: 89 + }), true), 'ساعة', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + m: 90 + }), true), '2 ساعات', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + h: 5 + }), true), '5 ساعات', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + h: 21 + }), true), '21 ساعات', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + h: 22 + }), true), 'يوم', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + h: 35 + }), true), 'يوم', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + h: 36 + }), true), '2 أيام', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 1 + }), true), 'يوم', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 5 + }), true), '5 أيام', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 25 + }), true), '25 أيام', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 26 + }), true), 'شهر', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 30 + }), true), 'شهر', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 43 + }), true), 'شهر', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 46 + }), true), '2 أشهر', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 74 + }), true), '2 أشهر', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 76 + }), true), '3 أشهر', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + M: 1 + }), true), 'شهر', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + M: 5 + }), true), '5 أشهر', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 345 + }), true), 'سنة', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 548 + }), true), '2 سنوات', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + y: 1 + }), true), 'سنة', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + y: 5 + }), true), '5 سنوات', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'في ثوان', 'prefix'); + assert.equal(moment(0).from(30000), 'منذ ثوان', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'منذ ثوان', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({ + s: 30 + }).fromNow(), 'في ثوان', 'in a few seconds'); + assert.equal(moment().add({ + d: 5 + }).fromNow(), 'في 5 أيام', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'اليوم على الساعة 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم على الساعة 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم على الساعة 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'غدا على الساعة 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم على الساعة 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس على الساعة 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({ + d: i + }); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({ + d: i + }); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({ + w: 1 + }), + weeksFromNow = moment().add({ + w: 1 + }); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({ + w: 2 + }); + weeksFromNow = moment().add({ + w: 2 + }); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ar'); + +var months = [ + 'كانون الثاني يناير', + 'شباط فبراير', + 'آذار مارس', + 'نيسان أبريل', + 'أيار مايو', + 'حزيران يونيو', + 'تموز يوليو', + 'آب أغسطس', + 'أيلول سبتمبر', + 'تشرين الأول أكتوبر', + 'تشرين الثاني نوفمبر', + 'كانون الأول ديسمبر' +]; + +test('parse', function (assert) { + var tests = months, i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month()); + } + for (i = 0; i < 12; i++) { + equalTest(tests[i], 'MMM', i); + equalTest(tests[i], 'MMM', i); + equalTest(tests[i], 'MMMM', i); + equalTest(tests[i], 'MMMM', i); + equalTest(tests[i].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد، شباط فبراير ١٤ ٢٠١٠، ٣:٢٥:٥٠ م'], + ['ddd, hA', 'أحد، ٣م'], + ['M Mo MM MMMM MMM', '٢ ٢ ٠٢ شباط فبراير شباط فبراير'], + ['YYYY YY', '٢٠١٠ ١٠'], + ['D Do DD', '١٤ ١٤ ١٤'], + ['d do dddd ddd dd', '٠ ٠ الأحد أحد ح'], + ['DDD DDDo DDDD', '٤٥ ٤٥ ٠٤٥'], + ['w wo ww', '٨ ٨ ٠٨'], + ['h hh', '٣ ٠٣'], + ['H HH', '١٥ ١٥'], + ['m mm', '٢٥ ٢٥'], + ['s ss', '٥٠ ٥٠'], + ['a A', 'م م'], + ['[the] DDDo [day of the year]', 'the ٤٥ day of the year'], + ['LT', '١٥:٢٥'], + ['LTS', '١٥:٢٥:٥٠'], + ['L', '١٤/\u200f٢/\u200f٢٠١٠'], + ['LL', '١٤ شباط فبراير ٢٠١٠'], + ['LLL', '١٤ شباط فبراير ٢٠١٠ ١٥:٢٥'], + ['LLLL', 'الأحد ١٤ شباط فبراير ٢٠١٠ ١٥:٢٥'], + ['l', '١٤/\u200f٢/\u200f٢٠١٠'], + ['ll', '١٤ شباط فبراير ٢٠١٠'], + ['lll', '١٤ شباط فبراير ٢٠١٠ ١٥:٢٥'], + ['llll', 'أحد ١٤ شباط فبراير ٢٠١٠ ١٥:٢٥'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '١', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '٢', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '٣', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '٤', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '٥', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '٦', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '٧', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '٨', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '٩', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '١٠', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '١١', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '١٢', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '١٣', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '١٤', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '١٥', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '١٦', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '١٧', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '١٨', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '١٩', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '٢٠', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '٢١', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '٢٢', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '٢٣', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '٢٤', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '٢٥', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '٢٦', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '٢٧', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '٢٨', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '٢٩', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '٣٠', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '٣١', '31'); +}); + +test('format month', function (assert) { + var expected = months, i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM'), expected[i], expected[i]); + assert.equal(moment([2011, i, 1]).format('MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'الأحد أحد ح_الإثنين إثنين ن_الثلاثاء ثلاثاء ث_الأربعاء أربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '٤٤ ثانية', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة واحدة', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة واحدة', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'دقيقتان', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '٤٤ دقيقة', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة واحدة', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة واحدة', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'ساعتان', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '٥ ساعات', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '٢١ ساعة', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم واحد', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم واحد', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'يومان', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم واحد', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '٥ أيام', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '٢٥ يومًا', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر واحد', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر واحد', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر واحد', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'شهران', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'شهران', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '٣ أشهر', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر واحد', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '٥ أشهر', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'عام واحد', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'عامان', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'عام واحد', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '٥ أعوام', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'بعد ٣٠ ثانية', 'prefix'); + assert.equal(moment(0).from(30000), 'منذ ٣٠ ثانية', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'منذ ثانية واحدة', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'بعد ٣٠ ثانية', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'بعد ٥ أيام', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'اليوم عند الساعة ١٢:٠٠', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم عند الساعة ١٢:٢٥', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم عند الساعة ١٣:٠٠', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'غدًا عند الساعة ١٢:٠٠', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم عند الساعة ١١:٠٠', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس عند الساعة ١٢:٠٠', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting wednesday custom', function (assert) { + assert.equal(moment('2003 1 6', 'gggg w d').format('YYYY-MM-DD'), '٢٠٠٢-١٢-٢٨', 'Week 1 of 2003 should be Dec 28 2002'); + assert.equal(moment('2003 1 0', 'gggg w e').format('YYYY-MM-DD'), '٢٠٠٢-١٢-٢٨', 'Week 1 of 2003 should be Dec 28 2002'); + assert.equal(moment('2003 1 6', 'gggg w d').format('gggg w d'), '٢٠٠٣ ١ ٦', 'Saturday of week 1 of 2003 parsed should be formatted as 2003 1 6'); + assert.equal(moment('2003 1 0', 'gggg w e').format('gggg w e'), '٢٠٠٣ ١ ٠', '1st day of week 1 of 2003 parsed should be formatted as 2003 1 0'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 31]).format('w ww wo'), '١ ٠١ ١', 'Dec 31 2011 should be week 1'); + assert.equal(moment([2012, 0, 6]).format('w ww wo'), '١ ٠١ ١', 'Jan 6 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '٢ ٠٢ ٢', 'Jan 7 2012 should be week 2'); + assert.equal(moment([2012, 0, 13]).format('w ww wo'), '٢ ٠٢ ٢', 'Jan 13 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '٣ ٠٣ ٣', 'Jan 14 2012 should be week 3'); +}); + +test('no leading zeros in long date formats', function (assert) { + var i, j, longDateStr, shortDateStr; + for (i = 1; i <= 9; ++i) { + for (j = 1; j <= 9; ++j) { + longDateStr = moment([2014, i, j]).format('L'); + shortDateStr = moment([2014, i, j]).format('l'); + assert.equal(longDateStr, shortDateStr, 'should not have leading zeros in month or day'); + } + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('az'); + +test('parse', function (assert) { + var tests = 'yanvar yan_fevral fev_mart mar_Aprel apr_may may_iyun iyn_iyul iyl_Avqust avq_sentyabr sen_oktyabr okt_noyabr noy_dekabr dek'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, D MMMM YYYY, HH:mm:ss', 'Bazar, 14 fevral 2010, 15:25:50'], + ['ddd, A h', 'Baz, gündüz 3'], + ['M Mo MM MMMM MMM', '2 2-nci 02 fevral fev'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-üncü 14'], + ['d do dddd ddd dd', '0 0-ıncı Bazar Baz Bz'], + ['DDD DDDo DDDD', '45 45-inci 045'], + ['w wo ww', '7 7-nci 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'gündüz gündüz'], + ['[ilin] DDDo [günü]', 'ilin 45-inci günü'], + ['LT', '15:25'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 fevral 2010'], + ['LLL', '14 fevral 2010 15:25'], + ['LLLL', 'Bazar, 14 fevral 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 fev 2010'], + ['lll', '14 fev 2010 15:25'], + ['llll', 'Baz, 14 fev 2010 15:25'] + ], + DDDo = [ + [359, '360-ıncı'], + [199, '200-üncü'], + [149, '150-nci'] + ], + dt = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + DDDoDt, + i; + + for (i = 0; i < a.length; i++) { + assert.equal(dt.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + for (i = 0; i < DDDo.length; i++) { + DDDoDt = moment([2010]); + assert.equal(DDDoDt.add(DDDo[i][0], 'days').format('DDDo'), DDDo[i][1], DDDo[i][0] + ' ---> ' + DDDo[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-inci', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-nci', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-üncü', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-üncü', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-inci', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-ncı', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-nci', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-inci', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-uncu', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-uncu', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-inci', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-nci', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-üncü', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-üncü', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-inci', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-ncı', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-nci', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-inci', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-uncu', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-nci', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-inci', '21th'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-nci', '22th'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-üncü', '23th'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-üncü', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-inci', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-ncı', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-nci', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-inci', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-uncu', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-uncu', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-inci', '31st'); +}); + +test('format month', function (assert) { + var expected = 'yanvar yan_fevral fev_mart mar_aprel apr_may may_iyun iyn_iyul iyl_avqust avq_sentyabr sen_oktyabr okt_noyabr noy_dekabr dek'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Bazar Baz Bz_Bazar ertəsi BzE BE_Çərşənbə axşamı ÇAx ÇA_Çərşənbə Çər Çə_Cümə axşamı CAx CA_Cümə Cüm Cü_Şənbə Şən Şə'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'birneçə saniyyə', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'bir dəqiqə', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'bir dəqiqə', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 dəqiqə', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 dəqiqə', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'bir saat', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'bir saat', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 saat', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 saat', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 saat', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'bir gün', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'bir gün', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 gün', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'bir gün', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 gün', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 gün', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'bir ay', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'bir ay', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ay', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ay', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ay', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'bir ay', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ay', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'bir il', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 il', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'bir il', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 il', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'birneçə saniyyə sonra', 'prefix'); + assert.equal(moment(0).from(30000), 'birneçə saniyyə əvvəl', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'birneçə saniyyə əvvəl', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'birneçə saniyyə sonra', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 gün sonra', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'bugün saat 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'bugün saat 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'bugün saat 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'sabah saat 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'bugün saat 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'dünən 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[gələn həftə] dddd [saat] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[gələn həftə] dddd [saat] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[gələn həftə] dddd [saat] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[keçən həftə] dddd [saat] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[keçən həftə] dddd [saat] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[keçən həftə] dddd [saat] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-inci', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-inci', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-nci', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-nci', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-üncü', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('be'); + +test('parse', function (assert) { + var tests = 'студзень студ_люты лют_сакавік сак_красавік крас_травень трав_чэрвень чэрв_ліпень ліп_жнівень жнів_верасень вер_кастрычнік каст_лістапад ліст_снежань снеж'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'нядзеля, 14-га лютага 2010, 15:25:50'], + ['ddd, h A', 'нд, 3 дня'], + ['M Mo MM MMMM MMM', '2 2-і 02 люты лют'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-га 14'], + ['d do dddd ddd dd', '0 0-ы нядзеля нд нд'], + ['DDD DDDo DDDD', '45 45-ы 045'], + ['w wo ww', '7 7-ы 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'дня дня'], + ['DDDo [дзень года]', '45-ы дзень года'], + ['LT', '15:25'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 лютага 2010 г.'], + ['LLL', '14 лютага 2010 г., 15:25'], + ['LLLL', 'нядзеля, 14 лютага 2010 г., 15:25'], + ['l', '14.2.2010'], + ['ll', '14 лют 2010 г.'], + ['lll', '14 лют 2010 г., 15:25'], + ['llll', 'нд, 14 лют 2010 г., 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format meridiem', function (assert) { + assert.equal(moment([2012, 11, 28, 0, 0]).format('A'), 'ночы', 'night'); + assert.equal(moment([2012, 11, 28, 3, 59]).format('A'), 'ночы', 'night'); + assert.equal(moment([2012, 11, 28, 4, 0]).format('A'), 'раніцы', 'morning'); + assert.equal(moment([2012, 11, 28, 11, 59]).format('A'), 'раніцы', 'morning'); + assert.equal(moment([2012, 11, 28, 12, 0]).format('A'), 'дня', 'afternoon'); + assert.equal(moment([2012, 11, 28, 16, 59]).format('A'), 'дня', 'afternoon'); + assert.equal(moment([2012, 11, 28, 17, 0]).format('A'), 'вечара', 'evening'); + assert.equal(moment([2012, 11, 28, 23, 59]).format('A'), 'вечара', 'evening'); +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ы', '1-ы'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-і', '2-і'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-і', '3-і'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-ы', '4-ы'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-ы', '5-ы'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-ы', '6-ы'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-ы', '7-ы'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-ы', '8-ы'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-ы', '9-ы'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-ы', '10-ы'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-ы', '11-ы'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-ы', '12-ы'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-ы', '13-ы'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-ы', '14-ы'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-ы', '15-ы'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-ы', '16-ы'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-ы', '17-ы'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-ы', '18-ы'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-ы', '19-ы'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-ы', '20-ы'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-ы', '21-ы'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-і', '22-і'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-і', '23-і'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-ы', '24-ы'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-ы', '25-ы'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-ы', '26-ы'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-ы', '27-ы'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-ы', '28-ы'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-ы', '29-ы'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-ы', '30-ы'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-ы', '31-ы'); +}); + +test('format month', function (assert) { + var expected = 'студзень студ_люты лют_сакавік сак_красавік крас_травень трав_чэрвень чэрв_ліпень ліп_жнівень жнів_верасень вер_кастрычнік каст_лістапад ліст_снежань снеж'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format month case', function (assert) { + var months = { + 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'), + 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + assert.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]); + } +}); + +test('format month case with escaped symbols', function (assert) { + var months = { + 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'), + 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2013, i, 1]).format('D[] MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + assert.equal(moment([2013, i, 1]).format('[<i>]D[</i>] [<b>]MMMM[</b>]'), '<i>1</i> <b>' + months.accusative[i] + '</b>', '1 <b>' + months.accusative[i] + '</b>'); + assert.equal(moment([2013, i, 1]).format('D[-ы дзень] MMMM'), '1-ы дзень ' + months.accusative[i], '1-ы дзень ' + months.accusative[i]); + assert.equal(moment([2013, i, 1]).format('D, MMMM'), '1, ' + months.nominative[i], '1, ' + months.nominative[i]); + } +}); + +test('format week', function (assert) { + var expected = 'нядзеля нд нд_панядзелак пн пн_аўторак ат ат_серада ср ср_чацвер чц чц_пятніца пт пт_субота сб сб'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'некалькі секунд', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'хвіліна', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'хвіліна', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 хвіліны', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 31}), true), '31 хвіліна', '31 minutes = 31 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 хвіліны', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'гадзіна', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'гадзіна', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 гадзіны', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 гадзін', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 гадзіна', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'дзень', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'дзень', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дні', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'дзень', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 дзён', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), '11 дзён', '11 days = 11 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), '21 дзень', '21 days = 21 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 дзён', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'месяц', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'месяц', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'месяц', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 месяцы', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 месяцы', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 месяцы', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'месяц', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 месяцаў', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'год', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 гады', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'год', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 гадоў', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'праз некалькі секунд', 'prefix'); + assert.equal(moment(0).from(30000), 'некалькі секунд таму', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'праз некалькі секунд', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'праз 5 дзён', 'in 5 days'); + assert.equal(moment().add({m: 31}).fromNow(), 'праз 31 хвіліну', 'in 31 minutes = in 31 minutes'); + assert.equal(moment().subtract({m: 31}).fromNow(), '31 хвіліну таму', '31 minutes ago = 31 minutes ago'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Сёння ў 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Сёння ў 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Сёння ў 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Заўтра ў 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Сёння ў 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Учора ў 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + function makeFormat(d) { + return '[У] dddd [ў] LT'; + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ы', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ы', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-і', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-і', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-і', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('bg'); + +test('parse', function (assert) { + var tests = 'януари янр_февруари фев_март мар_април апр_май май_юни юни_юли юли_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, H:mm:ss', 'неделя, февруари 14-ти 2010, 15:25:50'], + ['ddd, hA', 'нед, 3PM'], + ['M Mo MM MMMM MMM', '2 2-ри 02 февруари фев'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-ти 14'], + ['d do dddd ddd dd', '0 0-ев неделя нед нд'], + ['DDD DDDo DDDD', '45 45-ти 045'], + ['w wo ww', '7 7-ми 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45-ти day of the year'], + ['LT', '15:25'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 февруари 2010'], + ['LLL', '14 февруари 2010 15:25'], + ['LLLL', 'неделя, 14 февруари 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 фев 2010'], + ['lll', '14 фев 2010 15:25'], + ['llll', 'нед, 14 фев 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ви', '1-ви'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-ри', '2-ри'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-ти', '3-ти'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-ти', '4-ти'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-ти', '5-ти'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-ти', '6-ти'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-ми', '7-ми'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-ми', '8-ми'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-ти', '9-ти'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-ти', '10-ти'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-ти', '11-ти'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-ти', '12-ти'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-ти', '13-ти'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-ти', '14-ти'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-ти', '15-ти'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-ти', '16-ти'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-ти', '17-ти'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-ти', '18-ти'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-ти', '19-ти'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-ти', '20-ти'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-ви', '21-ви'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-ри', '22-ри'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-ти', '23-ти'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-ти', '24-ти'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-ти', '25-ти'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-ти', '26-ти'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-ми', '27-ми'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-ми', '28-ми'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-ти', '29-ти'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-ти', '30-ти'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-ви', '31-ви'); +}); + +test('format month', function (assert) { + var expected = 'януари янр_февруари фев_март мар_април апр_май май_юни юни_юли юли_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'неделя нед нд_понеделник пон пн_вторник вто вт_сряда сря ср_четвъртък чет чт_петък пет пт_събота съб сб'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'няколко секунди', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'минута', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'минута', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минути', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минути', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'час', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'час', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 часа', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 часа', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 часа', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ден', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ден', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дни', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ден', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 дни', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 дни', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'месец', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'месец', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'месец', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 месеца', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 месеца', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 месеца', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'месец', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 месеца', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'година', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 години', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'година', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 години', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'след няколко секунди', 'prefix'); + assert.equal(moment(0).from(30000), 'преди няколко секунди', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'преди няколко секунди', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'след няколко секунди', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'след 5 дни', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Днес в 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Днес в 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Днес в 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Утре в 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Днес в 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Вчера в 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [в] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [в] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [в] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + case 6: + return '[В изминалата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[В изминалия] dddd [в] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ви', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ви', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-ри', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-ри', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-ти', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('bn'); + +test('parse', function (assert) { + var tests = 'জানুয়ারী জানু_ফেব্রুয়ারি ফেব_মার্চ মার্চ_এপ্রিল এপ্র_মে মে_জুন জুন_জুলাই জুল_আগস্ট আগ_সেপ্টেম্বর সেপ্ট_অক্টোবর অক্টো_নভেম্বর নভে_ডিসেম্বর ডিসে'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss সময়', 'রবিবার, ১৪ ফেব্রুয়ারি ২০১০, দুপুর ৩:২৫:৫০ সময়'], + ['ddd, a h সময়', 'রবি, দুপুর ৩ সময়'], + ['M Mo MM MMMM MMM', '২ ২ ০২ ফেব্রুয়ারি ফেব'], + ['YYYY YY', '২০১০ ১০'], + ['D Do DD', '১৪ ১৪ ১৪'], + ['d do dddd ddd dd', '০ ০ রবিবার রবি রবি'], + ['DDD DDDo DDDD', '৪৫ ৪৫ ০৪৫'], + ['w wo ww', '৮ ৮ ০৮'], + ['h hh', '৩ ০৩'], + ['H HH', '১৫ ১৫'], + ['m mm', '২৫ ২৫'], + ['s ss', '৫০ ৫০'], + ['a A', 'দুপুর দুপুর'], + ['LT', 'দুপুর ৩:২৫ সময়'], + ['LTS', 'দুপুর ৩:২৫:৫০ সময়'], + ['L', '১৪/০২/২০১০'], + ['LL', '১৪ ফেব্রুয়ারি ২০১০'], + ['LLL', '১৪ ফেব্রুয়ারি ২০১০, দুপুর ৩:২৫ সময়'], + ['LLLL', 'রবিবার, ১৪ ফেব্রুয়ারি ২০১০, দুপুর ৩:২৫ সময়'], + ['l', '১৪/২/২০১০'], + ['ll', '১৪ ফেব ২০১০'], + ['lll', '১৪ ফেব ২০১০, দুপুর ৩:২৫ সময়'], + ['llll', 'রবি, ১৪ ফেব ২০১০, দুপুর ৩:২৫ সময়'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '১', '১'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '২', '২'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '৩', '৩'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '৪', '৪'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '৫', '৫'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '৬', '৬'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '৭', '৭'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '৮', '৮'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '৯', '৯'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '১০', '১০'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '১১', '১১'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '১২', '১২'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '১৩', '১৩'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '১৪', '১৪'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '১৫', '১৫'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '১৬', '১৬'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '১৭', '১৭'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '১৮', '১৮'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '১৯', '১৯'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '২০', '২০'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '২১', '২১'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '২২', '২২'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '২৩', '২৩'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '২৪', '২৪'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '২৫', '২৫'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '২৬', '২৬'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '২৭', '২৭'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '২৮', '२৮'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '২৯', '২৯'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '৩০', '৩০'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '৩১', '৩১'); +}); + +test('format month', function (assert) { + var expected = 'জানুয়ারী জানু_ফেব্রুয়ারি ফেব_মার্চ মার্চ_এপ্রিল এপ্র_মে মে_জুন জুন_জুলাই জুল_আগস্ট আগ_সেপ্টেম্বর সেপ্ট_অক্টোবর অক্টো_নভেম্বর নভে_ডিসেম্বর ডিসে'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'রবিবার রবি রবি_সোমবার সোম সোম_মঙ্গলবার মঙ্গল মঙ্গ_বুধবার বুধ বুধ_বৃহস্পতিবার বৃহস্পতি বৃহঃ_শুক্রবার শুক্র শুক্র_শনিবার শনি শনি'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'কয়েক সেকেন্ড', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'এক মিনিট', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'এক মিনিট', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '২ মিনিট', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '৪৪ মিনিট', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'এক ঘন্টা', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'এক ঘন্টা', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '২ ঘন্টা', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '৫ ঘন্টা', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '২১ ঘন্টা', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'এক দিন', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'এক দিন', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '২ দিন', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'এক দিন', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '৫ দিন', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '২৫ দিন', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'এক মাস', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'এক মাস', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '২ মাস', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '২ মাস', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '৩ মাস', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'এক মাস', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '৫ মাস', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'এক বছর', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '২ বছর', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'এক বছর', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '৫ বছর', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'কয়েক সেকেন্ড পরে', 'prefix'); + assert.equal(moment(0).from(30000), 'কয়েক সেকেন্ড আগে', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'কয়েক সেকেন্ড আগে', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'কয়েক সেকেন্ড পরে', 'কয়েক সেকেন্ড পরে'); + assert.equal(moment().add({d: 5}).fromNow(), '৫ দিন পরে', '৫ দিন পরে'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'আজ দুপুর ১২:০০ সময়', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'আজ দুপুর ১২:২৫ সময়', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 3}).calendar(), 'আজ দুপুর ৩:০০ সময়', 'Now plus 3 hours'); + assert.equal(moment(a).add({d: 1}).calendar(), 'আগামীকাল দুপুর ১২:০০ সময়', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'আজ দুপুর ১১:০০ সময়', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'গতকাল দুপুর ১২:০০ সময়', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[গত] dddd[,] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[গত] dddd[,] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[গত] dddd[,] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'রাত', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'সকাল', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'দুপুর', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'বিকাল', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'বিকাল', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'রাত', 'night'); + + assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'রাত', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'সকাল', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'দুপুর', ' during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'বিকাল', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'বিকাল', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'রাত', 'night'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '১ ০১ ১', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '১ ০১ ১', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '২ ০২ ২', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '২ ০২ ২', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '৩ ০৩ ৩', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('bo'); + +test('parse', function (assert) { + var tests = 'ཟླ་བ་དང་པོ ཟླ་བ་དང་པོ._ཟླ་བ་གཉིས་པ ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss ལ་', 'གཟའ་ཉི་མ་, ༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥:༥༠ ལ་'], + ['ddd, a h ལ་', 'ཉི་མ་, ཉིན་གུང ༣ ལ་'], + ['M Mo MM MMMM MMM', '༢ ༢ ༠༢ ཟླ་བ་གཉིས་པ ཟླ་བ་གཉིས་པ'], + ['YYYY YY', '༢༠༡༠ ༡༠'], + ['D Do DD', '༡༤ ༡༤ ༡༤'], + ['d do dddd ddd dd', '༠ ༠ གཟའ་ཉི་མ་ ཉི་མ་ ཉི་མ་'], + ['DDD DDDo DDDD', '༤༥ ༤༥ ༠༤༥'], + ['w wo ww', '༨ ༨ ༠༨'], + ['h hh', '༣ ༠༣'], + ['H HH', '༡༥ ༡༥'], + ['m mm', '༢༥ ༢༥'], + ['s ss', '༥༠ ༥༠'], + ['a A', 'ཉིན་གུང ཉིན་གུང'], + ['LT', 'ཉིན་གུང ༣:༢༥'], + ['LTS', 'ཉིན་གུང ༣:༢༥:༥༠'], + ['L', '༡༤/༠༢/༢༠༡༠'], + ['LL', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠'], + ['LLL', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'], + ['LLLL', 'གཟའ་ཉི་མ་, ༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'], + ['l', '༡༤/༢/༢༠༡༠'], + ['ll', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠'], + ['lll', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'], + ['llll', 'ཉི་མ་, ༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '༡', '༡'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '༢', '༢'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '༣', '༣'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '༤', '༤'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '༥', '༥'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '༦', '༦'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '༧', '༧'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '༨', '༨'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '༩', '༩'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '༡༠', '༡༠'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '༡༡', '༡༡'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '༡༢', '༡༢'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '༡༣', '༡༣'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '༡༤', '༡༤'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '༡༥', '༡༥'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '༡༦', '༡༦'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '༡༧', '༡༧'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '༡༨', '༡༨'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '༡༩', '༡༩'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '༢༠', '༢༠'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '༢༡', '༢༡'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '༢༢', '༢༢'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '༢༣', '༢༣'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '༢༤', '༢༤'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '༢༥', '༢༥'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '༢༦', '༢༦'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '༢༧', '༢༧'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '༢༨', '༢༨'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '༢༩', '༢༩'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '༣༠', '༣༠'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '༣༡', '༣༡'); +}); + +test('format month', function (assert) { + var expected = 'ཟླ་བ་དང་པོ ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'གཟའ་ཉི་མ་ ཉི་མ་ ཉི་མ་_གཟའ་ཟླ་བ་ ཟླ་བ་ ཟླ་བ་_གཟའ་མིག་དམར་ མིག་དམར་ མིག་དམར་_གཟའ་ལྷག་པ་ ལྷག་པ་ ལྷག་པ་_གཟའ་ཕུར་བུ ཕུར་བུ ཕུར་བུ_གཟའ་པ་སངས་ པ་སངས་ པ་སངས་_གཟའ་སྤེན་པ་ སྤེན་པ་ སྤེན་པ་'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ལམ་སང', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'སྐར་མ་གཅིག', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'སྐར་མ་གཅིག', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '༢ སྐར་མ', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '༤༤ སྐར་མ', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ཆུ་ཚོད་གཅིག', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ཆུ་ཚོད་གཅིག', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '༢ ཆུ་ཚོད', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '༥ ཆུ་ཚོད', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '༢༡ ཆུ་ཚོད', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ཉིན་གཅིག', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ཉིན་གཅིག', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '༢ ཉིན་', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ཉིན་གཅིག', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '༥ ཉིན་', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '༢༥ ཉིན་', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ཟླ་བ་གཅིག', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ཟླ་བ་གཅིག', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ཟླ་བ་གཅིག', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '༢ ཟླ་བ', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '༢ ཟླ་བ', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '༣ ཟླ་བ', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ཟླ་བ་གཅིག', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '༥ ཟླ་བ', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ལོ་གཅིག', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '༢ ལོ', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ལོ་གཅིག', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '༥ ལོ', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'ལམ་སང ལ་', 'prefix'); + assert.equal(moment(0).from(30000), 'ལམ་སང སྔན་ལ', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'ལམ་སང སྔན་ལ', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'ལམ་སང ལ་', 'ལམ་སང ལ་'); + assert.equal(moment().add({d: 5}).fromNow(), '༥ ཉིན་ ལ་', '༥ ཉིན་ ལ་'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'དི་རིང ཉིན་གུང ༡༢:༠༠', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'དི་རིང ཉིན་གུང ༡༢:༢༥', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 3}).calendar(), 'དི་རིང ཉིན་གུང ༣:༠༠', 'Now plus 3 hours'); + assert.equal(moment(a).add({d: 1}).calendar(), 'སང་ཉིན ཉིན་གུང ༡༢:༠༠', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'དི་རིང ཉིན་གུང ༡༡:༠༠', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ཁ་སང ཉིན་གུང ༡༢:༠༠', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་རྗེས་མ][,] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་རྗེས་མ][,] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་རྗེས་མ][,] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་མཐའ་མ] dddd[,] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་མཐའ་མ] dddd[,] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་མཐའ་མ] dddd[,] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'མཚན་མོ', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'ཞོགས་ཀས', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'ཉིན་གུང', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'དགོང་དག', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'དགོང་དག', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'མཚན་མོ', 'night'); + + assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'མཚན་མོ', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'ཞོགས་ཀས', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'ཉིན་གུང', ' during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'དགོང་དག', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'དགོང་དག', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'མཚན་མོ', 'night'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '༡ ༠༡ ༡', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '༡ ༠༡ ༡', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '༢ ༠༢ ༢', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '༢ ༠༢ ༢', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '༣ ༠༣ ༣', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('br'); + +test('parse', function (assert) { + var tests = 'Genver Gen_C\'hwevrer C\'hwe_Meurzh Meu_Ebrel Ebr_Mae Mae_Mezheven Eve_Gouere Gou_Eost Eos_Gwengolo Gwe_Here Her_Du Du_Kerzu Ker'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + moment.locale('br'); + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sul, C\'hwevrer 14vet 2010, 3:25:50 pm'], + ['ddd, h A', 'Sul, 3 PM'], + ['M Mo MM MMMM MMM', '2 2vet 02 C\'hwevrer C\'hwe'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14vet 14'], + ['d do dddd ddd dd', '0 0vet Sul Sul Su'], + ['DDD DDDo DDDD', '45 45vet 045'], + ['w wo ww', '6 6vet 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['DDDo [devezh] [ar] [vloaz]', '45vet devezh ar vloaz'], + ['L', '14/02/2010'], + ['LL', '14 a viz C\'hwevrer 2010'], + ['LLL', '14 a viz C\'hwevrer 2010 3e25 PM'], + ['LLLL', 'Sul, 14 a viz C\'hwevrer 2010 3e25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + moment.locale('br'); + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1añ', '1añ'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2vet', '2vet'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3vet', '3vet'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4vet', '4vet'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5vet', '5vet'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6vet', '6vet'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7vet', '7vet'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8vet', '8vet'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9vet', '9vet'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10vet', '10vet'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11vet', '11vet'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12vet', '12vet'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13vet', '13vet'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14vet', '14vet'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15vet', '15vet'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16vet', '16vet'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17vet', '17vet'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18vet', '18vet'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19vet', '19vet'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20vet', '20vet'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21vet', '21vet'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22vet', '22vet'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23vet', '23vet'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24vet', '24vet'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25vet', '25vet'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26vet', '26vet'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27vet', '27vet'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28vet', '28vet'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29vet', '29vet'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30vet', '30vet'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31vet', '31vet'); +}); + +test('format month', function (assert) { + moment.locale('br'); + var expected = 'Genver Gen_C\'hwevrer C\'hwe_Meurzh Meu_Ebrel Ebr_Mae Mae_Mezheven Eve_Gouere Gou_Eost Eos_Gwengolo Gwe_Here Her_Du Du_Kerzu Ker'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + moment.locale('br'); + var expected = 'Sul Sul Su_Lun Lun Lu_Meurzh Meu Me_Merc\'her Mer Mer_Yaou Yao Ya_Gwener Gwe Gw_Sadorn Sad Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + moment.locale('br'); + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'un nebeud segondennoù', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ur vunutenn', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ur vunutenn', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 vunutenn', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 munutenn', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'un eur', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'un eur', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 eur', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 eur', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 eur', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un devezh', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un devezh', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 zevezh', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un devezh', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 devezh', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 devezh', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ur miz', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ur miz', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ur miz', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 viz', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 viz', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 miz', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ur miz', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 miz', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ur bloaz', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 vloaz', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ur bloaz', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 bloaz', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + moment.locale('br'); + assert.equal(moment(30000).from(0), 'a-benn un nebeud segondennoù', 'prefix'); + assert.equal(moment(0).from(30000), 'un nebeud segondennoù \'zo', 'suffix'); +}); + +test('now from now', function (assert) { + moment.locale('br'); + assert.equal(moment().fromNow(), 'un nebeud segondennoù \'zo', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + moment.locale('br'); + assert.equal(moment().add({s: 30}).fromNow(), 'a-benn un nebeud segondennoù', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'a-benn 5 devezh', 'in 5 days'); +}); + +test('calendar day', function (assert) { + moment.locale('br'); + + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Hiziv da 12e00 PM', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Hiziv da 12e25 PM', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Hiziv da 1e00 PM', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Warc\'hoazh da 12e00 PM', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hiziv da 11e00 AM', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Dec\'h da 12e00 PM', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + moment.locale('br'); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [da] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [da] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [da] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + moment.locale('br'); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [paset da] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [paset da] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [paset da] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + moment.locale('br'); + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('special mutations for years', function (assert) { + moment.locale('br'); + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ur bloaz', 'mutation 1 year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 2}), true), '2 vloaz', 'mutation 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 3}), true), '3 bloaz', 'mutation 3 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 4}), true), '4 bloaz', 'mutation 4 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 bloaz', 'mutation 5 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 9}), true), '9 bloaz', 'mutation 9 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 10}), true), '10 vloaz', 'mutation 10 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 21}), true), '21 bloaz', 'mutation 21 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 22}), true), '22 vloaz', 'mutation 22 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 133}), true), '133 bloaz', 'mutation 133 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 148}), true), '148 vloaz', 'mutation 148 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 261}), true), '261 bloaz', 'mutation 261 years'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('bs'); + +test('parse', function (assert) { + var tests = 'januar jan._februar feb._mart mar._april apr._maj maj._juni jun._juli jul._august aug._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' inp ' + mmm); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedjelja, 14. februar 2010, 3:25:50 pm'], + ['ddd, hA', 'ned., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedjelja ned. ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 15:25'], + ['LLLL', 'nedjelja, 14. februar 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. feb. 2010'], + ['lll', '14. feb. 2010 15:25'], + ['llll', 'ned., 14. feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'januar jan._februar feb._mart mar._april apr._maj maj._juni jun._juli jul._august aug._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'nedjelja ned. ne_ponedjeljak pon. po_utorak uto. ut_srijeda sri. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'par sekundi', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'jedna minuta', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'jedna minuta', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minute', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuta', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'jedan sat', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'jedan sat', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 sata', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 sati', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 sati', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'dan', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'dan', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dana', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'dan', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dana', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dana', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mjesec', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mjesec', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mjesec', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mjeseca', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mjeseca', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mjeseca', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mjesec', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mjeseci', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'godinu', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 godine', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'godinu', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 godina', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'za par sekundi', 'prefix'); + assert.equal(moment(0).from(30000), 'prije par sekundi', 'prefix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'prije par sekundi', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'za par sekundi', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'za 5 dana', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'danas u 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'danas u 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'danas u 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'sutra u 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'danas u 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'jučer u 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.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'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.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'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ca'); + +test('parse', function (assert) { + var tests = 'gener gen._febrer febr._març març_abril abr._maig maig_juny juny_juliol jul._agost ag._setembre set._octubre oct._novembre nov._desembre des.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'diumenge, 14è de febrer 2010, 3:25:50 pm'], + ['ddd, hA', 'dg., 3PM'], + ['M Mo MM MMMM MMM', '2 2n 02 febrer febr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14è 14'], + ['d do dddd ddd dd', '0 0è diumenge dg. Dg'], + ['DDD DDDo DDDD', '45 45è 045'], + ['w wo ww', '6 6a 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45è day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', 'el 14 de febrer de 2010'], + ['LLL', 'el 14 de febrer de 2010 a les 15:25'], + ['LLLL', 'el diumenge 14 de febrer de 2010 a les 15:25'], + ['l', '14/2/2010'], + ['ll', '14 febr. 2010'], + ['lll', '14 febr. 2010, 15:25'], + ['llll', 'dg. 14 febr. 2010, 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1r', '1r'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2n', '2n'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3r', '3r'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4t', '4t'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5è', '5è'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6è', '6è'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7è', '7è'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8è', '8è'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9è', '9è'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10è', '10è'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11è', '11è'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12è', '12è'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13è', '13è'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14è', '14è'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15è', '15è'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16è', '16è'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17è', '17è'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18è', '18è'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19è', '19è'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20è', '20è'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21è', '21è'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22è', '22è'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23è', '23è'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24è', '24è'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25è', '25è'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26è', '26è'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27è', '27è'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28è', '28è'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29è', '29è'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30è', '30è'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31è', '31è'); +}); + +test('format month', function (assert) { + var expected = 'gener gen._febrer febr._març març_abril abr._maig maig_juny juny_juliol jul._agost ag._setembre set._octubre oct._novembre nov._desembre des.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'diumenge dg. Dg_dilluns dl. Dl_dimarts dt. Dt_dimecres dc. Dc_dijous dj. Dj_divendres dv. Dv_dissabte ds. Ds'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'uns segons', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minut', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minut', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuts', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuts', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'una hora', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'una hora', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hores', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hores', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hores', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un dia', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un dia', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dies', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un dia', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dies', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dies', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mes', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mes', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mes', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mesos', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mesos', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mesos', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mes', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesos', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un any', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 anys', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un any', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 anys', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'd\'aquí uns segons', 'prefix'); + assert.equal(moment(0).from(30000), 'fa uns segons', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'fa uns segons', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'd\'aquí uns segons', 'd\'aquí uns segons'); + assert.equal(moment().add({d: 5}).fromNow(), 'd\'aquí 5 dies', 'd\'aquí 5 dies'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'avui a les 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'avui a les 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'avui a les 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'demà a les 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).add({d: 1, h : -1}).calendar(), 'demà a les 11:00', 'tomorrow minus 1 hour'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'avui a les 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ahir a les 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52a', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1a', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1a', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2a', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2a', 'Jan 15 2012 should be week 2'); +}); + +test('day and month', function (assert) { + assert.equal(moment([2012, 1, 15]).format('D MMMM'), '15 de febrer'); + assert.equal(moment([2012, 9, 15]).format('D MMMM'), '15 d\'octubre'); + assert.equal(moment([2012, 9, 15]).format('MMMM, D'), 'octubre, 15'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('cs'); + +test('parse', function (assert) { + var tests = 'leden led_únor úno_březen bře_duben dub_květen kvě_červen čvn_červenec čvc_srpen srp_září zář_říjen říj_listopad lis_prosinec pro'.split('_'), i; + function equalTest(input, mmm, monthIndex) { + assert.equal(moment(input, mmm).month(), monthIndex, input + ' ' + mmm + ' should be month ' + (monthIndex + 1)); + } + function equalTestStrict(input, mmm, monthIndex) { + assert.equal(moment(input, mmm, true).month(), monthIndex, input + ' ' + mmm + ' should be strict month ' + (monthIndex + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + + equalTestStrict(tests[i][1], 'MMM', i); + equalTestStrict(tests[i][0], 'MMMM', i); + equalTestStrict(tests[i][1].toLocaleLowerCase(), 'MMM', i); + equalTestStrict(tests[i][1].toLocaleUpperCase(), 'MMM', i); + equalTestStrict(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTestStrict(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss', 'neděle, únor 14. 2010, 3:25:50'], + ['ddd, h', 'ne, 3'], + ['M Mo MM MMMM MMM', '2 2. 02 únor úno'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. neděle ne ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['DDDo [den v roce]', '45. den v roce'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. únor 2010'], + ['LLL', '14. únor 2010 15:25'], + ['LLLL', 'neděle 14. únor 2010 15:25'], + ['l', '14. 2. 2010'], + ['ll', '14. úno 2010'], + ['lll', '14. úno 2010 15:25'], + ['llll', 'ne 14. úno 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'leden led_únor úno_březen bře_duben dub_květen kvě_červen čvn_červenec čvc_srpen srp_září zář_říjen říj_listopad lis_prosinec pro'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'neděle ne ne_pondělí po po_úterý út út_středa st st_čtvrtek čt čt_pátek pá pá_sobota so so'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'pár sekund', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minuta', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minuta', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuty', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minut', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'hodina', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'hodina', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hodiny', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hodin', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hodin', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'den', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'den', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dny', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'den', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dní', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dní', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'měsíc', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'měsíc', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'měsíc', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 měsíce', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 měsíce', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 měsíce', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'měsíc', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 měsíců', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'rok', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 roky', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'rok', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 let', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'za pár sekund', 'prefix'); + assert.equal(moment(0).from(30000), 'před pár sekundami', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'před pár sekundami', 'now from now should display as in the past'); +}); + +test('fromNow (future)', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'za pár sekund', 'in a few seconds'); + assert.equal(moment().add({m: 1}).fromNow(), 'za minutu', 'in a minute'); + assert.equal(moment().add({m: 3}).fromNow(), 'za 3 minuty', 'in 3 minutes'); + assert.equal(moment().add({m: 10}).fromNow(), 'za 10 minut', 'in 10 minutes'); + assert.equal(moment().add({h: 1}).fromNow(), 'za hodinu', 'in an hour'); + assert.equal(moment().add({h: 3}).fromNow(), 'za 3 hodiny', 'in 3 hours'); + assert.equal(moment().add({h: 10}).fromNow(), 'za 10 hodin', 'in 10 hours'); + assert.equal(moment().add({d: 1}).fromNow(), 'za den', 'in a day'); + assert.equal(moment().add({d: 3}).fromNow(), 'za 3 dny', 'in 3 days'); + assert.equal(moment().add({d: 10}).fromNow(), 'za 10 dní', 'in 10 days'); + assert.equal(moment().add({M: 1}).fromNow(), 'za měsíc', 'in a month'); + assert.equal(moment().add({M: 3}).fromNow(), 'za 3 měsíce', 'in 3 months'); + assert.equal(moment().add({M: 10}).fromNow(), 'za 10 měsíců', 'in 10 months'); + assert.equal(moment().add({y: 1}).fromNow(), 'za rok', 'in a year'); + assert.equal(moment().add({y: 3}).fromNow(), 'za 3 roky', 'in 3 years'); + assert.equal(moment().add({y: 10}).fromNow(), 'za 10 let', 'in 10 years'); +}); + +test('fromNow (past)', function (assert) { + assert.equal(moment().subtract({s: 30}).fromNow(), 'před pár sekundami', 'a few seconds ago'); + assert.equal(moment().subtract({m: 1}).fromNow(), 'před minutou', 'a minute ago'); + assert.equal(moment().subtract({m: 3}).fromNow(), 'před 3 minutami', '3 minutes ago'); + assert.equal(moment().subtract({m: 10}).fromNow(), 'před 10 minutami', '10 minutes ago'); + assert.equal(moment().subtract({h: 1}).fromNow(), 'před hodinou', 'an hour ago'); + assert.equal(moment().subtract({h: 3}).fromNow(), 'před 3 hodinami', '3 hours ago'); + assert.equal(moment().subtract({h: 10}).fromNow(), 'před 10 hodinami', '10 hours ago'); + assert.equal(moment().subtract({d: 1}).fromNow(), 'před dnem', 'a day ago'); + assert.equal(moment().subtract({d: 3}).fromNow(), 'před 3 dny', '3 days ago'); + assert.equal(moment().subtract({d: 10}).fromNow(), 'před 10 dny', '10 days ago'); + assert.equal(moment().subtract({M: 1}).fromNow(), 'před měsícem', 'a month ago'); + assert.equal(moment().subtract({M: 3}).fromNow(), 'před 3 měsíci', '3 months ago'); + assert.equal(moment().subtract({M: 10}).fromNow(), 'před 10 měsíci', '10 months ago'); + assert.equal(moment().subtract({y: 1}).fromNow(), 'před rokem', 'a year ago'); + assert.equal(moment().subtract({y: 3}).fromNow(), 'před 3 lety', '3 years ago'); + assert.equal(moment().subtract({y: 10}).fromNow(), 'před 10 lety', '10 years ago'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'dnes v 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'dnes v 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'dnes v 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'zítra v 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'dnes v 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'včera v 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m, nextDay; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + nextDay = ''; + switch (m.day()) { + case 0: + nextDay = 'v neděli'; + break; + case 1: + nextDay = 'v pondělí'; + break; + case 2: + nextDay = 'v úterý'; + break; + case 3: + nextDay = 've středu'; + break; + case 4: + nextDay = 've čtvrtek'; + break; + case 5: + nextDay = 'v pátek'; + break; + case 6: + nextDay = 'v sobotu'; + break; + } + assert.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m, lastDay; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + lastDay = ''; + switch (m.day()) { + case 0: + lastDay = 'minulou neděli'; + break; + case 1: + lastDay = 'minulé pondělí'; + break; + case 2: + lastDay = 'minulé úterý'; + break; + case 3: + lastDay = 'minulou středu'; + break; + case 4: + lastDay = 'minulý čtvrtek'; + break; + case 5: + lastDay = 'minulý pátek'; + break; + case 6: + lastDay = 'minulou sobotu'; + break; + } + assert.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('humanize duration', function (assert) { + assert.equal(moment.duration(1, 'minutes').humanize(), 'minuta', 'a minute (future)'); + assert.equal(moment.duration(1, 'minutes').humanize(true), 'za minutu', 'in a minute'); + assert.equal(moment.duration(-1, 'minutes').humanize(), 'minuta', 'a minute (past)'); + assert.equal(moment.duration(-1, 'minutes').humanize(true), 'před minutou', 'a minute ago'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('cv'); + +test('parse', function (assert) { + var tests = 'кӑрлач кӑр_нарӑс нар_пуш пуш_ака ака_май май_ҫӗртме ҫӗр_утӑ утӑ_ҫурла ҫур_авӑн авн_юпа юпа_чӳк чӳк_раштав раш'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'вырсарникун, нарӑс 14-мӗш 2010, 3:25:50 pm'], + ['ddd, hA', 'выр, 3PM'], + ['M Mo MM MMMM MMM', '2 2-мӗш 02 нарӑс нар'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-мӗш 14'], + ['d do dddd ddd dd', '0 0-мӗш вырсарникун выр вр'], + ['DDD DDDo DDDD', '45 45-мӗш 045'], + ['w wo ww', '7 7-мӗш 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['Ҫулӑн DDDo кунӗ', 'Ҫулӑн 45-мӗш кунӗ'], + ['LTS', '15:25:50'], + ['L', '14-02-2010'], + ['LL', '2010 ҫулхи нарӑс уйӑхӗн 14-мӗшӗ'], + ['LLL', '2010 ҫулхи нарӑс уйӑхӗн 14-мӗшӗ, 15:25'], + ['LLLL', 'вырсарникун, 2010 ҫулхи нарӑс уйӑхӗн 14-мӗшӗ, 15:25'], + ['l', '14-2-2010'], + ['ll', '2010 ҫулхи нар уйӑхӗн 14-мӗшӗ'], + ['lll', '2010 ҫулхи нар уйӑхӗн 14-мӗшӗ, 15:25'], + ['llll', 'выр, 2010 ҫулхи нар уйӑхӗн 14-мӗшӗ, 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-мӗш', '1-мӗш'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-мӗш', '2-мӗш'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-мӗш', '3-мӗш'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-мӗш', '4-мӗш'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-мӗш', '5-мӗш'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-мӗш', '6-мӗш'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-мӗш', '7-мӗш'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-мӗш', '8-мӗш'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-мӗш', '9-мӗш'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-мӗш', '10-мӗш'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-мӗш', '11-мӗш'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-мӗш', '12-мӗш'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-мӗш', '13-мӗш'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-мӗш', '14-мӗш'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-мӗш', '15-мӗш'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-мӗш', '16-мӗш'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-мӗш', '17-мӗш'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-мӗш', '18-мӗш'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-мӗш', '19-мӗш'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-мӗш', '20-мӗш'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-мӗш', '21-мӗш'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-мӗш', '22-мӗш'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-мӗш', '23-мӗш'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-мӗш', '24-мӗш'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-мӗш', '25-мӗш'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-мӗш', '26-мӗш'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-мӗш', '27-мӗш'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-мӗш', '28-мӗш'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-мӗш', '29-мӗш'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-мӗш', '30-мӗш'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-мӗш', '31-мӗш'); +}); + +test('format month', function (assert) { + var expected = 'кӑрлач кӑр_нарӑс нар_пуш пуш_ака ака_май май_ҫӗртме ҫӗр_утӑ утӑ_ҫурла ҫур_авӑн авн_юпа юпа_чӳк чӳк_раштав раш'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'вырсарникун выр вр_тунтикун тун тн_ытларикун ытл ыт_юнкун юн юн_кӗҫнерникун кӗҫ кҫ_эрнекун эрн эр_шӑматкун шӑм шм'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'пӗр-ик ҫеккунт', '44 sekunder = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'пӗр минут', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'пӗр минут', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минут', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минут', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'пӗр сехет', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'пӗр сехет', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 сехет', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 сехет', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 сехет', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'пӗр кун', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'пӗр кун', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 кун', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'пӗр кун', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 кун', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 кун', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'пӗр уйӑх', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'пӗр уйӑх', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'пӗр уйӑх', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 уйӑх', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 уйӑх', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 уйӑх', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'пӗр уйӑх', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 уйӑх', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'пӗр ҫул', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ҫул', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'пӗр ҫул', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ҫул', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'пӗр-ик ҫеккунтран', 'prefix'); + assert.equal(moment(0).from(30000), 'пӗр-ик ҫеккунт каялла', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'пӗр-ик ҫеккунт каялла', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'пӗр-ик ҫеккунтран', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 кунран', 'in 5 days'); + assert.equal(moment().add({h: 2}).fromNow(), '2 сехетрен', 'in 2 hours, the right suffix!'); + assert.equal(moment().add({y: 3}).fromNow(), '3 ҫултан', 'in 3 years, the right suffix!'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + assert.equal(moment(a).calendar(), 'Паян 12:00 сехетре', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Паян 12:25 сехетре', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Паян 13:00 сехетре', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Ыран 12:00 сехетре', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Паян 11:00 сехетре', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ӗнер 12:00 сехетре', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[Ҫитес] dddd LT [сехетре]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Ҫитес] dddd LT [сехетре]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Ҫитес] dddd LT [сехетре]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Иртнӗ] dddd LT [сехетре]'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Иртнӗ] dddd LT [сехетре]'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Иртнӗ] dddd LT [сехетре]'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +// Monday is the first day of the week. +// The week that contains Jan 1st is the first week of the year. + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-мӗш', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-мӗш', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-мӗш', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-мӗш', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-мӗш', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('cy'); + +test('parse', function (assert) { + var tests = 'Ionawr Ion_Chwefror Chwe_Mawrth Maw_Ebrill Ebr_Mai Mai_Mehefin Meh_Gorffennaf Gor_Awst Aws_Medi Med_Hydref Hyd_Tachwedd Tach_Rhagfyr Rhag'.split('_'), + i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Dydd Sul, Chwefror 14eg 2010, 3:25:50 pm'], + ['ddd, hA', 'Sul, 3PM'], + ['M Mo MM MMMM MMM', '2 2il 02 Chwefror Chwe'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14eg 14'], + ['d do dddd ddd dd', '0 0 Dydd Sul Sul Su'], + ['DDD DDDo DDDD', '45 45ain 045'], + ['w wo ww', '6 6ed 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45ain day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 Chwefror 2010'], + ['LLL', '14 Chwefror 2010 15:25'], + ['LLLL', 'Dydd Sul, 14 Chwefror 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Chwe 2010'], + ['lll', '14 Chwe 2010 15:25'], + ['llll', 'Sul, 14 Chwe 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1af', '1af'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2il', '2il'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3ydd', '3ydd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4ydd', '4ydd'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5ed', '5ed'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6ed', '6ed'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7ed', '7ed'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8fed', '8fed'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9fed', '9fed'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10fed', '10fed'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11eg', '11eg'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12fed', '12fed'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13eg', '13eg'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14eg', '14eg'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15fed', '15fed'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16eg', '16eg'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17eg', '17eg'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18fed', '18fed'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19eg', '19eg'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20fed', '20fed'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21ain', '21ain'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22ain', '22ain'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23ain', '23ain'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24ain', '24ain'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25ain', '25ain'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26ain', '26ain'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27ain', '27ain'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28ain', '28ain'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29ain', '29ain'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30ain', '30ain'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31ain', '31ain'); +}); + +test('format month', function (assert) { + var expected = 'Ionawr Ion_Chwefror Chwe_Mawrth Maw_Ebrill Ebr_Mai Mai_Mehefin Meh_Gorffennaf Gor_Awst Aws_Medi Med_Hydref Hyd_Tachwedd Tach_Rhagfyr Rhag'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Dydd Sul Sul Su_Dydd Llun Llun Ll_Dydd Mawrth Maw Ma_Dydd Mercher Mer Me_Dydd Iau Iau Ia_Dydd Gwener Gwe Gw_Dydd Sadwrn Sad Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ychydig eiliadau', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'munud', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'munud', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 munud', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 munud', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'awr', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'awr', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 awr', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 awr', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 awr', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'diwrnod', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'diwrnod', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 diwrnod', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'diwrnod', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 diwrnod', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 diwrnod', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mis', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mis', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mis', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mis', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mis', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mis', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mis', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mis', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'blwyddyn', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 flynedd', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'blwyddyn', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 flynedd', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'mewn ychydig eiliadau', 'prefix'); + assert.equal(moment(0).from(30000), 'ychydig eiliadau yn ôl', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'mewn ychydig eiliadau', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'mewn 5 diwrnod', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Heddiw am 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Heddiw am 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Heddiw am 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Yfory am 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Heddiw am 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ddoe am 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [am] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [am] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [am] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [diwethaf am] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [diwethaf am] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [diwethaf am] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ain', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1af', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1af', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2il', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2il', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('da'); + +test('parse', function (assert) { + var tests = 'januar jan_februar feb_marts mar_april apr_maj maj_juni jun_juli jul_august aug_september sep_oktober okt_november nov_december dec'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd [den] Do MMMM YYYY, h:mm:ss a', 'søndag den 14. februar 2010, 3:25:50 pm'], + ['ddd hA', 'søn 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. søndag søn sø'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[den] DDDo [dag på året]', 'den 45. dag på året'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 15:25'], + ['LLLL', 'søndag d. 14. februar 2010 kl. 15:25'], + ['l', '14/2/2010'], + ['ll', '14. feb 2010'], + ['lll', '14. feb 2010 15:25'], + ['llll', 'søn d. 14. feb 2010 kl. 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'januar jan_februar feb_marts mar_april apr_maj maj_juni jun_juli jul_august aug_september sep_oktober okt_november nov_december dec'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'søndag søn sø_mandag man ma_tirsdag tir ti_onsdag ons on_torsdag tor to_fredag fre fr_lørdag lør lø'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'få sekunder', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'et minut', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'et minut', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutter', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutter', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'en time', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'en time', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 timer', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 timer', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 timer', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'en dag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'en dag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dage', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'en dag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dage', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dage', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'en måned', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'en måned', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'en måned', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 måneder', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 måneder', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 måneder', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'en måned', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 måneder', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'et år', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 år', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'et år', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 år', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'om få sekunder', 'prefix'); + assert.equal(moment(0).from(30000), 'få sekunder siden', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'få sekunder siden', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'om få sekunder', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'om 5 dage', 'in 5 days'); +}); + + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'i dag kl. 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'i dag kl. 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'i dag kl. 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'i morgen kl. 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'i dag kl. 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'i går kl. 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('på dddd [kl.] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('på dddd [kl.] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('på dddd [kl.] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[i] dddd[s kl.] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[i] dddd[s kl.] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[i] dddd[s kl.] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('de-at'); + +test('parse', function (assert) { + var tests = 'Jänner Jän._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i; + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'Sonntag, 14. Februar 2010, 3:25:50 pm'], + ['ddd, hA', 'So., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. Sonntag So. So'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. Februar 2010'], + ['LLL', '14. Februar 2010 15:25'], + ['LLLL', 'Sonntag, 14. Februar 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. Febr. 2010'], + ['lll', '14. Febr. 2010 15:25'], + ['llll', 'So., 14. Febr. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'Jänner Jän._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Sonntag So. So_Montag Mo. Mo_Dienstag Di. Di_Mittwoch Mi. Mi_Donnerstag Do. Do_Freitag Fr. Fr_Samstag Sa. Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ein paar Sekunden', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'eine Minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'eine Minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 Minuten', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 Minuten', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'eine Stunde', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'eine Stunde', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 Stunden', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 Stunden', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 Stunden', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ein Tag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ein Tag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 Tage', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ein Tag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 Tage', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 Tage', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ein Monat', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ein Monat', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 Monate', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 Monate', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 Monate', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ein Monat', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 Monate', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ein Jahr', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 Jahre', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ein Jahr', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 Jahre', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'in ein paar Sekunden', 'prefix'); + assert.equal(moment(0).from(30000), 'vor ein paar Sekunden', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'in ein paar Sekunden', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'in 5 Tagen', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'heute um 12:00 Uhr', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'heute um 12:25 Uhr', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'heute um 13:00 Uhr', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'morgen um 12:00 Uhr', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'heute um 11:00 Uhr', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'gestern um 12:00 Uhr', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('de-ch'); + +test('parse', function (assert) { + var tests = 'Januar Jan._Februar Febr._März März_April April_Mai Mai_Juni Juni_Juli Juli_August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h.mm.ss a', 'Sonntag, 14. Februar 2010, 3.25.50 pm'], + ['ddd, hA', 'So, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. Sonntag So So'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15.25.50'], + ['L', '14.02.2010'], + ['LL', '14. Februar 2010'], + ['LLL', '14. Februar 2010 15.25'], + ['LLLL', 'Sonntag, 14. Februar 2010 15.25'], + ['l', '14.2.2010'], + ['ll', '14. Febr. 2010'], + ['lll', '14. Febr. 2010 15.25'], + ['llll', 'So, 14. Febr. 2010 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'Januar Jan._Februar Febr._März März_April April_Mai Mai_Juni Juni_Juli Juli_August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Sonntag So So_Montag Mo Mo_Dienstag Di Di_Mittwoch Mi Mi_Donnerstag Do Do_Freitag Fr Fr_Samstag Sa Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ein paar Sekunden', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'eine Minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'eine Minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 Minuten', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 Minuten', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'eine Stunde', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'eine Stunde', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 Stunden', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 Stunden', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 Stunden', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ein Tag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ein Tag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 Tage', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ein Tag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 Tage', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 Tage', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ein Monat', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ein Monat', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ein Monat', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 Monate', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 Monate', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 Monate', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ein Monat', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 Monate', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ein Jahr', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 Jahre', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ein Jahr', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 Jahre', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'in ein paar Sekunden', 'prefix'); + assert.equal(moment(0).from(30000), 'vor ein paar Sekunden', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'in ein paar Sekunden', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'in 5 Tagen', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'heute um 12.00 Uhr', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'heute um 12.25 Uhr', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'heute um 13.00 Uhr', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'morgen um 12.00 Uhr', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'heute um 11.00 Uhr', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'gestern um 12.00 Uhr', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('de'); + +test('parse', function (assert) { + var tests = 'Januar Jan._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'Sonntag, 14. Februar 2010, 3:25:50 pm'], + ['ddd, hA', 'So., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. Sonntag So. So'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. Februar 2010'], + ['LLL', '14. Februar 2010 15:25'], + ['LLLL', 'Sonntag, 14. Februar 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. Febr. 2010'], + ['lll', '14. Febr. 2010 15:25'], + ['llll', 'So., 14. Febr. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'Januar Jan._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Sonntag So. So_Montag Mo. Mo_Dienstag Di. Di_Mittwoch Mi. Mi_Donnerstag Do. Do_Freitag Fr. Fr_Samstag Sa. Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ein paar Sekunden', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'eine Minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'eine Minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 Minuten', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 Minuten', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'eine Stunde', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'eine Stunde', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 Stunden', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 Stunden', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 Stunden', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ein Tag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ein Tag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 Tage', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ein Tag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 Tage', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 Tage', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ein Monat', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ein Monat', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ein Monat', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 Monate', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 Monate', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 Monate', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ein Monat', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 Monate', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ein Jahr', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 Jahre', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ein Jahr', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 Jahre', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'in ein paar Sekunden', 'prefix'); + assert.equal(moment(0).from(30000), 'vor ein paar Sekunden', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'in ein paar Sekunden', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'in 5 Tagen', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'heute um 12:00 Uhr', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'heute um 12:25 Uhr', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'heute um 13:00 Uhr', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'morgen um 12:00 Uhr', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'heute um 11:00 Uhr', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'gestern um 12:00 Uhr', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('dv'); + +test('parse', function (assert) { + var i, + tests = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު' + ]; + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + equalTest(tests[i], 'MMM', i); + equalTest(tests[i], 'MMMM', i); + equalTest(tests[i].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'އާދިއްތަ، ފެބްރުއަރީ 14 2010، 3:25:50 މފ'], + ['ddd, hA', 'އާދިއްތަ، 3މފ'], + ['M Mo MM MMMM MMM', '2 2 02 ފެބްރުއަރީ ފެބްރުއަރީ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 އާދިއްތަ އާދިއްތަ އާދި'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'މފ މފ'], + ['LTS', '15:25:50'], + ['L', '14/2/2010'], + ['LL', '14 ފެބްރުއަރީ 2010'], + ['LLL', '14 ފެބްރުއަރީ 2010 15:25'], + ['LLLL', 'އާދިއްތަ 14 ފެބްރުއަރީ 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 ފެބްރުއަރީ 2010'], + ['lll', '14 ފެބްރުއަރީ 2010 15:25'], + ['llll', 'އާދިއްތަ 14 ފެބްރުއަރީ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format month', function (assert) { + var i, + expected = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު' + ]; + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM'), expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = [ + 'އާދިއްތަ', + 'ހޯމަ', + 'އަންގާރަ', + 'ބުދަ', + 'ބުރާސްފަތި', + 'ހުކުރު', + 'ހޮނިހިރު' + ]; + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd'), expected[i]); + } +}); + + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ސިކުންތުކޮޅެއް', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'މިނިޓެއް', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'މިނިޓެއް', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'މިނިޓު 2', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'މިނިޓު 44', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ގަޑިއިރެއް', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ގަޑިއިރެއް', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'ގަޑިއިރު 2', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'ގަޑިއިރު 5', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'ގަޑިއިރު 21', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ދުވަހެއް', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ދުވަހެއް', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'ދުވަސް 2', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ދުވަހެއް', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'ދުވަސް 5', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'ދުވަސް 25', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'މަހެއް', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'މަހެއް', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'މަހެއް', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'މަސް 2', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'މަސް 2', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'މަސް 3', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'މަހެއް', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'މަސް 5', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'އަހަރެއް', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'އަހަރު 2', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'އަހަރެއް', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'އަހަރު 5', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'ތެރޭގައި ސިކުންތުކޮޅެއް', 'prefix'); + assert.equal(moment(0).from(30000), 'ކުރިން ސިކުންތުކޮޅެއް', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'ތެރޭގައި ސިކުންތުކޮޅެއް', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'ތެރޭގައި ދުވަސް 5', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'މިއަދު 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'މިއަދު 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'މިއަދު 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'މާދަމާ 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'މިއަދު 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'އިއްޔެ 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[ފާއިތުވި] dddd LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[ފާއިތުވި] dddd LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[ފާއިތުވި] dddd LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('el'); + +test('parse', function (assert) { + var i, + tests = 'Ιανουάριος Ιαν_Φεβρουάριος Φεβ_Μάρτιος Μαρ_Απρίλιος Απρ_Μάιος Μαϊ_Ιούνιος Ιουν_Ιούλιος Ιουλ_Αύγουστος Αυγ_Σεπτέμβριος Σεπ_Οκτώβριος Οκτ_Νοέμβριος Νοε_Δεκέμβριος Δεκ'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('parse meridiem', function (assert) { + var i, + b = moment(), + meridiemTests = [ + // h a patterns, expected hours, isValid + ['10 πμ', 10, true], + ['10 μμ', 22, true], + ['10 π.μ.', 10, true], + ['10 μ.μ.', 22, true], + ['10 π', 10, true], + ['10 μ', 22, true], + ['10 ΠΜ', 10, true], + ['10 ΜΜ', 22, true], + ['10 Π.Μ.', 10, true], + ['10 Μ.Μ.', 22, true], + ['10 Π', 10, true], + ['10 Μ', 22, true], + ['10 am', 10, false], + ['10 pm', 10, false] + ], + parsed; + + // test that a formatted moment including meridiem string can be parsed back to the same moment + assert.ok(b.isSame(moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'el', true), 'seconds'), b.format('h:mm:ss a') + ' should be equal to ' + moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'el', true).format('h:mm:ss a')); + + // test that a formatted moment having a meridiem string can be parsed with strict flag + assert.ok(moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'el', true).isValid(), b.format('h:mm:ss a') + ' should be parsed as valid'); + + for (i = 0; i < meridiemTests.length; i++) { + parsed = moment(meridiemTests[i][0], 'h a', 'el', true); + assert.equal(parsed.isValid(), meridiemTests[i][2], 'validity for ' + meridiemTests[i][0]); + if (parsed.isValid()) { + assert.equal(parsed.hours(), meridiemTests[i][1], 'hours for ' + meridiemTests[i][0]); + } + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Κυριακή, Φεβρουάριος 14η 2010, 3:25:50 μμ'], + ['dddd, D MMMM YYYY, h:mm:ss a', 'Κυριακή, 14 Φεβρουαρίου 2010, 3:25:50 μμ'], + ['ddd, hA', 'Κυρ, 3ΜΜ'], + ['dddd, MMMM YYYY', 'Κυριακή, Φεβρουάριος 2010'], + ['M Mo MM MMMM MMM', '2 2η 02 Φεβρουάριος Φεβ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14η 14'], + ['d do dddd ddd dd', '0 0η Κυριακή Κυρ Κυ'], + ['DDD DDDo DDDD', '45 45η 045'], + ['w wo ww', '6 6η 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'μμ ΜΜ'], + ['[the] DDDo [day of the year]', 'the 45η day of the year'], + ['LTS', '3:25:50 ΜΜ'], + ['L', '14/02/2010'], + ['LL', '14 Φεβρουαρίου 2010'], + ['LLL', '14 Φεβρουαρίου 2010 3:25 ΜΜ'], + ['LLLL', 'Κυριακή, 14 Φεβρουαρίου 2010 3:25 ΜΜ'], + ['l', '14/2/2010'], + ['ll', '14 Φεβ 2010'], + ['lll', '14 Φεβ 2010 3:25 ΜΜ'], + ['llll', 'Κυρ, 14 Φεβ 2010 3:25 ΜΜ'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1η', '1η'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2η', '2η'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3η', '3η'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4η', '4η'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5η', '5η'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6η', '6η'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7η', '7η'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8η', '8η'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9η', '9η'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10η', '10η'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11η', '11η'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12η', '12η'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13η', '13η'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14η', '14η'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15η', '15η'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16η', '16η'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17η', '17η'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18η', '18η'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19η', '19η'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20η', '20η'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21η', '21η'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22η', '22η'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23η', '23η'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24η', '24η'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25η', '25η'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26η', '26η'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27η', '27η'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28η', '28η'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29η', '29η'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30η', '30η'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31η', '31η'); +}); + +test('format month', function (assert) { + var i, + expected = 'Ιανουάριος Ιαν_Φεβρουάριος Φεβ_Μάρτιος Μαρ_Απρίλιος Απρ_Μάιος Μαϊ_Ιούνιος Ιουν_Ιούλιος Ιουλ_Αύγουστος Αυγ_Σεπτέμβριος Σεπ_Οκτώβριος Οκτ_Νοέμβριος Νοε_Δεκέμβριος Δεκ'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'Κυριακή Κυρ Κυ_Δευτέρα Δευ Δε_Τρίτη Τρι Τρ_Τετάρτη Τετ Τε_Πέμπτη Πεμ Πε_Παρασκευή Παρ Πα_Σάββατο Σαβ Σα'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'λίγα δευτερόλεπτα', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ένα λεπτό', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ένα λεπτό', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 λεπτά', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 λεπτά', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'μία ώρα', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'μία ώρα', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ώρες', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ώρες', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ώρες', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'μία μέρα', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'μία μέρα', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 μέρες', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'μία μέρα', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 μέρες', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 μέρες', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ένας μήνας', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ένας μήνας', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ένας μήνας', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 μήνες', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 μήνες', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 μήνες', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ένας μήνας', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 μήνες', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ένας χρόνος', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 χρόνια', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ένας χρόνος', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 χρόνια', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'σε λίγα δευτερόλεπτα', 'prefix'); + assert.equal(moment(0).from(30000), 'λίγα δευτερόλεπτα πριν', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'λίγα δευτερόλεπτα πριν', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'σε λίγα δευτερόλεπτα', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'σε 5 μέρες', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Σήμερα στις 12:00 ΜΜ', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Σήμερα στις 12:25 ΜΜ', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Σήμερα στη 1:00 ΜΜ', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Αύριο στις 12:00 ΜΜ', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Σήμερα στις 11:00 ΠΜ', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Χθες στις 12:00 ΜΜ', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [' + (m.hours() % 12 === 1 ? 'στη' : 'στις') + '] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [στις] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [στις] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m, dayString; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + dayString = m.day() === 6 ? '[το προηγούμενο Σάββατο]' : '[την προηγούμενη] dddd'; + assert.equal(m.calendar(), m.format(dayString + ' [' + (m.hours() % 12 === 1 ? 'στη' : 'στις') + '] LT'), 'Today - ' + i + ' days current time'); + m.hours(1).minutes(30).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(dayString + ' [στη] LT'), 'Today - ' + i + ' days one o clock'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(dayString + ' [στις] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(dayString + ' [στις] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52η', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1η', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1η', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2η', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2η', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('en-au'); + +test('parse', function (assert) { + var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Sunday Sun Su'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '6 6th 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['LTS', '3:25:50 PM'], + ['L', '14/02/2010'], + ['LL', '14 February 2010'], + ['LLL', '14 February 2010 3:25 PM'], + ['LLLL', 'Sunday, 14 February 2010 3:25 PM'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 3:25 PM'], + ['llll', 'Sun, 14 Feb 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); +}); + +test('format month', function (assert) { + var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix'); + assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Today at 12:00 PM', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25 PM', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 1:00 PM', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00 PM', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00 AM', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00 PM', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('en-ca'); + +test('parse', function (assert) { + var i, + tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Sunday Sun Su'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '8 8th 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['L', '2010-02-14'], + ['LTS', '3:25:50 PM'], + ['LL', 'February 14, 2010'], + ['LLL', 'February 14, 2010 3:25 PM'], + ['LLLL', 'Sunday, February 14, 2010 3:25 PM'], + ['l', '2010-2-14'], + ['ll', 'Feb 14, 2010'], + ['lll', 'Feb 14, 2010 3:25 PM'], + ['llll', 'Sun, Feb 14, 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); +}); + +test('format month', function (assert) { + var i, + expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix'); + assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Today at 12:00 PM', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25 PM', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 1:00 PM', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00 PM', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00 AM', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00 PM', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1st', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1st', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2nd', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2nd', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3rd', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('en-gb'); + +test('parse', function (assert) { + var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Sunday Sun Su'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '6 6th 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 February 2010'], + ['LLL', '14 February 2010 15:25'], + ['LLLL', 'Sunday, 14 February 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 15:25'], + ['llll', 'Sun, 14 Feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); +}); + +test('format month', function (assert) { + var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix'); + assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Today at 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('en-ie'); + +test('parse', function (assert) { + var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Sunday Sun Su'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '6 6th 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['LTS', '15:25:50'], + ['L', '14-02-2010'], + ['LL', '14 February 2010'], + ['LLL', '14 February 2010 15:25'], + ['LLLL', 'Sunday 14 February 2010 15:25'], + ['l', '14-2-2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 15:25'], + ['llll', 'Sun 14 Feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); +}); + +test('format month', function (assert) { + var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix'); + assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Today at 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('en-nz'); + +test('parse', function (assert) { + var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Sunday Sun Su'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '6 6th 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['LTS', '3:25:50 PM'], + ['L', '14/02/2010'], + ['LL', '14 February 2010'], + ['LLL', '14 February 2010 3:25 PM'], + ['LLLL', 'Sunday, 14 February 2010 3:25 PM'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 3:25 PM'], + ['llll', 'Sun, 14 Feb 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); +}); + +test('format month', function (assert) { + var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix'); + assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Today at 12:00 PM', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25 PM', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 1:00 PM', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00 PM', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00 AM', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00 PM', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('en'); + +test('parse', function (assert) { + var i, + tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Sunday Sun Su'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '8 8th 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['LTS', '3:25:50 PM'], + ['L', '02/14/2010'], + ['LL', 'February 14, 2010'], + ['LLL', 'February 14, 2010 3:25 PM'], + ['LLLL', 'Sunday, February 14, 2010 3:25 PM'], + ['l', '2/14/2010'], + ['ll', 'Feb 14, 2010'], + ['lll', 'Feb 14, 2010 3:25 PM'], + ['llll', 'Sun, Feb 14, 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); +}); + +test('format month', function (assert) { + var i, + expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix'); + assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Today at 12:00 PM', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25 PM', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 1:00 PM', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00 PM', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00 AM', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00 PM', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1st', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1st', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2nd', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2nd', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3rd', 'Jan 15 2012 should be week 3'); +}); + +test('weekdays strict parsing', function (assert) { + var m = moment('2015-01-01T12', moment.ISO_8601, true), + enLocale = moment.localeData('en'); + + for (var i = 0; i < 7; ++i) { + assert.equal(moment(enLocale.weekdays(m.day(i), ''), 'dddd', true).isValid(), true, 'parse weekday ' + i); + assert.equal(moment(enLocale.weekdaysShort(m.day(i), ''), 'ddd', true).isValid(), true, 'parse short weekday ' + i); + assert.equal(moment(enLocale.weekdaysMin(m.day(i), ''), 'dd', true).isValid(), true, 'parse min weekday ' + i); + + // negative tests + assert.equal(moment(enLocale.weekdaysMin(m.day(i), ''), 'ddd', true).isValid(), false, 'parse short weekday ' + i); + assert.equal(moment(enLocale.weekdaysShort(m.day(i), ''), 'dd', true).isValid(), false, 'parse min weekday ' + i); + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('eo'); + +test('parse', function (assert) { + var tests = 'januaro jan_februaro feb_marto mar_aprilo apr_majo maj_junio jun_julio jul_aŭgusto aŭg_septembro sep_oktobro okt_novembro nov_decembro dec'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanĉo, februaro 14a 2010, 3:25:50 p.t.m.'], + ['ddd, hA', 'dim, 3P.T.M.'], + ['M Mo MM MMMM MMM', '2 2a 02 februaro feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14a 14'], + ['d do dddd ddd dd', '0 0a dimanĉo dim di'], + ['DDD DDDo DDDD', '45 45a 045'], + ['w wo ww', '7 7a 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'p.t.m. P.T.M.'], + ['[la] DDDo [tago] [de] [la] [jaro]', 'la 45a tago de la jaro'], + ['LTS', '15:25:50'], + ['L', '2010-02-14'], + ['LL', '14-a de februaro, 2010'], + ['LLL', '14-a de februaro, 2010 15:25'], + ['LLLL', 'dimanĉo, la 14-a de februaro, 2010 15:25'], + ['l', '2010-2-14'], + ['ll', '14-a de feb, 2010'], + ['lll', '14-a de feb, 2010 15:25'], + ['llll', 'dim, la 14-a de feb, 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1a', '1a'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2a', '2a'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3a', '3a'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4a', '4a'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5a', '5a'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6a', '6a'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7a', '7a'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8a', '8a'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9a', '9a'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10a', '10a'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11a', '11a'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12a', '12a'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13a', '13a'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14a', '14a'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15a', '15a'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16a', '16a'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17a', '17a'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18a', '18a'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19a', '19a'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20a', '20a'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21a', '21a'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22a', '22a'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23a', '23a'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24a', '24a'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25a', '25a'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26a', '26a'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27a', '27a'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28a', '28a'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29a', '29a'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30a', '30a'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31a', '31a'); +}); + +test('format month', function (assert) { + var expected = 'januaro jan_februaro feb_marto mar_aprilo apr_majo maj_junio jun_julio jul_aŭgusto aŭg_septembro sep_oktobro okt_novembro nov_decembro dec'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'dimanĉo dim di_lundo lun lu_mardo mard ma_merkredo merk me_ĵaŭdo ĵaŭ ĵa_vendredo ven ve_sabato sab sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'sekundoj', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minuto', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minuto', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutoj', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutoj', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'horo', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'horo', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horoj', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horoj', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horoj', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'tago', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'tago', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 tagoj', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'tago', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 tagoj', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 tagoj', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'monato', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'monato', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'monato', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 monatoj', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 monatoj', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 monatoj', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'monato', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 monatoj', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'jaro', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jaroj', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'jaro', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jaroj', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'post sekundoj', 'post prefix'); + assert.equal(moment(0).from(30000), 'antaŭ sekundoj', 'antaŭ prefix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'antaŭ sekundoj', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'post sekundoj', 'post sekundoj'); + assert.equal(moment().add({d: 5}).fromNow(), 'post 5 tagoj', 'post 5 tagoj'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Hodiaŭ je 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Hodiaŭ je 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Hodiaŭ je 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Morgaŭ je 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hodiaŭ je 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Hieraŭ je 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [je] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [je] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [je] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1a', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1a', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2a', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2a', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3a', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('es-do'); + +test('parse', function (assert) { + var tests = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'domingo, febrero 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'dom., 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 febrero feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd dd', '0 0º domingo dom. do'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '6 6º 06'], + ['YYYY-MMM-DD', '2010-feb-14'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['LTS', '3:25:50 PM'], + ['L', '14/02/2010'], + ['LL', '14 de febrero de 2010'], + ['LLL', '14 de febrero de 2010 3:25 PM'], + ['LLLL', 'domingo, 14 de febrero de 2010 3:25 PM'], + ['l', '14/2/2010'], + ['ll', '14 de feb. de 2010'], + ['lll', '14 de feb. de 2010 3:25 PM'], + ['llll', 'dom., 14 de feb. de 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); +}); + +test('format month', function (assert) { + var expected = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'domingo dom. do_lunes lun. lu_martes mar. ma_miércoles mié. mi_jueves jue. ju_viernes vie. vi_sábado sáb. sá'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'unos segundos', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minuto', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minuto', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutos', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutos', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'una hora', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'una hora', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horas', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horas', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horas', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un día', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un día', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 días', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un día', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 días', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 días', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mes', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mes', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mes', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meses', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meses', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meses', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mes', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meses', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un año', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 años', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un año', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 años', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'en unos segundos', 'prefix'); + assert.equal(moment(0).from(30000), 'hace unos segundos', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'hace unos segundos', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'en unos segundos', 'en unos segundos'); + assert.equal(moment().add({d: 5}).fromNow(), 'en 5 días', 'en 5 días'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'hoy a las 12:00 PM', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'hoy a las 12:25 PM', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'hoy a las 1:00 PM', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'mañana a las 12:00 PM', 'tomorrow at the same time'); + assert.equal(moment(a).add({d: 1, h : -1}).calendar(), 'mañana a las 11:00 AM', 'tomorrow minus 1 hour'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'hoy a las 11:00 AM', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ayer a las 12:00 PM', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('es'); + +test('parse', function (assert) { + var tests = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'domingo, febrero 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'dom., 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 febrero feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd dd', '0 0º domingo dom. do'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '6 6º 06'], + ['YYYY-MMM-DD', '2010-feb-14'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 de febrero de 2010'], + ['LLL', '14 de febrero de 2010 15:25'], + ['LLLL', 'domingo, 14 de febrero de 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 de feb. de 2010'], + ['lll', '14 de feb. de 2010 15:25'], + ['llll', 'dom., 14 de feb. de 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); +}); + +test('format month', function (assert) { + var expected = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'domingo dom. do_lunes lun. lu_martes mar. ma_miércoles mié. mi_jueves jue. ju_viernes vie. vi_sábado sáb. sá'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'unos segundos', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minuto', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minuto', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutos', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutos', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'una hora', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'una hora', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horas', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horas', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horas', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un día', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un día', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 días', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un día', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 días', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 días', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mes', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mes', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mes', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meses', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meses', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meses', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mes', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meses', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un año', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 años', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un año', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 años', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'en unos segundos', 'prefix'); + assert.equal(moment(0).from(30000), 'hace unos segundos', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'hace unos segundos', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'en unos segundos', 'en unos segundos'); + assert.equal(moment().add({d: 5}).fromNow(), 'en 5 días', 'en 5 días'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'hoy a las 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'hoy a las 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'hoy a las 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'mañana a las 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).add({d: 1, h : -1}).calendar(), 'mañana a las 11:00', 'tomorrow minus 1 hour'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'hoy a las 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ayer a las 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('et'); + +test('parse', function (assert) { + var tests = 'jaanuar jaan_veebruar veebr_märts märts_aprill apr_mai mai_juuni juuni_juuli juuli_august aug_september sept_oktoober okt_november nov_detsember dets'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' peaks olema kuu ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, H:mm:ss', 'pühapäev, 14. veebruar 2010, 15:25:50'], + ['ddd, h', 'P, 3'], + ['M Mo MM MMMM MMM', '2 2. 02 veebruar veebr'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. pühapäev P P'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[aasta] DDDo [päev]', 'aasta 45. päev'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. veebruar 2010'], + ['LLL', '14. veebruar 2010 15:25'], + ['LLLL', 'pühapäev, 14. veebruar 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. veebr 2010'], + ['lll', '14. veebr 2010 15:25'], + ['llll', 'P, 14. veebr 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'jaanuar jaan_veebruar veebr_märts märts_aprill apr_mai mai_juuni juuni_juuli juuli_august aug_september sept_oktoober okt_november nov_detsember dets'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'pühapäev P P_esmaspäev E E_teisipäev T T_kolmapäev K K_neljapäev N N_reede R R_laupäev L L'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'paar sekundit', '44 seconds = paar sekundit'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'üks minut', '45 seconds = üks minut'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'üks minut', '89 seconds = üks minut'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutit', '90 seconds = 2 minutit'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutit', '44 minutes = 44 minutit'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'üks tund', '45 minutes = tund aega'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'üks tund', '89 minutes = üks tund'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 tundi', '90 minutes = 2 tundi'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 tundi', '5 hours = 5 tundi'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 tundi', '21 hours = 21 tundi'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'üks päev', '22 hours = üks päev'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'üks päev', '35 hours = üks päev'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 päeva', '36 hours = 2 päeva'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'üks päev', '1 day = üks päev'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 päeva', '5 days = 5 päeva'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 päeva', '25 days = 25 päeva'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'üks kuu', '26 days = üks kuu'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'üks kuu', '30 days = üks kuu'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'üks kuu', '43 days = üks kuu'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 kuud', '46 days = 2 kuud'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 kuud', '75 days = 2 kuud'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 kuud', '76 days = 3 kuud'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'üks kuu', '1 month = üks kuu'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 kuud', '5 months = 5 kuud'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'üks aasta', '345 days = üks aasta'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 aastat', '548 days = 2 aastat'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'üks aasta', '1 year = üks aasta'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 aastat', '5 years = 5 aastat'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'mõne sekundi pärast', 'prefix'); + assert.equal(moment(0).from(30000), 'mõni sekund tagasi', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'mõni sekund tagasi', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'mõne sekundi pärast', 'in a few seconds'); + assert.equal(moment().subtract({s: 30}).fromNow(), 'mõni sekund tagasi', 'a few seconds ago'); + + assert.equal(moment().add({m: 1}).fromNow(), 'ühe minuti pärast', 'in a minute'); + assert.equal(moment().subtract({m: 1}).fromNow(), 'üks minut tagasi', 'a minute ago'); + + assert.equal(moment().add({m: 5}).fromNow(), '5 minuti pärast', 'in 5 minutes'); + assert.equal(moment().subtract({m: 5}).fromNow(), '5 minutit tagasi', '5 minutes ago'); + + assert.equal(moment().add({d: 1}).fromNow(), 'ühe päeva pärast', 'in one day'); + assert.equal(moment().subtract({d: 1}).fromNow(), 'üks päev tagasi', 'one day ago'); + + assert.equal(moment().add({d: 5}).fromNow(), '5 päeva pärast', 'in 5 days'); + assert.equal(moment().subtract({d: 5}).fromNow(), '5 päeva tagasi', '5 days ago'); + + assert.equal(moment().add({M: 1}).fromNow(), 'kuu aja pärast', 'in a month'); + assert.equal(moment().subtract({M: 1}).fromNow(), 'kuu aega tagasi', 'a month ago'); + + assert.equal(moment().add({M: 5}).fromNow(), '5 kuu pärast', 'in 5 months'); + assert.equal(moment().subtract({M: 5}).fromNow(), '5 kuud tagasi', '5 months ago'); + + assert.equal(moment().add({y: 1}).fromNow(), 'ühe aasta pärast', 'in a year'); + assert.equal(moment().subtract({y: 1}).fromNow(), 'aasta tagasi', 'a year ago'); + + assert.equal(moment().add({y: 5}).fromNow(), '5 aasta pärast', 'in 5 years'); + assert.equal(moment().subtract({y: 5}).fromNow(), '5 aastat tagasi', '5 years ago'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Täna, 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Täna, 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Täna, 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Homme, 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Täna, 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Eile, 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[Järgmine] dddd LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Järgmine] dddd LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Järgmine] dddd LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Eelmine] dddd LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Eelmine] dddd LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Eelmine] dddd LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 nädal tagasi'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '1 nädala pärast'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 nädalat tagasi'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '2 nädala pärast'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('eu'); + +test('parse', function (assert) { + var tests = 'urtarrila urt._otsaila ots._martxoa mar._apirila api._maiatza mai._ekaina eka._uztaila uzt._abuztua abu._iraila ira._urria urr._azaroa aza._abendua abe.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'igandea, otsaila 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'ig., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 otsaila ots.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. igandea ig. ig'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '2010-02-14'], + ['LL', '2010ko otsailaren 14a'], + ['LLL', '2010ko otsailaren 14a 15:25'], + ['LLLL', 'igandea, 2010ko otsailaren 14a 15:25'], + ['l', '2010-2-14'], + ['ll', '2010ko ots. 14a'], + ['lll', '2010ko ots. 14a 15:25'], + ['llll', 'ig., 2010ko ots. 14a 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'urtarrila urt._otsaila ots._martxoa mar._apirila api._maiatza mai._ekaina eka._uztaila uzt._abuztua abu._iraila ira._urria urr._azaroa aza._abendua abe.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'igandea ig. ig_astelehena al. al_asteartea ar. ar_asteazkena az. az_osteguna og. og_ostirala ol. ol_larunbata lr. lr'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'segundo batzuk', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minutu bat', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minutu bat', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutu', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutu', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ordu bat', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ordu bat', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ordu', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ordu', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ordu', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'egun bat', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'egun bat', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 egun', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'egun bat', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 egun', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 egun', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'hilabete bat', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'hilabete bat', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'hilabete bat', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 hilabete', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 hilabete', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 hilabete', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'hilabete bat', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 hilabete', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'urte bat', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 urte', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'urte bat', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 urte', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'segundo batzuk barru', 'prefix'); + assert.equal(moment(0).from(30000), 'duela segundo batzuk', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'duela segundo batzuk', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'segundo batzuk barru', 'in seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 egun barru', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'gaur 12:00etan', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'gaur 12:25etan', 'now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'gaur 13:00etan', 'now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'bihar 12:00etan', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'gaur 11:00etan', 'now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'atzo 12:00etan', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd LT[etan]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd LT[etan]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd LT[etan]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('fa'); + +test('parse', function (assert) { + var tests = 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month()); + } + for (i = 0; i < 12; i++) { + equalTest(tests[i], 'MMM', i); + equalTest(tests[i], 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'یک\u200cشنبه، فوریه ۱۴م ۲۰۱۰، ۳:۲۵:۵۰ بعد از ظهر'], + ['ddd, hA', 'یک\u200cشنبه، ۳بعد از ظهر'], + ['M Mo MM MMMM MMM', '۲ ۲م ۰۲ فوریه فوریه'], + ['YYYY YY', '۲۰۱۰ ۱۰'], + ['D Do DD', '۱۴ ۱۴م ۱۴'], + ['d do dddd ddd dd', '۰ ۰م یک\u200cشنبه یک\u200cشنبه ی'], + ['DDD DDDo DDDD', '۴۵ ۴۵م ۰۴۵'], + ['w wo ww', '۸ ۸م ۰۸'], + ['h hh', '۳ ۰۳'], + ['H HH', '۱۵ ۱۵'], + ['m mm', '۲۵ ۲۵'], + ['s ss', '۵۰ ۵۰'], + ['a A', 'بعد از ظهر بعد از ظهر'], + ['DDDo [روز سال]', '۴۵م روز سال'], + ['LTS', '۱۵:۲۵:۵۰'], + ['L', '۱۴/۰۲/۲۰۱۰'], + ['LL', '۱۴ فوریه ۲۰۱۰'], + ['LLL', '۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'], + ['LLLL', 'یک\u200cشنبه، ۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'], + ['l', '۱۴/۲/۲۰۱۰'], + ['ll', '۱۴ فوریه ۲۰۱۰'], + ['lll', '۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'], + ['llll', 'یک\u200cشنبه، ۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '۱م', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '۲م', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '۳م', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '۴م', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '۵م', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '۶م', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '۷م', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '۸م', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '۹م', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '۱۰م', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '۱۱م', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '۱۲م', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '۱۳م', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '۱۴م', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '۱۵م', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '۱۶م', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '۱۷م', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '۱۸م', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '۱۹م', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '۲۰م', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '۲۱م', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '۲۲م', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '۲۳م', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '۲۴م', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '۲۵م', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '۲۶م', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '۲۷م', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '۲۸م', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '۲۹م', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '۳۰م', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '۳۱م', '31'); +}); + +test('format month', function (assert) { + var expected = 'ژانویه ژانویه_فوریه فوریه_مارس مارس_آوریل آوریل_مه مه_ژوئن ژوئن_ژوئیه ژوئیه_اوت اوت_سپتامبر سپتامبر_اکتبر اکتبر_نوامبر نوامبر_دسامبر دسامبر'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'یک\u200cشنبه یک\u200cشنبه ی_دوشنبه دوشنبه د_سه\u200cشنبه سه\u200cشنبه س_چهارشنبه چهارشنبه چ_پنج\u200cشنبه پنج\u200cشنبه پ_جمعه جمعه ج_شنبه شنبه ش'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'چند ثانیه', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'یک دقیقه', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'یک دقیقه', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '۲ دقیقه', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '۴۴ دقیقه', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'یک ساعت', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'یک ساعت', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '۲ ساعت', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '۵ ساعت', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '۲۱ ساعت', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'یک روز', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'یک روز', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '۲ روز', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'یک روز', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '۵ روز', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '۲۵ روز', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'یک ماه', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'یک ماه', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'یک ماه', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '۲ ماه', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '۲ ماه', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '۳ ماه', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'یک ماه', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '۵ ماه', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'یک سال', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '۲ سال', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'یک سال', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '۵ سال', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'در چند ثانیه', 'prefix'); + assert.equal(moment(0).from(30000), 'چند ثانیه پیش', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'چند ثانیه پیش', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'در چند ثانیه', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'در ۵ روز', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'امروز ساعت ۱۲:۰۰', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'امروز ساعت ۱۲:۲۵', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'امروز ساعت ۱۳:۰۰', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'فردا ساعت ۱۲:۰۰', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'امروز ساعت ۱۱:۰۰', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'دیروز ساعت ۱۲:۰۰', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [ساعت] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [ساعت] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [ساعت] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 31]).format('w ww wo'), '۱ ۰۱ ۱م', 'Dec 31 2011 should be week 1'); + assert.equal(moment([2012, 0, 6]).format('w ww wo'), '۱ ۰۱ ۱م', 'Jan 6 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '۲ ۰۲ ۲م', 'Jan 7 2012 should be week 2'); + assert.equal(moment([2012, 0, 13]).format('w ww wo'), '۲ ۰۲ ۲م', 'Jan 13 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '۳ ۰۳ ۳م', 'Jan 14 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('fi'); + +test('parse', function (assert) { + var tests = 'tammikuu tammi_helmikuu helmi_maaliskuu maalis_huhtikuu huhti_toukokuu touko_kesäkuu kesä_heinäkuu heinä_elokuu elo_syyskuu syys_lokakuu loka_marraskuu marras_joulukuu joulu'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'sunnuntai, helmikuu 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'su, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 helmikuu helmi'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. sunnuntai su su'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[vuoden] DDDo [päivä]', 'vuoden 45. päivä'], + ['LTS', '15.25.50'], + ['L', '14.02.2010'], + ['LL', '14. helmikuuta 2010'], + ['LLL', '14. helmikuuta 2010, klo 15.25'], + ['LLLL', 'sunnuntai, 14. helmikuuta 2010, klo 15.25'], + ['l', '14.2.2010'], + ['ll', '14. helmi 2010'], + ['lll', '14. helmi 2010, klo 15.25'], + ['llll', 'su, 14. helmi 2010, klo 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31st'); +}); + +test('format month', function (assert) { + var expected = 'tammikuu tammi_helmikuu helmi_maaliskuu maalis_huhtikuu huhti_toukokuu touko_kesäkuu kesä_heinäkuu heinä_elokuu elo_syyskuu syys_lokakuu loka_marraskuu marras_joulukuu joulu'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'sunnuntai su su_maanantai ma ma_tiistai ti ti_keskiviikko ke ke_torstai to to_perjantai pe pe_lauantai la la'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'muutama sekunti', '44 seconds = few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minuutti', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minuutti', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'kaksi minuuttia', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuuttia', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'tunti', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'tunti', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'kaksi tuntia', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'viisi tuntia', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 tuntia', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'päivä', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'päivä', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'kaksi päivää', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'päivä', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'viisi päivää', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 päivää', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'kuukausi', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'kuukausi', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'kuukausi', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'kaksi kuukautta', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'kaksi kuukautta', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'kolme kuukautta', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'kuukausi', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'viisi kuukautta', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'vuosi', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'kaksi vuotta', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'vuosi', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'viisi vuotta', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'muutaman sekunnin päästä', 'prefix'); + assert.equal(moment(0).from(30000), 'muutama sekunti sitten', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'muutama sekunti sitten', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'muutaman sekunnin päästä', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'viiden päivän päästä', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'tänään klo 12.00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'tänään klo 12.25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'tänään klo 13.00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'huomenna klo 12.00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'tänään klo 11.00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'eilen klo 12.00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [klo] LT'), 'today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [klo] LT'), 'today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [klo] LT'), 'today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), 'today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), 'today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), 'today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'yksi viikko sitten'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'yhden viikon päästä'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'kaksi viikkoa sitten'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'kaden viikon päästä'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('fo'); + +test('parse', function (assert) { + var tests = 'januar jan_februar feb_mars mar_apríl apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd [tann] Do MMMM YYYY, h:mm:ss a', 'sunnudagur tann 14. februar 2010, 3:25:50 pm'], + ['ddd hA', 'sun 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. sunnudagur sun su'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[tann] DDDo [dagin á árinum]', 'tann 45. dagin á árinum'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 februar 2010'], + ['LLL', '14 februar 2010 15:25'], + ['LLLL', 'sunnudagur 14. februar, 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 feb 2010'], + ['lll', '14 feb 2010 15:25'], + ['llll', 'sun 14. feb, 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'januar jan_februar feb_mars mar_apríl apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'sunnudagur sun su_mánadagur mán má_týsdagur týs tý_mikudagur mik mi_hósdagur hós hó_fríggjadagur frí fr_leygardagur ley le'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'fá sekund', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ein minutt', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ein minutt', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuttir', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuttir', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ein tími', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ein tími', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 tímar', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 tímar', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 tímar', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ein dagur', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ein dagur', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagar', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ein dagur', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagar', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagar', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ein mánaði', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ein mánaði', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ein mánaði', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mánaðir', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mánaðir', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mánaðir', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ein mánaði', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mánaðir', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'eitt ár', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ár', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'eitt ár', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ár', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'um fá sekund', 'prefix'); + assert.equal(moment(0).from(30000), 'fá sekund síðani', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'fá sekund síðani', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'um fá sekund', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'um 5 dagar', 'in 5 days'); +}); + + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Í dag kl. 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Í dag kl. 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Í dag kl. 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Í morgin kl. 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Í dag kl. 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Í gjár kl. 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[síðstu] dddd [kl] LT'), 'today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[síðstu] dddd [kl] LT'), 'today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[síðstu] dddd [kl] LT'), 'today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'yksi viikko sitten'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'yhden viikon päästä'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'kaksi viikkoa sitten'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'kaden viikon päästä'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('fr-ca'); + +test('parse', function (assert) { + var i, + tests = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanche, février 14e 2010, 3:25:50 pm'], + ['ddd, hA', 'dim., 3PM'], + ['M Mo MM MMMM MMM', '2 2e 02 février févr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14e 14'], + ['d do dddd ddd dd', '0 0e dimanche dim. Di'], + ['DDD DDDo DDDD', '45 45e 045'], + ['w wo ww', '8 8e 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[le] Do [jour du mois]', 'le 14e jour du mois'], + ['[le] DDDo [jour de l’année]', 'le 45e jour de l’année'], + ['LTS', '15:25:50'], + ['L', '2010-02-14'], + ['LL', '14 février 2010'], + ['LLL', '14 février 2010 15:25'], + ['LLLL', 'dimanche 14 février 2010 15:25'], + ['l', '2010-2-14'], + ['ll', '14 févr. 2010'], + ['lll', '14 févr. 2010 15:25'], + ['llll', 'dim. 14 févr. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2017, 0, 1]).format('Mo'), '1er', '1er'); + assert.equal(moment([2017, 1, 1]).format('Mo'), '2e', '2e'); + + assert.equal(moment([2017, 0, 1]).format('Qo'), '1er', '1er'); + assert.equal(moment([2017, 3, 1]).format('Qo'), '2e', '2e'); + + assert.equal(moment([2017, 0, 1]).format('Do'), '1er', '1er'); + assert.equal(moment([2017, 0, 2]).format('Do'), '2e', '2e'); + + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1er', '1er'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2e', '2e'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3e', '3e'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4e', '4e'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5e', '5e'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6e', '6e'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7e', '7e'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8e', '8e'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9e', '9e'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10e', '10e'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11e', '11e'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12e', '12e'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13e', '13e'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14e', '14e'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15e', '15e'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16e', '16e'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17e', '17e'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18e', '18e'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19e', '19e'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20e', '20e'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21e', '21e'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22e', '22e'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23e', '23e'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24e', '24e'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25e', '25e'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26e', '26e'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27e', '27e'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28e', '28e'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29e', '29e'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30e', '30e'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31e', '31e'); + + assert.equal(moment([2017, 0, 1]).format('do'), '0e', '0e'); + assert.equal(moment([2017, 0, 2]).format('do'), '1er', '1er'); + + assert.equal(moment([2017, 0, 4]).format('wo Wo'), '1re 1re', '1re 1re'); + assert.equal(moment([2017, 0, 11]).format('wo Wo'), '2e 2e', '2e 2e'); +}); + +test('format month', function (assert) { + var i, + expected = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'dimanche dim. Di_lundi lun. Lu_mardi mar. Ma_mercredi mer. Me_jeudi jeu. Je_vendredi ven. Ve_samedi sam. Sa'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'quelques secondes', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'une minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'une minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'une heure', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'une heure', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 heures', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 heures', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 heures', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un jour', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un jour', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 jours', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un jour', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 jours', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 jours', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mois', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mois', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mois', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mois', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mois', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mois', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mois', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mois', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un an', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ans', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un an', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ans', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'dans quelques secondes', 'prefix'); + assert.equal(moment(0).from(30000), 'il y a quelques secondes', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'dans quelques secondes', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'dans 5 jours', 'in 5 days'); +}); + +test('same day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Aujourd’hui à 12:00', 'Today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Aujourd’hui à 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Aujourd’hui à 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Demain à 12:00', 'Tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Aujourd’hui à 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Hier à 12:00', 'Yesterday at the same time'); +}); + +test('same next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('same last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('same all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1re', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1re', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2e', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2e', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3e', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('fr-ch'); + +test('parse', function (assert) { + var i, + tests = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanche, février 14e 2010, 3:25:50 pm'], + ['ddd, hA', 'dim., 3PM'], + ['M Mo MM MMMM MMM', '2 2e 02 février févr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14e 14'], + ['d do dddd ddd dd', '0 0e dimanche dim. Di'], + ['DDD DDDo DDDD', '45 45e 045'], + ['w wo ww', '6 6e 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[le] Do [jour du mois]', 'le 14e jour du mois'], + ['[le] DDDo [jour de l’année]', 'le 45e jour de l’année'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 février 2010'], + ['LLL', '14 février 2010 15:25'], + ['LLLL', 'dimanche 14 février 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 févr. 2010'], + ['lll', '14 févr. 2010 15:25'], + ['llll', 'dim. 14 févr. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2017, 0, 1]).format('Mo'), '1er', '1er'); + assert.equal(moment([2017, 1, 1]).format('Mo'), '2e', '2e'); + + assert.equal(moment([2017, 0, 1]).format('Qo'), '1er', '1er'); + assert.equal(moment([2017, 3, 1]).format('Qo'), '2e', '2e'); + + assert.equal(moment([2017, 0, 1]).format('Do'), '1er', '1er'); + assert.equal(moment([2017, 0, 2]).format('Do'), '2e', '2e'); + + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1er', '1er'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2e', '2e'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3e', '3e'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4e', '4e'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5e', '5e'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6e', '6e'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7e', '7e'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8e', '8e'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9e', '9e'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10e', '10e'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11e', '11e'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12e', '12e'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13e', '13e'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14e', '14e'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15e', '15e'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16e', '16e'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17e', '17e'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18e', '18e'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19e', '19e'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20e', '20e'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21e', '21e'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22e', '22e'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23e', '23e'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24e', '24e'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25e', '25e'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26e', '26e'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27e', '27e'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28e', '28e'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29e', '29e'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30e', '30e'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31e', '31e'); + + assert.equal(moment([2017, 0, 1]).format('do'), '0e', '0e'); + assert.equal(moment([2017, 0, 2]).format('do'), '1er', '1er'); + + assert.equal(moment([2017, 0, 4]).format('wo Wo'), '1re 1re', '1re 1re'); + assert.equal(moment([2017, 0, 11]).format('wo Wo'), '2e 2e', '2e 2e'); +}); + +test('format month', function (assert) { + var i, + expected = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'dimanche dim. Di_lundi lun. Lu_mardi mar. Ma_mercredi mer. Me_jeudi jeu. Je_vendredi ven. Ve_samedi sam. Sa'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'quelques secondes', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'une minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'une minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'une heure', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'une heure', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 heures', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 heures', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 heures', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un jour', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un jour', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 jours', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un jour', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 jours', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 jours', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mois', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mois', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mois', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mois', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mois', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mois', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mois', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mois', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un an', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ans', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un an', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ans', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'dans quelques secondes', 'prefix'); + assert.equal(moment(0).from(30000), 'il y a quelques secondes', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'dans quelques secondes', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'dans 5 jours', 'in 5 days'); +}); + +test('same day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Aujourd’hui à 12:00', 'Today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Aujourd’hui à 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Aujourd’hui à 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Demain à 12:00', 'Tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Aujourd’hui à 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Hier à 12:00', 'Yesterday at the same time'); +}); + +test('same next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('same last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('same all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52e', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1re', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1re', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2e', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2e', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('fr'); + +test('parse', function (assert) { + var i, + tests = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanche, février 14 2010, 3:25:50 pm'], + ['ddd, hA', 'dim., 3PM'], + ['M Mo MM MMMM MMM', '2 2e 02 février févr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0e dimanche dim. Di'], + ['DDD DDDo DDDD', '45 45e 045'], + ['w wo ww', '6 6e 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[le] Do [jour du mois]', 'le 14 jour du mois'], + ['[le] DDDo [jour de l’année]', 'le 45e jour de l’année'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 février 2010'], + ['LLL', '14 février 2010 15:25'], + ['LLLL', 'dimanche 14 février 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 févr. 2010'], + ['lll', '14 févr. 2010 15:25'], + ['llll', 'dim. 14 févr. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2017, 0, 1]).format('Mo'), '1er', '1er'); + assert.equal(moment([2017, 1, 1]).format('Mo'), '2e', '2e'); + + assert.equal(moment([2017, 0, 1]).format('Qo'), '1er', '1er'); + assert.equal(moment([2017, 3, 1]).format('Qo'), '2e', '2e'); + + assert.equal(moment([2017, 0, 1]).format('Do'), '1er', '1er'); + assert.equal(moment([2017, 0, 2]).format('Do'), '2', '2'); + + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1er', '1er'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2e', '2e'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3e', '3e'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4e', '4e'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5e', '5e'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6e', '6e'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7e', '7e'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8e', '8e'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9e', '9e'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10e', '10e'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11e', '11e'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12e', '12e'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13e', '13e'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14e', '14e'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15e', '15e'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16e', '16e'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17e', '17e'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18e', '18e'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19e', '19e'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20e', '20e'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21e', '21e'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22e', '22e'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23e', '23e'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24e', '24e'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25e', '25e'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26e', '26e'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27e', '27e'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28e', '28e'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29e', '29e'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30e', '30e'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31e', '31e'); + + assert.equal(moment([2017, 0, 1]).format('do'), '0e', '0e'); + assert.equal(moment([2017, 0, 2]).format('do'), '1er', '1er'); + + assert.equal(moment([2017, 0, 4]).format('wo Wo'), '1re 1re', '1re 1re'); + assert.equal(moment([2017, 0, 11]).format('wo Wo'), '2e 2e', '2e 2e'); +}); + +test('format month', function (assert) { + var i, + expected = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'dimanche dim. Di_lundi lun. Lu_mardi mar. Ma_mercredi mer. Me_jeudi jeu. Je_vendredi ven. Ve_samedi sam. Sa'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'quelques secondes', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'une minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'une minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'une heure', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'une heure', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 heures', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 heures', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 heures', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un jour', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un jour', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 jours', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un jour', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 jours', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 jours', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mois', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mois', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mois', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mois', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mois', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mois', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mois', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mois', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un an', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ans', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un an', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ans', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'dans quelques secondes', 'prefix'); + assert.equal(moment(0).from(30000), 'il y a quelques secondes', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'dans quelques secondes', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'dans 5 jours', 'in 5 days'); +}); + +test('same day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Aujourd’hui à 12:00', 'Today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Aujourd’hui à 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Aujourd’hui à 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Demain à 12:00', 'Tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Aujourd’hui à 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Hier à 12:00', 'Yesterday at the same time'); +}); + +test('same next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('same last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('same all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52e', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1re', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1re', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2e', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2e', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('fy'); + +test('parse', function (assert) { + var tests = 'jannewaris jan._febrewaris feb._maart mrt._april apr._maaie mai._juny jun._july jul._augustus aug._septimber sep._oktober okt._novimber nov._desimber des.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, HH:mm:ss', 'snein, febrewaris 14de 2010, 15:25:50'], + ['ddd, HH', 'si., 15'], + ['M Mo MM MMMM MMM', '2 2de 02 febrewaris feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14de 14'], + ['d do dddd ddd dd', '0 0de snein si. Si'], + ['DDD DDDo DDDD', '45 45ste 045'], + ['w wo ww', '6 6de 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45ste day of the year'], + ['LTS', '15:25:50'], + ['L', '14-02-2010'], + ['LL', '14 febrewaris 2010'], + ['LLL', '14 febrewaris 2010 15:25'], + ['LLLL', 'snein 14 febrewaris 2010 15:25'], + ['l', '14-2-2010'], + ['ll', '14 feb. 2010'], + ['lll', '14 feb. 2010 15:25'], + ['llll', 'si. 14 feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste'); +}); + +test('format month', function (assert) { + var expected = 'jannewaris jan._febrewaris feb._maart mrt._april apr._maaie mai_juny jun._july jul._augustus aug._septimber sep._oktober okt._novimber nov._desimber des.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'snein si. Si_moandei mo. Mo_tiisdei ti. Ti_woansdei wo. Wo_tongersdei to. To_freed fr. Fr_sneon so. So'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'in pear sekonden', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ien minút', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ien minút', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuten', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuten', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ien oere', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ien oere', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 oeren', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 oeren', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 oeren', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ien dei', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ien dei', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagen', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ien dei', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagen', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagen', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ien moanne', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ien moanne', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ien moanne', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 moannen', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 moannen', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 moannen', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ien moanne', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 moannen', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ien jier', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jierren', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ien jier', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jierren', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'oer in pear sekonden', 'prefix'); + assert.equal(moment(0).from(30000), 'in pear sekonden lyn', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'in pear sekonden lyn', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'oer in pear sekonden', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'oer 5 dagen', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'hjoed om 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'hjoed om 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'hjoed om 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'moarn om 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'hjoed om 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'juster om 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[ôfrûne] dddd [om] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[ôfrûne] dddd [om] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[ôfrûne] dddd [om] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('month abbreviation', function (assert) { + assert.equal(moment([2012, 5, 23]).format('D-MMM-YYYY'), '23-jun-2012', 'format month abbreviation surrounded by dashes should not include a dot'); + assert.equal(moment([2012, 5, 23]).format('D MMM YYYY'), '23 jun. 2012', 'format month abbreviation not surrounded by dashes should include a dot'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('gd'); + +var months = [ + 'Am Faoilleach,Faoi', + 'An Gearran,Gear', + 'Am Màrt,Màrt', + 'An Giblean,Gibl', + 'An Cèitean,Cèit', + 'An t-Ògmhios,Ògmh', + 'An t-Iuchar,Iuch', + 'An Lùnastal,Lùn', + 'An t-Sultain,Sult', + 'An Dàmhair,Dàmh', + 'An t-Samhain,Samh', + 'An Dùbhlachd,Dùbh' +]; + +test('parse', function (assert) { + function equalTest(monthName, monthFormat, monthNum) { + assert.equal(moment(monthName, monthFormat).month(), monthNum, monthName + ' should be month ' + (monthNum + 1)); + } + + for (var i = 0; i < 12; i++) { + var testMonth = months[i].split(','); + equalTest(testMonth[0], 'MMM', i); + equalTest(testMonth[1], 'MMM', i); + equalTest(testMonth[0], 'MMMM', i); + equalTest(testMonth[1], 'MMMM', i); + equalTest(testMonth[0].toLocaleLowerCase(), 'MMMM', i); + equalTest(testMonth[1].toLocaleLowerCase(), 'MMMM', i); + equalTest(testMonth[0].toLocaleUpperCase(), 'MMMM', i); + equalTest(testMonth[1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Didòmhnaich, An Gearran 14mh 2010, 3:25:50 pm'], + ['ddd, hA', 'Did, 3PM'], + ['M Mo MM MMMM MMM', '2 2na 02 An Gearran Gear'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14mh 14'], + ['d do dddd ddd dd', '0 0mh Didòmhnaich Did Dò'], + ['DDD DDDo DDDD', '45 45mh 045'], + ['w wo ww', '6 6mh 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[an] DDDo [latha den bhliadhna]', 'an 45mh latha den bhliadhna'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 An Gearran 2010'], + ['LLL', '14 An Gearran 2010 15:25'], + ['LLLL', 'Didòmhnaich, 14 An Gearran 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Gear 2010'], + ['lll', '14 Gear 2010 15:25'], + ['llll', 'Did, 14 Gear 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1d', '1d'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2na', '2na'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3mh', '3mh'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4mh', '4mh'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5mh', '5mh'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6mh', '6mh'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7mh', '7mh'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8mh', '8mh'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9mh', '9mh'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10mh', '10mh'); + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11mh', '11mh'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12na', '12na'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13mh', '13mh'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14mh', '14mh'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15mh', '15mh'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16mh', '16mh'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17mh', '17mh'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18mh', '18mh'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19mh', '19mh'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20mh', '20mh'); + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21mh', '21mh'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22na', '22na'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23mh', '23mh'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24mh', '24mh'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25mh', '25mh'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26mh', '26mh'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27mh', '27mh'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28mh', '28mh'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29mh', '29mh'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30mh', '30mh'); + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31mh', '31mh'); +}); + +test('format month', function (assert) { + var expected = months; + for (var i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM,MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = ['Didòmhnaich Did Dò', 'Diluain Dil Lu', 'Dimàirt Dim Mà', 'Diciadain Dic Ci', 'Diardaoin Dia Ar', 'Dihaoine Dih Ha', 'Disathairne Dis Sa']; + for (var i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'beagan diogan', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'mionaid', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'mionaid', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 mionaidean', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 mionaidean', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'uair', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'uair', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 uairean', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 uairean', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 uairean', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'latha', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'latha', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 latha', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'latha', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 latha', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 latha', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mìos', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mìos', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mìos', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mìosan', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mìosan', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mìosan', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mìos', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mìosan', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'bliadhna', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 bliadhna', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'bliadhna', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 bliadhna', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'ann an beagan diogan', 'prefix'); + assert.equal(moment(0).from(30000), 'bho chionn beagan diogan', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'bho chionn beagan diogan', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'ann an beagan diogan', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'ann an 5 latha', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'An-diugh aig 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'An-diugh aig 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'An-diugh aig 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'A-màireach aig 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'An-diugh aig 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'An-dè aig 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [aig] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [aig] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [aig] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [seo chaidh] [aig] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [seo chaidh] [aig] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [seo chaidh] [aig] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52na', 'Faoi 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1d', 'Faoi 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1d', 'Faoi 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2na', 'Faoi 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2na', 'Faoi 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('gl'); + +test('parse', function (assert) { + var tests = 'xaneiro xan._febreiro feb._marzo mar._abril abr._maio mai._xuño xuñ._xullo xul._agosto ago._setembro set._outubro out._novembro nov._decembro dec.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'domingo, febreiro 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'dom., 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 febreiro feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd dd', '0 0º domingo dom. do'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '6 6º 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 de febreiro de 2010'], + ['LLL', '14 de febreiro de 2010 15:25'], + ['LLLL', 'domingo, 14 de febreiro de 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 de feb. de 2010'], + ['lll', '14 de feb. de 2010 15:25'], + ['llll', 'dom., 14 de feb. de 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); +}); + +test('format month', function (assert) { + var expected = 'xaneiro xan._febreiro feb._marzo mar._abril abr._maio mai._xuño xuñ._xullo xul._agosto ago._setembro set._outubro out._novembro nov._decembro dec.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'domingo dom. do_luns lun. lu_martes mar. ma_mércores mér. mé_xoves xov. xo_venres ven. ve_sábado sáb. sá'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'uns segundos', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minuto', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minuto', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutos', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutos', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'unha hora', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'unha hora', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horas', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horas', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horas', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un día', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un día', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 días', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un día', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 días', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 días', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mes', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mes', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mes', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meses', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meses', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meses', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mes', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meses', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un ano', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 anos', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un ano', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 anos', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'nuns segundos', 'prefix'); + assert.equal(moment(0).from(30000), 'hai uns segundos', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'hai uns segundos', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'nuns segundos', 'nuns segundos'); + assert.equal(moment().add({d: 5}).fromNow(), 'en 5 días', 'en 5 días'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'hoxe ás 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'hoxe ás 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'hoxe ás 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'mañá ás 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).add({d: 1, h : -1}).calendar(), 'mañá ás 11:00', 'tomorrow minus 1 hour'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'hoxe ás 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'onte á 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('regression tests', function (assert) { + var lastWeek = moment().subtract({d: 4}).hours(1); + assert.equal(lastWeek.calendar(), lastWeek.format('[o] dddd [pasado a] LT'), '1 o\'clock bug'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('gom-latn'); + +test('parse', function (assert) { + var i, + tests = 'Janer Jan._Febrer Feb._Mars Mars_Abril Abr._Mai Mai_Jun Jun_Julai Jul._Agost Ago._Setembr Set._Otubr Otu._Novembr Nov._Dezembr Dez.'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Aitar, Febrer 14er 2010, 3:25:50 donparam'], + ['ddd, hA', 'Ait., 3donparam'], + ['M Mo MM MMMM MMM', '2 2 02 Febrer Feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14er 14'], + ['d do dddd ddd dd', '0 0 Aitar Ait. Ai'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'donparam donparam'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LTS', 'donparam 3:25:50 vazta'], + ['L', '14-02-2010'], + ['LL', '14 Febrer 2010'], + ['LLL', '14 Febrer 2010 donparam 3:25 vazta'], + ['LLLL', 'Aitar, Febrerachea 14er, 2010, donparam 3:25 vazta'], + ['l', '14-2-2010'], + ['ll', '14 Feb. 2010'], + ['lll', '14 Feb. 2010 donparam 3:25 vazta'], + ['llll', 'Ait., 14 Feb. 2010, donparam 3:25 vazta'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var i, + expected = 'Janer Jan._Febrer Feb._Mars Mars_Abril Abr._Mai Mai_Jun Jun_Julai Jul._Agost Ago._Setembr Set._Otubr Otu._Novembr Nov._Dezembr Dez.'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'Aitar Ait. Ai_Somar Som. Sm_Mongllar Mon. Mo_Budvar Bud. Bu_Brestar Bre. Br_Sukrar Suk. Su_Son\'var Son. Sn'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'thodde secondanim', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'eka mintan', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'eka mintan', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 mintanim', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 mintanim', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'eka horan', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'eka horan', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horanim', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horanim', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horanim', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'eka disan', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'eka disan', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 disanim', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'eka disan', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 disanim', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 disanim', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'eka mhoinean', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'eka mhoinean', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'eka mhoinean', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mhoineanim', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mhoineanim', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mhoineanim', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'eka mhoinean', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mhoineanim', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'eka vorsan', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 vorsanim', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'eka vorsan', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 vorsanim', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'thodde second', 'prefix'); + assert.equal(moment(0).from(30000), 'thodde second adim', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'thodde second adim', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'thodde second', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 dis', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Aiz donparam 12:00 vazta', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Aiz donparam 12:25 vazta', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Aiz donparam 1:00 vazta', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Faleam donparam 12:00 vazta', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Aiz sokalli 11:00 vazta', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Kal donparam 12:00 vazta', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[Ieta to] dddd[,] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Ieta to] dddd[,] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Ieta to] dddd[,] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Fatlo] dddd[,] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Fatlo] dddd[,] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Fatlo] dddd[,] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('he'); + +test('parse', function (assert) { + var tests = 'ינואר ינו׳_פברואר פבר׳_מרץ מרץ_אפריל אפר׳_מאי מאי_יוני יוני_יולי יולי_אוגוסט אוג׳_ספטמבר ספט׳_אוקטובר אוק׳_נובמבר נוב׳_דצמבר דצמ׳'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'ראשון, פברואר 14 2010, 3:25:50 אחה"צ'], + ['ddd, h A', 'א׳, 3 אחרי הצהריים'], + ['M Mo MM MMMM MMM', '2 2 02 פברואר פבר׳'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 ראשון א׳ א'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'אחה"צ אחרי הצהריים'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 בפברואר 2010'], + ['LLL', '14 בפברואר 2010 15:25'], + ['LLLL', 'ראשון, 14 בפברואר 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 פבר׳ 2010'], + ['lll', '14 פבר׳ 2010 15:25'], + ['llll', 'א׳, 14 פבר׳ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format month', function (assert) { + var expected = 'ינואר ינו׳_פברואר פבר׳_מרץ מרץ_אפריל אפר׳_מאי מאי_יוני יוני_יולי יולי_אוגוסט אוג׳_ספטמבר ספט׳_אוקטובר אוק׳_נובמבר נוב׳_דצמבר דצמ׳'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'ראשון א׳ א|שני ב׳ ב|שלישי ג׳ ג|רביעי ד׳ ד|חמישי ה׳ ה|שישי ו׳ ו|שבת ש׳ ש'.split('|'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'מספר שניות', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'דקה', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'דקה', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 דקות', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 דקות', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'שעה', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'שעה', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'שעתיים', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 שעות', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 שעות', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'יום', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'יום', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'יומיים', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'יום', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ימים', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ימים', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'חודש', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'חודש', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'חודש', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'חודשיים', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'חודשיים', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 חודשים', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'חודש', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 חודשים', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'שנה', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'שנתיים', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 3699}), true), '10 שנים', '345 days = 10 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 7340}), true), '20 שנה', '548 days = 20 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'שנה', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 שנים', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'בעוד מספר שניות', 'prefix'); + assert.equal(moment(0).from(30000), 'לפני מספר שניות', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'לפני מספר שניות', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'בעוד מספר שניות', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'בעוד 5 ימים', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'היום ב־12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'היום ב־12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'היום ב־13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'מחר ב־12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'היום ב־11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'אתמול ב־12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [בשעה] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [בשעה] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [בשעה] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('hi'); + +test('parse', function (assert) { + var tests = 'जनवरी जन._फ़रवरी फ़र._मार्च मार्च_अप्रैल अप्रै._मई मई_जून जून_जुलाई जुल._अगस्त अग._सितम्बर सित._अक्टूबर अक्टू._नवम्बर नव._दिसम्बर दिस.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss बजे', 'रविवार, १४ फ़रवरी २०१०, दोपहर ३:२५:५० बजे'], + ['ddd, a h बजे', 'रवि, दोपहर ३ बजे'], + ['M Mo MM MMMM MMM', '२ २ ०२ फ़रवरी फ़र.'], + ['YYYY YY', '२०१० १०'], + ['D Do DD', '१४ १४ १४'], + ['d do dddd ddd dd', '० ० रविवार रवि र'], + ['DDD DDDo DDDD', '४५ ४५ ०४५'], + ['w wo ww', '८ ८ ०८'], + ['h hh', '३ ०३'], + ['H HH', '१५ १५'], + ['m mm', '२५ २५'], + ['s ss', '५० ५०'], + ['a A', 'दोपहर दोपहर'], + ['LTS', 'दोपहर ३:२५:५० बजे'], + ['L', '१४/०२/२०१०'], + ['LL', '१४ फ़रवरी २०१०'], + ['LLL', '१४ फ़रवरी २०१०, दोपहर ३:२५ बजे'], + ['LLLL', 'रविवार, १४ फ़रवरी २०१०, दोपहर ३:२५ बजे'], + ['l', '१४/२/२०१०'], + ['ll', '१४ फ़र. २०१०'], + ['lll', '१४ फ़र. २०१०, दोपहर ३:२५ बजे'], + ['llll', 'रवि, १४ फ़र. २०१०, दोपहर ३:२५ बजे'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१'); +}); + +test('format month', function (assert) { + var expected = 'जनवरी जन._फ़रवरी फ़र._मार्च मार्च_अप्रैल अप्रै._मई मई_जून जून_जुलाई जुल._अगस्त अग._सितम्बर सित._अक्टूबर अक्टू._नवम्बर नव._दिसम्बर दिस.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'रविवार रवि र_सोमवार सोम सो_मंगलवार मंगल मं_बुधवार बुध बु_गुरूवार गुरू गु_शुक्रवार शुक्र शु_शनिवार शनि श'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'कुछ ही क्षण', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'एक मिनट', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'एक मिनट', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '२ मिनट', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '४४ मिनट', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'एक घंटा', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'एक घंटा', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '२ घंटे', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '५ घंटे', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '२१ घंटे', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'एक दिन', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'एक दिन', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '२ दिन', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'एक दिन', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '५ दिन', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '२५ दिन', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'एक महीने', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'एक महीने', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'एक महीने', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '२ महीने', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '२ महीने', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '३ महीने', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'एक महीने', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '५ महीने', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'एक वर्ष', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '२ वर्ष', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'एक वर्ष', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '५ वर्ष', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'कुछ ही क्षण में', 'prefix'); + assert.equal(moment(0).from(30000), 'कुछ ही क्षण पहले', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'कुछ ही क्षण पहले', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'कुछ ही क्षण में', 'कुछ ही क्षण में'); + assert.equal(moment().add({d: 5}).fromNow(), '५ दिन में', '५ दिन में'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'आज दोपहर १२:०० बजे', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'आज दोपहर १२:२५ बजे', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 3}).calendar(), 'आज दोपहर ३:०० बजे', 'Now plus 3 hours'); + assert.equal(moment(a).add({d: 1}).calendar(), 'कल दोपहर १२:०० बजे', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'आज दोपहर ११:०० बजे', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'कल दोपहर १२:०० बजे', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'रात', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'सुबह', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'दोपहर', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'शाम', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'शाम', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'रात', 'night'); + + assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'रात', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'सुबह', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'दोपहर', ' during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'शाम', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'शाम', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'रात', 'night'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '१ ०१ १', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '२ ०२ २', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '३ ०३ ३', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('hr'); + +test('parse', function (assert) { + var tests = 'siječanj sij._veljača velj._ožujak ožu._travanj tra._svibanj svi._lipanj lip._srpanj srp._kolovoz kol._rujan ruj._listopad lis._studeni stu._prosinac pro.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedjelja, 14. veljače 2010, 3:25:50 pm'], + ['ddd, hA', 'ned., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 veljača velj.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedjelja ned. ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. veljača 2010'], + ['LLL', '14. veljača 2010 15:25'], + ['LLLL', 'nedjelja, 14. veljača 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. velj. 2010'], + ['lll', '14. velj. 2010 15:25'], + ['llll', 'ned., 14. velj. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'siječanj sij._veljača velj._ožujak ožu._travanj tra._svibanj svi._lipanj lip._srpanj srp._kolovoz kol._rujan ruj._listopad lis._studeni stu._prosinac pro.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'nedjelja ned. ne_ponedjeljak pon. po_utorak uto. ut_srijeda sri. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'par sekundi', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'jedna minuta', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'jedna minuta', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minute', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuta', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'jedan sat', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'jedan sat', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 sata', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 sati', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 sati', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'dan', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'dan', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dana', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'dan', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dana', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dana', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mjesec', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mjesec', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mjesec', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mjeseca', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mjeseca', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mjeseca', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mjesec', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mjeseci', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'godinu', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 godine', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'godinu', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 godina', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'za par sekundi', 'prefix'); + assert.equal(moment(0).from(30000), 'prije par sekundi', 'prefix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'prije par sekundi', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'za par sekundi', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'za 5 dana', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'danas u 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'danas u 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'danas u 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'sutra u 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'danas u 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'jučer u 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.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'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.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'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('hu'); + +test('parse', function (assert) { + var tests = 'január jan_február feb_március márc_április ápr_május máj_június jún_július júl_augusztus aug_szeptember szept_október okt_november nov_december dec'.split('_'), + i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, HH:mm:ss', 'vasárnap, február 14. 2010, 15:25:50'], + ['ddd, HH', 'vas, 15'], + ['M Mo MM MMMM MMM', '2 2. 02 február feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. vasárnap vas v'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['[az év] DDDo [napja]', 'az év 45. napja'], + ['LTS', '15:25:50'], + ['L', '2010.02.14.'], + ['LL', '2010. február 14.'], + ['LLL', '2010. február 14. 15:25'], + ['LLLL', '2010. február 14., vasárnap 15:25'], + ['l', '2010.2.14.'], + ['ll', '2010. feb 14.'], + ['lll', '2010. feb 14. 15:25'], + ['llll', '2010. feb 14., vas 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 0, 0]).format('a'), 'de', 'am'); + assert.equal(moment([2011, 2, 23, 11, 59]).format('a'), 'de', 'am'); + assert.equal(moment([2011, 2, 23, 12, 0]).format('a'), 'du', 'pm'); + assert.equal(moment([2011, 2, 23, 23, 59]).format('a'), 'du', 'pm'); + + assert.equal(moment([2011, 2, 23, 0, 0]).format('A'), 'DE', 'AM'); + assert.equal(moment([2011, 2, 23, 11, 59]).format('A'), 'DE', 'AM'); + assert.equal(moment([2011, 2, 23, 12, 0]).format('A'), 'DU', 'PM'); + assert.equal(moment([2011, 2, 23, 23, 59]).format('A'), 'DU', 'PM'); +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'január jan_február feb_március márc_április ápr_május máj_június jún_július júl_augusztus aug_szeptember szept_október okt_november nov_december dec'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'vasárnap vas_hétfő hét_kedd kedd_szerda sze_csütörtök csüt_péntek pén_szombat szo'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'néhány másodperc', '44 másodperc = néhány másodperc'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'egy perc', '45 másodperc = egy perc'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'egy perc', '89 másodperc = egy perc'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 perc', '90 másodperc = 2 perc'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 perc', '44 perc = 44 perc'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'egy óra', '45 perc = egy óra'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'egy óra', '89 perc = egy óra'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 óra', '90 perc = 2 óra'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 óra', '5 óra = 5 óra'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 óra', '21 óra = 21 óra'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'egy nap', '22 óra = egy nap'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'egy nap', '35 óra = egy nap'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 nap', '36 óra = 2 nap'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'egy nap', '1 nap = egy nap'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 nap', '5 nap = 5 nap'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 nap', '25 nap = 25 nap'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'egy hónap', '26 nap = egy hónap'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'egy hónap', '30 nap = egy hónap'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'egy hónap', '45 nap = egy hónap'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 hónap', '46 nap = 2 hónap'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 hónap', '75 nap = 2 hónap'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 hónap', '76 nap = 3 hónap'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'egy hónap', '1 hónap = egy hónap'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 hónap', '5 hónap = 5 hónap'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'egy év', '345 nap = egy év'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 év', '548 nap = 2 év'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'egy év', '1 év = egy év'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 év', '5 év = 5 év'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'néhány másodperc múlva', 'prefix'); + assert.equal(moment(0).from(30000), 'néhány másodperce', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'néhány másodperce', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'néhány másodperc múlva', 'néhány másodperc múlva'); + assert.equal(moment().add({d: 5}).fromNow(), '5 nap múlva', '5 nap múlva'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'ma 12:00-kor', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'ma 12:25-kor', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'ma 13:00-kor', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'holnap 12:00-kor', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'ma 11:00-kor', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'tegnap 12:00-kor', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m, days = 'vasárnap_hétfőn_kedden_szerdán_csütörtökön_pénteken_szombaton'.split('_'); + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), 'today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), 'today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), 'today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m, days = 'vasárnap_hétfőn_kedden_szerdán_csütörtökön_pénteken_szombaton'.split('_'); + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), 'today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), 'today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), 'today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'egy héte'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'egy hét múlva'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 hete'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '2 hét múlva'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '52 52 52.', 'Dec 26 2011 should be week 52'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('hy-am'); + +test('parse', function (assert) { + var tests = 'հունվար հնվ_փետրվար փտր_մարտ մրտ_ապրիլ ապր_մայիս մյս_հունիս հնս_հուլիս հլս_օգոստոս օգս_սեպտեմբեր սպտ_հոկտեմբեր հկտ_նոյեմբեր նմբ_դեկտեմբեր դկտ'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('parse exceptional case', function (assert) { + assert.equal(moment('11 մայիսի 1989', ['DD MMMM YYYY']).format('DD-MM-YYYY'), '11-05-1989'); +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'կիրակի, 14 փետրվարի 2010, 15:25:50'], + ['ddd, h A', 'կրկ, 3 ցերեկվա'], + ['M Mo MM MMMM MMM', '2 2 02 փետրվար փտր'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 կիրակի կրկ կրկ'], + ['DDD DDDo DDDD', '45 45-րդ 045'], + ['w wo ww', '7 7-րդ 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'ցերեկվա ցերեկվա'], + ['[տարվա] DDDo [օրը]', 'տարվա 45-րդ օրը'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 փետրվարի 2010 թ.'], + ['LLL', '14 փետրվարի 2010 թ., 15:25'], + ['LLLL', 'կիրակի, 14 փետրվարի 2010 թ., 15:25'], + ['l', '14.2.2010'], + ['ll', '14 փտր 2010 թ.'], + ['lll', '14 փտր 2010 թ., 15:25'], + ['llll', 'կրկ, 14 փտր 2010 թ., 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format meridiem', function (assert) { + assert.equal(moment([2012, 11, 28, 0, 0]).format('A'), 'գիշերվա', 'night'); + assert.equal(moment([2012, 11, 28, 3, 59]).format('A'), 'գիշերվա', 'night'); + assert.equal(moment([2012, 11, 28, 4, 0]).format('A'), 'առավոտվա', 'morning'); + assert.equal(moment([2012, 11, 28, 11, 59]).format('A'), 'առավոտվա', 'morning'); + assert.equal(moment([2012, 11, 28, 12, 0]).format('A'), 'ցերեկվա', 'afternoon'); + assert.equal(moment([2012, 11, 28, 16, 59]).format('A'), 'ցերեկվա', 'afternoon'); + assert.equal(moment([2012, 11, 28, 17, 0]).format('A'), 'երեկոյան', 'evening'); + assert.equal(moment([2012, 11, 28, 23, 59]).format('A'), 'երեկոյան', 'evening'); +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ին', '1-ին'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-րդ', '2-րդ'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-րդ', '3-րդ'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-րդ', '4-րդ'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-րդ', '5-րդ'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-րդ', '6-րդ'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-րդ', '7-րդ'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-րդ', '8-րդ'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-րդ', '9-րդ'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-րդ', '10-րդ'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-րդ', '11-րդ'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-րդ', '12-րդ'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-րդ', '13-րդ'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-րդ', '14-րդ'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-րդ', '15-րդ'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-րդ', '16-րդ'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-րդ', '17-րդ'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-րդ', '18-րդ'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-րդ', '19-րդ'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-րդ', '20-րդ'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-րդ', '21-րդ'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-րդ', '22-րդ'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-րդ', '23-րդ'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-րդ', '24-րդ'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-րդ', '25-րդ'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-րդ', '26-րդ'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-րդ', '27-րդ'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-րդ', '28-րդ'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-րդ', '29-րդ'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-րդ', '30-րդ'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-րդ', '31-րդ'); +}); + +test('format month', function (assert) { + var expected = 'հունվար հնվ_փետրվար փտր_մարտ մրտ_ապրիլ ապր_մայիս մյս_հունիս հնս_հուլիս հլս_օգոստոս օգս_սեպտեմբեր սպտ_հոկտեմբեր հկտ_նոյեմբեր նմբ_դեկտեմբեր դկտ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format month case', function (assert) { + var months = { + 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'), + 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + assert.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]); + } +}); + +test('format month short case', function (assert) { + var monthsShort = { + 'nominative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + 'accusative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2011, i, 1]).format('D MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]); + assert.equal(moment([2011, i, 1]).format('MMM'), monthsShort.nominative[i], '1 ' + monthsShort.nominative[i]); + } +}); + +test('format month case with escaped symbols', function (assert) { + var months = { + 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'), + 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2013, i, 1]).format('D[] MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + assert.equal(moment([2013, i, 1]).format('[<i>]D[</i>] [<b>]MMMM[</b>]'), '<i>1</i> <b>' + months.accusative[i] + '</b>', '1 <b>' + months.accusative[i] + '</b>'); + assert.equal(moment([2013, i, 1]).format('D[-ին օրը] MMMM'), '1-ին օրը ' + months.accusative[i], '1-ին օրը ' + months.accusative[i]); + assert.equal(moment([2013, i, 1]).format('D, MMMM'), '1, ' + months.nominative[i], '1, ' + months.nominative[i]); + } +}); + +test('format month short case with escaped symbols', function (assert) { + var monthsShort = { + 'nominative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + 'accusative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2013, i, 1]).format('D[] MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]); + assert.equal(moment([2013, i, 1]).format('[<i>]D[</i>] [<b>]MMM[</b>]'), '<i>1</i> <b>' + monthsShort.accusative[i] + '</b>', '1 <b>' + monthsShort.accusative[i] + '</b>'); + assert.equal(moment([2013, i, 1]).format('D[-ին օրը] MMM'), '1-ին օրը ' + monthsShort.accusative[i], '1-ին օրը ' + monthsShort.accusative[i]); + assert.equal(moment([2013, i, 1]).format('D, MMM'), '1, ' + monthsShort.nominative[i], '1, ' + monthsShort.nominative[i]); + } +}); + +test('format week', function (assert) { + var expected = 'կիրակի կրկ կրկ_երկուշաբթի երկ երկ_երեքշաբթի երք երք_չորեքշաբթի չրք չրք_հինգշաբթի հնգ հնգ_ուրբաթ ուրբ ուրբ_շաբաթ շբթ շբթ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'մի քանի վայրկյան', '44 seconds = seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'րոպե', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'րոպե', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 րոպե', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 րոպե', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ժամ', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ժամ', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ժամ', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ժամ', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ժամ', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'օր', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'օր', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 օր', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'օր', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 օր', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), '11 օր', '11 days = 11 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), '21 օր', '21 days = 21 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 օր', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ամիս', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ամիս', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ամիս', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ամիս', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ամիս', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ամիս', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ամիս', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ամիս', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'տարի', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 տարի', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'տարի', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 տարի', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'մի քանի վայրկյան հետո', 'prefix'); + assert.equal(moment(0).from(30000), 'մի քանի վայրկյան առաջ', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'մի քանի վայրկյան հետո', 'in seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 օր հետո', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'այսօր 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'այսօր 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'այսօր 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'վաղը 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'այսօր 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'երեկ 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + function makeFormat(d) { + return 'dddd [օրը ժամը] LT'; + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + return '[անցած] dddd [օրը ժամը] LT'; + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ին', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ին', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-րդ', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-րդ', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-րդ', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('id'); + +test('parse', function (assert) { + var tests = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_November Nov_Desember Des'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Minggu, Februari 14 2010, 3:25:50 sore'], + ['ddd, hA', 'Min, 3sore'], + ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Minggu Min Mg'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'sore sore'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LTS', '15.25.50'], + ['L', '14/02/2010'], + ['LL', '14 Februari 2010'], + ['LLL', '14 Februari 2010 pukul 15.25'], + ['LLLL', 'Minggu, 14 Februari 2010 pukul 15.25'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 pukul 15.25'], + ['llll', 'Min, 14 Feb 2010 pukul 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format month', function (assert) { + var expected = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_November Nov_Desember Des'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Minggu Min Mg_Senin Sen Sn_Selasa Sel Sl_Rabu Rab Rb_Kamis Kam Km_Jumat Jum Jm_Sabtu Sab Sb'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'beberapa detik', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'semenit', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'semenit', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 menit', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 menit', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'sejam', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'sejam', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 jam', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 jam', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 jam', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'sehari', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'sehari', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 hari', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'sehari', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 hari', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 hari', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'sebulan', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'sebulan', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'sebulan', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 bulan', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 bulan', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 bulan', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'sebulan', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 bulan', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'setahun', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 tahun', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'setahun', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 tahun', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'dalam beberapa detik', 'prefix'); + assert.equal(moment(0).from(30000), 'beberapa detik yang lalu', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'beberapa detik yang lalu', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'dalam beberapa detik', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'dalam 5 hari', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Hari ini pukul 12.00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Hari ini pukul 12.25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Hari ini pukul 13.00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Besok pukul 12.00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hari ini pukul 11.00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Kemarin pukul 12.00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('is'); + +test('parse', function (assert) { + var tests = 'janúar jan_febrúar feb_mars mar_apríl apr_maí maí_júní jún_júlí júl_ágúst ágú_september sep_október okt_nóvember nóv_desember des'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'sunnudagur, 14. febrúar 2010, 3:25:50 pm'], + ['ddd, hA', 'sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 febrúar feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. sunnudagur sun Su'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. febrúar 2010'], + ['LLL', '14. febrúar 2010 kl. 15:25'], + ['LLLL', 'sunnudagur, 14. febrúar 2010 kl. 15:25'], + ['l', '14.2.2010'], + ['ll', '14. feb 2010'], + ['lll', '14. feb 2010 kl. 15:25'], + ['llll', 'sun, 14. feb 2010 kl. 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'janúar jan_febrúar feb_mars mar_apríl apr_maí maí_júní jún_júlí júl_ágúst ágú_september sep_október okt_nóvember nóv_desember des'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'sunnudagur sun Su_mánudagur mán Má_þriðjudagur þri Þr_miðvikudagur mið Mi_fimmtudagur fim Fi_föstudagur fös Fö_laugardagur lau La'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'nokkrar sekúndur', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'mínúta', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'mínúta', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 mínútur', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 mínútur', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 21}), true), '21 mínúta', '21 minutes = 21 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'klukkustund', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'klukkustund', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 klukkustundir', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 klukkustundir', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 klukkustund', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'dagur', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'dagur', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagar', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'dagur', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagar', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagar', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), '11 dagar', '11 days = 11 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), '21 dagur', '21 days = 21 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mánuður', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mánuður', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mánuður', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mánuðir', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mánuðir', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mánuðir', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mánuður', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mánuðir', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ár', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ár', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ár', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ár', '5 years = 5 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 21}), true), '21 ár', '21 years = 21 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'eftir nokkrar sekúndur', 'prefix'); + assert.equal(moment(0).from(30000), 'fyrir nokkrum sekúndum síðan', 'suffix'); + assert.equal(moment().subtract({m: 1}).fromNow(), 'fyrir mínútu síðan', 'a minute ago'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'fyrir nokkrum sekúndum síðan', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'eftir nokkrar sekúndur', 'in a few seconds'); + assert.equal(moment().add({m: 1}).fromNow(), 'eftir mínútu', 'in a minute'); + assert.equal(moment().add({d: 5}).fromNow(), 'eftir 5 daga', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'í dag kl. 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'í dag kl. 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'í dag kl. 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'á morgun kl. 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'í dag kl. 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'í gær kl. 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('it'); + +test('parse', function (assert) { + var tests = 'gennaio gen_febbraio feb_marzo mar_aprile apr_maggio mag_giugno giu_luglio lug_agosto ago_settembre set_ottobre ott_novembre nov_dicembre dic'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'domenica, febbraio 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'dom, 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 febbraio feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd dd', '0 0º domenica dom do'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '6 6º 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 febbraio 2010'], + ['LLL', '14 febbraio 2010 15:25'], + ['LLLL', 'domenica, 14 febbraio 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 feb 2010'], + ['lll', '14 feb 2010 15:25'], + ['llll', 'dom, 14 feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); +}); + +test('format month', function (assert) { + var expected = 'gennaio gen_febbraio feb_marzo mar_aprile apr_maggio mag_giugno giu_luglio lug_agosto ago_settembre set_ottobre ott_novembre nov_dicembre dic'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'domenica dom do_lunedì lun lu_martedì mar ma_mercoledì mer me_giovedì gio gi_venerdì ven ve_sabato sab sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'alcuni secondi', '44 seconds = seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minuto', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minuto', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuti', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuti', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'un\'ora', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'un\'ora', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ore', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ore', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ore', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un giorno', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un giorno', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 giorni', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un giorno', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 giorni', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 giorni', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mese', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mese', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mese', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mesi', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mesi', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mesi', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mese', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesi', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un anno', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 anni', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un anno', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 anni', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'in alcuni secondi', 'prefix'); + assert.equal(moment(0).from(30000), 'alcuni secondi fa', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'in alcuni secondi', 'in seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'tra 5 giorni', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Oggi alle 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Oggi alle 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Oggi alle 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Domani alle 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Oggi alle 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ieri alle 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [alle] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [alle] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [alle] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m, weekday, datestring; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + // Different date string + weekday = parseInt(m.format('d'), 10); + datestring = (weekday === 0) ? '[la scorsa] dddd [alle] LT' : '[lo scorso] dddd [alle] LT'; + assert.equal(m.calendar(), m.format(datestring), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(datestring), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(datestring), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ja'); + +test('parse', function (assert) { + var tests = '1月 1月_2月 2月_3月 3月_4月 4月_5月 5月_6月 6月_7月 7月_8月 8月_9月 9月_10月 10月_11月 11月_12月 12月'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, a h:mm:ss', '日曜日, 2月 14日 2010, 午後 3:25:50'], + ['ddd, Ah', '日, 午後3'], + ['M Mo MM MMMM MMM', '2 2 02 2月 2月'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14日 14'], + ['d do dddd ddd dd', '0 0日 日曜日 日 日'], + ['DDD DDDo DDDD', '45 45日 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', '午後 午後'], + ['[the] DDDo [day of the year]', 'the 45日 day of the year'], + ['LTS', '15:25:50'], + ['L', '2010/02/14'], + ['LL', '2010年2月14日'], + ['LLL', '2010年2月14日 15:25'], + ['LLLL', '2010年2月14日 15:25 日曜日'], + ['l', '2010/02/14'], + ['ll', '2010年2月14日'], + ['lll', '2010年2月14日 15:25'], + ['llll', '2010年2月14日 15:25 日曜日'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format month', function (assert) { + var expected = '1月 1月_2月 2月_3月 3月_4月 4月_5月 5月_6月 6月_7月 7月_8月 8月_9月 9月_10月 10月_11月 11月_12月 12月'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = '日曜日 日 日_月曜日 月 月_火曜日 火 火_水曜日 水 水_木曜日 木 木_金曜日 金 金_土曜日 土 土'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '数秒', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1分', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1分', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2分', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44分', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1時間', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1時間', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2時間', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5時間', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21時間', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1日', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1日', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2日', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1日', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5日', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25日', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1ヶ月', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1ヶ月', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1ヶ月', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2ヶ月', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2ヶ月', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3ヶ月', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1ヶ月', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5ヶ月', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1年', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2年', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1年', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5年', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), '数秒後', 'prefix'); + assert.equal(moment(0).from(30000), '数秒前', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), '数秒前', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), '数秒後', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5日後', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), '今日 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), '今日 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), '今日 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), '明日 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), '今日 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), '昨日 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[来週]dddd LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[来週]dddd LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[来週]dddd LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[前週]dddd LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[前週]dddd LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[前週]dddd LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('jv'); + +test('parse', function (assert) { + var tests = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_Nopember Nop_Desember Des'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Minggu, Februari 14 2010, 3:25:50 sonten'], + ['ddd, hA', 'Min, 3sonten'], + ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Minggu Min Mg'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'sonten sonten'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LTS', '15.25.50'], + ['L', '14/02/2010'], + ['LL', '14 Februari 2010'], + ['LLL', '14 Februari 2010 pukul 15.25'], + ['LLLL', 'Minggu, 14 Februari 2010 pukul 15.25'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 pukul 15.25'], + ['llll', 'Min, 14 Feb 2010 pukul 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format month', function (assert) { + var expected = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_Nopember Nop_Desember Des'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Minggu Min Mg_Senen Sen Sn_Seloso Sel Sl_Rebu Reb Rb_Kemis Kem Km_Jemuwah Jem Jm_Septu Sep Sp'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'sawetawis detik', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'setunggal menit', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'setunggal menit', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 menit', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 menit', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'setunggal jam', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'setunggal jam', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 jam', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 jam', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 jam', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'sedinten', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'sedinten', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dinten', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'sedinten', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dinten', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dinten', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'sewulan', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'sewulan', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'sewulan', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 wulan', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 wulan', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 wulan', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'sewulan', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 wulan', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'setaun', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 taun', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'setaun', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 taun', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'wonten ing sawetawis detik', 'prefix'); + assert.equal(moment(0).from(30000), 'sawetawis detik ingkang kepengker', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'sawetawis detik ingkang kepengker', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'wonten ing sawetawis detik', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'wonten ing 5 dinten', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Dinten puniko pukul 12.00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Dinten puniko pukul 12.25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Dinten puniko pukul 13.00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Mbenjang pukul 12.00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Dinten puniko pukul 11.00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Kala wingi pukul 12.00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [kepengker pukul] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [kepengker pukul] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [kepengker pukul] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +// Monday is the first day of the week. +// The week that contains Jan 1st is the first week of the year. + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ka'); + +test('parse', function (assert) { + var i, + tests = 'იანვარი იან_თებერვალი თებ_მარტი მარ_აპრილი აპრ_მაისი მაი_ივნისი ივნ_ივლისი ივლ_აგვისტო აგვ_სექტემბერი სექ_ოქტომბერი ოქტ_ნოემბერი ნოე_დეკემბერი დეკ'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' უნდა იყოს თვე ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'კვირა, თებერვალი მე-14 2010, 3:25:50 pm'], + ['ddd, hA', 'კვი, 3PM'], + ['M Mo MM MMMM MMM', '2 მე-2 02 თებერვალი თებ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 მე-14 14'], + ['d do dddd ddd dd', '0 0 კვირა კვი კვ'], + ['DDD DDDo DDDD', '45 45-ე 045'], + ['w wo ww', '7 მე-7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['წლის DDDo დღე', 'წლის 45-ე დღე'], + ['LTS', '3:25:50 PM'], + ['L', '14/02/2010'], + ['LL', '14 თებერვალს 2010'], + ['LLL', '14 თებერვალს 2010 3:25 PM'], + ['LLLL', 'კვირა, 14 თებერვალს 2010 3:25 PM'], + ['l', '14/2/2010'], + ['ll', '14 თებ 2010'], + ['lll', '14 თებ 2010 3:25 PM'], + ['llll', 'კვი, 14 თებ 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ლი', '1-ლი'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), 'მე-2', 'მე-2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), 'მე-3', 'მე-3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), 'მე-4', 'მე-4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), 'მე-5', 'მე-5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), 'მე-6', 'მე-6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), 'მე-7', 'მე-7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), 'მე-8', 'მე-8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), 'მე-9', 'მე-9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), 'მე-10', 'მე-10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), 'მე-11', 'მე-11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), 'მე-12', 'მე-12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), 'მე-13', 'მე-13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), 'მე-14', 'მე-14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), 'მე-15', 'მე-15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), 'მე-16', 'მე-16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), 'მე-17', 'მე-17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), 'მე-18', 'მე-18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), 'მე-19', 'მე-19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), 'მე-20', 'მე-20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-ე', '21-ე'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-ე', '22-ე'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-ე', '23-ე'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-ე', '24-ე'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-ე', '25-ე'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-ე', '26-ე'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-ე', '27-ე'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-ე', '28-ე'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-ე', '29-ე'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-ე', '30-ე'); + + assert.equal(moment('2011 40', 'YYYY DDD').format('DDDo'), 'მე-40', 'მე-40'); + assert.equal(moment('2011 50', 'YYYY DDD').format('DDDo'), '50-ე', '50-ე'); + assert.equal(moment('2011 60', 'YYYY DDD').format('DDDo'), 'მე-60', 'მე-60'); + assert.equal(moment('2011 100', 'YYYY DDD').format('DDDo'), 'მე-100', 'მე-100'); + assert.equal(moment('2011 101', 'YYYY DDD').format('DDDo'), '101-ე', '101-ე'); +}); + +test('format month', function (assert) { + var i, + expected = 'იანვარი იან_თებერვალი თებ_მარტი მარ_აპრილი აპრ_მაისი მაი_ივნისი ივნ_ივლისი ივლ_აგვისტო აგვ_სექტემბერი სექ_ოქტომბერი ოქტ_ნოემბერი ნოე_დეკემბერი დეკ'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'კვირა კვი კვ_ორშაბათი ორშ ორ_სამშაბათი სამ სა_ოთხშაბათი ოთხ ოთ_ხუთშაბათი ხუთ ხუ_პარასკევი პარ პა_შაბათი შაბ შა'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'რამდენიმე წამი', '44 წამი = რამდენიმე წამი'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'წუთი', '45 წამი = წუთი'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'წუთი', '89 წამი = წუთი'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 წუთი', '90 წამი = 2 წუთი'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 წუთი', '44 წამი = 44 წუთი'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'საათი', '45 წამი = საათი'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'საათი', '89 წამი = საათი'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 საათი', '90 წამი = 2 საათი'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 საათი', '5 საათი = 5 საათი'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 საათი', '21 საათი = 21 საათი'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'დღე', '22 საათი = დღე'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'დღე', '35 საათი = დღე'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 დღე', '36 საათი = 2 დღე'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'დღე', '1 დღე = დღე'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 დღე', '5 დღე = 5 დღე'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 დღე', '25 დღე = 25 დღე'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'თვე', '26 დღე = თვე'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'თვე', '30 დღე = თვე'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'თვე', '45 დღე = თვე'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 თვე', '46 დღე = 2 თვე'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 თვე', '75 დღე = 2 თვე'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 თვე', '76 დღე = 3 თვე'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'თვე', '1 თვე = თვე'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 თვე', '5 თვე = 5 თვე'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'წელი', '345 დღე = წელი'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 წელი', '548 დღე = 2 წელი'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'წელი', '1 წელი = წელი'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 წელი', '5 წელი = 5 წელი'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'რამდენიმე წამში', 'ში სუფიქსი'); + assert.equal(moment(0).from(30000), 'რამდენიმე წამის უკან', 'უკან სუფიქსი'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'რამდენიმე წამის უკან', 'უნდა აჩვენოს როგორც წარსული'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'რამდენიმე წამში', 'რამდენიმე წამში'); + assert.equal(moment().add({d: 5}).fromNow(), '5 დღეში', '5 დღეში'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'დღეს 12:00 PM-ზე', 'დღეს ამავე დროს'); + assert.equal(moment(a).add({m: 25}).calendar(), 'დღეს 12:25 PM-ზე', 'ახლანდელ დროს დამატებული 25 წუთი'); + assert.equal(moment(a).add({h: 1}).calendar(), 'დღეს 1:00 PM-ზე', 'ახლანდელ დროს დამატებული 1 საათი'); + assert.equal(moment(a).add({d: 1}).calendar(), 'ხვალ 12:00 PM-ზე', 'ხვალ ამავე დროს'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'დღეს 11:00 AM-ზე', 'ახლანდელ დროს გამოკლებული 1 საათი'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'გუშინ 12:00 PM-ზე', 'გუშინ ამავე დროს'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), 'დღეს + ' + i + ' დღე ახლანდელ დროს'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), 'დღეს + ' + i + ' დღე დღის დასაწყისში'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), 'დღეს + ' + i + ' დღე დღის დასასრულს'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), 'დღეს - ' + i + ' დღე ახლანდელ დროს'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), 'დღეს - ' + i + ' დღე დღის დასაწყისში'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), 'დღეს - ' + i + ' დღე დღის დასასრულს'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 კვირის უკან'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '1 კვირაში'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 კვირის წინ'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '2 კვირაში'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ლი', 'დეკ 26 2011 უნდა იყოს კვირა 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ლი', 'იან 1 2012 უნდა იყოს კვირა 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 მე-2', 'იან 2 2012 უნდა იყოს კვირა 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 მე-2', 'იან 8 2012 უნდა იყოს კვირა 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 მე-3', 'იან 9 2012 უნდა იყოს კვირა 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('kk'); + +test('parse', function (assert) { + var tests = 'қаңтар қаң_ақпан ақп_наурыз нау_сәуір сәу_мамыр мам_маусым мау_шілде шіл_тамыз там_қыркүйек қыр_қазан қаз_қараша қар_желтоқсан жел'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'жексенбі, 14-ші ақпан 2010, 15:25:50'], + ['ddd, hA', 'жек, 3PM'], + ['M Mo MM MMMM MMM', '2 2-ші 02 ақпан ақп'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-ші 14'], + ['d do dddd ddd dd', '0 0-ші жексенбі жек жк'], + ['DDD DDDo DDDD', '45 45-ші 045'], + ['w wo ww', '7 7-ші 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[жылдың] DDDo [күні]', 'жылдың 45-ші күні'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 ақпан 2010'], + ['LLL', '14 ақпан 2010 15:25'], + ['LLLL', 'жексенбі, 14 ақпан 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 ақп 2010'], + ['lll', '14 ақп 2010 15:25'], + ['llll', 'жек, 14 ақп 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ші', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-ші', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-ші', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-ші', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-ші', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-шы', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-ші', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-ші', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-шы', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-шы', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-ші', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-ші', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-ші', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-ші', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-ші', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-шы', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-ші', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-ші', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-шы', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-шы', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-ші', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-ші', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-ші', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-ші', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-ші', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-шы', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-ші', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-ші', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-шы', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-шы', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-ші', '31st'); +}); + +test('format month', function (assert) { + var expected = 'қаңтар қаң_ақпан ақп_наурыз нау_сәуір сәу_мамыр мам_маусым мау_шілде шіл_тамыз там_қыркүйек қыр_қазан қаз_қараша қар_желтоқсан жел'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'жексенбі жек жк_дүйсенбі дүй дй_сейсенбі сей сй_сәрсенбі сәр ср_бейсенбі бей бй_жұма жұм жм_сенбі сен сн'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'бірнеше секунд', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'бір минут', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'бір минут', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минут', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минут', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'бір сағат', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'бір сағат', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 сағат', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 сағат', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 сағат', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'бір күн', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'бір күн', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 күн', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'бір күн', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 күн', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 күн', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'бір ай', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'бір ай', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'бір ай', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ай', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ай', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ай', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'бір ай', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ай', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'бір жыл', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 жыл', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'бір жыл', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 жыл', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'бірнеше секунд ішінде', 'prefix'); + assert.equal(moment(0).from(30000), 'бірнеше секунд бұрын', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'бірнеше секунд бұрын', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'бірнеше секунд ішінде', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 күн ішінде', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Бүгін сағат 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Бүгін сағат 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Бүгін сағат 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Ертең сағат 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Бүгін сағат 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Кеше сағат 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [сағат] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [сағат] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [сағат] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Өткен аптаның] dddd [сағат] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Өткен аптаның] dddd [сағат] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Өткен аптаның] dddd [сағат] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ші', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-ші', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-ші', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-ші', 'Jan 9 2012 should be week 3'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3-ші', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('km'); + +test('parse', function (assert) { + var tests = 'មករា មករា_កុម្ភៈ កុម្ភៈ_មីនា មីនា_មេសា មេសា_ឧសភា ឧសភា_មិថុនា មិថុនា_កក្កដា កក្កដា_សីហា សីហា_កញ្ញា កញ្ញា_តុលា តុលា_វិច្ឆិកា វិច្ឆិកា_ធ្នូ ធ្នូ'.split('_'), + i; + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'អាទិត្យ, កុម្ភៈ 14 2010, 3:25:50 pm'], + ['ddd, hA', 'អាទិត្យ, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 កុម្ភៈ កុម្ភៈ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 អាទិត្យ អាទិត្យ អាទិត្យ'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 កុម្ភៈ 2010'], + ['LLL', '14 កុម្ភៈ 2010 15:25'], + ['LLLL', 'អាទិត្យ, 14 កុម្ភៈ 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 កុម្ភៈ 2010'], + ['lll', '14 កុម្ភៈ 2010 15:25'], + ['llll', 'អាទិត្យ, 14 កុម្ភៈ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31st'); +}); + +test('format month', function (assert) { + var expected = 'មករា មករា_កុម្ភៈ កុម្ភៈ_មីនា មីនា_មេសា មេសា_ឧសភា ឧសភា_មិថុនា មិថុនា_កក្កដា កក្កដា_សីហា សីហា_កញ្ញា កញ្ញា_តុលា តុលា_វិច្ឆិកា វិច្ឆិកា_ធ្នូ ធ្នូ'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'អាទិត្យ អាទិត្យ អាទិត្យ_ច័ន្ទ ច័ន្ទ ច័ន្ទ_អង្គារ អង្គារ អង្គារ_ពុធ ពុធ ពុធ_ព្រហស្បតិ៍ ព្រហស្បតិ៍ ព្រហស្បតិ៍_សុក្រ សុក្រ សុក្រ_សៅរ៍ សៅរ៍ សៅរ៍'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ប៉ុន្មានវិនាទី', '44 seconds = ប៉ុន្មានវិនាទី'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'មួយនាទី', '45 seconds = មួយនាទី'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'មួយនាទី', '89 seconds = មួយនាទី'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 នាទី', '90 seconds = 2 នាទី'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 នាទី', '44 minutes = 44 នាទី'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'មួយម៉ោង', '45 minutes = មួយម៉ោង'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'មួយម៉ោង', '89 minutes = មួយម៉ោង'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ម៉ោង', '90 minutes = 2 ម៉ោង'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ម៉ោង', '5 hours = 5 ម៉ោង'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ម៉ោង', '21 hours = 21 ម៉ោង'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'មួយថ្ងៃ', '22 hours = មួយថ្ងៃ'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'មួយថ្ងៃ', '35 hours = មួយថ្ងៃ'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ថ្ងៃ', '36 hours = 2 ថ្ងៃ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'មួយថ្ងៃ', '1 day = មួយថ្ងៃ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ថ្ងៃ', '5 days = 5 ថ្ងៃ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ថ្ងៃ', '25 days = 25 ថ្ងៃ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'មួយខែ', '26 days = មួយខែ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'មួយខែ', '30 days = មួយខែ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'មួយខែ', '43 days = មួយខែ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ខែ', '46 days = 2 ខែ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ខែ', '75 days = 2 ខែ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ខែ', '76 days = 3 ខែ'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'មួយខែ', '1 month = មួយខែ'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ខែ', '5 months = 5 ខែ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'មួយឆ្នាំ', '345 days = មួយឆ្នាំ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ឆ្នាំ', '548 days = 2 ឆ្នាំ'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'មួយឆ្នាំ', '1 year = មួយឆ្នាំ'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ឆ្នាំ', '5 years = 5 ឆ្នាំ'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'ប៉ុន្មានវិនាទីទៀត', 'prefix'); + assert.equal(moment(0).from(30000), 'ប៉ុន្មានវិនាទីមុន', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'ប៉ុន្មានវិនាទីមុន', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({ + s: 30 + }).fromNow(), 'ប៉ុន្មានវិនាទីទៀត', 'in a few seconds'); + assert.equal(moment().add({ + d: 5 + }).fromNow(), '5 ថ្ងៃទៀត', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'ថ្ងៃនេះ ម៉ោង 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'ថ្ងៃនេះ ម៉ោង 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'ថ្ងៃនេះ ម៉ោង 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'ស្អែក ម៉ោង 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'ថ្ងៃនេះ ម៉ោង 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ម្សិលមិញ ម៉ោង 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({ + d: i + }); + assert.equal(m.calendar(), m.format('dddd [ម៉ោង] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [ម៉ោង] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [ម៉ោង] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({ + d: i + }); + assert.equal(m.calendar(), m.format('dddd [សប្តាហ៍មុន] [ម៉ោង] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [សប្តាហ៍មុន] [ម៉ោង] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [សប្តាហ៍មុន] [ម៉ោង] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({ + w: 1 + }), + weeksFromNow = moment().add({ + w: 1 + }); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({ + w: 2 + }); + weeksFromNow = moment().add({ + w: 2 + }); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('kn'); + +test('parse', function (assert) { + var tests = 'ಜನವರಿ ಜನ_ಫೆಬ್ರವರಿ ಫೆಬ್ರ_ಮಾರ್ಚ್ ಮಾರ್ಚ್_ಏಪ್ರಿಲ್ ಏಪ್ರಿಲ್_ಮೇ ಮೇ_ಜೂನ್ ಜೂನ್_ಜುಲೈ ಜುಲೈ_ಆಗಸ್ಟ್ ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್ ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬರ್ ಅಕ್ಟೋಬ_ನವೆಂಬರ್ ನವೆಂಬ_ಡಿಸೆಂಬರ್ ಡಿಸೆಂಬ'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss', 'ಭಾನುವಾರ, ೧೪ನೇ ಫೆಬ್ರವರಿ ೨೦೧೦, ಮಧ್ಯಾಹ್ನ ೩:೨೫:೫೦'], + ['ddd, a h ಗಂಟೆ', 'ಭಾನು, ಮಧ್ಯಾಹ್ನ ೩ ಗಂಟೆ'], + ['M Mo MM MMMM MMM', '೨ ೨ನೇ ೦೨ ಫೆಬ್ರವರಿ ಫೆಬ್ರ'], + ['YYYY YY', '೨೦೧೦ ೧೦'], + ['D Do DD', '೧೪ ೧೪ನೇ ೧೪'], + ['d do dddd ddd dd', '೦ ೦ನೇ ಭಾನುವಾರ ಭಾನು ಭಾ'], + ['DDD DDDo DDDD', '೪೫ ೪೫ನೇ ೦೪೫'], + ['w wo ww', '೮ ೮ನೇ ೦೮'], + ['h hh', '೩ ೦೩'], + ['H HH', '೧೫ ೧೫'], + ['m mm', '೨೫ ೨೫'], + ['s ss', '೫೦ ೫೦'], + ['a A', 'ಮಧ್ಯಾಹ್ನ ಮಧ್ಯಾಹ್ನ'], + ['LTS', 'ಮಧ್ಯಾಹ್ನ ೩:೨೫:೫೦'], + ['L', '೧೪/೦೨/೨೦೧೦'], + ['LL', '೧೪ ಫೆಬ್ರವರಿ ೨೦೧೦'], + ['LLL', '೧೪ ಫೆಬ್ರವರಿ ೨೦೧೦, ಮಧ್ಯಾಹ್ನ ೩:೨೫'], + ['LLLL', 'ಭಾನುವಾರ, ೧೪ ಫೆಬ್ರವರಿ ೨೦೧೦, ಮಧ್ಯಾಹ್ನ ೩:೨೫'], + ['l', '೧೪/೨/೨೦೧೦'], + ['ll', '೧೪ ಫೆಬ್ರ ೨೦೧೦'], + ['lll', '೧೪ ಫೆಬ್ರ ೨೦೧೦, ಮಧ್ಯಾಹ್ನ ೩:೨೫'], + ['llll', 'ಭಾನು, ೧೪ ಫೆಬ್ರ ೨೦೧೦, ಮಧ್ಯಾಹ್ನ ೩:೨೫'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '೧ನೇ', '೧ನೇ'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '೨ನೇ', '೨ನೇ'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '೩ನೇ', '೩ನೇ'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '೪ನೇ', '೪ನೇ'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '೫ನೇ', '೫ನೇ'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '೬ನೇ', '೬ನೇ'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '೭ನೇ', '೭ನೇ'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '೮ನೇ', '೮ನೇ'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '೯ನೇ', '೯ನೇ'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '೧೦ನೇ', '೧೦ನೇ'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '೧೧ನೇ', '೧೧ನೇ'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '೧೨ನೇ', '೧೨ನೇ'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '೧೩ನೇ', '೧೩ನೇ'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '೧೪ನೇ', '೧೪ನೇ'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '೧೫ನೇ', '೧೫ನೇ'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '೧೬ನೇ', '೧೬ನೇ'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '೧೭ನೇ', '೧೭ನೇ'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '೧೮ನೇ', '೧೮ನೇ'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '೧೯ನೇ', '೧೯ನೇ'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '೨೦ನೇ', '೨೦ನೇ'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '೨೧ನೇ', '೨೧ನೇ'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '೨೨ನೇ', '೨೨ನೇ'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '೨೩ನೇ', '೨೩ನೇ'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '೨೪ನೇ', '೨೪ನೇ'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '೨೫ನೇ', '೨೫ನೇ'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '೨೬ನೇ', '೨೬ನೇ'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '೨೭ನೇ', '೨೭ನೇ'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '೨೮ನೇ', '೨೮ನೇ'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '೨೯ನೇ', '೨೯ನೇ'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '೩೦ನೇ', '೩೦ನೇ'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '೩೧ನೇ', '೩೧ನೇ'); +}); + +test('format month', function (assert) { + var expected = 'ಜನವರಿ ಜನ_ಫೆಬ್ರವರಿ ಫೆಬ್ರ_ಮಾರ್ಚ್ ಮಾರ್ಚ್_ಏಪ್ರಿಲ್ ಏಪ್ರಿಲ್_ಮೇ ಮೇ_ಜೂನ್ ಜೂನ್_ಜುಲೈ ಜುಲೈ_ಆಗಸ್ಟ್ ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್ ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬರ್ ಅಕ್ಟೋಬ_ನವೆಂಬರ್ ನವೆಂಬ_ಡಿಸೆಂಬರ್ ಡಿಸೆಂಬ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'ಭಾನುವಾರ ಭಾನು ಭಾ_ಸೋಮವಾರ ಸೋಮ ಸೋ_ಮಂಗಳವಾರ ಮಂಗಳ ಮಂ_ಬುಧವಾರ ಬುಧ ಬು_ಗುರುವಾರ ಗುರು ಗು_ಶುಕ್ರವಾರ ಶುಕ್ರ ಶು_ಶನಿವಾರ ಶನಿ ಶ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ಕೆಲವು ಕ್ಷಣಗಳು', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ಒಂದು ನಿಮಿಷ', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ಒಂದು ನಿಮಿಷ', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '೨ ನಿಮಿಷ', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '೪೪ ನಿಮಿಷ', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ಒಂದು ಗಂಟೆ', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ಒಂದು ಗಂಟೆ', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '೨ ಗಂಟೆ', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '೫ ಗಂಟೆ', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '೨೧ ಗಂಟೆ', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ಒಂದು ದಿನ', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ಒಂದು ದಿನ', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '೨ ದಿನ', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ಒಂದು ದಿನ', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '೫ ದಿನ', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '೨೫ ದಿನ', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ಒಂದು ತಿಂಗಳು', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ಒಂದು ತಿಂಗಳು', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ಒಂದು ತಿಂಗಳು', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '೨ ತಿಂಗಳು', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '೨ ತಿಂಗಳು', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '೩ ತಿಂಗಳು', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ಒಂದು ತಿಂಗಳು', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '೫ ತಿಂಗಳು', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ಒಂದು ವರ್ಷ', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '೨ ವರ್ಷ', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ಒಂದು ವರ್ಷ', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '೫ ವರ್ಷ', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'ಕೆಲವು ಕ್ಷಣಗಳು ನಂತರ', 'prefix'); + assert.equal(moment(0).from(30000), 'ಕೆಲವು ಕ್ಷಣಗಳು ಹಿಂದೆ', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'ಕೆಲವು ಕ್ಷಣಗಳು ಹಿಂದೆ', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'ಕೆಲವು ಕ್ಷಣಗಳು ನಂತರ', 'ಕೆಲವು ಕ್ಷಣಗಳು ನಂತರ'); + assert.equal(moment().add({d: 5}).fromNow(), '೫ ದಿನ ನಂತರ', '೫ ದಿನ ನಂತರ'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'ಇಂದು ಮಧ್ಯಾಹ್ನ ೧೨:೦೦', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'ಇಂದು ಮಧ್ಯಾಹ್ನ ೧೨:೨೫', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 3}).calendar(), 'ಇಂದು ಮಧ್ಯಾಹ್ನ ೩:೦೦', 'Now plus 3 hours'); + assert.equal(moment(a).add({d: 1}).calendar(), 'ನಾಳೆ ಮಧ್ಯಾಹ್ನ ೧೨:೦೦', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'ಇಂದು ಮಧ್ಯಾಹ್ನ ೧೧:೦೦', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ನಿನ್ನೆ ಮಧ್ಯಾಹ್ನ ೧೨:೦೦', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[ಕೊನೆಯ] dddd[,] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[ಕೊನೆಯ] dddd[,] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[ಕೊನೆಯ] dddd[,] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'ರಾತ್ರಿ', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'ಬೆಳಿಗ್ಗೆ', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'ಮಧ್ಯಾಹ್ನ', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'ಸಂಜೆ', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'ಸಂಜೆ', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'ರಾತ್ರಿ', 'night'); + + assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'ರಾತ್ರಿ', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'ಬೆಳಿಗ್ಗೆ', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'ಮಧ್ಯಾಹ್ನ', ' during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'ಸಂಜೆ', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'ಸಂಜೆ', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'ರಾತ್ರಿ', 'night'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '೧ ೦೧ ೧ನೇ', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '೧ ೦೧ ೧ನೇ', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '೨ ೦೨ ೨ನೇ', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '೨ ೦೨ ೨ನೇ', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '೩ ೦೩ ೩ನೇ', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ko'); + +test('parse', function (assert) { + var tests = '1월 1월_2월 2월_3월 3월_4월 4월_5월 5월_6월 6월_7월 7월_8월 8월_9월 9월_10월 10월_11월 11월_12월 12월'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('parse meridiem', function (assert) { + var elements = [{ + expression : '1981년 9월 8일 오후 2시 30분', + inputFormat : 'YYYY[년] M[월] D[일] A h[시] m[분]', + outputFormat : 'A', + expected : '오후' + }, { + expression : '1981년 9월 8일 오전 2시 30분', + inputFormat : 'YYYY[년] M[월] D[일] A h[시] m[분]', + outputFormat : 'A h시', + expected : '오전 2시' + }, { + expression : '14시 30분', + inputFormat : 'H[시] m[분]', + outputFormat : 'A', + expected : '오후' + }, { + expression : '오후 4시', + inputFormat : 'A h[시]', + outputFormat : 'H', + expected : '16' + }], i, l, it, actual; + + for (i = 0, l = elements.length; i < l; ++i) { + it = elements[i]; + actual = moment(it.expression, it.inputFormat).format(it.outputFormat); + + assert.equal( + actual, + it.expected, + '\'' + it.outputFormat + '\' of \'' + it.expression + '\' must be \'' + it.expected + '\' but was \'' + actual + '\'.' + ); + } +}); + +test('format', function (assert) { + var a = [ + ['YYYY년 MMMM Do dddd a h:mm:ss', '2010년 2월 14일 일요일 오후 3:25:50'], + ['ddd A h', '일 오후 3'], + ['M Mo MM MMMM MMM', '2 2일 02 2월 2월'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14일 14'], + ['d do dddd ddd dd', '0 0일 일요일 일 일'], + ['DDD DDDo DDDD', '45 45일 045'], + ['w wo ww', '8 8일 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', '오후 오후'], + ['일년 중 DDDo째 되는 날', '일년 중 45일째 되는 날'], + ['LTS', '오후 3:25:50'], + ['L', '2010.02.14'], + ['LL', '2010년 2월 14일'], + ['LLL', '2010년 2월 14일 오후 3:25'], + ['LLLL', '2010년 2월 14일 일요일 오후 3:25'], + ['l', '2010.02.14'], + ['ll', '2010년 2월 14일'], + ['lll', '2010년 2월 14일 오후 3:25'], + ['llll', '2010년 2월 14일 일요일 오후 3:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1일', '1일'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2일', '2일'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3일', '3일'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4일', '4일'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5일', '5일'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6일', '6일'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7일', '7일'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8일', '8일'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9일', '9일'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10일', '10일'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11일', '11일'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12일', '12일'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13일', '13일'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14일', '14일'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15일', '15일'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16일', '16일'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17일', '17일'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18일', '18일'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19일', '19일'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20일', '20일'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21일', '21일'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22일', '22일'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23일', '23일'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24일', '24일'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25일', '25일'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26일', '26일'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27일', '27일'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28일', '28일'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29일', '29일'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30일', '30일'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31일', '31일'); +}); + +test('format month', function (assert) { + var expected = '1월 1월_2월 2월_3월 3월_4월 4월_5월 5월_6월 6월_7월 7월_8월 8월_9월 9월_10월 10월_11월 11월_12월 12월'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = '일요일 일 일_월요일 월 월_화요일 화 화_수요일 수 수_목요일 목 목_금요일 금 금_토요일 토 토'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '몇 초', '44초 = 몇 초'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1분', '45초 = 1분'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1분', '89초 = 1분'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2분', '90초 = 2분'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44분', '44분 = 44분'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '한 시간', '45분 = 한 시간'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '한 시간', '89분 = 한 시간'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2시간', '90분 = 2시간'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5시간', '5시간 = 5시간'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21시간', '21시간 = 21시간'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '하루', '22시간 = 하루'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '하루', '35시간 = 하루'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2일', '36시간 = 2일'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '하루', '하루 = 하루'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5일', '5일 = 5일'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25일', '25일 = 25일'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '한 달', '26일 = 한 달'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '한 달', '30일 = 한 달'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '한 달', '45일 = 한 달'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2달', '46일 = 2달'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2달', '75일 = 2달'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3달', '76일 = 3달'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '한 달', '1달 = 한 달'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5달', '5달 = 5달'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '일 년', '345일 = 일 년'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2년', '548일 = 2년'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '일 년', '일 년 = 일 년'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5년', '5년 = 5년'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), '몇 초 후', 'prefix'); + assert.equal(moment(0).from(30000), '몇 초 전', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), '몇 초 전', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), '몇 초 후', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5일 후', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), '오늘 오후 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), '오늘 오후 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), '오늘 오후 1:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), '내일 오후 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), '오늘 오전 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), '어제 오후 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('지난주 dddd LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('지난주 dddd LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('지난주 dddd LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1일', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1일', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2일', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2일', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3일', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ky'); + +test('parse', function (assert) { + var tests = 'январь янв_февраль фев_март март_апрель апр_май май_июнь июнь_июль июль_август авг_сентябрь сен_октябрь окт_ноябрь ноя_декабрь дек'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'Жекшемби, 14-чү февраль 2010, 15:25:50'], + ['ddd, hA', 'Жек, 3PM'], + ['M Mo MM MMMM MMM', '2 2-чи 02 февраль фев'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-чү 14'], + ['d do dddd ddd dd', '0 0-чү Жекшемби Жек Жк'], + ['DDD DDDo DDDD', '45 45-чи 045'], + ['w wo ww', '7 7-чи 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[жылдын] DDDo [күнү]', 'жылдын 45-чи күнү'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 февраль 2010'], + ['LLL', '14 февраль 2010 15:25'], + ['LLLL', 'Жекшемби, 14 февраль 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 фев 2010'], + ['lll', '14 фев 2010 15:25'], + ['llll', 'Жек, 14 фев 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-чи', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-чи', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-чү', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-чү', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-чи', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-чы', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-чи', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-чи', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-чу', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-чу', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-чи', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-чи', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-чү', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-чү', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-чи', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-чы', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-чи', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-чи', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-чу', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-чы', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-чи', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-чи', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-чү', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-чү', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-чи', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-чы', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-чи', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-чи', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-чу', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-чу', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-чи', '31st'); +}); + +test('format month', function (assert) { + var expected = 'январь янв_февраль фев_март март_апрель апр_май май_июнь июнь_июль июль_август авг_сентябрь сен_октябрь окт_ноябрь ноя_декабрь дек'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Жекшемби Жек Жк_Дүйшөмбү Дүй Дй_Шейшемби Шей Шй_Шаршемби Шар Шр_Бейшемби Бей Бй_Жума Жум Жм_Ишемби Ише Иш'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'бирнече секунд', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'бир мүнөт', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'бир мүнөт', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 мүнөт', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 мүнөт', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'бир саат', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'бир саат', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 саат', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 саат', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 саат', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'бир күн', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'бир күн', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 күн', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'бир күн', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 күн', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 күн', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'бир ай', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'бир ай', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'бир ай', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ай', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ай', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ай', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'бир ай', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ай', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'бир жыл', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 жыл', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'бир жыл', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 жыл', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'бирнече секунд ичинде', 'prefix'); + assert.equal(moment(0).from(30000), 'бирнече секунд мурун', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'бирнече секунд мурун', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'бирнече секунд ичинде', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 күн ичинде', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Бүгүн саат 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Бүгүн саат 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Бүгүн саат 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Эртең саат 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Бүгүн саат 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Кече саат 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [саат] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [саат] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [саат] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Өткен аптанын] dddd [күнү] [саат] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Өткен аптанын] dddd [күнү] [саат] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Өткен аптанын] dddd [күнү] [саат] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-чи', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-чи', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-чи', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-чү', 'Jan 9 2012 should be week 3'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3-чү', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('lb'); + +test('parse', function (assert) { + var tests = 'Januar Jan._Februar Febr._Mäerz Mrz._Abrëll Abr._Mee Mee_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i; + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'Sonndeg, 14. Februar 2010, 15:25:50'], + ['ddd, HH:mm', 'So., 15:25'], + ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. Sonndeg So. So'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50 Auer'], + ['L', '14.02.2010'], + ['LL', '14. Februar 2010'], + ['LLL', '14. Februar 2010 15:25 Auer'], + ['LLLL', 'Sonndeg, 14. Februar 2010 15:25 Auer'], + ['l', '14.2.2010'], + ['ll', '14. Febr. 2010'], + ['lll', '14. Febr. 2010 15:25 Auer'], + ['llll', 'So., 14. Febr. 2010 15:25 Auer'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format month', function (assert) { + var expected = 'Januar Jan._Februar Febr._Mäerz Mrz._Abrëll Abr._Mee Mee_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Sonndeg So. So_Méindeg Mé. Mé_Dënschdeg Dë. Dë_Mëttwoch Më. Më_Donneschdeg Do. Do_Freideg Fr. Fr_Samschdeg Sa. Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'e puer Sekonnen', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'eng Minutt', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'eng Minutt', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 Minutten', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 Minutten', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'eng Stonn', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'eng Stonn', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 Stonnen', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 Stonnen', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 Stonnen', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'een Dag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'een Dag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 Deeg', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'een Dag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 Deeg', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 Deeg', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ee Mount', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ee Mount', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ee Mount', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 Méint', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 Méint', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 Méint', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ee Mount', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 Méint', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ee Joer', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 Joer', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ee Joer', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 Joer', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'an e puer Sekonnen', 'prefix'); + assert.equal(moment(0).from(30000), 'virun e puer Sekonnen', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'an e puer Sekonnen', 'in a few seconds'); + assert.equal(moment().add({d: 1}).fromNow(), 'an engem Dag', 'in one day'); + assert.equal(moment().add({d: 2}).fromNow(), 'an 2 Deeg', 'in 2 days'); + assert.equal(moment().add({d: 3}).fromNow(), 'an 3 Deeg', 'in 3 days'); + assert.equal(moment().add({d: 4}).fromNow(), 'a 4 Deeg', 'in 4 days'); + assert.equal(moment().add({d: 5}).fromNow(), 'a 5 Deeg', 'in 5 days'); + assert.equal(moment().add({d: 6}).fromNow(), 'a 6 Deeg', 'in 6 days'); + assert.equal(moment().add({d: 7}).fromNow(), 'a 7 Deeg', 'in 7 days'); + assert.equal(moment().add({d: 8}).fromNow(), 'an 8 Deeg', 'in 8 days'); + assert.equal(moment().add({d: 9}).fromNow(), 'an 9 Deeg', 'in 9 days'); + assert.equal(moment().add({d: 10}).fromNow(), 'an 10 Deeg', 'in 10 days'); + assert.equal(moment().add({y: 100}).fromNow(), 'an 100 Joer', 'in 100 years'); + assert.equal(moment().add({y: 400}).fromNow(), 'a 400 Joer', 'in 400 years'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Haut um 12:00 Auer', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Haut um 12:25 Auer', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Haut um 13:00 Auer', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Muer um 12:00 Auer', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Haut um 11:00 Auer', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Gëschter um 12:00 Auer', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [um] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [um] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [um] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m, weekday, datestring; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + + // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) + weekday = parseInt(m.format('d'), 10); + datestring = (weekday === 2 || weekday === 4 ? '[Leschten] dddd [um] LT' : '[Leschte] dddd [um] LT'); + + assert.equal(m.calendar(), m.format(datestring), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(datestring), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(datestring), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1.', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2.', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('lo'); + +test('parse', function (assert) { + var tests = 'ມັງກອນ ມັງກອນ_ກຸມພາ ກຸມພາ_ມີນາ ມີນາ_ເມສາ ເມສາ_ພຶດສະພາ ພຶດສະພາ_ມິຖຸນາ ມິຖຸນາ_ກໍລະກົດ ກໍລະກົດ_ສິງຫາ ສິງຫາ_ກັນຍາ ກັນຍາ_ຕຸລາ ຕຸລາ_ພະຈິກ ພະຈິກ_ທັນວາ ທັນວາ'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'ອາທິດ, ກຸມພາ ທີ່14 2010, 3:25:50 ຕອນແລງ'], + ['ddd, hA', 'ທິດ, 3ຕອນແລງ'], + ['M Mo MM MMMM MMM', '2 ທີ່2 02 ກຸມພາ ກຸມພາ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 ທີ່14 14'], + ['d do dddd ddd dd', '0 ທີ່0 ອາທິດ ທິດ ທ'], + ['DDD DDDo DDDD', '45 ທີ່45 045'], + ['w wo ww', '8 ທີ່8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'ຕອນແລງ ຕອນແລງ'], + ['[ວັນ]DDDo [ຂອງປີ]', 'ວັນທີ່45 ຂອງປີ'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 ກຸມພາ 2010'], + ['LLL', '14 ກຸມພາ 2010 15:25'], + ['LLLL', 'ວັນອາທິດ 14 ກຸມພາ 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 ກຸມພາ 2010'], + ['lll', '14 ກຸມພາ 2010 15:25'], + ['llll', 'ວັນທິດ 14 ກຸມພາ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), 'ທີ່1', 'ທີ່1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), 'ທີ່2', 'ທີ່2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), 'ທີ່3', 'ທີ່3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), 'ທີ່4', 'ທີ່4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), 'ທີ່5', 'ທີ່5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), 'ທີ່6', 'ທີ່6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), 'ທີ່7', 'ທີ່7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), 'ທີ່8', 'ທີ່8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), 'ທີ່9', 'ທີ່9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), 'ທີ່10', 'ທີ່10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), 'ທີ່11', 'ທີ່11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), 'ທີ່12', 'ທີ່12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), 'ທີ່13', 'ທີ່13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), 'ທີ່14', 'ທີ່14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), 'ທີ່15', 'ທີ່15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), 'ທີ່16', 'ທີ່16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), 'ທີ່17', 'ທີ່17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), 'ທີ່18', 'ທີ່18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), 'ທີ່19', 'ທີ່19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), 'ທີ່20', 'ທີ່20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), 'ທີ່21', 'ທີ່21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), 'ທີ່22', 'ທີ່22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), 'ທີ່23', 'ທີ່23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), 'ທີ່24', 'ທີ່24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), 'ທີ່25', 'ທີ່25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), 'ທີ່26', 'ທີ່26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), 'ທີ່27', 'ທີ່27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), 'ທີ່28', 'ທີ່28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), 'ທີ່29', 'ທີ່29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), 'ທີ່30', 'ທີ່30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), 'ທີ່31', 'ທີ່31'); +}); + +test('format month', function (assert) { + var expected = 'ມັງກອນ ມັງກອນ_ກຸມພາ ກຸມພາ_ມີນາ ມີນາ_ເມສາ ເມສາ_ພຶດສະພາ ພຶດສະພາ_ມິຖຸນາ ມິຖຸນາ_ກໍລະກົດ ກໍລະກົດ_ສິງຫາ ສິງຫາ_ກັນຍາ ກັນຍາ_ຕຸລາ ຕຸລາ_ພະຈິກ ພະຈິກ_ທັນວາ ທັນວາ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'ອາທິດ ທິດ ທ_ຈັນ ຈັນ ຈ_ອັງຄານ ອັງຄານ ອຄ_ພຸດ ພຸດ ພ_ພະຫັດ ພະຫັດ ພຫ_ສຸກ ສຸກ ສກ_ເສົາ ເສົາ ສ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ບໍ່ເທົ່າໃດວິນາທີ', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1 ນາທີ', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1 ນາທີ', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 ນາທີ', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 ນາທີ', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1 ຊົ່ວໂມງ', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1 ຊົ່ວໂມງ', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ຊົ່ວໂມງ', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ຊົ່ວໂມງ', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ຊົ່ວໂມງ', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 ມື້', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 ມື້', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ມື້', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 ມື້', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ມື້', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ມື້', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1 ເດືອນ', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1 ເດືອນ', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1 ເດືອນ', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ເດືອນ', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ເດືອນ', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ເດືອນ', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1 ເດືອນ', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ເດືອນ', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1 ປີ', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ປີ', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1 ປີ', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ປີ', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'ອີກ ບໍ່ເທົ່າໃດວິນາທີ', 'prefix'); + assert.equal(moment(0).from(30000), 'ບໍ່ເທົ່າໃດວິນາທີຜ່ານມາ', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'ບໍ່ເທົ່າໃດວິນາທີຜ່ານມາ', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'ອີກ ບໍ່ເທົ່າໃດວິນາທີ', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'ອີກ 5 ມື້', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'ມື້ນີ້ເວລາ 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'ມື້ນີ້ເວລາ 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'ມື້ນີ້ເວລາ 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'ມື້ອື່ນເວລາ 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'ມື້ນີ້ເວລາ 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ມື້ວານນີ້ເວລາ 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[ວັນ]dddd[ໜ້າເວລາ] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[ວັນ]dddd[ໜ້າເວລາ] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[ວັນ]dddd[ໜ້າເວລາ] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 ທີ່1', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 ທີ່1', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 ທີ່2', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 ທີ່2', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 ທີ່3', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('lt'); + +test('parse', function (assert) { + var tests = 'sausis sau_vasaris vas_kovas kov_balandis bal_gegužė geg_birželis bir_liepa lie_rugpjūtis rgp_rugsėjis rgs_spalis spa_lapkritis lap_gruodis grd'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'sekmadienis, 14-oji vasario 2010, 3:25:50 pm'], + ['ddd, hA', 'Sek, 3PM'], + ['M Mo MM MMMM MMM', '2 2-oji 02 vasaris vas'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-oji 14'], + ['d do dddd ddd dd', '0 0-oji sekmadienis Sek S'], + ['DDD DDDo DDDD', '45 45-oji 045'], + ['w wo ww', '6 6-oji 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['DDDo [metų diena]', '45-oji metų diena'], + ['LTS', '15:25:50'], + ['L', '2010-02-14'], + ['LL', '2010 m. vasario 14 d.'], + ['LLL', '2010 m. vasario 14 d., 15:25 val.'], + ['LLLL', '2010 m. vasario 14 d., sekmadienis, 15:25 val.'], + ['l', '2010-02-14'], + ['ll', '2010 m. vasario 14 d.'], + ['lll', '2010 m. vasario 14 d., 15:25 val.'], + ['llll', '2010 m. vasario 14 d., Sek, 15:25 val.'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-oji', '1-oji'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-oji', '2-oji'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-oji', '3-oji'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-oji', '4-oji'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-oji', '5-oji'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-oji', '6-oji'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-oji', '7-oji'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-oji', '8-oji'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-oji', '9-oji'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-oji', '10-oji'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-oji', '11-oji'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-oji', '12-oji'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-oji', '13-oji'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-oji', '14-oji'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-oji', '15-oji'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-oji', '16-oji'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-oji', '17-oji'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-oji', '18-oji'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-oji', '19-oji'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-oji', '20-oji'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-oji', '21-oji'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-oji', '22-oji'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-oji', '23-oji'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-oji', '24-oji'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-oji', '25-oji'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-oji', '26-oji'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-oji', '27-oji'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-oji', '28-oji'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-oji', '29-oji'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-oji', '30-oji'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-oji', '31-oji'); +}); + +test('format month', function (assert) { + var expected = 'sausis sau_vasaris vas_kovas kov_balandis bal_gegužė geg_birželis bir_liepa lie_rugpjūtis rgp_rugsėjis rgs_spalis spa_lapkritis lap_gruodis grd'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'sekmadienis Sek S_pirmadienis Pir P_antradienis Ant A_trečiadienis Tre T_ketvirtadienis Ket K_penktadienis Pen Pn_šeštadienis Šeš Š'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('format week on US calendar', function (assert) { + // Tests, whether the weekday names are correct, even if the week does not start on Monday + moment.updateLocale('lt', {week: {dow: 0, doy: 6}}); + var expected = 'sekmadienis Sek S_pirmadienis Pir P_antradienis Ant A_trečiadienis Tre T_ketvirtadienis Ket K_penktadienis Pen Pn_šeštadienis Šeš Š'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + moment.updateLocale('lt', null); +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'kelios sekundės', '44 seconds = seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minutė', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minutė', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutės', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 10}), true), '10 minučių', '10 minutes = 10 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 11}), true), '11 minučių', '11 minutes = 11 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 19}), true), '19 minučių', '19 minutes = 19 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 20}), true), '20 minučių', '20 minutes = 20 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutės', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'valanda', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'valanda', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 valandos', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 valandos', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 10}), true), '10 valandų', '10 hours = 10 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 valandos', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'diena', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'diena', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dienos', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'diena', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dienos', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 10}), true), '10 dienų', '10 days = 10 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dienos', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mėnuo', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mėnuo', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mėnuo', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mėnesiai', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mėnesiai', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mėnesiai', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mėnuo', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mėnesiai', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 10}), true), '10 mėnesių', '10 months = 10 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'metai', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 metai', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'metai', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 metai', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'po kelių sekundžių', 'prefix'); + assert.equal(moment(0).from(30000), 'prieš kelias sekundes', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'prieš kelias sekundes', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'po kelių sekundžių', 'in seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'po 5 dienų', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Šiandien 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Šiandien 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Šiandien 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Rytoj 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Šiandien 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Vakar 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52-oji', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1-oji', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1-oji', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2-oji', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2-oji', 'Jan 15 2012 should be week 2'); +}); + +test('month cases', function (assert) { + assert.equal(moment([2015, 4, 1]).format('LL'), '2015 m. gegužės 1 d.', 'uses format instead of standalone form'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('lv'); + +test('parse', function (assert) { + var tests = 'janvāris jan_februāris feb_marts mar_aprīlis apr_maijs mai_jūnijs jūn_jūlijs jūl_augusts aug_septembris sep_oktobris okt_novembris nov_decembris dec'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'svētdiena, 14. februāris 2010, 3:25:50 pm'], + ['ddd, hA', 'Sv, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februāris feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. svētdiena Sv Sv'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010.'], + ['LL', '2010. gada 14. februāris'], + ['LLL', '2010. gada 14. februāris, 15:25'], + ['LLLL', '2010. gada 14. februāris, svētdiena, 15:25'], + ['l', '14.2.2010.'], + ['ll', '2010. gada 14. feb'], + ['lll', '2010. gada 14. feb, 15:25'], + ['llll', '2010. gada 14. feb, Sv, 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'janvāris jan_februāris feb_marts mar_aprīlis apr_maijs mai_jūnijs jūn_jūlijs jūl_augusts aug_septembris sep_oktobris okt_novembris nov_decembris dec'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'svētdiena Sv Sv_pirmdiena P P_otrdiena O O_trešdiena T T_ceturtdiena C C_piektdiena Pk Pk_sestdiena S S'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +// Includes testing the cases of withoutSuffix = true and false. +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'dažas sekundes', '44 seconds = seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), false), 'pirms dažām sekundēm', '44 seconds with suffix = seconds ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minūte', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), false), 'pirms minūtes', '45 seconds with suffix = a minute ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minūte', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: -89}), false), 'pēc minūtes', '89 seconds with suffix/prefix = in a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minūtes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), false), 'pirms 2 minūtēm', '90 seconds with suffix = 2 minutes ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minūtes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), false), 'pirms 44 minūtēm', '44 minutes with suffix = 44 minutes ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'stunda', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), false), 'pirms stundas', '45 minutes with suffix = an hour ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'stunda', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 stundas', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: -90}), false), 'pēc 2 stundām', '90 minutes with suffix = in 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 stundas', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), false), 'pirms 5 stundām', '5 hours with suffix = 5 hours ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 stunda', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), false), 'pirms 21 stundas', '21 hours with suffix = 21 hours ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'diena', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), false), 'pirms dienas', '22 hours with suffix = a day ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'diena', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dienas', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), false), 'pirms 2 dienām', '36 hours with suffix = 2 days ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'diena', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dienas', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), false), 'pirms 5 dienām', '5 days with suffix = 5 days ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dienas', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), false), 'pirms 25 dienām', '25 days with suffix = 25 days ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mēnesis', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), false), 'pirms mēneša', '26 days with suffix = a month ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mēnesis', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mēnesis', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mēneši', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), false), 'pirms 2 mēnešiem', '46 days with suffix = 2 months ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mēneši', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mēneši', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), false), 'pirms 3 mēnešiem', '76 days with suffix = 3 months ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mēnesis', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mēneši', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), false), 'pirms 5 mēnešiem', '5 months with suffix = 5 months ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'gads', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), false), 'pirms gada', '345 days with suffix = a year ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 gadi', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), false), 'pirms 2 gadiem', '548 days with suffix = 2 years ago'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'gads', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 gadi', '5 years = 5 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), false), 'pirms 5 gadiem', '5 years with suffix = 5 years ago'); + + // test that numbers ending with 1 are singular except for when they end with 11 in which case they are plural + assert.equal(start.from(moment([2007, 1, 28]).add({y: 11}), true), '11 gadi', '11 years = 11 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 21}), true), '21 gads', '21 year = 21 year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 211}), true), '211 gadi', '211 years = 211 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 221}), false), 'pirms 221 gada', '221 year with suffix = 221 years ago'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'pēc dažām sekundēm', 'prefix'); + assert.equal(moment(0).from(30000), 'pirms dažām sekundēm', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'pirms dažām sekundēm', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'pēc dažām sekundēm', 'in seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'pēc 5 dienām', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Šodien pulksten 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Šodien pulksten 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Šodien pulksten 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Rīt pulksten 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Šodien pulksten 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Vakar pulksten 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [pulksten] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [pulksten] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [pulksten] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('me'); + +test('parse', function (assert) { + var tests = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'), + i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedjelja, 14. februar 2010, 3:25:50 pm'], + ['ddd, hA', 'ned., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedjelja ned. ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 15:25'], + ['LLLL', 'nedjelja, 14. februar 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. feb. 2010'], + ['lll', '14. feb. 2010 15:25'], + ['llll', 'ned., 14. feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'nedjelja ned. ne_ponedjeljak pon. po_utorak uto. ut_srijeda sri. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'nekoliko sekundi', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'jedan minut', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'jedan minut', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuta', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuta', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'jedan sat', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'jedan sat', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 sata', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 sati', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 sati', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'dan', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'dan', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dana', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'dan', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dana', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dana', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mjesec', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mjesec', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mjesec', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mjeseca', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mjeseca', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mjeseca', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mjesec', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mjeseci', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'godinu', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 godine', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'godinu', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 godina', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'za nekoliko sekundi', 'prefix'); + assert.equal(moment(0).from(30000), 'prije nekoliko sekundi', 'prefix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'prije nekoliko sekundi', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'za nekoliko sekundi', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'za 5 dana', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'danas u 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'danas u 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'danas u 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'sjutra u 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'danas u 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'juče u 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.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'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + var lastWeekDay = [ + '[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 lastWeekDay[d.day()]; + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +// Monday is the first day of the week. +// The week that contains Jan 1st is the first week of the year. + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('mi'); + +test('parse', function (assert) { + var tests = 'Kohi-tāte Kohi_Hui-tanguru Hui_Poutū-te-rangi Pou_Paenga-whāwhā Pae_Haratua Hara_Pipiri Pipi_Hōngoingoi Hōngoi_Here-turi-kōkā Here_Mahuru Mahu_Whiringa-ā-nuku Whi-nu_Whiringa-ā-rangi Whi-ra_Hakihea Haki'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Rātapu, Hui-tanguru 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'Ta, 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 Hui-tanguru Hui'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd dd', '0 0º Rātapu Ta Ta'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '6 6º 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 Hui-tanguru 2010'], + ['LLL', '14 Hui-tanguru 2010 i 15:25'], + ['LLLL', 'Rātapu, 14 Hui-tanguru 2010 i 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Hui 2010'], + ['lll', '14 Hui 2010 i 15:25'], + ['llll', 'Ta, 14 Hui 2010 i 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); +}); + +test('format month', function (assert) { + var expected = 'Kohi-tāte Kohi_Hui-tanguru Hui_Poutū-te-rangi Pou_Paenga-whāwhā Pae_Haratua Hara_Pipiri Pipi_Hōngoingoi Hōngoi_Here-turi-kōkā Here_Mahuru Mahu_Whiringa-ā-nuku Whi-nu_Whiringa-ā-rangi Whi-ra_Hakihea Haki'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Rātapu Ta Ta_Mane Ma Ma_Tūrei Tū Tū_Wenerei We We_Tāite Tāi Tāi_Paraire Pa Pa_Hātarei Hā Hā'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'te hēkona ruarua', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'he meneti', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'he meneti', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 meneti', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 meneti', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'te haora', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'te haora', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 haora', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 haora', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 haora', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'he ra', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'he ra', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ra', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'he ra', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ra', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ra', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'he marama', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'he marama', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'he marama', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 marama', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 marama', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 marama', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'he marama', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 marama', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'he tau', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 tau', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'he tau', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 tau', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'i roto i te hēkona ruarua', 'prefix'); + assert.equal(moment(0).from(30000), 'te hēkona ruarua i mua', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'te hēkona ruarua i mua', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'i roto i te hēkona ruarua', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'i roto i 5 ra', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'i teie mahana, i 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'i teie mahana, i 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'i teie mahana, i 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'apopo i 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'i teie mahana, i 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'inanahi i 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [i] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [i] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [i] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [whakamutunga i] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [whakamutunga i] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [whakamutunga i] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('mk'); + +test('parse', function (assert) { + var tests = 'јануари јан_февруари фев_март мар_април апр_мај мај_јуни јун_јули јул_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, H:mm:ss', 'недела, февруари 14-ти 2010, 15:25:50'], + ['ddd, hA', 'нед, 3PM'], + ['M Mo MM MMMM MMM', '2 2-ри 02 февруари фев'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-ти 14'], + ['d do dddd ddd dd', '0 0-ев недела нед нe'], + ['DDD DDDo DDDD', '45 45-ти 045'], + ['w wo ww', '7 7-ми 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45-ти day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 февруари 2010'], + ['LLL', '14 февруари 2010 15:25'], + ['LLLL', 'недела, 14 февруари 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 фев 2010'], + ['lll', '14 фев 2010 15:25'], + ['llll', 'нед, 14 фев 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ви', '1-ви'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-ри', '2-ри'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-ти', '3-ти'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-ти', '4-ти'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-ти', '5-ти'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-ти', '6-ти'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-ми', '7-ми'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-ми', '8-ми'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-ти', '9-ти'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-ти', '10-ти'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-ти', '11-ти'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-ти', '12-ти'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-ти', '13-ти'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-ти', '14-ти'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-ти', '15-ти'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-ти', '16-ти'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-ти', '17-ти'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-ти', '18-ти'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-ти', '19-ти'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-ти', '20-ти'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-ви', '21-ви'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-ри', '22-ри'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-ти', '23-ти'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-ти', '24-ти'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-ти', '25-ти'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-ти', '26-ти'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-ми', '27-ми'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-ми', '28-ми'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-ти', '29-ти'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-ти', '30-ти'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-ви', '31-ви'); +}); + +test('format month', function (assert) { + var expected = 'јануари јан_февруари фев_март мар_април апр_мај мај_јуни јун_јули јул_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'недела нед нe_понеделник пон пo_вторник вто вт_среда сре ср_четврток чет че_петок пет пе_сабота саб сa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'неколку секунди', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'минута', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'минута', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минути', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минути', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'час', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'час', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 часа', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 часа', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 часа', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ден', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ден', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дена', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ден', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 дена', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 дена', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'месец', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'месец', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'месец', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 месеци', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 месеци', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 месеци', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'месец', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 месеци', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'година', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 години', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'година', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 години', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'после неколку секунди', 'prefix'); + assert.equal(moment(0).from(30000), 'пред неколку секунди', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'пред неколку секунди', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'после неколку секунди', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'после 5 дена', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Денес во 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Денес во 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Денес во 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Утре во 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Денес во 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Вчера во 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[Во] dddd [во] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Во] dddd [во] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Во] dddd [во] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + case 6: + return '[Изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Изминатиот] dddd [во] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ви', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ви', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-ри', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-ри', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-ти', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ml'); + +test('parse', function (assert) { + var tests = 'ജനുവരി ജനു._ഫെബ്രുവരി ഫെബ്രു._മാർച്ച് മാർ._ഏപ്രിൽ ഏപ്രി._മേയ് മേയ്_ജൂൺ ജൂൺ_ജൂലൈ ജൂലൈ._ഓഗസ്റ്റ് ഓഗ._സെപ്റ്റംബർ സെപ്റ്റ._ഒക്ടോബർ ഒക്ടോ._നവംബർ നവം._ഡിസംബർ ഡിസം.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss -നു', 'ഞായറാഴ്ച, 14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25:50 -നു'], + ['ddd, a h -നു', 'ഞായർ, ഉച്ച കഴിഞ്ഞ് 3 -നു'], + ['M Mo MM MMMM MMM', '2 2 02 ഫെബ്രുവരി ഫെബ്രു.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 ഞായറാഴ്ച ഞായർ ഞാ'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'ഉച്ച കഴിഞ്ഞ് ഉച്ച കഴിഞ്ഞ്'], + ['LTS', 'ഉച്ച കഴിഞ്ഞ് 3:25:50 -നു'], + ['L', '14/02/2010'], + ['LL', '14 ഫെബ്രുവരി 2010'], + ['LLL', '14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'], + ['LLLL', 'ഞായറാഴ്ച, 14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'], + ['l', '14/2/2010'], + ['ll', '14 ഫെബ്രു. 2010'], + ['lll', '14 ഫെബ്രു. 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'], + ['llll', 'ഞായർ, 14 ഫെബ്രു. 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'ജനുവരി ജനു._ഫെബ്രുവരി ഫെബ്രു._മാർച്ച് മാർ._ഏപ്രിൽ ഏപ്രി._മേയ് മേയ്_ജൂൺ ജൂൺ_ജൂലൈ ജൂലൈ._ഓഗസ്റ്റ് ഓഗ._സെപ്റ്റംബർ സെപ്റ്റ._ഒക്ടോബർ ഒക്ടോ._നവംബർ നവം._ഡിസംബർ ഡിസം.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'ഞായറാഴ്ച ഞായർ ഞാ_തിങ്കളാഴ്ച തിങ്കൾ തി_ചൊവ്വാഴ്ച ചൊവ്വ ചൊ_ബുധനാഴ്ച ബുധൻ ബു_വ്യാഴാഴ്ച വ്യാഴം വ്യാ_വെള്ളിയാഴ്ച വെള്ളി വെ_ശനിയാഴ്ച ശനി ശ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'അൽപ നിമിഷങ്ങൾ', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ഒരു മിനിറ്റ്', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ഒരു മിനിറ്റ്', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 മിനിറ്റ്', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 മിനിറ്റ്', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ഒരു മണിക്കൂർ', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ഒരു മണിക്കൂർ', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 മണിക്കൂർ', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 മണിക്കൂർ', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 മണിക്കൂർ', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ഒരു ദിവസം', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ഒരു ദിവസം', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ദിവസം', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ഒരു ദിവസം', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ദിവസം', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ദിവസം', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ഒരു മാസം', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ഒരു മാസം', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ഒരു മാസം', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 മാസം', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 മാസം', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 മാസം', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ഒരു മാസം', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 മാസം', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ഒരു വർഷം', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 വർഷം', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ഒരു വർഷം', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 വർഷം', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്', 'prefix'); + assert.equal(moment(0).from(30000), 'അൽപ നിമിഷങ്ങൾ മുൻപ്', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'അൽപ നിമിഷങ്ങൾ മുൻപ്', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്', 'അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്'); + assert.equal(moment().add({d: 5}).fromNow(), '5 ദിവസം കഴിഞ്ഞ്', '5 ദിവസം കഴിഞ്ഞ്'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'ഇന്ന് ഉച്ച കഴിഞ്ഞ് 12:00 -നു', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'ഇന്ന് ഉച്ച കഴിഞ്ഞ് 12:25 -നു', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 3}).calendar(), 'ഇന്ന് ഉച്ച കഴിഞ്ഞ് 3:00 -നു', 'Now plus 3 hours'); + assert.equal(moment(a).add({d: 1}).calendar(), 'നാളെ ഉച്ച കഴിഞ്ഞ് 12:00 -നു', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'ഇന്ന് രാവിലെ 11:00 -നു', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ഇന്നലെ ഉച്ച കഴിഞ്ഞ് 12:00 -നു', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'രാത്രി', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'രാവിലെ', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'ഉച്ച കഴിഞ്ഞ്', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'വൈകുന്നേരം', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'വൈകുന്നേരം', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'രാത്രി', 'night'); + + assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'രാത്രി', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'രാവിലെ', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'ഉച്ച കഴിഞ്ഞ്', ' during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'വൈകുന്നേരം', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'വൈകുന്നേരം', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'രാത്രി', 'night'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('mr'); + +test('parse', function (assert) { + var tests = 'जानेवारी जाने._फेब्रुवारी फेब्रु._मार्च मार्च._एप्रिल एप्रि._मे मे._जून जून._जुलै जुलै._ऑगस्ट ऑग._सप्टेंबर सप्टें._ऑक्टोबर ऑक्टो._नोव्हेंबर नोव्हें._डिसेंबर डिसें.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss वाजता', 'रविवार, १४ फेब्रुवारी २०१०, दुपारी ३:२५:५० वाजता'], + ['ddd, a h वाजता', 'रवि, दुपारी ३ वाजता'], + ['M Mo MM MMMM MMM', '२ २ ०२ फेब्रुवारी फेब्रु.'], + ['YYYY YY', '२०१० १०'], + ['D Do DD', '१४ १४ १४'], + ['d do dddd ddd dd', '० ० रविवार रवि र'], + ['DDD DDDo DDDD', '४५ ४५ ०४५'], + ['w wo ww', '८ ८ ०८'], + ['h hh', '३ ०३'], + ['H HH', '१५ १५'], + ['m mm', '२५ २५'], + ['s ss', '५० ५०'], + ['a A', 'दुपारी दुपारी'], + ['LTS', 'दुपारी ३:२५:५० वाजता'], + ['L', '१४/०२/२०१०'], + ['LL', '१४ फेब्रुवारी २०१०'], + ['LLL', '१४ फेब्रुवारी २०१०, दुपारी ३:२५ वाजता'], + ['LLLL', 'रविवार, १४ फेब्रुवारी २०१०, दुपारी ३:२५ वाजता'], + ['l', '१४/२/२०१०'], + ['ll', '१४ फेब्रु. २०१०'], + ['lll', '१४ फेब्रु. २०१०, दुपारी ३:२५ वाजता'], + ['llll', 'रवि, १४ फेब्रु. २०१०, दुपारी ३:२५ वाजता'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१'); +}); + +test('format month', function (assert) { + var expected = 'जानेवारी जाने._फेब्रुवारी फेब्रु._मार्च मार्च._एप्रिल एप्रि._मे मे._जून जून._जुलै जुलै._ऑगस्ट ऑग._सप्टेंबर सप्टें._ऑक्टोबर ऑक्टो._नोव्हेंबर नोव्हें._डिसेंबर डिसें.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'रविवार रवि र_सोमवार सोम सो_मंगळवार मंगळ मं_बुधवार बुध बु_गुरूवार गुरू गु_शुक्रवार शुक्र शु_शनिवार शनि श'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'काही सेकंद', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'एक मिनिट', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'एक मिनिट', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '२ मिनिटे', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '४४ मिनिटे', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'एक तास', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'एक तास', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '२ तास', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '५ तास', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '२१ तास', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'एक दिवस', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'एक दिवस', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '२ दिवस', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'एक दिवस', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '५ दिवस', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '२५ दिवस', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'एक महिना', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'एक महिना', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'एक महिना', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '२ महिने', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '२ महिने', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '३ महिने', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'एक महिना', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '५ महिने', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'एक वर्ष', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '२ वर्षे', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'एक वर्ष', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '५ वर्षे', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'काही सेकंदांमध्ये', 'prefix'); + assert.equal(moment(0).from(30000), 'काही सेकंदांपूर्वी', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'काही सेकंदांपूर्वी', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'काही सेकंदांमध्ये', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '५ दिवसांमध्ये', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'आज दुपारी १२:०० वाजता', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'आज दुपारी १२:२५ वाजता', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 3}).calendar(), 'आज दुपारी ३:०० वाजता', 'Now plus 3 hours'); + assert.equal(moment(a).add({d: 1}).calendar(), 'उद्या दुपारी १२:०० वाजता', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'आज दुपारी ११:०० वाजता', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'काल दुपारी १२:०० वाजता', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'रात्री', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'सकाळी', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'दुपारी', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'सायंकाळी', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'सायंकाळी', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'रात्री', 'night'); + + assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'रात्री', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'सकाळी', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'दुपारी', ' during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'सायंकाळी', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'सायंकाळी', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'रात्री', 'night'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '१ ०१ १', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '२ ०२ २', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '३ ०३ ३', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ms-my'); + +test('parse', function (assert) { + var i, + tests = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' sepatutnya bulan ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Ahad, Februari 14 2010, 3:25:50 petang'], + ['ddd, hA', 'Ahd, 3petang'], + ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Ahad Ahd Ah'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'petang petang'], + ['[hari] [ke] DDDo [tahun] ini', 'hari ke 45 tahun ini'], + ['LTS', '15.25.50'], + ['L', '14/02/2010'], + ['LL', '14 Februari 2010'], + ['LLL', '14 Februari 2010 pukul 15.25'], + ['LLLL', 'Ahad, 14 Februari 2010 pukul 15.25'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 pukul 15.25'], + ['llll', 'Ahd, 14 Feb 2010 pukul 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var i, + expected = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'Ahad Ahd Ah_Isnin Isn Is_Selasa Sel Sl_Rabu Rab Rb_Khamis Kha Km_Jumaat Jum Jm_Sabtu Sab Sb'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'beberapa saat', '44 saat = beberapa saat'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'seminit', '45 saat = seminit'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'seminit', '89 saat = seminit'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minit', '90 saat = 2 minit'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minit', '44 minit = 44 minit'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'sejam', '45 minit = sejam'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'sejam', '89 minit = sejam'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 jam', '90 minit = 2 jam'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 jam', '5 jam = 5 jam'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 jam', '21 jam = 21 jam'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'sehari', '22 jam = sehari'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'sehari', '35 jam = sehari'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 hari', '36 jam = 2 hari'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'sehari', '1 hari = sehari'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 hari', '5 hari = 5 hari'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 hari', '25 hari = 25 hari'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'sebulan', '26 hari = sebulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'sebulan', '30 hari = sebulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'sebulan', '45 hari = sebulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 bulan', '46 hari = 2 bulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 bulan', '75 hari = 2 bulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 bulan', '76 hari = 3 bulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'sebulan', '1 bulan = sebulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 bulan', '5 bulan = 5 bulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'setahun', '345 hari = setahun'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 tahun', '548 hari = 2 tahun'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'setahun', '1 tahun = setahun'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 tahun', '5 tahun = 5 tahun'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'dalam beberapa saat', 'prefix'); + assert.equal(moment(0).from(30000), 'beberapa saat yang lepas', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'beberapa saat yang lepas', 'waktu sekarang dari sekarang sepatutnya menunjukkan sebagai telah lepas'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'dalam beberapa saat', 'dalam beberapa saat'); + assert.equal(moment().add({d: 5}).fromNow(), 'dalam 5 hari', 'dalam 5 hari'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Hari ini pukul 12.00', 'hari ini pada waktu yang sama'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Hari ini pukul 12.25', 'Sekarang tambah 25 minit'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Hari ini pukul 13.00', 'Sekarang tambah 1 jam'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Esok pukul 12.00', 'esok pada waktu yang sama'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hari ini pukul 11.00', 'Sekarang tolak 1 jam'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Kelmarin pukul 12.00', 'kelmarin pada waktu yang sama'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari waktu sekarang'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari permulaan hari'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari tamat hari'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari waktu sekarang'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari permulaan hari'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari tamat hari'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 minggu lepas'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'dalam 1 minggu'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 minggu lepas'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'dalam 2 minggu'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 sepatutnya minggu 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 sepatutnya minggu 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 sepatutnya minggu 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 sepatutnya minggu 3'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 sepatutnya minggu 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ms'); + +test('parse', function (assert) { + var i, + tests = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' sepatutnya bulan ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Ahad, Februari 14 2010, 3:25:50 petang'], + ['ddd, hA', 'Ahd, 3petang'], + ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Ahad Ahd Ah'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'petang petang'], + ['[hari] [ke] DDDo [tahun] ini', 'hari ke 45 tahun ini'], + ['LTS', '15.25.50'], + ['L', '14/02/2010'], + ['LL', '14 Februari 2010'], + ['LLL', '14 Februari 2010 pukul 15.25'], + ['LLLL', 'Ahad, 14 Februari 2010 pukul 15.25'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 pukul 15.25'], + ['llll', 'Ahd, 14 Feb 2010 pukul 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var i, + expected = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'Ahad Ahd Ah_Isnin Isn Is_Selasa Sel Sl_Rabu Rab Rb_Khamis Kha Km_Jumaat Jum Jm_Sabtu Sab Sb'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'beberapa saat', '44 saat = beberapa saat'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'seminit', '45 saat = seminit'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'seminit', '89 saat = seminit'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minit', '90 saat = 2 minit'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minit', '44 minit = 44 minit'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'sejam', '45 minit = sejam'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'sejam', '89 minit = sejam'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 jam', '90 minit = 2 jam'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 jam', '5 jam = 5 jam'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 jam', '21 jam = 21 jam'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'sehari', '22 jam = sehari'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'sehari', '35 jam = sehari'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 hari', '36 jam = 2 hari'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'sehari', '1 hari = sehari'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 hari', '5 hari = 5 hari'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 hari', '25 hari = 25 hari'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'sebulan', '26 hari = sebulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'sebulan', '30 hari = sebulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'sebulan', '45 hari = sebulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 bulan', '46 hari = 2 bulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 bulan', '75 hari = 2 bulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 bulan', '76 hari = 3 bulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'sebulan', '1 bulan = sebulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 bulan', '5 bulan = 5 bulan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'setahun', '345 hari = setahun'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 tahun', '548 hari = 2 tahun'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'setahun', '1 tahun = setahun'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 tahun', '5 tahun = 5 tahun'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'dalam beberapa saat', 'prefix'); + assert.equal(moment(0).from(30000), 'beberapa saat yang lepas', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'beberapa saat yang lepas', 'waktu sekarang dari sekarang sepatutnya menunjukkan sebagai telah lepas'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'dalam beberapa saat', 'dalam beberapa saat'); + assert.equal(moment().add({d: 5}).fromNow(), 'dalam 5 hari', 'dalam 5 hari'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Hari ini pukul 12.00', 'hari ini pada waktu yang sama'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Hari ini pukul 12.25', 'Sekarang tambah 25 minit'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Hari ini pukul 13.00', 'Sekarang tambah 1 jam'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Esok pukul 12.00', 'esok pada waktu yang sama'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hari ini pukul 11.00', 'Sekarang tolak 1 jam'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Kelmarin pukul 12.00', 'kelmarin pada waktu yang sama'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari waktu sekarang'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari permulaan hari'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari tamat hari'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari waktu sekarang'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari permulaan hari'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari tamat hari'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 minggu lepas'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'dalam 1 minggu'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 minggu lepas'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'dalam 2 minggu'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 sepatutnya minggu 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 sepatutnya minggu 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 sepatutnya minggu 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 sepatutnya minggu 3'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 sepatutnya minggu 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('my'); + +test('parse', function (assert) { + var tests = 'ဇန်နဝါရီ ဇန်_ဖေဖော်ဝါရီ ဖေ_မတ် မတ်_ဧပြီ ပြီ_မေ မေ_ဇွန် ဇွန်_ဇူလိုင် လိုင်_သြဂုတ် သြ_စက်တင်ဘာ စက်_အောက်တိုဘာ အောက်_နိုဝင်ဘာ နို_ဒီဇင်ဘာ ဒီ'.split('_'), + i; + + function equalTest (input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'တနင်္ဂနွေ, ဖေဖော်ဝါရီ ၁၄ ၂၀၁၀, ၃:၂၅:၅၀ pm'], + ['ddd, hA', 'နွေ, ၃PM'], + ['M Mo MM MMMM MMM', '၂ ၂ ၀၂ ဖေဖော်ဝါရီ ဖေ'], + ['YYYY YY', '၂၀၁၀ ၁၀'], + ['D Do DD', '၁၄ ၁၄ ၁၄'], + ['d do dddd ddd dd', '၀ ၀ တနင်္ဂနွေ နွေ နွေ'], + ['DDD DDDo DDDD', '၄၅ ၄၅ ၀၄၅'], + ['w wo ww', '၆ ၆ ၀၆'], + ['h hh', '၃ ၀၃'], + ['H HH', '၁၅ ၁၅'], + ['m mm', '၂၅ ၂၅'], + ['s ss', '၅၀ ၅၀'], + ['a A', 'pm PM'], + ['[နှစ်၏] DDDo [ရက်မြောက်]', 'နှစ်၏ ၄၅ ရက်မြောက်'], + ['LTS', '၁၅:၂၅:၅၀'], + ['L', '၁၄/၀၂/၂၀၁၀'], + ['LL', '၁၄ ဖေဖော်ဝါရီ ၂၀၁၀'], + ['LLL', '၁၄ ဖေဖော်ဝါရီ ၂၀၁၀ ၁၅:၂၅'], + ['LLLL', 'တနင်္ဂနွေ ၁၄ ဖေဖော်ဝါရီ ၂၀၁၀ ၁၅:၂၅'], + ['l', '၁၄/၂/၂၀၁၀'], + ['ll', '၁၄ ဖေ ၂၀၁၀'], + ['lll', '၁၄ ဖေ ၂၀၁၀ ၁၅:၂၅'], + ['llll', 'နွေ ၁၄ ဖေ ၂၀၁၀ ၁၅:၂၅'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '၁', '၁'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '၂', '၂'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '၃', '၃'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '၄', '၄'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '၅', '၅'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '၆', '၆'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '၇', '၇'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '၈', '၈'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '၉', '၉'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '၁၀', '၁၀'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '၁၁', '၁၁'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '၁၂', '၁၂'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '၁၃', '၁၃'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '၁၄', '၁၄'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '၁၅', '၁၅'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '၁၆', '၁၆'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '၁၇', '၁၇'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '၁၈', '၁၈'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '၁၉', '၁၉'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '၂၀', '၂၀'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '၂၁', '၂၁'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '၂၂', '၂၂'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '၂၃', '၂၃'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '၂၄', '၂၄'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '၂၅', '၂၅'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '၂၆', '၂၆'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '၂၇', '၂၇'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '၂၈', '၂၈'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '၂၉', '၂၉'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '၃၀', '၃၀'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '၃၁', '၃၁'); +}); + +test('format month', function (assert) { + var expected = 'ဇန်နဝါရီ ဇန်_ဖေဖော်ဝါရီ ဖေ_မတ် မတ်_ဧပြီ ပြီ_မေ မေ_ဇွန် ဇွန်_ဇူလိုင် လိုင်_သြဂုတ် သြ_စက်တင်ဘာ စက်_အောက်တိုဘာ အောက်_နိုဝင်ဘာ နို_ဒီဇင်ဘာ ဒီ'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'တနင်္ဂနွေ နွေ နွေ_တနင်္လာ လာ လာ_အင်္ဂါ ဂါ ဂါ_ဗုဒ္ဓဟူး ဟူး ဟူး_ကြာသပတေး ကြာ ကြာ_သောကြာ သော သော_စနေ နေ နေ'.split('_'), + i; + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({ + s: 44 + }), true), 'စက္ကန်.အနည်းငယ်', '၄၄ စက္ကန်. = စက္ကန်.အနည်းငယ်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + s: 45 + }), true), 'တစ်မိနစ်', '၄၅ စက္ကန်. = တစ်မိနစ်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + s: 89 + }), true), 'တစ်မိနစ်', '၈၉ စက္ကန်. = တစ်မိနစ်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + s: 90 + }), true), '၂ မိနစ်', '၉၀ စက္ကန်. = ၂ မိနစ်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + m: 44 + }), true), '၄၄ မိနစ်', '၄၄ မိနစ် = ၄၄ မိနစ်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + m: 45 + }), true), 'တစ်နာရီ', '၄၅ မိနစ် = ၁ နာရီ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + m: 89 + }), true), 'တစ်နာရီ', '၈၉ မိနစ် = တစ်နာရီ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + m: 90 + }), true), '၂ နာရီ', 'မိနစ် ၉၀= ၂ နာရီ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + h: 5 + }), true), '၅ နာရီ', '၅ နာရီ= ၅ နာရီ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + h: 21 + }), true), '၂၁ နာရီ', '၂၁ နာရီ =၂၁ နာရီ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + h: 22 + }), true), 'တစ်ရက်', '၂၂ နာရီ =တစ်ရက်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + h: 35 + }), true), 'တစ်ရက်', '၃၅ နာရီ =တစ်ရက်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + h: 36 + }), true), '၂ ရက်', '၃၆ နာရီ = ၂ ရက်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 1 + }), true), 'တစ်ရက်', '၁ ရက်= တစ်ရက်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 5 + }), true), '၅ ရက်', '၅ ရက် = ၅ ရက်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 25 + }), true), '၂၅ ရက်', '၂၅ ရက်= ၂၅ ရက်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 26 + }), true), 'တစ်လ', '၂၆ ရက် = တစ်လ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 30 + }), true), 'တစ်လ', 'ရက် ၃၀ = တစ်လ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 43 + }), true), 'တစ်လ', '၄၃ ရက် = တစ်လ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 46 + }), true), '၂ လ', '၄၆ ရက် = ၂ လ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 74 + }), true), '၂ လ', '၇၅ ရက်= ၂ လ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 76 + }), true), '၃ လ', '၇၆ ရက် = ၃ လ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + M: 1 + }), true), 'တစ်လ', '၁ လ = တစ်လ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + M: 5 + }), true), '၅ လ', '၅ လ = ၅ လ'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 345 + }), true), 'တစ်နှစ်', '၃၄၅ ရက် = တစ်နှစ်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + d: 548 + }), true), '၂ နှစ်', '၅၄၈ ရက် = ၂ နှစ်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + y: 1 + }), true), 'တစ်နှစ်', '၁ နှစ် = တစ်နှစ်'); + assert.equal(start.from(moment([2007, 1, 28]).add({ + y: 5 + }), true), '၅ နှစ်', '၅ နှစ် = ၅ နှစ်'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'လာမည့် စက္ကန်.အနည်းငယ် မှာ', 'prefix'); + assert.equal(moment(0).from(30000), 'လွန်ခဲ့သော စက္ကန်.အနည်းငယ် က', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'လွန်ခဲ့သော စက္ကန်.အနည်းငယ် က', 'ယခုမှစပြီး အတိတ်တွင်ဖော်ပြသလိုဖော်ပြမည်'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({ + s: 30 + }).fromNow(), 'လာမည့် စက္ကန်.အနည်းငယ် မှာ', 'လာမည့် စက္ကန်.အနည်းငယ် မှာ'); + assert.equal(moment().add({ + d: 5 + }).fromNow(), 'လာမည့် ၅ ရက် မှာ', 'လာမည့် ၅ ရက် မှာ'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'ယနေ. ၁၂:၀၀ မှာ', 'ယနေ. ဒီအချိန်'); + assert.equal(moment(a).add({m: 25}).calendar(), 'ယနေ. ၁၂:၂၅ မှာ', 'ယခုမှ ၂၅ မိနစ်ပေါင်းထည့်'); + assert.equal(moment(a).add({h: 1}).calendar(), 'ယနေ. ၁၃:၀၀ မှာ', 'ယခုမှ ၁ နာရီပေါင်းထည့်'); + assert.equal(moment(a).add({d: 1}).calendar(), 'မနက်ဖြန် ၁၂:၀၀ မှာ', 'မနက်ဖြန် ဒီအချိန်'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'ယနေ. ၁၁:၀၀ မှာ', 'ယခုမှ ၁ နာရီနှုတ်'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'မနေ.က ၁၂:၀၀ မှာ', 'မနေ.က ဒီအချိန်'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({ + d: i + }); + assert.equal(m.calendar(), m.format('dddd LT [မှာ]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd LT [မှာ]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd LT [မှာ]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({ + d: i + }); + assert.equal(m.calendar(), m.format('[ပြီးခဲ့သော] dddd LT [မှာ]'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[ပြီးခဲ့သော] dddd LT [မှာ]'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[ပြီးခဲ့သော] dddd LT [မှာ]'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({ + w: 1 + }), + weeksFromNow = moment().add({ + w: 1 + }); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'လွန်ခဲ့သော ၁ ပတ်က'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '၁ ပတ်အတွင်း'); + + weeksAgo = moment().subtract({ + w: 2 + }); + weeksFromNow = moment().add({ + w: 2 + }); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '၂ ပတ် အရင်က'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '၂ ပတ် အတွင်း'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '၅၂ ၅၂ ၅၂', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '၁ ၀၁ ၁', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '၁ ၀၁ ၁', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '၂ ၀၂ ၂', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '၂ ၀၂ ၂', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('nb'); + +test('parse', function (assert) { + var tests = 'januar jan._februar feb._mars mars_april april_mai mai_juni juni_juli juli_august aug._september sep._oktober okt._november nov._desember des.'.split('_'), + i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'søndag, februar 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'sø., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. søndag sø. sø'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[den] DDDo [dagen i året]', 'den 45. dagen i året'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 kl. 15:25'], + ['LLLL', 'søndag 14. februar 2010 kl. 15:25'], + ['l', '14.2.2010'], + ['ll', '14. feb. 2010'], + ['lll', '14. feb. 2010 kl. 15:25'], + ['llll', 'sø. 14. feb. 2010 kl. 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'januar jan._februar feb._mars mars_april april_mai mai_juni juni_juli juli_august aug._september sep._oktober okt._november nov._desember des.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'søndag sø. sø_mandag ma. ma_tirsdag ti. ti_onsdag on. on_torsdag to. to_fredag fr. fr_lørdag lø. lø'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'noen sekunder', '44 sekunder = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ett minutt', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ett minutt', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutter', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutter', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'en time', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'en time', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 timer', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 timer', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 timer', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'en dag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'en dag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dager', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'en dag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dager', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dager', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'en måned', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'en måned', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'en måned', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 måneder', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 måneder', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 måneder', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'en måned', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 måneder', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ett år', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 år', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ett år', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 år', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'om noen sekunder', 'prefix'); + assert.equal(moment(0).from(30000), 'noen sekunder siden', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'noen sekunder siden', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'om noen sekunder', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'om 5 dager', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'i dag kl. 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'i dag kl. 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'i dag kl. 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'i morgen kl. 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'i dag kl. 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'i går kl. 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ne'); + +test('parse', function (assert) { + var tests = 'जनवरी जन._फेब्रुवरी फेब्रु._मार्च मार्च_अप्रिल अप्रि._मई मई_जुन जुन_जुलाई जुलाई._अगष्ट अग._सेप्टेम्बर सेप्ट._अक्टोबर अक्टो._नोभेम्बर नोभे._डिसेम्बर डिसे.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, aको h:mm:ss बजे', 'आइतबार, १४ फेब्रुवरी २०१०, दिउँसोको ३:२५:५० बजे'], + ['ddd, aको h बजे', 'आइत., दिउँसोको ३ बजे'], + ['M Mo MM MMMM MMM', '२ २ ०२ फेब्रुवरी फेब्रु.'], + ['YYYY YY', '२०१० १०'], + ['D Do DD', '१४ १४ १४'], + ['d do dddd ddd dd', '० ० आइतबार आइत. आ.'], + ['DDD DDDo DDDD', '४५ ४५ ०४५'], + ['w wo ww', '८ ८ ०८'], + ['h hh', '३ ०३'], + ['H HH', '१५ १५'], + ['m mm', '२५ २५'], + ['s ss', '५० ५०'], + ['a A', 'दिउँसो दिउँसो'], + ['LTS', 'दिउँसोको ३:२५:५० बजे'], + ['L', '१४/०२/२०१०'], + ['LL', '१४ फेब्रुवरी २०१०'], + ['LLL', '१४ फेब्रुवरी २०१०, दिउँसोको ३:२५ बजे'], + ['LLLL', 'आइतबार, १४ फेब्रुवरी २०१०, दिउँसोको ३:२५ बजे'], + ['l', '१४/२/२०१०'], + ['ll', '१४ फेब्रु. २०१०'], + ['lll', '१४ फेब्रु. २०१०, दिउँसोको ३:२५ बजे'], + ['llll', 'आइत., १४ फेब्रु. २०१०, दिउँसोको ३:२५ बजे'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१'); +}); + +test('format month', function (assert) { + var expected = 'जनवरी जन._फेब्रुवरी फेब्रु._मार्च मार्च_अप्रिल अप्रि._मई मई_जुन जुन_जुलाई जुलाई._अगष्ट अग._सेप्टेम्बर सेप्ट._अक्टोबर अक्टो._नोभेम्बर नोभे._डिसेम्बर डिसे.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'आइतबार आइत. आ._सोमबार सोम. सो._मङ्गलबार मङ्गल. मं._बुधबार बुध. बु._बिहिबार बिहि. बि._शुक्रबार शुक्र. शु._शनिबार शनि. श.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'केही क्षण', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'एक मिनेट', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'एक मिनेट', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '२ मिनेट', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '४४ मिनेट', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'एक घण्टा', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'एक घण्टा', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '२ घण्टा', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '५ घण्टा', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '२१ घण्टा', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'एक दिन', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'एक दिन', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '२ दिन', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'एक दिन', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '५ दिन', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '२५ दिन', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'एक महिना', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'एक महिना', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'एक महिना', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '२ महिना', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '२ महिना', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '३ महिना', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'एक महिना', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '५ महिना', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'एक बर्ष', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '२ बर्ष', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'एक बर्ष', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '५ बर्ष', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'केही क्षणमा', 'prefix'); + assert.equal(moment(0).from(30000), 'केही क्षण अगाडि', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'केही क्षण अगाडि', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'केही क्षणमा', 'केही क्षणमा'); + assert.equal(moment().add({d: 5}).fromNow(), '५ दिनमा', '५ दिनमा'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'आज दिउँसोको १२:०० बजे', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'आज दिउँसोको १२:२५ बजे', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'आज दिउँसोको १:०० बजे', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'भोलि दिउँसोको १२:०० बजे', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'आज बिहानको ११:०० बजे', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'हिजो दिउँसोको १२:०० बजे', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'राति', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'बिहान', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'दिउँसो', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'साँझ', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'साँझ', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'राति', 'night'); + + assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'राति', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'बिहान', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'दिउँसो', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'साँझ', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'साँझ', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'राति', 'night'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '५३ ५३ ५३', 'Dec 26 2011 should be week 53'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '१ ०१ १', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '२ ०२ २', 'Jan 9 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('nl-be'); + +test('parse', function (assert) { + var tests = 'januari jan._februari feb._maart mrt._april apr._mei mei._juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, HH:mm:ss', 'zondag, februari 14de 2010, 15:25:50'], + ['ddd, HH', 'zo., 15'], + ['M Mo MM MMMM MMM', '2 2de 02 februari feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14de 14'], + ['d do dddd ddd dd', '0 0de zondag zo. Zo'], + ['DDD DDDo DDDD', '45 45ste 045'], + ['w wo ww', '6 6de 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45ste day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 februari 2010'], + ['LLL', '14 februari 2010 15:25'], + ['LLLL', 'zondag 14 februari 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 feb. 2010'], + ['lll', '14 feb. 2010 15:25'], + ['llll', 'zo. 14 feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste'); +}); + +test('format month', function (assert) { + var expected = 'januari jan._februari feb._maart mrt._april apr._mei mei_juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'zondag zo. Zo_maandag ma. Ma_dinsdag di. Di_woensdag wo. Wo_donderdag do. Do_vrijdag vr. Vr_zaterdag za. Za'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'een paar seconden', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'één minuut', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'één minuut', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuten', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuten', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'één uur', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'één uur', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 uur', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 uur', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 uur', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'één dag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'één dag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagen', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'één dag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagen', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagen', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'één maand', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'één maand', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'één maand', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 maanden', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 maanden', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 maanden', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'één maand', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 maanden', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'één jaar', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jaar', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'één jaar', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jaar', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'over een paar seconden', 'prefix'); + assert.equal(moment(0).from(30000), 'een paar seconden geleden', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'een paar seconden geleden', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'over een paar seconden', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'over 5 dagen', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'vandaag om 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'vandaag om 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'vandaag om 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'morgen om 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'vandaag om 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'gisteren om 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('month abbreviation', function (assert) { + assert.equal(moment([2012, 5, 23]).format('D-MMM-YYYY'), '23-jun-2012', 'format month abbreviation surrounded by dashes should not include a dot'); + assert.equal(moment([2012, 5, 23]).unix(), moment('23-jun-2012', 'D-MMM-YYYY').unix(), 'parse month abbreviation surrounded by dashes without dot'); + assert.equal(moment([2012, 5, 23]).format('D MMM YYYY'), '23 jun. 2012', 'format month abbreviation not surrounded by dashes should include a dot'); + assert.equal(moment([2012, 5, 23]).unix(), moment('23 jun. 2012', 'D MMM YYYY').unix(), 'parse month abbreviation not surrounded by dashes with dot'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('nl'); + +test('parse', function (assert) { + var tests = 'januari jan._februari feb._maart mrt._april apr._mei mei._juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, HH:mm:ss', 'zondag, februari 14de 2010, 15:25:50'], + ['ddd, HH', 'zo., 15'], + ['M Mo MM MMMM MMM', '2 2de 02 februari feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14de 14'], + ['d do dddd ddd dd', '0 0de zondag zo. Zo'], + ['DDD DDDo DDDD', '45 45ste 045'], + ['w wo ww', '6 6de 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45ste day of the year'], + ['LTS', '15:25:50'], + ['L', '14-02-2010'], + ['LL', '14 februari 2010'], + ['LLL', '14 februari 2010 15:25'], + ['LLLL', 'zondag 14 februari 2010 15:25'], + ['l', '14-2-2010'], + ['ll', '14 feb. 2010'], + ['lll', '14 feb. 2010 15:25'], + ['llll', 'zo. 14 feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste'); +}); + +test('format month', function (assert) { + var expected = 'januari jan._februari feb._maart mrt._april apr._mei mei_juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'zondag zo. Zo_maandag ma. Ma_dinsdag di. Di_woensdag wo. Wo_donderdag do. Do_vrijdag vr. Vr_zaterdag za. Za'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'een paar seconden', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'één minuut', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'één minuut', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuten', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuten', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'één uur', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'één uur', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 uur', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 uur', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 uur', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'één dag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'één dag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagen', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'één dag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagen', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagen', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'één maand', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'één maand', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'één maand', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 maanden', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 maanden', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 maanden', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'één maand', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 maanden', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'één jaar', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jaar', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'één jaar', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jaar', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'over een paar seconden', 'prefix'); + assert.equal(moment(0).from(30000), 'een paar seconden geleden', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'een paar seconden geleden', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'over een paar seconden', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'over 5 dagen', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'vandaag om 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'vandaag om 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'vandaag om 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'morgen om 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'vandaag om 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'gisteren om 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('month abbreviation', function (assert) { + assert.equal(moment([2012, 5, 23]).format('D-MMM-YYYY'), '23-jun-2012', 'format month abbreviation surrounded by dashes should not include a dot'); + assert.equal(moment([2012, 5, 23]).unix(), moment('23-jun-2012', 'D-MMM-YYYY').unix(), 'parse month abbreviation surrounded by dashes without dot'); + assert.equal(moment([2012, 5, 23]).format('D MMM YYYY'), '23 jun. 2012', 'format month abbreviation not surrounded by dashes should include a dot'); + assert.equal(moment([2012, 5, 23]).unix(), moment('23 jun. 2012', 'D MMM YYYY').unix(), 'parse month abbreviation not surrounded by dashes with dot'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('nn'); + +test('parse', function (assert) { + var tests = 'januar jan_februar feb_mars mar_april apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'sundag, februar 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. sundag sun su'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 kl. 15:25'], + ['LLLL', 'sundag 14. februar 2010 kl. 15:25'], + ['l', '14.2.2010'], + ['ll', '14. feb 2010'], + ['lll', '14. feb 2010 kl. 15:25'], + ['llll', 'sun 14. feb 2010 kl. 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'januar jan_februar feb_mars mar_april apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'sundag sun su_måndag mån må_tysdag tys ty_onsdag ons on_torsdag tor to_fredag fre fr_laurdag lau lø'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'nokre sekund', '44 sekunder = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'eit minutt', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'eit minutt', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutt', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutt', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ein time', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ein time', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 timar', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 timar', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 timar', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ein dag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ein dag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagar', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ein dag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagar', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagar', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ein månad', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ein månad', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ein månad', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 månader', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 månader', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 månader', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ein månad', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 månader', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'eit år', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 år', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'eit år', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 år', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'om nokre sekund', 'prefix'); + assert.equal(moment(0).from(30000), 'nokre sekund sidan', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'nokre sekund sidan', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'om nokre sekund', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'om 5 dagar', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'I dag klokka 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'I dag klokka 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'I dag klokka 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'I morgon klokka 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'I dag klokka 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'I går klokka 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [klokka] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [klokka] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [klokka] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Føregåande] dddd [klokka] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Føregåande] dddd [klokka] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Føregåande] dddd [klokka] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('pa-in'); + +test('parse', function (assert) { + var tests = 'ਜਨਵਰੀ ਜਨਵਰੀ_ਫ਼ਰਵਰੀ ਫ਼ਰਵਰੀ_ਮਾਰਚ ਮਾਰਚ_ਅਪ੍ਰੈਲ ਅਪ੍ਰੈਲ_ਮਈ ਮਈ_ਜੂਨ ਜੂਨ_ਜੁਲਾਈ ਜੁਲਾਈ_ਅਗਸਤ ਅਗਸਤ_ਸਤੰਬਰ ਸਤੰਬਰ_ਅਕਤੂਬਰ ਅਕਤੂਬਰ_ਨਵੰਬਰ ਨਵੰਬਰ_ਦਸੰਬਰ ਦਸੰਬਰ'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss ਵਜੇ', 'ਐਤਵਾਰ, ੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦, ਦੁਪਹਿਰ ੩:੨੫:੫੦ ਵਜੇ'], + ['ddd, a h ਵਜੇ', 'ਐਤ, ਦੁਪਹਿਰ ੩ ਵਜੇ'], + ['M Mo MM MMMM MMM', '੨ ੨ ੦੨ ਫ਼ਰਵਰੀ ਫ਼ਰਵਰੀ'], + ['YYYY YY', '੨੦੧੦ ੧੦'], + ['D Do DD', '੧੪ ੧੪ ੧੪'], + ['d do dddd ddd dd', '੦ ੦ ਐਤਵਾਰ ਐਤ ਐਤ'], + ['DDD DDDo DDDD', '੪੫ ੪੫ ੦੪੫'], + ['w wo ww', '੮ ੮ ੦੮'], + ['h hh', '੩ ੦੩'], + ['H HH', '੧੫ ੧੫'], + ['m mm', '੨੫ ੨੫'], + ['s ss', '੫੦ ੫੦'], + ['a A', 'ਦੁਪਹਿਰ ਦੁਪਹਿਰ'], + ['LTS', 'ਦੁਪਹਿਰ ੩:੨੫:੫੦ ਵਜੇ'], + ['L', '੧੪/੦੨/੨੦੧੦'], + ['LL', '੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦'], + ['LLL', '੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦, ਦੁਪਹਿਰ ੩:੨੫ ਵਜੇ'], + ['LLLL', 'ਐਤਵਾਰ, ੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦, ਦੁਪਹਿਰ ੩:੨੫ ਵਜੇ'], + ['l', '੧੪/੨/੨੦੧੦'], + ['ll', '੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦'], + ['lll', '੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦, ਦੁਪਹਿਰ ੩:੨੫ ਵਜੇ'], + ['llll', 'ਐਤ, ੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦, ਦੁਪਹਿਰ ੩:੨੫ ਵਜੇ'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '੧', '੧'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '੨', '੨'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '੩', '੩'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '੪', '੪'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '੫', '੫'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '੬', '੬'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '੭', '੭'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '੮', '੮'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '੯', '੯'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '੧੦', '੧੦'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '੧੧', '੧੧'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '੧੨', '੧੨'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '੧੩', '੧੩'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '੧੪', '੧੪'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '੧੫', '੧੫'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '੧੬', '੧੬'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '੧੭', '੧੭'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '੧੮', '੧੮'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '੧੯', '੧੯'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '੨੦', '੨੦'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '੨੧', '੨੧'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '੨੨', '੨੨'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '੨੩', '੨੩'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '੨੪', '੨੪'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '੨੫', '੨੫'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '੨੬', '੨੬'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '੨੭', '੨੭'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '੨੮', '੨੮'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '੨੯', '੨੯'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '੩੦', '੩੦'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '੩੧', '੩੧'); +}); + +test('format month', function (assert) { + var expected = 'ਜਨਵਰੀ ਜਨਵਰੀ_ਫ਼ਰਵਰੀ ਫ਼ਰਵਰੀ_ਮਾਰਚ ਮਾਰਚ_ਅਪ੍ਰੈਲ ਅਪ੍ਰੈਲ_ਮਈ ਮਈ_ਜੂਨ ਜੂਨ_ਜੁਲਾਈ ਜੁਲਾਈ_ਅਗਸਤ ਅਗਸਤ_ਸਤੰਬਰ ਸਤੰਬਰ_ਅਕਤੂਬਰ ਅਕਤੂਬਰ_ਨਵੰਬਰ ਨਵੰਬਰ_ਦਸੰਬਰ ਦਸੰਬਰ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'ਐਤਵਾਰ ਐਤ ਐਤ_ਸੋਮਵਾਰ ਸੋਮ ਸੋਮ_ਮੰਗਲਵਾਰ ਮੰਗਲ ਮੰਗਲ_ਬੁਧਵਾਰ ਬੁਧ ਬੁਧ_ਵੀਰਵਾਰ ਵੀਰ ਵੀਰ_ਸ਼ੁੱਕਰਵਾਰ ਸ਼ੁਕਰ ਸ਼ੁਕਰ_ਸ਼ਨੀਚਰਵਾਰ ਸ਼ਨੀ ਸ਼ਨੀ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ਕੁਝ ਸਕਿੰਟ', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ਇਕ ਮਿੰਟ', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ਇਕ ਮਿੰਟ', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '੨ ਮਿੰਟ', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '੪੪ ਮਿੰਟ', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ਇੱਕ ਘੰਟਾ', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ਇੱਕ ਘੰਟਾ', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '੨ ਘੰਟੇ', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '੫ ਘੰਟੇ', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '੨੧ ਘੰਟੇ', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ਇੱਕ ਦਿਨ', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ਇੱਕ ਦਿਨ', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '੨ ਦਿਨ', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ਇੱਕ ਦਿਨ', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '੫ ਦਿਨ', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '੨੫ ਦਿਨ', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ਇੱਕ ਮਹੀਨਾ', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ਇੱਕ ਮਹੀਨਾ', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ਇੱਕ ਮਹੀਨਾ', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '੨ ਮਹੀਨੇ', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '੨ ਮਹੀਨੇ', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '੩ ਮਹੀਨੇ', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ਇੱਕ ਮਹੀਨਾ', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '੫ ਮਹੀਨੇ', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ਇੱਕ ਸਾਲ', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '੨ ਸਾਲ', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ਇੱਕ ਸਾਲ', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '੫ ਸਾਲ', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'ਕੁਝ ਸਕਿੰਟ ਵਿੱਚ', 'prefix'); + assert.equal(moment(0).from(30000), 'ਕੁਝ ਸਕਿੰਟ ਪਿਛਲੇ', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'ਕੁਝ ਸਕਿੰਟ ਪਿਛਲੇ', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'ਕੁਝ ਸਕਿੰਟ ਵਿੱਚ', 'ਕੁਝ ਸਕਿੰਟ ਵਿੱਚ'); + assert.equal(moment().add({d: 5}).fromNow(), '੫ ਦਿਨ ਵਿੱਚ', '੫ ਦਿਨ ਵਿੱਚ'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'ਅਜ ਦੁਪਹਿਰ ੧੨:੦੦ ਵਜੇ', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'ਅਜ ਦੁਪਹਿਰ ੧੨:੨੫ ਵਜੇ', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 3}).calendar(), 'ਅਜ ਦੁਪਹਿਰ ੩:੦੦ ਵਜੇ', 'Now plus 3 hours'); + assert.equal(moment(a).add({d: 1}).calendar(), 'ਕਲ ਦੁਪਹਿਰ ੧੨:੦੦ ਵਜੇ', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'ਅਜ ਦੁਪਹਿਰ ੧੧:੦੦ ਵਜੇ', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ਕਲ ਦੁਪਹਿਰ ੧੨:੦੦ ਵਜੇ', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[ਪਿਛਲੇ] dddd[,] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[ਪਿਛਲੇ] dddd[,] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[ਪਿਛਲੇ] dddd[,] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem invariant', function (assert) { + assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'ਰਾਤ', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'ਸਵੇਰ', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'ਦੁਪਹਿਰ', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'ਸ਼ਾਮ', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'ਸ਼ਾਮ', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'ਰਾਤ', 'night'); + + assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'ਰਾਤ', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'ਸਵੇਰ', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'ਦੁਪਹਿਰ', ' during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'ਸ਼ਾਮ', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'ਸ਼ਾਮ', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'ਰਾਤ', 'night'); +}); + +test('weeks year starting sunday', function (assert) { + assert.equal(moment([2012, 0, 1]).week(), 1, 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).week(), 1, 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).week(), 2, 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).week(), 2, 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).week(), 3, 'Jan 15 2012 should be week 3'); +}); + +test('weeks year starting monday', function (assert) { + assert.equal(moment([2006, 11, 31]).week(), 1, 'Dec 31 2006 should be week 1'); + assert.equal(moment([2007, 0, 1]).week(), 1, 'Jan 1 2007 should be week 1'); + assert.equal(moment([2007, 0, 6]).week(), 1, 'Jan 6 2007 should be week 1'); + assert.equal(moment([2007, 0, 7]).week(), 2, 'Jan 7 2007 should be week 2'); + assert.equal(moment([2007, 0, 13]).week(), 2, 'Jan 13 2007 should be week 2'); + assert.equal(moment([2007, 0, 14]).week(), 3, 'Jan 14 2007 should be week 3'); +}); + +test('weeks year starting tuesday', function (assert) { + assert.equal(moment([2007, 11, 29]).week(), 52, 'Dec 29 2007 should be week 52'); + assert.equal(moment([2008, 0, 1]).week(), 1, 'Jan 1 2008 should be week 1'); + assert.equal(moment([2008, 0, 5]).week(), 1, 'Jan 5 2008 should be week 1'); + assert.equal(moment([2008, 0, 6]).week(), 2, 'Jan 6 2008 should be week 2'); + assert.equal(moment([2008, 0, 12]).week(), 2, 'Jan 12 2008 should be week 2'); + assert.equal(moment([2008, 0, 13]).week(), 3, 'Jan 13 2008 should be week 3'); +}); + +test('weeks year starting wednesday', function (assert) { + assert.equal(moment([2002, 11, 29]).week(), 1, 'Dec 29 2002 should be week 1'); + assert.equal(moment([2003, 0, 1]).week(), 1, 'Jan 1 2003 should be week 1'); + assert.equal(moment([2003, 0, 4]).week(), 1, 'Jan 4 2003 should be week 1'); + assert.equal(moment([2003, 0, 5]).week(), 2, 'Jan 5 2003 should be week 2'); + assert.equal(moment([2003, 0, 11]).week(), 2, 'Jan 11 2003 should be week 2'); + assert.equal(moment([2003, 0, 12]).week(), 3, 'Jan 12 2003 should be week 3'); +}); + +test('weeks year starting thursday', function (assert) { + assert.equal(moment([2008, 11, 28]).week(), 1, 'Dec 28 2008 should be week 1'); + assert.equal(moment([2009, 0, 1]).week(), 1, 'Jan 1 2009 should be week 1'); + assert.equal(moment([2009, 0, 3]).week(), 1, 'Jan 3 2009 should be week 1'); + assert.equal(moment([2009, 0, 4]).week(), 2, 'Jan 4 2009 should be week 2'); + assert.equal(moment([2009, 0, 10]).week(), 2, 'Jan 10 2009 should be week 2'); + assert.equal(moment([2009, 0, 11]).week(), 3, 'Jan 11 2009 should be week 3'); +}); + +test('weeks year starting friday', function (assert) { + assert.equal(moment([2009, 11, 27]).week(), 1, 'Dec 27 2009 should be week 1'); + assert.equal(moment([2010, 0, 1]).week(), 1, 'Jan 1 2010 should be week 1'); + assert.equal(moment([2010, 0, 2]).week(), 1, 'Jan 2 2010 should be week 1'); + assert.equal(moment([2010, 0, 3]).week(), 2, 'Jan 3 2010 should be week 2'); + assert.equal(moment([2010, 0, 9]).week(), 2, 'Jan 9 2010 should be week 2'); + assert.equal(moment([2010, 0, 10]).week(), 3, 'Jan 10 2010 should be week 3'); +}); + +test('weeks year starting saturday', function (assert) { + assert.equal(moment([2010, 11, 26]).week(), 1, 'Dec 26 2010 should be week 1'); + assert.equal(moment([2011, 0, 1]).week(), 1, 'Jan 1 2011 should be week 1'); + assert.equal(moment([2011, 0, 2]).week(), 2, 'Jan 2 2011 should be week 2'); + assert.equal(moment([2011, 0, 8]).week(), 2, 'Jan 8 2011 should be week 2'); + assert.equal(moment([2011, 0, 9]).week(), 3, 'Jan 9 2011 should be week 3'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '੧ ੦੧ ੧', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '੧ ੦੧ ੧', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '੨ ੦੨ ੨', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '੨ ੦੨ ੨', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '੩ ੦੩ ੩', 'Jan 15 2012 should be week 3'); +}); + +test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } +}); + +test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } +}); + +test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('pl'); + +test('parse', function (assert) { + var tests = 'styczeń stycznia sty_luty lutego lut_marzec marca mar_kwiecień kwietnia kwi_maj maja maj_czerwiec czerwca cze_lipiec lipca lip_sierpień sierpnia sie_wrzesień września wrz_październik października paź_listopad listopada lis_grudzień grudnia gru'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][2], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][2], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][2].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][2].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('parse strict', function (assert) { + var tests = 'styczeń stycznia sty_luty lutego lut_marzec marca mar_kwiecień kwietnia kwi_maj maja maj_czerwiec czerwca cze_lipiec lipca lip_sierpień sierpnia sie_wrzesień września wrz_październik października paź_listopad listopada lis_grudzień grudnia gru'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm, true).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][2], 'MMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][2].toLocaleLowerCase(), 'MMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][2].toLocaleUpperCase(), 'MMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'niedziela, luty 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'ndz, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 luty lut'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. niedziela ndz Nd'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 lutego 2010'], + ['LLL', '14 lutego 2010 15:25'], + ['LLLL', 'niedziela, 14 lutego 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 lut 2010'], + ['lll', '14 lut 2010 15:25'], + ['llll', 'ndz, 14 lut 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'styczeń sty_luty lut_marzec mar_kwiecień kwi_maj maj_czerwiec cze_lipiec lip_sierpień sie_wrzesień wrz_październik paź_listopad lis_grudzień gru'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'niedziela ndz Nd_poniedziałek pon Pn_wtorek wt Wt_środa śr Śr_czwartek czw Cz_piątek pt Pt_sobota sob So'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'kilka sekund', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minuta', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minuta', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuty', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuty', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'godzina', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'godzina', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 godziny', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 godzin', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 godzin', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 dzień', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 dzień', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dni', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 dzień', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dni', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dni', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'miesiąc', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'miesiąc', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'miesiąc', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 miesiące', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 miesiące', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 miesiące', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'miesiąc', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 miesięcy', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'rok', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 lata', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'rok', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 lat', '5 years = 5 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 112}), true), '112 lat', '112 years = 112 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 122}), true), '122 lata', '122 years = 122 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 213}), true), '213 lat', '213 years = 213 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 223}), true), '223 lata', '223 years = 223 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'za kilka sekund', 'prefix'); + assert.equal(moment(0).from(30000), 'kilka sekund temu', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'kilka sekund temu', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'za kilka sekund', 'in a few seconds'); + assert.equal(moment().add({h: 1}).fromNow(), 'za godzinę', 'in an hour'); + assert.equal(moment().add({d: 5}).fromNow(), 'za 5 dni', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Dziś o 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Dziś o 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Dziś o 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Jutro o 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Dziś o 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Wczoraj o 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[W] dddd [o] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[W] dddd [o] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[W] dddd [o] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.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'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('pt-br'); + +test('parse', function (assert) { + var tests = 'janeiro jan_fevereiro fev_março mar_abril abr_maio mai_junho jun_julho jul_agosto ago_setembro set_outubro out_novembro nov_dezembro dez'.split('_'), i; + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domingo, Fevereiro 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'Dom, 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 Fevereiro Fev'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd', '0 0º Domingo Dom'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '8 8º 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 de Fevereiro de 2010'], + ['LLL', '14 de Fevereiro de 2010 às 15:25'], + ['LLLL', 'Domingo, 14 de Fevereiro de 2010 às 15:25'], + ['l', '14/2/2010'], + ['ll', '14 de Fev de 2010'], + ['lll', '14 de Fev de 2010 às 15:25'], + ['llll', 'Dom, 14 de Fev de 2010 às 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); +}); + +test('format month', function (assert) { + var expected = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Domingo Dom Do_Segunda-feira Seg 2ª_Terça-feira Ter 3ª_Quarta-feira Qua 4ª_Quinta-feira Qui 5ª_Sexta-feira Sex 6ª_Sábado Sáb Sá'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'poucos segundos', '44 seconds = seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'um minuto', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'um minuto', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutos', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutos', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'uma hora', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'uma hora', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horas', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horas', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horas', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'um dia', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'um dia', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dias', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'um dia', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dias', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dias', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'um mês', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'um mês', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'um mês', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meses', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meses', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meses', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'um mês', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meses', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'um ano', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 anos', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'um ano', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 anos', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'em poucos segundos', 'prefix'); + assert.equal(moment(0).from(30000), 'poucos segundos atrás', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'em poucos segundos', 'in seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'em 5 dias', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Hoje às 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Hoje às 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Hoje às 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Amanhã às 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hoje às 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ontem às 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1º', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1º', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2º', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2º', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3º', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('pt'); + +test('parse', function (assert) { + var tests = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domingo, Fevereiro 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'Dom, 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 Fevereiro Fev'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd', '0 0º Domingo Dom'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '6 6º 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 de Fevereiro de 2010'], + ['LLL', '14 de Fevereiro de 2010 15:25'], + ['LLLL', 'Domingo, 14 de Fevereiro de 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 de Fev de 2010'], + ['lll', '14 de Fev de 2010 15:25'], + ['llll', 'Dom, 14 de Fev de 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); +}); + +test('format month', function (assert) { + var expected = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Domingo Dom Do_Segunda-Feira Seg 2ª_Terça-Feira Ter 3ª_Quarta-Feira Qua 4ª_Quinta-Feira Qui 5ª_Sexta-Feira Sex 6ª_Sábado Sáb Sá'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'segundos', '44 seconds = seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'um minuto', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'um minuto', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutos', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutos', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'uma hora', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'uma hora', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horas', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horas', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horas', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'um dia', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'um dia', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dias', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'um dia', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dias', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dias', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'um mês', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'um mês', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'um mês', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meses', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meses', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meses', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'um mês', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meses', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'um ano', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 anos', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'um ano', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 anos', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'em segundos', 'prefix'); + assert.equal(moment(0).from(30000), 'há segundos', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'em segundos', 'in seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'em 5 dias', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Hoje às 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Hoje às 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Hoje às 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Amanhã às 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hoje às 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ontem às 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ro'); + +test('parse', function (assert) { + var tests = 'ianuarie ian._februarie febr._martie mart._aprilie apr._mai mai_iunie iun._iulie iul._august aug._septembrie sept._octombrie oct._noiembrie nov._decembrie dec.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss A', 'duminică, februarie 14 2010, 3:25:50 PM'], + ['ddd, hA', 'Dum, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 februarie febr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 duminică Dum Du'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[a] DDDo[a zi a anului]', 'a 45a zi a anului'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 februarie 2010'], + ['LLL', '14 februarie 2010 15:25'], + ['LLLL', 'duminică, 14 februarie 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 febr. 2010'], + ['lll', '14 febr. 2010 15:25'], + ['llll', 'Dum, 14 febr. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'ianuarie ian._februarie febr._martie mart._aprilie apr._mai mai_iunie iun._iulie iul._august aug._septembrie sept._octombrie oct._noiembrie nov._decembrie dec.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'duminică Dum Du_luni Lun Lu_marți Mar Ma_miercuri Mie Mi_joi Joi Jo_vineri Vin Vi_sâmbătă Sâm Sâ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'câteva secunde', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minut', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minut', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minute', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 de minute', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'o oră', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'o oră', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ore', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ore', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 de ore', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'o zi', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'o zi', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 zile', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'o zi', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 zile', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 de zile', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'o lună', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'o lună', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'o lună', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 luni', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 luni', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 luni', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'o lună', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 luni', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un an', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ani', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un an', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ani', '5 years = 5 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 19}), true), '19 ani', '19 years = 19 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 20}), true), '20 de ani', '20 years = 20 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 100}), true), '100 de ani', '100 years = 100 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 101}), true), '101 ani', '101 years = 101 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 119}), true), '119 ani', '119 years = 119 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 120}), true), '120 de ani', '120 years = 120 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 219}), true), '219 ani', '219 years = 219 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 220}), true), '220 de ani', '220 years = 220 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'peste câteva secunde', 'prefix'); + assert.equal(moment(0).from(30000), 'câteva secunde în urmă', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'câteva secunde în urmă', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'peste câteva secunde', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'peste 5 zile', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'azi la 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'azi la 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'azi la 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'mâine la 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'azi la 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ieri la 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [la] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [la] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [la] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ru'); + +test('parse', function (assert) { + var tests = 'январь янв._февраль февр._март март_апрель апр._май май_июнь июнь_июль июль_август авг._сентябрь сент._октябрь окт._ноябрь нояб._декабрь дек.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + function equalTestStrict(input, mmm, monthIndex) { + assert.equal(moment(input, mmm, true).month(), monthIndex, input + ' ' + mmm + ' should be strict month ' + (monthIndex + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + + equalTestStrict(tests[i][1], 'MMM', i); + equalTestStrict(tests[i][0], 'MMMM', i); + equalTestStrict(tests[i][1].toLocaleLowerCase(), 'MMM', i); + equalTestStrict(tests[i][1].toLocaleUpperCase(), 'MMM', i); + equalTestStrict(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTestStrict(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('parse exceptional case', function (assert) { + assert.equal(moment('11 Мая 1989', ['DD MMMM YYYY']).format('DD-MM-YYYY'), '11-05-1989'); +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'воскресенье, 14-го февраля 2010, 15:25:50'], + ['ddd, h A', 'вс, 3 дня'], + ['M Mo MM MMMM MMM', '2 2-й 02 февраль февр.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-го 14'], + ['d do dddd ddd dd', '0 0-й воскресенье вс вс'], + ['DDD DDDo DDDD', '45 45-й 045'], + ['w wo ww', '7 7-я 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'дня дня'], + ['DDDo [день года]', '45-й день года'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 февраля 2010 г.'], + ['LLL', '14 февраля 2010 г., 15:25'], + ['LLLL', 'воскресенье, 14 февраля 2010 г., 15:25'], + ['l', '14.2.2010'], + ['ll', '14 февр. 2010 г.'], + ['lll', '14 февр. 2010 г., 15:25'], + ['llll', 'вс, 14 февр. 2010 г., 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format meridiem', function (assert) { + assert.equal(moment([2012, 11, 28, 0, 0]).format('A'), 'ночи', 'night'); + assert.equal(moment([2012, 11, 28, 3, 59]).format('A'), 'ночи', 'night'); + assert.equal(moment([2012, 11, 28, 4, 0]).format('A'), 'утра', 'morning'); + assert.equal(moment([2012, 11, 28, 11, 59]).format('A'), 'утра', 'morning'); + assert.equal(moment([2012, 11, 28, 12, 0]).format('A'), 'дня', 'afternoon'); + assert.equal(moment([2012, 11, 28, 16, 59]).format('A'), 'дня', 'afternoon'); + assert.equal(moment([2012, 11, 28, 17, 0]).format('A'), 'вечера', 'evening'); + assert.equal(moment([2012, 11, 28, 23, 59]).format('A'), 'вечера', 'evening'); +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-й', '1-й'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-й', '2-й'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-й', '3-й'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-й', '4-й'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-й', '5-й'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-й', '6-й'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-й', '7-й'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-й', '8-й'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-й', '9-й'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-й', '10-й'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-й', '11-й'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-й', '12-й'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-й', '13-й'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-й', '14-й'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-й', '15-й'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-й', '16-й'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-й', '17-й'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-й', '18-й'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-й', '19-й'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-й', '20-й'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-й', '21-й'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-й', '22-й'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-й', '23-й'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-й', '24-й'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-й', '25-й'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-й', '26-й'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-й', '27-й'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-й', '28-й'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-й', '29-й'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-й', '30-й'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-й', '31-й'); +}); + +test('format month', function (assert) { + var expected = 'январь янв._февраль февр._март март_апрель апр._май май_июнь июнь_июль июль_август авг._сентябрь сент._октябрь окт._ноябрь нояб._декабрь дек.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format month case', function (assert) { + var months = { + 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + assert.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]); + } +}); + +test('format month short case', function (assert) { + var monthsShort = { + 'nominative': 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_'), + 'accusative': 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2011, i, 1]).format('D MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]); + assert.equal(moment([2011, i, 1]).format('MMM'), monthsShort.nominative[i], '1 ' + monthsShort.nominative[i]); + } +}); + +test('format month case with escaped symbols', function (assert) { + var months = { + 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2013, i, 1]).format('D[] MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + assert.equal(moment([2013, i, 1]).format('[<i>]D[</i>] [<b>]MMMM[</b>]'), '<i>1</i> <b>' + months.accusative[i] + '</b>', '1 <b>' + months.accusative[i] + '</b>'); + assert.equal(moment([2013, i, 1]).format('D[-й день] MMMM'), '1-й день ' + months.accusative[i], '1-й день ' + months.accusative[i]); + assert.equal(moment([2013, i, 1]).format('D, MMMM'), '1, ' + months.nominative[i], '1, ' + months.nominative[i]); + } +}); + +test('format month short case with escaped symbols', function (assert) { + var monthsShort = { + 'nominative': 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_'), + 'accusative': 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2013, i, 1]).format('D[] MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]); + assert.equal(moment([2013, i, 1]).format('[<i>]D[</i>] [<b>]MMM[</b>]'), '<i>1</i> <b>' + monthsShort.accusative[i] + '</b>', '1 <b>' + monthsShort.accusative[i] + '</b>'); + assert.equal(moment([2013, i, 1]).format('D[-й день] MMM'), '1-й день ' + monthsShort.accusative[i], '1-й день ' + monthsShort.accusative[i]); + assert.equal(moment([2013, i, 1]).format('D, MMM'), '1, ' + monthsShort.nominative[i], '1, ' + monthsShort.nominative[i]); + } +}); + +test('format week', function (assert) { + var expected = 'воскресенье вс вс_понедельник пн пн_вторник вт вт_среда ср ср_четверг чт чт_пятница пт пт_суббота сб сб'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'несколько секунд', '44 seconds = seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'минута', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'минута', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минуты', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 31}), true), '31 минута', '31 minutes = 31 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минуты', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'час', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'час', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 часа', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 часов', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 час', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'день', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'день', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дня', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'день', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 дней', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), '11 дней', '11 days = 11 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), '21 день', '21 days = 21 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 дней', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'месяц', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'месяц', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'месяц', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 месяца', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 месяца', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 месяца', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'месяц', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 месяцев', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'год', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 года', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'год', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 лет', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'через несколько секунд', 'prefix'); + assert.equal(moment(0).from(30000), 'несколько секунд назад', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'через несколько секунд', 'in seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'через 5 дней', 'in 5 days'); + assert.equal(moment().add({m: 31}).fromNow(), 'через 31 минуту', 'in 31 minutes = in 31 minutes'); + assert.equal(moment().subtract({m: 31}).fromNow(), '31 минуту назад', '31 minutes ago = 31 minutes ago'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Сегодня в 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Сегодня в 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Сегодня в 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Завтра в 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Сегодня в 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Вчера в 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m, now; + + function makeFormatNext(d) { + switch (d.day()) { + case 0: + return '[В следующее] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В следующий] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В следующую] dddd [в] LT'; + } + } + + function makeFormatThis(d) { + if (d.day() === 2) { + return '[Во] dddd [в] LT'; + } + else { + return '[В] dddd [в] LT'; + } + } + + now = moment().startOf('week'); + for (i = 2; i < 7; i++) { + m = moment(now).add({d: i}); + assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today + ' + i + ' days end of day'); + } + + now = moment().endOf('week'); + for (i = 2; i < 7; i++) { + m = moment(now).add({d: i}); + assert.equal(m.calendar(now), m.format(makeFormatNext(m)), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(now), m.format(makeFormatNext(m)), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(now), m.format(makeFormatNext(m)), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m, now; + + function makeFormatLast(d) { + switch (d.day()) { + case 0: + return '[В прошлое] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd [в] LT'; + } + } + + function makeFormatThis(d) { + if (d.day() === 2) { + return '[Во] dddd [в] LT'; + } + else { + return '[В] dddd [в] LT'; + } + } + + now = moment().startOf('week'); + for (i = 2; i < 7; i++) { + m = moment(now).subtract({d: i}); + assert.equal(m.calendar(now), m.format(makeFormatLast(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(now), m.format(makeFormatLast(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(now), m.format(makeFormatLast(m)), 'Today - ' + i + ' days end of day'); + } + + now = moment().endOf('week'); + for (i = 2; i < 7; i++) { + m = moment(now).subtract({d: i}); + assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-я', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-я', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-я', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-я', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-я', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('sd'); + +var months = [ + 'جنوري', + 'فيبروري', + 'مارچ', + 'اپريل', + 'مئي', + 'جون', + 'جولاءِ', + 'آگسٽ', + 'سيپٽمبر', + 'آڪٽوبر', + 'نومبر', + 'ڊسمبر' +]; +var days = [ + 'آچر', + 'سومر', + 'اڱارو', + 'اربع', + 'خميس', + 'جمع', + 'ڇنڇر' +]; + +test('parse', function (assert) { + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (var i = 0; i < 12; i++) { + equalTest(months[i], 'MMM', i); + equalTest(months[i], 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'آچر، فيبروري 14 2010، 3:25:50 شام'], + ['ddd, hA', 'آچر، 3شام'], + ['M Mo MM MMMM MMM', '2 2 02 فيبروري فيبروري'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 آچر آچر آچر'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'شام شام'], + ['[سال جو] DDDo[ڏينهن]', 'سال جو 45ڏينهن'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 فيبروري 2010'], + ['LLL', '14 فيبروري 2010 15:25'], + ['LLLL', 'آچر، 14 فيبروري 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 فيبروري 2010'], + ['lll', '14 فيبروري 2010 15:25'], + ['llll', 'آچر، 14 فيبروري 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + for (var i = 0; i < months.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), months[i] + ' ' + months[i], months[i] + ' ' + months[i]); + } +}); + +test('format week', function (assert) { + for (var i = 0; i < days.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), days[i] + ' ' + days[i] + ' ' + days[i], days[i] + ' ' + days[i] + ' ' + days[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'چند سيڪنڊ', '44 seconds = چند سيڪنڊ'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'هڪ منٽ', '45 seconds = هڪ منٽ'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'هڪ منٽ', '89 seconds = هڪ منٽ'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 منٽ', '90 seconds = 2 منٽ'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 منٽ', '44 minutes = 44 منٽ'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'هڪ ڪلاڪ', '45 minutes = هڪ ڪلاڪ'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'هڪ ڪلاڪ', '89 minutes = هڪ ڪلاڪ'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ڪلاڪ', '90 minutes = 2 ڪلاڪ'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ڪلاڪ', '5 hours = 5 ڪلاڪ'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ڪلاڪ', '21 hours = 21 ڪلاڪ'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'هڪ ڏينهن', '22 hours = هڪ ڏينهن'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'هڪ ڏينهن', '35 hours = هڪ ڏينهن'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ڏينهن', '36 hours = 2 ڏينهن'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'هڪ ڏينهن', '1 day = هڪ ڏينهن'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ڏينهن', '5 days = 5 ڏينهن'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ڏينهن', '25 days = 25 ڏينهن'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'هڪ مهينو', '26 days = هڪ مهينو'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'هڪ مهينو', '30 days = هڪ مهينو'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'هڪ مهينو', '43 days = هڪ مهينو'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 مهينا', '46 days = 2 مهينا'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 مهينا', '75 days = 2 مهينا'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 مهينا', '76 days = 3 مهينا'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'هڪ مهينو', '1 month = هڪ مهينو'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 مهينا', '5 months = 5 مهينا'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'هڪ سال', '345 days = هڪ سال'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 سال', '548 days = 2 سال'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'هڪ سال', '1 year = هڪ سال'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 سال', '5 years = 5 سال'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'چند سيڪنڊ پوء', 'prefix'); + assert.equal(moment(0).from(30000), 'چند سيڪنڊ اڳ', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'چند سيڪنڊ اڳ', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'چند سيڪنڊ پوء', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 ڏينهن پوء', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'اڄ 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'اڄ 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'اڄ 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'سڀاڻي 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'اڄ 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ڪالهه 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [اڳين هفتي تي] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [اڳين هفتي تي] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [اڳين هفتي تي] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[گزريل هفتي] dddd [تي] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[گزريل هفتي] dddd [تي] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[گزريل هفتي] dddd [تي] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('se'); + +test('parse', function (assert) { + var i, + tests = 'ođđajagemánnu ođđj_guovvamánnu guov_njukčamánnu njuk_cuoŋománnu cuo_miessemánnu mies_geassemánnu geas_suoidnemánnu suoi_borgemánnu borg_čakčamánnu čakč_golggotmánnu golg_skábmamánnu skáb_juovlamánnu juov'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'sotnabeaivi, guovvamánnu 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'sotn, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 guovvamánnu guov'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. sotnabeaivi sotn s'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[jagi] DDDo [beaivi]', 'jagi 45. beaivi'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', 'guovvamánnu 14. b. 2010'], + ['LLL', 'guovvamánnu 14. b. 2010 ti. 15:25'], + ['LLLL', 'sotnabeaivi, guovvamánnu 14. b. 2010 ti. 15:25'], + ['l', '14.2.2010'], + ['ll', 'guov 14. b. 2010'], + ['lll', 'guov 14. b. 2010 ti. 15:25'], + ['llll', 'sotn, guov 14. b. 2010 ti. 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var i, + expected = 'ođđajagemánnu ođđj_guovvamánnu guov_njukčamánnu njuk_cuoŋománnu cuo_miessemánnu mies_geassemánnu geas_suoidnemánnu suoi_borgemánnu borg_čakčamánnu čakč_golggotmánnu golg_skábmamánnu skáb_juovlamánnu juov'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'sotnabeaivi sotn s_vuossárga vuos v_maŋŋebárga maŋ m_gaskavahkku gask g_duorastat duor d_bearjadat bear b_lávvardat láv L'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'moadde sekunddat', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'okta minuhta', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'okta minuhta', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuhtat', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuhtat', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'okta diimmu', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'okta diimmu', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 diimmut', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 diimmut', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 diimmut', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'okta beaivi', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'okta beaivi', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 beaivvit', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'okta beaivi', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 beaivvit', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 beaivvit', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'okta mánnu', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'okta mánnu', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'okta mánnu', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mánut', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mánut', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mánut', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'okta mánnu', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mánut', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'okta jahki', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jagit', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'okta jahki', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jagit', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'moadde sekunddat geažes', 'prefix'); + assert.equal(moment(0).from(30000), 'maŋit moadde sekunddat', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'maŋit moadde sekunddat', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'moadde sekunddat geažes', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 beaivvit geažes', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'otne ti 12:00', 'Today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'otne ti 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'otne ti 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'ihttin ti 12:00', 'Tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'otne ti 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ikte ti 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [ti] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [ti] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [ti] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[ovddit] dddd [ti] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[ovddit] dddd [ti] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[ovddit] dddd [ti] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('si'); + +/*jshint -W100*/ +test('parse', function (assert) { + var tests = 'ජනවාරි ජන_පෙබරවාරි පෙබ_මාර්තු මාර්_අප්රේල් අප්_මැයි මැයි_ජූනි ජූනි_ජූලි ජූලි_අගෝස්තු අගෝ_සැප්තැම්බර් සැප්_ඔක්තෝබර් ඔක්_නොවැම්බර් නොවැ_දෙසැම්බර් දෙසැ'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['YYYY MMMM Do dddd, a h:mm:ss', '2010 පෙබරවාරි 14 වැනි ඉරිදා, ප.ව. 3:25:50'], + ['YYYY MMMM Do dddd, a h:mm:ss', '2010 පෙබරවාරි 14 වැනි ඉරිදා, ප.ව. 3:25:50'], + ['ddd, A h', 'ඉරි, පස් වරු 3'], + ['M Mo MM MMMM MMM', '2 2 වැනි 02 පෙබරවාරි පෙබ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 වැනි 14'], + ['d do dddd ddd dd', '0 0 වැනි ඉරිදා ඉරි ඉ'], + ['DDD DDDo DDDD', '45 45 වැනි 045'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'ප.ව. පස් වරු'], + ['[වසරේ] DDDo [දිනය]', 'වසරේ 45 වැනි දිනය'], + ['LTS', 'ප.ව. 3:25:50'], + ['LT', 'ප.ව. 3:25'], + ['L', '2010/02/14'], + ['LL', '2010 පෙබරවාරි 14'], + ['LLL', '2010 පෙබරවාරි 14, ප.ව. 3:25'], + ['LLLL', '2010 පෙබරවාරි 14 වැනි ඉරිදා, ප.ව. 3:25:50'], + ['l', '2010/2/14'], + ['ll', '2010 පෙබ 14'], + ['lll', '2010 පෙබ 14, ප.ව. 3:25'], + ['llll', '2010 පෙබ 14 වැනි ඉරි, ප.ව. 3:25:50'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1 වැනි', '1 වැනි'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2 වැනි', '2 වැනි'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3 වැනි', '3 වැනි'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4 වැනි', '4 වැනි'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5 වැනි', '5 වැනි'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6 වැනි', '6 වැනි'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7 වැනි', '7 වැනි'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8 වැනි', '8 වැනි'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9 වැනි', '9 වැනි'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10 වැනි', '10 වැනි'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11 වැනි', '11 වැනි'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12 වැනි', '12 වැනි'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13 වැනි', '13 වැනි'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14 වැනි', '14 වැනි'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15 වැනි', '15 වැනි'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16 වැනි', '16 වැනි'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17 වැනි', '17 වැනි'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18 වැනි', '18 වැනි'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19 වැනි', '19 වැනි'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20 වැනි', '20 වැනි'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21 වැනි', '21 වැනි'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22 වැනි', '22 වැනි'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23 වැනි', '23 වැනි'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24 වැනි', '24 වැනි'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25 වැනි', '25 වැනි'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26 වැනි', '26 වැනි'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27 වැනි', '27 වැනි'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28 වැනි', '28 වැනි'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29 වැනි', '29 වැනි'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30 වැනි', '30 වැනි'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31 වැනි', '31 වැනි'); +}); + +test('format month', function (assert) { + var expected = 'ජනවාරි ජන_පෙබරවාරි පෙබ_මාර්තු මාර්_අප්රේල් අප්_මැයි මැයි_ජූනි ජූනි_ජූලි ජූලි_අගෝස්තු අගෝ_සැප්තැම්බර් සැප්_ඔක්තෝබර් ඔක්_නොවැම්බර් නොවැ_දෙසැම්බර් දෙසැ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'ඉරිදා ඉරි ඉ_සඳුදා සඳු ස_අඟහරුවාදා අඟ අ_බදාදා බදා බ_බ්රහස්පතින්දා බ්රහ බ්ර_සිකුරාදා සිකු සි_සෙනසුරාදා සෙන සෙ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'තත්පර කිහිපය', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'මිනිත්තුව', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'මිනිත්තුව', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'මිනිත්තු 2', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'මිනිත්තු 44', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'පැය', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'පැය', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'පැය 2', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'පැය 5', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'පැය 21', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'දිනය', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'දිනය', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'දින 2', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'දිනය', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'දින 5', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'දින 25', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'මාසය', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'මාසය', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'මාසය', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'මාස 2', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'මාස 2', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'මාස 3', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'මාසය', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'මාස 5', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'වසර', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'වසර 2', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'වසර', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'වසර 5', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'තත්පර කිහිපයකින්', 'prefix'); + assert.equal(moment(0).from(30000), 'තත්පර කිහිපයකට පෙර', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'තත්පර කිහිපයකට පෙර', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'තත්පර කිහිපයකින්', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'දින 5කින්', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'අද ප.ව. 12:00ට', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'අද ප.ව. 12:25ට', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'අද ප.ව. 1:00ට', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'හෙට ප.ව. 12:00ට', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'අද පෙ.ව. 11:00ට', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ඊයේ ප.ව. 12:00ට', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd LT[ට]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd LT[ට]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd LT[ට]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[පසුගිය] dddd LT[ට]'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[පසුගිය] dddd LT[ට]'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[පසුගිය] dddd LT[ට]'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('sk'); + +test('parse', function (assert) { + var tests = 'január jan._február feb._marec mar._apríl apr._máj máj_jún jún._júl júl._august aug._september sep._október okt._november nov._december dec.'.split('_'), i; + function equalTest(input, mmm, monthIndex) { + assert.equal(moment(input, mmm).month(), monthIndex, input + ' should be month ' + (monthIndex + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss', 'nedeľa, február 14. 2010, 3:25:50'], + ['ddd, h', 'ne, 3'], + ['M Mo MM MMMM MMM', '2 2. 02 február feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedeľa ne ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['DDDo [deň v roku]', '45. deň v roku'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. február 2010'], + ['LLL', '14. február 2010 15:25'], + ['LLLL', 'nedeľa 14. február 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. feb 2010'], + ['lll', '14. feb 2010 15:25'], + ['llll', 'ne 14. feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'január jan_február feb_marec mar_apríl apr_máj máj_jún jún_júl júl_august aug_september sep_október okt_november nov_december dec'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'nedeľa ne ne_pondelok po po_utorok ut ut_streda st st_štvrtok št št_piatok pi pi_sobota so so'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'pár sekúnd', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minúta', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minúta', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minúty', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minút', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'hodina', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'hodina', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hodiny', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hodín', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hodín', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'deň', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'deň', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dni', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'deň', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dní', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dní', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mesiac', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mesiac', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mesiac', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mesiace', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mesiace', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mesiace', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mesiac', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesiacov', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'rok', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 roky', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'rok', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 rokov', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'za pár sekúnd', 'prefix'); + assert.equal(moment(0).from(30000), 'pred pár sekundami', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'pred pár sekundami', 'now from now should display as in the past'); +}); + +test('fromNow (future)', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'za pár sekúnd', 'in a few seconds'); + assert.equal(moment().add({m: 1}).fromNow(), 'za minútu', 'in a minute'); + assert.equal(moment().add({m: 3}).fromNow(), 'za 3 minúty', 'in 3 minutes'); + assert.equal(moment().add({m: 10}).fromNow(), 'za 10 minút', 'in 10 minutes'); + assert.equal(moment().add({h: 1}).fromNow(), 'za hodinu', 'in an hour'); + assert.equal(moment().add({h: 3}).fromNow(), 'za 3 hodiny', 'in 3 hours'); + assert.equal(moment().add({h: 10}).fromNow(), 'za 10 hodín', 'in 10 hours'); + assert.equal(moment().add({d: 1}).fromNow(), 'za deň', 'in a day'); + assert.equal(moment().add({d: 3}).fromNow(), 'za 3 dni', 'in 3 days'); + assert.equal(moment().add({d: 10}).fromNow(), 'za 10 dní', 'in 10 days'); + assert.equal(moment().add({M: 1}).fromNow(), 'za mesiac', 'in a month'); + assert.equal(moment().add({M: 3}).fromNow(), 'za 3 mesiace', 'in 3 months'); + assert.equal(moment().add({M: 10}).fromNow(), 'za 10 mesiacov', 'in 10 months'); + assert.equal(moment().add({y: 1}).fromNow(), 'za rok', 'in a year'); + assert.equal(moment().add({y: 3}).fromNow(), 'za 3 roky', 'in 3 years'); + assert.equal(moment().add({y: 10}).fromNow(), 'za 10 rokov', 'in 10 years'); +}); + +test('fromNow (past)', function (assert) { + assert.equal(moment().subtract({s: 30}).fromNow(), 'pred pár sekundami', 'a few seconds ago'); + assert.equal(moment().subtract({m: 1}).fromNow(), 'pred minútou', 'a minute ago'); + assert.equal(moment().subtract({m: 3}).fromNow(), 'pred 3 minútami', '3 minutes ago'); + assert.equal(moment().subtract({m: 10}).fromNow(), 'pred 10 minútami', '10 minutes ago'); + assert.equal(moment().subtract({h: 1}).fromNow(), 'pred hodinou', 'an hour ago'); + assert.equal(moment().subtract({h: 3}).fromNow(), 'pred 3 hodinami', '3 hours ago'); + assert.equal(moment().subtract({h: 10}).fromNow(), 'pred 10 hodinami', '10 hours ago'); + assert.equal(moment().subtract({d: 1}).fromNow(), 'pred dňom', 'a day ago'); + assert.equal(moment().subtract({d: 3}).fromNow(), 'pred 3 dňami', '3 days ago'); + assert.equal(moment().subtract({d: 10}).fromNow(), 'pred 10 dňami', '10 days ago'); + assert.equal(moment().subtract({M: 1}).fromNow(), 'pred mesiacom', 'a month ago'); + assert.equal(moment().subtract({M: 3}).fromNow(), 'pred 3 mesiacmi', '3 months ago'); + assert.equal(moment().subtract({M: 10}).fromNow(), 'pred 10 mesiacmi', '10 months ago'); + assert.equal(moment().subtract({y: 1}).fromNow(), 'pred rokom', 'a year ago'); + assert.equal(moment().subtract({y: 3}).fromNow(), 'pred 3 rokmi', '3 years ago'); + assert.equal(moment().subtract({y: 10}).fromNow(), 'pred 10 rokmi', '10 years ago'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'dnes o 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'dnes o 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'dnes o 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'zajtra o 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'dnes o 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'včera o 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m, nextDay; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + nextDay = ''; + switch (m.day()) { + case 0: + nextDay = 'v nedeľu'; + break; + case 1: + nextDay = 'v pondelok'; + break; + case 2: + nextDay = 'v utorok'; + break; + case 3: + nextDay = 'v stredu'; + break; + case 4: + nextDay = 'vo štvrtok'; + break; + case 5: + nextDay = 'v piatok'; + break; + case 6: + nextDay = 'v sobotu'; + break; + } + assert.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m, lastDay; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + lastDay = ''; + switch (m.day()) { + case 0: + lastDay = 'minulú nedeľu'; + break; + case 1: + lastDay = 'minulý pondelok'; + break; + case 2: + lastDay = 'minulý utorok'; + break; + case 3: + lastDay = 'minulú stredu'; + break; + case 4: + lastDay = 'minulý štvrtok'; + break; + case 5: + lastDay = 'minulý piatok'; + break; + case 6: + lastDay = 'minulú sobotu'; + break; + } + assert.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('humanize duration', function (assert) { + assert.equal(moment.duration(1, 'minutes').humanize(), 'minúta', 'a minute (future)'); + assert.equal(moment.duration(1, 'minutes').humanize(true), 'za minútu', 'in a minute'); + assert.equal(moment.duration(-1, 'minutes').humanize(), 'minúta', 'a minute (past)'); + assert.equal(moment.duration(-1, 'minutes').humanize(true), 'pred minútou', 'a minute ago'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('sl'); + +test('parse', function (assert) { + var tests = 'januar jan._februar feb._marec mar._april apr._maj maj_junij jun._julij jul._avgust avg._september sep._oktober okt._november nov._december dec.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedelja, 14. februar 2010, 3:25:50 pm'], + ['ddd, hA', 'ned., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedelja ned. ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 15:25'], + ['LLLL', 'nedelja, 14. februar 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. feb. 2010'], + ['lll', '14. feb. 2010 15:25'], + ['llll', 'ned., 14. feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'januar jan._februar feb._marec mar._april apr._maj maj._junij jun._julij jul._avgust avg._september sep._oktober okt._november nov._december dec.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'nedelja ned. ne_ponedeljek pon. po_torek tor. to_sreda sre. sr_četrtek čet. če_petek pet. pe_sobota sob. so'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'nekaj sekund', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ena minuta', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ena minuta', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuti', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minut', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ena ura', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ena ura', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 uri', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ur', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ur', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'en dan', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'en dan', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dni', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'en dan', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dni', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dni', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'en mesec', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'en mesec', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'en mesec', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meseca', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meseca', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mesece', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'en mesec', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesecev', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'eno leto', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 leti', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'eno leto', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 let', '5 years = 5 years'); + + assert.equal(start.from(moment([2007, 1, 28]).add({m: 1}), true), 'ena minuta', 'a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 2}), true), '2 minuti', '2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 3}), true), '3 minute', '3 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 4}), true), '4 minute', '4 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 5}), true), '5 minut', '5 minutes'); + + assert.equal(start.from(moment([2007, 1, 28]).add({h: 1}), true), 'ena ura', 'an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 2}), true), '2 uri', '2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 3}), true), '3 ure', '3 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 4}), true), '4 ure', '4 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ur', '5 hours'); + + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'en dan', 'a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 2}), true), '2 dni', '2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 3}), true), '3 dni', '3 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 4}), true), '4 dni', '4 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dni', '5 days'); + + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'en mesec', 'a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 2}), true), '2 meseca', '2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 3}), true), '3 mesece', '3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 4}), true), '4 mesece', '4 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesecev', '5 months'); + + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'eno leto', 'a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 2}), true), '2 leti', '2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 3}), true), '3 leta', '3 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 4}), true), '4 leta', '4 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 let', '5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'čez nekaj sekund', 'prefix'); + assert.equal(moment(0).from(30000), 'pred nekaj sekundami', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'pred nekaj sekundami', 'now from now should display as in the past'); +}); + +test('fromNow (future)', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'čez nekaj sekund', 'in a few seconds'); + assert.equal(moment().add({m: 1}).fromNow(), 'čez eno minuto', 'in a minute'); + assert.equal(moment().add({m: 2}).fromNow(), 'čez 2 minuti', 'in 2 minutes'); + assert.equal(moment().add({m: 3}).fromNow(), 'čez 3 minute', 'in 3 minutes'); + assert.equal(moment().add({m: 4}).fromNow(), 'čez 4 minute', 'in 4 minutes'); + assert.equal(moment().add({m: 5}).fromNow(), 'čez 5 minut', 'in 5 minutes'); + + assert.equal(moment().add({h: 1}).fromNow(), 'čez eno uro', 'in an hour'); + assert.equal(moment().add({h: 2}).fromNow(), 'čez 2 uri', 'in 2 hours'); + assert.equal(moment().add({h: 3}).fromNow(), 'čez 3 ure', 'in 3 hours'); + assert.equal(moment().add({h: 4}).fromNow(), 'čez 4 ure', 'in 4 hours'); + assert.equal(moment().add({h: 5}).fromNow(), 'čez 5 ur', 'in 5 hours'); + + assert.equal(moment().add({d: 1}).fromNow(), 'čez en dan', 'in a day'); + assert.equal(moment().add({d: 2}).fromNow(), 'čez 2 dni', 'in 2 days'); + assert.equal(moment().add({d: 3}).fromNow(), 'čez 3 dni', 'in 3 days'); + assert.equal(moment().add({d: 4}).fromNow(), 'čez 4 dni', 'in 4 days'); + assert.equal(moment().add({d: 5}).fromNow(), 'čez 5 dni', 'in 5 days'); + + assert.equal(moment().add({M: 1}).fromNow(), 'čez en mesec', 'in a month'); + assert.equal(moment().add({M: 2}).fromNow(), 'čez 2 meseca', 'in 2 months'); + assert.equal(moment().add({M: 3}).fromNow(), 'čez 3 mesece', 'in 3 months'); + assert.equal(moment().add({M: 4}).fromNow(), 'čez 4 mesece', 'in 4 months'); + assert.equal(moment().add({M: 5}).fromNow(), 'čez 5 mesecev', 'in 5 months'); + + assert.equal(moment().add({y: 1}).fromNow(), 'čez eno leto', 'in a year'); + assert.equal(moment().add({y: 2}).fromNow(), 'čez 2 leti', 'in 2 years'); + assert.equal(moment().add({y: 3}).fromNow(), 'čez 3 leta', 'in 3 years'); + assert.equal(moment().add({y: 4}).fromNow(), 'čez 4 leta', 'in 4 years'); + assert.equal(moment().add({y: 5}).fromNow(), 'čez 5 let', 'in 5 years'); + + assert.equal(moment().subtract({s: 30}).fromNow(), 'pred nekaj sekundami', 'a few seconds ago'); + + assert.equal(moment().subtract({m: 1}).fromNow(), 'pred eno minuto', 'a minute ago'); + assert.equal(moment().subtract({m: 2}).fromNow(), 'pred 2 minutama', '2 minutes ago'); + assert.equal(moment().subtract({m: 3}).fromNow(), 'pred 3 minutami', '3 minutes ago'); + assert.equal(moment().subtract({m: 4}).fromNow(), 'pred 4 minutami', '4 minutes ago'); + assert.equal(moment().subtract({m: 5}).fromNow(), 'pred 5 minutami', '5 minutes ago'); + + assert.equal(moment().subtract({h: 1}).fromNow(), 'pred eno uro', 'an hour ago'); + assert.equal(moment().subtract({h: 2}).fromNow(), 'pred 2 urama', '2 hours ago'); + assert.equal(moment().subtract({h: 3}).fromNow(), 'pred 3 urami', '3 hours ago'); + assert.equal(moment().subtract({h: 4}).fromNow(), 'pred 4 urami', '4 hours ago'); + assert.equal(moment().subtract({h: 5}).fromNow(), 'pred 5 urami', '5 hours ago'); + + assert.equal(moment().subtract({d: 1}).fromNow(), 'pred enim dnem', 'a day ago'); + assert.equal(moment().subtract({d: 2}).fromNow(), 'pred 2 dnevoma', '2 days ago'); + assert.equal(moment().subtract({d: 3}).fromNow(), 'pred 3 dnevi', '3 days ago'); + assert.equal(moment().subtract({d: 4}).fromNow(), 'pred 4 dnevi', '4 days ago'); + assert.equal(moment().subtract({d: 5}).fromNow(), 'pred 5 dnevi', '5 days ago'); + + assert.equal(moment().subtract({M: 1}).fromNow(), 'pred enim mesecem', 'a month ago'); + assert.equal(moment().subtract({M: 2}).fromNow(), 'pred 2 mesecema', '2 months ago'); + assert.equal(moment().subtract({M: 3}).fromNow(), 'pred 3 meseci', '3 months ago'); + assert.equal(moment().subtract({M: 4}).fromNow(), 'pred 4 meseci', '4 months ago'); + assert.equal(moment().subtract({M: 5}).fromNow(), 'pred 5 meseci', '5 months ago'); + + assert.equal(moment().subtract({y: 1}).fromNow(), 'pred enim letom', 'a year ago'); + assert.equal(moment().subtract({y: 2}).fromNow(), 'pred 2 letoma', '2 years ago'); + assert.equal(moment().subtract({y: 3}).fromNow(), 'pred 3 leti', '3 years ago'); + assert.equal(moment().subtract({y: 4}).fromNow(), 'pred 4 leti', '4 years ago'); + assert.equal(moment().subtract({y: 5}).fromNow(), 'pred 5 leti', '5 years ago'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'danes ob 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'danes ob 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'danes ob 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'jutri ob 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'danes ob 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'včeraj ob 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.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'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.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'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('sq'); + +test('parse', function (assert) { + var i, + tests = 'Janar Jan_Shkurt Shk_Mars Mar_Prill Pri_Maj Maj_Qershor Qer_Korrik Kor_Gusht Gus_Shtator Sht_Tetor Tet_Nëntor Nën_Dhjetor Dhj'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, HH:mm:ss', 'E Diel, Shkurt 14. 2010, 15:25:50'], + ['ddd, HH', 'Die, 15'], + ['M Mo MM MMMM MMM', '2 2. 02 Shkurt Shk'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. E Diel Die D'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'MD MD'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 Shkurt 2010'], + ['LLL', '14 Shkurt 2010 15:25'], + ['LLLL', 'E Diel, 14 Shkurt 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Shk 2010'], + ['lll', '14 Shk 2010 15:25'], + ['llll', 'Die, 14 Shk 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 0, 0]).format('A'), 'PD', 'before dawn'); + assert.equal(moment([2011, 2, 23, 12, 0]).format('A'), 'MD', 'noon'); +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var i, + expected = 'Janar Jan_Shkurt Shk_Mars Mar_Prill Pri_Maj Maj_Qershor Qer_Korrik Kor_Gusht Gus_Shtator Sht_Tetor Tet_Nëntor Nën_Dhjetor Dhj'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'E Diel Die D_E Hënë Hën H_E Martë Mar Ma_E Mërkurë Mër Më_E Enjte Enj E_E Premte Pre P_E Shtunë Sht Sh'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'disa sekonda', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'një minutë', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'një minutë', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuta', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuta', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'një orë', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'një orë', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 orë', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 orë', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 orë', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'një ditë', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'një ditë', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ditë', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'një ditë', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ditë', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ditë', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'një muaj', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'një muaj', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'një muaj', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 muaj', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 muaj', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 muaj', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'një muaj', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 muaj', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'një vit', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 vite', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'një vit', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 vite', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'në disa sekonda', 'prefix'); + assert.equal(moment(0).from(30000), 'disa sekonda më parë', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'disa sekonda më parë', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'në disa sekonda', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'në 5 ditë', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Sot në 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Sot në 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Sot në 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Nesër në 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Sot në 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Dje në 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [në] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [në] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [në] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('sr-cyrl'); + +test('parse', function (assert) { + var tests = 'јануар јан._фебруар феб._март мар._април апр._мај мај_јун јун_јул јул_август авг._септембар сеп._октобар окт._новембар нов._децембар дец.'.split('_'), + i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'недеља, 14. фебруар 2010, 3:25:50 pm'], + ['ddd, hA', 'нед., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 фебруар феб.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. недеља нед. не'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. фебруар 2010'], + ['LLL', '14. фебруар 2010 15:25'], + ['LLLL', 'недеља, 14. фебруар 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. феб. 2010'], + ['lll', '14. феб. 2010 15:25'], + ['llll', 'нед., 14. феб. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'јануар јан._фебруар феб._март мар._април апр._мај мај_јун јун_јул јул_август авг._септембар сеп._октобар окт._новембар нов._децембар дец.'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'недеља нед. не_понедељак пон. по_уторак уто. ут_среда сре. ср_четвртак чет. че_петак пет. пе_субота суб. су'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'неколико секунди', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'један минут', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'један минут', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минуте', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минута', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'један сат', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'један сат', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 сата', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 сати', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 сати', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'дан', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'дан', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дана', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'дан', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 дана', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 дана', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'месец', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'месец', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'месец', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 месеца', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 месеца', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 месеца', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'месец', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 месеци', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'годину', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 године', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'годину', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 година', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'за неколико секунди', 'prefix'); + assert.equal(moment(0).from(30000), 'пре неколико секунди', 'prefix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'пре неколико секунди', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'за неколико секунди', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'за 5 дана', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'данас у 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'данас у 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'данас у 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'сутра у 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'данас у 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'јуче у 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + var lastWeekDay = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT' + ]; + + return lastWeekDay[d.day()]; + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('sr'); + +test('parse', function (assert) { + var tests = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'), + i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedelja, 14. februar 2010, 3:25:50 pm'], + ['ddd, hA', 'ned., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedelja ned. ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 15:25'], + ['LLLL', 'nedelja, 14. februar 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. feb. 2010'], + ['lll', '14. feb. 2010 15:25'], + ['llll', 'ned., 14. feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'nedelja ned. ne_ponedeljak pon. po_utorak uto. ut_sreda sre. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'nekoliko sekundi', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'jedan minut', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'jedan minut', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minute', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuta', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'jedan sat', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'jedan sat', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 sata', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 sati', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 sati', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'dan', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'dan', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dana', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'dan', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dana', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dana', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mesec', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mesec', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mesec', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meseca', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meseca', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meseca', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mesec', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meseci', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'godinu', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 godine', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'godinu', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 godina', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'za nekoliko sekundi', 'prefix'); + assert.equal(moment(0).from(30000), 'pre nekoliko sekundi', 'prefix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'pre nekoliko sekundi', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'za nekoliko sekundi', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'za 5 dana', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'danas u 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'danas u 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'danas u 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'sutra u 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'danas u 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'juče u 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.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'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + var lastWeekDay = [ + '[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 lastWeekDay[d.day()]; + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ss'); + +test('parse', function (assert) { + var tests = "Bhimbidvwane Bhi_Indlovana Ina_Indlov'lenkhulu Inu_Mabasa Mab_Inkhwekhweti Ink_Inhlaba Inh_Kholwane Kho_Ingci Igc_Inyoni Iny_Imphala Imp_Lweti lwe_Ingongoni Igo".split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('parse meridiem', function (assert) { + var i, + b = moment(), + meridiemTests = [ + // h a patterns, expected hours, isValid + ['10 ekuseni', 10, true], + ['11 emini', 11, true], + ['3 entsambama', 15, true], + ['4 entsambama', 16, true], + ['6 entsambama', 18, true], + ['7 ebusuku', 19, true], + ['12 ebusuku', 0, true], + ['10 am', 10, false], + ['10 pm', 10, false] + ], + parsed; + + // test that a formatted moment including meridiem string can be parsed back to the same moment + assert.ok(b.isSame(moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'ss', true), 'seconds'), b.format('h:mm:ss a') + ' should be equal to ' + moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'ss', true).format('h:mm:ss a')); + + // test that a formatted moment having a meridiem string can be parsed with strict flag + assert.ok(moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'ss', true).isValid(), b.format('h:mm:ss a') + ' should be parsed as valid'); + + for (i = 0; i < meridiemTests.length; i++) { + parsed = moment(meridiemTests[i][0], 'h a', 'ss', true); + assert.equal(parsed.isValid(), meridiemTests[i][2], 'validity for ' + meridiemTests[i][0]); + if (parsed.isValid()) { + assert.equal(parsed.hours(), meridiemTests[i][1], 'hours for ' + meridiemTests[i][0]); + } + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Lisontfo, Indlovana 14 2010, 3:25:50 entsambama'], + ['ddd, h A', 'Lis, 3 entsambama'], + ['M Mo MM MMMM MMM', '2 2 02 Indlovana Ina'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Lisontfo Lis Li'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'entsambama entsambama'], + ['[Lilanga] DDDo [lilanga lelinyaka]', 'Lilanga 45 lilanga lelinyaka'], + ['LTS', '3:25:50 entsambama'], + ['L', '14/02/2010'], + ['LL', '14 Indlovana 2010'], + ['LLL', '14 Indlovana 2010 3:25 entsambama'], + ['LLLL', 'Lisontfo, 14 Indlovana 2010 3:25 entsambama'], + ['l', '14/2/2010'], + ['ll', '14 Ina 2010'], + ['lll', '14 Ina 2010 3:25 entsambama'], + ['llll', 'Lis, 14 Ina 2010 3:25 entsambama'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = "Bhimbidvwane Bhi_Indlovana Ina_Indlov'lenkhulu Inu_Mabasa Mab_Inkhwekhweti Ink_Inhlaba Inh_Kholwane Kho_Ingci Igc_Inyoni Iny_Imphala Imp_Lweti Lwe_Ingongoni Igo".split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Lisontfo Lis Li_Umsombuluko Umb Us_Lesibili Lsb Lb_Lesitsatfu Les Lt_Lesine Lsi Ls_Lesihlanu Lsh Lh_Umgcibelo Umg Ug'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'emizuzwana lomcane', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'umzuzu', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'umzuzu', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 emizuzu', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 emizuzu', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'lihora', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'lihora', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 emahora', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 emahora', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 emahora', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'lilanga', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'lilanga', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 emalanga', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'lilanga', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 emalanga', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 emalanga', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'inyanga', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'inyanga', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'inyanga', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 tinyanga', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 tinyanga', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 tinyanga', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'inyanga', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 tinyanga', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'umnyaka', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 iminyaka', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'umnyaka', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 iminyaka', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'nga emizuzwana lomcane', 'prefix'); + assert.equal(moment(0).from(30000), 'wenteka nga emizuzwana lomcane', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'wenteka nga emizuzwana lomcane', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'nga emizuzwana lomcane', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'nga 5 emalanga', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Namuhla nga 12:00 emini', 'Today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Namuhla nga 12:25 emini', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Namuhla nga 1:00 emini', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Kusasa nga 12:00 emini', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Namuhla nga 11:00 emini', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Itolo nga 12:00 emini', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [nga] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [nga] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [nga] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [leliphelile] [nga] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [leliphelile] [nga] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [leliphelile] [nga] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 4 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('sv'); + +test('parse', function (assert) { + var tests = 'januari jan_februari feb_mars mar_april apr_maj maj_juni jun_juli jul_augusti aug_september sep_oktober okt_november nov_december dec'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'söndag, februari 14e 2010, 3:25:50 pm'], + ['ddd, hA', 'sön, 3PM'], + ['M Mo MM MMMM MMM', '2 2a 02 februari feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14e 14'], + ['d do dddd ddd dd', '0 0e söndag sön sö'], + ['DDD DDDo DDDD', '45 45e 045'], + ['w wo ww', '6 6e 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45e day of the year'], + ['LTS', '15:25:50'], + ['L', '2010-02-14'], + ['LL', '14 februari 2010'], + ['LLL', '14 februari 2010 kl. 15:25'], + ['LLLL', 'söndag 14 februari 2010 kl. 15:25'], + ['l', '2010-2-14'], + ['ll', '14 feb 2010'], + ['lll', '14 feb 2010 15:25'], + ['llll', 'sön 14 feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1a', '1a'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2a', '2a'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3e', '3e'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4e', '4e'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5e', '5e'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6e', '6e'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7e', '7e'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8e', '8e'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9e', '9e'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10e', '10e'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11e', '11e'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12e', '12e'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13e', '13e'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14e', '14e'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15e', '15e'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16e', '16e'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17e', '17e'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18e', '18e'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19e', '19e'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20e', '20e'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21a', '21a'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22a', '22a'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23e', '23e'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24e', '24e'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25e', '25e'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26e', '26e'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27e', '27e'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28e', '28e'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29e', '29e'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30e', '30e'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31a', '31a'); +}); + +test('format month', function (assert) { + var expected = 'januari jan_februari feb_mars mar_april apr_maj maj_juni jun_juli jul_augusti aug_september sep_oktober okt_november nov_december dec'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'söndag sön sö_måndag mån må_tisdag tis ti_onsdag ons on_torsdag tor to_fredag fre fr_lördag lör lö'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'några sekunder', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'en minut', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'en minut', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuter', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuter', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'en timme', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'en timme', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 timmar', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 timmar', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 timmar', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'en dag', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'en dag', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagar', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'en dag', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagar', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagar', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'en månad', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'en månad', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'en månad', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 månader', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 månader', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 månader', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'en månad', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 månader', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ett år', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 år', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ett år', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 år', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'om några sekunder', 'prefix'); + assert.equal(moment(0).from(30000), 'för några sekunder sedan', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'för några sekunder sedan', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'om några sekunder', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'om 5 dagar', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Idag 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Idag 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Idag 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Imorgon 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Idag 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Igår 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[På] dddd LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[På] dddd LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[På] dddd LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[I] dddd[s] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[I] dddd[s] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[I] dddd[s] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52a', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1a', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1a', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2a', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2a', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('sw'); + +test('parse', function (assert) { + var tests = 'Januari Jan_Februari Feb_Machi Mac_Aprili Apr_Mei Mei_Juni Jun_Julai Jul_Agosti Ago_Septemba Sep_Oktoba Okt_Novemba Nov_Desemba Des'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Jumapili, Februari 14 2010, 3:25:50 pm'], + ['ddd, hA', 'Jpl, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Jumapili Jpl J2'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[siku] DDDo [ya mwaka]', 'siku 45 ya mwaka'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 Februari 2010'], + ['LLL', '14 Februari 2010 15:25'], + ['LLLL', 'Jumapili, 14 Februari 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 15:25'], + ['llll', 'Jpl, 14 Feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'Januari Jan_Februari Feb_Machi Mac_Aprili Apr_Mei Mei_Juni Jun_Julai Jul_Agosti Ago_Septemba Sep_Oktoba Okt_Novemba Nov_Desemba Des'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Jumapili Jpl J2_Jumatatu Jtat J3_Jumanne Jnne J4_Jumatano Jtan J5_Alhamisi Alh Al_Ijumaa Ijm Ij_Jumamosi Jmos J1'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'hivi punde', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'dakika moja', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'dakika moja', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'dakika 2', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'dakika 44', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'saa limoja', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'saa limoja', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'masaa 2', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'masaa 5', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'masaa 21', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'siku moja', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'siku moja', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'masiku 2', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'siku moja', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'masiku 5', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'masiku 25', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mwezi mmoja', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mwezi mmoja', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mwezi mmoja', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'miezi 2', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'miezi 2', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'miezi 3', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mwezi mmoja', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'miezi 5', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'mwaka mmoja', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'miaka 2', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'mwaka mmoja', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'miaka 5', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'hivi punde baadaye', 'prefix'); + assert.equal(moment(0).from(30000), 'tokea hivi punde', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'tokea hivi punde', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'hivi punde baadaye', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'masiku 5 baadaye', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + assert.equal(moment(a).calendar(), 'leo saa 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'leo saa 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'leo saa 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'kesho saa 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'leo saa 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'jana 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[wiki ijayo] dddd [saat] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[wiki ijayo] dddd [saat] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[wiki ijayo] dddd [saat] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[wiki iliyopita] dddd [saat] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[wiki iliyopita] dddd [saat] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[wiki iliyopita] dddd [saat] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ta'); + +test('parse', function (assert) { + var tests = 'ஜனவரி ஜனவரி_பிப்ரவரி பிப்ரவரி_மார்ச் மார்ச்_ஏப்ரல் ஏப்ரல்_மே மே_ஜூன் ஜூன்_ஜூலை ஜூலை_ஆகஸ்ட் ஆகஸ்ட்_செப்டெம்பர் செப்டெம்பர்_அக்டோபர் அக்டோபர்_நவம்பர் நவம்பர்_டிசம்பர் டிசம்பர்'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'ஞாயிற்றுக்கிழமை, பிப்ரவரி ௧௪வது ௨௦௧௦, ௩:௨௫:௫௦ எற்பாடு'], + ['ddd, hA', 'ஞாயிறு, ௩ எற்பாடு'], + ['M Mo MM MMMM MMM', '௨ ௨வது ௦௨ பிப்ரவரி பிப்ரவரி'], + ['YYYY YY', '௨௦௧௦ ௧௦'], + ['D Do DD', '௧௪ ௧௪வது ௧௪'], + ['d do dddd ddd dd', '௦ ௦வது ஞாயிற்றுக்கிழமை ஞாயிறு ஞா'], + ['DDD DDDo DDDD', '௪௫ ௪௫வது ௦௪௫'], + ['w wo ww', '௮ ௮வது ௦௮'], + ['h hh', '௩ ௦௩'], + ['H HH', '௧௫ ௧௫'], + ['m mm', '௨௫ ௨௫'], + ['s ss', '௫௦ ௫௦'], + ['a A', ' எற்பாடு எற்பாடு'], + ['[ஆண்டின்] DDDo [நாள்]', 'ஆண்டின் ௪௫வது நாள்'], + ['LTS', '௧௫:௨௫:௫௦'], + ['L', '௧௪/௦௨/௨௦௧௦'], + ['LL', '௧௪ பிப்ரவரி ௨௦௧௦'], + ['LLL', '௧௪ பிப்ரவரி ௨௦௧௦, ௧௫:௨௫'], + ['LLLL', 'ஞாயிற்றுக்கிழமை, ௧௪ பிப்ரவரி ௨௦௧௦, ௧௫:௨௫'], + ['l', '௧௪/௨/௨௦௧௦'], + ['ll', '௧௪ பிப்ரவரி ௨௦௧௦'], + ['lll', '௧௪ பிப்ரவரி ௨௦௧௦, ௧௫:௨௫'], + ['llll', 'ஞாயிறு, ௧௪ பிப்ரவரி ௨௦௧௦, ௧௫:௨௫'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '௧வது', '௧வது'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '௨வது', '௨வது'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '௩வது', '௩வது'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '௪வது', '௪வது'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '௫வது', '௫வது'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '௬வது', '௬வது'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '௭வது', '௭வது'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '௮வது', '௮வது'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '௯வது', '௯வது'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '௧௦வது', '௧௦வது'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '௧௧வது', '௧௧வது'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '௧௨வது', '௧௨வது'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '௧௩வது', '௧௩வது'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '௧௪வது', '௧௪வது'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '௧௫வது', '௧௫வது'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '௧௬வது', '௧௬வது'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '௧௭வது', '௧௭வது'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '௧௮வது', '௧௮வது'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '௧௯வது', '௧௯வது'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '௨௦வது', '௨௦வது'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '௨௧வது', '௨௧வது'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '௨௨வது', '௨௨வது'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '௨௩வது', '௨௩வது'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '௨௪வது', '௨௪வது'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '௨௫வது', '௨௫வது'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '௨௬வது', '௨௬வது'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '௨௭வது', '௨௭வது'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '௨௮வது', '௨௮வது'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '௨௯வது', '௨௯வது'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '௩௦வது', '௩௦வது'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '௩௧வது', '௩௧வது'); +}); + +test('format month', function (assert) { + var expected = 'ஜனவரி ஜனவரி_பிப்ரவரி பிப்ரவரி_மார்ச் மார்ச்_ஏப்ரல் ஏப்ரல்_மே மே_ஜூன் ஜூன்_ஜூலை ஜூலை_ஆகஸ்ட் ஆகஸ்ட்_செப்டெம்பர் செப்டெம்பர்_அக்டோபர் அக்டோபர்_நவம்பர் நவம்பர்_டிசம்பர் டிசம்பர்'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'ஞாயிற்றுக்கிழமை ஞாயிறு ஞா_திங்கட்கிழமை திங்கள் தி_செவ்வாய்கிழமை செவ்வாய் செ_புதன்கிழமை புதன் பு_வியாழக்கிழமை வியாழன் வி_வெள்ளிக்கிழமை வெள்ளி வெ_சனிக்கிழமை சனி ச'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ஒரு சில விநாடிகள்', '44 விநாடிகள் = ஒரு சில விநாடிகள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ஒரு நிமிடம்', '45 விநாடிகள் = ஒரு நிமிடம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ஒரு நிமிடம்', '89 விநாடிகள் = ஒரு நிமிடம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '௨ நிமிடங்கள்', '90 விநாடிகள் = ௨ நிமிடங்கள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '௪௪ நிமிடங்கள்', '44 நிமிடங்கள் = 44 நிமிடங்கள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ஒரு மணி நேரம்', '45 நிமிடங்கள் = ஒரு மணி நேரம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ஒரு மணி நேரம்', '89 நிமிடங்கள் = ஒரு மணி நேரம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '௨ மணி நேரம்', '90 நிமிடங்கள் = ௨ மணி நேரம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '௫ மணி நேரம்', '5 மணி நேரம் = 5 மணி நேரம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '௨௧ மணி நேரம்', '௨௧ மணி நேரம் = ௨௧ மணி நேரம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ஒரு நாள்', '௨௨ மணி நேரம் = ஒரு நாள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ஒரு நாள்', '௩5 மணி நேரம் = ஒரு நாள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '௨ நாட்கள்', '௩6 மணி நேரம் = ௨ days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ஒரு நாள்', '௧ நாள் = ஒரு நாள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '௫ நாட்கள்', '5 நாட்கள் = 5 நாட்கள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '௨௫ நாட்கள்', '௨5 நாட்கள் = ௨5 நாட்கள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ஒரு மாதம்', '௨6 நாட்கள் = ஒரு மாதம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ஒரு மாதம்', '௩0 நாட்கள் = ஒரு மாதம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ஒரு மாதம்', '45 நாட்கள் = ஒரு மாதம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '௨ மாதங்கள்', '46 நாட்கள் = ௨ மாதங்கள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '௨ மாதங்கள்', '75 நாட்கள் = ௨ மாதங்கள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '௩ மாதங்கள்', '76 நாட்கள் = ௩ மாதங்கள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ஒரு மாதம்', '௧ மாதம் = ஒரு மாதம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '௫ மாதங்கள்', '5 மாதங்கள் = 5 மாதங்கள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ஒரு வருடம்', '௩45 நாட்கள் = ஒரு வருடம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '௨ ஆண்டுகள்', '548 நாட்கள் = ௨ ஆண்டுகள்'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ஒரு வருடம்', '௧ வருடம் = ஒரு வருடம்'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '௫ ஆண்டுகள்', '5 ஆண்டுகள் = 5 ஆண்டுகள்'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'ஒரு சில விநாடிகள் இல்', 'prefix'); + assert.equal(moment(0).from(30000), 'ஒரு சில விநாடிகள் முன்', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'ஒரு சில விநாடிகள் முன்', 'இப்போது இருந்து கடந்த காலத்தில் காட்ட வேண்டும்'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'ஒரு சில விநாடிகள் இல்', 'ஒரு சில விநாடிகள் இல்'); + assert.equal(moment().add({d: 5}).fromNow(), '௫ நாட்கள் இல்', '5 நாட்கள் இல்'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'இன்று ௧௨:௦௦', 'இன்று 12:00'); + assert.equal(moment(a).add({m: 25}).calendar(), 'இன்று ௧௨:௨௫', 'இன்று 12:25'); + assert.equal(moment(a).add({h: 1}).calendar(), 'இன்று ௧௩:௦௦', 'இன்று 13:00'); + assert.equal(moment(a).add({d: 1}).calendar(), 'நாளை ௧௨:௦௦', 'நாளை 12:00'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'இன்று ௧௧:௦௦', 'இன்று 11:00'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'நேற்று ௧௨:௦௦', 'நேற்று 12:00'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd, LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd, LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd, LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[கடந்த வாரம்] dddd, LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[கடந்த வாரம்] dddd, LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[கடந்த வாரம்] dddd, LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 0, 30]).format('a'), ' யாமம்', '(after) midnight'); + assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), ' வைகறை', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), ' காலை', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), ' எற்பாடு', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), ' எற்பாடு', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), ' மாலை', 'late evening'); + assert.equal(moment([2011, 2, 23, 23, 30]).format('a'), ' யாமம்', '(before) midnight'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('te'); + +test('parse', function (assert) { + var tests = 'జనవరి జన._ఫిబ్రవరి ఫిబ్ర._మార్చి మార్చి_ఏప్రిల్ ఏప్రి._మే మే_జూన్ జూన్_జూలై జూలై_ఆగస్టు ఆగ._సెప్టెంబర్ సెప్._అక్టోబర్ అక్టో._నవంబర్ నవ._డిసెంబర్ డిసె.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do తేదీ MMMM YYYY, a h:mm:ss', 'ఆదివారం, 14వ తేదీ ఫిబ్రవరి 2010, మధ్యాహ్నం 3:25:50'], + ['ddd, a h గంటలు', 'ఆది, మధ్యాహ్నం 3 గంటలు'], + ['M Mo నెల MM MMMM MMM', '2 2వ నెల 02 ఫిబ్రవరి ఫిబ్ర.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14వ 14'], + ['d do dddd ddd dd', '0 0వ ఆదివారం ఆది ఆ'], + ['DDD DDDo DDDD', '45 45వ 045'], + ['w wo ww', '8 8వ 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'మధ్యాహ్నం మధ్యాహ్నం'], + ['LTS', 'మధ్యాహ్నం 3:25:50'], + ['L', '14/02/2010'], + ['LL', '14 ఫిబ్రవరి 2010'], + ['LLL', '14 ఫిబ్రవరి 2010, మధ్యాహ్నం 3:25'], + ['LLLL', 'ఆదివారం, 14 ఫిబ్రవరి 2010, మధ్యాహ్నం 3:25'], + ['l', '14/2/2010'], + ['ll', '14 ఫిబ్ర. 2010'], + ['lll', '14 ఫిబ్ర. 2010, మధ్యాహ్నం 3:25'], + ['llll', 'ఆది, 14 ఫిబ్ర. 2010, మధ్యాహ్నం 3:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1వ', '1వ'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2వ', '2వ'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3వ', '3వ'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4వ', '4వ'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5వ', '5వ'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6వ', '6వ'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7వ', '7వ'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8వ', '8వ'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9వ', '9వ'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10వ', '10వ'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11వ', '11వ'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12వ', '12వ'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13వ', '13వ'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14వ', '14వ'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15వ', '15వ'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16వ', '16వ'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17వ', '17వ'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18వ', '18వ'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19వ', '19వ'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20వ', '20వ'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21వ', '21వ'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22వ', '22వ'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23వ', '23వ'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24వ', '24వ'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25వ', '25వ'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26వ', '26వ'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27వ', '27వ'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28వ', '28వ'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29వ', '29వ'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30వ', '30వ'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31వ', '31వ'); +}); + +test('format month', function (assert) { + var expected = 'జనవరి జన._ఫిబ్రవరి ఫిబ్ర._మార్చి మార్చి_ఏప్రిల్ ఏప్రి._మే మే_జూన్ జూన్_జూలై జూలై_ఆగస్టు ఆగ._సెప్టెంబర్ సెప్._అక్టోబర్ అక్టో._నవంబర్ నవ._డిసెంబర్ డిసె.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'ఆదివారం ఆది ఆ_సోమవారం సోమ సో_మంగళవారం మంగళ మం_బుధవారం బుధ బు_గురువారం గురు గు_శుక్రవారం శుక్ర శు_శనివారం శని శ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'కొన్ని క్షణాలు', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ఒక నిమిషం', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ఒక నిమిషం', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 నిమిషాలు', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 నిమిషాలు', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ఒక గంట', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ఒక గంట', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 గంటలు', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 గంటలు', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 గంటలు', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ఒక రోజు', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ఒక రోజు', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 రోజులు', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ఒక రోజు', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 రోజులు', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 రోజులు', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ఒక నెల', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ఒక నెల', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ఒక నెల', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 నెలలు', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 నెలలు', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 నెలలు', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ఒక నెల', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 నెలలు', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ఒక సంవత్సరం', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 సంవత్సరాలు', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ఒక సంవత్సరం', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 సంవత్సరాలు', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'కొన్ని క్షణాలు లో', 'prefix'); + assert.equal(moment(0).from(30000), 'కొన్ని క్షణాలు క్రితం', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'కొన్ని క్షణాలు క్రితం', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'కొన్ని క్షణాలు లో', 'కొన్ని క్షణాలు లో'); + assert.equal(moment().add({d: 5}).fromNow(), '5 రోజులు లో', '5 రోజులు లో'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'నేడు మధ్యాహ్నం 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'నేడు మధ్యాహ్నం 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 3}).calendar(), 'నేడు మధ్యాహ్నం 3:00', 'Now plus 3 hours'); + assert.equal(moment(a).add({d: 1}).calendar(), 'రేపు మధ్యాహ్నం 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'నేడు మధ్యాహ్నం 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'నిన్న మధ్యాహ్నం 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[గత] dddd[,] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[గత] dddd[,] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[గత] dddd[,] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'రాత్రి', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'ఉదయం', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'మధ్యాహ్నం', 'during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'సాయంత్రం', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'సాయంత్రం', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'రాత్రి', 'night'); + + assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'రాత్రి', 'before dawn'); + assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'ఉదయం', 'morning'); + assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'మధ్యాహ్నం', ' during day'); + assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'సాయంత్రం', 'evening'); + assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'సాయంత్రం', 'late evening'); + assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'రాత్రి', 'night'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1వ', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1వ', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2వ', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2వ', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3వ', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('tet'); + +test('parse', function (assert) { + var tests = 'Janeiru Jan_Fevereiru Fev_Marsu Mar_Abril Abr_Maiu Mai_Juniu Jun_Juliu Jul_Augustu Aug_Setembru Set_Outubru Out_Novembru Nov_Dezembru Dez'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domingu, Fevereiru 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Dom, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 Fevereiru Fev'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Domingu Dom Do'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '6 6th 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 Fevereiru 2010'], + ['LLL', '14 Fevereiru 2010 15:25'], + ['LLLL', 'Domingu, 14 Fevereiru 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Fev 2010'], + ['lll', '14 Fev 2010 15:25'], + ['llll', 'Dom, 14 Fev 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); +}); + +test('format month', function (assert) { + var expected = 'Janeiru Jan_Fevereiru Fev_Marsu Mar_Abril Abr_Maiu Mai_Juniu Jun_Juliu Jul_Augustu Aug_Setembru Set_Outubru Out_Novembru Nov_Dezembru Dez'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Domingu Dom Do_Segunda Seg Seg_Tersa Ters Te_Kuarta Kua Ku_Kinta Kint Ki_Sexta Sext Sex_Sabadu Sab Sa'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'minutu balun', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minutu ida', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minutu ida', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'minutus 2', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'minutus 44', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'horas ida', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'horas ida', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'horas 2', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'horas 5', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'horas 21', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'loron ida', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'loron ida', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'loron 2', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'loron ida', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'loron 5', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'loron 25', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'fulan ida', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'fulan ida', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'fulan ida', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'fulan 2', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'fulan 2', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'fulan 3', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'fulan ida', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'fulan 5', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'tinan ida', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'tinan 2', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'tinan ida', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'tinan 5', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'iha minutu balun', 'prefix'); + assert.equal(moment(0).from(30000), 'minutu balun liuba', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'minutu balun liuba', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'iha minutu balun', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'iha loron 5', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Ohin iha 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Ohin iha 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Ohin iha 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Aban iha 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Ohin iha 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Horiseik iha 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [iha] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [iha] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [iha] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [semana kotuk] [iha] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [semana kotuk] [iha] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [semana kotuk] [iha] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('th'); + +test('parse', function (assert) { + var tests = 'มกราคม ม.ค._กุมภาพันธ์ ก.พ._มีนาคม มี.ค._เมษายน เม.ย._พฤษภาคม พ.ค._มิถุนายน มิ.ย._กรกฎาคม ก.ค._สิงหาคม ส.ค._กันยายน ก.ย._ตุลาคม ต.ค._พฤศจิกายน พ.ย._ธันวาคม ธ.ค.'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'อาทิตย์, 14 กุมภาพันธ์ 2010, 3:25:50 หลังเที่ยง'], + ['ddd, h A', 'อาทิตย์, 3 หลังเที่ยง'], + ['M Mo MM MMMM MMM', '2 2 02 กุมภาพันธ์ ก.พ.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 อาทิตย์ อาทิตย์ อา.'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'หลังเที่ยง หลังเที่ยง'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 กุมภาพันธ์ 2010'], + ['LLL', '14 กุมภาพันธ์ 2010 เวลา 15:25'], + ['LLLL', 'วันอาทิตย์ที่ 14 กุมภาพันธ์ 2010 เวลา 15:25'], + ['l', '14/2/2010'], + ['ll', '14 ก.พ. 2010'], + ['lll', '14 ก.พ. 2010 เวลา 15:25'], + ['llll', 'วันอาทิตย์ที่ 14 ก.พ. 2010 เวลา 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format month', function (assert) { + var expected = 'มกราคม ม.ค._กุมภาพันธ์ ก.พ._มีนาคม มี.ค._เมษายน เม.ย._พฤษภาคม พ.ค._มิถุนายน มิ.ย._กรกฎาคม ก.ค._สิงหาคม ส.ค._กันยายน ก.ย._ตุลาคม ต.ค._พฤศจิกายน พ.ย._ธันวาคม ธ.ค.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'อาทิตย์ อาทิตย์ อา._จันทร์ จันทร์ จ._อังคาร อังคาร อ._พุธ พุธ พ._พฤหัสบดี พฤหัส พฤ._ศุกร์ ศุกร์ ศ._เสาร์ เสาร์ ส.'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ไม่กี่วินาที', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1 นาที', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1 นาที', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 นาที', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 นาที', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1 ชั่วโมง', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1 ชั่วโมง', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ชั่วโมง', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ชั่วโมง', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ชั่วโมง', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 วัน', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 วัน', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 วัน', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 วัน', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 วัน', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 วัน', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1 เดือน', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1 เดือน', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1 เดือน', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 เดือน', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 เดือน', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 เดือน', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1 เดือน', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 เดือน', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1 ปี', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ปี', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1 ปี', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ปี', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'อีก ไม่กี่วินาที', 'prefix'); + assert.equal(moment(0).from(30000), 'ไม่กี่วินาทีที่แล้ว', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'ไม่กี่วินาทีที่แล้ว', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'อีก ไม่กี่วินาที', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'อีก 5 วัน', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'วันนี้ เวลา 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'วันนี้ เวลา 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'วันนี้ เวลา 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'พรุ่งนี้ เวลา 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'วันนี้ เวลา 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'เมื่อวานนี้ เวลา 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('tl-ph'); + +test('parse', function (assert) { + var tests = 'Enero Ene_Pebrero Peb_Marso Mar_Abril Abr_Mayo May_Hunyo Hun_Hulyo Hul_Agosto Ago_Setyembre Set_Oktubre Okt_Nobyembre Nob_Disyembre Dis'.split('_'), + i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Linggo, Pebrero 14 2010, 3:25:50 pm'], + ['ddd, hA', 'Lin, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 Pebrero Peb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Linggo Lin Li'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LTS', '15:25:50'], + ['L', '02/14/2010'], + ['LL', 'Pebrero 14, 2010'], + ['LLL', 'Pebrero 14, 2010 15:25'], + ['LLLL', 'Linggo, Pebrero 14, 2010 15:25'], + ['l', '2/14/2010'], + ['ll', 'Peb 14, 2010'], + ['lll', 'Peb 14, 2010 15:25'], + ['llll', 'Lin, Peb 14, 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'Enero Ene_Pebrero Peb_Marso Mar_Abril Abr_Mayo May_Hunyo Hun_Hulyo Hul_Agosto Ago_Setyembre Set_Oktubre Okt_Nobyembre Nob_Disyembre Dis'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Linggo Lin Li_Lunes Lun Lu_Martes Mar Ma_Miyerkules Miy Mi_Huwebes Huw Hu_Biyernes Biy Bi_Sabado Sab Sab'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ilang segundo', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'isang minuto', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'isang minuto', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuto', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuto', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'isang oras', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'isang oras', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 oras', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 oras', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 oras', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'isang araw', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'isang araw', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 araw', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'isang araw', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 araw', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 araw', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'isang buwan', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'isang buwan', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'isang buwan', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 buwan', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 buwan', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 buwan', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'isang buwan', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 buwan', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'isang taon', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 taon', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'isang taon', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 taon', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'sa loob ng ilang segundo', 'prefix'); + assert.equal(moment(0).from(30000), 'ilang segundo ang nakalipas', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'sa loob ng ilang segundo', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'sa loob ng 5 araw', 'in 5 days'); +}); + +test('same day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), '12:00 ngayong araw', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), '12:25 ngayong araw', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), '13:00 ngayong araw', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Bukas ng 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), '11:00 ngayong araw', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), '12:00 kahapon', 'yesterday at the same time'); +}); + +test('same next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('LT [sa susunod na] dddd'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('LT [sa susunod na] dddd'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('LT [sa susunod na] dddd'), 'Today + ' + i + ' days end of day'); + } +}); + +test('same last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('LT [noong nakaraang] dddd'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('LT [noong nakaraang] dddd'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('LT [noong nakaraang] dddd'), 'Today - ' + i + ' days end of day'); + } +}); + +test('same all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('tlh'); + +//Current parsing method doesn't allow parsing correctly months 10, 11 and 12. +/* + * test('parse', function (assert) { + var tests = 'tera’ jar wa’.jar wa’_tera’ jar cha’.jar cha’_tera’ jar wej.jar wej_tera’ jar loS.jar loS_tera’ jar vagh.jar vagh_tera’ jar jav.jar jav_tera’ jar Soch.jar Soch_tera’ jar chorgh.jar chorgh_tera’ jar Hut.jar Hut_tera’ jar wa’maH.jar wa’maH_tera’ jar wa’maH wa’.jar wa’maH wa’_tera’ jar wa’maH cha’.jar wa’maH cha’'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split('.'); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); +*/ +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'lojmItjaj, tera’ jar cha’ 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'lojmItjaj, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 tera’ jar cha’ jar cha’'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. lojmItjaj lojmItjaj lojmItjaj'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[DIS jaj] DDDo', 'DIS jaj 45.'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 tera’ jar cha’ 2010'], + ['LLL', '14 tera’ jar cha’ 2010 15:25'], + ['LLLL', 'lojmItjaj, 14 tera’ jar cha’ 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 jar cha’ 2010'], + ['lll', '14 jar cha’ 2010 15:25'], + ['llll', 'lojmItjaj, 14 jar cha’ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'tera’ jar wa’ jar wa’_tera’ jar cha’ jar cha’_tera’ jar wej jar wej_tera’ jar loS jar loS_tera’ jar vagh jar vagh_tera’ jar jav jar jav_tera’ jar Soch jar Soch_tera’ jar chorgh jar chorgh_tera’ jar Hut jar Hut_tera’ jar wa’maH jar wa’maH_tera’ jar wa’maH wa’ jar wa’maH wa’_tera’ jar wa’maH cha’ jar wa’maH cha’'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'lojmItjaj lojmItjaj lojmItjaj_DaSjaj DaSjaj DaSjaj_povjaj povjaj povjaj_ghItlhjaj ghItlhjaj ghItlhjaj_loghjaj loghjaj loghjaj_buqjaj buqjaj buqjaj_ghInjaj ghInjaj ghInjaj'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'puS lup', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'wa’ tup', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'wa’ tup', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'cha’ tup', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'loSmaH loS tup', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'wa’ rep', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'wa’ rep', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'cha’ rep', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'vagh rep', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'cha’maH wa’ rep', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'wa’ jaj', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'wa’ jaj', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'cha’ jaj', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'wa’ jaj', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'vagh jaj', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'cha’maH vagh jaj', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'wa’ jar', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'wa’ jar', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'wa’ jar', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'cha’ jar', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'cha’ jar', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'wej jar', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'wa’ jar', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'vagh jar', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'wa’ DIS', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'cha’ DIS', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'wa’ DIS', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'vagh DIS', '5 years = 5 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 112}), true), 'wa’vatlh wa’maH cha’ DIS', '112 years = 112 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 122}), true), 'wa’vatlh cha’maH cha’ DIS', '122 years = 122 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 213}), true), 'cha’vatlh wa’maH wej DIS', '213 years = 213 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 223}), true), 'cha’vatlh cha’maH wej DIS', '223 years = 223 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'puS lup pIq', 'suffix'); + assert.equal(moment(0).from(30000), 'puS lup ret', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'puS lup ret', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'puS lup pIq', 'in a few seconds'); + assert.equal(moment().add({h: 1}).fromNow(), 'wa’ rep pIq', 'in an hour'); + assert.equal(moment().add({d: 5}).fromNow(), 'vagh leS', 'in 5 days'); + assert.equal(moment().add({M: 2}).fromNow(), 'cha’ waQ', 'in 2 months'); + assert.equal(moment().add({y: 1}).fromNow(), 'wa’ nem', 'in a year'); + assert.equal(moment().add({s: -30}).fromNow(), 'puS lup ret', 'a few seconds ago'); + assert.equal(moment().add({h: -1}).fromNow(), 'wa’ rep ret', 'an hour ago'); + assert.equal(moment().add({d: -5}).fromNow(), 'vagh Hu’', '5 days ago'); + assert.equal(moment().add({M: -2}).fromNow(), 'cha’ wen', '2 months ago'); + assert.equal(moment().add({y: -1}).fromNow(), 'wa’ ben', 'a year ago'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'DaHjaj 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'DaHjaj 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'DaHjaj 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'wa’leS 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'DaHjaj 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'wa’Hu’ 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('LLL'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('LLL'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('LLL'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('LLL'), 'Today - ' + i + ' days current time'); + + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('LLL'), 'Today - ' + i + ' days beginning of day'); + + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('LLL'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('tr'); + +test('parse', function (assert) { + var tests = 'Ocak Oca_Şubat Şub_Mart Mar_Nisan Nis_Mayıs May_Haziran Haz_Temmuz Tem_Ağustos Ağu_Eylül Eyl_Ekim Eki_Kasım Kas_Aralık Ara'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Pazar, Şubat 14\'üncü 2010, 3:25:50 pm'], + ['ddd, hA', 'Paz, 3PM'], + ['M Mo MM MMMM MMM', '2 2\'nci 02 Şubat Şub'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14\'üncü 14'], + ['d do dddd ddd dd', '0 0\'ıncı Pazar Paz Pz'], + ['DDD DDDo DDDD', '45 45\'inci 045'], + ['w wo ww', '7 7\'nci 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[yılın] DDDo [günü]', 'yılın 45\'inci günü'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 Şubat 2010'], + ['LLL', '14 Şubat 2010 15:25'], + ['LLLL', 'Pazar, 14 Şubat 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 Şub 2010'], + ['lll', '14 Şub 2010 15:25'], + ['llll', 'Paz, 14 Şub 2010 15:25'] + ], + DDDo = [ + [359, '360\'ıncı'], + [199, '200\'üncü'], + [149, '150\'nci'] + ], + dt = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + DDDoDt, + i; + + for (i = 0; i < a.length; i++) { + assert.equal(dt.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + for (i = 0; i < DDDo.length; i++) { + DDDoDt = moment([2010]); + assert.equal(DDDoDt.add(DDDo[i][0], 'days').format('DDDo'), DDDo[i][1], DDDo[i][0] + ' ---> ' + DDDo[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1\'inci', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2\'nci', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3\'üncü', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4\'üncü', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5\'inci', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6\'ncı', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7\'nci', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8\'inci', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9\'uncu', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10\'uncu', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11\'inci', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12\'nci', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13\'üncü', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14\'üncü', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15\'inci', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16\'ncı', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17\'nci', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18\'inci', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19\'uncu', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20\'nci', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21\'inci', '21th'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22\'nci', '22th'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23\'üncü', '23th'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24\'üncü', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25\'inci', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26\'ncı', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27\'nci', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28\'inci', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29\'uncu', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30\'uncu', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31\'inci', '31st'); +}); + +test('format month', function (assert) { + var expected = 'Ocak Oca_Şubat Şub_Mart Mar_Nisan Nis_Mayıs May_Haziran Haz_Temmuz Tem_Ağustos Ağu_Eylül Eyl_Ekim Eki_Kasım Kas_Aralık Ara'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Pazar Paz Pz_Pazartesi Pts Pt_Salı Sal Sa_Çarşamba Çar Ça_Perşembe Per Pe_Cuma Cum Cu_Cumartesi Cts Ct'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'birkaç saniye', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'bir dakika', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'bir dakika', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 dakika', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 dakika', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'bir saat', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'bir saat', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 saat', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 saat', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 saat', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'bir gün', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'bir gün', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 gün', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'bir gün', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 gün', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 gün', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'bir ay', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'bir ay', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'bir ay', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ay', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ay', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ay', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'bir ay', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ay', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'bir yıl', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 yıl', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'bir yıl', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 yıl', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'birkaç saniye sonra', 'prefix'); + assert.equal(moment(0).from(30000), 'birkaç saniye önce', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'birkaç saniye önce', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'birkaç saniye sonra', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 gün sonra', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'bugün saat 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'bugün saat 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'bugün saat 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'yarın saat 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'bugün saat 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'dün 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1\'inci', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1\'inci', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2\'nci', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2\'nci', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3\'üncü', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('tzl'); + +test('parse', function (assert) { + var tests = 'Januar Jan_Fevraglh Fev_Març Mar_Avrïu Avr_Mai Mai_Gün Gün_Julia Jul_Guscht Gus_Setemvar Set_Listopäts Lis_Noemvar Noe_Zecemvar Zec'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h.mm.ss a', 'Súladi, Fevraglh 14. 2010, 3.25.50 d\'o'], + ['ddd, hA', 'Súl, 3D\'O'], + ['M Mo MM MMMM MMM', '2 2. 02 Fevraglh Fev'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. Súladi Súl Sú'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'd\'o D\'O'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['LTS', '15.25.50'], + ['L', '14.02.2010'], + ['LL', '14. Fevraglh dallas 2010'], + ['LLL', '14. Fevraglh dallas 2010 15.25'], + ['LLLL', 'Súladi, li 14. Fevraglh dallas 2010 15.25'], + ['l', '14.2.2010'], + ['ll', '14. Fev dallas 2010'], + ['lll', '14. Fev dallas 2010 15.25'], + ['llll', 'Súl, li 14. Fev dallas 2010 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); +}); + +test('format month', function (assert) { + var expected = 'Januar Jan_Fevraglh Fev_Març Mar_Avrïu Avr_Mai Mai_Gün Gün_Julia Jul_Guscht Gus_Setemvar Set_Listopäts Lis_Noemvar Noe_Zecemvar Zec'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Súladi Súl Sú_Lúneçi Lún Lú_Maitzi Mai Ma_Márcuri Már Má_Xhúadi Xhú Xh_Viénerçi Vié Vi_Sáturi Sát Sá'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'viensas secunds', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '\'n míut', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '\'n míut', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 míuts', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 míuts', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '\'n þora', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '\'n þora', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 þoras', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 þoras', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 þoras', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '\'n ziua', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '\'n ziua', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ziuas', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '\'n ziua', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ziuas', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ziuas', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '\'n mes', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '\'n mes', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '\'n mes', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mesen', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mesen', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mesen', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '\'n mes', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesen', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '\'n ar', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ars', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '\'n ar', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ars', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'osprei viensas secunds', 'prefix'); + assert.equal(moment(0).from(30000), 'ja\'iensas secunds', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'ja\'iensas secunds', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'osprei viensas secunds', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'osprei 5 ziuas', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'oxhi à 12.00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'oxhi à 12.25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'oxhi à 13.00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'demà à 12.00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'oxhi à 11.00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ieiri à 12.00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[sür el] dddd [lasteu à] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[sür el] dddd [lasteu à] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[sür el] dddd [lasteu à] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +// Monday is the first day of the week. +// The week that contains Jan 4th is the first week of the year. + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('tzm-latn'); + +test('parse', function (assert) { + var tests = 'innayr innayr_brˤayrˤ brˤayrˤ_marˤsˤ marˤsˤ_ibrir ibrir_mayyw mayyw_ywnyw ywnyw_ywlywz ywlywz_ɣwšt ɣwšt_šwtanbir šwtanbir_ktˤwbrˤ ktˤwbrˤ_nwwanbir nwwanbir_dwjnbir dwjnbir'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'asamas, brˤayrˤ 14 2010, 3:25:50 pm'], + ['ddd, hA', 'asamas, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 brˤayrˤ brˤayrˤ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 asamas asamas asamas'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 brˤayrˤ 2010'], + ['LLL', '14 brˤayrˤ 2010 15:25'], + ['LLLL', 'asamas 14 brˤayrˤ 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 brˤayrˤ 2010'], + ['lll', '14 brˤayrˤ 2010 15:25'], + ['llll', 'asamas 14 brˤayrˤ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'innayr innayr_brˤayrˤ brˤayrˤ_marˤsˤ marˤsˤ_ibrir ibrir_mayyw mayyw_ywnyw ywnyw_ywlywz ywlywz_ɣwšt ɣwšt_šwtanbir šwtanbir_ktˤwbrˤ ktˤwbrˤ_nwwanbir nwwanbir_dwjnbir dwjnbir'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'asamas asamas asamas_aynas aynas aynas_asinas asinas asinas_akras akras akras_akwas akwas akwas_asimwas asimwas asimwas_asiḍyas asiḍyas asiḍyas'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'imik', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minuḍ', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minuḍ', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuḍ', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuḍ', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'saɛa', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'saɛa', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 tassaɛin', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 tassaɛin', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 tassaɛin', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ass', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ass', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ossan', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ass', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ossan', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ossan', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ayowr', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ayowr', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ayowr', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 iyyirn', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 iyyirn', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 iyyirn', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ayowr', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 iyyirn', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'asgas', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 isgasn', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'asgas', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 isgasn', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'dadkh s yan imik', 'prefix'); + assert.equal(moment(0).from(30000), 'yan imik', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'yan imik', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'dadkh s yan imik', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'dadkh s yan 5 ossan', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'asdkh g 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'asdkh g 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'asdkh g 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'aska g 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'asdkh g 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'assant g 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', 'Dec 31 2011 should be week 1'); + assert.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', 'Jan 6 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 should be week 2'); + assert.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', 'Jan 13 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('tzm'); + +test('parse', function (assert) { + var tests = 'ⵉⵏⵏⴰⵢⵔ ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'ⴰⵙⴰⵎⴰⵙ, ⴱⵕⴰⵢⵕ 14 2010, 3:25:50 pm'], + ['ddd, hA', 'ⴰⵙⴰⵎⴰⵙ, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 ⴱⵕⴰⵢⵕ 2010'], + ['LLL', '14 ⴱⵕⴰⵢⵕ 2010 15:25'], + ['LLLL', 'ⴰⵙⴰⵎⴰⵙ 14 ⴱⵕⴰⵢⵕ 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 ⴱⵕⴰⵢⵕ 2010'], + ['lll', '14 ⴱⵕⴰⵢⵕ 2010 15:25'], + ['llll', 'ⴰⵙⴰⵎⴰⵙ 14 ⴱⵕⴰⵢⵕ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'ⵉⵏⵏⴰⵢⵔ ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ ⴰⵢⵏⴰⵙ ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ ⴰⵙⵉⵏⴰⵙ ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ ⴰⴽⵔⴰⵙ ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ ⴰⴽⵡⴰⵙ ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ ⴰⵙⵉⵎⵡⴰⵙ ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ ⴰⵙⵉⴹⵢⴰⵙ ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ⵉⵎⵉⴽ', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ⵎⵉⵏⵓⴺ', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ⵎⵉⵏⵓⴺ', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 ⵎⵉⵏⵓⴺ', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 ⵎⵉⵏⵓⴺ', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ⵙⴰⵄⴰ', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ⵙⴰⵄⴰ', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ⵜⴰⵙⵙⴰⵄⵉⵏ', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ⵜⴰⵙⵙⴰⵄⵉⵏ', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ⵜⴰⵙⵙⴰⵄⵉⵏ', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ⴰⵙⵙ', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ⴰⵙⵙ', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 oⵙⵙⴰⵏ', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ⴰⵙⵙ', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 oⵙⵙⴰⵏ', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 oⵙⵙⴰⵏ', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ⴰⵢoⵓⵔ', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ⴰⵢoⵓⵔ', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ⴰⵢoⵓⵔ', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ⵉⵢⵢⵉⵔⵏ', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ⵉⵢⵢⵉⵔⵏ', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ⵉⵢⵢⵉⵔⵏ', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ⴰⵢoⵓⵔ', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ⵉⵢⵢⵉⵔⵏ', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ⴰⵙⴳⴰⵙ', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ⵉⵙⴳⴰⵙⵏ', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ⴰⵙⴳⴰⵙ', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ⵉⵙⴳⴰⵙⵏ', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ ⵉⵎⵉⴽ', 'prefix'); + assert.equal(moment(0).from(30000), 'ⵢⴰⵏ ⵉⵎⵉⴽ', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'ⵢⴰⵏ ⵉⵎⵉⴽ', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ ⵉⵎⵉⴽ', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ 5 oⵙⵙⴰⵏ', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'ⴰⵙⴷⵅ ⴴ 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'ⴰⵙⴷⵅ ⴴ 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'ⴰⵙⴷⵅ ⴴ 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'ⴰⵙⴽⴰ ⴴ 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'ⴰⵙⴷⵅ ⴴ 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'ⴰⵚⴰⵏⵜ ⴴ 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', 'Dec 31 2011 should be week 1'); + assert.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', 'Jan 6 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 should be week 2'); + assert.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', 'Jan 13 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('uk'); + +test('parse', function (assert) { + var tests = 'січень січ_лютий лют_березень бер_квітень квіт_травень трав_червень черв_липень лип_серпень серп_вересень вер_жовтень жовт_листопад лист_грудень груд'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'неділя, 14-го лютого 2010, 15:25:50'], + ['ddd, h A', 'нд, 3 дня'], + ['M Mo MM MMMM MMM', '2 2-й 02 лютий лют'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-го 14'], + ['d do dddd ddd dd', '0 0-й неділя нд нд'], + ['DDD DDDo DDDD', '45 45-й 045'], + ['w wo ww', '7 7-й 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'дня дня'], + ['DDDo [день року]', '45-й день року'], + ['LTS', '15:25:50'], + ['L', '14.02.2010'], + ['LL', '14 лютого 2010 р.'], + ['LLL', '14 лютого 2010 р., 15:25'], + ['LLLL', 'неділя, 14 лютого 2010 р., 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format meridiem', function (assert) { + assert.equal(moment([2012, 11, 28, 0, 0]).format('A'), 'ночі', 'night'); + assert.equal(moment([2012, 11, 28, 3, 59]).format('A'), 'ночі', 'night'); + assert.equal(moment([2012, 11, 28, 4, 0]).format('A'), 'ранку', 'morning'); + assert.equal(moment([2012, 11, 28, 11, 59]).format('A'), 'ранку', 'morning'); + assert.equal(moment([2012, 11, 28, 12, 0]).format('A'), 'дня', 'afternoon'); + assert.equal(moment([2012, 11, 28, 16, 59]).format('A'), 'дня', 'afternoon'); + assert.equal(moment([2012, 11, 28, 17, 0]).format('A'), 'вечора', 'evening'); + assert.equal(moment([2012, 11, 28, 23, 59]).format('A'), 'вечора', 'evening'); +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-й', '1-й'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-й', '2-й'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-й', '3-й'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-й', '4-й'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-й', '5-й'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-й', '6-й'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-й', '7-й'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-й', '8-й'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-й', '9-й'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-й', '10-й'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-й', '11-й'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-й', '12-й'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-й', '13-й'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-й', '14-й'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-й', '15-й'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-й', '16-й'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-й', '17-й'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-й', '18-й'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-й', '19-й'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-й', '20-й'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-й', '21-й'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-й', '22-й'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-й', '23-й'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-й', '24-й'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-й', '25-й'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-й', '26-й'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-й', '27-й'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-й', '28-й'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-й', '29-й'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-й', '30-й'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-й', '31-й'); +}); + +test('format month', function (assert) { + var expected = 'січень січ_лютий лют_березень бер_квітень квіт_травень трав_червень черв_липень лип_серпень серп_вересень вер_жовтень жовт_листопад лист_грудень груд'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format month case', function (assert) { + var months = { + 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'), + 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_') + }, i; + for (i = 0; i < 12; i++) { + assert.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + assert.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]); + } +}); + +test('format week', function (assert) { + var expected = 'неділя нд нд_понеділок пн пн_вівторок вт вт_середа ср ср_четвер чт чт_п’ятниця пт пт_субота сб сб'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'декілька секунд', '44 seconds = seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'хвилина', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'хвилина', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 хвилини', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 хвилини', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'годину', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'годину', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 години', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 годин', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 година', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'день', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'день', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дні', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'день', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 днів', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), '11 днів', '11 days = 11 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), '21 день', '21 days = 21 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 днів', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'місяць', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'місяць', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'місяць', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 місяці', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 місяці', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 місяці', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'місяць', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 місяців', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'рік', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 роки', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'рік', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 років', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'за декілька секунд', 'prefix'); + assert.equal(moment(0).from(30000), 'декілька секунд тому', 'suffix'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'за декілька секунд', 'in seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'за 5 днів', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Сьогодні о 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Сьогодні о 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Сьогодні о 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Завтра о 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 2}).calendar(), 'Сьогодні о 10:00', 'Now minus 2 hours'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Вчора о 12:00', 'yesterday at the same time'); + // A special case for Ukrainian since 11 hours have different preposition + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Сьогодні об 11:00', 'same day at 11 o\'clock'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[У] dddd [о' + (m.hours() === 11 ? 'б' : '') + '] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[У] dddd [о] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[У] dddd [о] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + case 5: + case 6: + return '[Минулої] dddd [о' + (d.hours() === 11 ? 'б' : '') + '] LT'; + case 1: + case 2: + case 4: + return '[Минулого] dddd [о' + (d.hours() === 11 ? 'б' : '') + '] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-й', 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-й', 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-й', 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-й', 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-й', 'Jan 9 2012 should be week 3'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('ur'); + +var months = [ + 'جنوری', + 'فروری', + 'مارچ', + 'اپریل', + 'مئی', + 'جون', + 'جولائی', + 'اگست', + 'ستمبر', + 'اکتوبر', + 'نومبر', + 'دسمبر' +]; +var days = [ + 'اتوار', + 'پیر', + 'منگل', + 'بدھ', + 'جمعرات', + 'جمعہ', + 'ہفتہ' +]; + +test('parse', function (assert) { + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (var i = 0; i < 12; i++) { + equalTest(months[i], 'MMM', i); + equalTest(months[i], 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'اتوار، فروری 14 2010، 3:25:50 شام'], + ['ddd, hA', 'اتوار، 3شام'], + ['M Mo MM MMMM MMM', '2 2 02 فروری فروری'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 اتوار اتوار اتوار'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'شام شام'], + ['[سال کا] DDDo[واں دن]', 'سال کا 45واں دن'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 فروری 2010'], + ['LLL', '14 فروری 2010 15:25'], + ['LLLL', 'اتوار، 14 فروری 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 فروری 2010'], + ['lll', '14 فروری 2010 15:25'], + ['llll', 'اتوار، 14 فروری 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + for (var i = 0; i < months.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), months[i] + ' ' + months[i], months[i] + ' ' + months[i]); + } +}); + +test('format week', function (assert) { + for (var i = 0; i < days.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), days[i] + ' ' + days[i] + ' ' + days[i], days[i] + ' ' + days[i] + ' ' + days[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'چند سیکنڈ', '44 seconds = چند سیکنڈ'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ایک منٹ', '45 seconds = ایک منٹ'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ایک منٹ', '89 seconds = ایک منٹ'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 منٹ', '90 seconds = 2 منٹ'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 منٹ', '44 minutes = 44 منٹ'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ایک گھنٹہ', '45 minutes = ایک گھنٹہ'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ایک گھنٹہ', '89 minutes = ایک گھنٹہ'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 گھنٹے', '90 minutes = 2 گھنٹے'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 گھنٹے', '5 hours = 5 گھنٹے'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 گھنٹے', '21 hours = 21 گھنٹے'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ایک دن', '22 hours = ایک دن'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ایک دن', '35 hours = ایک دن'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 دن', '36 hours = 2 دن'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ایک دن', '1 day = ایک دن'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 دن', '5 days = 5 دن'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 دن', '25 days = 25 دن'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ایک ماہ', '26 days = ایک ماہ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ایک ماہ', '30 days = ایک ماہ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ایک ماہ', '43 days = ایک ماہ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ماہ', '46 days = 2 ماہ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ماہ', '75 days = 2 ماہ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ماہ', '76 days = 3 ماہ'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ایک ماہ', '1 month = ایک ماہ'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ماہ', '5 months = 5 ماہ'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ایک سال', '345 days = ایک سال'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 سال', '548 days = 2 سال'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ایک سال', '1 year = ایک سال'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 سال', '5 years = 5 سال'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'چند سیکنڈ بعد', 'prefix'); + assert.equal(moment(0).from(30000), 'چند سیکنڈ قبل', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'چند سیکنڈ قبل', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'چند سیکنڈ بعد', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 دن بعد', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'آج بوقت 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'آج بوقت 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'آج بوقت 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'کل بوقت 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'آج بوقت 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'گذشتہ روز بوقت 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [بوقت] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [بوقت] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [بوقت] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[گذشتہ] dddd [بوقت] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[گذشتہ] dddd [بوقت] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[گذشتہ] dddd [بوقت] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('uz-latn'); + +test('parse', function (assert) { + var tests = 'Yanvar Yan_Fevral Fev_Mart Mar_Aprel Apr_May May_Iyun Iyun_Iyul Iyul_Avgust Avg_Sentabr Sen_Oktabr Okt_Noyabr Noy_Dekabr Dek'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do-MMMM YYYY, h:mm:ss', 'Yakshanba, 14-Fevral 2010, 3:25:50'], + ['ddd, h:mm', 'Yak, 3:25'], + ['M Mo MM MMMM MMM', '2 2 02 Fevral Fev'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Yakshanba Yak Ya'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[yilning] DDDo-[kuni]', 'yilning 45-kuni'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 Fevral 2010'], + ['LLL', '14 Fevral 2010 15:25'], + ['LLLL', '14 Fevral 2010, Yakshanba 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Fev 2010'], + ['lll', '14 Fev 2010 15:25'], + ['llll', '14 Fev 2010, Yak 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2016, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2016, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2016, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2016, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2016, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2016, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2016, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2016, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2016, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2016, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2016, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2016, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2016, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2016, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2016, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2016, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2016, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2016, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2016, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2016, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2016, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2016, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2016, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2016, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2016, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2016, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2016, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2016, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2016, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2016, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2016, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'Yanvar Yan_Fevral Fev_Mart Mar_Aprel Apr_May May_Iyun Iyun_Iyul Iyul_Avgust Avg_Sentabr Sen_Oktabr Okt_Noyabr Noy_Dekabr Dek'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2016, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Yakshanba Yak Ya_Dushanba Dush Du_Seshanba Sesh Se_Chorshanba Chor Cho_Payshanba Pay Pa_Juma Jum Ju_Shanba Shan Sha'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2016, 0, 3 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2017, 1, 28]); + assert.equal(start.from(moment([2017, 1, 28]).add({s: 44}), true), 'soniya', '44 soniya = soniya'); + assert.equal(start.from(moment([2017, 1, 28]).add({s: 45}), true), 'bir daqiqa', '45 soniya = bir daqiqa'); + assert.equal(start.from(moment([2017, 1, 28]).add({s: 89}), true), 'bir daqiqa', '89 soniya = bir daqiqa'); + assert.equal(start.from(moment([2017, 1, 28]).add({s: 90}), true), '2 daqiqa', '90 soniya = 2 daqiqa'); + assert.equal(start.from(moment([2017, 1, 28]).add({m: 44}), true), '44 daqiqa', '44 daqiqa = 44 daqiqa'); + assert.equal(start.from(moment([2017, 1, 28]).add({m: 45}), true), 'bir soat', '45 minut = bir soat'); + assert.equal(start.from(moment([2017, 1, 28]).add({m: 89}), true), 'bir soat', '89 minut = bir soat'); + assert.equal(start.from(moment([2017, 1, 28]).add({m: 90}), true), '2 soat', '90 minut = 2 soat'); + assert.equal(start.from(moment([2017, 1, 28]).add({h: 5}), true), '5 soat', '5 soat = 5 soat'); + assert.equal(start.from(moment([2017, 1, 28]).add({h: 21}), true), '21 soat', '21 soat = 21 soat'); + assert.equal(start.from(moment([2017, 1, 28]).add({h: 22}), true), 'bir kun', '22 soat = bir kun'); + assert.equal(start.from(moment([2017, 1, 28]).add({h: 35}), true), 'bir kun', '35 soat = bir kun'); + assert.equal(start.from(moment([2017, 1, 28]).add({h: 36}), true), '2 kun', '36 soat = 2 kun'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 1}), true), 'bir kun', '1 kun = 1 kun'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 5}), true), '5 kun', '5 kun = 5 kun'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 25}), true), '25 kun', '25 kun = 25 kun'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 26}), true), 'bir oy', '26 kun = bir oy'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 30}), true), 'bir oy', '30 kun = bir oy'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 43}), true), 'bir oy', '45 kun = bir oy'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 46}), true), '2 oy', '46 kun = 2 oy'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 74}), true), '2 oy', '75 kun = 2 oy'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 76}), true), '3 oy', '76 kun = 3 oy'); + assert.equal(start.from(moment([2017, 1, 28]).add({M: 1}), true), 'bir oy', 'bir oy = bir oy'); + assert.equal(start.from(moment([2017, 1, 28]).add({M: 5}), true), '5 oy', '5 oy = 5 oy'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 345}), true), 'bir yil', '345 kun = bir yil'); + assert.equal(start.from(moment([2017, 1, 28]).add({d: 548}), true), '2 yil', '548 kun = 2 yil'); + assert.equal(start.from(moment([2017, 1, 28]).add({y: 1}), true), 'bir yil', '1 yil = bir yil'); + assert.equal(start.from(moment([2017, 1, 28]).add({y: 5}), true), '5 yil', '5 yil = 5 yil'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'Yaqin soniya ichida', 'prefix'); + assert.equal(moment(0).from(30000), 'Bir necha soniya oldin', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'Bir necha soniya oldin', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'Yaqin soniya ichida', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'Yaqin 5 kun ichida', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Bugun soat 12:00 da', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Bugun soat 12:25 da', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Bugun soat 13:00 da', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Ertaga 12:00 da', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Bugun soat 11:00 da', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Kecha soat 12:00 da', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [kuni soat] LT [da]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [kuni soat] LT [da]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [kuni soat] LT [da]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[O\'tgan] dddd [kuni soat] LT [da]'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[O\'tgan] dddd [kuni soat] LT [da]'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[O\'tgan] dddd [kuni soat] LT [da]'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('uz'); + +test('parse', function (assert) { + var tests = 'январ янв_феврал фев_март мар_апрел апр_май май_июн июн_июл июл_август авг_сентябр сен_октябр окт_ноябр ноя_декабр дек'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, Do-MMMM YYYY, h:mm:ss', 'Якшанба, 14-феврал 2010, 3:25:50'], + ['ddd, h:mm', 'Якш, 3:25'], + ['M Mo MM MMMM MMM', '2 2 02 феврал фев'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Якшанба Якш Як'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[йилнинг] DDDo-[куни]', 'йилнинг 45-куни'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 феврал 2010'], + ['LLL', '14 феврал 2010 15:25'], + ['LLLL', '14 феврал 2010, Якшанба 15:25'], + ['l', '14/2/2010'], + ['ll', '14 фев 2010'], + ['lll', '14 фев 2010 15:25'], + ['llll', '14 фев 2010, Якш 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var expected = 'январ янв_феврал фев_март мар_апрел апр_май май_июн июн_июл июл_август авг_сентябр сен_октябр окт_ноябр ноя_декабр дек'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Якшанба Якш Як_Душанба Душ Ду_Сешанба Сеш Се_Чоршанба Чор Чо_Пайшанба Пай Па_Жума Жум Жу_Шанба Шан Ша'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'фурсат', '44 секунд = фурсат'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'бир дакика', '45 секунд = бир дакика'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'бир дакика', '89 секунд = бир дакика'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 дакика', '90 секунд = 2 дакика'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 дакика', '44 дакика = 44 дакика'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'бир соат', '45 минут = бир соат'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'бир соат', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 соат', '90 минут = 2 соат'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 соат', '5 соат = 5 соат'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 соат', '21 соат = 21 соат'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'бир кун', '22 соат = бир кун'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'бир кун', '35 соат = бир кун'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 кун', '36 соат = 2 кун'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'бир кун', '1 кун = 1 кун'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 кун', '5 кун = 5 кун'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 кун', '25 кун = 25 кун'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'бир ой', '26 кун = бир ой'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'бир ой', '30 кун = бир ой'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'бир ой', '45 кун = бир ой'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ой', '46 кун = 2 ой'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ой', '75 кун = 2 ой'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ой', '76 кун = 3 ой'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'бир ой', 'бир ой = бир ой'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ой', '5 ой = 5 ой'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'бир йил', '345 кун = бир йил'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 йил', '548 кун = 2 йил'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'бир йил', '1 йил = бир йил'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 йил', '5 йил = 5 йил'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'Якин фурсат ичида', 'prefix'); + assert.equal(moment(0).from(30000), 'Бир неча фурсат олдин', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'Бир неча фурсат олдин', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'Якин фурсат ичида', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'Якин 5 кун ичида', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Бугун соат 12:00 да', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Бугун соат 12:25 да', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Бугун соат 13:00 да', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Эртага 12:00 да', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Бугун соат 11:00 да', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Кеча соат 12:00 да', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [куни соат] LT [да]'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [куни соат] LT [да]'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [куни соат] LT [да]'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[Утган] dddd [куни соат] LT [да]'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[Утган] dddd [куни соат] LT [да]'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[Утган] dddd [куни соат] LT [да]'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('vi'); + +test('parse', function (assert) { + var i, + tests = 'tháng 1,Th01_tháng 2,Th02_tháng 3,Th03_tháng 4,Th04_tháng 5,Th05_tháng 6,Th06_tháng 7,Th07_tháng 8,Th08_tháng 9,Th09_tháng 10,Th10_tháng 11,Th11_tháng 12,Th12'.split('_'); + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + i); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(','); + equalTest(tests[i][0], '[tháng] M', i); + equalTest(tests[i][1], '[Th]M', i); + equalTest(tests[i][0], '[tháng] MM', i); + equalTest(tests[i][1], '[Th]MM', i); + equalTest(tests[i][0].toLocaleLowerCase(), '[THÁNG] M', i); + equalTest(tests[i][1].toLocaleLowerCase(), '[TH]M', i); + equalTest(tests[i][0].toLocaleUpperCase(), '[THÁNG] MM', i); + equalTest(tests[i][1].toLocaleUpperCase(), '[TH]MM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'chủ nhật, tháng 2 14 2010, 3:25:50 ch'], + ['ddd, hA', 'CN, 3CH'], + ['M Mo MM MMMM MMM', '2 2 02 tháng 2 Th02'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 chủ nhật CN CN'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'ch CH'], + ['[ngày thứ] DDDo [của năm]', 'ngày thứ 45 của năm'], + ['LTS', '15:25:50'], + ['L', '14/02/2010'], + ['LL', '14 tháng 2 năm 2010'], + ['LLL', '14 tháng 2 năm 2010 15:25'], + ['LLLL', 'chủ nhật, 14 tháng 2 năm 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Th02 2010'], + ['lll', '14 Th02 2010 15:25'], + ['llll', 'CN, 14 Th02 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); +}); + +test('format month', function (assert) { + var i, + expected = 'tháng 1,Th01_tháng 2,Th02_tháng 3,Th03_tháng 4,Th04_tháng 5,Th05_tháng 6,Th06_tháng 7,Th07_tháng 8,Th08_tháng 9,Th09_tháng 10,Th10_tháng 11,Th11_tháng 12,Th12'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM,MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var i, + expected = 'chủ nhật CN CN_thứ hai T2 T2_thứ ba T3 T3_thứ tư T4 T4_thứ năm T5 T5_thứ sáu T6 T6_thứ bảy T7 T7'.split('_'); + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'vài giây', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'một phút', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'một phút', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 phút', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 phút', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'một giờ', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'một giờ', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 giờ', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 giờ', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 giờ', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'một ngày', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'một ngày', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ngày', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'một ngày', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ngày', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ngày', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'một tháng', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'một tháng', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'một tháng', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 tháng', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 tháng', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 tháng', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'một tháng', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 tháng', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'một năm', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 năm', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'một năm', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 năm', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'vài giây tới', 'prefix'); + assert.equal(moment(0).from(30000), 'vài giây trước', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'vài giây trước', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'vài giây tới', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 ngày tới', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Hôm nay lúc 12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Hôm nay lúc 12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Hôm nay lúc 13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Ngày mai lúc 12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hôm nay lúc 11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Hôm qua lúc 12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('x-pseudo'); + +test('parse', function (assert) { + var tests = 'J~áñúá~rý J~áñ_F~ébrú~árý ~Féb_~Márc~h ~Már_Áp~ríl ~Ápr_~Máý ~Máý_~Júñé~ ~Júñ_Júl~ý ~Júl_Áú~gúst~ ~Áúg_Sép~témb~ér ~Sép_Ó~ctób~ér ~Óct_Ñ~óvém~bér ~Ñóv_~Décé~mbér ~Déc'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'S~úñdá~ý, F~ébrú~árý 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'S~úñ, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 F~ébrú~árý ~Féb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th S~úñdá~ý S~úñ S~ú'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '6 6th 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['LT', '15:25'], + ['L', '14/02/2010'], + ['LL', '14 F~ébrú~árý 2010'], + ['LLL', '14 F~ébrú~árý 2010 15:25'], + ['LLLL', 'S~úñdá~ý, 14 F~ébrú~árý 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 ~Féb 2010'], + ['lll', '14 ~Féb 2010 15:25'], + ['llll', 'S~úñ, 14 ~Féb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); +}); + +test('format month', function (assert) { + var expected = 'J~áñúá~rý J~áñ_F~ébrú~árý ~Féb_~Márc~h ~Már_Áp~ríl ~Ápr_~Máý ~Máý_~Júñé~ ~Júñ_Júl~ý ~Júl_Áú~gúst~ ~Áúg_Sép~témb~ér ~Sép_Ó~ctób~ér ~Óct_Ñ~óvém~bér ~Ñóv_~Décé~mbér ~Déc'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'S~úñdá~ý S~úñ S~ú_Mó~ñdáý~ ~Móñ Mó~_Túé~sdáý~ ~Túé Tú_Wéd~ñésd~áý ~Wéd ~Wé_T~húrs~dáý ~Thú T~h_~Fríd~áý ~Frí Fr~_S~átúr~dáý ~Sát Sá'.split('_'), i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'á ~féw ~sécó~ñds', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'á ~míñ~úté', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'á ~míñ~úté', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 m~íñú~tés', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 m~íñú~tés', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'á~ñ hó~úr', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'á~ñ hó~úr', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 h~óúrs', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 h~óúrs', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 h~óúrs', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'á ~dáý', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'á ~dáý', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 d~áýs', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'á ~dáý', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 d~áýs', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 d~áýs', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'á ~móñ~th', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'á ~móñ~th', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'á ~móñ~th', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 m~óñt~hs', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 m~óñt~hs', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 m~óñt~hs', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'á ~móñ~th', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 m~óñt~hs', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'á ~ýéár', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ý~éárs', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'á ~ýéár', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ý~éárs', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'í~ñ á ~féw ~sécó~ñds', 'prefix'); + assert.equal(moment(0).from(30000), 'á ~féw ~sécó~ñds á~gó', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'á ~féw ~sécó~ñds á~gó', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'í~ñ á ~féw ~sécó~ñds', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), 'í~ñ 5 d~áýs', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(2).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'T~ódá~ý át 02:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'T~ódá~ý át 02:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'T~ódá~ý át 03:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'T~ómó~rró~w át 02:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'T~ódá~ý át 01:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ý~ést~érdá~ý át 02:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [át] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [át] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [át] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[L~ást] dddd [át] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[L~ást] dddd [át] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[L~ást] dddd [át] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('yo'); + +test('parse', function (assert) { + var tests = 'Sẹ́rẹ́ Sẹ́r_Èrèlè Èrl_Ẹrẹ̀nà Ẹrn_Ìgbé Ìgb_Èbibi Èbi_Òkùdu Òkù_Agẹmo Agẹ_Ògún Ògú_Owewe Owe_Ọ̀wàrà Ọ̀wà_Bélú Bél_Ọ̀pẹ̀̀ Ọ̀pẹ̀̀'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Àìkú, Èrèlè ọjọ́ 14 2010, 3:25:50 pm'], + ['ddd, hA', 'Àìk, 3PM'], + ['M Mo MM MMMM MMM', '2 ọjọ́ 2 02 Èrèlè Èrl'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 ọjọ́ 14 14'], + ['d do dddd ddd dd', '0 ọjọ́ 0 Àìkú Àìk Àì'], + ['DDD DDDo DDDD', '45 ọjọ́ 45 045'], + ['w wo ww', '6 ọjọ́ 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the ọjọ́ 45 day of the year'], + ['LTS', '3:25:50 PM'], + ['L', '14/02/2010'], + ['LL', '14 Èrèlè 2010'], + ['LLL', '14 Èrèlè 2010 3:25 PM'], + ['LLLL', 'Àìkú, 14 Èrèlè 2010 3:25 PM'], + ['l', '14/2/2010'], + ['ll', '14 Èrl 2010'], + ['lll', '14 Èrl 2010 3:25 PM'], + ['llll', 'Àìk, 14 Èrl 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format ordinal', function (assert) { + assert.equal(moment([2011, 0, 1]).format('DDDo'), 'ọjọ́ 1', 'ọjọ́ 1'); + assert.equal(moment([2011, 0, 2]).format('DDDo'), 'ọjọ́ 2', 'ọjọ́ 2'); + assert.equal(moment([2011, 0, 3]).format('DDDo'), 'ọjọ́ 3', 'ọjọ́ 3'); + assert.equal(moment([2011, 0, 4]).format('DDDo'), 'ọjọ́ 4', 'ọjọ́ 4'); + assert.equal(moment([2011, 0, 5]).format('DDDo'), 'ọjọ́ 5', 'ọjọ́ 5'); + assert.equal(moment([2011, 0, 6]).format('DDDo'), 'ọjọ́ 6', 'ọjọ́ 6'); + assert.equal(moment([2011, 0, 7]).format('DDDo'), 'ọjọ́ 7', 'ọjọ́ 7'); + assert.equal(moment([2011, 0, 8]).format('DDDo'), 'ọjọ́ 8', 'ọjọ́ 8'); + assert.equal(moment([2011, 0, 9]).format('DDDo'), 'ọjọ́ 9', 'ọjọ́ 9'); + assert.equal(moment([2011, 0, 10]).format('DDDo'), 'ọjọ́ 10', 'ọjọ́ 10'); + + assert.equal(moment([2011, 0, 11]).format('DDDo'), 'ọjọ́ 11', 'ọjọ́ 11'); + assert.equal(moment([2011, 0, 12]).format('DDDo'), 'ọjọ́ 12', 'ọjọ́ 12'); + assert.equal(moment([2011, 0, 13]).format('DDDo'), 'ọjọ́ 13', 'ọjọ́ 13'); + assert.equal(moment([2011, 0, 14]).format('DDDo'), 'ọjọ́ 14', 'ọjọ́ 14'); + assert.equal(moment([2011, 0, 15]).format('DDDo'), 'ọjọ́ 15', 'ọjọ́ 15'); + assert.equal(moment([2011, 0, 16]).format('DDDo'), 'ọjọ́ 16', 'ọjọ́ 16'); + assert.equal(moment([2011, 0, 17]).format('DDDo'), 'ọjọ́ 17', 'ọjọ́ 17'); + assert.equal(moment([2011, 0, 18]).format('DDDo'), 'ọjọ́ 18', 'ọjọ́ 18'); + assert.equal(moment([2011, 0, 19]).format('DDDo'), 'ọjọ́ 19', 'ọjọ́ 19'); + assert.equal(moment([2011, 0, 20]).format('DDDo'), 'ọjọ́ 20', 'ọjọ́ 20'); + + assert.equal(moment([2011, 0, 21]).format('DDDo'), 'ọjọ́ 21', 'ọjọ́ 21'); + assert.equal(moment([2011, 0, 22]).format('DDDo'), 'ọjọ́ 22', 'ọjọ́ 22'); + assert.equal(moment([2011, 0, 23]).format('DDDo'), 'ọjọ́ 23', 'ọjọ́ 23'); + assert.equal(moment([2011, 0, 24]).format('DDDo'), 'ọjọ́ 24', 'ọjọ́ 24'); + assert.equal(moment([2011, 0, 25]).format('DDDo'), 'ọjọ́ 25', 'ọjọ́ 25'); + assert.equal(moment([2011, 0, 26]).format('DDDo'), 'ọjọ́ 26', 'ọjọ́ 26'); + assert.equal(moment([2011, 0, 27]).format('DDDo'), 'ọjọ́ 27', 'ọjọ́ 27'); + assert.equal(moment([2011, 0, 28]).format('DDDo'), 'ọjọ́ 28', 'ọjọ́ 28'); + assert.equal(moment([2011, 0, 29]).format('DDDo'), 'ọjọ́ 29', 'ọjọ́ 29'); + assert.equal(moment([2011, 0, 30]).format('DDDo'), 'ọjọ́ 30', 'ọjọ́ 30'); + + assert.equal(moment([2011, 0, 31]).format('DDDo'), 'ọjọ́ 31', 'ọjọ́ 31'); +}); + +test('format month', function (assert) { + var expected = 'Sẹ́rẹ́ Sẹ́r_Èrèlè Èrl_Ẹrẹ̀nà Ẹrn_Ìgbé Ìgb_Èbibi Èbi_Òkùdu Òkù_Agẹmo Agẹ_Ògún Ògú_Owewe Owe_Ọ̀wàrà Ọ̀wà_Bélú Bél_Ọ̀pẹ̀̀ Ọ̀pẹ̀̀'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = 'Àìkú Àìk Àì_Ajé Ajé Aj_Ìsẹ́gun Ìsẹ́ Ìs_Ọjọ́rú Ọjr Ọr_Ọjọ́bọ Ọjb Ọb_Ẹtì Ẹtì Ẹt_Àbámẹ́ta Àbá Àb'.split('_'), + i; + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ìsẹjú aayá die', '44 seconds = ìsẹjú aayá die'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ìsẹjú kan', '45 seconds = ìsẹjú kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ìsẹjú kan', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'ìsẹjú 2', '90 seconds = ìsẹjú 2'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'ìsẹjú 44', 'ìsẹjú 44 = ìsẹjú 44'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'wákati kan', 'ìsẹjú 45 = wákati kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'wákati kan', 'ìsẹjú 89 = wákati kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'wákati 2', 'ìsẹjú 90 = wákati 2'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'wákati 5', 'wákati 5 = wákati 5'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'wákati 21', 'wákati 21 = wákati 21'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ọjọ́ kan', '22 wákati = ọjọ́ kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ọjọ́ kan', '35 wákati = ọjọ́ kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'ọjọ́ 2', 'wákati 36 = ọjọ́ 2'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ọjọ́ kan', '1 = ọjọ́ kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'ọjọ́ 5', 'ọjọ́ 5 = ọjọ́ 5'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'ọjọ́ 25', 'ọjọ́ 25 = ọjọ́ 25'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'osù kan', 'ọjọ́ 26 = osù kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'osù kan', 'ọjọ́ 30 = osù kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'osù kan', 'ọjọ́ 43 = osù kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'osù 2', 'ọjọ́ 46 = osù 2'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'osù 2', 'ọjọ́ 75 = osù 2'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'osù 3', 'ọjọ́ 76 = osù 3'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'osù kan', 'osù 1 = osù kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'osù 5', 'osù 5 = osù 5'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ọdún kan', 'ọjọ 345 = ọdún kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'ọdún 2', 'ọjọ 548 = ọdún 2'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ọdún kan', 'ọdún 1 = ọdún kan'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'ọdún 5', 'ọdún 5 = ọdún 5'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), 'ní ìsẹjú aayá die', 'prefix'); + assert.equal(moment(0).from(30000), 'ìsẹjú aayá die kọjá', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), 'ìsẹjú aayá die kọjá', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), 'ní ìsẹjú aayá die', 'ní ìsẹjú aayá die'); + assert.equal(moment().add({d: 5}).fromNow(), 'ní ọjọ́ 5', 'ní ọjọ́ 5'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Ònì ni 12:00 PM', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Ònì ni 12:25 PM', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Ònì ni 1:00 PM', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Ọ̀la ni 12:00 PM', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Ònì ni 11:00 AM', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Àna ni 12:00 PM', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tón\'bọ] [ni] LT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tón\'bọ] [ni] LT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tón\'bọ] [ni] LT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tólọ́] [ni] LT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tólọ́] [ni] LT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tólọ́] [ni] LT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 ọjọ́ 52', 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 ọjọ́ 1', 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 ọjọ́ 1', 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 ọjọ́ 2', 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 ọjọ́ 2', 'Jan 15 2012 should be week 2'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('zh-cn'); + +test('parse', function (assert) { + var tests = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i; + + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, a h:mm:ss', '星期日, 二月 14日 2010, 下午 3:25:50'], + ['ddd, Ah', '周日, 下午3'], + ['M Mo MM MMMM MMM', '2 2月 02 二月 2月'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14日 14'], + ['d do dddd ddd dd', '0 0日 星期日 周日 日'], + ['DDD DDDo DDDD', '45 45日 045'], + ['w wo ww', '6 6周 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', '下午 下午'], + ['[这年的第] DDDo', '这年的第 45日'], + ['LTS', '15:25:50'], + ['L', '2010年2月14日'], + ['LL', '2010年2月14日'], + ['LLL', '2010年2月14日下午3点25分'], + ['LLLL', '2010年2月14日星期日下午3点25分'], + ['l', '2010年2月14日'], + ['ll', '2010年2月14日'], + ['lll', '2010年2月14日 15:25'], + ['llll', '2010年2月14日星期日 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format month', function (assert) { + var expected = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i; + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = '星期日 周日 日_星期一 周一 一_星期二 周二 二_星期三 周三 三_星期四 周四 四_星期五 周五 五_星期六 周六 六'.split('_'), i; + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '几秒', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1 分钟', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1 分钟', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 分钟', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 分钟', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1 小时', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1 小时', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 小时', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 小时', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 小时', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 天', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 天', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 天', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 天', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 天', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 天', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1 个月', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1 个月', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1 个月', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 个月', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 个月', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 个月', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1 个月', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 个月', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1 年', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 年', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1 年', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 年', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), '几秒内', 'prefix'); + assert.equal(moment(0).from(30000), '几秒前', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), '几秒前', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), '几秒内', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 天内', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), '今天12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), '今天12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), '今天13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), '明天12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), '今天11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), '昨天12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 0, 0]).format('A'), '凌晨', 'before dawn'); + assert.equal(moment([2011, 2, 23, 6, 0]).format('A'), '早上', 'morning'); + assert.equal(moment([2011, 2, 23, 9, 0]).format('A'), '上午', 'before noon'); + assert.equal(moment([2011, 2, 23, 12, 0]).format('A'), '中午', 'noon'); + assert.equal(moment([2011, 2, 23, 13, 0]).format('A'), '下午', 'afternoon'); + assert.equal(moment([2011, 2, 23, 18, 0]).format('A'), '晚上', 'night'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52周', 'Jan 1 2012 应该是第52周'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1周', 'Jan 7 2012 应该是第 1周'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2周', 'Jan 14 2012 应该是第 2周'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('zh-hk'); + +test('parse', function (assert) { + var tests = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, a h:mm:ss', '星期日, 二月 14日 2010, 下午 3:25:50'], + ['ddd, Ah', '週日, 下午3'], + ['M Mo MM MMMM MMM', '2 2月 02 二月 2月'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14日 14'], + ['d do dddd ddd dd', '0 0日 星期日 週日 日'], + ['DDD DDDo DDDD', '45 45日 045'], + ['w wo ww', '8 8週 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', '下午 下午'], + ['[這年的第] DDDo', '這年的第 45日'], + ['LTS', '15:25:50'], + ['L', '2010年2月14日'], + ['LL', '2010年2月14日'], + ['LLL', '2010年2月14日 15:25'], + ['LLLL', '2010年2月14日星期日 15:25'], + ['l', '2010年2月14日'], + ['ll', '2010年2月14日'], + ['lll', '2010年2月14日 15:25'], + ['llll', '2010年2月14日星期日 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format month', function (assert) { + var expected = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i; + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = '星期日 週日 日_星期一 週一 一_星期二 週二 二_星期三 週三 三_星期四 週四 四_星期五 週五 五_星期六 週六 六'.split('_'), i; + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '幾秒', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1 分鐘', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1 分鐘', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 分鐘', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 分鐘', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1 小時', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1 小時', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 小時', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 小時', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 小時', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 天', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 天', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 天', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 天', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 天', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 天', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1 個月', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1 個月', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1 個月', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 個月', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 個月', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 個月', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1 個月', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 個月', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1 年', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 年', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1 年', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 年', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), '幾秒內', 'prefix'); + assert.equal(moment(0).from(30000), '幾秒前', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), '幾秒前', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), '幾秒內', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 天內', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), '今天12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), '今天12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), '今天13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), '明天12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), '今天11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), '昨天12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 0, 0]).format('a'), '凌晨', 'before dawn'); + assert.equal(moment([2011, 2, 23, 6, 0]).format('a'), '早上', 'morning'); + assert.equal(moment([2011, 2, 23, 9, 0]).format('a'), '上午', 'before noon'); + assert.equal(moment([2011, 2, 23, 12, 0]).format('a'), '中午', 'noon'); + assert.equal(moment([2011, 2, 23, 13, 0]).format('a'), '下午', 'after noon'); + assert.equal(moment([2011, 2, 23, 18, 0]).format('a'), '晚上', 'night'); + + assert.equal(moment([2011, 2, 23, 0, 0]).format('A'), '凌晨', 'before dawn'); + assert.equal(moment([2011, 2, 23, 6, 0]).format('A'), '早上', 'morning'); + assert.equal(moment([2011, 2, 23, 9, 0]).format('A'), '上午', 'before noon'); + assert.equal(moment([2011, 2, 23, 12, 0]).format('A'), '中午', 'noon'); + assert.equal(moment([2011, 2, 23, 13, 0]).format('A'), '下午', 'afternoon'); + assert.equal(moment([2011, 2, 23, 18, 0]).format('A'), '晚上', 'night'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1週', 'Jan 1 2012 應該是第 1週'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1週', 'Jan 7 2012 應該是第 1週'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2週', 'Jan 8 2012 應該是第 2週'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2週', 'Jan 14 2012 應該是第 2週'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3週', 'Jan 15 2012 應該是第 3週'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + + + +function localeModule (name, lifecycle) { + QUnit.module('locale:' + name, { + setup : function () { + moment.locale(name); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + moment.locale('en'); + teardownDeprecationHandler(test, moment, 'locale'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); + defineCommonLocaleTests(name, -1, -1); +} + +localeModule('zh-tw'); + +test('parse', function (assert) { + var tests = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i; + function equalTest(input, mmm, i) { + assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } +}); + +test('format', function (assert) { + var a = [ + ['dddd, MMMM Do YYYY, a h:mm:ss', '星期日, 二月 14日 2010, 下午 3:25:50'], + ['ddd, Ah', '週日, 下午3'], + ['M Mo MM MMMM MMM', '2 2月 02 二月 2月'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14日 14'], + ['d do dddd ddd dd', '0 0日 星期日 週日 日'], + ['DDD DDDo DDDD', '45 45日 045'], + ['w wo ww', '8 8週 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', '下午 下午'], + ['[這年的第] DDDo', '這年的第 45日'], + ['LTS', '15:25:50'], + ['L', '2010年2月14日'], + ['LL', '2010年2月14日'], + ['LLL', '2010年2月14日 15:25'], + ['LLLL', '2010年2月14日星期日 15:25'], + ['l', '2010年2月14日'], + ['ll', '2010年2月14日'], + ['lll', '2010年2月14日 15:25'], + ['llll', '2010年2月14日星期日 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('format month', function (assert) { + var expected = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i; + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } +}); + +test('format week', function (assert) { + var expected = '星期日 週日 日_星期一 週一 一_星期二 週二 二_星期三 週三 三_星期四 週四 四_星期五 週五 五_星期六 週六 六'.split('_'), i; + + for (i = 0; i < expected.length; i++) { + assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } +}); + +test('from', function (assert) { + var start = moment([2007, 1, 28]); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '幾秒', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1 分鐘', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1 分鐘', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 分鐘', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 分鐘', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1 小時', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1 小時', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 小時', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 小時', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 小時', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 天', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 天', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 天', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 天', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 天', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 天', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1 個月', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1 個月', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1 個月', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 個月', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 個月', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 個月', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1 個月', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 個月', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1 年', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 年', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1 年', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 年', '5 years = 5 years'); +}); + +test('suffix', function (assert) { + assert.equal(moment(30000).from(0), '幾秒內', 'prefix'); + assert.equal(moment(0).from(30000), '幾秒前', 'suffix'); +}); + +test('now from now', function (assert) { + assert.equal(moment().fromNow(), '幾秒前', 'now from now should display as in the past'); +}); + +test('fromNow', function (assert) { + assert.equal(moment().add({s: 30}).fromNow(), '幾秒內', 'in a few seconds'); + assert.equal(moment().add({d: 5}).fromNow(), '5 天內', 'in 5 days'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), '今天12:00', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), '今天12:25', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), '今天13:00', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), '明天12:00', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), '今天11:00', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), '昨天12:00', 'yesterday at the same time'); +}); + +test('calendar next week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days end of day'); + } +}); + +test('calendar last week', function (assert) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days current time'); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days beginning of day'); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days end of day'); + } +}); + +test('calendar all else', function (assert) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week'); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago'); + assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks'); +}); + +test('meridiem', function (assert) { + assert.equal(moment([2011, 2, 23, 0, 0]).format('a'), '凌晨', 'before dawn'); + assert.equal(moment([2011, 2, 23, 6, 0]).format('a'), '早上', 'morning'); + assert.equal(moment([2011, 2, 23, 9, 0]).format('a'), '上午', 'before noon'); + assert.equal(moment([2011, 2, 23, 12, 0]).format('a'), '中午', 'noon'); + assert.equal(moment([2011, 2, 23, 13, 0]).format('a'), '下午', 'after noon'); + assert.equal(moment([2011, 2, 23, 18, 0]).format('a'), '晚上', 'night'); + + assert.equal(moment([2011, 2, 23, 0, 0]).format('A'), '凌晨', 'before dawn'); + assert.equal(moment([2011, 2, 23, 6, 0]).format('A'), '早上', 'morning'); + assert.equal(moment([2011, 2, 23, 9, 0]).format('A'), '上午', 'before noon'); + assert.equal(moment([2011, 2, 23, 12, 0]).format('A'), '中午', 'noon'); + assert.equal(moment([2011, 2, 23, 13, 0]).format('A'), '下午', 'afternoon'); + assert.equal(moment([2011, 2, 23, 18, 0]).format('A'), '晚上', 'night'); +}); + +test('weeks year starting sunday format', function (assert) { + assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1週', 'Jan 1 2012 應該是第 1週'); + assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1週', 'Jan 7 2012 應該是第 1週'); + assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2週', 'Jan 8 2012 應該是第 2週'); + assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2週', 'Jan 14 2012 應該是第 2週'); + assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3週', 'Jan 15 2012 應該是第 3週'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('add and subtract'); + +test('add short reverse args', function (assert) { + var a = moment(), b, c, d; + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.add({ms: 50}).milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add({s: 1}).seconds(), 9, 'Add seconds'); + assert.equal(a.add({m: 1}).minutes(), 8, 'Add minutes'); + assert.equal(a.add({h: 1}).hours(), 7, 'Add hours'); + assert.equal(a.add({d: 1}).date(), 13, 'Add date'); + assert.equal(a.add({w: 1}).date(), 20, 'Add week'); + assert.equal(a.add({M: 1}).month(), 10, 'Add month'); + assert.equal(a.add({y: 1}).year(), 2012, 'Add year'); + assert.equal(a.add({Q: 1}).month(), 1, 'Add quarter'); + + b = moment([2010, 0, 31]).add({M: 1}); + c = moment([2010, 1, 28]).subtract({M: 1}); + d = moment([2010, 1, 28]).subtract({Q: 1}); + + assert.equal(b.month(), 1, 'add month, jan 31st to feb 28th'); + assert.equal(b.date(), 28, 'add month, jan 31st to feb 28th'); + assert.equal(c.month(), 0, 'subtract month, feb 28th to jan 28th'); + assert.equal(c.date(), 28, 'subtract month, feb 28th to jan 28th'); + assert.equal(d.month(), 10, 'subtract quarter, feb 28th 2010 to nov 28th 2009'); + assert.equal(d.date(), 28, 'subtract quarter, feb 28th 2010 to nov 28th 2009'); + assert.equal(d.year(), 2009, 'subtract quarter, feb 28th 2010 to nov 28th 2009'); +}); + +test('add long reverse args', function (assert) { + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.add({milliseconds: 50}).milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add({seconds: 1}).seconds(), 9, 'Add seconds'); + assert.equal(a.add({minutes: 1}).minutes(), 8, 'Add minutes'); + assert.equal(a.add({hours: 1}).hours(), 7, 'Add hours'); + assert.equal(a.add({days: 1}).date(), 13, 'Add date'); + assert.equal(a.add({weeks: 1}).date(), 20, 'Add week'); + assert.equal(a.add({months: 1}).month(), 10, 'Add month'); + assert.equal(a.add({years: 1}).year(), 2012, 'Add year'); + assert.equal(a.add({quarters: 1}).month(), 1, 'Add quarter'); +}); + +test('add long singular reverse args', function (assert) { + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.add({millisecond: 50}).milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add({second: 1}).seconds(), 9, 'Add seconds'); + assert.equal(a.add({minute: 1}).minutes(), 8, 'Add minutes'); + assert.equal(a.add({hour: 1}).hours(), 7, 'Add hours'); + assert.equal(a.add({day: 1}).date(), 13, 'Add date'); + assert.equal(a.add({week: 1}).date(), 20, 'Add week'); + assert.equal(a.add({month: 1}).month(), 10, 'Add month'); + assert.equal(a.add({year: 1}).year(), 2012, 'Add year'); + assert.equal(a.add({quarter: 1}).month(), 1, 'Add quarter'); +}); + +test('add string long reverse args', function (assert) { + var a = moment(), b; + + test.expectedDeprecations('moment().add(period, number)'); + + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + b = a.clone(); + + assert.equal(a.add('millisecond', 50).milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add('second', 1).seconds(), 9, 'Add seconds'); + assert.equal(a.add('minute', 1).minutes(), 8, 'Add minutes'); + assert.equal(a.add('hour', 1).hours(), 7, 'Add hours'); + assert.equal(a.add('day', 1).date(), 13, 'Add date'); + assert.equal(a.add('week', 1).date(), 20, 'Add week'); + assert.equal(a.add('month', 1).month(), 10, 'Add month'); + assert.equal(a.add('year', 1).year(), 2012, 'Add year'); + assert.equal(b.add('day', '01').date(), 13, 'Add date'); + assert.equal(a.add('quarter', 1).month(), 1, 'Add quarter'); +}); + +test('add string long singular reverse args', function (assert) { + var a = moment(), b; + + test.expectedDeprecations('moment().add(period, number)'); + + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + b = a.clone(); + + assert.equal(a.add('milliseconds', 50).milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add('seconds', 1).seconds(), 9, 'Add seconds'); + assert.equal(a.add('minutes', 1).minutes(), 8, 'Add minutes'); + assert.equal(a.add('hours', 1).hours(), 7, 'Add hours'); + assert.equal(a.add('days', 1).date(), 13, 'Add date'); + assert.equal(a.add('weeks', 1).date(), 20, 'Add week'); + assert.equal(a.add('months', 1).month(), 10, 'Add month'); + assert.equal(a.add('years', 1).year(), 2012, 'Add year'); + assert.equal(b.add('days', '01').date(), 13, 'Add date'); + assert.equal(a.add('quarters', 1).month(), 1, 'Add quarter'); +}); + +test('add string short reverse args', function (assert) { + var a = moment(); + test.expectedDeprecations('moment().add(period, number)'); + + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.add('ms', 50).milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add('s', 1).seconds(), 9, 'Add seconds'); + assert.equal(a.add('m', 1).minutes(), 8, 'Add minutes'); + assert.equal(a.add('h', 1).hours(), 7, 'Add hours'); + assert.equal(a.add('d', 1).date(), 13, 'Add date'); + assert.equal(a.add('w', 1).date(), 20, 'Add week'); + assert.equal(a.add('M', 1).month(), 10, 'Add month'); + assert.equal(a.add('y', 1).year(), 2012, 'Add year'); + assert.equal(a.add('Q', 1).month(), 1, 'Add quarter'); +}); + +test('add string long', function (assert) { + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.add(50, 'millisecond').milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add(1, 'second').seconds(), 9, 'Add seconds'); + assert.equal(a.add(1, 'minute').minutes(), 8, 'Add minutes'); + assert.equal(a.add(1, 'hour').hours(), 7, 'Add hours'); + assert.equal(a.add(1, 'day').date(), 13, 'Add date'); + assert.equal(a.add(1, 'week').date(), 20, 'Add week'); + assert.equal(a.add(1, 'month').month(), 10, 'Add month'); + assert.equal(a.add(1, 'year').year(), 2012, 'Add year'); + assert.equal(a.add(1, 'quarter').month(), 1, 'Add quarter'); +}); + +test('add string long singular', function (assert) { + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.add(50, 'milliseconds').milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add(1, 'seconds').seconds(), 9, 'Add seconds'); + assert.equal(a.add(1, 'minutes').minutes(), 8, 'Add minutes'); + assert.equal(a.add(1, 'hours').hours(), 7, 'Add hours'); + assert.equal(a.add(1, 'days').date(), 13, 'Add date'); + assert.equal(a.add(1, 'weeks').date(), 20, 'Add week'); + assert.equal(a.add(1, 'months').month(), 10, 'Add month'); + assert.equal(a.add(1, 'years').year(), 2012, 'Add year'); + assert.equal(a.add(1, 'quarters').month(), 1, 'Add quarter'); +}); + +test('add string short', function (assert) { + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.add(50, 'ms').milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add(1, 's').seconds(), 9, 'Add seconds'); + assert.equal(a.add(1, 'm').minutes(), 8, 'Add minutes'); + assert.equal(a.add(1, 'h').hours(), 7, 'Add hours'); + assert.equal(a.add(1, 'd').date(), 13, 'Add date'); + assert.equal(a.add(1, 'w').date(), 20, 'Add week'); + assert.equal(a.add(1, 'M').month(), 10, 'Add month'); + assert.equal(a.add(1, 'y').year(), 2012, 'Add year'); + assert.equal(a.add(1, 'Q').month(), 1, 'Add quarter'); +}); + +test('add strings string short reversed', function (assert) { + var a = moment(); + test.expectedDeprecations('moment().add(period, number)'); + + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.add('ms', '50').milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add('s', '1').seconds(), 9, 'Add seconds'); + assert.equal(a.add('m', '1').minutes(), 8, 'Add minutes'); + assert.equal(a.add('h', '1').hours(), 7, 'Add hours'); + assert.equal(a.add('d', '1').date(), 13, 'Add date'); + assert.equal(a.add('w', '1').date(), 20, 'Add week'); + assert.equal(a.add('M', '1').month(), 10, 'Add month'); + assert.equal(a.add('y', '1').year(), 2012, 'Add year'); + assert.equal(a.add('Q', '1').month(), 1, 'Add quarter'); +}); + +test('subtract strings string short reversed', function (assert) { + var a = moment(); + test.expectedDeprecations('moment().subtract(period, number)'); + + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.subtract('ms', '50').milliseconds(), 450, 'Subtract milliseconds'); + assert.equal(a.subtract('s', '1').seconds(), 7, 'Subtract seconds'); + assert.equal(a.subtract('m', '1').minutes(), 6, 'Subtract minutes'); + assert.equal(a.subtract('h', '1').hours(), 5, 'Subtract hours'); + assert.equal(a.subtract('d', '1').date(), 11, 'Subtract date'); + assert.equal(a.subtract('w', '1').date(), 4, 'Subtract week'); + assert.equal(a.subtract('M', '1').month(), 8, 'Subtract month'); + assert.equal(a.subtract('y', '1').year(), 2010, 'Subtract year'); + assert.equal(a.subtract('Q', '1').month(), 5, 'Subtract quarter'); +}); + +test('add strings string short', function (assert) { + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.add('50', 'ms').milliseconds(), 550, 'Add milliseconds'); + assert.equal(a.add('1', 's').seconds(), 9, 'Add seconds'); + assert.equal(a.add('1', 'm').minutes(), 8, 'Add minutes'); + assert.equal(a.add('1', 'h').hours(), 7, 'Add hours'); + assert.equal(a.add('1', 'd').date(), 13, 'Add date'); + assert.equal(a.add('1', 'w').date(), 20, 'Add week'); + assert.equal(a.add('1', 'M').month(), 10, 'Add month'); + assert.equal(a.add('1', 'y').year(), 2012, 'Add year'); + assert.equal(a.add('1', 'Q').month(), 1, 'Add quarter'); +}); + +test('add no string with milliseconds default', function (assert) { + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.add(50).milliseconds(), 550, 'Add milliseconds'); +}); + +test('subtract strings string short', function (assert) { + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + assert.equal(a.subtract('50', 'ms').milliseconds(), 450, 'Subtract milliseconds'); + assert.equal(a.subtract('1', 's').seconds(), 7, 'Subtract seconds'); + assert.equal(a.subtract('1', 'm').minutes(), 6, 'Subtract minutes'); + assert.equal(a.subtract('1', 'h').hours(), 5, 'Subtract hours'); + assert.equal(a.subtract('1', 'd').date(), 11, 'Subtract date'); + assert.equal(a.subtract('1', 'w').date(), 4, 'Subtract week'); + assert.equal(a.subtract('1', 'M').month(), 8, 'Subtract month'); + assert.equal(a.subtract('1', 'y').year(), 2010, 'Subtract year'); + assert.equal(a.subtract('1', 'Q').month(), 5, 'Subtract quarter'); +}); + +test('add across DST', function (assert) { + // Detect Safari bug and bail. Hours on 13th March 2011 are shifted + // with 1 ahead. + if (new Date(2011, 2, 13, 5, 0, 0).getHours() !== 5) { + expect(0); + return; + } + + var a = moment(new Date(2011, 2, 12, 5, 0, 0)), + b = moment(new Date(2011, 2, 12, 5, 0, 0)), + c = moment(new Date(2011, 2, 12, 5, 0, 0)), + d = moment(new Date(2011, 2, 12, 5, 0, 0)), + e = moment(new Date(2011, 2, 12, 5, 0, 0)); + a.add(1, 'days'); + b.add(24, 'hours'); + c.add(1, 'months'); + e.add(1, 'quarter'); + + assert.equal(a.hours(), 5, 'adding days over DST difference should result in the same hour'); + if (b.isDST() && !d.isDST()) { + assert.equal(b.hours(), 6, 'adding hours over DST difference should result in a different hour'); + } else if (!b.isDST() && d.isDST()) { + assert.equal(b.hours(), 4, 'adding hours over DST difference should result in a different hour'); + } else { + assert.equal(b.hours(), 5, 'adding hours over DST difference should result in a same hour if the timezone does not have daylight savings time'); + } + assert.equal(c.hours(), 5, 'adding months over DST difference should result in the same hour'); + assert.equal(e.hours(), 5, 'adding quarters over DST difference should result in the same hour'); +}); + +test('add decimal values of days and months', function (assert) { + assert.equal(moment([2016,3,3]).add(1.5, 'days').date(), 5, 'adding 1.5 days is rounded to adding 2 day'); + assert.equal(moment([2016,3,3]).add(-1.5, 'days').date(), 1, 'adding -1.5 days is rounded to adding -2 day'); + assert.equal(moment([2016,3,1]).add(-1.5, 'days').date(), 30, 'adding -1.5 days on first of month wraps around'); + assert.equal(moment([2016,3,3]).add(1.5, 'months').month(), 5, 'adding 1.5 months adds 2 months'); + assert.equal(moment([2016,3,3]).add(-1.5, 'months').month(), 1, 'adding -1.5 months adds -2 months'); + assert.equal(moment([2016,0,3]).add(-1.5, 'months').month(), 10, 'adding -1.5 months at start of year wraps back'); + assert.equal(moment([2016,3,3]).subtract(1.5, 'days').date(),1, 'subtract 1.5 days is rounded to subtract 2 day'); + assert.equal(moment([2016,3,2]).subtract(1.5, 'days').date(), 31, 'subtract 1.5 days subtracts 2 days'); + assert.equal(moment([2016,1,1]).subtract(1.1, 'days').date(), 31, 'subtract 1.1 days wraps to previous month'); + assert.equal(moment([2016,3,3]).subtract(-1.5, 'days').date(), 5, 'subtract -1.5 days is rounded to subtract -2 day'); + assert.equal(moment([2016,3,30]).subtract(-1.5, 'days').date(), 2, 'subtract -1.5 days on last of month wraps around'); + assert.equal(moment([2016,3,3]).subtract(1.5, 'months').month(), 1, 'subtract 1.5 months subtract 2 months'); + assert.equal(moment([2016,3,3]).subtract(-1.5, 'months').month(), 5, 'subtract -1.5 months subtract -2 month'); + assert.equal(moment([2016,11,31]).subtract(-1.5, 'months').month(),1, 'subtract -1.5 months at end of year wraps back'); + assert.equal(moment([2016, 0,1]).add(1.5, 'years').format('YYYY-MM-DD'), '2017-07-01', 'add 1.5 years adds 1 year six months'); + assert.equal(moment([2016, 0,1]).add(1.6, 'years').format('YYYY-MM-DD'), '2017-08-01', 'add 1.6 years becomes 1.6*12 = 19.2, round, 19 months'); + assert.equal(moment([2016,0,1]).add(1.1, 'quarters').format('YYYY-MM-DD'), '2016-04-01', 'add 1.1 quarters 1.1*3=3.3, round, 3 months'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +// These tests are for locale independent features +// locale dependent tests would be in locale test folder +module$1('calendar'); + +test('passing a function', function (assert) { + var a = moment().hours(13).minutes(0).seconds(0); + assert.equal(moment(a).calendar(null, { + 'sameDay': function () { + return 'h:mmA'; + } + }), '1:00PM', 'should equate'); +}); + +test('extending calendar options', function (assert) { + var calendarFormat = moment.calendarFormat; + + moment.calendarFormat = function (myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + var nextMonth = now.clone().add(1, 'month'); + + var retVal = diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : + (myMoment.month() === now.month() && myMoment.year() === now.year()) ? 'thisMonth' : + (nextMonth.month() === myMoment.month() && nextMonth.year() === myMoment.year()) ? 'nextMonth' : 'sameElse'; + return retVal; + }; + + moment.updateLocale('en', { + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + thisMonth : '[This month on the] Do', + nextMonth : '[Next month on the] Do', + sameElse : 'L' + } + }); + var a = moment('2016-01-01').add(28, 'days'); + var b = moment('2016-01-01').add(1, 'month'); + try { + assert.equal(a.calendar('2016-01-01'), 'This month on the 29th', 'Ad hoc calendar format for this month'); + assert.equal(b.calendar('2016-01-01'), 'Next month on the 1st', 'Ad hoc calendar format for next month'); + assert.equal(a.locale('fr').calendar('2016-01-01'), a.locale('fr').format('L'), 'French falls back to default because thisMonth is not defined in that locale'); + } finally { + moment.calendarFormat = calendarFormat; + moment.updateLocale('en', null); + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('create'); + +test('array', function (assert) { + assert.ok(moment([2010]).toDate() instanceof Date, '[2010]'); + assert.ok(moment([2010, 1]).toDate() instanceof Date, '[2010, 1]'); + assert.ok(moment([2010, 1, 12]).toDate() instanceof Date, '[2010, 1, 12]'); + assert.ok(moment([2010, 1, 12, 1]).toDate() instanceof Date, '[2010, 1, 12, 1]'); + assert.ok(moment([2010, 1, 12, 1, 1]).toDate() instanceof Date, '[2010, 1, 12, 1, 1]'); + assert.ok(moment([2010, 1, 12, 1, 1, 1]).toDate() instanceof Date, '[2010, 1, 12, 1, 1, 1]'); + assert.ok(moment([2010, 1, 12, 1, 1, 1, 1]).toDate() instanceof Date, '[2010, 1, 12, 1, 1, 1, 1]'); + assert.equal(+moment(new Date(2010, 1, 14, 15, 25, 50, 125)), +moment([2010, 1, 14, 15, 25, 50, 125]), 'constructing with array === constructing with new Date()'); +}); + +test('array with invalid arguments', function (assert) { + assert.ok(!moment([2010, null, null]).isValid(), '[2010, null, null]'); + assert.ok(!moment([1945, null, null]).isValid(), '[1945, null, null] (pre-1970)'); +}); + +test('array copying', function (assert) { + var importantArray = [2009, 11]; + moment(importantArray); + assert.deepEqual(importantArray, [2009, 11], 'initializer should not mutate the original array'); +}); + +test('object', function (assert) { + var fmt = 'YYYY-MM-DD HH:mm:ss.SSS', + tests = [ + [{year: 2010}, '2010-01-01 00:00:00.000'], + [{year: 2010, month: 1}, '2010-02-01 00:00:00.000'], + [{year: 2010, month: 1, day: 12}, '2010-02-12 00:00:00.000'], + [{year: 2010, month: 1, date: 12}, '2010-02-12 00:00:00.000'], + [{year: 2010, month: 1, day: 12, hours: 1}, '2010-02-12 01:00:00.000'], + [{year: 2010, month: 1, date: 12, hours: 1}, '2010-02-12 01:00:00.000'], + [{year: 2010, month: 1, day: 12, hours: 1, minutes: 1}, '2010-02-12 01:01:00.000'], + [{year: 2010, month: 1, date: 12, hours: 1, minutes: 1}, '2010-02-12 01:01:00.000'], + [{year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1}, '2010-02-12 01:01:01.000'], + [{year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1, milliseconds: 1}, '2010-02-12 01:01:01.001'], + [{years: 2010, months: 1, days: 14, hours: 15, minutes: 25, seconds: 50, milliseconds: 125}, '2010-02-14 15:25:50.125'], + [{year: 2010, month: 1, day: 14, hour: 15, minute: 25, second: 50, millisecond: 125}, '2010-02-14 15:25:50.125'], + [{y: 2010, M: 1, d: 14, h: 15, m: 25, s: 50, ms: 125}, '2010-02-14 15:25:50.125'] + ], i; + for (i = 0; i < tests.length; ++i) { + assert.equal(moment(tests[i][0]).format(fmt), tests[i][1]); + } +}); + +test('multi format array copying', function (assert) { + var importantArray = ['MM/DD/YYYY', 'YYYY-MM-DD', 'MM-DD-YYYY']; + moment('1999-02-13', importantArray); + assert.deepEqual(importantArray, ['MM/DD/YYYY', 'YYYY-MM-DD', 'MM-DD-YYYY'], 'initializer should not mutate the original array'); +}); + +test('number', function (assert) { + assert.ok(moment(1000).toDate() instanceof Date, '1000'); + assert.equal(moment(1000).valueOf(), 1000, 'asserting valueOf'); + assert.equal(moment.utc(1000).valueOf(), 1000, 'asserting valueOf'); +}); + +test('unix', function (assert) { + assert.equal(moment.unix(1).valueOf(), 1000, '1 unix timestamp == 1000 Date.valueOf'); + assert.equal(moment(1000).unix(), 1, '1000 Date.valueOf == 1 unix timestamp'); + assert.equal(moment.unix(1000).valueOf(), 1000000, '1000 unix timestamp == 1000000 Date.valueOf'); + assert.equal(moment(1500).unix(), 1, '1500 Date.valueOf == 1 unix timestamp'); + assert.equal(moment(1900).unix(), 1, '1900 Date.valueOf == 1 unix timestamp'); + assert.equal(moment(2100).unix(), 2, '2100 Date.valueOf == 2 unix timestamp'); + assert.equal(moment(1333129333524).unix(), 1333129333, '1333129333524 Date.valueOf == 1333129333 unix timestamp'); + assert.equal(moment(1333129333524000).unix(), 1333129333524, '1333129333524000 Date.valueOf == 1333129333524 unix timestamp'); +}); + +test('date', function (assert) { + assert.ok(moment(new Date()).toDate() instanceof Date, 'new Date()'); + assert.equal(moment(new Date(2016,0,1), 'YYYY-MM-DD').format('YYYY-MM-DD'), '2016-01-01', 'If date is provided, format string is ignored'); +}); + +test('date with a format as an array', function (assert) { + var tests = [ + new Date(2016, 9, 27), + new Date(2016, 9, 28), + new Date(2016, 9, 29), + new Date(2016, 9, 30), + new Date(2016, 9, 31) + ], i; + + for (i = 0; i < tests.length; i++) { + assert.equal(moment(tests[i]).format(), moment(tests[i], ['MM/DD/YYYY'], false).format(), 'Passing date with a format array should still return the correct date'); + } +}); + +test('date mutation', function (assert) { + var a = new Date(); + assert.ok(moment(a).toDate() !== a, 'the date moment uses should not be the date passed in'); +}); + +test('moment', function (assert) { + assert.ok(moment(moment()).toDate() instanceof Date, 'moment(moment())'); + assert.ok(moment(moment(moment())).toDate() instanceof Date, 'moment(moment(moment()))'); +}); + +test('cloning moment should only copy own properties', function (assert) { + assert.ok(!moment().clone().hasOwnProperty('month'), 'Should not clone prototype methods'); +}); + +test('cloning moment works with weird clones', function (assert) { + var extend = function (a, b) { + var i; + for (i in b) { + a[i] = b[i]; + } + return a; + }, + now = moment(), + nowu = moment.utc(); + + assert.equal(+extend({}, now).clone(), +now, 'cloning extend-ed now is now'); + assert.equal(+extend({}, nowu).clone(), +nowu, 'cloning extend-ed utc now is utc now'); +}); + +test('cloning respects moment.momentProperties', function (assert) { + var m = moment(); + + assert.equal(m.clone()._special, undefined, 'cloning ignores extra properties'); + m._special = 'bacon'; + moment.momentProperties.push('_special'); + assert.equal(m.clone()._special, 'bacon', 'cloning respects momentProperties'); + moment.momentProperties.pop(); +}); + +test('undefined', function (assert) { + assert.ok(moment().toDate() instanceof Date, 'undefined'); +}); + +test('iso with bad input', function (assert) { + assert.ok(!moment('a', moment.ISO_8601).isValid(), 'iso parsing with invalid string'); + assert.ok(!moment('a', moment.ISO_8601, true).isValid(), 'iso parsing with invalid string, strict'); +}); + +test('iso format 24hrs', function (assert) { + assert.equal(moment('2014-01-01T24:00:00.000').format('YYYY-MM-DD[T]HH:mm:ss.SSS'), + '2014-01-02T00:00:00.000', 'iso format with 24:00 localtime'); + assert.equal(moment.utc('2014-01-01T24:00:00.000').format('YYYY-MM-DD[T]HH:mm:ss.SSS'), + '2014-01-02T00:00:00.000', 'iso format with 24:00 utc'); +}); + +test('string without format - json', function (assert) { + assert.equal(moment('Date(1325132654000)').valueOf(), 1325132654000, 'Date(1325132654000)'); + assert.equal(moment('Date(-1325132654000)').valueOf(), -1325132654000, 'Date(-1325132654000)'); + assert.equal(moment('/Date(1325132654000)/').valueOf(), 1325132654000, '/Date(1325132654000)/'); + assert.equal(moment('/Date(1325132654000+0700)/').valueOf(), 1325132654000, '/Date(1325132654000+0700)/'); + assert.equal(moment('/Date(1325132654000-0700)/').valueOf(), 1325132654000, '/Date(1325132654000-0700)/'); +}); + +test('string with format dropped am/pm bug', function (assert) { + moment.locale('en'); + + assert.equal(moment('05/1/2012 12:25:00', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens'); + assert.equal(moment('05/1/2012 12:25:00 am', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens'); + assert.equal(moment('05/1/2012 12:25:00 pm', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens'); + + assert.ok(moment('05/1/2012 12:25:00', 'MM/DD/YYYY h:m:s a').isValid()); + assert.ok(moment('05/1/2012 12:25:00 am', 'MM/DD/YYYY h:m:s a').isValid()); + assert.ok(moment('05/1/2012 12:25:00 pm', 'MM/DD/YYYY h:m:s a').isValid()); +}); + +test('empty string with formats', function (assert) { + assert.equal(moment('', 'MM').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + assert.equal(moment(' ', 'MM').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + assert.equal(moment(' ', 'DD').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + assert.equal(moment(' ', ['MM', 'DD']).format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + + assert.ok(!moment('', 'MM').isValid()); + assert.ok(!moment(' ', 'MM').isValid()); + assert.ok(!moment(' ', 'DD').isValid()); + assert.ok(!moment(' ', ['MM', 'DD']).isValid()); +}); + +test('undefined argument with formats', function (assert) { + assert.equal(moment(undefined, 'MM').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + assert.equal(moment(undefined, 'DD').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + assert.equal(moment(undefined, ['MM', 'DD']).format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + + assert.ok(!moment(undefined, 'MM').isValid()); + assert.ok(!moment(undefined, 'MM').isValid()); + assert.ok(!moment(undefined, 'DD').isValid()); + assert.ok(!moment(undefined, ['MM', 'DD']).isValid()); +}); + +test('defaulting to current date', function (assert) { + var now = moment(); + assert.equal(moment('12:13:14', 'hh:mm:ss').format('YYYY-MM-DD hh:mm:ss'), + now.clone().hour(12).minute(13).second(14).format('YYYY-MM-DD hh:mm:ss'), + 'given only time default to current date'); + assert.equal(moment('05', 'DD').format('YYYY-MM-DD'), + now.clone().date(5).format('YYYY-MM-DD'), + 'given day of month default to current month, year'); + assert.equal(moment('05', 'MM').format('YYYY-MM-DD'), + now.clone().month(4).date(1).format('YYYY-MM-DD'), + 'given month default to current year'); + assert.equal(moment('1996', 'YYYY').format('YYYY-MM-DD'), + now.clone().year(1996).month(0).date(1).format('YYYY-MM-DD'), + 'given year do not default'); +}); + +test('matching am/pm', function (assert) { + assert.equal(moment('2012-09-03T03:00PM', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for PM'); + assert.equal(moment('2012-09-03T03:00P.M.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for P.M.'); + assert.equal(moment('2012-09-03T03:00P', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for P'); + assert.equal(moment('2012-09-03T03:00pm', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for pm'); + assert.equal(moment('2012-09-03T03:00p.m.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for p.m.'); + assert.equal(moment('2012-09-03T03:00p', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for p'); + + assert.equal(moment('2012-09-03T03:00AM', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for AM'); + assert.equal(moment('2012-09-03T03:00A.M.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for A.M.'); + assert.equal(moment('2012-09-03T03:00A', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for A'); + assert.equal(moment('2012-09-03T03:00am', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for am'); + assert.equal(moment('2012-09-03T03:00a.m.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for a.m.'); + assert.equal(moment('2012-09-03T03:00a', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for a'); + + assert.equal(moment('5:00p.m.March 4 2012', 'h:mmAMMMM D YYYY').format('YYYY-MM-DDThh:mmA'), '2012-03-04T05:00PM', 'am/pm should parse correctly before month names'); +}); + +test('string with format', function (assert) { + moment.locale('en'); + var a = [ + ['YYYY-Q', '2014-4'], + ['MM-DD-YYYY', '12-02-1999'], + ['DD-MM-YYYY', '12-02-1999'], + ['DD/MM/YYYY', '12/02/1999'], + ['DD_MM_YYYY', '12_02_1999'], + ['DD:MM:YYYY', '12:02:1999'], + ['D-M-YY', '2-2-99'], + ['YY', '99'], + ['DDD-YYYY', '300-1999'], + ['DD-MM-YYYY h:m:s', '12-02-1999 2:45:10'], + ['DD-MM-YYYY h:m:s a', '12-02-1999 2:45:10 am'], + ['DD-MM-YYYY h:m:s a', '12-02-1999 2:45:10 pm'], + ['h:mm a', '12:00 pm'], + ['h:mm a', '12:30 pm'], + ['h:mm a', '12:00 am'], + ['h:mm a', '12:30 am'], + ['HH:mm', '12:00'], + ['kk:mm', '12:00'], + ['YYYY-MM-DDTHH:mm:ss', '2011-11-11T11:11:11'], + ['MM-DD-YYYY [M]', '12-02-1999 M'], + ['ddd MMM DD HH:mm:ss YYYY', 'Tue Apr 07 22:52:51 2009'], + ['HH:mm:ss', '12:00:00'], + ['HH:mm:ss', '12:30:00'], + ['HH:mm:ss', '00:00:00'], + ['HH:mm:ss S', '00:30:00 1'], + ['HH:mm:ss SS', '00:30:00 12'], + ['HH:mm:ss SSS', '00:30:00 123'], + ['HH:mm:ss S', '00:30:00 7'], + ['HH:mm:ss SS', '00:30:00 78'], + ['HH:mm:ss SSS', '00:30:00 789'], + ['kk:mm:ss', '12:00:00'], + ['kk:mm:ss', '12:30:00'], + ['kk:mm:ss', '24:00:00'], + ['kk:mm:ss S', '24:30:00 1'], + ['kk:mm:ss SS', '24:30:00 12'], + ['kk:mm:ss SSS', '24:30:00 123'], + ['kk:mm:ss S', '24:30:00 7'], + ['kk:mm:ss SS', '24:30:00 78'], + ['kk:mm:ss SSS', '24:30:00 789'], + ['X', '1234567890'], + ['x', '1234567890123'], + ['LT', '12:30 AM'], + ['LTS', '12:30:29 AM'], + ['L', '09/02/1999'], + ['l', '9/2/1999'], + ['LL', 'September 2, 1999'], + ['ll', 'Sep 2, 1999'], + ['LLL', 'September 2, 1999 12:30 AM'], + ['lll', 'Sep 2, 1999 12:30 AM'], + ['LLLL', 'Thursday, September 2, 1999 12:30 AM'], + ['llll', 'Thu, Sep 2, 1999 12:30 AM'] + ], + m, + i; + + for (i = 0; i < a.length; i++) { + m = moment(a[i][1], a[i][0]); + assert.ok(m.isValid()); + assert.equal(m.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('2 digit year with YYYY format', function (assert) { + assert.equal(moment('9/2/99', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/1999', 'D/M/YYYY ---> 9/2/99'); + assert.equal(moment('9/2/1999', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/1999', 'D/M/YYYY ---> 9/2/1999'); + assert.equal(moment('9/2/68', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/2068', 'D/M/YYYY ---> 9/2/68'); + assert.equal(moment('9/2/69', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/1969', 'D/M/YYYY ---> 9/2/69'); +}); + +test('unix timestamp format', function (assert) { + var formats = ['X', 'X.S', 'X.SS', 'X.SSS'], i, format; + + for (i = 0; i < formats.length; i++) { + format = formats[i]; + assert.equal(moment('1234567890', format).valueOf(), 1234567890 * 1000, format + ' matches timestamp without milliseconds'); + assert.equal(moment('1234567890.1', format).valueOf(), 1234567890 * 1000 + 100, format + ' matches timestamp with deciseconds'); + assert.equal(moment('1234567890.12', format).valueOf(), 1234567890 * 1000 + 120, format + ' matches timestamp with centiseconds'); + assert.equal(moment('1234567890.123', format).valueOf(), 1234567890 * 1000 + 123, format + ' matches timestamp with milliseconds'); + } +}); + +test('unix offset milliseconds', function (assert) { + assert.equal(moment('1234567890123', 'x').valueOf(), 1234567890123, 'x matches unix offset in milliseconds'); +}); + +test('milliseconds format', function (assert) { + assert.equal(moment('1', 'S').get('ms'), 100, 'deciseconds'); + // assert.equal(moment('10', 'S', true).isValid(), false, 'deciseconds with two digits'); + // assert.equal(moment('1', 'SS', true).isValid(), false, 'centiseconds with one digits'); + assert.equal(moment('12', 'SS').get('ms'), 120, 'centiseconds'); + // assert.equal(moment('123', 'SS', true).isValid(), false, 'centiseconds with three digits'); + assert.equal(moment('123', 'SSS').get('ms'), 123, 'milliseconds'); + assert.equal(moment('1234', 'SSSS').get('ms'), 123, 'milliseconds with SSSS'); + assert.equal(moment('123456789101112', 'SSSS').get('ms'), 123, 'milliseconds with SSSS'); +}); + +test('string with format no separators', function (assert) { + moment.locale('en'); + var a = [ + ['MMDDYYYY', '12021999'], + ['DDMMYYYY', '12021999'], + ['YYYYMMDD', '19991202'], + ['DDMMMYYYY', '10Sep2001'] + ], i; + + for (i = 0; i < a.length; i++) { + assert.equal(moment(a[i][1], a[i][0]).format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } +}); + +test('string with format (timezone)', function (assert) { + assert.equal(moment('5 -0700', 'H ZZ').toDate().getUTCHours(), 12, 'parse hours \'5 -0700\' ---> \'H ZZ\''); + assert.equal(moment('5 -07:00', 'H Z').toDate().getUTCHours(), 12, 'parse hours \'5 -07:00\' ---> \'H Z\''); + assert.equal(moment('5 -0730', 'H ZZ').toDate().getUTCMinutes(), 30, 'parse hours \'5 -0730\' ---> \'H ZZ\''); + assert.equal(moment('5 -07:30', 'H Z').toDate().getUTCMinutes(), 30, 'parse hours \'5 -07:0\' ---> \'H Z\''); + assert.equal(moment('5 +0100', 'H ZZ').toDate().getUTCHours(), 4, 'parse hours \'5 +0100\' ---> \'H ZZ\''); + assert.equal(moment('5 +01:00', 'H Z').toDate().getUTCHours(), 4, 'parse hours \'5 +01:00\' ---> \'H Z\''); + assert.equal(moment('5 +0130', 'H ZZ').toDate().getUTCMinutes(), 30, 'parse hours \'5 +0130\' ---> \'H ZZ\''); + assert.equal(moment('5 +01:30', 'H Z').toDate().getUTCMinutes(), 30, 'parse hours \'5 +01:30\' ---> \'H Z\''); +}); + +test('string with format (timezone offset)', function (assert) { + var a, b, c, d, e, f; + a = new Date(Date.UTC(2011, 0, 1, 1)); + b = moment('2011 1 1 0 -01:00', 'YYYY MM DD HH Z'); + assert.equal(a.getHours(), b.hours(), 'date created with utc == parsed string with timezone offset'); + assert.equal(+a, +b, 'date created with utc == parsed string with timezone offset'); + c = moment('2011 2 1 10 -05:00', 'YYYY MM DD HH Z'); + d = moment('2011 2 1 8 -07:00', 'YYYY MM DD HH Z'); + assert.equal(c.hours(), d.hours(), '10 am central time == 8 am pacific time'); + e = moment.utc('Fri, 20 Jul 2012 17:15:00', 'ddd, DD MMM YYYY HH:mm:ss'); + f = moment.utc('Fri, 20 Jul 2012 10:15:00 -0700', 'ddd, DD MMM YYYY HH:mm:ss ZZ'); + assert.equal(e.hours(), f.hours(), 'parse timezone offset in utc'); +}); + +test('string with timezone around start of year', function (assert) { + assert.equal(moment('2000-01-01T00:00:00.000+01:00').toISOString(), '1999-12-31T23:00:00.000Z', '+1:00 around 2000'); + assert.equal(moment('2000-01-01T00:00:00.000-01:00').toISOString(), '2000-01-01T01:00:00.000Z', '-1:00 around 2000'); + assert.equal(moment('1970-01-01T00:00:00.000+01:00').toISOString(), '1969-12-31T23:00:00.000Z', '+1:00 around 1970'); + assert.equal(moment('1970-01-01T00:00:00.000-01:00').toISOString(), '1970-01-01T01:00:00.000Z', '-1:00 around 1970'); + assert.equal(moment('1200-01-01T00:00:00.000+01:00').toISOString(), '1199-12-31T23:00:00.000Z', '+1:00 around 1200'); + assert.equal(moment('1200-01-01T00:00:00.000-01:00').toISOString(), '1200-01-01T01:00:00.000Z', '-1:00 around 1200'); +}); + +test('string with array of formats', function (assert) { + var thursdayForCurrentWeek = moment() + .day(4) + .format('YYYY MM DD'); + + assert.equal(moment('11-02-1999', ['MM-DD-YYYY', 'DD-MM-YYYY']).format('MM DD YYYY'), '11 02 1999', 'switching month and day'); + assert.equal(moment('02-11-1999', ['MM/DD/YYYY', 'YYYY MM DD', 'MM-DD-YYYY']).format('MM DD YYYY'), '02 11 1999', 'year last'); + assert.equal(moment('1999-02-11', ['MM/DD/YYYY', 'YYYY MM DD', 'MM-DD-YYYY']).format('MM DD YYYY'), '02 11 1999', 'year first'); + + assert.equal(moment('02-11-1999', ['MM/DD/YYYY', 'YYYY MM DD']).format('MM DD YYYY'), '02 11 1999', 'year last'); + assert.equal(moment('1999-02-11', ['MM/DD/YYYY', 'YYYY MM DD']).format('MM DD YYYY'), '02 11 1999', 'year first'); + assert.equal(moment('02-11-1999', ['YYYY MM DD', 'MM/DD/YYYY']).format('MM DD YYYY'), '02 11 1999', 'year last'); + assert.equal(moment('1999-02-11', ['YYYY MM DD', 'MM/DD/YYYY']).format('MM DD YYYY'), '02 11 1999', 'year first'); + + assert.equal(moment('13-11-1999', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '11 13 1999', 'second must be month'); + assert.equal(moment('11-13-1999', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '11 13 1999', 'first must be month'); + assert.equal(moment('01-02-2000', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '01 02 2000', 'either can be a month, month first format'); + assert.equal(moment('02-01-2000', ['DD/MM/YYYY', 'MM/DD/YYYY']).format('MM DD YYYY'), '01 02 2000', 'either can be a month, day first format'); + + assert.equal(moment('11-02-10', ['MM/DD/YY', 'YY MM DD', 'DD-MM-YY']).format('MM DD YYYY'), '02 11 2010', 'all unparsed substrings have influence on format penalty'); + assert.equal(moment('11-02-10', ['MM-DD-YY HH:mm', 'YY MM DD']).format('MM DD YYYY'), '02 10 2011', 'prefer formats without extra tokens'); + assert.equal(moment('11-02-10 junk', ['MM-DD-YY', 'YY.MM.DD [junk]']).format('MM DD YYYY'), '02 10 2011', 'prefer formats that dont result in extra characters'); + assert.equal(moment('11-22-10', ['YY-MM-DD', 'YY-DD-MM']).format('MM DD YYYY'), '10 22 2011', 'prefer valid results'); + + assert.equal(moment('gibberish', ['YY-MM-DD', 'YY-DD-MM']).format('MM DD YYYY'), 'Invalid date', 'doest throw for invalid strings'); + assert.equal(moment('gibberish', []).format('MM DD YYYY'), 'Invalid date', 'doest throw for an empty array'); + + // https://github.com/moment/moment/issues/1143 + assert.equal(moment( + 'System Administrator and Database Assistant (7/1/2011), System Administrator and Database Assistant (7/1/2011), Database Coordinator (7/1/2011), Vice President (7/1/2011), System Administrator and Database Assistant (5/31/2012), Database Coordinator (7/1/2012), System Administrator and Database Assistant (7/1/2013)', + ['MM/DD/YYYY', 'MM-DD-YYYY', 'YYYY-MM-DD', 'YYYY-MM-DDTHH:mm:ssZ']) + .format('YYYY-MM-DD'), '2011-07-01', 'Works for long strings'); + + assert.equal(moment('11-02-10', ['MM.DD.YY', 'DD-MM-YY']).format('MM DD YYYY'), '02 11 2010', 'escape RegExp special characters on comparing'); + + assert.equal(moment('13-10-98', ['DD MM YY', 'DD MM YYYY'])._f, 'DD MM YY', 'use two digit year'); + assert.equal(moment('13-10-1998', ['DD MM YY', 'DD MM YYYY'])._f, 'DD MM YYYY', 'use four digit year'); + + assert.equal(moment('01', ['MM', 'DD'])._f, 'MM', 'Should use first valid format'); + + assert.equal(moment('Thursday 8:30pm', ['dddd h:mma']).format('YYYY MM DD dddd h:mma'), thursdayForCurrentWeek + ' Thursday 8:30pm', 'Default to current week'); +}); + +test('string with array of formats + ISO', function (assert) { + assert.equal(moment('1994', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).year(), 1994, 'iso: assert parse YYYY'); + assert.equal(moment('17:15', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).hour(), 17, 'iso: assert parse HH:mm (1)'); + assert.equal(moment('24:15', [moment.ISO_8601, 'MM', 'kk:mm', 'YYYY']).hour(), 0, 'iso: assert parse kk:mm'); + assert.equal(moment('17:15', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).minutes(), 15, 'iso: assert parse HH:mm (2)'); + assert.equal(moment('06', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).month(), 6 - 1, 'iso: assert parse MM'); + assert.equal(moment('2012-06-01', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).parsingFlags().iso, true, 'iso: assert parse iso'); + assert.equal(moment('2014-05-05', [moment.ISO_8601, 'YYYY-MM-DD']).parsingFlags().iso, true, 'iso: edge case array precedence iso'); + assert.equal(moment('2014-05-05', ['YYYY-MM-DD', moment.ISO_8601]).parsingFlags().iso, false, 'iso: edge case array precedence not iso'); +}); + +test('string with format - years', function (assert) { + assert.equal(moment('67', 'YY').format('YYYY'), '2067', '67 > 2067'); + assert.equal(moment('68', 'YY').format('YYYY'), '2068', '68 > 2068'); + assert.equal(moment('69', 'YY').format('YYYY'), '1969', '69 > 1969'); + assert.equal(moment('70', 'YY').format('YYYY'), '1970', '70 > 1970'); +}); + +test('implicit cloning', function (assert) { + var momentA = moment([2011, 10, 10]), + momentB = moment(momentA); + momentA.month(5); + assert.equal(momentB.month(), 10, 'Calling moment() on a moment will create a clone'); + assert.equal(momentA.month(), 5, 'Calling moment() on a moment will create a clone'); +}); + +test('explicit cloning', function (assert) { + var momentA = moment([2011, 10, 10]), + momentB = momentA.clone(); + momentA.month(5); + assert.equal(momentB.month(), 10, 'Calling moment() on a moment will create a clone'); + assert.equal(momentA.month(), 5, 'Calling moment() on a moment will create a clone'); +}); + +test('cloning carrying over utc mode', function (assert) { + assert.equal(moment().local().clone()._isUTC, false, 'An explicit cloned local moment should have _isUTC == false'); + assert.equal(moment().utc().clone()._isUTC, true, 'An cloned utc moment should have _isUTC == true'); + assert.equal(moment().clone()._isUTC, false, 'An explicit cloned local moment should have _isUTC == false'); + assert.equal(moment.utc().clone()._isUTC, true, 'An explicit cloned utc moment should have _isUTC == true'); + assert.equal(moment(moment().local())._isUTC, false, 'An implicit cloned local moment should have _isUTC == false'); + assert.equal(moment(moment().utc())._isUTC, true, 'An implicit cloned utc moment should have _isUTC == true'); + assert.equal(moment(moment())._isUTC, false, 'An implicit cloned local moment should have _isUTC == false'); + assert.equal(moment(moment.utc())._isUTC, true, 'An implicit cloned utc moment should have _isUTC == true'); +}); + +test('parsing RFC 2822', function (assert) { + var testCases = { + 'clean RFC2822 datetime with all options': 'Tue, 01 Nov 2016 01:23:45 UT', + 'clean RFC2822 datetime without comma': 'Tue 01 Nov 2016 02:23:45 GMT', + 'clean RFC2822 datetime without seconds': 'Tue, 01 Nov 2016 03:23 +0000', + 'clean RFC2822 datetime without century': 'Tue, 01 Nov 16 04:23:45 Z', + 'clean RFC2822 datetime without day': '01 Nov 2016 05:23:45 z', + 'clean RFC2822 datetime with single-digit day-of-month': 'Tue, 1 Nov 2016 06:23:45 GMT', + 'RFC2822 datetime with CFWSs': '(Init Comment) Tue,\n 1 Nov 2016 (Split\n Comment) 07:23:45 +0000 (GMT)' + }; + var testCase; + + for (testCase in testCases) { + var testResult = moment(testCases[testCase], moment.RFC_2822, true); + assert.ok(testResult.isValid(), testResult); + assert.ok(testResult.parsingFlags().rfc2822, testResult + ' - rfc2822 parsingFlag'); + } +}); + +test('non RFC 2822 strings', function (assert) { + var testCases = { + 'RFC2822 datetime with all options but invalid day delimiter': 'Tue. 01 Nov 2016 01:23:45 GMT', + 'RFC2822 datetime with mismatching Day (week v date)': 'Mon, 01 Nov 2016 01:23:45 GMT' + }; + var testCase; + + for (testCase in testCases) { + var testResult = moment(testCases[testCase], moment.RFC_2822, true); + assert.ok(!testResult.isValid(), testResult); + assert.ok(!testResult.parsingFlags().rfc2822, testResult + ' - rfc2822 parsingFlag'); + } +}); + +test('parsing iso', function (assert) { + var offset = moment([2011, 9, 8]).utcOffset(), + pad = function (input) { + if (input < 10) { + return '0' + input; + } + return '' + input; + }, + hourOffset = (offset > 0 ? Math.floor(offset / 60) : Math.ceil(offset / 60)), + minOffset = offset - (hourOffset * 60), + tz = (offset >= 0) ? + '+' + pad(hourOffset) + ':' + pad(minOffset) : + '-' + pad(-hourOffset) + ':' + pad(-minOffset), + tz2 = tz.replace(':', ''), + tz3 = tz2.slice(0, 3), + //Tz3 removes minutes digit so will break the tests when parsed if they all use the same minutes digit + minutesForTz3 = pad((4 + minOffset) % 60), + minute = pad(4 + minOffset), + + formats = [ + ['2011-10-08', '2011-10-08T00:00:00.000' + tz], + ['2011-10-08T18', '2011-10-08T18:00:00.000' + tz], + ['2011-10-08T18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-10-08T18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-10-08T18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-10-08T18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-10-08T18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-10-08T18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-10-08T18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['2011-10-08T18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['2011-10-08T18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-10-08T18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-10-08T18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011-10-08 18', '2011-10-08T18:00:00.000' + tz], + ['2011-10-08 18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-10-08 18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-10-08 18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-10-08 18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-10-08 18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-10-08 18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-10-08 18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['2011-10-08 18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['2011-10-08 18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-10-08 18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-10-08 18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011-W40', '2011-10-03T00:00:00.000' + tz], + ['2011-W40-6', '2011-10-08T00:00:00.000' + tz], + ['2011-W40-6T18', '2011-10-08T18:00:00.000' + tz], + ['2011-W40-6T18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6T18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6T18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6T18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6T18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6T18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6T18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['2011-W40-6T18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['2011-W40-6T18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-W40-6T18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-W40-6T18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011-W40-6 18', '2011-10-08T18:00:00.000' + tz], + ['2011-W40-6 18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6 18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6 18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6 18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6 18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6 18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6 18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['2011-W40-6 18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['2011-W40-6 18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-W40-6 18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-W40-6 18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011-281', '2011-10-08T00:00:00.000' + tz], + ['2011-281T18', '2011-10-08T18:00:00.000' + tz], + ['2011-281T18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-281T18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-281T18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-281T18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-281T18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-281T18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-281T18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['2011-281T18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['2011-281T18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-281T18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-281T18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011-281 18', '2011-10-08T18:00:00.000' + tz], + ['2011-281 18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-281 18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-281 18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-281 18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-281 18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-281 18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-281 18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['2011-281 18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['2011-281 18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-281 18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-281 18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['20111008T18', '2011-10-08T18:00:00.000' + tz], + ['20111008T1804', '2011-10-08T18:04:00.000' + tz], + ['20111008T180420', '2011-10-08T18:04:20.000' + tz], + ['20111008T1804' + tz, '2011-10-08T18:04:00.000' + tz], + ['20111008T180420' + tz, '2011-10-08T18:04:20.000' + tz], + ['20111008T1804' + tz2, '2011-10-08T18:04:00.000' + tz], + ['20111008T180420' + tz2, '2011-10-08T18:04:20.000' + tz], + ['20111008T1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['20111008T180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['20111008T180420,1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['20111008T180420,11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['20111008T180420,111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['20111008 18', '2011-10-08T18:00:00.000' + tz], + ['20111008 1804', '2011-10-08T18:04:00.000' + tz], + ['20111008 180420', '2011-10-08T18:04:20.000' + tz], + ['20111008 1804' + tz, '2011-10-08T18:04:00.000' + tz], + ['20111008 180420' + tz, '2011-10-08T18:04:20.000' + tz], + ['20111008 1804' + tz2, '2011-10-08T18:04:00.000' + tz], + ['20111008 180420' + tz2, '2011-10-08T18:04:20.000' + tz], + ['20111008 1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['20111008 180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['20111008 180420,1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['20111008 180420,11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['20111008 180420,111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011W40', '2011-10-03T00:00:00.000' + tz], + ['2011W406', '2011-10-08T00:00:00.000' + tz], + ['2011W406T18', '2011-10-08T18:00:00.000' + tz], + ['2011W406T1804', '2011-10-08T18:04:00.000' + tz], + ['2011W406T180420', '2011-10-08T18:04:20.000' + tz], + ['2011W406 1804' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011W406T1804' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011W406T180420' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011W406T1804' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011W406T180420' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011W406T1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['2011W406T180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['2011W406T180420,1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011W406T180420,11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011W406T180420,111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011W406 18', '2011-10-08T18:00:00.000' + tz], + ['2011W406 1804', '2011-10-08T18:04:00.000' + tz], + ['2011W406 180420', '2011-10-08T18:04:20.000' + tz], + ['2011W406 1804' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011W406 180420' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011W406 180420' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011W406 1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['2011W406 180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['2011W406 180420,1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011W406 180420,11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011W406 180420,111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011281', '2011-10-08T00:00:00.000' + tz], + ['2011281T18', '2011-10-08T18:00:00.000' + tz], + ['2011281T1804', '2011-10-08T18:04:00.000' + tz], + ['2011281T180420', '2011-10-08T18:04:20.000' + tz], + ['2011281T1804' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011281T180420' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011281T1804' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011281T180420' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011281T1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['2011281T180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['2011281T180420,1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011281T180420,11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011281T180420,111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011281 18', '2011-10-08T18:00:00.000' + tz], + ['2011281 1804', '2011-10-08T18:04:00.000' + tz], + ['2011281 180420', '2011-10-08T18:04:20.000' + tz], + ['2011281 1804' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011281 180420' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011281 1804' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011281 180420' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011281 1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz], + ['2011281 180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz], + ['2011281 180420,1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011281 180420,11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011281 180420,111' + tz2, '2011-10-08T18:04:20.111' + tz] + ], i; + for (i = 0; i < formats.length; i++) { + assert.equal(moment(formats[i][0]).format('YYYY-MM-DDTHH:mm:ss.SSSZ'), + formats[i][1], 'moment should be able to parse ISO ' + formats[i][0]); + assert.equal(moment(formats[i][0], moment.ISO_8601).format('YYYY-MM-DDTHH:mm:ss.SSSZ'), + formats[i][1], 'moment should be able to parse specified ISO ' + formats[i][0]); + assert.equal(moment(formats[i][0], moment.ISO_8601, true).format('YYYY-MM-DDTHH:mm:ss.SSSZ'), + formats[i][1], 'moment should be able to parse specified strict ISO ' + formats[i][0]); + } +}); + +test('non iso 8601 strings', function (assert) { + assert.ok(!moment('2015-10T10:15', moment.ISO_8601, true).isValid(), 'incomplete date with time'); + assert.ok(!moment('2015-W10T10:15', moment.ISO_8601, true).isValid(), 'incomplete week date with time'); + assert.ok(!moment('201510', moment.ISO_8601, true).isValid(), 'basic YYYYMM is not allowed'); + assert.ok(!moment('2015W10T1015', moment.ISO_8601, true).isValid(), 'incomplete week date with time (basic)'); + assert.ok(!moment('2015-10-08T1015', moment.ISO_8601, true).isValid(), 'mixing extended and basic format'); + assert.ok(!moment('20151008T10:15', moment.ISO_8601, true).isValid(), 'mixing basic and extended format'); + assert.ok(!moment('2015-10-1', moment.ISO_8601, true).isValid(), 'missing zero padding for day'); +}); + +test('parsing iso week year/week/weekday', function (assert) { + assert.equal(moment.utc('2007-W01').format(), '2007-01-01T00:00:00Z', '2008 week 1 (1st Jan Mon)'); + assert.equal(moment.utc('2008-W01').format(), '2007-12-31T00:00:00Z', '2008 week 1 (1st Jan Tue)'); + assert.equal(moment.utc('2003-W01').format(), '2002-12-30T00:00:00Z', '2008 week 1 (1st Jan Wed)'); + assert.equal(moment.utc('2009-W01').format(), '2008-12-29T00:00:00Z', '2009 week 1 (1st Jan Thu)'); + assert.equal(moment.utc('2010-W01').format(), '2010-01-04T00:00:00Z', '2010 week 1 (1st Jan Fri)'); + assert.equal(moment.utc('2011-W01').format(), '2011-01-03T00:00:00Z', '2011 week 1 (1st Jan Sat)'); + assert.equal(moment.utc('2012-W01').format(), '2012-01-02T00:00:00Z', '2012 week 1 (1st Jan Sun)'); +}); + +test('parsing week year/week/weekday (dow 1, doy 4)', function (assert) { + moment.locale('dow:1,doy:4', {week: {dow: 1, doy: 4}}); + + assert.equal(moment.utc('2007-01', 'gggg-ww').format(), '2007-01-01T00:00:00Z', '2007 week 1 (1st Jan Mon)'); + assert.equal(moment.utc('2008-01', 'gggg-ww').format(), '2007-12-31T00:00:00Z', '2008 week 1 (1st Jan Tue)'); + assert.equal(moment.utc('2003-01', 'gggg-ww').format(), '2002-12-30T00:00:00Z', '2003 week 1 (1st Jan Wed)'); + assert.equal(moment.utc('2009-01', 'gggg-ww').format(), '2008-12-29T00:00:00Z', '2009 week 1 (1st Jan Thu)'); + assert.equal(moment.utc('2010-01', 'gggg-ww').format(), '2010-01-04T00:00:00Z', '2010 week 1 (1st Jan Fri)'); + assert.equal(moment.utc('2011-01', 'gggg-ww').format(), '2011-01-03T00:00:00Z', '2011 week 1 (1st Jan Sat)'); + assert.equal(moment.utc('2012-01', 'gggg-ww').format(), '2012-01-02T00:00:00Z', '2012 week 1 (1st Jan Sun)'); + + moment.defineLocale('dow:1,doy:4', null); +}); + +test('parsing week year/week/weekday (dow 1, doy 7)', function (assert) { + moment.locale('dow:1,doy:7', {week: {dow: 1, doy: 7}}); + + assert.equal(moment.utc('2007-01', 'gggg-ww').format(), '2007-01-01T00:00:00Z', '2007 week 1 (1st Jan Mon)'); + assert.equal(moment.utc('2008-01', 'gggg-ww').format(), '2007-12-31T00:00:00Z', '2008 week 1 (1st Jan Tue)'); + assert.equal(moment.utc('2003-01', 'gggg-ww').format(), '2002-12-30T00:00:00Z', '2003 week 1 (1st Jan Wed)'); + assert.equal(moment.utc('2009-01', 'gggg-ww').format(), '2008-12-29T00:00:00Z', '2009 week 1 (1st Jan Thu)'); + assert.equal(moment.utc('2010-01', 'gggg-ww').format(), '2009-12-28T00:00:00Z', '2010 week 1 (1st Jan Fri)'); + assert.equal(moment.utc('2011-01', 'gggg-ww').format(), '2010-12-27T00:00:00Z', '2011 week 1 (1st Jan Sat)'); + assert.equal(moment.utc('2012-01', 'gggg-ww').format(), '2011-12-26T00:00:00Z', '2012 week 1 (1st Jan Sun)'); + moment.defineLocale('dow:1,doy:7', null); +}); + +test('parsing week year/week/weekday (dow 0, doy 6)', function (assert) { + moment.locale('dow:0,doy:6', {week: {dow: 0, doy: 6}}); + + assert.equal(moment.utc('2007-01', 'gggg-ww').format(), '2006-12-31T00:00:00Z', '2007 week 1 (1st Jan Mon)'); + assert.equal(moment.utc('2008-01', 'gggg-ww').format(), '2007-12-30T00:00:00Z', '2008 week 1 (1st Jan Tue)'); + assert.equal(moment.utc('2003-01', 'gggg-ww').format(), '2002-12-29T00:00:00Z', '2003 week 1 (1st Jan Wed)'); + assert.equal(moment.utc('2009-01', 'gggg-ww').format(), '2008-12-28T00:00:00Z', '2009 week 1 (1st Jan Thu)'); + assert.equal(moment.utc('2010-01', 'gggg-ww').format(), '2009-12-27T00:00:00Z', '2010 week 1 (1st Jan Fri)'); + assert.equal(moment.utc('2011-01', 'gggg-ww').format(), '2010-12-26T00:00:00Z', '2011 week 1 (1st Jan Sat)'); + assert.equal(moment.utc('2012-01', 'gggg-ww').format(), '2012-01-01T00:00:00Z', '2012 week 1 (1st Jan Sun)'); + moment.defineLocale('dow:0,doy:6', null); +}); + +test('parsing week year/week/weekday (dow 6, doy 12)', function (assert) { + moment.locale('dow:6,doy:12', {week: {dow: 6, doy: 12}}); + + assert.equal(moment.utc('2007-01', 'gggg-ww').format(), '2006-12-30T00:00:00Z', '2007 week 1 (1st Jan Mon)'); + assert.equal(moment.utc('2008-01', 'gggg-ww').format(), '2007-12-29T00:00:00Z', '2008 week 1 (1st Jan Tue)'); + assert.equal(moment.utc('2003-01', 'gggg-ww').format(), '2002-12-28T00:00:00Z', '2003 week 1 (1st Jan Wed)'); + assert.equal(moment.utc('2009-01', 'gggg-ww').format(), '2008-12-27T00:00:00Z', '2009 week 1 (1st Jan Thu)'); + assert.equal(moment.utc('2010-01', 'gggg-ww').format(), '2009-12-26T00:00:00Z', '2010 week 1 (1st Jan Fri)'); + assert.equal(moment.utc('2011-01', 'gggg-ww').format(), '2011-01-01T00:00:00Z', '2011 week 1 (1st Jan Sat)'); + assert.equal(moment.utc('2012-01', 'gggg-ww').format(), '2011-12-31T00:00:00Z', '2012 week 1 (1st Jan Sun)'); + moment.defineLocale('dow:6,doy:12', null); +}); + +test('parsing ISO with Z', function (assert) { + var i, mom, formats = [ + ['2011-10-08T18:04', '2011-10-08T18:04:00.000'], + ['2011-10-08T18:04:20', '2011-10-08T18:04:20.000'], + ['2011-10-08T18:04:20.1', '2011-10-08T18:04:20.100'], + ['2011-10-08T18:04:20.11', '2011-10-08T18:04:20.110'], + ['2011-10-08T18:04:20.111', '2011-10-08T18:04:20.111'], + ['2011-W40-6T18', '2011-10-08T18:00:00.000'], + ['2011-W40-6T18:04', '2011-10-08T18:04:00.000'], + ['2011-W40-6T18:04:20', '2011-10-08T18:04:20.000'], + ['2011-W40-6T18:04:20.1', '2011-10-08T18:04:20.100'], + ['2011-W40-6T18:04:20.11', '2011-10-08T18:04:20.110'], + ['2011-W40-6T18:04:20.111', '2011-10-08T18:04:20.111'], + ['2011-281T18', '2011-10-08T18:00:00.000'], + ['2011-281T18:04', '2011-10-08T18:04:00.000'], + ['2011-281T18:04:20', '2011-10-08T18:04:20.000'], + ['2011-281T18:04:20', '2011-10-08T18:04:20.000'], + ['2011-281T18:04:20.1', '2011-10-08T18:04:20.100'], + ['2011-281T18:04:20.11', '2011-10-08T18:04:20.110'], + ['2011-281T18:04:20.111', '2011-10-08T18:04:20.111'] + ]; + + for (i = 0; i < formats.length; i++) { + mom = moment(formats[i][0] + 'Z').utc(); + assert.equal(mom.format('YYYY-MM-DDTHH:mm:ss.SSS'), formats[i][1], 'moment should be able to parse ISO in UTC ' + formats[i][0] + 'Z'); + + mom = moment(formats[i][0] + ' Z').utc(); + assert.equal(mom.format('YYYY-MM-DDTHH:mm:ss.SSS'), formats[i][1], 'moment should be able to parse ISO in UTC ' + formats[i][0] + ' Z'); + } +}); + +test('parsing iso with T', function (assert) { + assert.equal(moment('2011-10-08T18')._f, 'YYYY-MM-DDTHH', 'should include \'T\' in the format'); + assert.equal(moment('2011-10-08T18:20')._f, 'YYYY-MM-DDTHH:mm', 'should include \'T\' in the format'); + assert.equal(moment('2011-10-08T18:20:13')._f, 'YYYY-MM-DDTHH:mm:ss', 'should include \'T\' in the format'); + assert.equal(moment('2011-10-08T18:20:13.321')._f, 'YYYY-MM-DDTHH:mm:ss.SSSS', 'should include \'T\' in the format'); + + assert.equal(moment('2011-10-08 18')._f, 'YYYY-MM-DD HH', 'should not include \'T\' in the format'); + assert.equal(moment('2011-10-08 18:20')._f, 'YYYY-MM-DD HH:mm', 'should not include \'T\' in the format'); + assert.equal(moment('2011-10-08 18:20:13')._f, 'YYYY-MM-DD HH:mm:ss', 'should not include \'T\' in the format'); + assert.equal(moment('2011-10-08 18:20:13.321')._f, 'YYYY-MM-DD HH:mm:ss.SSSS', 'should not include \'T\' in the format'); +}); + +test('parsing iso Z timezone', function (assert) { + var i, + formats = [ + ['2011-10-08T18:04Z', '2011-10-08T18:04:00.000+00:00'], + ['2011-10-08T18:04:20Z', '2011-10-08T18:04:20.000+00:00'], + ['2011-10-08T18:04:20.111Z', '2011-10-08T18:04:20.111+00:00'] + ]; + for (i = 0; i < formats.length; i++) { + assert.equal(moment.utc(formats[i][0]).format('YYYY-MM-DDTHH:mm:ss.SSSZ'), formats[i][1], 'moment should be able to parse ISO ' + formats[i][0]); + } +}); + +test('parsing iso Z timezone into local', function (assert) { + var m = moment('2011-10-08T18:04:20.111Z'); + + assert.equal(m.utc().format('YYYY-MM-DDTHH:mm:ss.SSS'), '2011-10-08T18:04:20.111', 'moment should be able to parse ISO 2011-10-08T18:04:20.111Z'); +}); + +test('parsing iso with more subsecond precision digits', function (assert) { + assert.equal(moment.utc('2013-07-31T22:00:00.0000000Z').format(), '2013-07-31T22:00:00Z', 'more than 3 subsecond digits'); +}); + +test('null or empty', function (assert) { + assert.equal(moment('').isValid(), false, 'moment(\'\') is not valid'); + assert.equal(moment(null).isValid(), false, 'moment(null) is not valid'); + assert.equal(moment(null, 'YYYY-MM-DD').isValid(), false, 'moment(\'\', \'format\') is not valid'); + assert.equal(moment('', 'YYYY-MM-DD').isValid(), false, 'moment(\'\', \'format\') is not valid'); + assert.equal(moment.utc('').isValid(), false, 'moment.utc(\'\') is not valid'); + assert.equal(moment.utc(null).isValid(), false, 'moment.utc(null) is not valid'); + assert.equal(moment.utc(null, 'YYYY-MM-DD').isValid(), false, 'moment.utc(null) is not valid'); + assert.equal(moment.utc('', 'YYYY-MM-DD').isValid(), false, 'moment.utc(\'\', \'YYYY-MM-DD\') is not valid'); +}); + +test('first century', function (assert) { + assert.equal(moment([0, 0, 1]).format('YYYY-MM-DD'), '0000-01-01', 'Year AD 0'); + assert.equal(moment([99, 0, 1]).format('YYYY-MM-DD'), '0099-01-01', 'Year AD 99'); + assert.equal(moment([999, 0, 1]).format('YYYY-MM-DD'), '0999-01-01', 'Year AD 999'); + assert.equal(moment('0 1 1', 'YYYY MM DD').format('YYYY-MM-DD'), '0000-01-01', 'Year AD 0'); + assert.equal(moment('999 1 1', 'YYYY MM DD').format('YYYY-MM-DD'), '0999-01-01', 'Year AD 999'); + assert.equal(moment('0 1 1', 'YYYYY MM DD').format('YYYYY-MM-DD'), '00000-01-01', 'Year AD 0'); + assert.equal(moment('99 1 1', 'YYYYY MM DD').format('YYYYY-MM-DD'), '00099-01-01', 'Year AD 99'); + assert.equal(moment('999 1 1', 'YYYYY MM DD').format('YYYYY-MM-DD'), '00999-01-01', 'Year AD 999'); +}); + +test('six digit years', function (assert) { + assert.equal(moment([-270000, 0, 1]).format('YYYYY-MM-DD'), '-270000-01-01', 'format BC 270,001'); + assert.equal(moment([270000, 0, 1]).format('YYYYY-MM-DD'), '270000-01-01', 'format AD 270,000'); + assert.equal(moment('-270000-01-01', 'YYYYY-MM-DD').toDate().getFullYear(), -270000, 'parse BC 270,001'); + assert.equal(moment('270000-01-01', 'YYYYY-MM-DD').toDate().getFullYear(), 270000, 'parse AD 270,000'); + assert.equal(moment('+270000-01-01', 'YYYYY-MM-DD').toDate().getFullYear(), 270000, 'parse AD +270,000'); + assert.equal(moment.utc('-270000-01-01', 'YYYYY-MM-DD').toDate().getUTCFullYear(), -270000, 'parse utc BC 270,001'); + assert.equal(moment.utc('270000-01-01', 'YYYYY-MM-DD').toDate().getUTCFullYear(), 270000, 'parse utc AD 270,000'); + assert.equal(moment.utc('+270000-01-01', 'YYYYY-MM-DD').toDate().getUTCFullYear(), 270000, 'parse utc AD +270,000'); +}); + +test('negative four digit years', function (assert) { + assert.equal(moment('-1000-01-01', 'YYYYY-MM-DD').toDate().getFullYear(), -1000, 'parse BC 1,001'); + assert.equal(moment.utc('-1000-01-01', 'YYYYY-MM-DD').toDate().getUTCFullYear(), -1000, 'parse utc BC 1,001'); +}); + +test('strict parsing', function (assert) { + assert.equal(moment('2014-', 'YYYY-Q', true).isValid(), false, 'fail missing quarter'); + + assert.equal(moment('2012-05', 'YYYY-MM', true).format('YYYY-MM'), '2012-05', 'parse correct string'); + assert.equal(moment(' 2012-05', 'YYYY-MM', true).isValid(), false, 'fail on extra whitespace'); + assert.equal(moment('foo 2012-05', '[foo] YYYY-MM', true).format('YYYY-MM'), '2012-05', 'handle fixed text'); + assert.equal(moment('2012 05', 'YYYY-MM', true).isValid(), false, 'fail on different separator'); + assert.equal(moment('2012 05', 'YYYY MM DD', true).isValid(), false, 'fail on too many tokens'); + + assert.equal(moment('05 30 2010', ['DD MM YYYY', 'MM DD YYYY'], true).format('MM DD YYYY'), '05 30 2010', 'array with bad date'); + assert.equal(moment('05 30 2010', ['', 'MM DD YYYY'], true).format('MM DD YYYY'), '05 30 2010', 'array with invalid format'); + assert.equal(moment('05 30 2010', [' DD MM YYYY', 'MM DD YYYY'], true).format('MM DD YYYY'), '05 30 2010', 'array with non-matching format'); + + assert.equal(moment('2010.*...', 'YYYY.*', true).isValid(), false, 'invalid format with regex chars'); + assert.equal(moment('2010.*', 'YYYY.*', true).year(), 2010, 'valid format with regex chars'); + assert.equal(moment('.*2010.*', '.*YYYY.*', true).year(), 2010, 'valid format with regex chars on both sides'); + + //strict tokens + assert.equal(moment('-5-05-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid negative year'); + assert.equal(moment('2-05-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid one-digit year'); + assert.equal(moment('20-05-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid two-digit year'); + assert.equal(moment('201-05-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid three-digit year'); + assert.equal(moment('2010-05-25', 'YYYY-MM-DD', true).isValid(), true, 'valid four-digit year'); + assert.equal(moment('22010-05-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid five-digit year'); + + assert.equal(moment('12-05-25', 'YY-MM-DD', true).isValid(), true, 'valid two-digit year'); + assert.equal(moment('2012-05-25', 'YY-MM-DD', true).isValid(), false, 'invalid four-digit year'); + + assert.equal(moment('-5-05-25', 'Y-MM-DD', true).isValid(), true, 'valid negative year'); + assert.equal(moment('2-05-25', 'Y-MM-DD', true).isValid(), true, 'valid one-digit year'); + assert.equal(moment('20-05-25', 'Y-MM-DD', true).isValid(), true, 'valid two-digit year'); + assert.equal(moment('201-05-25', 'Y-MM-DD', true).isValid(), true, 'valid three-digit year'); + + assert.equal(moment('2012-5-25', 'YYYY-M-DD', true).isValid(), true, 'valid one-digit month'); + assert.equal(moment('2012-5-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid one-digit month'); + assert.equal(moment('2012-05-25', 'YYYY-M-DD', true).isValid(), true, 'valid one-digit month'); + assert.equal(moment('2012-05-25', 'YYYY-MM-DD', true).isValid(), true, 'valid one-digit month'); + + assert.equal(moment('2012-05-2', 'YYYY-MM-D', true).isValid(), true, 'valid one-digit day'); + assert.equal(moment('2012-05-2', 'YYYY-MM-DD', true).isValid(), false, 'invalid one-digit day'); + assert.equal(moment('2012-05-02', 'YYYY-MM-D', true).isValid(), true, 'valid two-digit day'); + assert.equal(moment('2012-05-02', 'YYYY-MM-DD', true).isValid(), true, 'valid two-digit day'); + + assert.equal(moment('+002012-05-25', 'YYYYY-MM-DD', true).isValid(), true, 'valid six-digit year'); + assert.equal(moment('+2012-05-25', 'YYYYY-MM-DD', true).isValid(), false, 'invalid four-digit year'); + + //thse are kinda pointless, but they should work as expected + assert.equal(moment('1', 'S', true).isValid(), true, 'valid one-digit milisecond'); + assert.equal(moment('12', 'S', true).isValid(), false, 'invalid two-digit milisecond'); + assert.equal(moment('123', 'S', true).isValid(), false, 'invalid three-digit milisecond'); + + assert.equal(moment('1', 'SS', true).isValid(), false, 'invalid one-digit milisecond'); + assert.equal(moment('12', 'SS', true).isValid(), true, 'valid two-digit milisecond'); + assert.equal(moment('123', 'SS', true).isValid(), false, 'invalid three-digit milisecond'); + + assert.equal(moment('1', 'SSS', true).isValid(), false, 'invalid one-digit milisecond'); + assert.equal(moment('12', 'SSS', true).isValid(), false, 'invalid two-digit milisecond'); + assert.equal(moment('123', 'SSS', true).isValid(), true, 'valid three-digit milisecond'); + + // strict parsing respects month length + assert.ok(moment('1 January 2000', 'D MMMM YYYY', true).isValid(), 'capital long-month + MMMM'); + assert.ok(!moment('1 January 2000', 'D MMM YYYY', true).isValid(), 'capital long-month + MMM'); + assert.ok(!moment('1 Jan 2000', 'D MMMM YYYY', true).isValid(), 'capital short-month + MMMM'); + assert.ok(moment('1 Jan 2000', 'D MMM YYYY', true).isValid(), 'capital short-month + MMM'); + assert.ok(moment('1 january 2000', 'D MMMM YYYY', true).isValid(), 'lower long-month + MMMM'); + assert.ok(!moment('1 january 2000', 'D MMM YYYY', true).isValid(), 'lower long-month + MMM'); + assert.ok(!moment('1 jan 2000', 'D MMMM YYYY', true).isValid(), 'lower short-month + MMMM'); + assert.ok(moment('1 jan 2000', 'D MMM YYYY', true).isValid(), 'lower short-month + MMM'); +}); + +test('parsing into a locale', function (assert) { + moment.defineLocale('parselocale', { + months : 'one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve'.split('_'), + monthsShort : 'one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve'.split('_') + }); + + moment.locale('en'); + + assert.equal(moment('2012 seven', 'YYYY MMM', 'parselocale').month(), 6, 'should be able to parse in a specific locale'); + + moment.locale('parselocale'); + + assert.equal(moment('2012 july', 'YYYY MMM', 'en').month(), 6, 'should be able to parse in a specific locale'); + + moment.defineLocale('parselocale', null); +}); + +function getVerifier(test$$1) { + return function (input, format, expected, description, asymetrical) { + var m = moment(input, format); + test$$1.equal(m.format('YYYY MM DD'), expected, 'compare: ' + description); + + //test round trip + if (!asymetrical) { + test$$1.equal(m.format(format), input, 'round trip: ' + description); + } + }; +} + +test('parsing week and weekday information', function (assert) { + var ver = getVerifier(assert); + var currentWeekOfYear = moment().weeks(); + var expectedDate2012 = moment([2012, 0, 1]) + .day(0) + .add((currentWeekOfYear - 1), 'weeks') + .format('YYYY MM DD'); + var expectedDate1999 = moment([1999, 0, 1]) + .day(0) + .add((currentWeekOfYear - 1), 'weeks') + .format('YYYY MM DD'); + + // year + ver('12', 'gg', expectedDate2012, 'week-year two digits'); + ver('2012', 'gggg', expectedDate2012, 'week-year four digits'); + ver('99', 'gg', expectedDate1999, 'week-year two digits previous year'); + ver('1999', 'gggg', expectedDate1999, 'week-year four digits previous year'); + + ver('99', 'GG', '1999 01 04', 'iso week-year two digits'); + ver('1999', 'GGGG', '1999 01 04', 'iso week-year four digits'); + + ver('13', 'GG', '2012 12 31', 'iso week-year two digits previous year'); + ver('2013', 'GGGG', '2012 12 31', 'iso week-year four digits previous year'); + + // year + week + ver('1999 37', 'gggg w', '1999 09 05', 'week'); + ver('1999 37', 'gggg ww', '1999 09 05', 'week double'); + ver('1999 37', 'GGGG W', '1999 09 13', 'iso week'); + ver('1999 37', 'GGGG WW', '1999 09 13', 'iso week double'); + + ver('1999 37 4', 'GGGG WW E', '1999 09 16', 'iso day'); + ver('1999 37 04', 'GGGG WW E', '1999 09 16', 'iso day wide', true); + + ver('1999 37 4', 'gggg ww e', '1999 09 09', 'day'); + ver('1999 37 04', 'gggg ww e', '1999 09 09', 'day wide', true); + + // year + week + day + ver('1999 37 4', 'gggg ww d', '1999 09 09', 'd'); + ver('1999 37 Th', 'gggg ww dd', '1999 09 09', 'dd'); + ver('1999 37 Thu', 'gggg ww ddd', '1999 09 09', 'ddd'); + ver('1999 37 Thursday', 'gggg ww dddd', '1999 09 09', 'dddd'); + + // lower-order only + assert.equal(moment('22', 'ww').week(), 22, 'week sets the week by itself'); + assert.equal(moment('22', 'ww').weekYear(), moment().weekYear(), 'week keeps this year'); + assert.equal(moment('2012 22', 'YYYY ww').weekYear(), 2012, 'week keeps parsed year'); + + assert.equal(moment('22', 'WW').isoWeek(), 22, 'iso week sets the week by itself'); + assert.equal(moment('2012 22', 'YYYY WW').weekYear(), 2012, 'iso week keeps parsed year'); + assert.equal(moment('22', 'WW').isoWeekYear(), moment().isoWeekYear(), 'iso week keeps this year'); + + // order + ver('6 2013 2', 'e gggg w', '2013 01 12', 'order doesn\'t matter'); + ver('6 2013 2', 'E GGGG W', '2013 01 12', 'iso order doesn\'t matter'); + + //can parse other stuff too + assert.equal(moment('1999-W37-4 3:30', 'GGGG-[W]WW-E HH:mm').format('YYYY MM DD HH:mm'), '1999 09 16 03:30', 'parsing weeks and hours'); + + // In safari, all years before 1300 are shifted back with one day. + // http://stackoverflow.com/questions/20768975/safari-subtracts-1-day-from-dates-before-1300 + if (new Date('1300-01-01').getUTCFullYear() === 1300) { + // Years less than 100 + ver('0098-06', 'GGGG-WW', '0098 02 03', 'small years work', true); + } +}); + +test('parsing localized weekdays', function (assert) { + var ver = getVerifier(assert); + try { + moment.locale('dow:1,doy:4', { + 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('_'), + week: {dow: 1, doy: 4} + }); + ver('1999 37 4', 'GGGG WW E', '1999 09 16', 'iso ignores locale'); + ver('1999 37 7', 'GGGG WW E', '1999 09 19', 'iso ignores locale'); + + ver('1999 37 0', 'gggg ww e', '1999 09 13', 'localized e uses local doy and dow: 0 = monday'); + ver('1999 37 4', 'gggg ww e', '1999 09 17', 'localized e uses local doy and dow: 4 = friday'); + + ver('1999 37 1', 'gggg ww d', '1999 09 13', 'localized d uses 0-indexed days: 1 = monday'); + ver('1999 37 Lu', 'gggg ww dd', '1999 09 13', 'localized d uses 0-indexed days: Mo'); + ver('1999 37 lun.', 'gggg ww ddd', '1999 09 13', 'localized d uses 0-indexed days: Mon'); + ver('1999 37 lundi', 'gggg ww dddd', '1999 09 13', 'localized d uses 0-indexed days: Monday'); + ver('1999 37 4', 'gggg ww d', '1999 09 16', 'localized d uses 0-indexed days: 4'); + + //sunday goes at the end of the week + ver('1999 37 0', 'gggg ww d', '1999 09 19', 'localized d uses 0-indexed days: 0 = sund'); + ver('1999 37 Di', 'gggg ww dd', '1999 09 19', 'localized d uses 0-indexed days: 0 = sund'); + } + finally { + moment.defineLocale('dow:1,doy:4', null); + moment.locale('en'); + } +}); + +test('parsing with customized two-digit year', function (assert) { + var original = moment.parseTwoDigitYear; + try { + assert.equal(moment('68', 'YY').year(), 2068); + assert.equal(moment('69', 'YY').year(), 1969); + moment.parseTwoDigitYear = function (input) { + return +input + (+input > 30 ? 1900 : 2000); + }; + assert.equal(moment('68', 'YY').year(), 1968); + assert.equal(moment('67', 'YY').year(), 1967); + assert.equal(moment('31', 'YY').year(), 1931); + assert.equal(moment('30', 'YY').year(), 2030); + } + finally { + moment.parseTwoDigitYear = original; + } +}); + +test('array with strings', function (assert) { + assert.equal(moment(['2014', '7', '31']).isValid(), true, 'string array + isValid'); +}); + +test('object with strings', function (assert) { + assert.equal(moment({year: '2014', month: '7', day: '31'}).isValid(), true, 'string object + isValid'); +}); + +test('utc with array of formats', function (assert) { + assert.equal(moment.utc('2014-01-01', ['YYYY-MM-DD', 'YYYY-MM']).format(), '2014-01-01T00:00:00Z', 'moment.utc works with array of formats'); +}); + +test('parsing invalid string weekdays', function (assert) { + assert.equal(false, moment('a', 'dd').isValid(), + 'dd with invalid weekday, non-strict'); + assert.equal(false, moment('a', 'dd', true).isValid(), + 'dd with invalid weekday, strict'); + assert.equal(false, moment('a', 'ddd').isValid(), + 'ddd with invalid weekday, non-strict'); + assert.equal(false, moment('a', 'ddd', true).isValid(), + 'ddd with invalid weekday, strict'); + assert.equal(false, moment('a', 'dddd').isValid(), + 'dddd with invalid weekday, non-strict'); + assert.equal(false, moment('a', 'dddd', true).isValid(), + 'dddd with invalid weekday, strict'); +}); + +test('milliseconds', function (assert) { + assert.equal(moment('1', 'S').millisecond(), 100); + assert.equal(moment('12', 'SS').millisecond(), 120); + assert.equal(moment('123', 'SSS').millisecond(), 123); + assert.equal(moment('1234', 'SSSS').millisecond(), 123); + assert.equal(moment('12345', 'SSSSS').millisecond(), 123); + assert.equal(moment('123456', 'SSSSSS').millisecond(), 123); + assert.equal(moment('1234567', 'SSSSSSS').millisecond(), 123); + assert.equal(moment('12345678', 'SSSSSSSS').millisecond(), 123); + assert.equal(moment('123456789', 'SSSSSSSSS').millisecond(), 123); +}); + +test('hmm', function (assert) { + assert.equal(moment('123', 'hmm', true).format('HH:mm:ss'), '01:23:00', '123 with hmm'); + assert.equal(moment('123a', 'hmmA', true).format('HH:mm:ss'), '01:23:00', '123a with hmmA'); + assert.equal(moment('123p', 'hmmA', true).format('HH:mm:ss'), '13:23:00', '123p with hmmA'); + + assert.equal(moment('1234', 'hmm', true).format('HH:mm:ss'), '12:34:00', '1234 with hmm'); + assert.equal(moment('1234a', 'hmmA', true).format('HH:mm:ss'), '00:34:00', '1234a with hmmA'); + assert.equal(moment('1234p', 'hmmA', true).format('HH:mm:ss'), '12:34:00', '1234p with hmmA'); + + assert.equal(moment('12345', 'hmmss', true).format('HH:mm:ss'), '01:23:45', '12345 with hmmss'); + assert.equal(moment('12345a', 'hmmssA', true).format('HH:mm:ss'), '01:23:45', '12345a with hmmssA'); + assert.equal(moment('12345p', 'hmmssA', true).format('HH:mm:ss'), '13:23:45', '12345p with hmmssA'); + assert.equal(moment('112345', 'hmmss', true).format('HH:mm:ss'), '11:23:45', '112345 with hmmss'); + assert.equal(moment('112345a', 'hmmssA', true).format('HH:mm:ss'), '11:23:45', '112345a with hmmssA'); + assert.equal(moment('112345p', 'hmmssA', true).format('HH:mm:ss'), '23:23:45', '112345p with hmmssA'); + + assert.equal(moment('023', 'Hmm', true).format('HH:mm:ss'), '00:23:00', '023 with Hmm'); + assert.equal(moment('123', 'Hmm', true).format('HH:mm:ss'), '01:23:00', '123 with Hmm'); + assert.equal(moment('1234', 'Hmm', true).format('HH:mm:ss'), '12:34:00', '1234 with Hmm'); + assert.equal(moment('1534', 'Hmm', true).format('HH:mm:ss'), '15:34:00', '1234 with Hmm'); + assert.equal(moment('12345', 'Hmmss', true).format('HH:mm:ss'), '01:23:45', '12345 with Hmmss'); + assert.equal(moment('112345', 'Hmmss', true).format('HH:mm:ss'), '11:23:45', '112345 with Hmmss'); + assert.equal(moment('172345', 'Hmmss', true).format('HH:mm:ss'), '17:23:45', '112345 with Hmmss'); +}); + +test('Y token', function (assert) { + assert.equal(moment('1-1-2010', 'M-D-Y', true).year(), 2010, 'parsing Y'); +}); + +test('parsing flags retain parsed date parts', function (assert) { + var a = moment('10 p', 'hh:mm a'); + assert.equal(a.parsingFlags().parsedDateParts[3], 10, 'parsed 10 as the hour'); + assert.equal(a.parsingFlags().parsedDateParts[0], undefined, 'year was not parsed'); + assert.equal(a.parsingFlags().meridiem, 'p', 'meridiem flag was added'); + var b = moment('10:30', ['MMDDYY', 'HH:mm']); + assert.equal(b.parsingFlags().parsedDateParts[3], 10, 'multiple format parshing matched hour'); + assert.equal(b.parsingFlags().parsedDateParts[0], undefined, 'array is properly copied, no residual data from first token parse'); +}); + +test('parsing only meridiem results in invalid date', function (assert) { + assert.ok(!moment('alkj', 'hh:mm a').isValid(), 'because an a token is used, a meridiem will be parsed but nothing else was so invalid'); + assert.ok(moment('02:30 p more extra stuff', 'hh:mm a').isValid(), 'because other tokens were parsed, date is valid'); + assert.ok(moment('1/1/2016 extra data', ['a', 'M/D/YYYY']).isValid(), 'took second format, does not pick up on meridiem parsed from first format (good copy)'); +}); + +test('invalid dates return invalid for methods that access the _d prop', function (assert) { + var momentAsDate = moment(['2015', '12', '1']).toDate(); + assert.ok(momentAsDate instanceof Date, 'toDate returns a Date object'); + assert.ok(isNaN(momentAsDate.getTime()), 'toDate returns an invalid Date invalid'); +}); + +test('k, kk', function (assert) { + for (var i = -1; i <= 24; i++) { + var kVal = i + ':15:59'; + var kkVal = (i < 10 ? '0' : '') + i + ':15:59'; + if (i !== 24) { + assert.ok(moment(kVal, 'k:mm:ss').isSame(moment(kVal, 'H:mm:ss')), kVal + ' k parsing'); + assert.ok(moment(kkVal, 'kk:mm:ss').isSame(moment(kkVal, 'HH:mm:ss')), kkVal + ' kk parsing'); + } else { + assert.equal(moment(kVal, 'k:mm:ss').format('k:mm:ss'), kVal, kVal + ' k parsing'); + assert.equal(moment(kkVal, 'kk:mm:ss').format('kk:mm:ss'), kkVal, kkVal + ' skk parsing'); + } + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('creation data'); + +test('valid date', function (assert) { + var dat = moment('1992-10-22'); + var orig = dat.creationData(); + + assert.equal(dat.isValid(), true, '1992-10-22 is valid'); + assert.equal(orig.input, '1992-10-22', 'original input is not correct.'); + assert.equal(orig.format, 'YYYY-MM-DD', 'original format is defined.'); + assert.equal(orig.locale._abbr, 'en', 'default locale is en'); + assert.equal(orig.isUTC, false, 'not a UTC date'); +}); + +test('valid date at fr locale', function (assert) { + var dat = moment('1992-10-22', 'YYYY-MM-DD', 'fr'); + var orig = dat.creationData(); + + assert.equal(orig.locale._abbr, 'fr', 'locale is fr'); +}); + +test('valid date with formats', function (assert) { + var dat = moment('29-06-1995', ['MM-DD-YYYY', 'DD-MM', 'DD-MM-YYYY']); + var orig = dat.creationData(); + + assert.equal(orig.format, 'DD-MM-YYYY', 'DD-MM-YYYY format is defined.'); +}); + +test('strict', function (assert) { + assert.ok(moment('2015-01-02', 'YYYY-MM-DD', true).creationData().strict, 'strict is true'); + assert.ok(!moment('2015-01-02', 'YYYY-MM-DD').creationData().strict, 'strict is true'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('days in month'); + +test('days in month', function (assert) { + each([31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], function (days, i) { + var firstDay = moment([2012, i]), + lastDay = moment([2012, i, days]); + assert.equal(firstDay.daysInMonth(), days, firstDay.format('L') + ' should have ' + days + ' days.'); + assert.equal(lastDay.daysInMonth(), days, lastDay.format('L') + ' should have ' + days + ' days.'); + }); +}); + +test('days in month leap years', function (assert) { + assert.equal(moment([2010, 1]).daysInMonth(), 28, 'Feb 2010 should have 28 days'); + assert.equal(moment([2100, 1]).daysInMonth(), 28, 'Feb 2100 should have 28 days'); + assert.equal(moment([2008, 1]).daysInMonth(), 29, 'Feb 2008 should have 29 days'); + assert.equal(moment([2000, 1]).daysInMonth(), 29, 'Feb 2000 should have 29 days'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('days in year'); + +// https://github.com/moment/moment/issues/3717 +test('YYYYDDD should not parse DDD=000', function (assert) { + assert.equal(moment(7000000, moment.ISO_8601, true).isValid(), false); + assert.equal(moment('7000000', moment.ISO_8601, true).isValid(), false); + assert.equal(moment(7000000, moment.ISO_8601, false).isValid(), false); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +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; +} + +var hookCallback; + +function hooks () { + return hookCallback.apply(null, arguments); +} + +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 = {}; + + + +hooks.suppressDeprecationWarnings = false; +hooks.deprecationHandler = null; + +module$1('deprecate'); + +test('deprecate', function (assert) { + // NOTE: hooks inside deprecate.js and moment are different, so this is can + // not be test.expectedDeprecations(...) + var fn = function () {}; + var deprecatedFn = deprecate('testing deprecation', fn); + deprecatedFn(); + + expect(0); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +function equal(assert, a, b, message) { + assert.ok(Math.abs(a - b) < 0.00000001, '(' + a + ' === ' + b + ') ' + message); +} + +function dstForYear(year) { + var start = moment([year]), + end = moment([year + 1]), + current = start.clone(), + last; + + while (current < end) { + last = current.clone(); + current.add(24, 'hour'); + if (last.utcOffset() !== current.utcOffset()) { + end = current.clone(); + current = last.clone(); + break; + } + } + + while (current < end) { + last = current.clone(); + current.add(1, 'hour'); + if (last.utcOffset() !== current.utcOffset()) { + return { + moment : last, + diff : -(current.utcOffset() - last.utcOffset()) / 60 + }; + } + } +} + +module$1('diff'); + +test('diff', function (assert) { + assert.equal(moment(1000).diff(0), 1000, '1 second - 0 = 1000'); + assert.equal(moment(1000).diff(500), 500, '1 second - 0.5 seconds = 500'); + assert.equal(moment(0).diff(1000), -1000, '0 - 1 second = -1000'); + assert.equal(moment(new Date(1000)).diff(1000), 0, '1 second - 1 second = 0'); + var oneHourDate = new Date(2015, 5, 21), + nowDate = new Date(+oneHourDate); + oneHourDate.setHours(oneHourDate.getHours() + 1); + assert.equal(moment(oneHourDate).diff(nowDate), 60 * 60 * 1000, '1 hour from now = 3600000'); +}); + +test('diff key after', function (assert) { + assert.equal(moment([2010]).diff([2011], 'years'), -1, 'year diff'); + assert.equal(moment([2010]).diff([2010, 2], 'months'), -2, 'month diff'); + assert.equal(moment([2010]).diff([2010, 0, 7], 'weeks'), 0, 'week diff'); + assert.equal(moment([2010]).diff([2010, 0, 8], 'weeks'), -1, 'week diff'); + assert.equal(moment([2010]).diff([2010, 0, 21], 'weeks'), -2, 'week diff'); + assert.equal(moment([2010]).diff([2010, 0, 22], 'weeks'), -3, 'week diff'); + assert.equal(moment([2010]).diff([2010, 0, 4], 'days'), -3, 'day diff'); + assert.equal(moment([2010]).diff([2010, 0, 1, 4], 'hours'), -4, 'hour diff'); + assert.equal(moment([2010]).diff([2010, 0, 1, 0, 5], 'minutes'), -5, 'minute diff'); + assert.equal(moment([2010]).diff([2010, 0, 1, 0, 0, 6], 'seconds'), -6, 'second diff'); +}); + +test('diff key before', function (assert) { + assert.equal(moment([2011]).diff([2010], 'years'), 1, 'year diff'); + assert.equal(moment([2010, 2]).diff([2010], 'months'), 2, 'month diff'); + assert.equal(moment([2010, 0, 4]).diff([2010], 'days'), 3, 'day diff'); + assert.equal(moment([2010, 0, 7]).diff([2010], 'weeks'), 0, 'week diff'); + assert.equal(moment([2010, 0, 8]).diff([2010], 'weeks'), 1, 'week diff'); + assert.equal(moment([2010, 0, 21]).diff([2010], 'weeks'), 2, 'week diff'); + assert.equal(moment([2010, 0, 22]).diff([2010], 'weeks'), 3, 'week diff'); + assert.equal(moment([2010, 0, 1, 4]).diff([2010], 'hours'), 4, 'hour diff'); + assert.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'minutes'), 5, 'minute diff'); + assert.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 'seconds'), 6, 'second diff'); +}); + +test('diff key before singular', function (assert) { + assert.equal(moment([2011]).diff([2010], 'year'), 1, 'year diff singular'); + assert.equal(moment([2010, 2]).diff([2010], 'month'), 2, 'month diff singular'); + assert.equal(moment([2010, 0, 4]).diff([2010], 'day'), 3, 'day diff singular'); + assert.equal(moment([2010, 0, 7]).diff([2010], 'week'), 0, 'week diff singular'); + assert.equal(moment([2010, 0, 8]).diff([2010], 'week'), 1, 'week diff singular'); + assert.equal(moment([2010, 0, 21]).diff([2010], 'week'), 2, 'week diff singular'); + assert.equal(moment([2010, 0, 22]).diff([2010], 'week'), 3, 'week diff singular'); + assert.equal(moment([2010, 0, 1, 4]).diff([2010], 'hour'), 4, 'hour diff singular'); + assert.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'minute'), 5, 'minute diff singular'); + assert.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 'second'), 6, 'second diff singular'); +}); + +test('diff key before abbreviated', function (assert) { + assert.equal(moment([2011]).diff([2010], 'y'), 1, 'year diff abbreviated'); + assert.equal(moment([2010, 2]).diff([2010], 'M'), 2, 'month diff abbreviated'); + assert.equal(moment([2010, 0, 4]).diff([2010], 'd'), 3, 'day diff abbreviated'); + assert.equal(moment([2010, 0, 7]).diff([2010], 'w'), 0, 'week diff abbreviated'); + assert.equal(moment([2010, 0, 8]).diff([2010], 'w'), 1, 'week diff abbreviated'); + assert.equal(moment([2010, 0, 21]).diff([2010], 'w'), 2, 'week diff abbreviated'); + assert.equal(moment([2010, 0, 22]).diff([2010], 'w'), 3, 'week diff abbreviated'); + assert.equal(moment([2010, 0, 1, 4]).diff([2010], 'h'), 4, 'hour diff abbreviated'); + assert.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'm'), 5, 'minute diff abbreviated'); + assert.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 's'), 6, 'second diff abbreviated'); +}); + +test('diff month', function (assert) { + assert.equal(moment([2011, 0, 31]).diff([2011, 2, 1], 'months'), -1, 'month diff'); +}); + +test('diff across DST', function (assert) { + var dst = dstForYear(2012), a, b, daysInMonth; + if (!dst) { + assert.equal(42, 42, 'at least one assertion'); + return; + } + + a = dst.moment; + b = a.clone().utc().add(12, 'hours').local(); + daysInMonth = (a.daysInMonth() + b.daysInMonth()) / 2; + assert.equal(b.diff(a, 'milliseconds', true), 12 * 60 * 60 * 1000, + 'ms diff across DST'); + assert.equal(b.diff(a, 'seconds', true), 12 * 60 * 60, + 'second diff across DST'); + assert.equal(b.diff(a, 'minutes', true), 12 * 60, + 'minute diff across DST'); + assert.equal(b.diff(a, 'hours', true), 12, + 'hour diff across DST'); + assert.equal(b.diff(a, 'days', true), (12 - dst.diff) / 24, + 'day diff across DST'); + equal(assert, b.diff(a, 'weeks', true), (12 - dst.diff) / 24 / 7, + 'week diff across DST'); + assert.ok(0.95 / (2 * 31) < b.diff(a, 'months', true), + 'month diff across DST, lower bound'); + assert.ok(b.diff(a, 'month', true) < 1.05 / (2 * 28), + 'month diff across DST, upper bound'); + assert.ok(0.95 / (2 * 31 * 12) < b.diff(a, 'years', true), + 'year diff across DST, lower bound'); + assert.ok(b.diff(a, 'year', true) < 1.05 / (2 * 28 * 12), + 'year diff across DST, upper bound'); + + a = dst.moment; + b = a.clone().utc().add(12 + dst.diff, 'hours').local(); + daysInMonth = (a.daysInMonth() + b.daysInMonth()) / 2; + + assert.equal(b.diff(a, 'milliseconds', true), + (12 + dst.diff) * 60 * 60 * 1000, + 'ms diff across DST'); + assert.equal(b.diff(a, 'seconds', true), (12 + dst.diff) * 60 * 60, + 'second diff across DST'); + assert.equal(b.diff(a, 'minutes', true), (12 + dst.diff) * 60, + 'minute diff across DST'); + assert.equal(b.diff(a, 'hours', true), (12 + dst.diff), + 'hour diff across DST'); + assert.equal(b.diff(a, 'days', true), 12 / 24, 'day diff across DST'); + equal(assert, b.diff(a, 'weeks', true), 12 / 24 / 7, + 'week diff across DST'); + assert.ok(0.95 / (2 * 31) < b.diff(a, 'months', true), + 'month diff across DST, lower bound'); + assert.ok(b.diff(a, 'month', true) < 1.05 / (2 * 28), + 'month diff across DST, upper bound'); + assert.ok(0.95 / (2 * 31 * 12) < b.diff(a, 'years', true), + 'year diff across DST, lower bound'); + assert.ok(b.diff(a, 'year', true) < 1.05 / (2 * 28 * 12), + 'year diff across DST, upper bound'); +}); + +test('diff overflow', function (assert) { + assert.equal(moment([2011]).diff([2010], 'months'), 12, 'month diff'); + assert.equal(moment([2010, 0, 2]).diff([2010], 'hours'), 24, 'hour diff'); + assert.equal(moment([2010, 0, 1, 2]).diff([2010], 'minutes'), 120, 'minute diff'); + assert.equal(moment([2010, 0, 1, 0, 4]).diff([2010], 'seconds'), 240, 'second diff'); +}); + +test('diff between utc and local', function (assert) { + if (moment([2012]).utcOffset() === moment([2011]).utcOffset()) { + // Russia's utc offset on 1st of Jan 2012 vs 2011 is different + assert.equal(moment([2012]).utc().diff([2011], 'years'), 1, 'year diff'); + } + assert.equal(moment([2010, 2, 2]).utc().diff([2010, 0, 2], 'months'), 2, 'month diff'); + assert.equal(moment([2010, 0, 4]).utc().diff([2010], 'days'), 3, 'day diff'); + assert.equal(moment([2010, 0, 22]).utc().diff([2010], 'weeks'), 3, 'week diff'); + assert.equal(moment([2010, 0, 1, 4]).utc().diff([2010], 'hours'), 4, 'hour diff'); + assert.equal(moment([2010, 0, 1, 0, 5]).utc().diff([2010], 'minutes'), 5, 'minute diff'); + assert.equal(moment([2010, 0, 1, 0, 0, 6]).utc().diff([2010], 'seconds'), 6, 'second diff'); +}); + +test('diff floored', function (assert) { + assert.equal(moment([2010, 0, 1, 23]).diff([2010], 'day'), 0, '23 hours = 0 days'); + assert.equal(moment([2010, 0, 1, 23, 59]).diff([2010], 'day'), 0, '23:59 hours = 0 days'); + assert.equal(moment([2010, 0, 1, 24]).diff([2010], 'day'), 1, '24 hours = 1 day'); + assert.equal(moment([2010, 0, 2]).diff([2011, 0, 1], 'year'), 0, 'year rounded down'); + assert.equal(moment([2011, 0, 1]).diff([2010, 0, 2], 'year'), 0, 'year rounded down'); + assert.equal(moment([2010, 0, 2]).diff([2011, 0, 2], 'year'), -1, 'year rounded down'); + assert.equal(moment([2011, 0, 2]).diff([2010, 0, 2], 'year'), 1, 'year rounded down'); +}); + +test('year diffs include dates', function (assert) { + assert.ok(moment([2012, 1, 19]).diff(moment([2002, 1, 20]), 'years', true) < 10, 'year diff should include date of month'); +}); + +test('month diffs', function (assert) { + // due to floating point math errors, these tests just need to be accurate within 0.00000001 + assert.equal(moment([2012, 0, 1]).diff([2012, 1, 1], 'months', true), -1, 'Jan 1 to Feb 1 should be 1 month'); + equal(assert, moment([2012, 0, 1]).diff([2012, 0, 1, 12], 'months', true), -0.5 / 31, 'Jan 1 to Jan 1 noon should be 0.5 / 31 months'); + assert.equal(moment([2012, 0, 15]).diff([2012, 1, 15], 'months', true), -1, 'Jan 15 to Feb 15 should be 1 month'); + assert.equal(moment([2012, 0, 28]).diff([2012, 1, 28], 'months', true), -1, 'Jan 28 to Feb 28 should be 1 month'); + assert.ok(moment([2012, 0, 31]).diff([2012, 1, 29], 'months', true), -1, 'Jan 31 to Feb 29 should be 1 month'); + assert.ok(-1 > moment([2012, 0, 31]).diff([2012, 2, 1], 'months', true), 'Jan 31 to Mar 1 should be more than 1 month'); + assert.ok(-30 / 28 < moment([2012, 0, 31]).diff([2012, 2, 1], 'months', true), 'Jan 31 to Mar 1 should be less than 1 month and 1 day'); + equal(assert, moment([2012, 0, 1]).diff([2012, 0, 31], 'months', true), -(30 / 31), 'Jan 1 to Jan 31 should be 30 / 31 months'); + assert.ok(0 < moment('2014-02-01').diff(moment('2014-01-31'), 'months', true), 'jan-31 to feb-1 diff is positive'); +}); + +test('exact month diffs', function (assert) { + // generate all pairs of months and compute month diff, with fixed day + // of month = 15. + + var m1, m2; + for (m1 = 0; m1 < 12; ++m1) { + for (m2 = m1; m2 < 12; ++m2) { + assert.equal(moment([2013, m2, 15]).diff(moment([2013, m1, 15]), 'months', true), m2 - m1, + 'month diff from 2013-' + m1 + '-15 to 2013-' + m2 + '-15'); + } + } +}); + +test('year diffs', function (assert) { + // due to floating point math errors, these tests just need to be accurate within 0.00000001 + equal(assert, moment([2012, 0, 1]).diff([2013, 0, 1], 'years', true), -1, 'Jan 1 2012 to Jan 1 2013 should be 1 year'); + equal(assert, moment([2012, 1, 28]).diff([2013, 1, 28], 'years', true), -1, 'Feb 28 2012 to Feb 28 2013 should be 1 year'); + equal(assert, moment([2012, 2, 1]).diff([2013, 2, 1], 'years', true), -1, 'Mar 1 2012 to Mar 1 2013 should be 1 year'); + equal(assert, moment([2012, 11, 1]).diff([2013, 11, 1], 'years', true), -1, 'Dec 1 2012 to Dec 1 2013 should be 1 year'); + equal(assert, moment([2012, 11, 31]).diff([2013, 11, 31], 'years', true), -1, 'Dec 31 2012 to Dec 31 2013 should be 1 year'); + equal(assert, moment([2012, 0, 1]).diff([2013, 6, 1], 'years', true), -1.5, 'Jan 1 2012 to Jul 1 2013 should be 1.5 years'); + equal(assert, moment([2012, 0, 31]).diff([2013, 6, 31], 'years', true), -1.5, 'Jan 31 2012 to Jul 31 2013 should be 1.5 years'); + equal(assert, moment([2012, 0, 1]).diff([2013, 0, 1, 12], 'years', true), -1 - (0.5 / 31) / 12, 'Jan 1 2012 to Jan 1 2013 noon should be 1+(0.5 / 31) / 12 years'); + equal(assert, moment([2012, 0, 1]).diff([2013, 6, 1, 12], 'years', true), -1.5 - (0.5 / 31) / 12, 'Jan 1 2012 to Jul 1 2013 noon should be 1.5+(0.5 / 31) / 12 years'); + equal(assert, moment([2012, 1, 29]).diff([2013, 1, 28], 'years', true), -1, 'Feb 29 2012 to Feb 28 2013 should be 1-(1 / 28.5) / 12 years'); +}); + +test('negative zero', function (assert) { + function isNegative (n) { + return (1 / n) < 0; + } + assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1]), 'months')), 'month diff on same date is zero, not -0'); + assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1]), 'years')), 'year diff on same date is zero, not -0'); + assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1]), 'quarters')), 'quarter diff on same date is zero, not -0'); + assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1, 1]), 'days')), 'days diff on same date is zero, not -0'); + assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1, 0, 1]), 'hours')), 'hour diff on same hour is zero, not -0'); + assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1, 0, 0, 1]), 'minutes')), 'minute diff on same minute is zero, not -0'); + assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1, 0, 0, 0, 1]), 'seconds')), 'second diff on same second is zero, not -0'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('duration'); + +test('object instantiation', function (assert) { + var d = moment.duration({ + years: 2, + months: 3, + weeks: 2, + days: 1, + hours: 8, + minutes: 9, + seconds: 20, + milliseconds: 12 + }); + + assert.equal(d.years(), 2, 'years'); + assert.equal(d.months(), 3, 'months'); + assert.equal(d.weeks(), 2, 'weeks'); + assert.equal(d.days(), 15, 'days'); // two weeks + 1 day + assert.equal(d.hours(), 8, 'hours'); + assert.equal(d.minutes(), 9, 'minutes'); + assert.equal(d.seconds(), 20, 'seconds'); + assert.equal(d.milliseconds(), 12, 'milliseconds'); +}); + +test('object instantiation with strings', function (assert) { + var d = moment.duration({ + years: '2', + months: '3', + weeks: '2', + days: '1', + hours: '8', + minutes: '9', + seconds: '20', + milliseconds: '12' + }); + + assert.equal(d.years(), 2, 'years'); + assert.equal(d.months(), 3, 'months'); + assert.equal(d.weeks(), 2, 'weeks'); + assert.equal(d.days(), 15, 'days'); // two weeks + 1 day + assert.equal(d.hours(), 8, 'hours'); + assert.equal(d.minutes(), 9, 'minutes'); + assert.equal(d.seconds(), 20, 'seconds'); + assert.equal(d.milliseconds(), 12, 'milliseconds'); +}); + +test('milliseconds instantiation', function (assert) { + assert.equal(moment.duration(72).milliseconds(), 72, 'milliseconds'); + assert.equal(moment.duration(72).humanize(), 'a few seconds', 'Duration should be valid'); +}); + +test('undefined instantiation', function (assert) { + assert.equal(moment.duration(undefined).milliseconds(), 0, 'milliseconds'); + assert.equal(moment.duration(undefined).isValid(), true, '_isValid'); + assert.equal(moment.duration(undefined).humanize(), 'a few seconds', 'Duration should be valid'); +}); + +test('null instantiation', function (assert) { + assert.equal(moment.duration(null).milliseconds(), 0, 'milliseconds'); + assert.equal(moment.duration(null).isValid(), true, '_isValid'); + assert.equal(moment.duration(null).humanize(), 'a few seconds', 'Duration should be valid'); +}); + +test('NaN instantiation', function (assert) { + assert.ok(isNaN(moment.duration(NaN).milliseconds()), 'milliseconds should be NaN'); + assert.equal(moment.duration(NaN).isValid(), false, '_isValid'); + assert.equal(moment.duration(NaN).humanize(), 'Invalid date', 'Duration should be invalid'); +}); + +test('instantiation by type', function (assert) { + assert.equal(moment.duration(1, 'years').years(), 1, 'years'); + assert.equal(moment.duration(1, 'y').years(), 1, 'y'); + assert.equal(moment.duration(2, 'months').months(), 2, 'months'); + assert.equal(moment.duration(2, 'M').months(), 2, 'M'); + assert.equal(moment.duration(3, 'weeks').weeks(), 3, 'weeks'); + assert.equal(moment.duration(3, 'w').weeks(), 3, 'weeks'); + assert.equal(moment.duration(4, 'days').days(), 4, 'days'); + assert.equal(moment.duration(4, 'd').days(), 4, 'd'); + assert.equal(moment.duration(5, 'hours').hours(), 5, 'hours'); + assert.equal(moment.duration(5, 'h').hours(), 5, 'h'); + assert.equal(moment.duration(6, 'minutes').minutes(), 6, 'minutes'); + assert.equal(moment.duration(6, 'm').minutes(), 6, 'm'); + assert.equal(moment.duration(7, 'seconds').seconds(), 7, 'seconds'); + assert.equal(moment.duration(7, 's').seconds(), 7, 's'); + assert.equal(moment.duration(8, 'milliseconds').milliseconds(), 8, 'milliseconds'); + assert.equal(moment.duration(8, 'ms').milliseconds(), 8, 'ms'); +}); + +test('shortcuts', function (assert) { + assert.equal(moment.duration({y: 1}).years(), 1, 'years = y'); + assert.equal(moment.duration({M: 2}).months(), 2, 'months = M'); + assert.equal(moment.duration({w: 3}).weeks(), 3, 'weeks = w'); + assert.equal(moment.duration({d: 4}).days(), 4, 'days = d'); + assert.equal(moment.duration({h: 5}).hours(), 5, 'hours = h'); + assert.equal(moment.duration({m: 6}).minutes(), 6, 'minutes = m'); + assert.equal(moment.duration({s: 7}).seconds(), 7, 'seconds = s'); + assert.equal(moment.duration({ms: 8}).milliseconds(), 8, 'milliseconds = ms'); +}); + +test('generic getter', function (assert) { + assert.equal(moment.duration(1, 'years').get('years'), 1, 'years'); + assert.equal(moment.duration(1, 'years').get('year'), 1, 'years = year'); + assert.equal(moment.duration(1, 'years').get('y'), 1, 'years = y'); + assert.equal(moment.duration(2, 'months').get('months'), 2, 'months'); + assert.equal(moment.duration(2, 'months').get('month'), 2, 'months = month'); + assert.equal(moment.duration(2, 'months').get('M'), 2, 'months = M'); + assert.equal(moment.duration(3, 'weeks').get('weeks'), 3, 'weeks'); + assert.equal(moment.duration(3, 'weeks').get('week'), 3, 'weeks = week'); + assert.equal(moment.duration(3, 'weeks').get('w'), 3, 'weeks = w'); + assert.equal(moment.duration(4, 'days').get('days'), 4, 'days'); + assert.equal(moment.duration(4, 'days').get('day'), 4, 'days = day'); + assert.equal(moment.duration(4, 'days').get('d'), 4, 'days = d'); + assert.equal(moment.duration(5, 'hours').get('hours'), 5, 'hours'); + assert.equal(moment.duration(5, 'hours').get('hour'), 5, 'hours = hour'); + assert.equal(moment.duration(5, 'hours').get('h'), 5, 'hours = h'); + assert.equal(moment.duration(6, 'minutes').get('minutes'), 6, 'minutes'); + assert.equal(moment.duration(6, 'minutes').get('minute'), 6, 'minutes = minute'); + assert.equal(moment.duration(6, 'minutes').get('m'), 6, 'minutes = m'); + assert.equal(moment.duration(7, 'seconds').get('seconds'), 7, 'seconds'); + assert.equal(moment.duration(7, 'seconds').get('second'), 7, 'seconds = second'); + assert.equal(moment.duration(7, 'seconds').get('s'), 7, 'seconds = s'); + assert.equal(moment.duration(8, 'milliseconds').get('milliseconds'), 8, 'milliseconds'); + assert.equal(moment.duration(8, 'milliseconds').get('millisecond'), 8, 'milliseconds = millisecond'); + assert.equal(moment.duration(8, 'milliseconds').get('ms'), 8, 'milliseconds = ms'); +}); + +test('instantiation from another duration', function (assert) { + var simple = moment.duration(1234), + lengthy = moment.duration(60 * 60 * 24 * 360 * 1e3), + complicated = moment.duration({ + years: 2, + months: 3, + weeks: 4, + days: 1, + hours: 8, + minutes: 9, + seconds: 20, + milliseconds: 12 + }), + modified = moment.duration(1, 'day').add(moment.duration(1, 'day')); + + assert.deepEqual(moment.duration(simple), simple, 'simple clones are equal'); + assert.deepEqual(moment.duration(lengthy), lengthy, 'lengthy clones are equal'); + assert.deepEqual(moment.duration(complicated), complicated, 'complicated clones are equal'); + assert.deepEqual(moment.duration(modified), modified, 'cloning modified duration works'); +}); + +test('instantiation from 24-hour time zero', function (assert) { + assert.equal(moment.duration('00:00').years(), 0, '0 years'); + assert.equal(moment.duration('00:00').days(), 0, '0 days'); + assert.equal(moment.duration('00:00').hours(), 0, '0 hours'); + assert.equal(moment.duration('00:00').minutes(), 0, '0 minutes'); + assert.equal(moment.duration('00:00').seconds(), 0, '0 seconds'); + assert.equal(moment.duration('00:00').milliseconds(), 0, '0 milliseconds'); +}); + +test('instantiation from 24-hour time <24 hours', function (assert) { + assert.equal(moment.duration('06:45').years(), 0, '0 years'); + assert.equal(moment.duration('06:45').days(), 0, '0 days'); + assert.equal(moment.duration('06:45').hours(), 6, '6 hours'); + assert.equal(moment.duration('06:45').minutes(), 45, '45 minutes'); + assert.equal(moment.duration('06:45').seconds(), 0, '0 seconds'); + assert.equal(moment.duration('06:45').milliseconds(), 0, '0 milliseconds'); +}); + +test('instantiation from 24-hour time >24 hours', function (assert) { + assert.equal(moment.duration('26:45').years(), 0, '0 years'); + assert.equal(moment.duration('26:45').days(), 1, '0 days'); + assert.equal(moment.duration('26:45').hours(), 2, '2 hours'); + assert.equal(moment.duration('26:45').minutes(), 45, '45 minutes'); + assert.equal(moment.duration('26:45').seconds(), 0, '0 seconds'); + assert.equal(moment.duration('26:45').milliseconds(), 0, '0 milliseconds'); +}); + +test('instatiation from serialized C# TimeSpan zero', function (assert) { + assert.equal(moment.duration('00:00:00').years(), 0, '0 years'); + assert.equal(moment.duration('00:00:00').days(), 0, '0 days'); + assert.equal(moment.duration('00:00:00').hours(), 0, '0 hours'); + assert.equal(moment.duration('00:00:00').minutes(), 0, '0 minutes'); + assert.equal(moment.duration('00:00:00').seconds(), 0, '0 seconds'); + assert.equal(moment.duration('00:00:00').milliseconds(), 0, '0 milliseconds'); +}); + +test('instatiation from serialized C# TimeSpan with days', function (assert) { + assert.equal(moment.duration('1.02:03:04.9999999').years(), 0, '0 years'); + assert.equal(moment.duration('1.02:03:04.9999999').days(), 1, '1 day'); + assert.equal(moment.duration('1.02:03:04.9999999').hours(), 2, '2 hours'); + assert.equal(moment.duration('1.02:03:04.9999999').minutes(), 3, '3 minutes'); + assert.equal(moment.duration('1.02:03:04.9999999').seconds(), 5, '5 seconds'); + assert.equal(moment.duration('1.02:03:04.9999999').milliseconds(), 0, '0 milliseconds'); + + assert.equal(moment.duration('1 02:03:04.9999999').years(), 0, '0 years'); + assert.equal(moment.duration('1 02:03:04.9999999').days(), 1, '1 day'); + assert.equal(moment.duration('1 02:03:04.9999999').hours(), 2, '2 hours'); + assert.equal(moment.duration('1 02:03:04.9999999').minutes(), 3, '3 minutes'); + assert.equal(moment.duration('1 02:03:04.9999999').seconds(), 5, '5 seconds'); + assert.equal(moment.duration('1 02:03:04.9999999').milliseconds(), 0, '0 milliseconds'); +}); + +test('instatiation from serialized C# TimeSpan without days', function (assert) { + assert.equal(moment.duration('01:02:03.9999999').years(), 0, '0 years'); + assert.equal(moment.duration('01:02:03.9999999').days(), 0, '0 days'); + assert.equal(moment.duration('01:02:03.9999999').hours(), 1, '1 hour'); + assert.equal(moment.duration('01:02:03.9999999').minutes(), 2, '2 minutes'); + assert.equal(moment.duration('01:02:03.9999999').seconds(), 4, '4 seconds'); + assert.equal(moment.duration('01:02:03.9999999').milliseconds(), 0, '0 milliseconds'); + + assert.equal(moment.duration('23:59:59.9999999').days(), 1, '1 days'); + assert.equal(moment.duration('23:59:59.9999999').hours(), 0, '0 hours'); + assert.equal(moment.duration('23:59:59.9999999').minutes(), 0, '0 minutes'); + assert.equal(moment.duration('23:59:59.9999999').seconds(), 0, '0 seconds'); + assert.equal(moment.duration('23:59:59.9999999').milliseconds(), 0, '0 milliseconds'); + + assert.equal(moment.duration('500:59:59.8888888').days(), 20, '500 hours overflows to 20 days'); + assert.equal(moment.duration('500:59:59.8888888').hours(), 20, '500 hours overflows to 20 hours'); +}); + +test('instatiation from serialized C# TimeSpan without days or milliseconds', function (assert) { + assert.equal(moment.duration('01:02:03').years(), 0, '0 years'); + assert.equal(moment.duration('01:02:03').days(), 0, '0 days'); + assert.equal(moment.duration('01:02:03').hours(), 1, '1 hour'); + assert.equal(moment.duration('01:02:03').minutes(), 2, '2 minutes'); + assert.equal(moment.duration('01:02:03').seconds(), 3, '3 seconds'); + assert.equal(moment.duration('01:02:03').milliseconds(), 0, '0 milliseconds'); +}); + +test('instatiation from serialized C# TimeSpan without milliseconds', function (assert) { + assert.equal(moment.duration('1.02:03:04').years(), 0, '0 years'); + assert.equal(moment.duration('1.02:03:04').days(), 1, '1 day'); + assert.equal(moment.duration('1.02:03:04').hours(), 2, '2 hours'); + assert.equal(moment.duration('1.02:03:04').minutes(), 3, '3 minutes'); + assert.equal(moment.duration('1.02:03:04').seconds(), 4, '4 seconds'); + assert.equal(moment.duration('1.02:03:04').milliseconds(), 0, '0 milliseconds'); +}); + +test('instantiation from serialized C# TimeSpan with low millisecond precision', function (assert) { + assert.equal(moment.duration('00:00:15.72').years(), 0, '0 years'); + assert.equal(moment.duration('00:00:15.72').days(), 0, '0 days'); + assert.equal(moment.duration('00:00:15.72').hours(), 0, '0 hours'); + assert.equal(moment.duration('00:00:15.72').minutes(), 0, '0 minutes'); + assert.equal(moment.duration('00:00:15.72').seconds(), 15, '15 seconds'); + assert.equal(moment.duration('00:00:15.72').milliseconds(), 720, '720 milliseconds'); + + assert.equal(moment.duration('00:00:15.7').milliseconds(), 700, '700 milliseconds'); + + assert.equal(moment.duration('00:00:15.').milliseconds(), 0, '0 milliseconds'); +}); + +test('instantiation from serialized C# TimeSpan with high millisecond precision', function (assert) { + assert.equal(moment.duration('00:00:15.7200000').seconds(), 15, '15 seconds'); + assert.equal(moment.duration('00:00:15.7200000').milliseconds(), 720, '720 milliseconds'); + + assert.equal(moment.duration('00:00:15.7209999').seconds(), 15, '15 seconds'); + assert.equal(moment.duration('00:00:15.7209999').milliseconds(), 721, '721 milliseconds'); + + assert.equal(moment.duration('00:00:15.7205000').seconds(), 15, '15 seconds'); + assert.equal(moment.duration('00:00:15.7205000').milliseconds(), 721, '721 milliseconds'); + + assert.equal(moment.duration('-00:00:15.7205000').seconds(), -15, '15 seconds'); + assert.equal(moment.duration('-00:00:15.7205000').milliseconds(), -721, '721 milliseconds'); +}); + +test('instatiation from serialized C# TimeSpan maxValue', function (assert) { + var d = moment.duration('10675199.02:48:05.4775807'); + + assert.equal(d.years(), 29227, '29227 years'); + assert.equal(d.months(), 8, '8 months'); + assert.equal(d.days(), 12, '12 day'); // if you have to change this value -- just do it + + assert.equal(d.hours(), 2, '2 hours'); + assert.equal(d.minutes(), 48, '48 minutes'); + assert.equal(d.seconds(), 5, '5 seconds'); + assert.equal(d.milliseconds(), 478, '478 milliseconds'); +}); + +test('instatiation from serialized C# TimeSpan minValue', function (assert) { + var d = moment.duration('-10675199.02:48:05.4775808'); + + assert.equal(d.years(), -29227, '29653 years'); + assert.equal(d.months(), -8, '8 day'); + assert.equal(d.days(), -12, '12 day'); // if you have to change this value -- just do it + + assert.equal(d.hours(), -2, '2 hours'); + assert.equal(d.minutes(), -48, '48 minutes'); + assert.equal(d.seconds(), -5, '5 seconds'); + assert.equal(d.milliseconds(), -478, '478 milliseconds'); +}); + +test('instantiation from ISO 8601 duration', function (assert) { + assert.equal(moment.duration('P1Y2M3DT4H5M6S').asSeconds(), moment.duration({y: 1, M: 2, d: 3, h: 4, m: 5, s: 6}).asSeconds(), 'all fields'); + assert.equal(moment.duration('P3W3D').asSeconds(), moment.duration({w: 3, d: 3}).asSeconds(), 'week and day fields'); + assert.equal(moment.duration('P1M').asSeconds(), moment.duration({M: 1}).asSeconds(), 'single month field'); + assert.equal(moment.duration('PT1M').asSeconds(), moment.duration({m: 1}).asSeconds(), 'single minute field'); + assert.equal(moment.duration('P1MT2H').asSeconds(), moment.duration({M: 1, h: 2}).asSeconds(), 'random fields missing'); + assert.equal(moment.duration('-P60D').asSeconds(), moment.duration({d: -60}).asSeconds(), 'negative days'); + assert.equal(moment.duration('PT0.5S').asSeconds(), moment.duration({s: 0.5}).asSeconds(), 'fractional seconds'); + assert.equal(moment.duration('PT0,5S').asSeconds(), moment.duration({s: 0.5}).asSeconds(), 'fractional seconds (comma)'); +}); + +test('serialization to ISO 8601 duration strings', function (assert) { + assert.equal(moment.duration({y: 1, M: 2, d: 3, h: 4, m: 5, s: 6}).toISOString(), 'P1Y2M3DT4H5M6S', 'all fields'); + assert.equal(moment.duration({M: -1}).toISOString(), '-P1M', 'one month ago'); + assert.equal(moment.duration({m: -1}).toISOString(), '-PT1M', 'one minute ago'); + assert.equal(moment.duration({s: -0.5}).toISOString(), '-PT0.5S', 'one half second ago'); + assert.equal(moment.duration({y: -1, M: 1}).toISOString(), '-P11M', 'a month after a year ago'); + assert.equal(moment.duration({}).toISOString(), 'P0D', 'zero duration'); + assert.equal(moment.duration({M: 16, d:40, s: 86465}).toISOString(), 'P1Y4M40DT24H1M5S', 'all fields'); +}); + +test('toString acts as toISOString', function (assert) { + assert.equal(moment.duration({y: 1, M: 2, d: 3, h: 4, m: 5, s: 6}).toString(), 'P1Y2M3DT4H5M6S', 'all fields'); + assert.equal(moment.duration({M: -1}).toString(), '-P1M', 'one month ago'); + assert.equal(moment.duration({m: -1}).toString(), '-PT1M', 'one minute ago'); + assert.equal(moment.duration({s: -0.5}).toString(), '-PT0.5S', 'one half second ago'); + assert.equal(moment.duration({y: -1, M: 1}).toString(), '-P11M', 'a month after a year ago'); + assert.equal(moment.duration({}).toString(), 'P0D', 'zero duration'); + assert.equal(moment.duration({M: 16, d:40, s: 86465}).toString(), 'P1Y4M40DT24H1M5S', 'all fields'); +}); + +test('toIsoString deprecation', function (assert) { + test.expectedDeprecations('toIsoString()'); + + assert.equal(moment.duration({}).toIsoString(), moment.duration({}).toISOString(), 'toIsoString delegates to toISOString'); +}); + +test('`isodate` (python) test cases', function (assert) { + assert.equal(moment.duration('P18Y9M4DT11H9M8S').asSeconds(), moment.duration({y: 18, M: 9, d: 4, h: 11, m: 9, s: 8}).asSeconds(), 'python isodate 1'); + assert.equal(moment.duration('P2W').asSeconds(), moment.duration({w: 2}).asSeconds(), 'python isodate 2'); + assert.equal(moment.duration('P3Y6M4DT12H30M5S').asSeconds(), moment.duration({y: 3, M: 6, d: 4, h: 12, m: 30, s: 5}).asSeconds(), 'python isodate 3'); + assert.equal(moment.duration('P23DT23H').asSeconds(), moment.duration({d: 23, h: 23}).asSeconds(), 'python isodate 4'); + assert.equal(moment.duration('P4Y').asSeconds(), moment.duration({y: 4}).asSeconds(), 'python isodate 5'); + assert.equal(moment.duration('P1M').asSeconds(), moment.duration({M: 1}).asSeconds(), 'python isodate 6'); + assert.equal(moment.duration('PT1M').asSeconds(), moment.duration({m: 1}).asSeconds(), 'python isodate 7'); + assert.equal(moment.duration('P0.5Y').asSeconds(), moment.duration({y: 0.5}).asSeconds(), 'python isodate 8'); + assert.equal(moment.duration('PT36H').asSeconds(), moment.duration({h: 36}).asSeconds(), 'python isodate 9'); + assert.equal(moment.duration('P1DT12H').asSeconds(), moment.duration({d: 1, h: 12}).asSeconds(), 'python isodate 10'); + assert.equal(moment.duration('-P2W').asSeconds(), moment.duration({w: -2}).asSeconds(), 'python isodate 11'); + assert.equal(moment.duration('-P2.2W').asSeconds(), moment.duration({w: -2.2}).asSeconds(), 'python isodate 12'); + assert.equal(moment.duration('P1DT2H3M4S').asSeconds(), moment.duration({d: 1, h: 2, m: 3, s: 4}).asSeconds(), 'python isodate 13'); + assert.equal(moment.duration('P1DT2H3M').asSeconds(), moment.duration({d: 1, h: 2, m: 3}).asSeconds(), 'python isodate 14'); + assert.equal(moment.duration('P1DT2H').asSeconds(), moment.duration({d: 1, h: 2}).asSeconds(), 'python isodate 15'); + assert.equal(moment.duration('PT2H').asSeconds(), moment.duration({h: 2}).asSeconds(), 'python isodate 16'); + assert.equal(moment.duration('PT2.3H').asSeconds(), moment.duration({h: 2.3}).asSeconds(), 'python isodate 17'); + assert.equal(moment.duration('PT2H3M4S').asSeconds(), moment.duration({h: 2, m: 3, s: 4}).asSeconds(), 'python isodate 18'); + assert.equal(moment.duration('PT3M4S').asSeconds(), moment.duration({m: 3, s: 4}).asSeconds(), 'python isodate 19'); + assert.equal(moment.duration('PT22S').asSeconds(), moment.duration({s: 22}).asSeconds(), 'python isodate 20'); + assert.equal(moment.duration('PT22.22S').asSeconds(), moment.duration({s: 22.22}).asSeconds(), 'python isodate 21'); + assert.equal(moment.duration('-P2Y').asSeconds(), moment.duration({y: -2}).asSeconds(), 'python isodate 22'); + assert.equal(moment.duration('-P3Y6M4DT12H30M5S').asSeconds(), moment.duration({y: -3, M: -6, d: -4, h: -12, m: -30, s: -5}).asSeconds(), 'python isodate 23'); + assert.equal(moment.duration('-P1DT2H3M4S').asSeconds(), moment.duration({d: -1, h: -2, m: -3, s: -4}).asSeconds(), 'python isodate 24'); + assert.equal(moment.duration('PT-6H3M').asSeconds(), moment.duration({h: -6, m: 3}).asSeconds(), 'python isodate 25'); + assert.equal(moment.duration('-PT-6H3M').asSeconds(), moment.duration({h: 6, m: -3}).asSeconds(), 'python isodate 26'); + assert.equal(moment.duration('-P-3Y-6M-4DT-12H-30M-5S').asSeconds(), moment.duration({y: 3, M: 6, d: 4, h: 12, m: 30, s: 5}).asSeconds(), 'python isodate 27'); + assert.equal(moment.duration('P-3Y-6M-4DT-12H-30M-5S').asSeconds(), moment.duration({y: -3, M: -6, d: -4, h: -12, m: -30, s: -5}).asSeconds(), 'python isodate 28'); + assert.equal(moment.duration('-P-2W').asSeconds(), moment.duration({w: 2}).asSeconds(), 'python isodate 29'); + assert.equal(moment.duration('P-2W').asSeconds(), moment.duration({w: -2}).asSeconds(), 'python isodate 30'); +}); + +test('ISO 8601 misuse cases', function (assert) { + assert.equal(moment.duration('P').asSeconds(), 0, 'lonely P'); + assert.equal(moment.duration('PT').asSeconds(), 0, 'just P and T'); + assert.equal(moment.duration('P1H').asSeconds(), 0, 'missing T'); + assert.equal(moment.duration('P1D1Y').asSeconds(), 0, 'out of order'); + assert.equal(moment.duration('PT.5S').asSeconds(), 0.5, 'accept no leading zero for decimal'); + assert.equal(moment.duration('PT1,S').asSeconds(), 1, 'accept trailing decimal separator'); + assert.equal(moment.duration('PT1M0,,5S').asSeconds(), 60, 'extra decimal separators are ignored as 0'); +}); + +test('humanize', function (assert) { + moment.locale('en'); + assert.equal(moment.duration({seconds: 44}).humanize(), 'a few seconds', '44 seconds = a few seconds'); + assert.equal(moment.duration({seconds: 45}).humanize(), 'a minute', '45 seconds = a minute'); + assert.equal(moment.duration({seconds: 89}).humanize(), 'a minute', '89 seconds = a minute'); + assert.equal(moment.duration({seconds: 90}).humanize(), '2 minutes', '90 seconds = 2 minutes'); + assert.equal(moment.duration({minutes: 44}).humanize(), '44 minutes', '44 minutes = 44 minutes'); + assert.equal(moment.duration({minutes: 45}).humanize(), 'an hour', '45 minutes = an hour'); + assert.equal(moment.duration({minutes: 89}).humanize(), 'an hour', '89 minutes = an hour'); + assert.equal(moment.duration({minutes: 90}).humanize(), '2 hours', '90 minutes = 2 hours'); + assert.equal(moment.duration({hours: 5}).humanize(), '5 hours', '5 hours = 5 hours'); + assert.equal(moment.duration({hours: 21}).humanize(), '21 hours', '21 hours = 21 hours'); + assert.equal(moment.duration({hours: 22}).humanize(), 'a day', '22 hours = a day'); + assert.equal(moment.duration({hours: 35}).humanize(), 'a day', '35 hours = a day'); + assert.equal(moment.duration({hours: 36}).humanize(), '2 days', '36 hours = 2 days'); + assert.equal(moment.duration({days: 1}).humanize(), 'a day', '1 day = a day'); + assert.equal(moment.duration({days: 5}).humanize(), '5 days', '5 days = 5 days'); + assert.equal(moment.duration({weeks: 1}).humanize(), '7 days', '1 week = 7 days'); + assert.equal(moment.duration({days: 25}).humanize(), '25 days', '25 days = 25 days'); + assert.equal(moment.duration({days: 26}).humanize(), 'a month', '26 days = a month'); + assert.equal(moment.duration({days: 30}).humanize(), 'a month', '30 days = a month'); + assert.equal(moment.duration({days: 45}).humanize(), 'a month', '45 days = a month'); + assert.equal(moment.duration({days: 46}).humanize(), '2 months', '46 days = 2 months'); + assert.equal(moment.duration({days: 74}).humanize(), '2 months', '74 days = 2 months'); + assert.equal(moment.duration({days: 77}).humanize(), '3 months', '77 days = 3 months'); + assert.equal(moment.duration({months: 1}).humanize(), 'a month', '1 month = a month'); + assert.equal(moment.duration({months: 5}).humanize(), '5 months', '5 months = 5 months'); + assert.equal(moment.duration({days: 344}).humanize(), 'a year', '344 days = a year'); + assert.equal(moment.duration({days: 345}).humanize(), 'a year', '345 days = a year'); + assert.equal(moment.duration({days: 547}).humanize(), 'a year', '547 days = a year'); + assert.equal(moment.duration({days: 548}).humanize(), '2 years', '548 days = 2 years'); + assert.equal(moment.duration({years: 1}).humanize(), 'a year', '1 year = a year'); + assert.equal(moment.duration({years: 5}).humanize(), '5 years', '5 years = 5 years'); + assert.equal(moment.duration(7200000).humanize(), '2 hours', '7200000 = 2 minutes'); +}); + +test('humanize duration with suffix', function (assert) { + moment.locale('en'); + assert.equal(moment.duration({seconds: 44}).humanize(true), 'in a few seconds', '44 seconds = a few seconds'); + assert.equal(moment.duration({seconds: -44}).humanize(true), 'a few seconds ago', '44 seconds = a few seconds'); +}); + +test('bubble value up', function (assert) { + assert.equal(moment.duration({milliseconds: 61001}).milliseconds(), 1, '61001 milliseconds has 1 millisecond left over'); + assert.equal(moment.duration({milliseconds: 61001}).seconds(), 1, '61001 milliseconds has 1 second left over'); + assert.equal(moment.duration({milliseconds: 61001}).minutes(), 1, '61001 milliseconds has 1 minute left over'); + + assert.equal(moment.duration({minutes: 350}).minutes(), 50, '350 minutes has 50 minutes left over'); + assert.equal(moment.duration({minutes: 350}).hours(), 5, '350 minutes has 5 hours left over'); +}); + +test('clipping', function (assert) { + assert.equal(moment.duration({months: 11}).months(), 11, '11 months is 11 months'); + assert.equal(moment.duration({months: 11}).years(), 0, '11 months makes no year'); + assert.equal(moment.duration({months: 12}).months(), 0, '12 months is 0 months left over'); + assert.equal(moment.duration({months: 12}).years(), 1, '12 months makes 1 year'); + assert.equal(moment.duration({months: 13}).months(), 1, '13 months is 1 month left over'); + assert.equal(moment.duration({months: 13}).years(), 1, '13 months makes 1 year'); + + assert.equal(moment.duration({days: 30}).days(), 30, '30 days is 30 days'); + assert.equal(moment.duration({days: 30}).months(), 0, '30 days makes no month'); + assert.equal(moment.duration({days: 31}).days(), 0, '31 days is 0 days left over'); + assert.equal(moment.duration({days: 31}).months(), 1, '31 days is a month'); + assert.equal(moment.duration({days: 32}).days(), 1, '32 days is 1 day left over'); + assert.equal(moment.duration({days: 32}).months(), 1, '32 days is a month'); + + assert.equal(moment.duration({hours: 23}).hours(), 23, '23 hours is 23 hours'); + assert.equal(moment.duration({hours: 23}).days(), 0, '23 hours makes no day'); + assert.equal(moment.duration({hours: 24}).hours(), 0, '24 hours is 0 hours left over'); + assert.equal(moment.duration({hours: 24}).days(), 1, '24 hours makes 1 day'); + assert.equal(moment.duration({hours: 25}).hours(), 1, '25 hours is 1 hour left over'); + assert.equal(moment.duration({hours: 25}).days(), 1, '25 hours makes 1 day'); +}); + +test('bubbling consistency', function (assert) { + var days = 0, months = 0, newDays, newMonths, totalDays, d; + for (totalDays = 1; totalDays <= 500; ++totalDays) { + d = moment.duration(totalDays, 'days'); + newDays = d.days(); + newMonths = d.months() + d.years() * 12; + assert.ok( + (months === newMonths && days + 1 === newDays) || + (months + 1 === newMonths && newDays === 0), + 'consistent total days ' + totalDays + + ' was ' + months + ' ' + days + + ' now ' + newMonths + ' ' + newDays); + days = newDays; + months = newMonths; + } +}); + +test('effective equivalency', function (assert) { + assert.deepEqual(moment.duration({seconds: 1})._data, moment.duration({milliseconds: 1000})._data, '1 second is the same as 1000 milliseconds'); + assert.deepEqual(moment.duration({seconds: 60})._data, moment.duration({minutes: 1})._data, '1 minute is the same as 60 seconds'); + assert.deepEqual(moment.duration({minutes: 60})._data, moment.duration({hours: 1})._data, '1 hour is the same as 60 minutes'); + assert.deepEqual(moment.duration({hours: 24})._data, moment.duration({days: 1})._data, '1 day is the same as 24 hours'); + assert.deepEqual(moment.duration({days: 7})._data, moment.duration({weeks: 1})._data, '1 week is the same as 7 days'); + assert.deepEqual(moment.duration({days: 31})._data, moment.duration({months: 1})._data, '1 month is the same as 30 days'); + assert.deepEqual(moment.duration({months: 12})._data, moment.duration({years: 1})._data, '1 years is the same as 12 months'); +}); + +test('asGetters', function (assert) { + // 400 years have exactly 146097 days + + // years + assert.equal(moment.duration(1, 'year').asYears(), 1, '1 year as years'); + assert.equal(moment.duration(1, 'year').asMonths(), 12, '1 year as months'); + assert.equal(moment.duration(400, 'year').asMonths(), 4800, '400 years as months'); + assert.equal(moment.duration(1, 'year').asWeeks().toFixed(3), 52.143, '1 year as weeks'); + assert.equal(moment.duration(1, 'year').asDays(), 365, '1 year as days'); + assert.equal(moment.duration(2, 'year').asDays(), 730, '2 years as days'); + assert.equal(moment.duration(3, 'year').asDays(), 1096, '3 years as days'); + assert.equal(moment.duration(4, 'year').asDays(), 1461, '4 years as days'); + assert.equal(moment.duration(400, 'year').asDays(), 146097, '400 years as days'); + assert.equal(moment.duration(1, 'year').asHours(), 8760, '1 year as hours'); + assert.equal(moment.duration(1, 'year').asMinutes(), 525600, '1 year as minutes'); + assert.equal(moment.duration(1, 'year').asSeconds(), 31536000, '1 year as seconds'); + assert.equal(moment.duration(1, 'year').asMilliseconds(), 31536000000, '1 year as milliseconds'); + + // months + assert.equal(moment.duration(1, 'month').asYears().toFixed(4), 0.0833, '1 month as years'); + assert.equal(moment.duration(1, 'month').asMonths(), 1, '1 month as months'); + assert.equal(moment.duration(1, 'month').asWeeks().toFixed(3), 4.286, '1 month as weeks'); + assert.equal(moment.duration(1, 'month').asDays(), 30, '1 month as days'); + assert.equal(moment.duration(2, 'month').asDays(), 61, '2 months as days'); + assert.equal(moment.duration(3, 'month').asDays(), 91, '3 months as days'); + assert.equal(moment.duration(4, 'month').asDays(), 122, '4 months as days'); + assert.equal(moment.duration(5, 'month').asDays(), 152, '5 months as days'); + assert.equal(moment.duration(6, 'month').asDays(), 183, '6 months as days'); + assert.equal(moment.duration(7, 'month').asDays(), 213, '7 months as days'); + assert.equal(moment.duration(8, 'month').asDays(), 243, '8 months as days'); + assert.equal(moment.duration(9, 'month').asDays(), 274, '9 months as days'); + assert.equal(moment.duration(10, 'month').asDays(), 304, '10 months as days'); + assert.equal(moment.duration(11, 'month').asDays(), 335, '11 months as days'); + assert.equal(moment.duration(12, 'month').asDays(), 365, '12 months as days'); + assert.equal(moment.duration(24, 'month').asDays(), 730, '24 months as days'); + assert.equal(moment.duration(36, 'month').asDays(), 1096, '36 months as days'); + assert.equal(moment.duration(48, 'month').asDays(), 1461, '48 months as days'); + assert.equal(moment.duration(4800, 'month').asDays(), 146097, '4800 months as days'); + assert.equal(moment.duration(1, 'month').asHours(), 720, '1 month as hours'); + assert.equal(moment.duration(1, 'month').asMinutes(), 43200, '1 month as minutes'); + assert.equal(moment.duration(1, 'month').asSeconds(), 2592000, '1 month as seconds'); + assert.equal(moment.duration(1, 'month').asMilliseconds(), 2592000000, '1 month as milliseconds'); + + // weeks + assert.equal(moment.duration(1, 'week').asYears().toFixed(4), 0.0192, '1 week as years'); + assert.equal(moment.duration(1, 'week').asMonths().toFixed(3), 0.230, '1 week as months'); + assert.equal(moment.duration(1, 'week').asWeeks(), 1, '1 week as weeks'); + assert.equal(moment.duration(1, 'week').asDays(), 7, '1 week as days'); + assert.equal(moment.duration(1, 'week').asHours(), 168, '1 week as hours'); + assert.equal(moment.duration(1, 'week').asMinutes(), 10080, '1 week as minutes'); + assert.equal(moment.duration(1, 'week').asSeconds(), 604800, '1 week as seconds'); + assert.equal(moment.duration(1, 'week').asMilliseconds(), 604800000, '1 week as milliseconds'); + + // days + assert.equal(moment.duration(1, 'day').asYears().toFixed(4), 0.0027, '1 day as years'); + assert.equal(moment.duration(1, 'day').asMonths().toFixed(3), 0.033, '1 day as months'); + assert.equal(moment.duration(1, 'day').asWeeks().toFixed(3), 0.143, '1 day as weeks'); + assert.equal(moment.duration(1, 'day').asDays(), 1, '1 day as days'); + assert.equal(moment.duration(1, 'day').asHours(), 24, '1 day as hours'); + assert.equal(moment.duration(1, 'day').asMinutes(), 1440, '1 day as minutes'); + assert.equal(moment.duration(1, 'day').asSeconds(), 86400, '1 day as seconds'); + assert.equal(moment.duration(1, 'day').asMilliseconds(), 86400000, '1 day as milliseconds'); + + // hours + assert.equal(moment.duration(1, 'hour').asYears().toFixed(6), 0.000114, '1 hour as years'); + assert.equal(moment.duration(1, 'hour').asMonths().toFixed(5), 0.00137, '1 hour as months'); + assert.equal(moment.duration(1, 'hour').asWeeks().toFixed(5), 0.00595, '1 hour as weeks'); + assert.equal(moment.duration(1, 'hour').asDays().toFixed(4), 0.0417, '1 hour as days'); + assert.equal(moment.duration(1, 'hour').asHours(), 1, '1 hour as hours'); + assert.equal(moment.duration(1, 'hour').asMinutes(), 60, '1 hour as minutes'); + assert.equal(moment.duration(1, 'hour').asSeconds(), 3600, '1 hour as seconds'); + assert.equal(moment.duration(1, 'hour').asMilliseconds(), 3600000, '1 hour as milliseconds'); + + // minutes + assert.equal(moment.duration(1, 'minute').asYears().toFixed(8), 0.00000190, '1 minute as years'); + assert.equal(moment.duration(1, 'minute').asMonths().toFixed(7), 0.0000228, '1 minute as months'); + assert.equal(moment.duration(1, 'minute').asWeeks().toFixed(7), 0.0000992, '1 minute as weeks'); + assert.equal(moment.duration(1, 'minute').asDays().toFixed(6), 0.000694, '1 minute as days'); + assert.equal(moment.duration(1, 'minute').asHours().toFixed(4), 0.0167, '1 minute as hours'); + assert.equal(moment.duration(1, 'minute').asMinutes(), 1, '1 minute as minutes'); + assert.equal(moment.duration(1, 'minute').asSeconds(), 60, '1 minute as seconds'); + assert.equal(moment.duration(1, 'minute').asMilliseconds(), 60000, '1 minute as milliseconds'); + + // seconds + assert.equal(moment.duration(1, 'second').asYears().toFixed(10), 0.0000000317, '1 second as years'); + assert.equal(moment.duration(1, 'second').asMonths().toFixed(9), 0.000000380, '1 second as months'); + assert.equal(moment.duration(1, 'second').asWeeks().toFixed(8), 0.00000165, '1 second as weeks'); + assert.equal(moment.duration(1, 'second').asDays().toFixed(7), 0.0000116, '1 second as days'); + assert.equal(moment.duration(1, 'second').asHours().toFixed(6), 0.000278, '1 second as hours'); + assert.equal(moment.duration(1, 'second').asMinutes().toFixed(4), 0.0167, '1 second as minutes'); + assert.equal(moment.duration(1, 'second').asSeconds(), 1, '1 second as seconds'); + assert.equal(moment.duration(1, 'second').asMilliseconds(), 1000, '1 second as milliseconds'); + + // milliseconds + assert.equal(moment.duration(1, 'millisecond').asYears().toFixed(13), 0.0000000000317, '1 millisecond as years'); + assert.equal(moment.duration(1, 'millisecond').asMonths().toFixed(12), 0.000000000380, '1 millisecond as months'); + assert.equal(moment.duration(1, 'millisecond').asWeeks().toFixed(11), 0.00000000165, '1 millisecond as weeks'); + assert.equal(moment.duration(1, 'millisecond').asDays().toFixed(10), 0.0000000116, '1 millisecond as days'); + assert.equal(moment.duration(1, 'millisecond').asHours().toFixed(9), 0.000000278, '1 millisecond as hours'); + assert.equal(moment.duration(1, 'millisecond').asMinutes().toFixed(7), 0.0000167, '1 millisecond as minutes'); + assert.equal(moment.duration(1, 'millisecond').asSeconds(), 0.001, '1 millisecond as seconds'); + assert.equal(moment.duration(1, 'millisecond').asMilliseconds(), 1, '1 millisecond as milliseconds'); +}); + +test('as getters for small units', function (assert) { + var dS = moment.duration(1, 'milliseconds'), + ds = moment.duration(3, 'seconds'), + dm = moment.duration(13, 'minutes'); + + // Tests for issue #1867. + // Floating point errors for small duration units were introduced in version 2.8.0. + assert.equal(dS.as('milliseconds'), 1, 'as("milliseconds")'); + assert.equal(dS.asMilliseconds(), 1, 'asMilliseconds()'); + assert.equal(ds.as('seconds'), 3, 'as("seconds")'); + assert.equal(ds.asSeconds(), 3, 'asSeconds()'); + assert.equal(dm.as('minutes'), 13, 'as("minutes")'); + assert.equal(dm.asMinutes(), 13, 'asMinutes()'); +}); + +test('minutes getter for floating point hours', function (assert) { + // Tests for issue #2978. + // For certain floating point hours, .minutes() getter produced incorrect values due to the rounding errors + assert.equal(moment.duration(2.3, 'h').minutes(), 18, 'minutes()'); + assert.equal(moment.duration(4.1, 'h').minutes(), 6, 'minutes()'); +}); + +test('isDuration', function (assert) { + assert.ok(moment.isDuration(moment.duration(12345678)), 'correctly says true'); + assert.ok(!moment.isDuration(moment()), 'moment object is not a duration'); + assert.ok(!moment.isDuration({milliseconds: 1}), 'plain object is not a duration'); +}); + +test('add', function (assert) { + var d = moment.duration({months: 4, weeks: 3, days: 2}); + // for some reason, d._data._months does not get updated; use d._months instead. + assert.equal(d.add(1, 'month')._months, 5, 'Add months'); + assert.equal(d.add(5, 'days')._days, 28, 'Add days'); + assert.equal(d.add(10000)._milliseconds, 10000, 'Add milliseconds'); + assert.equal(d.add({h: 23, m: 59})._milliseconds, 23 * 60 * 60 * 1000 + 59 * 60 * 1000 + 10000, 'Add hour:minute'); +}); + +test('add and bubble', function (assert) { + var d; + + assert.equal(moment.duration(1, 'second').add(1000, 'milliseconds').seconds(), 2, 'Adding milliseconds should bubble up to seconds'); + assert.equal(moment.duration(1, 'minute').add(60, 'second').minutes(), 2, 'Adding seconds should bubble up to minutes'); + assert.equal(moment.duration(1, 'hour').add(60, 'minutes').hours(), 2, 'Adding minutes should bubble up to hours'); + assert.equal(moment.duration(1, 'day').add(24, 'hours').days(), 2, 'Adding hours should bubble up to days'); + + d = moment.duration(-1, 'day').add(1, 'hour'); + assert.equal(d.hours(), -23, '-1 day + 1 hour == -23 hour (component)'); + assert.equal(d.asHours(), -23, '-1 day + 1 hour == -23 hours'); + + d = moment.duration(-1, 'year').add(1, 'day'); + assert.equal(d.days(), -30, '- 1 year + 1 day == -30 days (component)'); + assert.equal(d.months(), -11, '- 1 year + 1 day == -11 months (component)'); + assert.equal(d.years(), 0, '- 1 year + 1 day == 0 years (component)'); + assert.equal(d.asDays(), -364, '- 1 year + 1 day == -364 days'); + + d = moment.duration(-1, 'year').add(1, 'hour'); + assert.equal(d.hours(), -23, '- 1 year + 1 hour == -23 hours (component)'); + assert.equal(d.days(), -30, '- 1 year + 1 hour == -30 days (component)'); + assert.equal(d.months(), -11, '- 1 year + 1 hour == -11 months (component)'); + assert.equal(d.years(), 0, '- 1 year + 1 hour == 0 years (component)'); +}); + +test('subtract and bubble', function (assert) { + var d; + + assert.equal(moment.duration(2, 'second').subtract(1000, 'milliseconds').seconds(), 1, 'Subtracting milliseconds should bubble up to seconds'); + assert.equal(moment.duration(2, 'minute').subtract(60, 'second').minutes(), 1, 'Subtracting seconds should bubble up to minutes'); + assert.equal(moment.duration(2, 'hour').subtract(60, 'minutes').hours(), 1, 'Subtracting minutes should bubble up to hours'); + assert.equal(moment.duration(2, 'day').subtract(24, 'hours').days(), 1, 'Subtracting hours should bubble up to days'); + + d = moment.duration(1, 'day').subtract(1, 'hour'); + assert.equal(d.hours(), 23, '1 day - 1 hour == 23 hour (component)'); + assert.equal(d.asHours(), 23, '1 day - 1 hour == 23 hours'); + + d = moment.duration(1, 'year').subtract(1, 'day'); + assert.equal(d.days(), 30, '1 year - 1 day == 30 days (component)'); + assert.equal(d.months(), 11, '1 year - 1 day == 11 months (component)'); + assert.equal(d.years(), 0, '1 year - 1 day == 0 years (component)'); + assert.equal(d.asDays(), 364, '1 year - 1 day == 364 days'); + + d = moment.duration(1, 'year').subtract(1, 'hour'); + assert.equal(d.hours(), 23, '1 year - 1 hour == 23 hours (component)'); + assert.equal(d.days(), 30, '1 year - 1 hour == 30 days (component)'); + assert.equal(d.months(), 11, '1 year - 1 hour == 11 months (component)'); + assert.equal(d.years(), 0, '1 year - 1 hour == 0 years (component)'); +}); + +test('subtract', function (assert) { + var d = moment.duration({months: 2, weeks: 2, days: 0, hours: 5}); + // for some reason, d._data._months does not get updated; use d._months instead. + assert.equal(d.subtract(1, 'months')._months, 1, 'Subtract months'); + assert.equal(d.subtract(14, 'days')._days, 0, 'Subtract days'); + assert.equal(d.subtract(10000)._milliseconds, 5 * 60 * 60 * 1000 - 10000, 'Subtract milliseconds'); + assert.equal(d.subtract({h: 1, m: 59})._milliseconds, 3 * 60 * 60 * 1000 + 1 * 60 * 1000 - 10000, 'Subtract hour:minute'); +}); + +test('JSON.stringify duration', function (assert) { + var d = moment.duration(1024, 'h'); + + assert.equal(JSON.stringify(d), '"' + d.toISOString() + '"', 'JSON.stringify on duration should return ISO string'); +}); + +test('duration plugins', function (assert) { + var durationObject = moment.duration(); + moment.duration.fn.foo = function (arg) { + assert.equal(this, durationObject); + assert.equal(arg, 5); + }; + durationObject.foo(5); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('duration from moments'); + +test('pure year diff', function (assert) { + var m1 = moment('2012-01-01T00:00:00.000Z'), + m2 = moment('2013-01-01T00:00:00.000Z'); + + assert.equal(moment.duration({from: m1, to: m2}).as('years'), 1, 'year moment difference'); + assert.equal(moment.duration({from: m2, to: m1}).as('years'), -1, 'negative year moment difference'); +}); + +test('month and day diff', function (assert) { + var m1 = moment('2012-01-15T00:00:00.000Z'), + m2 = moment('2012-02-17T00:00:00.000Z'), + d = moment.duration({from: m1, to: m2}); + + assert.equal(d.get('days'), 2); + assert.equal(d.get('months'), 1); +}); + +test('day diff, separate months', function (assert) { + var m1 = moment('2012-01-15T00:00:00.000Z'), + m2 = moment('2012-02-13T00:00:00.000Z'), + d = moment.duration({from: m1, to: m2}); + + assert.equal(d.as('days'), 29); +}); + +test('hour diff', function (assert) { + var m1 = moment('2012-01-15T17:00:00.000Z'), + m2 = moment('2012-01-16T03:00:00.000Z'), + d = moment.duration({from: m1, to: m2}); + + assert.equal(d.as('hours'), 10); +}); + +test('minute diff', function (assert) { + var m1 = moment('2012-01-15T17:45:00.000Z'), + m2 = moment('2012-01-16T03:15:00.000Z'), + d = moment.duration({from: m1, to: m2}); + + assert.equal(d.as('hours'), 9.5); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('invalid'); + +test('invalid duration', function (assert) { + var m = moment.duration.invalid(); // should be invalid + assert.equal(m.isValid(), false); + assert.ok(isNaN(m.valueOf())); +}); + +test('valid duration', function (assert) { + var m = moment.duration({d: null}); // should be valid, for now + assert.equal(m.isValid(), true); + assert.equal(m.valueOf(), 0); +}); + +test('invalid duration - only smallest unit can have decimal', function (assert) { + var m = moment.duration({'days': 3.5, 'hours': 1.1}); // should be invalid + assert.equal(m.isValid(), false); + assert.ok(isNaN(m.valueOf())); // .valueOf() returns NaN for invalid durations +}); + +test('valid duration - smallest unit can have decimal', function (assert) { + var m = moment.duration({'days': 3, 'hours': 1.1}); // should be valid + assert.equal(m.isValid(), true); + assert.equal(m.asHours(), 73.1); +}); + +test('invalid duration with two arguments', function (assert) { + var m = moment.duration(NaN, 'days'); + assert.equal(m.isValid(), false); + assert.ok(isNaN(m.valueOf())); +}); + +test('invalid duration operations', function (assert) { + var invalids = [ + moment.duration(NaN), + moment.duration(NaN, 'days'), + moment.duration.invalid() + ], + i, + invalid, + valid = moment.duration(); + + for (i = 0; i < invalids.length; ++i) { + invalid = invalids[i]; + + assert.ok(!invalid.add(5, 'hours').isValid(), 'invalid.add is invalid; i=' + i); + assert.ok(!invalid.subtract(30, 'days').isValid(), 'invalid.subtract is invalid; i=' + i); + assert.ok(!invalid.abs().isValid(), 'invalid.abs is invalid; i=' + i); + assert.ok(isNaN(invalid.as('years')), 'invalid.as is NaN; i=' + i); + assert.ok(isNaN(invalid.asMilliseconds()), 'invalid.asMilliseconds is NaN; i=' + i); + assert.ok(isNaN(invalid.asSeconds()), 'invalid.asSeconds is NaN; i=' + i); + assert.ok(isNaN(invalid.asMinutes()), 'invalid.asMinutes is NaN; i=' + i); + assert.ok(isNaN(invalid.asHours()), 'invalid.asHours is NaN; i=' + i); + assert.ok(isNaN(invalid.asDays()), 'invalid.asDays is NaN; i=' + i); + assert.ok(isNaN(invalid.asWeeks()), 'invalid.asWeeks is NaN; i=' + i); + assert.ok(isNaN(invalid.asMonths()), 'invalid.asMonths is NaN; i=' + i); + assert.ok(isNaN(invalid.asYears()), 'invalid.asYears is NaN; i=' + i); + assert.ok(isNaN(invalid.valueOf()), 'invalid.valueOf is NaN; i=' + i); + assert.ok(isNaN(invalid.get('hours')), 'invalid.get is NaN; i=' + i); + + assert.ok(isNaN(invalid.milliseconds()), 'invalid.milliseconds is NaN; i=' + i); + assert.ok(isNaN(invalid.seconds()), 'invalid.seconds is NaN; i=' + i); + assert.ok(isNaN(invalid.minutes()), 'invalid.minutes is NaN; i=' + i); + assert.ok(isNaN(invalid.hours()), 'invalid.hours is NaN; i=' + i); + assert.ok(isNaN(invalid.days()), 'invalid.days is NaN; i=' + i); + assert.ok(isNaN(invalid.weeks()), 'invalid.weeks is NaN; i=' + i); + assert.ok(isNaN(invalid.months()), 'invalid.months is NaN; i=' + i); + assert.ok(isNaN(invalid.years()), 'invalid.years is NaN; i=' + i); + + assert.equal(invalid.humanize(), + invalid.localeData().invalidDate(), + 'invalid.humanize is localized invalid duration string; i=' + i); + assert.equal(invalid.toISOString(), + invalid.localeData().invalidDate(), + 'invalid.toISOString is localized invalid duration string; i=' + i); + assert.equal(invalid.toString(), + invalid.localeData().invalidDate(), + 'invalid.toString is localized invalid duration string; i=' + i); + assert.equal(invalid.toJSON(), invalid.localeData().invalidDate(), 'invalid.toJSON is null; i=' + i); + assert.equal(invalid.locale(), 'en', 'invalid.locale; i=' + i); + assert.equal(invalid.localeData()._abbr, 'en', 'invalid.localeData()._abbr; i=' + i); + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('format'); + +test('format YY', function (assert) { + var b = moment(new Date(2009, 1, 14, 15, 25, 50, 125)); + assert.equal(b.format('YY'), '09', 'YY ---> 09'); +}); + +test('format escape brackets', function (assert) { + moment.locale('en'); + + var b = moment(new Date(2009, 1, 14, 15, 25, 50, 125)); + assert.equal(b.format('[day]'), 'day', 'Single bracket'); + assert.equal(b.format('[day] YY [YY]'), 'day 09 YY', 'Double bracket'); + assert.equal(b.format('[YY'), '[09', 'Un-ended bracket'); + assert.equal(b.format('[[YY]]'), '[YY]', 'Double nested brackets'); + assert.equal(b.format('[[]'), '[', 'Escape open bracket'); + assert.equal(b.format('[Last]'), 'Last', 'localized tokens'); + assert.equal(b.format('[L] L'), 'L 02/14/2009', 'localized tokens with escaped localized tokens'); + assert.equal(b.format('[L LL LLL LLLL aLa]'), 'L LL LLL LLLL aLa', 'localized tokens with escaped localized tokens'); + assert.equal(b.format('[LLL] LLL'), 'LLL February 14, 2009 3:25 PM', 'localized tokens with escaped localized tokens (recursion)'); + assert.equal(b.format('YYYY[\n]DD[\n]'), '2009\n14\n', 'Newlines'); +}); + +test('handle negative years', function (assert) { + moment.locale('en'); + assert.equal(moment.utc().year(-1).format('YY'), '-01', 'YY with negative year'); + assert.equal(moment.utc().year(-1).format('YYYY'), '-0001', 'YYYY with negative year'); + assert.equal(moment.utc().year(-12).format('YY'), '-12', 'YY with negative year'); + assert.equal(moment.utc().year(-12).format('YYYY'), '-0012', 'YYYY with negative year'); + assert.equal(moment.utc().year(-123).format('YY'), '-23', 'YY with negative year'); + assert.equal(moment.utc().year(-123).format('YYYY'), '-0123', 'YYYY with negative year'); + assert.equal(moment.utc().year(-1234).format('YY'), '-34', 'YY with negative year'); + assert.equal(moment.utc().year(-1234).format('YYYY'), '-1234', 'YYYY with negative year'); + assert.equal(moment.utc().year(-12345).format('YY'), '-45', 'YY with negative year'); + assert.equal(moment.utc().year(-12345).format('YYYY'), '-12345', 'YYYY with negative year'); +}); + +test('format milliseconds', function (assert) { + var b = moment(new Date(2009, 1, 14, 15, 25, 50, 123)); + assert.equal(b.format('S'), '1', 'Deciseconds'); + assert.equal(b.format('SS'), '12', 'Centiseconds'); + assert.equal(b.format('SSS'), '123', 'Milliseconds'); + b.milliseconds(789); + assert.equal(b.format('S'), '7', 'Deciseconds'); + assert.equal(b.format('SS'), '78', 'Centiseconds'); + assert.equal(b.format('SSS'), '789', 'Milliseconds'); +}); + +test('format timezone', function (assert) { + var b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)); + assert.ok(b.format('Z').match(/^[\+\-]\d\d:\d\d$/), b.format('Z') + ' should be something like \'+07:30\''); + assert.ok(b.format('ZZ').match(/^[\+\-]\d{4}$/), b.format('ZZ') + ' should be something like \'+0700\''); +}); + +test('format multiple with utc offset', function (assert) { + var b = moment('2012-10-08 -1200', ['YYYY-MM-DD HH:mm ZZ', 'YYYY-MM-DD ZZ', 'YYYY-MM-DD']); + assert.equal(b.format('YYYY-MM'), '2012-10', 'Parsing multiple formats should not crash with different sized formats'); +}); + +test('isDST', function (assert) { + var janOffset = new Date(2011, 0, 1).getTimezoneOffset(), + julOffset = new Date(2011, 6, 1).getTimezoneOffset(), + janIsDst = janOffset < julOffset, + julIsDst = julOffset < janOffset, + jan1 = moment([2011]), + jul1 = moment([2011, 6]); + + if (janIsDst && julIsDst) { + assert.ok(0, 'January and July cannot both be in DST'); + assert.ok(0, 'January and July cannot both be in DST'); + } else if (janIsDst) { + assert.ok(jan1.isDST(), 'January 1 is DST'); + assert.ok(!jul1.isDST(), 'July 1 is not DST'); + } else if (julIsDst) { + assert.ok(!jan1.isDST(), 'January 1 is not DST'); + assert.ok(jul1.isDST(), 'July 1 is DST'); + } else { + assert.ok(!jan1.isDST(), 'January 1 is not DST'); + assert.ok(!jul1.isDST(), 'July 1 is not DST'); + } +}); + +test('unix timestamp', function (assert) { + var m = moment('1234567890.123', 'X'); + assert.equal(m.format('X'), '1234567890', 'unix timestamp without milliseconds'); + assert.equal(m.format('X.S'), '1234567890.1', 'unix timestamp with deciseconds'); + assert.equal(m.format('X.SS'), '1234567890.12', 'unix timestamp with centiseconds'); + assert.equal(m.format('X.SSS'), '1234567890.123', 'unix timestamp with milliseconds'); + + m = moment(1234567890.123, 'X'); + assert.equal(m.format('X'), '1234567890', 'unix timestamp as integer'); +}); + +test('unix offset milliseconds', function (assert) { + var m = moment('1234567890123', 'x'); + assert.equal(m.format('x'), '1234567890123', 'unix offset in milliseconds'); + + m = moment(1234567890123, 'x'); + assert.equal(m.format('x'), '1234567890123', 'unix offset in milliseconds as integer'); +}); + +test('utcOffset sanity checks', function (assert) { + assert.equal(moment().utcOffset() % 15, 0, + 'utc offset should be a multiple of 15 (was ' + moment().utcOffset() + ')'); + + assert.equal(moment().utcOffset(), -(new Date()).getTimezoneOffset(), + 'utcOffset should return the opposite of getTimezoneOffset'); +}); + +test('default format', function (assert) { + var isoRegex = /\d{4}.\d\d.\d\dT\d\d.\d\d.\d\d[\+\-]\d\d:\d\d/; + assert.ok(isoRegex.exec(moment().format()), 'default format (' + moment().format() + ') should match ISO'); +}); + +test('default UTC format', function (assert) { + var isoRegex = /\d{4}.\d\d.\d\dT\d\d.\d\d.\d\dZ/; + assert.ok(isoRegex.exec(moment.utc().format()), 'default UTC format (' + moment.utc().format() + ') should match ISO'); +}); + +test('toJSON', function (assert) { + var supportsJson = typeof JSON !== 'undefined' && JSON.stringify && JSON.stringify.call, + date = moment('2012-10-09T21:30:40.678+0100'); + + assert.equal(date.toJSON(), '2012-10-09T20:30:40.678Z', 'should output ISO8601 on moment.fn.toJSON'); + + if (supportsJson) { + assert.equal(JSON.stringify({ + date : date + }), '{"date":"2012-10-09T20:30:40.678Z"}', 'should output ISO8601 on JSON.stringify'); + } +}); + +test('toISOString', function (assert) { + var date = moment.utc('2012-10-09T20:30:40.678'); + + assert.equal(date.toISOString(), '2012-10-09T20:30:40.678Z', 'should output ISO8601 on moment.fn.toISOString'); + + // big years + date = moment.utc('+020123-10-09T20:30:40.678'); + assert.equal(date.toISOString(), '+020123-10-09T20:30:40.678Z', 'ISO8601 format on big positive year'); + // negative years + date = moment.utc('-000001-10-09T20:30:40.678'); + assert.equal(date.toISOString(), '-000001-10-09T20:30:40.678Z', 'ISO8601 format on negative year'); + // big negative years + date = moment.utc('-020123-10-09T20:30:40.678'); + assert.equal(date.toISOString(), '-020123-10-09T20:30:40.678Z', 'ISO8601 format on big negative year'); + + //invalid dates + date = moment.utc('2017-12-32'); + assert.equal(date.toISOString(), null, 'An invalid date to iso string is null'); +}); + +// See https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects +test('inspect', function (assert) { + function roundtrip(m) { + /*jshint evil:true */ + return (new Function('moment', 'return ' + m.inspect()))(moment); + } + function testInspect(date, string) { + var inspected = date.inspect(); + assert.equal(inspected, string); + assert.ok(date.isSame(roundtrip(date)), 'Tried to parse ' + inspected); + } + + testInspect( + moment('2012-10-09T20:30:40.678'), + 'moment("2012-10-09T20:30:40.678")' + ); + testInspect( + moment('+020123-10-09T20:30:40.678'), + 'moment("+020123-10-09T20:30:40.678")' + ); + testInspect( + moment.utc('2012-10-09T20:30:40.678'), + 'moment.utc("2012-10-09T20:30:40.678+00:00")' + ); + testInspect( + moment.utc('+020123-10-09T20:30:40.678'), + 'moment.utc("+020123-10-09T20:30:40.678+00:00")' + ); + testInspect( + moment.utc('+020123-10-09T20:30:40.678+01:00'), + 'moment.utc("+020123-10-09T19:30:40.678+00:00")' + ); + testInspect( + moment.parseZone('2016-06-11T17:30:40.678+0430'), + 'moment.parseZone("2016-06-11T17:30:40.678+04:30")' + ); + testInspect( + moment.parseZone('+112016-06-11T17:30:40.678+0430'), + 'moment.parseZone("+112016-06-11T17:30:40.678+04:30")' + ); + + assert.equal( + moment(new Date('nope')).inspect(), + 'moment.invalid(/* Invalid Date */)' + ); + assert.equal( + moment('blah', 'YYYY').inspect(), + 'moment.invalid(/* blah */)' + ); +}); + +test('long years', function (assert) { + assert.equal(moment.utc().year(2).format('YYYYYY'), '+000002', 'small year with YYYYYY'); + assert.equal(moment.utc().year(2012).format('YYYYYY'), '+002012', 'regular year with YYYYYY'); + assert.equal(moment.utc().year(20123).format('YYYYYY'), '+020123', 'big year with YYYYYY'); + + assert.equal(moment.utc().year(-1).format('YYYYYY'), '-000001', 'small negative year with YYYYYY'); + assert.equal(moment.utc().year(-2012).format('YYYYYY'), '-002012', 'negative year with YYYYYY'); + assert.equal(moment.utc().year(-20123).format('YYYYYY'), '-020123', 'big negative year with YYYYYY'); +}); + +test('toISOString() when 0 year', function (assert) { + // https://github.com/moment/moment/issues/3765 + var date = moment('0000-01-01T21:00:00.000Z'); + assert.equal(date.toISOString(), '0000-01-01T21:00:00.000Z'); + assert.equal(date.toDate().toISOString(), '0000-01-01T21:00:00.000Z'); +}); + +test('iso week formats', function (assert) { + // https://en.wikipedia.org/wiki/ISO_week_date + var cases = { + '2005-01-02': '2004-53', + '2005-12-31': '2005-52', + '2007-01-01': '2007-01', + '2007-12-30': '2007-52', + '2007-12-31': '2008-01', + '2008-01-01': '2008-01', + '2008-12-28': '2008-52', + '2008-12-29': '2009-01', + '2008-12-30': '2009-01', + '2008-12-31': '2009-01', + '2009-01-01': '2009-01', + '2009-12-31': '2009-53', + '2010-01-01': '2009-53', + '2010-01-02': '2009-53', + '2010-01-03': '2009-53', + '404-12-31': '0404-53', + '405-12-31': '0405-52' + }, i, isoWeek, formatted2, formatted1; + + for (i in cases) { + isoWeek = cases[i].split('-').pop(); + formatted2 = moment(i, 'YYYY-MM-DD').format('WW'); + assert.equal(isoWeek, formatted2, i + ': WW should be ' + isoWeek + ', but ' + formatted2); + isoWeek = isoWeek.replace(/^0+/, ''); + formatted1 = moment(i, 'YYYY-MM-DD').format('W'); + assert.equal(isoWeek, formatted1, i + ': W should be ' + isoWeek + ', but ' + formatted1); + } +}); + +test('iso week year formats', function (assert) { + // https://en.wikipedia.org/wiki/ISO_week_date + var cases = { + '2005-01-02': '2004-53', + '2005-12-31': '2005-52', + '2007-01-01': '2007-01', + '2007-12-30': '2007-52', + '2007-12-31': '2008-01', + '2008-01-01': '2008-01', + '2008-12-28': '2008-52', + '2008-12-29': '2009-01', + '2008-12-30': '2009-01', + '2008-12-31': '2009-01', + '2009-01-01': '2009-01', + '2009-12-31': '2009-53', + '2010-01-01': '2009-53', + '2010-01-02': '2009-53', + '2010-01-03': '2009-53', + '404-12-31': '0404-53', + '405-12-31': '0405-52' + }, i, isoWeekYear, formatted5, formatted4, formatted2; + + for (i in cases) { + isoWeekYear = cases[i].split('-')[0]; + formatted5 = moment(i, 'YYYY-MM-DD').format('GGGGG'); + assert.equal('0' + isoWeekYear, formatted5, i + ': GGGGG should be ' + isoWeekYear + ', but ' + formatted5); + formatted4 = moment(i, 'YYYY-MM-DD').format('GGGG'); + assert.equal(isoWeekYear, formatted4, i + ': GGGG should be ' + isoWeekYear + ', but ' + formatted4); + formatted2 = moment(i, 'YYYY-MM-DD').format('GG'); + assert.equal(isoWeekYear.slice(2, 4), formatted2, i + ': GG should be ' + isoWeekYear + ', but ' + formatted2); + } +}); + +test('week year formats', function (assert) { + // https://en.wikipedia.org/wiki/ISO_week_date + var cases = { + '2005-01-02': '2004-53', + '2005-12-31': '2005-52', + '2007-01-01': '2007-01', + '2007-12-30': '2007-52', + '2007-12-31': '2008-01', + '2008-01-01': '2008-01', + '2008-12-28': '2008-52', + '2008-12-29': '2009-01', + '2008-12-30': '2009-01', + '2008-12-31': '2009-01', + '2009-01-01': '2009-01', + '2009-12-31': '2009-53', + '2010-01-01': '2009-53', + '2010-01-02': '2009-53', + '2010-01-03': '2009-53', + '404-12-31': '0404-53', + '405-12-31': '0405-52' + }, i, isoWeekYear, formatted5, formatted4, formatted2; + + moment.defineLocale('dow:1,doy:4', {week: {dow: 1, doy: 4}}); + + for (i in cases) { + isoWeekYear = cases[i].split('-')[0]; + formatted5 = moment(i, 'YYYY-MM-DD').format('ggggg'); + assert.equal('0' + isoWeekYear, formatted5, i + ': ggggg should be ' + isoWeekYear + ', but ' + formatted5); + formatted4 = moment(i, 'YYYY-MM-DD').format('gggg'); + assert.equal(isoWeekYear, formatted4, i + ': gggg should be ' + isoWeekYear + ', but ' + formatted4); + formatted2 = moment(i, 'YYYY-MM-DD').format('gg'); + assert.equal(isoWeekYear.slice(2, 4), formatted2, i + ': gg should be ' + isoWeekYear + ', but ' + formatted2); + } + moment.defineLocale('dow:1,doy:4', null); +}); + +test('iso weekday formats', function (assert) { + assert.equal(moment([1985, 1, 4]).format('E'), '1', 'Feb 4 1985 is Monday -- 1st day'); + assert.equal(moment([2029, 8, 18]).format('E'), '2', 'Sep 18 2029 is Tuesday -- 2nd day'); + assert.equal(moment([2013, 3, 24]).format('E'), '3', 'Apr 24 2013 is Wednesday -- 3rd day'); + assert.equal(moment([2015, 2, 5]).format('E'), '4', 'Mar 5 2015 is Thursday -- 4th day'); + assert.equal(moment([1970, 0, 2]).format('E'), '5', 'Jan 2 1970 is Friday -- 5th day'); + assert.equal(moment([2001, 4, 12]).format('E'), '6', 'May 12 2001 is Saturday -- 6th day'); + assert.equal(moment([2000, 0, 2]).format('E'), '7', 'Jan 2 2000 is Sunday -- 7th day'); +}); + +test('weekday formats', function (assert) { + moment.defineLocale('dow: 3,doy: 5', {week: {dow: 3, doy: 5}}); + assert.equal(moment([1985, 1, 6]).format('e'), '0', 'Feb 6 1985 is Wednesday -- 0th day'); + assert.equal(moment([2029, 8, 20]).format('e'), '1', 'Sep 20 2029 is Thursday -- 1st day'); + assert.equal(moment([2013, 3, 26]).format('e'), '2', 'Apr 26 2013 is Friday -- 2nd day'); + assert.equal(moment([2015, 2, 7]).format('e'), '3', 'Mar 7 2015 is Saturday -- 3nd day'); + assert.equal(moment([1970, 0, 4]).format('e'), '4', 'Jan 4 1970 is Sunday -- 4th day'); + assert.equal(moment([2001, 4, 14]).format('e'), '5', 'May 14 2001 is Monday -- 5th day'); + assert.equal(moment([2000, 0, 4]).format('e'), '6', 'Jan 4 2000 is Tuesday -- 6th day'); + moment.defineLocale('dow: 3,doy: 5', null); +}); + +test('toString is just human readable format', function (assert) { + var b = moment(new Date(2009, 1, 5, 15, 25, 50, 125)); + assert.equal(b.toString(), b.format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ')); +}); + +test('toJSON skips postformat', function (assert) { + moment.defineLocale('postformat', { + postformat: function (s) { + s.replace(/./g, 'X'); + } + }); + assert.equal(moment.utc([2000, 0, 1]).toJSON(), '2000-01-01T00:00:00.000Z', 'toJSON doesn\'t postformat'); + moment.defineLocale('postformat', null); +}); + +test('calendar day timezone', function (assert) { + moment.locale('en'); + var zones = [60, -60, 90, -90, 360, -360, 720, -720], + b = moment().utc().startOf('day').subtract({m : 1}), + c = moment().local().startOf('day').subtract({m : 1}), + d = moment().local().startOf('day').subtract({d : 2}), + i, z, a; + + for (i = 0; i < zones.length; ++i) { + z = zones[i]; + a = moment().utcOffset(z).startOf('day').subtract({m: 1}); + assert.equal(moment(a).utcOffset(z).calendar(), 'Yesterday at 11:59 PM', + 'Yesterday at 11:59 PM, not Today, or the wrong time, tz = ' + z); + } + + assert.equal(moment(b).utc().calendar(), 'Yesterday at 11:59 PM', 'Yesterday at 11:59 PM, not Today, or the wrong time'); + assert.equal(moment(c).local().calendar(), 'Yesterday at 11:59 PM', 'Yesterday at 11:59 PM, not Today, or the wrong time'); + assert.equal(moment(c).local().calendar(d), 'Tomorrow at 11:59 PM', 'Tomorrow at 11:59 PM, not Yesterday, or the wrong time'); +}); + +test('calendar with custom formats', function (assert) { + assert.equal(moment().calendar(null, {sameDay: '[Today]'}), 'Today', 'Today'); + assert.equal(moment().add(1, 'days').calendar(null, {nextDay: '[Tomorrow]'}), 'Tomorrow', 'Tomorrow'); + assert.equal(moment([1985, 1, 4]).calendar(null, {sameElse: 'YYYY-MM-DD'}), '1985-02-04', 'Else'); +}); + +test('invalid', function (assert) { + assert.equal(moment.invalid().format(), 'Invalid date'); + assert.equal(moment.invalid().format('YYYY-MM-DD'), 'Invalid date'); +}); + +test('quarter formats', function (assert) { + assert.equal(moment([1985, 1, 4]).format('Q'), '1', 'Feb 4 1985 is Q1'); + assert.equal(moment([2029, 8, 18]).format('Q'), '3', 'Sep 18 2029 is Q3'); + assert.equal(moment([2013, 3, 24]).format('Q'), '2', 'Apr 24 2013 is Q2'); + assert.equal(moment([2015, 2, 5]).format('Q'), '1', 'Mar 5 2015 is Q1'); + assert.equal(moment([1970, 0, 2]).format('Q'), '1', 'Jan 2 1970 is Q1'); + assert.equal(moment([2001, 11, 12]).format('Q'), '4', 'Dec 12 2001 is Q4'); + assert.equal(moment([2000, 0, 2]).format('[Q]Q-YYYY'), 'Q1-2000', 'Jan 2 2000 is Q1'); +}); + +test('quarter ordinal formats', function (assert) { + assert.equal(moment([1985, 1, 4]).format('Qo'), '1st', 'Feb 4 1985 is 1st quarter'); + assert.equal(moment([2029, 8, 18]).format('Qo'), '3rd', 'Sep 18 2029 is 3rd quarter'); + assert.equal(moment([2013, 3, 24]).format('Qo'), '2nd', 'Apr 24 2013 is 2nd quarter'); + assert.equal(moment([2015, 2, 5]).format('Qo'), '1st', 'Mar 5 2015 is 1st quarter'); + assert.equal(moment([1970, 0, 2]).format('Qo'), '1st', 'Jan 2 1970 is 1st quarter'); + assert.equal(moment([2001, 11, 12]).format('Qo'), '4th', 'Dec 12 2001 is 4th quarter'); + assert.equal(moment([2000, 0, 2]).format('Qo [quarter] YYYY'), '1st quarter 2000', 'Jan 2 2000 is 1st quarter'); +}); + +// test('full expanded format is returned from abbreviated formats', function (assert) { +// function objectKeys(obj) { +// if (Object.keys) { +// return Object.keys(obj); +// } else { +// // IE8 +// var res = [], i; +// for (i in obj) { +// if (obj.hasOwnProperty(i)) { +// res.push(i); +// } +// } +// return res; +// } +// } + +// var locales = +// 'ar-sa ar-tn ar az be bg bn bo br bs ca cs cv cy da de-at de dv el ' + +// 'en-au en-ca en-gb en-ie en-nz eo es et eu fa fi fo fr-ca fr-ch fr fy ' + +// 'gd gl he hi hr hu hy-am id is it ja jv ka kk km ko lb lo lt lv me mk ml ' + +// 'mr ms-my ms my nb ne nl nn pl pt-br pt ro ru se si sk sl sq sr-cyrl ' + +// 'sr sv sw ta te th tl-ph tlh tr tzl tzm-latn tzm uk uz vi zh-cn zh-tw'; + +// each(locales.split(' '), function (locale) { +// var data, tokens; +// data = moment().locale(locale).localeData()._longDateFormat; +// tokens = objectKeys(data); +// each(tokens, function (token) { +// // Check each format string to make sure it does not contain any +// // tokens that need to be expanded. +// each(tokens, function (i) { +// // strip escaped sequences +// var format = data[i].replace(/(\[[^\]]*\])/g, ''); +// assert.equal(false, !!~format.indexOf(token), 'locale ' + locale + ' contains ' + token + ' in ' + i); +// }); +// }); +// }); +// }); + +test('milliseconds', function (assert) { + var m = moment('123', 'SSS'); + + assert.equal(m.format('S'), '1'); + assert.equal(m.format('SS'), '12'); + assert.equal(m.format('SSS'), '123'); + assert.equal(m.format('SSSS'), '1230'); + assert.equal(m.format('SSSSS'), '12300'); + assert.equal(m.format('SSSSSS'), '123000'); + assert.equal(m.format('SSSSSSS'), '1230000'); + assert.equal(m.format('SSSSSSSS'), '12300000'); + assert.equal(m.format('SSSSSSSSS'), '123000000'); +}); + +test('hmm and hmmss', function (assert) { + assert.equal(moment('12:34:56', 'HH:mm:ss').format('hmm'), '1234'); + assert.equal(moment('01:34:56', 'HH:mm:ss').format('hmm'), '134'); + assert.equal(moment('13:34:56', 'HH:mm:ss').format('hmm'), '134'); + + assert.equal(moment('12:34:56', 'HH:mm:ss').format('hmmss'), '123456'); + assert.equal(moment('01:34:56', 'HH:mm:ss').format('hmmss'), '13456'); + assert.equal(moment('13:34:56', 'HH:mm:ss').format('hmmss'), '13456'); +}); + +test('Hmm and Hmmss', function (assert) { + assert.equal(moment('12:34:56', 'HH:mm:ss').format('Hmm'), '1234'); + assert.equal(moment('01:34:56', 'HH:mm:ss').format('Hmm'), '134'); + assert.equal(moment('13:34:56', 'HH:mm:ss').format('Hmm'), '1334'); + + assert.equal(moment('12:34:56', 'HH:mm:ss').format('Hmmss'), '123456'); + assert.equal(moment('01:34:56', 'HH:mm:ss').format('Hmmss'), '13456'); + assert.equal(moment('08:34:56', 'HH:mm:ss').format('Hmmss'), '83456'); + assert.equal(moment('18:34:56', 'HH:mm:ss').format('Hmmss'), '183456'); +}); + +test('k and kk', function (assert) { + assert.equal(moment('01:23:45', 'HH:mm:ss').format('k'), '1'); + assert.equal(moment('12:34:56', 'HH:mm:ss').format('k'), '12'); + assert.equal(moment('01:23:45', 'HH:mm:ss').format('kk'), '01'); + assert.equal(moment('12:34:56', 'HH:mm:ss').format('kk'), '12'); + assert.equal(moment('00:34:56', 'HH:mm:ss').format('kk'), '24'); + assert.equal(moment('00:00:00', 'HH:mm:ss').format('kk'), '24'); +}); + +test('Y token', function (assert) { + assert.equal(moment('2010-01-01', 'YYYY-MM-DD', true).format('Y'), '2010', 'format 2010 with Y'); + assert.equal(moment('-123-01-01', 'Y-MM-DD', true).format('Y'), '-123', 'format -123 with Y'); + assert.equal(moment('12345-01-01', 'Y-MM-DD', true).format('Y'), '+12345', 'format 12345 with Y'); + assert.equal(moment('0-01-01', 'Y-MM-DD', true).format('Y'), '0', 'format 0 with Y'); + assert.equal(moment('1-01-01', 'Y-MM-DD', true).format('Y'), '1', 'format 1 with Y'); + assert.equal(moment('9999-01-01', 'Y-MM-DD', true).format('Y'), '9999', 'format 9999 with Y'); + assert.equal(moment('10000-01-01', 'Y-MM-DD', true).format('Y'), '+10000', 'format 10000 with Y'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('from_to'); + +test('from', function (assert) { + var start = moment(); + moment.locale('en'); + assert.equal(start.from(start.clone().add(5, 'seconds')), 'a few seconds ago', '5 seconds = a few seconds ago'); + assert.equal(start.from(start.clone().add(1, 'minute')), 'a minute ago', '1 minute = a minute ago'); + assert.equal(start.from(start.clone().add(5, 'minutes')), '5 minutes ago', '5 minutes = 5 minutes ago'); + + assert.equal(start.from(start.clone().subtract(5, 'seconds')), 'in a few seconds', '5 seconds = in a few seconds'); + assert.equal(start.from(start.clone().subtract(1, 'minute')), 'in a minute', '1 minute = in a minute'); + assert.equal(start.from(start.clone().subtract(5, 'minutes')), 'in 5 minutes', '5 minutes = in 5 minutes'); +}); + +test('from with absolute duration', function (assert) { + var start = moment(); + moment.locale('en'); + assert.equal(start.from(start.clone().add(5, 'seconds'), true), 'a few seconds', '5 seconds = a few seconds'); + assert.equal(start.from(start.clone().add(1, 'minute'), true), 'a minute', '1 minute = a minute'); + assert.equal(start.from(start.clone().add(5, 'minutes'), true), '5 minutes', '5 minutes = 5 minutes'); + + assert.equal(start.from(start.clone().subtract(5, 'seconds'), true), 'a few seconds', '5 seconds = a few seconds'); + assert.equal(start.from(start.clone().subtract(1, 'minute'), true), 'a minute', '1 minute = a minute'); + assert.equal(start.from(start.clone().subtract(5, 'minutes'), true), '5 minutes', '5 minutes = 5 minutes'); +}); + +test('to', function (assert) { + var start = moment(); + moment.locale('en'); + assert.equal(start.to(start.clone().subtract(5, 'seconds')), 'a few seconds ago', '5 seconds = a few seconds ago'); + assert.equal(start.to(start.clone().subtract(1, 'minute')), 'a minute ago', '1 minute = a minute ago'); + assert.equal(start.to(start.clone().subtract(5, 'minutes')), '5 minutes ago', '5 minutes = 5 minutes ago'); + + assert.equal(start.to(start.clone().add(5, 'seconds')), 'in a few seconds', '5 seconds = in a few seconds'); + assert.equal(start.to(start.clone().add(1, 'minute')), 'in a minute', '1 minute = in a minute'); + assert.equal(start.to(start.clone().add(5, 'minutes')), 'in 5 minutes', '5 minutes = in 5 minutes'); +}); + +test('to with absolute duration', function (assert) { + var start = moment(); + moment.locale('en'); + assert.equal(start.to(start.clone().add(5, 'seconds'), true), 'a few seconds', '5 seconds = a few seconds'); + assert.equal(start.to(start.clone().add(1, 'minute'), true), 'a minute', '1 minute = a minute'); + assert.equal(start.to(start.clone().add(5, 'minutes'), true), '5 minutes', '5 minutes = 5 minutes'); + + assert.equal(start.to(start.clone().subtract(5, 'seconds'), true), 'a few seconds', '5 seconds = a few seconds'); + assert.equal(start.to(start.clone().subtract(1, 'minute'), true), 'a minute', '1 minute = a minute'); + assert.equal(start.to(start.clone().subtract(5, 'minutes'), true), '5 minutes', '5 minutes = 5 minutes'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('getters and setters'); + +test('getters', function (assert) { + var a = moment([2011, 9, 12, 6, 7, 8, 9]); + assert.equal(a.year(), 2011, 'year'); + assert.equal(a.month(), 9, 'month'); + assert.equal(a.date(), 12, 'date'); + assert.equal(a.day(), 3, 'day'); + assert.equal(a.hours(), 6, 'hour'); + assert.equal(a.minutes(), 7, 'minute'); + assert.equal(a.seconds(), 8, 'second'); + assert.equal(a.milliseconds(), 9, 'milliseconds'); +}); + +test('getters programmatic', function (assert) { + var a = moment([2011, 9, 12, 6, 7, 8, 9]); + assert.equal(a.get('year'), 2011, 'year'); + assert.equal(a.get('month'), 9, 'month'); + assert.equal(a.get('date'), 12, 'date'); + assert.equal(a.get('day'), 3, 'day'); + assert.equal(a.get('hour'), 6, 'hour'); + assert.equal(a.get('minute'), 7, 'minute'); + assert.equal(a.get('second'), 8, 'second'); + assert.equal(a.get('milliseconds'), 9, 'milliseconds'); + + //actual getters tested elsewhere + assert.equal(a.get('weekday'), a.weekday(), 'weekday'); + assert.equal(a.get('isoWeekday'), a.isoWeekday(), 'isoWeekday'); + assert.equal(a.get('week'), a.week(), 'week'); + assert.equal(a.get('isoWeek'), a.isoWeek(), 'isoWeek'); + assert.equal(a.get('dayOfYear'), a.dayOfYear(), 'dayOfYear'); + + //getter no longer sets values when passed an object + assert.equal(moment([2016,0,1]).get({year:2015}).year(), 2016, 'getter no longer sets values when passed an object'); +}); + +test('setters plural', function (assert) { + var a = moment(); + test.expectedDeprecations('years accessor', 'months accessor', 'dates accessor'); + + a.years(2011); + a.months(9); + a.dates(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(9); + assert.equal(a.years(), 2011, 'years'); + assert.equal(a.months(), 9, 'months'); + assert.equal(a.dates(), 12, 'dates'); + assert.equal(a.days(), 3, 'days'); + assert.equal(a.hours(), 6, 'hours'); + assert.equal(a.minutes(), 7, 'minutes'); + assert.equal(a.seconds(), 8, 'seconds'); + assert.equal(a.milliseconds(), 9, 'milliseconds'); +}); + +test('setters singular', function (assert) { + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hour(6); + a.minute(7); + a.second(8); + a.millisecond(9); + assert.equal(a.year(), 2011, 'year'); + assert.equal(a.month(), 9, 'month'); + assert.equal(a.date(), 12, 'date'); + assert.equal(a.day(), 3, 'day'); + assert.equal(a.hour(), 6, 'hour'); + assert.equal(a.minute(), 7, 'minute'); + assert.equal(a.second(), 8, 'second'); + assert.equal(a.millisecond(), 9, 'milliseconds'); +}); + +test('setters', function (assert) { + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(9); + assert.equal(a.year(), 2011, 'year'); + assert.equal(a.month(), 9, 'month'); + assert.equal(a.date(), 12, 'date'); + assert.equal(a.day(), 3, 'day'); + assert.equal(a.hours(), 6, 'hour'); + assert.equal(a.minutes(), 7, 'minute'); + assert.equal(a.seconds(), 8, 'second'); + assert.equal(a.milliseconds(), 9, 'milliseconds'); + + // Test month() behavior. See https://github.com/timrwood/moment/pull/822 + a = moment('20130531', 'YYYYMMDD'); + a.month(3); + assert.equal(a.month(), 3, 'month edge case'); +}); + +test('setter programmatic', function (assert) { + var a = moment(); + a.set('year', 2011); + a.set('month', 9); + a.set('date', 12); + a.set('hours', 6); + a.set('minutes', 7); + a.set('seconds', 8); + a.set('milliseconds', 9); + assert.equal(a.year(), 2011, 'year'); + assert.equal(a.month(), 9, 'month'); + assert.equal(a.date(), 12, 'date'); + assert.equal(a.day(), 3, 'day'); + assert.equal(a.hours(), 6, 'hour'); + assert.equal(a.minutes(), 7, 'minute'); + assert.equal(a.seconds(), 8, 'second'); + assert.equal(a.milliseconds(), 9, 'milliseconds'); + + // Test month() behavior. See https://github.com/timrwood/moment/pull/822 + a = moment('20130531', 'YYYYMMDD'); + a.month(3); + assert.equal(a.month(), 3, 'month edge case'); +}); + +test('setters programatic with weeks', function (assert) { + var a = moment(); + a.set('weekYear', 2001); + a.set('week', 49); + a.set('day', 4); + + assert.equal(a.weekYear(), 2001, 'weekYear'); + assert.equal(a.week(), 49, 'week'); + assert.equal(a.day(), 4, 'day'); + + a.set('weekday', 1); + assert.equal(a.weekday(), 1, 'weekday'); +}); + +test('setters programatic with weeks ISO', function (assert) { + var a = moment(); + a.set('isoWeekYear', 2001); + a.set('isoWeek', 49); + a.set('isoWeekday', 4); + + assert.equal(a.isoWeekYear(), 2001, 'isoWeekYear'); + assert.equal(a.isoWeek(), 49, 'isoWeek'); + assert.equal(a.isoWeekday(), 4, 'isoWeekday'); +}); + +test('setters strings', function (assert) { + var a = moment([2012]).locale('en'); + assert.equal(a.clone().day(0).day('Wednesday').day(), 3, 'day full name'); + assert.equal(a.clone().day(0).day('Wed').day(), 3, 'day short name'); + assert.equal(a.clone().day(0).day('We').day(), 3, 'day minimal name'); + assert.equal(a.clone().day(0).day('invalid').day(), 0, 'invalid day name'); + assert.equal(a.clone().month(0).month('April').month(), 3, 'month full name'); + assert.equal(a.clone().month(0).month('Apr').month(), 3, 'month short name'); + assert.equal(a.clone().month(0).month('invalid').month(), 0, 'invalid month name'); +}); + +test('setters - falsey values', function (assert) { + var a = moment(); + // ensure minutes wasn't coincidentally 0 already + a.minutes(1); + a.minutes(0); + assert.equal(a.minutes(), 0, 'falsey value'); +}); + +test('chaining setters', function (assert) { + var a = moment(); + a.year(2011) + .month(9) + .date(12) + .hours(6) + .minutes(7) + .seconds(8); + assert.equal(a.year(), 2011, 'year'); + assert.equal(a.month(), 9, 'month'); + assert.equal(a.date(), 12, 'date'); + assert.equal(a.day(), 3, 'day'); + assert.equal(a.hours(), 6, 'hour'); + assert.equal(a.minutes(), 7, 'minute'); + assert.equal(a.seconds(), 8, 'second'); +}); + +test('setter with multiple unit values', function (assert) { + var a = moment(); + a.set({ + year: 2011, + month: 9, + date: 12, + hours: 6, + minutes: 7, + seconds: 8, + milliseconds: 9 + }); + assert.equal(a.year(), 2011, 'year'); + assert.equal(a.month(), 9, 'month'); + assert.equal(a.date(), 12, 'date'); + assert.equal(a.day(), 3, 'day'); + assert.equal(a.hours(), 6, 'hour'); + assert.equal(a.minutes(), 7, 'minute'); + assert.equal(a.seconds(), 8, 'second'); + assert.equal(a.milliseconds(), 9, 'milliseconds'); + + var c = moment([2016,0,1]); + assert.equal(c.set({weekYear: 2016}).weekYear(), 2016, 'week year correctly sets with object syntax'); + assert.equal(c.set({quarter: 3}).quarter(), 3, 'quarter sets correctly with object syntax'); +}); + +test('day setter', function (assert) { + var a = moment([2011, 0, 15]); + assert.equal(moment(a).day(0).date(), 9, 'set from saturday to sunday'); + assert.equal(moment(a).day(6).date(), 15, 'set from saturday to saturday'); + assert.equal(moment(a).day(3).date(), 12, 'set from saturday to wednesday'); + + a = moment([2011, 0, 9]); + assert.equal(moment(a).day(0).date(), 9, 'set from sunday to sunday'); + assert.equal(moment(a).day(6).date(), 15, 'set from sunday to saturday'); + assert.equal(moment(a).day(3).date(), 12, 'set from sunday to wednesday'); + + a = moment([2011, 0, 12]); + assert.equal(moment(a).day(0).date(), 9, 'set from wednesday to sunday'); + assert.equal(moment(a).day(6).date(), 15, 'set from wednesday to saturday'); + assert.equal(moment(a).day(3).date(), 12, 'set from wednesday to wednesday'); + + assert.equal(moment(a).day(-7).date(), 2, 'set from wednesday to last sunday'); + assert.equal(moment(a).day(-1).date(), 8, 'set from wednesday to last saturday'); + assert.equal(moment(a).day(-4).date(), 5, 'set from wednesday to last wednesday'); + + assert.equal(moment(a).day(7).date(), 16, 'set from wednesday to next sunday'); + assert.equal(moment(a).day(13).date(), 22, 'set from wednesday to next saturday'); + assert.equal(moment(a).day(10).date(), 19, 'set from wednesday to next wednesday'); + + assert.equal(moment(a).day(14).date(), 23, 'set from wednesday to second next sunday'); + assert.equal(moment(a).day(20).date(), 29, 'set from wednesday to second next saturday'); + assert.equal(moment(a).day(17).date(), 26, 'set from wednesday to second next wednesday'); +}); + +test('object set ordering', function (assert) { + var a = moment([2016,3,30]); + assert.equal(a.set({date:31, month:4}).date(), 31, 'setter order automatically arranged by size'); + var b = moment([2015,1,28]); + assert.equal(b.set({date:29, year: 2016}).format('YYYY-MM-DD'), '2016-02-29', 'year is prioritized over date'); + //check a nonexistent time in US isn't set + var c = moment([2016,2,13]); + c.set({ + hour:2, + minutes:30, + date: 14 + }); + assert.equal(c.format('YYYY-MM-DDTHH:mm'), '2016-03-14T02:30', 'setting hours, minutes date puts date first allowing time set to work'); +}); + +test('string setters', function (assert) { + var a = moment(); + a.year('2011'); + a.month('9'); + a.date('12'); + a.hours('6'); + a.minutes('7'); + a.seconds('8'); + a.milliseconds('9'); + assert.equal(a.year(), 2011, 'year'); + assert.equal(a.month(), 9, 'month'); + assert.equal(a.date(), 12, 'date'); + assert.equal(a.day(), 3, 'day'); + assert.equal(a.hours(), 6, 'hour'); + assert.equal(a.minutes(), 7, 'minute'); + assert.equal(a.seconds(), 8, 'second'); + assert.equal(a.milliseconds(), 9, 'milliseconds'); +}); + +test('setters across DST +1', function (assert) { + var oldUpdateOffset = moment.updateOffset, + // Based on a real story somewhere in America/Los_Angeles + dstAt = moment('2014-03-09T02:00:00-08:00').parseZone(), + m; + + moment.updateOffset = function (mom, keepTime) { + if (mom.isBefore(dstAt)) { + mom.utcOffset(-8, keepTime); + } else { + mom.utcOffset(-7, keepTime); + } + }; + + m = moment('2014-03-15T00:00:00-07:00').parseZone(); + m.year(2013); + assert.equal(m.format(), '2013-03-15T00:00:00-08:00', 'year across +1'); + + m = moment('2014-03-15T00:00:00-07:00').parseZone(); + m.month(0); + assert.equal(m.format(), '2014-01-15T00:00:00-08:00', 'month across +1'); + + m = moment('2014-03-15T00:00:00-07:00').parseZone(); + m.date(1); + assert.equal(m.format(), '2014-03-01T00:00:00-08:00', 'date across +1'); + + m = moment('2014-03-09T03:05:00-07:00').parseZone(); + m.hour(0); + assert.equal(m.format(), '2014-03-09T00:05:00-08:00', 'hour across +1'); + + moment.updateOffset = oldUpdateOffset; +}); + +test('setters across DST -1', function (assert) { + var oldUpdateOffset = moment.updateOffset, + // Based on a real story somewhere in America/Los_Angeles + dstAt = moment('2014-11-02T02:00:00-07:00').parseZone(), + m; + + moment.updateOffset = function (mom, keepTime) { + if (mom.isBefore(dstAt)) { + mom.utcOffset(-7, keepTime); + } else { + mom.utcOffset(-8, keepTime); + } + }; + + m = moment('2014-11-15T00:00:00-08:00').parseZone(); + m.year(2013); + assert.equal(m.format(), '2013-11-15T00:00:00-07:00', 'year across -1'); + + m = moment('2014-11-15T00:00:00-08:00').parseZone(); + m.month(0); + assert.equal(m.format(), '2014-01-15T00:00:00-07:00', 'month across -1'); + + m = moment('2014-11-15T00:00:00-08:00').parseZone(); + m.date(1); + assert.equal(m.format(), '2014-11-01T00:00:00-07:00', 'date across -1'); + + m = moment('2014-11-02T03:30:00-08:00').parseZone(); + m.hour(0); + assert.equal(m.format(), '2014-11-02T00:30:00-07:00', 'hour across -1'); + + moment.updateOffset = oldUpdateOffset; +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('instanceof'); + +test('instanceof', function (assert) { + var mm = moment([2010, 0, 1]); + + var extend = function (a, b) { + var i; + for (i in b) { + a[i] = b[i]; + } + return a; + }; + + assert.equal(moment() instanceof moment, true, 'simple moment object'); + assert.equal(extend({}, moment()) instanceof moment, false, 'extended moment object'); + assert.equal(moment(null) instanceof moment, true, 'invalid moment object'); + + assert.equal(new Date() instanceof moment, false, 'date object is not moment object'); + assert.equal(Object instanceof moment, false, 'Object is not moment object'); + assert.equal('foo' instanceof moment, false, 'string is not moment object'); + assert.equal(1 instanceof moment, false, 'number is not moment object'); + assert.equal(NaN instanceof moment, false, 'NaN is not moment object'); + assert.equal(null instanceof moment, false, 'null is not moment object'); + assert.equal(undefined instanceof moment, false, 'undefined is not moment object'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('invalid'); + +test('invalid', function (assert) { + var m = moment.invalid(); + assert.equal(m.isValid(), false); + assert.equal(m.parsingFlags().userInvalidated, true); + assert.ok(isNaN(m.valueOf())); +}); + +test('invalid with existing flag', function (assert) { + var m = moment.invalid({invalidMonth : 'whatchamacallit'}); + assert.equal(m.isValid(), false); + assert.equal(m.parsingFlags().userInvalidated, false); + assert.equal(m.parsingFlags().invalidMonth, 'whatchamacallit'); + assert.ok(isNaN(m.valueOf())); +}); + +test('invalid with custom flag', function (assert) { + var m = moment.invalid({tooBusyWith : 'reiculating splines'}); + assert.equal(m.isValid(), false); + assert.equal(m.parsingFlags().userInvalidated, false); + assert.equal(m.parsingFlags().tooBusyWith, 'reiculating splines'); + assert.ok(isNaN(m.valueOf())); +}); + +test('invalid operations', function (assert) { + var invalids = [ + moment.invalid(), + moment('xyz', 'l'), + moment('2015-01-35', 'YYYY-MM-DD'), + moment('2015-01-25 a', 'YYYY-MM-DD', true) + ], + i, + invalid, + valid = moment(); + + test.expectedDeprecations('moment().min', 'moment().max', 'isDSTShifted'); + + for (i = 0; i < invalids.length; ++i) { + invalid = invalids[i]; + + assert.ok(!invalid.clone().add(5, 'hours').isValid(), 'invalid.add is invalid'); + assert.equal(invalid.calendar(), 'Invalid date', 'invalid.calendar is \'Invalid date\''); + assert.ok(!invalid.clone().isValid(), 'invalid.clone is invalid'); + assert.ok(isNaN(invalid.diff(valid)), 'invalid.diff(valid) is NaN'); + assert.ok(isNaN(valid.diff(invalid)), 'valid.diff(invalid) is NaN'); + assert.ok(isNaN(invalid.diff(invalid)), 'invalid.diff(invalid) is NaN'); + assert.ok(!invalid.clone().endOf('month').isValid(), 'invalid.endOf is invalid'); + assert.equal(invalid.format(), 'Invalid date', 'invalid.format is \'Invalid date\''); + assert.equal(invalid.from(), 'Invalid date'); + assert.equal(invalid.from(valid), 'Invalid date'); + assert.equal(valid.from(invalid), 'Invalid date'); + assert.equal(invalid.fromNow(), 'Invalid date'); + assert.equal(invalid.to(), 'Invalid date'); + assert.equal(invalid.to(valid), 'Invalid date'); + assert.equal(valid.to(invalid), 'Invalid date'); + assert.equal(invalid.toNow(), 'Invalid date'); + assert.ok(isNaN(invalid.get('year')), 'invalid.get is NaN'); + // TODO invalidAt + assert.ok(!invalid.isAfter(valid)); + assert.ok(!valid.isAfter(invalid)); + assert.ok(!invalid.isAfter(invalid)); + assert.ok(!invalid.isBefore(valid)); + assert.ok(!valid.isBefore(invalid)); + assert.ok(!invalid.isBefore(invalid)); + assert.ok(!invalid.isBetween(valid, valid)); + assert.ok(!valid.isBetween(invalid, valid)); + assert.ok(!valid.isBetween(valid, invalid)); + assert.ok(!invalid.isSame(invalid)); + assert.ok(!invalid.isSame(valid)); + assert.ok(!valid.isSame(invalid)); + assert.ok(!invalid.isValid()); + assert.equal(invalid.locale(), 'en'); + assert.equal(invalid.localeData()._abbr, 'en'); + assert.ok(!invalid.clone().max(valid).isValid()); + assert.ok(!valid.clone().max(invalid).isValid()); + assert.ok(!invalid.clone().max(invalid).isValid()); + assert.ok(!invalid.clone().min(valid).isValid()); + assert.ok(!valid.clone().min(invalid).isValid()); + assert.ok(!invalid.clone().min(invalid).isValid()); + assert.ok(!moment.min(invalid, valid).isValid()); + assert.ok(!moment.min(valid, invalid).isValid()); + assert.ok(!moment.max(invalid, valid).isValid()); + assert.ok(!moment.max(valid, invalid).isValid()); + assert.ok(!invalid.clone().set('year', 2005).isValid()); + assert.ok(!invalid.clone().startOf('month').isValid()); + + assert.ok(!invalid.clone().subtract(5, 'days').isValid()); + assert.deepEqual(invalid.toArray(), [NaN, NaN, NaN, NaN, NaN, NaN, NaN]); + assert.deepEqual(invalid.toObject(), { + years: NaN, + months: NaN, + date: NaN, + hours: NaN, + minutes: NaN, + seconds: NaN, + milliseconds: NaN + }); + assert.ok(moment.isDate(invalid.toDate())); + assert.ok(isNaN(invalid.toDate().valueOf())); + assert.equal(invalid.toJSON(), null); + assert.equal(invalid.toString(), 'Invalid date'); + assert.ok(isNaN(invalid.unix())); + assert.ok(isNaN(invalid.valueOf())); + + assert.ok(isNaN(invalid.year())); + assert.ok(isNaN(invalid.weekYear())); + assert.ok(isNaN(invalid.isoWeekYear())); + assert.ok(isNaN(invalid.quarter())); + assert.ok(isNaN(invalid.quarters())); + assert.ok(isNaN(invalid.month())); + assert.ok(isNaN(invalid.daysInMonth())); + assert.ok(isNaN(invalid.week())); + assert.ok(isNaN(invalid.weeks())); + assert.ok(isNaN(invalid.isoWeek())); + assert.ok(isNaN(invalid.isoWeeks())); + assert.ok(isNaN(invalid.weeksInYear())); + assert.ok(isNaN(invalid.isoWeeksInYear())); + assert.ok(isNaN(invalid.date())); + assert.ok(isNaN(invalid.day())); + assert.ok(isNaN(invalid.days())); + assert.ok(isNaN(invalid.weekday())); + assert.ok(isNaN(invalid.isoWeekday())); + assert.ok(isNaN(invalid.dayOfYear())); + assert.ok(isNaN(invalid.hour())); + assert.ok(isNaN(invalid.hours())); + assert.ok(isNaN(invalid.minute())); + assert.ok(isNaN(invalid.minutes())); + assert.ok(isNaN(invalid.second())); + assert.ok(isNaN(invalid.seconds())); + assert.ok(isNaN(invalid.millisecond())); + assert.ok(isNaN(invalid.milliseconds())); + assert.ok(isNaN(invalid.utcOffset())); + + assert.ok(!invalid.clone().year(2001).isValid()); + assert.ok(!invalid.clone().weekYear(2001).isValid()); + assert.ok(!invalid.clone().isoWeekYear(2001).isValid()); + assert.ok(!invalid.clone().quarter(1).isValid()); + assert.ok(!invalid.clone().quarters(1).isValid()); + assert.ok(!invalid.clone().month(1).isValid()); + assert.ok(!invalid.clone().week(1).isValid()); + assert.ok(!invalid.clone().weeks(1).isValid()); + assert.ok(!invalid.clone().isoWeek(1).isValid()); + assert.ok(!invalid.clone().isoWeeks(1).isValid()); + assert.ok(!invalid.clone().date(1).isValid()); + assert.ok(!invalid.clone().day(1).isValid()); + assert.ok(!invalid.clone().days(1).isValid()); + assert.ok(!invalid.clone().weekday(1).isValid()); + assert.ok(!invalid.clone().isoWeekday(1).isValid()); + assert.ok(!invalid.clone().dayOfYear(1).isValid()); + assert.ok(!invalid.clone().hour(1).isValid()); + assert.ok(!invalid.clone().hours(1).isValid()); + assert.ok(!invalid.clone().minute(1).isValid()); + assert.ok(!invalid.clone().minutes(1).isValid()); + assert.ok(!invalid.clone().second(1).isValid()); + assert.ok(!invalid.clone().seconds(1).isValid()); + assert.ok(!invalid.clone().millisecond(1).isValid()); + assert.ok(!invalid.clone().milliseconds(1).isValid()); + assert.ok(!invalid.clone().utcOffset(1).isValid()); + + assert.ok(!invalid.clone().utc().isValid()); + assert.ok(!invalid.clone().local().isValid()); + assert.ok(!invalid.clone().parseZone('05:30').isValid()); + assert.ok(!invalid.hasAlignedHourOffset()); + assert.ok(!invalid.isDST()); + assert.ok(!invalid.isDSTShifted()); + assert.ok(!invalid.isLocal()); + assert.ok(!invalid.isUtcOffset()); + assert.ok(!invalid.isUtc()); + assert.ok(!invalid.isUTC()); + + assert.ok(!invalid.isLeapYear()); + + assert.equal(moment.duration({from: invalid, to: valid}).asMilliseconds(), 0); + assert.equal(moment.duration({from: valid, to: invalid}).asMilliseconds(), 0); + assert.equal(moment.duration({from: invalid, to: invalid}).asMilliseconds(), 0); + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('is after'); + +test('is after without units', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), false, 'year is later'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), true, 'year is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), false, 'month is later'); + assert.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), true, 'month is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), false, 'day is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), true, 'day is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), false, 'hour is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), true, 'hour is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), false, 'minute is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), true, 'minute is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), false, 'second is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), true, 'second is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'millisecond match'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), false, 'millisecond is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), true, 'millisecond is earlier'); + assert.equal(m.isAfter(m), false, 'moments are not after themselves'); + assert.equal(+m, +mCopy, 'isAfter second should not change moment'); +}); + +test('is after year', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year match'); + assert.equal(m.isAfter(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work'); + assert.equal(m.isAfter(moment(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is later'); + assert.equal(m.isAfter(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), false, 'exact start of year'); + assert.equal(m.isAfter(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), false, 'exact end of year'); + assert.equal(m.isAfter(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), false, 'start of next year'); + assert.equal(m.isAfter(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), true, 'end of previous year'); + assert.equal(m.isAfter(moment(new Date(1980, 11, 31, 23, 59, 59, 999)), 'year'), true, 'end of year far before'); + assert.equal(m.isAfter(m, 'year'), false, 'same moments are not after the same year'); + assert.equal(+m, +mCopy, 'isAfter year should not change moment'); +}); + +test('is after month', function (assert) { + var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); + assert.equal(m.isAfter(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), false, 'month match'); + assert.equal(m.isAfter(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work'); + assert.equal(m.isAfter(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), false, 'year is later'); + assert.equal(m.isAfter(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), true, 'year is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), false, 'month is later'); + assert.equal(m.isAfter(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), true, 'month is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), false, 'exact start of month'); + assert.equal(m.isAfter(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), false, 'exact end of month'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), false, 'start of next month'); + assert.equal(m.isAfter(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), true, 'end of previous month'); + assert.equal(m.isAfter(moment(new Date(2010, 12, 31, 23, 59, 59, 999)), 'month'), true, 'later month but earlier year'); + assert.equal(m.isAfter(m, 'month'), false, 'same moments are not after the same month'); + assert.equal(+m, +mCopy, 'isAfter month should not change moment'); +}); + +test('is after day', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 7, 8, 9, 10)), 'day'), false, 'day match'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'days'), true, 'plural should work'); + assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'day'), false, 'year is later'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'day'), true, 'year is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 7, 8, 9, 10)), 'day'), false, 'month is later'); + assert.equal(m.isAfter(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), true, 'month is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 7, 8, 9, 10)), 'day'), false, 'day is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 7, 8, 9, 10)), 'day'), true, 'day is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 0, 0, 0, 0)), 'day'), false, 'exact start of day'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 23, 59, 59, 999)), 'day'), false, 'exact end of day'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 0, 0, 0, 0)), 'day'), false, 'start of next day'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 23, 59, 59, 999)), 'day'), true, 'end of previous day'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 10, 0, 0, 0, 0)), 'day'), true, 'later day but earlier year'); + assert.equal(m.isAfter(m, 'day'), false, 'same moments are not after the same day'); + assert.equal(+m, +mCopy, 'isAfter day should not change moment'); +}); + +test('is after hour', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'hour match'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hours'), true, 'plural should work'); + assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'year is later'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hour'), true, 'year is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 8, 9, 10)), 'hour'), false, 'month is later'); + assert.equal(m.isAfter(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'month is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 8, 9, 10)), 'hour'), false, 'day is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 8, 9, 10)), 'hour'), true, 'day is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 8, 9, 10)), 'hour'), false, 'hour is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'hour is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 0, 0, 0)), 'hour'), false, 'exact start of hour'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 59, 59, 999)), 'hour'), false, 'exact end of hour'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 0, 0, 0)), 'hour'), false, 'start of next hour'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 59, 59, 999)), 'hour'), true, 'end of previous hour'); + assert.equal(m.isAfter(m, 'hour'), false, 'same moments are not after the same hour'); + assert.equal(+m, +mCopy, 'isAfter hour should not change moment'); +}); + +test('is after minute', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 9, 10)), 'minute'), false, 'minute match'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minutes'), true, 'plural should work'); + assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minute'), false, 'year is later'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minute'), true, 'year is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 9, 10)), 'minute'), false, 'month is later'); + assert.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), true, 'month is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 9, 10)), 'minute'), false, 'day is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 4, 9, 10)), 'minute'), true, 'day is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 9, 10)), 'minute'), false, 'hour is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 4, 9, 10)), 'minute'), true, 'hour is earler'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 9, 10)), 'minute'), false, 'minute is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 9, 10)), 'minute'), true, 'minute is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 0, 0)), 'minute'), false, 'exact start of minute'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 59, 999)), 'minute'), false, 'exact end of minute'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 0, 0)), 'minute'), false, 'start of next minute'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 59, 999)), 'minute'), true, 'end of previous minute'); + assert.equal(m.isAfter(m, 'minute'), false, 'same moments are not after the same minute'); + assert.equal(+m, +mCopy, 'isAfter minute should not change moment'); +}); + +test('is after second', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'second'), false, 'second match'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'seconds'), true, 'plural should work'); + assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'second'), false, 'year is later'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'second'), true, 'year is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'second'), false, 'month is later'); + assert.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), true, 'month is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'second'), false, 'day is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'second'), true, 'day is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'second'), false, 'hour is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'second'), true, 'hour is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'second'), false, 'minute is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'second'), true, 'minute is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'second'), false, 'second is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'second'), true, 'second is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 0)), 'second'), false, 'exact start of second'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 999)), 'second'), false, 'exact end of second'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 0)), 'second'), false, 'start of next second'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 999)), 'second'), true, 'end of previous second'); + assert.equal(m.isAfter(m, 'second'), false, 'same moments are not after the same second'); + assert.equal(+m, +mCopy, 'isAfter second should not change moment'); +}); + +test('is after millisecond', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'millisecond match'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, 'plural should work'); + assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is later'); + assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'year is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is later'); + assert.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), true, 'month is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), false, 'day is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), true, 'day is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), false, 'hour is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), true, 'hour is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), false, 'minute is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), true, 'minute is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), false, 'second is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), true, 'second is earlier'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), false, 'millisecond is later'); + assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), true, 'millisecond is earlier'); + assert.equal(m.isAfter(m, 'millisecond'), false, 'same moments are not after the same millisecond'); + assert.equal(+m, +mCopy, 'isAfter millisecond should not change moment'); +}); + +test('is after invalid', function (assert) { + var m = moment(), invalid = moment.invalid(); + assert.equal(m.isAfter(invalid), false, 'valid moment is not after invalid moment'); + assert.equal(invalid.isAfter(m), false, 'invalid moment is not after valid moment'); + assert.equal(m.isAfter(invalid, 'year'), false, 'invalid moment year'); + assert.equal(m.isAfter(invalid, 'month'), false, 'invalid moment month'); + assert.equal(m.isAfter(invalid, 'day'), false, 'invalid moment day'); + assert.equal(m.isAfter(invalid, 'hour'), false, 'invalid moment hour'); + assert.equal(m.isAfter(invalid, 'minute'), false, 'invalid moment minute'); + assert.equal(m.isAfter(invalid, 'second'), false, 'invalid moment second'); + assert.equal(m.isAfter(invalid, 'milliseconds'), false, 'invalid moment milliseconds'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function isArray(input) { + return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; +} + +test('isArray recognizes Array objects', function (assert) { + assert.ok(isArray([1,2,3]), 'array args'); + assert.ok(isArray([]), 'empty array'); + assert.ok(isArray(new Array(1,2,3)), 'array constructor'); +}); + +test('isArray rejects non-Array objects', function (assert) { + assert.ok(!isArray(), 'nothing'); + assert.ok(!isArray(undefined), 'undefined'); + assert.ok(!isArray(null), 'null'); + assert.ok(!isArray(123), 'number'); + assert.ok(!isArray('[1,2,3]'), 'string'); + assert.ok(!isArray(new Date()), 'date'); + assert.ok(!isArray({a:1,b:2}), 'object'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('is before'); + +test('is after without units', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), true, 'year is later'); + assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), false, 'year is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), true, 'month is later'); + assert.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), false, 'month is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), true, 'day is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), false, 'day is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), true, 'hour is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), false, 'hour is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), true, 'minute is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), false, 'minute is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), true, 'second is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), false, 'second is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'millisecond match'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), true, 'millisecond is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), false, 'millisecond is earlier'); + assert.equal(m.isBefore(m), false, 'moments are not before themselves'); + assert.equal(+m, +mCopy, 'isBefore second should not change moment'); +}); + +test('is before year', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year match'); + assert.equal(m.isBefore(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work'); + assert.equal(m.isBefore(moment(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year is later'); + assert.equal(m.isBefore(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), false, 'exact start of year'); + assert.equal(m.isBefore(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), false, 'exact end of year'); + assert.equal(m.isBefore(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), true, 'start of next year'); + assert.equal(m.isBefore(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), false, 'end of previous year'); + assert.equal(m.isBefore(moment(new Date(1980, 11, 31, 23, 59, 59, 999)), 'year'), false, 'end of year far before'); + assert.equal(m.isBefore(m, 'year'), false, 'same moments are not before the same year'); + assert.equal(+m, +mCopy, 'isBefore year should not change moment'); +}); + +test('is before month', function (assert) { + var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); + assert.equal(m.isBefore(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), false, 'month match'); + assert.equal(m.isBefore(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work'); + assert.equal(m.isBefore(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), true, 'year is later'); + assert.equal(m.isBefore(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), false, 'year is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), true, 'month is later'); + assert.equal(m.isBefore(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), false, 'month is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), false, 'exact start of month'); + assert.equal(m.isBefore(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), false, 'exact end of month'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), true, 'start of next month'); + assert.equal(m.isBefore(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), false, 'end of previous month'); + assert.equal(m.isBefore(moment(new Date(2010, 12, 31, 23, 59, 59, 999)), 'month'), false, 'later month but earlier year'); + assert.equal(m.isBefore(m, 'month'), false, 'same moments are not before the same month'); + assert.equal(+m, +mCopy, 'isBefore month should not change moment'); +}); + +test('is before day', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 7, 8, 9, 10)), 'day'), false, 'day match'); + assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'days'), true, 'plural should work'); + assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'day'), true, 'year is later'); + assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'day'), false, 'year is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 7, 8, 9, 10)), 'day'), true, 'month is later'); + assert.equal(m.isBefore(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), false, 'month is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 7, 8, 9, 10)), 'day'), true, 'day is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 7, 8, 9, 10)), 'day'), false, 'day is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 0, 0, 0, 0)), 'day'), false, 'exact start of day'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 23, 59, 59, 999)), 'day'), false, 'exact end of day'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 0, 0, 0, 0)), 'day'), true, 'start of next day'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 23, 59, 59, 999)), 'day'), false, 'end of previous day'); + assert.equal(m.isBefore(moment(new Date(2010, 3, 10, 0, 0, 0, 0)), 'day'), false, 'later day but earlier year'); + assert.equal(m.isBefore(m, 'day'), false, 'same moments are not before the same day'); + assert.equal(+m, +mCopy, 'isBefore day should not change moment'); +}); + +test('is before hour', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'hour match'); + assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hours'), true, 'plural should work'); + assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hour'), true, 'year is later'); + assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'year is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 8, 9, 10)), 'hour'), true, 'month is later'); + assert.equal(m.isBefore(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), false, 'month is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 8, 9, 10)), 'hour'), true, 'day is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 8, 9, 10)), 'hour'), false, 'day is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 8, 9, 10)), 'hour'), true, 'hour is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'hour is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 0, 0, 0)), 'hour'), false, 'exact start of hour'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 59, 59, 999)), 'hour'), false, 'exact end of hour'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 0, 0, 0)), 'hour'), true, 'start of next hour'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 59, 59, 999)), 'hour'), false, 'end of previous hour'); + assert.equal(m.isBefore(m, 'hour'), false, 'same moments are not before the same hour'); + assert.equal(+m, +mCopy, 'isBefore hour should not change moment'); +}); + +test('is before minute', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 9, 10)), 'minute'), false, 'minute match'); + assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minutes'), true, 'plural should work'); + assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minute'), true, 'year is later'); + assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minute'), false, 'year is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 9, 10)), 'minute'), true, 'month is later'); + assert.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), false, 'month is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 9, 10)), 'minute'), true, 'day is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 4, 9, 10)), 'minute'), false, 'day is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 9, 10)), 'minute'), true, 'hour is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 4, 9, 10)), 'minute'), false, 'hour is earler'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 9, 10)), 'minute'), true, 'minute is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 9, 10)), 'minute'), false, 'minute is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 0, 0)), 'minute'), false, 'exact start of minute'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 59, 999)), 'minute'), false, 'exact end of minute'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 0, 0)), 'minute'), true, 'start of next minute'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 59, 999)), 'minute'), false, 'end of previous minute'); + assert.equal(m.isBefore(m, 'minute'), false, 'same moments are not before the same minute'); + assert.equal(+m, +mCopy, 'isBefore minute should not change moment'); +}); + +test('is before second', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'second'), false, 'second match'); + assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'seconds'), true, 'plural should work'); + assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'second'), true, 'year is later'); + assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'second'), false, 'year is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'second'), true, 'month is later'); + assert.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), false, 'month is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'second'), true, 'day is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'second'), false, 'day is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'second'), true, 'hour is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'second'), false, 'hour is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'second'), true, 'minute is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'second'), false, 'minute is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'second'), true, 'second is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'second'), false, 'second is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 0)), 'second'), false, 'exact start of second'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 999)), 'second'), false, 'exact end of second'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 0)), 'second'), true, 'start of next second'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 999)), 'second'), false, 'end of previous second'); + assert.equal(m.isBefore(m, 'second'), false, 'same moments are not before the same second'); + assert.equal(+m, +mCopy, 'isBefore second should not change moment'); +}); + +test('is before millisecond', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'millisecond match'); + assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds'), false, 'plural should work'); + assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'year is later'); + assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), true, 'month is later'); + assert.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), true, 'day is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), false, 'day is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), true, 'hour is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), false, 'hour is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), true, 'minute is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), false, 'minute is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), true, 'second is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), false, 'second is earlier'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), true, 'millisecond is later'); + assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), false, 'millisecond is earlier'); + assert.equal(m.isBefore(m, 'millisecond'), false, 'same moments are not before the same millisecond'); + assert.equal(+m, +mCopy, 'isBefore millisecond should not change moment'); +}); + +test('is before invalid', function (assert) { + var m = moment(), invalid = moment.invalid(); + assert.equal(m.isBefore(invalid), false, 'valid moment is not before invalid moment'); + assert.equal(invalid.isBefore(m), false, 'invalid moment is not before valid moment'); + assert.equal(m.isBefore(invalid, 'year'), false, 'invalid moment year'); + assert.equal(m.isBefore(invalid, 'month'), false, 'invalid moment month'); + assert.equal(m.isBefore(invalid, 'day'), false, 'invalid moment day'); + assert.equal(m.isBefore(invalid, 'hour'), false, 'invalid moment hour'); + assert.equal(m.isBefore(invalid, 'minute'), false, 'invalid moment minute'); + assert.equal(m.isBefore(invalid, 'second'), false, 'invalid moment second'); + assert.equal(m.isBefore(invalid, 'milliseconds'), false, 'invalid moment milliseconds'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('is between'); + +test('is between without units', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isBetween( + moment(new Date(2009, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'year is later'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2013, 3, 2, 3, 4, 5, 10))), false, 'year is earlier'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10))), true, 'year is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'month is later'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 5, 2, 3, 4, 5, 10))), false, 'month is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 2, 2, 3, 4, 5, 10)), + moment(new Date(2011, 4, 2, 3, 4, 5, 10))), true, 'month is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 1, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'day is later'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 4, 3, 4, 5, 10))), false, 'day is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 1, 3, 4, 5, 10)), + moment(new Date(2011, 3, 3, 3, 4, 5, 10))), true, 'day is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 1, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'hour is later'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 5, 4, 5, 10))), false, 'hour is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 2, 4, 5, 10)), + moment(new Date(2011, 3, 2, 4, 4, 5, 10))), true, 'hour is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 6, 5, 10))), false, 'minute is later'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 2, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'minute is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 3, 5, 10)), + moment(new Date(2011, 3, 2, 3, 5, 5, 10))), true, 'minute is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 7, 10))), false, 'second is later'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 3, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'second is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 4, 10)), + moment(new Date(2011, 3, 2, 3, 4, 6, 10))), true, 'second is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 12))), false, 'millisecond is later'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 8)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'millisecond is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 9)), + moment(new Date(2011, 3, 2, 3, 4, 5, 11))), true, 'millisecond is between'); + assert.equal(m.isBetween(m, m), false, 'moments are not between themselves'); + assert.equal(+m, +mCopy, 'isBetween second should not change moment'); +}); + +test('is between without units inclusivity', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '()'), false, 'start and end are excluded, start is equal to moment'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '()'), false, 'start and end are excluded, end is equal to moment'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '()'), true, 'start and end are excluded, is between'); + assert.equal(m.isBetween( + moment(new Date(2009, 3, 2, 3, 4, 5, 10)), + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), null, '()'), false, 'start and end are excluded, is not between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '()'), false, 'start and end are excluded, should fail on same start/end date.'); + + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '(]'), false, 'start is excluded and end is included should fail on same start date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '(]'), true, 'start is excluded and end is included should succeed on end date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '(]'), true, 'start is excluded and end is included, is between'); + assert.equal(m.isBetween( + moment(new Date(2009, 3, 2, 3, 4, 5, 10)), + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), null, '(]'), false, 'start is excluded and end is included, is not between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '(]'), false, 'start is excluded and end is included, should fail on same start/end date.'); + + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '[)'), true, 'start is included and end is excluded should succeed on same start date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '[)'), false, 'start is included and end is excluded should fail on same end date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '[)'), true, 'start is included and end is excluded, is between'); + assert.equal(m.isBetween( + moment(new Date(2009, 3, 2, 3, 4, 5, 10)), + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), null, '[)'), false, 'start is included and end is excluded, is not between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '[)'), false, 'start is included and end is excluded, should fail on same end and start date'); + + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '[]'), true, 'start and end inclusive should succeed on same start date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '[]'), true, 'start and end inclusive should succeed on same end date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '[]'), true, 'start and end inclusive, is between'); + assert.equal(m.isBetween( + moment(new Date(2009, 3, 2, 3, 4, 5, 10)), + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), null, '[]'), false, 'start and end inclusive, is not between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '[]'), true, 'start and end inclusive, should handle same end and start date'); +}); + +test('is between milliseconds inclusivity', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, 'options, no inclusive'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '()'), false, 'start and end are excluded, start is equal to moment'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '()'), false, 'start and end are excluded, end is equal to moment'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '()'), true, 'start and end are excluded, is between'); + assert.equal(m.isBetween( + moment(new Date(2009, 3, 2, 3, 4, 5, 10)), + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds', '()'), false, 'start and end are excluded, is not between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '()'), false, 'start and end are excluded, should fail on same start/end date.'); + + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '(]'), false, 'start is excluded and end is included should fail on same start date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '(]'), true, 'start is excluded and end is included should succeed on end date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '(]'), true, 'start is excluded and end is included, is between'); + assert.equal(m.isBetween( + moment(new Date(2009, 3, 2, 3, 4, 5, 10)), + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds', '(]'), false, 'start is excluded and end is included, is not between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '(]'), false, 'start is excluded and end is included, should fail on same start/end date.'); + + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[)'), true, 'start is included and end is excluded should succeed on same start date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[)'), false, 'start is included and end is excluded should fail on same end date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[)'), true, 'start is included and end is excluded, is between'); + assert.equal(m.isBetween( + moment(new Date(2009, 3, 2, 3, 4, 5, 10)), + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[)'), false, 'start is included and end is excluded, is not between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[)'), false, 'start is included and end is excluded, should fail on same end and start date'); + + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[]'), true, 'start and end inclusive should succeed on same start date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[]'), true, 'start and end inclusive should succeed on same end date'); + assert.equal(m.isBetween( + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), + moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[]'), true, 'start and end inclusive, is between'); + assert.equal(m.isBetween( + moment(new Date(2009, 3, 2, 3, 4, 5, 10)), + moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[]'), false, 'start and end inclusive, is not between'); + assert.equal(m.isBetween( + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), + moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[]'), true, 'start and end inclusive, should handle same end and start date'); +}); + +test('is between year', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBetween( + moment(new Date(2011, 5, 6, 7, 8, 9, 10)), + moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year match'); + assert.equal(m.isBetween( + moment(new Date(2010, 5, 6, 7, 8, 9, 10)), + moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work'); + assert.equal(m.isBetween( + moment(new Date(2010, 5, 6, 7, 8, 9, 10)), + moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 5, 6, 7, 8, 9, 10)), + moment(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is earlier'); + assert.equal(m.isBetween( + moment(new Date(2010, 5, 6, 7, 8, 9, 10)), + moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is later'); + assert.equal(m.isBetween(m, 'year'), false, 'same moments are not between the same year'); + assert.equal(+m, +mCopy, 'isBetween year should not change moment'); +}); + +test('is between month', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 6, 7, 8, 9, 10)), + moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), false, 'month match'); + assert.equal(m.isBetween( + moment(new Date(2011, 0, 6, 7, 8, 9, 10)), + moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work'); + assert.equal(m.isBetween( + moment(new Date(2011, 0, 31, 23, 59, 59, 999)), + moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), true, 'month is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 6, 7, 8, 9, 10)), + moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), false, 'month is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 11, 6, 7, 8, 9, 10)), + moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), false, 'month is later'); + assert.equal(m.isBetween(m, 'month'), false, 'same moments are not between the same month'); + assert.equal(+m, +mCopy, 'isBetween month should not change moment'); +}); + +test('is between day', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 7, 8, 9, 10)), + moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), false, 'day match'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 1, 7, 8, 9, 10)), + moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'days'), true, 'plural should work'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 1, 7, 8, 9, 10)), + moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day'), true, 'day is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 7, 8, 9, 10)), + moment(new Date(2011, 1, 4, 7, 8, 9, 10)), 'day'), false, 'day is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 1, 7, 8, 9, 10)), + moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), false, 'day is later'); + assert.equal(m.isBetween(m, 'day'), false, 'same moments are not between the same day'); + assert.equal(+m, +mCopy, 'isBetween day should not change moment'); +}); + +test('is between hour', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 5, 9, 10)), + moment(new Date(2011, 1, 2, 3, 9, 9, 10)), 'hour'), false, 'hour match'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 1, 59, 59, 999)), + moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hours'), true, 'plural should work'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 2, 59, 59, 999)), + moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'), true, 'hour is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 7, 8, 9, 10)), + moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'hour'), false, 'hour is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 7, 8, 9, 10)), + moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'hour'), false, 'hour is later'); + assert.equal(m.isBetween(m, 'hour'), false, 'same moments are not between the same hour'); + assert.equal(+m, +mCopy, 'isBetween hour should not change moment'); +}); + +test('is between minute', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 9, 10)), + moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'), false, 'minute match'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 3, 9, 10)), + moment(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minutes'), true, 'plural should work'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 3, 59, 999)), + moment(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'), true, 'minute is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 5, 0, 0)), + moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'minute'), false, 'minute is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 2, 9, 10)), + moment(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'), false, 'minute is later'); + assert.equal(m.isBetween(m, 'minute'), false, 'same moments are not between the same minute'); + assert.equal(+m, +mCopy, 'isBetween minute should not change moment'); +}); + +test('is between second', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 5, 10)), + moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'), false, 'second match'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 4, 10)), + moment(new Date(2011, 1, 2, 3, 4, 6, 10)), 'seconds'), true, 'plural should work'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 4, 999)), + moment(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'), true, 'second is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 6, 0)), + moment(new Date(2011, 1, 2, 3, 4, 7, 10)), 'second'), false, 'second is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 3, 10)), + moment(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'), false, 'second is later'); + assert.equal(m.isBetween(m, 'second'), false, 'same moments are not between the same second'); + assert.equal(+m, +mCopy, 'isBetween second should not change moment'); +}); + +test('is between millisecond', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 5, 6)), + moment(new Date(2011, 1, 2, 3, 4, 5, 6)), 'millisecond'), false, 'millisecond match'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 5, 5)), + moment(new Date(2011, 1, 2, 3, 4, 5, 7)), 'milliseconds'), true, 'plural should work'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 5, 5)), + moment(new Date(2011, 1, 2, 3, 4, 5, 7)), 'millisecond'), true, 'millisecond is between'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 5, 7)), + moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'millisecond'), false, 'millisecond is earlier'); + assert.equal(m.isBetween( + moment(new Date(2011, 1, 2, 3, 4, 5, 4)), + moment(new Date(2011, 1, 2, 3, 4, 5, 6)), 'millisecond'), false, 'millisecond is later'); + assert.equal(m.isBetween(m, 'millisecond'), false, 'same moments are not between the same millisecond'); + assert.equal(+m, +mCopy, 'isBetween millisecond should not change moment'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('is date'); + +test('isDate recognizes Date objects', function (assert) { + assert.ok(moment.isDate(new Date()), 'no args (now)'); + assert.ok(moment.isDate(new Date([2014, 2, 15])), 'array args'); + assert.ok(moment.isDate(new Date('2014-03-15')), 'string args'); + assert.ok(moment.isDate(new Date('does NOT look like a date')), 'invalid date'); +}); + +test('isDate rejects non-Date objects', function (assert) { + assert.ok(!moment.isDate(), 'nothing'); + assert.ok(!moment.isDate(undefined), 'undefined'); + assert.ok(!moment.isDate(null), 'string args'); + assert.ok(!moment.isDate(42), 'number'); + assert.ok(!moment.isDate('2014-03-15'), 'string'); + assert.ok(!moment.isDate([2014, 2, 15]), 'array'); + assert.ok(!moment.isDate({year: 2014, month: 2, day: 15}), 'object'); + assert.ok(!moment.isDate({ + toString: function () { + return '[object Date]'; + } + }), 'lying object'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('is moment'); + +test('is moment object', function (assert) { + var MyObj = function () {}, + extend = function (a, b) { + var i; + for (i in b) { + a[i] = b[i]; + } + return a; + }; + MyObj.prototype.toDate = function () { + return new Date(); + }; + + assert.ok(moment.isMoment(moment()), 'simple moment object'); + assert.ok(moment.isMoment(moment(null)), 'invalid moment object'); + assert.ok(moment.isMoment(extend({}, moment())), 'externally cloned moments are moments'); + assert.ok(moment.isMoment(extend({}, moment.utc())), 'externally cloned utc moments are moments'); + + assert.ok(!moment.isMoment(new MyObj()), 'myObj is not moment object'); + assert.ok(!moment.isMoment(moment), 'moment function is not moment object'); + assert.ok(!moment.isMoment(new Date()), 'date object is not moment object'); + assert.ok(!moment.isMoment(Object), 'Object is not moment object'); + assert.ok(!moment.isMoment('foo'), 'string is not moment object'); + assert.ok(!moment.isMoment(1), 'number is not moment object'); + assert.ok(!moment.isMoment(NaN), 'NaN is not moment object'); + assert.ok(!moment.isMoment(null), 'null is not moment object'); + assert.ok(!moment.isMoment(undefined), 'undefined is not moment object'); +}); + +test('is moment with hacked hasOwnProperty', function (assert) { + var obj = {}; + // HACK to suppress jshint warning about bad property name + obj['hasOwnMoney'.replace('Money', 'Property')] = function () { + return true; + }; + + assert.ok(!moment.isMoment(obj), 'isMoment works even if passed object has a wrong hasOwnProperty implementation (ie8)'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function isNumber(input) { + return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]'; +} + +test('isNumber recognizes numbers', function (assert) { + assert.ok(isNumber(1), 'simple integer'); + assert.ok(isNumber(0), 'simple number'); + assert.ok(isNumber(-0), 'silly number'); + assert.ok(isNumber(1010010293029), 'large number'); + assert.ok(isNumber(Infinity), 'largest number'); + assert.ok(isNumber(-Infinity), 'smallest number'); + assert.ok(isNumber(NaN), 'not number'); + assert.ok(isNumber(1.100393830000), 'decimal numbers'); + assert.ok(isNumber(Math.LN2), 'natural log of two'); + assert.ok(isNumber(Math.PI), 'delicious number'); + assert.ok(isNumber(5e10), 'scientifically notated number'); + assert.ok(isNumber(new Number(1)), 'number primitive wrapped in an object'); // jshint ignore:line +}); + +test('isNumber rejects non-numbers', function (assert) { + assert.ok(!isNumber(), 'nothing'); + assert.ok(!isNumber(undefined), 'undefined'); + assert.ok(!isNumber(null), 'null'); + assert.ok(!isNumber([1]), 'array'); + assert.ok(!isNumber('[1,2,3]'), 'string'); + assert.ok(!isNumber(new Date()), 'date'); + assert.ok(!isNumber({a:1,b:2}), 'object'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('is same'); + +test('is same without units', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isSame(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), false, 'year is later'); + assert.equal(m.isSame(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), false, 'year is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), false, 'month is later'); + assert.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), false, 'month is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), false, 'day is later'); + assert.equal(m.isSame(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), false, 'day is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), false, 'hour is later'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), false, 'hour is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), false, 'minute is later'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), false, 'minute is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), false, 'second is later'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), false, 'second is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), true, 'millisecond match'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), false, 'millisecond is later'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), false, 'millisecond is earlier'); + assert.equal(m.isSame(m), true, 'moments are the same as themselves'); + assert.equal(+m, +mCopy, 'isSame second should not change moment'); +}); + +test('is same year', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year match'); + assert.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work'); + assert.equal(m.isSame(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), true, 'exact start of year'); + assert.equal(m.isSame(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), true, 'exact end of year'); + assert.equal(m.isSame(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), false, 'start of next year'); + assert.equal(m.isSame(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), false, 'end of previous year'); + assert.equal(m.isSame(m, 'year'), true, 'same moments are in the same year'); + assert.equal(+m, +mCopy, 'isSame year should not change moment'); +}); + +test('is same month', function (assert) { + var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); + assert.equal(m.isSame(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), true, 'month match'); + assert.equal(m.isSame(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work'); + assert.equal(m.isSame(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), false, 'year mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), false, 'month mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), true, 'exact start of month'); + assert.equal(m.isSame(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), true, 'exact end of month'); + assert.equal(m.isSame(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), false, 'start of next month'); + assert.equal(m.isSame(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), false, 'end of previous month'); + assert.equal(m.isSame(m, 'month'), true, 'same moments are in the same month'); + assert.equal(+m, +mCopy, 'isSame month should not change moment'); +}); + +test('is same day', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), true, 'day match'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days'), true, 'plural should work'); + assert.equal(m.isSame(moment(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day'), false, 'year mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), false, 'month mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day'), false, 'day mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day'), true, 'exact start of day'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day'), true, 'exact end of day'); + assert.equal(m.isSame(moment(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day'), false, 'start of next day'); + assert.equal(m.isSame(moment(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day'), false, 'end of previous day'); + assert.equal(m.isSame(m, 'day'), true, 'same moments are in the same day'); + assert.equal(+m, +mCopy, 'isSame day should not change moment'); +}); + +test('is same hour', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'hour match'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours'), true, 'plural should work'); + assert.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour'), false, 'year mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour'), false, 'month mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour'), false, 'day mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour'), false, 'hour mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour'), true, 'exact start of hour'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour'), true, 'exact end of hour'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'), false, 'start of next hour'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour'), false, 'end of previous hour'); + assert.equal(m.isSame(m, 'hour'), true, 'same moments are in the same hour'); + assert.equal(+m, +mCopy, 'isSame hour should not change moment'); +}); + +test('is same minute', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'), true, 'minute match'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes'), true, 'plural should work'); + assert.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute'), false, 'year mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), false, 'month mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute'), false, 'day mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute'), false, 'hour mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute'), false, 'minute mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute'), true, 'exact start of minute'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute'), true, 'exact end of minute'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'), false, 'start of next minute'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'), false, 'end of previous minute'); + assert.equal(m.isSame(m, 'minute'), true, 'same moments are in the same minute'); + assert.equal(+m, +mCopy, 'isSame minute should not change moment'); +}); + +test('is same second', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'), true, 'second match'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds'), true, 'plural should work'); + assert.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second'), false, 'year mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), false, 'month mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second'), false, 'day mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second'), false, 'hour mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second'), false, 'minute mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second'), false, 'second mismatch'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second'), true, 'exact start of second'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second'), true, 'exact end of second'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'), false, 'start of next second'); + assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'), false, 'end of previous second'); + assert.equal(m.isSame(m, 'second'), true, 'same moments are in the same second'); + assert.equal(+m, +mCopy, 'isSame second should not change moment'); +}); + +test('is same millisecond', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'millisecond match'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, 'plural should work'); + assert.equal(m.isSame(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is later'); + assert.equal(m.isSame(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is later'); + assert.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), false, 'day is later'); + assert.equal(m.isSame(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), false, 'day is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), false, 'hour is later'); + assert.equal(m.isSame(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), false, 'hour is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), false, 'minute is later'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), false, 'minute is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), false, 'second is later'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), false, 'second is earlier'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), false, 'millisecond is later'); + assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), false, 'millisecond is earlier'); + assert.equal(m.isSame(m, 'millisecond'), true, 'same moments are in the same millisecond'); + assert.equal(+m, +mCopy, 'isSame millisecond should not change moment'); +}); + +test('is same with utc offset moments', function (assert) { + assert.ok(moment.parseZone('2013-02-01T00:00:00-05:00').isSame(moment('2013-02-01'), 'year'), 'zoned vs local moment'); + assert.ok(moment('2013-02-01').isSame(moment('2013-02-01').utcOffset('-05:00'), 'year'), 'local vs zoned moment'); + assert.ok(moment.parseZone('2013-02-01T00:00:00-05:00').isSame(moment.parseZone('2013-02-01T00:00:00-06:30'), 'year'), + 'zoned vs (differently) zoned moment'); +}); + +test('is same with invalid moments', function (assert) { + assert.equal(moment.invalid().isSame(moment.invalid()), false, 'invalid moments are not considered equal'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('is same or after'); + +test('is same or after without units', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isSameOrAfter(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), false, 'year is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), true, 'year is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), false, 'month is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), true, 'month is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), false, 'day is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), true, 'day is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), false, 'hour is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), true, 'hour is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), false, 'minute is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), true, 'minute is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), false, 'second is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), true, 'second is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), true, 'millisecond match'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), false, 'millisecond is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), true, 'millisecond is earlier'); + assert.equal(m.isSameOrAfter(m), true, 'moments are the same as themselves'); + assert.equal(+m, +mCopy, 'isSameOrAfter second should not change moment'); +}); + +test('is same or after year', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year match'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work'); + assert.equal(m.isSameOrAfter(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), true, 'exact start of year'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), true, 'exact end of year'); + assert.equal(m.isSameOrAfter(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), false, 'start of next year'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), true, 'end of previous year'); + assert.equal(m.isSameOrAfter(m, 'year'), true, 'same moments are in the same year'); + assert.equal(+m, +mCopy, 'isSameOrAfter year should not change moment'); +}); + +test('is same or after month', function (assert) { + var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), true, 'month match'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work'); + assert.equal(m.isSameOrAfter(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), false, 'year is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), true, 'year is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), false, 'month is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), true, 'month is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), true, 'exact start of month'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), true, 'exact end of month'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), false, 'start of next month'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), true, 'end of previous month'); + assert.equal(m.isSameOrAfter(m, 'month'), true, 'same moments are in the same month'); + assert.equal(+m, +mCopy, 'isSameOrAfter month should not change moment'); +}); + +test('is same or after day', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), true, 'day match'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days'), true, 'plural should work'); + assert.equal(m.isSameOrAfter(moment(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day'), false, 'year is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 1, 2, 7, 8, 9, 10)), 'day'), true, 'year is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), false, 'month is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 12, 2, 7, 8, 9, 10)), 'day'), true, 'month is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day'), false, 'day is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 1, 7, 8, 9, 10)), 'day'), true, 'day is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day'), true, 'exact start of day'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day'), true, 'exact end of day'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day'), false, 'start of next day'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day'), true, 'end of previous day'); + assert.equal(m.isSameOrAfter(m, 'day'), true, 'same moments are in the same day'); + assert.equal(+m, +mCopy, 'isSameOrAfter day should not change moment'); +}); + +test('is same or after hour', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'hour match'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours'), true, 'plural should work'); + assert.equal(m.isSameOrAfter(moment(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour'), false, 'year is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'year is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour'), false, 'month is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 12, 2, 3, 8, 9, 10)), 'hour'), true, 'month is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour'), false, 'day is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 1, 3, 8, 9, 10)), 'hour'), true, 'day is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour'), false, 'hour is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 2, 8, 9, 10)), 'hour'), true, 'hour is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour'), true, 'exact start of hour'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour'), true, 'exact end of hour'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'), false, 'start of next hour'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour'), true, 'end of previous hour'); + assert.equal(m.isSameOrAfter(m, 'hour'), true, 'same moments are in the same hour'); + assert.equal(+m, +mCopy, 'isSameOrAfter hour should not change moment'); +}); + +test('is same or after minute', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'), true, 'minute match'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes'), true, 'plural should work'); + assert.equal(m.isSameOrAfter(moment(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute'), false, 'year is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 1, 2, 3, 4, 9, 10)), 'minute'), true, 'year is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), false, 'month is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 12, 2, 3, 4, 9, 10)), 'minute'), true, 'month is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute'), false, 'day is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 1, 3, 4, 9, 10)), 'minute'), true, 'day is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute'), false, 'hour is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 2, 4, 9, 10)), 'minute'), true, 'hour is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute'), false, 'minute is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 3, 9, 10)), 'minute'), true, 'minute is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute'), true, 'exact start of minute'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute'), true, 'exact end of minute'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'), false, 'start of next minute'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'), true, 'end of previous minute'); + assert.equal(m.isSameOrAfter(m, 'minute'), true, 'same moments are in the same minute'); + assert.equal(+m, +mCopy, 'isSameOrAfter minute should not change moment'); +}); + +test('is same or after second', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'), true, 'second match'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds'), true, 'plural should work'); + assert.equal(m.isSameOrAfter(moment(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second'), false, 'year is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 1, 2, 3, 4, 5, 10)), 'second'), true, 'year is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), false, 'month is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 12, 2, 3, 4, 5, 10)), 'second'), true, 'month is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second'), false, 'day is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 1, 3, 4, 5, 10)), 'second'), true, 'day is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second'), false, 'hour is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 2, 4, 5, 10)), 'second'), true, 'hour is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second'), false, 'minute is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 3, 5, 10)), 'second'), true, 'minute is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second'), false, 'second is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 4, 10)), 'second'), true, 'second is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second'), true, 'exact start of second'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second'), true, 'exact end of second'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'), false, 'start of next second'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'), true, 'end of previous second'); + assert.equal(m.isSameOrAfter(m, 'second'), true, 'same moments are in the same second'); + assert.equal(+m, +mCopy, 'isSameOrAfter second should not change moment'); +}); + +test('is same or after millisecond', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'millisecond match'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, 'plural should work'); + assert.equal(m.isSameOrAfter(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'year is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), true, 'month is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), false, 'day is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), true, 'day is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), false, 'hour is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), true, 'hour is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), false, 'minute is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), true, 'minute is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), false, 'second is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), true, 'second is earlier'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), false, 'millisecond is later'); + assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), true, 'millisecond is earlier'); + assert.equal(m.isSameOrAfter(m, 'millisecond'), true, 'same moments are in the same millisecond'); + assert.equal(+m, +mCopy, 'isSameOrAfter millisecond should not change moment'); +}); + +test('is same or after with utc offset moments', function (assert) { + assert.ok(moment.parseZone('2013-02-01T00:00:00-05:00').isSameOrAfter(moment('2013-02-01'), 'year'), 'zoned vs local moment'); + assert.ok(moment('2013-02-01').isSameOrAfter(moment('2013-02-01').utcOffset('-05:00'), 'year'), 'local vs zoned moment'); + assert.ok(moment.parseZone('2013-02-01T00:00:00-05:00').isSameOrAfter(moment.parseZone('2013-02-01T00:00:00-06:30'), 'year'), + 'zoned vs (differently) zoned moment'); +}); + +test('is same or after with invalid moments', function (assert) { + var m = moment(), invalid = moment.invalid(); + assert.equal(invalid.isSameOrAfter(invalid), false, 'invalid moments are not considered equal'); + assert.equal(m.isSameOrAfter(invalid), false, 'valid moment is not after invalid moment'); + assert.equal(invalid.isSameOrAfter(m), false, 'invalid moment is not after valid moment'); + assert.equal(m.isSameOrAfter(invalid, 'year'), false, 'invalid moment year'); + assert.equal(m.isSameOrAfter(invalid, 'month'), false, 'invalid moment month'); + assert.equal(m.isSameOrAfter(invalid, 'day'), false, 'invalid moment day'); + assert.equal(m.isSameOrAfter(invalid, 'hour'), false, 'invalid moment hour'); + assert.equal(m.isSameOrAfter(invalid, 'minute'), false, 'invalid moment minute'); + assert.equal(m.isSameOrAfter(invalid, 'second'), false, 'invalid moment second'); + assert.equal(m.isSameOrAfter(invalid, 'milliseconds'), false, 'invalid moment milliseconds'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('is same or before'); + +test('is same or before without units', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isSameOrBefore(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), true, 'year is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), false, 'year is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), true, 'month is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), false, 'month is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), true, 'day is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), false, 'day is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), true, 'hour is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), false, 'hour is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), true, 'minute is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), false, 'minute is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), true, 'second is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), false, 'second is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), true, 'millisecond match'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), true, 'millisecond is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), false, 'millisecond is earlier'); + assert.equal(m.isSameOrBefore(m), true, 'moments are the same as themselves'); + assert.equal(+m, +mCopy, 'isSameOrBefore second should not change moment'); +}); + +test('is same or before year', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year match'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work'); + assert.equal(m.isSameOrBefore(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), true, 'exact start of year'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), true, 'exact end of year'); + assert.equal(m.isSameOrBefore(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), true, 'start of next year'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), false, 'end of previous year'); + assert.equal(m.isSameOrBefore(m, 'year'), true, 'same moments are in the same year'); + assert.equal(+m, +mCopy, 'isSameOrBefore year should not change moment'); +}); + +test('is same or before month', function (assert) { + var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), true, 'month match'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work'); + assert.equal(m.isSameOrBefore(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), true, 'year is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), false, 'year is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), true, 'month is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), false, 'month is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), true, 'exact start of month'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), true, 'exact end of month'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), true, 'start of next month'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), false, 'end of previous month'); + assert.equal(m.isSameOrBefore(m, 'month'), true, 'same moments are in the same month'); + assert.equal(+m, +mCopy, 'isSameOrBefore month should not change moment'); +}); + +test('is same or before day', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), true, 'day match'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days'), true, 'plural should work'); + assert.equal(m.isSameOrBefore(moment(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day'), true, 'year is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 1, 2, 7, 8, 9, 10)), 'day'), false, 'year is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), true, 'month is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 12, 2, 7, 8, 9, 10)), 'day'), false, 'month is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day'), true, 'day is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 1, 7, 8, 9, 10)), 'day'), false, 'day is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day'), true, 'exact start of day'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day'), true, 'exact end of day'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day'), true, 'start of next day'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day'), false, 'end of previous day'); + assert.equal(m.isSameOrBefore(m, 'day'), true, 'same moments are in the same day'); + assert.equal(+m, +mCopy, 'isSameOrBefore day should not change moment'); +}); + +test('is same or before hour', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'hour match'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours'), true, 'plural should work'); + assert.equal(m.isSameOrBefore(moment(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'year is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 1, 2, 3, 8, 9, 10)), 'hour'), false, 'year is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour'), true, 'month is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 12, 2, 3, 8, 9, 10)), 'hour'), false, 'month is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour'), true, 'day is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 1, 3, 8, 9, 10)), 'hour'), false, 'day is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour'), true, 'hour is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 2, 8, 9, 10)), 'hour'), false, 'hour is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour'), true, 'exact start of hour'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour'), true, 'exact end of hour'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'), true, 'start of next hour'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour'), false, 'end of previous hour'); + assert.equal(m.isSameOrBefore(m, 'hour'), true, 'same moments are in the same hour'); + assert.equal(+m, +mCopy, 'isSameOrBefore hour should not change moment'); +}); + +test('is same or before minute', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'), true, 'minute match'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes'), true, 'plural should work'); + assert.equal(m.isSameOrBefore(moment(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute'), true, 'year is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 1, 2, 3, 4, 9, 10)), 'minute'), false, 'year is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), true, 'month is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 12, 2, 3, 4, 9, 10)), 'minute'), false, 'month is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute'), true, 'day is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 1, 3, 4, 9, 10)), 'minute'), false, 'day is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute'), true, 'hour is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 2, 4, 9, 10)), 'minute'), false, 'hour is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute'), true, 'minute is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 3, 9, 10)), 'minute'), false, 'minute is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute'), true, 'exact start of minute'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute'), true, 'exact end of minute'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'), true, 'start of next minute'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'), false, 'end of previous minute'); + assert.equal(m.isSameOrBefore(m, 'minute'), true, 'same moments are in the same minute'); + assert.equal(+m, +mCopy, 'isSameOrBefore minute should not change moment'); +}); + +test('is same or before second', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'), true, 'second match'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds'), true, 'plural should work'); + assert.equal(m.isSameOrBefore(moment(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second'), true, 'year is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 1, 2, 3, 4, 5, 10)), 'second'), false, 'year is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), true, 'month is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 12, 2, 3, 4, 5, 10)), 'second'), false, 'month is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second'), true, 'day is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 1, 3, 4, 5, 10)), 'second'), false, 'day is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second'), true, 'hour is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 2, 4, 5, 10)), 'second'), false, 'hour is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second'), true, 'minute is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 3, 5, 10)), 'second'), false, 'minute is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second'), true, 'second is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 4, 10)), 'second'), false, 'second is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second'), true, 'exact start of second'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second'), true, 'exact end of second'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'), true, 'start of next second'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'), false, 'end of previous second'); + assert.equal(m.isSameOrBefore(m, 'second'), true, 'same moments are in the same second'); + assert.equal(+m, +mCopy, 'isSameOrBefore second should not change moment'); +}); + +test('is same or before millisecond', function (assert) { + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'millisecond match'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, 'plural should work'); + assert.equal(m.isSameOrBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'year is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), true, 'month is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), true, 'day is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), false, 'day is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), true, 'hour is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), false, 'hour is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), true, 'minute is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), false, 'minute is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), true, 'second is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), false, 'second is earlier'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), true, 'millisecond is later'); + assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), false, 'millisecond is earlier'); + assert.equal(m.isSameOrBefore(m, 'millisecond'), true, 'same moments are in the same millisecond'); + assert.equal(+m, +mCopy, 'isSameOrBefore millisecond should not change moment'); +}); + +test('is same with utc offset moments', function (assert) { + assert.ok(moment.parseZone('2013-02-01T00:00:00-05:00').isSameOrBefore(moment('2013-02-01'), 'year'), 'zoned vs local moment'); + assert.ok(moment('2013-02-01').isSameOrBefore(moment('2013-02-01').utcOffset('-05:00'), 'year'), 'local vs zoned moment'); + assert.ok( + moment.parseZone('2013-02-01T00:00:00-05:00').isSameOrBefore(moment.parseZone('2013-02-01T00:00:00-06:30'), 'year'), + 'zoned vs (differently) zoned moment' + ); +}); + +test('is same with invalid moments', function (assert) { + var m = moment(), invalid = moment.invalid(); + assert.equal(invalid.isSameOrBefore(invalid), false, 'invalid moments are not considered equal'); + assert.equal(m.isSameOrBefore(invalid), false, 'valid moment is not before invalid moment'); + assert.equal(invalid.isSameOrBefore(m), false, 'invalid moment is not before valid moment'); + assert.equal(m.isSameOrBefore(invalid, 'year'), false, 'invalid moment year'); + assert.equal(m.isSameOrBefore(invalid, 'month'), false, 'invalid moment month'); + assert.equal(m.isSameOrBefore(invalid, 'day'), false, 'invalid moment day'); + assert.equal(m.isSameOrBefore(invalid, 'hour'), false, 'invalid moment hour'); + assert.equal(m.isSameOrBefore(invalid, 'minute'), false, 'invalid moment minute'); + assert.equal(m.isSameOrBefore(invalid, 'second'), false, 'invalid moment second'); + assert.equal(m.isSameOrBefore(invalid, 'milliseconds'), false, 'invalid moment milliseconds'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('is valid'); + +test('array bad month', function (assert) { + assert.equal(moment([2010, -1]).isValid(), false, 'month -1 invalid'); + assert.equal(moment([2100, 12]).isValid(), false, 'month 12 invalid'); +}); + +test('array good month', function (assert) { + for (var i = 0; i < 12; i++) { + assert.equal(moment([2010, i]).isValid(), true, 'month ' + i); + assert.equal(moment.utc([2010, i]).isValid(), true, 'month ' + i); + } +}); + +test('array bad date', function (assert) { + var tests = [ + moment([2010, 0, 0]), + moment([2100, 0, 32]), + moment.utc([2010, 0, 0]), + moment.utc([2100, 0, 32]) + ], + i, m; + + for (i in tests) { + m = tests[i]; + assert.equal(m.isValid(), false); + } +}); + +test('h/hh with hour > 12', function (assert) { + assert.ok(moment('06/20/2014 11:51 PM', 'MM/DD/YYYY hh:mm A', true).isValid(), '11 for hh'); + assert.ok(moment('06/20/2014 11:51 AM', 'MM/DD/YYYY hh:mm A', true).isValid(), '11 for hh'); + assert.ok(moment('06/20/2014 23:51 PM', 'MM/DD/YYYY hh:mm A').isValid(), 'non-strict validity 23 for hh'); + assert.ok(moment('06/20/2014 23:51 PM', 'MM/DD/YYYY hh:mm A').parsingFlags().bigHour, 'non-strict bigHour 23 for hh'); + assert.ok(!moment('06/20/2014 23:51 PM', 'MM/DD/YYYY hh:mm A', true).isValid(), 'validity 23 for hh'); + assert.ok(moment('06/20/2014 23:51 PM', 'MM/DD/YYYY hh:mm A', true).parsingFlags().bigHour, 'bigHour 23 for hh'); +}); + +test('array bad date leap year', function (assert) { + assert.equal(moment([2010, 1, 29]).isValid(), false, '2010 feb 29'); + assert.equal(moment([2100, 1, 29]).isValid(), false, '2100 feb 29'); + assert.equal(moment([2008, 1, 30]).isValid(), false, '2008 feb 30'); + assert.equal(moment([2000, 1, 30]).isValid(), false, '2000 feb 30'); + + assert.equal(moment.utc([2010, 1, 29]).isValid(), false, 'utc 2010 feb 29'); + assert.equal(moment.utc([2100, 1, 29]).isValid(), false, 'utc 2100 feb 29'); + assert.equal(moment.utc([2008, 1, 30]).isValid(), false, 'utc 2008 feb 30'); + assert.equal(moment.utc([2000, 1, 30]).isValid(), false, 'utc 2000 feb 30'); +}); + +test('string + formats bad date', function (assert) { + assert.equal(moment('2020-00-00', []).isValid(), false, 'invalid on empty array'); + assert.equal(moment('2020-00-00', ['YYYY-MM-DD', 'DD-MM-YYYY']).isValid(), false, 'invalid on all in array'); + assert.equal(moment('2020-00-00', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), false, 'invalid on all in array'); + assert.equal(moment('2020-01-01', ['YYYY-MM-DD', 'DD-MM-YYYY']).isValid(), true, 'valid on first'); + assert.equal(moment('2020-01-01', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), true, 'valid on last'); + assert.equal(moment('2020-01-01', ['YYYY-MM-DD', 'YYYY-DD-MM']).isValid(), true, 'valid on both'); + assert.equal(moment('2020-13-01', ['YYYY-MM-DD', 'YYYY-DD-MM']).isValid(), true, 'valid on last'); + + assert.equal(moment('12-13-2012', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), false, 'month rollover'); + assert.equal(moment('12-13-2012', ['DD-MM-YYYY', 'DD-MM-YYYY']).isValid(), false, 'month rollover'); + assert.equal(moment('38-12-2012', ['DD-MM-YYYY']).isValid(), false, 'day rollover'); +}); + +test('string nonsensical with format', function (assert) { + assert.equal(moment('fail', 'MM-DD-YYYY').isValid(), false, 'string \'fail\' with format \'MM-DD-YYYY\''); + assert.equal(moment('xx-xx-2001', 'DD-MM-YYY').isValid(), true, 'string \'xx-xx-2001\' with format \'MM-DD-YYYY\''); +}); + +test('string with bad month name', function (assert) { + assert.equal(moment('01-Nam-2012', 'DD-MMM-YYYY').isValid(), false, '\'Nam\' is an invalid month'); + assert.equal(moment('01-Aug-2012', 'DD-MMM-YYYY').isValid(), true, '\'Aug\' is a valid month'); +}); + +test('string with spaceless format', function (assert) { + assert.equal(moment('10Sep2001', 'DDMMMYYYY').isValid(), true, 'Parsing 10Sep2001 should result in a valid date'); +}); + +test('invalid string iso 8601', function (assert) { + var tests = [ + '2010-00-00', + '2010-01-00', + '2010-01-40', + '2010-01-01T24:01', // 24:00:00 is actually valid + '2010-01-01T23:60', + '2010-01-01T23:59:60' + ], i; + + for (i = 0; i < tests.length; i++) { + assert.equal(moment(tests[i], moment.ISO_8601).isValid(), false, tests[i] + ' should be invalid'); + assert.equal(moment.utc(tests[i], moment.ISO_8601).isValid(), false, tests[i] + ' should be invalid'); + } +}); + +test('invalid string iso 8601 + timezone', function (assert) { + var tests = [ + '2010-00-00T+00:00', + '2010-01-00T+00:00', + '2010-01-40T+00:00', + '2010-01-40T24:01+00:00', + '2010-01-40T23:60+00:00', + '2010-01-40T23:59:60+00:00', + '2010-01-40T23:59:59.9999+00:00', + '2010-01-40T23:59:59,9999+00:00' + ], i; + + for (i = 0; i < tests.length; i++) { + assert.equal(moment(tests[i], moment.ISO_8601).isValid(), false, tests[i] + ' should be invalid'); + assert.equal(moment.utc(tests[i], moment.ISO_8601).isValid(), false, tests[i] + ' should be invalid'); + } +}); + +test('valid string iso 8601 - not strict', function (assert) { + var tests = [ + '2010-01-30 00:00:00,000Z', + '20100101', + '20100130', + '20100130T23+00:00', + '20100130T2359+0000', + '20100130T235959+0000', + '20100130T235959,999+0000', + '20100130T235959,999-0700', + '20100130T000000,000+0700', + '20100130 000000,000Z' + ]; + + for (var i = 0; i < tests.length; i++) { + assert.equal(moment(tests[i]).isValid(), true, tests[i] + ' should be valid in normal'); + assert.equal(moment.utc(tests[i]).isValid(), true, tests[i] + ' should be valid in normal'); + } +}); + +test('valid string iso 8601 + timezone', function (assert) { + var tests = [ + '2010-01-01', + '2010-01-30', + '2010-01-30T23+00:00', + '2010-01-30T23:59+00:00', + '2010-01-30T23:59:59+00:00', + '2010-01-30T23:59:59.999+00:00', + '2010-01-30T23:59:59.999-07:00', + '2010-01-30T00:00:00.000+07:00', + '2010-01-30T23:59:59.999-07', + '2010-01-30T00:00:00.000+07', + '2010-01-30 00:00:00.000Z' + ], i; + + for (i = 0; i < tests.length; i++) { + assert.equal(moment(tests[i]).isValid(), true, tests[i] + ' should be valid in normal'); + assert.equal(moment.utc(tests[i]).isValid(), true, tests[i] + ' should be valid in normal'); + assert.equal(moment(tests[i], moment.ISO_8601, true).isValid(), true, tests[i] + ' should be valid in strict'); + assert.equal(moment.utc(tests[i], moment.ISO_8601, true).isValid(), true, tests[i] + ' should be valid in strict'); + } +}); + +test('invalidAt', function (assert) { + assert.equal(moment([2000, 12]).invalidAt(), 1, 'month 12 is invalid: 0-11'); + assert.equal(moment([2000, 1, 30]).invalidAt(), 2, '30 is not a valid february day'); + assert.equal(moment([2000, 1, 29, 25]).invalidAt(), 3, '25 is invalid hour'); + assert.equal(moment([2000, 1, 29, 24, 1]).invalidAt(), 3, '24:01 is invalid hour'); + assert.equal(moment([2000, 1, 29, 23, 60]).invalidAt(), 4, '60 is invalid minute'); + assert.equal(moment([2000, 1, 29, 23, 59, 60]).invalidAt(), 5, '60 is invalid second'); + assert.equal(moment([2000, 1, 29, 23, 59, 59, 1000]).invalidAt(), 6, '1000 is invalid millisecond'); + assert.equal(moment([2000, 1, 29, 23, 59, 59, 999]).invalidAt(), -1, '-1 if everything is fine'); +}); + +test('valid Unix timestamp', function (assert) { + assert.equal(moment(1371065286, 'X').isValid(), true, 'number integer'); + assert.equal(moment(1379066897.0, 'X').isValid(), true, 'number whole 1dp'); + assert.equal(moment(1379066897.7, 'X').isValid(), true, 'number 1dp'); + assert.equal(moment(1379066897.00, 'X').isValid(), true, 'number whole 2dp'); + assert.equal(moment(1379066897.07, 'X').isValid(), true, 'number 2dp'); + assert.equal(moment(1379066897.17, 'X').isValid(), true, 'number 2dp'); + assert.equal(moment(1379066897.000, 'X').isValid(), true, 'number whole 3dp'); + assert.equal(moment(1379066897.007, 'X').isValid(), true, 'number 3dp'); + assert.equal(moment(1379066897.017, 'X').isValid(), true, 'number 3dp'); + assert.equal(moment(1379066897.157, 'X').isValid(), true, 'number 3dp'); + assert.equal(moment('1371065286', 'X').isValid(), true, 'string integer'); + assert.equal(moment('1379066897.', 'X').isValid(), true, 'string trailing .'); + assert.equal(moment('1379066897.0', 'X').isValid(), true, 'string whole 1dp'); + assert.equal(moment('1379066897.7', 'X').isValid(), true, 'string 1dp'); + assert.equal(moment('1379066897.00', 'X').isValid(), true, 'string whole 2dp'); + assert.equal(moment('1379066897.07', 'X').isValid(), true, 'string 2dp'); + assert.equal(moment('1379066897.17', 'X').isValid(), true, 'string 2dp'); + assert.equal(moment('1379066897.000', 'X').isValid(), true, 'string whole 3dp'); + assert.equal(moment('1379066897.007', 'X').isValid(), true, 'string 3dp'); + assert.equal(moment('1379066897.017', 'X').isValid(), true, 'string 3dp'); + assert.equal(moment('1379066897.157', 'X').isValid(), true, 'string 3dp'); +}); + +test('invalid Unix timestamp', function (assert) { + assert.equal(moment(undefined, 'X').isValid(), false, 'undefined'); + assert.equal(moment('undefined', 'X').isValid(), false, 'string undefined'); + try { + assert.equal(moment(null, 'X').isValid(), false, 'null'); + } catch (e) { + assert.ok(true, 'null'); + } + + assert.equal(moment('null', 'X').isValid(), false, 'string null'); + assert.equal(moment([], 'X').isValid(), false, 'array'); + assert.equal(moment('{}', 'X').isValid(), false, 'object'); + try { + assert.equal(moment('', 'X').isValid(), false, 'string empty'); + } catch (e) { + assert.ok(true, 'string empty'); + } + + assert.equal(moment(' ', 'X').isValid(), false, 'string space'); +}); + +test('valid Unix offset milliseconds', function (assert) { + assert.equal(moment(1234567890123, 'x').isValid(), true, 'number integer'); + assert.equal(moment('1234567890123', 'x').isValid(), true, 'string integer'); +}); + +test('invalid Unix offset milliseconds', function (assert) { + assert.equal(moment(undefined, 'x').isValid(), false, 'undefined'); + assert.equal(moment('undefined', 'x').isValid(), false, 'string undefined'); + try { + assert.equal(moment(null, 'x').isValid(), false, 'null'); + } catch (e) { + assert.ok(true, 'null'); + } + + assert.equal(moment('null', 'x').isValid(), false, 'string null'); + assert.equal(moment([], 'x').isValid(), false, 'array'); + assert.equal(moment('{}', 'x').isValid(), false, 'object'); + try { + assert.equal(moment('', 'x').isValid(), false, 'string empty'); + } catch (e) { + assert.ok(true, 'string empty'); + } + + assert.equal(moment(' ', 'x').isValid(), false, 'string space'); +}); + +test('empty', function (assert) { + assert.equal(moment(null).isValid(), false, 'null'); + assert.equal(moment('').isValid(), false, 'empty string'); + assert.equal(moment(null, 'YYYY').isValid(), false, 'format + null'); + assert.equal(moment('', 'YYYY').isValid(), false, 'format + empty string'); + assert.equal(moment(' ', 'YYYY').isValid(), false, 'format + empty when trimmed'); +}); + +test('days of the year', function (assert) { + assert.equal(moment('2010 300', 'YYYY DDDD').isValid(), true, 'day 300 of year valid'); + assert.equal(moment('2010 365', 'YYYY DDDD').isValid(), true, 'day 365 of year valid'); + assert.equal(moment('2010 366', 'YYYY DDDD').isValid(), false, 'day 366 of year invalid'); + assert.equal(moment('2012 365', 'YYYY DDDD').isValid(), true, 'day 365 of leap year valid'); + assert.equal(moment('2012 366', 'YYYY DDDD').isValid(), true, 'day 366 of leap year valid'); + assert.equal(moment('2012 367', 'YYYY DDDD').isValid(), false, 'day 367 of leap year invalid'); +}); + +test('24:00:00.000 is valid', function (assert) { + assert.equal(moment('2014-01-01 24', 'YYYY-MM-DD HH').isValid(), true, '24 is valid'); + assert.equal(moment('2014-01-01 24:00', 'YYYY-MM-DD HH:mm').isValid(), true, '24:00 is valid'); + assert.equal(moment('2014-01-01 24:01', 'YYYY-MM-DD HH:mm').isValid(), false, '24:01 is not valid'); +}); + +test('oddball permissiveness', function (assert) { + // https://github.com/moment/moment/issues/1128 + assert.ok(moment('2010-10-3199', ['MM/DD/YYYY', 'MM-DD-YYYY', 'YYYY-MM-DD']).isValid()); + + // https://github.com/moment/moment/issues/1122 + assert.ok(moment('3:25', ['h:mma', 'hh:mma', 'H:mm', 'HH:mm']).isValid()); +}); + +test('0 hour is invalid in strict', function (assert) { + assert.equal(moment('00:01', 'hh:mm', true).isValid(), false, '00 hour is invalid in strict'); + assert.equal(moment('00:01', 'hh:mm').isValid(), true, '00 hour is valid in normal'); + assert.equal(moment('0:01', 'h:mm', true).isValid(), false, '0 hour is invalid in strict'); + assert.equal(moment('0:01', 'h:mm').isValid(), true, '0 hour is valid in normal'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('leap year'); + +test('leap year', function (assert) { + assert.equal(moment([2010, 0, 1]).isLeapYear(), false, '2010'); + assert.equal(moment([2100, 0, 1]).isLeapYear(), false, '2100'); + assert.equal(moment([2008, 0, 1]).isLeapYear(), true, '2008'); + assert.equal(moment([2000, 0, 1]).isLeapYear(), true, '2000'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('listers'); + +test('default', function (assert) { + assert.deepEqual(moment.months(), ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']); + assert.deepEqual(moment.monthsShort(), ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']); + assert.deepEqual(moment.weekdays(), ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']); + assert.deepEqual(moment.weekdaysShort(), ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']); + assert.deepEqual(moment.weekdaysMin(), ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']); +}); + +test('index', function (assert) { + assert.equal(moment.months(0), 'January'); + assert.equal(moment.months(2), 'March'); + assert.equal(moment.monthsShort(0), 'Jan'); + assert.equal(moment.monthsShort(2), 'Mar'); + assert.equal(moment.weekdays(0), 'Sunday'); + assert.equal(moment.weekdays(2), 'Tuesday'); + assert.equal(moment.weekdaysShort(0), 'Sun'); + assert.equal(moment.weekdaysShort(2), 'Tue'); + assert.equal(moment.weekdaysMin(0), 'Su'); + assert.equal(moment.weekdaysMin(2), 'Tu'); +}); + +test('localized', function (assert) { + var months = 'one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve'.split('_'), + monthsShort = 'on_tw_th_fo_fi_si_se_ei_ni_te_el_tw'.split('_'), + weekdays = 'one_two_three_four_five_six_seven'.split('_'), + weekdaysShort = 'on_tw_th_fo_fi_si_se'.split('_'), + weekdaysMin = '1_2_3_4_5_6_7'.split('_'), + weekdaysLocale = 'four_five_six_seven_one_two_three'.split('_'), + weekdaysShortLocale = 'fo_fi_si_se_on_tw_th'.split('_'), + weekdaysMinLocale = '4_5_6_7_1_2_3'.split('_'), + week = { + dow : 3, + doy : 6 + }; + + moment.locale('numerologists', { + months : months, + monthsShort : monthsShort, + weekdays : weekdays, + weekdaysShort: weekdaysShort, + weekdaysMin: weekdaysMin, + week : week + }); + + assert.deepEqual(moment.months(), months); + assert.deepEqual(moment.monthsShort(), monthsShort); + assert.deepEqual(moment.weekdays(), weekdays); + assert.deepEqual(moment.weekdaysShort(), weekdaysShort); + assert.deepEqual(moment.weekdaysMin(), weekdaysMin); + + assert.equal(moment.months(0), 'one'); + assert.equal(moment.monthsShort(0), 'on'); + assert.equal(moment.weekdays(0), 'one'); + assert.equal(moment.weekdaysShort(0), 'on'); + assert.equal(moment.weekdaysMin(0), '1'); + + assert.equal(moment.months(2), 'three'); + assert.equal(moment.monthsShort(2), 'th'); + assert.equal(moment.weekdays(2), 'three'); + assert.equal(moment.weekdaysShort(2), 'th'); + assert.equal(moment.weekdaysMin(2), '3'); + + assert.deepEqual(moment.weekdays(true), weekdaysLocale); + assert.deepEqual(moment.weekdaysShort(true), weekdaysShortLocale); + assert.deepEqual(moment.weekdaysMin(true), weekdaysMinLocale); + + assert.equal(moment.weekdays(true, 0), 'four'); + assert.equal(moment.weekdaysShort(true, 0), 'fo'); + assert.equal(moment.weekdaysMin(true, 0), '4'); + + assert.equal(moment.weekdays(false, 2), 'three'); + assert.equal(moment.weekdaysShort(false, 2), 'th'); + assert.equal(moment.weekdaysMin(false, 2), '3'); +}); + +test('with functions', function (assert) { + var monthsShort = 'one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve'.split('_'), + monthsShortWeird = 'onesy_twosy_threesy_foursy_fivesy_sixsy_sevensy_eightsy_ninesy_tensy_elevensy_twelvesy'.split('_'); + + moment.locale('difficult', { + + monthsShort: function (m, format) { + var arr = format.match(/-MMM-/) ? monthsShortWeird : monthsShort; + return arr[m.month()]; + } + }); + + assert.deepEqual(moment.monthsShort(), monthsShort); + assert.deepEqual(moment.monthsShort('MMM'), monthsShort); + assert.deepEqual(moment.monthsShort('-MMM-'), monthsShortWeird); + + assert.deepEqual(moment.monthsShort('MMM', 2), 'three'); + assert.deepEqual(moment.monthsShort('-MMM-', 2), 'threesy'); + assert.deepEqual(moment.monthsShort(2), 'three'); +}); + +test('with locale data', function (assert) { + var months = 'one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve'.split('_'), + monthsShort = 'on_tw_th_fo_fi_si_se_ei_ni_te_el_tw'.split('_'), + weekdays = 'one_two_three_four_five_six_seven'.split('_'), + weekdaysShort = 'on_tw_th_fo_fi_si_se'.split('_'), + weekdaysMin = '1_2_3_4_5_6_7'.split('_'), + weekdaysLocale = 'four_five_six_seven_one_two_three'.split('_'), + weekdaysShortLocale = 'fo_fi_si_se_on_tw_th'.split('_'), + weekdaysMinLocale = '4_5_6_7_1_2_3'.split('_'), + week = { + dow : 3, + doy : 6 + }; + + var customLocale = moment.localeData('numerologists'); + + assert.deepEqual(customLocale.months(), months); + assert.deepEqual(customLocale.monthsShort(), monthsShort); + assert.deepEqual(customLocale.weekdays(), weekdays); + assert.deepEqual(customLocale.weekdaysShort(), weekdaysShort); + assert.deepEqual(customLocale.weekdaysMin(), weekdaysMin); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +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; + +module$1('locale', { + setup : function () { + // TODO: Remove once locales are switched to ES6 + each([{ + name: 'en-gb', + data: {} + }, { + name: 'en-ca', + data: {} + }, { + name: 'es', + data: { + relativeTime: {past: 'hace %s', s: 'unos segundos', d: 'un día'}, + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_') + } + }, { + name: 'fr', + data: {} + }, { + name: 'fr-ca', + data: {} + }, { + name: 'it', + data: {} + }, { + name: 'zh-cn', + data: { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_') + } + }], function (locale) { + if (moment.locale(locale.name) !== locale.name) { + moment.defineLocale(locale.name, locale.data); + } + }); + moment.locale('en'); + } +}); + +test('library getters and setters', function (assert) { + var r = moment.locale('en'); + + assert.equal(r, 'en', 'locale should return en by default'); + assert.equal(moment.locale(), 'en', 'locale should return en by default'); + + moment.locale('fr'); + assert.equal(moment.locale(), 'fr', 'locale should return the changed locale'); + + moment.locale('en-gb'); + assert.equal(moment.locale(), 'en-gb', 'locale should return the changed locale'); + + moment.locale('en'); + assert.equal(moment.locale(), 'en', 'locale should reset'); + + moment.locale('does-not-exist'); + assert.equal(moment.locale(), 'en', 'locale should reset'); + + moment.locale('EN'); + assert.equal(moment.locale(), 'en', 'Normalize locale key case'); + + moment.locale('EN_gb'); + assert.equal(moment.locale(), 'en-gb', 'Normalize locale key underscore'); +}); + +test('library setter array of locales', function (assert) { + assert.equal(moment.locale(['non-existent', 'fr', 'also-non-existent']), 'fr', 'passing an array uses the first valid locale'); + assert.equal(moment.locale(['es', 'fr', 'also-non-existent']), 'es', 'passing an array uses the first valid locale'); +}); + +test('library setter locale substrings', function (assert) { + assert.equal(moment.locale('fr-crap'), 'fr', 'use substrings'); + assert.equal(moment.locale('fr-does-not-exist'), 'fr', 'uses deep substrings'); + assert.equal(moment.locale('fr-CA-does-not-exist'), 'fr-ca', 'uses deepest substring'); +}); + +test('library getter locale array and substrings', function (assert) { + assert.equal(moment.locale(['en-CH', 'fr']), 'en', 'prefer root locale to shallower ones'); + assert.equal(moment.locale(['en-gb-leeds', 'en-CA']), 'en-gb', 'prefer root locale to shallower ones'); + assert.equal(moment.locale(['en-fake', 'en-CA']), 'en-ca', 'prefer alternatives with shared roots'); + assert.equal(moment.locale(['en-fake', 'en-fake2', 'en-ca']), 'en-ca', 'prefer alternatives with shared roots'); + assert.equal(moment.locale(['fake-CA', 'fake-MX', 'fr']), 'fr', 'always find something if possible'); + assert.equal(moment.locale(['fake-CA', 'fake-MX', 'fr']), 'fr', 'always find something if possible'); + assert.equal(moment.locale(['fake-CA', 'fake-MX', 'fr-fake-fake-fake']), 'fr', 'always find something if possible'); + assert.equal(moment.locale(['en', 'en-CA']), 'en', 'prefer earlier if it works'); +}); + +test('library ensure inheritance', function (assert) { + moment.locale('made-up', { + // I put them out of order + months : 'February_March_April_May_June_July_August_September_October_November_December_January'.split('_') + // the rest of the properties should be inherited. + }); + + assert.equal(moment([2012, 5, 6]).format('MMMM'), 'July', 'Override some of the configs'); + assert.equal(moment([2012, 5, 6]).format('MMM'), 'Jun', 'But not all of them'); +}); + +test('library ensure inheritance LT L LL LLL LLLL', function (assert) { + var locale = 'test-inherit-lt'; + + moment.defineLocale(locale, { + longDateFormat : { + LT : '-[LT]-', + L : '-[L]-', + LL : '-[LL]-', + LLL : '-[LLL]-', + LLLL : '-[LLLL]-' + }, + calendar : { + sameDay : '[sameDay] LT', + nextDay : '[nextDay] L', + nextWeek : '[nextWeek] LL', + lastDay : '[lastDay] LLL', + lastWeek : '[lastWeek] LLLL', + sameElse : 'L' + } + }); + + moment.locale('es'); + + assert.equal(moment().locale(locale).calendar(), 'sameDay -LT-', 'Should use instance locale in LT formatting'); + assert.equal(moment().add(1, 'days').locale(locale).calendar(), 'nextDay -L-', 'Should use instance locale in L formatting'); + assert.equal(moment().add(-1, 'days').locale(locale).calendar(), 'lastDay -LLL-', 'Should use instance locale in LL formatting'); + assert.equal(moment().add(4, 'days').locale(locale).calendar(), 'nextWeek -LL-', 'Should use instance locale in LLL formatting'); + assert.equal(moment().add(-4, 'days').locale(locale).calendar(), 'lastWeek -LLLL-', 'Should use instance locale in LLLL formatting'); +}); + +test('library localeData', function (assert) { + moment.locale('en'); + + var jan = moment([2000, 0]); + + assert.equal(moment.localeData().months(jan), 'January', 'no arguments returns global'); + assert.equal(moment.localeData('zh-cn').months(jan), '一月', 'a string returns the locale based on key'); + assert.equal(moment.localeData(moment().locale('es')).months(jan), 'enero', 'if you pass in a moment it uses the moment\'s locale'); +}); + +test('library deprecations', function (assert) { + test.expectedDeprecations('moment.lang'); + moment.lang('dude', {months: ['Movember']}); + assert.equal(moment.locale(), 'dude', 'setting the lang sets the locale'); + assert.equal(moment.lang(), moment.locale()); + assert.equal(moment.langData(), moment.localeData(), 'langData is localeData'); + moment.defineLocale('dude', null); +}); + +test('defineLocale', function (assert) { + moment.locale('en'); + moment.defineLocale('dude', {months: ['Movember']}); + assert.equal(moment().locale(), 'dude', 'defineLocale also sets it'); + assert.equal(moment().locale('dude').locale(), 'dude', 'defineLocale defines a locale'); + moment.defineLocale('dude', null); +}); + +test('locales', function (assert) { + moment.defineLocale('dude', {months: ['Movember']}); + assert.equal(true, !!~indexOf$1.call(moment.locales(), 'dude'), 'locales returns an array of defined locales'); + assert.equal(true, !!~indexOf$1.call(moment.locales(), 'en'), 'locales should always include english'); + moment.defineLocale('dude', null); +}); + +test('library convenience', function (assert) { + moment.locale('something', {week: {dow: 3}}); + moment.locale('something'); + assert.equal(moment.locale(), 'something', 'locale can be used to create the locale too'); + moment.defineLocale('something', null); +}); + +test('firstDayOfWeek firstDayOfYear locale getters', function (assert) { + moment.locale('something', {week: {dow: 3, doy: 4}}); + moment.locale('something'); + assert.equal(moment.localeData().firstDayOfWeek(), 3, 'firstDayOfWeek'); + assert.equal(moment.localeData().firstDayOfYear(), 4, 'firstDayOfYear'); + moment.defineLocale('something', null); +}); + +test('instance locale method', function (assert) { + moment.locale('en'); + + assert.equal(moment([2012, 5, 6]).format('MMMM'), 'June', 'Normally default to global'); + assert.equal(moment([2012, 5, 6]).locale('es').format('MMMM'), 'junio', 'Use the instance specific locale'); + assert.equal(moment([2012, 5, 6]).format('MMMM'), 'June', 'Using an instance specific locale does not affect other moments'); +}); + +test('instance locale method with array', function (assert) { + var m = moment().locale(['non-existent', 'fr', 'also-non-existent']); + assert.equal(m.locale(), 'fr', 'passing an array uses the first valid locale'); + m = moment().locale(['es', 'fr', 'also-non-existent']); + assert.equal(m.locale(), 'es', 'passing an array uses the first valid locale'); +}); + +test('instance getter locale substrings', function (assert) { + var m = moment(); + + m.locale('fr-crap'); + assert.equal(m.locale(), 'fr', 'use substrings'); + + m.locale('fr-does-not-exist'); + assert.equal(m.locale(), 'fr', 'uses deep substrings'); +}); + +test('instance locale persists with manipulation', function (assert) { + moment.locale('en'); + + assert.equal(moment([2012, 5, 6]).locale('es').add({days: 1}).format('MMMM'), 'junio', 'With addition'); + assert.equal(moment([2012, 5, 6]).locale('es').day(0).format('MMMM'), 'junio', 'With day getter'); + assert.equal(moment([2012, 5, 6]).locale('es').endOf('day').format('MMMM'), 'junio', 'With endOf'); +}); + +test('instance locale persists with cloning', function (assert) { + moment.locale('en'); + + var a = moment([2012, 5, 6]).locale('es'), + b = a.clone(), + c = moment(a); + + assert.equal(b.format('MMMM'), 'junio', 'using moment.fn.clone()'); + assert.equal(b.format('MMMM'), 'junio', 'using moment()'); +}); + +test('duration locale method', function (assert) { + moment.locale('en'); + + assert.equal(moment.duration({seconds: 44}).humanize(), 'a few seconds', 'Normally default to global'); + assert.equal(moment.duration({seconds: 44}).locale('es').humanize(), 'unos segundos', 'Use the instance specific locale'); + assert.equal(moment.duration({seconds: 44}).humanize(), 'a few seconds', 'Using an instance specific locale does not affect other durations'); +}); + +test('duration locale persists with cloning', function (assert) { + moment.locale('en'); + + var a = moment.duration({seconds: 44}).locale('es'), + b = moment.duration(a); + + assert.equal(b.humanize(), 'unos segundos', 'using moment.duration()'); +}); + +test('changing the global locale doesn\'t affect existing duration instances', function (assert) { + var mom = moment.duration(); + moment.locale('fr'); + assert.equal('en', mom.locale()); +}); + +test('duration deprecations', function (assert) { + test.expectedDeprecations('moment().lang()'); + assert.equal(moment.duration().lang(), moment.duration().localeData(), 'duration.lang is the same as duration.localeData'); +}); + +test('from and fromNow with invalid date', function (assert) { + assert.equal(moment(NaN).from(), 'Invalid date', 'moment.from with invalid moment'); + assert.equal(moment(NaN).fromNow(), 'Invalid date', 'moment.fromNow with invalid moment'); +}); + +test('from relative time future', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).subtract({s: 44})), 'in a few seconds', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({s: 45})), 'in a minute', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({s: 89})), 'in a minute', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({s: 90})), 'in 2 minutes', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({m: 44})), 'in 44 minutes', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({m: 45})), 'in an hour', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({m: 89})), 'in an hour', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({m: 90})), 'in 2 hours', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({h: 5})), 'in 5 hours', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({h: 21})), 'in 21 hours', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({h: 22})), 'in a day', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({h: 35})), 'in a day', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({h: 36})), 'in 2 days', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 1})), 'in a day', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 5})), 'in 5 days', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 25})), 'in 25 days', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 26})), 'in a month', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 30})), 'in a month', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 45})), 'in a month', '45 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 47})), 'in 2 months', '47 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 74})), 'in 2 months', '74 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 78})), 'in 3 months', '78 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({M: 1})), 'in a month', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({M: 5})), 'in 5 months', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 315})), 'in 10 months', '315 days = 10 months'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 344})), 'in a year', '344 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 345})), 'in a year', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 548})), 'in 2 years', '548 days = in 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({y: 1})), 'in a year', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).subtract({y: 5})), 'in 5 years', '5 years = 5 years'); +}); + +test('from relative time past', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 44})), 'a few seconds ago', '44 seconds = a few seconds'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 45})), 'a minute ago', '45 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 89})), 'a minute ago', '89 seconds = a minute'); + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90})), '2 minutes ago', '90 seconds = 2 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 44})), '44 minutes ago', '44 minutes = 44 minutes'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 45})), 'an hour ago', '45 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 89})), 'an hour ago', '89 minutes = an hour'); + assert.equal(start.from(moment([2007, 1, 28]).add({m: 90})), '2 hours ago', '90 minutes = 2 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 5})), '5 hours ago', '5 hours = 5 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 21})), '21 hours ago', '21 hours = 21 hours'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 22})), 'a day ago', '22 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 35})), 'a day ago', '35 hours = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({h: 36})), '2 days ago', '36 hours = 2 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 1})), 'a day ago', '1 day = a day'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 5})), '5 days ago', '5 days = 5 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 25})), '25 days ago', '25 days = 25 days'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 26})), 'a month ago', '26 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 30})), 'a month ago', '30 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 43})), 'a month ago', '43 days = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 46})), '2 months ago', '46 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 74})), '2 months ago', '75 days = 2 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 76})), '3 months ago', '76 days = 3 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 1})), 'a month ago', '1 month = a month'); + assert.equal(start.from(moment([2007, 1, 28]).add({M: 5})), '5 months ago', '5 months = 5 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 315})), '10 months ago', '315 days = 10 months'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 344})), 'a year ago', '344 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 345})), 'a year ago', '345 days = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({d: 548})), '2 years ago', '548 days = 2 years'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 1})), 'a year ago', '1 year = a year'); + assert.equal(start.from(moment([2007, 1, 28]).add({y: 5})), '5 years ago', '5 years = 5 years'); +}); + +test('instance locale used with from', function (assert) { + moment.locale('en'); + + var a = moment([2012, 5, 6]).locale('es'), + b = moment([2012, 5, 7]); + + assert.equal(a.from(b), 'hace un día', 'preserve locale of first moment'); + assert.equal(b.from(a), 'in a day', 'do not preserve locale of second moment'); +}); + +test('instance localeData', function (assert) { + moment.defineLocale('dude', {week: {dow: 3}}); + assert.equal(moment().locale('dude').localeData()._week.dow, 3); + moment.defineLocale('dude', null); +}); + +test('month name callback function', function (assert) { + function fakeReplace(m, format) { + if (/test/.test(format)) { + return 'test'; + } + if (m.date() === 1) { + return 'date'; + } + return 'default'; + } + + moment.locale('made-up-2', { + months : fakeReplace, + monthsShort : fakeReplace, + weekdays : fakeReplace, + weekdaysShort : fakeReplace, + weekdaysMin : fakeReplace + }); + + assert.equal(moment().format('[test] dd ddd dddd MMM MMMM'), 'test test test test test test', 'format month name function should be able to access the format string'); + assert.equal(moment([2011, 0, 1]).format('dd ddd dddd MMM MMMM'), 'date date date date date', 'format month name function should be able to access the moment object'); + assert.equal(moment([2011, 0, 2]).format('dd ddd dddd MMM MMMM'), 'default default default default default', 'format month name function should be able to access the moment object'); +}); + +test('changing parts of a locale config', function (assert) { + test.expectedDeprecations('defineLocaleOverride'); + + moment.locale('partial-lang', { + months : 'a b c d e f g h i j k l'.split(' ') + }); + + assert.equal(moment([2011, 0, 1]).format('MMMM'), 'a', 'should be able to set locale values when creating the localeuage'); + + moment.locale('partial-lang', { + monthsShort : 'A B C D E F G H I J K L'.split(' ') + }); + + assert.equal(moment([2011, 0, 1]).format('MMMM MMM'), 'a A', 'should be able to set locale values after creating the localeuage'); + + moment.defineLocale('partial-lang', null); +}); + +test('start/endOf week feature for first-day-is-monday locales', function (assert) { + moment.locale('monday-lang', { + week : { + dow : 1 // Monday is the first day of the week + } + }); + + moment.locale('monday-lang'); + assert.equal(moment([2013, 0, 1]).startOf('week').day(), 1, 'for locale monday-lang first day of the week should be monday'); + assert.equal(moment([2013, 0, 1]).endOf('week').day(), 0, 'for locale monday-lang last day of the week should be sunday'); + moment.defineLocale('monday-lang', null); +}); + +test('meridiem parsing', function (assert) { + moment.locale('meridiem-parsing', { + meridiemParse : /[bd]/i, + isPM : function (input) { + return input === 'b'; + } + }); + + moment.locale('meridiem-parsing'); + assert.equal(moment('2012-01-01 3b', 'YYYY-MM-DD ha').hour(), 15, 'Custom parsing of meridiem should work'); + assert.equal(moment('2012-01-01 3d', 'YYYY-MM-DD ha').hour(), 3, 'Custom parsing of meridiem should work'); + moment.defineLocale('meridiem-parsing', null); +}); + +test('invalid date formatting', function (assert) { + moment.locale('has-invalid', { + invalidDate: 'KHAAAAAAAAAAAN!' + }); + + assert.equal(moment.invalid().format(), 'KHAAAAAAAAAAAN!'); + assert.equal(moment.invalid().format('YYYY-MM-DD'), 'KHAAAAAAAAAAAN!'); + moment.defineLocale('has-invalid', null); +}); + +test('return locale name', function (assert) { + var registered = moment.locale('return-this', {}); + + assert.equal(registered, 'return-this', 'returns the locale configured'); + moment.locale('return-this', null); +}); + +test('changing the global locale doesn\'t affect existing instances', function (assert) { + var mom = moment(); + moment.locale('fr'); + assert.equal('en', mom.locale()); +}); + +test('setting a language on instance returns the original moment for chaining', function (assert) { + test.expectedDeprecations('moment().lang()'); + var mom = moment(); + + assert.equal(mom.lang('fr'), mom, 'setting the language (lang) returns the original moment for chaining'); + assert.equal(mom.locale('it'), mom, 'setting the language (locale) returns the original moment for chaining'); +}); + +test('lang(key) changes the language of the instance', function (assert) { + test.expectedDeprecations('moment().lang()'); + var m = moment().month(0); + m.lang('fr'); + assert.equal(m.locale(), 'fr', 'm.lang(key) changes instance locale'); +}); + +test('moment#locale(false) resets to global locale', function (assert) { + var m = moment(); + + moment.locale('fr'); + m.locale('it'); + + assert.equal(moment.locale(), 'fr', 'global locale is it'); + assert.equal(m.locale(), 'it', 'instance locale is it'); + m.locale(false); + assert.equal(m.locale(), 'fr', 'instance locale reset to global locale'); +}); + +test('moment().locale with missing key doesn\'t change locale', function (assert) { + assert.equal(moment().locale('boo').localeData(), moment.localeData(), + 'preserve global locale in case of bad locale id'); +}); + +test('moment().lang with missing key doesn\'t change locale', function (assert) { + test.expectedDeprecations('moment().lang()'); + assert.equal(moment().lang('boo').localeData(), moment.localeData(), + 'preserve global locale in case of bad locale id'); +}); + + +// TODO: Enable this after fixing pl months parse hack hack +// test('monthsParseExact', function (assert) { +// var locale = 'test-months-parse-exact'; + +// moment.defineLocale(locale, { +// monthsParseExact: true, +// months: 'A_AA_AAA_B_B B_BB B_C_C-C_C,C2C_D_D+D_D`D*D'.split('_'), +// monthsShort: 'E_EE_EEE_F_FF_FFF_G_GG_GGG_H_HH_HHH'.split('_') +// }); + +// assert.equal(moment('A', 'MMMM', true).month(), 0, 'parse long month 0 with MMMM'); +// assert.equal(moment('AA', 'MMMM', true).month(), 1, 'parse long month 1 with MMMM'); +// assert.equal(moment('AAA', 'MMMM', true).month(), 2, 'parse long month 2 with MMMM'); +// assert.equal(moment('B B', 'MMMM', true).month(), 4, 'parse long month 4 with MMMM'); +// assert.equal(moment('BB B', 'MMMM', true).month(), 5, 'parse long month 5 with MMMM'); +// assert.equal(moment('C-C', 'MMMM', true).month(), 7, 'parse long month 7 with MMMM'); +// assert.equal(moment('C,C2C', 'MMMM', true).month(), 8, 'parse long month 8 with MMMM'); +// assert.equal(moment('D+D', 'MMMM', true).month(), 10, 'parse long month 10 with MMMM'); +// assert.equal(moment('D`D*D', 'MMMM', true).month(), 11, 'parse long month 11 with MMMM'); + +// assert.equal(moment('E', 'MMM', true).month(), 0, 'parse long month 0 with MMM'); +// assert.equal(moment('EE', 'MMM', true).month(), 1, 'parse long month 1 with MMM'); +// assert.equal(moment('EEE', 'MMM', true).month(), 2, 'parse long month 2 with MMM'); + +// assert.equal(moment('A', 'MMM').month(), 0, 'non-strict parse long month 0 with MMM'); +// assert.equal(moment('AA', 'MMM').month(), 1, 'non-strict parse long month 1 with MMM'); +// assert.equal(moment('AAA', 'MMM').month(), 2, 'non-strict parse long month 2 with MMM'); +// assert.equal(moment('E', 'MMMM').month(), 0, 'non-strict parse short month 0 with MMMM'); +// assert.equal(moment('EE', 'MMMM').month(), 1, 'non-strict parse short month 1 with MMMM'); +// assert.equal(moment('EEE', 'MMMM').month(), 2, 'non-strict parse short month 2 with MMMM'); +// }); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('locale inheritance'); + +test('calendar', function (assert) { + moment.defineLocale('base-cal', { + calendar : { + sameDay: '[Today at] HH:mm', + nextDay: '[Tomorrow at] HH:mm', + nextWeek: '[Next week at] HH:mm', + lastDay: '[Yesterday at] HH:mm', + lastWeek: '[Last week at] HH:mm', + sameElse: '[whatever]' + } + }); + moment.defineLocale('child-cal', { + parentLocale: 'base-cal', + calendar: { + sameDay: '[Today] HH:mm', + nextDay: '[Tomorrow] HH:mm', + nextWeek: '[Next week] HH:mm' + } + }); + + moment.locale('child-cal'); + var anchor = moment.utc('2015-05-05T12:00:00', moment.ISO_8601); + assert.equal(anchor.clone().add(3, 'hours').calendar(anchor), 'Today 15:00', 'today uses child version'); + assert.equal(anchor.clone().add(1, 'day').calendar(anchor), 'Tomorrow 12:00', 'tomorrow uses child version'); + assert.equal(anchor.clone().add(3, 'days').calendar(anchor), 'Next week 12:00', 'next week uses child version'); + + assert.equal(anchor.clone().subtract(1, 'day').calendar(anchor), 'Yesterday at 12:00', 'yesterday uses parent version'); + assert.equal(anchor.clone().subtract(3, 'days').calendar(anchor), 'Last week at 12:00', 'last week uses parent version'); + assert.equal(anchor.clone().subtract(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version -'); + assert.equal(anchor.clone().add(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version +'); +}); + +test('missing', function (assert) { + moment.defineLocale('base-cal-2', { + calendar: { + sameDay: '[Today at] HH:mm', + nextDay: '[Tomorrow at] HH:mm', + nextWeek: '[Next week at] HH:mm', + lastDay: '[Yesterday at] HH:mm', + lastWeek: '[Last week at] HH:mm', + sameElse: '[whatever]' + } + }); + moment.defineLocale('child-cal-2', { + parentLocale: 'base-cal-2' + }); + moment.locale('child-cal-2'); + var anchor = moment.utc('2015-05-05T12:00:00', moment.ISO_8601); + assert.equal(anchor.clone().add(3, 'hours').calendar(anchor), 'Today at 15:00', 'today uses parent version'); + assert.equal(anchor.clone().add(1, 'day').calendar(anchor), 'Tomorrow at 12:00', 'tomorrow uses parent version'); + assert.equal(anchor.clone().add(3, 'days').calendar(anchor), 'Next week at 12:00', 'next week uses parent version'); + assert.equal(anchor.clone().subtract(1, 'day').calendar(anchor), 'Yesterday at 12:00', 'yesterday uses parent version'); + assert.equal(anchor.clone().subtract(3, 'days').calendar(anchor), 'Last week at 12:00', 'last week uses parent version'); + assert.equal(anchor.clone().subtract(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version -'); + assert.equal(anchor.clone().add(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version +'); +}); + +// Test function vs obj both directions + +test('long date format', function (assert) { + moment.defineLocale('base-ldf', { + longDateFormat : { + 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' + } + }); + moment.defineLocale('child-ldf', { + parentLocale: 'base-ldf', + longDateFormat: { + LLL : '[child] MMMM D, YYYY h:mm A', + LLLL : '[child] dddd, MMMM D, YYYY h:mm A' + } + }); + + moment.locale('child-ldf'); + var anchor = moment.utc('2015-09-06T12:34:56', moment.ISO_8601); + assert.equal(anchor.format('LTS'), '12:34:56 PM', 'LTS uses base'); + assert.equal(anchor.format('LT'), '12:34 PM', 'LT uses base'); + assert.equal(anchor.format('L'), '09/06/2015', 'L uses base'); + assert.equal(anchor.format('l'), '9/6/2015', 'l uses base'); + assert.equal(anchor.format('LL'), 'September 6, 2015', 'LL uses base'); + assert.equal(anchor.format('ll'), 'Sep 6, 2015', 'll uses base'); + assert.equal(anchor.format('LLL'), 'child September 6, 2015 12:34 PM', 'LLL uses child'); + assert.equal(anchor.format('lll'), 'child Sep 6, 2015 12:34 PM', 'lll uses child'); + assert.equal(anchor.format('LLLL'), 'child Sunday, September 6, 2015 12:34 PM', 'LLLL uses child'); + assert.equal(anchor.format('llll'), 'child Sun, Sep 6, 2015 12:34 PM', 'llll uses child'); +}); + +test('ordinal', function (assert) { + moment.defineLocale('base-ordinal-1', { + ordinal : '%dx' + }); + moment.defineLocale('child-ordinal-1', { + parentLocale: 'base-ordinal-1', + ordinal : '%dy' + }); + + assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child string'); + + moment.defineLocale('base-ordinal-2', { + ordinal : '%dx' + }); + moment.defineLocale('child-ordinal-2', { + parentLocale: 'base-ordinal-2', + ordinal : function (num) { + return num + 'y'; + } + }); + + assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child function'); + + moment.defineLocale('base-ordinal-3', { + ordinal : function (num) { + return num + 'x'; + } + }); + moment.defineLocale('child-ordinal-3', { + parentLocale: 'base-ordinal-3', + ordinal : '%dy' + }); + + assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child string (overwrite parent function)'); +}); + +test('ordinal parse', function (assert) { + moment.defineLocale('base-ordinal-parse-1', { + dayOfMonthOrdinalParse : /\d{1,2}x/ + }); + moment.defineLocale('child-ordinal-parse-1', { + parentLocale: 'base-ordinal-parse-1', + dayOfMonthOrdinalParse : /\d{1,2}y/ + }); + + assert.ok(moment.utc('2015-01-1y', 'YYYY-MM-Do', true).isValid(), 'ordinal parse uses child'); + + moment.defineLocale('base-ordinal-parse-2', { + dayOfMonthOrdinalParse : /\d{1,2}x/ + }); + moment.defineLocale('child-ordinal-parse-2', { + parentLocale: 'base-ordinal-parse-2', + dayOfMonthOrdinalParse : /\d{1,2}/ + }); + + assert.ok(moment.utc('2015-01-1', 'YYYY-MM-Do', true).isValid(), 'ordinal parse uses child (default)'); +}); + +test('months', function (assert) { + moment.defineLocale('base-months', { + months : 'One_Two_Three_Four_Five_Six_Seven_Eight_Nine_Ten_Eleven_Twelve'.split('_') + }); + moment.defineLocale('child-months', { + parentLocale: 'base-months', + months : 'First_Second_Third_Fourth_Fifth_Sixth_Seventh_Eighth_Ninth_Tenth_Eleventh_Twelveth '.split('_') + }); + assert.ok(moment.utc('2015-01-01', 'YYYY-MM-DD').format('MMMM'), 'First', 'months uses child'); +}); + +test('define child locale before parent', function (assert) { + moment.defineLocale('months-x', null); + moment.defineLocale('base-months-x', null); + + moment.defineLocale('months-x', { + parentLocale: 'base-months-x', + months : 'First_Second_Third_Fourth_Fifth_Sixth_Seventh_Eighth_Ninth_Tenth_Eleventh_Twelveth '.split('_') + }); + assert.equal(moment.locale(), 'en', 'failed to set a locale requiring missing parent'); + moment.defineLocale('base-months-x', { + months : 'One_Two_Three_Four_Five_Six_Seven_Eight_Nine_Ten_Eleven_Twelve'.split('_') + }); + assert.equal(moment.locale(), 'base-months-x', 'defineLocale should also set the locale (regardless of child locales)'); + + assert.equal(moment().locale('months-x').month(0).format('MMMM'), 'First', 'loading child before parent locale works'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('locale update'); + +test('calendar', function (assert) { + moment.defineLocale('cal', null); + moment.defineLocale('cal', { + calendar : { + sameDay: '[Today at] HH:mm', + nextDay: '[Tomorrow at] HH:mm', + nextWeek: '[Next week at] HH:mm', + lastDay: '[Yesterday at] HH:mm', + lastWeek: '[Last week at] HH:mm', + sameElse: '[whatever]' + } + }); + moment.updateLocale('cal', { + calendar: { + sameDay: '[Today] HH:mm', + nextDay: '[Tomorrow] HH:mm', + nextWeek: '[Next week] HH:mm' + } + }); + + moment.locale('cal'); + var anchor = moment.utc('2015-05-05T12:00:00', moment.ISO_8601); + assert.equal(anchor.clone().add(3, 'hours').calendar(anchor), 'Today 15:00', 'today uses child version'); + assert.equal(anchor.clone().add(1, 'day').calendar(anchor), 'Tomorrow 12:00', 'tomorrow uses child version'); + assert.equal(anchor.clone().add(3, 'days').calendar(anchor), 'Next week 12:00', 'next week uses child version'); + + assert.equal(anchor.clone().subtract(1, 'day').calendar(anchor), 'Yesterday at 12:00', 'yesterday uses parent version'); + assert.equal(anchor.clone().subtract(3, 'days').calendar(anchor), 'Last week at 12:00', 'last week uses parent version'); + assert.equal(anchor.clone().subtract(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version -'); + assert.equal(anchor.clone().add(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version +'); +}); + +test('missing', function (assert) { + moment.defineLocale('cal-2', null); + moment.defineLocale('cal-2', { + calendar: { + sameDay: '[Today at] HH:mm', + nextDay: '[Tomorrow at] HH:mm', + nextWeek: '[Next week at] HH:mm', + lastDay: '[Yesterday at] HH:mm', + lastWeek: '[Last week at] HH:mm', + sameElse: '[whatever]' + } + }); + moment.updateLocale('cal-2', { + }); + moment.locale('cal-2'); + var anchor = moment.utc('2015-05-05T12:00:00', moment.ISO_8601); + assert.equal(anchor.clone().add(3, 'hours').calendar(anchor), 'Today at 15:00', 'today uses parent version'); + assert.equal(anchor.clone().add(1, 'day').calendar(anchor), 'Tomorrow at 12:00', 'tomorrow uses parent version'); + assert.equal(anchor.clone().add(3, 'days').calendar(anchor), 'Next week at 12:00', 'next week uses parent version'); + assert.equal(anchor.clone().subtract(1, 'day').calendar(anchor), 'Yesterday at 12:00', 'yesterday uses parent version'); + assert.equal(anchor.clone().subtract(3, 'days').calendar(anchor), 'Last week at 12:00', 'last week uses parent version'); + assert.equal(anchor.clone().subtract(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version -'); + assert.equal(anchor.clone().add(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version +'); +}); + +// Test function vs obj both directions + +test('long date format', function (assert) { + moment.defineLocale('ldf', null); + moment.defineLocale('ldf', { + longDateFormat : { + 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' + } + }); + moment.updateLocale('ldf', { + longDateFormat: { + LLL : '[child] MMMM D, YYYY h:mm A', + LLLL : '[child] dddd, MMMM D, YYYY h:mm A' + } + }); + + moment.locale('ldf'); + var anchor = moment.utc('2015-09-06T12:34:56', moment.ISO_8601); + assert.equal(anchor.format('LTS'), '12:34:56 PM', 'LTS uses base'); + assert.equal(anchor.format('LT'), '12:34 PM', 'LT uses base'); + assert.equal(anchor.format('L'), '09/06/2015', 'L uses base'); + assert.equal(anchor.format('l'), '9/6/2015', 'l uses base'); + assert.equal(anchor.format('LL'), 'September 6, 2015', 'LL uses base'); + assert.equal(anchor.format('ll'), 'Sep 6, 2015', 'll uses base'); + assert.equal(anchor.format('LLL'), 'child September 6, 2015 12:34 PM', 'LLL uses child'); + assert.equal(anchor.format('lll'), 'child Sep 6, 2015 12:34 PM', 'lll uses child'); + assert.equal(anchor.format('LLLL'), 'child Sunday, September 6, 2015 12:34 PM', 'LLLL uses child'); + assert.equal(anchor.format('llll'), 'child Sun, Sep 6, 2015 12:34 PM', 'llll uses child'); +}); + +test('ordinal', function (assert) { + moment.defineLocale('ordinal-1', null); + moment.defineLocale('ordinal-1', { + ordinal : '%dx' + }); + moment.updateLocale('ordinal-1', { + ordinal : '%dy' + }); + + assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child string'); + + moment.defineLocale('ordinal-2', null); + moment.defineLocale('ordinal-2', { + ordinal : '%dx' + }); + moment.updateLocale('ordinal-2', { + ordinal : function (num) { + return num + 'y'; + } + }); + + assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child function'); + + moment.defineLocale('ordinal-3', null); + moment.defineLocale('ordinal-3', { + ordinal : function (num) { + return num + 'x'; + } + }); + moment.updateLocale('ordinal-3', { + ordinal : '%dy' + }); + + assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child string (overwrite parent function)'); +}); + +test('ordinal parse', function (assert) { + moment.defineLocale('ordinal-parse-1', null); + moment.defineLocale('ordinal-parse-1', { + dayOfMonthOrdinalParse : /\d{1,2}x/ + }); + moment.updateLocale('ordinal-parse-1', { + dayOfMonthOrdinalParse : /\d{1,2}y/ + }); + + assert.ok(moment.utc('2015-01-1y', 'YYYY-MM-Do', true).isValid(), 'ordinal parse uses child'); + + moment.defineLocale('ordinal-parse-2', null); + moment.defineLocale('ordinal-parse-2', { + dayOfMonthOrdinalParse : /\d{1,2}x/ + }); + moment.updateLocale('ordinal-parse-2', { + dayOfMonthOrdinalParse : /\d{1,2}/ + }); + + assert.ok(moment.utc('2015-01-1', 'YYYY-MM-Do', true).isValid(), 'ordinal parse uses child (default)'); +}); + +test('months', function (assert) { + moment.defineLocale('months', null); + moment.defineLocale('months', { + months : 'One_Two_Three_Four_Five_Six_Seven_Eight_Nine_Ten_Eleven_Twelve'.split('_') + }); + moment.updateLocale('months', { + parentLocale: 'base-months', + months : 'First_Second_Third_Fourth_Fifth_Sixth_Seventh_Eighth_Ninth_Tenth_Eleventh_Twelveth '.split('_') + }); + assert.ok(moment.utc('2015-01-01', 'YYYY-MM-DD').format('MMMM'), 'First', 'months uses child'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('min max'); + +test('min', function (assert) { + var now = moment(), + future = now.clone().add(1, 'month'), + past = now.clone().subtract(1, 'month'), + invalid = moment.invalid(); + + assert.equal(moment.min(now, future, past), past, 'min(now, future, past)'); + assert.equal(moment.min(future, now, past), past, 'min(future, now, past)'); + assert.equal(moment.min(future, past, now), past, 'min(future, past, now)'); + assert.equal(moment.min(past, future, now), past, 'min(past, future, now)'); + assert.equal(moment.min(now, past), past, 'min(now, past)'); + assert.equal(moment.min(past, now), past, 'min(past, now)'); + assert.equal(moment.min(now), now, 'min(now, past)'); + + assert.equal(moment.min([now, future, past]), past, 'min([now, future, past])'); + assert.equal(moment.min([now, past]), past, 'min(now, past)'); + assert.equal(moment.min([now]), now, 'min(now)'); + + assert.equal(moment.min([now, invalid]), invalid, 'min(now, invalid)'); + assert.equal(moment.min([invalid, now]), invalid, 'min(invalid, now)'); +}); + +test('max', function (assert) { + var now = moment(), + future = now.clone().add(1, 'month'), + past = now.clone().subtract(1, 'month'), + invalid = moment.invalid(); + + assert.equal(moment.max(now, future, past), future, 'max(now, future, past)'); + assert.equal(moment.max(future, now, past), future, 'max(future, now, past)'); + assert.equal(moment.max(future, past, now), future, 'max(future, past, now)'); + assert.equal(moment.max(past, future, now), future, 'max(past, future, now)'); + assert.equal(moment.max(now, past), now, 'max(now, past)'); + assert.equal(moment.max(past, now), now, 'max(past, now)'); + assert.equal(moment.max(now), now, 'max(now, past)'); + + assert.equal(moment.max([now, future, past]), future, 'max([now, future, past])'); + assert.equal(moment.max([now, past]), now, 'max(now, past)'); + assert.equal(moment.max([now]), now, 'max(now)'); + + assert.equal(moment.max([now, invalid]), invalid, 'max(now, invalid)'); + assert.equal(moment.max([invalid, now]), invalid, 'max(invalid, now)'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('mutable'); + +test('manipulation methods', function (assert) { + var m = moment(); + + assert.equal(m, m.year(2011), 'year() should be mutable'); + assert.equal(m, m.month(1), 'month() should be mutable'); + assert.equal(m, m.hours(7), 'hours() should be mutable'); + assert.equal(m, m.minutes(33), 'minutes() should be mutable'); + assert.equal(m, m.seconds(44), 'seconds() should be mutable'); + assert.equal(m, m.milliseconds(55), 'milliseconds() should be mutable'); + assert.equal(m, m.day(2), 'day() should be mutable'); + assert.equal(m, m.startOf('week'), 'startOf() should be mutable'); + assert.equal(m, m.add(1, 'days'), 'add() should be mutable'); + assert.equal(m, m.subtract(2, 'years'), 'subtract() should be mutable'); + assert.equal(m, m.local(), 'local() should be mutable'); + assert.equal(m, m.utc(), 'utc() should be mutable'); +}); + +test('non mutable methods', function (assert) { + var m = moment(); + assert.notEqual(m, m.clone(), 'clone() should not be mutable'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('normalize units'); + +test('normalize units', function (assert) { + var fullKeys = ['year', 'quarter', 'month', 'isoWeek', 'week', 'day', 'hour', 'minute', 'second', 'millisecond', 'date', 'dayOfYear', 'weekday', 'isoWeekday', 'weekYear', 'isoWeekYear'], + aliases = ['y', 'Q', 'M', 'W', 'w', 'd', 'h', 'm', 's', 'ms', 'D', 'DDD', 'e', 'E', 'gg', 'GG'], + length = fullKeys.length, + fullKey, + fullKeyCaps, + fullKeyPlural, + fullKeyCapsPlural, + fullKeyLower, + alias, + index; + + for (index = 0; index < length; index += 1) { + fullKey = fullKeys[index]; + fullKeyCaps = fullKey.toUpperCase(); + fullKeyLower = fullKey.toLowerCase(); + fullKeyPlural = fullKey + 's'; + fullKeyCapsPlural = fullKeyCaps + 's'; + alias = aliases[index]; + assert.equal(moment.normalizeUnits(fullKey), fullKey, 'Testing full key ' + fullKey); + assert.equal(moment.normalizeUnits(fullKeyCaps), fullKey, 'Testing full key capitalised ' + fullKey); + assert.equal(moment.normalizeUnits(fullKeyPlural), fullKey, 'Testing full key plural ' + fullKey); + assert.equal(moment.normalizeUnits(fullKeyCapsPlural), fullKey, 'Testing full key capitalised and plural ' + fullKey); + assert.equal(moment.normalizeUnits(alias), fullKey, 'Testing alias ' + fullKey); + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('now'); + +test('now', function (assert) { + var startOfTest = new Date().valueOf(), + momentNowTime = moment.now(), + afterMomentCreationTime = new Date().valueOf(); + + assert.ok(startOfTest <= momentNowTime, 'moment now() time should be now, not in the past'); + assert.ok(momentNowTime <= afterMomentCreationTime, 'moment now() time should be now, not in the future'); +}); + +test('now - Date mocked', function (assert) { + // We need to test mocking the global Date object, so disable 'Read Only' jshint check + /* jshint -W020 */ + var RealDate = Date, + customTimeMs = moment('2015-01-01T01:30:00.000Z').valueOf(); + + function MockDate() { + return new RealDate(customTimeMs); + } + + MockDate.now = function () { + return new MockDate().valueOf(); + }; + + MockDate.prototype = RealDate.prototype; + + Date = MockDate; + + try { + assert.equal(moment().valueOf(), customTimeMs, 'moment now() time should use the global Date object'); + } finally { + Date = RealDate; + } +}); + +test('now - custom value', function (assert) { + var customTimeStr = '2015-01-01T01:30:00.000Z', + customTime = moment(customTimeStr, moment.ISO_8601).valueOf(), + oldFn = moment.now; + + moment.now = function () { + return customTime; + }; + + try { + assert.equal(moment().toISOString(), customTimeStr, 'moment() constructor should use the function defined by moment.now, but it did not'); + assert.equal(moment.utc().toISOString(), customTimeStr, 'moment() constructor should use the function defined by moment.now, but it did not'); + } finally { + moment.now = oldFn; + } +}); + +test('empty object, empty array', function (assert) { + function assertIsNow(gen, msg) { + var before = +(new Date()), + mid = gen(), + after = +(new Date()); + assert.ok(before <= +mid && +mid <= after, 'should be now : ' + msg); + } + assertIsNow(function () { + return moment(); + }, 'moment()'); + assertIsNow(function () { + return moment([]); + }, 'moment([])'); + assertIsNow(function () { + return moment({}); + }, 'moment({})'); + assertIsNow(function () { + return moment.utc(); + }, 'moment.utc()'); + assertIsNow(function () { + return moment.utc([]); + }, 'moment.utc([])'); + assertIsNow(function () { + return moment.utc({}); + }, 'moment.utc({})'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('parsing flags'); + +function flags () { + return moment.apply(null, arguments).parsingFlags(); +} + +test('overflow with array', function (assert) { + //months + assert.equal(flags([2010, 0]).overflow, -1, 'month 0 valid'); + assert.equal(flags([2010, 1]).overflow, -1, 'month 1 valid'); + assert.equal(flags([2010, -1]).overflow, 1, 'month -1 invalid'); + assert.equal(flags([2100, 12]).overflow, 1, 'month 12 invalid'); + + //days + assert.equal(flags([2010, 1, 16]).overflow, -1, 'date valid'); + assert.equal(flags([2010, 1, -1]).overflow, 2, 'date -1 invalid'); + assert.equal(flags([2010, 1, 0]).overflow, 2, 'date 0 invalid'); + assert.equal(flags([2010, 1, 32]).overflow, 2, 'date 32 invalid'); + assert.equal(flags([2012, 1, 29]).overflow, -1, 'date leap year valid'); + assert.equal(flags([2010, 1, 29]).overflow, 2, 'date leap year invalid'); + + //hours + assert.equal(flags([2010, 1, 1, 8]).overflow, -1, 'hour valid'); + assert.equal(flags([2010, 1, 1, 0]).overflow, -1, 'hour 0 valid'); + assert.equal(flags([2010, 1, 1, -1]).overflow, 3, 'hour -1 invalid'); + assert.equal(flags([2010, 1, 1, 25]).overflow, 3, 'hour 25 invalid'); + assert.equal(flags([2010, 1, 1, 24, 1]).overflow, 3, 'hour 24:01 invalid'); + + //minutes + assert.equal(flags([2010, 1, 1, 8, 15]).overflow, -1, 'minute valid'); + assert.equal(flags([2010, 1, 1, 8, 0]).overflow, -1, 'minute 0 valid'); + assert.equal(flags([2010, 1, 1, 8, -1]).overflow, 4, 'minute -1 invalid'); + assert.equal(flags([2010, 1, 1, 8, 60]).overflow, 4, 'minute 60 invalid'); + + //seconds + assert.equal(flags([2010, 1, 1, 8, 15, 12]).overflow, -1, 'second valid'); + assert.equal(flags([2010, 1, 1, 8, 15, 0]).overflow, -1, 'second 0 valid'); + assert.equal(flags([2010, 1, 1, 8, 15, -1]).overflow, 5, 'second -1 invalid'); + assert.equal(flags([2010, 1, 1, 8, 15, 60]).overflow, 5, 'second 60 invalid'); + + //milliseconds + assert.equal(flags([2010, 1, 1, 8, 15, 12, 345]).overflow, -1, 'millisecond valid'); + assert.equal(flags([2010, 1, 1, 8, 15, 12, 0]).overflow, -1, 'millisecond 0 valid'); + assert.equal(flags([2010, 1, 1, 8, 15, 12, -1]).overflow, 6, 'millisecond -1 invalid'); + assert.equal(flags([2010, 1, 1, 8, 15, 12, 1000]).overflow, 6, 'millisecond 1000 invalid'); + + // 24 hrs + assert.equal(flags([2010, 1, 1, 24, 0, 0, 0]).overflow, -1, '24:00:00.000 is fine'); + assert.equal(flags([2010, 1, 1, 24, 1, 0, 0]).overflow, 3, '24:01:00.000 is wrong hour'); + assert.equal(flags([2010, 1, 1, 24, 0, 1, 0]).overflow, 3, '24:00:01.000 is wrong hour'); + assert.equal(flags([2010, 1, 1, 24, 0, 0, 1]).overflow, 3, '24:00:00.001 is wrong hour'); +}); + +test('overflow without format', function (assert) { + //months + assert.equal(flags('2001-01', 'YYYY-MM').overflow, -1, 'month 1 valid'); + assert.equal(flags('2001-12', 'YYYY-MM').overflow, -1, 'month 12 valid'); + assert.equal(flags('2001-13', 'YYYY-MM').overflow, 1, 'month 13 invalid'); + + //days + assert.equal(flags('2010-01-16', 'YYYY-MM-DD').overflow, -1, 'date 16 valid'); + assert.equal(flags('2010-01-0', 'YYYY-MM-DD').overflow, 2, 'date 0 invalid'); + assert.equal(flags('2010-01-32', 'YYYY-MM-DD').overflow, 2, 'date 32 invalid'); + assert.equal(flags('2012-02-29', 'YYYY-MM-DD').overflow, -1, 'date leap year valid'); + assert.equal(flags('2010-02-29', 'YYYY-MM-DD').overflow, 2, 'date leap year invalid'); + + //days of the year + assert.equal(flags('2010 300', 'YYYY DDDD').overflow, -1, 'day 300 of year valid'); + assert.equal(flags('2010 365', 'YYYY DDDD').overflow, -1, 'day 365 of year valid'); + assert.equal(flags('2010 366', 'YYYY DDDD').overflow, 2, 'day 366 of year invalid'); + assert.equal(flags('2012 366', 'YYYY DDDD').overflow, -1, 'day 366 of leap year valid'); + assert.equal(flags('2012 367', 'YYYY DDDD').overflow, 2, 'day 367 of leap year invalid'); + + //hours + assert.equal(flags('08', 'HH').overflow, -1, 'hour valid'); + assert.equal(flags('00', 'HH').overflow, -1, 'hour 0 valid'); + assert.equal(flags('25', 'HH').overflow, 3, 'hour 25 invalid'); + assert.equal(flags('24:01', 'HH:mm').overflow, 3, 'hour 24:01 invalid'); + + //minutes + assert.equal(flags('08:15', 'HH:mm').overflow, -1, 'minute valid'); + assert.equal(flags('08:00', 'HH:mm').overflow, -1, 'minute 0 valid'); + assert.equal(flags('08:60', 'HH:mm').overflow, 4, 'minute 60 invalid'); + + //seconds + assert.equal(flags('08:15:12', 'HH:mm:ss').overflow, -1, 'second valid'); + assert.equal(flags('08:15:00', 'HH:mm:ss').overflow, -1, 'second 0 valid'); + assert.equal(flags('08:15:60', 'HH:mm:ss').overflow, 5, 'second 60 invalid'); + + //milliseconds + assert.equal(flags('08:15:12:345', 'HH:mm:ss:SSSS').overflow, -1, 'millisecond valid'); + assert.equal(flags('08:15:12:000', 'HH:mm:ss:SSSS').overflow, -1, 'millisecond 0 valid'); + + //this is OK because we don't match the last digit, so it's 100 ms + assert.equal(flags('08:15:12:1000', 'HH:mm:ss:SSSS').overflow, -1, 'millisecond 1000 actually valid'); +}); + +test('extra tokens', function (assert) { + assert.deepEqual(flags('1982-05-25', 'YYYY-MM-DD').unusedTokens, [], 'nothing extra'); + assert.deepEqual(flags('1982-05', 'YYYY-MM-DD').unusedTokens, ['DD'], 'extra formatting token'); + assert.deepEqual(flags('1982', 'YYYY-MM-DD').unusedTokens, ['MM', 'DD'], 'multiple extra formatting tokens'); + assert.deepEqual(flags('1982-05', 'YYYY-MM-').unusedTokens, [], 'extra non-formatting token'); + assert.deepEqual(flags('1982-05-', 'YYYY-MM-DD').unusedTokens, ['DD'], 'non-extra non-formatting token'); + assert.deepEqual(flags('1982 05 1982', 'YYYY-MM-DD').unusedTokens, [], 'different non-formatting token'); +}); + +test('extra tokens strict', function (assert) { + assert.deepEqual(flags('1982-05-25', 'YYYY-MM-DD', true).unusedTokens, [], 'nothing extra'); + assert.deepEqual(flags('1982-05', 'YYYY-MM-DD', true).unusedTokens, ['-', 'DD'], 'extra formatting token'); + assert.deepEqual(flags('1982', 'YYYY-MM-DD', true).unusedTokens, ['-', 'MM', '-', 'DD'], 'multiple extra formatting tokens'); + assert.deepEqual(flags('1982-05', 'YYYY-MM-', true).unusedTokens, ['-'], 'extra non-formatting token'); + assert.deepEqual(flags('1982-05-', 'YYYY-MM-DD', true).unusedTokens, ['DD'], 'non-extra non-formatting token'); + assert.deepEqual(flags('1982 05 1982', 'YYYY-MM-DD', true).unusedTokens, ['-', '-'], 'different non-formatting token'); +}); + +test('unused input', function (assert) { + assert.deepEqual(flags('1982-05-25', 'YYYY-MM-DD').unusedInput, [], 'normal input'); + assert.deepEqual(flags('1982-05-25 this is more stuff', 'YYYY-MM-DD').unusedInput, [' this is more stuff'], 'trailing nonsense'); + assert.deepEqual(flags('1982-05-25 09:30', 'YYYY-MM-DD').unusedInput, [' 09:30'], ['trailing legit-looking input']); + assert.deepEqual(flags('1982-05-25 some junk', 'YYYY-MM-DD [some junk]').unusedInput, [], 'junk that actually gets matched'); + assert.deepEqual(flags('stuff at beginning 1982-05-25', 'YYYY-MM-DD').unusedInput, ['stuff at beginning '], 'leading junk'); + assert.deepEqual(flags('junk 1982 more junk 05 yet more junk25', 'YYYY-MM-DD').unusedInput, ['junk ', ' more junk ', ' yet more junk'], 'interstitial junk'); +}); + +test('unused input strict', function (assert) { + assert.deepEqual(flags('1982-05-25', 'YYYY-MM-DD', true).unusedInput, [], 'normal input'); + assert.deepEqual(flags('1982-05-25 this is more stuff', 'YYYY-MM-DD', true).unusedInput, [' this is more stuff'], 'trailing nonsense'); + assert.deepEqual(flags('1982-05-25 09:30', 'YYYY-MM-DD', true).unusedInput, [' 09:30'], ['trailing legit-looking input']); + assert.deepEqual(flags('1982-05-25 some junk', 'YYYY-MM-DD [some junk]', true).unusedInput, [], 'junk that actually gets matched'); + assert.deepEqual(flags('stuff at beginning 1982-05-25', 'YYYY-MM-DD', true).unusedInput, ['stuff at beginning '], 'leading junk'); + assert.deepEqual(flags('junk 1982 more junk 05 yet more junk25', 'YYYY-MM-DD', true).unusedInput, ['junk ', ' more junk ', ' yet more junk'], 'interstitial junk'); +}); + +test('chars left over', function (assert) { + assert.equal(flags('1982-05-25', 'YYYY-MM-DD').charsLeftOver, 0, 'normal input'); + assert.equal(flags('1982-05-25 this is more stuff', 'YYYY-MM-DD').charsLeftOver, ' this is more stuff'.length, 'trailing nonsense'); + assert.equal(flags('1982-05-25 09:30', 'YYYY-MM-DD').charsLeftOver, ' 09:30'.length, 'trailing legit-looking input'); + assert.equal(flags('stuff at beginning 1982-05-25', 'YYYY-MM-DD').charsLeftOver, 'stuff at beginning '.length, 'leading junk'); + assert.equal(flags('1982 junk 05 more junk25', 'YYYY-MM-DD').charsLeftOver, [' junk ', ' more junk'].join('').length, 'interstitial junk'); + assert.equal(flags('stuff at beginning 1982 junk 05 more junk25', 'YYYY-MM-DD').charsLeftOver, ['stuff at beginning ', ' junk ', ' more junk'].join('').length, 'leading and interstitial junk'); +}); + +test('empty', function (assert) { + assert.equal(flags('1982-05-25', 'YYYY-MM-DD').empty, false, 'normal input'); + assert.equal(flags('nothing here', 'YYYY-MM-DD').empty, true, 'pure garbage'); + assert.equal(flags('junk but has the number 2000 in it', 'YYYY-MM-DD').empty, false, 'only mostly garbage'); + assert.equal(flags('', 'YYYY-MM-DD').empty, true, 'empty string'); + assert.equal(flags('', 'YYYY-MM-DD').empty, true, 'blank string'); +}); + +test('null', function (assert) { + assert.equal(flags('1982-05-25', 'YYYY-MM-DD').nullInput, false, 'normal input'); + assert.equal(flags(null).nullInput, true, 'just null'); + assert.equal(flags(null, 'YYYY-MM-DD').nullInput, true, 'null with format'); +}); + +test('invalid month', function (assert) { + assert.equal(flags('1982 May', 'YYYY MMMM').invalidMonth, null, 'normal input'); + assert.equal(flags('1982 Laser', 'YYYY MMMM').invalidMonth, 'Laser', 'bad month name'); +}); + +test('empty format array', function (assert) { + assert.equal(flags('1982 May', ['YYYY MMM']).invalidFormat, false, 'empty format array'); + assert.equal(flags('1982 May', []).invalidFormat, true, 'empty format array'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +var symbolMap = { + '1': '!', + '2': '@', + '3': '#', + '4': '$', + '5': '%', + '6': '^', + '7': '&', + '8': '*', + '9': '(', + '0': ')' + }; +var numberMap = { + '!': '1', + '@': '2', + '#': '3', + '$': '4', + '%': '5', + '^': '6', + '&': '7', + '*': '8', + '(': '9', + ')': '0' + }; + +module$1('preparse and postformat', { + setup: function () { + moment.locale('symbol', { + 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]; + }); + } + }); + }, + teardown: function () { + moment.defineLocale('symbol', null); + } +}); + +test('transform', function (assert) { + assert.equal(moment.utc('@)!@-)*-@&', 'YYYY-MM-DD').unix(), 1346025600, 'preparse string + format'); + assert.equal(moment.utc('@)!@-)*-@&').unix(), 1346025600, 'preparse ISO8601 string'); + assert.equal(moment.unix(1346025600).utc().format('YYYY-MM-DD'), '@)!@-)*-@&', 'postformat'); +}); + +test('transform from', function (assert) { + var start = moment([2007, 1, 28]); + + assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '@ minutes', 'postformat should work on moment.fn.from'); + assert.equal(moment().add(6, 'd').fromNow(true), '^ days', 'postformat should work on moment.fn.fromNow'); + assert.equal(moment.duration(10, 'h').humanize(), '!) hours', 'postformat should work on moment.duration.fn.humanize'); +}); + +test('calendar day', function (assert) { + var a = moment().hours(12).minutes(0).seconds(0); + + assert.equal(moment(a).calendar(), 'Today at !@:)) PM', 'today at the same time'); + assert.equal(moment(a).add({m: 25}).calendar(), 'Today at !@:@% PM', 'Now plus 25 min'); + assert.equal(moment(a).add({h: 1}).calendar(), 'Today at !:)) PM', 'Now plus 1 hour'); + assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at !@:)) PM', 'tomorrow at the same time'); + assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at !!:)) AM', 'Now minus 1 hour'); + assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at !@:)) PM', 'yesterday at the same time'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('quarter'); + +test('library quarter getter', function (assert) { + assert.equal(moment([1985, 1, 4]).quarter(), 1, 'Feb 4 1985 is Q1'); + assert.equal(moment([2029, 8, 18]).quarter(), 3, 'Sep 18 2029 is Q3'); + assert.equal(moment([2013, 3, 24]).quarter(), 2, 'Apr 24 2013 is Q2'); + assert.equal(moment([2015, 2, 5]).quarter(), 1, 'Mar 5 2015 is Q1'); + assert.equal(moment([1970, 0, 2]).quarter(), 1, 'Jan 2 1970 is Q1'); + assert.equal(moment([2001, 11, 12]).quarter(), 4, 'Dec 12 2001 is Q4'); + assert.equal(moment([2000, 0, 2]).quarter(), 1, 'Jan 2 2000 is Q1'); +}); + +test('quarter setter singular', function (assert) { + var m = moment([2014, 4, 11]); + assert.equal(m.quarter(2).month(), 4, 'set same quarter'); + assert.equal(m.quarter(3).month(), 7, 'set 3rd quarter'); + assert.equal(m.quarter(1).month(), 1, 'set 1st quarter'); + assert.equal(m.quarter(4).month(), 10, 'set 4th quarter'); +}); + +test('quarter setter plural', function (assert) { + var m = moment([2014, 4, 11]); + assert.equal(m.quarters(2).month(), 4, 'set same quarter'); + assert.equal(m.quarters(3).month(), 7, 'set 3rd quarter'); + assert.equal(m.quarters(1).month(), 1, 'set 1st quarter'); + assert.equal(m.quarters(4).month(), 10, 'set 4th quarter'); +}); + +test('quarter setter programmatic', function (assert) { + var m = moment([2014, 4, 11]); + assert.equal(m.set('quarter', 2).month(), 4, 'set same quarter'); + assert.equal(m.set('quarter', 3).month(), 7, 'set 3rd quarter'); + assert.equal(m.set('quarter', 1).month(), 1, 'set 1st quarter'); + assert.equal(m.set('quarter', 4).month(), 10, 'set 4th quarter'); +}); + +test('quarter setter programmatic plural', function (assert) { + var m = moment([2014, 4, 11]); + assert.equal(m.set('quarters', 2).month(), 4, 'set same quarter'); + assert.equal(m.set('quarters', 3).month(), 7, 'set 3rd quarter'); + assert.equal(m.set('quarters', 1).month(), 1, 'set 1st quarter'); + assert.equal(m.set('quarters', 4).month(), 10, 'set 4th quarter'); +}); + +test('quarter setter programmatic abbr', function (assert) { + var m = moment([2014, 4, 11]); + assert.equal(m.set('Q', 2).month(), 4, 'set same quarter'); + assert.equal(m.set('Q', 3).month(), 7, 'set 3rd quarter'); + assert.equal(m.set('Q', 1).month(), 1, 'set 1st quarter'); + assert.equal(m.set('Q', 4).month(), 10, 'set 4th quarter'); +}); + +test('quarter setter only month changes', function (assert) { + var m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(4); + assert.equal(m.year(), 2014, 'keep year'); + assert.equal(m.month(), 10, 'set month'); + assert.equal(m.date(), 11, 'keep date'); + assert.equal(m.hour(), 1, 'keep hour'); + assert.equal(m.minute(), 2, 'keep minutes'); + assert.equal(m.second(), 3, 'keep seconds'); + assert.equal(m.millisecond(), 4, 'keep milliseconds'); +}); + +test('quarter setter bubble to next year', function (assert) { + var m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(7); + assert.equal(m.year(), 2015, 'year bubbled'); + assert.equal(m.month(), 7, 'set month'); + assert.equal(m.date(), 11, 'keep date'); + assert.equal(m.hour(), 1, 'keep hour'); + assert.equal(m.minute(), 2, 'keep minutes'); + assert.equal(m.second(), 3, 'keep seconds'); + assert.equal(m.millisecond(), 4, 'keep milliseconds'); +}); + +test('quarter diff', function (assert) { + assert.equal(moment('2014-01-01').diff(moment('2014-04-01'), 'quarter'), + -1, 'diff -1 quarter'); + assert.equal(moment('2014-04-01').diff(moment('2014-01-01'), 'quarter'), + 1, 'diff 1 quarter'); + assert.equal(moment('2014-05-01').diff(moment('2014-01-01'), 'quarter'), + 1, 'diff 1 quarter'); + assert.ok(Math.abs((4 / 3) - moment('2014-05-01').diff( + moment('2014-01-01'), 'quarter', true)) < 0.00001, + 'diff 1 1/3 quarter'); + assert.equal(moment('2015-01-01').diff(moment('2014-01-01'), 'quarter'), + 4, 'diff 4 quarters'); +}); + +test('quarter setter bubble to previous year', function (assert) { + var m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(-3); + assert.equal(m.year(), 2013, 'year bubbled'); + assert.equal(m.month(), 1, 'set month'); + assert.equal(m.date(), 11, 'keep date'); + assert.equal(m.hour(), 1, 'keep hour'); + assert.equal(m.minute(), 2, 'keep minutes'); + assert.equal(m.second(), 3, 'keep seconds'); + assert.equal(m.millisecond(), 4, 'keep milliseconds'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('relative time'); + +test('default thresholds fromNow', function (assert) { + var a = moment(); + + // Seconds to minutes threshold + a.subtract(44, 'seconds'); + assert.equal(a.fromNow(), 'a few seconds ago', 'Below default seconds to minutes threshold'); + a.subtract(1, 'seconds'); + assert.equal(a.fromNow(), 'a minute ago', 'Above default seconds to minutes threshold'); + + // Minutes to hours threshold + a = moment(); + a.subtract(44, 'minutes'); + assert.equal(a.fromNow(), '44 minutes ago', 'Below default minute to hour threshold'); + a.subtract(1, 'minutes'); + assert.equal(a.fromNow(), 'an hour ago', 'Above default minute to hour threshold'); + + // Hours to days threshold + a = moment(); + a.subtract(21, 'hours'); + assert.equal(a.fromNow(), '21 hours ago', 'Below default hours to day threshold'); + a.subtract(1, 'hours'); + assert.equal(a.fromNow(), 'a day ago', 'Above default hours to day threshold'); + + // Days to month threshold + a = moment(); + a.subtract(25, 'days'); + assert.equal(a.fromNow(), '25 days ago', 'Below default days to month (singular) threshold'); + a.subtract(1, 'days'); + assert.equal(a.fromNow(), 'a month ago', 'Above default days to month (singular) threshold'); + + // months to year threshold + a = moment(); + a.subtract(10, 'months'); + assert.equal(a.fromNow(), '10 months ago', 'Below default days to years threshold'); + a.subtract(1, 'month'); + assert.equal(a.fromNow(), 'a year ago', 'Above default days to years threshold'); +}); + +test('default thresholds toNow', function (assert) { + var a = moment(); + + // Seconds to minutes threshold + a.subtract(44, 'seconds'); + assert.equal(a.toNow(), 'in a few seconds', 'Below default seconds to minutes threshold'); + a.subtract(1, 'seconds'); + assert.equal(a.toNow(), 'in a minute', 'Above default seconds to minutes threshold'); + + // Minutes to hours threshold + a = moment(); + a.subtract(44, 'minutes'); + assert.equal(a.toNow(), 'in 44 minutes', 'Below default minute to hour threshold'); + a.subtract(1, 'minutes'); + assert.equal(a.toNow(), 'in an hour', 'Above default minute to hour threshold'); + + // Hours to days threshold + a = moment(); + a.subtract(21, 'hours'); + assert.equal(a.toNow(), 'in 21 hours', 'Below default hours to day threshold'); + a.subtract(1, 'hours'); + assert.equal(a.toNow(), 'in a day', 'Above default hours to day threshold'); + + // Days to month threshold + a = moment(); + a.subtract(25, 'days'); + assert.equal(a.toNow(), 'in 25 days', 'Below default days to month (singular) threshold'); + a.subtract(1, 'days'); + assert.equal(a.toNow(), 'in a month', 'Above default days to month (singular) threshold'); + + // months to year threshold + a = moment(); + a.subtract(10, 'months'); + assert.equal(a.toNow(), 'in 10 months', 'Below default days to years threshold'); + a.subtract(1, 'month'); + assert.equal(a.toNow(), 'in a year', 'Above default days to years threshold'); +}); + +test('custom thresholds', function (assert) { + var a; + + // Seconds to minute threshold, under 30 + moment.relativeTimeThreshold('s', 25); + + a = moment(); + a.subtract(24, 'seconds'); + assert.equal(a.fromNow(), 'a few seconds ago', 'Below custom seconds to minute threshold, s < 30'); + a.subtract(1, 'seconds'); + assert.equal(a.fromNow(), 'a minute ago', 'Above custom seconds to minute threshold, s < 30'); + + // Seconds to minutes threshold + moment.relativeTimeThreshold('s', 55); + + a = moment(); + a.subtract(54, 'seconds'); + assert.equal(a.fromNow(), 'a few seconds ago', 'Below custom seconds to minutes threshold'); + a.subtract(1, 'seconds'); + assert.equal(a.fromNow(), 'a minute ago', 'Above custom seconds to minutes threshold'); + + moment.relativeTimeThreshold('s', 45); + + // A few seconds to seconds threshold + moment.relativeTimeThreshold('ss', 3); + + a = moment(); + a.subtract(3, 'seconds'); + assert.equal(a.fromNow(), 'a few seconds ago', 'Below custom a few seconds to seconds threshold'); + a.subtract(1, 'seconds'); + assert.equal(a.fromNow(), '4 seconds ago', 'Above custom a few seconds to seconds threshold'); + + moment.relativeTimeThreshold('ss', 44); + + // Minutes to hours threshold + moment.relativeTimeThreshold('m', 55); + a = moment(); + a.subtract(54, 'minutes'); + assert.equal(a.fromNow(), '54 minutes ago', 'Below custom minutes to hours threshold'); + a.subtract(1, 'minutes'); + assert.equal(a.fromNow(), 'an hour ago', 'Above custom minutes to hours threshold'); + moment.relativeTimeThreshold('m', 45); + + // Hours to days threshold + moment.relativeTimeThreshold('h', 24); + a = moment(); + a.subtract(23, 'hours'); + assert.equal(a.fromNow(), '23 hours ago', 'Below custom hours to days threshold'); + a.subtract(1, 'hours'); + assert.equal(a.fromNow(), 'a day ago', 'Above custom hours to days threshold'); + moment.relativeTimeThreshold('h', 22); + + // Days to month threshold + moment.relativeTimeThreshold('d', 28); + a = moment(); + a.subtract(27, 'days'); + assert.equal(a.fromNow(), '27 days ago', 'Below custom days to month (singular) threshold'); + a.subtract(1, 'days'); + assert.equal(a.fromNow(), 'a month ago', 'Above custom days to month (singular) threshold'); + moment.relativeTimeThreshold('d', 26); + + // months to years threshold + moment.relativeTimeThreshold('M', 9); + a = moment(); + a.subtract(8, 'months'); + assert.equal(a.fromNow(), '8 months ago', 'Below custom days to years threshold'); + a.subtract(1, 'months'); + assert.equal(a.fromNow(), 'a year ago', 'Above custom days to years threshold'); + moment.relativeTimeThreshold('M', 11); +}); + +test('custom rounding', function (assert) { + var roundingDefault = moment.relativeTimeRounding(); + + // Round relative time evaluation down + moment.relativeTimeRounding(Math.floor); + + moment.relativeTimeThreshold('s', 60); + moment.relativeTimeThreshold('m', 60); + moment.relativeTimeThreshold('h', 24); + moment.relativeTimeThreshold('d', 27); + moment.relativeTimeThreshold('M', 12); + + var a = moment.utc(); + a.subtract({minutes: 59, seconds: 59}); + assert.equal(a.toNow(), 'in 59 minutes', 'Round down towards the nearest minute'); + + a = moment.utc(); + a.subtract({hours: 23, minutes: 59, seconds: 59}); + assert.equal(a.toNow(), 'in 23 hours', 'Round down towards the nearest hour'); + + a = moment.utc(); + a.subtract({days: 26, hours: 23, minutes: 59}); + assert.equal(a.toNow(), 'in 26 days', 'Round down towards the nearest day (just under)'); + + a = moment.utc(); + a.subtract({days: 27}); + assert.equal(a.toNow(), 'in a month', 'Round down towards the nearest day (just over)'); + + a = moment.utc(); + a.subtract({days: 364}); + assert.equal(a.toNow(), 'in 11 months', 'Round down towards the nearest month'); + + a = moment.utc(); + a.subtract({years: 1, days: 364}); + assert.equal(a.toNow(), 'in a year', 'Round down towards the nearest year'); + + // Do not round relative time evaluation + var retainValue = function (value) { + return value.toFixed(3); + }; + moment.relativeTimeRounding(retainValue); + + a = moment.utc(); + a.subtract({hours: 39}); + assert.equal(a.toNow(), 'in 1.625 days', 'Round down towards the nearest year'); + + // Restore defaults + moment.relativeTimeThreshold('s', 45); + moment.relativeTimeThreshold('m', 45); + moment.relativeTimeThreshold('h', 22); + moment.relativeTimeThreshold('d', 26); + moment.relativeTimeThreshold('M', 11); + moment.relativeTimeRounding(roundingDefault); +}); + +test('retrieve rounding settings', function (assert) { + moment.relativeTimeRounding(Math.round); + var roundingFunction = moment.relativeTimeRounding(); + + assert.equal(roundingFunction, Math.round, 'Can retrieve rounding setting'); +}); + +test('retrieve threshold settings', function (assert) { + moment.relativeTimeThreshold('m', 45); + var minuteThreshold = moment.relativeTimeThreshold('m'); + + assert.equal(minuteThreshold, 45, 'Can retrieve minute setting'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('start and end of units'); + +test('start of year', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('year'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('years'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('y'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 0, 'strip out the month'); + assert.equal(m.date(), 1, 'strip out the day'); + assert.equal(m.hours(), 0, 'strip out the hours'); + assert.equal(m.minutes(), 0, 'strip out the minutes'); + assert.equal(m.seconds(), 0, 'strip out the seconds'); + assert.equal(m.milliseconds(), 0, 'strip out the milliseconds'); +}); + +test('end of year', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('year'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('years'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('y'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 11, 'set the month'); + assert.equal(m.date(), 31, 'set the day'); + assert.equal(m.hours(), 23, 'set the hours'); + assert.equal(m.minutes(), 59, 'set the minutes'); + assert.equal(m.seconds(), 59, 'set the seconds'); + assert.equal(m.milliseconds(), 999, 'set the seconds'); +}); + +test('start of quarter', function (assert) { + var m = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('quarter'), + ms = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('quarters'), + ma = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('Q'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.quarter(), 2, 'keep the quarter'); + assert.equal(m.month(), 3, 'strip out the month'); + assert.equal(m.date(), 1, 'strip out the day'); + assert.equal(m.hours(), 0, 'strip out the hours'); + assert.equal(m.minutes(), 0, 'strip out the minutes'); + assert.equal(m.seconds(), 0, 'strip out the seconds'); + assert.equal(m.milliseconds(), 0, 'strip out the milliseconds'); +}); + +test('end of quarter', function (assert) { + var m = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('quarter'), + ms = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('quarters'), + ma = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('Q'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.quarter(), 2, 'keep the quarter'); + assert.equal(m.month(), 5, 'set the month'); + assert.equal(m.date(), 30, 'set the day'); + assert.equal(m.hours(), 23, 'set the hours'); + assert.equal(m.minutes(), 59, 'set the minutes'); + assert.equal(m.seconds(), 59, 'set the seconds'); + assert.equal(m.milliseconds(), 999, 'set the seconds'); +}); + +test('start of month', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('month'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('months'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('M'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 1, 'strip out the day'); + assert.equal(m.hours(), 0, 'strip out the hours'); + assert.equal(m.minutes(), 0, 'strip out the minutes'); + assert.equal(m.seconds(), 0, 'strip out the seconds'); + assert.equal(m.milliseconds(), 0, 'strip out the milliseconds'); +}); + +test('end of month', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('month'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('months'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('M'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 28, 'set the day'); + assert.equal(m.hours(), 23, 'set the hours'); + assert.equal(m.minutes(), 59, 'set the minutes'); + assert.equal(m.seconds(), 59, 'set the seconds'); + assert.equal(m.milliseconds(), 999, 'set the seconds'); +}); + +test('start of week', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('week'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('weeks'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('w'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 0, 'rolls back to January'); + assert.equal(m.day(), 0, 'set day of week'); + assert.equal(m.date(), 30, 'set correct date'); + assert.equal(m.hours(), 0, 'strip out the hours'); + assert.equal(m.minutes(), 0, 'strip out the minutes'); + assert.equal(m.seconds(), 0, 'strip out the seconds'); + assert.equal(m.milliseconds(), 0, 'strip out the milliseconds'); +}); + +test('end of week', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('week'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('weeks'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('weeks'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.day(), 6, 'set the day of the week'); + assert.equal(m.date(), 5, 'set the day'); + assert.equal(m.hours(), 23, 'set the hours'); + assert.equal(m.minutes(), 59, 'set the minutes'); + assert.equal(m.seconds(), 59, 'set the seconds'); + assert.equal(m.milliseconds(), 999, 'set the seconds'); +}); + +test('start of iso-week', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('isoWeek'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('isoWeeks'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('W'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 0, 'rollback to January'); + assert.equal(m.isoWeekday(), 1, 'set day of iso-week'); + assert.equal(m.date(), 31, 'set correct date'); + assert.equal(m.hours(), 0, 'strip out the hours'); + assert.equal(m.minutes(), 0, 'strip out the minutes'); + assert.equal(m.seconds(), 0, 'strip out the seconds'); + assert.equal(m.milliseconds(), 0, 'strip out the milliseconds'); +}); + +test('end of iso-week', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('isoWeek'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('isoWeeks'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('W'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.isoWeekday(), 7, 'set the day of the week'); + assert.equal(m.date(), 6, 'set the day'); + assert.equal(m.hours(), 23, 'set the hours'); + assert.equal(m.minutes(), 59, 'set the minutes'); + assert.equal(m.seconds(), 59, 'set the seconds'); + assert.equal(m.milliseconds(), 999, 'set the seconds'); +}); + +test('start of day', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('day'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('days'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('d'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 2, 'keep the day'); + assert.equal(m.hours(), 0, 'strip out the hours'); + assert.equal(m.minutes(), 0, 'strip out the minutes'); + assert.equal(m.seconds(), 0, 'strip out the seconds'); + assert.equal(m.milliseconds(), 0, 'strip out the milliseconds'); +}); + +test('end of day', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('day'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('days'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('d'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 2, 'keep the day'); + assert.equal(m.hours(), 23, 'set the hours'); + assert.equal(m.minutes(), 59, 'set the minutes'); + assert.equal(m.seconds(), 59, 'set the seconds'); + assert.equal(m.milliseconds(), 999, 'set the seconds'); +}); + +test('start of date', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('date'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('dates'); + + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 2, 'keep the day'); + assert.equal(m.hours(), 0, 'strip out the hours'); + assert.equal(m.minutes(), 0, 'strip out the minutes'); + assert.equal(m.seconds(), 0, 'strip out the seconds'); + assert.equal(m.milliseconds(), 0, 'strip out the milliseconds'); +}); + +test('end of date', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('date'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('dates'); + + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 2, 'keep the day'); + assert.equal(m.hours(), 23, 'set the hours'); + assert.equal(m.minutes(), 59, 'set the minutes'); + assert.equal(m.seconds(), 59, 'set the seconds'); + assert.equal(m.milliseconds(), 999, 'set the seconds'); +}); + + +test('start of hour', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('hour'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('hours'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('h'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 2, 'keep the day'); + assert.equal(m.hours(), 3, 'keep the hours'); + assert.equal(m.minutes(), 0, 'strip out the minutes'); + assert.equal(m.seconds(), 0, 'strip out the seconds'); + assert.equal(m.milliseconds(), 0, 'strip out the milliseconds'); +}); + +test('end of hour', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('hour'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('hours'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('h'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 2, 'keep the day'); + assert.equal(m.hours(), 3, 'keep the hours'); + assert.equal(m.minutes(), 59, 'set the minutes'); + assert.equal(m.seconds(), 59, 'set the seconds'); + assert.equal(m.milliseconds(), 999, 'set the seconds'); +}); + +test('start of minute', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('minute'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('minutes'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('m'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 2, 'keep the day'); + assert.equal(m.hours(), 3, 'keep the hours'); + assert.equal(m.minutes(), 4, 'keep the minutes'); + assert.equal(m.seconds(), 0, 'strip out the seconds'); + assert.equal(m.milliseconds(), 0, 'strip out the milliseconds'); +}); + +test('end of minute', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('minute'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('minutes'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('m'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 2, 'keep the day'); + assert.equal(m.hours(), 3, 'keep the hours'); + assert.equal(m.minutes(), 4, 'keep the minutes'); + assert.equal(m.seconds(), 59, 'set the seconds'); + assert.equal(m.milliseconds(), 999, 'set the seconds'); +}); + +test('start of second', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('second'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('seconds'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('s'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 2, 'keep the day'); + assert.equal(m.hours(), 3, 'keep the hours'); + assert.equal(m.minutes(), 4, 'keep the minutes'); + assert.equal(m.seconds(), 5, 'keep the the seconds'); + assert.equal(m.milliseconds(), 0, 'strip out the milliseconds'); +}); + +test('end of second', function (assert) { + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('second'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('seconds'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('s'); + assert.equal(+m, +ms, 'Plural or singular should work'); + assert.equal(+m, +ma, 'Full or abbreviated should work'); + assert.equal(m.year(), 2011, 'keep the year'); + assert.equal(m.month(), 1, 'keep the month'); + assert.equal(m.date(), 2, 'keep the day'); + assert.equal(m.hours(), 3, 'keep the hours'); + assert.equal(m.minutes(), 4, 'keep the minutes'); + assert.equal(m.seconds(), 5, 'keep the seconds'); + assert.equal(m.milliseconds(), 999, 'set the seconds'); +}); + +test('startOf across DST +1', function (assert) { + var oldUpdateOffset = moment.updateOffset, + // Based on a real story somewhere in America/Los_Angeles + dstAt = moment('2014-03-09T02:00:00-08:00').parseZone(), + m; + + moment.updateOffset = function (mom, keepTime) { + if (mom.isBefore(dstAt)) { + mom.utcOffset(-8, keepTime); + } else { + mom.utcOffset(-7, keepTime); + } + }; + + m = moment('2014-03-15T00:00:00-07:00').parseZone(); + m.startOf('y'); + assert.equal(m.format(), '2014-01-01T00:00:00-08:00', 'startOf(\'year\') across +1'); + + m = moment('2014-03-15T00:00:00-07:00').parseZone(); + m.startOf('M'); + assert.equal(m.format(), '2014-03-01T00:00:00-08:00', 'startOf(\'month\') across +1'); + + m = moment('2014-03-09T09:00:00-07:00').parseZone(); + m.startOf('d'); + assert.equal(m.format(), '2014-03-09T00:00:00-08:00', 'startOf(\'day\') across +1'); + + m = moment('2014-03-09T03:05:00-07:00').parseZone(); + m.startOf('h'); + assert.equal(m.format(), '2014-03-09T03:00:00-07:00', 'startOf(\'hour\') after +1'); + + m = moment('2014-03-09T01:35:00-08:00').parseZone(); + m.startOf('h'); + assert.equal(m.format(), '2014-03-09T01:00:00-08:00', 'startOf(\'hour\') before +1'); + + // There is no such time as 2:30-7 to try startOf('hour') across that + + moment.updateOffset = oldUpdateOffset; +}); + +test('startOf across DST -1', function (assert) { + var oldUpdateOffset = moment.updateOffset, + // Based on a real story somewhere in America/Los_Angeles + dstAt = moment('2014-11-02T02:00:00-07:00').parseZone(), + m; + + moment.updateOffset = function (mom, keepTime) { + if (mom.isBefore(dstAt)) { + mom.utcOffset(-7, keepTime); + } else { + mom.utcOffset(-8, keepTime); + } + }; + + m = moment('2014-11-15T00:00:00-08:00').parseZone(); + m.startOf('y'); + assert.equal(m.format(), '2014-01-01T00:00:00-07:00', 'startOf(\'year\') across -1'); + + m = moment('2014-11-15T00:00:00-08:00').parseZone(); + m.startOf('M'); + assert.equal(m.format(), '2014-11-01T00:00:00-07:00', 'startOf(\'month\') across -1'); + + m = moment('2014-11-02T09:00:00-08:00').parseZone(); + m.startOf('d'); + assert.equal(m.format(), '2014-11-02T00:00:00-07:00', 'startOf(\'day\') across -1'); + + // note that utc offset is -8 + m = moment('2014-11-02T01:30:00-08:00').parseZone(); + m.startOf('h'); + assert.equal(m.format(), '2014-11-02T01:00:00-08:00', 'startOf(\'hour\') after +1'); + + // note that utc offset is -7 + m = moment('2014-11-02T01:30:00-07:00').parseZone(); + m.startOf('h'); + assert.equal(m.format(), '2014-11-02T01:00:00-07:00', 'startOf(\'hour\') before +1'); + + moment.updateOffset = oldUpdateOffset; +}); + +test('endOf millisecond and no-arg', function (assert) { + var m = moment(); + assert.equal(+m, +m.clone().endOf(), 'endOf without argument should change time'); + assert.equal(+m, +m.clone().endOf('ms'), 'endOf with ms argument should change time'); + assert.equal(+m, +m.clone().endOf('millisecond'), 'endOf with millisecond argument should change time'); + assert.equal(+m, +m.clone().endOf('milliseconds'), 'endOf with milliseconds argument should change time'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('string prototype'); + +test('string prototype overrides call', function (assert) { + var prior = String.prototype.call, b; + String.prototype.call = function () { + return null; + }; + + b = moment(new Date(2011, 7, 28, 15, 25, 50, 125)); + assert.equal(b.format('MMMM Do YYYY, h:mm a'), 'August 28th 2011, 3:25 pm'); + + String.prototype.call = prior; +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('to type'); + +test('toObject', function (assert) { + var expected = { + years:2010, + months:3, + date:5, + hours:15, + minutes:10, + seconds:3, + milliseconds:123 + }; + assert.deepEqual(moment(expected).toObject(), expected, 'toObject invalid'); +}); + +test('toArray', function (assert) { + var expected = [2014, 11, 26, 11, 46, 58, 17]; + assert.deepEqual(moment(expected).toArray(), expected, 'toArray invalid'); +}); + +test('toDate returns a copy of the internal date', function (assert) { + var m = moment(); + var d = m.toDate(); + m.year(0); + assert.notEqual(d, m.toDate()); +}); + +test('toJSON', function (assert) { + if (Date.prototype.toISOString) { + var expected = new Date().toISOString(); + assert.deepEqual(moment(expected).toJSON(), expected, 'toJSON invalid'); + } else { + // IE8 + expect(0); + } +}); + +test('toJSON works when moment is frozen', function (assert) { + if (Date.prototype.toISOString) { + var expected = new Date().toISOString(); + var m = moment(expected); + if (Object.freeze != null) { + Object.freeze(m); + } + assert.deepEqual(m.toJSON(), expected, 'toJSON when frozen invalid'); + } else { + // IE8 + expect(0); + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('utc'); + +test('utc and local', function (assert) { + var m = moment(Date.UTC(2011, 1, 2, 3, 4, 5, 6)), offset, expected; + m.utc(); + // utc + assert.equal(m.date(), 2, 'the day should be correct for utc'); + assert.equal(m.day(), 3, 'the date should be correct for utc'); + assert.equal(m.hours(), 3, 'the hours should be correct for utc'); + + // local + m.local(); + if (m.utcOffset() < -180) { + assert.equal(m.date(), 1, 'the date should be correct for local'); + assert.equal(m.day(), 2, 'the day should be correct for local'); + } else { + assert.equal(m.date(), 2, 'the date should be correct for local'); + assert.equal(m.day(), 3, 'the day should be correct for local'); + } + offset = Math.floor(m.utcOffset() / 60); + expected = (24 + 3 + offset) % 24; + assert.equal(m.hours(), expected, 'the hours (' + m.hours() + ') should be correct for local'); + assert.equal(moment().utc().utcOffset(), 0, 'timezone in utc should always be zero'); +}); + +test('creating with utc and no arguments', function (assert) { + var startOfTest = new Date().valueOf(), + momentDefaultUtcTime = moment.utc().valueOf(), + afterMomentCreationTime = new Date().valueOf(); + + assert.ok(startOfTest <= momentDefaultUtcTime, 'moment UTC default time should be now, not in the past'); + assert.ok(momentDefaultUtcTime <= afterMomentCreationTime, 'moment UTC default time should be now, not in the future'); +}); + +test('creating with utc and a date parameter array', function (assert) { + var m = moment.utc([2011, 1, 2, 3, 4, 5, 6]); + assert.equal(m.date(), 2, 'the day should be correct for utc array'); + assert.equal(m.hours(), 3, 'the hours should be correct for utc array'); + + m = moment.utc('2011-02-02 3:04:05', 'YYYY-MM-DD HH:mm:ss'); + assert.equal(m.date(), 2, 'the day should be correct for utc parsing format'); + assert.equal(m.hours(), 3, 'the hours should be correct for utc parsing format'); + + m = moment.utc('2011-02-02T03:04:05+00:00'); + assert.equal(m.date(), 2, 'the day should be correct for utc parsing iso'); + assert.equal(m.hours(), 3, 'the hours should be correct for utc parsing iso'); +}); + +test('creating with utc without timezone', function (assert) { + var m = moment.utc('2012-01-02T08:20:00'); + assert.equal(m.date(), 2, 'the day should be correct for utc parse without timezone'); + assert.equal(m.hours(), 8, 'the hours should be correct for utc parse without timezone'); + + m = moment.utc('2012-01-02T08:20:00+09:00'); + assert.equal(m.date(), 1, 'the day should be correct for utc parse with timezone'); + assert.equal(m.hours(), 23, 'the hours should be correct for utc parse with timezone'); +}); + +test('cloning with utc offset', function (assert) { + var m = moment.utc('2012-01-02T08:20:00'); + assert.equal(moment.utc(m)._isUTC, true, 'the local offset should be converted to UTC'); + assert.equal(moment.utc(m.clone().utc())._isUTC, true, 'the local offset should stay in UTC'); + + m.utcOffset(120); + assert.equal(moment.utc(m)._isUTC, true, 'the explicit utc offset should stay in UTC'); + assert.equal(moment.utc(m).utcOffset(), 0, 'the explicit utc offset should have an offset of 0'); +}); + +test('weekday with utc', function (assert) { + assert.equal( + moment('2013-09-15T00:00:00Z').utc().weekday(), // first minute of the day + moment('2013-09-15T23:59:00Z').utc().weekday(), // last minute of the day + 'a UTC-moment\'s .weekday() should not be affected by the local timezone' + ); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('utc offset'); + +test('setter / getter blackbox', function (assert) { + var m = moment([2010]); + + assert.equal(m.clone().utcOffset(0).utcOffset(), 0, 'utcOffset 0'); + + assert.equal(m.clone().utcOffset(1).utcOffset(), 60, 'utcOffset 1 is 60'); + assert.equal(m.clone().utcOffset(60).utcOffset(), 60, 'utcOffset 60'); + assert.equal(m.clone().utcOffset('+01:00').utcOffset(), 60, 'utcOffset +01:00 is 60'); + assert.equal(m.clone().utcOffset('+0100').utcOffset(), 60, 'utcOffset +0100 is 60'); + + assert.equal(m.clone().utcOffset(-1).utcOffset(), -60, 'utcOffset -1 is -60'); + assert.equal(m.clone().utcOffset(-60).utcOffset(), -60, 'utcOffset -60'); + assert.equal(m.clone().utcOffset('-01:00').utcOffset(), -60, 'utcOffset -01:00 is -60'); + assert.equal(m.clone().utcOffset('-0100').utcOffset(), -60, 'utcOffset -0100 is -60'); + + assert.equal(m.clone().utcOffset(1.5).utcOffset(), 90, 'utcOffset 1.5 is 90'); + assert.equal(m.clone().utcOffset(90).utcOffset(), 90, 'utcOffset 1.5 is 90'); + assert.equal(m.clone().utcOffset('+01:30').utcOffset(), 90, 'utcOffset +01:30 is 90'); + assert.equal(m.clone().utcOffset('+0130').utcOffset(), 90, 'utcOffset +0130 is 90'); + + assert.equal(m.clone().utcOffset(-1.5).utcOffset(), -90, 'utcOffset -1.5'); + assert.equal(m.clone().utcOffset(-90).utcOffset(), -90, 'utcOffset -90'); + assert.equal(m.clone().utcOffset('-01:30').utcOffset(), -90, 'utcOffset +01:30 is 90'); + assert.equal(m.clone().utcOffset('-0130').utcOffset(), -90, 'utcOffset +0130 is 90'); + assert.equal(m.clone().utcOffset('+00:10').utcOffset(), 10, 'utcOffset +00:10 is 10'); + assert.equal(m.clone().utcOffset('-00:10').utcOffset(), -10, 'utcOffset +00:10 is 10'); + assert.equal(m.clone().utcOffset('+0010').utcOffset(), 10, 'utcOffset +0010 is 10'); + assert.equal(m.clone().utcOffset('-0010').utcOffset(), -10, 'utcOffset +0010 is 10'); +}); + +test('utcOffset shorthand hours -> minutes', function (assert) { + var i; + for (i = -15; i <= 15; ++i) { + assert.equal(moment().utcOffset(i).utcOffset(), i * 60, + '' + i + ' -> ' + i * 60); + } + assert.equal(moment().utcOffset(-16).utcOffset(), -16, '-16 -> -16'); + assert.equal(moment().utcOffset(16).utcOffset(), 16, '16 -> 16'); +}); + +test('isLocal, isUtc, isUtcOffset', function (assert) { + assert.ok(moment().isLocal(), 'moment() creates objects in local time'); + assert.ok(!moment.utc().isLocal(), 'moment.utc creates objects NOT in local time'); + assert.ok(moment.utc().local().isLocal(), 'moment.fn.local() converts to local time'); + assert.ok(!moment().utcOffset(5).isLocal(), 'moment.fn.utcOffset(N) puts objects NOT in local time'); + assert.ok(moment().utcOffset(5).local().isLocal(), 'moment.fn.local() converts to local time'); + + assert.ok(moment.utc().isUtc(), 'moment.utc() creates objects in utc time'); + assert.ok(moment().utcOffset(0).isUtc(), 'utcOffset(0) is equivalent to utc mode'); + assert.ok(!moment().utcOffset(1).isUtc(), 'utcOffset(1) is NOT equivalent to utc mode'); + + assert.ok(!moment().isUtcOffset(), 'moment() creates objects NOT in utc-offset mode'); + assert.ok(moment.utc().isUtcOffset(), 'moment.utc() creates objects in utc-offset mode'); + assert.ok(moment().utcOffset(3).isUtcOffset(), 'utcOffset(N != 0) creates objects in utc-offset mode'); + assert.ok(moment().utcOffset(0).isUtcOffset(), 'utcOffset(0) creates objects in utc-offset mode'); +}); + +test('isUTC', function (assert) { + assert.ok(moment.utc().isUTC(), 'moment.utc() creates objects in utc time'); + assert.ok(moment().utcOffset(0).isUTC(), 'utcOffset(0) is equivalent to utc mode'); + assert.ok(!moment().utcOffset(1).isUTC(), 'utcOffset(1) is NOT equivalent to utc mode'); +}); + +test('change hours when changing the utc offset', function (assert) { + var m = moment.utc([2000, 0, 1, 6]); + assert.equal(m.hour(), 6, 'UTC 6AM should be 6AM at +0000'); + + // sanity check + m.utcOffset(0); + assert.equal(m.hour(), 6, 'UTC 6AM should be 6AM at +0000'); + + m.utcOffset(-60); + assert.equal(m.hour(), 5, 'UTC 6AM should be 5AM at -0100'); + + m.utcOffset(60); + assert.equal(m.hour(), 7, 'UTC 6AM should be 7AM at +0100'); +}); + +test('change minutes when changing the utc offset', function (assert) { + var m = moment.utc([2000, 0, 1, 6, 31]); + + m.utcOffset(0); + assert.equal(m.format('HH:mm'), '06:31', 'UTC 6:31AM should be 6:31AM at +0000'); + + m.utcOffset(-30); + assert.equal(m.format('HH:mm'), '06:01', 'UTC 6:31AM should be 6:01AM at -0030'); + + m.utcOffset(30); + assert.equal(m.format('HH:mm'), '07:01', 'UTC 6:31AM should be 7:01AM at +0030'); + + m.utcOffset(-1380); + assert.equal(m.format('HH:mm'), '07:31', 'UTC 6:31AM should be 7:31AM at +1380'); +}); + +test('distance from the unix epoch', function (assert) { + var zoneA = moment(), + zoneB = moment(zoneA), + zoneC = moment(zoneA), + zoneD = moment(zoneA), + zoneE = moment(zoneA); + + zoneB.utc(); + assert.equal(+zoneA, +zoneB, 'moment should equal moment.utc'); + + zoneC.utcOffset(60); + assert.equal(+zoneA, +zoneC, 'moment should equal moment.utcOffset(60)'); + + zoneD.utcOffset(-480); + assert.equal(+zoneA, +zoneD, + 'moment should equal moment.utcOffset(-480)'); + + zoneE.utcOffset(-1000); + assert.equal(+zoneA, +zoneE, + 'moment should equal moment.utcOffset(-1000)'); +}); + +test('update offset after changing any values', function (assert) { + var oldOffset = moment.updateOffset, + m = moment.utc([2000, 6, 1]); + + moment.updateOffset = function (mom, keepTime) { + if (mom.__doChange) { + if (+mom > 962409600000) { + mom.utcOffset(-120, keepTime); + } else { + mom.utcOffset(-60, keepTime); + } + } + }; + + assert.equal(m.format('ZZ'), '+0000', 'should be at +0000'); + assert.equal(m.format('HH:mm'), '00:00', 'should start 12AM at +0000 timezone'); + + m.__doChange = true; + m.add(1, 'h'); + + assert.equal(m.format('ZZ'), '-0200', 'should be at -0200'); + assert.equal(m.format('HH:mm'), '23:00', '1AM at +0000 should be 11PM at -0200 timezone'); + + m.subtract(1, 'h'); + + assert.equal(m.format('ZZ'), '-0100', 'should be at -0100'); + assert.equal(m.format('HH:mm'), '23:00', '12AM at +0000 should be 11PM at -0100 timezone'); + + moment.updateOffset = oldOffset; +}); + +////////////////// +test('getters and setters', function (assert) { + var a = moment([2011, 5, 20]); + + assert.equal(a.clone().utcOffset(-120).year(2012).year(), 2012, 'should get and set year correctly'); + assert.equal(a.clone().utcOffset(-120).month(1).month(), 1, 'should get and set month correctly'); + assert.equal(a.clone().utcOffset(-120).date(2).date(), 2, 'should get and set date correctly'); + assert.equal(a.clone().utcOffset(-120).day(1).day(), 1, 'should get and set day correctly'); + assert.equal(a.clone().utcOffset(-120).hour(1).hour(), 1, 'should get and set hour correctly'); + assert.equal(a.clone().utcOffset(-120).minute(1).minute(), 1, 'should get and set minute correctly'); +}); + +test('getters', function (assert) { + var a = moment.utc([2012, 0, 1, 0, 0, 0]); + + assert.equal(a.clone().utcOffset(-120).year(), 2011, 'should get year correctly'); + assert.equal(a.clone().utcOffset(-120).month(), 11, 'should get month correctly'); + assert.equal(a.clone().utcOffset(-120).date(), 31, 'should get date correctly'); + assert.equal(a.clone().utcOffset(-120).hour(), 22, 'should get hour correctly'); + assert.equal(a.clone().utcOffset(-120).minute(), 0, 'should get minute correctly'); + + assert.equal(a.clone().utcOffset(120).year(), 2012, 'should get year correctly'); + assert.equal(a.clone().utcOffset(120).month(), 0, 'should get month correctly'); + assert.equal(a.clone().utcOffset(120).date(), 1, 'should get date correctly'); + assert.equal(a.clone().utcOffset(120).hour(), 2, 'should get hour correctly'); + assert.equal(a.clone().utcOffset(120).minute(), 0, 'should get minute correctly'); + + assert.equal(a.clone().utcOffset(90).year(), 2012, 'should get year correctly'); + assert.equal(a.clone().utcOffset(90).month(), 0, 'should get month correctly'); + assert.equal(a.clone().utcOffset(90).date(), 1, 'should get date correctly'); + assert.equal(a.clone().utcOffset(90).hour(), 1, 'should get hour correctly'); + assert.equal(a.clone().utcOffset(90).minute(), 30, 'should get minute correctly'); +}); + +test('from', function (assert) { + var zoneA = moment(), + zoneB = moment(zoneA).utcOffset(-720), + zoneC = moment(zoneA).utcOffset(-360), + zoneD = moment(zoneA).utcOffset(690), + other = moment(zoneA).add(35, 'm'); + + assert.equal(zoneA.from(other), zoneB.from(other), 'moment#from should be the same in all zones'); + assert.equal(zoneA.from(other), zoneC.from(other), 'moment#from should be the same in all zones'); + assert.equal(zoneA.from(other), zoneD.from(other), 'moment#from should be the same in all zones'); +}); + +test('diff', function (assert) { + var zoneA = moment(), + zoneB = moment(zoneA).utcOffset(-720), + zoneC = moment(zoneA).utcOffset(-360), + zoneD = moment(zoneA).utcOffset(690), + other = moment(zoneA).add(35, 'm'); + + assert.equal(zoneA.diff(other), zoneB.diff(other), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other), zoneC.diff(other), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other), zoneD.diff(other), 'moment#diff should be the same in all zones'); + + assert.equal(zoneA.diff(other, 'minute', true), zoneB.diff(other, 'minute', true), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other, 'minute', true), zoneC.diff(other, 'minute', true), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other, 'minute', true), zoneD.diff(other, 'minute', true), 'moment#diff should be the same in all zones'); + + assert.equal(zoneA.diff(other, 'hour', true), zoneB.diff(other, 'hour', true), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other, 'hour', true), zoneC.diff(other, 'hour', true), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other, 'hour', true), zoneD.diff(other, 'hour', true), 'moment#diff should be the same in all zones'); +}); + +test('unix offset and timestamp', function (assert) { + var zoneA = moment(), + zoneB = moment(zoneA).utcOffset(-720), + zoneC = moment(zoneA).utcOffset(-360), + zoneD = moment(zoneA).utcOffset(690); + + assert.equal(zoneA.unix(), zoneB.unix(), 'moment#unix should be the same in all zones'); + assert.equal(zoneA.unix(), zoneC.unix(), 'moment#unix should be the same in all zones'); + assert.equal(zoneA.unix(), zoneD.unix(), 'moment#unix should be the same in all zones'); + + assert.equal(+zoneA, +zoneB, 'moment#valueOf should be the same in all zones'); + assert.equal(+zoneA, +zoneC, 'moment#valueOf should be the same in all zones'); + assert.equal(+zoneA, +zoneD, 'moment#valueOf should be the same in all zones'); +}); + +test('cloning', function (assert) { + assert.equal(moment().utcOffset(-120).clone().utcOffset(), -120, + 'explicit cloning should retain the offset'); + assert.equal(moment().utcOffset(120).clone().utcOffset(), 120, + 'explicit cloning should retain the offset'); + assert.equal(moment(moment().utcOffset(-120)).utcOffset(), -120, + 'implicit cloning should retain the offset'); + assert.equal(moment(moment().utcOffset(120)).utcOffset(), 120, + 'implicit cloning should retain the offset'); +}); + +test('start of / end of', function (assert) { + var a = moment.utc([2010, 1, 2, 0, 0, 0]).utcOffset(-450); + + assert.equal(a.clone().startOf('day').hour(), 0, + 'start of day should work on moments with utc offset'); + assert.equal(a.clone().startOf('day').minute(), 0, + 'start of day should work on moments with utc offset'); + assert.equal(a.clone().startOf('hour').minute(), 0, + 'start of hour should work on moments with utc offset'); + + assert.equal(a.clone().endOf('day').hour(), 23, + 'end of day should work on moments with utc offset'); + assert.equal(a.clone().endOf('day').minute(), 59, + 'end of day should work on moments with utc offset'); + assert.equal(a.clone().endOf('hour').minute(), 59, + 'end of hour should work on moments with utc offset'); +}); + +test('reset offset with moment#utc', function (assert) { + var a = moment.utc([2012]).utcOffset(-480); + + assert.equal(a.clone().hour(), 16, 'different utc offset should have different hour'); + assert.equal(a.clone().utc().hour(), 0, 'calling moment#utc should reset the offset'); +}); + +test('reset offset with moment#local', function (assert) { + var a = moment([2012]).utcOffset(-480); + + assert.equal(a.clone().local().hour(), 0, 'calling moment#local should reset the offset'); +}); + +test('toDate', function (assert) { + var zoneA = new Date(), + zoneB = moment(zoneA).utcOffset(-720).toDate(), + zoneC = moment(zoneA).utcOffset(-360).toDate(), + zoneD = moment(zoneA).utcOffset(690).toDate(); + + assert.equal(+zoneA, +zoneB, 'moment#toDate should output a date with the right unix timestamp'); + assert.equal(+zoneA, +zoneC, 'moment#toDate should output a date with the right unix timestamp'); + assert.equal(+zoneA, +zoneD, 'moment#toDate should output a date with the right unix timestamp'); +}); + +test('same / before / after', function (assert) { + var zoneA = moment().utc(), + zoneB = moment(zoneA).utcOffset(-120), + zoneC = moment(zoneA).utcOffset(120); + + assert.ok(zoneA.isSame(zoneB), 'two moments with different offsets should be the same'); + assert.ok(zoneA.isSame(zoneC), 'two moments with different offsets should be the same'); + + assert.ok(zoneA.isSame(zoneB, 'hour'), 'two moments with different offsets should be the same hour'); + assert.ok(zoneA.isSame(zoneC, 'hour'), 'two moments with different offsets should be the same hour'); + + zoneA.add(1, 'hour'); + + assert.ok(zoneA.isAfter(zoneB), 'isAfter should work with two moments with different offsets'); + assert.ok(zoneA.isAfter(zoneC), 'isAfter should work with two moments with different offsets'); + + assert.ok(zoneA.isAfter(zoneB, 'hour'), 'isAfter:hour should work with two moments with different offsets'); + assert.ok(zoneA.isAfter(zoneC, 'hour'), 'isAfter:hour should work with two moments with different offsets'); + + zoneA.subtract(2, 'hour'); + + assert.ok(zoneA.isBefore(zoneB), 'isBefore should work with two moments with different offsets'); + assert.ok(zoneA.isBefore(zoneC), 'isBefore should work with two moments with different offsets'); + + assert.ok(zoneA.isBefore(zoneB, 'hour'), 'isBefore:hour should work with two moments with different offsets'); + assert.ok(zoneA.isBefore(zoneC, 'hour'), 'isBefore:hour should work with two moments with different offsets'); +}); + +test('add / subtract over dst', function (assert) { + var oldOffset = moment.updateOffset, + m = moment.utc([2000, 2, 31, 3]); + + moment.updateOffset = function (mom, keepTime) { + if (mom.clone().utc().month() > 2) { + mom.utcOffset(60, keepTime); + } else { + mom.utcOffset(0, keepTime); + } + }; + + assert.equal(m.hour(), 3, 'should start at 00:00'); + + m.add(24, 'hour'); + + assert.equal(m.hour(), 4, 'adding 24 hours should disregard dst'); + + m.subtract(24, 'hour'); + + assert.equal(m.hour(), 3, 'subtracting 24 hours should disregard dst'); + + m.add(1, 'day'); + + assert.equal(m.hour(), 3, 'adding 1 day should have the same hour'); + + m.subtract(1, 'day'); + + assert.equal(m.hour(), 3, 'subtracting 1 day should have the same hour'); + + m.add(1, 'month'); + + assert.equal(m.hour(), 3, 'adding 1 month should have the same hour'); + + m.subtract(1, 'month'); + + assert.equal(m.hour(), 3, 'subtracting 1 month should have the same hour'); + + moment.updateOffset = oldOffset; +}); + +test('isDST', function (assert) { + var oldOffset = moment.updateOffset; + + moment.updateOffset = function (mom, keepTime) { + if (mom.month() > 2 && mom.month() < 9) { + mom.utcOffset(60, keepTime); + } else { + mom.utcOffset(0, keepTime); + } + }; + + assert.ok(!moment().month(0).isDST(), 'Jan should not be summer dst'); + assert.ok(moment().month(6).isDST(), 'Jul should be summer dst'); + assert.ok(!moment().month(11).isDST(), 'Dec should not be summer dst'); + + moment.updateOffset = function (mom) { + if (mom.month() > 2 && mom.month() < 9) { + mom.utcOffset(0); + } else { + mom.utcOffset(60); + } + }; + + assert.ok(moment().month(0).isDST(), 'Jan should be winter dst'); + assert.ok(!moment().month(6).isDST(), 'Jul should not be winter dst'); + assert.ok(moment().month(11).isDST(), 'Dec should be winter dst'); + + moment.updateOffset = oldOffset; +}); + +test('zone names', function (assert) { + assert.equal(moment().zoneAbbr(), '', 'Local zone abbr should be empty'); + assert.equal(moment().format('z'), '', 'Local zone formatted abbr should be empty'); + assert.equal(moment().zoneName(), '', 'Local zone name should be empty'); + assert.equal(moment().format('zz'), '', 'Local zone formatted name should be empty'); + + assert.equal(moment.utc().zoneAbbr(), 'UTC', 'UTC zone abbr should be UTC'); + assert.equal(moment.utc().format('z'), 'UTC', 'UTC zone formatted abbr should be UTC'); + assert.equal(moment.utc().zoneName(), 'Coordinated Universal Time', 'UTC zone abbr should be Coordinated Universal Time'); + assert.equal(moment.utc().format('zz'), 'Coordinated Universal Time', 'UTC zone formatted abbr should be Coordinated Universal Time'); +}); + +test('hours alignment with UTC', function (assert) { + assert.equal(moment().utcOffset(-120).hasAlignedHourOffset(), true); + assert.equal(moment().utcOffset(180).hasAlignedHourOffset(), true); + assert.equal(moment().utcOffset(-90).hasAlignedHourOffset(), false); + assert.equal(moment().utcOffset(90).hasAlignedHourOffset(), false); +}); + +test('hours alignment with other zone', function (assert) { + var m = moment().utcOffset(-120); + + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-180)), true); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(180)), true); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-90)), false); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(90)), false); + + m = moment().utcOffset(-90); + + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-180)), false); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(180)), false); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-30)), true); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(30)), true); + + m = moment().utcOffset(60); + + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-180)), true); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(180)), true); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-90)), false); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(90)), false); + + m = moment().utcOffset(-25); + + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(35)), true); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-85)), true); + + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-35)), false); + assert.equal(m.hasAlignedHourOffset(moment().utcOffset(85)), false); +}); + +test('parse zone', function (assert) { + var m = moment('2013-01-01T00:00:00-13:00').parseZone(); + assert.equal(m.utcOffset(), -13 * 60); + assert.equal(m.hours(), 0); +}); + +test('parse UTC zone', function (assert) { + var m = moment('2013-01-01T05:00:00+00:00').parseZone(); + assert.equal(m.utcOffset(), 0); + assert.equal(m.hours(), 5); +}); + +test('parse zone static', function (assert) { + var m = moment.parseZone('2013-01-01T00:00:00-13:00'); + assert.equal(m.utcOffset(), -13 * 60); + assert.equal(m.hours(), 0); +}); + +test('parse zone with more arguments', function (assert) { + var m; + m = moment.parseZone('2013 01 01 05 -13:00', 'YYYY MM DD HH ZZ'); + assert.equal(m.format(), '2013-01-01T05:00:00-13:00', 'accept input and format'); + m = moment.parseZone('2013-01-01-13:00', 'YYYY MM DD ZZ', true); + assert.equal(m.isValid(), false, 'accept input, format and strict flag'); + m = moment.parseZone('2013-01-01-13:00', ['DD MM YYYY ZZ', 'YYYY MM DD ZZ']); + assert.equal(m.format(), '2013-01-01T00:00:00-13:00', 'accept input and array of formats'); +}); + +test('parse zone with a timezone from the format string', function (assert) { + var m = moment('11-12-2013 -0400 +1100', 'DD-MM-YYYY ZZ #####').parseZone(); + + assert.equal(m.utcOffset(), -4 * 60); +}); + +test('parse zone without a timezone included in the format string', function (assert) { + var m = moment('11-12-2013 -0400 +1100', 'DD-MM-YYYY').parseZone(); + + assert.equal(m.utcOffset(), 11 * 60); +}); + +test('timezone format', function (assert) { + assert.equal(moment().utcOffset(60).format('ZZ'), '+0100', '-60 -> +0100'); + assert.equal(moment().utcOffset(90).format('ZZ'), '+0130', '-90 -> +0130'); + assert.equal(moment().utcOffset(120).format('ZZ'), '+0200', '-120 -> +0200'); + + assert.equal(moment().utcOffset(-60).format('ZZ'), '-0100', '+60 -> -0100'); + assert.equal(moment().utcOffset(-90).format('ZZ'), '-0130', '+90 -> -0130'); + assert.equal(moment().utcOffset(-120).format('ZZ'), '-0200', '+120 -> -0200'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('week year'); + +test('iso week year', function (assert) { + // Some examples taken from https://en.wikipedia.org/wiki/ISO_week + assert.equal(moment([2005, 0, 1]).isoWeekYear(), 2004); + assert.equal(moment([2005, 0, 2]).isoWeekYear(), 2004); + assert.equal(moment([2005, 0, 3]).isoWeekYear(), 2005); + assert.equal(moment([2005, 11, 31]).isoWeekYear(), 2005); + assert.equal(moment([2006, 0, 1]).isoWeekYear(), 2005); + assert.equal(moment([2006, 0, 2]).isoWeekYear(), 2006); + assert.equal(moment([2007, 0, 1]).isoWeekYear(), 2007); + assert.equal(moment([2007, 11, 30]).isoWeekYear(), 2007); + assert.equal(moment([2007, 11, 31]).isoWeekYear(), 2008); + assert.equal(moment([2008, 0, 1]).isoWeekYear(), 2008); + assert.equal(moment([2008, 11, 28]).isoWeekYear(), 2008); + assert.equal(moment([2008, 11, 29]).isoWeekYear(), 2009); + assert.equal(moment([2008, 11, 30]).isoWeekYear(), 2009); + assert.equal(moment([2008, 11, 31]).isoWeekYear(), 2009); + assert.equal(moment([2009, 0, 1]).isoWeekYear(), 2009); + assert.equal(moment([2010, 0, 1]).isoWeekYear(), 2009); + assert.equal(moment([2010, 0, 2]).isoWeekYear(), 2009); + assert.equal(moment([2010, 0, 3]).isoWeekYear(), 2009); + assert.equal(moment([2010, 0, 4]).isoWeekYear(), 2010); +}); + +test('week year', function (assert) { + // Some examples taken from https://en.wikipedia.org/wiki/ISO_week + moment.locale('dow: 1,doy: 4', {week: {dow: 1, doy: 4}}); // like iso + assert.equal(moment([2005, 0, 1]).weekYear(), 2004); + assert.equal(moment([2005, 0, 2]).weekYear(), 2004); + assert.equal(moment([2005, 0, 3]).weekYear(), 2005); + assert.equal(moment([2005, 11, 31]).weekYear(), 2005); + assert.equal(moment([2006, 0, 1]).weekYear(), 2005); + assert.equal(moment([2006, 0, 2]).weekYear(), 2006); + assert.equal(moment([2007, 0, 1]).weekYear(), 2007); + assert.equal(moment([2007, 11, 30]).weekYear(), 2007); + assert.equal(moment([2007, 11, 31]).weekYear(), 2008); + assert.equal(moment([2008, 0, 1]).weekYear(), 2008); + assert.equal(moment([2008, 11, 28]).weekYear(), 2008); + assert.equal(moment([2008, 11, 29]).weekYear(), 2009); + assert.equal(moment([2008, 11, 30]).weekYear(), 2009); + assert.equal(moment([2008, 11, 31]).weekYear(), 2009); + assert.equal(moment([2009, 0, 1]).weekYear(), 2009); + assert.equal(moment([2010, 0, 1]).weekYear(), 2009); + assert.equal(moment([2010, 0, 2]).weekYear(), 2009); + assert.equal(moment([2010, 0, 3]).weekYear(), 2009); + assert.equal(moment([2010, 0, 4]).weekYear(), 2010); + + moment.locale('dow: 1,doy: 7', {week: {dow: 1, doy: 7}}); + assert.equal(moment([2004, 11, 26]).weekYear(), 2004); + assert.equal(moment([2004, 11, 27]).weekYear(), 2005); + assert.equal(moment([2005, 11, 25]).weekYear(), 2005); + assert.equal(moment([2005, 11, 26]).weekYear(), 2006); + assert.equal(moment([2006, 11, 31]).weekYear(), 2006); + assert.equal(moment([2007, 0, 1]).weekYear(), 2007); + assert.equal(moment([2007, 11, 30]).weekYear(), 2007); + assert.equal(moment([2007, 11, 31]).weekYear(), 2008); + assert.equal(moment([2008, 11, 28]).weekYear(), 2008); + assert.equal(moment([2008, 11, 29]).weekYear(), 2009); + assert.equal(moment([2009, 11, 27]).weekYear(), 2009); + assert.equal(moment([2009, 11, 28]).weekYear(), 2010); +}); + +// Verifies that the week number, week day computation is correct for all dow, doy combinations +test('week year roundtrip', function (assert) { + var dow, doy, wd, m, localeName; + for (dow = 0; dow < 7; ++dow) { + for (doy = dow; doy < dow + 7; ++doy) { + for (wd = 0; wd < 7; ++wd) { + localeName = 'dow: ' + dow + ', doy: ' + doy; + moment.locale(localeName, {week: {dow: dow, doy: doy}}); + // We use the 10th week as the 1st one can spill to the previous year + m = moment('2015 10 ' + wd, 'gggg w d', true); + assert.equal(m.format('gggg w d'), '2015 10 ' + wd, 'dow: ' + dow + ' doy: ' + doy + ' wd: ' + wd); + m = moment('2015 10 ' + wd, 'gggg w e', true); + assert.equal(m.format('gggg w e'), '2015 10 ' + wd, 'dow: ' + dow + ' doy: ' + doy + ' wd: ' + wd); + moment.defineLocale(localeName, null); + } + } + } +}); + +test('week numbers 2012/2013', function (assert) { + moment.locale('dow: 6, doy: 12', {week: {dow: 6, doy: 12}}); + assert.equal(52, moment('2012-12-28', 'YYYY-MM-DD').week(), '2012-12-28 is week 52'); // 51 -- should be 52? + assert.equal(1, moment('2012-12-29', 'YYYY-MM-DD').week(), '2012-12-29 is week 1'); // 52 -- should be 1 + assert.equal(1, moment('2013-01-01', 'YYYY-MM-DD').week(), '2013-01-01 is week 1'); // 52 -- should be 1 + assert.equal(2, moment('2013-01-08', 'YYYY-MM-DD').week(), '2013-01-08 is week 2'); // 53 -- should be 2 + assert.equal(2, moment('2013-01-11', 'YYYY-MM-DD').week(), '2013-01-11 is week 2'); // 53 -- should be 2 + assert.equal(3, moment('2013-01-12', 'YYYY-MM-DD').week(), '2013-01-12 is week 3'); // 1 -- should be 3 + assert.equal(52, moment('2012-01-01', 'YYYY-MM-DD').weeksInYear(), 'weeks in 2012 are 52'); // 52 + moment.defineLocale('dow: 6, doy: 12', null); +}); + +test('weeks numbers dow:1 doy:4', function (assert) { + moment.locale('dow: 1, doy: 4', {week: {dow: 1, doy: 4}}); + assert.equal(moment([2012, 0, 1]).week(), 52, 'Jan 1 2012 should be week 52'); + assert.equal(moment([2012, 0, 2]).week(), 1, 'Jan 2 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).week(), 1, 'Jan 8 2012 should be week 1'); + assert.equal(moment([2012, 0, 9]).week(), 2, 'Jan 9 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).week(), 2, 'Jan 15 2012 should be week 2'); + assert.equal(moment([2007, 0, 1]).week(), 1, 'Jan 1 2007 should be week 1'); + assert.equal(moment([2007, 0, 7]).week(), 1, 'Jan 7 2007 should be week 1'); + assert.equal(moment([2007, 0, 8]).week(), 2, 'Jan 8 2007 should be week 2'); + assert.equal(moment([2007, 0, 14]).week(), 2, 'Jan 14 2007 should be week 2'); + assert.equal(moment([2007, 0, 15]).week(), 3, 'Jan 15 2007 should be week 3'); + assert.equal(moment([2007, 11, 31]).week(), 1, 'Dec 31 2007 should be week 1'); + assert.equal(moment([2008, 0, 1]).week(), 1, 'Jan 1 2008 should be week 1'); + assert.equal(moment([2008, 0, 6]).week(), 1, 'Jan 6 2008 should be week 1'); + assert.equal(moment([2008, 0, 7]).week(), 2, 'Jan 7 2008 should be week 2'); + assert.equal(moment([2008, 0, 13]).week(), 2, 'Jan 13 2008 should be week 2'); + assert.equal(moment([2008, 0, 14]).week(), 3, 'Jan 14 2008 should be week 3'); + assert.equal(moment([2002, 11, 30]).week(), 1, 'Dec 30 2002 should be week 1'); + assert.equal(moment([2003, 0, 1]).week(), 1, 'Jan 1 2003 should be week 1'); + assert.equal(moment([2003, 0, 5]).week(), 1, 'Jan 5 2003 should be week 1'); + assert.equal(moment([2003, 0, 6]).week(), 2, 'Jan 6 2003 should be week 2'); + assert.equal(moment([2003, 0, 12]).week(), 2, 'Jan 12 2003 should be week 2'); + assert.equal(moment([2003, 0, 13]).week(), 3, 'Jan 13 2003 should be week 3'); + assert.equal(moment([2008, 11, 29]).week(), 1, 'Dec 29 2008 should be week 1'); + assert.equal(moment([2009, 0, 1]).week(), 1, 'Jan 1 2009 should be week 1'); + assert.equal(moment([2009, 0, 4]).week(), 1, 'Jan 4 2009 should be week 1'); + assert.equal(moment([2009, 0, 5]).week(), 2, 'Jan 5 2009 should be week 2'); + assert.equal(moment([2009, 0, 11]).week(), 2, 'Jan 11 2009 should be week 2'); + assert.equal(moment([2009, 0, 13]).week(), 3, 'Jan 12 2009 should be week 3'); + assert.equal(moment([2009, 11, 28]).week(), 53, 'Dec 28 2009 should be week 53'); + assert.equal(moment([2010, 0, 1]).week(), 53, 'Jan 1 2010 should be week 53'); + assert.equal(moment([2010, 0, 3]).week(), 53, 'Jan 3 2010 should be week 53'); + assert.equal(moment([2010, 0, 4]).week(), 1, 'Jan 4 2010 should be week 1'); + assert.equal(moment([2010, 0, 10]).week(), 1, 'Jan 10 2010 should be week 1'); + assert.equal(moment([2010, 0, 11]).week(), 2, 'Jan 11 2010 should be week 2'); + assert.equal(moment([2010, 11, 27]).week(), 52, 'Dec 27 2010 should be week 52'); + assert.equal(moment([2011, 0, 1]).week(), 52, 'Jan 1 2011 should be week 52'); + assert.equal(moment([2011, 0, 2]).week(), 52, 'Jan 2 2011 should be week 52'); + assert.equal(moment([2011, 0, 3]).week(), 1, 'Jan 3 2011 should be week 1'); + assert.equal(moment([2011, 0, 9]).week(), 1, 'Jan 9 2011 should be week 1'); + assert.equal(moment([2011, 0, 10]).week(), 2, 'Jan 10 2011 should be week 2'); + moment.defineLocale('dow: 1, doy: 4', null); +}); + +test('weeks numbers dow:6 doy:12', function (assert) { + moment.locale('dow: 6, doy: 12', {week: {dow: 6, doy: 12}}); + assert.equal(moment([2011, 11, 31]).week(), 1, 'Dec 31 2011 should be week 1'); + assert.equal(moment([2012, 0, 6]).week(), 1, 'Jan 6 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).week(), 2, 'Jan 7 2012 should be week 2'); + assert.equal(moment([2012, 0, 13]).week(), 2, 'Jan 13 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).week(), 3, 'Jan 14 2012 should be week 3'); + assert.equal(moment([2006, 11, 30]).week(), 1, 'Dec 30 2006 should be week 1'); + assert.equal(moment([2007, 0, 5]).week(), 1, 'Jan 5 2007 should be week 1'); + assert.equal(moment([2007, 0, 6]).week(), 2, 'Jan 6 2007 should be week 2'); + assert.equal(moment([2007, 0, 12]).week(), 2, 'Jan 12 2007 should be week 2'); + assert.equal(moment([2007, 0, 13]).week(), 3, 'Jan 13 2007 should be week 3'); + assert.equal(moment([2007, 11, 29]).week(), 1, 'Dec 29 2007 should be week 1'); + assert.equal(moment([2008, 0, 1]).week(), 1, 'Jan 1 2008 should be week 1'); + assert.equal(moment([2008, 0, 4]).week(), 1, 'Jan 4 2008 should be week 1'); + assert.equal(moment([2008, 0, 5]).week(), 2, 'Jan 5 2008 should be week 2'); + assert.equal(moment([2008, 0, 11]).week(), 2, 'Jan 11 2008 should be week 2'); + assert.equal(moment([2008, 0, 12]).week(), 3, 'Jan 12 2008 should be week 3'); + assert.equal(moment([2002, 11, 28]).week(), 1, 'Dec 28 2002 should be week 1'); + assert.equal(moment([2003, 0, 1]).week(), 1, 'Jan 1 2003 should be week 1'); + assert.equal(moment([2003, 0, 3]).week(), 1, 'Jan 3 2003 should be week 1'); + assert.equal(moment([2003, 0, 4]).week(), 2, 'Jan 4 2003 should be week 2'); + assert.equal(moment([2003, 0, 10]).week(), 2, 'Jan 10 2003 should be week 2'); + assert.equal(moment([2003, 0, 11]).week(), 3, 'Jan 11 2003 should be week 3'); + assert.equal(moment([2008, 11, 27]).week(), 1, 'Dec 27 2008 should be week 1'); + assert.equal(moment([2009, 0, 1]).week(), 1, 'Jan 1 2009 should be week 1'); + assert.equal(moment([2009, 0, 2]).week(), 1, 'Jan 2 2009 should be week 1'); + assert.equal(moment([2009, 0, 3]).week(), 2, 'Jan 3 2009 should be week 2'); + assert.equal(moment([2009, 0, 9]).week(), 2, 'Jan 9 2009 should be week 2'); + assert.equal(moment([2009, 0, 10]).week(), 3, 'Jan 10 2009 should be week 3'); + assert.equal(moment([2009, 11, 26]).week(), 1, 'Dec 26 2009 should be week 1'); + assert.equal(moment([2010, 0, 1]).week(), 1, 'Jan 1 2010 should be week 1'); + assert.equal(moment([2010, 0, 2]).week(), 2, 'Jan 2 2010 should be week 2'); + assert.equal(moment([2010, 0, 8]).week(), 2, 'Jan 8 2010 should be week 2'); + assert.equal(moment([2010, 0, 9]).week(), 3, 'Jan 9 2010 should be week 3'); + assert.equal(moment([2011, 0, 1]).week(), 1, 'Jan 1 2011 should be week 1'); + assert.equal(moment([2011, 0, 7]).week(), 1, 'Jan 7 2011 should be week 1'); + assert.equal(moment([2011, 0, 8]).week(), 2, 'Jan 8 2011 should be week 2'); + assert.equal(moment([2011, 0, 14]).week(), 2, 'Jan 14 2011 should be week 2'); + assert.equal(moment([2011, 0, 15]).week(), 3, 'Jan 15 2011 should be week 3'); + moment.defineLocale('dow: 6, doy: 12', null); +}); + +test('weeks numbers dow:1 doy:7', function (assert) { + moment.locale('dow: 1, doy: 7', {week: {dow: 1, doy: 7}}); + assert.equal(moment([2011, 11, 26]).week(), 1, 'Dec 26 2011 should be week 1'); + assert.equal(moment([2012, 0, 1]).week(), 1, 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 2]).week(), 2, 'Jan 2 2012 should be week 2'); + assert.equal(moment([2012, 0, 8]).week(), 2, 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 9]).week(), 3, 'Jan 9 2012 should be week 3'); + assert.equal(moment([2007, 0, 1]).week(), 1, 'Jan 1 2007 should be week 1'); + assert.equal(moment([2007, 0, 7]).week(), 1, 'Jan 7 2007 should be week 1'); + assert.equal(moment([2007, 0, 8]).week(), 2, 'Jan 8 2007 should be week 2'); + assert.equal(moment([2007, 0, 14]).week(), 2, 'Jan 14 2007 should be week 2'); + assert.equal(moment([2007, 0, 15]).week(), 3, 'Jan 15 2007 should be week 3'); + assert.equal(moment([2007, 11, 31]).week(), 1, 'Dec 31 2007 should be week 1'); + assert.equal(moment([2008, 0, 1]).week(), 1, 'Jan 1 2008 should be week 1'); + assert.equal(moment([2008, 0, 6]).week(), 1, 'Jan 6 2008 should be week 1'); + assert.equal(moment([2008, 0, 7]).week(), 2, 'Jan 7 2008 should be week 2'); + assert.equal(moment([2008, 0, 13]).week(), 2, 'Jan 13 2008 should be week 2'); + assert.equal(moment([2008, 0, 14]).week(), 3, 'Jan 14 2008 should be week 3'); + assert.equal(moment([2002, 11, 30]).week(), 1, 'Dec 30 2002 should be week 1'); + assert.equal(moment([2003, 0, 1]).week(), 1, 'Jan 1 2003 should be week 1'); + assert.equal(moment([2003, 0, 5]).week(), 1, 'Jan 5 2003 should be week 1'); + assert.equal(moment([2003, 0, 6]).week(), 2, 'Jan 6 2003 should be week 2'); + assert.equal(moment([2003, 0, 12]).week(), 2, 'Jan 12 2003 should be week 2'); + assert.equal(moment([2003, 0, 13]).week(), 3, 'Jan 13 2003 should be week 3'); + assert.equal(moment([2008, 11, 29]).week(), 1, 'Dec 29 2008 should be week 1'); + assert.equal(moment([2009, 0, 1]).week(), 1, 'Jan 1 2009 should be week 1'); + assert.equal(moment([2009, 0, 4]).week(), 1, 'Jan 4 2009 should be week 1'); + assert.equal(moment([2009, 0, 5]).week(), 2, 'Jan 5 2009 should be week 2'); + assert.equal(moment([2009, 0, 11]).week(), 2, 'Jan 11 2009 should be week 2'); + assert.equal(moment([2009, 0, 12]).week(), 3, 'Jan 12 2009 should be week 3'); + assert.equal(moment([2009, 11, 28]).week(), 1, 'Dec 28 2009 should be week 1'); + assert.equal(moment([2010, 0, 1]).week(), 1, 'Jan 1 2010 should be week 1'); + assert.equal(moment([2010, 0, 3]).week(), 1, 'Jan 3 2010 should be week 1'); + assert.equal(moment([2010, 0, 4]).week(), 2, 'Jan 4 2010 should be week 2'); + assert.equal(moment([2010, 0, 10]).week(), 2, 'Jan 10 2010 should be week 2'); + assert.equal(moment([2010, 0, 11]).week(), 3, 'Jan 11 2010 should be week 3'); + assert.equal(moment([2010, 11, 27]).week(), 1, 'Dec 27 2010 should be week 1'); + assert.equal(moment([2011, 0, 1]).week(), 1, 'Jan 1 2011 should be week 1'); + assert.equal(moment([2011, 0, 2]).week(), 1, 'Jan 2 2011 should be week 1'); + assert.equal(moment([2011, 0, 3]).week(), 2, 'Jan 3 2011 should be week 2'); + assert.equal(moment([2011, 0, 9]).week(), 2, 'Jan 9 2011 should be week 2'); + assert.equal(moment([2011, 0, 10]).week(), 3, 'Jan 10 2011 should be week 3'); + moment.defineLocale('dow: 1, doy: 7', null); +}); + +test('weeks numbers dow:0 doy:6', function (assert) { + moment.locale('dow: 0, doy: 6', {week: {dow: 0, doy: 6}}); + assert.equal(moment([2012, 0, 1]).week(), 1, 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).week(), 1, 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).week(), 2, 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).week(), 2, 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).week(), 3, 'Jan 15 2012 should be week 3'); + assert.equal(moment([2006, 11, 31]).week(), 1, 'Dec 31 2006 should be week 1'); + assert.equal(moment([2007, 0, 1]).week(), 1, 'Jan 1 2007 should be week 1'); + assert.equal(moment([2007, 0, 6]).week(), 1, 'Jan 6 2007 should be week 1'); + assert.equal(moment([2007, 0, 7]).week(), 2, 'Jan 7 2007 should be week 2'); + assert.equal(moment([2007, 0, 13]).week(), 2, 'Jan 13 2007 should be week 2'); + assert.equal(moment([2007, 0, 14]).week(), 3, 'Jan 14 2007 should be week 3'); + assert.equal(moment([2007, 11, 29]).week(), 52, 'Dec 29 2007 should be week 52'); + assert.equal(moment([2008, 0, 1]).week(), 1, 'Jan 1 2008 should be week 1'); + assert.equal(moment([2008, 0, 5]).week(), 1, 'Jan 5 2008 should be week 1'); + assert.equal(moment([2008, 0, 6]).week(), 2, 'Jan 6 2008 should be week 2'); + assert.equal(moment([2008, 0, 12]).week(), 2, 'Jan 12 2008 should be week 2'); + assert.equal(moment([2008, 0, 13]).week(), 3, 'Jan 13 2008 should be week 3'); + assert.equal(moment([2002, 11, 29]).week(), 1, 'Dec 29 2002 should be week 1'); + assert.equal(moment([2003, 0, 1]).week(), 1, 'Jan 1 2003 should be week 1'); + assert.equal(moment([2003, 0, 4]).week(), 1, 'Jan 4 2003 should be week 1'); + assert.equal(moment([2003, 0, 5]).week(), 2, 'Jan 5 2003 should be week 2'); + assert.equal(moment([2003, 0, 11]).week(), 2, 'Jan 11 2003 should be week 2'); + assert.equal(moment([2003, 0, 12]).week(), 3, 'Jan 12 2003 should be week 3'); + assert.equal(moment([2008, 11, 28]).week(), 1, 'Dec 28 2008 should be week 1'); + assert.equal(moment([2009, 0, 1]).week(), 1, 'Jan 1 2009 should be week 1'); + assert.equal(moment([2009, 0, 3]).week(), 1, 'Jan 3 2009 should be week 1'); + assert.equal(moment([2009, 0, 4]).week(), 2, 'Jan 4 2009 should be week 2'); + assert.equal(moment([2009, 0, 10]).week(), 2, 'Jan 10 2009 should be week 2'); + assert.equal(moment([2009, 0, 11]).week(), 3, 'Jan 11 2009 should be week 3'); + assert.equal(moment([2009, 11, 27]).week(), 1, 'Dec 27 2009 should be week 1'); + assert.equal(moment([2010, 0, 1]).week(), 1, 'Jan 1 2010 should be week 1'); + assert.equal(moment([2010, 0, 2]).week(), 1, 'Jan 2 2010 should be week 1'); + assert.equal(moment([2010, 0, 3]).week(), 2, 'Jan 3 2010 should be week 2'); + assert.equal(moment([2010, 0, 9]).week(), 2, 'Jan 9 2010 should be week 2'); + assert.equal(moment([2010, 0, 10]).week(), 3, 'Jan 10 2010 should be week 3'); + assert.equal(moment([2010, 11, 26]).week(), 1, 'Dec 26 2010 should be week 1'); + assert.equal(moment([2011, 0, 1]).week(), 1, 'Jan 1 2011 should be week 1'); + assert.equal(moment([2011, 0, 2]).week(), 2, 'Jan 2 2011 should be week 2'); + assert.equal(moment([2011, 0, 8]).week(), 2, 'Jan 8 2011 should be week 2'); + assert.equal(moment([2011, 0, 9]).week(), 3, 'Jan 9 2011 should be week 3'); + moment.defineLocale('dow: 0, doy: 6', null); +}); + +test('week year overflows', function (assert) { + assert.equal('2005-01-01', moment.utc('2004-W53-6', moment.ISO_8601, true).format('YYYY-MM-DD'), '2004-W53-6 is 1st Jan 2005'); + assert.equal('2007-12-31', moment.utc('2008-W01-1', moment.ISO_8601, true).format('YYYY-MM-DD'), '2008-W01-1 is 31st Dec 2007'); +}); + +test('weeks overflow', function (assert) { + assert.equal(7, moment.utc('2004-W54-1', moment.ISO_8601, true).parsingFlags().overflow, '2004 has only 53 weeks'); + assert.equal(7, moment.utc('2004-W00-1', moment.ISO_8601, true).parsingFlags().overflow, 'there is no 0th week'); +}); + +test('weekday overflow', function (assert) { + assert.equal(8, moment.utc('2004-W30-0', moment.ISO_8601, true).parsingFlags().overflow, 'there is no 0 iso weekday'); + assert.equal(8, moment.utc('2004-W30-8', moment.ISO_8601, true).parsingFlags().overflow, 'there is no 8 iso weekday'); + assert.equal(8, moment.utc('2004-w30-7', 'gggg-[w]ww-e', true).parsingFlags().overflow, 'there is no 7 \'e\' weekday'); + assert.equal(8, moment.utc('2004-w30-7', 'gggg-[w]ww-d', true).parsingFlags().overflow, 'there is no 7 \'d\' weekday'); +}); + +test('week year setter works', function (assert) { + for (var year = 2000; year <= 2020; year += 1) { + assert.equal(moment.utc('2012-12-31T00:00:00.000Z').isoWeekYear(year).isoWeekYear(), year, 'setting iso-week-year to ' + year); + assert.equal(moment.utc('2012-12-31T00:00:00.000Z').weekYear(year).weekYear(), year, 'setting week-year to ' + year); + } + + assert.equal(moment.utc('2004-W53-1', moment.ISO_8601, true).isoWeekYear(2013).format('GGGG-[W]WW-E'), '2013-W52-1', '2004-W53-1 to 2013'); + assert.equal(moment.utc('2004-W53-1', moment.ISO_8601, true).isoWeekYear(2020).format('GGGG-[W]WW-E'), '2020-W53-1', '2004-W53-1 to 2020'); + assert.equal(moment.utc('2005-W52-1', moment.ISO_8601, true).isoWeekYear(2004).format('GGGG-[W]WW-E'), '2004-W52-1', '2005-W52-1 to 2004'); + assert.equal(moment.utc('2013-W30-4', moment.ISO_8601, true).isoWeekYear(2015).format('GGGG-[W]WW-E'), '2015-W30-4', '2013-W30-4 to 2015'); + + assert.equal(moment.utc('2005-w53-0', 'gggg-[w]ww-e', true).weekYear(2013).format('gggg-[w]ww-e'), '2013-w52-0', '2005-w53-0 to 2013'); + assert.equal(moment.utc('2005-w53-0', 'gggg-[w]ww-e', true).weekYear(2016).format('gggg-[w]ww-e'), '2016-w53-0', '2005-w53-0 to 2016'); + assert.equal(moment.utc('2004-w52-0', 'gggg-[w]ww-e', true).weekYear(2005).format('gggg-[w]ww-e'), '2005-w52-0', '2004-w52-0 to 2005'); + assert.equal(moment.utc('2013-w30-4', 'gggg-[w]ww-e', true).weekYear(2015).format('gggg-[w]ww-e'), '2015-w30-4', '2013-w30-4 to 2015'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('week day'); + +test('iso weekday', function (assert) { + var i; + + for (i = 0; i < 7; ++i) { + moment.locale('dow:' + i + ',doy: 6', {week: {dow: i, doy: 6}}); + assert.equal(moment([1985, 1, 4]).isoWeekday(), 1, 'Feb 4 1985 is Monday -- 1st day'); + assert.equal(moment([2029, 8, 18]).isoWeekday(), 2, 'Sep 18 2029 is Tuesday -- 2nd day'); + assert.equal(moment([2013, 3, 24]).isoWeekday(), 3, 'Apr 24 2013 is Wednesday -- 3rd day'); + assert.equal(moment([2015, 2, 5]).isoWeekday(), 4, 'Mar 5 2015 is Thursday -- 4th day'); + assert.equal(moment([1970, 0, 2]).isoWeekday(), 5, 'Jan 2 1970 is Friday -- 5th day'); + assert.equal(moment([2001, 4, 12]).isoWeekday(), 6, 'May 12 2001 is Saturday -- 6th day'); + assert.equal(moment([2000, 0, 2]).isoWeekday(), 7, 'Jan 2 2000 is Sunday -- 7th day'); + } +}); + +test('iso weekday setter', function (assert) { + var a = moment([2011, 0, 10]); + assert.equal(moment(a).isoWeekday(1).date(), 10, 'set from mon to mon'); + assert.equal(moment(a).isoWeekday(4).date(), 13, 'set from mon to thu'); + assert.equal(moment(a).isoWeekday(7).date(), 16, 'set from mon to sun'); + assert.equal(moment(a).isoWeekday(-6).date(), 3, 'set from mon to last mon'); + assert.equal(moment(a).isoWeekday(-3).date(), 6, 'set from mon to last thu'); + assert.equal(moment(a).isoWeekday(0).date(), 9, 'set from mon to last sun'); + assert.equal(moment(a).isoWeekday(8).date(), 17, 'set from mon to next mon'); + assert.equal(moment(a).isoWeekday(11).date(), 20, 'set from mon to next thu'); + assert.equal(moment(a).isoWeekday(14).date(), 23, 'set from mon to next sun'); + + a = moment([2011, 0, 13]); + assert.equal(moment(a).isoWeekday(1).date(), 10, 'set from thu to mon'); + assert.equal(moment(a).isoWeekday(4).date(), 13, 'set from thu to thu'); + assert.equal(moment(a).isoWeekday(7).date(), 16, 'set from thu to sun'); + assert.equal(moment(a).isoWeekday(-6).date(), 3, 'set from thu to last mon'); + assert.equal(moment(a).isoWeekday(-3).date(), 6, 'set from thu to last thu'); + assert.equal(moment(a).isoWeekday(0).date(), 9, 'set from thu to last sun'); + assert.equal(moment(a).isoWeekday(8).date(), 17, 'set from thu to next mon'); + assert.equal(moment(a).isoWeekday(11).date(), 20, 'set from thu to next thu'); + assert.equal(moment(a).isoWeekday(14).date(), 23, 'set from thu to next sun'); + + a = moment([2011, 0, 16]); + assert.equal(moment(a).isoWeekday(1).date(), 10, 'set from sun to mon'); + assert.equal(moment(a).isoWeekday(4).date(), 13, 'set from sun to thu'); + assert.equal(moment(a).isoWeekday(7).date(), 16, 'set from sun to sun'); + assert.equal(moment(a).isoWeekday(-6).date(), 3, 'set from sun to last mon'); + assert.equal(moment(a).isoWeekday(-3).date(), 6, 'set from sun to last thu'); + assert.equal(moment(a).isoWeekday(0).date(), 9, 'set from sun to last sun'); + assert.equal(moment(a).isoWeekday(8).date(), 17, 'set from sun to next mon'); + assert.equal(moment(a).isoWeekday(11).date(), 20, 'set from sun to next thu'); + assert.equal(moment(a).isoWeekday(14).date(), 23, 'set from sun to next sun'); +}); + +test('iso weekday setter with day name', function (assert) { + moment.locale('en'); + + var a = moment([2011, 0, 10]); + assert.equal(moment(a).isoWeekday('Monday').date(), 10, 'set from mon to mon'); + assert.equal(moment(a).isoWeekday('Thursday').date(), 13, 'set from mon to thu'); + assert.equal(moment(a).isoWeekday('Sunday').date(), 16, 'set from mon to sun'); + + a = moment([2011, 0, 13]); + assert.equal(moment(a).isoWeekday('Monday').date(), 10, 'set from thu to mon'); + assert.equal(moment(a).isoWeekday('Thursday').date(), 13, 'set from thu to thu'); + assert.equal(moment(a).isoWeekday('Sunday').date(), 16, 'set from thu to sun'); + + a = moment([2011, 0, 16]); + assert.equal(moment(a).isoWeekday('Monday').date(), 10, 'set from sun to mon'); + assert.equal(moment(a).isoWeekday('Thursday').date(), 13, 'set from sun to thu'); + assert.equal(moment(a).isoWeekday('Sunday').date(), 16, 'set from sun to sun'); +}); + +test('weekday first day of week Sunday (dow 0)', function (assert) { + moment.locale('dow: 0,doy: 6', {week: {dow: 0, doy: 6}}); + assert.equal(moment([1985, 1, 3]).weekday(), 0, 'Feb 3 1985 is Sunday -- 0th day'); + assert.equal(moment([2029, 8, 17]).weekday(), 1, 'Sep 17 2029 is Monday -- 1st day'); + assert.equal(moment([2013, 3, 23]).weekday(), 2, 'Apr 23 2013 is Tuesday -- 2nd day'); + assert.equal(moment([2015, 2, 4]).weekday(), 3, 'Mar 4 2015 is Wednesday -- 3nd day'); + assert.equal(moment([1970, 0, 1]).weekday(), 4, 'Jan 1 1970 is Thursday -- 4th day'); + assert.equal(moment([2001, 4, 11]).weekday(), 5, 'May 11 2001 is Friday -- 5th day'); + assert.equal(moment([2000, 0, 1]).weekday(), 6, 'Jan 1 2000 is Saturday -- 6th day'); +}); + +test('weekday first day of week Monday (dow 1)', function (assert) { + moment.locale('dow: 1,doy: 6', {week: {dow: 1, doy: 6}}); + assert.equal(moment([1985, 1, 4]).weekday(), 0, 'Feb 4 1985 is Monday -- 0th day'); + assert.equal(moment([2029, 8, 18]).weekday(), 1, 'Sep 18 2029 is Tuesday -- 1st day'); + assert.equal(moment([2013, 3, 24]).weekday(), 2, 'Apr 24 2013 is Wednesday -- 2nd day'); + assert.equal(moment([2015, 2, 5]).weekday(), 3, 'Mar 5 2015 is Thursday -- 3nd day'); + assert.equal(moment([1970, 0, 2]).weekday(), 4, 'Jan 2 1970 is Friday -- 4th day'); + assert.equal(moment([2001, 4, 12]).weekday(), 5, 'May 12 2001 is Saturday -- 5th day'); + assert.equal(moment([2000, 0, 2]).weekday(), 6, 'Jan 2 2000 is Sunday -- 6th day'); +}); + +test('weekday first day of week Tuesday (dow 2)', function (assert) { + moment.locale('dow: 2,doy: 6', {week: {dow: 2, doy: 6}}); + assert.equal(moment([1985, 1, 5]).weekday(), 0, 'Feb 5 1985 is Tuesday -- 0th day'); + assert.equal(moment([2029, 8, 19]).weekday(), 1, 'Sep 19 2029 is Wednesday -- 1st day'); + assert.equal(moment([2013, 3, 25]).weekday(), 2, 'Apr 25 2013 is Thursday -- 2nd day'); + assert.equal(moment([2015, 2, 6]).weekday(), 3, 'Mar 6 2015 is Friday -- 3nd day'); + assert.equal(moment([1970, 0, 3]).weekday(), 4, 'Jan 3 1970 is Staturday -- 4th day'); + assert.equal(moment([2001, 4, 13]).weekday(), 5, 'May 13 2001 is Sunday -- 5th day'); + assert.equal(moment([2000, 0, 3]).weekday(), 6, 'Jan 3 2000 is Monday -- 6th day'); +}); + +test('weekday first day of week Wednesday (dow 3)', function (assert) { + moment.locale('dow: 3,doy: 6', {week: {dow: 3, doy: 6}}); + assert.equal(moment([1985, 1, 6]).weekday(), 0, 'Feb 6 1985 is Wednesday -- 0th day'); + assert.equal(moment([2029, 8, 20]).weekday(), 1, 'Sep 20 2029 is Thursday -- 1st day'); + assert.equal(moment([2013, 3, 26]).weekday(), 2, 'Apr 26 2013 is Friday -- 2nd day'); + assert.equal(moment([2015, 2, 7]).weekday(), 3, 'Mar 7 2015 is Saturday -- 3nd day'); + assert.equal(moment([1970, 0, 4]).weekday(), 4, 'Jan 4 1970 is Sunday -- 4th day'); + assert.equal(moment([2001, 4, 14]).weekday(), 5, 'May 14 2001 is Monday -- 5th day'); + assert.equal(moment([2000, 0, 4]).weekday(), 6, 'Jan 4 2000 is Tuesday -- 6th day'); + moment.locale('dow:3,doy:6', null); +}); + +test('weekday first day of week Thursday (dow 4)', function (assert) { + moment.locale('dow: 4,doy: 6', {week: {dow: 4, doy: 6}}); + assert.equal(moment([1985, 1, 7]).weekday(), 0, 'Feb 7 1985 is Thursday -- 0th day'); + assert.equal(moment([2029, 8, 21]).weekday(), 1, 'Sep 21 2029 is Friday -- 1st day'); + assert.equal(moment([2013, 3, 27]).weekday(), 2, 'Apr 27 2013 is Saturday -- 2nd day'); + assert.equal(moment([2015, 2, 8]).weekday(), 3, 'Mar 8 2015 is Sunday -- 3nd day'); + assert.equal(moment([1970, 0, 5]).weekday(), 4, 'Jan 5 1970 is Monday -- 4th day'); + assert.equal(moment([2001, 4, 15]).weekday(), 5, 'May 15 2001 is Tuesday -- 5th day'); + assert.equal(moment([2000, 0, 5]).weekday(), 6, 'Jan 5 2000 is Wednesday -- 6th day'); +}); + +test('weekday first day of week Friday (dow 5)', function (assert) { + moment.locale('dow: 5,doy: 6', {week: {dow: 5, doy: 6}}); + assert.equal(moment([1985, 1, 8]).weekday(), 0, 'Feb 8 1985 is Friday -- 0th day'); + assert.equal(moment([2029, 8, 22]).weekday(), 1, 'Sep 22 2029 is Staturday -- 1st day'); + assert.equal(moment([2013, 3, 28]).weekday(), 2, 'Apr 28 2013 is Sunday -- 2nd day'); + assert.equal(moment([2015, 2, 9]).weekday(), 3, 'Mar 9 2015 is Monday -- 3nd day'); + assert.equal(moment([1970, 0, 6]).weekday(), 4, 'Jan 6 1970 is Tuesday -- 4th day'); + assert.equal(moment([2001, 4, 16]).weekday(), 5, 'May 16 2001 is Wednesday -- 5th day'); + assert.equal(moment([2000, 0, 6]).weekday(), 6, 'Jan 6 2000 is Thursday -- 6th day'); +}); + +test('weekday first day of week Saturday (dow 6)', function (assert) { + moment.locale('dow: 6,doy: 6', {week: {dow: 6, doy: 6}}); + assert.equal(moment([1985, 1, 9]).weekday(), 0, 'Feb 9 1985 is Staturday -- 0th day'); + assert.equal(moment([2029, 8, 23]).weekday(), 1, 'Sep 23 2029 is Sunday -- 1st day'); + assert.equal(moment([2013, 3, 29]).weekday(), 2, 'Apr 29 2013 is Monday -- 2nd day'); + assert.equal(moment([2015, 2, 10]).weekday(), 3, 'Mar 10 2015 is Tuesday -- 3nd day'); + assert.equal(moment([1970, 0, 7]).weekday(), 4, 'Jan 7 1970 is Wednesday -- 4th day'); + assert.equal(moment([2001, 4, 17]).weekday(), 5, 'May 17 2001 is Thursday -- 5th day'); + assert.equal(moment([2000, 0, 7]).weekday(), 6, 'Jan 7 2000 is Friday -- 6th day'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('weeks'); + +test('day of year', function (assert) { + assert.equal(moment([2000, 0, 1]).dayOfYear(), 1, 'Jan 1 2000 should be day 1 of the year'); + assert.equal(moment([2000, 1, 28]).dayOfYear(), 59, 'Feb 28 2000 should be day 59 of the year'); + assert.equal(moment([2000, 1, 29]).dayOfYear(), 60, 'Feb 28 2000 should be day 60 of the year'); + assert.equal(moment([2000, 11, 31]).dayOfYear(), 366, 'Dec 31 2000 should be day 366 of the year'); + assert.equal(moment([2001, 0, 1]).dayOfYear(), 1, 'Jan 1 2001 should be day 1 of the year'); + assert.equal(moment([2001, 1, 28]).dayOfYear(), 59, 'Feb 28 2001 should be day 59 of the year'); + assert.equal(moment([2001, 2, 1]).dayOfYear(), 60, 'Mar 1 2001 should be day 60 of the year'); + assert.equal(moment([2001, 11, 31]).dayOfYear(), 365, 'Dec 31 2001 should be day 365 of the year'); +}); + +test('day of year setters', function (assert) { + assert.equal(moment([2000, 0, 1]).dayOfYear(200).dayOfYear(), 200, 'Setting Jan 1 2000 day of the year to 200 should work'); + assert.equal(moment([2000, 1, 28]).dayOfYear(200).dayOfYear(), 200, 'Setting Feb 28 2000 day of the year to 200 should work'); + assert.equal(moment([2000, 1, 29]).dayOfYear(200).dayOfYear(), 200, 'Setting Feb 28 2000 day of the year to 200 should work'); + assert.equal(moment([2000, 11, 31]).dayOfYear(200).dayOfYear(), 200, 'Setting Dec 31 2000 day of the year to 200 should work'); + assert.equal(moment().dayOfYear(1).dayOfYear(), 1, 'Setting day of the year to 1 should work'); + assert.equal(moment().dayOfYear(59).dayOfYear(), 59, 'Setting day of the year to 59 should work'); + assert.equal(moment().dayOfYear(60).dayOfYear(), 60, 'Setting day of the year to 60 should work'); + assert.equal(moment().dayOfYear(365).dayOfYear(), 365, 'Setting day of the year to 365 should work'); +}); + +test('iso weeks year starting sunday', function (assert) { + assert.equal(moment([2012, 0, 1]).isoWeek(), 52, 'Jan 1 2012 should be iso week 52'); + assert.equal(moment([2012, 0, 2]).isoWeek(), 1, 'Jan 2 2012 should be iso week 1'); + assert.equal(moment([2012, 0, 8]).isoWeek(), 1, 'Jan 8 2012 should be iso week 1'); + assert.equal(moment([2012, 0, 9]).isoWeek(), 2, 'Jan 9 2012 should be iso week 2'); + assert.equal(moment([2012, 0, 15]).isoWeek(), 2, 'Jan 15 2012 should be iso week 2'); +}); + +test('iso weeks year starting monday', function (assert) { + assert.equal(moment([2007, 0, 1]).isoWeek(), 1, 'Jan 1 2007 should be iso week 1'); + assert.equal(moment([2007, 0, 7]).isoWeek(), 1, 'Jan 7 2007 should be iso week 1'); + assert.equal(moment([2007, 0, 8]).isoWeek(), 2, 'Jan 8 2007 should be iso week 2'); + assert.equal(moment([2007, 0, 14]).isoWeek(), 2, 'Jan 14 2007 should be iso week 2'); + assert.equal(moment([2007, 0, 15]).isoWeek(), 3, 'Jan 15 2007 should be iso week 3'); +}); + +test('iso weeks year starting tuesday', function (assert) { + assert.equal(moment([2007, 11, 31]).isoWeek(), 1, 'Dec 31 2007 should be iso week 1'); + assert.equal(moment([2008, 0, 1]).isoWeek(), 1, 'Jan 1 2008 should be iso week 1'); + assert.equal(moment([2008, 0, 6]).isoWeek(), 1, 'Jan 6 2008 should be iso week 1'); + assert.equal(moment([2008, 0, 7]).isoWeek(), 2, 'Jan 7 2008 should be iso week 2'); + assert.equal(moment([2008, 0, 13]).isoWeek(), 2, 'Jan 13 2008 should be iso week 2'); + assert.equal(moment([2008, 0, 14]).isoWeek(), 3, 'Jan 14 2008 should be iso week 3'); +}); + +test('iso weeks year starting wednesday', function (assert) { + assert.equal(moment([2002, 11, 30]).isoWeek(), 1, 'Dec 30 2002 should be iso week 1'); + assert.equal(moment([2003, 0, 1]).isoWeek(), 1, 'Jan 1 2003 should be iso week 1'); + assert.equal(moment([2003, 0, 5]).isoWeek(), 1, 'Jan 5 2003 should be iso week 1'); + assert.equal(moment([2003, 0, 6]).isoWeek(), 2, 'Jan 6 2003 should be iso week 2'); + assert.equal(moment([2003, 0, 12]).isoWeek(), 2, 'Jan 12 2003 should be iso week 2'); + assert.equal(moment([2003, 0, 13]).isoWeek(), 3, 'Jan 13 2003 should be iso week 3'); +}); + +test('iso weeks year starting thursday', function (assert) { + assert.equal(moment([2008, 11, 29]).isoWeek(), 1, 'Dec 29 2008 should be iso week 1'); + assert.equal(moment([2009, 0, 1]).isoWeek(), 1, 'Jan 1 2009 should be iso week 1'); + assert.equal(moment([2009, 0, 4]).isoWeek(), 1, 'Jan 4 2009 should be iso week 1'); + assert.equal(moment([2009, 0, 5]).isoWeek(), 2, 'Jan 5 2009 should be iso week 2'); + assert.equal(moment([2009, 0, 11]).isoWeek(), 2, 'Jan 11 2009 should be iso week 2'); + assert.equal(moment([2009, 0, 13]).isoWeek(), 3, 'Jan 12 2009 should be iso week 3'); +}); + +test('iso weeks year starting friday', function (assert) { + assert.equal(moment([2009, 11, 28]).isoWeek(), 53, 'Dec 28 2009 should be iso week 53'); + assert.equal(moment([2010, 0, 1]).isoWeek(), 53, 'Jan 1 2010 should be iso week 53'); + assert.equal(moment([2010, 0, 3]).isoWeek(), 53, 'Jan 3 2010 should be iso week 53'); + assert.equal(moment([2010, 0, 4]).isoWeek(), 1, 'Jan 4 2010 should be iso week 1'); + assert.equal(moment([2010, 0, 10]).isoWeek(), 1, 'Jan 10 2010 should be iso week 1'); + assert.equal(moment([2010, 0, 11]).isoWeek(), 2, 'Jan 11 2010 should be iso week 2'); +}); + +test('iso weeks year starting saturday', function (assert) { + assert.equal(moment([2010, 11, 27]).isoWeek(), 52, 'Dec 27 2010 should be iso week 52'); + assert.equal(moment([2011, 0, 1]).isoWeek(), 52, 'Jan 1 2011 should be iso week 52'); + assert.equal(moment([2011, 0, 2]).isoWeek(), 52, 'Jan 2 2011 should be iso week 52'); + assert.equal(moment([2011, 0, 3]).isoWeek(), 1, 'Jan 3 2011 should be iso week 1'); + assert.equal(moment([2011, 0, 9]).isoWeek(), 1, 'Jan 9 2011 should be iso week 1'); + assert.equal(moment([2011, 0, 10]).isoWeek(), 2, 'Jan 10 2011 should be iso week 2'); +}); + +test('iso weeks year starting sunday formatted', function (assert) { + assert.equal(moment([2012, 0, 1]).format('W WW Wo'), '52 52 52nd', 'Jan 1 2012 should be iso week 52'); + assert.equal(moment([2012, 0, 2]).format('W WW Wo'), '1 01 1st', 'Jan 2 2012 should be iso week 1'); + assert.equal(moment([2012, 0, 8]).format('W WW Wo'), '1 01 1st', 'Jan 8 2012 should be iso week 1'); + assert.equal(moment([2012, 0, 9]).format('W WW Wo'), '2 02 2nd', 'Jan 9 2012 should be iso week 2'); + assert.equal(moment([2012, 0, 15]).format('W WW Wo'), '2 02 2nd', 'Jan 15 2012 should be iso week 2'); +}); + +test('weeks plural year starting sunday', function (assert) { + assert.equal(moment([2012, 0, 1]).weeks(), 1, 'Jan 1 2012 should be week 1'); + assert.equal(moment([2012, 0, 7]).weeks(), 1, 'Jan 7 2012 should be week 1'); + assert.equal(moment([2012, 0, 8]).weeks(), 2, 'Jan 8 2012 should be week 2'); + assert.equal(moment([2012, 0, 14]).weeks(), 2, 'Jan 14 2012 should be week 2'); + assert.equal(moment([2012, 0, 15]).weeks(), 3, 'Jan 15 2012 should be week 3'); +}); + +test('iso weeks plural year starting sunday', function (assert) { + assert.equal(moment([2012, 0, 1]).isoWeeks(), 52, 'Jan 1 2012 should be iso week 52'); + assert.equal(moment([2012, 0, 2]).isoWeeks(), 1, 'Jan 2 2012 should be iso week 1'); + assert.equal(moment([2012, 0, 8]).isoWeeks(), 1, 'Jan 8 2012 should be iso week 1'); + assert.equal(moment([2012, 0, 9]).isoWeeks(), 2, 'Jan 9 2012 should be iso week 2'); + assert.equal(moment([2012, 0, 15]).isoWeeks(), 2, 'Jan 15 2012 should be iso week 2'); +}); + +test('weeks setter', function (assert) { + assert.equal(moment([2012, 0, 1]).week(30).week(), 30, 'Setting Jan 1 2012 to week 30 should work'); + assert.equal(moment([2012, 0, 7]).week(30).week(), 30, 'Setting Jan 7 2012 to week 30 should work'); + assert.equal(moment([2012, 0, 8]).week(30).week(), 30, 'Setting Jan 8 2012 to week 30 should work'); + assert.equal(moment([2012, 0, 14]).week(30).week(), 30, 'Setting Jan 14 2012 to week 30 should work'); + assert.equal(moment([2012, 0, 15]).week(30).week(), 30, 'Setting Jan 15 2012 to week 30 should work'); +}); + +test('iso weeks setter', function (assert) { + assert.equal(moment([2012, 0, 1]).isoWeeks(25).isoWeeks(), 25, 'Setting Jan 1 2012 to week 25 should work'); + assert.equal(moment([2012, 0, 2]).isoWeeks(24).isoWeeks(), 24, 'Setting Jan 2 2012 to week 24 should work'); + assert.equal(moment([2012, 0, 8]).isoWeeks(23).isoWeeks(), 23, 'Setting Jan 8 2012 to week 23 should work'); + assert.equal(moment([2012, 0, 9]).isoWeeks(22).isoWeeks(), 22, 'Setting Jan 9 2012 to week 22 should work'); + assert.equal(moment([2012, 0, 15]).isoWeeks(21).isoWeeks(), 21, 'Setting Jan 15 2012 to week 21 should work'); +}); + +test('iso weeks setter day of year', function (assert) { + assert.equal(moment([2012, 0, 1]).isoWeek(1).dayOfYear(), 9, 'Setting Jan 1 2012 to week 1 should be day of year 8'); + assert.equal(moment([2012, 0, 1]).isoWeek(1).year(), 2011, 'Setting Jan 1 2012 to week 1 should be year 2011'); + assert.equal(moment([2012, 0, 2]).isoWeek(1).dayOfYear(), 2, 'Setting Jan 2 2012 to week 1 should be day of year 2'); + assert.equal(moment([2012, 0, 8]).isoWeek(1).dayOfYear(), 8, 'Setting Jan 8 2012 to week 1 should be day of year 8'); + assert.equal(moment([2012, 0, 9]).isoWeek(1).dayOfYear(), 2, 'Setting Jan 9 2012 to week 1 should be day of year 2'); + assert.equal(moment([2012, 0, 15]).isoWeek(1).dayOfYear(), 8, 'Setting Jan 15 2012 to week 1 should be day of year 8'); +}); + +test('years with iso week 53', function (assert) { + // Based on a table taken from https://en.wikipedia.org/wiki/ISO_week_date + // (as downloaded on 2014-01-06) listing the 71 years in a 400-year cycle + // that have 53 weeks; in this case reflecting the 2000 based cycle + assert.equal(moment([2004, 11, 31]).isoWeek(), 53, 'Dec 31 2004 should be iso week 53'); + assert.equal(moment([2009, 11, 31]).isoWeek(), 53, 'Dec 31 2009 should be iso week 53'); + assert.equal(moment([2015, 11, 31]).isoWeek(), 53, 'Dec 31 2015 should be iso week 53'); + assert.equal(moment([2020, 11, 31]).isoWeek(), 53, 'Dec 31 2020 should be iso week 53'); + assert.equal(moment([2026, 11, 31]).isoWeek(), 53, 'Dec 31 2026 should be iso week 53'); + assert.equal(moment([2032, 11, 31]).isoWeek(), 53, 'Dec 31 2032 should be iso week 53'); + assert.equal(moment([2037, 11, 31]).isoWeek(), 53, 'Dec 31 2037 should be iso week 53'); + assert.equal(moment([2043, 11, 31]).isoWeek(), 53, 'Dec 31 2043 should be iso week 53'); + assert.equal(moment([2048, 11, 31]).isoWeek(), 53, 'Dec 31 2048 should be iso week 53'); + assert.equal(moment([2054, 11, 31]).isoWeek(), 53, 'Dec 31 2054 should be iso week 53'); + assert.equal(moment([2060, 11, 31]).isoWeek(), 53, 'Dec 31 2060 should be iso week 53'); + assert.equal(moment([2065, 11, 31]).isoWeek(), 53, 'Dec 31 2065 should be iso week 53'); + assert.equal(moment([2071, 11, 31]).isoWeek(), 53, 'Dec 31 2071 should be iso week 53'); + assert.equal(moment([2076, 11, 31]).isoWeek(), 53, 'Dec 31 2076 should be iso week 53'); + assert.equal(moment([2082, 11, 31]).isoWeek(), 53, 'Dec 31 2082 should be iso week 53'); + assert.equal(moment([2088, 11, 31]).isoWeek(), 53, 'Dec 31 2088 should be iso week 53'); + assert.equal(moment([2093, 11, 31]).isoWeek(), 53, 'Dec 31 2093 should be iso week 53'); + assert.equal(moment([2099, 11, 31]).isoWeek(), 53, 'Dec 31 2099 should be iso week 53'); + assert.equal(moment([2105, 11, 31]).isoWeek(), 53, 'Dec 31 2105 should be iso week 53'); + assert.equal(moment([2111, 11, 31]).isoWeek(), 53, 'Dec 31 2111 should be iso week 53'); + assert.equal(moment([2116, 11, 31]).isoWeek(), 53, 'Dec 31 2116 should be iso week 53'); + assert.equal(moment([2122, 11, 31]).isoWeek(), 53, 'Dec 31 2122 should be iso week 53'); + assert.equal(moment([2128, 11, 31]).isoWeek(), 53, 'Dec 31 2128 should be iso week 53'); + assert.equal(moment([2133, 11, 31]).isoWeek(), 53, 'Dec 31 2133 should be iso week 53'); + assert.equal(moment([2139, 11, 31]).isoWeek(), 53, 'Dec 31 2139 should be iso week 53'); + assert.equal(moment([2144, 11, 31]).isoWeek(), 53, 'Dec 31 2144 should be iso week 53'); + assert.equal(moment([2150, 11, 31]).isoWeek(), 53, 'Dec 31 2150 should be iso week 53'); + assert.equal(moment([2156, 11, 31]).isoWeek(), 53, 'Dec 31 2156 should be iso week 53'); + assert.equal(moment([2161, 11, 31]).isoWeek(), 53, 'Dec 31 2161 should be iso week 53'); + assert.equal(moment([2167, 11, 31]).isoWeek(), 53, 'Dec 31 2167 should be iso week 53'); + assert.equal(moment([2172, 11, 31]).isoWeek(), 53, 'Dec 31 2172 should be iso week 53'); + assert.equal(moment([2178, 11, 31]).isoWeek(), 53, 'Dec 31 2178 should be iso week 53'); + assert.equal(moment([2184, 11, 31]).isoWeek(), 53, 'Dec 31 2184 should be iso week 53'); + assert.equal(moment([2189, 11, 31]).isoWeek(), 53, 'Dec 31 2189 should be iso week 53'); + assert.equal(moment([2195, 11, 31]).isoWeek(), 53, 'Dec 31 2195 should be iso week 53'); + assert.equal(moment([2201, 11, 31]).isoWeek(), 53, 'Dec 31 2201 should be iso week 53'); + assert.equal(moment([2207, 11, 31]).isoWeek(), 53, 'Dec 31 2207 should be iso week 53'); + assert.equal(moment([2212, 11, 31]).isoWeek(), 53, 'Dec 31 2212 should be iso week 53'); + assert.equal(moment([2218, 11, 31]).isoWeek(), 53, 'Dec 31 2218 should be iso week 53'); + assert.equal(moment([2224, 11, 31]).isoWeek(), 53, 'Dec 31 2224 should be iso week 53'); + assert.equal(moment([2229, 11, 31]).isoWeek(), 53, 'Dec 31 2229 should be iso week 53'); + assert.equal(moment([2235, 11, 31]).isoWeek(), 53, 'Dec 31 2235 should be iso week 53'); + assert.equal(moment([2240, 11, 31]).isoWeek(), 53, 'Dec 31 2240 should be iso week 53'); + assert.equal(moment([2246, 11, 31]).isoWeek(), 53, 'Dec 31 2246 should be iso week 53'); + assert.equal(moment([2252, 11, 31]).isoWeek(), 53, 'Dec 31 2252 should be iso week 53'); + assert.equal(moment([2257, 11, 31]).isoWeek(), 53, 'Dec 31 2257 should be iso week 53'); + assert.equal(moment([2263, 11, 31]).isoWeek(), 53, 'Dec 31 2263 should be iso week 53'); + assert.equal(moment([2268, 11, 31]).isoWeek(), 53, 'Dec 31 2268 should be iso week 53'); + assert.equal(moment([2274, 11, 31]).isoWeek(), 53, 'Dec 31 2274 should be iso week 53'); + assert.equal(moment([2280, 11, 31]).isoWeek(), 53, 'Dec 31 2280 should be iso week 53'); + assert.equal(moment([2285, 11, 31]).isoWeek(), 53, 'Dec 31 2285 should be iso week 53'); + assert.equal(moment([2291, 11, 31]).isoWeek(), 53, 'Dec 31 2291 should be iso week 53'); + assert.equal(moment([2296, 11, 31]).isoWeek(), 53, 'Dec 31 2296 should be iso week 53'); + assert.equal(moment([2303, 11, 31]).isoWeek(), 53, 'Dec 31 2303 should be iso week 53'); + assert.equal(moment([2308, 11, 31]).isoWeek(), 53, 'Dec 31 2308 should be iso week 53'); + assert.equal(moment([2314, 11, 31]).isoWeek(), 53, 'Dec 31 2314 should be iso week 53'); + assert.equal(moment([2320, 11, 31]).isoWeek(), 53, 'Dec 31 2320 should be iso week 53'); + assert.equal(moment([2325, 11, 31]).isoWeek(), 53, 'Dec 31 2325 should be iso week 53'); + assert.equal(moment([2331, 11, 31]).isoWeek(), 53, 'Dec 31 2331 should be iso week 53'); + assert.equal(moment([2336, 11, 31]).isoWeek(), 53, 'Dec 31 2336 should be iso week 53'); + assert.equal(moment([2342, 11, 31]).isoWeek(), 53, 'Dec 31 2342 should be iso week 53'); + assert.equal(moment([2348, 11, 31]).isoWeek(), 53, 'Dec 31 2348 should be iso week 53'); + assert.equal(moment([2353, 11, 31]).isoWeek(), 53, 'Dec 31 2353 should be iso week 53'); + assert.equal(moment([2359, 11, 31]).isoWeek(), 53, 'Dec 31 2359 should be iso week 53'); + assert.equal(moment([2364, 11, 31]).isoWeek(), 53, 'Dec 31 2364 should be iso week 53'); + assert.equal(moment([2370, 11, 31]).isoWeek(), 53, 'Dec 31 2370 should be iso week 53'); + assert.equal(moment([2376, 11, 31]).isoWeek(), 53, 'Dec 31 2376 should be iso week 53'); + assert.equal(moment([2381, 11, 31]).isoWeek(), 53, 'Dec 31 2381 should be iso week 53'); + assert.equal(moment([2387, 11, 31]).isoWeek(), 53, 'Dec 31 2387 should be iso week 53'); + assert.equal(moment([2392, 11, 31]).isoWeek(), 53, 'Dec 31 2392 should be iso week 53'); + assert.equal(moment([2398, 11, 31]).isoWeek(), 53, 'Dec 31 2398 should be iso week 53'); +}); + +test('count years with iso week 53', function (assert) { + // Based on https://en.wikipedia.org/wiki/ISO_week_date (as seen on 2014-01-06) + // stating that there are 71 years in a 400-year cycle that have 53 weeks; + // in this case reflecting the 2000 based cycle + var count = 0, i; + for (i = 0; i < 400; i++) { + count += (moment([2000 + i, 11, 31]).isoWeek() === 53) ? 1 : 0; + } + assert.equal(count, 71, 'Should have 71 years in 400-year cycle with iso week 53'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('weeks in year'); + +test('isoWeeksInYear', function (assert) { + assert.equal(moment([2004]).isoWeeksInYear(), 53, '2004 has 53 iso weeks'); + assert.equal(moment([2005]).isoWeeksInYear(), 52, '2005 has 53 iso weeks'); + assert.equal(moment([2006]).isoWeeksInYear(), 52, '2006 has 53 iso weeks'); + assert.equal(moment([2007]).isoWeeksInYear(), 52, '2007 has 52 iso weeks'); + assert.equal(moment([2008]).isoWeeksInYear(), 52, '2008 has 53 iso weeks'); + assert.equal(moment([2009]).isoWeeksInYear(), 53, '2009 has 53 iso weeks'); + assert.equal(moment([2010]).isoWeeksInYear(), 52, '2010 has 52 iso weeks'); + assert.equal(moment([2011]).isoWeeksInYear(), 52, '2011 has 52 iso weeks'); + assert.equal(moment([2012]).isoWeeksInYear(), 52, '2012 has 52 iso weeks'); + assert.equal(moment([2013]).isoWeeksInYear(), 52, '2013 has 52 iso weeks'); + assert.equal(moment([2014]).isoWeeksInYear(), 52, '2014 has 52 iso weeks'); + assert.equal(moment([2015]).isoWeeksInYear(), 53, '2015 has 53 iso weeks'); +}); + +test('weeksInYear doy/dow = 1/4', function (assert) { + moment.locale('1/4', {week: {dow: 1, doy: 4}}); + + assert.equal(moment([2004]).weeksInYear(), 53, '2004 has 53 weeks'); + assert.equal(moment([2005]).weeksInYear(), 52, '2005 has 53 weeks'); + assert.equal(moment([2006]).weeksInYear(), 52, '2006 has 53 weeks'); + assert.equal(moment([2007]).weeksInYear(), 52, '2007 has 52 weeks'); + assert.equal(moment([2008]).weeksInYear(), 52, '2008 has 53 weeks'); + assert.equal(moment([2009]).weeksInYear(), 53, '2009 has 53 weeks'); + assert.equal(moment([2010]).weeksInYear(), 52, '2010 has 52 weeks'); + assert.equal(moment([2011]).weeksInYear(), 52, '2011 has 52 weeks'); + assert.equal(moment([2012]).weeksInYear(), 52, '2012 has 52 weeks'); + assert.equal(moment([2013]).weeksInYear(), 52, '2013 has 52 weeks'); + assert.equal(moment([2014]).weeksInYear(), 52, '2014 has 52 weeks'); + assert.equal(moment([2015]).weeksInYear(), 53, '2015 has 53 weeks'); +}); + +test('weeksInYear doy/dow = 6/12', function (assert) { + moment.locale('6/12', {week: {dow: 6, doy: 12}}); + + assert.equal(moment([2004]).weeksInYear(), 53, '2004 has 53 weeks'); + assert.equal(moment([2005]).weeksInYear(), 52, '2005 has 53 weeks'); + assert.equal(moment([2006]).weeksInYear(), 52, '2006 has 53 weeks'); + assert.equal(moment([2007]).weeksInYear(), 52, '2007 has 52 weeks'); + assert.equal(moment([2008]).weeksInYear(), 52, '2008 has 53 weeks'); + assert.equal(moment([2009]).weeksInYear(), 52, '2009 has 53 weeks'); + assert.equal(moment([2010]).weeksInYear(), 53, '2010 has 52 weeks'); + assert.equal(moment([2011]).weeksInYear(), 52, '2011 has 52 weeks'); + assert.equal(moment([2012]).weeksInYear(), 52, '2012 has 52 weeks'); + assert.equal(moment([2013]).weeksInYear(), 52, '2013 has 52 weeks'); + assert.equal(moment([2014]).weeksInYear(), 52, '2014 has 52 weeks'); + assert.equal(moment([2015]).weeksInYear(), 52, '2015 has 53 weeks'); +}); + +test('weeksInYear doy/dow = 1/7', function (assert) { + moment.locale('1/7', {week: {dow: 1, doy: 7}}); + + assert.equal(moment([2004]).weeksInYear(), 52, '2004 has 53 weeks'); + assert.equal(moment([2005]).weeksInYear(), 52, '2005 has 53 weeks'); + assert.equal(moment([2006]).weeksInYear(), 53, '2006 has 53 weeks'); + assert.equal(moment([2007]).weeksInYear(), 52, '2007 has 52 weeks'); + assert.equal(moment([2008]).weeksInYear(), 52, '2008 has 53 weeks'); + assert.equal(moment([2009]).weeksInYear(), 52, '2009 has 53 weeks'); + assert.equal(moment([2010]).weeksInYear(), 52, '2010 has 52 weeks'); + assert.equal(moment([2011]).weeksInYear(), 52, '2011 has 52 weeks'); + assert.equal(moment([2012]).weeksInYear(), 53, '2012 has 52 weeks'); + assert.equal(moment([2013]).weeksInYear(), 52, '2013 has 52 weeks'); + assert.equal(moment([2014]).weeksInYear(), 52, '2014 has 52 weeks'); + assert.equal(moment([2015]).weeksInYear(), 52, '2015 has 53 weeks'); +}); + +test('weeksInYear doy/dow = 0/6', function (assert) { + moment.locale('0/6', {week: {dow: 0, doy: 6}}); + + assert.equal(moment([2004]).weeksInYear(), 52, '2004 has 53 weeks'); + assert.equal(moment([2005]).weeksInYear(), 53, '2005 has 53 weeks'); + assert.equal(moment([2006]).weeksInYear(), 52, '2006 has 53 weeks'); + assert.equal(moment([2007]).weeksInYear(), 52, '2007 has 52 weeks'); + assert.equal(moment([2008]).weeksInYear(), 52, '2008 has 53 weeks'); + assert.equal(moment([2009]).weeksInYear(), 52, '2009 has 53 weeks'); + assert.equal(moment([2010]).weeksInYear(), 52, '2010 has 52 weeks'); + assert.equal(moment([2011]).weeksInYear(), 53, '2011 has 52 weeks'); + assert.equal(moment([2012]).weeksInYear(), 52, '2012 has 52 weeks'); + assert.equal(moment([2013]).weeksInYear(), 52, '2013 has 52 weeks'); + assert.equal(moment([2014]).weeksInYear(), 52, '2014 has 52 weeks'); + assert.equal(moment([2015]).weeksInYear(), 52, '2015 has 53 weeks'); +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +function isNearSpringDST() { + return moment().subtract(1, 'day').utcOffset() !== moment().add(1, 'day').utcOffset(); +} + +module$1('zone switching'); + +test('local to utc, keepLocalTime = true', function (assert) { + var m = moment(), + fmt = 'YYYY-DD-MM HH:mm:ss'; + assert.equal(m.clone().utc(true).format(fmt), m.format(fmt), 'local to utc failed to keep local time'); +}); + +test('local to utc, keepLocalTime = false', function (assert) { + var m = moment(); + assert.equal(m.clone().utc().valueOf(), m.valueOf(), 'local to utc failed to keep utc time (implicit)'); + assert.equal(m.clone().utc(false).valueOf(), m.valueOf(), 'local to utc failed to keep utc time (explicit)'); +}); + +test('local to zone, keepLocalTime = true', function (assert) { + test.expectedDeprecations('moment().zone'); + var m = moment(), + fmt = 'YYYY-DD-MM HH:mm:ss', + z; + + // Apparently there is -12:00 and +14:00 + // https://en.wikipedia.org/wiki/UTC+14:00 + // https://en.wikipedia.org/wiki/UTC-12:00 + for (z = -12; z <= 14; ++z) { + assert.equal(m.clone().zone(z * 60, true).format(fmt), m.format(fmt), + 'local to zone(' + z + ':00) failed to keep local time'); + } +}); + +test('local to zone, keepLocalTime = false', function (assert) { + test.expectedDeprecations('moment().zone'); + var m = moment(), + z; + + // Apparently there is -12:00 and +14:00 + // https://en.wikipedia.org/wiki/UTC+14:00 + // https://en.wikipedia.org/wiki/UTC-12:00 + for (z = -12; z <= 14; ++z) { + assert.equal(m.clone().zone(z * 60).valueOf(), m.valueOf(), + 'local to zone(' + z + ':00) failed to keep utc time (implicit)'); + assert.equal(m.clone().zone(z * 60, false).valueOf(), m.valueOf(), + 'local to zone(' + z + ':00) failed to keep utc time (explicit)'); + } +}); + +test('utc to local, keepLocalTime = true', function (assert) { + // Don't test near the spring DST transition + if (isNearSpringDST()) { + expect(0); + return; + } + + var um = moment.utc(), + fmt = 'YYYY-DD-MM HH:mm:ss'; + + assert.equal(um.clone().local(true).format(fmt), um.format(fmt), 'utc to local failed to keep local time'); +}); + +test('utc to local, keepLocalTime = false', function (assert) { + var um = moment.utc(); + assert.equal(um.clone().local().valueOf(), um.valueOf(), 'utc to local failed to keep utc time (implicit)'); + assert.equal(um.clone().local(false).valueOf(), um.valueOf(), 'utc to local failed to keep utc time (explicit)'); +}); + +test('zone to local, keepLocalTime = true', function (assert) { + // Don't test near the spring DST transition + if (isNearSpringDST()) { + expect(0); + return; + } + + test.expectedDeprecations('moment().zone'); + + var m = moment(), + fmt = 'YYYY-DD-MM HH:mm:ss', + z; + + // Apparently there is -12:00 and +14:00 + // https://en.wikipedia.org/wiki/UTC+14:00 + // https://en.wikipedia.org/wiki/UTC-12:00 + for (z = -12; z <= 14; ++z) { + m.zone(z * 60); + + assert.equal(m.clone().local(true).format(fmt), m.format(fmt), + 'zone(' + z + ':00) to local failed to keep local time'); + } +}); + +test('zone to local, keepLocalTime = false', function (assert) { + test.expectedDeprecations('moment().zone'); + var m = moment(), + z; + + // Apparently there is -12:00 and +14:00 + // https://en.wikipedia.org/wiki/UTC+14:00 + // https://en.wikipedia.org/wiki/UTC-12:00 + for (z = -12; z <= 14; ++z) { + m.zone(z * 60); + + assert.equal(m.clone().local(false).valueOf(), m.valueOf(), + 'zone(' + z + ':00) to local failed to keep utc time (explicit)'); + assert.equal(m.clone().local().valueOf(), m.valueOf(), + 'zone(' + z + ':00) to local failed to keep utc time (implicit)'); + } +}); + +}))); + + +;(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 each(array, callback) { + var i; + for (i = 0; i < array.length; i++) { + callback(array[i], i, array); + } +} + +function objectKeys(obj) { + if (Object.keys) { + return Object.keys(obj); + } else { + // IE8 + var res = [], i; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + res.push(i); + } + } + return res; + } +} + +// Pick the first defined of two or three arguments. + +function defineCommonLocaleTests(locale, options) { + test('lenient day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing ' + i + ' date check'); + } + }); + + test('lenient day of month ordinal parsing of number', function (assert) { + var i, testMoment; + for (i = 1; i <= 31; ++i) { + testMoment = moment('2014 01 ' + i, 'YYYY MM Do'); + assert.equal(testMoment.year(), 2014, + 'lenient day of month ordinal parsing of number ' + i + ' year check'); + assert.equal(testMoment.month(), 0, + 'lenient day of month ordinal parsing of number ' + i + ' month check'); + assert.equal(testMoment.date(), i, + 'lenient day of month ordinal parsing of number ' + i + ' date check'); + } + }); + + test('strict day of month ordinal parsing', function (assert) { + var i, ordinalStr, testMoment; + for (i = 1; i <= 31; ++i) { + ordinalStr = moment([2014, 0, i]).format('YYYY MM Do'); + testMoment = moment(ordinalStr, 'YYYY MM Do', true); + assert.ok(testMoment.isValid(), 'strict day of month ordinal parsing ' + i); + } + }); + + test('meridiem invariant', function (assert) { + var h, m, t1, t2; + for (h = 0; h < 24; ++h) { + for (m = 0; m < 60; m += 15) { + t1 = moment.utc([2000, 0, 1, h, m]); + t2 = moment.utc(t1.format('A h:mm'), 'A h:mm'); + assert.equal(t2.format('HH:mm'), t1.format('HH:mm'), + 'meridiem at ' + t1.format('HH:mm')); + } + } + }); + + test('date format correctness', function (assert) { + var data, tokens; + data = moment.localeData()._longDateFormat; + tokens = objectKeys(data); + each(tokens, function (srchToken) { + // Check each format string to make sure it does not contain any + // tokens that need to be expanded. + each(tokens, function (baseToken) { + // strip escaped sequences + var format = data[baseToken].replace(/(\[[^\]]*\])/g, ''); + assert.equal(false, !!~format.indexOf(srchToken), + 'contains ' + srchToken + ' in ' + baseToken); + }); + }); + }); + + test('month parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr') { + // I can't fix it :( + expect(0); + return; + } + function tester(format) { + var r; + r = moment(m.format(format), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict'); + } + + for (i = 0; i < 12; ++i) { + m = moment([2015, i, 15, 18]); + tester('MMM'); + tester('MMM.'); + tester('MMMM'); + tester('MMMM.'); + } + }); + + test('weekday parsing correctness', function (assert) { + var i, m; + + if (locale === 'tr' || locale === 'az' || locale === 'ro') { + // tr, az: There is a lower-case letter (ı), that converted to + // upper then lower changes to i + // ro: there is the letter ț which behaves weird under IE8 + expect(0); + return; + } + function tester(format) { + var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString(); + r = moment(m.format(format), format); + assert.equal(r.weekday(), m.weekday(), baseMsg); + r = moment(m.format(format).toLocaleUpperCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper'); + r = moment(m.format(format).toLocaleLowerCase(), format); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower'); + + r = moment(m.format(format), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict'); + r = moment(m.format(format).toLocaleUpperCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict'); + r = moment(m.format(format).toLocaleLowerCase(), format, true); + assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict'); + } + + for (i = 0; i < 7; ++i) { + m = moment.utc([2015, 0, i + 1, 18]); + tester('dd'); + tester('ddd'); + tester('dddd'); + } + }); + + test('valid localeData', function (assert) { + assert.equal(moment().localeData().months().length, 12, 'months should return 12 months'); + assert.equal(moment().localeData().monthsShort().length, 12, 'monthsShort should return 12 months'); + assert.equal(moment().localeData().weekdays().length, 7, 'weekdays should return 7 days'); + assert.equal(moment().localeData().weekdaysShort().length, 7, 'weekdaysShort should return 7 days'); + assert.equal(moment().localeData().weekdaysMin().length, 7, 'monthsShort should return 7 days'); + }); +} + +function setupDeprecationHandler(test, moment$$1, scope) { + test._expectedDeprecations = null; + test._observedDeprecations = null; + test._oldSupress = moment$$1.suppressDeprecationWarnings; + moment$$1.suppressDeprecationWarnings = true; + test.expectedDeprecations = function () { + test._expectedDeprecations = arguments; + test._observedDeprecations = []; + }; + moment$$1.deprecationHandler = function (name, msg) { + var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations); + if (deprecationId === -1) { + throw new Error('Unexpected deprecation thrown name=' + + name + ' msg=' + msg); + } + test._observedDeprecations[deprecationId] = 1; + }; +} + +function teardownDeprecationHandler(test, moment$$1, scope) { + moment$$1.suppressDeprecationWarnings = test._oldSupress; + + if (test._expectedDeprecations != null) { + var missedDeprecations = []; + each(test._expectedDeprecations, function (deprecationPattern, id) { + if (test._observedDeprecations[id] !== 1) { + missedDeprecations.push(deprecationPattern); + } + }); + if (missedDeprecations.length !== 0) { + throw new Error('Expected deprecation warnings did not happen: ' + + missedDeprecations.join(' ')); + } + } +} + +function matchedDeprecation(name, msg, deprecations) { + if (deprecations == null) { + return -1; + } + for (var i = 0; i < deprecations.length; ++i) { + if (name != null && name === deprecations[i]) { + return i; + } + if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) { + return i; + } + } + return -1; +} + +/*global QUnit:false*/ + +var test = QUnit.test; + +var expect = QUnit.expect; + +function module$1 (name, lifecycle) { + QUnit.module(name, { + setup : function () { + moment.locale('en'); + moment.createFromInputFallback = function (config) { + throw new Error('input not handled by moment: ' + config._i); + }; + setupDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.setup) { + lifecycle.setup(); + } + }, + teardown : function () { + teardownDeprecationHandler(test, moment, 'core'); + if (lifecycle && lifecycle.teardown) { + lifecycle.teardown(); + } + } + }); +} + +module$1('zones', { + 'setup': function () { + test.expectedDeprecations('moment().zone'); + } +}); + +test('set zone', function (assert) { + var zone = moment(); + + zone.zone(0); + assert.equal(zone.zone(), 0, 'should be able to set the zone to 0'); + + zone.zone(60); + assert.equal(zone.zone(), 60, 'should be able to set the zone to 60'); + + zone.zone(-60); + assert.equal(zone.zone(), -60, 'should be able to set the zone to -60'); +}); + +test('set zone shorthand', function (assert) { + var zone = moment(); + + zone.zone(1); + assert.equal(zone.zone(), 60, 'setting the zone to 1 should imply hours and convert to 60'); + + zone.zone(-1); + assert.equal(zone.zone(), -60, 'setting the zone to -1 should imply hours and convert to -60'); + + zone.zone(15); + assert.equal(zone.zone(), 900, 'setting the zone to 15 should imply hours and convert to 900'); + + zone.zone(-15); + assert.equal(zone.zone(), -900, 'setting the zone to -15 should imply hours and convert to -900'); + + zone.zone(16); + assert.equal(zone.zone(), 16, 'setting the zone to 16 should imply minutes'); + + zone.zone(-16); + assert.equal(zone.zone(), -16, 'setting the zone to -16 should imply minutes'); +}); + +test('set zone with string', function (assert) { + var zone = moment(); + + zone.zone('+00:00'); + assert.equal(zone.zone(), 0, 'set the zone with a timezone string'); + + zone.zone('2013-03-07T07:00:00-08:00'); + assert.equal(zone.zone(), 480, 'set the zone with a string that does not begin with the timezone'); + + zone.zone('2013-03-07T07:00:00+0100'); + assert.equal(zone.zone(), -60, 'set the zone with a string that uses the +0000 syntax'); + + zone.zone('2013-03-07T07:00:00+02'); + assert.equal(zone.zone(), -120, 'set the zone with a string that uses the +00 syntax'); + + zone.zone('03-07-2013T07:00:00-08:00'); + assert.equal(zone.zone(), 480, 'set the zone with a string with a non-ISO 8601 date'); +}); + +test('change hours when changing the zone', function (assert) { + var zone = moment.utc([2000, 0, 1, 6]); + + zone.zone(0); + assert.equal(zone.hour(), 6, 'UTC 6AM should be 6AM at +0000'); + + zone.zone(60); + assert.equal(zone.hour(), 5, 'UTC 6AM should be 5AM at -0100'); + + zone.zone(-60); + assert.equal(zone.hour(), 7, 'UTC 6AM should be 7AM at +0100'); +}); + +test('change minutes when changing the zone', function (assert) { + var zone = moment.utc([2000, 0, 1, 6, 31]); + + zone.zone(0); + assert.equal(zone.format('HH:mm'), '06:31', 'UTC 6:31AM should be 6:31AM at +0000'); + + zone.zone(30); + assert.equal(zone.format('HH:mm'), '06:01', 'UTC 6:31AM should be 6:01AM at -0030'); + + zone.zone(-30); + assert.equal(zone.format('HH:mm'), '07:01', 'UTC 6:31AM should be 7:01AM at +0030'); + + zone.zone(1380); + assert.equal(zone.format('HH:mm'), '07:31', 'UTC 6:31AM should be 7:31AM at +1380'); +}); + +test('distance from the unix epoch', function (assert) { + var zoneA = moment(), + zoneB = moment(zoneA), + zoneC = moment(zoneA), + zoneD = moment(zoneA), + zoneE = moment(zoneA); + + zoneB.utc(); + assert.equal(+zoneA, +zoneB, 'moment should equal moment.utc'); + + zoneC.zone(-60); + assert.equal(+zoneA, +zoneC, 'moment should equal moment.zone(-60)'); + + zoneD.zone(480); + assert.equal(+zoneA, +zoneD, 'moment should equal moment.zone(480)'); + + zoneE.zone(1000); + assert.equal(+zoneA, +zoneE, 'moment should equal moment.zone(1000)'); +}); + +test('update offset after changing any values', function (assert) { + var oldOffset = moment.updateOffset, + m = moment.utc([2000, 6, 1]); + + moment.updateOffset = function (mom, keepTime) { + if (mom.__doChange) { + if (+mom > 962409600000) { + mom.zone(120, keepTime); + } else { + mom.zone(60, keepTime); + } + } + }; + + assert.equal(m.format('ZZ'), '+0000', 'should be at +0000'); + assert.equal(m.format('HH:mm'), '00:00', 'should start 12AM at +0000 timezone'); + + m.__doChange = true; + m.add(1, 'h'); + + assert.equal(m.format('ZZ'), '-0200', 'should be at -0200'); + assert.equal(m.format('HH:mm'), '23:00', '1AM at +0000 should be 11PM at -0200 timezone'); + + m.subtract(1, 'h'); + + assert.equal(m.format('ZZ'), '-0100', 'should be at -0100'); + assert.equal(m.format('HH:mm'), '23:00', '12AM at +0000 should be 11PM at -0100 timezone'); + + moment.updateOffset = oldOffset; +}); + +test('getters and setters', function (assert) { + var a = moment([2011, 5, 20]); + + assert.equal(a.clone().zone(120).year(2012).year(), 2012, 'should get and set year correctly'); + assert.equal(a.clone().zone(120).month(1).month(), 1, 'should get and set month correctly'); + assert.equal(a.clone().zone(120).date(2).date(), 2, 'should get and set date correctly'); + assert.equal(a.clone().zone(120).day(1).day(), 1, 'should get and set day correctly'); + assert.equal(a.clone().zone(120).hour(1).hour(), 1, 'should get and set hour correctly'); + assert.equal(a.clone().zone(120).minute(1).minute(), 1, 'should get and set minute correctly'); +}); + +test('getters', function (assert) { + var a = moment.utc([2012, 0, 1, 0, 0, 0]); + + assert.equal(a.clone().zone(120).year(), 2011, 'should get year correctly'); + assert.equal(a.clone().zone(120).month(), 11, 'should get month correctly'); + assert.equal(a.clone().zone(120).date(), 31, 'should get date correctly'); + assert.equal(a.clone().zone(120).hour(), 22, 'should get hour correctly'); + assert.equal(a.clone().zone(120).minute(), 0, 'should get minute correctly'); + + assert.equal(a.clone().zone(-120).year(), 2012, 'should get year correctly'); + assert.equal(a.clone().zone(-120).month(), 0, 'should get month correctly'); + assert.equal(a.clone().zone(-120).date(), 1, 'should get date correctly'); + assert.equal(a.clone().zone(-120).hour(), 2, 'should get hour correctly'); + assert.equal(a.clone().zone(-120).minute(), 0, 'should get minute correctly'); + + assert.equal(a.clone().zone(-90).year(), 2012, 'should get year correctly'); + assert.equal(a.clone().zone(-90).month(), 0, 'should get month correctly'); + assert.equal(a.clone().zone(-90).date(), 1, 'should get date correctly'); + assert.equal(a.clone().zone(-90).hour(), 1, 'should get hour correctly'); + assert.equal(a.clone().zone(-90).minute(), 30, 'should get minute correctly'); +}); + +test('from', function (assert) { + var zoneA = moment(), + zoneB = moment(zoneA).zone(720), + zoneC = moment(zoneA).zone(360), + zoneD = moment(zoneA).zone(-690), + other = moment(zoneA).add(35, 'm'); + + assert.equal(zoneA.from(other), zoneB.from(other), 'moment#from should be the same in all zones'); + assert.equal(zoneA.from(other), zoneC.from(other), 'moment#from should be the same in all zones'); + assert.equal(zoneA.from(other), zoneD.from(other), 'moment#from should be the same in all zones'); +}); + +test('diff', function (assert) { + var zoneA = moment(), + zoneB = moment(zoneA).zone(720), + zoneC = moment(zoneA).zone(360), + zoneD = moment(zoneA).zone(-690), + other = moment(zoneA).add(35, 'm'); + + assert.equal(zoneA.diff(other), zoneB.diff(other), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other), zoneC.diff(other), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other), zoneD.diff(other), 'moment#diff should be the same in all zones'); + + assert.equal(zoneA.diff(other, 'minute', true), zoneB.diff(other, 'minute', true), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other, 'minute', true), zoneC.diff(other, 'minute', true), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other, 'minute', true), zoneD.diff(other, 'minute', true), 'moment#diff should be the same in all zones'); + + assert.equal(zoneA.diff(other, 'hour', true), zoneB.diff(other, 'hour', true), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other, 'hour', true), zoneC.diff(other, 'hour', true), 'moment#diff should be the same in all zones'); + assert.equal(zoneA.diff(other, 'hour', true), zoneD.diff(other, 'hour', true), 'moment#diff should be the same in all zones'); +}); + +test('unix offset and timestamp', function (assert) { + var zoneA = moment(), + zoneB = moment(zoneA).zone(720), + zoneC = moment(zoneA).zone(360), + zoneD = moment(zoneA).zone(-690); + + assert.equal(zoneA.unix(), zoneB.unix(), 'moment#unix should be the same in all zones'); + assert.equal(zoneA.unix(), zoneC.unix(), 'moment#unix should be the same in all zones'); + assert.equal(zoneA.unix(), zoneD.unix(), 'moment#unix should be the same in all zones'); + + assert.equal(+zoneA, +zoneB, 'moment#valueOf should be the same in all zones'); + assert.equal(+zoneA, +zoneC, 'moment#valueOf should be the same in all zones'); + assert.equal(+zoneA, +zoneD, 'moment#valueOf should be the same in all zones'); +}); + +test('cloning', function (assert) { + assert.equal(moment().zone(120).clone().zone(), 120, 'explicit cloning should retain the zone'); + assert.equal(moment().zone(-120).clone().zone(), -120, 'explicit cloning should retain the zone'); + assert.equal(moment(moment().zone(120)).zone(), 120, 'implicit cloning should retain the zone'); + assert.equal(moment(moment().zone(-120)).zone(), -120, 'implicit cloning should retain the zone'); +}); + +test('start of / end of', function (assert) { + var a = moment.utc([2010, 1, 2, 0, 0, 0]).zone(450); + + assert.equal(a.clone().startOf('day').hour(), 0, 'start of day should work on moments with a zone'); + assert.equal(a.clone().startOf('day').minute(), 0, 'start of day should work on moments with a zone'); + assert.equal(a.clone().startOf('hour').minute(), 0, 'start of hour should work on moments with a zone'); + + assert.equal(a.clone().endOf('day').hour(), 23, 'end of day should work on moments with a zone'); + assert.equal(a.clone().endOf('day').minute(), 59, 'end of day should work on moments with a zone'); + assert.equal(a.clone().endOf('hour').minute(), 59, 'end of hour should work on moments with a zone'); +}); + +test('reset zone with moment#utc', function (assert) { + var a = moment.utc([2012]).zone(480); + + assert.equal(a.clone().hour(), 16, 'different zone should have different hour'); + assert.equal(a.clone().utc().hour(), 0, 'calling moment#utc should reset the offset'); +}); + +test('reset zone with moment#local', function (assert) { + var a = moment([2012]).zone(480); + + assert.equal(a.clone().local().hour(), 0, 'calling moment#local should reset the offset'); +}); + +test('toDate', function (assert) { + var zoneA = new Date(), + zoneB = moment(zoneA).zone(720).toDate(), + zoneC = moment(zoneA).zone(360).toDate(), + zoneD = moment(zoneA).zone(-690).toDate(); + + assert.equal(+zoneA, +zoneB, 'moment#toDate should output a date with the right unix timestamp'); + assert.equal(+zoneA, +zoneC, 'moment#toDate should output a date with the right unix timestamp'); + assert.equal(+zoneA, +zoneD, 'moment#toDate should output a date with the right unix timestamp'); +}); + +test('same / before / after', function (assert) { + var zoneA = moment().utc(), + zoneB = moment(zoneA).zone(120), + zoneC = moment(zoneA).zone(-120); + + assert.ok(zoneA.isSame(zoneB), 'two moments with different offsets should be the same'); + assert.ok(zoneA.isSame(zoneC), 'two moments with different offsets should be the same'); + + assert.ok(zoneA.isSame(zoneB, 'hour'), 'two moments with different offsets should be the same hour'); + assert.ok(zoneA.isSame(zoneC, 'hour'), 'two moments with different offsets should be the same hour'); + + zoneA.add(1, 'hour'); + + assert.ok(zoneA.isAfter(zoneB), 'isAfter should work with two moments with different offsets'); + assert.ok(zoneA.isAfter(zoneC), 'isAfter should work with two moments with different offsets'); + + assert.ok(zoneA.isAfter(zoneB, 'hour'), 'isAfter:hour should work with two moments with different offsets'); + assert.ok(zoneA.isAfter(zoneC, 'hour'), 'isAfter:hour should work with two moments with different offsets'); + + zoneA.subtract(2, 'hour'); + + assert.ok(zoneA.isBefore(zoneB), 'isBefore should work with two moments with different offsets'); + assert.ok(zoneA.isBefore(zoneC), 'isBefore should work with two moments with different offsets'); + + assert.ok(zoneA.isBefore(zoneB, 'hour'), 'isBefore:hour should work with two moments with different offsets'); + assert.ok(zoneA.isBefore(zoneC, 'hour'), 'isBefore:hour should work with two moments with different offsets'); +}); + +test('add / subtract over dst', function (assert) { + var oldOffset = moment.updateOffset, + m = moment.utc([2000, 2, 31, 3]); + + moment.updateOffset = function (mom, keepTime) { + if (mom.clone().utc().month() > 2) { + mom.zone(-60, keepTime); + } else { + mom.zone(0, keepTime); + } + }; + + assert.equal(m.hour(), 3, 'should start at 00:00'); + + m.add(24, 'hour'); + + assert.equal(m.hour(), 4, 'adding 24 hours should disregard dst'); + + m.subtract(24, 'hour'); + + assert.equal(m.hour(), 3, 'subtracting 24 hours should disregard dst'); + + m.add(1, 'day'); + + assert.equal(m.hour(), 3, 'adding 1 day should have the same hour'); + + m.subtract(1, 'day'); + + assert.equal(m.hour(), 3, 'subtracting 1 day should have the same hour'); + + m.add(1, 'month'); + + assert.equal(m.hour(), 3, 'adding 1 month should have the same hour'); + + m.subtract(1, 'month'); + + assert.equal(m.hour(), 3, 'subtracting 1 month should have the same hour'); + + moment.updateOffset = oldOffset; +}); + +test('isDST', function (assert) { + var oldOffset = moment.updateOffset; + + moment.updateOffset = function (mom, keepTime) { + if (mom.month() > 2 && mom.month() < 9) { + mom.zone(-60, keepTime); + } else { + mom.zone(0, keepTime); + } + }; + + assert.ok(!moment().month(0).isDST(), 'Jan should not be summer dst'); + assert.ok(moment().month(6).isDST(), 'Jul should be summer dst'); + assert.ok(!moment().month(11).isDST(), 'Dec should not be summer dst'); + + moment.updateOffset = function (mom) { + if (mom.month() > 2 && mom.month() < 9) { + mom.zone(0); + } else { + mom.zone(-60); + } + }; + + assert.ok(moment().month(0).isDST(), 'Jan should be winter dst'); + assert.ok(!moment().month(6).isDST(), 'Jul should not be winter dst'); + assert.ok(moment().month(11).isDST(), 'Dec should be winter dst'); + + moment.updateOffset = oldOffset; +}); + +test('zone names', function (assert) { + test.expectedDeprecations(); + assert.equal(moment().zoneAbbr(), '', 'Local zone abbr should be empty'); + assert.equal(moment().format('z'), '', 'Local zone formatted abbr should be empty'); + assert.equal(moment().zoneName(), '', 'Local zone name should be empty'); + assert.equal(moment().format('zz'), '', 'Local zone formatted name should be empty'); + + assert.equal(moment.utc().zoneAbbr(), 'UTC', 'UTC zone abbr should be UTC'); + assert.equal(moment.utc().format('z'), 'UTC', 'UTC zone formatted abbr should be UTC'); + assert.equal(moment.utc().zoneName(), 'Coordinated Universal Time', 'UTC zone abbr should be Coordinated Universal Time'); + assert.equal(moment.utc().format('zz'), 'Coordinated Universal Time', 'UTC zone formatted abbr should be Coordinated Universal Time'); +}); + +test('hours alignment with UTC', function (assert) { + assert.equal(moment().zone(120).hasAlignedHourOffset(), true); + assert.equal(moment().zone(-180).hasAlignedHourOffset(), true); + assert.equal(moment().zone(90).hasAlignedHourOffset(), false); + assert.equal(moment().zone(-90).hasAlignedHourOffset(), false); +}); + +test('hours alignment with other zone', function (assert) { + var m = moment().zone(120); + + assert.equal(m.hasAlignedHourOffset(moment().zone(180)), true); + assert.equal(m.hasAlignedHourOffset(moment().zone(-180)), true); + assert.equal(m.hasAlignedHourOffset(moment().zone(90)), false); + assert.equal(m.hasAlignedHourOffset(moment().zone(-90)), false); + + m = moment().zone(90); + + assert.equal(m.hasAlignedHourOffset(moment().zone(180)), false); + assert.equal(m.hasAlignedHourOffset(moment().zone(-180)), false); + assert.equal(m.hasAlignedHourOffset(moment().zone(30)), true); + assert.equal(m.hasAlignedHourOffset(moment().zone(-30)), true); + + m = moment().zone(-60); + + assert.equal(m.hasAlignedHourOffset(moment().zone(180)), true); + assert.equal(m.hasAlignedHourOffset(moment().zone(-180)), true); + assert.equal(m.hasAlignedHourOffset(moment().zone(90)), false); + assert.equal(m.hasAlignedHourOffset(moment().zone(-90)), false); + + m = moment().zone(25); + + assert.equal(m.hasAlignedHourOffset(moment().zone(-35)), true); + assert.equal(m.hasAlignedHourOffset(moment().zone(85)), true); + + assert.equal(m.hasAlignedHourOffset(moment().zone(35)), false); + assert.equal(m.hasAlignedHourOffset(moment().zone(-85)), false); +}); + +test('parse zone', function (assert) { + var m = moment('2013-01-01T00:00:00-13:00').parseZone(); + assert.equal(m.zone(), 13 * 60); + assert.equal(m.hours(), 0); +}); + +test('parse zone static', function (assert) { + var m = moment.parseZone('2013-01-01T00:00:00-13:00'); + assert.equal(m.zone(), 13 * 60); + assert.equal(m.hours(), 0); +}); + +test('parse zone with more arguments', function (assert) { + test.expectedDeprecations(); + var m; + m = moment.parseZone('2013 01 01 05 -13:00', 'YYYY MM DD HH ZZ'); + assert.equal(m.format(), '2013-01-01T05:00:00-13:00', 'accept input and format'); + m = moment.parseZone('2013-01-01-13:00', 'YYYY MM DD ZZ', true); + assert.equal(m.isValid(), false, 'accept input, format and strict flag'); + m = moment.parseZone('2013-01-01-13:00', ['DD MM YYYY ZZ', 'YYYY MM DD ZZ']); + assert.equal(m.format(), '2013-01-01T00:00:00-13:00', 'accept input and array of formats'); +}); + +test('parse zone with a timezone from the format string', function (assert) { + var m = moment('11-12-2013 -0400 +1100', 'DD-MM-YYYY ZZ #####').parseZone(); + + assert.equal(m.zone(), 4 * 60); +}); + +test('parse zone without a timezone included in the format string', function (assert) { + var m = moment('11-12-2013 -0400 +1100', 'DD-MM-YYYY').parseZone(); + + assert.equal(m.zone(), -11 * 60); +}); + +test('timezone format', function (assert) { + assert.equal(moment().zone(-60).format('ZZ'), '+0100', '-60 -> +0100'); + assert.equal(moment().zone(-90).format('ZZ'), '+0130', '-90 -> +0130'); + assert.equal(moment().zone(-120).format('ZZ'), '+0200', '-120 -> +0200'); + + assert.equal(moment().zone(+60).format('ZZ'), '-0100', '+60 -> -0100'); + assert.equal(moment().zone(+90).format('ZZ'), '-0130', '+90 -> -0130'); + assert.equal(moment().zone(+120).format('ZZ'), '-0200', '+120 -> -0200'); +}); + +test('parse zone without a timezone', function (assert) { + test.expectedDeprecations(); + var m1 = moment.parseZone('2016-02-01T00:00:00'); + var m2 = moment.parseZone('2016-02-01T00:00:00Z'); + var m3 = moment.parseZone('2016-02-01T00:00:00+00:00'); //Someone might argue this is not necessary, you could even argue that is wrong being here. + var m4 = moment.parseZone('2016-02-01T00:00:00+0000'); //Someone might argue this is not necessary, you could even argue that is wrong being here. + assert.equal( + m1.format('M D YYYY HH:mm:ss ZZ'), + '2 1 2016 00:00:00 +0000', + 'Not providing a timezone should keep the time and change the zone to 0' + ); + assert.equal( + m2.format('M D YYYY HH:mm:ss ZZ'), + '2 1 2016 00:00:00 +0000', + 'Not providing a timezone should keep the time and change the zone to 0' + ); + assert.equal( + m3.format('M D YYYY HH:mm:ss ZZ'), + '2 1 2016 00:00:00 +0000', + 'Not providing a timezone should keep the time and change the zone to 0' + ); + assert.equal( + m4.format('M D YYYY HH:mm:ss ZZ'), + '2 1 2016 00:00:00 +0000', + 'Not providing a timezone should keep the time and change the zone to 0' + ); +}); + +test('parse zone with a minutes unit abs less than 16 should retain minutes', function (assert) { + //ensure when minutes are explicitly parsed, they are retained + //instead of converted to hours, even if less than 16 + var n = moment.parseZone('2013-01-01T00:00:00-00:15'); + assert.equal(n.utcOffset(), -15); + assert.equal(n.zone(), 15); + assert.equal(n.hour(), 0); + var o = moment.parseZone('2013-01-01T00:00:00+00:15'); + assert.equal(o.utcOffset(), 15); + assert.equal(o.zone(), -15); + assert.equal(o.hour(), 0); +}); + +}))); diff --git a/public/admin/view/javascript/jquery/flot/API.md b/public/admin/view/javascript/jquery/flot/API.md new file mode 100644 index 0000000..5027b51 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/API.md @@ -0,0 +1,1464 @@ +# Flot Reference # + +Consider a call to the plot function: + +```js +var plot = $.plot(placeholder, data, options) +``` + +The placeholder is a jQuery object or DOM element or jQuery expression +that the plot will be put into. This placeholder needs to have its +width and height set as explained in the [README](README.md) (go read that now if +you haven't, it's short). The plot will modify some properties of the +placeholder so it's recommended you simply pass in a div that you +don't use for anything else. Make sure you check any fancy styling +you apply to the div, e.g. background images have been reported to be a +problem on IE 7. + +The plot function can also be used as a jQuery chainable property. This form +naturally can't return the plot object directly, but you can still access it +via the 'plot' data key, like this: + +```js +var plot = $("#placeholder").plot(data, options).data("plot"); +``` + +The format of the data is documented below, as is the available +options. The plot object returned from the call has some methods you +can call. These are documented separately below. + +Note that in general Flot gives no guarantees if you change any of the +objects you pass in to the plot function or get out of it since +they're not necessarily deep-copied. + + +## Data Format ## + +The data is an array of data series: + +```js +[ series1, series2, ... ] +``` + +A series can either be raw data or an object with properties. The raw +data format is an array of points: + +```js +[ [x1, y1], [x2, y2], ... ] +``` + +E.g. + +```js +[ [1, 3], [2, 14.01], [3.5, 3.14] ] +``` + +Note that to simplify the internal logic in Flot both the x and y +values must be numbers (even if specifying time series, see below for +how to do this). This is a common problem because you might retrieve +data from the database and serialize them directly to JSON without +noticing the wrong type. If you're getting mysterious errors, double +check that you're inputting numbers and not strings. + +If a null is specified as a point or if one of the coordinates is null +or couldn't be converted to a number, the point is ignored when +drawing. As a special case, a null value for lines is interpreted as a +line segment end, i.e. the points before and after the null value are +not connected. + +Lines and points take two coordinates. For filled lines and bars, you +can specify a third coordinate which is the bottom of the filled +area/bar (defaults to 0). + +The format of a single series object is as follows: + +```js +{ + color: color or number + data: rawdata + label: string + lines: specific lines options + bars: specific bars options + points: specific points options + xaxis: number + yaxis: number + clickable: boolean + hoverable: boolean + shadowSize: number + highlightColor: color or number +} +``` + +You don't have to specify any of them except the data, the rest are +options that will get default values. Typically you'd only specify +label and data, like this: + +```js +{ + label: "y = 3", + data: [[0, 3], [10, 3]] +} +``` + +The label is used for the legend, if you don't specify one, the series +will not show up in the legend. + +If you don't specify color, the series will get a color from the +auto-generated colors. The color is either a CSS color specification +(like "rgb(255, 100, 123)") or an integer that specifies which of +auto-generated colors to select, e.g. 0 will get color no. 0, etc. + +The latter is mostly useful if you let the user add and remove series, +in which case you can hard-code the color index to prevent the colors +from jumping around between the series. + +The "xaxis" and "yaxis" options specify which axis to use. The axes +are numbered from 1 (default), so { yaxis: 2} means that the series +should be plotted against the second y axis. + +"clickable" and "hoverable" can be set to false to disable +interactivity for specific series if interactivity is turned on in +the plot, see below. + +The rest of the options are all documented below as they are the same +as the default options passed in via the options parameter in the plot +commmand. When you specify them for a specific data series, they will +override the default options for the plot for that data series. + +Here's a complete example of a simple data specification: + +```js +[ { label: "Foo", data: [ [10, 1], [17, -14], [30, 5] ] }, + { label: "Bar", data: [ [11, 13], [19, 11], [30, -7] ] } +] +``` + + +## Plot Options ## + +All options are completely optional. They are documented individually +below, to change them you just specify them in an object, e.g. + +```js +var options = { + series: { + lines: { show: true }, + points: { show: true } + } +}; + +$.plot(placeholder, data, options); +``` + + +## Customizing the legend ## + +```js +legend: { + show: boolean + labelFormatter: null or (fn: string, series object -> string) + labelBoxBorderColor: color + noColumns: number + position: "ne" or "nw" or "se" or "sw" + margin: number of pixels or [x margin, y margin] + backgroundColor: null or color + backgroundOpacity: number between 0 and 1 + container: null or jQuery object/DOM element/jQuery expression + sorted: null/false, true, "ascending", "descending", "reverse", or a comparator +} +``` + +The legend is generated as a table with the data series labels and +small label boxes with the color of the series. If you want to format +the labels in some way, e.g. make them to links, you can pass in a +function for "labelFormatter". Here's an example that makes them +clickable: + +```js +labelFormatter: function(label, series) { + // series is the series object for the label + return '<a href="#' + label + '">' + label + '</a>'; +} +``` + +To prevent a series from showing up in the legend, simply have the function +return null. + +"noColumns" is the number of columns to divide the legend table into. +"position" specifies the overall placement of the legend within the +plot (top-right, top-left, etc.) and margin the distance to the plot +edge (this can be either a number or an array of two numbers like [x, +y]). "backgroundColor" and "backgroundOpacity" specifies the +background. The default is a partly transparent auto-detected +background. + +If you want the legend to appear somewhere else in the DOM, you can +specify "container" as a jQuery object/expression to put the legend +table into. The "position" and "margin" etc. options will then be +ignored. Note that Flot will overwrite the contents of the container. + +Legend entries appear in the same order as their series by default. If "sorted" +is "reverse" then they appear in the opposite order from their series. To sort +them alphabetically, you can specify true, "ascending" or "descending", where +true and "ascending" are equivalent. + +You can also provide your own comparator function that accepts two +objects with "label" and "color" properties, and returns zero if they +are equal, a positive value if the first is greater than the second, +and a negative value if the first is less than the second. + +```js +sorted: function(a, b) { + // sort alphabetically in ascending order + return a.label == b.label ? 0 : ( + a.label > b.label ? 1 : -1 + ) +} +``` + + +## Customizing the axes ## + +```js +xaxis, yaxis: { + show: null or true/false + position: "bottom" or "top" or "left" or "right" + mode: null or "time" ("time" requires jquery.flot.time.js plugin) + timezone: null, "browser" or timezone (only makes sense for mode: "time") + + color: null or color spec + tickColor: null or color spec + font: null or font spec object + + min: null or number + max: null or number + autoscaleMargin: null or number + + transform: null or fn: number -> number + inverseTransform: null or fn: number -> number + + ticks: null or number or ticks array or (fn: axis -> ticks array) + tickSize: number or array + minTickSize: number or array + tickFormatter: (fn: number, object -> string) or string + tickDecimals: null or number + + labelWidth: null or number + labelHeight: null or number + reserveSpace: null or true + + tickLength: null or number + + alignTicksWithAxis: null or number +} +``` + +All axes have the same kind of options. The following describes how to +configure one axis, see below for what to do if you've got more than +one x axis or y axis. + +If you don't set the "show" option (i.e. it is null), visibility is +auto-detected, i.e. the axis will show up if there's data associated +with it. You can override this by setting the "show" option to true or +false. + +The "position" option specifies where the axis is placed, bottom or +top for x axes, left or right for y axes. The "mode" option determines +how the data is interpreted, the default of null means as decimal +numbers. Use "time" for time series data; see the time series data +section. The time plugin (jquery.flot.time.js) is required for time +series support. + +The "color" option determines the color of the line and ticks for the axis, and +defaults to the grid color with transparency. For more fine-grained control you +can also set the color of the ticks separately with "tickColor". + +You can customize the font and color used to draw the axis tick labels with CSS +or directly via the "font" option. When "font" is null - the default - each +tick label is given the 'flot-tick-label' class. For compatibility with Flot +0.7 and earlier the labels are also given the 'tickLabel' class, but this is +deprecated and scheduled to be removed with the release of version 1.0.0. + +To enable more granular control over styles, labels are divided between a set +of text containers, with each holding the labels for one axis. These containers +are given the classes 'flot-[x|y]-axis', and 'flot-[x|y]#-axis', where '#' is +the number of the axis when there are multiple axes. For example, the x-axis +labels for a simple plot with only a single x-axis might look like this: + +```html +<div class='flot-x-axis flot-x1-axis'> + <div class='flot-tick-label'>January 2013</div> + ... +</div> +``` + +For direct control over label styles you can also provide "font" as an object +with this format: + +```js +{ + size: 11, + lineHeight: 13, + style: "italic", + weight: "bold", + family: "sans-serif", + variant: "small-caps", + color: "#545454" +} +``` + +The size and lineHeight must be expressed in pixels; CSS units such as 'em' +or 'smaller' are not allowed. + +The options "min"/"max" are the precise minimum/maximum value on the +scale. If you don't specify either of them, a value will automatically +be chosen based on the minimum/maximum data values. Note that Flot +always examines all the data values you feed to it, even if a +restriction on another axis may make some of them invisible (this +makes interactive use more stable). + +The "autoscaleMargin" is a bit esoteric: it's the fraction of margin +that the scaling algorithm will add to avoid that the outermost points +ends up on the grid border. Note that this margin is only applied when +a min or max value is not explicitly set. If a margin is specified, +the plot will furthermore extend the axis end-point to the nearest +whole tick. The default value is "null" for the x axes and 0.02 for y +axes which seems appropriate for most cases. + +"transform" and "inverseTransform" are callbacks you can put in to +change the way the data is drawn. You can design a function to +compress or expand certain parts of the axis non-linearly, e.g. +suppress weekends or compress far away points with a logarithm or some +other means. When Flot draws the plot, each value is first put through +the transform function. Here's an example, the x axis can be turned +into a natural logarithm axis with the following code: + +```js +xaxis: { + transform: function (v) { return Math.log(v); }, + inverseTransform: function (v) { return Math.exp(v); } +} +``` + +Similarly, for reversing the y axis so the values appear in inverse +order: + +```js +yaxis: { + transform: function (v) { return -v; }, + inverseTransform: function (v) { return -v; } +} +``` + +Note that for finding extrema, Flot assumes that the transform +function does not reorder values (it should be monotone). + +The inverseTransform is simply the inverse of the transform function +(so v == inverseTransform(transform(v)) for all relevant v). It is +required for converting from canvas coordinates to data coordinates, +e.g. for a mouse interaction where a certain pixel is clicked. If you +don't use any interactive features of Flot, you may not need it. + + +The rest of the options deal with the ticks. + +If you don't specify any ticks, a tick generator algorithm will make +some for you. The algorithm has two passes. It first estimates how +many ticks would be reasonable and uses this number to compute a nice +round tick interval size. Then it generates the ticks. + +You can specify how many ticks the algorithm aims for by setting +"ticks" to a number. The algorithm always tries to generate reasonably +round tick values so even if you ask for three ticks, you might get +five if that fits better with the rounding. If you don't want any +ticks at all, set "ticks" to 0 or an empty array. + +Another option is to skip the rounding part and directly set the tick +interval size with "tickSize". If you set it to 2, you'll get ticks at +2, 4, 6, etc. Alternatively, you can specify that you just don't want +ticks at a size less than a specific tick size with "minTickSize". +Note that for time series, the format is an array like [2, "month"], +see the next section. + +If you want to completely override the tick algorithm, you can specify +an array for "ticks", either like this: + +```js +ticks: [0, 1.2, 2.4] +``` + +Or like this where the labels are also customized: + +```js +ticks: [[0, "zero"], [1.2, "one mark"], [2.4, "two marks"]] +``` + +You can mix the two if you like. + +For extra flexibility you can specify a function as the "ticks" +parameter. The function will be called with an object with the axis +min and max and should return a ticks array. Here's a simplistic tick +generator that spits out intervals of pi, suitable for use on the x +axis for trigonometric functions: + +```js +function piTickGenerator(axis) { + var res = [], i = Math.floor(axis.min / Math.PI); + do { + var v = i * Math.PI; + res.push([v, i + "\u03c0"]); + ++i; + } while (v < axis.max); + return res; +} +``` + +You can control how the ticks look like with "tickDecimals", the +number of decimals to display (default is auto-detected). + +Alternatively, for ultimate control over how ticks are formatted you can +provide a function to "tickFormatter". The function is passed two +parameters, the tick value and an axis object with information, and +should return a string. The default formatter looks like this: + +```js +function formatter(val, axis) { + return val.toFixed(axis.tickDecimals); +} +``` + +The axis object has "min" and "max" with the range of the axis, +"tickDecimals" with the number of decimals to round the value to and +"tickSize" with the size of the interval between ticks as calculated +by the automatic axis scaling algorithm (or specified by you). Here's +an example of a custom formatter: + +```js +function suffixFormatter(val, axis) { + if (val > 1000000) + return (val / 1000000).toFixed(axis.tickDecimals) + " MB"; + else if (val > 1000) + return (val / 1000).toFixed(axis.tickDecimals) + " kB"; + else + return val.toFixed(axis.tickDecimals) + " B"; +} +``` + +"labelWidth" and "labelHeight" specifies a fixed size of the tick +labels in pixels. They're useful in case you need to align several +plots. "reserveSpace" means that even if an axis isn't shown, Flot +should reserve space for it - it is useful in combination with +labelWidth and labelHeight for aligning multi-axis charts. + +"tickLength" is the length of the tick lines in pixels. By default, the +innermost axes will have ticks that extend all across the plot, while +any extra axes use small ticks. A value of null means use the default, +while a number means small ticks of that length - set it to 0 to hide +the lines completely. + +If you set "alignTicksWithAxis" to the number of another axis, e.g. +alignTicksWithAxis: 1, Flot will ensure that the autogenerated ticks +of this axis are aligned with the ticks of the other axis. This may +improve the looks, e.g. if you have one y axis to the left and one to +the right, because the grid lines will then match the ticks in both +ends. The trade-off is that the forced ticks won't necessarily be at +natural places. + + +## Multiple axes ## + +If you need more than one x axis or y axis, you need to specify for +each data series which axis they are to use, as described under the +format of the data series, e.g. { data: [...], yaxis: 2 } specifies +that a series should be plotted against the second y axis. + +To actually configure that axis, you can't use the xaxis/yaxis options +directly - instead there are two arrays in the options: + +```js +xaxes: [] +yaxes: [] +``` + +Here's an example of configuring a single x axis and two y axes (we +can leave options of the first y axis empty as the defaults are fine): + +```js +{ + xaxes: [ { position: "top" } ], + yaxes: [ { }, { position: "right", min: 20 } ] +} +``` + +The arrays get their default values from the xaxis/yaxis settings, so +say you want to have all y axes start at zero, you can simply specify +yaxis: { min: 0 } instead of adding a min parameter to all the axes. + +Generally, the various interfaces in Flot dealing with data points +either accept an xaxis/yaxis parameter to specify which axis number to +use (starting from 1), or lets you specify the coordinate directly as +x2/x3/... or x2axis/x3axis/... instead of "x" or "xaxis". + + +## Time series data ## + +Please note that it is now required to include the time plugin, +jquery.flot.time.js, for time series support. + +Time series are a bit more difficult than scalar data because +calendars don't follow a simple base 10 system. For many cases, Flot +abstracts most of this away, but it can still be a bit difficult to +get the data into Flot. So we'll first discuss the data format. + +The time series support in Flot is based on Javascript timestamps, +i.e. everywhere a time value is expected or handed over, a Javascript +timestamp number is used. This is a number, not a Date object. A +Javascript timestamp is the number of milliseconds since January 1, +1970 00:00:00 UTC. This is almost the same as Unix timestamps, except it's +in milliseconds, so remember to multiply by 1000! + +You can see a timestamp like this + +```js +alert((new Date()).getTime()) +``` + +There are different schools of thought when it comes to diplay of +timestamps. Many will want the timestamps to be displayed according to +a certain time zone, usually the time zone in which the data has been +produced. Some want the localized experience, where the timestamps are +displayed according to the local time of the visitor. Flot supports +both. Optionally you can include a third-party library to get +additional timezone support. + +Default behavior is that Flot always displays timestamps according to +UTC. The reason being that the core Javascript Date object does not +support other fixed time zones. Often your data is at another time +zone, so it may take a little bit of tweaking to work around this +limitation. + +The easiest way to think about it is to pretend that the data +production time zone is UTC, even if it isn't. So if you have a +datapoint at 2002-02-20 08:00, you can generate a timestamp for eight +o'clock UTC even if it really happened eight o'clock UTC+0200. + +In PHP you can get an appropriate timestamp with: + +```php +strtotime("2002-02-20 UTC") * 1000 +``` + +In Python you can get it with something like: + +```python +calendar.timegm(datetime_object.timetuple()) * 1000 +``` + +In .NET you can get it with something like: + +```aspx +public static int GetJavascriptTimestamp(System.DateTime input) +{ + System.TimeSpan span = new System.TimeSpan(System.DateTime.Parse("1/1/1970").Ticks); + System.DateTime time = input.Subtract(span); + return (long)(time.Ticks / 10000); +} +``` + +Javascript also has some support for parsing date strings, so it is +possible to generate the timestamps manually client-side. + +If you've already got the real UTC timestamp, it's too late to use the +pretend trick described above. But you can fix up the timestamps by +adding the time zone offset, e.g. for UTC+0200 you would add 2 hours +to the UTC timestamp you got. Then it'll look right on the plot. Most +programming environments have some means of getting the timezone +offset for a specific date (note that you need to get the offset for +each individual timestamp to account for daylight savings). + +The alternative with core Javascript is to interpret the timestamps +according to the time zone that the visitor is in, which means that +the ticks will shift with the time zone and daylight savings of each +visitor. This behavior is enabled by setting the axis option +"timezone" to the value "browser". + +If you need more time zone functionality than this, there is still +another option. If you include the "timezone-js" library +<https://github.com/mde/timezone-js> in the page and set axis.timezone +to a value recognized by said library, Flot will use timezone-js to +interpret the timestamps according to that time zone. + +Once you've gotten the timestamps into the data and specified "time" +as the axis mode, Flot will automatically generate relevant ticks and +format them. As always, you can tweak the ticks via the "ticks" option +- just remember that the values should be timestamps (numbers), not +Date objects. + +Tick generation and formatting can also be controlled separately +through the following axis options: + +```js +minTickSize: array +timeformat: null or format string +monthNames: null or array of size 12 of strings +dayNames: null or array of size 7 of strings +twelveHourClock: boolean +``` + +Here "timeformat" is a format string to use. You might use it like +this: + +```js +xaxis: { + mode: "time", + timeformat: "%Y/%m/%d" +} +``` + +This will result in tick labels like "2000/12/24". A subset of the +standard strftime specifiers are supported (plus the nonstandard %q): + +```js +%a: weekday name (customizable) +%b: month name (customizable) +%d: day of month, zero-padded (01-31) +%e: day of month, space-padded ( 1-31) +%H: hours, 24-hour time, zero-padded (00-23) +%I: hours, 12-hour time, zero-padded (01-12) +%m: month, zero-padded (01-12) +%M: minutes, zero-padded (00-59) +%q: quarter (1-4) +%S: seconds, zero-padded (00-59) +%y: year (two digits) +%Y: year (four digits) +%p: am/pm +%P: AM/PM (uppercase version of %p) +%w: weekday as number (0-6, 0 being Sunday) +``` + +Flot 0.8 switched from %h to the standard %H hours specifier. The %h specifier +is still available, for backwards-compatibility, but is deprecated and +scheduled to be removed permanently with the release of version 1.0. + +You can customize the month names with the "monthNames" option. For +instance, for Danish you might specify: + +```js +monthNames: ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"] +``` + +Similarly you can customize the weekday names with the "dayNames" +option. An example in French: + +```js +dayNames: ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"] +``` + +If you set "twelveHourClock" to true, the autogenerated timestamps +will use 12 hour AM/PM timestamps instead of 24 hour. This only +applies if you have not set "timeformat". Use the "%I" and "%p" or +"%P" options if you want to build your own format string with 12-hour +times. + +If the Date object has a strftime property (and it is a function), it +will be used instead of the built-in formatter. Thus you can include +a strftime library such as http://hacks.bluesmoon.info/strftime/ for +more powerful date/time formatting. + +If everything else fails, you can control the formatting by specifying +a custom tick formatter function as usual. Here's a simple example +which will format December 24 as 24/12: + +```js +tickFormatter: function (val, axis) { + var d = new Date(val); + return d.getUTCDate() + "/" + (d.getUTCMonth() + 1); +} +``` + +Note that for the time mode "tickSize" and "minTickSize" are a bit +special in that they are arrays on the form "[value, unit]" where unit +is one of "second", "minute", "hour", "day", "month" and "year". So +you can specify + +```js +minTickSize: [1, "month"] +``` + +to get a tick interval size of at least 1 month and correspondingly, +if axis.tickSize is [2, "day"] in the tick formatter, the ticks have +been produced with two days in-between. + + +## Customizing the data series ## + +```js +series: { + lines, points, bars: { + show: boolean + lineWidth: number + fill: boolean or number + fillColor: null or color/gradient + } + + lines, bars: { + zero: boolean + } + + points: { + radius: number + symbol: "circle" or function + } + + bars: { + barWidth: number + align: "left", "right" or "center" + horizontal: boolean + } + + lines: { + steps: boolean + } + + shadowSize: number + highlightColor: color or number +} + +colors: [ color1, color2, ... ] +``` + +The options inside "series: {}" are copied to each of the series. So +you can specify that all series should have bars by putting it in the +global options, or override it for individual series by specifying +bars in a particular the series object in the array of data. + +The most important options are "lines", "points" and "bars" that +specify whether and how lines, points and bars should be shown for +each data series. In case you don't specify anything at all, Flot will +default to showing lines (you can turn this off with +lines: { show: false }). You can specify the various types +independently of each other, and Flot will happily draw each of them +in turn (this is probably only useful for lines and points), e.g. + +```js +var options = { + series: { + lines: { show: true, fill: true, fillColor: "rgba(255, 255, 255, 0.8)" }, + points: { show: true, fill: false } + } +}; +``` + +"lineWidth" is the thickness of the line or outline in pixels. You can +set it to 0 to prevent a line or outline from being drawn; this will +also hide the shadow. + +"fill" is whether the shape should be filled. For lines, this produces +area graphs. You can use "fillColor" to specify the color of the fill. +If "fillColor" evaluates to false (default for everything except +points which are filled with white), the fill color is auto-set to the +color of the data series. You can adjust the opacity of the fill by +setting fill to a number between 0 (fully transparent) and 1 (fully +opaque). + +For bars, fillColor can be a gradient, see the gradient documentation +below. "barWidth" is the width of the bars in units of the x axis (or +the y axis if "horizontal" is true), contrary to most other measures +that are specified in pixels. For instance, for time series the unit +is milliseconds so 24 * 60 * 60 * 1000 produces bars with the width of +a day. "align" specifies whether a bar should be left-aligned +(default), right-aligned or centered on top of the value it represents. +When "horizontal" is on, the bars are drawn horizontally, i.e. from the +y axis instead of the x axis; note that the bar end points are still +defined in the same way so you'll probably want to swap the +coordinates if you've been plotting vertical bars first. + +Area and bar charts normally start from zero, regardless of the data's range. +This is because they convey information through size, and starting from a +different value would distort their meaning. In cases where the fill is purely +for decorative purposes, however, "zero" allows you to override this behavior. +It defaults to true for filled lines and bars; setting it to false tells the +series to use the same automatic scaling as an un-filled line. + +For lines, "steps" specifies whether two adjacent data points are +connected with a straight (possibly diagonal) line or with first a +horizontal and then a vertical line. Note that this transforms the +data by adding extra points. + +For points, you can specify the radius and the symbol. The only +built-in symbol type is circles, for other types you can use a plugin +or define them yourself by specifying a callback: + +```js +function cross(ctx, x, y, radius, shadow) { + var size = radius * Math.sqrt(Math.PI) / 2; + ctx.moveTo(x - size, y - size); + ctx.lineTo(x + size, y + size); + ctx.moveTo(x - size, y + size); + ctx.lineTo(x + size, y - size); +} +``` + +The parameters are the drawing context, x and y coordinates of the +center of the point, a radius which corresponds to what the circle +would have used and whether the call is to draw a shadow (due to +limited canvas support, shadows are currently faked through extra +draws). It's good practice to ensure that the area covered by the +symbol is the same as for the circle with the given radius, this +ensures that all symbols have approximately the same visual weight. + +"shadowSize" is the default size of shadows in pixels. Set it to 0 to +remove shadows. + +"highlightColor" is the default color of the translucent overlay used +to highlight the series when the mouse hovers over it. + +The "colors" array specifies a default color theme to get colors for +the data series from. You can specify as many colors as you like, like +this: + +```js +colors: ["#d18b2c", "#dba255", "#919733"] +``` + +If there are more data series than colors, Flot will try to generate +extra colors by lightening and darkening colors in the theme. + + +## Customizing the grid ## + +```js +grid: { + show: boolean + aboveData: boolean + color: color + backgroundColor: color/gradient or null + margin: number or margin object + labelMargin: number + axisMargin: number + markings: array of markings or (fn: axes -> array of markings) + borderWidth: number or object with "top", "right", "bottom" and "left" properties with different widths + borderColor: color or null or object with "top", "right", "bottom" and "left" properties with different colors + minBorderMargin: number or null + clickable: boolean + hoverable: boolean + autoHighlight: boolean + mouseActiveRadius: number +} + +interaction: { + redrawOverlayInterval: number or -1 +} +``` + +The grid is the thing with the axes and a number of ticks. Many of the +things in the grid are configured under the individual axes, but not +all. "color" is the color of the grid itself whereas "backgroundColor" +specifies the background color inside the grid area, here null means +that the background is transparent. You can also set a gradient, see +the gradient documentation below. + +You can turn off the whole grid including tick labels by setting +"show" to false. "aboveData" determines whether the grid is drawn +above the data or below (below is default). + +"margin" is the space in pixels between the canvas edge and the grid, +which can be either a number or an object with individual margins for +each side, in the form: + +```js +margin: { + top: top margin in pixels + left: left margin in pixels + bottom: bottom margin in pixels + right: right margin in pixels +} +``` + +"labelMargin" is the space in pixels between tick labels and axis +line, and "axisMargin" is the space in pixels between axes when there +are two next to each other. + +"borderWidth" is the width of the border around the plot. Set it to 0 +to disable the border. Set it to an object with "top", "right", +"bottom" and "left" properties to use different widths. You can +also set "borderColor" if you want the border to have a different color +than the grid lines. Set it to an object with "top", "right", "bottom" +and "left" properties to use different colors. "minBorderMargin" controls +the default minimum margin around the border - it's used to make sure +that points aren't accidentally clipped by the canvas edge so by default +the value is computed from the point radius. + +"markings" is used to draw simple lines and rectangular areas in the +background of the plot. You can either specify an array of ranges on +the form { xaxis: { from, to }, yaxis: { from, to } } (with multiple +axes, you can specify coordinates for other axes instead, e.g. as +x2axis/x3axis/...) or with a function that returns such an array given +the axes for the plot in an object as the first parameter. + +You can set the color of markings by specifying "color" in the ranges +object. Here's an example array: + +```js +markings: [ { xaxis: { from: 0, to: 2 }, yaxis: { from: 10, to: 10 }, color: "#bb0000" }, ... ] +``` + +If you leave out one of the values, that value is assumed to go to the +border of the plot. So for example if you only specify { xaxis: { +from: 0, to: 2 } } it means an area that extends from the top to the +bottom of the plot in the x range 0-2. + +A line is drawn if from and to are the same, e.g. + +```js +markings: [ { yaxis: { from: 1, to: 1 } }, ... ] +``` + +would draw a line parallel to the x axis at y = 1. You can control the +line width with "lineWidth" in the range object. + +An example function that makes vertical stripes might look like this: + +```js +markings: function (axes) { + var markings = []; + for (var x = Math.floor(axes.xaxis.min); x < axes.xaxis.max; x += 2) + markings.push({ xaxis: { from: x, to: x + 1 } }); + return markings; +} +``` + +If you set "clickable" to true, the plot will listen for click events +on the plot area and fire a "plotclick" event on the placeholder with +a position and a nearby data item object as parameters. The coordinates +are available both in the unit of the axes (not in pixels) and in +global screen coordinates. + +Likewise, if you set "hoverable" to true, the plot will listen for +mouse move events on the plot area and fire a "plothover" event with +the same parameters as the "plotclick" event. If "autoHighlight" is +true (the default), nearby data items are highlighted automatically. +If needed, you can disable highlighting and control it yourself with +the highlight/unhighlight plot methods described elsewhere. + +You can use "plotclick" and "plothover" events like this: + +```js +$.plot($("#placeholder"), [ d ], { grid: { clickable: true } }); + +$("#placeholder").bind("plotclick", function (event, pos, item) { + alert("You clicked at " + pos.x + ", " + pos.y); + // axis coordinates for other axes, if present, are in pos.x2, pos.x3, ... + // if you need global screen coordinates, they are pos.pageX, pos.pageY + + if (item) { + highlight(item.series, item.datapoint); + alert("You clicked a point!"); + } +}); +``` + +The item object in this example is either null or a nearby object on the form: + +```js +item: { + datapoint: the point, e.g. [0, 2] + dataIndex: the index of the point in the data array + series: the series object + seriesIndex: the index of the series + pageX, pageY: the global screen coordinates of the point +} +``` + +For instance, if you have specified the data like this + +```js +$.plot($("#placeholder"), [ { label: "Foo", data: [[0, 10], [7, 3]] } ], ...); +``` + +and the mouse is near the point (7, 3), "datapoint" is [7, 3], +"dataIndex" will be 1, "series" is a normalized series object with +among other things the "Foo" label in series.label and the color in +series.color, and "seriesIndex" is 0. Note that plugins and options +that transform the data can shift the indexes from what you specified +in the original data array. + +If you use the above events to update some other information and want +to clear out that info in case the mouse goes away, you'll probably +also need to listen to "mouseout" events on the placeholder div. + +"mouseActiveRadius" specifies how far the mouse can be from an item +and still activate it. If there are two or more points within this +radius, Flot chooses the closest item. For bars, the top-most bar +(from the latest specified data series) is chosen. + +If you want to disable interactivity for a specific data series, you +can set "hoverable" and "clickable" to false in the options for that +series, like this: + +```js +{ data: [...], label: "Foo", clickable: false } +``` + +"redrawOverlayInterval" specifies the maximum time to delay a redraw +of interactive things (this works as a rate limiting device). The +default is capped to 60 frames per second. You can set it to -1 to +disable the rate limiting. + + +## Specifying gradients ## + +A gradient is specified like this: + +```js +{ colors: [ color1, color2, ... ] } +``` + +For instance, you might specify a background on the grid going from +black to gray like this: + +```js +grid: { + backgroundColor: { colors: ["#000", "#999"] } +} +``` + +For the series you can specify the gradient as an object that +specifies the scaling of the brightness and the opacity of the series +color, e.g. + +```js +{ colors: [{ opacity: 0.8 }, { brightness: 0.6, opacity: 0.8 } ] } +``` + +where the first color simply has its alpha scaled, whereas the second +is also darkened. For instance, for bars the following makes the bars +gradually disappear, without outline: + +```js +bars: { + show: true, + lineWidth: 0, + fill: true, + fillColor: { colors: [ { opacity: 0.8 }, { opacity: 0.1 } ] } +} +``` + +Flot currently only supports vertical gradients drawn from top to +bottom because that's what works with IE. + + +## Plot Methods ## + +The Plot object returned from the plot function has some methods you +can call: + + - highlight(series, datapoint) + + Highlight a specific datapoint in the data series. You can either + specify the actual objects, e.g. if you got them from a + "plotclick" event, or you can specify the indices, e.g. + highlight(1, 3) to highlight the fourth point in the second series + (remember, zero-based indexing). + + - unhighlight(series, datapoint) or unhighlight() + + Remove the highlighting of the point, same parameters as + highlight. + + If you call unhighlight with no parameters, e.g. as + plot.unhighlight(), all current highlights are removed. + + - setData(data) + + You can use this to reset the data used. Note that axis scaling, + ticks, legend etc. will not be recomputed (use setupGrid() to do + that). You'll probably want to call draw() afterwards. + + You can use this function to speed up redrawing a small plot if + you know that the axes won't change. Put in the new data with + setData(newdata), call draw(), and you're good to go. Note that + for large datasets, almost all the time is consumed in draw() + plotting the data so in this case don't bother. + + - setupGrid() + + Recalculate and set axis scaling, ticks, legend etc. + + Note that because of the drawing model of the canvas, this + function will immediately redraw (actually reinsert in the DOM) + the labels and the legend, but not the actual tick lines because + they're drawn on the canvas. You need to call draw() to get the + canvas redrawn. + + - draw() + + Redraws the plot canvas. + + - triggerRedrawOverlay() + + Schedules an update of an overlay canvas used for drawing + interactive things like a selection and point highlights. This + is mostly useful for writing plugins. The redraw doesn't happen + immediately, instead a timer is set to catch multiple successive + redraws (e.g. from a mousemove). You can get to the overlay by + setting up a drawOverlay hook. + + - width()/height() + + Gets the width and height of the plotting area inside the grid. + This is smaller than the canvas or placeholder dimensions as some + extra space is needed (e.g. for labels). + + - offset() + + Returns the offset of the plotting area inside the grid relative + to the document, useful for instance for calculating mouse + positions (event.pageX/Y minus this offset is the pixel position + inside the plot). + + - pointOffset({ x: xpos, y: ypos }) + + Returns the calculated offset of the data point at (x, y) in data + space within the placeholder div. If you are working with multiple + axes, you can specify the x and y axis references, e.g. + + ```js + o = pointOffset({ x: xpos, y: ypos, xaxis: 2, yaxis: 3 }) + // o.left and o.top now contains the offset within the div + ```` + + - resize() + + Tells Flot to resize the drawing canvas to the size of the + placeholder. You need to run setupGrid() and draw() afterwards as + canvas resizing is a destructive operation. This is used + internally by the resize plugin. + + - shutdown() + + Cleans up any event handlers Flot has currently registered. This + is used internally. + +There are also some members that let you peek inside the internal +workings of Flot which is useful in some cases. Note that if you change +something in the objects returned, you're changing the objects used by +Flot to keep track of its state, so be careful. + + - getData() + + Returns an array of the data series currently used in normalized + form with missing settings filled in according to the global + options. So for instance to find out what color Flot has assigned + to the data series, you could do this: + + ```js + var series = plot.getData(); + for (var i = 0; i < series.length; ++i) + alert(series[i].color); + ``` + + A notable other interesting field besides color is datapoints + which has a field "points" with the normalized data points in a + flat array (the field "pointsize" is the increment in the flat + array to get to the next point so for a dataset consisting only of + (x,y) pairs it would be 2). + + - getAxes() + + Gets an object with the axes. The axes are returned as the + attributes of the object, so for instance getAxes().xaxis is the + x axis. + + Various things are stuffed inside an axis object, e.g. you could + use getAxes().xaxis.ticks to find out what the ticks are for the + xaxis. Two other useful attributes are p2c and c2p, functions for + transforming from data point space to the canvas plot space and + back. Both returns values that are offset with the plot offset. + Check the Flot source code for the complete set of attributes (or + output an axis with console.log() and inspect it). + + With multiple axes, the extra axes are returned as x2axis, x3axis, + etc., e.g. getAxes().y2axis is the second y axis. You can check + y2axis.used to see whether the axis is associated with any data + points and y2axis.show to see if it is currently shown. + + - getPlaceholder() + + Returns placeholder that the plot was put into. This can be useful + for plugins for adding DOM elements or firing events. + + - getCanvas() + + Returns the canvas used for drawing in case you need to hack on it + yourself. You'll probably need to get the plot offset too. + + - getPlotOffset() + + Gets the offset that the grid has within the canvas as an object + with distances from the canvas edges as "left", "right", "top", + "bottom". I.e., if you draw a circle on the canvas with the center + placed at (left, top), its center will be at the top-most, left + corner of the grid. + + - getOptions() + + Gets the options for the plot, normalized, with default values + filled in. You get a reference to actual values used by Flot, so + if you modify the values in here, Flot will use the new values. + If you change something, you probably have to call draw() or + setupGrid() or triggerRedrawOverlay() to see the change. + + +## Hooks ## + +In addition to the public methods, the Plot object also has some hooks +that can be used to modify the plotting process. You can install a +callback function at various points in the process, the function then +gets access to the internal data structures in Flot. + +Here's an overview of the phases Flot goes through: + + 1. Plugin initialization, parsing options + + 2. Constructing the canvases used for drawing + + 3. Set data: parsing data specification, calculating colors, + copying raw data points into internal format, + normalizing them, finding max/min for axis auto-scaling + + 4. Grid setup: calculating axis spacing, ticks, inserting tick + labels, the legend + + 5. Draw: drawing the grid, drawing each of the series in turn + + 6. Setting up event handling for interactive features + + 7. Responding to events, if any + + 8. Shutdown: this mostly happens in case a plot is overwritten + +Each hook is simply a function which is put in the appropriate array. +You can add them through the "hooks" option, and they are also available +after the plot is constructed as the "hooks" attribute on the returned +plot object, e.g. + +```js + // define a simple draw hook + function hellohook(plot, canvascontext) { alert("hello!"); }; + + // pass it in, in an array since we might want to specify several + var plot = $.plot(placeholder, data, { hooks: { draw: [hellohook] } }); + + // we can now find it again in plot.hooks.draw[0] unless a plugin + // has added other hooks +``` + +The available hooks are described below. All hook callbacks get the +plot object as first parameter. You can find some examples of defined +hooks in the plugins bundled with Flot. + + - processOptions [phase 1] + + ```function(plot, options)``` + + Called after Flot has parsed and merged options. Useful in the + instance where customizations beyond simple merging of default + values is needed. A plugin might use it to detect that it has been + enabled and then turn on or off other options. + + + - processRawData [phase 3] + + ```function(plot, series, data, datapoints)``` + + Called before Flot copies and normalizes the raw data for the given + series. If the function fills in datapoints.points with normalized + points and sets datapoints.pointsize to the size of the points, + Flot will skip the copying/normalization step for this series. + + In any case, you might be interested in setting datapoints.format, + an array of objects for specifying how a point is normalized and + how it interferes with axis scaling. It accepts the following options: + + ```js + { + x, y: boolean, + number: boolean, + required: boolean, + defaultValue: value, + autoscale: boolean + } + ``` + + "x" and "y" specify whether the value is plotted against the x or y axis, + and is currently used only to calculate axis min-max ranges. The default + format array, for example, looks like this: + + ```js + [ + { x: true, number: true, required: true }, + { y: true, number: true, required: true } + ] + ``` + + This indicates that a point, i.e. [0, 25], consists of two values, with the + first being plotted on the x axis and the second on the y axis. + + If "number" is true, then the value must be numeric, and is set to null if + it cannot be converted to a number. + + "defaultValue" provides a fallback in case the original value is null. This + is for instance handy for bars, where one can omit the third coordinate + (the bottom of the bar), which then defaults to zero. + + If "required" is true, then the value must exist (be non-null) for the + point as a whole to be valid. If no value is provided, then the entire + point is cleared out with nulls, turning it into a gap in the series. + + "autoscale" determines whether the value is considered when calculating an + automatic min-max range for the axes that the value is plotted against. + + - processDatapoints [phase 3] + + ```function(plot, series, datapoints)``` + + Called after normalization of the given series but before finding + min/max of the data points. This hook is useful for implementing data + transformations. "datapoints" contains the normalized data points in + a flat array as datapoints.points with the size of a single point + given in datapoints.pointsize. Here's a simple transform that + multiplies all y coordinates by 2: + + ```js + function multiply(plot, series, datapoints) { + var points = datapoints.points, ps = datapoints.pointsize; + for (var i = 0; i < points.length; i += ps) + points[i + 1] *= 2; + } + ``` + + Note that you must leave datapoints in a good condition as Flot + doesn't check it or do any normalization on it afterwards. + + - processOffset [phase 4] + + ```function(plot, offset)``` + + Called after Flot has initialized the plot's offset, but before it + draws any axes or plot elements. This hook is useful for customizing + the margins between the grid and the edge of the canvas. "offset" is + an object with attributes "top", "bottom", "left" and "right", + corresponding to the margins on the four sides of the plot. + + - drawBackground [phase 5] + + ```function(plot, canvascontext)``` + + Called before all other drawing operations. Used to draw backgrounds + or other custom elements before the plot or axes have been drawn. + + - drawSeries [phase 5] + + ```function(plot, canvascontext, series)``` + + Hook for custom drawing of a single series. Called just before the + standard drawing routine has been called in the loop that draws + each series. + + - draw [phase 5] + + ```function(plot, canvascontext)``` + + Hook for drawing on the canvas. Called after the grid is drawn + (unless it's disabled or grid.aboveData is set) and the series have + been plotted (in case any points, lines or bars have been turned + on). For examples of how to draw things, look at the source code. + + - bindEvents [phase 6] + + ```function(plot, eventHolder)``` + + Called after Flot has setup its event handlers. Should set any + necessary event handlers on eventHolder, a jQuery object with the + canvas, e.g. + + ```js + function (plot, eventHolder) { + eventHolder.mousedown(function (e) { + alert("You pressed the mouse at " + e.pageX + " " + e.pageY); + }); + } + ``` + + Interesting events include click, mousemove, mouseup/down. You can + use all jQuery events. Usually, the event handlers will update the + state by drawing something (add a drawOverlay hook and call + triggerRedrawOverlay) or firing an externally visible event for + user code. See the crosshair plugin for an example. + + Currently, eventHolder actually contains both the static canvas + used for the plot itself and the overlay canvas used for + interactive features because some versions of IE get the stacking + order wrong. The hook only gets one event, though (either for the + overlay or for the static canvas). + + Note that custom plot events generated by Flot are not generated on + eventHolder, but on the div placeholder supplied as the first + argument to the plot call. You can get that with + plot.getPlaceholder() - that's probably also the one you should use + if you need to fire a custom event. + + - drawOverlay [phase 7] + + ```function (plot, canvascontext)``` + + The drawOverlay hook is used for interactive things that need a + canvas to draw on. The model currently used by Flot works the way + that an extra overlay canvas is positioned on top of the static + canvas. This overlay is cleared and then completely redrawn + whenever something interesting happens. This hook is called when + the overlay canvas is to be redrawn. + + "canvascontext" is the 2D context of the overlay canvas. You can + use this to draw things. You'll most likely need some of the + metrics computed by Flot, e.g. plot.width()/plot.height(). See the + crosshair plugin for an example. + + - shutdown [phase 8] + + ```function (plot, eventHolder)``` + + Run when plot.shutdown() is called, which usually only happens in + case a plot is overwritten by a new plot. If you're writing a + plugin that adds extra DOM elements or event handlers, you should + add a callback to clean up after you. Take a look at the section in + PLUGINS.txt for more info. + + +## Plugins ## + +Plugins extend the functionality of Flot. To use a plugin, simply +include its Javascript file after Flot in the HTML page. + +If you're worried about download size/latency, you can concatenate all +the plugins you use, and Flot itself for that matter, into one big file +(make sure you get the order right), then optionally run it through a +Javascript minifier such as YUI Compressor. + +Here's a brief explanation of how the plugin plumbings work: + +Each plugin registers itself in the global array $.plot.plugins. When +you make a new plot object with $.plot, Flot goes through this array +calling the "init" function of each plugin and merging default options +from the "option" attribute of the plugin. The init function gets a +reference to the plot object created and uses this to register hooks +and add new public methods if needed. + +See the PLUGINS.txt file for details on how to write a plugin. As the +above description hints, it's actually pretty easy. + + +## Version number ## + +The version number of Flot is available in ```$.plot.version```. diff --git a/public/admin/view/javascript/jquery/flot/CONTRIBUTING.md b/public/admin/view/javascript/jquery/flot/CONTRIBUTING.md new file mode 100644 index 0000000..eef971b --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/CONTRIBUTING.md @@ -0,0 +1,99 @@ +## Contributing to Flot ## + +We welcome all contributions, but following these guidelines results in less +work for us, and a faster and better response. + +### Issues ### + +Issues are not a way to ask general questions about Flot. If you see unexpected +behavior but are not 100% certain that it is a bug, please try posting to the +[forum](http://groups.google.com/group/flot-graphs) first, and confirm that +what you see is really a Flot problem before creating a new issue for it. + +When reporting a bug, please include a working demonstration of the problem, if +possible, or at least a clear description of the options you're using and the +environment (browser and version, jQuery version, other libraries) that you're +running under. + +If you have suggestions for new features, or changes to existing ones, we'd +love to hear them! Please submit each suggestion as a separate new issue. + +If you would like to work on an existing issue, please make sure it is not +already assigned to someone else. If an issue is assigned to someone, that +person has already started working on it. So, pick unassigned issues to prevent +duplicated efforts. + +### Pull Requests ### + +To make merging as easy as possible, please keep these rules in mind: + + 1. Divide larger changes into a series of small, logical commits with + descriptive messages. + + 2. Format your code according to the style guidelines below. + + 3. Submit new features or architectural changes to the <version>-work branch + for the next major release. Submit bug fixes to the master branch. + + 4. Rebase, if necessary, before submitting your pull request, to reduce the + work we need to do to merge it. + +### Flot Style Guidelines ### + +Flot follows the [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines), +with the following updates and exceptions: + +#### Spacing #### + +Do not add horizontal space around parameter lists, loop definitions, or +array/object indices. For example: + +```js + for ( var i = 0; i < data.length; i++ ) { // This block is wrong! + if ( data[ i ] > 1 ) { + data[ i ] = 2; + } + } + + for (var i = 0; i < data.length; i++) { // This block is correct! + if (data[i] > 1) { + data[i] = 2; + } + } +``` + +#### Comments #### + +Use // for all comments except the header at the top of a file or inline +include. + +All // comment blocks should have an empty line above *and* below them. For +example: + +```js + var a = 5; + + // We're going to loop here + // TODO: Make this loop faster, better, stronger! + + for (var x = 0; x < 10; x++) {} +``` + +#### Wrapping #### + +Block comments should be wrapped at 80 characters. + +Code should attempt to wrap at 80 characters, but may run longer if wrapping +would hurt readability more than having to scroll horizontally. This is a +judgement call made on a situational basis. + +Statements containing complex logic should not be wrapped arbitrarily if they +do not exceed 80 characters. For example: + +```js + if (a == 1 && // This block is wrong! + b == 2 && + c == 3) {} + + if (a == 1 && b == 2 && c == 3) {} // This block is correct! +``` diff --git a/public/admin/view/javascript/jquery/flot/FAQ.md b/public/admin/view/javascript/jquery/flot/FAQ.md new file mode 100644 index 0000000..9131e04 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/FAQ.md @@ -0,0 +1,75 @@ +## Frequently asked questions ## + +#### How much data can Flot cope with? #### + +Flot will happily draw everything you send to it so the answer +depends on the browser. The excanvas emulation used for IE (built with +VML) makes IE by far the slowest browser so be sure to test with that +if IE users are in your target group (for large plots in IE, you can +also check out Flashcanvas which may be faster). + +1000 points is not a problem, but as soon as you start having more +points than the pixel width, you should probably start thinking about +downsampling/aggregation as this is near the resolution limit of the +chart anyway. If you downsample server-side, you also save bandwidth. + + +#### Flot isn't working when I'm using JSON data as source! #### + +Actually, Flot loves JSON data, you just got the format wrong. +Double check that you're not inputting strings instead of numbers, +like [["0", "-2.13"], ["5", "4.3"]]. This is most common mistake, and +the error might not show up immediately because Javascript can do some +conversion automatically. + + +#### Can I export the graph? #### + +You can grab the image rendered by the canvas element used by Flot +as a PNG or JPEG (remember to set a background). Note that it won't +include anything not drawn in the canvas (such as the legend). And it +doesn't work with excanvas which uses VML, but you could try +Flashcanvas. + + +#### The bars are all tiny in time mode? #### + +It's not really possible to determine the bar width automatically. +So you have to set the width with the barWidth option which is NOT in +pixels, but in the units of the x axis (or the y axis for horizontal +bars). For time mode that's milliseconds so the default value of 1 +makes the bars 1 millisecond wide. + + +#### Can I use Flot with libraries like Mootools or Prototype? #### + +Yes, Flot supports it out of the box and it's easy! Just use jQuery +instead of $, e.g. call jQuery.plot instead of $.plot and use +jQuery(something) instead of $(something). As a convenience, you can +put in a DOM element for the graph placeholder where the examples and +the API documentation are using jQuery objects. + +Depending on how you include jQuery, you may have to add one line of +code to prevent jQuery from overwriting functions from the other +libraries, see the documentation in jQuery ("Using jQuery with other +libraries") for details. + + +#### Flot doesn't work with [insert name of Javascript UI framework]! #### + +Flot is using standard HTML to make charts. If this is not working, +it's probably because the framework you're using is doing something +weird with the DOM or with the CSS that is interfering with Flot. + +A common problem is that there's display:none on a container until the +user does something. Many tab widgets work this way, and there's +nothing wrong with it - you just can't call Flot inside a display:none +container as explained in the README so you need to hold off the Flot +call until the container is actually displayed (or use +visibility:hidden instead of display:none or move the container +off-screen). + +If you find there's a specific thing we can do to Flot to help, feel +free to submit a bug report. Otherwise, you're welcome to ask for help +on the forum/mailing list, but please don't submit a bug report to +Flot. diff --git a/public/admin/view/javascript/jquery/flot/LICENSE.txt b/public/admin/view/javascript/jquery/flot/LICENSE.txt new file mode 100644 index 0000000..67f4625 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (c) 2007-2013 IOLA and Ole Laursen + +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/public/admin/view/javascript/jquery/flot/Makefile b/public/admin/view/javascript/jquery/flot/Makefile new file mode 100644 index 0000000..2e070d0 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/Makefile @@ -0,0 +1,12 @@ +# Makefile for generating minified files + +.PHONY: all + +# we cheat and process all .js files instead of an exhaustive list +all: $(patsubst %.js,%.min.js,$(filter-out %.min.js,$(wildcard *.js))) + +%.min.js: %.js + yui-compressor $< -o $@ + +test: + ./node_modules/.bin/jshint *jquery.flot.js diff --git a/public/admin/view/javascript/jquery/flot/NEWS.md b/public/admin/view/javascript/jquery/flot/NEWS.md new file mode 100644 index 0000000..da6ecb4 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/NEWS.md @@ -0,0 +1,893 @@ +## Flot 0.8.1 ## + +### Bug fixes ### + + - Fixed a regression in the time plugin, introduced in 0.8, that caused dates + to align to the minute rather than to the highest appropriate unit. This + caused many x-axes in 0.8 to have different ticks than they did in 0.7. + (reported by Tom Sheppard, patch by Daniel Shapiro, issue #1017, pull + request #1023) + + - Fixed a regression in text rendering, introduced in 0.8, that caused axis + labels with the same text as another label on the same axis to disappear. + More generally, it's again possible to have the same text in two locations. + (issue #1032) + + - Fixed a regression in text rendering, introduced in 0.8, where axis labels + were no longer assigned an explicit width, and their text could not wrap. + (reported by sabregreen, issue #1019) + + - Fixed a regression in the pie plugin, introduced in 0.8, that prevented it + from accepting data in the format '[[x, y]]'. + (patch by Nicolas Morel, pull request #1024) + + - The 'zero' series option and 'autoscale' format option are no longer + ignored when the series contains a null value. + (reported by Daniel Shapiro, issue #1033) + + - Avoid triggering the time-mode plugin exception when there are zero series. + (reported by Daniel Rothig, patch by Mark Raymond, issue #1016) + + - When a custom color palette has fewer colors than the default palette, Flot + no longer fills out the colors with the remainder of the default. + (patch by goorpy, issue #1031, pull request #1034) + + - Fixed missing update for bar highlights after a zoom or other redraw. + (reported by Paolo Valleri, issue #1030) + + - Fixed compatibility with jQuery versions earlier than 1.7. + (patch by Lee Willis, issue #1027, pull request #1027) + + - The mouse wheel no longer scrolls the page when using the navigate plugin. + (patch by vird, pull request #1020) + + - Fixed missing semicolons in the core library. + (reported by Michal Zglinski) + + +## Flot 0.8.0 ## + +### API changes ### + +Support for time series has been moved into a plugin, jquery.flot.time.js. +This results in less code if time series are not used. The functionality +remains the same (plus timezone support, as described below); however, the +plugin must be included if axis.mode is set to "time". + +When the axis mode is "time", the axis option "timezone" can be set to null, +"browser", or a particular timezone (e.g. "America/New_York") to control how +the dates are displayed. If null, the dates are displayed as UTC. If +"browser", the dates are displayed in the time zone of the user's browser. + +Date/time formatting has changed and now follows a proper subset of the +standard strftime specifiers, plus one nonstandard specifier for quarters. +Additionally, if a strftime function is found in the Date object's prototype, +it will be used instead of the built-in formatter. + +Axis tick labels now use the class 'flot-tick-label' instead of 'tickLabel'. +The text containers for each axis now use the classes 'flot-[x|y]-axis' and +'flot-[x|y]#-axis' instead of '[x|y]Axis' and '[x|y]#Axis'. For compatibility +with Flot 0.7 and earlier text will continue to use the old classes as well, +but they are considered deprecated and will be removed in a future version. + +In previous versions the axis 'color' option was used to set the color of tick +marks and their label text. It now controls the color of the axis line, which +previously could not be changed separately, and continues to act as a default +for the tick-mark color. The color of tick label text is now set either by +overriding the 'flot-tick-label' CSS rule or via the axis 'font' option. + +A new plugin, jquery.flot.canvas.js, allows axis tick labels to be rendered +directly to the canvas, rather than using HTML elements. This feature can be +toggled with a simple option, making it easy to create interactive plots in the +browser using HTML, then re-render them to canvas for export as an image. + +The plugin tries to remain as faithful as possible to the original HTML render, +and goes so far as to automatically extract styles from CSS, to avoid having to +provide a separate set of styles when rendering to canvas. Due to limitations +of the canvas text API, the plugin cannot reproduce certain features, including +HTML markup embedded in labels, and advanced text styles such as 'em' units. + +The plugin requires support for canvas text, which may not be present in some +older browsers, even if they support the canvas tag itself. To use the plugin +with these browsers try using a shim such as canvas-text or FlashCanvas. + +The base and overlay canvas are now using the CSS classes "flot-base" and +"flot-overlay" to prevent accidental clashes (issue 540). + +### Changes ### + + - Addition of nonstandard %q specifier to date/time formatting. (patch + by risicle, issue 49) + + - Date/time formatting follows proper subset of strftime specifiers, and + support added for Date.prototype.strftime, if found. (patch by Mark Cote, + issues 419 and 558) + + - Fixed display of year ticks. (patch by Mark Cote, issue 195) + + - Support for time series moved to plugin. (patch by Mark Cote) + + - Display time series in different time zones. (patch by Knut Forkalsrud, + issue 141) + + - Added a canvas plugin to enable rendering axis tick labels to the canvas. + (sponsored by YCharts.com, implementation by Ole Laursen and David Schnur) + + - Support for setting the interval between redraws of the overlay canvas with + redrawOverlayInterval. (suggested in issue 185) + + - Support for multiple thresholds in thresholds plugin. (patch by Arnaud + Bellec, issue 523) + + - Support for plotting categories/textual data directly with new categories + plugin. + + - Tick generators now get the whole axis rather than just min/max. + + - Added processOffset and drawBackground hooks. (suggested in issue 639) + + - Added a grid "margin" option to set the space between the canvas edge and + the grid. + + - Prevent the pie example page from generating single-slice pies. (patch by + Shane Reustle) + + - In addition to "left" and "center", bars now recognize "right" as an + alignment option. (patch by Michael Mayer, issue 520) + + - Switched from toFixed to a much faster default tickFormatter. (patch by + Clemens Stolle) + + - Added to a more helpful error when using a time-mode axis without including + the flot.time plugin. (patch by Yael Elmatad) + + - Added a legend "sorted" option to control sorting of legend entries + independent of their series order. (patch by Tom Cleaveland) + + - Added a series "highlightColor" option to control the color of the + translucent overlay that identifies the dataset when the mouse hovers over + it. (patch by Eric Wendelin and Nate Abele, issues 168 and 299) + + - Added a plugin jquery.flot.errorbars, with an accompanying example, that + adds the ability to plot error bars, commonly used in many kinds of + statistical data visualizations. (patch by Rui Pereira, issue 215) + + - The legend now omits entries whose labelFormatter returns null. (patch by + Tom Cleaveland, Christopher Lambert, and Simon Strandgaard) + + - Added support for high pixel density (retina) displays, resulting in much + crisper charts on such devices. (patch by Olivier Guerriat, additional + fixes by Julien Thomas, maimairel, and Lau Bech Lauritzen) + + - Added the ability to control pie shadow position and alpha via a new pie + 'shadow' option. (patch by Julien Thomas, pull request #78) + + - Added the ability to set width and color for individual sides of the grid. + (patch by Ara Anjargolian, additional fixes by Karl Swedberg, pull requests #855 + and #880) + + - The selection plugin's getSelection now returns null when the selection + has been cleared. (patch by Nick Campbell, pull request #852) + + - Added a new option called 'zero' to bars and filled lines series, to control + whether the y-axis minimum is scaled to fit the data or set to zero. + (patch by David Schnur, issues #316, #529, and #856, pull request #911) + + - The plot function is now also a jQuery chainable property. + (patch by David Schnur, issues #734 and #816, pull request #953) + + - When only a single pie slice is beneath the combine threshold it is no longer + replaced by an 'other' slice. (suggested by Devin Bayer, issue #638) + + - Added lineJoin and minSize options to the selection plugin to control the + corner style and minimum size of the selection, respectively. + (patch by Ruth Linehan, pull request #963) + +### Bug fixes ### + + - Fix problem with null values and pie plugin. (patch by gcruxifix, + issue 500) + + - Fix problem with threshold plugin and bars. (based on patch by + kaarlenkaski, issue 348) + + - Fix axis box calculations so the boxes include the outermost part of the + labels too. + + - Fix problem with event clicking and hovering in IE 8 by updating Excanvas + and removing previous work-around. (test case by Ara Anjargolian) + + - Fix issues with blurry 1px border when some measures aren't integer. + (reported by Ara Anjargolian) + + - Fix bug with formats in the data processor. (reported by Peter Hull, + issue 534) + + - Prevent i from being declared global in extractRange. (reported by + Alexander Obukhov, issue 627) + + - Throw errors in a more cross-browser-compatible manner. (patch by + Eddie Kay) + + - Prevent pie slice outlines from being drawn when the stroke width is zero. + (reported by Chris Minett, issue 585) + + - Updated the navigate plugin's inline copy of jquery.mousewheel to fix + Webkit zoom problems. (reported by Hau Nguyen, issue 685) + + - Axis labels no longer appear as decimals rather than integers in certain + cases. (patch by Clemens Stolle, issue 541) + + - Automatic color generation no longer produces only whites and blacks when + there are many series. (patch by David Schnur and Tom Cleaveland) + + - Fixed an error when custom tick labels weren't provided as strings. (patch + by Shad Downey) + + - Prevented the local insertSteps and fmt variables from becoming global. + (first reported by Marc Bennewitz and Szymon Barglowski, patch by Nick + Campbell, issues #825 and #831, pull request #851) + + - Prevented several threshold plugin variables from becoming global. (patch + by Lasse Dahl Ebert) + + - Fixed various jQuery 1.8 compatibility issues. (issues #814 and #819, + pull request #877) + + - Pie charts with a slice equal to or approaching 100% of the pie no longer + appear invisible. (patch by David Schnur, issues #444, #658, #726, #824 + and #850, pull request #879) + + - Prevented several local variables from becoming global. (patch by aaa707) + + - Ensure that the overlay and primary canvases remain aligned. (issue #670, + pull request #901) + + - Added support for jQuery 1.9 by removing and replacing uses of $.browser. + (analysis and patch by Anthony Ryan, pull request #905) + + - Pie charts no longer disappear when redrawn during a resize or update. + (reported by Julien Bec, issue #656, pull request #910) + + - Avoided floating-point precision errors when calculating pie percentages. + (patch by James Ward, pull request #918) + + - Fixed compatibility with jQuery 1.2.6, which has no 'mouseleave' shortcut. + (reported by Bevan, original pull request #920, replaced by direct patch) + + - Fixed sub-pixel rendering issues with crosshair and selection lines. + (patches by alanayoub and Daniel Shapiro, pull requests #17 and #925) + + - Fixed rendering issues when using the threshold plugin with several series. + (patch by Ivan Novikov, pull request #934) + + - Pie charts no longer disappear when redrawn after calling setData(). + (reported by zengge1984 and pareeohnos, issues #810 and #945) + + - Added a work-around for the problem where points with a lineWidth of zero + still showed up with a visible line. (reported by SalvoSav, issue #842, + patch by Jamie Hamel-Smith, pull request #937) + + - Pie charts now accept values in string form, like other plot types. + (reported by laerdal.no, issue #534) + + - Avoid rounding errors in the threshold plugin. + (reported by jerikojerk, issue #895) + + - Fixed an error when using the navigate plugin with jQuery 1.9.x or later. + (reported by Paolo Valleri, issue #964) + + - Fixed inconsistencies between the highlight and unhighlight functions. + (reported by djamshed, issue #987) + + - Fixed recalculation of tickSize and tickDecimals on calls to setupGrid. + (patch by thecountofzero, pull request #861, issues #860, #1000) + + +## Flot 0.7 ## + +### API changes ### + +Multiple axes support. Code using dual axes should be changed from using +x2axis/y2axis in the options to using an array (although backwards- +compatibility hooks are in place). For instance, + +```js +{ + xaxis: { ... }, x2axis: { ... }, + yaxis: { ... }, y2axis: { ... } +} +``` + +becomes + +```js +{ + xaxes: [ { ... }, { ... } ], + yaxes: [ { ... }, { ... } ] +} +``` + +Note that if you're just using one axis, continue to use the xaxis/yaxis +directly (it now sets the default settings for the arrays). Plugins touching +the axes must be ported to take the extra axes into account, check the source +to see some examples. + +A related change is that the visibility of axes is now auto-detected. So if +you were relying on an axis to show up even without any data in the chart, you +now need to set the axis "show" option explicitly. + +"tickColor" on the grid options is now deprecated in favour of a corresponding +option on the axes, so: + +```js +{ grid: { tickColor: "#000" }} +``` + +becomes + +```js +{ xaxis: { tickColor: "#000"}, yaxis: { tickColor: "#000"} } +``` + +But if you just configure a base color Flot will now autogenerate a tick color +by adding transparency. Backwards-compatibility hooks are in place. + +Final note: now that IE 9 is coming out with canvas support, you may want to +adapt the excanvas include to skip loading it in IE 9 (the examples have been +adapted thanks to Ryley Breiddal). An alternative to excanvas using Flash has +also surfaced, if your graphs are slow in IE, you may want to give it a spin: + + http://code.google.com/p/flashcanvas/ + +### Changes ### + + - Support for specifying a bottom for each point for line charts when filling + them, this means that an arbitrary bottom can be used instead of just the x + axis. (based on patches patiently provided by Roman V. Prikhodchenko) + + - New fillbetween plugin that can compute a bottom for a series from another + series, useful for filling areas between lines. + + See new example percentiles.html for a use case. + + - More predictable handling of gaps for the stacking plugin, now all + undefined ranges are skipped. + + - Stacking plugin can stack horizontal bar charts. + + - Navigate plugin now redraws the plot while panning instead of only after + the fact. (raised by lastthemy, issue 235) + + Can be disabled by setting the pan.frameRate option to null. + + - Date formatter now accepts %0m and %0d to get a zero-padded month or day. + (issue raised by Maximillian Dornseif) + + - Revamped internals to support an unlimited number of axes, not just dual. + (sponsored by Flight Data Services, www.flightdataservices.com) + + - New setting on axes, "tickLength", to control the size of ticks or turn + them off without turning off the labels. + + - Axis labels are now put in container divs with classes, for instance labels + in the x axes can be reached via ".xAxis .tickLabel". + + - Support for setting the color of an axis. (sponsored by Flight Data + Services, www.flightdataservices.com) + + - Tick color is now auto-generated as the base color with some transparency, + unless you override it. + + - Support for aligning ticks in the axes with "alignTicksWithAxis" to ensure + that they appear next to each other rather than in between, at the expense + of possibly awkward tick steps. (sponsored by Flight Data Services, + www.flightdataservices.com) + + - Support for customizing the point type through a callback when plotting + points and new symbol plugin with some predefined point types. (sponsored + by Utility Data Corporation) + + - Resize plugin for automatically redrawing when the placeholder changes + size, e.g. on window resizes. (sponsored by Novus Partners) + + A resize() method has been added to plot object facilitate this. + + - Support Infinity/-Infinity for plotting asymptotes by hacking it into + +/-Number.MAX_VALUE. (reported by rabaea.mircea) + + - Support for restricting navigate plugin to not pan/zoom an axis. (based on + patch by kkaefer) + + - Support for providing the drag cursor for the navigate plugin as an option. + (based on patch by Kelly T. Moore) + + - Options for controlling whether an axis is shown or not (suggestion by Timo + Tuominen) and whether to reserve space for it even if it isn't shown. + + - New attribute $.plot.version with the Flot version as a string. + + - The version comment is now included in the minified jquery.flot.min.js. + + - New options.grid.minBorderMargin for adjusting the minimum margin provided + around the border (based on patch by corani, issue 188). + + - Refactor replot behaviour so Flot tries to reuse the existing canvas, + adding shutdown() methods to the plot. (based on patch by Ryley Breiddal, + issue 269) + + This prevents a memory leak in Chrome and hopefully makes replotting faster + for those who are using $.plot instead of .setData()/.draw(). Also update + jQuery to 1.5.1 to prevent IE leaks fixed in jQuery. + + - New real-time line chart example. + + - New hooks: drawSeries, shutdown. + +### Bug fixes ### + + - Fixed problem with findNearbyItem and bars on top of each other. (reported + by ragingchikn, issue 242) + + - Fixed problem with ticks and the border. (based on patch from + ultimatehustler69, issue 236) + + - Fixed problem with plugins adding options to the series objects. + + - Fixed a problem introduced in 0.6 with specifying a gradient with: + + ```{brightness: x, opacity: y }``` + + - Don't use $.browser.msie, check for getContext on the created canvas element + instead and try to use excanvas if it's not found. + + Fixes IE 9 compatibility. + + - highlight(s, index) was looking up the point in the original s.data instead + of in the computed datapoints array, which breaks with plugins that modify + the datapoints, such as the stacking plugin. (reported by curlypaul924, + issue 316) + + - More robust handling of axis from data passed in from getData(). (reported) + by Morgan) + + - Fixed problem with turning off bar outline. (fix by Jordi Castells, + issue 253) + + - Check the selection passed into setSelection in the selection + plugin, to guard against errors when synchronizing plots (fix by Lau + Bech Lauritzen). + + - Fix bug in crosshair code with mouseout resetting the crosshair even + if it is locked (fix by Lau Bech Lauritzen and Banko Adam). + + - Fix bug with points plotting using line width from lines rather than + points. + + - Fix bug with passing non-array 0 data (for plugins that don't expect + arrays, patch by vpapp1). + + - Fix errors in JSON in examples so they work with jQuery 1.4.2 + (fix reported by honestbleeps, issue 357). + + - Fix bug with tooltip in interacting.html, this makes the tooltip + much smoother (fix by bdkahn). Fix related bug inside highlighting + handler in Flot. + + - Use closure trick to make inline colorhelpers plugin respect + jQuery.noConflict(true), renaming the global jQuery object (reported + by Nick Stielau). + + - Listen for mouseleave events and fire a plothover event with empty + item when it occurs to drop highlights when the mouse leaves the + plot (reported by by outspirit). + + - Fix bug with using aboveData with a background (reported by + amitayd). + + - Fix possible excanvas leak (report and suggested fix by tom9729). + + - Fix bug with backwards compatibility for shadowSize = 0 (report and + suggested fix by aspinak). + + - Adapt examples to skip loading excanvas (fix by Ryley Breiddal). + + - Fix bug that prevent a simple f(x) = -x transform from working + correctly (fix by Mike, issue 263). + + - Fix bug in restoring cursor in navigate plugin (reported by Matteo + Gattanini, issue 395). + + - Fix bug in picking items when transform/inverseTransform is in use + (reported by Ofri Raviv, and patches and analysis by Jan and Tom + Paton, issue 334 and 467). + + - Fix problem with unaligned ticks and hover/click events caused by + padding on the placeholder by hardcoding the placeholder padding to + 0 (reported by adityadineshsaxena, Matt Sommer, Daniel Atos and some + other people, issue 301). + + - Update colorhelpers plugin to avoid dying when trying to parse an + invalid string (reported by cadavor, issue 483). + + + +## Flot 0.6 ## + +### API changes ### + +Selection support has been moved to a plugin. Thus if you're passing +selection: { mode: something }, you MUST include the file +jquery.flot.selection.js after jquery.flot.js. This reduces the size of +base Flot and makes it easier to customize the selection as well as +improving code clarity. The change is based on a patch from andershol. + +In the global options specified in the $.plot command, "lines", "points", +"bars" and "shadowSize" have been moved to a sub-object called "series": + +```js +$.plot(placeholder, data, { lines: { show: true }}) +``` + +should be changed to + +```js + $.plot(placeholder, data, { series: { lines: { show: true }}}) +``` + +All future series-specific options will go into this sub-object to +simplify plugin writing. Backward-compatibility code is in place, so +old code should not break. + +"plothover" no longer provides the original data point, but instead a +normalized one, since there may be no corresponding original point. + +Due to a bug in previous versions of jQuery, you now need at least +jQuery 1.2.6. But if you can, try jQuery 1.3.2 as it got some improvements +in event handling speed. + +## Changes ## + + - Added support for disabling interactivity for specific data series. + (request from Ronald Schouten and Steve Upton) + + - Flot now calls $() on the placeholder and optional legend container passed + in so you can specify DOM elements or CSS expressions to make it easier to + use Flot with libraries like Prototype or Mootools or through raw JSON from + Ajax responses. + + - A new "plotselecting" event is now emitted while the user is making a + selection. + + - The "plothover" event is now emitted immediately instead of at most 10 + times per second, you'll have to put in a setTimeout yourself if you're + doing something really expensive on this event. + + - The built-in date formatter can now be accessed as $.plot.formatDate(...) + (suggestion by Matt Manela) and even replaced. + + - Added "borderColor" option to the grid. (patches from Amaury Chamayou and + Mike R. Williamson) + + - Added support for gradient backgrounds for the grid. (based on patch from + Amaury Chamayou, issue 90) + + The "setting options" example provides a demonstration. + + - Gradient bars. (suggestion by stefpet) + + - Added a "plotunselected" event which is triggered when the selection is + removed, see "selection" example. (suggestion by Meda Ugo) + + - The option legend.margin can now specify horizontal and vertical margins + independently. (suggestion by someone who's annoyed) + + - Data passed into Flot is now copied to a new canonical format to enable + further processing before it hits the drawing routines. As a side-effect, + this should make Flot more robust in the face of bad data. (issue 112) + + - Step-wise charting: line charts have a new option "steps" that when set to + true connects the points with horizontal/vertical steps instead of diagonal + lines. + + - The legend labelFormatter now passes the series in addition to just the + label. (suggestion by Vincent Lemeltier) + + - Horizontal bars (based on patch by Jason LeBrun). + + - Support for partial bars by specifying a third coordinate, i.e. they don't + have to start from the axis. This can be used to make stacked bars. + + - New option to disable the (grid.show). + + - Added pointOffset method for converting a point in data space to an offset + within the placeholder. + + - Plugin system: register an init method in the $.flot.plugins array to get + started, see PLUGINS.txt for details on how to write plugins (it's easy). + There are also some extra methods to enable access to internal state. + + - Hooks: you can register functions that are called while Flot is crunching + the data and doing the plot. This can be used to modify Flot without + changing the source, useful for writing plugins. Some hooks are defined, + more are likely to come. + + - Threshold plugin: you can set a threshold and a color, and the data points + below that threshold will then get the color. Useful for marking data + below 0, for instance. + + - Stack plugin: you can specify a stack key for each series to have them + summed. This is useful for drawing additive/cumulative graphs with bars and + (currently unfilled) lines. + + - Crosshairs plugin: trace the mouse position on the axes, enable with + crosshair: { mode: "x"} (see the new tracking example for a use). + + - Image plugin: plot prerendered images. + + - Navigation plugin for panning and zooming a plot. + + - More configurable grid. + + - Axis transformation support, useful for non-linear plots, e.g. log axes and + compressed time axes (like omitting weekends). + + - Support for twelve-hour date formatting (patch by Forrest Aldridge). + + - The color parsing code in Flot has been cleaned up and split out so it's + now available as a separate jQuery plugin. It's included inline in the Flot + source to make dependency managing easier. This also makes it really easy + to use the color helpers in Flot plugins. + +## Bug fixes ## + + - Fixed two corner-case bugs when drawing filled curves. (report and analysis + by Joshua Varner) + + - Fix auto-adjustment code when setting min to 0 for an axis where the + dataset is completely flat on that axis. (report by chovy) + + - Fixed a bug with passing in data from getData to setData when the secondary + axes are used. (reported by nperelman, issue 65) + + - Fixed so that it is possible to turn lines off when no other chart type is + shown (based on problem reported by Glenn Vanderburg), and fixed so that + setting lineWidth to 0 also hides the shadow. (based on problem reported by + Sergio Nunes) + + - Updated mousemove position expression to the latest from jQuery. (reported + by meyuchas) + + - Use CSS borders instead of background in legend. (issues 25 and 45) + + - Explicitly convert axis min/max to numbers. + + - Fixed a bug with drawing marking lines with different colors. (reported by + Khurram) + + - Fixed a bug with returning y2 values in the selection event. (fix by + exists, issue 75) + + - Only set position relative on placeholder if it hasn't already a position + different from static. (reported by kyberneticist, issue 95) + + - Don't round markings to prevent sub-pixel problems. (reported by + Dan Lipsitt) + + - Make the grid border act similarly to a regular CSS border, i.e. prevent + it from overlapping the plot itself. This also fixes a problem with anti- + aliasing when the width is 1 pixel. (reported by Anthony Ettinger) + + - Imported version 3 of excanvas and fixed two issues with the newer version. + Hopefully, this will make Flot work with IE8. (nudge by Fabien Menager, + further analysis by Booink, issue 133) + + - Changed the shadow code for lines to hopefully look a bit better with + vertical lines. + + - Round tick positions to avoid possible problems with fractions. (suggestion + by Fred, issue 130) + + - Made the heuristic for determining how many ticks to aim for a bit smarter. + + - Fix for uneven axis margins (report and patch by Paul Kienzle) and snapping + to ticks. (report and patch by lifthrasiir) + + - Fixed bug with slicing in findNearbyItems. (patch by zollman) + + - Make heuristic for x axis label widths more dynamic. (patch by + rickinhethuis) + + - Make sure points on top take precedence when finding nearby points when + hovering. (reported by didroe, issue 224) + + + +## Flot 0.5 ## + +Timestamps are now in UTC. Also "selected" event -> becomes "plotselected" +with new data, the parameters for setSelection are now different (but +backwards compatibility hooks are in place), coloredAreas becomes markings +with a new interface (but backwards compatibility hooks are in place). + +### API changes ### + +Timestamps in time mode are now displayed according to UTC instead of the time +zone of the visitor. This affects the way the timestamps should be input; +you'll probably have to offset the timestamps according to your local time +zone. It also affects any custom date handling code (which basically now +should use the equivalent UTC date mehods, e.g. .setUTCMonth() instead of +.setMonth(). + +Markings, previously coloredAreas, are now specified as ranges on the axes, +like ```{ xaxis: { from: 0, to: 10 }}```. Furthermore with markings you can +now draw horizontal/vertical lines by setting from and to to the same +coordinate. (idea from line support patch by by Ryan Funduk) + +Interactivity: added a new "plothover" event and this and the "plotclick" +event now returns the closest data item (based on patch by /david, patch by +Mark Byers for bar support). See the revamped "interacting with the data" +example for some hints on what you can do. + +Highlighting: you can now highlight points and datapoints are autohighlighted +when you hover over them (if hovering is turned on). + +Support for dual axis has been added (based on patch by someone who's annoyed +and /david). For each data series you can specify which axes it belongs to, +and there are two more axes, x2axis and y2axis, to customize. This affects the +"selected" event which has been renamed to "plotselected" and spews out +```{ xaxis: { from: -10, to: 20 } ... },``` setSelection in which the +parameters are on a new form (backwards compatible hooks are in place so old +code shouldn't break) and markings (formerly coloredAreas). + +## Changes ## + + - Added support for specifying the size of tick labels (axis.labelWidth, + axis.labelHeight). Useful for specifying a max label size to keep multiple + plots aligned. + + - The "fill" option can now be a number that specifies the opacity of the + fill. + + - You can now specify a coordinate as null (like [2, null]) and Flot will + take the other coordinate into account when scaling the axes. (based on + patch by joebno) + + - New option for bars "align". Set it to "center" to center the bars on the + value they represent. + + - setSelection now takes a second parameter which you can use to prevent the + method from firing the "plotselected" handler. + + - Improved the handling of axis auto-scaling with bars. + +## Bug fixes ## + + - Fixed a bug in calculating spacing around the plot. (reported by + timothytoe) + + - Fixed a bug in finding max values for all-negative data sets. + + - Prevent the possibility of eternal looping in tick calculations. + + - Fixed a bug when borderWidth is set to 0. (reported by Rob/sanchothefat) + + - Fixed a bug with drawing bars extending below 0. (reported by James Hewitt, + patch by Ryan Funduk). + + - Fixed a bug with line widths of bars. (reported by MikeM) + + - Fixed a bug with 'nw' and 'sw' legend positions. + + - Fixed a bug with multi-line x-axis tick labels. (reported by Luca Ciano, + IE-fix help by Savage Zhang) + + - Using the "container" option in legend now overwrites the container element + instead of just appending to it, fixing the infinite legend bug. (reported + by several people, fix by Brad Dewey) + + + +## Flot 0.4 ## + +### API changes ### + +Deprecated axis.noTicks in favor of just specifying the number as axis.ticks. +So ```xaxis: { noTicks: 10 }``` becomes ```xaxis: { ticks: 10 }```. + +Time series support. Specify axis.mode: "time", put in Javascript timestamps +as data, and Flot will automatically spit out sensible ticks. Take a look at +the two new examples. The format can be customized with axis.timeformat and +axis.monthNames, or if that fails with axis.tickFormatter. + +Support for colored background areas via grid.coloredAreas. Specify an array +of { x1, y1, x2, y2 } objects or a function that returns these given +{ xmin, xmax, ymin, ymax }. + +More members on the plot object (report by Chris Davies and others). +"getData" for inspecting the assigned settings on data series (e.g. color) and +"setData", "setupGrid" and "draw" for updating the contents without a total +replot. + +The default number of ticks to aim for is now dependent on the size of the +plot in pixels. Support for customizing tick interval sizes directly with +axis.minTickSize and axis.tickSize. + +Cleaned up the automatic axis scaling algorithm and fixed how it interacts +with ticks. Also fixed a couple of tick-related corner case bugs (one reported +by mainstreetmark, another reported by timothytoe). + +The option axis.tickFormatter now takes a function with two parameters, the +second parameter is an optional object with information about the axis. It has +min, max, tickDecimals, tickSize. + +## Changes ## + + - Added support for segmented lines. (based on patch from Michael MacDonald) + + - Added support for ignoring null and bad values. (suggestion from Nick + Konidaris and joshwaihi) + + - Added support for changing the border width. (thanks to joebno and safoo) + + - Label colors can be changed via CSS by selecting the tickLabel class. + +## Bug fixes ## + + - Fixed a bug in handling single-item bar series. (reported by Emil Filipov) + + - Fixed erratic behaviour when interacting with the plot with IE 7. (reported + by Lau Bech Lauritzen). + + - Prevent IE/Safari text selection when selecting stuff on the canvas. + + + +## Flot 0.3 ## + +This is mostly a quick-fix release because jquery.js wasn't included in the +previous zip/tarball. + +## Changes ## + + - Include jquery.js in the zip/tarball. + + - Support clicking on the plot. Turn it on with grid: { clickable: true }, + then you get a "plotclick" event on the graph placeholder with the position + in units of the plot. + +## Bug fixes ## + + - Fixed a bug in dealing with data where min = max. (thanks to Michael + Messinides) + + + +## Flot 0.2 ## + +The API should now be fully documented. + +### API changes ### + +Moved labelMargin option to grid from x/yaxis. + +## Changes ## + + - Added support for putting a background behind the default legend. The + default is the partly transparent background color. Added backgroundColor + and backgroundOpacity to the legend options to control this. + + - The ticks options can now be a callback function that takes one parameter, + an object with the attributes min and max. The function should return a + ticks array. + + - Added labelFormatter option in legend, useful for turning the legend + labels into links. + + - Reduced the size of the code. (patch by Guy Fraser) + + + +## Flot 0.1 ## + +First public release. diff --git a/public/admin/view/javascript/jquery/flot/PLUGINS.md b/public/admin/view/javascript/jquery/flot/PLUGINS.md new file mode 100644 index 0000000..b5bf300 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/PLUGINS.md @@ -0,0 +1,143 @@ +## Writing plugins ## + +All you need to do to make a new plugin is creating an init function +and a set of options (if needed), stuffing it into an object and +putting it in the $.plot.plugins array. For example: + +```js +function myCoolPluginInit(plot) { + plot.coolstring = "Hello!"; +}; + +$.plot.plugins.push({ init: myCoolPluginInit, options: { ... } }); + +// if $.plot is called, it will return a plot object with the +// attribute "coolstring" +``` + +Now, given that the plugin might run in many different places, it's +a good idea to avoid leaking names. The usual trick here is wrap the +above lines in an anonymous function which is called immediately, like +this: (function () { inner code ... })(). To make it even more robust +in case $ is not bound to jQuery but some other Javascript library, we +can write it as + +```js +(function ($) { + // plugin definition + // ... +})(jQuery); +``` + +There's a complete example below, but you should also check out the +plugins bundled with Flot. + + +## Complete example ## + +Here is a simple debug plugin which alerts each of the series in the +plot. It has a single option that control whether it is enabled and +how much info to output: + +```js +(function ($) { + function init(plot) { + var debugLevel = 1; + + function checkDebugEnabled(plot, options) { + if (options.debug) { + debugLevel = options.debug; + plot.hooks.processDatapoints.push(alertSeries); + } + } + + function alertSeries(plot, series, datapoints) { + var msg = "series " + series.label; + if (debugLevel > 1) { + msg += " with " + series.data.length + " points"; + alert(msg); + } + } + + plot.hooks.processOptions.push(checkDebugEnabled); + } + + var options = { debug: 0 }; + + $.plot.plugins.push({ + init: init, + options: options, + name: "simpledebug", + version: "0.1" + }); +})(jQuery); +``` + +We also define "name" and "version". It's not used by Flot, but might +be helpful for other plugins in resolving dependencies. + +Put the above in a file named "jquery.flot.debug.js", include it in an +HTML page and then it can be used with: + +```js + $.plot($("#placeholder"), [...], { debug: 2 }); +``` + +This simple plugin illustrates a couple of points: + + - It uses the anonymous function trick to avoid name pollution. + - It can be enabled/disabled through an option. + - Variables in the init function can be used to store plot-specific + state between the hooks. + +The two last points are important because there may be multiple plots +on the same page, and you'd want to make sure they are not mixed up. + + +## Shutting down a plugin ## + +Each plot object has a shutdown hook which is run when plot.shutdown() +is called. This usually mostly happens in case another plot is made on +top of an existing one. + +The purpose of the hook is to give you a chance to unbind any event +handlers you've registered and remove any extra DOM things you've +inserted. + +The problem with event handlers is that you can have registered a +handler which is run in some point in the future, e.g. with +setTimeout(). Meanwhile, the plot may have been shutdown and removed, +but because your event handler is still referencing it, it can't be +garbage collected yet, and worse, if your handler eventually runs, it +may overwrite stuff on a completely different plot. + + +## Some hints on the options ## + +Plugins should always support appropriate options to enable/disable +them because the plugin user may have several plots on the same page +where only one should use the plugin. In most cases it's probably a +good idea if the plugin is turned off rather than on per default, just +like most of the powerful features in Flot. + +If the plugin needs options that are specific to each series, like the +points or lines options in core Flot, you can put them in "series" in +the options object, e.g. + +```js +var options = { + series: { + downsample: { + algorithm: null, + maxpoints: 1000 + } + } +} +``` + +Then they will be copied by Flot into each series, providing default +values in case none are specified. + +Think hard and long about naming the options. These names are going to +be public API, and code is going to depend on them if the plugin is +successful. diff --git a/public/admin/view/javascript/jquery/flot/README.md b/public/admin/view/javascript/jquery/flot/README.md new file mode 100644 index 0000000..4de7bde --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/README.md @@ -0,0 +1,110 @@ +# Flot [](https://travis-ci.org/flot/flot) + +## About ## + +Flot is a Javascript plotting library for jQuery. +Read more at the website: <http://www.flotcharts.org/> + +Take a look at the the examples in examples/index.html; they should give a good +impression of what Flot can do, and the source code of the examples is probably +the fastest way to learn how to use Flot. + + +## Installation ## + +Just include the Javascript file after you've included jQuery. + +Generally, all browsers that support the HTML5 canvas tag are +supported. + +For support for Internet Explorer < 9, you can use [Excanvas] +[excanvas], a canvas emulator; this is used in the examples bundled +with Flot. You just include the excanvas script like this: + +```html +<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="excanvas.min.js"></script><![endif]--> +``` + +If it's not working on your development IE 6.0, check that it has +support for VML which Excanvas is relying on. It appears that some +stripped down versions used for test environments on virtual machines +lack the VML support. + +You can also try using [Flashcanvas][flashcanvas], which uses Flash to +do the emulation. Although Flash can be a bit slower to load than VML, +if you've got a lot of points, the Flash version can be much faster +overall. Flot contains some wrapper code for activating Excanvas which +Flashcanvas is compatible with. + +You need at least jQuery 1.2.6, but try at least 1.3.2 for interactive +charts because of performance improvements in event handling. + + +## Basic usage ## + +Create a placeholder div to put the graph in: + +```html +<div id="placeholder"></div> +``` + +You need to set the width and height of this div, otherwise the plot +library doesn't know how to scale the graph. You can do it inline like +this: + +```html +<div id="placeholder" style="width:600px;height:300px"></div> +``` + +You can also do it with an external stylesheet. Make sure that the +placeholder isn't within something with a display:none CSS property - +in that case, Flot has trouble measuring label dimensions which +results in garbled looks and might have trouble measuring the +placeholder dimensions which is fatal (it'll throw an exception). + +Then when the div is ready in the DOM, which is usually on document +ready, run the plot function: + +```js +$.plot($("#placeholder"), data, options); +``` + +Here, data is an array of data series and options is an object with +settings if you want to customize the plot. Take a look at the +examples for some ideas of what to put in or look at the +[API reference](API.md). Here's a quick example that'll draw a line +from (0, 0) to (1, 1): + +```js +$.plot($("#placeholder"), [ [[0, 0], [1, 1]] ], { yaxis: { max: 1 } }); +``` + +The plot function immediately draws the chart and then returns a plot +object with a couple of methods. + + +## What's with the name? ## + +First: it's pronounced with a short o, like "plot". Not like "flawed". + +So "Flot" rhymes with "plot". + +And if you look up "flot" in a Danish-to-English dictionary, some of +the words that come up are "good-looking", "attractive", "stylish", +"smart", "impressive", "extravagant". One of the main goals with Flot +is pretty looks. + + +## Notes about the examples ## + +In order to have a useful, functional example of time-series plots using time +zones, date.js from [timezone-js][timezone-js] (released under the Apache 2.0 +license) and the [Olson][olson] time zone database (released to the public +domain) have been included in the examples directory. They are used in +examples/axes-time-zones/index.html. + + +[excanvas]: http://code.google.com/p/explorercanvas/ +[flashcanvas]: http://code.google.com/p/flashcanvas/ +[timezone-js]: https://github.com/mde/timezone-js +[olson]: ftp://ftp.iana.org/tz/ diff --git a/public/admin/view/javascript/jquery/flot/build.log b/public/admin/view/javascript/jquery/flot/build.log new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/build.log diff --git a/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-1.json b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-1.json new file mode 100644 index 0000000..51952cf --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-1.json @@ -0,0 +1,4 @@ +{ + "label": "Europe (EU27)", + "data": [[1999, 3.0], [2000, 3.9]] +} diff --git a/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-2.json b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-2.json new file mode 100644 index 0000000..82004d6 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-2.json @@ -0,0 +1,4 @@ +{ + "label": "Europe (EU27)", + "data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2]] +} diff --git a/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-3.json b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-3.json new file mode 100644 index 0000000..8684479 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-3.json @@ -0,0 +1,4 @@ +{ + "label": "Europe (EU27)", + "data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5]] +} diff --git a/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-4.json b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-4.json new file mode 100644 index 0000000..b363578 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-4.json @@ -0,0 +1,4 @@ +{ + "label": "Europe (EU27)", + "data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1]] +} diff --git a/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-5.json b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-5.json new file mode 100644 index 0000000..a7e1e13 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth-5.json @@ -0,0 +1,4 @@ +{ + "label": "Europe (EU27)", + "data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]] +} diff --git a/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth.json b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth.json new file mode 100644 index 0000000..a7e1e13 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/ajax/data-eu-gdp-growth.json @@ -0,0 +1,4 @@ +{ + "label": "Europe (EU27)", + "data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]] +} diff --git a/public/admin/view/javascript/jquery/flot/examples/ajax/data-japan-gdp-growth.json b/public/admin/view/javascript/jquery/flot/examples/ajax/data-japan-gdp-growth.json new file mode 100644 index 0000000..855477c --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/ajax/data-japan-gdp-growth.json @@ -0,0 +1,4 @@ +{ + "label": "Japan", + "data": [[1999, -0.1], [2000, 2.9], [2001, 0.2], [2002, 0.3], [2003, 1.4], [2004, 2.7], [2005, 1.9], [2006, 2.0], [2007, 2.3], [2008, -0.7]] +} diff --git a/public/admin/view/javascript/jquery/flot/examples/ajax/data-usa-gdp-growth.json b/public/admin/view/javascript/jquery/flot/examples/ajax/data-usa-gdp-growth.json new file mode 100644 index 0000000..33f66c6 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/ajax/data-usa-gdp-growth.json @@ -0,0 +1,4 @@ +{ + "label": "USA", + "data": [[1999, 4.4], [2000, 3.7], [2001, 0.8], [2002, 1.6], [2003, 2.5], [2004, 3.6], [2005, 2.9], [2006, 2.8], [2007, 2.0], [2008, 1.1]] +} diff --git a/public/admin/view/javascript/jquery/flot/examples/ajax/index.html b/public/admin/view/javascript/jquery/flot/examples/ajax/index.html new file mode 100644 index 0000000..35ce10d --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/ajax/index.html @@ -0,0 +1,173 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: AJAX</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script type="text/javascript"> + + $(function() { + + var options = { + lines: { + show: true + }, + points: { + show: true + }, + xaxis: { + tickDecimals: 0, + tickSize: 1 + } + }; + + var data = []; + + $.plot("#placeholder", data, options); + + // Fetch one series, adding to what we already have + + var alreadyFetched = {}; + + $("button.fetchSeries").click(function () { + + var button = $(this); + + // Find the URL in the link right next to us, then fetch the data + + var dataurl = button.siblings("a").attr("href"); + + function onDataReceived(series) { + + // Extract the first coordinate pair; jQuery has parsed it, so + // the data is now just an ordinary JavaScript object + + var firstcoordinate = "(" + series.data[0][0] + ", " + series.data[0][1] + ")"; + button.siblings("span").text("Fetched " + series.label + ", first point: " + firstcoordinate); + + // Push the new data onto our existing data array + + if (!alreadyFetched[series.label]) { + alreadyFetched[series.label] = true; + data.push(series); + } + + $.plot("#placeholder", data, options); + } + + $.ajax({ + url: dataurl, + type: "GET", + dataType: "json", + success: onDataReceived + }); + }); + + // Initiate a recurring data update + + $("button.dataUpdate").click(function () { + + data = []; + alreadyFetched = {}; + + $.plot("#placeholder", data, options); + + var iteration = 0; + + function fetchData() { + + ++iteration; + + function onDataReceived(series) { + + // Load all the data in one pass; if we only got partial + // data we could merge it with what we already have. + + data = [ series ]; + $.plot("#placeholder", data, options); + } + + // Normally we call the same URL - a script connected to a + // database - but in this case we only have static example + // files, so we need to modify the URL. + + $.ajax({ + url: "data-eu-gdp-growth-" + iteration + ".json", + type: "GET", + dataType: "json", + success: onDataReceived + }); + + if (iteration < 5) { + setTimeout(fetchData, 1000); + } else { + data = []; + alreadyFetched = {}; + } + } + + setTimeout(fetchData, 1000); + }); + + // Load the first series by default, so we don't have an empty plot + + $("button.fetchSeries:first").click(); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>AJAX</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>Example of loading data dynamically with AJAX. Percentage change in GDP (source: <a href="http://epp.eurostat.ec.europa.eu/tgm/table.do?tab=table&init=1&plugin=1&language=en&pcode=tsieb020">Eurostat</a>). Click the buttons below:</p> + + <p>The data is fetched over HTTP, in this case directly from text files. Usually the URL would point to some web server handler (e.g. a PHP page or Java/.NET/Python/Ruby on Rails handler) that extracts it from a database and serializes it to JSON.</p> + + <p> + <button class="fetchSeries">First dataset</button> + [ <a href="data-eu-gdp-growth.json">see data</a> ] + <span></span> + </p> + + <p> + <button class="fetchSeries">Second dataset</button> + [ <a href="data-japan-gdp-growth.json">see data</a> ] + <span></span> + </p> + + <p> + <button class="fetchSeries">Third dataset</button> + [ <a href="data-usa-gdp-growth.json">see data</a> ] + <span></span> + </p> + + <p>If you combine AJAX with setTimeout, you can poll the server for new data.</p> + + <p> + <button class="dataUpdate">Poll for data</button> + </p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/annotating/index.html b/public/admin/view/javascript/jquery/flot/examples/annotating/index.html new file mode 100644 index 0000000..71f6218 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/annotating/index.html @@ -0,0 +1,87 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Adding Annotations</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script type="text/javascript"> + + $(function() { + + var d1 = []; + for (var i = 0; i < 20; ++i) { + d1.push([i, Math.sin(i)]); + } + + var data = [{ data: d1, label: "Pressure", color: "#333" }]; + + var markings = [ + { color: "#f6f6f6", yaxis: { from: 1 } }, + { color: "#f6f6f6", yaxis: { to: -1 } }, + { color: "#000", lineWidth: 1, xaxis: { from: 2, to: 2 } }, + { color: "#000", lineWidth: 1, xaxis: { from: 8, to: 8 } } + ]; + + var placeholder = $("#placeholder"); + + var plot = $.plot(placeholder, data, { + bars: { show: true, barWidth: 0.5, fill: 0.9 }, + xaxis: { ticks: [], autoscaleMargin: 0.02 }, + yaxis: { min: -2, max: 2 }, + grid: { markings: markings } + }); + + var o = plot.pointOffset({ x: 2, y: -1.2}); + + // Append it to the placeholder that Flot already uses for positioning + + placeholder.append("<div style='position:absolute;left:" + (o.left + 4) + "px;top:" + o.top + "px;color:#666;font-size:smaller'>Warming up</div>"); + + o = plot.pointOffset({ x: 8, y: -1.2}); + placeholder.append("<div style='position:absolute;left:" + (o.left + 4) + "px;top:" + o.top + "px;color:#666;font-size:smaller'>Actual measurements</div>"); + + // Draw a little arrow on top of the last label to demonstrate canvas + // drawing + + var ctx = plot.getCanvas().getContext("2d"); + ctx.beginPath(); + o.left += 4; + ctx.moveTo(o.left, o.top); + ctx.lineTo(o.left, o.top - 10); + ctx.lineTo(o.left + 10, o.top - 5); + ctx.lineTo(o.left, o.top); + ctx.fillStyle = "#000"; + ctx.fill(); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Adding Annotations</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>Flot has support for simple background decorations such as lines and rectangles. They can be useful for marking up certain areas. You can easily add any HTML you need with standard DOM manipulation, e.g. for labels. For drawing custom shapes there is also direct access to the canvas.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-interacting/index.html b/public/admin/view/javascript/jquery/flot/examples/axes-interacting/index.html new file mode 100644 index 0000000..7e44111 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-interacting/index.html @@ -0,0 +1,97 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Interacting with axes</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script type="text/javascript"> + + $(function() { + + function generate(start, end, fn) { + var res = []; + for (var i = 0; i <= 100; ++i) { + var x = start + i / 100 * (end - start); + res.push([x, fn(x)]); + } + return res; + } + + var data = [ + { data: generate(0, 10, function (x) { return Math.sqrt(x);}), xaxis: 1, yaxis:1 }, + { data: generate(0, 10, function (x) { return Math.sin(x);}), xaxis: 1, yaxis:2 }, + { data: generate(0, 10, function (x) { return Math.cos(x);}), xaxis: 1, yaxis:3 }, + { data: generate(2, 10, function (x) { return Math.tan(x);}), xaxis: 2, yaxis: 4 } + ]; + + var plot = $.plot("#placeholder", data, { + xaxes: [ + { position: 'bottom' }, + { position: 'top'} + ], + yaxes: [ + { position: 'left' }, + { position: 'left' }, + { position: 'right' }, + { position: 'left' } + ] + }); + + // Create a div for each axis + + $.each(plot.getAxes(), function (i, axis) { + if (!axis.show) + return; + + var box = axis.box; + + $("<div class='axisTarget' style='position:absolute; left:" + box.left + "px; top:" + box.top + "px; width:" + box.width + "px; height:" + box.height + "px'></div>") + .data("axis.direction", axis.direction) + .data("axis.n", axis.n) + .css({ backgroundColor: "#f00", opacity: 0, cursor: "pointer" }) + .appendTo(plot.getPlaceholder()) + .hover( + function () { $(this).css({ opacity: 0.10 }) }, + function () { $(this).css({ opacity: 0 }) } + ) + .click(function () { + $("#click").text("You clicked the " + axis.direction + axis.n + "axis!") + }); + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Interacting with axes</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>With multiple axes, you sometimes need to interact with them. A simple way to do this is to draw the plot, deduce the axis placements and insert a couple of divs on top to catch events.</p> + + <p>Try clicking an axis.</p> + + <p id="click"></p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-multiple/index.html b/public/admin/view/javascript/jquery/flot/examples/axes-multiple/index.html new file mode 100644 index 0000000..4c7c68c --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-multiple/index.html @@ -0,0 +1,77 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Multiple Axes</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.time.js"></script> + <script type="text/javascript"> + + $(function() { + + var oilprices = [[1167692400000,61.05], [1167778800000,58.32], [1167865200000,57.35], [1167951600000,56.31], [1168210800000,55.55], [1168297200000,55.64], [1168383600000,54.02], [1168470000000,51.88], [1168556400000,52.99], [1168815600000,52.99], [1168902000000,51.21], [1168988400000,52.24], [1169074800000,50.48], [1169161200000,51.99], [1169420400000,51.13], [1169506800000,55.04], [1169593200000,55.37], [1169679600000,54.23], [1169766000000,55.42], [1170025200000,54.01], [1170111600000,56.97], [1170198000000,58.14], [1170284400000,58.14], [1170370800000,59.02], [1170630000000,58.74], [1170716400000,58.88], [1170802800000,57.71], [1170889200000,59.71], [1170975600000,59.89], [1171234800000,57.81], [1171321200000,59.06], [1171407600000,58.00], [1171494000000,57.99], [1171580400000,59.39], [1171839600000,59.39], [1171926000000,58.07], [1172012400000,60.07], [1172098800000,61.14], [1172444400000,61.39], [1172530800000,61.46], [1172617200000,61.79], [1172703600000,62.00], [1172790000000,60.07], [1173135600000,60.69], [1173222000000,61.82], [1173308400000,60.05], [1173654000000,58.91], [1173740400000,57.93], [1173826800000,58.16], [1173913200000,57.55], [1173999600000,57.11], [1174258800000,56.59], [1174345200000,59.61], [1174518000000,61.69], [1174604400000,62.28], [1174860000000,62.91], [1174946400000,62.93], [1175032800000,64.03], [1175119200000,66.03], [1175205600000,65.87], [1175464800000,64.64], [1175637600000,64.38], [1175724000000,64.28], [1175810400000,64.28], [1176069600000,61.51], [1176156000000,61.89], [1176242400000,62.01], [1176328800000,63.85], [1176415200000,63.63], [1176674400000,63.61], [1176760800000,63.10], [1176847200000,63.13], [1176933600000,61.83], [1177020000000,63.38], [1177279200000,64.58], [1177452000000,65.84], [1177538400000,65.06], [1177624800000,66.46], [1177884000000,64.40], [1178056800000,63.68], [1178143200000,63.19], [1178229600000,61.93], [1178488800000,61.47], [1178575200000,61.55], [1178748000000,61.81], [1178834400000,62.37], [1179093600000,62.46], [1179180000000,63.17], [1179266400000,62.55], [1179352800000,64.94], [1179698400000,66.27], [1179784800000,65.50], [1179871200000,65.77], [1179957600000,64.18], [1180044000000,65.20], [1180389600000,63.15], [1180476000000,63.49], [1180562400000,65.08], [1180908000000,66.30], [1180994400000,65.96], [1181167200000,66.93], [1181253600000,65.98], [1181599200000,65.35], [1181685600000,66.26], [1181858400000,68.00], [1182117600000,69.09], [1182204000000,69.10], [1182290400000,68.19], [1182376800000,68.19], [1182463200000,69.14], [1182722400000,68.19], [1182808800000,67.77], [1182895200000,68.97], [1182981600000,69.57], [1183068000000,70.68], [1183327200000,71.09], [1183413600000,70.92], [1183586400000,71.81], [1183672800000,72.81], [1183932000000,72.19], [1184018400000,72.56], [1184191200000,72.50], [1184277600000,74.15], [1184623200000,75.05], [1184796000000,75.92], [1184882400000,75.57], [1185141600000,74.89], [1185228000000,73.56], [1185314400000,75.57], [1185400800000,74.95], [1185487200000,76.83], [1185832800000,78.21], [1185919200000,76.53], [1186005600000,76.86], [1186092000000,76.00], [1186437600000,71.59], [1186696800000,71.47], [1186956000000,71.62], [1187042400000,71.00], [1187301600000,71.98], [1187560800000,71.12], [1187647200000,69.47], [1187733600000,69.26], [1187820000000,69.83], [1187906400000,71.09], [1188165600000,71.73], [1188338400000,73.36], [1188511200000,74.04], [1188856800000,76.30], [1189116000000,77.49], [1189461600000,78.23], [1189548000000,79.91], [1189634400000,80.09], [1189720800000,79.10], [1189980000000,80.57], [1190066400000,81.93], [1190239200000,83.32], [1190325600000,81.62], [1190584800000,80.95], [1190671200000,79.53], [1190757600000,80.30], [1190844000000,82.88], [1190930400000,81.66], [1191189600000,80.24], [1191276000000,80.05], [1191362400000,79.94], [1191448800000,81.44], [1191535200000,81.22], [1191794400000,79.02], [1191880800000,80.26], [1191967200000,80.30], [1192053600000,83.08], [1192140000000,83.69], [1192399200000,86.13], [1192485600000,87.61], [1192572000000,87.40], [1192658400000,89.47], [1192744800000,88.60], [1193004000000,87.56], [1193090400000,87.56], [1193176800000,87.10], [1193263200000,91.86], [1193612400000,93.53], [1193698800000,94.53], [1193871600000,95.93], [1194217200000,93.98], [1194303600000,96.37], [1194476400000,95.46], [1194562800000,96.32], [1195081200000,93.43], [1195167600000,95.10], [1195426800000,94.64], [1195513200000,95.10], [1196031600000,97.70], [1196118000000,94.42], [1196204400000,90.62], [1196290800000,91.01], [1196377200000,88.71], [1196636400000,88.32], [1196809200000,90.23], [1196982000000,88.28], [1197241200000,87.86], [1197327600000,90.02], [1197414000000,92.25], [1197586800000,90.63], [1197846000000,90.63], [1197932400000,90.49], [1198018800000,91.24], [1198105200000,91.06], [1198191600000,90.49], [1198710000000,96.62], [1198796400000,96.00], [1199142000000,99.62], [1199314800000,99.18], [1199401200000,95.09], [1199660400000,96.33], [1199833200000,95.67], [1200351600000,91.90], [1200438000000,90.84], [1200524400000,90.13], [1200610800000,90.57], [1200956400000,89.21], [1201042800000,86.99], [1201129200000,89.85], [1201474800000,90.99], [1201561200000,91.64], [1201647600000,92.33], [1201734000000,91.75], [1202079600000,90.02], [1202166000000,88.41], [1202252400000,87.14], [1202338800000,88.11], [1202425200000,91.77], [1202770800000,92.78], [1202857200000,93.27], [1202943600000,95.46], [1203030000000,95.46], [1203289200000,101.74], [1203462000000,98.81], [1203894000000,100.88], [1204066800000,99.64], [1204153200000,102.59], [1204239600000,101.84], [1204498800000,99.52], [1204585200000,99.52], [1204671600000,104.52], [1204758000000,105.47], [1204844400000,105.15], [1205103600000,108.75], [1205276400000,109.92], [1205362800000,110.33], [1205449200000,110.21], [1205708400000,105.68], [1205967600000,101.84], [1206313200000,100.86], [1206399600000,101.22], [1206486000000,105.90], [1206572400000,107.58], [1206658800000,105.62], [1206914400000,101.58], [1207000800000,100.98], [1207173600000,103.83], [1207260000000,106.23], [1207605600000,108.50], [1207778400000,110.11], [1207864800000,110.14], [1208210400000,113.79], [1208296800000,114.93], [1208383200000,114.86], [1208728800000,117.48], [1208815200000,118.30], [1208988000000,116.06], [1209074400000,118.52], [1209333600000,118.75], [1209420000000,113.46], [1209592800000,112.52], [1210024800000,121.84], [1210111200000,123.53], [1210197600000,123.69], [1210543200000,124.23], [1210629600000,125.80], [1210716000000,126.29], [1211148000000,127.05], [1211320800000,129.07], [1211493600000,132.19], [1211839200000,128.85], [1212357600000,127.76], [1212703200000,138.54], [1212962400000,136.80], [1213135200000,136.38], [1213308000000,134.86], [1213653600000,134.01], [1213740000000,136.68], [1213912800000,135.65], [1214172000000,134.62], [1214258400000,134.62], [1214344800000,134.62], [1214431200000,139.64], [1214517600000,140.21], [1214776800000,140.00], [1214863200000,140.97], [1214949600000,143.57], [1215036000000,145.29], [1215381600000,141.37], [1215468000000,136.04], [1215727200000,146.40], [1215986400000,145.18], [1216072800000,138.74], [1216159200000,134.60], [1216245600000,129.29], [1216332000000,130.65], [1216677600000,127.95], [1216850400000,127.95], [1217282400000,122.19], [1217455200000,124.08], [1217541600000,125.10], [1217800800000,121.41], [1217887200000,119.17], [1217973600000,118.58], [1218060000000,120.02], [1218405600000,114.45], [1218492000000,113.01], [1218578400000,116.00], [1218751200000,113.77], [1219010400000,112.87], [1219096800000,114.53], [1219269600000,114.98], [1219356000000,114.98], [1219701600000,116.27], [1219788000000,118.15], [1219874400000,115.59], [1219960800000,115.46], [1220306400000,109.71], [1220392800000,109.35], [1220565600000,106.23], [1220824800000,106.34]]; + + var exchangerates = [[1167606000000,0.7580], [1167692400000,0.7580], [1167778800000,0.75470], [1167865200000,0.75490], [1167951600000,0.76130], [1168038000000,0.76550], [1168124400000,0.76930], [1168210800000,0.76940], [1168297200000,0.76880], [1168383600000,0.76780], [1168470000000,0.77080], [1168556400000,0.77270], [1168642800000,0.77490], [1168729200000,0.77410], [1168815600000,0.77410], [1168902000000,0.77320], [1168988400000,0.77270], [1169074800000,0.77370], [1169161200000,0.77240], [1169247600000,0.77120], [1169334000000,0.7720], [1169420400000,0.77210], [1169506800000,0.77170], [1169593200000,0.77040], [1169679600000,0.7690], [1169766000000,0.77110], [1169852400000,0.7740], [1169938800000,0.77450], [1170025200000,0.77450], [1170111600000,0.7740], [1170198000000,0.77160], [1170284400000,0.77130], [1170370800000,0.76780], [1170457200000,0.76880], [1170543600000,0.77180], [1170630000000,0.77180], [1170716400000,0.77280], [1170802800000,0.77290], [1170889200000,0.76980], [1170975600000,0.76850], [1171062000000,0.76810], [1171148400000,0.7690], [1171234800000,0.7690], [1171321200000,0.76980], [1171407600000,0.76990], [1171494000000,0.76510], [1171580400000,0.76130], [1171666800000,0.76160], [1171753200000,0.76140], [1171839600000,0.76140], [1171926000000,0.76070], [1172012400000,0.76020], [1172098800000,0.76110], [1172185200000,0.76220], [1172271600000,0.76150], [1172358000000,0.75980], [1172444400000,0.75980], [1172530800000,0.75920], [1172617200000,0.75730], [1172703600000,0.75660], [1172790000000,0.75670], [1172876400000,0.75910], [1172962800000,0.75820], [1173049200000,0.75850], [1173135600000,0.76130], [1173222000000,0.76310], [1173308400000,0.76150], [1173394800000,0.760], [1173481200000,0.76130], [1173567600000,0.76270], [1173654000000,0.76270], [1173740400000,0.76080], [1173826800000,0.75830], [1173913200000,0.75750], [1173999600000,0.75620], [1174086000000,0.7520], [1174172400000,0.75120], [1174258800000,0.75120], [1174345200000,0.75170], [1174431600000,0.7520], [1174518000000,0.75110], [1174604400000,0.7480], [1174690800000,0.75090], [1174777200000,0.75310], [1174860000000,0.75310], [1174946400000,0.75270], [1175032800000,0.74980], [1175119200000,0.74930], [1175205600000,0.75040], [1175292000000,0.750], [1175378400000,0.74910], [1175464800000,0.74910], [1175551200000,0.74850], [1175637600000,0.74840], [1175724000000,0.74920], [1175810400000,0.74710], [1175896800000,0.74590], [1175983200000,0.74770], [1176069600000,0.74770], [1176156000000,0.74830], [1176242400000,0.74580], [1176328800000,0.74480], [1176415200000,0.7430], [1176501600000,0.73990], [1176588000000,0.73950], [1176674400000,0.73950], [1176760800000,0.73780], [1176847200000,0.73820], [1176933600000,0.73620], [1177020000000,0.73550], [1177106400000,0.73480], [1177192800000,0.73610], [1177279200000,0.73610], [1177365600000,0.73650], [1177452000000,0.73620], [1177538400000,0.73310], [1177624800000,0.73390], [1177711200000,0.73440], [1177797600000,0.73270], [1177884000000,0.73270], [1177970400000,0.73360], [1178056800000,0.73330], [1178143200000,0.73590], [1178229600000,0.73590], [1178316000000,0.73720], [1178402400000,0.7360], [1178488800000,0.7360], [1178575200000,0.7350], [1178661600000,0.73650], [1178748000000,0.73840], [1178834400000,0.73950], [1178920800000,0.74130], [1179007200000,0.73970], [1179093600000,0.73960], [1179180000000,0.73850], [1179266400000,0.73780], [1179352800000,0.73660], [1179439200000,0.740], [1179525600000,0.74110], [1179612000000,0.74060], [1179698400000,0.74050], [1179784800000,0.74140], [1179871200000,0.74310], [1179957600000,0.74310], [1180044000000,0.74380], [1180130400000,0.74430], [1180216800000,0.74430], [1180303200000,0.74430], [1180389600000,0.74340], [1180476000000,0.74290], [1180562400000,0.74420], [1180648800000,0.7440], [1180735200000,0.74390], [1180821600000,0.74370], [1180908000000,0.74370], [1180994400000,0.74290], [1181080800000,0.74030], [1181167200000,0.73990], [1181253600000,0.74180], [1181340000000,0.74680], [1181426400000,0.7480], [1181512800000,0.7480], [1181599200000,0.7490], [1181685600000,0.74940], [1181772000000,0.75220], [1181858400000,0.75150], [1181944800000,0.75020], [1182031200000,0.74720], [1182117600000,0.74720], [1182204000000,0.74620], [1182290400000,0.74550], [1182376800000,0.74490], [1182463200000,0.74670], [1182549600000,0.74580], [1182636000000,0.74270], [1182722400000,0.74270], [1182808800000,0.7430], [1182895200000,0.74290], [1182981600000,0.7440], [1183068000000,0.7430], [1183154400000,0.74220], [1183240800000,0.73880], [1183327200000,0.73880], [1183413600000,0.73690], [1183500000000,0.73450], [1183586400000,0.73450], [1183672800000,0.73450], [1183759200000,0.73520], [1183845600000,0.73410], [1183932000000,0.73410], [1184018400000,0.7340], [1184104800000,0.73240], [1184191200000,0.72720], [1184277600000,0.72640], [1184364000000,0.72550], [1184450400000,0.72580], [1184536800000,0.72580], [1184623200000,0.72560], [1184709600000,0.72570], [1184796000000,0.72470], [1184882400000,0.72430], [1184968800000,0.72440], [1185055200000,0.72350], [1185141600000,0.72350], [1185228000000,0.72350], [1185314400000,0.72350], [1185400800000,0.72620], [1185487200000,0.72880], [1185573600000,0.73010], [1185660000000,0.73370], [1185746400000,0.73370], [1185832800000,0.73240], [1185919200000,0.72970], [1186005600000,0.73170], [1186092000000,0.73150], [1186178400000,0.72880], [1186264800000,0.72630], [1186351200000,0.72630], [1186437600000,0.72420], [1186524000000,0.72530], [1186610400000,0.72640], [1186696800000,0.7270], [1186783200000,0.73120], [1186869600000,0.73050], [1186956000000,0.73050], [1187042400000,0.73180], [1187128800000,0.73580], [1187215200000,0.74090], [1187301600000,0.74540], [1187388000000,0.74370], [1187474400000,0.74240], [1187560800000,0.74240], [1187647200000,0.74150], [1187733600000,0.74190], [1187820000000,0.74140], [1187906400000,0.73770], [1187992800000,0.73550], [1188079200000,0.73150], [1188165600000,0.73150], [1188252000000,0.7320], [1188338400000,0.73320], [1188424800000,0.73460], [1188511200000,0.73280], [1188597600000,0.73230], [1188684000000,0.7340], [1188770400000,0.7340], [1188856800000,0.73360], [1188943200000,0.73510], [1189029600000,0.73460], [1189116000000,0.73210], [1189202400000,0.72940], [1189288800000,0.72660], [1189375200000,0.72660], [1189461600000,0.72540], [1189548000000,0.72420], [1189634400000,0.72130], [1189720800000,0.71970], [1189807200000,0.72090], [1189893600000,0.7210], [1189980000000,0.7210], [1190066400000,0.7210], [1190152800000,0.72090], [1190239200000,0.71590], [1190325600000,0.71330], [1190412000000,0.71050], [1190498400000,0.70990], [1190584800000,0.70990], [1190671200000,0.70930], [1190757600000,0.70930], [1190844000000,0.70760], [1190930400000,0.7070], [1191016800000,0.70490], [1191103200000,0.70120], [1191189600000,0.70110], [1191276000000,0.70190], [1191362400000,0.70460], [1191448800000,0.70630], [1191535200000,0.70890], [1191621600000,0.70770], [1191708000000,0.70770], [1191794400000,0.70770], [1191880800000,0.70910], [1191967200000,0.71180], [1192053600000,0.70790], [1192140000000,0.70530], [1192226400000,0.7050], [1192312800000,0.70550], [1192399200000,0.70550], [1192485600000,0.70450], [1192572000000,0.70510], [1192658400000,0.70510], [1192744800000,0.70170], [1192831200000,0.70], [1192917600000,0.69950], [1193004000000,0.69940], [1193090400000,0.70140], [1193176800000,0.70360], [1193263200000,0.70210], [1193349600000,0.70020], [1193436000000,0.69670], [1193522400000,0.6950], [1193612400000,0.6950], [1193698800000,0.69390], [1193785200000,0.6940], [1193871600000,0.69220], [1193958000000,0.69190], [1194044400000,0.69140], [1194130800000,0.68940], [1194217200000,0.68910], [1194303600000,0.69040], [1194390000000,0.6890], [1194476400000,0.68340], [1194562800000,0.68230], [1194649200000,0.68070], [1194735600000,0.68150], [1194822000000,0.68150], [1194908400000,0.68470], [1194994800000,0.68590], [1195081200000,0.68220], [1195167600000,0.68270], [1195254000000,0.68370], [1195340400000,0.68230], [1195426800000,0.68220], [1195513200000,0.68220], [1195599600000,0.67920], [1195686000000,0.67460], [1195772400000,0.67350], [1195858800000,0.67310], [1195945200000,0.67420], [1196031600000,0.67440], [1196118000000,0.67390], [1196204400000,0.67310], [1196290800000,0.67610], [1196377200000,0.67610], [1196463600000,0.67850], [1196550000000,0.68180], [1196636400000,0.68360], [1196722800000,0.68230], [1196809200000,0.68050], [1196895600000,0.67930], [1196982000000,0.68490], [1197068400000,0.68330], [1197154800000,0.68250], [1197241200000,0.68250], [1197327600000,0.68160], [1197414000000,0.67990], [1197500400000,0.68130], [1197586800000,0.68090], [1197673200000,0.68680], [1197759600000,0.69330], [1197846000000,0.69330], [1197932400000,0.69450], [1198018800000,0.69440], [1198105200000,0.69460], [1198191600000,0.69640], [1198278000000,0.69650], [1198364400000,0.69560], [1198450800000,0.69560], [1198537200000,0.6950], [1198623600000,0.69480], [1198710000000,0.69280], [1198796400000,0.68870], [1198882800000,0.68240], [1198969200000,0.67940], [1199055600000,0.67940], [1199142000000,0.68030], [1199228400000,0.68550], [1199314800000,0.68240], [1199401200000,0.67910], [1199487600000,0.67830], [1199574000000,0.67850], [1199660400000,0.67850], [1199746800000,0.67970], [1199833200000,0.680], [1199919600000,0.68030], [1200006000000,0.68050], [1200092400000,0.6760], [1200178800000,0.6770], [1200265200000,0.6770], [1200351600000,0.67360], [1200438000000,0.67260], [1200524400000,0.67640], [1200610800000,0.68210], [1200697200000,0.68310], [1200783600000,0.68420], [1200870000000,0.68420], [1200956400000,0.68870], [1201042800000,0.69030], [1201129200000,0.68480], [1201215600000,0.68240], [1201302000000,0.67880], [1201388400000,0.68140], [1201474800000,0.68140], [1201561200000,0.67970], [1201647600000,0.67690], [1201734000000,0.67650], [1201820400000,0.67330], [1201906800000,0.67290], [1201993200000,0.67580], [1202079600000,0.67580], [1202166000000,0.6750], [1202252400000,0.6780], [1202338800000,0.68330], [1202425200000,0.68560], [1202511600000,0.69030], [1202598000000,0.68960], [1202684400000,0.68960], [1202770800000,0.68820], [1202857200000,0.68790], [1202943600000,0.68620], [1203030000000,0.68520], [1203116400000,0.68230], [1203202800000,0.68130], [1203289200000,0.68130], [1203375600000,0.68220], [1203462000000,0.68020], [1203548400000,0.68020], [1203634800000,0.67840], [1203721200000,0.67480], [1203807600000,0.67470], [1203894000000,0.67470], [1203980400000,0.67480], [1204066800000,0.67330], [1204153200000,0.6650], [1204239600000,0.66110], [1204326000000,0.65830], [1204412400000,0.6590], [1204498800000,0.6590], [1204585200000,0.65810], [1204671600000,0.65780], [1204758000000,0.65740], [1204844400000,0.65320], [1204930800000,0.65020], [1205017200000,0.65140], [1205103600000,0.65140], [1205190000000,0.65070], [1205276400000,0.6510], [1205362800000,0.64890], [1205449200000,0.64240], [1205535600000,0.64060], [1205622000000,0.63820], [1205708400000,0.63820], [1205794800000,0.63410], [1205881200000,0.63440], [1205967600000,0.63780], [1206054000000,0.64390], [1206140400000,0.64780], [1206226800000,0.64810], [1206313200000,0.64810], [1206399600000,0.64940], [1206486000000,0.64380], [1206572400000,0.63770], [1206658800000,0.63290], [1206745200000,0.63360], [1206831600000,0.63330], [1206914400000,0.63330], [1207000800000,0.6330], [1207087200000,0.63710], [1207173600000,0.64030], [1207260000000,0.63960], [1207346400000,0.63640], [1207432800000,0.63560], [1207519200000,0.63560], [1207605600000,0.63680], [1207692000000,0.63570], [1207778400000,0.63540], [1207864800000,0.6320], [1207951200000,0.63320], [1208037600000,0.63280], [1208124000000,0.63310], [1208210400000,0.63420], [1208296800000,0.63210], [1208383200000,0.63020], [1208469600000,0.62780], [1208556000000,0.63080], [1208642400000,0.63240], [1208728800000,0.63240], [1208815200000,0.63070], [1208901600000,0.62770], [1208988000000,0.62690], [1209074400000,0.63350], [1209160800000,0.63920], [1209247200000,0.640], [1209333600000,0.64010], [1209420000000,0.63960], [1209506400000,0.64070], [1209592800000,0.64230], [1209679200000,0.64290], [1209765600000,0.64720], [1209852000000,0.64850], [1209938400000,0.64860], [1210024800000,0.64670], [1210111200000,0.64440], [1210197600000,0.64670], [1210284000000,0.65090], [1210370400000,0.64780], [1210456800000,0.64610], [1210543200000,0.64610], [1210629600000,0.64680], [1210716000000,0.64490], [1210802400000,0.6470], [1210888800000,0.64610], [1210975200000,0.64520], [1211061600000,0.64220], [1211148000000,0.64220], [1211234400000,0.64250], [1211320800000,0.64140], [1211407200000,0.63660], [1211493600000,0.63460], [1211580000000,0.6350], [1211666400000,0.63460], [1211752800000,0.63460], [1211839200000,0.63430], [1211925600000,0.63460], [1212012000000,0.63790], [1212098400000,0.64160], [1212184800000,0.64420], [1212271200000,0.64310], [1212357600000,0.64310], [1212444000000,0.64350], [1212530400000,0.6440], [1212616800000,0.64730], [1212703200000,0.64690], [1212789600000,0.63860], [1212876000000,0.63560], [1212962400000,0.6340], [1213048800000,0.63460], [1213135200000,0.6430], [1213221600000,0.64520], [1213308000000,0.64670], [1213394400000,0.65060], [1213480800000,0.65040], [1213567200000,0.65030], [1213653600000,0.64810], [1213740000000,0.64510], [1213826400000,0.6450], [1213912800000,0.64410], [1213999200000,0.64140], [1214085600000,0.64090], [1214172000000,0.64090], [1214258400000,0.64280], [1214344800000,0.64310], [1214431200000,0.64180], [1214517600000,0.63710], [1214604000000,0.63490], [1214690400000,0.63330], [1214776800000,0.63340], [1214863200000,0.63380], [1214949600000,0.63420], [1215036000000,0.6320], [1215122400000,0.63180], [1215208800000,0.6370], [1215295200000,0.63680], [1215381600000,0.63680], [1215468000000,0.63830], [1215554400000,0.63710], [1215640800000,0.63710], [1215727200000,0.63550], [1215813600000,0.6320], [1215900000000,0.62770], [1215986400000,0.62760], [1216072800000,0.62910], [1216159200000,0.62740], [1216245600000,0.62930], [1216332000000,0.63110], [1216418400000,0.6310], [1216504800000,0.63120], [1216591200000,0.63120], [1216677600000,0.63040], [1216764000000,0.62940], [1216850400000,0.63480], [1216936800000,0.63780], [1217023200000,0.63680], [1217109600000,0.63680], [1217196000000,0.63680], [1217282400000,0.6360], [1217368800000,0.6370], [1217455200000,0.64180], [1217541600000,0.64110], [1217628000000,0.64350], [1217714400000,0.64270], [1217800800000,0.64270], [1217887200000,0.64190], [1217973600000,0.64460], [1218060000000,0.64680], [1218146400000,0.64870], [1218232800000,0.65940], [1218319200000,0.66660], [1218405600000,0.66660], [1218492000000,0.66780], [1218578400000,0.67120], [1218664800000,0.67050], [1218751200000,0.67180], [1218837600000,0.67840], [1218924000000,0.68110], [1219010400000,0.68110], [1219096800000,0.67940], [1219183200000,0.68040], [1219269600000,0.67810], [1219356000000,0.67560], [1219442400000,0.67350], [1219528800000,0.67630], [1219615200000,0.67620], [1219701600000,0.67770], [1219788000000,0.68150], [1219874400000,0.68020], [1219960800000,0.6780], [1220047200000,0.67960], [1220133600000,0.68170], [1220220000000,0.68170], [1220306400000,0.68320], [1220392800000,0.68770], [1220479200000,0.69120], [1220565600000,0.69140], [1220652000000,0.70090], [1220738400000,0.70120], [1220824800000,0.7010], [1220911200000,0.70050]]; + + function euroFormatter(v, axis) { + return v.toFixed(axis.tickDecimals) + "€"; + } + + function doPlot(position) { + $.plot("#placeholder", [ + { data: oilprices, label: "Oil price ($)" }, + { data: exchangerates, label: "USD/EUR exchange rate", yaxis: 2 } + ], { + xaxes: [ { mode: "time" } ], + yaxes: [ { min: 0 }, { + // align if we are to the right + alignTicksWithAxis: position == "right" ? 1 : null, + position: position, + tickFormatter: euroFormatter + } ], + legend: { position: "sw" } + }); + } + + doPlot("right"); + + $("button").click(function () { + doPlot($(this).text()); + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Multiple axes</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>Multiple axis support showing the raw oil price in US $/barrel of crude oil vs. the exchange rate from US $ to €.</p> + + <p>As illustrated, you can put in multiple axes if you need to. For each data series, simply specify the axis number. In the options, you can then configure where you want the extra axes to appear.</p> + + <p>Position axis <button>left</button> or <button>right</button>.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/date.js b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/date.js new file mode 100644 index 0000000..2899dda --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/date.js @@ -0,0 +1,893 @@ +// ----- +// The `timezoneJS.Date` object gives you full-blown timezone support, independent from the timezone set on the end-user's machine running the browser. It uses the Olson zoneinfo files for its timezone data. +// +// The constructor function and setter methods use proxy JavaScript Date objects behind the scenes, so you can use strings like '10/22/2006' with the constructor. You also get the same sensible wraparound behavior with numeric parameters (like setting a value of 14 for the month wraps around to the next March). +// +// The other significant difference from the built-in JavaScript Date is that `timezoneJS.Date` also has named properties that store the values of year, month, date, etc., so it can be directly serialized to JSON and used for data transfer. + +/* + * Copyright 2010 Matthew Eernisse (mde@fleegix.org) + * and Open Source Applications Foundation + * + * 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. + * + * Credits: Ideas included from incomplete JS implementation of Olson + * parser, "XMLDAte" by Philippe Goetz (philippe.goetz@wanadoo.fr) + * + * Contributions: + * Jan Niehusmann + * Ricky Romero + * Preston Hunt (prestonhunt@gmail.com) + * Dov. B Katz (dov.katz@morganstanley.com) + * Peter Bergström (pbergstr@mac.com) + * Long Ho + */ +(function () { + // Standard initialization stuff to make sure the library is + // usable on both client and server (node) side. + + var root = this; + + var timezoneJS; + if (typeof exports !== 'undefined') { + timezoneJS = exports; + } else { + timezoneJS = root.timezoneJS = {}; + } + + timezoneJS.VERSION = '1.0.0'; + + // Grab the ajax library from global context. + // This can be jQuery, Zepto or fleegix. + // You can also specify your own transport mechanism by declaring + // `timezoneJS.timezone.transport` to a `function`. More details will follow + var $ = root.$ || root.jQuery || root.Zepto + , fleegix = root.fleegix + // Declare constant list of days and months. Unfortunately this doesn't leave room for i18n due to the Olson data being in English itself + , DAYS = timezoneJS.Days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] + , MONTHS = timezoneJS.Months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] + , SHORT_MONTHS = {} + , SHORT_DAYS = {} + , EXACT_DATE_TIME = {} + , TZ_REGEXP = new RegExp('^[a-zA-Z]+/'); + + //`{ "Jan": 0, "Feb": 1, "Mar": 2, "Apr": 3, "May": 4, "Jun": 5, "Jul": 6, "Aug": 7, "Sep": 8, "Oct": 9, "Nov": 10, "Dec": 11 }` + for (var i = 0; i < MONTHS.length; i++) { + SHORT_MONTHS[MONTHS[i].substr(0, 3)] = i; + } + + //`{ "Sun": 0, "Mon": 1, "Tue": 2, "Wed": 3, "Thu": 4, "Fri": 5, "Sat": 6 }` + for (i = 0; i < DAYS.length; i++) { + SHORT_DAYS[DAYS[i].substr(0, 3)] = i; + } + + + //Handle array indexOf in IE + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (el) { + for (var i = 0; i < this.length; i++ ) { + if (el === this[i]) return i; + } + return -1; + } + } + + // Format a number to the length = digits. For ex: + // + // `_fixWidth(2, 2) = '02'` + // + // `_fixWidth(1998, 2) = '98'` + // + // This is used to pad numbers in converting date to string in ISO standard. + var _fixWidth = function (number, digits) { + if (typeof number !== "number") { throw "not a number: " + number; } + var s = number.toString(); + if (number.length > digits) { + return number.substr(number.length - digits, number.length); + } + while (s.length < digits) { + s = '0' + s; + } + return s; + }; + + // Abstraction layer for different transport layers, including fleegix/jQuery/Zepto + // + // Object `opts` include + // + // - `url`: url to ajax query + // + // - `async`: true for asynchronous, false otherwise. If false, return value will be response from URL. This is true by default + // + // - `success`: success callback function + // + // - `error`: error callback function + // Returns response from URL if async is false, otherwise the AJAX request object itself + var _transport = function (opts) { + if ((!fleegix || typeof fleegix.xhr === 'undefined') && (!$ || typeof $.ajax === 'undefined')) { + throw new Error('Please use the Fleegix.js XHR module, jQuery ajax, Zepto ajax, or define your own transport mechanism for downloading zone files.'); + } + if (!opts) return; + if (!opts.url) throw new Error ('URL must be specified'); + if (!('async' in opts)) opts.async = true; + if (!opts.async) { + return fleegix && fleegix.xhr + ? fleegix.xhr.doReq({ url: opts.url, async: false }) + : $.ajax({ url : opts.url, async : false }).responseText; + } + return fleegix && fleegix.xhr + ? fleegix.xhr.send({ + url : opts.url, + method : 'get', + handleSuccess : opts.success, + handleErr : opts.error + }) + : $.ajax({ + url : opts.url, + dataType: 'text', + method : 'GET', + error : opts.error, + success : opts.success + }); + }; + + // Constructor, which is similar to that of the native Date object itself + timezoneJS.Date = function () { + var args = Array.prototype.slice.apply(arguments) + , dt = null + , tz = null + , arr = []; + + + //We support several different constructors, including all the ones from `Date` object + // with a timezone string at the end. + // + //- `[tz]`: Returns object with time in `tz` specified. + // + // - `utcMillis`, `[tz]`: Return object with UTC time = `utcMillis`, in `tz`. + // + // - `Date`, `[tz]`: Returns object with UTC time = `Date.getTime()`, in `tz`. + // + // - `year, month, [date,] [hours,] [minutes,] [seconds,] [millis,] [tz]: Same as `Date` object + // with tz. + // + // - `Array`: Can be any combo of the above. + // + //If 1st argument is an array, we can use it as a list of arguments itself + if (Object.prototype.toString.call(args[0]) === '[object Array]') { + args = args[0]; + } + if (typeof args[args.length - 1] === 'string' && TZ_REGEXP.test(args[args.length - 1])) { + tz = args.pop(); + } + switch (args.length) { + case 0: + dt = new Date(); + break; + case 1: + dt = new Date(args[0]); + break; + default: + for (var i = 0; i < 7; i++) { + arr[i] = args[i] || 0; + } + dt = new Date(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6]); + break; + } + + this._useCache = false; + this._tzInfo = {}; + this._day = 0; + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.milliseconds = 0; + this.timezone = tz || null; + //Tricky part: + // For the cases where there are 1/2 arguments: `timezoneJS.Date(millis, [tz])` and `timezoneJS.Date(Date, [tz])`. The + // Date `dt` created should be in UTC. Thus the way I detect such cases is to determine if `arr` is not populated & `tz` + // is specified. Because if `tz` is not specified, `dt` can be in local time. + if (arr.length) { + this.setFromDateObjProxy(dt); + } else { + this.setFromTimeProxy(dt.getTime(), tz); + } + }; + + // Implements most of the native Date object + timezoneJS.Date.prototype = { + getDate: function () { return this.date; }, + getDay: function () { return this._day; }, + getFullYear: function () { return this.year; }, + getMonth: function () { return this.month; }, + getYear: function () { return this.year; }, + getHours: function () { return this.hours; }, + getMilliseconds: function () { return this.milliseconds; }, + getMinutes: function () { return this.minutes; }, + getSeconds: function () { return this.seconds; }, + getUTCDate: function () { return this.getUTCDateProxy().getUTCDate(); }, + getUTCDay: function () { return this.getUTCDateProxy().getUTCDay(); }, + getUTCFullYear: function () { return this.getUTCDateProxy().getUTCFullYear(); }, + getUTCHours: function () { return this.getUTCDateProxy().getUTCHours(); }, + getUTCMilliseconds: function () { return this.getUTCDateProxy().getUTCMilliseconds(); }, + getUTCMinutes: function () { return this.getUTCDateProxy().getUTCMinutes(); }, + getUTCMonth: function () { return this.getUTCDateProxy().getUTCMonth(); }, + getUTCSeconds: function () { return this.getUTCDateProxy().getUTCSeconds(); }, + // Time adjusted to user-specified timezone + getTime: function () { + return this._timeProxy + (this.getTimezoneOffset() * 60 * 1000); + }, + getTimezone: function () { return this.timezone; }, + getTimezoneOffset: function () { return this.getTimezoneInfo().tzOffset; }, + getTimezoneAbbreviation: function () { return this.getTimezoneInfo().tzAbbr; }, + getTimezoneInfo: function () { + if (this._useCache) return this._tzInfo; + var res; + // If timezone is specified, get the correct timezone info based on the Date given + if (this.timezone) { + res = this.timezone === 'Etc/UTC' || this.timezone === 'Etc/GMT' + ? { tzOffset: 0, tzAbbr: 'UTC' } + : timezoneJS.timezone.getTzInfo(this._timeProxy, this.timezone); + } + // If no timezone was specified, use the local browser offset + else { + res = { tzOffset: this.getLocalOffset(), tzAbbr: null }; + } + this._tzInfo = res; + this._useCache = true; + return res + }, + getUTCDateProxy: function () { + var dt = new Date(this._timeProxy); + dt.setUTCMinutes(dt.getUTCMinutes() + this.getTimezoneOffset()); + return dt; + }, + setDate: function (n) { this.setAttribute('date', n); }, + setFullYear: function (n) { this.setAttribute('year', n); }, + setMonth: function (n) { this.setAttribute('month', n); }, + setYear: function (n) { this.setUTCAttribute('year', n); }, + setHours: function (n) { this.setAttribute('hours', n); }, + setMilliseconds: function (n) { this.setAttribute('milliseconds', n); }, + setMinutes: function (n) { this.setAttribute('minutes', n); }, + setSeconds: function (n) { this.setAttribute('seconds', n); }, + setTime: function (n) { + if (isNaN(n)) { throw new Error('Units must be a number.'); } + this.setFromTimeProxy(n, this.timezone); + }, + setUTCDate: function (n) { this.setUTCAttribute('date', n); }, + setUTCFullYear: function (n) { this.setUTCAttribute('year', n); }, + setUTCHours: function (n) { this.setUTCAttribute('hours', n); }, + setUTCMilliseconds: function (n) { this.setUTCAttribute('milliseconds', n); }, + setUTCMinutes: function (n) { this.setUTCAttribute('minutes', n); }, + setUTCMonth: function (n) { this.setUTCAttribute('month', n); }, + setUTCSeconds: function (n) { this.setUTCAttribute('seconds', n); }, + setFromDateObjProxy: function (dt) { + this.year = dt.getFullYear(); + this.month = dt.getMonth(); + this.date = dt.getDate(); + this.hours = dt.getHours(); + this.minutes = dt.getMinutes(); + this.seconds = dt.getSeconds(); + this.milliseconds = dt.getMilliseconds(); + this._day = dt.getDay(); + this._dateProxy = dt; + this._timeProxy = Date.UTC(this.year, this.month, this.date, this.hours, this.minutes, this.seconds, this.milliseconds); + this._useCache = false; + }, + setFromTimeProxy: function (utcMillis, tz) { + var dt = new Date(utcMillis); + var tzOffset; + tzOffset = tz ? timezoneJS.timezone.getTzInfo(dt, tz).tzOffset : dt.getTimezoneOffset(); + dt.setTime(utcMillis + (dt.getTimezoneOffset() - tzOffset) * 60000); + this.setFromDateObjProxy(dt); + }, + setAttribute: function (unit, n) { + if (isNaN(n)) { throw new Error('Units must be a number.'); } + var dt = this._dateProxy; + var meth = unit === 'year' ? 'FullYear' : unit.substr(0, 1).toUpperCase() + unit.substr(1); + dt['set' + meth](n); + this.setFromDateObjProxy(dt); + }, + setUTCAttribute: function (unit, n) { + if (isNaN(n)) { throw new Error('Units must be a number.'); } + var meth = unit === 'year' ? 'FullYear' : unit.substr(0, 1).toUpperCase() + unit.substr(1); + var dt = this.getUTCDateProxy(); + dt['setUTC' + meth](n); + dt.setUTCMinutes(dt.getUTCMinutes() - this.getTimezoneOffset()); + this.setFromTimeProxy(dt.getTime() + this.getTimezoneOffset() * 60000, this.timezone); + }, + setTimezone: function (tz) { + var previousOffset = this.getTimezoneInfo().tzOffset; + this.timezone = tz; + this._useCache = false; + // Set UTC minutes offsets by the delta of the two timezones + this.setUTCMinutes(this.getUTCMinutes() - this.getTimezoneInfo().tzOffset + previousOffset); + }, + removeTimezone: function () { + this.timezone = null; + this._useCache = false; + }, + valueOf: function () { return this.getTime(); }, + clone: function () { + return this.timezone ? new timezoneJS.Date(this.getTime(), this.timezone) : new timezoneJS.Date(this.getTime()); + }, + toGMTString: function () { return this.toString('EEE, dd MMM yyyy HH:mm:ss Z', 'Etc/GMT'); }, + toLocaleString: function () {}, + toLocaleDateString: function () {}, + toLocaleTimeString: function () {}, + toSource: function () {}, + toISOString: function () { return this.toString('yyyy-MM-ddTHH:mm:ss.SSS', 'Etc/UTC') + 'Z'; }, + toJSON: function () { return this.toISOString(); }, + // Allows different format following ISO8601 format: + toString: function (format, tz) { + // Default format is the same as toISOString + if (!format) format = 'yyyy-MM-dd HH:mm:ss'; + var result = format; + var tzInfo = tz ? timezoneJS.timezone.getTzInfo(this.getTime(), tz) : this.getTimezoneInfo(); + var _this = this; + // If timezone is specified, get a clone of the current Date object and modify it + if (tz) { + _this = this.clone(); + _this.setTimezone(tz); + } + var hours = _this.getHours(); + return result + // fix the same characters in Month names + .replace(/a+/g, function () { return 'k'; }) + // `y`: year + .replace(/y+/g, function (token) { return _fixWidth(_this.getFullYear(), token.length); }) + // `d`: date + .replace(/d+/g, function (token) { return _fixWidth(_this.getDate(), token.length); }) + // `m`: minute + .replace(/m+/g, function (token) { return _fixWidth(_this.getMinutes(), token.length); }) + // `s`: second + .replace(/s+/g, function (token) { return _fixWidth(_this.getSeconds(), token.length); }) + // `S`: millisecond + .replace(/S+/g, function (token) { return _fixWidth(_this.getMilliseconds(), token.length); }) + // `M`: month. Note: `MM` will be the numeric representation (e.g February is 02) but `MMM` will be text representation (e.g February is Feb) + .replace(/M+/g, function (token) { + var _month = _this.getMonth(), + _len = token.length; + if (_len > 3) { + return timezoneJS.Months[_month]; + } else if (_len > 2) { + return timezoneJS.Months[_month].substring(0, _len); + } + return _fixWidth(_month + 1, _len); + }) + // `k`: AM/PM + .replace(/k+/g, function () { + if (hours >= 12) { + if (hours > 12) { + hours -= 12; + } + return 'PM'; + } + return 'AM'; + }) + // `H`: hour + .replace(/H+/g, function (token) { return _fixWidth(hours, token.length); }) + // `E`: day + .replace(/E+/g, function (token) { return DAYS[_this.getDay()].substring(0, token.length); }) + // `Z`: timezone abbreviation + .replace(/Z+/gi, function () { return tzInfo.tzAbbr; }); + }, + toUTCString: function () { return this.toGMTString(); }, + civilToJulianDayNumber: function (y, m, d) { + var a; + // Adjust for zero-based JS-style array + m++; + if (m > 12) { + a = parseInt(m/12, 10); + m = m % 12; + y += a; + } + if (m <= 2) { + y -= 1; + m += 12; + } + a = Math.floor(y / 100); + var b = 2 - a + Math.floor(a / 4) + , jDt = Math.floor(365.25 * (y + 4716)) + Math.floor(30.6001 * (m + 1)) + d + b - 1524; + return jDt; + }, + getLocalOffset: function () { + return this._dateProxy.getTimezoneOffset(); + } + }; + + + timezoneJS.timezone = new function () { + var _this = this + , regionMap = {'Etc':'etcetera','EST':'northamerica','MST':'northamerica','HST':'northamerica','EST5EDT':'northamerica','CST6CDT':'northamerica','MST7MDT':'northamerica','PST8PDT':'northamerica','America':'northamerica','Pacific':'australasia','Atlantic':'europe','Africa':'africa','Indian':'africa','Antarctica':'antarctica','Asia':'asia','Australia':'australasia','Europe':'europe','WET':'europe','CET':'europe','MET':'europe','EET':'europe'} + , regionExceptions = {'Pacific/Honolulu':'northamerica','Atlantic/Bermuda':'northamerica','Atlantic/Cape_Verde':'africa','Atlantic/St_Helena':'africa','Indian/Kerguelen':'antarctica','Indian/Chagos':'asia','Indian/Maldives':'asia','Indian/Christmas':'australasia','Indian/Cocos':'australasia','America/Danmarkshavn':'europe','America/Scoresbysund':'europe','America/Godthab':'europe','America/Thule':'europe','Asia/Yekaterinburg':'europe','Asia/Omsk':'europe','Asia/Novosibirsk':'europe','Asia/Krasnoyarsk':'europe','Asia/Irkutsk':'europe','Asia/Yakutsk':'europe','Asia/Vladivostok':'europe','Asia/Sakhalin':'europe','Asia/Magadan':'europe','Asia/Kamchatka':'europe','Asia/Anadyr':'europe','Africa/Ceuta':'europe','America/Argentina/Buenos_Aires':'southamerica','America/Argentina/Cordoba':'southamerica','America/Argentina/Tucuman':'southamerica','America/Argentina/La_Rioja':'southamerica','America/Argentina/San_Juan':'southamerica','America/Argentina/Jujuy':'southamerica','America/Argentina/Catamarca':'southamerica','America/Argentina/Mendoza':'southamerica','America/Argentina/Rio_Gallegos':'southamerica','America/Argentina/Ushuaia':'southamerica','America/Aruba':'southamerica','America/La_Paz':'southamerica','America/Noronha':'southamerica','America/Belem':'southamerica','America/Fortaleza':'southamerica','America/Recife':'southamerica','America/Araguaina':'southamerica','America/Maceio':'southamerica','America/Bahia':'southamerica','America/Sao_Paulo':'southamerica','America/Campo_Grande':'southamerica','America/Cuiaba':'southamerica','America/Porto_Velho':'southamerica','America/Boa_Vista':'southamerica','America/Manaus':'southamerica','America/Eirunepe':'southamerica','America/Rio_Branco':'southamerica','America/Santiago':'southamerica','Pacific/Easter':'southamerica','America/Bogota':'southamerica','America/Curacao':'southamerica','America/Guayaquil':'southamerica','Pacific/Galapagos':'southamerica','Atlantic/Stanley':'southamerica','America/Cayenne':'southamerica','America/Guyana':'southamerica','America/Asuncion':'southamerica','America/Lima':'southamerica','Atlantic/South_Georgia':'southamerica','America/Paramaribo':'southamerica','America/Port_of_Spain':'southamerica','America/Montevideo':'southamerica','America/Caracas':'southamerica'}; + function invalidTZError(t) { throw new Error('Timezone "' + t + '" is either incorrect, or not loaded in the timezone registry.'); } + function builtInLoadZoneFile(fileName, opts) { + var url = _this.zoneFileBasePath + '/' + fileName; + return !opts || !opts.async + ? _this.parseZones(_this.transport({ url : url, async : false })) + : _this.transport({ + async: true, + url : url, + success : function (str) { + if (_this.parseZones(str) && typeof opts.callback === 'function') { + opts.callback(); + } + return true; + }, + error : function () { + throw new Error('Error retrieving "' + url + '" zoneinfo files'); + } + }); + } + function getRegionForTimezone(tz) { + var exc = regionExceptions[tz] + , reg + , ret; + if (exc) return exc; + reg = tz.split('/')[0]; + ret = regionMap[reg]; + // If there's nothing listed in the main regions for this TZ, check the 'backward' links + if (ret) return ret; + var link = _this.zones[tz]; + if (typeof link === 'string') { + return getRegionForTimezone(link); + } + // Backward-compat file hasn't loaded yet, try looking in there + if (!_this.loadedZones.backward) { + // This is for obvious legacy zones (e.g., Iceland) that don't even have a prefix like "America/" that look like normal zones + _this.loadZoneFile('backward'); + return getRegionForTimezone(tz); + } + invalidTZError(tz); + } + function parseTimeString(str) { + var pat = /(\d+)(?::0*(\d*))?(?::0*(\d*))?([wsugz])?$/; + var hms = str.match(pat); + hms[1] = parseInt(hms[1], 10); + hms[2] = hms[2] ? parseInt(hms[2], 10) : 0; + hms[3] = hms[3] ? parseInt(hms[3], 10) : 0; + + return hms; + } + function processZone(z) { + if (!z[3]) { return; } + var yea = parseInt(z[3], 10); + var mon = 11; + var dat = 31; + if (z[4]) { + mon = SHORT_MONTHS[z[4].substr(0, 3)]; + dat = parseInt(z[5], 10) || 1; + } + var string = z[6] ? z[6] : '00:00:00' + , t = parseTimeString(string); + return [yea, mon, dat, t[1], t[2], t[3]]; + } + function getZone(dt, tz) { + var utcMillis = typeof dt === 'number' ? dt : new Date(dt).getTime(); + var t = tz; + var zoneList = _this.zones[t]; + // Follow links to get to an actual zone + while (typeof zoneList === "string") { + t = zoneList; + zoneList = _this.zones[t]; + } + if (!zoneList) { + // Backward-compat file hasn't loaded yet, try looking in there + if (!_this.loadedZones.backward) { + //This is for backward entries like "America/Fort_Wayne" that + // getRegionForTimezone *thinks* it has a region file and zone + // for (e.g., America => 'northamerica'), but in reality it's a + // legacy zone we need the backward file for. + _this.loadZoneFile('backward'); + return getZone(dt, tz); + } + invalidTZError(t); + } + if (zoneList.length === 0) { + throw new Error('No Zone found for "' + tz + '" on ' + dt); + } + //Do backwards lookup since most use cases deal with newer dates. + for (var i = zoneList.length - 1; i >= 0; i--) { + var z = zoneList[i]; + if (z[3] && utcMillis > z[3]) break; + } + return zoneList[i+1]; + } + function getBasicOffset(time) { + var off = parseTimeString(time) + , adj = time.indexOf('-') === 0 ? -1 : 1; + off = adj * (((off[1] * 60 + off[2]) * 60 + off[3]) * 1000); + return off/60/1000; + } + + //if isUTC is true, date is given in UTC, otherwise it's given + // in local time (ie. date.getUTC*() returns local time components) + function getRule(dt, zone, isUTC) { + var date = typeof dt === 'number' ? new Date(dt) : dt; + var ruleset = zone[1]; + var basicOffset = zone[0]; + + //Convert a date to UTC. Depending on the 'type' parameter, the date + // parameter may be: + // + // - `u`, `g`, `z`: already UTC (no adjustment). + // + // - `s`: standard time (adjust for time zone offset but not for DST) + // + // - `w`: wall clock time (adjust for both time zone and DST offset). + // + // DST adjustment is done using the rule given as third argument. + var convertDateToUTC = function (date, type, rule) { + var offset = 0; + + if (type === 'u' || type === 'g' || type === 'z') { // UTC + offset = 0; + } else if (type === 's') { // Standard Time + offset = basicOffset; + } else if (type === 'w' || !type) { // Wall Clock Time + offset = getAdjustedOffset(basicOffset, rule); + } else { + throw("unknown type " + type); + } + offset *= 60 * 1000; // to millis + + return new Date(date.getTime() + offset); + }; + + //Step 1: Find applicable rules for this year. + // + //Step 2: Sort the rules by effective date. + // + //Step 3: Check requested date to see if a rule has yet taken effect this year. If not, + // + //Step 4: Get the rules for the previous year. If there isn't an applicable rule for last year, then + // there probably is no current time offset since they seem to explicitly turn off the offset + // when someone stops observing DST. + // + // FIXME if this is not the case and we'll walk all the way back (ugh). + // + //Step 5: Sort the rules by effective date. + //Step 6: Apply the most recent rule before the current time. + var convertRuleToExactDateAndTime = function (yearAndRule, prevRule) { + var year = yearAndRule[0] + , rule = yearAndRule[1]; + // Assume that the rule applies to the year of the given date. + + var hms = rule[5]; + var effectiveDate; + + if (!EXACT_DATE_TIME[year]) + EXACT_DATE_TIME[year] = {}; + + // Result for given parameters is already stored + if (EXACT_DATE_TIME[year][rule]) + effectiveDate = EXACT_DATE_TIME[year][rule]; + else { + //If we have a specific date, use that! + if (!isNaN(rule[4])) { + effectiveDate = new Date(Date.UTC(year, SHORT_MONTHS[rule[3]], rule[4], hms[1], hms[2], hms[3], 0)); + } + //Let's hunt for the date. + else { + var targetDay + , operator; + //Example: `lastThu` + if (rule[4].substr(0, 4) === "last") { + // Start at the last day of the month and work backward. + effectiveDate = new Date(Date.UTC(year, SHORT_MONTHS[rule[3]] + 1, 1, hms[1] - 24, hms[2], hms[3], 0)); + targetDay = SHORT_DAYS[rule[4].substr(4, 3)]; + operator = "<="; + } + //Example: `Sun>=15` + else { + //Start at the specified date. + effectiveDate = new Date(Date.UTC(year, SHORT_MONTHS[rule[3]], rule[4].substr(5), hms[1], hms[2], hms[3], 0)); + targetDay = SHORT_DAYS[rule[4].substr(0, 3)]; + operator = rule[4].substr(3, 2); + } + var ourDay = effectiveDate.getUTCDay(); + //Go forwards. + if (operator === ">=") { + effectiveDate.setUTCDate(effectiveDate.getUTCDate() + (targetDay - ourDay + ((targetDay < ourDay) ? 7 : 0))); + } + //Go backwards. Looking for the last of a certain day, or operator is "<=" (less likely). + else { + effectiveDate.setUTCDate(effectiveDate.getUTCDate() + (targetDay - ourDay - ((targetDay > ourDay) ? 7 : 0))); + } + } + EXACT_DATE_TIME[year][rule] = effectiveDate; + } + + + //If previous rule is given, correct for the fact that the starting time of the current + // rule may be specified in local time. + if (prevRule) { + effectiveDate = convertDateToUTC(effectiveDate, hms[4], prevRule); + } + return effectiveDate; + }; + + var findApplicableRules = function (year, ruleset) { + var applicableRules = []; + for (var i = 0; ruleset && i < ruleset.length; i++) { + //Exclude future rules. + if (ruleset[i][0] <= year && + ( + // Date is in a set range. + ruleset[i][1] >= year || + // Date is in an "only" year. + (ruleset[i][0] === year && ruleset[i][1] === "only") || + //We're in a range from the start year to infinity. + ruleset[i][1] === "max" + ) + ) { + //It's completely okay to have any number of matches here. + // Normally we should only see two, but that doesn't preclude other numbers of matches. + // These matches are applicable to this year. + applicableRules.push([year, ruleset[i]]); + } + } + return applicableRules; + }; + + var compareDates = function (a, b, prev) { + var year, rule; + if (a.constructor !== Date) { + year = a[0]; + rule = a[1]; + a = (!prev && EXACT_DATE_TIME[year] && EXACT_DATE_TIME[year][rule]) + ? EXACT_DATE_TIME[year][rule] + : convertRuleToExactDateAndTime(a, prev); + } else if (prev) { + a = convertDateToUTC(a, isUTC ? 'u' : 'w', prev); + } + if (b.constructor !== Date) { + year = b[0]; + rule = b[1]; + b = (!prev && EXACT_DATE_TIME[year] && EXACT_DATE_TIME[year][rule]) ? EXACT_DATE_TIME[year][rule] + : convertRuleToExactDateAndTime(b, prev); + } else if (prev) { + b = convertDateToUTC(b, isUTC ? 'u' : 'w', prev); + } + a = Number(a); + b = Number(b); + return a - b; + }; + + var year = date.getUTCFullYear(); + var applicableRules; + + applicableRules = findApplicableRules(year, _this.rules[ruleset]); + applicableRules.push(date); + //While sorting, the time zone in which the rule starting time is specified + // is ignored. This is ok as long as the timespan between two DST changes is + // larger than the DST offset, which is probably always true. + // As the given date may indeed be close to a DST change, it may get sorted + // to a wrong position (off by one), which is corrected below. + applicableRules.sort(compareDates); + + //If there are not enough past DST rules... + if (applicableRules.indexOf(date) < 2) { + applicableRules = applicableRules.concat(findApplicableRules(year-1, _this.rules[ruleset])); + applicableRules.sort(compareDates); + } + var pinpoint = applicableRules.indexOf(date); + if (pinpoint > 1 && compareDates(date, applicableRules[pinpoint-1], applicableRules[pinpoint-2][1]) < 0) { + //The previous rule does not really apply, take the one before that. + return applicableRules[pinpoint - 2][1]; + } else if (pinpoint > 0 && pinpoint < applicableRules.length - 1 && compareDates(date, applicableRules[pinpoint+1], applicableRules[pinpoint-1][1]) > 0) { + + //The next rule does already apply, take that one. + return applicableRules[pinpoint + 1][1]; + } else if (pinpoint === 0) { + //No applicable rule found in this and in previous year. + return null; + } + return applicableRules[pinpoint - 1][1]; + } + function getAdjustedOffset(off, rule) { + return -Math.ceil(rule[6] - off); + } + function getAbbreviation(zone, rule) { + var res; + var base = zone[2]; + if (base.indexOf('%s') > -1) { + var repl; + if (rule) { + repl = rule[7] === '-' ? '' : rule[7]; + } + //FIXME: Right now just falling back to Standard -- + // apparently ought to use the last valid rule, + // although in practice that always ought to be Standard + else { + repl = 'S'; + } + res = base.replace('%s', repl); + } + else if (base.indexOf('/') > -1) { + //Chose one of two alternative strings. + res = base.split("/", 2)[rule[6] ? 1 : 0]; + } else { + res = base; + } + return res; + } + + this.zoneFileBasePath; + this.zoneFiles = ['africa', 'antarctica', 'asia', 'australasia', 'backward', 'etcetera', 'europe', 'northamerica', 'pacificnew', 'southamerica']; + this.loadingSchemes = { + PRELOAD_ALL: 'preloadAll', + LAZY_LOAD: 'lazyLoad', + MANUAL_LOAD: 'manualLoad' + }; + this.loadingScheme = this.loadingSchemes.LAZY_LOAD; + this.loadedZones = {}; + this.zones = {}; + this.rules = {}; + + this.init = function (o) { + var opts = { async: true } + , def = this.defaultZoneFile = this.loadingScheme === this.loadingSchemes.PRELOAD_ALL + ? this.zoneFiles + : 'northamerica' + , done = 0 + , callbackFn; + //Override default with any passed-in opts + for (var p in o) { + opts[p] = o[p]; + } + if (typeof def === 'string') { + return this.loadZoneFile(def, opts); + } + //Wraps callback function in another one that makes + // sure all files have been loaded. + callbackFn = opts.callback; + opts.callback = function () { + done++; + (done === def.length) && typeof callbackFn === 'function' && callbackFn(); + }; + for (var i = 0; i < def.length; i++) { + this.loadZoneFile(def[i], opts); + } + }; + + //Get the zone files via XHR -- if the sync flag + // is set to true, it's being called by the lazy-loading + // mechanism, so the result needs to be returned inline. + this.loadZoneFile = function (fileName, opts) { + if (typeof this.zoneFileBasePath === 'undefined') { + throw new Error('Please define a base path to your zone file directory -- timezoneJS.timezone.zoneFileBasePath.'); + } + //Ignore already loaded zones. + if (this.loadedZones[fileName]) { + return; + } + this.loadedZones[fileName] = true; + return builtInLoadZoneFile(fileName, opts); + }; + this.loadZoneJSONData = function (url, sync) { + var processData = function (data) { + data = eval('('+ data +')'); + for (var z in data.zones) { + _this.zones[z] = data.zones[z]; + } + for (var r in data.rules) { + _this.rules[r] = data.rules[r]; + } + }; + return sync + ? processData(_this.transport({ url : url, async : false })) + : _this.transport({ url : url, success : processData }); + }; + this.loadZoneDataFromObject = function (data) { + if (!data) { return; } + for (var z in data.zones) { + _this.zones[z] = data.zones[z]; + } + for (var r in data.rules) { + _this.rules[r] = data.rules[r]; + } + }; + this.getAllZones = function () { + var arr = []; + for (var z in this.zones) { arr.push(z); } + return arr.sort(); + }; + this.parseZones = function (str) { + var lines = str.split('\n') + , arr = [] + , chunk = '' + , l + , zone = null + , rule = null; + for (var i = 0; i < lines.length; i++) { + l = lines[i]; + if (l.match(/^\s/)) { + l = "Zone " + zone + l; + } + l = l.split("#")[0]; + if (l.length > 3) { + arr = l.split(/\s+/); + chunk = arr.shift(); + //Ignore Leap. + switch (chunk) { + case 'Zone': + zone = arr.shift(); + if (!_this.zones[zone]) { + _this.zones[zone] = []; + } + if (arr.length < 3) break; + //Process zone right here and replace 3rd element with the processed array. + arr.splice(3, arr.length, processZone(arr)); + if (arr[3]) arr[3] = Date.UTC.apply(null, arr[3]); + arr[0] = -getBasicOffset(arr[0]); + _this.zones[zone].push(arr); + break; + case 'Rule': + rule = arr.shift(); + if (!_this.rules[rule]) { + _this.rules[rule] = []; + } + //Parse int FROM year and TO year + arr[0] = parseInt(arr[0], 10); + arr[1] = parseInt(arr[1], 10) || arr[1]; + //Parse time string AT + arr[5] = parseTimeString(arr[5]); + //Parse offset SAVE + arr[6] = getBasicOffset(arr[6]); + _this.rules[rule].push(arr); + break; + case 'Link': + //No zones for these should already exist. + if (_this.zones[arr[1]]) { + throw new Error('Error with Link ' + arr[1] + '. Cannot create link of a preexisted zone.'); + } + //Create the link. + _this.zones[arr[1]] = arr[0]; + break; + } + } + } + return true; + }; + //Expose transport mechanism and allow overwrite. + this.transport = _transport; + this.getTzInfo = function (dt, tz, isUTC) { + //Lazy-load any zones not yet loaded. + if (this.loadingScheme === this.loadingSchemes.LAZY_LOAD) { + //Get the correct region for the zone. + var zoneFile = getRegionForTimezone(tz); + if (!zoneFile) { + throw new Error('Not a valid timezone ID.'); + } + if (!this.loadedZones[zoneFile]) { + //Get the file and parse it -- use synchronous XHR. + this.loadZoneFile(zoneFile); + } + } + var z = getZone(dt, tz); + var off = z[0]; + //See if the offset needs adjustment. + var rule = getRule(dt, z, isUTC); + if (rule) { + off = getAdjustedOffset(off, rule); + } + var abbr = getAbbreviation(z, rule); + return { tzOffset: off, tzAbbr: abbr }; + }; + }; +}).call(this); diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/index.html b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/index.html new file mode 100644 index 0000000..94ef43e --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/index.html @@ -0,0 +1,114 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Time zones</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.time.js"></script> + <script language="javascript" type="text/javascript" src="date.js"></script> + <script type="text/javascript"> + + $(function() { + + timezoneJS.timezone.zoneFileBasePath = "tz"; + timezoneJS.timezone.defaultZoneFile = []; + timezoneJS.timezone.init({async: false}); + + var d = [ + [Date.UTC(2011, 2, 12, 14, 0, 0), 28], + [Date.UTC(2011, 2, 12, 15, 0, 0), 27], + [Date.UTC(2011, 2, 12, 16, 0, 0), 25], + [Date.UTC(2011, 2, 12, 17, 0, 0), 19], + [Date.UTC(2011, 2, 12, 18, 0, 0), 16], + [Date.UTC(2011, 2, 12, 19, 0, 0), 14], + [Date.UTC(2011, 2, 12, 20, 0, 0), 11], + [Date.UTC(2011, 2, 12, 21, 0, 0), 9], + [Date.UTC(2011, 2, 12, 22, 0, 0), 7.5], + [Date.UTC(2011, 2, 12, 23, 0, 0), 6], + [Date.UTC(2011, 2, 13, 0, 0, 0), 5], + [Date.UTC(2011, 2, 13, 1, 0, 0), 6], + [Date.UTC(2011, 2, 13, 2, 0, 0), 7.5], + [Date.UTC(2011, 2, 13, 3, 0, 0), 9], + [Date.UTC(2011, 2, 13, 4, 0, 0), 11], + [Date.UTC(2011, 2, 13, 5, 0, 0), 14], + [Date.UTC(2011, 2, 13, 6, 0, 0), 16], + [Date.UTC(2011, 2, 13, 7, 0, 0), 19], + [Date.UTC(2011, 2, 13, 8, 0, 0), 25], + [Date.UTC(2011, 2, 13, 9, 0, 0), 27], + [Date.UTC(2011, 2, 13, 10, 0, 0), 28], + [Date.UTC(2011, 2, 13, 11, 0, 0), 29], + [Date.UTC(2011, 2, 13, 12, 0, 0), 29.5], + [Date.UTC(2011, 2, 13, 13, 0, 0), 29], + [Date.UTC(2011, 2, 13, 14, 0, 0), 28], + [Date.UTC(2011, 2, 13, 15, 0, 0), 27], + [Date.UTC(2011, 2, 13, 16, 0, 0), 25], + [Date.UTC(2011, 2, 13, 17, 0, 0), 19], + [Date.UTC(2011, 2, 13, 18, 0, 0), 16], + [Date.UTC(2011, 2, 13, 19, 0, 0), 14], + [Date.UTC(2011, 2, 13, 20, 0, 0), 11], + [Date.UTC(2011, 2, 13, 21, 0, 0), 9], + [Date.UTC(2011, 2, 13, 22, 0, 0), 7.5], + [Date.UTC(2011, 2, 13, 23, 0, 0), 6] + ]; + + var plot = $.plot("#placeholderUTC", [d], { + xaxis: { + mode: "time" + } + }); + + var plot = $.plot("#placeholderLocal", [d], { + xaxis: { + mode: "time", + timezone: "browser" + } + }); + + var plot = $.plot("#placeholderChicago", [d], { + xaxis: { + mode: "time", + timezone: "America/Chicago" + } + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Time zones</h2> + </div> + + <div id="content"> + + <h3>UTC</h3> + <div class="demo-container" style="height: 300px;"> + <div id="placeholderUTC" class="demo-placeholder"></div> + </div> + + <h3>Browser</h3> + <div class="demo-container" style="height: 300px;"> + <div id="placeholderLocal" class="demo-placeholder"></div> + </div> + + <h3>Chicago</h3> + <div class="demo-container" style="height: 300px;"> + <div id="placeholderChicago" class="demo-placeholder"></div> + </div> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/africa b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/africa new file mode 100644 index 0000000..54c7a1e --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/africa @@ -0,0 +1,1181 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@iana.org for general use in the future). + +# From Paul Eggert (2006-03-22): +# +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1990, and IATA SSIM is the source for entries afterwards. +# +# Another source occasionally used is Edward W. Whitman, World Time Differences, +# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which +# I found in the UCLA library. +# +# A reliable and entertaining source about time zones is +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). +# +# Previous editions of this database used WAT, CAT, SAT, and EAT +# for +0:00 through +3:00, respectively, +# but Mark R V Murray reports that +# `SAST' is the official abbreviation for +2:00 in the country of South Africa, +# `CAT' is commonly used for +2:00 in countries north of South Africa, and +# `WAT' is probably the best name for +1:00, as the common phrase for +# the area that includes Nigeria is ``West Africa''. +# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference. +# +# To make things confusing, `WAT' seems to have been used for -1:00 long ago; +# I'd guess that this was because people needed _some_ name for -1:00, +# and at the time, far west Africa was the only major land area in -1:00. +# This usage is now obsolete, as the last use of -1:00 on the African +# mainland seems to have been 1976 in Western Sahara. +# +# To summarize, the following abbreviations seem to have some currency: +# -1:00 WAT West Africa Time (no longer used) +# 0:00 GMT Greenwich Mean Time +# 2:00 CAT Central Africa Time +# 2:00 SAST South Africa Standard Time +# and Murray suggests the following abbreviation: +# 1:00 WAT West Africa Time +# I realize that this leads to `WAT' being used for both -1:00 and 1:00 +# for times before 1976, but this is the best I can think of +# until we get more information. +# +# I invented the following abbreviations; corrections are welcome! +# 2:00 WAST West Africa Summer Time +# 2:30 BEAT British East Africa Time (no longer used) +# 2:45 BEAUT British East Africa Unified Time (no longer used) +# 3:00 CAST Central Africa Summer Time (no longer used) +# 3:00 SAST South Africa Summer Time (no longer used) +# 3:00 EAT East Africa Time +# 4:00 EAST East Africa Summer Time (no longer used) + +# Algeria +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Algeria 1916 only - Jun 14 23:00s 1:00 S +Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 - +Rule Algeria 1917 only - Mar 24 23:00s 1:00 S +Rule Algeria 1918 only - Mar 9 23:00s 1:00 S +Rule Algeria 1919 only - Mar 1 23:00s 1:00 S +Rule Algeria 1920 only - Feb 14 23:00s 1:00 S +Rule Algeria 1920 only - Oct 23 23:00s 0 - +Rule Algeria 1921 only - Mar 14 23:00s 1:00 S +Rule Algeria 1921 only - Jun 21 23:00s 0 - +Rule Algeria 1939 only - Sep 11 23:00s 1:00 S +Rule Algeria 1939 only - Nov 19 1:00 0 - +Rule Algeria 1944 1945 - Apr Mon>=1 2:00 1:00 S +Rule Algeria 1944 only - Oct 8 2:00 0 - +Rule Algeria 1945 only - Sep 16 1:00 0 - +Rule Algeria 1971 only - Apr 25 23:00s 1:00 S +Rule Algeria 1971 only - Sep 26 23:00s 0 - +Rule Algeria 1977 only - May 6 0:00 1:00 S +Rule Algeria 1977 only - Oct 21 0:00 0 - +Rule Algeria 1978 only - Mar 24 1:00 1:00 S +Rule Algeria 1978 only - Sep 22 3:00 0 - +Rule Algeria 1980 only - Apr 25 0:00 1:00 S +Rule Algeria 1980 only - Oct 31 2:00 0 - +# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's +# more precise 0:09:21. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time + 0:00 Algeria WE%sT 1940 Feb 25 2:00 + 1:00 Algeria CE%sT 1946 Oct 7 + 0:00 - WET 1956 Jan 29 + 1:00 - CET 1963 Apr 14 + 0:00 Algeria WE%sT 1977 Oct 21 + 1:00 Algeria CE%sT 1979 Oct 26 + 0:00 Algeria WE%sT 1981 May + 1:00 - CET + +# Angola +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Luanda 0:52:56 - LMT 1892 + 0:52:04 - AOT 1911 May 26 # Angola Time + 1:00 - WAT + +# Benin +# Whitman says they switched to 1:00 in 1946, not 1934; +# go with Shanks & Pottenger. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Porto-Novo 0:10:28 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + 1:00 - WAT + +# Botswana +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Gaborone 1:43:40 - LMT 1885 + 2:00 - CAT 1943 Sep 19 2:00 + 2:00 1:00 CAST 1944 Mar 19 2:00 + 2:00 - CAT + +# Burkina Faso +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Ouagadougou -0:06:04 - LMT 1912 + 0:00 - GMT + +# Burundi +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Bujumbura 1:57:28 - LMT 1890 + 2:00 - CAT + +# Cameroon +# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Douala 0:38:48 - LMT 1912 + 1:00 - WAT + +# Cape Verde +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia + -2:00 - CVT 1942 Sep + -2:00 1:00 CVST 1945 Oct 15 + -2:00 - CVT 1975 Nov 25 2:00 + -1:00 - CVT + +# Central African Republic +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Bangui 1:14:20 - LMT 1912 + 1:00 - WAT + +# Chad +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Ndjamena 1:00:12 - LMT 1912 + 1:00 - WAT 1979 Oct 14 + 1:00 1:00 WAST 1980 Mar 8 + 1:00 - WAT + +# Comoros +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro + 3:00 - EAT + +# Democratic Republic of Congo +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9 + 1:00 - WAT +Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9 + 2:00 - CAT + +# Republic of the Congo +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Brazzaville 1:01:08 - LMT 1912 + 1:00 - WAT + +# Cote D'Ivoire +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Abidjan -0:16:08 - LMT 1912 + 0:00 - GMT + +# Djibouti +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul + 3:00 - EAT + +############################################################################### + +# Egypt + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Egypt 1940 only - Jul 15 0:00 1:00 S +Rule Egypt 1940 only - Oct 1 0:00 0 - +Rule Egypt 1941 only - Apr 15 0:00 1:00 S +Rule Egypt 1941 only - Sep 16 0:00 0 - +Rule Egypt 1942 1944 - Apr 1 0:00 1:00 S +Rule Egypt 1942 only - Oct 27 0:00 0 - +Rule Egypt 1943 1945 - Nov 1 0:00 0 - +Rule Egypt 1945 only - Apr 16 0:00 1:00 S +Rule Egypt 1957 only - May 10 0:00 1:00 S +Rule Egypt 1957 1958 - Oct 1 0:00 0 - +Rule Egypt 1958 only - May 1 0:00 1:00 S +Rule Egypt 1959 1981 - May 1 1:00 1:00 S +Rule Egypt 1959 1965 - Sep 30 3:00 0 - +Rule Egypt 1966 1994 - Oct 1 3:00 0 - +Rule Egypt 1982 only - Jul 25 1:00 1:00 S +Rule Egypt 1983 only - Jul 12 1:00 1:00 S +Rule Egypt 1984 1988 - May 1 1:00 1:00 S +Rule Egypt 1989 only - May 6 1:00 1:00 S +Rule Egypt 1990 1994 - May 1 1:00 1:00 S +# IATA (after 1990) says transitions are at 0:00. +# Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29. + +# From Alexander Krivenyshev (2011-04-20): +# "...Egypt's interim cabinet decided on Wednesday to cancel daylight +# saving time after a poll posted on its website showed the majority of +# Egyptians would approve the cancellation." +# +# Egypt to cancel daylight saving time +# <a href="http://www.almasryalyoum.com/en/node/407168"> +# http://www.almasryalyoum.com/en/node/407168 +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_egypt04.html"> +# http://www.worldtimezone.com/dst_news/dst_news_egypt04.html +# </a> +Rule Egypt 1995 2010 - Apr lastFri 0:00s 1:00 S +Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 - +# From Steffen Thorsen (2006-09-19): +# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports: +# Egypt will turn back clocks by one hour at the midnight of Thursday +# after observing the daylight saving time since May. +# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf +Rule Egypt 2006 only - Sep 21 23:00s 0 - +# From Dirk Losch (2007-08-14): +# I received a mail from an airline which says that the daylight +# saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07. +# From Jesper Norgaard Welen (2007-08-15): [The following agree:] +# http://www.nentjes.info/Bill/bill5.htm +# http://www.timeanddate.com/worldclock/city.html?n=53 +# From Steffen Thorsen (2007-09-04): The official information...: +# http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm +Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 - +# From Abdelrahman Hassan (2007-09-06): +# Due to the Hijri (lunar Islamic calendar) year being 11 days shorter +# than the year of the Gregorian calendar, Ramadan shifts earlier each +# year. This year it will be observed September 13 (September is quite +# hot in Egypt), and the idea is to make fasting easier for workers by +# shifting business hours one hour out of daytime heat. Consequently, +# unless discontinued, next DST may end Thursday 28 August 2008. +# From Paul Eggert (2007-08-17): +# For lack of better info, assume the new rule is last Thursday in August. + +# From Petr Machata (2009-04-06): +# The following appeared in Red Hat bugzilla[1] (edited): +# +# > $ zdump -v /usr/share/zoneinfo/Africa/Cairo | grep 2009 +# > /usr/share/zoneinfo/Africa/Cairo Thu Apr 23 21:59:59 2009 UTC = Thu = +# Apr 23 +# > 23:59:59 2009 EET isdst=0 gmtoff=7200 +# > /usr/share/zoneinfo/Africa/Cairo Thu Apr 23 22:00:00 2009 UTC = Fri = +# Apr 24 +# > 01:00:00 2009 EEST isdst=1 gmtoff=10800 +# > /usr/share/zoneinfo/Africa/Cairo Thu Aug 27 20:59:59 2009 UTC = Thu = +# Aug 27 +# > 23:59:59 2009 EEST isdst=1 gmtoff=10800 +# > /usr/share/zoneinfo/Africa/Cairo Thu Aug 27 21:00:00 2009 UTC = Thu = +# Aug 27 +# > 23:00:00 2009 EET isdst=0 gmtoff=7200 +# +# > end date should be Thu Sep 24 2009 (Last Thursday in September at 23:59= +# :59) +# > http://support.microsoft.com/kb/958729/ +# +# timeanddate[2] and another site I've found[3] also support that. +# +# [1] <a href="https://bugzilla.redhat.com/show_bug.cgi?id=492263"> +# https://bugzilla.redhat.com/show_bug.cgi?id=492263 +# </a> +# [2] <a href="http://www.timeanddate.com/worldclock/clockchange.html?n=53"> +# http://www.timeanddate.com/worldclock/clockchange.html?n=53 +# </a> +# [3] <a href="http://wwp.greenwichmeantime.com/time-zone/africa/egypt/"> +# http://wwp.greenwichmeantime.com/time-zone/africa/egypt/ +# </a> + +# From Arthur David Olson (2009-04-20): +# In 2009 (and for the next several years), Ramadan ends before the fourth +# Thursday in September; Egypt is expected to revert to the last Thursday +# in September. + +# From Steffen Thorsen (2009-08-11): +# We have been able to confirm the August change with the Egyptian Cabinet +# Information and Decision Support Center: +# <a href="http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html"> +# http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html +# </a> +# +# The Middle East News Agency +# <a href="http://www.mena.org.eg/index.aspx"> +# http://www.mena.org.eg/index.aspx +# </a> +# also reports "Egypt starts winter time on August 21" +# today in article numbered "71, 11/08/2009 12:25 GMT." +# Only the title above is available without a subscription to their service, +# and can be found by searching for "winter" in their search engine +# (at least today). + +# From Alexander Krivenyshev (2010-07-20): +# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has +# decided that Daylight Saving Time will not be used in Egypt during +# Ramadan. +# +# Arabic translation: +# "Clocks to go back during Ramadan--and then forward again" +# <a href="http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again"> +# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_egypt02.html"> +# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html +# </a> + +Rule Egypt 2008 only - Aug lastThu 23:00s 0 - +Rule Egypt 2009 only - Aug 20 23:00s 0 - +Rule Egypt 2010 only - Aug 11 0:00 0 - +Rule Egypt 2010 only - Sep 10 0:00 1:00 S +Rule Egypt 2010 only - Sep lastThu 23:00s 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Cairo 2:05:00 - LMT 1900 Oct + 2:00 Egypt EE%sT + +# Equatorial Guinea +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Malabo 0:35:08 - LMT 1912 + 0:00 - GMT 1963 Dec 15 + 1:00 - WAT + +# Eritrea +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Asmara 2:35:32 - LMT 1870 + 2:35:32 - AMT 1890 # Asmara Mean Time + 2:35:20 - ADMT 1936 May 5 # Adis Dera MT + 3:00 - EAT + +# Ethiopia +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones +# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890. +# We'll guess that 38E50 is for Adis Dera. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Addis_Ababa 2:34:48 - LMT 1870 + 2:35:20 - ADMT 1936 May 5 # Adis Dera MT + 3:00 - EAT + +# Gabon +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Libreville 0:37:48 - LMT 1912 + 1:00 - WAT + +# Gambia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Banjul -1:06:36 - LMT 1912 + -1:06:36 - BMT 1935 # Banjul Mean Time + -1:00 - WAT 1964 + 0:00 - GMT + +# Ghana +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Whitman says DST was observed from 1931 to ``the present''; +# go with Shanks & Pottenger. +Rule Ghana 1936 1942 - Sep 1 0:00 0:20 GHST +Rule Ghana 1936 1942 - Dec 31 0:00 0 GMT +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Accra -0:00:52 - LMT 1918 + 0:00 Ghana %s + +# Guinea +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Conakry -0:54:52 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + -1:00 - WAT 1960 + 0:00 - GMT + +# Guinea-Bissau +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Bissau -1:02:20 - LMT 1911 May 26 + -1:00 - WAT 1975 + 0:00 - GMT + +# Kenya +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul + 3:00 - EAT 1930 + 2:30 - BEAT 1940 + 2:45 - BEAUT 1960 + 3:00 - EAT + +# Lesotho +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Maseru 1:50:00 - LMT 1903 Mar + 2:00 - SAST 1943 Sep 19 2:00 + 2:00 1:00 SAST 1944 Mar 19 2:00 + 2:00 - SAST + +# Liberia +# From Paul Eggert (2006-03-22): +# In 1972 Liberia was the last country to switch +# from a UTC offset that was not a multiple of 15 or 20 minutes. +# Howse reports that it was in honor of their president's birthday. +# Shank & Pottenger report the date as May 1, whereas Howse reports Jan; +# go with Shanks & Pottenger. +# For Liberia before 1972, Shanks & Pottenger report -0:44, whereas Howse and +# Whitman each report -0:44:30; go with the more precise figure. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Monrovia -0:43:08 - LMT 1882 + -0:43:08 - MMT 1919 Mar # Monrovia Mean Time + -0:44:30 - LRT 1972 May # Liberia Time + 0:00 - GMT + +############################################################################### + +# Libya + +# From Even Scharning (2012-11-10): +# Libya set their time one hour back at 02:00 on Saturday November 10. +# http://www.libyaherald.com/2012/11/04/clocks-to-go-back-an-hour-on-saturday/ +# Here is an official source [in Arabic]: http://ls.ly/fb6Yc +# +# Steffen Thorsen forwarded a translation (2012-11-10) in +# http://mm.icann.org/pipermail/tz/2012-November/018451.html +# +# From Tim Parenti (2012-11-11): +# Treat the 2012-11-10 change as a zone change from UTC+2 to UTC+1. +# The DST rules planned for 2013 and onward roughly mirror those of Europe +# (either two days before them or five days after them, so as to fall on +# lastFri instead of lastSun). + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Libya 1951 only - Oct 14 2:00 1:00 S +Rule Libya 1952 only - Jan 1 0:00 0 - +Rule Libya 1953 only - Oct 9 2:00 1:00 S +Rule Libya 1954 only - Jan 1 0:00 0 - +Rule Libya 1955 only - Sep 30 0:00 1:00 S +Rule Libya 1956 only - Jan 1 0:00 0 - +Rule Libya 1982 1984 - Apr 1 0:00 1:00 S +Rule Libya 1982 1985 - Oct 1 0:00 0 - +Rule Libya 1985 only - Apr 6 0:00 1:00 S +Rule Libya 1986 only - Apr 4 0:00 1:00 S +Rule Libya 1986 only - Oct 3 0:00 0 - +Rule Libya 1987 1989 - Apr 1 0:00 1:00 S +Rule Libya 1987 1989 - Oct 1 0:00 0 - +Rule Libya 1997 only - Apr 4 0:00 1:00 S +Rule Libya 1997 only - Oct 4 0:00 0 - +Rule Libya 2013 max - Mar lastFri 1:00 1:00 S +Rule Libya 2013 max - Oct lastFri 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Tripoli 0:52:44 - LMT 1920 + 1:00 Libya CE%sT 1959 + 2:00 - EET 1982 + 1:00 Libya CE%sT 1990 May 4 +# The 1996 and 1997 entries are from Shanks & Pottenger; +# the IATA SSIM data contain some obvious errors. + 2:00 - EET 1996 Sep 30 + 1:00 Libya CE%sT 1997 Oct 4 + 2:00 - EET 2012 Nov 10 2:00 + 1:00 Libya CE%sT + +# Madagascar +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul + 3:00 - EAT 1954 Feb 27 23:00s + 3:00 1:00 EAST 1954 May 29 23:00s + 3:00 - EAT + +# Malawi +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar + 2:00 - CAT + +# Mali +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Bamako -0:32:00 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + -1:00 - WAT 1960 Jun 20 + 0:00 - GMT + +# Mauritania +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Nouakchott -1:03:48 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + -1:00 - WAT 1960 Nov 28 + 0:00 - GMT + +# Mauritius + +# From Steffen Thorsen (2008-06-25): +# Mauritius plans to observe DST from 2008-11-01 to 2009-03-31 on a trial +# basis.... +# It seems that Mauritius observed daylight saving time from 1982-10-10 to +# 1983-03-20 as well, but that was not successful.... +# http://www.timeanddate.com/news/time/mauritius-daylight-saving-time.html + +# From Alex Krivenyshev (2008-06-25): +# http://economicdevelopment.gov.mu/portal/site/Mainhomepage/menuitem.a42b24128104d9845dabddd154508a0c/?content_id=0a7cee8b5d69a110VgnVCM1000000a04a8c0RCRD + +# From Arthur David Olson (2008-06-30): +# The www.timeanddate.com article cited by Steffen Thorsen notes that "A +# final decision has yet to be made on the times that daylight saving +# would begin and end on these dates." As a place holder, use midnight. + +# From Paul Eggert (2008-06-30): +# Follow Thorsen on DST in 1982/1983, instead of Shanks & Pottenger. + +# From Steffen Thorsen (2008-07-10): +# According to +# <a href="http://www.lexpress.mu/display_article.php?news_id=111216"> +# http://www.lexpress.mu/display_article.php?news_id=111216 +# </a> +# (in French), Mauritius will start and end their DST a few days earlier +# than previously announced (2008-11-01 to 2009-03-31). The new start +# date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time +# given, but it is probably at either 2 or 3 wall clock time). +# +# A little strange though, since the article says that they moved the date +# to align itself with Europe and USA which also change time on that date, +# but that means they have not paid attention to what happened in +# USA/Canada last year (DST ends first Sunday in November). I also wonder +# why that they end on a Friday, instead of aligning with Europe which +# changes two days later. + +# From Alex Krivenyshev (2008-07-11): +# Seems that English language article "The revival of daylight saving +# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally +# published on Monday, June 30, 2008... +# +# I guess that article in French "Le gouvernement avance l'introduction +# de l'heure d'ete" stating that DST in Mauritius starting on October 26 +# and ending on March 27, 2009 is the most recent one. +# ... +# <a href="http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html"> +# http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html +# </a> + +# From Riad M. Hossen Ally (2008-08-03): +# The Government of Mauritius weblink +# <a href="http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD"> +# http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD +# </a> +# Cabinet Decision of July 18th, 2008 states as follows: +# +# 4. ...Cabinet has agreed to the introduction into the National Assembly +# of the Time Bill which provides for the introduction of summer time in +# Mauritius. The summer time period which will be of one hour ahead of +# the standard time, will be aligned with that in Europe and the United +# States of America. It will start at two o'clock in the morning on the +# last Sunday of October and will end at two o'clock in the morning on +# the last Sunday of March the following year. The summer time for the +# year 2008 - 2009 will, therefore, be effective as from 26 October 2008 +# and end on 29 March 2009. + +# From Ed Maste (2008-10-07): +# THE TIME BILL (No. XXVII of 2008) Explanatory Memorandum states the +# beginning / ending of summer time is 2 o'clock standard time in the +# morning of the last Sunday of October / last Sunday of March. +# <a href="http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf"> +# http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf +# </a> + +# From Steffen Thorsen (2009-06-05): +# According to several sources, Mauritius will not continue to observe +# DST the coming summer... +# +# Some sources, in French: +# <a href="http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB"> +# http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB +# </a> +# <a href="http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-"> +# http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints- +# </a> +# +# Our wrap-up: +# <a href="http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html"> +# http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html +# </a> + +# From Arthur David Olson (2009-07-11): +# The "mauritius-dst-will-not-repeat" wrapup includes this: +# "The trial ended on March 29, 2009, when the clocks moved back by one hour +# at 2am (or 02:00) local time..." + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Mauritius 1982 only - Oct 10 0:00 1:00 S +Rule Mauritius 1983 only - Mar 21 0:00 0 - +Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 S +Rule Mauritius 2009 only - Mar lastSun 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis + 4:00 Mauritius MU%sT # Mauritius Time +# Agalega Is, Rodriguez +# no information; probably like Indian/Mauritius + +# Mayotte +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou + 3:00 - EAT + +# Morocco +# See the `europe' file for Spanish Morocco (Africa/Ceuta). + +# From Alex Krivenyshev (2008-05-09): +# Here is an article that Morocco plan to introduce Daylight Saving Time between +# 1 June, 2008 and 27 September, 2008. +# +# "... Morocco is to save energy by adjusting its clock during summer so it will +# be one hour ahead of GMT between 1 June and 27 September, according to +# Communication Minister and Gov ernment Spokesman, Khalid Naciri...." +# +# <a href="http://www.worldtimezone.net/dst_news/dst_news_morocco01.html"> +# http://www.worldtimezone.net/dst_news/dst_news_morocco01.html +# </a> +# OR +# <a href="http://en.afrik.com/news11892.html"> +# http://en.afrik.com/news11892.html +# </a> + +# From Alex Krivenyshev (2008-05-09): +# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe Presse: +# <a href="http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view"> +# http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view +# </a> +# +# Morocco shifts to daylight time on June 1st through September 27, Govt. +# spokesman. + +# From Patrice Scattolin (2008-05-09): +# According to this article: +# <a href="http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html"> +# http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html +# </a> +# (and republished here: +# <a href="http://www.actu.ma/heure-dete-comment_i127896_0.html"> +# http://www.actu.ma/heure-dete-comment_i127896_0.html +# </a> +# ) +# the changes occurs at midnight: +# +# saturday night may 31st at midnight (which in french is to be +# intrepreted as the night between saturday and sunday) +# sunday night the 28th at midnight +# +# Seeing that the 28th is monday, I am guessing that she intends to say +# the midnight of the 28th which is the midnight between sunday and +# monday, which jives with other sources that say that it's inclusive +# june1st to sept 27th. +# +# The decision was taken by decree *2-08-224 *but I can't find the decree +# published on the web. +# +# It's also confirmed here: +# <a href="http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm"> +# http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm +# </a> +# on a government portal as being between june 1st and sept 27th (not yet +# posted in english). +# +# The following google query will generate many relevant hits: +# <a href="http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search"> +# http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search +# </a> + +# From Alex Krivenyshev (2008-05-09): +# Is Western Sahara (part which administrated by Morocco) going to follow +# Morocco DST changes? Any information? What about other part of +# Western Sahara - under administration of POLISARIO Front (also named +# SADR Saharawi Arab Democratic Republic)? + +# From Arthur David Olson (2008-05-09): +# XXX--guess that it is only Morocco for now; guess only 2008 for now. + +# From Steffen Thorsen (2008-08-27): +# Morocco will change the clocks back on the midnight between August 31 +# and September 1. They originally planned to observe DST to near the end +# of September: +# +# One article about it (in French): +# <a href="http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default"> +# http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default +# </a> +# +# We have some further details posted here: +# <a href="http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html"> +# http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html +# </a> + +# From Steffen Thorsen (2009-03-17): +# Morocco will observe DST from 2009-06-01 00:00 to 2009-08-21 00:00 according +# to many sources, such as +# <a href="http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html"> +# http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html +# </a> +# <a href="http://www.medi1sat.ma/fr/depeche.aspx?idp=2312"> +# http://www.medi1sat.ma/fr/depeche.aspx?idp=2312 +# </a> +# (French) +# +# Our summary: +# <a href="http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html"> +# http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html +# </a> + +# From Alexander Krivenyshev (2009-03-17): +# Here is a link to official document from Royaume du Maroc Premier Ministre, +# Ministere de la Modernisation des Secteurs Publics +# +# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967) +# concerning the amendment of the legal time, the Ministry of Modernization of +# Public Sectors announced that the official time in the Kingdom will be +# advanced 60 minutes from Sunday 31 May 2009 at midnight. +# +# <a href="http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf"> +# http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf +# </a> +# +# <a href="http://www.worldtimezone.com/dst_news/dst_news_morocco03.html"> +# http://www.worldtimezone.com/dst_news/dst_news_morocco03.html +# </a> + +# From Steffen Thorsen (2010-04-13): +# Several news media in Morocco report that the Ministry of Modernization +# of Public Sectors has announced that Morocco will have DST from +# 2010-05-02 to 2010-08-08. +# +# Example: +# <a href="http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html"> +# http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html +# </a> +# (French) +# Our page: +# <a href="http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html"> +# http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html +# </a> + +# From Dan Abitol (2011-03-30): +# ...Rules for Africa/Casablanca are the following (24h format) +# The 3rd april 2011 at 00:00:00, [it] will be 3rd april 1:00:00 +# The 31th july 2011 at 00:59:59, [it] will be 31th July 00:00:00 +# ...Official links of change in morocco +# The change was broadcast on the FM Radio +# I ve called ANRT (telecom regulations in Morocco) at +# +212.537.71.84.00 +# <a href="http://www.anrt.net.ma/fr/"> +# http://www.anrt.net.ma/fr/ +# </a> +# They said that +# <a href="http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view"> +# http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view +# </a> +# is the official publication to look at. +# They said that the decision was already taken. +# +# More articles in the press +# <a href="http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev"> +# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev +# </a> +# e.html +# <a href="http://www.lematin.ma/Actualite/Express/Article.asp?id=148923"> +# http://www.lematin.ma/Actualite/Express/Article.asp?id=148923 +# </a> +# <a href="http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim"> +# http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim +# anche-prochain-5538.html +# </a> + +# From Petr Machata (2011-03-30): +# They have it written in English here: +# <a href="http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view"> +# http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view +# </a> +# +# It says there that "Morocco will resume its standard time on July 31, +# 2011 at midnight." Now they don't say whether they mean midnight of +# wall clock time (i.e. 11pm UTC), but that's what I would assume. It has +# also been like that in the past. + +# From Alexander Krivenyshev (2012-03-09): +# According to Infomédiaire web site from Morocco (infomediaire.ma), +# on March 9, 2012, (in French) Heure légale: +# Le Maroc adopte officiellement l'heure d'été +# <a href="http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9"> +# http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9 +# </a> +# Governing Council adopted draft decree, that Morocco DST starts on +# the last Sunday of March (March 25, 2012) and ends on +# last Sunday of September (September 30, 2012) +# except the month of Ramadan. +# or (brief) +# <a href="http://www.worldtimezone.com/dst_news/dst_news_morocco06.html"> +# http://www.worldtimezone.com/dst_news/dst_news_morocco06.html +# </a> + +# From Arthur David Olson (2012-03-10): +# The infomediaire.ma source indicates that the system is to be in +# effect every year. It gives 03H00 as the "fall back" time of day; +# it lacks a "spring forward" time of day; assume 2:00 XXX. +# Wait on specifying the Ramadan exception for details about +# start date, start time of day, end date, and end time of day XXX. + +# From Christophe Tropamer (2012-03-16): +# Seen Morocco change again: +# <a href="http://www.le2uminutes.com/actualite.php"> +# http://www.le2uminutes.com/actualite.php +# </a> +# "...à partir du dernier dimance d'avril et non fins mars, +# comme annoncé précédemment." + +# From Milamber Space Network (2012-07-17): +# The official return to GMT is announced by the Moroccan government: +# <a href="http://www.mmsp.gov.ma/fr/actualites.aspx?id=288"> +# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French] +# </a> +# +# Google translation, lightly edited: +# Back to the standard time of the Kingdom (GMT) +# Pursuant to Decree No. 2-12-126 issued on 26 Jumada (I) 1433 (April 18, +# 2012) and in accordance with the order of Mr. President of the +# Government No. 3-47-12 issued on 24 Sha'ban (11 July 2012), the Ministry +# of Public Service and Administration Modernization announces the return +# of the legal time of the Kingdom (GMT) from Friday, July 20, 2012 until +# Monday, August 20, 2012. So the time will be delayed by 60 minutes from +# 3:00 am Friday, July 20, 2012 and will again be advanced by 60 minutes +# August 20, 2012 from 2:00 am. + +# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S + +Rule Morocco 1939 only - Sep 12 0:00 1:00 S +Rule Morocco 1939 only - Nov 19 0:00 0 - +Rule Morocco 1940 only - Feb 25 0:00 1:00 S +Rule Morocco 1945 only - Nov 18 0:00 0 - +Rule Morocco 1950 only - Jun 11 0:00 1:00 S +Rule Morocco 1950 only - Oct 29 0:00 0 - +Rule Morocco 1967 only - Jun 3 12:00 1:00 S +Rule Morocco 1967 only - Oct 1 0:00 0 - +Rule Morocco 1974 only - Jun 24 0:00 1:00 S +Rule Morocco 1974 only - Sep 1 0:00 0 - +Rule Morocco 1976 1977 - May 1 0:00 1:00 S +Rule Morocco 1976 only - Aug 1 0:00 0 - +Rule Morocco 1977 only - Sep 28 0:00 0 - +Rule Morocco 1978 only - Jun 1 0:00 1:00 S +Rule Morocco 1978 only - Aug 4 0:00 0 - +Rule Morocco 2008 only - Jun 1 0:00 1:00 S +Rule Morocco 2008 only - Sep 1 0:00 0 - +Rule Morocco 2009 only - Jun 1 0:00 1:00 S +Rule Morocco 2009 only - Aug 21 0:00 0 - +Rule Morocco 2010 only - May 2 0:00 1:00 S +Rule Morocco 2010 only - Aug 8 0:00 0 - +Rule Morocco 2011 only - Apr 3 0:00 1:00 S +Rule Morocco 2011 only - Jul 31 0 0 - +Rule Morocco 2012 max - Apr lastSun 2:00 1:00 S +Rule Morocco 2012 max - Sep lastSun 3:00 0 - +Rule Morocco 2012 only - Jul 20 3:00 0 - +Rule Morocco 2012 only - Aug 20 2:00 1:00 S + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26 + 0:00 Morocco WE%sT 1984 Mar 16 + 1:00 - CET 1986 + 0:00 Morocco WE%sT +# Western Sahara +Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan + -1:00 - WAT 1976 Apr 14 + 0:00 - WET + +# Mozambique +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Maputo 2:10:20 - LMT 1903 Mar + 2:00 - CAT + +# Namibia +# The 1994-04-03 transition is from Shanks & Pottenger. +# Shanks & Pottenger report no DST after 1998-04; go with IATA. + +# From Petronella Sibeene (2007-03-30) in +# <http://allafrica.com/stories/200703300178.html>: +# While the entire country changes its time, Katima Mulilo and other +# settlements in Caprivi unofficially will not because the sun there +# rises and sets earlier compared to other regions. Chief of +# Forecasting Riaan van Zyl explained that the far eastern parts of +# the country are close to 40 minutes earlier in sunrise than the rest +# of the country. +# +# From Paul Eggert (2007-03-31): +# Apparently the Caprivi Strip informally observes Botswana time, but +# we have no details. In the meantime people there can use Africa/Gaborone. + +# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S +Rule Namibia 1995 max - Apr Sun>=1 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8 + 1:30 - SWAT 1903 Mar # SW Africa Time + 2:00 - SAST 1942 Sep 20 2:00 + 2:00 1:00 SAST 1943 Mar 21 2:00 + 2:00 - SAST 1990 Mar 21 # independence + 2:00 - CAT 1994 Apr 3 + 1:00 Namibia WA%sT + +# Niger +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Niamey 0:08:28 - LMT 1912 + -1:00 - WAT 1934 Feb 26 + 0:00 - GMT 1960 + 1:00 - WAT + +# Nigeria +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Lagos 0:13:36 - LMT 1919 Sep + 1:00 - WAT + +# Reunion +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis + 4:00 - RET # Reunion Time +# +# Scattered Islands (Iles Eparses) administered from Reunion are as follows. +# The following information about them is taken from +# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French; +# no longer available as of 1999-08-17). +# We have no info about their time zone histories. +# +# Bassas da India - uninhabited +# Europa Island - inhabited from 1905 to 1910 by two families +# Glorioso Is - inhabited until at least 1958 +# Juan de Nova - uninhabited +# Tromelin - inhabited until at least 1958 + +# Rwanda +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Kigali 2:00:16 - LMT 1935 Jun + 2:00 - CAT + +# St Helena +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown + -0:22:48 - JMT 1951 # Jamestown Mean Time + 0:00 - GMT +# The other parts of the St Helena territory are similar: +# Tristan da Cunha: on GMT, say Whitman and the CIA +# Ascension: on GMT, says usno1995 and the CIA +# Gough (scientific station since 1955; sealers wintered previously): +# on GMT, says the CIA +# Inaccessible, Nightingale: no information, but probably GMT + +# Sao Tome and Principe +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Sao_Tome 0:26:56 - LMT 1884 + -0:36:32 - LMT 1912 # Lisbon Mean Time + 0:00 - GMT + +# Senegal +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Dakar -1:09:44 - LMT 1912 + -1:00 - WAT 1941 Jun + 0:00 - GMT + +# Seychelles +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria + 4:00 - SCT # Seychelles Time +# From Paul Eggert (2001-05-30): +# Aldabra, Farquhar, and Desroches, originally dependencies of the +# Seychelles, were transferred to the British Indian Ocean Territory +# in 1965 and returned to Seychelles control in 1976. We don't know +# whether this affected their time zone, so omit this for now. +# Possibly the islands were uninhabited. + +# Sierra Leone +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger. +Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST +Rule SL 1935 1942 - Oct 1 0:00 0 WAT +Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST +Rule SL 1957 1962 - Sep 1 0:00 0 GMT +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Freetown -0:53:00 - LMT 1882 + -0:53:00 - FMT 1913 Jun # Freetown Mean Time + -1:00 SL %s 1957 + 0:00 SL %s + +# Somalia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov + 3:00 - EAT 1931 + 2:30 - BEAT 1957 + 3:00 - EAT + +# South Africa +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 - +Rule SA 1943 1944 - Mar Sun>=15 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8 + 1:30 - SAST 1903 Mar + 2:00 SA SAST +# Marion and Prince Edward Is +# scientific station since 1947 +# no information + +# Sudan +# +# From <a href="http://www.sunanews.net/sn13jane.html"> +# Sudan News Agency (2000-01-13) +# </a>, also reported by Michael De Beukelaer-Dossche via Steffen Thorsen: +# Clocks will be moved ahead for 60 minutes all over the Sudan as of noon +# Saturday.... This was announced Thursday by Caretaker State Minister for +# Manpower Abdul-Rahman Nur-Eddin. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Sudan 1970 only - May 1 0:00 1:00 S +Rule Sudan 1970 1985 - Oct 15 0:00 0 - +Rule Sudan 1971 only - Apr 30 0:00 1:00 S +Rule Sudan 1972 1985 - Apr lastSun 0:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Khartoum 2:10:08 - LMT 1931 + 2:00 Sudan CA%sT 2000 Jan 15 12:00 + 3:00 - EAT + +# South Sudan +Zone Africa/Juba 2:06:24 - LMT 1931 + 2:00 Sudan CA%sT 2000 Jan 15 12:00 + 3:00 - EAT + +# Swaziland +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar + 2:00 - SAST + +# Tanzania +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931 + 3:00 - EAT 1948 + 2:45 - BEAUT 1961 + 3:00 - EAT + +# Togo +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Lome 0:04:52 - LMT 1893 + 0:00 - GMT + +# Tunisia + +# From Gwillim Law (2005-04-30): +# My correspondent, Risto Nykanen, has alerted me to another adoption of DST, +# this time in Tunisia. According to Yahoo France News +# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP +# and dated 2005-04-26, "Tunisia has decided to advance its official time by +# one hour, starting on Sunday, May 1. Henceforth, Tunisian time will be +# UTC+2 instead of UTC+1. The change will take place at 23:00 UTC next +# Saturday." (My translation) +# +# From Oscar van Vlijmen (2005-05-02): +# LaPresse, the first national daily newspaper ... +# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html> +# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30, +# 1h standard time. +# +# From Atef Loukil (2006-03-28): +# The daylight saving time will be the same each year: +# Beginning : the last Sunday of March at 02:00 +# Ending : the last Sunday of October at 03:00 ... +# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=1188&Itemid=50 + +# From Steffen Thorsen (2009-03-16): +# According to several news sources, Tunisia will not observe DST this year. +# (Arabic) +# <a href="http://www.elbashayer.com/?page=viewn&nid=42546"> +# http://www.elbashayer.com/?page=viewn&nid=42546 +# </a> +# <a href="http://www.babnet.net/kiwidetail-15295.asp"> +# http://www.babnet.net/kiwidetail-15295.asp +# </a> +# +# We have also confirmed this with the US embassy in Tunisia. +# We have a wrap-up about this on the following page: +# <a href="http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html"> +# http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html +# </a> + +# From Alexander Krivenyshev (2009-03-17): +# Here is a link to Tunis Afrique Presse News Agency +# +# Standard time to be kept the whole year long (tap.info.tn): +# +# (in English) +# <a href="http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157"> +# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157 +# </a> +# +# (in Arabic) +# <a href="http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1"> +# http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1 +# </a> + +# From Arthur David Olson (2009--3-18): +# The Tunis Afrique Presse News Agency notice contains this: "This measure is due to the fact +# that the fasting month of ramadan coincides with the period concerned by summer time. +# Therefore, the standard time will be kept unchanged the whole year long." +# So foregoing DST seems to be an exception (albeit one that may be repeated in the future). + +# From Alexander Krivenyshev (2010-03-27): +# According to some news reports Tunis confirmed not to use DST in 2010 +# +# (translation): +# "The Tunisian government has decided to abandon DST, which was scheduled on +# Sunday... +# Tunisian authorities had suspended the DST for the first time last year also +# coincided with the month of Ramadan..." +# +# (in Arabic) +# <a href="http://www.moheet.com/show_news.aspx?nid=358861&pg=1"> +# http://www.moheet.com/show_news.aspx?nid=358861&pg=1 +# <a href="http://www.almadenahnews.com/newss/news.php?c=118&id=38036"> +# http://www.almadenahnews.com/newss/news.php?c=118&id=38036 +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_tunis02.html"> +# http://www.worldtimezone.com/dst_news/dst_news_tunis02.html + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S +Rule Tunisia 1939 only - Nov 18 23:00s 0 - +Rule Tunisia 1940 only - Feb 25 23:00s 1:00 S +Rule Tunisia 1941 only - Oct 6 0:00 0 - +Rule Tunisia 1942 only - Mar 9 0:00 1:00 S +Rule Tunisia 1942 only - Nov 2 3:00 0 - +Rule Tunisia 1943 only - Mar 29 2:00 1:00 S +Rule Tunisia 1943 only - Apr 17 2:00 0 - +Rule Tunisia 1943 only - Apr 25 2:00 1:00 S +Rule Tunisia 1943 only - Oct 4 2:00 0 - +Rule Tunisia 1944 1945 - Apr Mon>=1 2:00 1:00 S +Rule Tunisia 1944 only - Oct 8 0:00 0 - +Rule Tunisia 1945 only - Sep 16 0:00 0 - +Rule Tunisia 1977 only - Apr 30 0:00s 1:00 S +Rule Tunisia 1977 only - Sep 24 0:00s 0 - +Rule Tunisia 1978 only - May 1 0:00s 1:00 S +Rule Tunisia 1978 only - Oct 1 0:00s 0 - +Rule Tunisia 1988 only - Jun 1 0:00s 1:00 S +Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 - +Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S +Rule Tunisia 1990 only - May 1 0:00s 1:00 S +Rule Tunisia 2005 only - May 1 0:00s 1:00 S +Rule Tunisia 2005 only - Sep 30 1:00s 0 - +Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S +Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 - + +# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's +# more precise 0:09:21. +# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Tunis 0:40:44 - LMT 1881 May 12 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time + 1:00 Tunisia CE%sT + +# Uganda +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Kampala 2:09:40 - LMT 1928 Jul + 3:00 - EAT 1930 + 2:30 - BEAT 1948 + 2:45 - BEAUT 1957 + 3:00 - EAT + +# Zambia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar + 2:00 - CAT + +# Zimbabwe +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Harare 2:04:12 - LMT 1903 Mar + 2:00 - CAT diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/antarctica b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/antarctica new file mode 100644 index 0000000..f55cbde --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/antarctica @@ -0,0 +1,413 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# From Paul Eggert (1999-11-15): +# To keep things manageable, we list only locations occupied year-round; see +# <a href="http://www.comnap.aq/comnap/comnap.nsf/P/Stations/"> +# COMNAP - Stations and Bases +# </a> +# and +# <a href="http://www.spri.cam.ac.uk/bob/periant.htm"> +# Summary of the Peri-Antarctic Islands (1998-07-23) +# </a> +# for information. +# Unless otherwise specified, we have no time zone information. +# +# Except for the French entries, +# I made up all time zone abbreviations mentioned here; corrections welcome! +# FORMAT is `zzz' and GMTOFF is 0 for locations while uninhabited. + +# These rules are stolen from the `southamerica' file. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule ArgAQ 1964 1966 - Mar 1 0:00 0 - +Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S +Rule ArgAQ 1967 only - Apr 2 0:00 0 - +Rule ArgAQ 1967 1968 - Oct Sun>=1 0:00 1:00 S +Rule ArgAQ 1968 1969 - Apr Sun>=1 0:00 0 - +Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S +Rule ArgAQ 1974 only - May 1 0:00 0 - +Rule ChileAQ 1972 1986 - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1974 1987 - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 1987 only - Apr 12 3:00u 0 - +Rule ChileAQ 1988 1989 - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1988 only - Oct Sun>=1 4:00u 1:00 S +Rule ChileAQ 1989 only - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 1990 only - Mar 18 3:00u 0 - +Rule ChileAQ 1990 only - Sep 16 4:00u 1:00 S +Rule ChileAQ 1991 1996 - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1991 1997 - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 1997 only - Mar 30 3:00u 0 - +Rule ChileAQ 1998 only - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1998 only - Sep 27 4:00u 1:00 S +Rule ChileAQ 1999 only - Apr 4 3:00u 0 - +Rule ChileAQ 1999 2010 - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 2000 2007 - Mar Sun>=9 3:00u 0 - +# N.B.: the end of March 29 in Chile is March 30 in Universal time, +# which is used below in specifying the transition. +Rule ChileAQ 2008 only - Mar 30 3:00u 0 - +Rule ChileAQ 2009 only - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 2010 only - Apr Sun>=1 3:00u 0 - +Rule ChileAQ 2011 only - May Sun>=2 3:00u 0 - +Rule ChileAQ 2011 only - Aug Sun>=16 4:00u 1:00 S +Rule ChileAQ 2012 only - Apr Sun>=23 3:00u 0 - +Rule ChileAQ 2012 only - Sep Sun>=2 4:00u 1:00 S +Rule ChileAQ 2013 max - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 2013 max - Oct Sun>=9 4:00u 1:00 S + +# These rules are stolen from the `australasia' file. +Rule AusAQ 1917 only - Jan 1 0:01 1:00 - +Rule AusAQ 1917 only - Mar 25 2:00 0 - +Rule AusAQ 1942 only - Jan 1 2:00 1:00 - +Rule AusAQ 1942 only - Mar 29 2:00 0 - +Rule AusAQ 1942 only - Sep 27 2:00 1:00 - +Rule AusAQ 1943 1944 - Mar lastSun 2:00 0 - +Rule AusAQ 1943 only - Oct 3 2:00 1:00 - +Rule ATAQ 1967 only - Oct Sun>=1 2:00s 1:00 - +Rule ATAQ 1968 only - Mar lastSun 2:00s 0 - +Rule ATAQ 1968 1985 - Oct lastSun 2:00s 1:00 - +Rule ATAQ 1969 1971 - Mar Sun>=8 2:00s 0 - +Rule ATAQ 1972 only - Feb lastSun 2:00s 0 - +Rule ATAQ 1973 1981 - Mar Sun>=1 2:00s 0 - +Rule ATAQ 1982 1983 - Mar lastSun 2:00s 0 - +Rule ATAQ 1984 1986 - Mar Sun>=1 2:00s 0 - +Rule ATAQ 1986 only - Oct Sun>=15 2:00s 1:00 - +Rule ATAQ 1987 1990 - Mar Sun>=15 2:00s 0 - +Rule ATAQ 1987 only - Oct Sun>=22 2:00s 1:00 - +Rule ATAQ 1988 1990 - Oct lastSun 2:00s 1:00 - +Rule ATAQ 1991 1999 - Oct Sun>=1 2:00s 1:00 - +Rule ATAQ 1991 2005 - Mar lastSun 2:00s 0 - +Rule ATAQ 2000 only - Aug lastSun 2:00s 1:00 - +Rule ATAQ 2001 max - Oct Sun>=1 2:00s 1:00 - +Rule ATAQ 2006 only - Apr Sun>=1 2:00s 0 - +Rule ATAQ 2007 only - Mar lastSun 2:00s 0 - +Rule ATAQ 2008 max - Apr Sun>=1 2:00s 0 - + +# Argentina - year-round bases +# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05 +# Esperanza, San Martin Land, -6323-05659, since 1952-12-17 +# Jubany, Potter Peninsula, King George Island, -6414-0602320, since 1982-01 +# Marambio, Seymour I, -6414-05637, since 1969-10-29 +# Orcadas, Laurie I, -6016-04444, since 1904-02-22 +# San Martin, Debenham I, -6807-06708, since 1951-03-21 +# (except 1960-03 / 1976-03-21) + +# Australia - territories +# Heard Island, McDonald Islands (uninhabited) +# previously sealers and scientific personnel wintered +# <a href="http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html"> +# Margaret Turner reports +# </a> (1999-09-30) that they're UTC+5, with no DST; +# presumably this is when they have visitors. +# +# year-round bases +# Casey, Bailey Peninsula, -6617+11032, since 1969 +# Davis, Vestfold Hills, -6835+07759, since 1957-01-13 +# (except 1964-11 - 1969-02) +# Mawson, Holme Bay, -6736+06253, since 1954-02-13 + +# From Steffen Thorsen (2009-03-11): +# Three Australian stations in Antarctica have changed their time zone: +# Casey moved from UTC+8 to UTC+11 +# Davis moved from UTC+7 to UTC+5 +# Mawson moved from UTC+6 to UTC+5 +# The changes occurred on 2009-10-18 at 02:00 (local times). +# +# Government source: (Australian Antarctic Division) +# <a href="http://www.aad.gov.au/default.asp?casid=37079"> +# http://www.aad.gov.au/default.asp?casid=37079 +# </a> +# +# We have more background information here: +# <a href="http://www.timeanddate.com/news/time/antarctica-new-times.html"> +# http://www.timeanddate.com/news/time/antarctica-new-times.html +# </a> + +# From Steffen Thorsen (2010-03-10): +# We got these changes from the Australian Antarctic Division: +# - Macquarie Island will stay on UTC+11 for winter and therefore not +# switch back from daylight savings time when other parts of Australia do +# on 4 April. +# +# - Casey station reverted to its normal time of UTC+8 on 5 March 2010. +# The change to UTC+11 is being considered as a regular summer thing but +# has not been decided yet. +# +# - Davis station will revert to its normal time of UTC+7 at 10 March 2010 +# 20:00 UTC. +# +# - Mawson station stays on UTC+5. +# +# In addition to the Rule changes for Casey/Davis, it means that Macquarie +# will no longer be like Hobart and will have to have its own Zone created. +# +# Background: +# <a href="http://www.timeanddate.com/news/time/antartica-time-changes-2010.html"> +# http://www.timeanddate.com/news/time/antartica-time-changes-2010.html +# </a> + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/Casey 0 - zzz 1969 + 8:00 - WST 2009 Oct 18 2:00 + # Western (Aus) Standard Time + 11:00 - CAST 2010 Mar 5 2:00 + # Casey Time + 8:00 - WST 2011 Oct 28 2:00 + 11:00 - CAST 2012 Feb 21 17:00u + 8:00 - WST +Zone Antarctica/Davis 0 - zzz 1957 Jan 13 + 7:00 - DAVT 1964 Nov # Davis Time + 0 - zzz 1969 Feb + 7:00 - DAVT 2009 Oct 18 2:00 + 5:00 - DAVT 2010 Mar 10 20:00u + 7:00 - DAVT 2011 Oct 28 2:00 + 5:00 - DAVT 2012 Feb 21 20:00u + 7:00 - DAVT +Zone Antarctica/Mawson 0 - zzz 1954 Feb 13 + 6:00 - MAWT 2009 Oct 18 2:00 + # Mawson Time + 5:00 - MAWT +Zone Antarctica/Macquarie 0 - zzz 1911 + 10:00 - EST 1916 Oct 1 2:00 + 10:00 1:00 EST 1917 Feb + 10:00 AusAQ EST 1967 + 10:00 ATAQ EST 2010 Apr 4 3:00 + 11:00 - MIST # Macquarie Island Time +# References: +# <a href="http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html"> +# Casey Weather (1998-02-26) +# </a> +# <a href="http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html"> +# Davis Station, Antarctica (1998-02-26) +# </a> +# <a href="http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html"> +# Mawson Station, Antarctica (1998-02-25) +# </a> + +# Brazil - year-round base +# Comandante Ferraz, King George Island, -6205+05824, since 1983/4 + +# Chile - year-round bases and towns +# Escudero, South Shetland Is, -621157-0585735, since 1994 +# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07 +# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02 +# Capitan Arturo Prat, -6230-05941 +# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09 +# These locations have always used Santiago time; use TZ='America/Santiago'. + +# China - year-round bases +# Great Wall, King George Island, -6213-05858, since 1985-02-20 +# Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26 + +# France - year-round bases +# +# From Antoine Leca (1997-01-20): +# Time data are from Nicole Pailleau at the IFRTP +# (French Institute for Polar Research and Technology). +# She confirms that French Southern Territories and Terre Adelie bases +# don't observe daylight saving time, even if Terre Adelie supplies came +# from Tasmania. +# +# French Southern Territories with year-round inhabitants +# +# Martin-de-Vivies Base, Amsterdam Island, -374105+0773155, since 1950 +# Alfred-Faure Base, Crozet Islands, -462551+0515152, since 1964 +# Port-aux-Francais, Kerguelen Islands, -492110+0701303, since 1951; +# whaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956 +# +# St Paul Island - near Amsterdam, uninhabited +# fishing stations operated variously 1819/1931 +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Francais + 5:00 - TFT # ISO code TF Time +# +# year-round base in the main continent +# Dumont-d'Urville, Ile des Petrels, -6640+14001, since 1956-11 +# +# Another base at Port-Martin, 50km east, began operation in 1947. +# It was destroyed by fire on 1952-01-14. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/DumontDUrville 0 - zzz 1947 + 10:00 - PMT 1952 Jan 14 # Port-Martin Time + 0 - zzz 1956 Nov + 10:00 - DDUT # Dumont-d'Urville Time +# Reference: +# <a href="http://en.wikipedia.org/wiki/Dumont_d'Urville_Station"> +# Dumont d'Urville Station (2005-12-05) +# </a> + +# Germany - year-round base +# Georg von Neumayer, -7039-00815 + +# India - year-round base +# Dakshin Gangotri, -7005+01200 + +# Japan - year-round bases +# Dome Fuji, -7719+03942 +# Syowa, -690022+0393524 +# +# From Hideyuki Suzuki (1999-02-06): +# In all Japanese stations, +0300 is used as the standard time. +# +# Syowa station, which is the first antarctic station of Japan, +# was established on 1957-01-29. Since Syowa station is still the main +# station of Japan, it's appropriate for the principal location. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/Syowa 0 - zzz 1957 Jan 29 + 3:00 - SYOT # Syowa Time +# See: +# <a href="http://www.nipr.ac.jp/english/ara01.html"> +# NIPR Antarctic Research Activities (1999-08-17) +# </a> + +# S Korea - year-round base +# King Sejong, King George Island, -6213-05847, since 1988 + +# New Zealand - claims +# Balleny Islands (never inhabited) +# Scott Island (never inhabited) +# +# year-round base +# Scott, Ross Island, since 1957-01, is like Antarctica/McMurdo. +# +# These rules for New Zealand are stolen from the `australasia' file. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NZAQ 1974 only - Nov 3 2:00s 1:00 D +Rule NZAQ 1975 1988 - Oct lastSun 2:00s 1:00 D +Rule NZAQ 1989 only - Oct 8 2:00s 1:00 D +Rule NZAQ 1990 2006 - Oct Sun>=1 2:00s 1:00 D +Rule NZAQ 1975 only - Feb 23 2:00s 0 S +Rule NZAQ 1976 1989 - Mar Sun>=1 2:00s 0 S +Rule NZAQ 1990 2007 - Mar Sun>=15 2:00s 0 S +Rule NZAQ 2007 max - Sep lastSun 2:00s 1:00 D +Rule NZAQ 2008 max - Apr Sun>=1 2:00s 0 S + +# Norway - territories +# Bouvet (never inhabited) +# +# claims +# Peter I Island (never inhabited) + +# Poland - year-round base +# Arctowski, King George Island, -620945-0582745, since 1977 + +# Russia - year-round bases +# Bellingshausen, King George Island, -621159-0585337, since 1968-02-22 +# Mirny, Davis coast, -6633+09301, since 1956-02 +# Molodezhnaya, Alasheyev Bay, -6740+04551, +# year-round from 1962-02 to 1999-07-01 +# Novolazarevskaya, Queen Maud Land, -7046+01150, +# year-round from 1960/61 to 1992 + +# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11 +# <a href="http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP"> +# From Craig Mundell (1994-12-15)</a>: +# Vostok, which is one of the Russian stations, is set on the same +# time as Moscow, Russia. +# +# From Lee Hotz (2001-03-08): +# I queried the folks at Columbia who spent the summer at Vostok and this is +# what they had to say about time there: +# ``in the US Camp (East Camp) we have been on New Zealand (McMurdo) +# time, which is 12 hours ahead of GMT. The Russian Station Vostok was +# 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead +# of GMT). This is a time zone I think two hours east of Moscow. The +# natural time zone is in between the two: 8 hours ahead of GMT.'' +# +# From Paul Eggert (2001-05-04): +# This seems to be hopelessly confusing, so I asked Lee Hotz about it +# in person. He said that some Antartic locations set their local +# time so that noon is the warmest part of the day, and that this +# changes during the year and does not necessarily correspond to mean +# solar noon. So the Vostok time might have been whatever the clocks +# happened to be during their visit. So we still don't really know what time +# it is at Vostok. But we'll guess UTC+6. +# +Zone Antarctica/Vostok 0 - zzz 1957 Dec 16 + 6:00 - VOST # Vostok time + +# S Africa - year-round bases +# Marion Island, -4653+03752 +# Sanae, -7141-00250 + +# UK +# +# British Antarctic Territories (BAT) claims +# South Orkney Islands +# scientific station from 1903 +# whaling station at Signy I 1920/1926 +# South Shetland Islands +# +# year-round bases +# Bird Island, South Georgia, -5400-03803, since 1983 +# Deception Island, -6259-06034, whaling station 1912/1931, +# scientific station 1943/1967, +# previously sealers and a scientific expedition wintered by accident, +# and a garrison was deployed briefly +# Halley, Coates Land, -7535-02604, since 1956-01-06 +# Halley is on a moving ice shelf and is periodically relocated +# so that it is never more than 10km from its nominal location. +# Rothera, Adelaide Island, -6734-6808, since 1976-12-01 +# +# From Paul Eggert (2002-10-22) +# <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/Rothera 0 - zzz 1976 Dec 1 + -3:00 - ROTT # Rothera time + +# Uruguay - year round base +# Artigas, King George Island, -621104-0585107 + +# USA - year-round bases +# +# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968) +# +# From Ethan Dicks (1996-10-06): +# It keeps the same time as Punta Arenas, Chile, because, just like us +# and the South Pole, that's the other end of their supply line.... +# I verified with someone who was there that since 1980, +# Palmer has followed Chile. Prior to that, before the Falklands War, +# Palmer used to be supplied from Argentina. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/Palmer 0 - zzz 1965 + -4:00 ArgAQ AR%sT 1969 Oct 5 + -3:00 ArgAQ AR%sT 1982 May + -4:00 ChileAQ CL%sT +# +# +# McMurdo, Ross Island, since 1955-12 +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/McMurdo 0 - zzz 1956 + 12:00 NZAQ NZ%sT +# +# Amundsen-Scott, South Pole, continuously occupied since 1956-11-20 +# +# From Paul Eggert (1996-09-03): +# Normally it wouldn't have a separate entry, since it's like the +# larger Antarctica/McMurdo since 1970, but it's too famous to omit. +# +# From Chris Carrier (1996-06-27): +# Siple, the first commander of the South Pole station, +# stated that he would have liked to have kept GMT at the station, +# but that he found it more convenient to keep GMT+12 +# as supplies for the station were coming from McMurdo Sound, +# which was on GMT+12 because New Zealand was on GMT+12 all year +# at that time (1957). (Source: Siple's book 90 degrees SOUTH.) +# +# From Susan Smith +# http://www.cybertours.com/whs/pole10.html +# (1995-11-13 16:24:56 +1300, no longer available): +# We use the same time as McMurdo does. +# And they use the same time as Christchurch, NZ does.... +# One last quirk about South Pole time. +# All the electric clocks are usually wrong. +# Something about the generators running at 60.1hertz or something +# makes all of the clocks run fast. So every couple of days, +# we have to go around and set them back 5 minutes or so. +# Maybe if we let them run fast all of the time, we'd get to leave here sooner!! +# +Link Antarctica/McMurdo Antarctica/South_Pole diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/asia b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/asia new file mode 100644 index 0000000..d5562c8 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/asia @@ -0,0 +1,2717 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@iana.org for general use in the future). + +# From Paul Eggert (2006-03-22): +# +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1990, and IATA SSIM is the source for entries afterwards. +# +# Another source occasionally used is Edward W. Whitman, World Time Differences, +# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which +# I found in the UCLA library. +# +# A reliable and entertaining source about time zones is +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). +# +# I invented the abbreviations marked `*' in the following table; +# the rest are from earlier versions of this file, or from other sources. +# Corrections are welcome! +# std dst +# LMT Local Mean Time +# 2:00 EET EEST Eastern European Time +# 2:00 IST IDT Israel +# 3:00 AST ADT Arabia* +# 3:30 IRST IRDT Iran +# 4:00 GST Gulf* +# 5:30 IST India +# 7:00 ICT Indochina* +# 7:00 WIT west Indonesia +# 8:00 CIT central Indonesia +# 8:00 CST China +# 9:00 CJT Central Japanese Time (1896/1937)* +# 9:00 EIT east Indonesia +# 9:00 JST JDT Japan +# 9:00 KST KDT Korea +# 9:30 CST (Australian) Central Standard Time +# +# See the `europe' file for Russia and Turkey in Asia. + +# From Guy Harris: +# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as +# additional information from Tom Yap, Sun Microsystems Intercontinental +# Technical Support (including a page from the Official Airline Guide - +# Worldwide Edition). The names for time zones are guesses. + +############################################################################### + +# These rules are stolen from the `europe' file. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S +Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 - +Rule EUAsia 1996 max - Oct lastSun 1:00u 0 - +Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S +Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 - +Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 - +Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S +Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 - +Rule RussiaAsia 1984 1991 - Sep lastSun 2:00s 0 - +Rule RussiaAsia 1985 1991 - Mar lastSun 2:00s 1:00 S +Rule RussiaAsia 1992 only - Mar lastSat 23:00 1:00 S +Rule RussiaAsia 1992 only - Sep lastSat 23:00 0 - +Rule RussiaAsia 1993 max - Mar lastSun 2:00s 1:00 S +Rule RussiaAsia 1993 1995 - Sep lastSun 2:00s 0 - +Rule RussiaAsia 1996 max - Oct lastSun 2:00s 0 - + +# Afghanistan +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Kabul 4:36:48 - LMT 1890 + 4:00 - AFT 1945 + 4:30 - AFT + +# Armenia +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger have Yerevan switching to 3:00 (with Russian DST) +# in spring 1991, then to 4:00 with no DST in fall 1995, then +# readopting Russian DST in 1997. Go with Shanks & Pottenger, even +# when they disagree with others. Edgar Der-Danieliantz +# reported (1996-05-04) that Yerevan probably wouldn't use DST +# in 1996, though it did use DST in 1995. IATA SSIM (1991/1998) reports that +# Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991, +# but started switching at 3:00s in 1998. + +# From Arthur David Olson (2011-06-15): +# While Russia abandoned DST in 2011, Armenia may choose to +# follow Russia's "old" rules. + +# From Alexander Krivenyshev (2012-02-10): +# According to News Armenia, on Feb 9, 2012, +# http://newsarmenia.ru/society/20120209/42609695.html +# +# The Armenia National Assembly adopted final reading of Amendments to the +# Law "On procedure of calculation time on the territory of the Republic of +# Armenia" according to which Armenia [is] abolishing Daylight Saving Time. +# or +# (brief) +# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2 + 3:00 - YERT 1957 Mar # Yerevan Time + 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s + 3:00 1:00 YERST 1991 Sep 23 # independence + 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s + 4:00 - AMT 1997 + 4:00 RussiaAsia AM%sT 2012 Mar 25 2:00s + 4:00 - AMT + +# Azerbaijan +# From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23): +# According to the resolution of Cabinet of Ministers, 1997 +# Resolution available at: http://aif.az/docs/daylight_res.pdf +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Azer 1997 max - Mar lastSun 4:00 1:00 S +Rule Azer 1997 max - Oct lastSun 5:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Baku 3:19:24 - LMT 1924 May 2 + 3:00 - BAKT 1957 Mar # Baku Time + 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s + 3:00 1:00 BAKST 1991 Aug 30 # independence + 3:00 RussiaAsia AZ%sT 1992 Sep lastSat 23:00 + 4:00 - AZT 1996 # Azerbaijan time + 4:00 EUAsia AZ%sT 1997 + 4:00 Azer AZ%sT + +# Bahrain +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah + 4:00 - GST 1972 Jun + 3:00 - AST + +# Bangladesh +# From Alexander Krivenyshev (2009-05-13): +# According to newspaper Asian Tribune (May 6, 2009) Bangladesh may introduce +# Daylight Saving Time from June 16 to Sept 30 +# +# Bangladesh to introduce daylight saving time likely from June 16 +# <a href="http://www.asiantribune.com/?q=node/17288"> +# http://www.asiantribune.com/?q=node/17288 +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html"> +# http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html +# </a> +# +# "... Bangladesh government has decided to switch daylight saving time from +# June +# 16 till September 30 in a bid to ensure maximum use of daylight to cope with +# crippling power crisis. " +# +# The switch will remain in effect from June 16 to Sept 30 (2009) but if +# implemented the next year, it will come in force from April 1, 2010 + +# From Steffen Thorsen (2009-06-02): +# They have finally decided now, but changed the start date to midnight between +# the 19th and 20th, and they have not set the end date yet. +# +# Some sources: +# <a href="http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601"> +# http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601 +# </a> +# <a href="http://bdnews24.com/details.php?id=85889&cid=2"> +# http://bdnews24.com/details.php?id=85889&cid=2 +# </a> +# +# Our wrap-up: +# <a href="http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html"> +# http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html +# </a> + +# From A. N. M. Kamrus Saadat (2009-06-15): +# Finally we've got the official mail regarding DST start time where DST start +# time is mentioned as Jun 19 2009, 23:00 from BTRC (Bangladesh +# Telecommunication Regulatory Commission). +# +# No DST end date has been announced yet. + +# From Alexander Krivenyshev (2009-09-25): +# Bangladesh won't go back to Standard Time from October 1, 2009, +# instead it will continue DST measure till the cabinet makes a fresh decision. +# +# Following report by same newspaper-"The Daily Star Friday": +# "DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1" +# <a href="http://www.thedailystar.net/newDesign/news-details.php?nid=107021"> +# http://www.thedailystar.net/newDesign/news-details.php?nid=107021 +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html"> +# http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html +# </a> + +# From Steffen Thorsen (2009-10-13): +# IANS (Indo-Asian News Service) now reports: +# Bangladesh has decided that the clock advanced by an hour to make +# maximum use of daylight hours as an energy saving measure would +# "continue for an indefinite period." +# +# One of many places where it is published: +# <a href="http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html"> +# http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html +# </a> + +# From Alexander Krivenyshev (2009-12-24): +# According to Bangladesh newspaper "The Daily Star," +# Bangladesh will change its clock back to Standard Time on Dec 31, 2009. +# +# Clock goes back 1-hr on Dec 31 night. +# <a href="http://www.thedailystar.net/newDesign/news-details.php?nid=119228"> +# http://www.thedailystar.net/newDesign/news-details.php?nid=119228 +# </a> +# and +# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html"> +# http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html +# </a> +# +# "...The government yesterday decided to put the clock back by one hour +# on December 31 midnight and the new time will continue until March 31, +# 2010 midnight. The decision came at a cabinet meeting at the Prime +# Minister's Office last night..." + +# From Alexander Krivenyshev (2010-03-22): +# According to Bangladesh newspaper "The Daily Star," +# Cabinet cancels Daylight Saving Time +# <a href="http://www.thedailystar.net/newDesign/latest_news.php?nid=22817"> +# http://www.thedailystar.net/newDesign/latest_news.php?nid=22817 +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html"> +# http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html +# </a> + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Dhaka 2009 only - Jun 19 23:00 1:00 S +Rule Dhaka 2009 only - Dec 31 23:59 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Dhaka 6:01:40 - LMT 1890 + 5:53:20 - HMT 1941 Oct # Howrah Mean Time? + 6:30 - BURT 1942 May 15 # Burma Time + 5:30 - IST 1942 Sep + 6:30 - BURT 1951 Sep 30 + 6:00 - DACT 1971 Mar 26 # Dacca Time + 6:00 - BDT 2009 + 6:00 Dhaka BD%sT + +# Bhutan +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu + 5:30 - IST 1987 Oct + 6:00 - BTT # Bhutan Time + +# British Indian Ocean Territory +# Whitman and the 1995 CIA time zone map say 5:00, but the +# 1997 and later maps say 6:00. Assume the switch occurred in 1996. +# We have no information as to when standard time was introduced; +# assume it occurred in 1907, the same year as Mauritius (which +# then contained the Chagos Archipelago). +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Chagos 4:49:40 - LMT 1907 + 5:00 - IOT 1996 # BIOT Time + 6:00 - IOT + +# Brunei +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan + 7:30 - BNT 1933 + 8:00 - BNT + +# Burma / Myanmar +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon + 6:24:36 - RMT 1920 # Rangoon Mean Time? + 6:30 - BURT 1942 May # Burma Time + 9:00 - JST 1945 May 3 + 6:30 - MMT # Myanmar Time + +# Cambodia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9 + 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? + 7:00 - ICT 1912 May + 8:00 - ICT 1931 May + 7:00 - ICT + +# China + +# From Guy Harris: +# People's Republic of China. Yes, they really have only one time zone. + +# From Bob Devine (1988-01-28): +# No they don't. See TIME mag, 1986-02-17 p.52. Even though +# China is across 4 physical time zones, before Feb 1, 1986 only the +# Peking (Bejing) time zone was recognized. Since that date, China +# has two of 'em -- Peking's and Urumqi (named after the capital of +# the Xinjiang Uyghur Autonomous Region). I don't know about DST for it. +# +# . . .I just deleted the DST table and this editor makes it too +# painful to suck in another copy.. So, here is what I have for +# DST start/end dates for Peking's time zone (info from AP): +# +# 1986 May 4 - Sept 14 +# 1987 mid-April - ?? + +# From U. S. Naval Observatory (1989-01-19): +# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN +# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10 + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that China (except for Hong Kong and Macau) +# has had a single time zone since 1980 May 1, observing summer DST +# from 1986 through 1991; this contradicts Devine's +# note about Time magazine, though apparently _something_ happened in 1986. +# Go with Shanks & Pottenger for now. I made up names for the other +# pre-1980 time zones. + +# From Shanks & Pottenger: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Shang 1940 only - Jun 3 0:00 1:00 D +Rule Shang 1940 1941 - Oct 1 0:00 0 S +Rule Shang 1941 only - Mar 16 0:00 1:00 D +Rule PRC 1986 only - May 4 0:00 1:00 D +Rule PRC 1986 1991 - Sep Sun>=11 0:00 0 S +Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D + +# From Anthony Fok (2001-12-20): +# BTW, I did some research on-line and found some info regarding these five +# historic timezones from some Taiwan websites. And yes, there are official +# Chinese names for these locales (before 1949). +# +# From Jesper Norgaard Welen (2006-07-14): +# I have investigated the timezones around 1970 on the +# http://www.astro.com/atlas site [with provinces and county +# boundaries summarized below].... A few other exceptions were two +# counties on the Sichuan side of the Xizang-Sichuan border, +# counties Dege and Baiyu which lies on the Sichuan side and are +# therefore supposed to be GMT+7, Xizang region being GMT+6, but Dege +# county is GMT+8 according to astro.com while Baiyu county is GMT+6 +# (could be true), for the moment I am assuming that those two +# counties are mistakes in the astro.com data. + +# From Paul Eggert (2008-02-11): +# I just now checked Google News for western news sources that talk +# about China's single time zone, and couldn't find anything before 1986 +# talking about China being in one time zone. (That article was: Jim +# Mann, "A clumsy embrace for another western custom: China on daylight +# time--sort of", Los Angeles Times, 1986-05-05. By the way, this +# article confirms the tz database's data claiming that China began +# observing daylight saving time in 1986. +# +# From Thomas S. Mullaney (2008-02-11): +# I think you're combining two subjects that need to treated +# separately: daylight savings (which, you're correct, wasn't +# implemented until the 1980s) and the unified time zone centered near +# Beijing (which was implemented in 1949). Briefly, there was also a +# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was +# ceased, and the second eventually recognized (again, in the 1980s). +# +# From Paul Eggert (2008-06-30): +# There seems to be a good chance China switched to a single time zone in 1949 +# rather than in 1980 as Shanks & Pottenger have it, but we don't have a +# reliable documentary source saying so yet, so for now we still go with +# Shanks & Pottenger. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) +# Heilongjiang (except Mohe county), Jilin +Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin + 8:30 - CHAT 1932 Mar # Changbai Time + 8:00 - CST 1940 + 9:00 - CHAT 1966 May + 8:30 - CHAT 1980 May + 8:00 PRC C%sT +# Zhongyuan Time ("Central plain Time") +# most of China +Zone Asia/Shanghai 8:05:52 - LMT 1928 + 8:00 Shang C%sT 1949 + 8:00 PRC C%sT +# Long-shu Time (probably due to Long and Shu being two names of that area) +# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan; +# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong +# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing, +# Yangchun, Yangjiang, Yu'nan, and Yunfu. +Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking + 7:00 - LONT 1980 May # Long-shu Time + 8:00 PRC C%sT +# Xin-zang Time ("Xinjiang-Tibet Time") +# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai; +# the Guangdong counties Xuwen, Haikang, Suixi, Lianjiang, +# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi; +# east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi; +# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe, +# Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin, +# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami, +# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan. +Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi + 6:00 - URUT 1980 May # Urumqi Time + 8:00 PRC C%sT +# Kunlun Time +# West Tibet, including Pulan, Aheqi, Shufu, Shule; +# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke, +# Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding, +# and Yarkand. + +# From Luther Ma (2009-10-17): +# Almost all (>99.9%) ethnic Chinese (properly ethnic Han) living in +# Xinjiang use Chinese Standard Time. Some are aware of Xinjiang time, +# but have no need of it. All planes, trains, and schools function on +# what is called "Beijing time." When Han make an appointment in Chinese +# they implicitly use Beijing time. +# +# On the other hand, ethnic Uyghurs, who make up about half the +# population of Xinjiang, typically use "Xinjiang time" which is two +# hours behind Beijing time, or UTC +0600. The government of the Xinjiang +# Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as +# local governments such as the Urumqi city government use both times in +# publications, referring to what is popularly called Xinjiang time as +# "Urumqi time." When Uyghurs make an appointment in the Uyghur language +# they almost invariably use Xinjiang time. +# +# (Their ethnic Han compatriots would typically have no clue of its +# widespread use, however, because so extremely few of them are fluent in +# Uyghur, comparable to the number of Anglo-Americans fluent in Navajo.) +# +# (...As with the rest of China there was a brief interval ending in 1990 +# or 1991 when summer time was in use. The confusion was severe, with +# the province not having dual times but four times in use at the same +# time. Some areas remained on standard Xinjiang time or Beijing time and +# others moving their clocks ahead.) +# +# ...an example of an official website using of Urumqi time. +# +# The first few lines of the Google translation of +# <a href="http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39"> +# http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39 +# </a> +# (retrieved 2009-10-13) +# > Urumqi fire seven people are missing the alleged losses of at least +# > 500 million yuan +# > +# > (Reporter Dong Liu) the day before 20:20 or so (Urumqi Time 18:20), +# > Urumqi City Department of International Plaza Luther Qiantang River +# > burst fire. As of yesterday, 18:30, Urumqi City Fire officers and men +# > have worked continuously for 22 hours... + +# From Luther Ma (2009-11-19): +# With the risk of being redundant to previous answers these are the most common +# English "transliterations" (w/o using non-English symbols): +# +# 1. Wulumuqi... +# 2. Kashi... +# 3. Urumqi... +# 4. Kashgar... +# ... +# 5. It seems that Uyghurs in Urumqi has been using Xinjiang since at least the +# 1960's. I know of one Han, now over 50, who grew up in the surrounding +# countryside and used Xinjiang time as a child. +# +# 6. Likewise for Kashgar and the rest of south Xinjiang I don't know of any +# start date for Xinjiang time. +# +# Without having access to local historical records, nor the ability to legally +# publish them, I would go with October 1, 1949, when Xinjiang became the Uyghur +# Autonomous Region under the PRC. (Before that Uyghurs, of course, would also +# not be using Beijing time, but some local time.) + +Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar + 5:30 - KAST 1940 # Kashgar Time + 5:00 - KAST 1980 May + 8:00 PRC C%sT + + +# From Lee Yiu Chung (2009-10-24): +# I found there are some mistakes for the...DST rule for Hong +# Kong. [According] to the DST record from Hong Kong Observatory (actually, +# it is not [an] observatory, but the official meteorological agency of HK, +# and also serves as the official timing agency), there are some missing +# and incorrect rules. Although the exact switch over time is missing, I +# think 3:30 is correct. The official DST record for Hong Kong can be +# obtained from +# <a href="http://www.hko.gov.hk/gts/time/Summertime.htm"> +# http://www.hko.gov.hk/gts/time/Summertime.htm +# </a>. + +# From Arthur David Olson (2009-10-28): +# Here are the dates given at +# <a href="http://www.hko.gov.hk/gts/time/Summertime.htm"> +# http://www.hko.gov.hk/gts/time/Summertime.htm +# </a> +# as of 2009-10-28: +# Year Period +# 1941 1 Apr to 30 Sep +# 1942 Whole year +# 1943 Whole year +# 1944 Whole year +# 1945 Whole year +# 1946 20 Apr to 1 Dec +# 1947 13 Apr to 30 Dec +# 1948 2 May to 31 Oct +# 1949 3 Apr to 30 Oct +# 1950 2 Apr to 29 Oct +# 1951 1 Apr to 28 Oct +# 1952 6 Apr to 25 Oct +# 1953 5 Apr to 1 Nov +# 1954 21 Mar to 31 Oct +# 1955 20 Mar to 6 Nov +# 1956 18 Mar to 4 Nov +# 1957 24 Mar to 3 Nov +# 1958 23 Mar to 2 Nov +# 1959 22 Mar to 1 Nov +# 1960 20 Mar to 6 Nov +# 1961 19 Mar to 5 Nov +# 1962 18 Mar to 4 Nov +# 1963 24 Mar to 3 Nov +# 1964 22 Mar to 1 Nov +# 1965 18 Apr to 17 Oct +# 1966 17 Apr to 16 Oct +# 1967 16 Apr to 22 Oct +# 1968 21 Apr to 20 Oct +# 1969 20 Apr to 19 Oct +# 1970 19 Apr to 18 Oct +# 1971 18 Apr to 17 Oct +# 1972 16 Apr to 22 Oct +# 1973 22 Apr to 21 Oct +# 1973/74 30 Dec 73 to 20 Oct 74 +# 1975 20 Apr to 19 Oct +# 1976 18 Apr to 17 Oct +# 1977 Nil +# 1978 Nil +# 1979 13 May to 21 Oct +# 1980 to Now Nil +# The page does not give start or end times of day. +# The page does not give a start date for 1942. +# The page does not givw an end date for 1945. +# The Japanese occupation of Hong Kong began on 1941-12-25. +# The Japanese surrender of Hong Kong was signed 1945-09-15. +# For lack of anything better, use start of those days as the transition times. + +# Hong Kong (Xianggang) +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule HK 1941 only - Apr 1 3:30 1:00 S +Rule HK 1941 only - Sep 30 3:30 0 - +Rule HK 1946 only - Apr 20 3:30 1:00 S +Rule HK 1946 only - Dec 1 3:30 0 - +Rule HK 1947 only - Apr 13 3:30 1:00 S +Rule HK 1947 only - Dec 30 3:30 0 - +Rule HK 1948 only - May 2 3:30 1:00 S +Rule HK 1948 1951 - Oct lastSun 3:30 0 - +Rule HK 1952 only - Oct 25 3:30 0 - +Rule HK 1949 1953 - Apr Sun>=1 3:30 1:00 S +Rule HK 1953 only - Nov 1 3:30 0 - +Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S +Rule HK 1954 only - Oct 31 3:30 0 - +Rule HK 1955 1964 - Nov Sun>=1 3:30 0 - +Rule HK 1965 1976 - Apr Sun>=16 3:30 1:00 S +Rule HK 1965 1976 - Oct Sun>=16 3:30 0 - +Rule HK 1973 only - Dec 30 3:30 1:00 S +Rule HK 1979 only - May Sun>=8 3:30 1:00 S +Rule HK 1979 only - Oct Sun>=16 3:30 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Hong_Kong 7:36:36 - LMT 1904 Oct 30 + 8:00 HK HK%sT 1941 Dec 25 + 9:00 - JST 1945 Sep 15 + 8:00 HK HK%sT + +############################################################################### + +# Taiwan + +# Shanks & Pottenger write that Taiwan observed DST during 1945, when it +# was still controlled by Japan. This is hard to believe, but we don't +# have any other information. + +# From smallufo (2010-04-03): +# According to Taiwan's CWB, +# <a href="http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm"> +# http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm +# </a> +# Taipei has DST in 1979 between July 1st and Sep 30. + +# From Arthur David Olson (2010-04-07): +# Here's Google's translation of the table at the bottom of the "summert.htm" page: +# Decade Name Start and end date +# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time May 1 to September 30 +# 41 years of the Republic of China (AD 1952) Daylight Saving Time March 1 to October 31 +# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time April 1 to October 31 +# In the 44 years to 45 years (AD 1955-1956 years) Daylight Saving Time April 1 to September 30 +# Republic of China 46 years to 48 years (AD 1957-1959) Summer Time April 1 to September 30 +# Republic of China 49 years to 50 years (AD 1960-1961) Summer Time June 1 to September 30 +# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time +# Republic of China 63 years to 64 years (1974-1975 AD) Daylight Saving Time April 1 to September 30 +# Republic of China 65 years to 67 years (1976-1978 AD) Stop Daylight Saving Time +# Republic of China 68 years (AD 1979) Daylight Saving Time July 1 to September 30 +# Republic of China since 69 years (AD 1980) Stop Daylight Saving Time + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Taiwan 1945 1951 - May 1 0:00 1:00 D +Rule Taiwan 1945 1951 - Oct 1 0:00 0 S +Rule Taiwan 1952 only - Mar 1 0:00 1:00 D +Rule Taiwan 1952 1954 - Nov 1 0:00 0 S +Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 D +Rule Taiwan 1955 1961 - Oct 1 0:00 0 S +Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 D +Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 D +Rule Taiwan 1974 1975 - Oct 1 0:00 0 S +Rule Taiwan 1979 only - Jun 30 0:00 1:00 D +Rule Taiwan 1979 only - Sep 30 0:00 0 S + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Taipei 8:06:00 - LMT 1896 # or Taibei or T'ai-pei + 8:00 Taiwan C%sT + +# Macau (Macao, Aomen) +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Macau 1961 1962 - Mar Sun>=16 3:30 1:00 S +Rule Macau 1961 1964 - Nov Sun>=1 3:30 0 - +Rule Macau 1963 only - Mar Sun>=16 0:00 1:00 S +Rule Macau 1964 only - Mar Sun>=16 3:30 1:00 S +Rule Macau 1965 only - Mar Sun>=16 0:00 1:00 S +Rule Macau 1965 only - Oct 31 0:00 0 - +Rule Macau 1966 1971 - Apr Sun>=16 3:30 1:00 S +Rule Macau 1966 1971 - Oct Sun>=16 3:30 0 - +Rule Macau 1972 1974 - Apr Sun>=15 0:00 1:00 S +Rule Macau 1972 1973 - Oct Sun>=15 0:00 0 - +Rule Macau 1974 1977 - Oct Sun>=15 3:30 0 - +Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 S +Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 S +Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Macau 7:34:20 - LMT 1912 + 8:00 Macau MO%sT 1999 Dec 20 # return to China + 8:00 PRC C%sT + + +############################################################################### + +# Cyprus +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Cyprus 1975 only - Apr 13 0:00 1:00 S +Rule Cyprus 1975 only - Oct 12 0:00 0 - +Rule Cyprus 1976 only - May 15 0:00 1:00 S +Rule Cyprus 1976 only - Oct 11 0:00 0 - +Rule Cyprus 1977 1980 - Apr Sun>=1 0:00 1:00 S +Rule Cyprus 1977 only - Sep 25 0:00 0 - +Rule Cyprus 1978 only - Oct 2 0:00 0 - +Rule Cyprus 1979 1997 - Sep lastSun 0:00 0 - +Rule Cyprus 1981 1998 - Mar lastSun 0:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14 + 2:00 Cyprus EE%sT 1998 Sep + 2:00 EUAsia EE%sT +# IATA SSIM (1998-09) has Cyprus using EU rules for the first time. + +# Classically, Cyprus belongs to Asia; e.g. see Herodotus, Histories, I.72. +# However, for various reasons many users expect to find it under Europe. +Link Asia/Nicosia Europe/Nicosia + +# Georgia +# From Paul Eggert (1994-11-19): +# Today's _Economist_ (p 60) reports that Georgia moved its clocks forward +# an hour recently, due to a law proposed by Zurab Murvanidze, +# an MP who went on a hunger strike for 11 days to force discussion about it! +# We have no details, but we'll guess they didn't move the clocks back in fall. +# +# From Mathew Englander, quoting AP (1996-10-23 13:05-04): +# Instead of putting back clocks at the end of October, Georgia +# will stay on daylight savings time this winter to save energy, +# President Eduard Shevardnadze decreed Wednesday. +# +# From the BBC via Joseph S. Myers (2004-06-27): +# +# Georgia moved closer to Western Europe on Sunday... The former Soviet +# republic has changed its time zone back to that of Moscow. As a result it +# is now just four hours ahead of Greenwich Mean Time, rather than five hours +# ahead. The switch was decreed by the pro-Western president of Georgia, +# Mikhail Saakashvili, who said the change was partly prompted by the process +# of integration into Europe. + +# From Teimuraz Abashidze (2005-11-07): +# Government of Georgia ... decided to NOT CHANGE daylight savings time on +# [Oct.] 30, as it was done before during last more than 10 years. +# Currently, we are in fact GMT +4:00, as before 30 October it was GMT +# +3:00.... The problem is, there is NO FORMAL LAW or governmental document +# about it. As far as I can find, I was told, that there is no document, +# because we just DIDN'T ISSUE document about switching to winter time.... +# I don't know what can be done, especially knowing that some years ago our +# DST rules where changed THREE TIMES during one month. + + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Tbilisi 2:59:16 - LMT 1880 + 2:59:16 - TBMT 1924 May 2 # Tbilisi Mean Time + 3:00 - TBIT 1957 Mar # Tbilisi Time + 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s + 3:00 1:00 TBIST 1991 Apr 9 # independence + 3:00 RussiaAsia GE%sT 1992 # Georgia Time + 3:00 E-EurAsia GE%sT 1994 Sep lastSun + 4:00 E-EurAsia GE%sT 1996 Oct lastSun + 4:00 1:00 GEST 1997 Mar lastSun + 4:00 E-EurAsia GE%sT 2004 Jun 27 + 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00 + 4:00 - GET + +# East Timor + +# See Indonesia for the 1945 transition. + +# From Joao Carrascalao, brother of the former governor of East Timor, in +# <a href="http://etan.org/et99c/december/26-31/30ETMAY.htm"> +# East Timor may be late for its millennium +# </a> (1999-12-26/31): +# Portugal tried to change the time forward in 1974 because the sun +# rises too early but the suggestion raised a lot of problems with the +# Timorese and I still don't think it would work today because it +# conflicts with their way of life. + +# From Paul Eggert (2000-12-04): +# We don't have any record of the above attempt. +# Most likely our records are incomplete, but we have no better data. + +# <a href="http://www.hri.org/news/world/undh/last/00-08-16.undh.html"> +# From Manoel de Almeida e Silva, Deputy Spokesman for the UN Secretary-General +# (2000-08-16)</a>: +# The Cabinet of the East Timor Transition Administration decided +# today to advance East Timor's time by one hour. The time change, +# which will be permanent, with no seasonal adjustment, will happen at +# midnight on Saturday, September 16. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Dili 8:22:20 - LMT 1912 + 8:00 - TLT 1942 Feb 21 23:00 # E Timor Time + 9:00 - JST 1945 Sep 23 + 9:00 - TLT 1976 May 3 + 8:00 - CIT 2000 Sep 17 00:00 + 9:00 - TLT + +# India +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata + 5:53:20 - HMT 1941 Oct # Howrah Mean Time? + 6:30 - BURT 1942 May 15 # Burma Time + 5:30 - IST 1942 Sep + 5:30 1:00 IST 1945 Oct 15 + 5:30 - IST +# The following are like Asia/Kolkata: +# Andaman Is +# Lakshadweep (Laccadive, Minicoy and Amindivi Is) +# Nicobar Is + +# Indonesia +# +# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger: +# <http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime> +# says that Indonesia's time zones changed on 1988-01-01. Looking at some +# time zone maps, I think that must refer to Western Borneo (Kalimantan Barat +# and Kalimantan Tengah) switching from UTC+8 to UTC+7. +# +# From Paul Eggert (2007-03-10): +# Here is another correction to Shanks & Pottenger. +# JohnTWB writes that Japanese forces did not surrender control in +# Indonesia until 1945-09-01 00:00 at the earliest (in Jakarta) and +# other formal surrender ceremonies were September 9, 11, and 13, plus +# September 12 for the regional surrender to Mountbatten in Singapore. +# These would be the earliest possible times for a change. +# Regimes horaires pour le monde entier, by Henri Le Corre, (Editions +# Traditionnelles, 1987, Paris) says that Java and Madura switched +# from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura +# (Hollandia). For now, assume all Indonesian locations other than Jayapura +# switched on 1945-09-23. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10 +# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13, +# but this must be a typo. + 7:07:12 - JMT 1923 Dec 31 23:47:12 # Jakarta + 7:20 - JAVT 1932 Nov # Java Time + 7:30 - WIT 1942 Mar 23 + 9:00 - JST 1945 Sep 23 + 7:30 - WIT 1948 May + 8:00 - WIT 1950 May + 7:30 - WIT 1964 + 7:00 - WIT +Zone Asia/Pontianak 7:17:20 - LMT 1908 May + 7:17:20 - PMT 1932 Nov # Pontianak MT + 7:30 - WIT 1942 Jan 29 + 9:00 - JST 1945 Sep 23 + 7:30 - WIT 1948 May + 8:00 - WIT 1950 May + 7:30 - WIT 1964 + 8:00 - CIT 1988 Jan 1 + 7:00 - WIT +Zone Asia/Makassar 7:57:36 - LMT 1920 + 7:57:36 - MMT 1932 Nov # Macassar MT + 8:00 - CIT 1942 Feb 9 + 9:00 - JST 1945 Sep 23 + 8:00 - CIT +Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov + 9:00 - EIT 1944 Sep 1 + 9:30 - CST 1964 + 9:00 - EIT + +# Iran + +# From Roozbeh Pournader (2003-03-15): +# This is an English translation of what I just found (originally in Persian). +# The Gregorian dates in brackets are mine: +# +# Official Newspaper No. 13548-1370/6/25 [1991-09-16] +# No. 16760/T233 H 1370/6/10 [1991-09-01] +# +# The Rule About Change of the Official Time of the Country +# +# The Board of Ministers, in the meeting dated 1370/5/23 [1991-08-14], +# based on the suggestion number 2221/D dated 1370/4/22 [1991-07-13] +# of the Country's Organization for Official and Employment Affairs, +# and referring to the law for equating the working hours of workers +# and officers in the whole country dated 1359/4/23 [1980-07-14], and +# for synchronizing the official times of the country, agreed that: +# +# The official time of the country will should move forward one hour +# at the 24[:00] hours of the first day of Farvardin and should return +# to its previous state at the 24[:00] hours of the 30th day of +# Shahrivar. +# +# First Deputy to the President - Hassan Habibi +# +# From personal experience, that agrees with what has been followed +# for at least the last 5 years. Before that, for a few years, the +# date used was the first Thursday night of Farvardin and the last +# Thursday night of Shahrivar, but I can't give exact dates.... +# I have also changed the abbreviations to what is considered correct +# here in Iran, IRST for regular time and IRDT for daylight saving time. +# +# From Roozbeh Pournader (2005-04-05): +# The text of the Iranian law, in effect since 1925, clearly mentions +# that the true solar year is the measure, and there is no arithmetic +# leap year calculation involved. There has never been any serious +# plan to change that law.... +# +# From Paul Eggert (2006-03-22): +# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter. +# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates, +# stopping after 2037 when 32-bit time_t's overflow. +# That cal-persia used Birashk's approximation, which disagrees with the solar +# calendar predictions for the year 2025, so I corrected those dates by hand. +# +# From Oscar van Vlijmen (2005-03-30), writing about future +# discrepancies between cal-persia and the Iranian calendar: +# For 2091 solar-longitude-after yields 2091-03-20 08:40:07.7 UT for +# the vernal equinox and that gets so close to 12:00 some local +# Iranian time that the definition of the correct location needs to be +# known exactly, amongst other factors. 2157 is even closer: +# 2157-03-20 08:37:15.5 UT. But the Gregorian year 2025 should give +# no interpretation problem whatsoever. By the way, another instant +# in the near future where there will be a discrepancy between +# arithmetical and astronomical Iranian calendars will be in 2058: +# vernal equinox on 2058-03-20 09:03:05.9 UT. The Java version of +# Reingold's/Dershowitz' calculator gives correctly the Gregorian date +# 2058-03-21 for 1 Farvardin 1437 (astronomical). +# +# From Steffen Thorsen (2006-03-22): +# Several of my users have reported that Iran will not observe DST anymore: +# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm +# +# From Reuters (2007-09-16), with a heads-up from Jesper Norgaard Welen: +# ... the Guardian Council ... approved a law on Sunday to re-introduce +# daylight saving time ... +# http://uk.reuters.com/article/oilRpt/idUKBLA65048420070916 +# +# From Roozbeh Pournader (2007-11-05): +# This is quoted from Official Gazette of the Islamic Republic of +# Iran, Volume 63, Number 18242, dated Tuesday 1386/6/24 +# [2007-10-16]. I am doing the best translation I can:... +# The official time of the country will be moved forward for one hour +# on the 24 hours of the first day of the month of Farvardin and will +# be changed back to its previous state on the 24 hours of the +# thirtieth day of Shahrivar. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Iran 1978 1980 - Mar 21 0:00 1:00 D +Rule Iran 1978 only - Oct 21 0:00 0 S +Rule Iran 1979 only - Sep 19 0:00 0 S +Rule Iran 1980 only - Sep 23 0:00 0 S +Rule Iran 1991 only - May 3 0:00 1:00 D +Rule Iran 1992 1995 - Mar 22 0:00 1:00 D +Rule Iran 1991 1995 - Sep 22 0:00 0 S +Rule Iran 1996 only - Mar 21 0:00 1:00 D +Rule Iran 1996 only - Sep 21 0:00 0 S +Rule Iran 1997 1999 - Mar 22 0:00 1:00 D +Rule Iran 1997 1999 - Sep 22 0:00 0 S +Rule Iran 2000 only - Mar 21 0:00 1:00 D +Rule Iran 2000 only - Sep 21 0:00 0 S +Rule Iran 2001 2003 - Mar 22 0:00 1:00 D +Rule Iran 2001 2003 - Sep 22 0:00 0 S +Rule Iran 2004 only - Mar 21 0:00 1:00 D +Rule Iran 2004 only - Sep 21 0:00 0 S +Rule Iran 2005 only - Mar 22 0:00 1:00 D +Rule Iran 2005 only - Sep 22 0:00 0 S +Rule Iran 2008 only - Mar 21 0:00 1:00 D +Rule Iran 2008 only - Sep 21 0:00 0 S +Rule Iran 2009 2011 - Mar 22 0:00 1:00 D +Rule Iran 2009 2011 - Sep 22 0:00 0 S +Rule Iran 2012 only - Mar 21 0:00 1:00 D +Rule Iran 2012 only - Sep 21 0:00 0 S +Rule Iran 2013 2015 - Mar 22 0:00 1:00 D +Rule Iran 2013 2015 - Sep 22 0:00 0 S +Rule Iran 2016 only - Mar 21 0:00 1:00 D +Rule Iran 2016 only - Sep 21 0:00 0 S +Rule Iran 2017 2019 - Mar 22 0:00 1:00 D +Rule Iran 2017 2019 - Sep 22 0:00 0 S +Rule Iran 2020 only - Mar 21 0:00 1:00 D +Rule Iran 2020 only - Sep 21 0:00 0 S +Rule Iran 2021 2023 - Mar 22 0:00 1:00 D +Rule Iran 2021 2023 - Sep 22 0:00 0 S +Rule Iran 2024 only - Mar 21 0:00 1:00 D +Rule Iran 2024 only - Sep 21 0:00 0 S +Rule Iran 2025 2027 - Mar 22 0:00 1:00 D +Rule Iran 2025 2027 - Sep 22 0:00 0 S +Rule Iran 2028 2029 - Mar 21 0:00 1:00 D +Rule Iran 2028 2029 - Sep 21 0:00 0 S +Rule Iran 2030 2031 - Mar 22 0:00 1:00 D +Rule Iran 2030 2031 - Sep 22 0:00 0 S +Rule Iran 2032 2033 - Mar 21 0:00 1:00 D +Rule Iran 2032 2033 - Sep 21 0:00 0 S +Rule Iran 2034 2035 - Mar 22 0:00 1:00 D +Rule Iran 2034 2035 - Sep 22 0:00 0 S +Rule Iran 2036 2037 - Mar 21 0:00 1:00 D +Rule Iran 2036 2037 - Sep 21 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Tehran 3:25:44 - LMT 1916 + 3:25:44 - TMT 1946 # Tehran Mean Time + 3:30 - IRST 1977 Nov + 4:00 Iran IR%sT 1979 + 3:30 Iran IR%sT + + +# Iraq +# +# From Jonathan Lennox (2000-06-12): +# An article in this week's Economist ("Inside the Saddam-free zone", p. 50 in +# the U.S. edition) on the Iraqi Kurds contains a paragraph: +# "The three northern provinces ... switched their clocks this spring and +# are an hour ahead of Baghdad." +# +# But Rives McDow (2000-06-18) quotes a contact in Iraqi-Kurdistan as follows: +# In the past, some Kurdish nationalists, as a protest to the Iraqi +# Government, did not adhere to daylight saving time. They referred +# to daylight saving as Saddam time. But, as of today, the time zone +# in Iraqi-Kurdistan is on standard time with Baghdad, Iraq. +# +# So we'll ignore the Economist's claim. + +# From Steffen Thorsen (2008-03-10): +# The cabinet in Iraq abolished DST last week, according to the following +# news sources (in Arabic): +# <a href="http://www.aljeeran.net/wesima_articles/news-20080305-98602.html"> +# http://www.aljeeran.net/wesima_articles/news-20080305-98602.html +# </a> +# <a href="http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10"> +# http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10 +# </a> +# +# We have published a short article in English about the change: +# <a href="http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html"> +# http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html +# </a> + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Iraq 1982 only - May 1 0:00 1:00 D +Rule Iraq 1982 1984 - Oct 1 0:00 0 S +Rule Iraq 1983 only - Mar 31 0:00 1:00 D +Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D +Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S +Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D +# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo. +# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this. +# +Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D +Rule Iraq 1991 2007 - Oct 1 3:00s 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Baghdad 2:57:40 - LMT 1890 + 2:57:36 - BMT 1918 # Baghdad Mean Time? + 3:00 - AST 1982 May + 3:00 Iraq A%sT + + +############################################################################### + +# Israel + +# From Ephraim Silverberg (2001-01-11): +# +# I coined "IST/IDT" circa 1988. Until then there were three +# different abbreviations in use: +# +# JST Jerusalem Standard Time [Danny Braniss, Hebrew University] +# IZT Israel Zonal (sic) Time [Prof. Haim Papo, Technion] +# EEST Eastern Europe Standard Time [used by almost everyone else] +# +# Since timezones should be called by country and not capital cities, +# I ruled out JST. As Israel is in Asia Minor and not Eastern Europe, +# EEST was equally unacceptable. Since "zonal" was not compatible with +# any other timezone abbreviation, I felt that 'IST' was the way to go +# and, indeed, it has received almost universal acceptance in timezone +# settings in Israeli computers. +# +# In any case, I am happy to share timezone abbreviations with India, +# high on my favorite-country list (and not only because my wife's +# family is from India). + +# From Shanks & Pottenger: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 1940 only - Jun 1 0:00 1:00 D +Rule Zion 1942 1944 - Nov 1 0:00 0 S +Rule Zion 1943 only - Apr 1 2:00 1:00 D +Rule Zion 1944 only - Apr 1 0:00 1:00 D +Rule Zion 1945 only - Apr 16 0:00 1:00 D +Rule Zion 1945 only - Nov 1 2:00 0 S +Rule Zion 1946 only - Apr 16 2:00 1:00 D +Rule Zion 1946 only - Nov 1 0:00 0 S +Rule Zion 1948 only - May 23 0:00 2:00 DD +Rule Zion 1948 only - Sep 1 0:00 1:00 D +Rule Zion 1948 1949 - Nov 1 2:00 0 S +Rule Zion 1949 only - May 1 0:00 1:00 D +Rule Zion 1950 only - Apr 16 0:00 1:00 D +Rule Zion 1950 only - Sep 15 3:00 0 S +Rule Zion 1951 only - Apr 1 0:00 1:00 D +Rule Zion 1951 only - Nov 11 3:00 0 S +Rule Zion 1952 only - Apr 20 2:00 1:00 D +Rule Zion 1952 only - Oct 19 3:00 0 S +Rule Zion 1953 only - Apr 12 2:00 1:00 D +Rule Zion 1953 only - Sep 13 3:00 0 S +Rule Zion 1954 only - Jun 13 0:00 1:00 D +Rule Zion 1954 only - Sep 12 0:00 0 S +Rule Zion 1955 only - Jun 11 2:00 1:00 D +Rule Zion 1955 only - Sep 11 0:00 0 S +Rule Zion 1956 only - Jun 3 0:00 1:00 D +Rule Zion 1956 only - Sep 30 3:00 0 S +Rule Zion 1957 only - Apr 29 2:00 1:00 D +Rule Zion 1957 only - Sep 22 0:00 0 S +Rule Zion 1974 only - Jul 7 0:00 1:00 D +Rule Zion 1974 only - Oct 13 0:00 0 S +Rule Zion 1975 only - Apr 20 0:00 1:00 D +Rule Zion 1975 only - Aug 31 0:00 0 S +Rule Zion 1985 only - Apr 14 0:00 1:00 D +Rule Zion 1985 only - Sep 15 0:00 0 S +Rule Zion 1986 only - May 18 0:00 1:00 D +Rule Zion 1986 only - Sep 7 0:00 0 S +Rule Zion 1987 only - Apr 15 0:00 1:00 D +Rule Zion 1987 only - Sep 13 0:00 0 S +Rule Zion 1988 only - Apr 9 0:00 1:00 D +Rule Zion 1988 only - Sep 3 0:00 0 S + +# From Ephraim Silverberg +# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22, +# and 2005-02-17): + +# According to the Office of the Secretary General of the Ministry of +# Interior, there is NO set rule for Daylight-Savings/Standard time changes. +# One thing is entrenched in law, however: that there must be at least 150 +# days of daylight savings time annually. From 1993-1998, the change to +# daylight savings time was on a Friday morning from midnight IST to +# 1 a.m IDT; up until 1998, the change back to standard time was on a +# Saturday night from midnight daylight savings time to 11 p.m. standard +# time. 1996 is an exception to this rule where the change back to standard +# time took place on Sunday night instead of Saturday night to avoid +# conflicts with the Jewish New Year. In 1999, the change to +# daylight savings time was still on a Friday morning but from +# 2 a.m. IST to 3 a.m. IDT; furthermore, the change back to standard time +# was also on a Friday morning from 2 a.m. IDT to 1 a.m. IST for +# 1999 only. In the year 2000, the change to daylight savings time was +# similar to 1999, but although the change back will be on a Friday, it +# will take place from 1 a.m. IDT to midnight IST. Starting in 2001, all +# changes to/from will take place at 1 a.m. old time, but now there is no +# rule as to what day of the week it will take place in as the start date +# (except in 2003) is the night after the Passover Seder (i.e. the eve +# of the 16th of Nisan in the lunar Hebrew calendar) and the end date +# (except in 2002) is three nights before Yom Kippur [Day of Atonement] +# (the eve of the 7th of Tishrei in the lunar Hebrew calendar). + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 1989 only - Apr 30 0:00 1:00 D +Rule Zion 1989 only - Sep 3 0:00 0 S +Rule Zion 1990 only - Mar 25 0:00 1:00 D +Rule Zion 1990 only - Aug 26 0:00 0 S +Rule Zion 1991 only - Mar 24 0:00 1:00 D +Rule Zion 1991 only - Sep 1 0:00 0 S +Rule Zion 1992 only - Mar 29 0:00 1:00 D +Rule Zion 1992 only - Sep 6 0:00 0 S +Rule Zion 1993 only - Apr 2 0:00 1:00 D +Rule Zion 1993 only - Sep 5 0:00 0 S + +# The dates for 1994-1995 were obtained from Office of the Spokeswoman for the +# Ministry of Interior, Jerusalem, Israel. The spokeswoman can be reached by +# calling the office directly at 972-2-6701447 or 972-2-6701448. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 1994 only - Apr 1 0:00 1:00 D +Rule Zion 1994 only - Aug 28 0:00 0 S +Rule Zion 1995 only - Mar 31 0:00 1:00 D +Rule Zion 1995 only - Sep 3 0:00 0 S + +# The dates for 1996 were determined by the Minister of Interior of the +# time, Haim Ramon. The official announcement regarding 1996-1998 +# (with the dates for 1997-1998 no longer being relevant) can be viewed at: +# +# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz +# +# The dates for 1997-1998 were altered by his successor, Rabbi Eli Suissa. +# +# The official announcements for the years 1997-1999 can be viewed at: +# +# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/YYYY.ps.gz +# +# where YYYY is the relevant year. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 1996 only - Mar 15 0:00 1:00 D +Rule Zion 1996 only - Sep 16 0:00 0 S +Rule Zion 1997 only - Mar 21 0:00 1:00 D +Rule Zion 1997 only - Sep 14 0:00 0 S +Rule Zion 1998 only - Mar 20 0:00 1:00 D +Rule Zion 1998 only - Sep 6 0:00 0 S +Rule Zion 1999 only - Apr 2 2:00 1:00 D +Rule Zion 1999 only - Sep 3 2:00 0 S + +# The Knesset Interior Committee has changed the dates for 2000 for +# the third time in just over a year and have set new dates for the +# years 2001-2004 as well. +# +# The official announcement for the start date of 2000 can be viewed at: +# +# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-start.ps.gz +# +# The official announcement for the end date of 2000 and the dates +# for the years 2001-2004 can be viewed at: +# +# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 2000 only - Apr 14 2:00 1:00 D +Rule Zion 2000 only - Oct 6 1:00 0 S +Rule Zion 2001 only - Apr 9 1:00 1:00 D +Rule Zion 2001 only - Sep 24 1:00 0 S +Rule Zion 2002 only - Mar 29 1:00 1:00 D +Rule Zion 2002 only - Oct 7 1:00 0 S +Rule Zion 2003 only - Mar 28 1:00 1:00 D +Rule Zion 2003 only - Oct 3 1:00 0 S +Rule Zion 2004 only - Apr 7 1:00 1:00 D +Rule Zion 2004 only - Sep 22 1:00 0 S + +# The proposed law agreed upon by the Knesset Interior Committee on +# 2005-02-14 is that, for 2005 and beyond, DST starts at 02:00 the +# last Friday before April 2nd (i.e. the last Friday in March or April +# 1st itself if it falls on a Friday) and ends at 02:00 on the Saturday +# night _before_ the fast of Yom Kippur. +# +# Those who can read Hebrew can view the announcement at: +# +# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps + +# From Paul Eggert (2012-10-26): +# I used Ephraim Silverberg's dst-israel.el program +# <ftp://ftp.cs.huji.ac.il/pub/tz/software/dst-israel.el> (2005-02-20) +# along with Ed Reingold's cal-hebrew in GNU Emacs 21.4, +# to generate the transitions from 2005 through 2012. +# (I replaced "lastFri" with "Fri>=26" by hand.) +# The spring transitions all correspond to the following Rule: +# +# Rule Zion 2005 2012 - Mar Fri>=26 2:00 1:00 D +# +# but older zic implementations (e.g., Solaris 8) do not support +# "Fri>=26" to mean April 1 in years like 2005, so for now we list the +# springtime transitions explicitly. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 2005 only - Apr 1 2:00 1:00 D +Rule Zion 2005 only - Oct 9 2:00 0 S +Rule Zion 2006 2010 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2006 only - Oct 1 2:00 0 S +Rule Zion 2007 only - Sep 16 2:00 0 S +Rule Zion 2008 only - Oct 5 2:00 0 S +Rule Zion 2009 only - Sep 27 2:00 0 S +Rule Zion 2010 only - Sep 12 2:00 0 S +Rule Zion 2011 only - Apr 1 2:00 1:00 D +Rule Zion 2011 only - Oct 2 2:00 0 S +Rule Zion 2012 only - Mar Fri>=26 2:00 1:00 D +Rule Zion 2012 only - Sep 23 2:00 0 S + +# From Ephraim Silverberg (2012-10-18): +# Yesterday, the Interior Ministry Committee, after more than a year +# past, approved sending the proposed June 2011 changes to the Time +# Decree Law back to the Knesset for second and third (final) votes +# before the upcoming elections on Jan. 22, 2013. Hence, although the +# changes are not yet law, they are expected to be so before February 2013. +# +# As of 2013, DST starts at 02:00 on the Friday before the last Sunday in March. +# DST ends at 02:00 on the first Sunday after October 1, unless it occurs on the +# second day of the Jewish Rosh Hashana holiday, in which case DST ends a day +# later (i.e. at 02:00 the first Monday after October 2). +# [Rosh Hashana holidays are factored in until 2100.] + +# From Ephraim Silverberg (2012-11-05): +# The Knesset passed today (in second and final readings) the amendment to the +# Time Decree Law making the changes ... law. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D +Rule Zion 2013 2026 - Oct Sun>=2 2:00 0 S +Rule Zion 2027 only - Oct Mon>=3 2:00 0 S +Rule Zion 2028 max - Oct Sun>=2 2:00 0 S +# The following rules are commented out for now, as they break older +# versions of zic that support only signed 32-bit timestamps, i.e., +# through 2038-01-19 03:14:07 UTC. +#Rule Zion 2028 2053 - Oct Sun>=2 2:00 0 S +#Rule Zion 2054 only - Oct Mon>=3 2:00 0 S +#Rule Zion 2055 2080 - Oct Sun>=2 2:00 0 S +#Rule Zion 2081 only - Oct Mon>=3 2:00 0 S +#Rule Zion 2082 max - Oct Sun>=2 2:00 0 S + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Jerusalem 2:20:56 - LMT 1880 + 2:20:40 - JMT 1918 # Jerusalem Mean Time? + 2:00 Zion I%sT + + + +############################################################################### + +# Japan + +# `9:00' and `JST' is from Guy Harris. + +# From Paul Eggert (1995-03-06): +# Today's _Asahi Evening News_ (page 4) reports that Japan had +# daylight saving between 1948 and 1951, but ``the system was discontinued +# because the public believed it would lead to longer working hours.'' + +# From Mayumi Negishi in the 2005-08-10 Japan Times +# <http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm>: +# Occupation authorities imposed daylight-saving time on Japan on +# [1948-05-01].... But lack of prior debate and the execution of +# daylight-saving time just three days after the bill was passed generated +# deep hatred of the concept.... The Diet unceremoniously passed a bill to +# dump the unpopular system in October 1951, less than a month after the San +# Francisco Peace Treaty was signed. (A government poll in 1951 showed 53% +# of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who +# wanted to keep it.) + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that DST in Japan during those years was as follows: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Japan 1948 only - May Sun>=1 2:00 1:00 D +Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S +Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D +Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D +# but the only locations using it (for birth certificates, presumably, since +# their audience is astrologers) were US military bases. For now, assume +# that for most purposes daylight-saving time was observed; otherwise, what +# would have been the point of the 1951 poll? + +# From Hideyuki Suzuki (1998-11-09): +# 'Tokyo' usually stands for the former location of Tokyo Astronomical +# Observatory: E 139 44' 40".90 (9h 18m 58s.727), N 35 39' 16".0. +# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996' +# edited by National Astronomical Observatory of Japan.... +# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST). +# The law is enacted on 1886-07-07. + +# From Hideyuki Suzuki (1998-11-16): +# The ordinance No. 51 (1886) established "standard time" in Japan, +# which stands for the time on E 135 degree. +# In the ordinance No. 167 (1895), "standard time" was renamed to "central +# standard time". And the same ordinance also established "western standard +# time", which stands for the time on E 120 degree.... But "western standard +# time" was abolished in the ordinance No. 529 (1937). In the ordinance No. +# 167, there is no mention regarding for what place western standard time is +# standard.... +# +# I wrote "ordinance" above, but I don't know how to translate. +# In Japanese it's "chokurei", which means ordinance from emperor. + +# Shanks & Pottenger claim JST in use since 1896, and that a few +# places (e.g. Ishigaki) use +0800; go with Suzuki. Guess that all +# ordinances took effect on Jan 1. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u + 9:00 - JST 1896 + 9:00 - CJT 1938 + 9:00 Japan J%sT +# Since 1938, all Japanese possessions have been like Asia/Tokyo. + +# Jordan +# +# From <a href="http://star.arabia.com/990701/JO9.html"> +# Jordan Week (1999-07-01) </a> via Steffen Thorsen (1999-09-09): +# Clocks in Jordan were forwarded one hour on Wednesday at midnight, +# in accordance with the government's decision to implement summer time +# all year round. +# +# From <a href="http://star.arabia.com/990930/JO9.html"> +# Jordan Week (1999-09-30) </a> via Steffen Thorsen (1999-11-09): +# Winter time starts today Thursday, 30 September. Clocks will be turned back +# by one hour. This is the latest government decision and it's final! +# The decision was taken because of the increase in working hours in +# government's departments from six to seven hours. +# +# From Paul Eggert (2005-11-22): +# Starting 2003 transitions are from Steffen Thorsen's web site timeanddate.com. +# +# From Steffen Thorsen (2005-11-23): +# For Jordan I have received multiple independent user reports every year +# about DST end dates, as the end-rule is different every year. +# +# From Steffen Thorsen (2006-10-01), after a heads-up from Hilal Malawi: +# http://www.petranews.gov.jo/nepras/2006/Sep/05/4000.htm +# "Jordan will switch to winter time on Friday, October 27". +# + +# From Phil Pizzey (2009-04-02): +# ...I think I may have spotted an error in the timezone data for +# Jordan. +# The current (2009d) asia file shows Jordan going to daylight +# saving +# time on the last Thursday in March. +# +# Rule Jordan 2000 max - Mar lastThu 0:00s 1:00 S +# +# However timeanddate.com, which I usually find reliable, shows Jordan +# going to daylight saving time on the last Friday in March since 2002. +# Please see +# <a href="http://www.timeanddate.com/worldclock/timezone.html?n=11"> +# http://www.timeanddate.com/worldclock/timezone.html?n=11 +# </a> + +# From Steffen Thorsen (2009-04-02): +# This single one might be good enough, (2009-03-24, Arabic): +# <a href="http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279"> +# http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279 +# </a> +# +# Google's translation: +# +# > The Council of Ministers decided in 2002 to adopt the principle of timely +# > submission of the summer at 60 minutes as of midnight on the last Thursday +# > of the month of March of each year. +# +# So - this means the midnight between Thursday and Friday since 2002. + +# From Arthur David Olson (2009-04-06): +# We still have Jordan switching to DST on Thursdays in 2000 and 2001. + +# From Steffen Thorsen (2012-10-25): +# Yesterday the government in Jordan announced that they will not +# switch back to standard time this winter, so the will stay on DST +# until about the same time next year (at least). +# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950 +# +# From Paul Eggert (2012-10-25): +# For now, assume this is just a one-year measure. If it becomes +# permanent, we should move Jordan from EET to AST effective tomorrow. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Jordan 1973 only - Jun 6 0:00 1:00 S +Rule Jordan 1973 1975 - Oct 1 0:00 0 - +Rule Jordan 1974 1977 - May 1 0:00 1:00 S +Rule Jordan 1976 only - Nov 1 0:00 0 - +Rule Jordan 1977 only - Oct 1 0:00 0 - +Rule Jordan 1978 only - Apr 30 0:00 1:00 S +Rule Jordan 1978 only - Sep 30 0:00 0 - +Rule Jordan 1985 only - Apr 1 0:00 1:00 S +Rule Jordan 1985 only - Oct 1 0:00 0 - +Rule Jordan 1986 1988 - Apr Fri>=1 0:00 1:00 S +Rule Jordan 1986 1990 - Oct Fri>=1 0:00 0 - +Rule Jordan 1989 only - May 8 0:00 1:00 S +Rule Jordan 1990 only - Apr 27 0:00 1:00 S +Rule Jordan 1991 only - Apr 17 0:00 1:00 S +Rule Jordan 1991 only - Sep 27 0:00 0 - +Rule Jordan 1992 only - Apr 10 0:00 1:00 S +Rule Jordan 1992 1993 - Oct Fri>=1 0:00 0 - +Rule Jordan 1993 1998 - Apr Fri>=1 0:00 1:00 S +Rule Jordan 1994 only - Sep Fri>=15 0:00 0 - +Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 - +Rule Jordan 1999 only - Jul 1 0:00s 1:00 S +Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 - +Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S +Rule Jordan 2002 max - Mar lastThu 24:00 1:00 S +Rule Jordan 2003 only - Oct 24 0:00s 0 - +Rule Jordan 2004 only - Oct 15 0:00s 0 - +Rule Jordan 2005 only - Sep lastFri 0:00s 0 - +Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 - +Rule Jordan 2013 max - Oct lastFri 0:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Amman 2:23:44 - LMT 1931 + 2:00 Jordan EE%sT + + +# Kazakhstan + +# From Paul Eggert (1996-11-22): +# Andrew Evtichov (1996-04-13) writes that Kazakhstan +# stayed in sync with Moscow after 1990, and that Aqtobe (formerly Aktyubinsk) +# and Aqtau (formerly Shevchenko) are the largest cities in their zones. +# Guess that Aqtau and Aqtobe diverged in 1995, since that's the first time +# IATA SSIM mentions a third time zone in Kazakhstan. + +# From Paul Eggert (2006-03-22): +# German Iofis, ELSI, Almaty (2001-10-09) reports that Kazakhstan uses +# RussiaAsia rules, instead of switching at 00:00 as the IATA has it. +# Go with Shanks & Pottenger, who have them always using RussiaAsia rules. +# Also go with the following claims of Shanks & Pottenger: +# +# - Kazakhstan did not observe DST in 1991. +# - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00. +# - Oral switched from +5:00 to +4:00 in spring 1989. + +# <a href="http://www.kazsociety.org.uk/news/2005/03/30.htm"> +# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21): +# </a> +# The Government of Kazakhstan passed a resolution March 15 abolishing +# daylight saving time citing lack of economic benefits and health +# complications coupled with a decrease in productivity. +# +# From Branislav Kojic (in Astana) via Gwillim Law (2005-06-28): +# ... what happened was that the former Kazakhstan Eastern time zone +# was "blended" with the Central zone. Therefore, Kazakhstan now has +# two time zones, and difference between them is one hour. The zone +# closer to UTC is the former Western zone (probably still called the +# same), encompassing four provinces in the west: Aqtobe, Atyrau, +# Mangghystau, and West Kazakhstan. The other zone encompasses +# everything else.... I guess that would make Kazakhstan time zones +# de jure UTC+5 and UTC+6 respectively. + +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# +# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan +Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata + 5:00 - ALMT 1930 Jun 21 # Alma-Ata Time + 6:00 RussiaAsia ALM%sT 1991 + 6:00 - ALMT 1992 + 6:00 RussiaAsia ALM%sT 2005 Mar 15 + 6:00 - ALMT +# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) +Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2 + 4:00 - KIZT 1930 Jun 21 # Kizilorda Time + 5:00 - KIZT 1981 Apr 1 + 5:00 1:00 KIZST 1981 Oct 1 + 6:00 - KIZT 1982 Apr 1 + 5:00 RussiaAsia KIZ%sT 1991 + 5:00 - KIZT 1991 Dec 16 # independence + 5:00 - QYZT 1992 Jan 19 2:00 + 6:00 RussiaAsia QYZ%sT 2005 Mar 15 + 6:00 - QYZT +# Aqtobe (aka Aktobe, formerly Akt'ubinsk) +Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2 + 4:00 - AKTT 1930 Jun 21 # Aktyubinsk Time + 5:00 - AKTT 1981 Apr 1 + 5:00 1:00 AKTST 1981 Oct 1 + 6:00 - AKTT 1982 Apr 1 + 5:00 RussiaAsia AKT%sT 1991 + 5:00 - AKTT 1991 Dec 16 # independence + 5:00 RussiaAsia AQT%sT 2005 Mar 15 # Aqtobe Time + 5:00 - AQTT +# Mangghystau +# Aqtau was not founded until 1963, but it represents an inhabited region, +# so include time stamps before 1963. +Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2 + 4:00 - FORT 1930 Jun 21 # Fort Shevchenko T + 5:00 - FORT 1963 + 5:00 - SHET 1981 Oct 1 # Shevchenko Time + 6:00 - SHET 1982 Apr 1 + 5:00 RussiaAsia SHE%sT 1991 + 5:00 - SHET 1991 Dec 16 # independence + 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time + 4:00 RussiaAsia AQT%sT 2005 Mar 15 + 5:00 - AQTT +# West Kazakhstan +Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk + 4:00 - URAT 1930 Jun 21 # Ural'sk time + 5:00 - URAT 1981 Apr 1 + 5:00 1:00 URAST 1981 Oct 1 + 6:00 - URAT 1982 Apr 1 + 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00 + 4:00 RussiaAsia URA%sT 1991 + 4:00 - URAT 1991 Dec 16 # independence + 4:00 RussiaAsia ORA%sT 2005 Mar 15 # Oral Time + 5:00 - ORAT + +# Kyrgyzstan (Kirgizstan) +# Transitions through 1991 are from Shanks & Pottenger. + +# From Paul Eggert (2005-08-15): +# According to an article dated today in the Kyrgyzstan Development Gateway +# <http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml> +# Kyrgyzstan is canceling the daylight saving time system. I take the article +# to mean that they will leave their clocks at 6 hours ahead of UTC. +# From Malik Abdugaliev (2005-09-21): +# Our government cancels daylight saving time 6th of August 2005. +# From 2005-08-12 our GMT-offset is +6, w/o any daylight saving. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 S +Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 - +Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 S +Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2 + 5:00 - FRUT 1930 Jun 21 # Frunze Time + 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s + 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence + 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time + 6:00 - KGT + +############################################################################### + +# Korea (North and South) + +# From Annie I. Bang (2006-07-10) in +# <http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp>: +# The Ministry of Commerce, Industry and Energy has already +# commissioned a research project [to reintroduce DST] and has said +# the system may begin as early as 2008.... Korea ran a daylight +# saving program from 1949-61 but stopped it during the 1950-53 Korean War. + +# From Shanks & Pottenger: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule ROK 1960 only - May 15 0:00 1:00 D +Rule ROK 1960 only - Sep 13 0:00 0 S +Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D +Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Seoul 8:27:52 - LMT 1890 + 8:30 - KST 1904 Dec + 9:00 - KST 1928 + 8:30 - KST 1932 + 9:00 - KST 1954 Mar 21 + 8:00 ROK K%sT 1961 Aug 10 + 8:30 - KST 1968 Oct + 9:00 ROK K%sT +Zone Asia/Pyongyang 8:23:00 - LMT 1890 + 8:30 - KST 1904 Dec + 9:00 - KST 1928 + 8:30 - KST 1932 + 9:00 - KST 1954 Mar 21 + 8:00 - KST 1961 Aug 10 + 9:00 - KST + +############################################################################### + +# Kuwait +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# From the Arab Times (2007-03-14): +# The Civil Service Commission (CSC) has approved a proposal forwarded +# by MP Ahmad Baqer on implementing the daylight saving time (DST) in +# Kuwait starting from April until the end of Sept this year, reports Al-Anba. +# <http://www.arabtimesonline.com/arabtimes/kuwait/Viewdet.asp?ID=9950>. +# From Paul Eggert (2007-03-29): +# We don't know the details, or whether the approval means it'll happen, +# so for now we assume no DST. +Zone Asia/Kuwait 3:11:56 - LMT 1950 + 3:00 - AST + +# Laos +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Vientiane 6:50:24 - LMT 1906 Jun 9 # or Viangchan + 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? + 7:00 - ICT 1912 May + 8:00 - ICT 1931 May + 7:00 - ICT + +# Lebanon +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Lebanon 1920 only - Mar 28 0:00 1:00 S +Rule Lebanon 1920 only - Oct 25 0:00 0 - +Rule Lebanon 1921 only - Apr 3 0:00 1:00 S +Rule Lebanon 1921 only - Oct 3 0:00 0 - +Rule Lebanon 1922 only - Mar 26 0:00 1:00 S +Rule Lebanon 1922 only - Oct 8 0:00 0 - +Rule Lebanon 1923 only - Apr 22 0:00 1:00 S +Rule Lebanon 1923 only - Sep 16 0:00 0 - +Rule Lebanon 1957 1961 - May 1 0:00 1:00 S +Rule Lebanon 1957 1961 - Oct 1 0:00 0 - +Rule Lebanon 1972 only - Jun 22 0:00 1:00 S +Rule Lebanon 1972 1977 - Oct 1 0:00 0 - +Rule Lebanon 1973 1977 - May 1 0:00 1:00 S +Rule Lebanon 1978 only - Apr 30 0:00 1:00 S +Rule Lebanon 1978 only - Sep 30 0:00 0 - +Rule Lebanon 1984 1987 - May 1 0:00 1:00 S +Rule Lebanon 1984 1991 - Oct 16 0:00 0 - +Rule Lebanon 1988 only - Jun 1 0:00 1:00 S +Rule Lebanon 1989 only - May 10 0:00 1:00 S +Rule Lebanon 1990 1992 - May 1 0:00 1:00 S +Rule Lebanon 1992 only - Oct 4 0:00 0 - +Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S +Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 - +Rule Lebanon 1999 max - Oct lastSun 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Beirut 2:22:00 - LMT 1880 + 2:00 Lebanon EE%sT + +# Malaysia +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 TS # one-Third Summer +Rule NBorneo 1935 1941 - Dec 14 0:00 0 - +# +# peninsular Malaysia +# The data here are taken from Mok Ly Yng (2003-10-30) +# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1 + 6:55:25 - SMT 1905 Jun 1 # Singapore M.T. + 7:00 - MALT 1933 Jan 1 # Malaya Time + 7:00 0:20 MALST 1936 Jan 1 + 7:20 - MALT 1941 Sep 1 + 7:30 - MALT 1942 Feb 16 + 9:00 - JST 1945 Sep 12 + 7:30 - MALT 1982 Jan 1 + 8:00 - MYT # Malaysia Time +# Sabah & Sarawak +# From Paul Eggert (2006-03-22): +# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982 +# transition dates are from Mok Ly Yng. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Kuching 7:21:20 - LMT 1926 Mar + 7:30 - BORT 1933 # Borneo Time + 8:00 NBorneo BOR%sT 1942 Feb 16 + 9:00 - JST 1945 Sep 12 + 8:00 - BORT 1982 Jan 1 + 8:00 - MYT + +# Maldives +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Maldives 4:54:00 - LMT 1880 # Male + 4:54:00 - MMT 1960 # Male Mean Time + 5:00 - MVT # Maldives Time + +# Mongolia + +# Shanks & Pottenger say that Mongolia has three time zones, but +# usno1995 and the CIA map Standard Time Zones of the World (2005-03) +# both say that it has just one. + +# From Oscar van Vlijmen (1999-12-11): +# <a href="http://www.mongoliatourism.gov.mn/general.htm"> +# General Information Mongolia +# </a> (1999-09) +# "Time: Mongolia has two time zones. Three westernmost provinces of +# Bayan-Ulgii, Uvs, and Hovd are one hour earlier than the capital city, and +# the rest of the country follows the Ulaanbaatar time, which is UTC/GMT plus +# eight hours." + +# From Rives McDow (1999-12-13): +# Mongolia discontinued the use of daylight savings time in 1999; 1998 +# being the last year it was implemented. The dates of implementation I am +# unsure of, but most probably it was similar to Russia, except for the time +# of implementation may have been different.... +# Some maps in the past have indicated that there was an additional time +# zone in the eastern part of Mongolia, including the provinces of Dornod, +# Suhbaatar, and possibly Khentij. + +# From Paul Eggert (1999-12-15): +# Naming and spelling is tricky in Mongolia. +# We'll use Hovd (also spelled Chovd and Khovd) to represent the west zone; +# the capital of the Hovd province is sometimes called Hovd, sometimes Dund-Us, +# and sometimes Jirgalanta (with variant spellings), but the name Hovd +# is good enough for our purposes. + +# From Rives McDow (2001-05-13): +# In addition to Mongolia starting daylight savings as reported earlier +# (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28), +# there are three time zones. +# +# Provinces [at 7:00]: Bayan-ulgii, Uvs, Khovd, Zavkhan, Govi-Altai +# Provinces [at 8:00]: Khovsgol, Bulgan, Arkhangai, Khentii, Tov, +# Bayankhongor, Ovorkhangai, Dundgovi, Dornogovi, Omnogovi +# Provinces [at 9:00]: Dornod, Sukhbaatar +# +# [The province of Selenge is omitted from the above lists.] + +# From Ganbold Ts., Ulaanbaatar (2004-04-17): +# Daylight saving occurs at 02:00 local time last Saturday of March. +# It will change back to normal at 02:00 local time last Saturday of +# September.... As I remember this rule was changed in 2001. +# +# From Paul Eggert (2004-04-17): +# For now, assume Rives McDow's informant got confused about Friday vs +# Saturday, and that his 2001 dates should have 1 added to them. + +# From Paul Eggert (2005-07-26): +# We have wildly conflicting information about Mongolia's time zones. +# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says +# there is only one time zone and that DST is observed, citing Microsoft +# Windows XP as the source. Risto Nykanen (2005-05-16) reports that +# travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST. +# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in +# Washington, DC says there are two time zones, with DST observed. +# He also found +# <http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&> +# which also says that there is DST, and which has a comment by "Toddius" +# (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones. +# The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT +# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT. +# The SUKH timezone is new this year, it is one of the few things the +# parliament passed during the tumultuous winter session." +# For now, let's ignore this information, until we have more confirmation. + +# From Ganbold Ts. (2007-02-26): +# Parliament of Mongolia has just changed the daylight-saving rule in February. +# They decided not to adopt daylight-saving time.... +# http://www.mongolnews.mn/index.php?module=unuudur&sec=view&id=15742 + +# From Deborah Goldsmith (2008-03-30): +# We received a bug report claiming that the tz database UTC offset for +# Asia/Choibalsan (GMT+09:00) is incorrect, and that it should be GMT +# +08:00 instead. Different sources appear to disagree with the tz +# database on this, e.g.: +# +# <a href="http://www.timeanddate.com/worldclock/city.html?n=1026"> +# http://www.timeanddate.com/worldclock/city.html?n=1026 +# </a> +# <a href="http://www.worldtimeserver.com/current_time_in_MN.aspx"> +# http://www.worldtimeserver.com/current_time_in_MN.aspx +# </a> +# +# both say GMT+08:00. + +# From Steffen Thorsen (2008-03-31): +# eznis airways, which operates several domestic flights, has a flight +# schedule here: +# <a href="http://www.eznis.com/Container.jsp?id=112"> +# http://www.eznis.com/Container.jsp?id=112 +# </a> +# (click the English flag for English) +# +# There it appears that flights between Choibalsan and Ulaanbatar arrive +# about 1:35 - 1:50 hours later in local clock time, no matter the +# direction, while Ulaanbaatar-Khvod takes 2 hours in the Eastern +# direction and 3:35 back, which indicates that Ulaanbatar and Khvod are +# in different time zones (like we know about), while Choibalsan and +# Ulaanbatar are in the same time zone (correction needed). + +# From Arthur David Olson (2008-05-19): +# Assume that Choibalsan is indeed offset by 8:00. +# XXX--in the absence of better information, assume that transition +# was at the start of 2008-03-31 (the day of Steffen Thorsen's report); +# this is almost surely wrong. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Mongol 1983 1984 - Apr 1 0:00 1:00 S +Rule Mongol 1983 only - Oct 1 0:00 0 - +# Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00, +# but McDow says the 2001 switches occurred at 02:00. Also, IATA SSIM +# (1996-09) says 1996-10-25. Go with Shanks & Pottenger through 1998. +# +# Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches +# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place +# at 02:00 standard time, not at 00:00 local time as in the rest of +# the country. That would be odd, and possibly is a result of their +# correction of 02:00 (in the previous edition) not being done correctly +# in the latest edition; so ignore it for now. + +Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S +Rule Mongol 1984 1998 - Sep lastSun 0:00 0 - +# IATA SSIM (1999-09) says Mongolia no longer observes DST. +Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S +Rule Mongol 2001 2006 - Sep lastSat 2:00 0 - +Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta +Zone Asia/Hovd 6:06:36 - LMT 1905 Aug + 6:00 - HOVT 1978 # Hovd Time + 7:00 Mongol HOV%sT +# Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga +Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug + 7:00 - ULAT 1978 # Ulaanbaatar Time + 8:00 Mongol ULA%sT +# Choibalsan, a.k.a. Bajan Tuemen, Bajan Tumen, Chojbalsan, +# Choybalsan, Sanbejse, Tchoibalsan +Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug + 7:00 - ULAT 1978 + 8:00 - ULAT 1983 Apr + 9:00 Mongol CHO%sT 2008 Mar 31 # Choibalsan Time + 8:00 Mongol CHO%sT + +# Nepal +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Kathmandu 5:41:16 - LMT 1920 + 5:30 - IST 1986 + 5:45 - NPT # Nepal Time + +# Oman +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Muscat 3:54:20 - LMT 1920 + 4:00 - GST + +# Pakistan + +# From Rives McDow (2002-03-13): +# I have been advised that Pakistan has decided to adopt dst on a +# TRIAL basis for one year, starting 00:01 local time on April 7, 2002 +# and ending at 00:01 local time October 6, 2002. This is what I was +# told, but I believe that the actual time of change may be 00:00; the +# 00:01 was to make it clear which day it was on. + +# From Paul Eggert (2002-03-15): +# Jesper Norgaard found this URL: +# http://www.pak.gov.pk/public/news/app/app06_dec.htm +# (dated 2001-12-06) which says that the Cabinet adopted a scheme "to +# advance the clocks by one hour on the night between the first +# Saturday and Sunday of April and revert to the original position on +# 15th October each year". This agrees with McDow's 04-07 at 00:00, +# but disagrees about the October transition, and makes it sound like +# it's not on a trial basis. Also, the "between the first Saturday +# and Sunday of April" phrase, if taken literally, means that the +# transition takes place at 00:00 on the first Sunday on or after 04-02. + +# From Paul Eggert (2003-02-09): +# DAWN <http://www.dawn.com/2002/10/06/top13.htm> reported on 2002-10-05 +# that 2002 DST ended that day at midnight. Go with McDow for now. + +# From Steffen Thorsen (2003-03-14): +# According to http://www.dawn.com/2003/03/07/top15.htm +# there will be no DST in Pakistan this year: +# +# ISLAMABAD, March 6: Information and Media Development Minister Sheikh +# Rashid Ahmed on Thursday said the cabinet had reversed a previous +# decision to advance clocks by one hour in summer and put them back by +# one hour in winter with the aim of saving light hours and energy. +# +# The minister told a news conference that the experiment had rather +# shown 8 per cent higher consumption of electricity. + +# From Alex Krivenyshev (2008-05-15): +# +# Here is an article that Pakistan plan to introduce Daylight Saving Time +# on June 1, 2008 for 3 months. +# +# "... The federal cabinet on Wednesday announced a new conservation plan to help +# reduce load shedding by approving the closure of commercial centres at 9pm and +# moving clocks forward by one hour for the next three months. +# ...." +# +# <a href="http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html"> +# http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html +# </a> +# OR +# <a href="http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4"> +# http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4 +# </a> + +# From Arthur David Olson (2008-05-19): +# XXX--midnight transitions is a guess; 2008 only is a guess. + +# From Alexander Krivenyshev (2008-08-28): +# Pakistan government has decided to keep the watches one-hour advanced +# for another 2 months--plan to return to Standard Time on October 31 +# instead of August 31. +# +# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html"> +# http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html +# </a> +# OR +# <a href="http://dailymailnews.com/200808/28/news/dmbrn03.html"> +# http://dailymailnews.com/200808/28/news/dmbrn03.html +# </a> + +# From Alexander Krivenyshev (2009-04-08): +# Based on previous media reports that "... proposed plan to +# advance clocks by one hour from May 1 will cause disturbance +# to the working schedules rather than bringing discipline in +# official working." +# <a href="http://www.thenews.com.pk/daily_detail.asp?id=171280"> +# http://www.thenews.com.pk/daily_detail.asp?id=171280 +# </a> +# +# recent news that instead of May 2009 - Pakistan plan to +# introduce DST from April 15, 2009 +# +# FYI: Associated Press Of Pakistan +# April 08, 2009 +# Cabinet okays proposal to advance clocks by one hour from April 15 +# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1"> +# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1 +# </a> +# +# or +# +# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html"> +# http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html +# </a> +# +# .... +# The Federal Cabinet on Wednesday approved the proposal to +# advance clocks in the country by one hour from April 15 to +# conserve energy" + +# From Steffen Thorsen (2009-09-17): +# "The News International," Pakistan reports that: "The Federal +# Government has decided to restore the previous time by moving the +# clocks backward by one hour from October 1. A formal announcement to +# this effect will be made after the Prime Minister grants approval in +# this regard." +# <a href="http://www.thenews.com.pk/updates.asp?id=87168"> +# http://www.thenews.com.pk/updates.asp?id=87168 +# </a> + +# From Alexander Krivenyshev (2009-09-28): +# According to Associated Press Of Pakistan, it is confirmed that +# Pakistan clocks across the country would be turned back by an hour from October +# 1, 2009. +# +# "Clocks to go back one hour from 1 Oct" +# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2"> +# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2 +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm"> +# http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm +# </a> + +# From Steffen Thorsen (2009-09-29): +# Alexander Krivenyshev wrote: +# > According to Associated Press Of Pakistan, it is confirmed that +# > Pakistan clocks across the country would be turned back by an hour from October +# > 1, 2009. +# +# Now they seem to have changed their mind, November 1 is the new date: +# <a href="http://www.thenews.com.pk/top_story_detail.asp?Id=24742"> +# http://www.thenews.com.pk/top_story_detail.asp?Id=24742 +# </a> +# "The country's clocks will be reversed by one hour on November 1. +# Officials of Federal Ministry for Interior told this to Geo News on +# Monday." +# +# And more importantly, it seems that these dates will be kept every year: +# "It has now been decided that clocks will be wound forward by one hour +# on April 15 and reversed by an hour on November 1 every year without +# obtaining prior approval, the officials added." +# +# We have confirmed this year's end date with both with the Ministry of +# Water and Power and the Pakistan Electric Power Company: +# <a href="http://www.timeanddate.com/news/time/pakistan-ends-dst09.html"> +# http://www.timeanddate.com/news/time/pakistan-ends-dst09.html +# </a> + +# From Christoph Goehre (2009-10-01): +# [T]he German Consulate General in Karachi reported me today that Pakistan +# will go back to standard time on 1st of November. + +# From Steffen Thorsen (2010-03-26): +# Steffen Thorsen wrote: +# > On Thursday (2010-03-25) it was announced that DST would start in +# > Pakistan on 2010-04-01. +# > +# > Then today, the president said that they might have to revert the +# > decision if it is not supported by the parliament. So at the time +# > being, it seems unclear if DST will be actually observed or not - but +# > April 1 could be a more likely date than April 15. +# Now, it seems that the decision to not observe DST in final: +# +# "Govt Withdraws Plan To Advance Clocks" +# <a href="http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041"> +# http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041 +# </a> +# +# "People laud PM's announcement to end DST" +# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2"> +# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2 +# </a> + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S +Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 - +Rule Pakistan 2008 only - Jun 1 0:00 1:00 S +Rule Pakistan 2008 only - Nov 1 0:00 0 - +Rule Pakistan 2009 only - Apr 15 0:00 1:00 S +Rule Pakistan 2009 only - Nov 1 0:00 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Karachi 4:28:12 - LMT 1907 + 5:30 - IST 1942 Sep + 5:30 1:00 IST 1945 Oct 15 + 5:30 - IST 1951 Sep 30 + 5:00 - KART 1971 Mar 26 # Karachi Time + 5:00 Pakistan PK%sT # Pakistan Time + +# Palestine + +# From Amos Shapir (1998-02-15): +# +# From 1917 until 1948-05-15, all of Palestine, including the parts now +# known as the Gaza Strip and the West Bank, was under British rule. +# Therefore the rules given for Israel for that period, apply there too... +# +# The Gaza Strip was under Egyptian rule between 1948-05-15 until 1967-06-05 +# (except a short occupation by Israel from 1956-11 till 1957-03, but no +# time zone was affected then). It was never formally annexed to Egypt, +# though. +# +# The rest of Palestine was under Jordanian rule at that time, formally +# annexed in 1950 as the West Bank (and the word "Trans" was dropped from +# the country's previous name of "the Hashemite Kingdom of the +# Trans-Jordan"). So the rules for Jordan for that time apply. Major +# towns in that area are Nablus (Shchem), El-Halil (Hebron), Ramallah, and +# East Jerusalem. +# +# Both areas were occupied by Israel in June 1967, but not annexed (except +# for East Jerusalem). They were on Israel time since then; there might +# have been a Military Governor's order about time zones, but I'm not aware +# of any (such orders may have been issued semi-annually whenever summer +# time was in effect, but maybe the legal aspect of time was just neglected). +# +# The Palestinian Authority was established in 1993, and got hold of most +# towns in the West Bank and Gaza by 1995. I know that in order to +# demonstrate...independence, they have been switching to +# summer time and back on a different schedule than Israel's, but I don't +# know when this was started, or what algorithm is used (most likely the +# Jordanian one). +# +# To summarize, the table should probably look something like that: +# +# Area \ when | 1918-1947 | 1948-1967 | 1967-1995 | 1996- +# ------------+-----------+-----------+-----------+----------- +# Israel | Zion | Zion | Zion | Zion +# West bank | Zion | Jordan | Zion | Jordan +# Gaza | Zion | Egypt | Zion | Jordan +# +# I guess more info may be available from the PA's web page (if/when they +# have one). + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that Gaza did not observe DST until 1957, but go +# with Shapir and assume that it observed DST from 1940 through 1947, +# and that it used Jordanian rules starting in 1996. +# We don't yet need a separate entry for the West Bank, since +# the only differences between it and Gaza that we know about +# occurred before our cutoff date of 1970. +# However, as we get more information, we may need to add entries +# for parts of the West Bank as they transitioned from Israel's rules +# to Palestine's rules. + +# From IINS News Service - Israel - 1998-03-23 10:38:07 Israel time, +# forwarded by Ephraim Silverberg: +# +# Despite the fact that Israel changed over to daylight savings time +# last week, the PLO Authority (PA) has decided not to turn its clocks +# one-hour forward at this time. As a sign of independence from Israeli rule, +# the PA has decided to implement DST in April. + +# From Paul Eggert (1999-09-20): +# Daoud Kuttab writes in +# <a href="http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html"> +# Holiday havoc +# </a> (Jerusalem Post, 1999-04-22) that +# the Palestinian National Authority changed to DST on 1999-04-15. +# I vaguely recall that they switch back in October (sorry, forgot the source). +# For now, let's assume that the spring switch was at 24:00, +# and that they switch at 0:00 on the 3rd Fridays of April and October. + +# From Paul Eggert (2005-11-22): +# Starting 2004 transitions are from Steffen Thorsen's web site timeanddate.com. + +# From Steffen Thorsen (2005-11-23): +# A user from Gaza reported that Gaza made the change early because of +# the Ramadan. Next year Ramadan will be even earlier, so I think +# there is a good chance next year's end date will be around two weeks +# earlier--the same goes for Jordan. + +# From Steffen Thorsen (2006-08-17): +# I was informed by a user in Bethlehem that in Bethlehem it started the +# same day as Israel, and after checking with other users in the area, I +# was informed that they started DST one day after Israel. I was not +# able to find any authoritative sources at the time, nor details if +# Gaza changed as well, but presumed Gaza to follow the same rules as +# the West Bank. + +# From Steffen Thorsen (2006-09-26): +# according to the Palestine News Network (2006-09-19): +# http://english.pnn.ps/index.php?option=com_content&task=view&id=596&Itemid=5 +# > The Council of Ministers announced that this year its winter schedule +# > will begin early, as of midnight Thursday. It is also time to turn +# > back the clocks for winter. Friday will begin an hour late this week. +# I guess it is likely that next year's date will be moved as well, +# because of the Ramadan. + +# From Jesper Norgaard Welen (2007-09-18): +# According to Steffen Thorsen's web site the Gaza Strip and the rest of the +# Palestinian territories left DST early on 13.th. of September at 2:00. + +# From Paul Eggert (2007-09-20): +# My understanding is that Gaza and the West Bank disagree even over when +# the weekend is (Thursday+Friday versus Friday+Saturday), so I'd be a bit +# surprised if they agreed about DST. But for now, assume they agree. +# For lack of better information, predict that future changes will be +# the 2nd Thursday of September at 02:00. + +# From Alexander Krivenyshev (2008-08-28): +# Here is an article, that Mideast running on different clocks at Ramadan. +# +# Gaza Strip (as Egypt) ended DST at midnight Thursday (Aug 28, 2008), while +# the West Bank will end Daylight Saving Time at midnight Sunday (Aug 31, 2008). +# +# <a href="http://www.guardian.co.uk/world/feedarticle/7759001"> +# http://www.guardian.co.uk/world/feedarticle/7759001 +# </a> +# <a href="http://www.abcnews.go.com/International/wireStory?id=5676087"> +# http://www.abcnews.go.com/International/wireStory?id=5676087 +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html"> +# http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html +# </a> + +# From Alexander Krivenyshev (2009-03-26): +# According to the Palestine News Network (arabic.pnn.ps), Palestinian +# government decided to start Daylight Time on Thursday night March +# 26 and continue until the night of 27 September 2009. +# +# (in Arabic) +# <a href="http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850"> +# http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850 +# </a> +# +# or +# (English translation) +# <a href="http://www.worldtimezone.com/dst_news/dst_news_westbank01.html"> +# http://www.worldtimezone.com/dst_news/dst_news_westbank01.html +# </a> + +# From Steffen Thorsen (2009-08-31): +# Palestine's Council of Ministers announced that they will revert back to +# winter time on Friday, 2009-09-04. +# +# One news source: +# <a href="http://www.safa.ps/ara/?action=showdetail&seid=4158"> +# http://www.safa.ps/ara/?action=showdetail&seid=4158 +# </a> +# (Palestinian press agency, Arabic), +# Google translate: "Decided that the Palestinian government in Ramallah +# headed by Salam Fayyad, the start of work in time for the winter of +# 2009, starting on Friday approved the fourth delay Sept. clock sixty +# minutes per hour as of Friday morning." +# +# We are not sure if Gaza will do the same, last year they had a different +# end date, we will keep this page updated: +# <a href="http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html"> +# http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html +# </a> + +# From Alexander Krivenyshev (2009-09-02): +# Seems that Gaza Strip will go back to Winter Time same date as West Bank. +# +# According to Palestinian Ministry Of Interior, West Bank and Gaza Strip plan +# to change time back to Standard time on September 4, 2009. +# +# "Winter time unite the West Bank and Gaza" +# (from Palestinian National Authority): +# <a href="http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505 +# http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505 +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html> +# http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html +# </a> + +# From Alexander Krivenyshev (2010-03-19): +# According to Voice of Palestine DST will last for 191 days, from March +# 26, 2010 till "the last Sunday before the tenth day of Tishri +# (October), each year" (October 03, 2010?) +# +# <a href="http://palvoice.org/forums/showthread.php?t=245697"> +# http://palvoice.org/forums/showthread.php?t=245697 +# </a> +# (in Arabic) +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_westbank03.html"> +# http://www.worldtimezone.com/dst_news/dst_news_westbank03.html +# </a> + +# From Steffen Thorsen (2010-03-24): +# ...Ma'an News Agency reports that Hamas cabinet has decided it will +# start one day later, at 12:01am. Not sure if they really mean 12:01am or +# noon though: +# +# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=271178"> +# http://www.maannews.net/eng/ViewDetails.aspx?ID=271178 +# </a> +# (Ma'an News Agency) +# "At 12:01am Friday, clocks in Israel and the West Bank will change to +# 1:01am, while Gaza clocks will change at 12:01am Saturday morning." + +# From Steffen Thorsen (2010-08-11): +# According to several sources, including +# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=306795"> +# http://www.maannews.net/eng/ViewDetails.aspx?ID=306795 +# </a> +# the clocks were set back one hour at 2010-08-11 00:00:00 local time in +# Gaza and the West Bank. +# Some more background info: +# <a href="http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html"> +# http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html +# </a> + +# From Steffen Thorsen (2011-08-26): +# Gaza and the West Bank did go back to standard time in the beginning of +# August, and will now enter daylight saving time again on 2011-08-30 +# 00:00 (so two periods of DST in 2011). The pause was because of +# Ramadan. +# +# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=416217"> +# http://www.maannews.net/eng/ViewDetails.aspx?ID=416217 +# </a> +# Additional info: +# <a href="http://www.timeanddate.com/news/time/palestine-dst-2011.html"> +# http://www.timeanddate.com/news/time/palestine-dst-2011.html +# </a> + +# From Alexander Krivenyshev (2011-08-27): +# According to the article in The Jerusalem Post: +# "...Earlier this month, the Palestinian government in the West Bank decided to +# move to standard time for 30 days, during Ramadan. The Palestinians in the +# Gaza Strip accepted the change and also moved their clocks one hour back. +# The Hamas government said on Saturday that it won't observe summertime after +# the Muslim feast of Id al-Fitr, which begins on Tuesday..." +# ... +# <a href="http://www.jpost.com/MiddleEast/Article.aspx?id=235650"> +# http://www.jpost.com/MiddleEast/Article.aspx?id=235650 +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html"> +# http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html +# </a> +# The rules for Egypt are stolen from the `africa' file. + +# From Steffen Thorsen (2011-09-30): +# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30 +# 00:00). +# So West Bank and Gaza now have the same time again. +# +# Many sources, including: +# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=424808"> +# http://www.maannews.net/eng/ViewDetails.aspx?ID=424808 +# </a> + +# From Steffen Thorsen (2012-03-26): +# Palestinian news sources tell that both Gaza and West Bank will start DST +# on Friday (Thursday midnight, 2012-03-29 24:00). +# Some of many sources in Arabic: +# <a href="http://www.samanews.com/index.php?act=Show&id=122638"> +# http://www.samanews.com/index.php?act=Show&id=122638 +# </a> +# +# <a href="http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html"> +# http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html +# </a> +# +# Our brief summary: +# <a href="http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html"> +# http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html +# </a> + +# From Arthur David Olson (2012-03-27): +# The timeanddate article for 2012 says that "the end date has not yet been +# announced" and that "Last year, both...paused daylight saving time during... +# Ramadan. It is not yet known [for] 2012." +# For now, assume both switch back on the last Friday in September. XXX + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule EgyptAsia 1957 only - May 10 0:00 1:00 S +Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 - +Rule EgyptAsia 1958 only - May 1 0:00 1:00 S +Rule EgyptAsia 1959 1967 - May 1 1:00 1:00 S +Rule EgyptAsia 1959 1965 - Sep 30 3:00 0 - +Rule EgyptAsia 1966 only - Oct 1 3:00 0 - + +Rule Palestine 1999 2005 - Apr Fri>=15 0:00 1:00 S +Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 - +Rule Palestine 2004 only - Oct 1 1:00 0 - +Rule Palestine 2005 only - Oct 4 2:00 0 - +Rule Palestine 2006 2008 - Apr 1 0:00 1:00 S +Rule Palestine 2006 only - Sep 22 0:00 0 - +Rule Palestine 2007 only - Sep Thu>=8 2:00 0 - +Rule Palestine 2008 only - Aug lastFri 0:00 0 - +Rule Palestine 2009 only - Mar lastFri 0:00 1:00 S +Rule Palestine 2009 only - Sep Fri>=1 2:00 0 - +Rule Palestine 2010 only - Mar lastSat 0:01 1:00 S +Rule Palestine 2010 only - Aug 11 0:00 0 - + +# From Arthur David Olson (2011-09-20): +# 2011 transitions per http://www.timeanddate.com as of 2011-09-20. +# From Paul Eggert (2012-10-12): +# 2012 transitions per http://www.timeanddate.com as of 2012-10-12. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Gaza 2:17:52 - LMT 1900 Oct + 2:00 Zion EET 1948 May 15 + 2:00 EgyptAsia EE%sT 1967 Jun 5 + 2:00 Zion I%sT 1996 + 2:00 Jordan EE%sT 1999 + 2:00 Palestine EE%sT 2011 Apr 2 12:01 + 2:00 1:00 EEST 2011 Aug 1 + 2:00 - EET 2012 Mar 30 + 2:00 1:00 EEST 2012 Sep 21 1:00 + 2:00 - EET + +Zone Asia/Hebron 2:20:23 - LMT 1900 Oct + 2:00 Zion EET 1948 May 15 + 2:00 EgyptAsia EE%sT 1967 Jun 5 + 2:00 Zion I%sT 1996 + 2:00 Jordan EE%sT 1999 + 2:00 Palestine EE%sT 2008 Aug + 2:00 1:00 EEST 2008 Sep + 2:00 Palestine EE%sT 2011 Apr 1 12:01 + 2:00 1:00 EEST 2011 Aug 1 + 2:00 - EET 2011 Aug 30 + 2:00 1:00 EEST 2011 Sep 30 3:00 + 2:00 - EET 2012 Mar 30 + 2:00 1:00 EEST 2012 Sep 21 1:00 + 2:00 - EET + +# Paracel Is +# no information + +# Philippines +# On 1844-08-16, Narciso Claveria, governor-general of the +# Philippines, issued a proclamation announcing that 1844-12-30 was to +# be immediately followed by 1845-01-01. Robert H. van Gent has a +# transcript of the decree in <http://www.phys.uu.nl/~vgent/idl/idl.htm>. +# The rest of the data are from Shanks & Pottenger. + +# From Paul Eggert (2006-04-25): +# Tomorrow's Manila Standard reports that the Philippines Department of +# Trade and Industry is considering adopting DST this June when the +# rainy season begins. See +# <http://www.manilastandardtoday.com/?page=politics02_april26_2006>. +# For now, we'll ignore this, since it's not definite and we lack details. +# +# From Jesper Norgaard Welen (2006-04-26): +# ... claims that Philippines had DST last time in 1990: +# http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/ +# [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires, +# but no details] + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Phil 1936 only - Nov 1 0:00 1:00 S +Rule Phil 1937 only - Feb 1 0:00 0 - +Rule Phil 1954 only - Apr 12 0:00 1:00 S +Rule Phil 1954 only - Jul 1 0:00 0 - +Rule Phil 1978 only - Mar 22 0:00 1:00 S +Rule Phil 1978 only - Sep 21 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31 + 8:04:00 - LMT 1899 May 11 + 8:00 Phil PH%sT 1942 May + 9:00 - JST 1944 Nov + 8:00 Phil PH%sT + +# Qatar +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha + 4:00 - GST 1972 Jun + 3:00 - AST + +# Saudi Arabia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Riyadh 3:06:52 - LMT 1950 + 3:00 - AST + +# Singapore +# The data here are taken from Mok Ly Yng (2003-10-30) +# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1 + 6:55:25 - SMT 1905 Jun 1 # Singapore M.T. + 7:00 - MALT 1933 Jan 1 # Malaya Time + 7:00 0:20 MALST 1936 Jan 1 + 7:20 - MALT 1941 Sep 1 + 7:30 - MALT 1942 Feb 16 + 9:00 - JST 1945 Sep 12 + 7:30 - MALT 1965 Aug 9 # independence + 7:30 - SGT 1982 Jan 1 # Singapore Time + 8:00 - SGT + +# Spratly Is +# no information + +# Sri Lanka +# From Paul Eggert (1996-09-03): +# "Sri Lanka advances clock by an hour to avoid blackout" +# (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24, +# no longer available as of 1999-08-17) +# reported ``the country's standard time will be put forward by one hour at +# midnight Friday (1830 GMT) `in the light of the present power crisis'.'' +# +# From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted +# by Shamindra in +# <a href="news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net"> +# Daily News - Hot News Section (1996-10-26) +# </a>: +# With effect from 12.30 a.m. on 26th October 1996 +# Sri Lanka will be six (06) hours ahead of GMT. + +# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online +# <http://news.sinhalaya.com/wmview.php?ArtID=11002> (2006-04-13): +# 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes) +# at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006). + +# From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in: +# <http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML> +# [The Tamil Tigers] never accepted the original 1996 time change and simply +# kept their clocks set five and a half hours ahead of Greenwich Mean +# Time (GMT), in line with neighbor India. +# From Paul Eggert (2006-04-18): +# People who live in regions under Tamil control can use [TZ='Asia/Kolkata'], +# as that zone has agreed with the Tamil areas since our cutoff date of 1970. + +# From K Sethu (2006-04-25): +# I think the abbreviation LKT originated from the world of computers at +# the time of or subsequent to the time zone changes by SL Government +# twice in 1996 and probably SL Government or its standardization +# agencies never declared an abbreviation as a national standard. +# +# I recollect before the recent change the government annoucemments +# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka +# Time and no mention was made about the abbreviation. +# +# If we look at Sri Lanka Department of Government's "Official News +# Website of Sri Lanka" ... http://www.news.lk/ we can see that they +# use SLT as abbreviation in time stamp at the beginning of each news +# item.... +# +# Within Sri Lanka I think LKT is well known among computer users and +# adminsitrators. In my opinion SLT may not be a good choice because the +# nation's largest telcom / internet operator Sri Lanka Telcom is well +# known by that abbreviation - simply as SLT (there IP domains are +# slt.lk and sltnet.lk). +# +# But if indeed our government has adopted SLT as standard abbreviation +# (that we have not known so far) then it is better that it be used for +# all computers. + +# From Paul Eggert (2006-04-25): +# One possibility is that we wait for a bit for the dust to settle down +# and then see what people actually say in practice. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Colombo 5:19:24 - LMT 1880 + 5:19:32 - MMT 1906 # Moratuwa Mean Time + 5:30 - IST 1942 Jan 5 + 5:30 0:30 IHST 1942 Sep + 5:30 1:00 IST 1945 Oct 16 2:00 + 5:30 - IST 1996 May 25 0:00 + 6:30 - LKT 1996 Oct 26 0:30 + 6:00 - LKT 2006 Apr 15 0:30 + 5:30 - IST + +# Syria +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Syria 1920 1923 - Apr Sun>=15 2:00 1:00 S +Rule Syria 1920 1923 - Oct Sun>=1 2:00 0 - +Rule Syria 1962 only - Apr 29 2:00 1:00 S +Rule Syria 1962 only - Oct 1 2:00 0 - +Rule Syria 1963 1965 - May 1 2:00 1:00 S +Rule Syria 1963 only - Sep 30 2:00 0 - +Rule Syria 1964 only - Oct 1 2:00 0 - +Rule Syria 1965 only - Sep 30 2:00 0 - +Rule Syria 1966 only - Apr 24 2:00 1:00 S +Rule Syria 1966 1976 - Oct 1 2:00 0 - +Rule Syria 1967 1978 - May 1 2:00 1:00 S +Rule Syria 1977 1978 - Sep 1 2:00 0 - +Rule Syria 1983 1984 - Apr 9 2:00 1:00 S +Rule Syria 1983 1984 - Oct 1 2:00 0 - +Rule Syria 1986 only - Feb 16 2:00 1:00 S +Rule Syria 1986 only - Oct 9 2:00 0 - +Rule Syria 1987 only - Mar 1 2:00 1:00 S +Rule Syria 1987 1988 - Oct 31 2:00 0 - +Rule Syria 1988 only - Mar 15 2:00 1:00 S +Rule Syria 1989 only - Mar 31 2:00 1:00 S +Rule Syria 1989 only - Oct 1 2:00 0 - +Rule Syria 1990 only - Apr 1 2:00 1:00 S +Rule Syria 1990 only - Sep 30 2:00 0 - +Rule Syria 1991 only - Apr 1 0:00 1:00 S +Rule Syria 1991 1992 - Oct 1 0:00 0 - +Rule Syria 1992 only - Apr 8 0:00 1:00 S +Rule Syria 1993 only - Mar 26 0:00 1:00 S +Rule Syria 1993 only - Sep 25 0:00 0 - +# IATA SSIM (1998-02) says 1998-04-02; +# (1998-09) says 1999-03-29 and 1999-09-29; (1999-02) says 1999-04-02, +# 2000-04-02, and 2001-04-02; (1999-09) says 2000-03-31 and 2001-03-31; +# (2006) says 2006-03-31 and 2006-09-22; +# for now ignore all these claims and go with Shanks & Pottenger, +# except for the 2006-09-22 claim (which seems right for Ramadan). +Rule Syria 1994 1996 - Apr 1 0:00 1:00 S +Rule Syria 1994 2005 - Oct 1 0:00 0 - +Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S +Rule Syria 1999 2006 - Apr 1 0:00 1:00 S +# From Stephen Colebourne (2006-09-18): +# According to IATA data, Syria will change DST on 21st September [21:00 UTC] +# this year [only].... This is probably related to Ramadan, like Egypt. +Rule Syria 2006 only - Sep 22 0:00 0 - +# From Paul Eggert (2007-03-29): +# Today the AP reported "Syria will switch to summertime at midnight Thursday." +# http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php +Rule Syria 2007 only - Mar lastFri 0:00 1:00 S +# From Jesper Norgard (2007-10-27): +# The sister center ICARDA of my work CIMMYT is confirming that Syria DST will +# not take place 1.st November at 0:00 o'clock but 1.st November at 24:00 or +# rather Midnight between Thursday and Friday. This does make more sence than +# having it between Wednesday and Thursday (two workdays in Syria) since the +# weekend in Syria is not Saturday and Sunday, but Friday and Saturday. So now +# it is implemented at midnight of the last workday before weekend... +# +# From Steffen Thorsen (2007-10-27): +# Jesper Norgaard Welen wrote: +# +# > "Winter local time in Syria will be observed at midnight of Thursday 1 +# > November 2007, and the clock will be put back 1 hour." +# +# I found confirmation on this in this gov.sy-article (Arabic): +# http://wehda.alwehda.gov.sy/_print_veiw.asp?FileName=12521710520070926111247 +# +# which using Google's translate tools says: +# Council of Ministers also approved the commencement of work on +# identifying the winter time as of Friday, 2/11/2007 where the 60th +# minute delay at midnight Thursday 1/11/2007. +Rule Syria 2007 only - Nov Fri>=1 0:00 0 - + +# From Stephen Colebourne (2008-03-17): +# For everyone's info, I saw an IATA time zone change for [Syria] for +# this month (March 2008) in the last day or so...This is the data IATA +# are now using: +# Country Time Standard --- DST Start --- --- DST End --- DST +# Name Zone Variation Time Date Time Date +# Variation +# Syrian Arab +# Republic SY +0200 2200 03APR08 2100 30SEP08 +0300 +# 2200 02APR09 2100 30SEP09 +0300 +# 2200 01APR10 2100 30SEP10 +0300 + +# From Arthur David Olson (2008-03-17): +# Here's a link to English-language coverage by the Syrian Arab News +# Agency (SANA)... +# <a href="http://www.sana.sy/eng/21/2008/03/11/165173.htm"> +# http://www.sana.sy/eng/21/2008/03/11/165173.htm +# </a>...which reads (in part) "The Cabinet approved the suggestion of the +# Ministry of Electricity to begin daylight savings time on Friday April +# 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd." +# Since Syria is two hours east of UTC, the 2200 and 2100 transition times +# shown above match up with midnight in Syria. + +# From Arthur David Olson (2008-03-18): +# My buest guess at a Syrian rule is "the Friday nearest April 1"; +# coding that involves either using a "Mar Fri>=29" construct that old time zone +# compilers can't handle or having multiple Rules (a la Israel). +# For now, use "Apr Fri>=1", and go with IATA on a uniform Sep 30 end. + +# From Steffen Thorsen (2008-10-07): +# Syria has now officially decided to end DST on 2008-11-01 this year, +# according to the following article in the Syrian Arab News Agency (SANA). +# +# The article is in Arabic, and seems to tell that they will go back to +# winter time on 2008-11-01 at 00:00 local daylight time (delaying/setting +# clocks back 60 minutes). +# +# <a href="http://sana.sy/ara/2/2008/10/07/195459.htm"> +# http://sana.sy/ara/2/2008/10/07/195459.htm +# </a> + +# From Steffen Thorsen (2009-03-19): +# Syria will start DST on 2009-03-27 00:00 this year according to many sources, +# two examples: +# +# <a href="http://www.sana.sy/eng/21/2009/03/17/217563.htm"> +# http://www.sana.sy/eng/21/2009/03/17/217563.htm +# </a> +# (English, Syrian Arab News # Agency) +# <a href="http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209"> +# http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209 +# </a> +# (Arabic, gov-site) +# +# We have not found any sources saying anything about when DST ends this year. +# +# Our summary +# <a href="http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html"> +# http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html +# </a> + +# From Steffen Thorsen (2009-10-27): +# The Syrian Arab News Network on 2009-09-29 reported that Syria will +# revert back to winter (standard) time on midnight between Thursday +# 2009-10-29 and Friday 2009-10-30: +# <a href="http://www.sana.sy/ara/2/2009/09/29/247012.htm"> +# http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic) +# </a> + +# From Arthur David Olson (2009-10-28): +# We'll see if future DST switching times turn out to be end of the last +# Thursday of the month or the start of the last Friday of the month or +# something else. For now, use the start of the last Friday. + +# From Steffen Thorsen (2010-03-17): +# The "Syrian News Station" reported on 2010-03-16 that the Council of +# Ministers has decided that Syria will start DST on midnight Thursday +# 2010-04-01: (midnight between Thursday and Friday): +# <a href="http://sns.sy/sns/?path=news/read/11421"> +# http://sns.sy/sns/?path=news/read/11421 (Arabic) +# </a> + +# From Steffen Thorsen (2012-03-26): +# Today, Syria's government announced that they will start DST early on Friday +# (00:00). This is a bit earlier than the past two years. +# +# From Syrian Arab News Agency, in Arabic: +# <a href="http://www.sana.sy/ara/2/2012/03/26/408215.htm"> +# http://www.sana.sy/ara/2/2012/03/26/408215.htm +# </a> +# +# Our brief summary: +# <a href="http://www.timeanddate.com/news/time/syria-dst-2012.html"> +# http://www.timeanddate.com/news/time/syria-dst-2012.html +# </a> + +# From Arthur David Olson (2012-03-27): +# Assume last Friday in March going forward XXX. + +Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S +Rule Syria 2008 only - Nov 1 0:00 0 - +Rule Syria 2009 only - Mar lastFri 0:00 1:00 S +Rule Syria 2010 2011 - Apr Fri>=1 0:00 1:00 S +Rule Syria 2012 max - Mar lastFri 0:00 1:00 S +Rule Syria 2009 max - Oct lastFri 0:00 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq + 2:00 Syria EE%sT + +# Tajikistan +# From Shanks & Pottenger. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2 + 5:00 - DUST 1930 Jun 21 # Dushanbe Time + 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s + 5:00 1:00 DUSST 1991 Sep 9 2:00s + 5:00 - TJT # Tajikistan Time + +# Thailand +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Bangkok 6:42:04 - LMT 1880 + 6:42:04 - BMT 1920 Apr # Bangkok Mean Time + 7:00 - ICT + +# Turkmenistan +# From Shanks & Pottenger. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad + 4:00 - ASHT 1930 Jun 21 # Ashkhabad Time + 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00 + 4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence + 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00 + 5:00 - TMT + +# United Arab Emirates +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Dubai 3:41:12 - LMT 1920 + 4:00 - GST + +# Uzbekistan +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Samarkand 4:27:12 - LMT 1924 May 2 + 4:00 - SAMT 1930 Jun 21 # Samarkand Time + 5:00 - SAMT 1981 Apr 1 + 5:00 1:00 SAMST 1981 Oct 1 + 6:00 - TAST 1982 Apr 1 # Tashkent Time + 5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence + 5:00 RussiaAsia UZ%sT 1992 + 5:00 - UZT +Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2 + 5:00 - TAST 1930 Jun 21 # Tashkent Time + 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00 + 5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence + 5:00 RussiaAsia UZ%sT 1992 + 5:00 - UZT + +# Vietnam + +# From Arthur David Olson (2008-03-18): +# The English-language name of Vietnam's most populous city is "Ho Chi Min City"; +# we use Ho_Chi_Minh below to avoid a name of more than 14 characters. + +# From Shanks & Pottenger: +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jun 9 + 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? + 7:00 - ICT 1912 May + 8:00 - ICT 1931 May + 7:00 - ICT + +# Yemen +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Aden 3:00:48 - LMT 1950 + 3:00 - AST diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/australasia b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/australasia new file mode 100644 index 0000000..bef6f20 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/australasia @@ -0,0 +1,1719 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# This file also includes Pacific islands. + +# Notes are at the end of this file + +############################################################################### + +# Australia + +# Please see the notes below for the controversy about "EST" versus "AEST" etc. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Aus 1917 only - Jan 1 0:01 1:00 - +Rule Aus 1917 only - Mar 25 2:00 0 - +Rule Aus 1942 only - Jan 1 2:00 1:00 - +Rule Aus 1942 only - Mar 29 2:00 0 - +Rule Aus 1942 only - Sep 27 2:00 1:00 - +Rule Aus 1943 1944 - Mar lastSun 2:00 0 - +Rule Aus 1943 only - Oct 3 2:00 1:00 - +# Go with Whitman and the Australian National Standards Commission, which +# says W Australia didn't use DST in 1943/1944. Ignore Whitman's claim that +# 1944/1945 was just like 1943/1944. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Northern Territory +Zone Australia/Darwin 8:43:20 - LMT 1895 Feb + 9:00 - CST 1899 May + 9:30 Aus CST +# Western Australia +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AW 1974 only - Oct lastSun 2:00s 1:00 - +Rule AW 1975 only - Mar Sun>=1 2:00s 0 - +Rule AW 1983 only - Oct lastSun 2:00s 1:00 - +Rule AW 1984 only - Mar Sun>=1 2:00s 0 - +Rule AW 1991 only - Nov 17 2:00s 1:00 - +Rule AW 1992 only - Mar Sun>=1 2:00s 0 - +Rule AW 2006 only - Dec 3 2:00s 1:00 - +Rule AW 2007 2009 - Mar lastSun 2:00s 0 - +Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 - +Zone Australia/Perth 7:43:24 - LMT 1895 Dec + 8:00 Aus WST 1943 Jul + 8:00 AW WST +Zone Australia/Eucla 8:35:28 - LMT 1895 Dec + 8:45 Aus CWST 1943 Jul + 8:45 AW CWST + +# Queensland +# +# From Alex Livingston (1996-11-01): +# I have heard or read more than once that some resort islands off the coast +# of Queensland chose to keep observing daylight-saving time even after +# Queensland ceased to. +# +# From Paul Eggert (1996-11-22): +# IATA SSIM (1993-02/1994-09) say that the Holiday Islands (Hayman, Lindeman, +# Hamilton) observed DST for two years after the rest of Queensland stopped. +# Hamilton is the largest, but there is also a Hamilton in Victoria, +# so use Lindeman. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AQ 1971 only - Oct lastSun 2:00s 1:00 - +Rule AQ 1972 only - Feb lastSun 2:00s 0 - +Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 - +Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 - +Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 - +Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 - +Zone Australia/Brisbane 10:12:08 - LMT 1895 + 10:00 Aus EST 1971 + 10:00 AQ EST +Zone Australia/Lindeman 9:55:56 - LMT 1895 + 10:00 Aus EST 1971 + 10:00 AQ EST 1992 Jul + 10:00 Holiday EST + +# South Australia +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 - +Rule AS 1986 only - Oct 19 2:00s 1:00 - +Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 - +Rule AS 1972 only - Feb 27 2:00s 0 - +Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 - +Rule AS 1986 1990 - Mar Sun>=15 2:00s 0 - +Rule AS 1991 only - Mar 3 2:00s 0 - +Rule AS 1992 only - Mar 22 2:00s 0 - +Rule AS 1993 only - Mar 7 2:00s 0 - +Rule AS 1994 only - Mar 20 2:00s 0 - +Rule AS 1995 2005 - Mar lastSun 2:00s 0 - +Rule AS 2006 only - Apr 2 2:00s 0 - +Rule AS 2007 only - Mar lastSun 2:00s 0 - +Rule AS 2008 max - Apr Sun>=1 2:00s 0 - +Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb + 9:00 - CST 1899 May + 9:30 Aus CST 1971 + 9:30 AS CST + +# Tasmania +# +# From Paul Eggert (2005-08-16): +# <http://www.bom.gov.au/climate/averages/tables/dst_times.shtml> +# says King Island didn't observe DST from WWII until late 1971. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 - +Rule AT 1968 only - Mar lastSun 2:00s 0 - +Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 - +Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 - +Rule AT 1972 only - Feb lastSun 2:00s 0 - +Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 - +Rule AT 1982 1983 - Mar lastSun 2:00s 0 - +Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 - +Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 - +Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 - +Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 - +Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 - +Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 - +Rule AT 1991 2005 - Mar lastSun 2:00s 0 - +Rule AT 2000 only - Aug lastSun 2:00s 1:00 - +Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 - +Rule AT 2006 only - Apr Sun>=1 2:00s 0 - +Rule AT 2007 only - Mar lastSun 2:00s 0 - +Rule AT 2008 max - Apr Sun>=1 2:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Australia/Hobart 9:49:16 - LMT 1895 Sep + 10:00 - EST 1916 Oct 1 2:00 + 10:00 1:00 EST 1917 Feb + 10:00 Aus EST 1967 + 10:00 AT EST +Zone Australia/Currie 9:35:28 - LMT 1895 Sep + 10:00 - EST 1916 Oct 1 2:00 + 10:00 1:00 EST 1917 Feb + 10:00 Aus EST 1971 Jul + 10:00 AT EST + +# Victoria +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 - +Rule AV 1972 only - Feb lastSun 2:00s 0 - +Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 - +Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 - +Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 - +Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 - +Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 - +Rule AV 1995 2005 - Mar lastSun 2:00s 0 - +Rule AV 2000 only - Aug lastSun 2:00s 1:00 - +Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 - +Rule AV 2006 only - Apr Sun>=1 2:00s 0 - +Rule AV 2007 only - Mar lastSun 2:00s 0 - +Rule AV 2008 max - Apr Sun>=1 2:00s 0 - +Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb + 10:00 Aus EST 1971 + 10:00 AV EST + +# New South Wales +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 - +Rule AN 1972 only - Feb 27 2:00s 0 - +Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 - +Rule AN 1982 only - Apr Sun>=1 2:00s 0 - +Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 - +Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 - +Rule AN 1986 only - Oct 19 2:00s 1:00 - +Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 - +Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 - +Rule AN 1996 2005 - Mar lastSun 2:00s 0 - +Rule AN 2000 only - Aug lastSun 2:00s 1:00 - +Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 - +Rule AN 2006 only - Apr Sun>=1 2:00s 0 - +Rule AN 2007 only - Mar lastSun 2:00s 0 - +Rule AN 2008 max - Apr Sun>=1 2:00s 0 - +Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Australia/Sydney 10:04:52 - LMT 1895 Feb + 10:00 Aus EST 1971 + 10:00 AN EST +Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb + 10:00 - EST 1896 Aug 23 + 9:00 - CST 1899 May + 9:30 Aus CST 1971 + 9:30 AN CST 2000 + 9:30 AS CST + +# Lord Howe Island +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule LH 1981 1984 - Oct lastSun 2:00 1:00 - +Rule LH 1982 1985 - Mar Sun>=1 2:00 0 - +Rule LH 1985 only - Oct lastSun 2:00 0:30 - +Rule LH 1986 1989 - Mar Sun>=15 2:00 0 - +Rule LH 1986 only - Oct 19 2:00 0:30 - +Rule LH 1987 1999 - Oct lastSun 2:00 0:30 - +Rule LH 1990 1995 - Mar Sun>=1 2:00 0 - +Rule LH 1996 2005 - Mar lastSun 2:00 0 - +Rule LH 2000 only - Aug lastSun 2:00 0:30 - +Rule LH 2001 2007 - Oct lastSun 2:00 0:30 - +Rule LH 2006 only - Apr Sun>=1 2:00 0 - +Rule LH 2007 only - Mar lastSun 2:00 0 - +Rule LH 2008 max - Apr Sun>=1 2:00 0 - +Rule LH 2008 max - Oct Sun>=1 2:00 0:30 - +Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb + 10:00 - EST 1981 Mar + 10:30 LH LHST + +# Australian miscellany +# +# Ashmore Is, Cartier +# no indigenous inhabitants; only seasonal caretakers +# no times are set +# +# Coral Sea Is +# no indigenous inhabitants; only meteorologists +# no times are set +# +# Macquarie +# permanent occupation (scientific station) since 1948; +# sealing and penguin oil station operated 1888/1917 +# like Australia/Hobart + +# Christmas +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Christmas 7:02:52 - LMT 1895 Feb + 7:00 - CXT # Christmas Island Time + +# Cook Is +# From Shanks & Pottenger: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Cook 1978 only - Nov 12 0:00 0:30 HS +Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 - +Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua + -10:30 - CKT 1978 Nov 12 # Cook Is Time + -10:00 Cook CK%sT + +# Cocos +# These islands were ruled by the Ross family from about 1830 to 1978. +# We don't know when standard time was introduced; for now, we guess 1900. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Cocos 6:27:40 - LMT 1900 + 6:30 - CCT # Cocos Islands Time + +# Fiji +# From Alexander Krivenyshev (2009-11-10): +# According to Fiji Broadcasting Corporation, Fiji plans to re-introduce DST +# from November 29th 2009 to April 25th 2010. +# +# "Daylight savings to commence this month" +# <a href="http://www.radiofiji.com.fj/fullstory.php?id=23719"> +# http://www.radiofiji.com.fj/fullstory.php?id=23719 +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_fiji01.html"> +# http://www.worldtimezone.com/dst_news/dst_news_fiji01.html +# </a> + +# From Steffen Thorsen (2009-11-10): +# The Fiji Government has posted some more details about the approved +# amendments: +# <a href="http://www.fiji.gov.fj/publish/page_16198.shtml"> +# http://www.fiji.gov.fj/publish/page_16198.shtml +# </a> + +# From Steffen Thorsen (2010-03-03): +# The Cabinet in Fiji has decided to end DST about a month early, on +# 2010-03-28 at 03:00. +# The plan is to observe DST again, from 2010-10-24 to sometime in March +# 2011 (last Sunday a good guess?). +# +# Official source: +# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166"> +# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166 +# </a> +# +# A bit more background info here: +# <a href="http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html"> +# http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html +# </a> + +# From Alexander Krivenyshev (2010-10-24): +# According to Radio Fiji and Fiji Times online, Fiji will end DST 3 +# weeks earlier than expected - on March 6, 2011, not March 27, 2011... +# Here is confirmation from Government of the Republic of the Fiji Islands, +# Ministry of Information (fiji.gov.fj) web site: +# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155"> +# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155 +# </a> +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_fiji04.html"> +# http://www.worldtimezone.com/dst_news/dst_news_fiji04.html +# </a> + +# From Steffen Thorsen (2011-10-03): +# Now the dates have been confirmed, and at least our start date +# assumption was correct (end date was one week wrong). +# +# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155"> +# www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155 +# </a> +# which says +# Members of the public are reminded to change their time to one hour in +# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to +# 2am on February 26 next year. + +# From Ken Rylander (2011-10-24) +# Another change to the Fiji DST end date. In the TZ database the end date for +# Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22. +# +# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155"> +# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155 +# </a> +# states: +# +# The end of daylight saving scheduled initially for the 26th of February 2012 +# has been brought forward to the 22nd of January 2012. +# The commencement of daylight saving will remain unchanged and start +# on the 23rd of October, 2011. + +# From the Fiji Government Online Portal (2012-08-21) via Steffen Thorsen: +# The Minister for Labour, Industrial Relations and Employment Mr Jone Usamate +# today confirmed that Fiji will start daylight savings at 2 am on Sunday 21st +# October 2012 and end at 3 am on Sunday 20th January 2013. +# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155 +# +# From Paul Eggert (2012-08-31): +# For now, guess a pattern of the penultimate Sundays in October and January. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S +Rule Fiji 1999 2000 - Feb lastSun 3:00 0 - +Rule Fiji 2009 only - Nov 29 2:00 1:00 S +Rule Fiji 2010 only - Mar lastSun 3:00 0 - +Rule Fiji 2010 max - Oct Sun>=18 2:00 1:00 S +Rule Fiji 2011 only - Mar Sun>=1 3:00 0 - +Rule Fiji 2012 max - Jan Sun>=18 3:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva + 12:00 Fiji FJ%sT # Fiji Time + +# French Polynesia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea + -9:00 - GAMT # Gambier Time +Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct + -9:30 - MART # Marquesas Time +Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete + -10:00 - TAHT # Tahiti Time +# Clipperton (near North America) is administered from French Polynesia; +# it is uninhabited. + +# Guam +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31 + 9:39:00 - LMT 1901 # Agana + 10:00 - GST 2000 Dec 23 # Guam + 10:00 - ChST # Chamorro Standard Time + +# Kiribati +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki + 12:00 - GILT # Gilbert Is Time +Zone Pacific/Enderbury -11:24:20 - LMT 1901 + -12:00 - PHOT 1979 Oct # Phoenix Is Time + -11:00 - PHOT 1995 + 13:00 - PHOT +Zone Pacific/Kiritimati -10:29:20 - LMT 1901 + -10:40 - LINT 1979 Oct # Line Is Time + -10:00 - LINT 1995 + 14:00 - LINT + +# N Mariana Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31 + 9:43:00 - LMT 1901 + 9:00 - MPT 1969 Oct # N Mariana Is Time + 10:00 - MPT 2000 Dec 23 + 10:00 - ChST # Chamorro Standard Time + +# Marshall Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Majuro 11:24:48 - LMT 1901 + 11:00 - MHT 1969 Oct # Marshall Islands Time + 12:00 - MHT +Zone Pacific/Kwajalein 11:09:20 - LMT 1901 + 11:00 - MHT 1969 Oct + -12:00 - KWAT 1993 Aug 20 # Kwajalein Time + 12:00 - MHT + +# Micronesia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Chuuk 10:07:08 - LMT 1901 + 10:00 - CHUT # Chuuk Time +Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia + 11:00 - PONT # Pohnpei Time +Zone Pacific/Kosrae 10:51:56 - LMT 1901 + 11:00 - KOST 1969 Oct # Kosrae Time + 12:00 - KOST 1999 + 11:00 - KOST + +# Nauru +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe + 11:30 - NRT 1942 Mar 15 # Nauru Time + 9:00 - JST 1944 Aug 15 + 11:30 - NRT 1979 May + 12:00 - NRT + +# New Caledonia +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 S +Rule NC 1978 1979 - Feb 27 0:00 0 - +Rule NC 1996 only - Dec 1 2:00s 1:00 S +# Shanks & Pottenger say the following was at 2:00; go with IATA. +Rule NC 1997 only - Mar 2 2:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13 + 11:00 NC NC%sT + + +############################################################################### + +# New Zealand + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NZ 1927 only - Nov 6 2:00 1:00 S +Rule NZ 1928 only - Mar 4 2:00 0 M +Rule NZ 1928 1933 - Oct Sun>=8 2:00 0:30 S +Rule NZ 1929 1933 - Mar Sun>=15 2:00 0 M +Rule NZ 1934 1940 - Apr lastSun 2:00 0 M +Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S +Rule NZ 1946 only - Jan 1 0:00 0 S +# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no +# convenient notation for this so we must duplicate the Rule lines. +Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D +Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D +Rule NZ 1975 only - Feb lastSun 2:00s 0 S +Rule Chatham 1975 only - Feb lastSun 2:45s 0 S +Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D +Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 D +Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S +Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 S +Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D +Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 D +Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D +Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 D +Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S +Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 S +Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D +Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 D +Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S +Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2 + 11:30 NZ NZ%sT 1946 Jan 1 + 12:00 NZ NZ%sT +Zone Pacific/Chatham 12:13:48 - LMT 1957 Jan 1 + 12:45 Chatham CHA%sT + + +# Auckland Is +# uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers, +# and scientific personnel have wintered + +# Campbell I +# minor whaling stations operated 1909/1914 +# scientific station operated 1941/1995; +# previously whalers, sealers, pastoralists, and scientific personnel wintered +# was probably like Pacific/Auckland + +############################################################################### + + +# Niue +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi + -11:20 - NUT 1951 # Niue Time + -11:30 - NUT 1978 Oct 1 + -11:00 - NUT + +# Norfolk +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston + 11:12 - NMT 1951 # Norfolk Mean Time + 11:30 - NFT # Norfolk Time + +# Palau (Belau) +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror + 9:00 - PWT # Palau Time + +# Papua New Guinea +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Port_Moresby 9:48:40 - LMT 1880 + 9:48:32 - PMMT 1895 # Port Moresby Mean Time + 10:00 - PGT # Papua New Guinea Time + +# Pitcairn +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown + -8:30 - PNT 1998 Apr 27 00:00 + -8:00 - PST # Pitcairn Standard Time + +# American Samoa +Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5 + -11:22:48 - LMT 1911 + -11:30 - SAMT 1950 # Samoa Time + -11:00 - NST 1967 Apr # N=Nome + -11:00 - BST 1983 Nov 30 # B=Bering + -11:00 - SST # S=Samoa + +# Samoa + +# From Steffen Thorsen (2009-10-16): +# We have been in contact with the government of Samoa again, and received +# the following info: +# +# "Cabinet has now approved Daylight Saving to be effected next year +# commencing from the last Sunday of September 2010 and conclude first +# Sunday of April 2011." +# +# Background info: +# <a href="http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html"> +# http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html +# </a> +# +# Samoa's Daylight Saving Time Act 2009 is available here, but does not +# contain any dates: +# <a href="http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf"> +# http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf +# </a> + +# From Laupue Raymond Hughes (2010-10-07): +# Please see +# <a href="http://www.mcil.gov.ws"> +# http://www.mcil.gov.ws +# </a>, +# the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday +# September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight +# to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks +# backwards from 1:00am to 12:00am" + +# From Laupue Raymond Hughes (2011-03-07): +# I believe this will be posted shortly on the website +# <a href="http://www.mcil.gov.ws"> +# www.mcil.gov.ws +# </a> +# +# PUBLIC NOTICE ON DAYLIGHT SAVING TIME +# +# Pursuant to the Daylight Saving Act 2009 and Cabinets decision, +# businesses and the general public are hereby advised that daylight +# saving time is on the first Saturday of April 2011 (02/04/11). +# +# The public is therefore advised that when the standard time strikes +# the hour of four oclock (4.00am or 0400 Hours) on the 2nd April 2011, +# then all instruments used to measure standard time are to be +# adjusted/changed to three oclock (3:00am or 0300Hrs). +# +# Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE, +# INDUSTRY AND LABOUR 28th February 2011 + +# From David Zuelke (2011-05-09): +# Subject: Samoa to move timezone from east to west of international date line +# +# <a href="http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963"> +# http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963 +# </a> + +# From Mark Sim-Smith (2011-08-17): +# I have been in contact with Leilani Tuala Warren from the Samoa Law +# Reform Commission, and she has sent me a copy of the Bill that she +# confirmed has been passed...Most of the sections are about maps rather +# than the time zone change, but I'll paste the relevant bits below. But +# the essence is that at midnight 29 Dec (UTC-11 I suppose), Samoa +# changes from UTC-11 to UTC+13: +# +# International Date Line Bill 2011 +# +# AN ACT to provide for the change to standard time in Samoa and to make +# consequential amendments to the position of the International Date +# Line, and for related purposes. +# +# BE IT ENACTED by the Legislative Assembly of Samoa in Parliament +# assembled as follows: +# +# 1. Short title and commencement-(1) This Act may be cited as the +# International Date Line Act 2011. (2) Except for section 5(3) this Act +# commences at 12 o'clock midnight, on Thursday 29th December 2011. (3) +# Section 5(3) commences on the date of assent by the Head of State. +# +# [snip] +# +# 3. Interpretation - [snip] "Samoa standard time" in this Act and any +# other statute of Samoa which refers to 'Samoa standard time' means the +# time 13 hours in advance of Co-ordinated Universal Time. +# +# 4. Samoa standard time - (1) Upon the commencement of this Act, Samoa +# standard time shall be set at 13 hours in advance of Co-ordinated +# Universal Time for the whole of Samoa. (2) All references to Samoa's +# time zone and to Samoa standard time in Samoa in all legislation and +# instruments after the commencement of this Act shall be references to +# Samoa standard time as provided for in this Act. (3) Nothing in this +# Act affects the provisions of the Daylight Saving Act 2009, except that +# it defines Samoa standard time.... + +# From Laupue Raymond Hughes (2011-09-02): +# <a href="http://www.mcil.gov.ws/mcil_publications.html"> +# http://www.mcil.gov.ws/mcil_publications.html +# </a> +# +# here is the official website publication for Samoa DST and dateline change +# +# DST +# Year End Time Start Time +# 2011 - - - - - - 24 September 3:00am to 4:00am +# 2012 01 April 4:00am to 3:00am - - - - - - +# +# Dateline Change skip Friday 30th Dec 2011 +# Thursday 29th December 2011 23:59:59 Hours +# Saturday 31st December 2011 00:00:00 Hours +# +# Clarification by Tim Parenti (2012-01-03): +# Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012 +# seasons, there is not yet any indication that this trend will continue on +# a regular basis. For now, we have explicitly listed the transitions below. +# +# From Nicky (2012-09-10): +# Daylight Saving Time commences on Sunday 30th September 2012 and +# ends on Sunday 7th of April 2013. +# +# Please find link below for more information. +# http://www.mcil.gov.ws/mcil_publications.html +# +# That publication also includes dates for Summer of 2013/4 as well +# which give the impression of a pattern in selecting dates for the +# future, so for now, we will guess this will continue. + +# Western Samoa +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule WS 2012 max - Sep lastSun 3:00 1 D +Rule WS 2012 max - Apr Sun>=1 4:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5 + -11:26:56 - LMT 1911 + -11:30 - SAMT 1950 # Samoa Time + -11:00 - WST 2010 Sep 26 + -11:00 1:00 WSDT 2011 Apr 2 4:00 + -11:00 - WST 2011 Sep 24 3:00 + -11:00 1:00 WSDT 2011 Dec 30 + 13:00 1:00 WSDT 2012 Apr Sun>=1 4:00 + 13:00 WS WS%sT + +# Solomon Is +# excludes Bougainville, for which see Papua New Guinea +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara + 11:00 - SBT # Solomon Is Time + +# Tokelau Is +# +# From Gwillim Law (2011-12-29) +# A correspondent informed me that Tokelau, like Samoa, will be skipping +# December 31 this year ... +# +# From Steffen Thorsen (2012-07-25) +# ... we double checked by calling hotels and offices based in Tokelau asking +# about the time there, and they all told a time that agrees with UTC+13.... +# Shanks says UTC-10 from 1901 [but] ... there is a good chance the change +# actually was to UTC-11 back then. +# +# From Paul Eggert (2012-07-25) +# A Google Books snippet of Appendix to the Journals of the House of +# Representatives of New Zealand, Session 1948, +# <http://books.google.com/books?id=ZaVCAQAAIAAJ>, page 65, says Tokelau +# was "11 hours slow on G.M.T." Go with Thorsen and assume Shanks & Pottenger +# are off by an hour starting in 1901. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Fakaofo -11:24:56 - LMT 1901 + -11:00 - TKT 2011 Dec 30 # Tokelau Time + 13:00 - TKT + +# Tonga +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Tonga 1999 only - Oct 7 2:00s 1:00 S +Rule Tonga 2000 only - Mar 19 2:00s 0 - +Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 S +Rule Tonga 2001 2002 - Jan lastSun 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Tongatapu 12:19:20 - LMT 1901 + 12:20 - TOT 1941 # Tonga Time + 13:00 - TOT 1999 + 13:00 Tonga TO%sT + +# Tuvalu +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Funafuti 11:56:52 - LMT 1901 + 12:00 - TVT # Tuvalu Time + + +# US minor outlying islands + +# Howland, Baker +# Howland was mined for guano by American companies 1857-1878 and British +# 1886-1891; Baker was similar but exact dates are not known. +# Inhabited by civilians 1935-1942; U.S. military bases 1943-1944; +# uninhabited thereafter. +# Howland observed Hawaii Standard Time (UTC-10:30) in 1937; +# see page 206 of Elgen M. Long and Marie K. Long, +# Amelia Earhart: the Mystery Solved, Simon & Schuster (2000). +# So most likely Howland and Baker observed Hawaii Time from 1935 +# until they were abandoned after the war. + +# Jarvis +# Mined for guano by American companies 1857-1879 and British 1883?-1891?. +# Inhabited by civilians 1935-1942; IGY scientific base 1957-1958; +# uninhabited thereafter. +# no information; was probably like Pacific/Kiritimati + +# Johnston +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Johnston -10:00 - HST + +# Kingman +# uninhabited + +# Midway +# +# From Mark Brader (2005-01-23): +# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies, +# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3] +# reproduced a Pan American Airways timeables from 1936, for their weekly +# "Orient Express" flights between San Francisco and Manila, and connecting +# flights to Chicago and the US East Coast. As it uses some time zone +# designations that I've never seen before:.... +# Fri. 6:30A Lv. HONOLOLU (Pearl Harbor), H.I. H.L.T. Ar. 5:30P Sun. +# " 3:00P Ar. MIDWAY ISLAND . . . . . . . . . M.L.T. Lv. 6:00A " +# +Zone Pacific/Midway -11:49:28 - LMT 1901 + -11:00 - NST 1956 Jun 3 + -11:00 1:00 NDT 1956 Sep 2 + -11:00 - NST 1967 Apr # N=Nome + -11:00 - BST 1983 Nov 30 # B=Bering + -11:00 - SST # S=Samoa + +# Palmyra +# uninhabited since World War II; was probably like Pacific/Kiritimati + +# Wake +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Wake 11:06:28 - LMT 1901 + 12:00 - WAKT # Wake Time + + +# Vanuatu +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Vanuatu 1983 only - Sep 25 0:00 1:00 S +Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 - +Rule Vanuatu 1984 only - Oct 23 0:00 1:00 S +Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S +Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 - +Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila + 11:00 Vanuatu VU%sT # Vanuatu Time + +# Wallis and Futuna +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Wallis 12:15:20 - LMT 1901 + 12:00 - WFT # Wallis & Futuna Time + +############################################################################### + +# NOTES + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@iana.org for general use in the future). + +# From Paul Eggert (2006-03-22): +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1990, and IATA SSIM is the source for entries afterwards. +# +# Another source occasionally used is Edward W. Whitman, World Time Differences, +# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which +# I found in the UCLA library. +# +# A reliable and entertaining source about time zones is +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). +# +# I invented the abbreviations marked `*' in the following table; +# the rest are from earlier versions of this file, or from other sources. +# Corrections are welcome! +# std dst +# LMT Local Mean Time +# 8:00 WST WST Western Australia +# 8:45 CWST CWST Central Western Australia* +# 9:00 JST Japan +# 9:30 CST CST Central Australia +# 10:00 EST EST Eastern Australia +# 10:00 ChST Chamorro +# 10:30 LHST LHST Lord Howe* +# 11:30 NZMT NZST New Zealand through 1945 +# 12:00 NZST NZDT New Zealand 1946-present +# 12:45 CHAST CHADT Chatham* +# -11:00 SST Samoa +# -10:00 HST Hawaii +# - 8:00 PST Pitcairn* +# +# See the `northamerica' file for Hawaii. +# See the `southamerica' file for Easter I and the Galapagos Is. + +############################################################################### + +# Australia + +# From Paul Eggert (2005-12-08): +# <a href="http://www.bom.gov.au/climate/averages/tables/dst_times.shtml"> +# Implementation Dates of Daylight Saving Time within Australia +# </a> summarizes daylight saving issues in Australia. + +# From Arthur David Olson (2005-12-12): +# <a href="http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving"> +# Lawlink NSW:Daylight Saving in New South Wales +# </a> covers New South Wales in particular. + +# From John Mackin (1991-03-06): +# We in Australia have _never_ referred to DST as `daylight' time. +# It is called `summer' time. Now by a happy coincidence, `summer' +# and `standard' happen to start with the same letter; hence, the +# abbreviation does _not_ change... +# The legislation does not actually define abbreviations, at least +# in this State, but the abbreviation is just commonly taken to be the +# initials of the phrase, and the legislation here uniformly uses +# the phrase `summer time' and does not use the phrase `daylight +# time'. +# Announcers on the Commonwealth radio network, the ABC (for Australian +# Broadcasting Commission), use the phrases `Eastern Standard Time' +# or `Eastern Summer Time'. (Note, though, that as I say in the +# current australasia file, there is really no such thing.) Announcers +# on its overseas service, Radio Australia, use the same phrases +# prefixed by the word `Australian' when referring to local times; +# time announcements on that service, naturally enough, are made in UTC. + +# From Arthur David Olson (1992-03-08): +# Given the above, what's chosen for year-round use is: +# CST for any place operating at a GMTOFF of 9:30 +# WST for any place operating at a GMTOFF of 8:00 +# EST for any place operating at a GMTOFF of 10:00 + +# From Chuck Soper (2006-06-01): +# I recently found this Australian government web page on time zones: +# <http://www.australia.gov.au/about-australia-13time> +# And this government web page lists time zone names and abbreviations: +# <http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml> + +# From Paul Eggert (2001-04-05), summarizing a long discussion about "EST" +# versus "AEST" etc.: +# +# I see the following points of dispute: +# +# * How important are unique time zone abbreviations? +# +# Here I tend to agree with the point (most recently made by Chris +# Newman) that unique abbreviations should not be essential for proper +# operation of software. We have other instances of ambiguity +# (e.g. "IST" denoting both "Israel Standard Time" and "Indian +# Standard Time"), and they are not likely to go away any time soon. +# In the old days, some software mistakenly relied on unique +# abbreviations, but this is becoming less true with time, and I don't +# think it's that important to cater to such software these days. +# +# On the other hand, there is another motivation for unambiguous +# abbreviations: it cuts down on human confusion. This is +# particularly true for Australia, where "EST" can mean one thing for +# time T and a different thing for time T plus 1 second. +# +# * Does the relevant legislation indicate which abbreviations should be used? +# +# Here I tend to think that things are a mess, just as they are in +# many other countries. We Americans are currently disagreeing about +# which abbreviation to use for the newly legislated Chamorro Standard +# Time, for example. +# +# Personally, I would prefer to use common practice; I would like to +# refer to legislation only for examples of common practice, or as a +# tiebreaker. +# +# * Do Australians more often use "Eastern Daylight Time" or "Eastern +# Summer Time"? Do they typically prefix the time zone names with +# the word "Australian"? +# +# My own impression is that both "Daylight Time" and "Summer Time" are +# common and are widely understood, but that "Summer Time" is more +# popular; and that the leading "A" is also common but is omitted more +# often than not. I just used AltaVista advanced search and got the +# following count of page hits: +# +# 1,103 "Eastern Summer Time" AND domain:au +# 971 "Australian Eastern Summer Time" AND domain:au +# 613 "Eastern Daylight Time" AND domain:au +# 127 "Australian Eastern Daylight Time" AND domain:au +# +# Here "Summer" seems quite a bit more popular than "Daylight", +# particularly when we know the time zone is Australian and not US, +# say. The "Australian" prefix seems to be popular for Eastern Summer +# Time, but unpopular for Eastern Daylight Time. +# +# For abbreviations, tools like AltaVista are less useful because of +# ambiguity. Many hits are not really time zones, unfortunately, and +# many hits denote US time zones and not Australian ones. But here +# are the hit counts anyway: +# +# 161,304 "EST" and domain:au +# 25,156 "EDT" and domain:au +# 18,263 "AEST" and domain:au +# 10,416 "AEDT" and domain:au +# +# 14,538 "CST" and domain:au +# 5,728 "CDT" and domain:au +# 176 "ACST" and domain:au +# 29 "ACDT" and domain:au +# +# 7,539 "WST" and domain:au +# 68 "AWST" and domain:au +# +# This data suggest that Australians tend to omit the "A" prefix in +# practice. The situation for "ST" versus "DT" is less clear, given +# the ambiguities involved. +# +# * How do Australians feel about the abbreviations in the tz database? +# +# If you just count Australians on this list, I count 2 in favor and 3 +# against. One of the "against" votes (David Keegel) counseled delay, +# saying that both AEST/AEDT and EST/EST are widely used and +# understood in Australia. + +# From Paul Eggert (1995-12-19): +# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ. +# Mark Prior writes that his newspaper +# reports that NSW's fall 1995 change will occur at 2:00, +# but Robert Elz says it's been 3:00 in Victoria since 1970 +# and perhaps the newspaper's `2:00' is referring to standard time. +# For now we'll continue to assume 2:00s for changes since 1960. + +# From Eric Ulevik (1998-01-05): +# +# Here are some URLs to Australian time legislation. These URLs are stable, +# and should probably be included in the data file. There are probably more +# relevant entries in this database. +# +# NSW (including LHI and Broken Hill): +# <a href="http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html"> +# Standard Time Act 1987 (updated 1995-04-04) +# </a> +# ACT +# <a href="http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html"> +# Standard Time and Summer Time Act 1972 +# </a> +# SA +# <a href="http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html"> +# Standard Time Act, 1898 +# </a> + +# From David Grosz (2005-06-13): +# It was announced last week that Daylight Saving would be extended by +# one week next year to allow for the 2006 Commonwealth Games. +# Daylight Saving is now to end for next year only on the first Sunday +# in April instead of the last Sunday in March. +# +# From Gwillim Law (2005-06-14): +# I did some Googling and found that all of those states (and territory) plan +# to extend DST together in 2006. +# ACT: http://www.cmd.act.gov.au/mediareleases/fileread.cfm?file=86.txt +# New South Wales: http://www.thecouriermail.news.com.au/common/story_page/0,5936,15538869%255E1702,00.html +# South Australia: http://www.news.com.au/story/0,10117,15555031-1246,00.html +# Tasmania: http://www.media.tas.gov.au/release.php?id=14772 +# Victoria: I wasn't able to find anything separate, but the other articles +# allude to it. +# But not Queensland +# http://www.news.com.au/story/0,10117,15564030-1248,00.html. + +# Northern Territory + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # The NORTHERN TERRITORY.. [ Courtesy N.T. Dept of the Chief Minister ] +# # [ Nov 1990 ] +# # N.T. have never utilised any DST due to sub-tropical/tropical location. +# ... +# Zone Australia/North 9:30 - CST + +# From Bradley White (1991-03-04): +# A recent excerpt from an Australian newspaper... +# the Northern Territory do[es] not have daylight saving. + +# Western Australia + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # The state of WESTERN AUSTRALIA.. [ Courtesy W.A. dept Premier+Cabinet ] +# # [ Nov 1990 ] +# # W.A. suffers from a great deal of public and political opposition to +# # DST in principle. A bill is brought before parliament in most years, but +# # usually defeated either in the upper house, or in party caucus +# # before reaching parliament. +# ... +# Zone Australia/West 8:00 AW %sST +# ... +# Rule AW 1974 only - Oct lastSun 2:00 1:00 D +# Rule AW 1975 only - Mar Sun>=1 3:00 0 W +# Rule AW 1983 only - Oct lastSun 2:00 1:00 D +# Rule AW 1984 only - Mar Sun>=1 3:00 0 W + +# From Bradley White (1991-03-04): +# A recent excerpt from an Australian newspaper... +# Western Australia...do[es] not have daylight saving. + +# From John D. Newman via Bradley White (1991-11-02): +# Western Australia is still on "winter time". Some DH in Sydney +# rang me at home a few days ago at 6.00am. (He had just arrived at +# work at 9.00am.) +# W.A. is switching to Summer Time on Nov 17th just to confuse +# everybody again. + +# From Arthur David Olson (1992-03-08): +# The 1992 ending date used in the rules is a best guess; +# it matches what was used in the past. + +# <a href="http://www.bom.gov.au/faq/faqgen.htm"> +# The Australian Bureau of Meteorology FAQ +# </a> (1999-09-27) writes that Giles Meteorological Station uses +# South Australian time even though it's located in Western Australia. + +# Queensland +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ] +# # [ Dec 1990 ] +# ... +# Zone Australia/Queensland 10:00 AQ %sST +# ... +# Rule AQ 1971 only - Oct lastSun 2:00 1:00 D +# Rule AQ 1972 only - Feb lastSun 3:00 0 E +# Rule AQ 1989 max - Oct lastSun 2:00 1:00 D +# Rule AQ 1990 max - Mar Sun>=1 3:00 0 E + +# From Bradley White (1989-12-24): +# "Australia/Queensland" now observes daylight time (i.e. from +# October 1989). + +# From Bradley White (1991-03-04): +# A recent excerpt from an Australian newspaper... +# ...Queensland...[has] agreed to end daylight saving +# at 3am tomorrow (March 3)... + +# From John Mackin (1991-03-06): +# I can certainly confirm for my part that Daylight Saving in NSW did in fact +# end on Sunday, 3 March. I don't know at what hour, though. (It surprised +# me.) + +# From Bradley White (1992-03-08): +# ...there was recently a referendum in Queensland which resulted +# in the experimental daylight saving system being abandoned. So, ... +# ... +# Rule QLD 1989 1991 - Oct lastSun 2:00 1:00 D +# Rule QLD 1990 1992 - Mar Sun>=1 3:00 0 S +# ... + +# From Arthur David Olson (1992-03-08): +# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes. + +# From Christopher Hunt (2006-11-21), after an advance warning +# from Jesper Norgaard Welen (2006-11-01): +# WA are trialing DST for three years. +# <http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf> + +# From Rives McDow (2002-04-09): +# The most interesting region I have found consists of three towns on the +# southern coast.... South Australia observes daylight saving time; Western +# Australia does not. The two states are one and a half hours apart. The +# residents decided to forget about this nonsense of changing the clock so +# much and set the local time 20 hours and 45 minutes from the +# international date line, or right in the middle of the time of South +# Australia and Western Australia.... +# +# From Paul Eggert (2002-04-09): +# This is confirmed by the section entitled +# "What's the deal with time zones???" in +# <http://www.earthsci.unimelb.edu.au/~awatkins/null.html>. +# +# From Alex Livingston (2006-12-07): +# ... it was just on four years ago that I drove along the Eyre Highway, +# which passes through eastern Western Australia close to the southern +# coast of the continent. +# +# I paid particular attention to the time kept there. There can be no +# dispute that UTC+08:45 was considered "the time" from the border +# village just inside the border with South Australia to as far west +# as just east of Caiguna. There can also be no dispute that Eucla is +# the largest population centre in this zone.... +# +# Now that Western Australia is observing daylight saving, the +# question arose whether this part of the state would follow suit. I +# just called the border village and confirmed that indeed they have, +# meaning that they are now observing UTC+09:45. +# +# (2006-12-09): +# I personally doubt that either experimentation with daylight saving +# in WA or its introduction in SA had anything to do with the genesis +# of this time zone. My hunch is that it's been around since well +# before 1975. I remember seeing it noted on road maps decades ago. + +# From Paul Eggert (2006-12-15): +# For lack of better info, assume the tradition dates back to the +# introduction of standard time in 1895. + + +# southeast Australia +# +# From Paul Eggert (2007-07-23): +# Starting autumn 2008 Victoria, NSW, South Australia, Tasmania and the ACT +# end DST the first Sunday in April and start DST the first Sunday in October. +# http://www.theage.com.au/news/national/daylight-savings-to-span-six-months/2007/06/27/1182623966703.html + + +# South Australia + +# From Bradley White (1991-03-04): +# A recent excerpt from an Australian newspaper... +# ...South Australia...[has] agreed to end daylight saving +# at 3am tomorrow (March 3)... + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # The state of SOUTH AUSTRALIA....[ Courtesy of S.A. Dept of Labour ] +# # [ Nov 1990 ] +# ... +# Zone Australia/South 9:30 AS %sST +# ... +# Rule AS 1971 max - Oct lastSun 2:00 1:00 D +# Rule AS 1972 1985 - Mar Sun>=1 3:00 0 C +# Rule AS 1986 1990 - Mar Sun>=15 3:00 0 C +# Rule AS 1991 max - Mar Sun>=1 3:00 0 C + +# From Bradley White (1992-03-11): +# Recent correspondence with a friend in Adelaide +# contained the following exchange: "Due to the Adelaide Festival, +# South Australia delays setting back our clocks for a few weeks." + +# From Robert Elz (1992-03-13): +# I heard that apparently (or at least, it appears that) +# South Aus will have an extra 3 weeks daylight saving every even +# numbered year (from 1990). That's when the Adelaide Festival +# is on... + +# From Robert Elz (1992-03-16, 00:57:07 +1000): +# DST didn't end in Adelaide today (yesterday).... +# But whether it's "4th Sunday" or "2nd last Sunday" I have no idea whatever... +# (it's just as likely to be "the Sunday we pick for this year"...). + +# From Bradley White (1994-04-11): +# If Sun, 15 March, 1992 was at +1030 as kre asserts, but yet Sun, 20 March, +# 1994 was at +0930 as John Connolly's customer seems to assert, then I can +# only conclude that the actual rule is more complicated.... + +# From John Warburton (1994-10-07): +# The new Daylight Savings dates for South Australia ... +# was gazetted in the Government Hansard on Sep 26 1994.... +# start on last Sunday in October and end in last sunday in March. + +# From Paul Eggert (2007-07-23): +# See "southeast Australia" above for 2008 and later. + +# Tasmania + +# The rules for 1967 through 1991 were reported by George Shepherd +# via Simon Woodhead via Robert Elz (1991-03-06): +# # The state of TASMANIA.. [Courtesy Tasmanian Dept of Premier + Cabinet ] +# # [ Nov 1990 ] + +# From Bill Hart via Guy Harris (1991-10-10): +# Oh yes, the new daylight savings rules are uniquely tasmanian, we have +# 6 weeks a year now when we are out of sync with the rest of Australia +# (but nothing new about that). + +# From Alex Livingston (1999-10-04): +# I heard on the ABC (Australian Broadcasting Corporation) radio news on the +# (long) weekend that Tasmania, which usually goes its own way in this regard, +# has decided to join with most of NSW, the ACT, and most of Victoria +# (Australia) and start daylight saving on the last Sunday in August in 2000 +# instead of the first Sunday in October. + +# Sim Alam (2000-07-03) reported a legal citation for the 2000/2001 rules: +# http://www.thelaw.tas.gov.au/fragview/42++1968+GS3A@EN+2000070300 + +# From Paul Eggert (2007-07-23): +# See "southeast Australia" above for 2008 and later. + +# Victoria + +# The rules for 1971 through 1991 were reported by George Shepherd +# via Simon Woodhead via Robert Elz (1991-03-06): +# # The state of VICTORIA.. [ Courtesy of Vic. Dept of Premier + Cabinet ] +# # [ Nov 1990 ] + +# From Scott Harrington (2001-08-29): +# On KQED's "City Arts and Lectures" program last night I heard an +# interesting story about daylight savings time. Dr. John Heilbron was +# discussing his book "The Sun in the Church: Cathedrals as Solar +# Observatories"[1], and in particular the Shrine of Remembrance[2] located +# in Melbourne, Australia. +# +# Apparently the shrine's main purpose is a beam of sunlight which +# illuminates a special spot on the floor at the 11th hour of the 11th day +# of the 11th month (Remembrance Day) every year in memory of Australia's +# fallen WWI soldiers. And if you go there on Nov. 11, at 11am local time, +# you will indeed see the sunbeam illuminate the special spot at the +# expected time. +# +# However, that is only because of some special mirror contraption that had +# to be employed, since due to daylight savings time, the true solar time of +# the remembrance moment occurs one hour later (or earlier?). Perhaps +# someone with more information on this jury-rig can tell us more. +# +# [1] http://www.hup.harvard.edu/catalog/HEISUN.html +# [2] http://www.shrine.org.au + +# From Paul Eggert (2007-07-23): +# See "southeast Australia" above for 2008 and later. + +# New South Wales + +# From Arthur David Olson: +# New South Wales and subjurisdictions have their own ideas of a fun time. +# Based on law library research by John Mackin, +# who notes: +# In Australia, time is not legislated federally, but rather by the +# individual states. Thus, while such terms as ``Eastern Standard Time'' +# [I mean, of course, Australian EST, not any other kind] are in common +# use, _they have NO REAL MEANING_, as they are not defined in the +# legislation. This is very important to understand. +# I have researched New South Wales time only... + +# From Eric Ulevik (1999-05-26): +# DST will start in NSW on the last Sunday of August, rather than the usual +# October in 2000. [See: Matthew Moore, +# <a href="http://www.smh.com.au/news/9905/26/pageone/pageone4.html"> +# Two months more daylight saving +# </a> +# Sydney Morning Herald (1999-05-26).] + +# From Paul Eggert (1999-09-27): +# See the following official NSW source: +# <a href="http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ"> +# Daylight Saving in New South Wales. +# </a> +# +# Narrabri Shire (NSW) council has announced it will ignore the extension of +# daylight saving next year. See: +# <a href="http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm"> +# Narrabri Council to ignore daylight saving +# </a> (1999-07-22). For now, we'll wait to see if this really happens. +# +# Victoria will following NSW. See: +# <a href="http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm"> +# Vic to extend daylight saving +# </a> (1999-07-28). +# +# However, South Australia rejected the DST request. See: +# <a href="http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm"> +# South Australia rejects Olympics daylight savings request +# </a> (1999-07-19). +# +# Queensland also will not observe DST for the Olympics. See: +# <a href="http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm"> +# Qld says no to daylight savings for Olympics +# </a> (1999-06-01), which quotes Queensland Premier Peter Beattie as saying +# ``Look you've got to remember in my family when this came up last time +# I voted for it, my wife voted against it and she said to me it's all very +# well for you, you don't have to worry about getting the children out of +# bed, getting them to school, getting them to sleep at night. +# I've been through all this argument domestically...my wife rules.'' +# +# Broken Hill will stick with South Australian time in 2000. See: +# <a href="http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm"> +# Broken Hill to be behind the times +# </a> (1999-07-21). + +# IATA SSIM (1998-09) says that the spring 2000 change for Australian +# Capital Territory, New South Wales except Lord Howe Island and Broken +# Hill, and Victoria will be August 27, presumably due to the Sydney Olympics. + +# From Eric Ulevik, referring to Sydney's Sun Herald (2000-08-13), page 29: +# The Queensland Premier Peter Beattie is encouraging northern NSW +# towns to use Queensland time. + +# From Paul Eggert (2007-07-23): +# See "southeast Australia" above for 2008 and later. + +# Yancowinna + +# From John Mackin (1989-01-04): +# `Broken Hill' means the County of Yancowinna. + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # YANCOWINNA.. [ Confirmation courtesy of Broken Hill Postmaster ] +# # [ Dec 1990 ] +# ... +# # Yancowinna uses Central Standard Time, despite [its] location on the +# # New South Wales side of the S.A. border. Most business and social dealings +# # are with CST zones, therefore CST is legislated by local government +# # although the switch to Summer Time occurs in line with N.S.W. There have +# # been years when this did not apply, but the historical data is not +# # presently available. +# Zone Australia/Yancowinna 9:30 AY %sST +# ... +# Rule AY 1971 1985 - Oct lastSun 2:00 1:00 D +# Rule AY 1972 only - Feb lastSun 3:00 0 C +# [followed by other Rules] + +# Lord Howe Island + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# LHI... [ Courtesy of Pauline Van Winsen ] +# [ Dec 1990 ] +# Lord Howe Island is located off the New South Wales coast, and is half an +# hour ahead of NSW time. + +# From James Lonergan, Secretary, Lord Howe Island Board (2000-01-27): +# Lord Howe Island summer time in 2000/2001 will commence on the same +# date as the rest of NSW (i.e. 2000-08-27). For your information the +# Lord Howe Island Board (controlling authority for the Island) is +# seeking the community's views on various options for summer time +# arrangements on the Island, e.g. advance clocks by 1 full hour +# instead of only 30 minutes. [Dependent] on the wishes of residents +# the Board may approach the NSW government to change the existing +# arrangements. The starting date for summer time on the Island will +# however always coincide with the rest of NSW. + +# From James Lonergan, Secretary, Lord Howe Island Board (2000-10-25): +# Lord Howe Island advances clocks by 30 minutes during DST in NSW and retards +# clocks by 30 minutes when DST finishes. Since DST was most recently +# introduced in NSW, the "changeover" time on the Island has been 02:00 as +# shown on clocks on LHI. I guess this means that for 30 minutes at the start +# of DST, LHI is actually 1 hour ahead of the rest of NSW. + +# From Paul Eggert (2006-03-22): +# For Lord Howe dates we use Shanks & Pottenger through 1989, and +# Lonergan thereafter. For times we use Lonergan. + +# From Paul Eggert (2007-07-23): +# See "southeast Australia" above for 2008 and later. + +# From Steffen Thorsen (2009-04-28): +# According to the official press release, South Australia's extended daylight +# saving period will continue with the same rules as used during the 2008-2009 +# summer (southern hemisphere). +# +# From +# <a href="http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf"> +# http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf +# </a> +# The extended daylight saving period that South Australia has been trialling +# for over the last year is now set to be ongoing. +# Daylight saving will continue to start on the first Sunday in October each +# year and finish on the first Sunday in April the following year. +# Industrial Relations Minister, Paul Caica, says this provides South Australia +# with a consistent half hour time difference with NSW, Victoria, Tasmania and +# the ACT for all 52 weeks of the year... +# +# We have a wrap-up here: +# <a href="http://www.timeanddate.com/news/time/south-australia-extends-dst.html"> +# http://www.timeanddate.com/news/time/south-australia-extends-dst.html +# </a> +############################################################################### + +# New Zealand + +# From Mark Davies (1990-10-03): +# the 1989/90 year was a trial of an extended "daylight saving" period. +# This trial was deemed successful and the extended period adopted for +# subsequent years (with the addition of a further week at the start). +# source -- phone call to Ministry of Internal Affairs Head Office. + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # The Country of New Zealand (Australia's east island -) Gee they hate that! +# # or is Australia the west island of N.Z. +# # [ courtesy of Geoff Tribble.. Auckland N.Z. ] +# # [ Nov 1990 ] +# ... +# Rule NZ 1974 1988 - Oct lastSun 2:00 1:00 D +# Rule NZ 1989 max - Oct Sun>=1 2:00 1:00 D +# Rule NZ 1975 1989 - Mar Sun>=1 3:00 0 S +# Rule NZ 1990 max - Mar lastSun 3:00 0 S +# ... +# Zone NZ 12:00 NZ NZ%sT # New Zealand +# Zone NZ-CHAT 12:45 - NZ-CHAT # Chatham Island + +# From Arthur David Olson (1992-03-08): +# The chosen rules use the Davies October 8 values for the start of DST in 1989 +# rather than the October 1 value. + +# From Paul Eggert (1995-12-19); +# Shank & Pottenger report 2:00 for all autumn changes in Australia and NZ. +# Robert Uzgalis writes that the New Zealand Daylight +# Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard +# time on both the first Sunday in October and the third Sunday in March. +# As with Australia, we'll assume the tradition is 2:00s, not 2:00. +# +# From Paul Eggert (2006-03-22): +# The Department of Internal Affairs (DIA) maintains a brief history, +# as does Carol Squires; see tz-link.htm for the full references. +# Use these sources in preference to Shanks & Pottenger. +# +# For Chatham, IATA SSIM (1991/1999) gives the NZ rules but with +# transitions at 2:45 local standard time; this confirms that Chatham +# is always exactly 45 minutes ahead of Auckland. + +# From Colin Sharples (2007-04-30): +# DST will now start on the last Sunday in September, and end on the +# first Sunday in April. The changes take effect this year, meaning +# that DST will begin on 2007-09-30 2008-04-06. +# http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended + +############################################################################### + + +# Fiji + +# Howse writes (p 153) that in 1879 the British governor of Fiji +# enacted an ordinance standardizing the islands on Antipodean Time +# instead of the American system (which was one day behind). + +# From Rives McDow (1998-10-08): +# Fiji will introduce DST effective 0200 local time, 1998-11-01 +# until 0300 local time 1999-02-28. Each year the DST period will +# be from the first Sunday in November until the last Sunday in February. + +# From Paul Eggert (2000-01-08): +# IATA SSIM (1999-09) says DST ends 0100 local time. Go with McDow. + +# From the BBC World Service (1998-10-31 11:32 UTC): +# The Fijiian government says the main reasons for the time change is to +# improve productivity and reduce road accidents. But correspondents say it +# also hopes the move will boost Fiji's ability to compete with other pacific +# islands in the effort to attract tourists to witness the dawning of the new +# millenium. + +# http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13) +# reports that Fiji has discontinued DST. + +# Johnston + +# Johnston data is from usno1995. + + +# Kiribati + +# From Paul Eggert (1996-01-22): +# Today's _Wall Street Journal_ (page 1) reports that Kiribati +# ``declared it the same day [throughout] the country as of Jan. 1, 1995'' +# as part of the competition to be first into the 21st century. + + +# Kwajalein + +# In comp.risks 14.87 (26 August 1993), Peter Neumann writes: +# I wonder what happened in Kwajalein, where there was NO Friday, +# 1993-08-20. Thursday night at midnight Kwajalein switched sides with +# respect to the International Date Line, to rejoin its fellow islands, +# going from 11:59 p.m. Thursday to 12:00 m. Saturday in a blink. + + +# N Mariana Is, Guam + +# Howse writes (p 153) ``The Spaniards, on the other hand, reached the +# Philippines and the Ladrones from America,'' and implies that the Ladrones +# (now called the Marianas) kept American date for quite some time. +# For now, we assume the Ladrones switched at the same time as the Philippines; +# see Asia/Manila. + +# US Public Law 106-564 (2000-12-23) made UTC+10 the official standard time, +# under the name "Chamorro Standard Time". There is no official abbreviation, +# but Congressman Robert A. Underwood, author of the bill that became law, +# wrote in a press release (2000-12-27) that he will seek the use of "ChST". + + +# Micronesia + +# Alan Eugene Davis writes (1996-03-16), +# ``I am certain, having lived there for the past decade, that "Truk" +# (now properly known as Chuuk) ... is in the time zone GMT+10.'' +# +# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11 +# on 1978-10-01; ignore this for now. + +# From Paul Eggert (1999-10-29): +# The Federated States of Micronesia Visitors Board writes in +# <a href="http://www.fsmgov.org/info/clocks.html"> +# The Federated States of Micronesia - Visitor Information +# </a> (1999-01-26) +# that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11. +# We don't know when Kosrae switched from UTC+12; assume January 1 for now. + + +# Midway + +# From Charles T O'Connor, KMTH DJ (1956), +# quoted in the KTMH section of the Radio Heritage Collection +# <http://radiodx.com/spdxr/KMTH.htm> (2002-12-31): +# For the past two months we've been on what is known as Daylight +# Saving Time. This time has put us on air at 5am in the morning, +# your time down there in New Zealand. Starting September 2, 1956 +# we'll again go back to Standard Time. This'll mean that we'll go to +# air at 6am your time. +# +# From Paul Eggert (2003-03-23): +# We don't know the date of that quote, but we'll guess they +# started DST on June 3. Possibly DST was observed other years +# in Midway, but we have no record of it. + + +# Pitcairn + +# From Rives McDow (1999-11-08): +# A Proclamation was signed by the Governor of Pitcairn on the 27th March 1998 +# with regard to Pitcairn Standard Time. The Proclamation is as follows. +# +# The local time for general purposes in the Islands shall be +# Co-ordinated Universal time minus 8 hours and shall be known +# as Pitcairn Standard Time. +# +# ... I have also seen Pitcairn listed as UTC minus 9 hours in several +# references, and can only assume that this was an error in interpretation +# somehow in light of this proclamation. + +# From Rives McDow (1999-11-09): +# The Proclamation regarding Pitcairn time came into effect on 27 April 1998 +# ... at midnight. + +# From Howie Phelps (1999-11-10), who talked to a Pitcairner via shortwave: +# Betty Christian told me yesterday that their local time is the same as +# Pacific Standard Time. They used to be 1/2 hour different from us here in +# Sacramento but it was changed a couple of years ago. + + +# Samoa + +# Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald) +# that in 1879 the King of Samoa decided to change +# ``the date in his kingdom from the Antipodean to the American system, +# ordaining -- by a masterpiece of diplomatic flattery -- that +# the Fourth of July should be celebrated twice in that year.'' + + +# Tonga + +# From Paul Eggert (1996-01-22): +# Today's _Wall Street Journal_ (p 1) reports that ``Tonga has been plotting +# to sneak ahead of [New Zealanders] by introducing daylight-saving time.'' +# Since Kiribati has moved the Date Line it's not clear what Tonga will do. + +# Don Mundell writes in the 1997-02-20 Tonga Chronicle +# <a href="http://www.tongatapu.net.to/tonga/homeland/timebegins.htm"> +# How Tonga became `The Land where Time Begins' +# </a>: + +# Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST +# 12 hours and 20 minutes ahead of GMT. When New Zealand adjusted its +# standard time in 1940s, Tonga had the choice of subtracting from its +# local time to come on the same standard time as New Zealand or of +# advancing its time to maintain the differential of 13 degrees +# (approximately 50 minutes ahead of New Zealand time). +# +# Because His Majesty King Taufa'ahau Tupou IV, then Crown Prince +# Tungi, preferred to ensure Tonga's title as the land where time +# begins, the Legislative Assembly approved the latter change. +# +# But some of the older, more conservative members from the outer +# islands objected. "If at midnight on Dec. 31, we move ahead 40 +# minutes, as your Royal Highness wishes, what becomes of the 40 +# minutes we have lost?" +# +# The Crown Prince, presented an unanswerable argument: "Remember that +# on the World Day of Prayer, you would be the first people on Earth +# to say your prayers in the morning." + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell. + +# From Eric Ulevik (1999-05-03): +# Tonga's director of tourism, who is also secretary of the National Millenium +# Committee, has a plan to get Tonga back in front. +# He has proposed a one-off move to tropical daylight saving for Tonga from +# October to March, which has won approval in principle from the Tongan +# Government. + +# From Steffen Thorsen (1999-09-09): +# * Tonga will introduce DST in November +# +# I was given this link by John Letts: +# <a href="http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm"> +# http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm +# </a> +# +# I have not been able to find exact dates for the transition in November +# yet. By reading this article it seems like Fiji will be 14 hours ahead +# of UTC as well, but as far as I know Fiji will only be 13 hours ahead +# (12 + 1 hour DST). + +# From Arthur David Olson (1999-09-20): +# According to <a href="http://www.tongaonline.com/news/sept1799.html"> +# http://www.tongaonline.com/news/sept1799.html +# </a>: +# "Daylight Savings Time will take effect on Oct. 2 through April 15, 2000 +# and annually thereafter from the first Saturday in October through the +# third Saturday of April. Under the system approved by Privy Council on +# Sept. 10, clocks must be turned ahead one hour on the opening day and +# set back an hour on the closing date." +# Alas, no indication of the time of day. + +# From Rives McDow (1999-10-06): +# Tonga started its Daylight Saving on Saturday morning October 2nd at 0200am. +# Daylight Saving ends on April 16 at 0300am which is Sunday morning. + +# From Steffen Thorsen (2000-10-31): +# Back in March I found a notice on the website http://www.tongaonline.com +# that Tonga changed back to standard time one month early, on March 19 +# instead of the original reported date April 16. Unfortunately, the article +# is no longer available on the site, and I did not make a copy of the +# text, and I have forgotten to report it here. +# (Original URL was: http://www.tongaonline.com/news/march162000.htm ) + +# From Rives McDow (2000-12-01): +# Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27. + +# From Sione Moala-Mafi (2001-09-20) via Rives McDow: +# At 2:00am on the first Sunday of November, the standard time in the Kingdom +# shall be moved forward by one hour to 3:00am. At 2:00am on the last Sunday +# of January the standard time in the Kingdom shall be moved backward by one +# hour to 1:00am. + +# From Pulu 'Anau (2002-11-05): +# The law was for 3 years, supposedly to get renewed. It wasn't. + + +# Wake + +# From Vernice Anderson, Personal Secretary to Philip Jessup, +# US Ambassador At Large (oral history interview, 1971-02-02): +# +# Saturday, the 14th [of October, 1950] -- ... The time was all the +# more confusing at that point, because we had crossed the +# International Date Line, thus getting two Sundays. Furthermore, we +# discovered that Wake Island had two hours of daylight saving time +# making calculation of time in Washington difficult if not almost +# impossible. +# +# http://www.trumanlibrary.org/wake/meeting.htm + +# From Paul Eggert (2003-03-23): +# We have no other report of DST in Wake Island, so omit this info for now. + +############################################################################### + +# The International Date Line + +# From Gwillim Law (2000-01-03): +# +# The International Date Line is not defined by any international standard, +# convention, or treaty. Mapmakers are free to draw it as they please. +# Reputable mapmakers will simply ensure that every point of land appears on +# the correct side of the IDL, according to the date legally observed there. +# +# When Kiribati adopted a uniform date in 1995, thereby moving the Phoenix and +# Line Islands to the west side of the IDL (or, if you prefer, moving the IDL +# to the east side of the Phoenix and Line Islands), I suppose that most +# mapmakers redrew the IDL following the boundary of Kiribati. Even that line +# has a rather arbitrary nature. The straight-line boundaries between Pacific +# island nations that are shown on many maps are based on an international +# convention, but are not legally binding national borders.... The date is +# governed by the IDL; therefore, even on the high seas, there may be some +# places as late as fourteen hours later than UTC. And, since the IDL is not +# an international standard, there are some places on the high seas where the +# correct date is ambiguous. + +# From Wikipedia <http://en.wikipedia.org/wiki/Time_zone> (2005-08-31): +# Before 1920, all ships kept local apparent time on the high seas by setting +# their clocks at night or at the morning sight so that, given the ship's +# speed and direction, it would be 12 o'clock when the Sun crossed the ship's +# meridian (12 o'clock = local apparent noon). During 1917, at the +# Anglo-French Conference on Time-keeping at Sea, it was recommended that all +# ships, both military and civilian, should adopt hourly standard time zones +# on the high seas. Whenever a ship was within the territorial waters of any +# nation it would use that nation's standard time. The captain was permitted +# to change his ship's clocks at a time of his choice following his ship's +# entry into another zone time--he often chose midnight. These zones were +# adopted by all major fleets between 1920 and 1925 but not by many +# independent merchant ships until World War II. + +# From Paul Eggert, using references suggested by Oscar van Vlijmen +# (2005-03-20): +# +# The American Practical Navigator (2002) +# <http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187> +# talks only about the 180-degree meridian with respect to ships in +# international waters; it ignores the international date line. diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/backward b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/backward new file mode 100644 index 0000000..dc7769f --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/backward @@ -0,0 +1,117 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# This file provides links between current names for time zones +# and their old names. Many names changed in late 1993. + +Link Africa/Asmara Africa/Asmera +Link Africa/Bamako Africa/Timbuktu +Link America/Argentina/Catamarca America/Argentina/ComodRivadavia +Link America/Adak America/Atka +Link America/Argentina/Buenos_Aires America/Buenos_Aires +Link America/Argentina/Catamarca America/Catamarca +Link America/Atikokan America/Coral_Harbour +Link America/Argentina/Cordoba America/Cordoba +Link America/Tijuana America/Ensenada +Link America/Indiana/Indianapolis America/Fort_Wayne +Link America/Indiana/Indianapolis America/Indianapolis +Link America/Argentina/Jujuy America/Jujuy +Link America/Indiana/Knox America/Knox_IN +Link America/Kentucky/Louisville America/Louisville +Link America/Argentina/Mendoza America/Mendoza +Link America/Rio_Branco America/Porto_Acre +Link America/Argentina/Cordoba America/Rosario +Link America/St_Thomas America/Virgin +Link Asia/Ashgabat Asia/Ashkhabad +Link Asia/Chongqing Asia/Chungking +Link Asia/Dhaka Asia/Dacca +Link Asia/Kathmandu Asia/Katmandu +Link Asia/Kolkata Asia/Calcutta +Link Asia/Macau Asia/Macao +Link Asia/Jerusalem Asia/Tel_Aviv +Link Asia/Ho_Chi_Minh Asia/Saigon +Link Asia/Thimphu Asia/Thimbu +Link Asia/Makassar Asia/Ujung_Pandang +Link Asia/Ulaanbaatar Asia/Ulan_Bator +Link Atlantic/Faroe Atlantic/Faeroe +Link Europe/Oslo Atlantic/Jan_Mayen +Link Australia/Sydney Australia/ACT +Link Australia/Sydney Australia/Canberra +Link Australia/Lord_Howe Australia/LHI +Link Australia/Sydney Australia/NSW +Link Australia/Darwin Australia/North +Link Australia/Brisbane Australia/Queensland +Link Australia/Adelaide Australia/South +Link Australia/Hobart Australia/Tasmania +Link Australia/Melbourne Australia/Victoria +Link Australia/Perth Australia/West +Link Australia/Broken_Hill Australia/Yancowinna +Link America/Rio_Branco Brazil/Acre +Link America/Noronha Brazil/DeNoronha +Link America/Sao_Paulo Brazil/East +Link America/Manaus Brazil/West +Link America/Halifax Canada/Atlantic +Link America/Winnipeg Canada/Central +Link America/Regina Canada/East-Saskatchewan +Link America/Toronto Canada/Eastern +Link America/Edmonton Canada/Mountain +Link America/St_Johns Canada/Newfoundland +Link America/Vancouver Canada/Pacific +Link America/Regina Canada/Saskatchewan +Link America/Whitehorse Canada/Yukon +Link America/Santiago Chile/Continental +Link Pacific/Easter Chile/EasterIsland +Link America/Havana Cuba +Link Africa/Cairo Egypt +Link Europe/Dublin Eire +Link Europe/London Europe/Belfast +Link Europe/Chisinau Europe/Tiraspol +Link Europe/London GB +Link Europe/London GB-Eire +Link Etc/GMT GMT+0 +Link Etc/GMT GMT-0 +Link Etc/GMT GMT0 +Link Etc/GMT Greenwich +Link Asia/Hong_Kong Hongkong +Link Atlantic/Reykjavik Iceland +Link Asia/Tehran Iran +Link Asia/Jerusalem Israel +Link America/Jamaica Jamaica +Link Asia/Tokyo Japan +Link Pacific/Kwajalein Kwajalein +Link Africa/Tripoli Libya +Link America/Tijuana Mexico/BajaNorte +Link America/Mazatlan Mexico/BajaSur +Link America/Mexico_City Mexico/General +Link Pacific/Auckland NZ +Link Pacific/Chatham NZ-CHAT +Link America/Denver Navajo +Link Asia/Shanghai PRC +Link Pacific/Pago_Pago Pacific/Samoa +Link Pacific/Chuuk Pacific/Yap +Link Pacific/Chuuk Pacific/Truk +Link Pacific/Pohnpei Pacific/Ponape +Link Europe/Warsaw Poland +Link Europe/Lisbon Portugal +Link Asia/Taipei ROC +Link Asia/Seoul ROK +Link Asia/Singapore Singapore +Link Europe/Istanbul Turkey +Link Etc/UCT UCT +Link America/Anchorage US/Alaska +Link America/Adak US/Aleutian +Link America/Phoenix US/Arizona +Link America/Chicago US/Central +Link America/Indiana/Indianapolis US/East-Indiana +Link America/New_York US/Eastern +Link Pacific/Honolulu US/Hawaii +Link America/Indiana/Knox US/Indiana-Starke +Link America/Detroit US/Michigan +Link America/Denver US/Mountain +Link America/Los_Angeles US/Pacific +Link Pacific/Pago_Pago US/Samoa +Link Etc/UTC UTC +Link Etc/UTC Universal +Link Europe/Moscow W-SU +Link Etc/UTC Zulu diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/etcetera b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/etcetera new file mode 100644 index 0000000..a9ff729 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/etcetera @@ -0,0 +1,81 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# These entries are mostly present for historical reasons, so that +# people in areas not otherwise covered by the tz files could "zic -l" +# to a time zone that was right for their area. These days, the +# tz files cover almost all the inhabited world, and the only practical +# need now for the entries that are not on UTC are for ships at sea +# that cannot use POSIX TZ settings. + +Zone Etc/GMT 0 - GMT +Zone Etc/UTC 0 - UTC +Zone Etc/UCT 0 - UCT + +# The following link uses older naming conventions, +# but it belongs here, not in the file `backward', +# as functions like gmtime load the "GMT" file to handle leap seconds properly. +# We want this to work even on installations that omit the other older names. +Link Etc/GMT GMT + +Link Etc/UTC Etc/Universal +Link Etc/UTC Etc/Zulu + +Link Etc/GMT Etc/Greenwich +Link Etc/GMT Etc/GMT-0 +Link Etc/GMT Etc/GMT+0 +Link Etc/GMT Etc/GMT0 + +# We use POSIX-style signs in the Zone names and the output abbreviations, +# even though this is the opposite of what many people expect. +# POSIX has positive signs west of Greenwich, but many people expect +# positive signs east of Greenwich. For example, TZ='Etc/GMT+4' uses +# the abbreviation "GMT+4" and corresponds to 4 hours behind UTC +# (i.e. west of Greenwich) even though many people would expect it to +# mean 4 hours ahead of UTC (i.e. east of Greenwich). +# +# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation allows for +# TZ='<GMT-4>+4'; if you want time zone abbreviations conforming to +# ISO 8601 you can use TZ='<-0400>+4'. Thus the commonly-expected +# offset is kept within the angle bracket (and is used for display) +# while the POSIX sign is kept outside the angle bracket (and is used +# for calculation). +# +# Do not use a TZ setting like TZ='GMT+4', which is four hours behind +# GMT but uses the completely misleading abbreviation "GMT". + +# Earlier incarnations of this package were not POSIX-compliant, +# and had lines such as +# Zone GMT-12 -12 - GMT-1200 +# We did not want things to change quietly if someone accustomed to the old +# way does a +# zic -l GMT-12 +# so we moved the names into the Etc subdirectory. + +Zone Etc/GMT-14 14 - GMT-14 # 14 hours ahead of GMT +Zone Etc/GMT-13 13 - GMT-13 +Zone Etc/GMT-12 12 - GMT-12 +Zone Etc/GMT-11 11 - GMT-11 +Zone Etc/GMT-10 10 - GMT-10 +Zone Etc/GMT-9 9 - GMT-9 +Zone Etc/GMT-8 8 - GMT-8 +Zone Etc/GMT-7 7 - GMT-7 +Zone Etc/GMT-6 6 - GMT-6 +Zone Etc/GMT-5 5 - GMT-5 +Zone Etc/GMT-4 4 - GMT-4 +Zone Etc/GMT-3 3 - GMT-3 +Zone Etc/GMT-2 2 - GMT-2 +Zone Etc/GMT-1 1 - GMT-1 +Zone Etc/GMT+1 -1 - GMT+1 +Zone Etc/GMT+2 -2 - GMT+2 +Zone Etc/GMT+3 -3 - GMT+3 +Zone Etc/GMT+4 -4 - GMT+4 +Zone Etc/GMT+5 -5 - GMT+5 +Zone Etc/GMT+6 -6 - GMT+6 +Zone Etc/GMT+7 -7 - GMT+7 +Zone Etc/GMT+8 -8 - GMT+8 +Zone Etc/GMT+9 -9 - GMT+9 +Zone Etc/GMT+10 -10 - GMT+10 +Zone Etc/GMT+11 -11 - GMT+11 +Zone Etc/GMT+12 -12 - GMT+12 diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/europe b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/europe new file mode 100644 index 0000000..ad9816c --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/europe @@ -0,0 +1,2856 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@iana.org for general use in the future). + +# From Paul Eggert (2006-03-22): +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1991, and IATA SSIM is the source for entries afterwards. +# +# Other sources occasionally used include: +# +# Edward W. Whitman, World Time Differences, +# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), +# which I found in the UCLA library. +# +# <a href="http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf"> +# William Willett, The Waste of Daylight, 19th edition +# </a> (1914-03) +# +# Brazil's Departamento Servico da Hora (DSH), +# <a href="http://pcdsh01.on.br/HISTHV.htm"> +# History of Summer Time +# </a> (1998-09-21, in Portuguese) + +# +# I invented the abbreviations marked `*' in the following table; +# the rest are from earlier versions of this file, or from other sources. +# Corrections are welcome! +# std dst 2dst +# LMT Local Mean Time +# -4:00 AST ADT Atlantic +# -3:00 WGT WGST Western Greenland* +# -1:00 EGT EGST Eastern Greenland* +# 0:00 GMT BST BDST Greenwich, British Summer +# 0:00 GMT IST Greenwich, Irish Summer +# 0:00 WET WEST WEMT Western Europe +# 0:19:32.13 AMT NST Amsterdam, Netherlands Summer (1835-1937)* +# 0:20 NET NEST Netherlands (1937-1940)* +# 1:00 CET CEST CEMT Central Europe +# 1:00:14 SET Swedish (1879-1899)* +# 2:00 EET EEST Eastern Europe +# 3:00 MSK MSD Moscow +# +# A reliable and entertaining source about time zones, especially in Britain, +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). + +# From Peter Ilieve (1994-12-04), +# The original six [EU members]: Belgium, France, (West) Germany, Italy, +# Luxembourg, the Netherlands. +# Plus, from 1 Jan 73: Denmark, Ireland, United Kingdom. +# Plus, from 1 Jan 81: Greece. +# Plus, from 1 Jan 86: Spain, Portugal. +# Plus, from 1 Jan 95: Austria, Finland, Sweden. (Norway negotiated terms for +# entry but in a referendum on 28 Nov 94 the people voted No by 52.2% to 47.8% +# on a turnout of 88.6%. This was almost the same result as Norway's previous +# referendum in 1972, they are the only country to have said No twice. +# Referendums in the other three countries voted Yes.) +# ... +# Estonia ... uses EU dates but not at 01:00 GMT, they use midnight GMT. +# I don't think they know yet what they will do from 1996 onwards. +# ... +# There shouldn't be any [current members who are not using EU rules]. +# A Directive has the force of law, member states are obliged to enact +# national law to implement it. The only contentious issue was the +# different end date for the UK and Ireland, and this was always allowed +# in the Directive. + + +############################################################################### + +# Britain (United Kingdom) and Ireland (Eire) + +# From Peter Ilieve (1994-07-06): +# +# On 17 Jan 1994 the Independent, a UK quality newspaper, had a piece about +# historical vistas along the Thames in west London. There was a photo +# and a sketch map showing some of the sightlines involved. One paragraph +# of the text said: +# +# `An old stone obelisk marking a forgotten terrestrial meridian stands +# beside the river at Kew. In the 18th century, before time and longitude +# was standardised by the Royal Observatory in Greenwich, scholars observed +# this stone and the movement of stars from Kew Observatory nearby. They +# made their calculations and set the time for the Horse Guards and Parliament, +# but now the stone is obscured by scrubwood and can only be seen by walking +# along the towpath within a few yards of it.' +# +# I have a one inch to one mile map of London and my estimate of the stone's +# position is 51 deg. 28' 30" N, 0 deg. 18' 45" W. The longitude should +# be within about +-2". The Ordnance Survey grid reference is TQ172761. +# +# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.] + +# From Paul Eggert (1993-11-18): +# +# Howse writes that Britain was the first country to use standard time. +# The railways cared most about the inconsistencies of local mean time, +# and it was they who forced a uniform time on the country. +# The original idea was credited to Dr. William Hyde Wollaston (1766-1828) +# and was popularized by Abraham Follett Osler (1808-1903). +# The first railway to adopt London time was the Great Western Railway +# in November 1840; other railways followed suit, and by 1847 most +# (though not all) railways used London time. On 1847-09-22 the +# Railway Clearing House, an industry standards body, recommended that GMT be +# adopted at all stations as soon as the General Post Office permitted it. +# The transition occurred on 12-01 for the L&NW, the Caledonian, +# and presumably other railways; the January 1848 Bradshaw's lists many +# railways as using GMT. By 1855 the vast majority of public +# clocks in Britain were set to GMT (though some, like the great clock +# on Tom Tower at Christ Church, Oxford, were fitted with two minute hands, +# one for local time and one for GMT). The last major holdout was the legal +# system, which stubbornly stuck to local time for many years, leading +# to oddities like polls opening at 08:13 and closing at 16:13. +# The legal system finally switched to GMT when the Statutes (Definition +# of Time) Act took effect; it received the Royal Assent on 1880-08-02. +# +# In the tables below, we condense this complicated story into a single +# transition date for London, namely 1847-12-01. We don't know as much +# about Dublin, so we use 1880-08-02, the legal transition time. + +# From Paul Eggert (2003-09-27): +# Summer Time was first seriously proposed by William Willett (1857-1915), +# a London builder and member of the Royal Astronomical Society +# who circulated a pamphlet ``The Waste of Daylight'' (1907) +# that proposed advancing clocks 20 minutes on each of four Sundays in April, +# and retarding them by the same amount on four Sundays in September. +# A bill was drafted in 1909 and introduced in Parliament several times, +# but it met with ridicule and opposition, especially from farming interests. +# Later editions of the pamphlet proposed one-hour summer time, and +# it was eventually adopted as a wartime measure in 1916. +# See: Summer Time Arrives Early, The Times (2000-05-18). +# A monument to Willett was unveiled on 1927-05-21, in an open space in +# a 45-acre wood near Chislehurst, Kent that was purchased by popular +# subscription and open to the public. On the south face of the monolith, +# designed by G. W. Miller, is the...William Willett Memorial Sundial, +# which is permanently set to Summer Time. + +# From Winston Churchill (1934-04-28): +# It is one of the paradoxes of history that we should owe the boon of +# summer time, which gives every year to the people of this country +# between 160 and 170 hours more daylight leisure, to a war which +# plunged Europe into darkness for four years, and shook the +# foundations of civilization throughout the world. +# -- <a href="http://www.winstonchurchill.org/fh114willett.htm"> +# "A Silent Toast to William Willett", Pictorial Weekly +# </a> + +# From Paul Eggert (1996-09-03): +# The OED Supplement says that the English originally said ``Daylight Saving'' +# when they were debating the adoption of DST in 1908; but by 1916 this +# term appears only in quotes taken from DST's opponents, whereas the +# proponents (who eventually won the argument) are quoted as using ``Summer''. + +# From Arthur David Olson (1989-01-19): +# +# A source at the British Information Office in New York avers that it's +# known as "British" Summer Time in all parts of the United Kingdom. + +# Date: 4 Jan 89 08:57:25 GMT (Wed) +# From: Jonathan Leffler +# [British Summer Time] is fixed annually by Act of Parliament. +# If you can predict what Parliament will do, you should be in +# politics making a fortune, not computing. + +# From Chris Carrier (1996-06-14): +# I remember reading in various wartime issues of the London Times the +# acronym BDST for British Double Summer Time. Look for the published +# time of sunrise and sunset in The Times, when BDST was in effect, and +# if you find a zone reference it will say, "All times B.D.S.T." + +# From Joseph S. Myers (1999-09-02): +# ... some military cables (WO 219/4100 - this is a copy from the +# main SHAEF archives held in the US National Archives, SHAEF/5252/8/516) +# agree that the usage is BDST (this appears in a message dated 17 Feb 1945). + +# From Joseph S. Myers (2000-10-03): +# On 18th April 1941, Sir Stephen Tallents of the BBC wrote to Sir +# Alexander Maxwell of the Home Office asking whether there was any +# official designation; the reply of the 21st was that there wasn't +# but he couldn't think of anything better than the "Double British +# Summer Time" that the BBC had been using informally. +# http://student.cusu.cam.ac.uk/~jsm28/british-time/bbc-19410418.png +# http://student.cusu.cam.ac.uk/~jsm28/british-time/ho-19410421.png + +# From Sir Alexander Maxwell in the above-mentioned letter (1941-04-21): +# [N]o official designation has as far as I know been adopted for the time +# which is to be introduced in May.... +# I cannot think of anything better than "Double British Summer Time" +# which could not be said to run counter to any official description. + +# From Paul Eggert (2000-10-02): +# Howse writes (p 157) `DBST' too, but `BDST' seems to have been common +# and follows the more usual convention of putting the location name first, +# so we use `BDST'. + +# Peter Ilieve (1998-04-19) described at length +# the history of summer time legislation in the United Kingdom. +# Since 1998 Joseph S. Myers has been updating +# and extending this list, which can be found in +# http://student.cusu.cam.ac.uk/~jsm28/british-time/ +# <a href="http://www.polyomino.org.uk/british-time/"> +# History of legal time in Britain +# </a> +# Rob Crowther (2012-01-04) reports that that URL no longer +# exists, and the article can now be found at: +# <a href="http://www.polyomino.org.uk/british-time/"> +# http://www.polyomino.org.uk/british-time/ +# </a> + +# From Joseph S. Myers (1998-01-06): +# +# The legal time in the UK outside of summer time is definitely GMT, not UTC; +# see Lord Tanlaw's speech +# <a href="http://www.parliament.the-stationery-office.co.uk/pa/ld199697/ldhansrd/pdvn/lds97/text/70611-20.htm#70611-20_head0"> +# (Lords Hansard 11 June 1997 columns 964 to 976) +# </a>. + +# From Paul Eggert (2006-03-22): +# +# For lack of other data, follow Shanks & Pottenger for Eire in 1940-1948. +# +# Given Ilieve and Myers's data, the following claims by Shanks & Pottenger +# are incorrect: +# * Wales did not switch from GMT to daylight saving time until +# 1921 Apr 3, when they began to conform with the rest of Great Britain. +# Actually, Wales was identical after 1880. +# * Eire had two transitions on 1916 Oct 1. +# It actually just had one transition. +# * Northern Ireland used single daylight saving time throughout WW II. +# Actually, it conformed to Britain. +# * GB-Eire changed standard time to 1 hour ahead of GMT on 1968-02-18. +# Actually, that date saw the usual switch to summer time. +# Standard time was not changed until 1968-10-27 (the clocks didn't change). +# +# Here is another incorrect claim by Shanks & Pottenger: +# * Jersey, Guernsey, and the Isle of Man did not switch from GMT +# to daylight saving time until 1921 Apr 3, when they began to +# conform with Great Britain. +# S.R.&O. 1916, No. 382 and HO 45/10811/312364 (quoted above) say otherwise. +# +# The following claim by Shanks & Pottenger is possible though doubtful; +# we'll ignore it for now. +# * Dublin's 1971-10-31 switch was at 02:00, even though London's was 03:00. +# +# +# Whitman says Dublin Mean Time was -0:25:21, which is more precise than +# Shanks & Pottenger. +# Perhaps this was Dunsink Observatory Time, as Dunsink Observatory +# (8 km NW of Dublin's center) seemingly was to Dublin as Greenwich was +# to London. For example: +# +# "Timeball on the ballast office is down. Dunsink time." +# -- James Joyce, Ulysses + +# From Joseph S. Myers (2005-01-26): +# Irish laws are available online at www.irishstatutebook.ie. These include +# various relating to legal time, for example: +# +# ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html +# +# ZZSI71Y1947.html ZZSI128Y1948.html ZZSI23Y1949.html ZZSI41Y1950.html +# ZZSI27Y1951.html ZZSI73Y1952.html +# +# ZZSI11Y1961.html ZZSI232Y1961.html ZZSI182Y1962.html +# ZZSI167Y1963.html ZZSI257Y1964.html ZZSI198Y1967.html +# ZZA23Y1968.html ZZA17Y1971.html +# +# ZZSI67Y1981.html ZZSI212Y1982.html ZZSI45Y1986.html +# ZZSI264Y1988.html ZZSI52Y1990.html ZZSI371Y1992.html +# ZZSI395Y1994.html ZZSI484Y1997.html ZZSI506Y2001.html +# +# [These are all relative to the root, e.g., the first is +# <http://www.irishstatutebook.ie/ZZA13Y1923.html>.] +# +# (These are those I found, but there could be more. In any case these +# should allow various updates to the comments in the europe file to cover +# the laws applicable in Ireland.) +# +# (Note that the time in the Republic of Ireland since 1968 has been defined +# in terms of standard time being GMT+1 with a period of winter time when it +# is GMT, rather than standard time being GMT with a period of summer time +# being GMT+1.) + +# From Paul Eggert (1999-03-28): +# Clive Feather (<news:859845706.26043.0@office.demon.net>, 1997-03-31) +# reports that Folkestone (Cheriton) Shuttle Terminal uses Concession Time +# (CT), equivalent to French civil time. +# Julian Hill (<news:36118128.5A14@virgin.net>, 1998-09-30) reports that +# trains between Dollands Moor (the freight facility next door) +# and Frethun run in CT. +# My admittedly uninformed guess is that the terminal has two authorities, +# the French concession operators and the British civil authorities, +# and that the time depends on who you're talking to. +# If, say, the British police were called to the station for some reason, +# I would expect the official police report to use GMT/BST and not CET/CEST. +# This is a borderline case, but for now let's stick to GMT/BST. + +# From an anonymous contributor (1996-06-02): +# The law governing time in Ireland is under Statutory Instrument SI 395/94, +# which gives force to European Union 7th Council Directive # 94/21/EC. +# Under this directive, the Minister for Justice in Ireland makes appropriate +# regulations. I spoke this morning with the Secretary of the Department of +# Justice (tel +353 1 678 9711) who confirmed to me that the correct name is +# "Irish Summer Time", abbreviated to "IST". + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Summer Time Act, 1916 +Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST +Rule GB-Eire 1916 only - Oct 1 2:00s 0 GMT +# S.R.&O. 1917, No. 358 +Rule GB-Eire 1917 only - Apr 8 2:00s 1:00 BST +Rule GB-Eire 1917 only - Sep 17 2:00s 0 GMT +# S.R.&O. 1918, No. 274 +Rule GB-Eire 1918 only - Mar 24 2:00s 1:00 BST +Rule GB-Eire 1918 only - Sep 30 2:00s 0 GMT +# S.R.&O. 1919, No. 297 +Rule GB-Eire 1919 only - Mar 30 2:00s 1:00 BST +Rule GB-Eire 1919 only - Sep 29 2:00s 0 GMT +# S.R.&O. 1920, No. 458 +Rule GB-Eire 1920 only - Mar 28 2:00s 1:00 BST +# S.R.&O. 1920, No. 1844 +Rule GB-Eire 1920 only - Oct 25 2:00s 0 GMT +# S.R.&O. 1921, No. 363 +Rule GB-Eire 1921 only - Apr 3 2:00s 1:00 BST +Rule GB-Eire 1921 only - Oct 3 2:00s 0 GMT +# S.R.&O. 1922, No. 264 +Rule GB-Eire 1922 only - Mar 26 2:00s 1:00 BST +Rule GB-Eire 1922 only - Oct 8 2:00s 0 GMT +# The Summer Time Act, 1922 +Rule GB-Eire 1923 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1923 1924 - Sep Sun>=16 2:00s 0 GMT +Rule GB-Eire 1924 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1925 1926 - Apr Sun>=16 2:00s 1:00 BST +# The Summer Time Act, 1925 +Rule GB-Eire 1925 1938 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1927 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1928 1929 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1930 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1931 1932 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1933 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1934 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1935 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1936 1937 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1938 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1939 only - Apr Sun>=16 2:00s 1:00 BST +# S.R.&O. 1939, No. 1379 +Rule GB-Eire 1939 only - Nov Sun>=16 2:00s 0 GMT +# S.R.&O. 1940, No. 172 and No. 1883 +Rule GB-Eire 1940 only - Feb Sun>=23 2:00s 1:00 BST +# S.R.&O. 1941, No. 476 +Rule GB-Eire 1941 only - May Sun>=2 1:00s 2:00 BDST +Rule GB-Eire 1941 1943 - Aug Sun>=9 1:00s 1:00 BST +# S.R.&O. 1942, No. 506 +Rule GB-Eire 1942 1944 - Apr Sun>=2 1:00s 2:00 BDST +# S.R.&O. 1944, No. 932 +Rule GB-Eire 1944 only - Sep Sun>=16 1:00s 1:00 BST +# S.R.&O. 1945, No. 312 +Rule GB-Eire 1945 only - Apr Mon>=2 1:00s 2:00 BDST +Rule GB-Eire 1945 only - Jul Sun>=9 1:00s 1:00 BST +# S.R.&O. 1945, No. 1208 +Rule GB-Eire 1945 1946 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1946 only - Apr Sun>=9 2:00s 1:00 BST +# The Summer Time Act, 1947 +Rule GB-Eire 1947 only - Mar 16 2:00s 1:00 BST +Rule GB-Eire 1947 only - Apr 13 1:00s 2:00 BDST +Rule GB-Eire 1947 only - Aug 10 1:00s 1:00 BST +Rule GB-Eire 1947 only - Nov 2 2:00s 0 GMT +# Summer Time Order, 1948 (S.I. 1948/495) +Rule GB-Eire 1948 only - Mar 14 2:00s 1:00 BST +Rule GB-Eire 1948 only - Oct 31 2:00s 0 GMT +# Summer Time Order, 1949 (S.I. 1949/373) +Rule GB-Eire 1949 only - Apr 3 2:00s 1:00 BST +Rule GB-Eire 1949 only - Oct 30 2:00s 0 GMT +# Summer Time Order, 1950 (S.I. 1950/518) +# Summer Time Order, 1951 (S.I. 1951/430) +# Summer Time Order, 1952 (S.I. 1952/451) +Rule GB-Eire 1950 1952 - Apr Sun>=14 2:00s 1:00 BST +Rule GB-Eire 1950 1952 - Oct Sun>=21 2:00s 0 GMT +# revert to the rules of the Summer Time Act, 1925 +Rule GB-Eire 1953 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1953 1960 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1954 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1955 1956 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1957 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1958 1959 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1960 only - Apr Sun>=9 2:00s 1:00 BST +# Summer Time Order, 1961 (S.I. 1961/71) +# Summer Time (1962) Order, 1961 (S.I. 1961/2465) +# Summer Time Order, 1963 (S.I. 1963/81) +Rule GB-Eire 1961 1963 - Mar lastSun 2:00s 1:00 BST +Rule GB-Eire 1961 1968 - Oct Sun>=23 2:00s 0 GMT +# Summer Time (1964) Order, 1963 (S.I. 1963/2101) +# Summer Time Order, 1964 (S.I. 1964/1201) +# Summer Time Order, 1967 (S.I. 1967/1148) +Rule GB-Eire 1964 1967 - Mar Sun>=19 2:00s 1:00 BST +# Summer Time Order, 1968 (S.I. 1968/117) +Rule GB-Eire 1968 only - Feb 18 2:00s 1:00 BST +# The British Standard Time Act, 1968 +# (no summer time) +# The Summer Time Act, 1972 +Rule GB-Eire 1972 1980 - Mar Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1972 1980 - Oct Sun>=23 2:00s 0 GMT +# Summer Time Order, 1980 (S.I. 1980/1089) +# Summer Time Order, 1982 (S.I. 1982/1673) +# Summer Time Order, 1986 (S.I. 1986/223) +# Summer Time Order, 1988 (S.I. 1988/931) +Rule GB-Eire 1981 1995 - Mar lastSun 1:00u 1:00 BST +Rule GB-Eire 1981 1989 - Oct Sun>=23 1:00u 0 GMT +# Summer Time Order, 1989 (S.I. 1989/985) +# Summer Time Order, 1992 (S.I. 1992/1729) +# Summer Time Order 1994 (S.I. 1994/2798) +Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT +# Summer Time Order 1997 (S.I. 1997/2982) +# See EU for rules starting in 1996. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s + 0:00 GB-Eire %s 1968 Oct 27 + 1:00 - BST 1971 Oct 31 2:00u + 0:00 GB-Eire %s 1996 + 0:00 EU GMT/BST +Link Europe/London Europe/Jersey +Link Europe/London Europe/Guernsey +Link Europe/London Europe/Isle_of_Man +Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2 + -0:25:21 - DMT 1916 May 21 2:00 + -0:25:21 1:00 IST 1916 Oct 1 2:00s + 0:00 GB-Eire %s 1921 Dec 6 # independence + 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00 + 0:00 1:00 IST 1946 Oct 6 2:00 + 0:00 - GMT 1947 Mar 16 2:00 + 0:00 1:00 IST 1947 Nov 2 2:00 + 0:00 - GMT 1948 Apr 18 2:00 + 0:00 GB-Eire GMT/IST 1968 Oct 27 + 1:00 - IST 1971 Oct 31 2:00u + 0:00 GB-Eire GMT/IST 1996 + 0:00 EU GMT/IST + +############################################################################### + +# Europe + +# EU rules are for the European Union, previously known as the EC, EEC, +# Common Market, etc. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S +Rule EU 1977 only - Sep lastSun 1:00u 0 - +Rule EU 1978 only - Oct 1 1:00u 0 - +Rule EU 1979 1995 - Sep lastSun 1:00u 0 - +Rule EU 1981 max - Mar lastSun 1:00u 1:00 S +Rule EU 1996 max - Oct lastSun 1:00u 0 - +# The most recent directive covers the years starting in 2002. See: +# <a="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT"> +# Directive 2000/84/EC of the European Parliament and of the Council +# of 19 January 2001 on summer-time arrangements. +# </a> + +# W-Eur differs from EU only in that W-Eur uses standard time. +Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 S +Rule W-Eur 1977 only - Sep lastSun 1:00s 0 - +Rule W-Eur 1978 only - Oct 1 1:00s 0 - +Rule W-Eur 1979 1995 - Sep lastSun 1:00s 0 - +Rule W-Eur 1981 max - Mar lastSun 1:00s 1:00 S +Rule W-Eur 1996 max - Oct lastSun 1:00s 0 - + +# Older C-Eur rules are for convenience in the tables. +# From 1977 on, C-Eur differs from EU only in that C-Eur uses standard time. +Rule C-Eur 1916 only - Apr 30 23:00 1:00 S +Rule C-Eur 1916 only - Oct 1 1:00 0 - +Rule C-Eur 1917 1918 - Apr Mon>=15 2:00s 1:00 S +Rule C-Eur 1917 1918 - Sep Mon>=15 2:00s 0 - +Rule C-Eur 1940 only - Apr 1 2:00s 1:00 S +Rule C-Eur 1942 only - Nov 2 2:00s 0 - +Rule C-Eur 1943 only - Mar 29 2:00s 1:00 S +Rule C-Eur 1943 only - Oct 4 2:00s 0 - +Rule C-Eur 1944 1945 - Apr Mon>=1 2:00s 1:00 S +# Whitman gives 1944 Oct 7; go with Shanks & Pottenger. +Rule C-Eur 1944 only - Oct 2 2:00s 0 - +# From Jesper Norgaard Welen (2008-07-13): +# +# I found what is probably a typo of 2:00 which should perhaps be 2:00s +# in the C-Eur rule from tz database version 2008d (this part was +# corrected in version 2008d). The circumstancial evidence is simply the +# tz database itself, as seen below: +# +# Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01 +# 0:00 France WE%sT 1945 Sep 16 3:00 +# +# Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15 +# 0:00 France WE%sT 1945 Sep 16 3:00 +# +# Zone Europe/Belgrade 1:22:00 - LMT 1884 +# 1:00 1:00 CEST 1945 Sep 16 2:00s +# +# Rule France 1945 only - Sep 16 3:00 0 - +# Rule Belgium 1945 only - Sep 16 2:00s 0 - +# Rule Neth 1945 only - Sep 16 2:00s 0 - +# +# The rule line to be changed is: +# +# Rule C-Eur 1945 only - Sep 16 2:00 0 - +# +# It seems that Paris, Monaco, Rule France, Rule Belgium all agree on +# 2:00 standard time, e.g. 3:00 local time. However there are no +# countries that use C-Eur rules in September 1945, so the only items +# affected are apparently these ficticious zones that translates acronyms +# CET and MET: +# +# Zone CET 1:00 C-Eur CE%sT +# Zone MET 1:00 C-Eur ME%sT +# +# It this is right then the corrected version would look like: +# +# Rule C-Eur 1945 only - Sep 16 2:00s 0 - +# +# A small step for mankind though 8-) +Rule C-Eur 1945 only - Sep 16 2:00s 0 - +Rule C-Eur 1977 1980 - Apr Sun>=1 2:00s 1:00 S +Rule C-Eur 1977 only - Sep lastSun 2:00s 0 - +Rule C-Eur 1978 only - Oct 1 2:00s 0 - +Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 - +Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S +Rule C-Eur 1996 max - Oct lastSun 2:00s 0 - + +# E-Eur differs from EU only in that E-Eur switches at midnight local time. +Rule E-Eur 1977 1980 - Apr Sun>=1 0:00 1:00 S +Rule E-Eur 1977 only - Sep lastSun 0:00 0 - +Rule E-Eur 1978 only - Oct 1 0:00 0 - +Rule E-Eur 1979 1995 - Sep lastSun 0:00 0 - +Rule E-Eur 1981 max - Mar lastSun 0:00 1:00 S +Rule E-Eur 1996 max - Oct lastSun 0:00 0 - + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time +Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time +Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time +Rule Russia 1918 only - Sep 16 1:00 1:00 MST +Rule Russia 1919 only - May 31 23:00 2:00 MDST +Rule Russia 1919 only - Jul 1 2:00 1:00 S +Rule Russia 1919 only - Aug 16 0:00 0 - +Rule Russia 1921 only - Feb 14 23:00 1:00 S +Rule Russia 1921 only - Mar 20 23:00 2:00 M # Midsummer +Rule Russia 1921 only - Sep 1 0:00 1:00 S +Rule Russia 1921 only - Oct 1 0:00 0 - +# Act No.925 of the Council of Ministers of the USSR (1980-10-24): +Rule Russia 1981 1984 - Apr 1 0:00 1:00 S +Rule Russia 1981 1983 - Oct 1 0:00 0 - +# Act No.967 of the Council of Ministers of the USSR (1984-09-13), repeated in +# Act No.227 of the Council of Ministers of the USSR (1989-03-14): +Rule Russia 1984 1991 - Sep lastSun 2:00s 0 - +Rule Russia 1985 1991 - Mar lastSun 2:00s 1:00 S +# +Rule Russia 1992 only - Mar lastSat 23:00 1:00 S +Rule Russia 1992 only - Sep lastSat 23:00 0 - +Rule Russia 1993 2010 - Mar lastSun 2:00s 1:00 S +Rule Russia 1993 1995 - Sep lastSun 2:00s 0 - +Rule Russia 1996 2010 - Oct lastSun 2:00s 0 - + +# From Alexander Krivenyshev (2011-06-14): +# According to Kremlin press service, Russian President Dmitry Medvedev +# signed a federal law "On calculation of time" on June 9, 2011. +# According to the law Russia is abolishing daylight saving time. +# +# Medvedev signed a law "On the Calculation of Time" (in russian): +# <a href="http://bmockbe.ru/events/?ID=7583"> +# http://bmockbe.ru/events/?ID=7583 +# </a> +# +# Medvedev signed a law on the calculation of the time (in russian): +# <a href="http://www.regnum.ru/news/polit/1413906.html"> +# http://www.regnum.ru/news/polit/1413906.html +# </a> + +# From Arthur David Olson (2011-06-15): +# Take "abolishing daylight saving time" to mean that time is now considered +# to be standard. + +# These are for backward compatibility with older versions. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone WET 0:00 EU WE%sT +Zone CET 1:00 C-Eur CE%sT +Zone MET 1:00 C-Eur ME%sT +Zone EET 2:00 EU EE%sT + +# Previous editions of this database used abbreviations like MET DST +# for Central European Summer Time, but this didn't agree with common usage. + +# From Markus Kuhn (1996-07-12): +# The official German names ... are +# +# Mitteleuropaeische Zeit (MEZ) = UTC+01:00 +# Mitteleuropaeische Sommerzeit (MESZ) = UTC+02:00 +# +# as defined in the German Time Act (Gesetz ueber die Zeitbestimmung (ZeitG), +# 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111).... +# I wrote ... to the German Federal Physical-Technical Institution +# +# Physikalisch-Technische Bundesanstalt (PTB) +# Laboratorium 4.41 "Zeiteinheit" +# Postfach 3345 +# D-38023 Braunschweig +# phone: +49 531 592-0 +# +# ... I received today an answer letter from Dr. Peter Hetzel, head of the PTB +# department for time and frequency transmission. He explained that the +# PTB translates MEZ and MESZ into English as +# +# Central European Time (CET) = UTC+01:00 +# Central European Summer Time (CEST) = UTC+02:00 + + +# Albania +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Albania 1940 only - Jun 16 0:00 1:00 S +Rule Albania 1942 only - Nov 2 3:00 0 - +Rule Albania 1943 only - Mar 29 2:00 1:00 S +Rule Albania 1943 only - Apr 10 3:00 0 - +Rule Albania 1974 only - May 4 0:00 1:00 S +Rule Albania 1974 only - Oct 2 0:00 0 - +Rule Albania 1975 only - May 1 0:00 1:00 S +Rule Albania 1975 only - Oct 2 0:00 0 - +Rule Albania 1976 only - May 2 0:00 1:00 S +Rule Albania 1976 only - Oct 3 0:00 0 - +Rule Albania 1977 only - May 8 0:00 1:00 S +Rule Albania 1977 only - Oct 2 0:00 0 - +Rule Albania 1978 only - May 6 0:00 1:00 S +Rule Albania 1978 only - Oct 1 0:00 0 - +Rule Albania 1979 only - May 5 0:00 1:00 S +Rule Albania 1979 only - Sep 30 0:00 0 - +Rule Albania 1980 only - May 3 0:00 1:00 S +Rule Albania 1980 only - Oct 4 0:00 0 - +Rule Albania 1981 only - Apr 26 0:00 1:00 S +Rule Albania 1981 only - Sep 27 0:00 0 - +Rule Albania 1982 only - May 2 0:00 1:00 S +Rule Albania 1982 only - Oct 3 0:00 0 - +Rule Albania 1983 only - Apr 18 0:00 1:00 S +Rule Albania 1983 only - Oct 1 0:00 0 - +Rule Albania 1984 only - Apr 1 0:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Tirane 1:19:20 - LMT 1914 + 1:00 - CET 1940 Jun 16 + 1:00 Albania CE%sT 1984 Jul + 1:00 EU CE%sT + +# Andorra +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Andorra 0:06:04 - LMT 1901 + 0:00 - WET 1946 Sep 30 + 1:00 - CET 1985 Mar 31 2:00 + 1:00 EU CE%sT + +# Austria + +# From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and +# 1945-11-18, but the Austrian Federal Office of Metrology and +# Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged" +# date of 1945-04-12 with no time. For the 1980-04-06 transition +# Shanks & Pottenger give 02:00, the BEV 00:00. Go with the BEV, +# and guess 02:00 for 1945-04-12. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Austria 1920 only - Apr 5 2:00s 1:00 S +Rule Austria 1920 only - Sep 13 2:00s 0 - +Rule Austria 1946 only - Apr 14 2:00s 1:00 S +Rule Austria 1946 1948 - Oct Sun>=1 2:00s 0 - +Rule Austria 1947 only - Apr 6 2:00s 1:00 S +Rule Austria 1948 only - Apr 18 2:00s 1:00 S +Rule Austria 1980 only - Apr 6 0:00 1:00 S +Rule Austria 1980 only - Sep 28 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Vienna 1:05:20 - LMT 1893 Apr + 1:00 C-Eur CE%sT 1920 + 1:00 Austria CE%sT 1940 Apr 1 2:00s + 1:00 C-Eur CE%sT 1945 Apr 2 2:00s + 1:00 1:00 CEST 1945 Apr 12 2:00s + 1:00 - CET 1946 + 1:00 Austria CE%sT 1981 + 1:00 EU CE%sT + +# Belarus +# From Yauhen Kharuzhy (2011-09-16): +# By latest Belarus government act Europe/Minsk timezone was changed to +# GMT+3 without DST (was GMT+2 with DST). +# +# Sources (Russian language): +# 1. +# <a href="http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html"> +# http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html +# </a> +# 2. +# <a href="http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/"> +# http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/ +# </a> +# 3. +# <a href="http://news.tut.by/society/250578.html"> +# http://news.tut.by/society/250578.html +# </a> +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Minsk 1:50:16 - LMT 1880 + 1:50 - MMT 1924 May 2 # Minsk Mean Time + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Jun 28 + 1:00 C-Eur CE%sT 1944 Jul 3 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1991 Mar 31 2:00s + 2:00 1:00 EEST 1991 Sep 29 2:00s + 2:00 - EET 1992 Mar 29 0:00s + 2:00 1:00 EEST 1992 Sep 27 0:00s + 2:00 Russia EE%sT 2011 Mar 27 2:00s + 3:00 - FET # Further-eastern European Time + +# Belgium +# +# From Paul Eggert (1997-07-02): +# Entries from 1918 through 1991 are taken from: +# Annuaire de L'Observatoire Royal de Belgique, +# Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe annee, 1991 +# (Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC), +# pp 8-9. +# LMT before 1892 was 0:17:30, according to the official journal of Belgium: +# Moniteur Belge, Samedi 30 Avril 1892, N.121. +# Thanks to Pascal Delmoitie for these references. +# The 1918 rules are listed for completeness; they apply to unoccupied Belgium. +# Assume Brussels switched to WET in 1918 when the armistice took effect. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Belgium 1918 only - Mar 9 0:00s 1:00 S +Rule Belgium 1918 1919 - Oct Sat>=1 23:00s 0 - +Rule Belgium 1919 only - Mar 1 23:00s 1:00 S +Rule Belgium 1920 only - Feb 14 23:00s 1:00 S +Rule Belgium 1920 only - Oct 23 23:00s 0 - +Rule Belgium 1921 only - Mar 14 23:00s 1:00 S +Rule Belgium 1921 only - Oct 25 23:00s 0 - +Rule Belgium 1922 only - Mar 25 23:00s 1:00 S +Rule Belgium 1922 1927 - Oct Sat>=1 23:00s 0 - +Rule Belgium 1923 only - Apr 21 23:00s 1:00 S +Rule Belgium 1924 only - Mar 29 23:00s 1:00 S +Rule Belgium 1925 only - Apr 4 23:00s 1:00 S +# DSH writes that a royal decree of 1926-02-22 specified the Sun following 3rd +# Sat in Apr (except if it's Easter, in which case it's one Sunday earlier), +# to Sun following 1st Sat in Oct, and that a royal decree of 1928-09-15 +# changed the transition times to 02:00 GMT. +Rule Belgium 1926 only - Apr 17 23:00s 1:00 S +Rule Belgium 1927 only - Apr 9 23:00s 1:00 S +Rule Belgium 1928 only - Apr 14 23:00s 1:00 S +Rule Belgium 1928 1938 - Oct Sun>=2 2:00s 0 - +Rule Belgium 1929 only - Apr 21 2:00s 1:00 S +Rule Belgium 1930 only - Apr 13 2:00s 1:00 S +Rule Belgium 1931 only - Apr 19 2:00s 1:00 S +Rule Belgium 1932 only - Apr 3 2:00s 1:00 S +Rule Belgium 1933 only - Mar 26 2:00s 1:00 S +Rule Belgium 1934 only - Apr 8 2:00s 1:00 S +Rule Belgium 1935 only - Mar 31 2:00s 1:00 S +Rule Belgium 1936 only - Apr 19 2:00s 1:00 S +Rule Belgium 1937 only - Apr 4 2:00s 1:00 S +Rule Belgium 1938 only - Mar 27 2:00s 1:00 S +Rule Belgium 1939 only - Apr 16 2:00s 1:00 S +Rule Belgium 1939 only - Nov 19 2:00s 0 - +Rule Belgium 1940 only - Feb 25 2:00s 1:00 S +Rule Belgium 1944 only - Sep 17 2:00s 0 - +Rule Belgium 1945 only - Apr 2 2:00s 1:00 S +Rule Belgium 1945 only - Sep 16 2:00s 0 - +Rule Belgium 1946 only - May 19 2:00s 1:00 S +Rule Belgium 1946 only - Oct 7 2:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Brussels 0:17:30 - LMT 1880 + 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT + 0:00 - WET 1914 Nov 8 + 1:00 - CET 1916 May 1 0:00 + 1:00 C-Eur CE%sT 1918 Nov 11 11:00u + 0:00 Belgium WE%sT 1940 May 20 2:00s + 1:00 C-Eur CE%sT 1944 Sep 3 + 1:00 Belgium CE%sT 1977 + 1:00 EU CE%sT + +# Bosnia and Herzegovina +# see Serbia + +# Bulgaria +# +# From Plamen Simenov via Steffen Thorsen (1999-09-09): +# A document of Government of Bulgaria (No.94/1997) says: +# EET --> EETDST is in 03:00 Local time in last Sunday of March ... +# EETDST --> EET is in 04:00 Local time in last Sunday of October +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Bulg 1979 only - Mar 31 23:00 1:00 S +Rule Bulg 1979 only - Oct 1 1:00 0 - +Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S +Rule Bulg 1980 only - Sep 29 1:00 0 - +Rule Bulg 1981 only - Sep 27 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Sofia 1:33:16 - LMT 1880 + 1:56:56 - IMT 1894 Nov 30 # Istanbul MT? + 2:00 - EET 1942 Nov 2 3:00 + 1:00 C-Eur CE%sT 1945 + 1:00 - CET 1945 Apr 2 3:00 + 2:00 - EET 1979 Mar 31 23:00 + 2:00 Bulg EE%sT 1982 Sep 26 2:00 + 2:00 C-Eur EE%sT 1991 + 2:00 E-Eur EE%sT 1997 + 2:00 EU EE%sT + +# Croatia +# see Serbia + +# Cyprus +# Please see the `asia' file for Asia/Nicosia. + +# Czech Republic +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Czech 1945 only - Apr 8 2:00s 1:00 S +Rule Czech 1945 only - Nov 18 2:00s 0 - +Rule Czech 1946 only - May 6 2:00s 1:00 S +Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 - +Rule Czech 1947 only - Apr 20 2:00s 1:00 S +Rule Czech 1948 only - Apr 18 2:00s 1:00 S +Rule Czech 1949 only - Apr 9 2:00s 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Prague 0:57:44 - LMT 1850 + 0:57:44 - PMT 1891 Oct # Prague Mean Time + 1:00 C-Eur CE%sT 1944 Sep 17 2:00s + 1:00 Czech CE%sT 1979 + 1:00 EU CE%sT + +# Denmark, Faroe Islands, and Greenland + +# From Jesper Norgaard Welen (2005-04-26): +# http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law +# [introducing standard time] was in effect from 1894-01-01.... +# The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL +# confirms this, and states that the law was put forth 1893-03-29. +# +# The EU treaty with effect from 1973: +# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL +# +# This provoked a new law from 1974 to make possible summer time changes +# in subsequenet decrees with the law +# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL +# +# It seems however that no decree was set forward until 1980. I have +# not found any decree, but in another related law, the effecting DST +# changes are stated explicitly to be from 1980-04-06 at 02:00 to +# 1980-09-28 at 02:00. If this is true, this differs slightly from +# the EU rule in that DST runs to 02:00, not 03:00. We don't know +# when Denmark began using the EU rule correctly, but we have only +# confirmation of the 1980-time, so I presume it was correct in 1981: +# The law is about the management of the extra hour, concerning +# working hours reported and effect on obligatory-rest rules (which +# was suspended on that night): +# http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL + +# From Jesper Norgaard Welen (2005-06-11): +# The Herning Folkeblad (1980-09-26) reported that the night between +# Saturday and Sunday the clock is set back from three to two. + +# From Paul Eggert (2005-06-11): +# Hence the "02:00" of the 1980 law refers to standard time, not +# wall-clock time, and so the EU rules were in effect in 1980. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Denmark 1916 only - May 14 23:00 1:00 S +Rule Denmark 1916 only - Sep 30 23:00 0 - +Rule Denmark 1940 only - May 15 0:00 1:00 S +Rule Denmark 1945 only - Apr 2 2:00s 1:00 S +Rule Denmark 1945 only - Aug 15 2:00s 0 - +Rule Denmark 1946 only - May 1 2:00s 1:00 S +Rule Denmark 1946 only - Sep 1 2:00s 0 - +Rule Denmark 1947 only - May 4 2:00s 1:00 S +Rule Denmark 1947 only - Aug 10 2:00s 0 - +Rule Denmark 1948 only - May 9 2:00s 1:00 S +Rule Denmark 1948 only - Aug 8 2:00s 0 - +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Copenhagen 0:50:20 - LMT 1890 + 0:50:20 - CMT 1894 Jan 1 # Copenhagen MT + 1:00 Denmark CE%sT 1942 Nov 2 2:00s + 1:00 C-Eur CE%sT 1945 Apr 2 2:00 + 1:00 Denmark CE%sT 1980 + 1:00 EU CE%sT +Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn + 0:00 - WET 1981 + 0:00 EU WE%sT +# +# From Paul Eggert (2004-10-31): +# During World War II, Germany maintained secret manned weather stations in +# East Greenland and Franz Josef Land, but we don't know their time zones. +# My source for this is Wilhelm Dege's book mentioned under Svalbard. +# +# From Paul Eggert (2006-03-22): +# Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01, +# and left the EU on 1985-02-01. It therefore should have been using EU +# rules at least through 1984. Shanks & Pottenger say Scoresbysund and Godthab +# used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU +# rules since at least 1991. Assume EU rules since 1980. + +# From Gwillin Law (2001-06-06), citing +# <http://www.statkart.no/efs/efshefter/2001/efs5-2001.pdf> (2001-03-15), +# and with translations corrected by Steffen Thorsen: +# +# Greenland has four local times, and the relation to UTC +# is according to the following time line: +# +# The military zone near Thule UTC-4 +# Standard Greenland time UTC-3 +# Scoresbysund UTC-1 +# Danmarkshavn UTC +# +# In the military area near Thule and in Danmarkshavn DST will not be +# introduced. + +# From Rives McDow (2001-11-01): +# +# I correspond regularly with the Dansk Polarcenter, and wrote them at +# the time to clarify the situation in Thule. Unfortunately, I have +# not heard back from them regarding my recent letter. [But I have +# info from earlier correspondence.] +# +# According to the center, a very small local time zone around Thule +# Air Base keeps the time according to UTC-4, implementing daylight +# savings using North America rules, changing the time at 02:00 local time.... +# +# The east coast of Greenland north of the community of Scoresbysund +# uses UTC in the same way as in Iceland, year round, with no dst. +# There are just a few stations on this coast, including the +# Danmarkshavn ICAO weather station mentioned in your September 29th +# email. The other stations are two sledge patrol stations in +# Mestersvig and Daneborg, the air force base at Station Nord, and the +# DPC research station at Zackenberg. +# +# Scoresbysund and two small villages nearby keep time UTC-1 and use +# the same daylight savings time period as in West Greenland (Godthab). +# +# The rest of Greenland, including Godthab (this area, although it +# includes central Greenland, is known as west Greenland), keeps time +# UTC-3, with daylight savings methods according to European rules. +# +# It is common procedure to use UTC 0 in the wilderness of East and +# North Greenland, because it is mainly Icelandic aircraft operators +# maintaining traffic in these areas. However, the official status of +# this area is that it sticks with Godthab time. This area might be +# considered a dual time zone in some respects because of this. + +# From Rives McDow (2001-11-19): +# I heard back from someone stationed at Thule; the time change took place +# there at 2:00 AM. + +# From Paul Eggert (2006-03-22): +# From 1997 on the CIA map shows Danmarkshavn on GMT; +# the 1995 map as like Godthab. +# For lack of better info, assume they were like Godthab before 1996. +# startkart.no says Thule does not observe DST, but this is clearly an error, +# so go with Shanks & Pottenger for Thule transitions until this year. +# For 2007 on assume Thule will stay in sync with US DST rules. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D +Rule Thule 1991 1992 - Sep lastSun 2:00 0 S +Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D +Rule Thule 1993 2006 - Oct lastSun 2:00 0 S +Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D +Rule Thule 2007 max - Nov Sun>=1 2:00 0 S +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28 + -3:00 - WGT 1980 Apr 6 2:00 + -3:00 EU WG%sT 1996 + 0:00 - GMT +Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit + -2:00 - CGT 1980 Apr 6 2:00 + -2:00 C-Eur CG%sT 1981 Mar 29 + -1:00 EU EG%sT +Zone America/Godthab -3:26:56 - LMT 1916 Jul 28 # Nuuk + -3:00 - WGT 1980 Apr 6 2:00 + -3:00 EU WG%sT +Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base + -4:00 Thule A%sT + +# Estonia +# From Peter Ilieve (1994-10-15): +# A relative in Tallinn confirms the accuracy of the data for 1989 onwards +# [through 1994] and gives the legal authority for it, +# a regulation of the Government of Estonia, No. 111 of 1989.... +# +# From Peter Ilieve (1996-10-28): +# [IATA SSIM (1992/1996) claims that the Baltic republics switch at 01:00s, +# but a relative confirms that Estonia still switches at 02:00s, writing:] +# ``I do not [know] exactly but there are some little different +# (confusing) rules for International Air and Railway Transport Schedules +# conversion in Sunday connected with end of summer time in Estonia.... +# A discussion is running about the summer time efficiency and effect on +# human physiology. It seems that Estonia maybe will not change to +# summer time next spring.'' + +# From Peter Ilieve (1998-11-04), heavily edited: +# <a href="http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390"> +# The 1998-09-22 Estonian time law +# </a> +# refers to the Eighth Directive and cites the association agreement between +# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22--27, 120). +# +# I also asked [my relative] whether they use any standard abbreviation +# for their standard and summer times. He says no, they use "suveaeg" +# (summer time) and "talveaeg" (winter time). + +# From <a href="http://www.baltictimes.com/">The Baltic Times</a> (1999-09-09) +# via Steffen Thorsen: +# This year will mark the last time Estonia shifts to summer time, +# a council of the ruling coalition announced Sept. 6.... +# But what this could mean for Estonia's chances of joining the European +# Union are still unclear. In 1994, the EU declared summer time compulsory +# for all member states until 2001. Brussels has yet to decide what to do +# after that. + +# From Mart Oruaas (2000-01-29): +# Regulation no. 301 (1999-10-12) obsoletes previous regulation +# no. 206 (1998-09-22) and thus sticks Estonia to +02:00 GMT for all +# the year round. The regulation is effective 1999-11-01. + +# From Toomas Soome (2002-02-21): +# The Estonian government has changed once again timezone politics. +# Now we are using again EU rules. +# +# From Urmet Jaanes (2002-03-28): +# The legislative reference is Government decree No. 84 on 2002-02-21. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Tallinn 1:39:00 - LMT 1880 + 1:39:00 - TMT 1918 Feb # Tallinn Mean Time + 1:00 C-Eur CE%sT 1919 Jul + 1:39:00 - TMT 1921 May + 2:00 - EET 1940 Aug 6 + 3:00 - MSK 1941 Sep 15 + 1:00 C-Eur CE%sT 1944 Sep 22 + 3:00 Russia MSK/MSD 1989 Mar 26 2:00s + 2:00 1:00 EEST 1989 Sep 24 2:00s + 2:00 C-Eur EE%sT 1998 Sep 22 + 2:00 EU EE%sT 1999 Nov 1 + 2:00 - EET 2002 Feb 21 + 2:00 EU EE%sT + +# Finland + +# From Hannu Strang (1994-09-25 06:03:37 UTC): +# Well, here in Helsinki we're just changing from summer time to regular one, +# and it's supposed to change at 4am... + +# From Janne Snabb (2010-0715): +# +# I noticed that the Finland data is not accurate for years 1981 and 1982. +# During these two first trial years the DST adjustment was made one hour +# earlier than in forthcoming years. Starting 1983 the adjustment was made +# according to the central European standards. +# +# This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac +# Office of University of Helsinki, ISBN 952-10-3221-9, available online (in +# Finnish) at +# +# <a href="http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf"> +# http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf +# </a> +# +# Page 105 (56 in PDF version) has a handy table of all past daylight savings +# transitions. It is easy enough to interpret without Finnish skills. +# +# This is also confirmed by Finnish Broadcasting Company's archive at: +# +# <a href="http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401"> +# http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401 +# </a> +# +# The news clip from 1981 says that "the time between 2 and 3 o'clock does not +# exist tonight." + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Finland 1942 only - Apr 3 0:00 1:00 S +Rule Finland 1942 only - Oct 3 0:00 0 - +Rule Finland 1981 1982 - Mar lastSun 2:00 1:00 S +Rule Finland 1981 1982 - Sep lastSun 3:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31 + 1:39:52 - HMT 1921 May # Helsinki Mean Time + 2:00 Finland EE%sT 1983 + 2:00 EU EE%sT + +# Aaland Is +Link Europe/Helsinki Europe/Mariehamn + + +# France + +# From Ciro Discepolo (2000-12-20): +# +# Henri Le Corre, Regimes Horaires pour le monde entier, Editions +# Traditionnelles - Paris 2 books, 1993 +# +# Gabriel, Traite de l'heure dans le monde, Guy Tredaniel editeur, +# Paris, 1991 +# +# Francoise Gauquelin, Problemes de l'heure resolus en astrologie, +# Guy tredaniel, Paris 1987 + + +# +# Shank & Pottenger seem to use `24:00' ambiguously; resolve it with Whitman. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule France 1916 only - Jun 14 23:00s 1:00 S +Rule France 1916 1919 - Oct Sun>=1 23:00s 0 - +Rule France 1917 only - Mar 24 23:00s 1:00 S +Rule France 1918 only - Mar 9 23:00s 1:00 S +Rule France 1919 only - Mar 1 23:00s 1:00 S +Rule France 1920 only - Feb 14 23:00s 1:00 S +Rule France 1920 only - Oct 23 23:00s 0 - +Rule France 1921 only - Mar 14 23:00s 1:00 S +Rule France 1921 only - Oct 25 23:00s 0 - +Rule France 1922 only - Mar 25 23:00s 1:00 S +# DSH writes that a law of 1923-05-24 specified 3rd Sat in Apr at 23:00 to 1st +# Sat in Oct at 24:00; and that in 1930, because of Easter, the transitions +# were Apr 12 and Oct 5. Go with Shanks & Pottenger. +Rule France 1922 1938 - Oct Sat>=1 23:00s 0 - +Rule France 1923 only - May 26 23:00s 1:00 S +Rule France 1924 only - Mar 29 23:00s 1:00 S +Rule France 1925 only - Apr 4 23:00s 1:00 S +Rule France 1926 only - Apr 17 23:00s 1:00 S +Rule France 1927 only - Apr 9 23:00s 1:00 S +Rule France 1928 only - Apr 14 23:00s 1:00 S +Rule France 1929 only - Apr 20 23:00s 1:00 S +Rule France 1930 only - Apr 12 23:00s 1:00 S +Rule France 1931 only - Apr 18 23:00s 1:00 S +Rule France 1932 only - Apr 2 23:00s 1:00 S +Rule France 1933 only - Mar 25 23:00s 1:00 S +Rule France 1934 only - Apr 7 23:00s 1:00 S +Rule France 1935 only - Mar 30 23:00s 1:00 S +Rule France 1936 only - Apr 18 23:00s 1:00 S +Rule France 1937 only - Apr 3 23:00s 1:00 S +Rule France 1938 only - Mar 26 23:00s 1:00 S +Rule France 1939 only - Apr 15 23:00s 1:00 S +Rule France 1939 only - Nov 18 23:00s 0 - +Rule France 1940 only - Feb 25 2:00 1:00 S +# The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger +# write that they were used in Monaco and in many French locations. +# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez, +# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La +# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Descartes, +# Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin, +# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois, +# Dole, Morez, St-Claude, and Collonges (Haute-Savoie). +Rule France 1941 only - May 5 0:00 2:00 M # Midsummer +# Shanks & Pottenger say this transition occurred at Oct 6 1:00, +# but go with Denis Excoffier (1997-12-12), +# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes +# as saying 5/10/41 22hUT. +Rule France 1941 only - Oct 6 0:00 1:00 S +Rule France 1942 only - Mar 9 0:00 2:00 M +Rule France 1942 only - Nov 2 3:00 1:00 S +Rule France 1943 only - Mar 29 2:00 2:00 M +Rule France 1943 only - Oct 4 3:00 1:00 S +Rule France 1944 only - Apr 3 2:00 2:00 M +Rule France 1944 only - Oct 8 1:00 1:00 S +Rule France 1945 only - Apr 2 2:00 2:00 M +Rule France 1945 only - Sep 16 3:00 0 - +# Shanks & Pottenger give Mar 28 2:00 and Sep 26 3:00; +# go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT. +Rule France 1976 only - Mar 28 1:00 1:00 S +Rule France 1976 only - Sep 26 1:00 0 - +# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05, +# but Howse quotes the actual French legislation as saying 0:09:21. +# Go with Howse. Howse writes that the time in France was officially based +# on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01 + 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT +# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre. + 0:00 France WE%sT 1940 Jun 14 23:00 +# Le Corre says Paris stuck with occupied-France time after the liberation; +# go with Shanks & Pottenger. + 1:00 C-Eur CE%sT 1944 Aug 25 + 0:00 France WE%sT 1945 Sep 16 3:00 + 1:00 France CE%sT 1977 + 1:00 EU CE%sT + +# Germany + +# From Markus Kuhn (1998-09-29): +# The German time zone web site by the Physikalisch-Technische +# Bundesanstalt contains DST information back to 1916. +# [See tz-link.htm for the URL.] + +# From Joerg Schilling (2002-10-23): +# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by +# <a href="http://www.dhm.de/lemo/html/biografien/BersarinNikolai/"> +# General [Nikolai] Bersarin</a>. + +# From Paul Eggert (2003-03-08): +# <a href="http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf"> +# http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf +# </a> +# says that Bersarin issued an order to use Moscow time on May 20. +# However, Moscow did not observe daylight saving in 1945, so +# this was equivalent to CEMT (GMT+3), not GMT+4. + + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Germany 1946 only - Apr 14 2:00s 1:00 S +Rule Germany 1946 only - Oct 7 2:00s 0 - +Rule Germany 1947 1949 - Oct Sun>=1 2:00s 0 - +# http://www.ptb.de/de/org/4/44/441/salt.htm says the following transition +# occurred at 3:00 MEZ, not the 2:00 MEZ given in Shanks & Pottenger. +# Go with the PTB. +Rule Germany 1947 only - Apr 6 3:00s 1:00 S +Rule Germany 1947 only - May 11 2:00s 2:00 M +Rule Germany 1947 only - Jun 29 3:00 1:00 S +Rule Germany 1948 only - Apr 18 2:00s 1:00 S +Rule Germany 1949 only - Apr 10 2:00s 1:00 S + +Rule SovietZone 1945 only - May 24 2:00 2:00 M # Midsummer +Rule SovietZone 1945 only - Sep 24 3:00 1:00 S +Rule SovietZone 1945 only - Nov 18 2:00s 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Berlin 0:53:28 - LMT 1893 Apr + 1:00 C-Eur CE%sT 1945 May 24 2:00 + 1:00 SovietZone CE%sT 1946 + 1:00 Germany CE%sT 1980 + 1:00 EU CE%sT + +# Georgia +# Please see the "asia" file for Asia/Tbilisi. +# Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni) +# is in Europe. Our reference location Tbilisi is in the Asian part. + +# Gibraltar +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s + 0:00 GB-Eire %s 1957 Apr 14 2:00 + 1:00 - CET 1982 + 1:00 EU CE%sT + +# Greece +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger. +Rule Greece 1932 only - Jul 7 0:00 1:00 S +Rule Greece 1932 only - Sep 1 0:00 0 - +# Whitman gives 1941 Apr 25 - ?; go with Shanks & Pottenger. +Rule Greece 1941 only - Apr 7 0:00 1:00 S +# Whitman gives 1942 Feb 2 - ?; go with Shanks & Pottenger. +Rule Greece 1942 only - Nov 2 3:00 0 - +Rule Greece 1943 only - Mar 30 0:00 1:00 S +Rule Greece 1943 only - Oct 4 0:00 0 - +# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks & Pottenger. +Rule Greece 1952 only - Jul 1 0:00 1:00 S +Rule Greece 1952 only - Nov 2 0:00 0 - +Rule Greece 1975 only - Apr 12 0:00s 1:00 S +Rule Greece 1975 only - Nov 26 0:00s 0 - +Rule Greece 1976 only - Apr 11 2:00s 1:00 S +Rule Greece 1976 only - Oct 10 2:00s 0 - +Rule Greece 1977 1978 - Apr Sun>=1 2:00s 1:00 S +Rule Greece 1977 only - Sep 26 2:00s 0 - +Rule Greece 1978 only - Sep 24 4:00 0 - +Rule Greece 1979 only - Apr 1 9:00 1:00 S +Rule Greece 1979 only - Sep 29 2:00 0 - +Rule Greece 1980 only - Apr 1 0:00 1:00 S +Rule Greece 1980 only - Sep 28 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14 + 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT + 2:00 Greece EE%sT 1941 Apr 30 + 1:00 Greece CE%sT 1944 Apr 4 + 2:00 Greece EE%sT 1981 + # Shanks & Pottenger say it switched to C-Eur in 1981; + # go with EU instead, since Greece joined it on Jan 1. + 2:00 EU EE%sT + +# Hungary +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Hungary 1918 only - Apr 1 3:00 1:00 S +Rule Hungary 1918 only - Sep 29 3:00 0 - +Rule Hungary 1919 only - Apr 15 3:00 1:00 S +Rule Hungary 1919 only - Sep 15 3:00 0 - +Rule Hungary 1920 only - Apr 5 3:00 1:00 S +Rule Hungary 1920 only - Sep 30 3:00 0 - +Rule Hungary 1945 only - May 1 23:00 1:00 S +Rule Hungary 1945 only - Nov 3 0:00 0 - +Rule Hungary 1946 only - Mar 31 2:00s 1:00 S +Rule Hungary 1946 1949 - Oct Sun>=1 2:00s 0 - +Rule Hungary 1947 1949 - Apr Sun>=4 2:00s 1:00 S +Rule Hungary 1950 only - Apr 17 2:00s 1:00 S +Rule Hungary 1950 only - Oct 23 2:00s 0 - +Rule Hungary 1954 1955 - May 23 0:00 1:00 S +Rule Hungary 1954 1955 - Oct 3 0:00 0 - +Rule Hungary 1956 only - Jun Sun>=1 0:00 1:00 S +Rule Hungary 1956 only - Sep lastSun 0:00 0 - +Rule Hungary 1957 only - Jun Sun>=1 1:00 1:00 S +Rule Hungary 1957 only - Sep lastSun 3:00 0 - +Rule Hungary 1980 only - Apr 6 1:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Budapest 1:16:20 - LMT 1890 Oct + 1:00 C-Eur CE%sT 1918 + 1:00 Hungary CE%sT 1941 Apr 6 2:00 + 1:00 C-Eur CE%sT 1945 + 1:00 Hungary CE%sT 1980 Sep 28 2:00s + 1:00 EU CE%sT + +# Iceland +# +# From Adam David (1993-11-06): +# The name of the timezone in Iceland for system / mail / news purposes is GMT. +# +# (1993-12-05): +# This material is paraphrased from the 1988 edition of the University of +# Iceland Almanak. +# +# From January 1st, 1908 the whole of Iceland was standardised at 1 hour +# behind GMT. Previously, local mean solar time was used in different parts +# of Iceland, the almanak had been based on Reykjavik mean solar time which +# was 1 hour and 28 minutes behind GMT. +# +# "first day of winter" referred to [below] means the first day of the 26 weeks +# of winter, according to the old icelandic calendar that dates back to the +# time the norsemen first settled Iceland. The first day of winter is always +# Saturday, but is not dependent on the Julian or Gregorian calendars. +# +# (1993-12-10): +# I have a reference from the Oxford Icelandic-English dictionary for the +# beginning of winter, which ties it to the ecclesiastical calendar (and thus +# to the julian/gregorian calendar) over the period in question. +# the winter begins on the Saturday next before St. Luke's day +# (old style), or on St. Luke's day, if a Saturday. +# St. Luke's day ought to be traceable from ecclesiastical sources. "old style" +# might be a reference to the Julian calendar as opposed to Gregorian, or it +# might mean something else (???). +# +# From Paul Eggert (2006-03-22): +# The Iceland Almanak, Shanks & Pottenger, and Whitman disagree on many points. +# We go with the Almanak, except for one claim from Shanks & Pottenger, namely +# that Reykavik was 21W57 from 1837 to 1908, local mean time before that. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Iceland 1917 1918 - Feb 19 23:00 1:00 S +Rule Iceland 1917 only - Oct 21 1:00 0 - +Rule Iceland 1918 only - Nov 16 1:00 0 - +Rule Iceland 1939 only - Apr 29 23:00 1:00 S +Rule Iceland 1939 only - Nov 29 2:00 0 - +Rule Iceland 1940 only - Feb 25 2:00 1:00 S +Rule Iceland 1940 only - Nov 3 2:00 0 - +Rule Iceland 1941 only - Mar 2 1:00s 1:00 S +Rule Iceland 1941 only - Nov 2 1:00s 0 - +Rule Iceland 1942 only - Mar 8 1:00s 1:00 S +Rule Iceland 1942 only - Oct 25 1:00s 0 - +# 1943-1946 - first Sunday in March until first Sunday in winter +Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 S +Rule Iceland 1943 1948 - Oct Sun>=22 1:00s 0 - +# 1947-1967 - first Sunday in April until first Sunday in winter +Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 S +# 1949 Oct transition delayed by 1 week +Rule Iceland 1949 only - Oct 30 1:00s 0 - +Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 - +Rule Iceland 1967 only - Oct 29 1:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/Reykjavik -1:27:24 - LMT 1837 + -1:27:48 - RMT 1908 # Reykjavik Mean Time? + -1:00 Iceland IS%sT 1968 Apr 7 1:00s + 0:00 - GMT + +# Italy +# +# From Paul Eggert (2001-03-06): +# Sicily and Sardinia each had their own time zones from 1866 to 1893, +# called Palermo Time (+00:53:28) and Cagliari Time (+00:36:32). +# During World War II, German-controlled Italy used German time. +# But these events all occurred before the 1970 cutoff, +# so record only the time in Rome. +# +# From Paul Eggert (2006-03-22): +# For Italian DST we have three sources: Shanks & Pottenger, Whitman, and +# F. Pollastri +# <a href="http://toi.iriti.cnr.it/uk/ienitlt.html"> +# Day-light Saving Time in Italy (2006-02-03) +# </a> +# (`FP' below), taken from an Italian National Electrotechnical Institute +# publication. When the three sources disagree, guess who's right, as follows: +# +# year FP Shanks&P. (S) Whitman (W) Go with: +# 1916 06-03 06-03 24:00 06-03 00:00 FP & W +# 09-30 09-30 24:00 09-30 01:00 FP; guess 24:00s +# 1917 04-01 03-31 24:00 03-31 00:00 FP & S +# 09-30 09-29 24:00 09-30 01:00 FP & W +# 1918 03-09 03-09 24:00 03-09 00:00 FP & S +# 10-06 10-05 24:00 10-06 01:00 FP & W +# 1919 03-01 03-01 24:00 03-01 00:00 FP & S +# 10-04 10-04 24:00 10-04 01:00 FP; guess 24:00s +# 1920 03-20 03-20 24:00 03-20 00:00 FP & S +# 09-18 09-18 24:00 10-01 01:00 FP; guess 24:00s +# 1944 04-02 04-03 02:00 S (see C-Eur) +# 09-16 10-02 03:00 FP; guess 24:00s +# 1945 09-14 09-16 24:00 FP; guess 24:00s +# 1970 05-21 05-31 00:00 S +# 09-20 09-27 00:00 S +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Italy 1916 only - Jun 3 0:00s 1:00 S +Rule Italy 1916 only - Oct 1 0:00s 0 - +Rule Italy 1917 only - Apr 1 0:00s 1:00 S +Rule Italy 1917 only - Sep 30 0:00s 0 - +Rule Italy 1918 only - Mar 10 0:00s 1:00 S +Rule Italy 1918 1919 - Oct Sun>=1 0:00s 0 - +Rule Italy 1919 only - Mar 2 0:00s 1:00 S +Rule Italy 1920 only - Mar 21 0:00s 1:00 S +Rule Italy 1920 only - Sep 19 0:00s 0 - +Rule Italy 1940 only - Jun 15 0:00s 1:00 S +Rule Italy 1944 only - Sep 17 0:00s 0 - +Rule Italy 1945 only - Apr 2 2:00 1:00 S +Rule Italy 1945 only - Sep 15 0:00s 0 - +Rule Italy 1946 only - Mar 17 2:00s 1:00 S +Rule Italy 1946 only - Oct 6 2:00s 0 - +Rule Italy 1947 only - Mar 16 0:00s 1:00 S +Rule Italy 1947 only - Oct 5 0:00s 0 - +Rule Italy 1948 only - Feb 29 2:00s 1:00 S +Rule Italy 1948 only - Oct 3 2:00s 0 - +Rule Italy 1966 1968 - May Sun>=22 0:00 1:00 S +Rule Italy 1966 1969 - Sep Sun>=22 0:00 0 - +Rule Italy 1969 only - Jun 1 0:00 1:00 S +Rule Italy 1970 only - May 31 0:00 1:00 S +Rule Italy 1970 only - Sep lastSun 0:00 0 - +Rule Italy 1971 1972 - May Sun>=22 0:00 1:00 S +Rule Italy 1971 only - Sep lastSun 1:00 0 - +Rule Italy 1972 only - Oct 1 0:00 0 - +Rule Italy 1973 only - Jun 3 0:00 1:00 S +Rule Italy 1973 1974 - Sep lastSun 0:00 0 - +Rule Italy 1974 only - May 26 0:00 1:00 S +Rule Italy 1975 only - Jun 1 0:00s 1:00 S +Rule Italy 1975 1977 - Sep lastSun 0:00s 0 - +Rule Italy 1976 only - May 30 0:00s 1:00 S +Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S +Rule Italy 1978 only - Oct 1 0:00s 0 - +Rule Italy 1979 only - Sep 30 0:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22 + 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean + 1:00 Italy CE%sT 1942 Nov 2 2:00s + 1:00 C-Eur CE%sT 1944 Jul + 1:00 Italy CE%sT 1980 + 1:00 EU CE%sT + +Link Europe/Rome Europe/Vatican +Link Europe/Rome Europe/San_Marino + +# Latvia + +# From Liene Kanepe (1998-09-17): + +# I asked about this matter Scientific Secretary of the Institute of Astronomy +# of The University of Latvia Dr. paed Mr. Ilgonis Vilks. I also searched the +# correct data in juridical acts and I found some juridical documents about +# changes in the counting of time in Latvia from 1981.... +# +# Act No.35 of the Council of Ministers of Latvian SSR of 1981-01-22 ... +# according to the Act No.925 of the Council of Ministers of USSR of 1980-10-24 +# ...: all year round the time of 2nd time zone + 1 hour, in addition turning +# the hands of the clock 1 hour forward on 1 April at 00:00 (GMT 31 March 21:00) +# and 1 hour backward on the 1 October at 00:00 (GMT 30 September 20:00). +# +# Act No.592 of the Council of Ministers of Latvian SSR of 1984-09-24 ... +# according to the Act No.967 of the Council of Ministers of USSR of 1984-09-13 +# ...: all year round the time of 2nd time zone + 1 hour, in addition turning +# the hands of the clock 1 hour forward on the last Sunday of March at 02:00 +# (GMT 23:00 on the previous day) and 1 hour backward on the last Sunday of +# September at 03:00 (GMT 23:00 on the previous day). +# +# Act No.81 of the Council of Ministers of Latvian SSR of 1989-03-22 ... +# according to the Act No.227 of the Council of Ministers of USSR of 1989-03-14 +# ...: since the last Sunday of March 1989 in Lithuanian SSR, Latvian SSR, +# Estonian SSR and Kaliningrad region of Russian Federation all year round the +# time of 2nd time zone (Moscow time minus one hour). On the territory of Latvia +# transition to summer time is performed on the last Sunday of March at 02:00 +# (GMT 00:00), turning the hands of the clock 1 hour forward. The end of +# daylight saving time is performed on the last Sunday of September at 03:00 +# (GMT 00:00), turning the hands of the clock 1 hour backward. Exception is +# 1989-03-26, when we must not turn the hands of the clock.... +# +# The Regulations of the Cabinet of Ministers of the Republic of Latvia of +# 1997-01-21 on transition to Summer time ... established the same order of +# daylight savings time settings as in the States of the European Union. + +# From Andrei Ivanov (2000-03-06): +# This year Latvia will not switch to Daylight Savings Time (as specified in +# <a href="http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm"> +# The Regulations of the Cabinet of Ministers of the Rep. of Latvia of +# 29-Feb-2000 (#79)</a>, in Latvian for subscribers only). + +# <a href="http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html"> +# From RFE/RL Newsline (2001-01-03), noted after a heads-up by Rives McDow: +# </a> +# The Latvian government on 2 January decided that the country will +# institute daylight-saving time this spring, LETA reported. +# Last February the three Baltic states decided not to turn back their +# clocks one hour in the spring.... +# Minister of Economy Aigars Kalvitis noted that Latvia had too few +# daylight hours and thus decided to comply with a draft European +# Commission directive that provides for instituting daylight-saving +# time in EU countries between 2002 and 2006. The Latvian government +# urged Lithuania and Estonia to adopt a similar time policy, but it +# appears that they will not do so.... + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Latvia 1989 1996 - Mar lastSun 2:00s 1:00 S +Rule Latvia 1989 1996 - Sep lastSun 2:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Riga 1:36:24 - LMT 1880 + 1:36:24 - RMT 1918 Apr 15 2:00 #Riga Mean Time + 1:36:24 1:00 LST 1918 Sep 16 3:00 #Latvian Summer + 1:36:24 - RMT 1919 Apr 1 2:00 + 1:36:24 1:00 LST 1919 May 22 3:00 + 1:36:24 - RMT 1926 May 11 + 2:00 - EET 1940 Aug 5 + 3:00 - MSK 1941 Jul + 1:00 C-Eur CE%sT 1944 Oct 13 + 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s + 2:00 1:00 EEST 1989 Sep lastSun 2:00s + 2:00 Latvia EE%sT 1997 Jan 21 + 2:00 EU EE%sT 2000 Feb 29 + 2:00 - EET 2001 Jan 2 + 2:00 EU EE%sT + +# Liechtenstein +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun + 1:00 - CET 1981 + 1:00 EU CE%sT + +# Lithuania + +# From Paul Eggert (1996-11-22): +# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is +# known to be wrong about Estonia and Latvia, assume it's wrong here too. + +# From Marius Gedminas (1998-08-07): +# I would like to inform that in this year Lithuanian time zone +# (Europe/Vilnius) was changed. + +# From <a href="http://www.elta.lt/">ELTA</a> No. 972 (2582) (1999-09-29), +# via Steffen Thorsen: +# Lithuania has shifted back to the second time zone (GMT plus two hours) +# to be valid here starting from October 31, +# as decided by the national government on Wednesday.... +# The Lithuanian government also announced plans to consider a +# motion to give up shifting to summer time in spring, as it was +# already done by Estonia. + +# From the <a href="http://www.tourism.lt/informa/ff.htm"> +# Fact File, Lithuanian State Department of Tourism +# </a> (2000-03-27): Local time is GMT+2 hours ..., no daylight saving. + +# From a user via Klaus Marten (2003-02-07): +# As a candidate for membership of the European Union, Lithuania will +# observe Summer Time in 2003, changing its clocks at the times laid +# down in EU Directive 2000/84 of 19.I.01 (i.e. at the same times as its +# neighbour Latvia). The text of the Lithuanian government Order of +# 7.XI.02 to this effect can be found at +# http://www.lrvk.lt/nut/11/n1749.htm + + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Vilnius 1:41:16 - LMT 1880 + 1:24:00 - WMT 1917 # Warsaw Mean Time + 1:35:36 - KMT 1919 Oct 10 # Kaunas Mean Time + 1:00 - CET 1920 Jul 12 + 2:00 - EET 1920 Oct 9 + 1:00 - CET 1940 Aug 3 + 3:00 - MSK 1941 Jun 24 + 1:00 C-Eur CE%sT 1944 Aug + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s + 2:00 1:00 EEST 1991 Sep 29 2:00s + 2:00 C-Eur EE%sT 1998 + 2:00 - EET 1998 Mar 29 1:00u + 1:00 EU CE%sT 1999 Oct 31 1:00u + 2:00 - EET 2003 Jan 1 + 2:00 EU EE%sT + +# Luxembourg +# Whitman disagrees with most of these dates in minor ways; +# go with Shanks & Pottenger. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Lux 1916 only - May 14 23:00 1:00 S +Rule Lux 1916 only - Oct 1 1:00 0 - +Rule Lux 1917 only - Apr 28 23:00 1:00 S +Rule Lux 1917 only - Sep 17 1:00 0 - +Rule Lux 1918 only - Apr Mon>=15 2:00s 1:00 S +Rule Lux 1918 only - Sep Mon>=15 2:00s 0 - +Rule Lux 1919 only - Mar 1 23:00 1:00 S +Rule Lux 1919 only - Oct 5 3:00 0 - +Rule Lux 1920 only - Feb 14 23:00 1:00 S +Rule Lux 1920 only - Oct 24 2:00 0 - +Rule Lux 1921 only - Mar 14 23:00 1:00 S +Rule Lux 1921 only - Oct 26 2:00 0 - +Rule Lux 1922 only - Mar 25 23:00 1:00 S +Rule Lux 1922 only - Oct Sun>=2 1:00 0 - +Rule Lux 1923 only - Apr 21 23:00 1:00 S +Rule Lux 1923 only - Oct Sun>=2 2:00 0 - +Rule Lux 1924 only - Mar 29 23:00 1:00 S +Rule Lux 1924 1928 - Oct Sun>=2 1:00 0 - +Rule Lux 1925 only - Apr 5 23:00 1:00 S +Rule Lux 1926 only - Apr 17 23:00 1:00 S +Rule Lux 1927 only - Apr 9 23:00 1:00 S +Rule Lux 1928 only - Apr 14 23:00 1:00 S +Rule Lux 1929 only - Apr 20 23:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun + 1:00 Lux CE%sT 1918 Nov 25 + 0:00 Lux WE%sT 1929 Oct 6 2:00s + 0:00 Belgium WE%sT 1940 May 14 3:00 + 1:00 C-Eur WE%sT 1944 Sep 18 3:00 + 1:00 Belgium CE%sT 1977 + 1:00 EU CE%sT + +# Macedonia +# see Serbia + +# Malta +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Malta 1973 only - Mar 31 0:00s 1:00 S +Rule Malta 1973 only - Sep 29 0:00s 0 - +Rule Malta 1974 only - Apr 21 0:00s 1:00 S +Rule Malta 1974 only - Sep 16 0:00s 0 - +Rule Malta 1975 1979 - Apr Sun>=15 2:00 1:00 S +Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 - +Rule Malta 1980 only - Mar 31 2:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta + 1:00 Italy CE%sT 1942 Nov 2 2:00s + 1:00 C-Eur CE%sT 1945 Apr 2 2:00s + 1:00 Italy CE%sT 1973 Mar 31 + 1:00 Malta CE%sT 1981 + 1:00 EU CE%sT + +# Moldova + +# From Paul Eggert (2006-03-22): +# A previous version of this database followed Shanks & Pottenger, who write +# that Tiraspol switched to Moscow time on 1992-01-19 at 02:00. +# However, this is most likely an error, as Moldova declared independence +# on 1991-08-27 (the 1992-01-19 date is that of a Russian decree). +# In early 1992 there was large-scale interethnic violence in the area +# and it's possible that some Russophones continued to observe Moscow time. +# But [two people] separately reported via +# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau. +# The Tiraspol entry has therefore been removed for now. +# +# From Alexander Krivenyshev (2011-10-17): +# Pridnestrovian Moldavian Republic (PMR, also known as +# "Pridnestrovie") has abolished seasonal clock change (no transition +# to the Winter Time). +# +# News (in Russian): +# <a href="http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html"> +# http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html +# </a> +# +# <a href="http://www.allmoldova.com/moldova-news/1249064116.html"> +# http://www.allmoldova.com/moldova-news/1249064116.html +# </a> +# +# The substance of this change (reinstatement of the Tiraspol entry) +# is from a patch from Petr Machata (2011-10-17) +# +# From Tim Parenti (2011-10-19) +# In addition, being situated at +4651+2938 would give Tiraspol +# a pre-1880 LMT offset of 1:58:32. +# +# (which agrees with the earlier entry that had been removed) +# +# From Alexander Krivenyshev (2011-10-26) +# NO need to divide Moldova into two timezones at this point. +# As of today, Transnistria (Pridnestrovie)- Tiraspol reversed its own +# decision to abolish DST this winter. +# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)- +# Tiraspol will go back to winter time on October 30, 2011. +# News from Moldova (in russian): +# <a href="http://ru.publika.md/link_317061.html"> +# http://ru.publika.md/link_317061.html +# </a> + + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Chisinau 1:55:20 - LMT 1880 + 1:55 - CMT 1918 Feb 15 # Chisinau MT + 1:44:24 - BMT 1931 Jul 24 # Bucharest MT + 2:00 Romania EE%sT 1940 Aug 15 + 2:00 1:00 EEST 1941 Jul 17 + 1:00 C-Eur CE%sT 1944 Aug 24 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 May 6 + 2:00 - EET 1991 + 2:00 Russia EE%sT 1992 + 2:00 E-Eur EE%sT 1997 +# See Romania commentary for the guessed 1997 transition to EU rules. + 2:00 EU EE%sT + +# Monaco +# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's +# more precise 0:09:21. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time + 0:00 France WE%sT 1945 Sep 16 3:00 + 1:00 France CE%sT 1977 + 1:00 EU CE%sT + +# Montenegro +# see Serbia + +# Netherlands + +# Howse writes that the Netherlands' railways used GMT between 1892 and 1940, +# but for other purposes the Netherlands used Amsterdam mean time. + +# However, Robert H. van Gent writes (2001-04-01): +# Howse's statement is only correct up to 1909. From 1909-05-01 (00:00:00 +# Amsterdam mean time) onwards, the whole of the Netherlands (including +# the Dutch railways) was required by law to observe Amsterdam mean time +# (19 minutes 32.13 seconds ahead of GMT). This had already been the +# common practice (except for the railways) for many decades but it was +# not until 1909 when the Dutch government finally defined this by law. +# On 1937-07-01 this was changed to 20 minutes (exactly) ahead of GMT and +# was generally known as Dutch Time ("Nederlandse Tijd"). +# +# (2001-04-08): +# 1892-05-01 was the date when the Dutch railways were by law required to +# observe GMT while the remainder of the Netherlands adhered to the common +# practice of following Amsterdam mean time. +# +# (2001-04-09): +# In 1835 the authorities of the province of North Holland requested the +# municipal authorities of the towns and cities in the province to observe +# Amsterdam mean time but I do not know in how many cases this request was +# actually followed. +# +# From 1852 onwards the Dutch telegraph offices were by law required to +# observe Amsterdam mean time. As the time signals from the observatory of +# Leiden were also distributed by the telegraph system, I assume that most +# places linked up with the telegraph (and railway) system automatically +# adopted Amsterdam mean time. +# +# Although the early Dutch railway companies initially observed a variety +# of times, most of them had adopted Amsterdam mean time by 1858 but it +# was not until 1866 when they were all required by law to observe +# Amsterdam mean time. + +# The data before 1945 are taken from +# <http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm>. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time +Rule Neth 1916 only - Oct 1 0:00 0 AMT # Amsterdam Mean Time +Rule Neth 1917 only - Apr 16 2:00s 1:00 NST +Rule Neth 1917 only - Sep 17 2:00s 0 AMT +Rule Neth 1918 1921 - Apr Mon>=1 2:00s 1:00 NST +Rule Neth 1918 1921 - Sep lastMon 2:00s 0 AMT +Rule Neth 1922 only - Mar lastSun 2:00s 1:00 NST +Rule Neth 1922 1936 - Oct Sun>=2 2:00s 0 AMT +Rule Neth 1923 only - Jun Fri>=1 2:00s 1:00 NST +Rule Neth 1924 only - Mar lastSun 2:00s 1:00 NST +Rule Neth 1925 only - Jun Fri>=1 2:00s 1:00 NST +# From 1926 through 1939 DST began 05-15, except that it was delayed by a week +# in years when 05-15 fell in the Pentecost weekend. +Rule Neth 1926 1931 - May 15 2:00s 1:00 NST +Rule Neth 1932 only - May 22 2:00s 1:00 NST +Rule Neth 1933 1936 - May 15 2:00s 1:00 NST +Rule Neth 1937 only - May 22 2:00s 1:00 NST +Rule Neth 1937 only - Jul 1 0:00 1:00 S +Rule Neth 1937 1939 - Oct Sun>=2 2:00s 0 - +Rule Neth 1938 1939 - May 15 2:00s 1:00 S +Rule Neth 1945 only - Apr 2 2:00s 1:00 S +Rule Neth 1945 only - Sep 16 2:00s 0 - +# +# Amsterdam Mean Time was +00:19:32.13 exactly, but the .13 is omitted +# below because the current format requires GMTOFF to be an integer. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Amsterdam 0:19:32 - LMT 1835 + 0:19:32 Neth %s 1937 Jul 1 + 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time + 1:00 C-Eur CE%sT 1945 Apr 2 2:00 + 1:00 Neth CE%sT 1977 + 1:00 EU CE%sT + +# Norway +# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks & +# Pottenger. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Norway 1916 only - May 22 1:00 1:00 S +Rule Norway 1916 only - Sep 30 0:00 0 - +Rule Norway 1945 only - Apr 2 2:00s 1:00 S +Rule Norway 1945 only - Oct 1 2:00s 0 - +Rule Norway 1959 1964 - Mar Sun>=15 2:00s 1:00 S +Rule Norway 1959 1965 - Sep Sun>=15 2:00s 0 - +Rule Norway 1965 only - Apr 25 2:00s 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1 + 1:00 Norway CE%sT 1940 Aug 10 23:00 + 1:00 C-Eur CE%sT 1945 Apr 2 2:00 + 1:00 Norway CE%sT 1980 + 1:00 EU CE%sT + +# Svalbard & Jan Mayen + +# From Steffen Thorsen (2001-05-01): +# Although I could not find it explicitly, it seems that Jan Mayen and +# Svalbard have been using the same time as Norway at least since the +# time they were declared as parts of Norway. Svalbard was declared +# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan +# Mayen by law of 1930-02-27 no 2, section 2. (From +# http://www.lovdata.no/all/nl-19250717-011.html and +# http://www.lovdata.no/all/nl-19300227-002.html). The law/regulation +# for normal/standard time in Norway is from 1894-06-29 no 1 (came +# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a +# part of this law since 1925/1930. (From +# http://www.lovdata.no/all/nl-18940629-001.html ) I have not been +# able to find if Jan Mayen used a different time zone (e.g. -0100) +# before 1930. Jan Mayen has only been "inhabitated" since 1921 by +# Norwegian meteorologists and maybe used the same time as Norway ever +# since 1921. Svalbard (Arctic/Longyearbyen) has been inhabited since +# before 1895, and therefore probably changed the local time somewhere +# between 1895 and 1925 (inclusive). + +# From Paul Eggert (2001-05-01): +# +# Actually, Jan Mayen was never occupied by Germany during World War II, +# so it must have diverged from Oslo time during the war, as Oslo was +# keeping Berlin time. +# +# <http://home.no.net/janmayen/history.htm> says that the meteorologists +# burned down their station in 1940 and left the island, but returned in +# 1941 with a small Norwegian garrison and continued operations despite +# frequent air ttacks from Germans. In 1943 the Americans established a +# radiolocating station on the island, called "Atlantic City". Possibly +# the UTC offset changed during the war, but I think it unlikely that +# Jan Mayen used German daylight-saving rules. +# +# Svalbard is more complicated, as it was raided in August 1941 by an +# Allied party that evacuated the civilian population to England (says +# <http://www.bartleby.com/65/sv/Svalbard.html>). The Svalbard FAQ +# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were +# expelled on 1942-05-14. However, small parties of Germans did return, +# and according to Wilhelm Dege's book "War North of 80" (1954) +# <http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html> +# the German armed forces at the Svalbard weather station code-named +# Haudegen did not surrender to the Allies until September 1945. +# +# All these events predate our cutoff date of 1970. Unless we can +# come up with more definitive info about the timekeeping during the +# war years it's probably best just do...the following for now: +Link Europe/Oslo Arctic/Longyearbyen + +# Poland +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Poland 1918 1919 - Sep 16 2:00s 0 - +Rule Poland 1919 only - Apr 15 2:00s 1:00 S +Rule Poland 1944 only - Apr 3 2:00s 1:00 S +# Whitman gives 1944 Nov 30; go with Shanks & Pottenger. +Rule Poland 1944 only - Oct 4 2:00 0 - +# For 1944-1948 Whitman gives the previous day; go with Shanks & Pottenger. +Rule Poland 1945 only - Apr 29 0:00 1:00 S +Rule Poland 1945 only - Nov 1 0:00 0 - +# For 1946 on the source is Kazimierz Borkowski, +# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U., +# <http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1> +# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference. +# He also gives these further references: +# Mon Pol nr 13, poz 162 (1995) <http://www.abc.com.pl/serwis/mp/1995/0162.htm> +# Druk nr 2180 (2003) <http://www.senat.gov.pl/k5/dok/sejm/053/2180.pdf> +Rule Poland 1946 only - Apr 14 0:00s 1:00 S +Rule Poland 1946 only - Oct 7 2:00s 0 - +Rule Poland 1947 only - May 4 2:00s 1:00 S +Rule Poland 1947 1949 - Oct Sun>=1 2:00s 0 - +Rule Poland 1948 only - Apr 18 2:00s 1:00 S +Rule Poland 1949 only - Apr 10 2:00s 1:00 S +Rule Poland 1957 only - Jun 2 1:00s 1:00 S +Rule Poland 1957 1958 - Sep lastSun 1:00s 0 - +Rule Poland 1958 only - Mar 30 1:00s 1:00 S +Rule Poland 1959 only - May 31 1:00s 1:00 S +Rule Poland 1959 1961 - Oct Sun>=1 1:00s 0 - +Rule Poland 1960 only - Apr 3 1:00s 1:00 S +Rule Poland 1961 1964 - May lastSun 1:00s 1:00 S +Rule Poland 1962 1964 - Sep lastSun 1:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Warsaw 1:24:00 - LMT 1880 + 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time + 1:00 C-Eur CE%sT 1918 Sep 16 3:00 + 2:00 Poland EE%sT 1922 Jun + 1:00 Poland CE%sT 1940 Jun 23 2:00 + 1:00 C-Eur CE%sT 1944 Oct + 1:00 Poland CE%sT 1977 + 1:00 W-Eur CE%sT 1988 + 1:00 EU CE%sT + +# Portugal +# +# From Rui Pedro Salgueiro (1992-11-12): +# Portugal has recently (September, 27) changed timezone +# (from WET to MET or CET) to harmonize with EEC. +# +# Martin Bruckmann (1996-02-29) reports via Peter Ilieve +# that Portugal is reverting to 0:00 by not moving its clocks this spring. +# The new Prime Minister was fed up with getting up in the dark in the winter. +# +# From Paul Eggert (1996-11-12): +# IATA SSIM (1991-09) reports several 1991-09 and 1992-09 transitions +# at 02:00u, not 01:00u. Assume that these are typos. +# IATA SSIM (1991/1992) reports that the Azores were at -1:00. +# IATA SSIM (1993-02) says +0:00; later issues (through 1996-09) say -1:00. +# Guess that the Azores changed to EU rules in 1992 (since that's when Portugal +# harmonized with the EU), and that they stayed +0:00 that winter. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# DSH writes that despite Decree 1,469 (1915), the change to the clocks was not +# done every year, depending on what Spain did, because of railroad schedules. +# Go with Shanks & Pottenger. +Rule Port 1916 only - Jun 17 23:00 1:00 S +# Whitman gives 1916 Oct 31; go with Shanks & Pottenger. +Rule Port 1916 only - Nov 1 1:00 0 - +Rule Port 1917 only - Feb 28 23:00s 1:00 S +Rule Port 1917 1921 - Oct 14 23:00s 0 - +Rule Port 1918 only - Mar 1 23:00s 1:00 S +Rule Port 1919 only - Feb 28 23:00s 1:00 S +Rule Port 1920 only - Feb 29 23:00s 1:00 S +Rule Port 1921 only - Feb 28 23:00s 1:00 S +Rule Port 1924 only - Apr 16 23:00s 1:00 S +Rule Port 1924 only - Oct 14 23:00s 0 - +Rule Port 1926 only - Apr 17 23:00s 1:00 S +Rule Port 1926 1929 - Oct Sat>=1 23:00s 0 - +Rule Port 1927 only - Apr 9 23:00s 1:00 S +Rule Port 1928 only - Apr 14 23:00s 1:00 S +Rule Port 1929 only - Apr 20 23:00s 1:00 S +Rule Port 1931 only - Apr 18 23:00s 1:00 S +# Whitman gives 1931 Oct 8; go with Shanks & Pottenger. +Rule Port 1931 1932 - Oct Sat>=1 23:00s 0 - +Rule Port 1932 only - Apr 2 23:00s 1:00 S +Rule Port 1934 only - Apr 7 23:00s 1:00 S +# Whitman gives 1934 Oct 5; go with Shanks & Pottenger. +Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 - +# Shanks & Pottenger give 1935 Apr 30; go with Whitman. +Rule Port 1935 only - Mar 30 23:00s 1:00 S +Rule Port 1936 only - Apr 18 23:00s 1:00 S +# Whitman gives 1937 Apr 2; go with Shanks & Pottenger. +Rule Port 1937 only - Apr 3 23:00s 1:00 S +Rule Port 1938 only - Mar 26 23:00s 1:00 S +Rule Port 1939 only - Apr 15 23:00s 1:00 S +# Whitman gives 1939 Oct 7; go with Shanks & Pottenger. +Rule Port 1939 only - Nov 18 23:00s 0 - +Rule Port 1940 only - Feb 24 23:00s 1:00 S +# Shanks & Pottenger give 1940 Oct 7; go with Whitman. +Rule Port 1940 1941 - Oct 5 23:00s 0 - +Rule Port 1941 only - Apr 5 23:00s 1:00 S +Rule Port 1942 1945 - Mar Sat>=8 23:00s 1:00 S +Rule Port 1942 only - Apr 25 22:00s 2:00 M # Midsummer +Rule Port 1942 only - Aug 15 22:00s 1:00 S +Rule Port 1942 1945 - Oct Sat>=24 23:00s 0 - +Rule Port 1943 only - Apr 17 22:00s 2:00 M +Rule Port 1943 1945 - Aug Sat>=25 22:00s 1:00 S +Rule Port 1944 1945 - Apr Sat>=21 22:00s 2:00 M +Rule Port 1946 only - Apr Sat>=1 23:00s 1:00 S +Rule Port 1946 only - Oct Sat>=1 23:00s 0 - +Rule Port 1947 1949 - Apr Sun>=1 2:00s 1:00 S +Rule Port 1947 1949 - Oct Sun>=1 2:00s 0 - +# Shanks & Pottenger say DST was observed in 1950; go with Whitman. +# Whitman gives Oct lastSun for 1952 on; go with Shanks & Pottenger. +Rule Port 1951 1965 - Apr Sun>=1 2:00s 1:00 S +Rule Port 1951 1965 - Oct Sun>=1 2:00s 0 - +Rule Port 1977 only - Mar 27 0:00s 1:00 S +Rule Port 1977 only - Sep 25 0:00s 0 - +Rule Port 1978 1979 - Apr Sun>=1 0:00s 1:00 S +Rule Port 1978 only - Oct 1 0:00s 0 - +Rule Port 1979 1982 - Sep lastSun 1:00s 0 - +Rule Port 1980 only - Mar lastSun 0:00s 1:00 S +Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S +Rule Port 1983 only - Mar lastSun 2:00s 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24; +# Willett says 1912-01-01. Go with Willett. +Zone Europe/Lisbon -0:36:32 - LMT 1884 + -0:36:32 - LMT 1912 Jan 1 # Lisbon Mean Time + 0:00 Port WE%sT 1966 Apr 3 2:00 + 1:00 - CET 1976 Sep 26 1:00 + 0:00 Port WE%sT 1983 Sep 25 1:00s + 0:00 W-Eur WE%sT 1992 Sep 27 1:00s + 1:00 EU CE%sT 1996 Mar 31 1:00u + 0:00 EU WE%sT +Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada + -1:54:32 - HMT 1911 May 24 # Horta Mean Time + -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time + -1:00 Port AZO%sT 1983 Sep 25 1:00s + -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s + 0:00 EU WE%sT 1993 Mar 28 1:00u + -1:00 EU AZO%sT +Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal + -1:07:36 - FMT 1911 May 24 # Funchal Mean Time + -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time + 0:00 Port WE%sT 1983 Sep 25 1:00s + 0:00 EU WE%sT + +# Romania +# +# From Paul Eggert (1999-10-07): +# <a href="http://www.nineoclock.ro/POL/1778pol.html"> +# Nine O'clock</a> (1998-10-23) reports that the switch occurred at +# 04:00 local time in fall 1998. For lack of better info, +# assume that Romania and Moldova switched to EU rules in 1997, +# the same year as Bulgaria. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Romania 1932 only - May 21 0:00s 1:00 S +Rule Romania 1932 1939 - Oct Sun>=1 0:00s 0 - +Rule Romania 1933 1939 - Apr Sun>=2 0:00s 1:00 S +Rule Romania 1979 only - May 27 0:00 1:00 S +Rule Romania 1979 only - Sep lastSun 0:00 0 - +Rule Romania 1980 only - Apr 5 23:00 1:00 S +Rule Romania 1980 only - Sep lastSun 1:00 0 - +Rule Romania 1991 1993 - Mar lastSun 0:00s 1:00 S +Rule Romania 1991 1993 - Sep lastSun 0:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct + 1:44:24 - BMT 1931 Jul 24 # Bucharest MT + 2:00 Romania EE%sT 1981 Mar 29 2:00s + 2:00 C-Eur EE%sT 1991 + 2:00 Romania EE%sT 1994 + 2:00 E-Eur EE%sT 1997 + 2:00 EU EE%sT + +# Russia + +# From Paul Eggert (2006-03-22): +# Except for Moscow after 1919-07-01, I invented the time zone abbreviations. +# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991, +# are from Andrey A. Chernov. The rest is from Shanks & Pottenger, +# except we follow Chernov's report that 1992 DST transitions were Sat +# 23:00, not Sun 02:00s. +# +# From Stanislaw A. Kuzikowski (1994-06-29): +# But now it is some months since Novosibirsk is 3 hours ahead of Moscow! +# I do not know why they have decided to make this change; +# as far as I remember it was done exactly during winter->summer switching +# so we (Novosibirsk) simply did not switch. +# +# From Andrey A. Chernov (1996-10-04): +# `MSK' and `MSD' were born and used initially on Moscow computers with +# UNIX-like OSes by several developer groups (e.g. Demos group, Kiae group).... +# The next step was the UUCP network, the Relcom predecessor +# (used mainly for mail), and MSK/MSD was actively used there. +# +# From Chris Carrier (1996-10-30): +# According to a friend of mine who rode the Trans-Siberian Railroad from +# Moscow to Irkutsk in 1995, public air and rail transport in Russia ... +# still follows Moscow time, no matter where in Russia it is located. +# +# For Grozny, Chechnya, we have the following story from +# John Daniszewski, "Scavengers in the Rubble", Los Angeles Times (2001-02-07): +# News--often false--is spread by word of mouth. A rumor that it was +# time to move the clocks back put this whole city out of sync with +# the rest of Russia for two weeks--even soldiers stationed here began +# enforcing curfew at the wrong time. +# +# From Gwillim Law (2001-06-05): +# There's considerable evidence that Sakhalin Island used to be in +# UTC+11, and has changed to UTC+10, in this decade. I start with the +# SSIM, which listed Yuzhno-Sakhalinsk in zone RU10 along with Magadan +# until February 1997, and then in RU9 with Khabarovsk and Vladivostok +# since September 1997.... Although the Kuril Islands are +# administratively part of Sakhalin oblast', they appear to have +# remained on UTC+11 along with Magadan. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# +# Kaliningradskaya oblast'. +Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr + 1:00 C-Eur CE%sT 1945 + 2:00 Poland CE%sT 1946 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s + 2:00 Russia EE%sT 2011 Mar 27 2:00s + 3:00 - FET # Further-eastern European Time +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Respublika Adygeya, Arkhangel'skaya oblast', +# Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast', +# Vologodskaya oblast', Voronezhskaya oblast', +# Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya, +# Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya, +# Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya, +# Respublika Kareliya, Respublika Komi, +# Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast', +# Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El, +# Respublika Mordoviya, Moskva, Moskovskaya oblast', +# Murmanskaya oblast', Nenetskij avtonomnyj okrug, +# Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast', +# Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast', +# Ryazanskaya oblast', Sankt-Peterburg, +# Respublika Severnaya Osetiya, Smolenskaya oblast', +# Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan, +# Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast', +# Chechenskaya Respublika, Chuvashskaya oblast', +# Yaroslavskaya oblast' +Zone Europe/Moscow 2:30:20 - LMT 1880 + 2:30 - MMT 1916 Jul 3 # Moscow Mean Time + 2:30:48 Russia %s 1919 Jul 1 2:00 + 3:00 Russia MSK/MSD 1922 Oct + 2:00 - EET 1930 Jun 21 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s + 2:00 Russia EE%sT 1992 Jan 19 2:00s + 3:00 Russia MSK/MSD 2011 Mar 27 2:00s + 4:00 - MSK +# +# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast', +# Volgogradskaya oblast'. Shanks & Pottenger say Kirov is still at +0400 +# but Wikipedia (2006-05-09) says +0300. Perhaps it switched after the +# others? But we have no data. +Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3 + 3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time + 3:00 - STAT 1930 Jun 21 # Stalingrad Time + 4:00 - STAT 1961 Nov 11 + 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T + 3:00 Russia VOL%sT 1991 Mar 31 2:00s + 4:00 - VOLT 1992 Mar 29 2:00s + 3:00 Russia VOL%sT 2011 Mar 27 2:00s + 4:00 - VOLT +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Samarskaya oblast', Udmyrtskaya respublika +Zone Europe/Samara 3:20:36 - LMT 1919 Jul 1 2:00 + 3:00 - SAMT 1930 Jun 21 + 4:00 - SAMT 1935 Jan 27 + 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev + 3:00 Russia KUY%sT 1991 Mar 31 2:00s + 2:00 Russia KUY%sT 1991 Sep 29 2:00s + 3:00 - KUYT 1991 Oct 20 3:00 + 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time + 3:00 Russia SAM%sT 2011 Mar 27 2:00s + 4:00 - SAMT + +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug, +# Kurganskaya oblast', Orenburgskaya oblast', Permskaya oblast', +# Sverdlovskaya oblast', Tyumenskaya oblast', +# Khanty-Manskijskij avtonomnyj okrug, Chelyabinskaya oblast', +# Yamalo-Nenetskij avtonomnyj okrug. +Zone Asia/Yekaterinburg 4:02:24 - LMT 1919 Jul 15 4:00 + 4:00 - SVET 1930 Jun 21 # Sverdlovsk Time + 5:00 Russia SVE%sT 1991 Mar 31 2:00s + 4:00 Russia SVE%sT 1992 Jan 19 2:00s + 5:00 Russia YEK%sT 2011 Mar 27 2:00s + 6:00 - YEKT # Yekaterinburg Time +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Respublika Altaj, Altajskij kraj, Omskaya oblast'. +Zone Asia/Omsk 4:53:36 - LMT 1919 Nov 14 + 5:00 - OMST 1930 Jun 21 # Omsk TIme + 6:00 Russia OMS%sT 1991 Mar 31 2:00s + 5:00 Russia OMS%sT 1992 Jan 19 2:00s + 6:00 Russia OMS%sT 2011 Mar 27 2:00s + 7:00 - OMST +# +# From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's +# not clear when it switched from +7 to +6. +# Novosibirskaya oblast', Tomskaya oblast'. +Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00 + 6:00 - NOVT 1930 Jun 21 # Novosibirsk Time + 7:00 Russia NOV%sT 1991 Mar 31 2:00s + 6:00 Russia NOV%sT 1992 Jan 19 2:00s + 7:00 Russia NOV%sT 1993 May 23 # say Shanks & P. + 6:00 Russia NOV%sT 2011 Mar 27 2:00s + 7:00 - NOVT + +# From Alexander Krivenyshev (2009-10-13): +# Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on +# March 28, 2010: +# from current Russia Zone 6 - Krasnoyarsk Time Zone (KRA) UTC +0700 +# to Russia Zone 5 - Novosibirsk Time Zone (NOV) UTC +0600 +# +# This is according to Government of Russia decree # 740, on September +# 14, 2009 "Application in the territory of the Kemerovo region the Fifth +# time zone." ("Russia Zone 5" or old "USSR Zone 5" is GMT +0600) +# +# Russian Government web site (Russian language) +# <a href="http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archiv"> +# http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archive/2009/09/14/991633.htm +# </a> +# or Russian-English translation by WorldTimeZone.com with reference +# map to local region and new Russia Time Zone map after March 28, 2010 +# <a href="http://www.worldtimezone.com/dst_news/dst_news_russia03.html"> +# http://www.worldtimezone.com/dst_news/dst_news_russia03.html +# </a> +# +# Thus, when Russia will switch to DST on the night of March 28, 2010 +# Kemerovo region (Kemerovo oblast') will not change the clock. +# +# As a result, Kemerovo oblast' will be in the same time zone as +# Novosibirsk, Omsk, Tomsk, Barnaul and Altai Republic. + +Zone Asia/Novokuznetsk 5:48:48 - NMT 1920 Jan 6 + 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time + 7:00 Russia KRA%sT 1991 Mar 31 2:00s + 6:00 Russia KRA%sT 1992 Jan 19 2:00s + 7:00 Russia KRA%sT 2010 Mar 28 2:00s + 6:00 Russia NOV%sT 2011 Mar 27 2:00s + 7:00 - NOVT # Novosibirsk/Novokuznetsk Time + +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Krasnoyarskij kraj, +# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug, +# Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug. +Zone Asia/Krasnoyarsk 6:11:20 - LMT 1920 Jan 6 + 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time + 7:00 Russia KRA%sT 1991 Mar 31 2:00s + 6:00 Russia KRA%sT 1992 Jan 19 2:00s + 7:00 Russia KRA%sT 2011 Mar 27 2:00s + 8:00 - KRAT +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Respublika Buryatiya, Irkutskaya oblast', +# Ust'-Ordynskij Buryatskij avtonomnyj okrug. +Zone Asia/Irkutsk 6:57:20 - LMT 1880 + 6:57:20 - IMT 1920 Jan 25 # Irkutsk Mean Time + 7:00 - IRKT 1930 Jun 21 # Irkutsk Time + 8:00 Russia IRK%sT 1991 Mar 31 2:00s + 7:00 Russia IRK%sT 1992 Jan 19 2:00s + 8:00 Russia IRK%sT 2011 Mar 27 2:00s + 9:00 - IRKT +# +# From Oscar van Vlijmen (2003-10-18): [This region consists of] +# Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast', +# [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'. + +# From Oscar van Vlijmen (2009-11-29): +# ...some regions of [Russia] were merged with others since 2005... +# Some names were changed, no big deal, except for one instance: a new name. +# YAK/YAKST: UTC+9 Zabajkal'skij kraj. + +# From Oscar van Vlijmen (2009-11-29): +# The Sakha districts are: Aldanskij, Amginskij, Anabarskij, +# Verkhnevilyujskij, Vilyujskij, Gornyj, +# Zhiganskij, Kobyajskij, Lenskij, Megino-Kangalasskij, Mirninskij, +# Namskij, Nyurbinskij, Olenyokskij, Olyokminskij, +# Suntarskij, Tattinskij, Ust'-Aldanskij, Khangalasskij, +# Churapchinskij, Eveno-Bytantajskij Natsional'nij. + +Zone Asia/Yakutsk 8:38:40 - LMT 1919 Dec 15 + 8:00 - YAKT 1930 Jun 21 # Yakutsk Time + 9:00 Russia YAK%sT 1991 Mar 31 2:00s + 8:00 Russia YAK%sT 1992 Jan 19 2:00s + 9:00 Russia YAK%sT 2011 Mar 27 2:00s + 10:00 - YAKT +# +# From Oscar van Vlijmen (2003-10-18): [This region consists of] +# Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj, +# [parts of] Respublika Sakha (Yakutiya). + +# From Oscar van Vlijmen (2009-11-29): +# The Sakha districts are: Bulunskij, Verkhoyanskij, Tomponskij, Ust'-Majskij, +# Ust'-Yanskij. +Zone Asia/Vladivostok 8:47:44 - LMT 1922 Nov 15 + 9:00 - VLAT 1930 Jun 21 # Vladivostok Time + 10:00 Russia VLA%sT 1991 Mar 31 2:00s + 9:00 Russia VLA%sST 1992 Jan 19 2:00s + 10:00 Russia VLA%sT 2011 Mar 27 2:00s + 11:00 - VLAT +# +# Sakhalinskaya oblast'. +# The Zone name should be Yuzhno-Sakhalinsk, but that's too long. +Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23 + 9:00 - CJT 1938 + 9:00 - JST 1945 Aug 25 + 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T. + 10:00 Russia SAK%sT 1992 Jan 19 2:00s + 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s + 10:00 Russia SAK%sT 2011 Mar 27 2:00s + 11:00 - SAKT +# +# From Oscar van Vlijmen (2003-10-18): [This region consists of] +# Magadanskaya oblast', Respublika Sakha (Yakutiya). +# Probably also: Kuril Islands. + +# From Oscar van Vlijmen (2009-11-29): +# The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij, +# Nizhnekolymskij, Ojmyakonskij, Srednekolymskij. +Zone Asia/Magadan 10:03:12 - LMT 1924 May 2 + 10:00 - MAGT 1930 Jun 21 # Magadan Time + 11:00 Russia MAG%sT 1991 Mar 31 2:00s + 10:00 Russia MAG%sT 1992 Jan 19 2:00s + 11:00 Russia MAG%sT 2011 Mar 27 2:00s + 12:00 - MAGT +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Kamchatskaya oblast', Koryakskij avtonomnyj okrug. +# +# The Zone name should be Asia/Petropavlovsk-Kamchatski, but that's too long. +Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10 + 11:00 - PETT 1930 Jun 21 # P-K Time + 12:00 Russia PET%sT 1991 Mar 31 2:00s + 11:00 Russia PET%sT 1992 Jan 19 2:00s + 12:00 Russia PET%sT 2010 Mar 28 2:00s + 11:00 Russia PET%sT 2011 Mar 27 2:00s + 12:00 - PETT +# +# Chukotskij avtonomnyj okrug +Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2 + 12:00 - ANAT 1930 Jun 21 # Anadyr Time + 13:00 Russia ANA%sT 1982 Apr 1 0:00s + 12:00 Russia ANA%sT 1991 Mar 31 2:00s + 11:00 Russia ANA%sT 1992 Jan 19 2:00s + 12:00 Russia ANA%sT 2010 Mar 28 2:00s + 11:00 Russia ANA%sT 2011 Mar 27 2:00s + 12:00 - ANAT + +# Serbia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Belgrade 1:22:00 - LMT 1884 + 1:00 - CET 1941 Apr 18 23:00 + 1:00 C-Eur CE%sT 1945 + 1:00 - CET 1945 May 8 2:00s + 1:00 1:00 CEST 1945 Sep 16 2:00s +# Metod Kozelj reports that the legal date of +# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time. +# Shanks & Pottenger don't give as much detail, so go with Kozelj. + 1:00 - CET 1982 Nov 27 + 1:00 EU CE%sT +Link Europe/Belgrade Europe/Ljubljana # Slovenia +Link Europe/Belgrade Europe/Podgorica # Montenegro +Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina +Link Europe/Belgrade Europe/Skopje # Macedonia +Link Europe/Belgrade Europe/Zagreb # Croatia + +# Slovakia +Link Europe/Prague Europe/Bratislava + +# Slovenia +# see Serbia + +# Spain +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1; +# go with Shanks & Pottenger. +Rule Spain 1917 only - May 5 23:00s 1:00 S +Rule Spain 1917 1919 - Oct 6 23:00s 0 - +Rule Spain 1918 only - Apr 15 23:00s 1:00 S +Rule Spain 1919 only - Apr 5 23:00s 1:00 S +# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks & Pottenger. +Rule Spain 1924 only - Apr 16 23:00s 1:00 S +# Whitman gives 1924 Oct 14; go with Shanks & Pottenger. +Rule Spain 1924 only - Oct 4 23:00s 0 - +Rule Spain 1926 only - Apr 17 23:00s 1:00 S +# Whitman says no DST in 1929; go with Shanks & Pottenger. +Rule Spain 1926 1929 - Oct Sat>=1 23:00s 0 - +Rule Spain 1927 only - Apr 9 23:00s 1:00 S +Rule Spain 1928 only - Apr 14 23:00s 1:00 S +Rule Spain 1929 only - Apr 20 23:00s 1:00 S +# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13; +# go with Shanks & Pottenger. +Rule Spain 1937 only - May 22 23:00s 1:00 S +Rule Spain 1937 1939 - Oct Sat>=1 23:00s 0 - +Rule Spain 1938 only - Mar 22 23:00s 1:00 S +Rule Spain 1939 only - Apr 15 23:00s 1:00 S +Rule Spain 1940 only - Mar 16 23:00s 1:00 S +# Whitman says no DST 1942-1945; go with Shanks & Pottenger. +Rule Spain 1942 only - May 2 22:00s 2:00 M # Midsummer +Rule Spain 1942 only - Sep 1 22:00s 1:00 S +Rule Spain 1943 1946 - Apr Sat>=13 22:00s 2:00 M +Rule Spain 1943 only - Oct 3 22:00s 1:00 S +Rule Spain 1944 only - Oct 10 22:00s 1:00 S +Rule Spain 1945 only - Sep 30 1:00 1:00 S +Rule Spain 1946 only - Sep 30 0:00 0 - +Rule Spain 1949 only - Apr 30 23:00 1:00 S +Rule Spain 1949 only - Sep 30 1:00 0 - +Rule Spain 1974 1975 - Apr Sat>=13 23:00 1:00 S +Rule Spain 1974 1975 - Oct Sun>=1 1:00 0 - +Rule Spain 1976 only - Mar 27 23:00 1:00 S +Rule Spain 1976 1977 - Sep lastSun 1:00 0 - +Rule Spain 1977 1978 - Apr 2 23:00 1:00 S +Rule Spain 1978 only - Oct 1 1:00 0 - +# The following rules are copied from Morocco from 1967 through 1978. +Rule SpainAfrica 1967 only - Jun 3 12:00 1:00 S +Rule SpainAfrica 1967 only - Oct 1 0:00 0 - +Rule SpainAfrica 1974 only - Jun 24 0:00 1:00 S +Rule SpainAfrica 1974 only - Sep 1 0:00 0 - +Rule SpainAfrica 1976 1977 - May 1 0:00 1:00 S +Rule SpainAfrica 1976 only - Aug 1 0:00 0 - +Rule SpainAfrica 1977 only - Sep 28 0:00 0 - +Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S +Rule SpainAfrica 1978 only - Aug 4 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00s + 0:00 Spain WE%sT 1946 Sep 30 + 1:00 Spain CE%sT 1979 + 1:00 EU CE%sT +Zone Africa/Ceuta -0:21:16 - LMT 1901 + 0:00 - WET 1918 May 6 23:00 + 0:00 1:00 WEST 1918 Oct 7 23:00 + 0:00 - WET 1924 + 0:00 Spain WE%sT 1929 + 0:00 SpainAfrica WE%sT 1984 Mar 16 + 1:00 - CET 1986 + 1:00 EU CE%sT +Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C. + -1:00 - CANT 1946 Sep 30 1:00 # Canaries Time + 0:00 - WET 1980 Apr 6 0:00s + 0:00 1:00 WEST 1980 Sep 28 0:00s + 0:00 EU WE%sT +# IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u. +# Ignore this for now, as the Canaries are part of the EU. + +# Sweden + +# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger: +# +# The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879: +# From the beginning of 1879 (that is 01-01 00:00) the time for all +# places in the country is "the mean solar time for the meridian at +# three degrees, or twelve minutes of time, to the west of the +# meridian of the Observatory of Stockholm". The law is dated 1878-05-31. +# +# The observatory at that time had the meridian 18 degrees 03' 30" +# eastern longitude = 01:12:14 in time. Less 12 minutes gives the +# national standard time as 01:00:14 ahead of GMT.... +# +# About the beginning of CET in Sweden. The lawtext ("Svensk +# forfattningssamling 1899, no 44") states, that "from the beginning +# of 1900... ... the same as the mean solar time for the meridian at +# the distance of one hour of time from the meridian of the English +# observatory at Greenwich, or at 12 minutes 14 seconds to the west +# from the meridian of the Observatory of Stockholm". The law is dated +# 1899-06-16. In short: At 1900-01-01 00:00:00 the new standard time +# in Sweden is 01:00:00 ahead of GMT. +# +# 1916: The lawtext ("Svensk forfattningssamling 1916, no 124") states +# that "1916-05-15 is considered to begin one hour earlier". It is +# pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00.... +# Further the law says, that "1916-09-30 is considered to end one hour later". +# +# The laws regulating [DST] are available on the site of the Swedish +# Parliament beginning with 1985 - the laws regulating 1980/1984 are +# not available on the site (to my knowledge they are only available +# in Swedish): <http://www.riksdagen.se/english/work/sfst.asp> (type +# "sommartid" without the quotes in the field "Fritext" and then click +# the Sok-button). +# +# (2001-05-13): +# +# I have now found a newspaper stating that at 1916-10-01 01:00 +# summertime the church-clocks etc were set back one hour to show +# 1916-10-01 00:00 standard time. The article also reports that some +# people thought the switch to standard time would take place already +# at 1916-10-01 00:00 summer time, but they had to wait for another +# hour before the event took place. +# +# Source: The newspaper "Dagens Nyheter", 1916-10-01, page 7 upper left. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1 + 1:00:14 - SET 1900 Jan 1 # Swedish Time + 1:00 - CET 1916 May 14 23:00 + 1:00 1:00 CEST 1916 Oct 1 01:00 + 1:00 - CET 1980 + 1:00 EU CE%sT + +# Switzerland +# From Howse: +# By the end of the 18th century clocks and watches became commonplace +# and their performance improved enormously. Communities began to keep +# mean time in preference to apparent time -- Geneva from 1780 .... +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# From Whitman (who writes ``Midnight?''): +# Rule Swiss 1940 only - Nov 2 0:00 1:00 S +# Rule Swiss 1940 only - Dec 31 0:00 0 - +# From Shanks & Pottenger: +# Rule Swiss 1941 1942 - May Sun>=1 2:00 1:00 S +# Rule Swiss 1941 1942 - Oct Sun>=1 0:00 0 - + +# From Alois Treindl (2008-12-17): +# I have researched the DST usage in Switzerland during the 1940ies. +# +# As I wrote in an earlier message, I suspected the current tzdata values +# to be wrong. This is now verified. +# +# I have found copies of the original ruling by the Swiss Federal +# government, in 'Eidgen[o]ssische Gesetzessammlung 1941 and 1942' (Swiss +# federal law collection)... +# +# DST began on Monday 5 May 1941, 1:00 am by shifting the clocks to 2:00 am +# DST ended on Monday 6 Oct 1941, 2:00 am by shifting the clocks to 1:00 am. +# +# DST began on Monday, 4 May 1942 at 01:00 am +# DST ended on Monday, 5 Oct 1942 at 02:00 am +# +# There was no DST in 1940, I have checked the law collection carefully. +# It is also indicated by the fact that the 1942 entry in the law +# collection points back to 1941 as a reference, but no reference to any +# other years are made. +# +# Newspaper articles I have read in the archives on 6 May 1941 reported +# about the introduction of DST (Sommerzeit in German) during the previous +# night as an absolute novelty, because this was the first time that such +# a thing had happened in Switzerland. +# +# I have also checked 1916, because one book source (Gabriel, Traite de +# l'heure dans le monde) claims that Switzerland had DST in 1916. This is +# false, no official document could be found. Probably Gabriel got misled +# by references to Germany, which introduced DST in 1916 for the first time. +# +# The tzdata rules for Switzerland must be changed to: +# Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S +# Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 - +# +# The 1940 rules must be deleted. +# +# One further detail for Switzerland, which is probably out of scope for +# most users of tzdata: +# The zone file +# Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12 +# 0:29:44 - BMT 1894 Jun #Bern Mean Time +# 1:00 Swiss CE%sT 1981 +# 1:00 EU CE%sT +# describes all of Switzerland correctly, with the exception of +# the Cantone Geneve (Geneva, Genf). Between 1848 and 1894 Geneve did not +# follow Bern Mean Time but kept its own local mean time. +# To represent this, an extra zone would be needed. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S +Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12 + 0:29:44 - BMT 1894 Jun # Bern Mean Time + 1:00 Swiss CE%sT 1981 + 1:00 EU CE%sT + +# Turkey + +# From Amar Devegowda (2007-01-03): +# The time zone rules for Istanbul, Turkey have not been changed for years now. +# ... The latest rules are available at - +# http://www.timeanddate.com/worldclock/timezone.html?n=107 +# From Steffen Thorsen (2007-01-03): +# I have been able to find press records back to 1996 which all say that +# DST started 01:00 local time and end at 02:00 local time. I am not sure +# what happened before that. One example for each year from 1996 to 2001: +# http://newspot.byegm.gov.tr/arsiv/1996/21/N4.htm +# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING97/03/97X03X25.TXT +# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING98/03/98X03X02.HTM +# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING99/10/99X10X26.HTM#%2016 +# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING2000/03/00X03X06.HTM#%2021 +# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING2001/03/23x03x01.HTM#%2027 +# From Paul Eggert (2007-01-03): +# Prefer the above source to Shanks & Pottenger for time stamps after 1990. + +# From Steffen Thorsen (2007-03-09): +# Starting 2007 though, it seems that they are adopting EU's 1:00 UTC +# start/end time, according to the following page (2007-03-07): +# http://www.ntvmsnbc.com/news/402029.asp +# The official document is located here - it is in Turkish...: +# http://rega.basbakanlik.gov.tr/eskiler/2007/03/20070307-7.htm +# I was able to locate the following seemingly official document +# (on a non-government server though) describing dates between 2002 and 2006: +# http://www.alomaliye.com/bkk_2002_3769.htm + +# From Gökdeniz Karadağ (2011-03-10): +# +# According to the articles linked below, Turkey will change into summer +# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27. +# This change is due to a nationwide exam on 27th. +# +# <a href="http://www.worldbulletin.net/?aType=haber&ArticleID=70872"> +# http://www.worldbulletin.net/?aType=haber&ArticleID=70872 +# </a> +# Turkish: +# <a href="http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373"> +# http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373 +# </a> + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Turkey 1916 only - May 1 0:00 1:00 S +Rule Turkey 1916 only - Oct 1 0:00 0 - +Rule Turkey 1920 only - Mar 28 0:00 1:00 S +Rule Turkey 1920 only - Oct 25 0:00 0 - +Rule Turkey 1921 only - Apr 3 0:00 1:00 S +Rule Turkey 1921 only - Oct 3 0:00 0 - +Rule Turkey 1922 only - Mar 26 0:00 1:00 S +Rule Turkey 1922 only - Oct 8 0:00 0 - +# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925; +# go with Shanks & Pottenger. +Rule Turkey 1924 only - May 13 0:00 1:00 S +Rule Turkey 1924 1925 - Oct 1 0:00 0 - +Rule Turkey 1925 only - May 1 0:00 1:00 S +Rule Turkey 1940 only - Jun 30 0:00 1:00 S +Rule Turkey 1940 only - Oct 5 0:00 0 - +Rule Turkey 1940 only - Dec 1 0:00 1:00 S +Rule Turkey 1941 only - Sep 21 0:00 0 - +Rule Turkey 1942 only - Apr 1 0:00 1:00 S +# Whitman omits the next two transition and gives 1945 Oct 1; +# go with Shanks & Pottenger. +Rule Turkey 1942 only - Nov 1 0:00 0 - +Rule Turkey 1945 only - Apr 2 0:00 1:00 S +Rule Turkey 1945 only - Oct 8 0:00 0 - +Rule Turkey 1946 only - Jun 1 0:00 1:00 S +Rule Turkey 1946 only - Oct 1 0:00 0 - +Rule Turkey 1947 1948 - Apr Sun>=16 0:00 1:00 S +Rule Turkey 1947 1950 - Oct Sun>=2 0:00 0 - +Rule Turkey 1949 only - Apr 10 0:00 1:00 S +Rule Turkey 1950 only - Apr 19 0:00 1:00 S +Rule Turkey 1951 only - Apr 22 0:00 1:00 S +Rule Turkey 1951 only - Oct 8 0:00 0 - +Rule Turkey 1962 only - Jul 15 0:00 1:00 S +Rule Turkey 1962 only - Oct 8 0:00 0 - +Rule Turkey 1964 only - May 15 0:00 1:00 S +Rule Turkey 1964 only - Oct 1 0:00 0 - +Rule Turkey 1970 1972 - May Sun>=2 0:00 1:00 S +Rule Turkey 1970 1972 - Oct Sun>=2 0:00 0 - +Rule Turkey 1973 only - Jun 3 1:00 1:00 S +Rule Turkey 1973 only - Nov 4 3:00 0 - +Rule Turkey 1974 only - Mar 31 2:00 1:00 S +Rule Turkey 1974 only - Nov 3 5:00 0 - +Rule Turkey 1975 only - Mar 30 0:00 1:00 S +Rule Turkey 1975 1976 - Oct lastSun 0:00 0 - +Rule Turkey 1976 only - Jun 1 0:00 1:00 S +Rule Turkey 1977 1978 - Apr Sun>=1 0:00 1:00 S +Rule Turkey 1977 only - Oct 16 0:00 0 - +Rule Turkey 1979 1980 - Apr Sun>=1 3:00 1:00 S +Rule Turkey 1979 1982 - Oct Mon>=11 0:00 0 - +Rule Turkey 1981 1982 - Mar lastSun 3:00 1:00 S +Rule Turkey 1983 only - Jul 31 0:00 1:00 S +Rule Turkey 1983 only - Oct 2 0:00 0 - +Rule Turkey 1985 only - Apr 20 0:00 1:00 S +Rule Turkey 1985 only - Sep 28 0:00 0 - +Rule Turkey 1986 1990 - Mar lastSun 2:00s 1:00 S +Rule Turkey 1986 1990 - Sep lastSun 2:00s 0 - +Rule Turkey 1991 2006 - Mar lastSun 1:00s 1:00 S +Rule Turkey 1991 1995 - Sep lastSun 1:00s 0 - +Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Istanbul 1:55:52 - LMT 1880 + 1:56:56 - IMT 1910 Oct # Istanbul Mean Time? + 2:00 Turkey EE%sT 1978 Oct 15 + 3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time + 2:00 Turkey EE%sT 2007 + 2:00 EU EE%sT 2011 Mar 27 1:00u + 2:00 - EET 2011 Mar 28 1:00u + 2:00 EU EE%sT +Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. + +# Ukraine +# +# From Igor Karpov, who works for the Ukranian Ministry of Justice, +# via Garrett Wollman (2003-01-27): +# BTW, I've found the official document on this matter. It's goverment +# regulations number 509, May 13, 1996. In my poor translation it says: +# "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday +# of March at 3am the time is changing to 4am and each last Sunday of +# October the time at 4am is changing to 3am" + +# From Alexander Krivenyshev (2011-09-20): +# On September 20, 2011 the deputies of the Verkhovna Rada agreed to +# abolish the transfer clock to winter time. +# +# Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got +# approval from 266 deputies. +# +# Ukraine abolishes transter back to the winter time (in Russian) +# <a href="http://news.mail.ru/politics/6861560/"> +# http://news.mail.ru/politics/6861560/ +# </a> +# +# The Ukrainians will no longer change the clock (in Russian) +# <a href="http://www.segodnya.ua/news/14290482.html"> +# http://www.segodnya.ua/news/14290482.html +# </a> +# +# Deputies cancelled the winter time (in Russian) +# <a href="http://www.pravda.com.ua/rus/news/2011/09/20/6600616/"> +# http://www.pravda.com.ua/rus/news/2011/09/20/6600616/ +# </a> +# +# From Philip Pizzey (2011-10-18): +# Today my Ukrainian colleagues have informed me that the +# Ukrainian parliament have decided that they will go to winter +# time this year after all. +# +# From Udo Schwedt (2011-10-18): +# As far as I understand, the recent change to the Ukranian time zone +# (Europe/Kiev) to introduce permanent daylight saving time (similar +# to Russia) was reverted today: +# +# <a href="http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995"> +# http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995 +# </a> +# +# Also reported by Alexander Bokovoy (2011-10-18) who also noted: +# The law documents themselves are at +# +# <a href="http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484"> +# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484 +# </a> + + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Most of Ukraine since 1970 has been like Kiev. +# "Kyiv" is the transliteration of the Ukrainian name, but +# "Kiev" is more common in English. +Zone Europe/Kiev 2:02:04 - LMT 1880 + 2:02:04 - KMT 1924 May 2 # Kiev Mean Time + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Sep 20 + 1:00 C-Eur CE%sT 1943 Nov 6 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 Jul 1 2:00 + 2:00 - EET 1992 + 2:00 E-Eur EE%sT 1995 + 2:00 EU EE%sT +# Ruthenia used CET 1990/1991. +# "Uzhhorod" is the transliteration of the Ukrainian name, but +# "Uzhgorod" is more common in English. +Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct + 1:00 - CET 1940 + 1:00 C-Eur CE%sT 1944 Oct + 1:00 1:00 CEST 1944 Oct 26 + 1:00 - CET 1945 Jun 29 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 Jul 1 2:00 + 1:00 - CET 1991 Mar 31 3:00 + 2:00 - EET 1992 + 2:00 E-Eur EE%sT 1995 + 2:00 EU EE%sT +# Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991. +# "Zaporizhia" is the transliteration of the Ukrainian name, but +# "Zaporozh'ye" is more common in English. Use the common English +# spelling, except omit the apostrophe as it is not allowed in +# portable Posix file names. +Zone Europe/Zaporozhye 2:20:40 - LMT 1880 + 2:20 - CUT 1924 May 2 # Central Ukraine T + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Aug 25 + 1:00 C-Eur CE%sT 1943 Oct 25 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00 + 2:00 E-Eur EE%sT 1995 + 2:00 EU EE%sT +# Central Crimea used Moscow time 1994/1997. +Zone Europe/Simferopol 2:16:24 - LMT 1880 + 2:16 - SMT 1924 May 2 # Simferopol Mean T + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Nov + 1:00 C-Eur CE%sT 1944 Apr 13 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 Jul 1 2:00 + 2:00 - EET 1992 +# From Paul Eggert (2006-03-22): +# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched +# from Kiev to Moscow time sometime after the January 1994 elections. +# Shanks (1999) says ``date of change uncertain'', but implies that it happened +# sometime between the 1994 DST switches. Shanks & Pottenger simply say +# 1994-09-25 03:00, but that can't be right. For now, guess it +# changed in May. + 2:00 E-Eur EE%sT 1994 May +# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev. + 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s + 3:00 1:00 MSD 1996 Oct 27 3:00s +# IATA SSIM (1997-09) says Crimea switched to EET/EEST. +# Assume it happened in March by not changing the clocks. + 3:00 Russia MSK/MSD 1997 + 3:00 - MSK 1997 Mar lastSun 1:00u + 2:00 EU EE%sT + +############################################################################### + +# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from +# the last Sunday in March to the last Sunday in September in 1986. +# The source shows Romania changing a day later than everybody else. +# +# According to Bernard Sieloff's source, Poland is in the MET time zone but +# uses the WE DST rules. The Western USSR uses EET+1 and ME DST rules. +# Bernard Sieloff's source claims Romania switches on the same day, but at +# 00:00 standard time (i.e., 01:00 DST). It also claims that Turkey +# switches on the same day, but switches on at 01:00 standard time +# and off at 00:00 standard time (i.e., 01:00 DST) + +# ... +# Date: Wed, 28 Jan 87 16:56:27 -0100 +# From: Tom Hofmann +# ... +# +# ...the European time rules are...standardized since 1981, when +# most European coun[tr]ies started DST. Before that year, only +# a few countries (UK, France, Italy) had DST, each according +# to own national rules. In 1981, however, DST started on +# 'Apr firstSun', and not on 'Mar lastSun' as in the following +# years... +# But also since 1981 there are some more national exceptions +# than listed in 'europe': Switzerland, for example, joined DST +# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep +# lastSun' in 1981---I don't know how they handle now. +# +# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the +# Soviet Union (as far as I know). +# +# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG, +# 4002 Basle, Switzerland +# ... + +# ... +# Date: Wed, 4 Feb 87 22:35:22 +0100 +# From: Dik T. Winter +# ... +# +# The information from Tom Hofmann is (as far as I know) not entirely correct. +# After a request from chongo at amdahl I tried to retrieve all information +# about DST in Europe. I was able to find all from about 1969. +# +# ...standardization on DST in Europe started in about 1977 with switches on +# first Sunday in April and last Sunday in September... +# In 1981 UK joined Europe insofar that +# the starting day for both shifted to last Sunday in March. And from 1982 +# the whole of Europe used DST, with switch dates April 1 and October 1 in +# the Sov[i]et Union. In 1985 the SU reverted to standard Europe[a]n switch +# dates... +# +# It should also be remembered that time-zones are not constants; e.g. +# Portugal switched in 1976 from MET (or CET) to WET with DST... +# Note also that though there were rules for switch dates not +# all countries abided to these dates, and many individual deviations +# occurred, though not since 1982 I believe. Another note: it is always +# assumed that DST is 1 hour ahead of normal time, this need not be the +# case; at least in the Netherlands there have been times when DST was 2 hours +# in advance of normal time. +# +# ... +# dik t. winter, cwi, amsterdam, nederland +# ... + +# From Bob Devine (1988-01-28): +# ... +# Greece: Last Sunday in April to last Sunday in September (iffy on dates). +# Since 1978. Change at midnight. +# ... +# Monaco: has same DST as France. +# ... diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/factory b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/factory new file mode 100644 index 0000000..d29a585 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/factory @@ -0,0 +1,10 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# For companies who don't want to put time zone specification in +# their installation procedures. When users run date, they'll get the message. +# Also useful for the "comp.sources" version. + +# Zone NAME GMTOFF RULES FORMAT +Zone Factory 0 - "Local time zone must be set--see zic manual page" diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/iso3166.tab b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/iso3166.tab new file mode 100644 index 0000000..b952ca1 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/iso3166.tab @@ -0,0 +1,276 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. +# ISO 3166 alpha-2 country codes +# +# From Paul Eggert (2006-09-27): +# +# This file contains a table with the following columns: +# 1. ISO 3166-1 alpha-2 country code, current as of +# ISO 3166-1 Newsletter VI-1 (2007-09-21). See: +# <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/index.html"> +# ISO 3166 Maintenance agency (ISO 3166/MA) +# </a>. +# 2. The usual English name for the country, +# chosen so that alphabetic sorting of subsets produces helpful lists. +# This is not the same as the English name in the ISO 3166 tables. +# +# Columns are separated by a single tab. +# The table is sorted by country code. +# +# Lines beginning with `#' are comments. +# +# From Arthur David Olson (2011-08-17): +# Resynchronized today with the ISO 3166 site (adding SS for South Sudan). +# +#country- +#code country name +AD Andorra +AE United Arab Emirates +AF Afghanistan +AG Antigua & Barbuda +AI Anguilla +AL Albania +AM Armenia +AO Angola +AQ Antarctica +AR Argentina +AS Samoa (American) +AT Austria +AU Australia +AW Aruba +AX Aaland Islands +AZ Azerbaijan +BA Bosnia & Herzegovina +BB Barbados +BD Bangladesh +BE Belgium +BF Burkina Faso +BG Bulgaria +BH Bahrain +BI Burundi +BJ Benin +BL St Barthelemy +BM Bermuda +BN Brunei +BO Bolivia +BQ Bonaire Sint Eustatius & Saba +BR Brazil +BS Bahamas +BT Bhutan +BV Bouvet Island +BW Botswana +BY Belarus +BZ Belize +CA Canada +CC Cocos (Keeling) Islands +CD Congo (Dem. Rep.) +CF Central African Rep. +CG Congo (Rep.) +CH Switzerland +CI Cote d'Ivoire +CK Cook Islands +CL Chile +CM Cameroon +CN China +CO Colombia +CR Costa Rica +CU Cuba +CV Cape Verde +CW Curacao +CX Christmas Island +CY Cyprus +CZ Czech Republic +DE Germany +DJ Djibouti +DK Denmark +DM Dominica +DO Dominican Republic +DZ Algeria +EC Ecuador +EE Estonia +EG Egypt +EH Western Sahara +ER Eritrea +ES Spain +ET Ethiopia +FI Finland +FJ Fiji +FK Falkland Islands +FM Micronesia +FO Faroe Islands +FR France +GA Gabon +GB Britain (UK) +GD Grenada +GE Georgia +GF French Guiana +GG Guernsey +GH Ghana +GI Gibraltar +GL Greenland +GM Gambia +GN Guinea +GP Guadeloupe +GQ Equatorial Guinea +GR Greece +GS South Georgia & the South Sandwich Islands +GT Guatemala +GU Guam +GW Guinea-Bissau +GY Guyana +HK Hong Kong +HM Heard Island & McDonald Islands +HN Honduras +HR Croatia +HT Haiti +HU Hungary +ID Indonesia +IE Ireland +IL Israel +IM Isle of Man +IN India +IO British Indian Ocean Territory +IQ Iraq +IR Iran +IS Iceland +IT Italy +JE Jersey +JM Jamaica +JO Jordan +JP Japan +KE Kenya +KG Kyrgyzstan +KH Cambodia +KI Kiribati +KM Comoros +KN St Kitts & Nevis +KP Korea (North) +KR Korea (South) +KW Kuwait +KY Cayman Islands +KZ Kazakhstan +LA Laos +LB Lebanon +LC St Lucia +LI Liechtenstein +LK Sri Lanka +LR Liberia +LS Lesotho +LT Lithuania +LU Luxembourg +LV Latvia +LY Libya +MA Morocco +MC Monaco +MD Moldova +ME Montenegro +MF St Martin (French part) +MG Madagascar +MH Marshall Islands +MK Macedonia +ML Mali +MM Myanmar (Burma) +MN Mongolia +MO Macau +MP Northern Mariana Islands +MQ Martinique +MR Mauritania +MS Montserrat +MT Malta +MU Mauritius +MV Maldives +MW Malawi +MX Mexico +MY Malaysia +MZ Mozambique +NA Namibia +NC New Caledonia +NE Niger +NF Norfolk Island +NG Nigeria +NI Nicaragua +NL Netherlands +NO Norway +NP Nepal +NR Nauru +NU Niue +NZ New Zealand +OM Oman +PA Panama +PE Peru +PF French Polynesia +PG Papua New Guinea +PH Philippines +PK Pakistan +PL Poland +PM St Pierre & Miquelon +PN Pitcairn +PR Puerto Rico +PS Palestine +PT Portugal +PW Palau +PY Paraguay +QA Qatar +RE Reunion +RO Romania +RS Serbia +RU Russia +RW Rwanda +SA Saudi Arabia +SB Solomon Islands +SC Seychelles +SD Sudan +SE Sweden +SG Singapore +SH St Helena +SI Slovenia +SJ Svalbard & Jan Mayen +SK Slovakia +SL Sierra Leone +SM San Marino +SN Senegal +SO Somalia +SR Suriname +SS South Sudan +ST Sao Tome & Principe +SV El Salvador +SX Sint Maarten +SY Syria +SZ Swaziland +TC Turks & Caicos Is +TD Chad +TF French Southern & Antarctic Lands +TG Togo +TH Thailand +TJ Tajikistan +TK Tokelau +TL East Timor +TM Turkmenistan +TN Tunisia +TO Tonga +TR Turkey +TT Trinidad & Tobago +TV Tuvalu +TW Taiwan +TZ Tanzania +UA Ukraine +UG Uganda +UM US minor outlying islands +US United States +UY Uruguay +UZ Uzbekistan +VA Vatican City +VC St Vincent +VE Venezuela +VG Virgin Islands (UK) +VI Virgin Islands (US) +VN Vietnam +VU Vanuatu +WF Wallis & Futuna +WS Samoa (western) +YE Yemen +YT Mayotte +ZA South Africa +ZM Zambia +ZW Zimbabwe diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/leapseconds b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/leapseconds new file mode 100644 index 0000000..5b5c70e --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/leapseconds @@ -0,0 +1,100 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# Allowance for leapseconds added to each timezone file. + +# The International Earth Rotation Service periodically uses leap seconds +# to keep UTC to within 0.9 s of UT1 +# (which measures the true angular orientation of the earth in space); see +# Terry J Quinn, The BIPM and the accurate measure of time, +# Proc IEEE 79, 7 (July 1991), 894-905. +# There were no leap seconds before 1972, because the official mechanism +# accounting for the discrepancy between atomic time and the earth's rotation +# did not exist until the early 1970s. + +# The correction (+ or -) is made at the given time, so lines +# will typically look like: +# Leap YEAR MON DAY 23:59:60 + R/S +# or +# Leap YEAR MON DAY 23:59:59 - R/S + +# If the leapsecond is Rolling (R) the given time is local time +# If the leapsecond is Stationary (S) the given time is UTC + +# Leap YEAR MONTH DAY HH:MM:SS CORR R/S +Leap 1972 Jun 30 23:59:60 + S +Leap 1972 Dec 31 23:59:60 + S +Leap 1973 Dec 31 23:59:60 + S +Leap 1974 Dec 31 23:59:60 + S +Leap 1975 Dec 31 23:59:60 + S +Leap 1976 Dec 31 23:59:60 + S +Leap 1977 Dec 31 23:59:60 + S +Leap 1978 Dec 31 23:59:60 + S +Leap 1979 Dec 31 23:59:60 + S +Leap 1981 Jun 30 23:59:60 + S +Leap 1982 Jun 30 23:59:60 + S +Leap 1983 Jun 30 23:59:60 + S +Leap 1985 Jun 30 23:59:60 + S +Leap 1987 Dec 31 23:59:60 + S +Leap 1989 Dec 31 23:59:60 + S +Leap 1990 Dec 31 23:59:60 + S +Leap 1992 Jun 30 23:59:60 + S +Leap 1993 Jun 30 23:59:60 + S +Leap 1994 Jun 30 23:59:60 + S +Leap 1995 Dec 31 23:59:60 + S +Leap 1997 Jun 30 23:59:60 + S +Leap 1998 Dec 31 23:59:60 + S +Leap 2005 Dec 31 23:59:60 + S +Leap 2008 Dec 31 23:59:60 + S +Leap 2012 Jun 30 23:59:60 + S + +# INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS) +# +# SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE +# +# +# SERVICE DE LA ROTATION TERRESTRE +# OBSERVATOIRE DE PARIS +# 61, Av. de l'Observatoire 75014 PARIS (France) +# Tel. : 33 (0) 1 40 51 22 26 +# FAX : 33 (0) 1 40 51 22 91 +# e-mail : (E-Mail Removed) +# http://hpiers.obspm.fr/eop-pc +# +# Paris, 5 January 2012 +# +# +# Bulletin C 43 +# +# To authorities responsible +# for the measurement and +# distribution of time +# +# +# UTC TIME STEP +# on the 1st of July 2012 +# +# +# A positive leap second will be introduced at the end of June 2012. +# The sequence of dates of the UTC second markers will be: +# +# 2012 June 30, 23h 59m 59s +# 2012 June 30, 23h 59m 60s +# 2012 July 1, 0h 0m 0s +# +# The difference between UTC and the International Atomic Time TAI is: +# +# from 2009 January 1, 0h UTC, to 2012 July 1 0h UTC : UTC-TAI = - 34s +# from 2012 July 1, 0h UTC, until further notice : UTC-TAI = - 35s +# +# Leap seconds can be introduced in UTC at the end of the months of December +# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every +# six months, either to announce a time step in UTC or to confirm that there +# will be no time step at the next possible date. +# +# +# Daniel GAMBIS +# Head +# Earth Orientation Center of IERS +# Observatoire de Paris, France diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/northamerica b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/northamerica new file mode 100644 index 0000000..772d7a4 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/northamerica @@ -0,0 +1,3235 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# also includes Central America and the Caribbean + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@iana.org for general use in the future). + +# From Paul Eggert (1999-03-22): +# A reliable and entertaining source about time zones is +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). + +############################################################################### + +# United States + +# From Paul Eggert (1999-03-31): +# Howse writes (pp 121-125) that time zones were invented by +# Professor Charles Ferdinand Dowd (1825-1904), +# Principal of Temple Grove Ladies' Seminary (Saratoga Springs, NY). +# His pamphlet ``A System of National Time for Railroads'' (1870) +# was the result of his proposals at the Convention of Railroad Trunk Lines +# in New York City (1869-10). His 1870 proposal was based on Washington, DC, +# but in 1872-05 he moved the proposed origin to Greenwich. +# His proposal was adopted by the railroads on 1883-11-18 at 12:00, +# and the most of the country soon followed suit. + +# From Paul Eggert (2005-04-16): +# That 1883 transition occurred at 12:00 new time, not at 12:00 old time. +# See p 46 of David Prerau, Seize the daylight, Thunder's Mouth Press (2005). + +# From Paul Eggert (2006-03-22): +# A good source for time zone historical data in the US is +# Thomas G. Shanks, The American Atlas (5th edition), +# San Diego: ACS Publications, Inc. (1991). +# Make sure you have the errata sheet; the book is somewhat useless without it. +# It is the source for most of the pre-1991 US entries below. + +# From Paul Eggert (2001-03-06): +# Daylight Saving Time was first suggested as a joke by Benjamin Franklin +# in his whimsical essay ``An Economical Project for Diminishing the Cost +# of Light'' published in the Journal de Paris (1784-04-26). +# Not everyone is happy with the results: +# +# I don't really care how time is reckoned so long as there is some +# agreement about it, but I object to being told that I am saving +# daylight when my reason tells me that I am doing nothing of the kind. +# I even object to the implication that I am wasting something +# valuable if I stay in bed after the sun has risen. As an admirer +# of moonlight I resent the bossy insistence of those who want to +# reduce my time for enjoying it. At the back of the Daylight Saving +# scheme I detect the bony, blue-fingered hand of Puritanism, eager +# to push people into bed earlier, and get them up earlier, to make +# them healthy, wealthy and wise in spite of themselves. +# +# -- Robertson Davies, The diary of Samuel Marchbanks, +# Clarke, Irwin (1947), XIX, Sunday +# +# For more about the first ten years of DST in the United States, see +# Robert Garland's <a href="http://www.clpgh.org/exhibit/dst.html"> +# Ten years of daylight saving from the Pittsburgh standpoint +# (Carnegie Library of Pittsburgh, 1927)</a>. +# +# Shanks says that DST was called "War Time" in the US in 1918 and 1919. +# However, DST was imposed by the Standard Time Act of 1918, which +# was the first nationwide legal time standard, and apparently +# time was just called "Standard Time" or "Daylight Saving Time". + +# From Arthur David Olson: +# US Daylight Saving Time ended on the last Sunday of *October* in 1974. +# See, for example, the front page of the Saturday, 1974-10-26 +# and Sunday, 1974-10-27 editions of the Washington Post. + +# From Arthur David Olson: +# Before the Uniform Time Act of 1966 took effect in 1967, observance of +# Daylight Saving Time in the US was by local option, except during wartime. + +# From Arthur David Olson (2000-09-25): +# Last night I heard part of a rebroadcast of a 1945 Arch Oboler radio drama. +# In the introduction, Oboler spoke of "Eastern Peace Time." +# An AltaVista search turned up +# <a href="http://rowayton.org/rhs/hstaug45.html">: +# "When the time is announced over the radio now, it is 'Eastern Peace +# Time' instead of the old familiar 'Eastern War Time.' Peace is wonderful." +# </a> (August 1945) by way of confirmation. + +# From Joseph Gallant citing +# George H. Douglas, _The Early Days of Radio Broadcasting_ (1987): +# At 7 P.M. (Eastern War Time) [on 1945-08-14], the networks were set +# to switch to London for Attlee's address, but the American people +# never got to hear his speech live. According to one press account, +# CBS' Bob Trout was first to announce the word of Japan's surrender, +# but a few seconds later, NBC, ABC and Mutual also flashed the word +# of surrender, all of whom interrupting the bells of Big Ben in +# London which were to precede Mr. Attlee's speech. + +# From Paul Eggert (2003-02-09): It was Robert St John, not Bob Trout. From +# Myrna Oliver's obituary of St John on page B16 of today's Los Angeles Times: +# +# ... a war-weary U.S. clung to radios, awaiting word of Japan's surrender. +# Any announcement from Asia would reach St. John's New York newsroom on a +# wire service teletype machine, which had prescribed signals for major news. +# Associated Press, for example, would ring five bells before spewing out +# typed copy of an important story, and 10 bells for news "of transcendental +# importance." +# +# On Aug. 14, stalling while talking steadily into the NBC networks' open +# microphone, St. John heard five bells and waited only to hear a sixth bell, +# before announcing confidently: "Ladies and gentlemen, World War II is over. +# The Japanese have agreed to our surrender terms." +# +# He had scored a 20-second scoop on other broadcasters. + +# From Arthur David Olson (2005-08-22): +# Paul has been careful to use the "US" rules only in those locations +# that are part of the United States; this reflects the real scope of +# U.S. government action. So even though the "US" rules have changed +# in the latest release, other countries won't be affected. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule US 1918 1919 - Mar lastSun 2:00 1:00 D +Rule US 1918 1919 - Oct lastSun 2:00 0 S +Rule US 1942 only - Feb 9 2:00 1:00 W # War +Rule US 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule US 1945 only - Sep 30 2:00 0 S +Rule US 1967 2006 - Oct lastSun 2:00 0 S +Rule US 1967 1973 - Apr lastSun 2:00 1:00 D +Rule US 1974 only - Jan 6 2:00 1:00 D +Rule US 1975 only - Feb 23 2:00 1:00 D +Rule US 1976 1986 - Apr lastSun 2:00 1:00 D +Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D +Rule US 2007 max - Mar Sun>=8 2:00 1:00 D +Rule US 2007 max - Nov Sun>=1 2:00 0 S + +# From Arthur David Olson, 2005-12-19 +# We generate the files specified below to guard against old files with +# obsolete information being left in the time zone binary directory. +# We limit the list to names that have appeared in previous versions of +# this time zone package. +# We do these as separate Zones rather than as Links to avoid problems if +# a particular place changes whether it observes DST. +# We put these specifications here in the northamerica file both to +# increase the chances that they'll actually get compiled and to +# avoid the need to duplicate the US rules in another file. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone EST -5:00 - EST +Zone MST -7:00 - MST +Zone HST -10:00 - HST +Zone EST5EDT -5:00 US E%sT +Zone CST6CDT -6:00 US C%sT +Zone MST7MDT -7:00 US M%sT +Zone PST8PDT -8:00 US P%sT + +# From Bob Devine (1988-01-28): +# ...Alaska (and Hawaii) had the timezone names changed in 1967. +# old new +# Pacific Standard Time(PST) -same- +# Yukon Standard Time(YST) -same- +# Central Alaska S.T. (CAT) Alaska-Hawaii St[an]dard Time (AHST) +# Nome Standard Time (NT) Bering Standard Time (BST) +# +# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz. +# The YST zone now covers nearly all of the state, AHST just part +# of the Aleutian islands. No DST. + +# From Paul Eggert (1995-12-19): +# The tables below use `NST', not `NT', for Nome Standard Time. +# I invented `CAWT' for Central Alaska War Time. + +# From U. S. Naval Observatory (1989-01-19): +# USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON +# USA EASTERN 4 H BEHIND UTC APR 3 - OCT 30 +# USA CENTRAL 6 H BEHIND UTC CHICAGO, HOUSTON +# USA CENTRAL 5 H BEHIND UTC APR 3 - OCT 30 +# USA MOUNTAIN 7 H BEHIND UTC DENVER +# USA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 30 +# USA PACIFIC 8 H BEHIND UTC L.A., SAN FRANCISCO +# USA PACIFIC 7 H BEHIND UTC APR 3 - OCT 30 +# USA ALASKA STD 9 H BEHIND UTC MOST OF ALASKA (AKST) +# USA ALASKA STD 8 H BEHIND UTC APR 3 - OCT 30 (AKDT) +# USA ALEUTIAN 10 H BEHIND UTC ISLANDS WEST OF 170W +# USA - " - 9 H BEHIND UTC APR 3 - OCT 30 +# USA HAWAII 10 H BEHIND UTC +# USA BERING 11 H BEHIND UTC SAMOA, MIDWAY + +# From Arthur David Olson (1989-01-21): +# The above dates are for 1988. +# Note the "AKST" and "AKDT" abbreviations, the claim that there's +# no DST in Samoa, and the claim that there is DST in Alaska and the +# Aleutians. + +# From Arthur David Olson (1988-02-13): +# Legal standard time zone names, from United States Code (1982 Edition and +# Supplement III), Title 15, Chapter 6, Section 260 and forward. First, names +# up to 1967-04-01 (when most provisions of the Uniform Time Act of 1966 +# took effect), as explained in sections 263 and 261: +# (none) +# United States standard eastern time +# United States standard mountain time +# United States standard central time +# United States standard Pacific time +# (none) +# United States standard Alaska time +# (none) +# Next, names from 1967-04-01 until 1983-11-30 (the date for +# public law 98-181): +# Atlantic standard time +# eastern standard time +# central standard time +# mountain standard time +# Pacific standard time +# Yukon standard time +# Alaska-Hawaii standard time +# Bering standard time +# And after 1983-11-30: +# Atlantic standard time +# eastern standard time +# central standard time +# mountain standard time +# Pacific standard time +# Alaska standard time +# Hawaii-Aleutian standard time +# Samoa standard time +# The law doesn't give abbreviations. +# +# From Paul Eggert (2000-01-08), following a heads-up from Rives McDow: +# Public law 106-564 (2000-12-23) introduced the abbreviation +# "Chamorro Standard Time" for time in Guam and the Northern Marianas. +# See the file "australasia". + +# From Arthur David Olson, 2005-08-09 +# The following was signed into law on 2005-08-08. +# +# H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS. +# (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15 +# U.S.C. 260a(a)) is amended-- +# (1) by striking `first Sunday of April' and inserting `second +# Sunday of March'; and +# (2) by striking `last Sunday of October' and inserting `first +# Sunday of November'. +# (b) Effective Date- Subsection (a) shall take effect 1 year after the +# date of enactment of this Act or March 1, 2007, whichever is later. +# (c) Report to Congress- Not later than 9 months after the effective +# date stated in subsection (b), the Secretary shall report to Congress +# on the impact of this section on energy consumption in the United +# States. +# (d) Right to Revert- Congress retains the right to revert the +# Daylight Saving Time back to the 2005 time schedules once the +# Department study is complete. + +# US eastern time, represented by New York + +# Connecticut, Delaware, District of Columbia, most of Florida, +# Georgia, southeast Indiana (Dearborn and Ohio counties), eastern Kentucky +# (except America/Kentucky/Louisville below), Maine, Maryland, Massachusetts, +# New Hampshire, New Jersey, New York, North Carolina, Ohio, +# Pennsylvania, Rhode Island, South Carolina, eastern Tennessee, +# Vermont, Virginia, West Virginia + +# From Dave Cantor (2004-11-02): +# Early this summer I had the occasion to visit the Mount Washington +# Observatory weather station atop (of course!) Mount Washington [, NH].... +# One of the staff members said that the station was on Eastern Standard Time +# and didn't change their clocks for Daylight Saving ... so that their +# reports will always have times which are 5 hours behind UTC. + +# From Paul Eggert (2005-08-26): +# According to today's Huntsville Times +# <http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1> +# a few towns on Alabama's "eastern border with Georgia, such as Phenix City +# in Russell County, Lanett in Chambers County and some towns in Lee County, +# set their watches and clocks on Eastern time." It quotes H.H. "Bubba" +# Roberts, city administrator in Phenix City. as saying "We are in the Central +# time zone, but we do go by the Eastern time zone because so many people work +# in Columbus." + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule NYC 1920 only - Mar lastSun 2:00 1:00 D +Rule NYC 1920 only - Oct lastSun 2:00 0 S +Rule NYC 1921 1966 - Apr lastSun 2:00 1:00 D +Rule NYC 1921 1954 - Sep lastSun 2:00 0 S +Rule NYC 1955 1966 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58 + -5:00 US E%sT 1920 + -5:00 NYC E%sT 1942 + -5:00 US E%sT 1946 + -5:00 NYC E%sT 1967 + -5:00 US E%sT + +# US central time, represented by Chicago + +# Alabama, Arkansas, Florida panhandle (Bay, Calhoun, Escambia, +# Gulf, Holmes, Jackson, Okaloosa, Santa Rosa, Walton, and +# Washington counties), Illinois, western Indiana +# (Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer, +# Vanderburgh, and Warrick counties), Iowa, most of Kansas, western +# Kentucky, Louisiana, Minnesota, Mississippi, Missouri, eastern +# Nebraska, eastern North Dakota, Oklahoma, eastern South Dakota, +# western Tennessee, most of Texas, Wisconsin + +# From Larry M. Smith (2006-04-26) re Wisconsin: +# http://www.legis.state.wi.us/statutes/Stat0175.pdf ... +# is currently enforced at the 01:00 time of change. Because the local +# "bar time" in the state corresponds to 02:00, a number of citations +# are issued for the "sale of class 'B' alcohol after prohibited +# hours" within the deviated hour of this change every year.... +# +# From Douglas R. Bomberg (2007-03-12): +# Wisconsin has enacted (nearly eleventh-hour) legislation to get WI +# Statue 175 closer in synch with the US Congress' intent.... +# http://www.legis.state.wi.us/2007/data/acts/07Act3.pdf + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Chicago 1920 only - Jun 13 2:00 1:00 D +Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S +Rule Chicago 1921 only - Mar lastSun 2:00 1:00 D +Rule Chicago 1922 1966 - Apr lastSun 2:00 1:00 D +Rule Chicago 1922 1954 - Sep lastSun 2:00 0 S +Rule Chicago 1955 1966 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24 + -6:00 US C%sT 1920 + -6:00 Chicago C%sT 1936 Mar 1 2:00 + -5:00 - EST 1936 Nov 15 2:00 + -6:00 Chicago C%sT 1942 + -6:00 US C%sT 1946 + -6:00 Chicago C%sT 1967 + -6:00 US C%sT +# Oliver County, ND switched from mountain to central time on 1992-10-25. +Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48 + -7:00 US M%sT 1992 Oct 25 02:00 + -6:00 US C%sT +# Morton County, ND, switched from mountain to central time on +# 2003-10-26, except for the area around Mandan which was already central time. +# See <http://dmses.dot.gov/docimages/p63/135818.pdf>. +# Officially this switch also included part of Sioux County, and +# Jones, Mellette, and Todd Counties in South Dakota; +# but in practice these other counties were already observing central time. +# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>. +Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21 + -7:00 US M%sT 2003 Oct 26 02:00 + -6:00 US C%sT + +# From Josh Findley (2011-01-21): +# ...it appears that Mercer County, North Dakota, changed from the +# mountain time zone to the central time zone at the last transition from +# daylight-saving to standard time (on Nov. 7, 2010): +# <a href="http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm"> +# http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm +# </a> +# <a href="http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html"> +# http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html +# </a> + +# From Andy Lipscomb (2011-01-24): +# ...according to the Census Bureau, the largest city is Beulah (although +# it's commonly referred to as Beulah-Hazen, with Hazen being the next +# largest city in Mercer County). Google Maps places Beulah's city hall +# at 4715'51" north, 10146'40" west, which yields an offset of 6h47'07". + +Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53 + -7:00 US M%sT 2010 Nov 7 2:00 + -6:00 US C%sT + +# US mountain time, represented by Denver +# +# Colorado, far western Kansas, Montana, western +# Nebraska, Nevada border (Jackpot, Owyhee, and Mountain City), +# New Mexico, southwestern North Dakota, +# western South Dakota, far western Texas (El Paso County, Hudspeth County, +# and Pine Springs and Nickel Creek in Culberson County), Utah, Wyoming +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Denver 1920 1921 - Mar lastSun 2:00 1:00 D +Rule Denver 1920 only - Oct lastSun 2:00 0 S +Rule Denver 1921 only - May 22 2:00 0 S +Rule Denver 1965 1966 - Apr lastSun 2:00 1:00 D +Rule Denver 1965 1966 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04 + -7:00 US M%sT 1920 + -7:00 Denver M%sT 1942 + -7:00 US M%sT 1946 + -7:00 Denver M%sT 1967 + -7:00 US M%sT + +# US Pacific time, represented by Los Angeles +# +# California, northern Idaho (Benewah, Bonner, Boundary, Clearwater, +# Idaho, Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, +# and the northern three-quarters of Idaho county), +# most of Nevada, most of Oregon, and Washington +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule CA 1948 only - Mar 14 2:00 1:00 D +Rule CA 1949 only - Jan 1 2:00 0 S +Rule CA 1950 1966 - Apr lastSun 2:00 1:00 D +Rule CA 1950 1961 - Sep lastSun 2:00 0 S +Rule CA 1962 1966 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02 + -8:00 US P%sT 1946 + -8:00 CA P%sT 1967 + -8:00 US P%sT + +# Alaska +# AK%sT is the modern abbreviation for -9:00 per USNO. +# +# From Paul Eggert (2001-05-30): +# Howse writes that Alaska switched from the Julian to the Gregorian calendar, +# and from east-of-GMT to west-of-GMT days, when the US bought it from Russia. +# This was on 1867-10-18, a Friday; the previous day was 1867-10-06 Julian, +# also a Friday. Include only the time zone part of this transition, +# ignoring the switch from Julian to Gregorian, since we can't represent +# the Julian calendar. +# +# As far as we know, none of the exact locations mentioned below were +# permanently inhabited in 1867 by anyone using either calendar. +# (Yakutat was colonized by the Russians in 1799, but the settlement +# was destroyed in 1805 by a Yakutat-kon war party.) However, there +# were nearby inhabitants in some cases and for our purposes perhaps +# it's best to simply use the official transition. +# + +# From Steve Ferguson (2011-01-31): +# The author lives in Alaska and many of the references listed are only +# available to Alaskan residents. +# +# <a href="http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98"> +# http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98 +# </a> + +# From Arthur David Olson (2011-02-01): +# Here's database-relevant material from the 2001 "Alaska History" article: +# +# On September 20 [1979]...DOT...officials decreed that on April 27, +# 1980, Juneau and other nearby communities would move to Yukon Time. +# Sitka, Petersburg, Wrangell, and Ketchikan, however, would remain on +# Pacific Time. +# +# ...on September 22, 1980, DOT Secretary Neil E. Goldschmidt rescinded the +# Department's September 1979 decision. Juneau and other communities in +# northern Southeast reverted to Pacific Time on October 26. +# +# On October 28 [1983]...the Metlakatla Indian Community Council voted +# unanimously to keep the reservation on Pacific Time. +# +# According to DOT official Joanne Petrie, Indian reservations are not +# bound to follow time zones imposed by neighboring jurisdictions. +# +# (The last is consistent with how the database now handles the Navajo +# Nation.) + +# From Arthur David Olson (2011-02-09): +# I just spoke by phone with a staff member at the Metlakatla Indian +# Community office (using contact information available at +# <a href="http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla"> +# http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla +# </a>). +# It's shortly after 1:00 here on the east coast of the United States; +# the staffer said it was shortly after 10:00 there. When I asked whether +# that meant they were on Pacific time, they said no--they were on their +# own time. I asked about daylight saving; they said it wasn't used. I +# did not inquire about practices in the past. + +# From Arthur David Olson (2011-08-17): +# For lack of better information, assume that Metlakatla's +# abandonment of use of daylight saving resulted from the 1983 vote. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Juneau 15:02:19 - LMT 1867 Oct 18 + -8:57:41 - LMT 1900 Aug 20 12:00 + -8:00 - PST 1942 + -8:00 US P%sT 1946 + -8:00 - PST 1969 + -8:00 US P%sT 1980 Apr 27 2:00 + -9:00 US Y%sT 1980 Oct 26 2:00 + -8:00 US P%sT 1983 Oct 30 2:00 + -9:00 US Y%sT 1983 Nov 30 + -9:00 US AK%sT +Zone America/Sitka 14:58:47 - LMT 1867 Oct 18 + -9:01:13 - LMT 1900 Aug 20 12:00 + -8:00 - PST 1942 + -8:00 US P%sT 1946 + -8:00 - PST 1969 + -8:00 US P%sT 1983 Oct 30 2:00 + -9:00 US Y%sT 1983 Nov 30 + -9:00 US AK%sT +Zone America/Metlakatla 15:13:42 - LMT 1867 Oct 18 + -8:46:18 - LMT 1900 Aug 20 12:00 + -8:00 - PST 1942 + -8:00 US P%sT 1946 + -8:00 - PST 1969 + -8:00 US P%sT 1983 Oct 30 2:00 + -8:00 - MeST +Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18 + -9:18:55 - LMT 1900 Aug 20 12:00 + -9:00 - YST 1942 + -9:00 US Y%sT 1946 + -9:00 - YST 1969 + -9:00 US Y%sT 1983 Nov 30 + -9:00 US AK%sT +Zone America/Anchorage 14:00:24 - LMT 1867 Oct 18 + -9:59:36 - LMT 1900 Aug 20 12:00 + -10:00 - CAT 1942 + -10:00 US CAT/CAWT 1945 Aug 14 23:00u + -10:00 US CAT/CAPT 1946 # Peace + -10:00 - CAT 1967 Apr + -10:00 - AHST 1969 + -10:00 US AH%sT 1983 Oct 30 2:00 + -9:00 US Y%sT 1983 Nov 30 + -9:00 US AK%sT +Zone America/Nome 12:58:21 - LMT 1867 Oct 18 + -11:01:38 - LMT 1900 Aug 20 12:00 + -11:00 - NST 1942 + -11:00 US N%sT 1946 + -11:00 - NST 1967 Apr + -11:00 - BST 1969 + -11:00 US B%sT 1983 Oct 30 2:00 + -9:00 US Y%sT 1983 Nov 30 + -9:00 US AK%sT +Zone America/Adak 12:13:21 - LMT 1867 Oct 18 + -11:46:38 - LMT 1900 Aug 20 12:00 + -11:00 - NST 1942 + -11:00 US N%sT 1946 + -11:00 - NST 1967 Apr + -11:00 - BST 1969 + -11:00 US B%sT 1983 Oct 30 2:00 + -10:00 US AH%sT 1983 Nov 30 + -10:00 US HA%sT +# The following switches don't quite make our 1970 cutoff. +# +# Shanks writes that part of southwest Alaska (e.g. Aniak) +# switched from -11:00 to -10:00 on 1968-09-22 at 02:00, +# and another part (e.g. Akiak) made the same switch five weeks later. +# +# From David Flater (2004-11-09): +# In e-mail, 2004-11-02, Ray Hudson, historian/liaison to the Unalaska +# Historic Preservation Commission, provided this information, which +# suggests that Unalaska deviated from statutory time from early 1967 +# possibly until 1983: +# +# Minutes of the Unalaska City Council Meeting, January 10, 1967: +# "Except for St. Paul and Akutan, Unalaska is the only important +# location not on Alaska Standard Time. The following resolution was +# made by William Robinson and seconded by Henry Swanson: Be it +# resolved that the City of Unalaska hereby goes to Alaska Standard +# Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday, +# January 14, Alaska Standard Time.) This resolution was passed with +# three votes for and one against." + +# Hawaii + +# From Arthur David Olson (2010-12-09): +# "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225 +# of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09, +# the article is available at +# <a href="http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf"> +# http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf +# </a> +# and indicates that standard time was adopted effective noon, January +# 13, 1896 (page 218), that in "1933, the Legislature decreed daylight +# saving for the period between the last Sunday of each April and the +# last Sunday of each September, but less than a month later repealed the +# act," (page 220), that year-round daylight saving time was in effect +# from 1942-02-09 to 1945-09-30 (page 221, with no time of day given for +# when clocks changed) and that clocks were changed by 30 minutes +# effective the second Sunday of June, 1947 (page 219, with no time of +# day given for when clocks changed). A footnote for the 1933 changes +# cites Session Laws of Hawaii 1933, "Act. 90 (approved 26 Apr. 1933) +# and Act 163 (approved 21 May 1933)." + +# From Arthur David Olson (2011-01-19): +# The following is from "Laws of the Territory of Hawaii Passed by the +# Seventeenth Legislature: Regular Session 1933," available (as of +# 2011-01-19) at American University's Pence Law Library. Page 85: "Act +# 90...At 2 o'clock ante meridian of the last Sunday in April of each +# year, the standard time of this Territory shall be advanced one +# hour...This Act shall take effect upon its approval. Approved this 26th +# day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of +# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is +# hereby repealed...This Act shall take effect upon its approval, upon +# which date the standard time of this Territory shall be restored to +# that existing immediately prior to the taking effect of said Act 90. +# Approved this 21st day of May, A. D. 1933. LAWRENCE M. JUDD, Governor +# of the Territory of Hawaii." +# +# Note that 1933-05-21 was a Sunday. +# We're left to guess the time of day when Act 163 was approved; guess noon. + +Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00 #Schmitt&Cox + -10:30 - HST 1933 Apr 30 2:00 #Laws 1933 + -10:30 1:00 HDT 1933 May 21 12:00 #Laws 1933+12 + -10:30 - HST 1942 Feb 09 2:00 #Schmitt&Cox+2 + -10:30 1:00 HDT 1945 Sep 30 2:00 #Schmitt&Cox+2 + -10:30 - HST 1947 Jun 8 2:00 #Schmitt&Cox+2 + -10:00 - HST + +# Now we turn to US areas that have diverged from the consensus since 1970. + +# Arizona mostly uses MST. + +# From Paul Eggert (2002-10-20): +# +# The information in the rest of this paragraph is derived from the +# <a href="http://www.dlapr.lib.az.us/links/daylight.htm"> +# Daylight Saving Time web page (2002-01-23)</a> maintained by the +# Arizona State Library, Archives and Public Records. +# Between 1944-01-01 and 1944-04-01 the State of Arizona used standard +# time, but by federal law railroads, airlines, bus lines, military +# personnel, and some engaged in interstate commerce continued to +# observe war (i.e., daylight saving) time. The 1944-03-17 Phoenix +# Gazette says that was the date the law changed, and that 04-01 was +# the date the state's clocks would change. In 1945 the State of +# Arizona used standard time all year, again with exceptions only as +# mandated by federal law. Arizona observed DST in 1967, but Arizona +# Laws 1968, ch. 183 (effective 1968-03-21) repealed DST. +# +# Shanks says the 1944 experiment came to an end on 1944-03-17. +# Go with the Arizona State Library instead. + +Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42 + -7:00 US M%sT 1944 Jan 1 00:01 + -7:00 - MST 1944 Apr 1 00:01 + -7:00 US M%sT 1944 Oct 1 00:01 + -7:00 - MST 1967 + -7:00 US M%sT 1968 Mar 21 + -7:00 - MST +# From Arthur David Olson (1988-02-13): +# A writer from the Inter Tribal Council of Arizona, Inc., +# notes in private correspondence dated 1987-12-28 that "Presently, only the +# Navajo Nation participates in the Daylight Saving Time policy, due to its +# large size and location in three states." (The "only" means that other +# tribal nations don't use DST.) + +Link America/Denver America/Shiprock + +# Southern Idaho (Ada, Adams, Bannock, Bear Lake, Bingham, Blaine, +# Boise, Bonneville, Butte, Camas, Canyon, Caribou, Cassia, Clark, +# Custer, Elmore, Franklin, Fremont, Gem, Gooding, Jefferson, Jerome, +# Lemhi, Lincoln, Madison, Minidoka, Oneida, Owyhee, Payette, Power, +# Teton, Twin Falls, Valley, Washington counties, and the southern +# quarter of Idaho county) and eastern Oregon (most of Malheur County) +# switched four weeks late in 1974. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11 + -8:00 US P%sT 1923 May 13 2:00 + -7:00 US M%sT 1974 + -7:00 - MST 1974 Feb 3 2:00 + -7:00 US M%sT + +# Indiana +# +# For a map of Indiana's time zone regions, see: +# <a href="http://www.mccsc.edu/time.html"> +# What time is it in Indiana? +# </a> (2006-03-01) +# +# From Paul Eggert (2007-08-17): +# Since 1970, most of Indiana has been like America/Indiana/Indianapolis, +# with the following exceptions: +# +# - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer, +# Vandenburgh, and Warrick counties have been like America/Chicago. +# +# - Dearborn and Ohio counties have been like America/New_York. +# +# - Clark, Floyd, and Harrison counties have been like +# America/Kentucky/Louisville. +# +# - Crawford, Daviess, Dubois, Knox, Martin, Perry, Pike, Pulaski, Starke, +# and Switzerland counties have their own time zone histories as noted below. +# +# Shanks partitioned Indiana into 345 regions, each with its own time history, +# and wrote ``Even newspaper reports present contradictory information.'' +# Those Hoosiers! Such a flighty and changeable people! +# Fortunately, most of the complexity occurred before our cutoff date of 1970. +# +# Other than Indianapolis, the Indiana place names are so nondescript +# that they would be ambiguous if we left them at the `America' level. +# So we reluctantly put them all in a subdirectory `America/Indiana'. + +# From Paul Eggert (2005-08-16): +# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006. + +# From Nathan Stratton Treadway (2006-03-30): +# http://www.dot.gov/affairs/dot0406.htm [3705 B] +# From Deborah Goldsmith (2006-01-18): +# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB] +# From Paul Eggert (2006-01-20): +# It says "DOT is relocating the time zone boundary in Indiana to move Starke, +# Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the +# Eastern Time Zone to the Central Time Zone.... The effective date of +# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the +# changeover date from standard time to Daylight Saving Time." +# Strictly speaking, this means the affected counties will change their +# clocks twice that night, but this obviously is in error. The intent +# is that 01:59:59 EST be followed by 02:00:00 CDT. + +# From Gwillim Law (2007-02-10): +# The Associated Press has been reporting that Pulaski County, Indiana is +# going to switch from Central to Eastern Time on March 11, 2007.... +# http://www.indystar.com/apps/pbcs.dll/article?AID=/20070207/LOCAL190108/702070524/0/LOCAL + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D +Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S +Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22 + -6:00 US C%sT 1920 + -6:00 Indianapolis C%sT 1942 + -6:00 US C%sT 1946 + -6:00 Indianapolis C%sT 1955 Apr 24 2:00 + -5:00 - EST 1957 Sep 29 2:00 + -6:00 - CST 1958 Apr 27 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1971 + -5:00 - EST 2006 + -5:00 US E%sT +# +# Eastern Crawford County, Indiana, left its clocks alone in 1974, +# as well as from 1976 through 2005. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Marengo 1951 only - Apr lastSun 2:00 1:00 D +Rule Marengo 1951 only - Sep lastSun 2:00 0 S +Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D +Rule Marengo 1954 1960 - Sep lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37 + -6:00 US C%sT 1951 + -6:00 Marengo C%sT 1961 Apr 30 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1974 Jan 6 2:00 + -6:00 1:00 CDT 1974 Oct 27 2:00 + -5:00 US E%sT 1976 + -5:00 - EST 2006 + -5:00 US E%sT +# +# Daviess, Dubois, Knox, and Martin Counties, Indiana, +# switched from eastern to central time in April 2006, then switched back +# in November 2007. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Vincennes 1946 only - Apr lastSun 2:00 1:00 D +Rule Vincennes 1946 only - Sep lastSun 2:00 0 S +Rule Vincennes 1953 1954 - Apr lastSun 2:00 1:00 D +Rule Vincennes 1953 1959 - Sep lastSun 2:00 0 S +Rule Vincennes 1955 only - May 1 0:00 1:00 D +Rule Vincennes 1956 1963 - Apr lastSun 2:00 1:00 D +Rule Vincennes 1960 only - Oct lastSun 2:00 0 S +Rule Vincennes 1961 only - Sep lastSun 2:00 0 S +Rule Vincennes 1962 1963 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53 + -6:00 US C%sT 1946 + -6:00 Vincennes C%sT 1964 Apr 26 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1971 + -5:00 - EST 2006 Apr 2 2:00 + -6:00 US C%sT 2007 Nov 4 2:00 + -5:00 US E%sT +# +# Perry County, Indiana, switched from eastern to central time in April 2006. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Perry 1946 only - Apr lastSun 2:00 1:00 D +Rule Perry 1946 only - Sep lastSun 2:00 0 S +Rule Perry 1953 1954 - Apr lastSun 2:00 1:00 D +Rule Perry 1953 1959 - Sep lastSun 2:00 0 S +Rule Perry 1955 only - May 1 0:00 1:00 D +Rule Perry 1956 1963 - Apr lastSun 2:00 1:00 D +Rule Perry 1960 only - Oct lastSun 2:00 0 S +Rule Perry 1961 only - Sep lastSun 2:00 0 S +Rule Perry 1962 1963 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 12:12:57 + -6:00 US C%sT 1946 + -6:00 Perry C%sT 1964 Apr 26 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1971 + -5:00 - EST 2006 Apr 2 2:00 + -6:00 US C%sT +# +# Pike County, Indiana moved from central to eastern time in 1977, +# then switched back in 2006, then switched back again in 2007. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Pike 1955 only - May 1 0:00 1:00 D +Rule Pike 1955 1960 - Sep lastSun 2:00 0 S +Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D +Rule Pike 1961 1964 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53 + -6:00 US C%sT 1955 + -6:00 Pike C%sT 1965 Apr 25 2:00 + -5:00 - EST 1966 Oct 30 2:00 + -6:00 US C%sT 1977 Oct 30 2:00 + -5:00 - EST 2006 Apr 2 2:00 + -6:00 US C%sT 2007 Nov 4 2:00 + -5:00 US E%sT +# +# Starke County, Indiana moved from central to eastern time in 1991, +# then switched back in 2006. +# From Arthur David Olson (1991-10-28): +# An article on page A3 of the Sunday, 1991-10-27 Washington Post +# notes that Starke County switched from Central time to Eastern time as of +# 1991-10-27. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Starke 1947 1961 - Apr lastSun 2:00 1:00 D +Rule Starke 1947 1954 - Sep lastSun 2:00 0 S +Rule Starke 1955 1956 - Oct lastSun 2:00 0 S +Rule Starke 1957 1958 - Sep lastSun 2:00 0 S +Rule Starke 1959 1961 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30 + -6:00 US C%sT 1947 + -6:00 Starke C%sT 1962 Apr 29 2:00 + -5:00 - EST 1963 Oct 27 2:00 + -6:00 US C%sT 1991 Oct 27 2:00 + -5:00 - EST 2006 Apr 2 2:00 + -6:00 US C%sT +# +# Pulaski County, Indiana, switched from eastern to central time in +# April 2006 and then switched back in March 2007. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Pulaski 1946 1960 - Apr lastSun 2:00 1:00 D +Rule Pulaski 1946 1954 - Sep lastSun 2:00 0 S +Rule Pulaski 1955 1956 - Oct lastSun 2:00 0 S +Rule Pulaski 1957 1960 - Sep lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35 + -6:00 US C%sT 1946 + -6:00 Pulaski C%sT 1961 Apr 30 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1971 + -5:00 - EST 2006 Apr 2 2:00 + -6:00 US C%sT 2007 Mar 11 2:00 + -5:00 US E%sT +# +# Switzerland County, Indiana, did not observe DST from 1973 through 2005. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44 + -6:00 US C%sT 1954 Apr 25 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1973 + -5:00 - EST 2006 + -5:00 US E%sT + +# Part of Kentucky left its clocks alone in 1974. +# This also includes Clark, Floyd, and Harrison counties in Indiana. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Louisville 1921 only - May 1 2:00 1:00 D +Rule Louisville 1921 only - Sep 1 2:00 0 S +Rule Louisville 1941 1961 - Apr lastSun 2:00 1:00 D +Rule Louisville 1941 only - Sep lastSun 2:00 0 S +Rule Louisville 1946 only - Jun 2 2:00 0 S +Rule Louisville 1950 1955 - Sep lastSun 2:00 0 S +Rule Louisville 1956 1960 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58 + -6:00 US C%sT 1921 + -6:00 Louisville C%sT 1942 + -6:00 US C%sT 1946 + -6:00 Louisville C%sT 1961 Jul 23 2:00 + -5:00 - EST 1968 + -5:00 US E%sT 1974 Jan 6 2:00 + -6:00 1:00 CDT 1974 Oct 27 2:00 + -5:00 US E%sT +# +# Wayne County, Kentucky +# +# From +# <a href="http://www.lake-cumberland.com/life/archive/news990129time.shtml"> +# Lake Cumberland LIFE +# </a> (1999-01-29) via WKYM-101.7: +# Clinton County has joined Wayne County in asking the DoT to change from +# the Central to the Eastern time zone.... The Wayne County government made +# the same request in December. And while Russell County officials have not +# taken action, the majority of respondents to a poll conducted there in +# August indicated they would like to change to "fast time" also. +# The three Lake Cumberland counties are the farthest east of any U.S. +# location in the Central time zone. +# +# From Rich Wales (2000-08-29): +# After prolonged debate, and despite continuing deep differences of opinion, +# Wayne County (central Kentucky) is switching from Central (-0600) to Eastern +# (-0500) time. They won't "fall back" this year. See Sara Shipley, +# The difference an hour makes, Nando Times (2000-08-29 15:33 -0400). +# +# From Paul Eggert (2001-07-16): +# The final rule was published in the +# <a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22"> +# Federal Register 65, 160 (2000-08-17), page 50154-50158. +# </a> +# +Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36 + -6:00 US C%sT 1946 + -6:00 - CST 1968 + -6:00 US C%sT 2000 Oct 29 2:00 + -5:00 US E%sT + + +# From Rives McDow (2000-08-30): +# Here ... are all the changes in the US since 1985. +# Kearny County, KS (put all of county on central; +# previously split between MST and CST) ... 1990-10 +# Starke County, IN (from CST to EST) ... 1991-10 +# Oliver County, ND (from MST to CST) ... 1992-10 +# West Wendover, NV (from PST TO MST) ... 1999-10 +# Wayne County, KY (from CST to EST) ... 2000-10 +# +# From Paul Eggert (2001-07-17): +# We don't know where the line used to be within Kearny County, KS, +# so omit that change for now. +# See America/Indiana/Knox for the Starke County, IN change. +# See America/North_Dakota/Center for the Oliver County, ND change. +# West Wendover, NV officially switched from Pacific to mountain time on +# 1999-10-31. See the +# <a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15"> +# Federal Register 64, 203 (1999-10-21), page 56705-56707. +# </a> +# However, the Federal Register says that West Wendover already operated +# on mountain time, and the rule merely made this official; +# hence a separate tz entry is not needed. + +# Michigan +# +# From Bob Devine (1988-01-28): +# Michigan didn't observe DST from 1968 to 1973. +# +# From Paul Eggert (1999-03-31): +# Shanks writes that Michigan started using standard time on 1885-09-18, +# but Howse writes (pp 124-125, referring to Popular Astronomy, 1901-01) +# that Detroit kept +# +# local time until 1900 when the City Council decreed that clocks should +# be put back twenty-eight minutes to Central Standard Time. Half the +# city obeyed, half refused. After considerable debate, the decision +# was rescinded and the city reverted to Sun time. A derisive offer to +# erect a sundial in front of the city hall was referred to the +# Committee on Sewers. Then, in 1905, Central time was adopted +# by city vote. +# +# This story is too entertaining to be false, so go with Howse over Shanks. +# +# From Paul Eggert (2001-03-06): +# Garland (1927) writes ``Cleveland and Detroit advanced their clocks +# one hour in 1914.'' This change is not in Shanks. We have no more +# info, so omit this for now. +# +# Most of Michigan observed DST from 1973 on, but was a bit late in 1975. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Detroit 1948 only - Apr lastSun 2:00 1:00 D +Rule Detroit 1948 only - Sep lastSun 2:00 0 S +Rule Detroit 1967 only - Jun 14 2:00 1:00 D +Rule Detroit 1967 only - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Detroit -5:32:11 - LMT 1905 + -6:00 - CST 1915 May 15 2:00 + -5:00 - EST 1942 + -5:00 US E%sT 1946 + -5:00 Detroit E%sT 1973 + -5:00 US E%sT 1975 + -5:00 - EST 1975 Apr 27 2:00 + -5:00 US E%sT +# +# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan, +# switched from EST to CST/CDT in 1973. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Menominee 1946 only - Apr lastSun 2:00 1:00 D +Rule Menominee 1946 only - Sep lastSun 2:00 0 S +Rule Menominee 1966 only - Apr lastSun 2:00 1:00 D +Rule Menominee 1966 only - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00 + -6:00 US C%sT 1946 + -6:00 Menominee C%sT 1969 Apr 27 2:00 + -5:00 - EST 1973 Apr 29 2:00 + -6:00 US C%sT + +# Navassa +# administered by the US Fish and Wildlife Service +# claimed by US under the provisions of the 1856 Guano Islands Act +# also claimed by Haiti +# occupied 1857/1900 by the Navassa Phosphate Co +# US lighthouse 1917/1996-09 +# currently uninhabited +# see Mark Fineman, ``An Isle Rich in Guano and Discord'', +# _Los Angeles Times_ (1998-11-10), A1, A10; it cites +# Jimmy Skaggs, _The Great Guano Rush_ (1994). + +################################################################################ + + +# From Paul Eggert (2006-03-22): +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1990, and IATA SSIM is the source for entries afterwards. +# +# Other sources occasionally used include: +# +# Edward W. Whitman, World Time Differences, +# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), +# which I found in the UCLA library. +# +# <a href="http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf"> +# William Willett, The Waste of Daylight, 19th edition +# </a> (1914-03) +# +# See the `europe' file for Greenland. + +# Canada + +# From Alain LaBont<e'> (1994-11-14): +# I post here the time zone abbreviations standardized in Canada +# for both English and French in the CAN/CSA-Z234.4-89 standard.... +# +# UTC Standard time Daylight savings time +# offset French English French English +# -2:30 - - HAT NDT +# -3 - - HAA ADT +# -3:30 HNT NST - - +# -4 HNA AST HAE EDT +# -5 HNE EST HAC CDT +# -6 HNC CST HAR MDT +# -7 HNR MST HAP PDT +# -8 HNP PST HAY YDT +# -9 HNY YST - - +# +# HN: Heure Normale ST: Standard Time +# HA: Heure Avanc<e'>e DT: Daylight saving Time +# +# A: de l'Atlantique Atlantic +# C: du Centre Central +# E: de l'Est Eastern +# M: Mountain +# N: Newfoundland +# P: du Pacifique Pacific +# R: des Rocheuses +# T: de Terre-Neuve +# Y: du Yukon Yukon +# +# From Paul Eggert (1994-11-22): +# Alas, this sort of thing must be handled by localization software. + +# Unless otherwise specified, the data for Canada are all from Shanks +# & Pottenger. + +# From Chris Walton (2006-04-01, 2006-04-25, 2006-06-26, 2007-01-31, +# 2007-03-01): +# The British Columbia government announced yesterday that it will +# adjust daylight savings next year to align with changes in the +# U.S. and the rest of Canada.... +# http://www2.news.gov.bc.ca/news_releases_2005-2009/2006AG0014-000330.htm +# ... +# Nova Scotia +# Daylight saving time will be extended by four weeks starting in 2007.... +# http://www.gov.ns.ca/just/regulations/rg2/2006/ma1206.pdf +# +# [For New Brunswick] the new legislation dictates that the time change is to +# be done at 02:00 instead of 00:01. +# http://www.gnb.ca/0062/acts/BBA-2006/Chap-19.pdf +# ... +# Manitoba has traditionally changed the clock every fall at 03:00. +# As of 2006, the transition is to take place one hour earlier at 02:00. +# http://web2.gov.mb.ca/laws/statutes/ccsm/o030e.php +# ... +# [Alberta, Ontario, Quebec] will follow US rules. +# http://www.qp.gov.ab.ca/documents/spring/CH03_06.CFM +# http://www.e-laws.gov.on.ca/DBLaws/Source/Regs/English/2006/R06111_e.htm +# http://www2.publicationsduquebec.gouv.qc.ca/dynamicSearch/telecharge.php?type=5&file=2006C39A.PDF +# ... +# P.E.I. will follow US rules.... +# http://www.assembly.pe.ca/bills/pdf_chapter/62/3/chapter-41.pdf +# ... +# Province of Newfoundland and Labrador.... +# http://www.hoa.gov.nl.ca/hoa/bills/Bill0634.htm +# ... +# Yukon +# http://www.gov.yk.ca/legislation/regs/oic2006_127.pdf +# ... +# N.W.T. will follow US rules. Whoever maintains the government web site +# does not seem to believe in bookmarks. To see the news release, click the +# following link and search for "Daylight Savings Time Change". Press the +# "Daylight Savings Time Change" link; it will fire off a popup using +# JavaScript. +# http://www.exec.gov.nt.ca/currentnews/currentPR.asp?mode=archive +# ... +# Nunavut +# An amendment to the Interpretation Act was registered on February 19/2007.... +# http://action.attavik.ca/home/justice-gn/attach/2007/gaz02part2.pdf + +# From Paul Eggert (2006-04-25): +# H. David Matthews and Mary Vincent's map +# <a href="http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp"> +# "It's about TIME", _Canadian Geographic_ (September-October 1998) +# </a> contains detailed boundaries for regions observing nonstandard +# time and daylight saving time arrangements in Canada circa 1998. +# +# INMS, the Institute for National Measurement Standards in Ottawa, has <a +# href="http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php"> +# information about standard and daylight saving time zones in Canada. +# </a> (updated periodically). +# Its unofficial information is often taken from Matthews and Vincent. + +# From Paul Eggert (2006-06-27): +# For now, assume all of DST-observing Canada will fall into line with the +# new US DST rules, + +# From Chris Walton (2011-12-01) +# In the first of Tammy Hardwick's articles +# <a href="http://www.ilovecreston.com/?p=articles&t=spec&ar=260"> +# http://www.ilovecreston.com/?p=articles&t=spec&ar=260 +# </a> +# she quotes the Friday November 1/1918 edition of the Creston Review. +# The quote includes these two statements: +# 'Sunday the CPR went back to the old system of time...' +# '... The daylight saving scheme was dropped all over Canada at the same time,' +# These statements refer to a transition from daylight time to standard time +# that occurred nationally on Sunday October 27/1918. This transition was +# also documented in the Saturday October 26/1918 edition of the Toronto Star. + +# In light of that evidence, we alter the date from the earlier believed +# Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day +# than Thursday) in all Canadian rulesets. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Canada 1918 only - Apr 14 2:00 1:00 D +Rule Canada 1918 only - Oct 27 2:00 0 S +Rule Canada 1942 only - Feb 9 2:00 1:00 W # War +Rule Canada 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule Canada 1945 only - Sep 30 2:00 0 S +Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D +Rule Canada 1974 2006 - Oct lastSun 2:00 0 S +Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D +Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D +Rule Canada 2007 max - Nov Sun>=1 2:00 0 S + + +# Newfoundland and Labrador + +# From Paul Eggert (2000-10-02): +# Matthews and Vincent (1998) write that Labrador should use NST/NDT, +# but the only part of Labrador that follows the rules is the +# southeast corner, including Port Hope Simpson and Mary's Harbour, +# but excluding, say, Black Tickle. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule StJohns 1917 only - Apr 8 2:00 1:00 D +Rule StJohns 1917 only - Sep 17 2:00 0 S +# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger. +Rule StJohns 1919 only - May 5 23:00 1:00 D +Rule StJohns 1919 only - Aug 12 23:00 0 S +# For 1931-1935 Whitman gives Apr same date; go with Shanks & Pottenger. +Rule StJohns 1920 1935 - May Sun>=1 23:00 1:00 D +Rule StJohns 1920 1935 - Oct lastSun 23:00 0 S +# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks & +# Pottenger. +Rule StJohns 1936 1941 - May Mon>=9 0:00 1:00 D +Rule StJohns 1936 1941 - Oct Mon>=2 0:00 0 S +# Whitman gives the following transitions: +# 1942 03-01/12-31, 1943 05-30/09-05, 1944 07-10/09-02, 1945 01-01/10-07 +# but go with Shanks & Pottenger and assume they used Canadian rules. +# For 1946-9 Whitman gives May 5,4,9,1 - Oct 1,5,3,2, and for 1950 he gives +# Apr 30 - Sep 24; go with Shanks & Pottenger. +Rule StJohns 1946 1950 - May Sun>=8 2:00 1:00 D +Rule StJohns 1946 1950 - Oct Sun>=2 2:00 0 S +Rule StJohns 1951 1986 - Apr lastSun 2:00 1:00 D +Rule StJohns 1951 1959 - Sep lastSun 2:00 0 S +Rule StJohns 1960 1986 - Oct lastSun 2:00 0 S +# From Paul Eggert (2000-10-02): +# INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches +# at 00:01 local time. For now, assume it started in 1987. + +# From Michael Pelley (2011-09-12): +# We received today, Monday, September 12, 2011, notification that the +# changes to the Newfoundland Standard Time Act have been proclaimed. +# The change in the Act stipulates that the change from Daylight Savings +# Time to Standard Time and from Standard Time to Daylight Savings Time +# now occurs at 2:00AM. +# ... +# <a href="http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm"> +# http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm +# </a> +# ... +# MICHAEL PELLEY | Manager of Enterprise Architecture - Solution Delivery +# Office of the Chief Information Officer +# Executive Council +# Government of Newfoundland & Labrador + +Rule StJohns 1987 only - Apr Sun>=1 0:01 1:00 D +Rule StJohns 1987 2006 - Oct lastSun 0:01 0 S +Rule StJohns 1988 only - Apr Sun>=1 0:01 2:00 DD +Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D +Rule StJohns 2007 2011 - Mar Sun>=8 0:01 1:00 D +Rule StJohns 2007 2010 - Nov Sun>=1 0:01 0 S +# +# St John's has an apostrophe, but Posix file names can't have apostrophes. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/St_Johns -3:30:52 - LMT 1884 + -3:30:52 StJohns N%sT 1918 + -3:30:52 Canada N%sT 1919 + -3:30:52 StJohns N%sT 1935 Mar 30 + -3:30 StJohns N%sT 1942 May 11 + -3:30 Canada N%sT 1946 + -3:30 StJohns N%sT 2011 Nov + -3:30 Canada N%sT + +# most of east Labrador + +# The name `Happy Valley-Goose Bay' is too long; use `Goose Bay'. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay + -3:30:52 - NST 1918 + -3:30:52 Canada N%sT 1919 + -3:30:52 - NST 1935 Mar 30 + -3:30 - NST 1936 + -3:30 StJohns N%sT 1942 May 11 + -3:30 Canada N%sT 1946 + -3:30 StJohns N%sT 1966 Mar 15 2:00 + -4:00 StJohns A%sT 2011 Nov + -4:00 Canada A%sT + + +# west Labrador, Nova Scotia, Prince Edward I + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that since 1970 most of this region has been like +# Halifax. Many locales did not observe peacetime DST until 1972; +# Glace Bay, NS is the largest that we know of. +# Shanks & Pottenger also write that Liverpool, NS was the only town +# in Canada to observe DST in 1971 but not 1970; for now we'll assume +# this is a typo. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Halifax 1916 only - Apr 1 0:00 1:00 D +Rule Halifax 1916 only - Oct 1 0:00 0 S +Rule Halifax 1920 only - May 9 0:00 1:00 D +Rule Halifax 1920 only - Aug 29 0:00 0 S +Rule Halifax 1921 only - May 6 0:00 1:00 D +Rule Halifax 1921 1922 - Sep 5 0:00 0 S +Rule Halifax 1922 only - Apr 30 0:00 1:00 D +Rule Halifax 1923 1925 - May Sun>=1 0:00 1:00 D +Rule Halifax 1923 only - Sep 4 0:00 0 S +Rule Halifax 1924 only - Sep 15 0:00 0 S +Rule Halifax 1925 only - Sep 28 0:00 0 S +Rule Halifax 1926 only - May 16 0:00 1:00 D +Rule Halifax 1926 only - Sep 13 0:00 0 S +Rule Halifax 1927 only - May 1 0:00 1:00 D +Rule Halifax 1927 only - Sep 26 0:00 0 S +Rule Halifax 1928 1931 - May Sun>=8 0:00 1:00 D +Rule Halifax 1928 only - Sep 9 0:00 0 S +Rule Halifax 1929 only - Sep 3 0:00 0 S +Rule Halifax 1930 only - Sep 15 0:00 0 S +Rule Halifax 1931 1932 - Sep Mon>=24 0:00 0 S +Rule Halifax 1932 only - May 1 0:00 1:00 D +Rule Halifax 1933 only - Apr 30 0:00 1:00 D +Rule Halifax 1933 only - Oct 2 0:00 0 S +Rule Halifax 1934 only - May 20 0:00 1:00 D +Rule Halifax 1934 only - Sep 16 0:00 0 S +Rule Halifax 1935 only - Jun 2 0:00 1:00 D +Rule Halifax 1935 only - Sep 30 0:00 0 S +Rule Halifax 1936 only - Jun 1 0:00 1:00 D +Rule Halifax 1936 only - Sep 14 0:00 0 S +Rule Halifax 1937 1938 - May Sun>=1 0:00 1:00 D +Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S +Rule Halifax 1939 only - May 28 0:00 1:00 D +Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D +Rule Halifax 1946 1949 - Apr lastSun 2:00 1:00 D +Rule Halifax 1946 1949 - Sep lastSun 2:00 0 S +Rule Halifax 1951 1954 - Apr lastSun 2:00 1:00 D +Rule Halifax 1951 1954 - Sep lastSun 2:00 0 S +Rule Halifax 1956 1959 - Apr lastSun 2:00 1:00 D +Rule Halifax 1956 1959 - Sep lastSun 2:00 0 S +Rule Halifax 1962 1973 - Apr lastSun 2:00 1:00 D +Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Halifax -4:14:24 - LMT 1902 Jun 15 + -4:00 Halifax A%sT 1918 + -4:00 Canada A%sT 1919 + -4:00 Halifax A%sT 1942 Feb 9 2:00s + -4:00 Canada A%sT 1946 + -4:00 Halifax A%sT 1974 + -4:00 Canada A%sT +Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15 + -4:00 Canada A%sT 1953 + -4:00 Halifax A%sT 1954 + -4:00 - AST 1972 + -4:00 Halifax A%sT 1974 + -4:00 Canada A%sT + +# New Brunswick + +# From Paul Eggert (2007-01-31): +# The Time Definition Act <http://www.gnb.ca/0062/PDF-acts/t-06.pdf> +# says they changed at 00:01 through 2006, and +# <http://www.canlii.org/nb/laws/sta/t-6/20030127/whole.html> makes it +# clear that this was the case since at least 1993. +# For now, assume it started in 1993. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Moncton 1933 1935 - Jun Sun>=8 1:00 1:00 D +Rule Moncton 1933 1935 - Sep Sun>=8 1:00 0 S +Rule Moncton 1936 1938 - Jun Sun>=1 1:00 1:00 D +Rule Moncton 1936 1938 - Sep Sun>=1 1:00 0 S +Rule Moncton 1939 only - May 27 1:00 1:00 D +Rule Moncton 1939 1941 - Sep Sat>=21 1:00 0 S +Rule Moncton 1940 only - May 19 1:00 1:00 D +Rule Moncton 1941 only - May 4 1:00 1:00 D +Rule Moncton 1946 1972 - Apr lastSun 2:00 1:00 D +Rule Moncton 1946 1956 - Sep lastSun 2:00 0 S +Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S +Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D +Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Moncton -4:19:08 - LMT 1883 Dec 9 + -5:00 - EST 1902 Jun 15 + -4:00 Canada A%sT 1933 + -4:00 Moncton A%sT 1942 + -4:00 Canada A%sT 1946 + -4:00 Moncton A%sT 1973 + -4:00 Canada A%sT 1993 + -4:00 Moncton A%sT 2007 + -4:00 Canada A%sT + +# Quebec + +# From Paul Eggert (2006-07-09): +# Shanks & Pottenger write that since 1970 most of Quebec has been +# like Montreal. + +# From Paul Eggert (2006-06-27): +# Matthews and Vincent (1998) also write that Quebec east of the -63 +# meridian is supposed to observe AST, but residents as far east as +# Natashquan use EST/EDT, and residents east of Natashquan use AST. +# In "Official time in Quebec" the Quebec department of justice writes in +# http://www.justice.gouv.qc.ca/english/publications/generale/temps-regl-1-a.htm +# that "The residents of the Municipality of the +# Cote-Nord-du-Golfe-Saint-Laurent and the municipalities of Saint-Augustin, +# Bonne-Esperance and Blanc-Sablon apply the Official Time Act as it is +# written and use Atlantic standard time all year round. The same applies to +# the residents of the Native facilities along the lower North Shore." +# <http://www.assnat.qc.ca/eng/37legislature2/Projets-loi/Publics/06-a002.htm> +# says this common practice was codified into law as of 2007. +# For lack of better info, guess this practice began around 1970, contra to +# Shanks & Pottenger who have this region observing AST/ADT. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Mont 1917 only - Mar 25 2:00 1:00 D +Rule Mont 1917 only - Apr 24 0:00 0 S +Rule Mont 1919 only - Mar 31 2:30 1:00 D +Rule Mont 1919 only - Oct 25 2:30 0 S +Rule Mont 1920 only - May 2 2:30 1:00 D +Rule Mont 1920 1922 - Oct Sun>=1 2:30 0 S +Rule Mont 1921 only - May 1 2:00 1:00 D +Rule Mont 1922 only - Apr 30 2:00 1:00 D +Rule Mont 1924 only - May 17 2:00 1:00 D +Rule Mont 1924 1926 - Sep lastSun 2:30 0 S +Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D +# The 1927-to-1937 rules can be expressed more simply as +# Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D +# Rule Mont 1927 1937 - Sep lastSat 24:00 0 S +# The rules below avoid use of 24:00 +# (which pre-1998 versions of zic cannot handle). +Rule Mont 1927 only - May 1 0:00 1:00 D +Rule Mont 1927 1932 - Sep lastSun 0:00 0 S +Rule Mont 1928 1931 - Apr lastSun 0:00 1:00 D +Rule Mont 1932 only - May 1 0:00 1:00 D +Rule Mont 1933 1940 - Apr lastSun 0:00 1:00 D +Rule Mont 1933 only - Oct 1 0:00 0 S +Rule Mont 1934 1939 - Sep lastSun 0:00 0 S +Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D +Rule Mont 1945 1948 - Sep lastSun 2:00 0 S +Rule Mont 1949 1950 - Oct lastSun 2:00 0 S +Rule Mont 1951 1956 - Sep lastSun 2:00 0 S +Rule Mont 1957 1973 - Oct lastSun 2:00 0 S + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Blanc-Sablon -3:48:28 - LMT 1884 + -4:00 Canada A%sT 1970 + -4:00 - AST +Zone America/Montreal -4:54:16 - LMT 1884 + -5:00 Mont E%sT 1918 + -5:00 Canada E%sT 1919 + -5:00 Mont E%sT 1942 Feb 9 2:00s + -5:00 Canada E%sT 1946 + -5:00 Mont E%sT 1974 + -5:00 Canada E%sT + + +# Ontario + +# From Paul Eggert (2006-07-09): +# Shanks & Pottenger write that since 1970 most of Ontario has been like +# Toronto. +# Thunder Bay skipped DST in 1973. +# Many smaller locales did not observe peacetime DST until 1974; +# Nipigon (EST) and Rainy River (CST) are the largest that we know of. +# Far west Ontario is like Winnipeg; far east Quebec is like Halifax. + +# From Mark Brader (2003-07-26): +# [According to the Toronto Star] Orillia, Ontario, adopted DST +# effective Saturday, 1912-06-22, 22:00; the article mentions that +# Port Arthur (now part of Thunder Bay, Ontario) as well as Moose Jaw +# have already done so. In Orillia DST was to run until Saturday, +# 1912-08-31 (no time mentioned), but it was met with considerable +# hostility from certain segments of the public, and was revoked after +# only two weeks -- I copied it as Saturday, 1912-07-07, 22:00, but +# presumably that should be -07-06. (1912-06-19, -07-12; also letters +# earlier in June). +# +# Kenora, Ontario, was to abandon DST on 1914-06-01 (-05-21). + +# From Paul Eggert (1997-10-17): +# Mark Brader writes that an article in the 1997-10-14 Toronto Star +# says that Atikokan, Ontario currently does not observe DST, +# but will vote on 11-10 whether to use EST/EDT. +# He also writes that the +# <a href="http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html"> +# Ontario Time Act (1990, Chapter T.9) +# </a> +# says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT. +# Officially Atikokan is therefore on CST/CDT, and most likely this report +# concerns a non-official time observed as a matter of local practice. +# +# From Paul Eggert (2000-10-02): +# Matthews and Vincent (1998) write that Atikokan, Pickle Lake, and +# New Osnaburgh observe CST all year, that Big Trout Lake observes +# CST/CDT, and that Upsala and Shebandowan observe EST/EDT, all in +# violation of the official Ontario rules. +# +# From Paul Eggert (2006-07-09): +# Chris Walton (2006-07-06) mentioned an article by Stephanie MacLellan in the +# 2005-07-21 Chronicle-Journal, which said: +# +# The clocks in Atikokan stay set on standard time year-round. +# This means they spend about half the time on central time and +# the other half on eastern time. +# +# For the most part, the system works, Mayor Dennis Brown said. +# +# "The majority of businesses in Atikokan deal more with Eastern +# Canada, but there are some that deal with Western Canada," he +# said. "I don't see any changes happening here." +# +# Walton also writes "Supposedly Pickle Lake and Mishkeegogamang +# [New Osnaburgh] follow the same practice." + +# From Garry McKinnon (2006-07-14) via Chris Walton: +# I chatted with a member of my board who has an outstanding memory +# and a long history in Atikokan (and in the telecom industry) and he +# can say for certain that Atikokan has been practicing the current +# time keeping since 1952, at least. + +# From Paul Eggert (2006-07-17): +# Shanks & Pottenger say that Atikokan has agreed with Rainy River +# ever since standard time was introduced, but the information from +# McKinnon sounds more authoritative. For now, assume that Atikokan +# switched to EST immediately after WWII era daylight saving time +# ended. This matches the old (less-populous) America/Coral_Harbour +# entry since our cutoff date of 1970, so we can move +# America/Coral_Harbour to the 'backward' file. + +# From Mark Brader (2010-03-06): +# +# Currently the database has: +# +# # Ontario +# +# # From Paul Eggert (2006-07-09): +# # Shanks & Pottenger write that since 1970 most of Ontario has been like +# # Toronto. +# # Thunder Bay skipped DST in 1973. +# # Many smaller locales did not observe peacetime DST until 1974; +# # Nipigon (EST) and Rainy River (CST) are the largest that we know of. +# +# In the (Toronto) Globe and Mail for Saturday, 1955-09-24, in the bottom +# right corner of page 1, it says that Toronto will return to standard +# time at 2 am Sunday morning (which agrees with the database), and that: +# +# The one-hour setback will go into effect throughout most of Ontario, +# except in areas like Windsor which remains on standard time all year. +# +# Windsor is, of course, a lot larger than Nipigon. +# +# I only came across this incidentally. I don't know if Windsor began +# observing DST when Detroit did, or in 1974, or on some other date. +# +# By the way, the article continues by noting that: +# +# Some cities in the United States have pushed the deadline back +# three weeks and will change over from daylight saving in October. + +# From Arthur David Olson (2010-07-17): +# +# "Standard Time and Time Zones in Canada" appeared in +# The Journal of The Royal Astronomical Society of Canada, +# volume 26, number 2 (February 1932) and, as of 2010-07-17, +# was available at +# <a href="http://adsabs.harvard.edu/full/1932JRASC..26...49S"> +# http://adsabs.harvard.edu/full/1932JRASC..26...49S +# </a> +# +# It includes the text below (starting on page 57): +# +# A list of the places in Canada using daylight saving time would +# require yearly revision. From information kindly furnished by +# the provincial governments and by the postmasters in many cities +# and towns, it is found that the following places used daylight sav- +# ing in 1930. The information for the province of Quebec is definite, +# for the other provinces only approximate: +# +# Province Daylight saving time used +# Prince Edward Island Not used. +# Nova Scotia In Halifax only. +# New Brunswick In St. John only. +# Quebec In the following places: +# Montreal Lachine +# Quebec Mont-Royal +# Levis Iberville +# St. Lambert Cap de la Madeleine +# Verdun Loretteville +# Westmount Richmond +# Outremont St. Jerome +# Longueuil Greenfield Park +# Arvida Waterloo +# Chambly-Canton Beaulieu +# Melbourne La Tuque +# St. Theophile Buckingham +# Ontario Used generally in the cities and towns along +# the southerly part of the province. Not +# used in the northwesterlhy part. +# Manitoba Not used. +# Saskatchewan In Regina only. +# Alberta Not used. +# British Columbia Not used. +# +# With some exceptions, the use of daylight saving may be said to be limited +# to those cities and towns lying between Quebec city and Windsor, Ont. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Toronto 1919 only - Mar 30 23:30 1:00 D +Rule Toronto 1919 only - Oct 26 0:00 0 S +Rule Toronto 1920 only - May 2 2:00 1:00 D +Rule Toronto 1920 only - Sep 26 0:00 0 S +Rule Toronto 1921 only - May 15 2:00 1:00 D +Rule Toronto 1921 only - Sep 15 2:00 0 S +Rule Toronto 1922 1923 - May Sun>=8 2:00 1:00 D +# Shanks & Pottenger say 1923-09-19; assume it's a typo and that "-16" +# was meant. +Rule Toronto 1922 1926 - Sep Sun>=15 2:00 0 S +Rule Toronto 1924 1927 - May Sun>=1 2:00 1:00 D +# The 1927-to-1939 rules can be expressed more simply as +# Rule Toronto 1927 1937 - Sep Sun>=25 2:00 0 S +# Rule Toronto 1928 1937 - Apr Sun>=25 2:00 1:00 D +# Rule Toronto 1938 1940 - Apr lastSun 2:00 1:00 D +# Rule Toronto 1938 1939 - Sep lastSun 2:00 0 S +# The rules below avoid use of Sun>=25 +# (which pre-2004 versions of zic cannot handle). +Rule Toronto 1927 1932 - Sep lastSun 2:00 0 S +Rule Toronto 1928 1931 - Apr lastSun 2:00 1:00 D +Rule Toronto 1932 only - May 1 2:00 1:00 D +Rule Toronto 1933 1940 - Apr lastSun 2:00 1:00 D +Rule Toronto 1933 only - Oct 1 2:00 0 S +Rule Toronto 1934 1939 - Sep lastSun 2:00 0 S +Rule Toronto 1945 1946 - Sep lastSun 2:00 0 S +Rule Toronto 1946 only - Apr lastSun 2:00 1:00 D +Rule Toronto 1947 1949 - Apr lastSun 0:00 1:00 D +Rule Toronto 1947 1948 - Sep lastSun 0:00 0 S +Rule Toronto 1949 only - Nov lastSun 0:00 0 S +Rule Toronto 1950 1973 - Apr lastSun 2:00 1:00 D +Rule Toronto 1950 only - Nov lastSun 2:00 0 S +Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S +# Shanks & Pottenger say Toronto ended DST a week early in 1971, +# namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that this +# is wrong, and that he had confirmed it by checking the 1971-10-30 +# Toronto Star, which said that DST was ending 1971-10-31 as usual. +Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S + +# From Paul Eggert (2003-07-27): +# Willett (1914-03) writes (p. 17) "In the Cities of Fort William, and +# Port Arthur, Ontario, the principle of the Bill has been in +# operation for the past three years, and in the City of Moose Jaw, +# Saskatchewan, for one year." + +# From David Bryan via Tory Tronrud, Director/Curator, +# Thunder Bay Museum (2003-11-12): +# There is some suggestion, however, that, by-law or not, daylight +# savings time was being practiced in Fort William and Port Arthur +# before 1909.... [I]n 1910, the line between the Eastern and Central +# Time Zones was permanently moved about two hundred miles west to +# include the Thunder Bay area.... When Canada adopted daylight +# savings time in 1916, Fort William and Port Arthur, having done so +# already, did not change their clocks.... During the Second World +# War,... [t]he cities agreed to implement DST during the summer +# months for the remainder of the war years. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Toronto -5:17:32 - LMT 1895 + -5:00 Canada E%sT 1919 + -5:00 Toronto E%sT 1942 Feb 9 2:00s + -5:00 Canada E%sT 1946 + -5:00 Toronto E%sT 1974 + -5:00 Canada E%sT +Zone America/Thunder_Bay -5:57:00 - LMT 1895 + -6:00 - CST 1910 + -5:00 - EST 1942 + -5:00 Canada E%sT 1970 + -5:00 Mont E%sT 1973 + -5:00 - EST 1974 + -5:00 Canada E%sT +Zone America/Nipigon -5:53:04 - LMT 1895 + -5:00 Canada E%sT 1940 Sep 29 + -5:00 1:00 EDT 1942 Feb 9 2:00s + -5:00 Canada E%sT +Zone America/Rainy_River -6:18:16 - LMT 1895 + -6:00 Canada C%sT 1940 Sep 29 + -6:00 1:00 CDT 1942 Feb 9 2:00s + -6:00 Canada C%sT +Zone America/Atikokan -6:06:28 - LMT 1895 + -6:00 Canada C%sT 1940 Sep 29 + -6:00 1:00 CDT 1942 Feb 9 2:00s + -6:00 Canada C%sT 1945 Sep 30 2:00 + -5:00 - EST + + +# Manitoba + +# From Rob Douglas (2006-04-06): +# the old Manitoba Time Act - as amended by Bill 2, assented to +# March 27, 1987 ... said ... +# "between two o'clock Central Standard Time in the morning of +# the first Sunday of April of each year and two o'clock Central +# Standard Time in the morning of the last Sunday of October next +# following, one hour in advance of Central Standard Time."... +# I believe that the English legislation [of the old time act] had = +# been assented to (March 22, 1967).... +# Also, as far as I can tell, there was no order-in-council varying +# the time of Daylight Saving Time for 2005 and so the provisions of +# the 1987 version would apply - the changeover was at 2:00 Central +# Standard Time (i.e. not until 3:00 Central Daylight Time). + +# From Paul Eggert (2006-04-10): +# Shanks & Pottenger say Manitoba switched at 02:00 (not 02:00s) +# starting 1966. Since 02:00s is clearly correct for 1967 on, assume +# it was also 02:00s in 1966. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Winn 1916 only - Apr 23 0:00 1:00 D +Rule Winn 1916 only - Sep 17 0:00 0 S +Rule Winn 1918 only - Apr 14 2:00 1:00 D +Rule Winn 1918 only - Oct 27 2:00 0 S +Rule Winn 1937 only - May 16 2:00 1:00 D +Rule Winn 1937 only - Sep 26 2:00 0 S +Rule Winn 1942 only - Feb 9 2:00 1:00 W # War +Rule Winn 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule Winn 1945 only - Sep lastSun 2:00 0 S +Rule Winn 1946 only - May 12 2:00 1:00 D +Rule Winn 1946 only - Oct 13 2:00 0 S +Rule Winn 1947 1949 - Apr lastSun 2:00 1:00 D +Rule Winn 1947 1949 - Sep lastSun 2:00 0 S +Rule Winn 1950 only - May 1 2:00 1:00 D +Rule Winn 1950 only - Sep 30 2:00 0 S +Rule Winn 1951 1960 - Apr lastSun 2:00 1:00 D +Rule Winn 1951 1958 - Sep lastSun 2:00 0 S +Rule Winn 1959 only - Oct lastSun 2:00 0 S +Rule Winn 1960 only - Sep lastSun 2:00 0 S +Rule Winn 1963 only - Apr lastSun 2:00 1:00 D +Rule Winn 1963 only - Sep 22 2:00 0 S +Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D +Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S +Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16 + -6:00 Winn C%sT 2006 + -6:00 Canada C%sT + + +# Saskatchewan + +# From Mark Brader (2003-07-26): +# The first actual adoption of DST in Canada was at the municipal +# level. As the [Toronto] Star put it (1912-06-07), "While people +# elsewhere have long been talking of legislation to save daylight, +# the city of Moose Jaw [Saskatchewan] has acted on its own hook." +# DST in Moose Jaw began on Saturday, 1912-06-01 (no time mentioned: +# presumably late evening, as below), and would run until "the end of +# the summer". The discrepancy between municipal time and railroad +# time was noted. + +# From Paul Eggert (2003-07-27): +# Willett (1914-03) notes that DST "has been in operation ... in the +# City of Moose Jaw, Saskatchewan, for one year." + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger say that since 1970 this region has mostly been as Regina. +# Some western towns (e.g. Swift Current) switched from MST/MDT to CST in 1972. +# Other western towns (e.g. Lloydminster) are like Edmonton. +# Matthews and Vincent (1998) write that Denare Beach and Creighton +# are like Winnipeg, in violation of Saskatchewan law. + +# From W. Jones (1992-11-06): +# The. . .below is based on information I got from our law library, the +# provincial archives, and the provincial Community Services department. +# A precise history would require digging through newspaper archives, and +# since you didn't say what you wanted, I didn't bother. +# +# Saskatchewan is split by a time zone meridian (105W) and over the years +# the boundary became pretty ragged as communities near it reevaluated +# their affiliations in one direction or the other. In 1965 a provincial +# referendum favoured legislating common time practices. +# +# On 15 April 1966 the Time Act (c. T-14, Revised Statutes of +# Saskatchewan 1978) was proclaimed, and established that the eastern +# part of Saskatchewan would use CST year round, that districts in +# northwest Saskatchewan would by default follow CST but could opt to +# follow Mountain Time rules (thus 1 hour difference in the winter and +# zero in the summer), and that districts in southwest Saskatchewan would +# by default follow MT but could opt to follow CST. +# +# It took a few years for the dust to settle (I know one story of a town +# on one time zone having its school in another, such that a mom had to +# serve her family lunch in two shifts), but presently it seems that only +# a few towns on the border with Alberta (e.g. Lloydminster) follow MT +# rules any more; all other districts appear to have used CST year round +# since sometime in the 1960s. + +# From Chris Walton (2006-06-26): +# The Saskatchewan time act which was last updated in 1996 is about 30 pages +# long and rather painful to read. +# http://www.qp.gov.sk.ca/documents/English/Statutes/Statutes/T14.pdf + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Regina 1918 only - Apr 14 2:00 1:00 D +Rule Regina 1918 only - Oct 27 2:00 0 S +Rule Regina 1930 1934 - May Sun>=1 0:00 1:00 D +Rule Regina 1930 1934 - Oct Sun>=1 0:00 0 S +Rule Regina 1937 1941 - Apr Sun>=8 0:00 1:00 D +Rule Regina 1937 only - Oct Sun>=8 0:00 0 S +Rule Regina 1938 only - Oct Sun>=1 0:00 0 S +Rule Regina 1939 1941 - Oct Sun>=8 0:00 0 S +Rule Regina 1942 only - Feb 9 2:00 1:00 W # War +Rule Regina 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule Regina 1945 only - Sep lastSun 2:00 0 S +Rule Regina 1946 only - Apr Sun>=8 2:00 1:00 D +Rule Regina 1946 only - Oct Sun>=8 2:00 0 S +Rule Regina 1947 1957 - Apr lastSun 2:00 1:00 D +Rule Regina 1947 1957 - Sep lastSun 2:00 0 S +Rule Regina 1959 only - Apr lastSun 2:00 1:00 D +Rule Regina 1959 only - Oct lastSun 2:00 0 S +# +Rule Swift 1957 only - Apr lastSun 2:00 1:00 D +Rule Swift 1957 only - Oct lastSun 2:00 0 S +Rule Swift 1959 1961 - Apr lastSun 2:00 1:00 D +Rule Swift 1959 only - Oct lastSun 2:00 0 S +Rule Swift 1960 1961 - Sep lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Regina -6:58:36 - LMT 1905 Sep + -7:00 Regina M%sT 1960 Apr lastSun 2:00 + -6:00 - CST +Zone America/Swift_Current -7:11:20 - LMT 1905 Sep + -7:00 Canada M%sT 1946 Apr lastSun 2:00 + -7:00 Regina M%sT 1950 + -7:00 Swift M%sT 1972 Apr lastSun 2:00 + -6:00 - CST + + +# Alberta + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Edm 1918 1919 - Apr Sun>=8 2:00 1:00 D +Rule Edm 1918 only - Oct 27 2:00 0 S +Rule Edm 1919 only - May 27 2:00 0 S +Rule Edm 1920 1923 - Apr lastSun 2:00 1:00 D +Rule Edm 1920 only - Oct lastSun 2:00 0 S +Rule Edm 1921 1923 - Sep lastSun 2:00 0 S +Rule Edm 1942 only - Feb 9 2:00 1:00 W # War +Rule Edm 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule Edm 1945 only - Sep lastSun 2:00 0 S +Rule Edm 1947 only - Apr lastSun 2:00 1:00 D +Rule Edm 1947 only - Sep lastSun 2:00 0 S +Rule Edm 1967 only - Apr lastSun 2:00 1:00 D +Rule Edm 1967 only - Oct lastSun 2:00 0 S +Rule Edm 1969 only - Apr lastSun 2:00 1:00 D +Rule Edm 1969 only - Oct lastSun 2:00 0 S +Rule Edm 1972 1986 - Apr lastSun 2:00 1:00 D +Rule Edm 1972 2006 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Edmonton -7:33:52 - LMT 1906 Sep + -7:00 Edm M%sT 1987 + -7:00 Canada M%sT + + +# British Columbia + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that since 1970 most of this region has +# been like Vancouver. +# Dawson Creek uses MST. Much of east BC is like Edmonton. +# Matthews and Vincent (1998) write that Creston is like Dawson Creek. + +# It seems though that (re: Creston) is not entirely correct: + +# From Chris Walton (2011-12-01): +# There are two areas within the Canadian province of British Columbia +# that do not currently observe daylight saving: +# a) The Creston Valley (includes the town of Creston and surrounding area) +# b) The eastern half of the Peace River Regional District +# (includes the cities of Dawson Creek and Fort St. John) + +# Earlier this year I stumbled across a detailed article about the time +# keeping history of Creston; it was written by Tammy Hardwick who is the +# manager of the Creston & District Museum. The article was written in May 2009. +# <a href="http://www.ilovecreston.com/?p=articles&t=spec&ar=260"> +# http://www.ilovecreston.com/?p=articles&t=spec&ar=260 +# </a> +# According to the article, Creston has not changed its clocks since June 1918. +# i.e. Creston has been stuck on UTC-7 for 93 years. +# Dawson Creek, on the other hand, changed its clocks as recently as April 1972. + +# Unfortunately the exact date for the time change in June 1918 remains +# unknown and will be difficult to ascertain. I e-mailed Tammy a few months +# ago to ask if Sunday June 2 was a reasonable guess. She said it was just +# as plausible as any other date (in June). She also said that after writing the +# article she had discovered another time change in 1916; this is the subject +# of another article which she wrote in October 2010. +# <a href="http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56"> +# http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56 +# </a> + +# Here is a summary of the three clock change events in Creston's history: +# 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7) +# Exact date unknown +# 2. Oct 1916: switch to Pacific Standard Time (GMT-8) +# Exact date in October unknown; Sunday October 1 is a reasonable guess. +# 3. June 1918: switch to Pacific Daylight Time (GMT-7) +# Exact date in June unknown; Sunday June 2 is a reasonable guess. +# note#1: +# On Oct 27/1918 when daylight saving ended in the rest of Canada, +# Creston did not change its clocks. +# note#2: +# During WWII when the Federal Government legislated a mandatory clock change, +# Creston did not oblige. +# note#3: +# There is no guarantee that Creston will remain on Mountain Standard Time +# (UTC-7) forever. +# The subject was debated at least once this year by the town Council. +# <a href="http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html"> +# http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html +# </a> + +# During a period WWII, summer time (Daylight saying) was mandatory in Canada. +# In Creston, that was handled by shifting the area to PST (-8:00) then applying +# summer time to cause the offset to be -7:00, the same as it had been before +# the change. It can be argued that the timezone abbreviation during this +# period should be PDT rather than MST, but that doesn't seem important enough +# (to anyone) to further complicate the rules. + +# The transition dates (and times) are guesses. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Vanc 1918 only - Apr 14 2:00 1:00 D +Rule Vanc 1918 only - Oct 27 2:00 0 S +Rule Vanc 1942 only - Feb 9 2:00 1:00 W # War +Rule Vanc 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule Vanc 1945 only - Sep 30 2:00 0 S +Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D +Rule Vanc 1946 only - Oct 13 2:00 0 S +Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S +Rule Vanc 1962 2006 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Vancouver -8:12:28 - LMT 1884 + -8:00 Vanc P%sT 1987 + -8:00 Canada P%sT +Zone America/Dawson_Creek -8:00:56 - LMT 1884 + -8:00 Canada P%sT 1947 + -8:00 Vanc P%sT 1972 Aug 30 2:00 + -7:00 - MST +Zone America/Creston -7:46:04 - LMT 1884 + -7:00 - MST 1916 Oct 1 + -8:00 - PST 1918 Jun 2 + -7:00 - MST + +# Northwest Territories, Nunavut, Yukon + +# From Paul Eggert (2006-03-22): +# Dawson switched to PST in 1973. Inuvik switched to MST in 1979. +# Mathew Englander (1996-10-07) gives the following refs: +# * 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68, +# c. 7 defines Yukon standard time as UTC-9. This is still valid; +# see Interpretation Act, R.S.C. 1985, c. I-21, s. 35(1). +# * C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00. +# * O.I.C. 1980/02 established DST. +# * O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00. +# Shanks & Pottenger say Yukon's 1973-10-28 switch was at 2:00; go +# with Englander. +# From Chris Walton (2006-06-26): +# Here is a link to the old daylight saving portion of the interpretation +# act which was last updated in 1987: +# http://www.gov.yk.ca/legislation/regs/oic1987_056.pdf + +# From Rives McDow (1999-09-04): +# Nunavut ... moved ... to incorporate the whole territory into one time zone. +# <a href="http://www.nunatsiaq.com/nunavut/nvt90903_13.html"> +# Nunavut moves to single time zone Oct. 31 +# </a> +# +# From Antoine Leca (1999-09-06): +# We then need to create a new timezone for the Kitikmeot region of Nunavut +# to differentiate it from the Yellowknife region. + +# From Paul Eggert (1999-09-20): +# <a href="http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html"> +# Basic Facts: The New Territory +# </a> (1999) reports that Pangnirtung operates on eastern time, +# and that Coral Harbour does not observe DST. We don't know when +# Pangnirtung switched to eastern time; we'll guess 1995. + +# From Rives McDow (1999-11-08): +# On October 31, when the rest of Nunavut went to Central time, +# Pangnirtung wobbled. Here is the result of their wobble: +# +# The following businesses and organizations in Pangnirtung use Central Time: +# +# First Air, Power Corp, Nunavut Construction, Health Center, RCMP, +# Eastern Arctic National Parks, A & D Specialist +# +# The following businesses and organizations in Pangnirtung use Eastern Time: +# +# Hamlet office, All other businesses, Both schools, Airport operator +# +# This has made for an interesting situation there, which warranted the news. +# No one there that I spoke with seems concerned, or has plans to +# change the local methods of keeping time, as it evidently does not +# really interfere with any activities or make things difficult locally. +# They plan to celebrate New Year's turn-over twice, one hour apart, +# so it appears that the situation will last at least that long. +# The Nunavut Intergovernmental Affairs hopes that they will "come to +# their senses", but the locals evidently don't see any problem with +# the current state of affairs. + +# From Michaela Rodrigue, writing in the +# <a href="http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html"> +# Nunatsiaq News (1999-11-19)</a>: +# Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones, +# central - or Nunavut time - for government offices, and eastern time +# for municipal offices and schools.... Igloolik [was similar but then] +# made the switch to central time on Saturday, Nov. 6. + +# From Paul Eggert (2000-10-02): +# Matthews and Vincent (1998) say the following, but we lack histories +# for these potential new Zones. +# +# The Canadian Forces station at Alert uses Eastern Time while the +# handful of residents at the Eureka weather station [in the Central +# zone] skip daylight savings. Baffin Island, which is crossed by the +# Central, Eastern and Atlantic Time zones only uses Eastern Time. +# Gjoa Haven, Taloyoak and Pelly Bay all use Mountain instead of +# Central Time and Southampton Island [in the Central zone] is not +# required to use daylight savings. + +# From +# <a href="http://www.nunatsiaq.com/archives/nunavut001130/nvt21110_02.html"> +# Nunavut now has two time zones +# </a> (2000-11-10): +# The Nunavut government would allow its employees in Kugluktuk and +# Cambridge Bay to operate on central time year-round, putting them +# one hour behind the rest of Nunavut for six months during the winter. +# At the end of October the two communities had rebelled against +# Nunavut's unified time zone, refusing to shift to eastern time with +# the rest of the territory for the winter. Cambridge Bay remained on +# central time, while Kugluktuk, even farther west, reverted to +# mountain time, which they had used before the advent of Nunavut's +# unified time zone in 1999. +# +# From Rives McDow (2001-01-20), quoting the Nunavut government: +# The preceding decision came into effect at midnight, Saturday Nov 4, 2000. + +# From Paul Eggert (2000-12-04): +# Let's just keep track of the official times for now. + +# From Rives McDow (2001-03-07): +# The premier of Nunavut has issued a ministerial statement advising +# that effective 2001-04-01, the territory of Nunavut will revert +# back to three time zones (mountain, central, and eastern). Of the +# cities in Nunavut, Coral Harbor is the only one that I know of that +# has said it will not observe dst, staying on EST year round. I'm +# checking for more info, and will get back to you if I come up with +# more. +# [Also see <http://www.nunatsiaq.com/nunavut/nvt10309_06.html> (2001-03-09).] + +# From Gwillim Law (2005-05-21): +# According to maps at +# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SWE.jpg +# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SSE.jpg +# (both dated 2003), and +# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp +# (from a 1998 Canadian Geographic article), the de facto and de jure time +# for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year +# round. Using Google, it's easy to find other websites that confirm this. +# I wasn't able to find how far back this time regimen goes, but since it +# predates the creation of Nunavut, it probably goes back many years.... +# The Inuktitut name of Coral Harbour is Sallit, but it's rarely used. +# +# From Paul Eggert (2005-07-26): +# For lack of better information, assume that Southampton Island observed +# daylight saving only during wartime. + +# From Chris Walton (2007-03-01): +# ... the community of Resolute (located on Cornwallis Island in +# Nunavut) moved from Central Time to Eastern Time last November. +# Basically the community did not change its clocks at the end of +# daylight saving.... +# http://www.nnsl.com/frames/newspapers/2006-11/nov13_06none.html + +# From Chris Walton (2011-03-21): +# Back in 2007 I initiated the creation of a new "zone file" for Resolute +# Bay. Resolute Bay is a small community located about 900km north of +# the Arctic Circle. The zone file was required because Resolute Bay had +# decided to use UTC-5 instead of UTC-6 for the winter of 2006-2007. +# +# According to new information which I received last week, Resolute Bay +# went back to using UTC-6 in the winter of 2007-2008... +# +# On March 11/2007 most of Canada went onto daylight saving. On March +# 14/2007 I phoned the Resolute Bay hamlet office to do a "time check." I +# talked to somebody that was both knowledgeable and helpful. I was able +# to confirm that Resolute Bay was still operating on UTC-5. It was +# explained to me that Resolute Bay had been on the Eastern Time zone +# (EST) in the winter, and was now back on the Central Time zone (CDT). +# i.e. the time zone had changed twice in the last year but the clocks +# had not moved. The residents had to know which time zone they were in +# so they could follow the correct TV schedule... +# +# On Nov 02/2008 most of Canada went onto standard time. On Nov 03/2008 I +# phoned the Resolute Bay hamlet office...[D]ue to the challenging nature +# of the phone call, I decided to seek out an alternate source of +# information. I found an e-mail address for somebody by the name of +# Stephanie Adams whose job was listed as "Inns North Support Officer for +# Arctic Co-operatives." I was under the impression that Stephanie lived +# and worked in Resolute Bay... +# +# On March 14/2011 I phoned the hamlet office again. I was told that +# Resolute Bay had been using Central Standard Time over the winter of +# 2010-2011 and that the clocks had therefore been moved one hour ahead +# on March 13/2011. The person I talked to was aware that Resolute Bay +# had previously experimented with Eastern Standard Time but he could not +# tell me when the practice had stopped. +# +# On March 17/2011 I searched the Web to find an e-mail address of +# somebody that might be able to tell me exactly when Resolute Bay went +# off Eastern Standard Time. I stumbled on the name "Aziz Kheraj." Aziz +# used to be the mayor of Resolute Bay and he apparently owns half the +# businesses including "South Camp Inn." This website has some info on +# Aziz: +# <a href="http://www.uphere.ca/node/493"> +# http://www.uphere.ca/node/493 +# </a> +# +# I sent Aziz an e-mail asking when Resolute Bay had stopped using +# Eastern Standard Time. +# +# Aziz responded quickly with this: "hi, The time was not changed for the +# 1 year only, the following year, the community went back to the old way +# of "spring ahead-fall behind" currently we are zulu plus 5 hrs and in +# the winter Zulu plus 6 hrs" +# +# This of course conflicted with everything I had ascertained in November 2008. +# +# I sent Aziz a copy of my 2008 e-mail exchange with Stephanie. Aziz +# responded with this: "Hi, Stephanie lives in Winnipeg. I live here, You +# may want to check with the weather office in Resolute Bay or do a +# search on the weather through Env. Canada. web site" +# +# If I had realized the Stephanie did not live in Resolute Bay I would +# never have contacted her. I now believe that all the information I +# obtained in November 2008 should be ignored... +# I apologize for reporting incorrect information in 2008. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NT_YK 1918 only - Apr 14 2:00 1:00 D +Rule NT_YK 1918 only - Oct 27 2:00 0 S +Rule NT_YK 1919 only - May 25 2:00 1:00 D +Rule NT_YK 1919 only - Nov 1 0:00 0 S +Rule NT_YK 1942 only - Feb 9 2:00 1:00 W # War +Rule NT_YK 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule NT_YK 1945 only - Sep 30 2:00 0 S +Rule NT_YK 1965 only - Apr lastSun 0:00 2:00 DD +Rule NT_YK 1965 only - Oct lastSun 2:00 0 S +Rule NT_YK 1980 1986 - Apr lastSun 2:00 1:00 D +Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S +Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# aka Panniqtuuq +Zone America/Pangnirtung 0 - zzz 1921 # trading post est. + -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00 + -5:00 Canada E%sT 1999 Oct 31 2:00 + -6:00 Canada C%sT 2000 Oct 29 2:00 + -5:00 Canada E%sT +# formerly Frobisher Bay +Zone America/Iqaluit 0 - zzz 1942 Aug # Frobisher Bay est. + -5:00 NT_YK E%sT 1999 Oct 31 2:00 + -6:00 Canada C%sT 2000 Oct 29 2:00 + -5:00 Canada E%sT +# aka Qausuittuq +Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded + -6:00 NT_YK C%sT 2000 Oct 29 2:00 + -5:00 - EST 2001 Apr 1 3:00 + -6:00 Canada C%sT 2006 Oct 29 2:00 + -5:00 - EST 2007 Mar 11 3:00 + -6:00 Canada C%sT +# aka Kangiqiniq +Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded + -6:00 NT_YK C%sT 2000 Oct 29 2:00 + -5:00 - EST 2001 Apr 1 3:00 + -6:00 Canada C%sT +# aka Iqaluktuuttiaq +Zone America/Cambridge_Bay 0 - zzz 1920 # trading post est.? + -7:00 NT_YK M%sT 1999 Oct 31 2:00 + -6:00 Canada C%sT 2000 Oct 29 2:00 + -5:00 - EST 2000 Nov 5 0:00 + -6:00 - CST 2001 Apr 1 3:00 + -7:00 Canada M%sT +Zone America/Yellowknife 0 - zzz 1935 # Yellowknife founded? + -7:00 NT_YK M%sT 1980 + -7:00 Canada M%sT +Zone America/Inuvik 0 - zzz 1953 # Inuvik founded + -8:00 NT_YK P%sT 1979 Apr lastSun 2:00 + -7:00 NT_YK M%sT 1980 + -7:00 Canada M%sT +Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20 + -9:00 NT_YK Y%sT 1966 Jul 1 2:00 + -8:00 NT_YK P%sT 1980 + -8:00 Canada P%sT +Zone America/Dawson -9:17:40 - LMT 1900 Aug 20 + -9:00 NT_YK Y%sT 1973 Oct 28 0:00 + -8:00 NT_YK P%sT 1980 + -8:00 Canada P%sT + + +############################################################################### + +# Mexico + +# From Paul Eggert (2001-03-05): +# The Investigation and Analysis Service of the +# Mexican Library of Congress (MLoC) has published a +# <a href="http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/"> +# history of Mexican local time (in Spanish) +# </a>. +# +# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC. +# (In all cases we go with the MLoC.) +# S&P report that Baja was at -8:00 in 1922/1923. +# S&P say the 1930 transition in Baja was 1930-11-16. +# S&P report no DST during summer 1931. +# S&P report a transition at 1932-03-30 23:00, not 1932-04-01. + +# From Gwillim Law (2001-02-20): +# There are some other discrepancies between the Decrees page and the +# tz database. I think they can best be explained by supposing that +# the researchers who prepared the Decrees page failed to find some of +# the relevant documents. + +# From Alan Perry (1996-02-15): +# A guy from our Mexico subsidiary finally found the Presidential Decree +# outlining the timezone changes in Mexico. +# +# ------------- Begin Forwarded Message ------------- +# +# I finally got my hands on the Official Presidential Decree that sets up the +# rules for the DST changes. The rules are: +# +# 1. The country is divided in 3 timezones: +# - Baja California Norte (the Mexico/BajaNorte TZ) +# - Baja California Sur, Nayarit, Sinaloa and Sonora (the Mexico/BajaSur TZ) +# - The rest of the country (the Mexico/General TZ) +# +# 2. From the first Sunday in April at 2:00 AM to the last Sunday in October +# at 2:00 AM, the times in each zone are as follows: +# BajaNorte: GMT+7 +# BajaSur: GMT+6 +# General: GMT+5 +# +# 3. The rest of the year, the times are as follows: +# BajaNorte: GMT+8 +# BajaSur: GMT+7 +# General: GMT+6 +# +# The Decree was published in Mexico's Official Newspaper on January 4th. +# +# -------------- End Forwarded Message -------------- +# From Paul Eggert (1996-06-12): +# For an English translation of the decree, see +# <a href="http://mexico-travel.com/extra/timezone_eng.html"> +# ``Diario Oficial: Time Zone Changeover'' (1996-01-04). +# </a> + +# From Rives McDow (1998-10-08): +# The State of Quintana Roo has reverted back to central STD and DST times +# (i.e. UTC -0600 and -0500 as of 1998-08-02). + +# From Rives McDow (2000-01-10): +# Effective April 4, 1999 at 2:00 AM local time, Sonora changed to the time +# zone 5 hours from the International Date Line, and will not observe daylight +# savings time so as to stay on the same time zone as the southern part of +# Arizona year round. + +# From Jesper Norgaard, translating +# <http://www.reforma.com/nacional/articulo/064327/> (2001-01-17): +# In Oaxaca, the 55.000 teachers from the Section 22 of the National +# Syndicate of Education Workers, refuse to apply daylight saving each +# year, so that the more than 10,000 schools work at normal hour the +# whole year. + +# From Gwillim Law (2001-01-19): +# <http://www.reforma.com/negocios_y_dinero/articulo/064481/> ... says +# (translated):... +# January 17, 2000 - The Energy Secretary, Ernesto Martens, announced +# that Summer Time will be reduced from seven to five months, starting +# this year.... +# <http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001> +# [translated], says "summer time will ... take effect on the first Sunday +# in May, and end on the last Sunday of September. + +# From Arthur David Olson (2001-01-25): +# The 2001-01-24 traditional Washington Post contained the page one +# story "Timely Issue Divides Mexicans."... +# http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html +# ... Mexico City Mayor Lopez Obrador "...is threatening to keep +# Mexico City and its 20 million residents on a different time than +# the rest of the country..." In particular, Lopez Obrador would abolish +# observation of Daylight Saving Time. + +# <a href="http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre"> +# Official statute published by the Energy Department +# </a> (2001-02-01) shows Baja and Chihauhua as still using US DST rules, +# and Sonora with no DST. This was reported by Jesper Norgaard (2001-02-03). + +# From Paul Eggert (2001-03-03): +# +# <a href="http://www.latimes.com/news/nation/20010303/t000018766.html"> +# James F. Smith writes in today's LA Times +# </a> +# * Sonora will continue to observe standard time. +# * Last week Mexico City's mayor Andres Manuel Lopez Obrador decreed that +# the Federal District will not adopt DST. +# * 4 of 16 district leaders announced they'll ignore the decree. +# * The decree does not affect federal-controlled facilities including +# the airport, banks, hospitals, and schools. +# +# For now we'll assume that the Federal District will bow to federal rules. + +# From Jesper Norgaard (2001-04-01): +# I found some references to the Mexican application of daylight +# saving, which modifies what I had already sent you, stating earlier +# that a number of northern Mexican states would go on daylight +# saving. The modification reverts this to only cover Baja California +# (Norte), while all other states (except Sonora, who has no daylight +# saving all year) will follow the original decree of president +# Vicente Fox, starting daylight saving May 6, 2001 and ending +# September 30, 2001. +# References: "Diario de Monterrey" <www.diariodemonterrey.com/index.asp> +# Palabra <http://palabra.infosel.com/010331/primera/ppri3101.pdf> (2001-03-31) + +# From Reuters (2001-09-04): +# Mexico's Supreme Court on Tuesday declared that daylight savings was +# unconstitutional in Mexico City, creating the possibility the +# capital will be in a different time zone from the rest of the nation +# next year.... The Supreme Court's ruling takes effect at 2:00 +# a.m. (0800 GMT) on Sept. 30, when Mexico is scheduled to revert to +# standard time. "This is so residents of the Federal District are not +# subject to unexpected time changes," a statement from the court said. + +# From Jesper Norgaard Welen (2002-03-12): +# ... consulting my local grocery store(!) and my coworkers, they all insisted +# that a new decision had been made to reinstate US style DST in Mexico.... +# http://www.conae.gob.mx/ahorro/horaver2001_m1_2002.html (2002-02-20) +# confirms this. Sonora as usual is the only state where DST is not applied. + +# From Steffen Thorsen (2009-12-28): +# +# Steffen Thorsen wrote: +# > Mexico's House of Representatives has approved a proposal for northern +# > Mexico's border cities to share the same daylight saving schedule as +# > the United States. +# Now this has passed both the Congress and the Senate, so starting from +# 2010, some border regions will be the same: +# <a href="http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/"> +# http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/ +# </a> +# <a href="http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939"> +# http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939 +# </a> +# (Spanish) +# +# Could not find the new law text, but the proposed law text changes are here: +# <a href="http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf"> +# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf +# </a> +# (Gaceta Parlamentaria) +# +# There is also a list of the votes here: +# <a href="http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html"> +# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html +# </a> +# +# Our page: +# <a href="http://www.timeanddate.com/news/time/north-mexico-dst-change.html"> +# http://www.timeanddate.com/news/time/north-mexico-dst-change.html +# </a> + +# From Arthur David Olson (2010-01-20): +# The page +# <a href="http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010"> +# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010 +# </a> +# includes this text: +# En los municipios fronterizos de Tijuana y Mexicali en Baja California; +# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila; +# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en +# Tamaulipas, la aplicación de este horario estacional surtirá efecto +# desde las dos horas del segundo domingo de marzo y concluirá a las dos +# horas del primer domingo de noviembre. +# En los municipios fronterizos que se encuentren ubicados en la franja +# fronteriza norte en el territorio comprendido entre la línea +# internacional y la línea paralela ubicada a una distancia de veinte +# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el +# interior del país, la aplicación de este horario estacional surtirá +# efecto desde las dos horas del segundo domingo de marzo y concluirá a +# las dos horas del primer domingo de noviembre. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Mexico 1939 only - Feb 5 0:00 1:00 D +Rule Mexico 1939 only - Jun 25 0:00 0 S +Rule Mexico 1940 only - Dec 9 0:00 1:00 D +Rule Mexico 1941 only - Apr 1 0:00 0 S +Rule Mexico 1943 only - Dec 16 0:00 1:00 W # War +Rule Mexico 1944 only - May 1 0:00 0 S +Rule Mexico 1950 only - Feb 12 0:00 1:00 D +Rule Mexico 1950 only - Jul 30 0:00 0 S +Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D +Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S +Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D +Rule Mexico 2001 only - Sep lastSun 2:00 0 S +Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D +Rule Mexico 2002 max - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Quintana Roo +Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56 + -6:00 - CST 1981 Dec 23 + -5:00 Mexico E%sT 1998 Aug 2 2:00 + -6:00 Mexico C%sT +# Campeche, Yucatan +Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32 + -6:00 - CST 1981 Dec 23 + -5:00 - EST 1982 Dec 2 + -6:00 Mexico C%sT +# Coahuila, Durango, Nuevo Leon, Tamaulipas (near US border) +Zone America/Matamoros -6:40:00 - LMT 1921 Dec 31 23:20:00 + -6:00 - CST 1988 + -6:00 US C%sT 1989 + -6:00 Mexico C%sT 2010 + -6:00 US C%sT +# Coahuila, Durango, Nuevo Leon, Tamaulipas (away from US border) +Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44 + -6:00 - CST 1988 + -6:00 US C%sT 1989 + -6:00 Mexico C%sT +# Central Mexico +Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 - MST 1931 May 1 23:00 + -6:00 - CST 1931 Oct + -7:00 - MST 1932 Apr 1 + -6:00 Mexico C%sT 2001 Sep 30 02:00 + -6:00 - CST 2002 Feb 20 + -6:00 Mexico C%sT +# Chihuahua (near US border) +Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 - MST 1931 May 1 23:00 + -6:00 - CST 1931 Oct + -7:00 - MST 1932 Apr 1 + -6:00 - CST 1996 + -6:00 Mexico C%sT 1998 + -6:00 - CST 1998 Apr Sun>=1 3:00 + -7:00 Mexico M%sT 2010 + -7:00 US M%sT +# Chihuahua (away from US border) +Zone America/Chihuahua -7:04:20 - LMT 1921 Dec 31 23:55:40 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 - MST 1931 May 1 23:00 + -6:00 - CST 1931 Oct + -7:00 - MST 1932 Apr 1 + -6:00 - CST 1996 + -6:00 Mexico C%sT 1998 + -6:00 - CST 1998 Apr Sun>=1 3:00 + -7:00 Mexico M%sT +# Sonora +Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 - MST 1931 May 1 23:00 + -6:00 - CST 1931 Oct + -7:00 - MST 1932 Apr 1 + -6:00 - CST 1942 Apr 24 + -7:00 - MST 1949 Jan 14 + -8:00 - PST 1970 + -7:00 Mexico M%sT 1999 + -7:00 - MST + +# From Alexander Krivenyshev (2010-04-21): +# According to news, Bahía de Banderas (Mexican state of Nayarit) +# changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to +# share the same time zone as nearby city Puerto Vallarta, Jalisco). +# +# (Spanish) +# Bahía de Banderas homologa su horario al del centro del +# país, a partir de este domingo +# <a href="http://www.nayarit.gob.mx/notes.asp?id=20748"> +# http://www.nayarit.gob.mx/notes.asp?id=20748 +# </a> +# +# Bahía de Banderas homologa su horario con el del Centro del +# País +# <a href="http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50"> +# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50" +# </a> +# +# (English) +# Puerto Vallarta and Bahía de Banderas: One Time Zone +# <a href="http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml"> +# http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml +# </a> +# +# or +# <a href="http://www.worldtimezone.com/dst_news/dst_news_mexico08.html"> +# http://www.worldtimezone.com/dst_news/dst_news_mexico08.html +# </a> +# +# "Mexico's Senate approved the amendments to the Mexican Schedule System that +# will allow Bahía de Banderas and Puerto Vallarta to share the same time +# zone ..." +# Baja California Sur, Nayarit, Sinaloa + +# From Arthur David Olson (2010-05-01): +# Use "Bahia_Banderas" to keep the name to fourteen characters. + +Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 - MST 1931 May 1 23:00 + -6:00 - CST 1931 Oct + -7:00 - MST 1932 Apr 1 + -6:00 - CST 1942 Apr 24 + -7:00 - MST 1949 Jan 14 + -8:00 - PST 1970 + -7:00 Mexico M%sT + +Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 - MST 1931 May 1 23:00 + -6:00 - CST 1931 Oct + -7:00 - MST 1932 Apr 1 + -6:00 - CST 1942 Apr 24 + -7:00 - MST 1949 Jan 14 + -8:00 - PST 1970 + -7:00 Mexico M%sT 2010 Apr 4 2:00 + -6:00 Mexico C%sT + +# Baja California (near US border) +Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56 + -7:00 - MST 1924 + -8:00 - PST 1927 Jun 10 23:00 + -7:00 - MST 1930 Nov 15 + -8:00 - PST 1931 Apr 1 + -8:00 1:00 PDT 1931 Sep 30 + -8:00 - PST 1942 Apr 24 + -8:00 1:00 PWT 1945 Aug 14 23:00u + -8:00 1:00 PPT 1945 Nov 12 # Peace + -8:00 - PST 1948 Apr 5 + -8:00 1:00 PDT 1949 Jan 14 + -8:00 - PST 1954 + -8:00 CA P%sT 1961 + -8:00 - PST 1976 + -8:00 US P%sT 1996 + -8:00 Mexico P%sT 2001 + -8:00 US P%sT 2002 Feb 20 + -8:00 Mexico P%sT 2010 + -8:00 US P%sT +# Baja California (away from US border) +Zone America/Santa_Isabel -7:39:28 - LMT 1922 Jan 1 0:20:32 + -7:00 - MST 1924 + -8:00 - PST 1927 Jun 10 23:00 + -7:00 - MST 1930 Nov 15 + -8:00 - PST 1931 Apr 1 + -8:00 1:00 PDT 1931 Sep 30 + -8:00 - PST 1942 Apr 24 + -8:00 1:00 PWT 1945 Aug 14 23:00u + -8:00 1:00 PPT 1945 Nov 12 # Peace + -8:00 - PST 1948 Apr 5 + -8:00 1:00 PDT 1949 Jan 14 + -8:00 - PST 1954 + -8:00 CA P%sT 1961 + -8:00 - PST 1976 + -8:00 US P%sT 1996 + -8:00 Mexico P%sT 2001 + -8:00 US P%sT 2002 Feb 20 + -8:00 Mexico P%sT +# From Paul Eggert (2006-03-22): +# Formerly there was an America/Ensenada zone, which differed from +# America/Tijuana only in that it did not observe DST from 1976 +# through 1995. This was as per Shanks (1999). But Shanks & Pottenger say +# Ensenada did not observe DST from 1948 through 1975. Guy Harris reports +# that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and +# Tijuana observe DST," which agrees with Shanks & Pottenger but implies that +# DST-observance was a town-by-town matter back then. This concerns +# data after 1970 so most likely there should be at least one Zone +# other than America/Tijuana for Baja, but it's not clear yet what its +# name or contents should be. +# +# Revillagigedo Is +# no information + +############################################################################### + +# Anguilla +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Anguilla -4:12:16 - LMT 1912 Mar 2 + -4:00 - AST + +# Antigua and Barbuda +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Antigua -4:07:12 - LMT 1912 Mar 2 + -5:00 - EST 1951 + -4:00 - AST + +# Bahamas +# +# From Sue Williams (2006-12-07): +# The Bahamas announced about a month ago that they plan to change their DST +# rules to sync with the U.S. starting in 2007.... +# http://www.jonesbahamas.com/?c=45&a=10412 + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Bahamas 1964 1975 - Oct lastSun 2:00 0 S +Rule Bahamas 1964 1975 - Apr lastSun 2:00 1:00 D +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Nassau -5:09:24 - LMT 1912 Mar 2 + -5:00 Bahamas E%sT 1976 + -5:00 US E%sT + +# Barbados +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Barb 1977 only - Jun 12 2:00 1:00 D +Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S +Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D +Rule Barb 1979 only - Sep 30 2:00 0 S +Rule Barb 1980 only - Sep 25 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Barbados -3:58:28 - LMT 1924 # Bridgetown + -3:58:28 - BMT 1932 # Bridgetown Mean Time + -4:00 Barb A%sT + +# Belize +# Whitman entirely disagrees with Shanks; go with Shanks & Pottenger. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Belize 1918 1942 - Oct Sun>=2 0:00 0:30 HD +Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 S +Rule Belize 1973 only - Dec 5 0:00 1:00 D +Rule Belize 1974 only - Feb 9 0:00 0 S +Rule Belize 1982 only - Dec 18 0:00 1:00 D +Rule Belize 1983 only - Feb 12 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Belize -5:52:48 - LMT 1912 Apr + -6:00 Belize C%sT + +# Bermuda + +# From Dan Jones, reporting in The Royal Gazette (2006-06-26): + +# Next year, however, clocks in the US will go forward on the second Sunday +# in March, until the first Sunday in November. And, after the Time Zone +# (Seasonal Variation) Bill 2006 was passed in the House of Assembly on +# Friday, the same thing will happen in Bermuda. +# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135 + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/Bermuda -4:19:04 - LMT 1930 Jan 1 2:00 # Hamilton + -4:00 - AST 1974 Apr 28 2:00 + -4:00 Bahamas A%sT 1976 + -4:00 US A%sT + +# Cayman Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown + -5:07:12 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST + +# Costa Rica +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D +Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S +Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D +# IATA SSIM (1991-09) says the following was at 1:00; +# go with Shanks & Pottenger. +Rule CR 1991 only - Jul 1 0:00 0 S +Rule CR 1992 only - Mar 15 0:00 0 S +# There are too many San Joses elsewhere, so we'll use `Costa Rica'. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose + -5:36:20 - SJMT 1921 Jan 15 # San Jose Mean Time + -6:00 CR C%sT +# Coco +# no information; probably like America/Costa_Rica + +# Cuba + +# From Arthur David Olson (1999-03-29): +# The 1999-03-28 exhibition baseball game held in Havana, Cuba, between +# the Cuban National Team and the Baltimore Orioles was carried live on +# the Orioles Radio Network, including affiliate WTOP in Washington, DC. +# During the game, play-by-play announcer Jim Hunter noted that +# "We'll be losing two hours of sleep...Cuba switched to Daylight Saving +# Time today." (The "two hour" remark referred to losing one hour of +# sleep on 1999-03-28--when the announcers were in Cuba as it switched +# to DST--and one more hour on 1999-04-04--when the announcers will have +# returned to Baltimore, which switches on that date.) + +# From Evert van der Veer via Steffen Thorsen (2004-10-28): +# Cuba is not going back to standard time this year. +# From Paul Eggert (2006-03-22): +# http://www.granma.cu/ingles/2004/septiembre/juev30/41medid-i.html +# says that it's due to a problem at the Antonio Guiteras +# thermoelectric plant, and says "This October there will be no return +# to normal hours (after daylight saving time)". +# For now, let's assume that it's a temporary measure. + +# From Carlos A. Carnero Delgado (2005-11-12): +# This year (just like in 2004-2005) there's no change in time zone +# adjustment in Cuba. We will stay in daylight saving time: +# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html + +# From Jesper Norgaard Welen (2006-10-21): +# An article in GRANMA INTERNACIONAL claims that Cuba will end +# the 3 years of permanent DST next weekend, see +# http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html +# "On Saturday night, October 28 going into Sunday, October 29, at 01:00, +# watches should be set back one hour -- going back to 00:00 hours -- returning +# to the normal schedule.... + +# From Paul Eggert (2007-03-02): +# http://www.granma.cubaweb.cu/english/news/art89.html, dated yesterday, +# says Cuban clocks will advance at midnight on March 10. +# For lack of better information, assume Cuba will use US rules, +# except that it switches at midnight standard time as usual. +# +# From Steffen Thorsen (2007-10-25): +# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week +# earlier - on the last Sunday of October, just like in 2006. +# +# He supplied these references: +# +# http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES +# http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm +# +# From Alex Kryvenishev (2007-10-25): +# Here is also article from Granma (Cuba): +# +# [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre +# http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html +# +# http://www.worldtimezone.com/dst_news/dst_news_cuba03.html + +# From Arthur David Olson (2008-03-09): +# I'm in Maryland which is now observing United States Eastern Daylight +# Time. At 9:44 local time I used RealPlayer to listen to +# <a href="http://media.enet.cu/radioreloj"> +# http://media.enet.cu/radioreloj +# </a>, a Cuban information station, and heard +# the time announced as "ocho cuarenta y cuatro" ("eight forty-four"), +# indicating that Cuba is still on standard time. + +# From Steffen Thorsen (2008-03-12): +# It seems that Cuba will start DST on Sunday, 2007-03-16... +# It was announced yesterday, according to this source (in Spanish): +# <a href="http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm"> +# http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm +# </a> +# +# Some more background information is posted here: +# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html"> +# http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html +# </a> +# +# The article also says that Cuba has been observing DST since 1963, +# while Shanks (and tzdata) has 1965 as the first date (except in the +# 1940's). Many other web pages in Cuba also claim that it has been +# observed since 1963, but with the exception of 1970 - an exception +# which is not present in tzdata/Shanks. So there is a chance we need to +# change some historic records as well. +# +# One example: +# <a href="http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm"> +# http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm +# </a> + +# From Jesper Norgaard Welen (2008-03-13): +# The Cuban time change has just been confirmed on the most authoritative +# web site, the Granma. Please check out +# <a href="http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html"> +# http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html +# </a> +# +# Basically as expected after Steffen Thorsens information, the change +# will take place midnight between Saturday and Sunday. + +# From Arthur David Olson (2008-03-12): +# Assume Sun>=15 (third Sunday) going forward. + +# From Alexander Krivenyshev (2009-03-04) +# According to the Radio Reloj - Cuba will start Daylight Saving Time on +# midnight between Saturday, March 07, 2009 and Sunday, March 08, 2009- +# not on midnight March 14 / March 15 as previously thought. +# +# <a href="http://www.worldtimezone.com/dst_news/dst_news_cuba05.html"> +# http://www.worldtimezone.com/dst_news/dst_news_cuba05.html +# (in Spanish) +# </a> + +# From Arthur David Olson (2009-03-09) +# I listened over the Internet to +# <a href="http://media.enet.cu/readioreloj"> +# http://media.enet.cu/readioreloj +# </a> +# this morning; when it was 10:05 a. m. here in Bethesda, Maryland the +# the time was announced as "diez cinco"--the same time as here, indicating +# that has indeed switched to DST. Assume second Sunday from 2009 forward. + +# From Steffen Thorsen (2011-03-08): +# Granma announced that Cuba is going to start DST on 2011-03-20 00:00:00 +# this year. Nothing about the end date known so far (if that has +# changed at all). +# +# Source: +# <a href="http://granma.co.cu/2011/03/08/nacional/artic01.html"> +# http://granma.co.cu/2011/03/08/nacional/artic01.html +# </a> +# +# Our info: +# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html"> +# http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html +# </a> +# +# From Steffen Thorsen (2011-10-30) +# Cuba will end DST two weeks later this year. Instead of going back +# tonight, it has been delayed to 2011-11-13 at 01:00. +# +# One source (Spanish) +# <a href="http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html"> +# http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html +# </a> +# +# Our page: +# <a href="http://www.timeanddate.com/news/time/cuba-time-changes-2011.html"> +# http://www.timeanddate.com/news/time/cuba-time-changes-2011.html +# </a> +# +# From Steffen Thorsen (2012-03-01) +# According to Radio Reloj, Cuba will start DST on Midnight between March +# 31 and April 1. +# +# Radio Reloj has the following info (Spanish): +# <a href="http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril"> +# http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril +# </a> +# +# Our info on it: +# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html"> +# http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html +# </a> + +# From Steffen Thorsen (2012-11-03): +# Radio Reloj and many other sources report that Cuba is changing back +# to standard time on 2012-11-04: +# http://www.radioreloj.cu/index.php/noticias-radio-reloj/36-nacionales/9961-regira-horario-normal-en-cuba-desde-el-domingo-cuatro-de-noviembre +# From Paul Eggert (2012-11-03): +# For now, assume the future rule is first Sunday in November. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Cuba 1928 only - Jun 10 0:00 1:00 D +Rule Cuba 1928 only - Oct 10 0:00 0 S +Rule Cuba 1940 1942 - Jun Sun>=1 0:00 1:00 D +Rule Cuba 1940 1942 - Sep Sun>=1 0:00 0 S +Rule Cuba 1945 1946 - Jun Sun>=1 0:00 1:00 D +Rule Cuba 1945 1946 - Sep Sun>=1 0:00 0 S +Rule Cuba 1965 only - Jun 1 0:00 1:00 D +Rule Cuba 1965 only - Sep 30 0:00 0 S +Rule Cuba 1966 only - May 29 0:00 1:00 D +Rule Cuba 1966 only - Oct 2 0:00 0 S +Rule Cuba 1967 only - Apr 8 0:00 1:00 D +Rule Cuba 1967 1968 - Sep Sun>=8 0:00 0 S +Rule Cuba 1968 only - Apr 14 0:00 1:00 D +Rule Cuba 1969 1977 - Apr lastSun 0:00 1:00 D +Rule Cuba 1969 1971 - Oct lastSun 0:00 0 S +Rule Cuba 1972 1974 - Oct 8 0:00 0 S +Rule Cuba 1975 1977 - Oct lastSun 0:00 0 S +Rule Cuba 1978 only - May 7 0:00 1:00 D +Rule Cuba 1978 1990 - Oct Sun>=8 0:00 0 S +Rule Cuba 1979 1980 - Mar Sun>=15 0:00 1:00 D +Rule Cuba 1981 1985 - May Sun>=5 0:00 1:00 D +Rule Cuba 1986 1989 - Mar Sun>=14 0:00 1:00 D +Rule Cuba 1990 1997 - Apr Sun>=1 0:00 1:00 D +Rule Cuba 1991 1995 - Oct Sun>=8 0:00s 0 S +Rule Cuba 1996 only - Oct 6 0:00s 0 S +Rule Cuba 1997 only - Oct 12 0:00s 0 S +Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D +Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S +Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D +Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S +Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D +Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D +Rule Cuba 2009 2010 - Mar Sun>=8 0:00s 1:00 D +Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D +Rule Cuba 2011 only - Nov 13 0:00s 0 S +Rule Cuba 2012 only - Apr 1 0:00s 1:00 D +Rule Cuba 2012 max - Nov Sun>=1 0:00s 0 S +Rule Cuba 2013 max - Mar Sun>=8 0:00s 1:00 D + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Havana -5:29:28 - LMT 1890 + -5:29:36 - HMT 1925 Jul 19 12:00 # Havana MT + -5:00 Cuba C%sT + +# Dominica +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Dominica -4:05:36 - LMT 1911 Jul 1 0:01 # Roseau + -4:00 - AST + +# Dominican Republic + +# From Steffen Thorsen (2000-10-30): +# Enrique Morales reported to me that the Dominican Republic has changed the +# time zone to Eastern Standard Time as of Sunday 29 at 2 am.... +# http://www.listin.com.do/antes/261000/republica/princi.html + +# From Paul Eggert (2000-12-04): +# That URL (2000-10-26, in Spanish) says they planned to use US-style DST. + +# From Rives McDow (2000-12-01): +# Dominican Republic changed its mind and presidential decree on Tuesday, +# November 28, 2000, with a new decree. On Sunday, December 3 at 1:00 AM the +# Dominican Republic will be reverting to 8 hours from the International Date +# Line, and will not be using DST in the foreseeable future. The reason they +# decided to use DST was to be in synch with Puerto Rico, who was also going +# to implement DST. When Puerto Rico didn't implement DST, the president +# decided to revert. + + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule DR 1966 only - Oct 30 0:00 1:00 D +Rule DR 1967 only - Feb 28 0:00 0 S +Rule DR 1969 1973 - Oct lastSun 0:00 0:30 HD +Rule DR 1970 only - Feb 21 0:00 0 S +Rule DR 1971 only - Jan 20 0:00 0 S +Rule DR 1972 1974 - Jan 21 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Santo_Domingo -4:39:36 - LMT 1890 + -4:40 - SDMT 1933 Apr 1 12:00 # S. Dom. MT + -5:00 DR E%sT 1974 Oct 27 + -4:00 - AST 2000 Oct 29 02:00 + -5:00 US E%sT 2000 Dec 3 01:00 + -4:00 - AST + +# El Salvador + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Salv 1987 1988 - May Sun>=1 0:00 1:00 D +Rule Salv 1987 1988 - Sep lastSun 0:00 0 S +# There are too many San Salvadors elsewhere, so use America/El_Salvador +# instead of America/San_Salvador. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador + -6:00 Salv C%sT + +# Grenada +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Grenada -4:07:00 - LMT 1911 Jul # St George's + -4:00 - AST + +# Guadeloupe +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Guadeloupe -4:06:08 - LMT 1911 Jun 8 # Pointe a Pitre + -4:00 - AST +# St Barthelemy +Link America/Guadeloupe America/St_Barthelemy +# St Martin (French part) +Link America/Guadeloupe America/Marigot + +# Guatemala +# +# From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen: +# Diario Co Latino, at +# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079, +# says in an article dated 2006-04-19 that the Guatemalan government had +# decided on that date to advance official time by 60 minutes, to lessen the +# impact of the elevated cost of oil.... Daylight saving time will last from +# 2006-04-29 24:00 (Guatemalan standard time) to 2006-09-30 (time unspecified). +# From Paul Eggert (2006-06-22): +# The Ministry of Energy and Mines, press release CP-15/2006 +# (2006-04-19), says DST ends at 24:00. See +# <http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf>. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Guat 1973 only - Nov 25 0:00 1:00 D +Rule Guat 1974 only - Feb 24 0:00 0 S +Rule Guat 1983 only - May 21 0:00 1:00 D +Rule Guat 1983 only - Sep 22 0:00 0 S +Rule Guat 1991 only - Mar 23 0:00 1:00 D +Rule Guat 1991 only - Sep 7 0:00 0 S +Rule Guat 2006 only - Apr 30 0:00 1:00 D +Rule Guat 2006 only - Oct 1 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5 + -6:00 Guat C%sT + +# Haiti +# From Gwillim Law (2005-04-15): +# Risto O. Nykanen wrote me that Haiti is now on DST. +# I searched for confirmation, and I found a +# <a href="http://www.haitianconsulate.org/time.doc"> press release +# on the Web page of the Haitian Consulate in Chicago (2005-03-31), +# </a>. Translated from French, it says: +# +# "The Prime Minister's Communication Office notifies the public in general +# and the press in particular that, following a decision of the Interior +# Ministry and the Territorial Collectivities [I suppose that means the +# provinces], Haiti will move to Eastern Daylight Time in the night from next +# Saturday the 2nd to Sunday the 3rd. +# +# "Consequently, the Prime Minister's Communication Office wishes to inform +# the population that the country's clocks will be set forward one hour +# starting at midnight. This provision will hold until the last Saturday in +# October 2005. +# +# "Port-au-Prince, March 31, 2005" +# +# From Steffen Thorsen (2006-04-04): +# I have been informed by users that Haiti observes DST this year like +# last year, so the current "only" rule for 2005 might be changed to a +# "max" rule or to last until 2006. (Who knows if they will observe DST +# next year or if they will extend their DST like US/Canada next year). +# +# I have found this article about it (in French): +# http://www.haitipressnetwork.com/news.cfm?articleID=7612 +# +# The reason seems to be an energy crisis. + +# From Stephen Colebourne (2007-02-22): +# Some IATA info: Haiti won't be having DST in 2007. + +# From Steffen Thorsen (2012-03-11): +# According to several news sources, Haiti will observe DST this year, +# apparently using the same start and end date as USA/Canada. +# So this means they have already changed their time. +# +# (Sources in French): +# <a href="http://www.alterpresse.org/spip.php?article12510"> +# http://www.alterpresse.org/spip.php?article12510 +# </a> +# <a href="http://radiovision2000haiti.net/home/?p=13253"> +# http://radiovision2000haiti.net/home/?p=13253 +# </a> +# +# Our coverage: +# <a href="http://www.timeanddate.com/news/time/haiti-dst-2012.html"> +# http://www.timeanddate.com/news/time/haiti-dst-2012.html +# </a> + +# From Arthur David Olson (2012-03-11): +# The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to +# 3:00 a.m. rather than the traditional Haitian jump at midnight. +# Assume a US-style fall back as well XXX. +# Do not yet assume that the change carries forward past 2012 XXX. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Haiti 1983 only - May 8 0:00 1:00 D +Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D +Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S +# Shanks & Pottenger say AT is 2:00, but IATA SSIM (1991/1997) says 1:00s. +# Go with IATA. +Rule Haiti 1988 1997 - Apr Sun>=1 1:00s 1:00 D +Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S +Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D +Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S +Rule Haiti 2012 only - Mar Sun>=8 2:00 1:00 D +Rule Haiti 2012 only - Nov Sun>=1 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Port-au-Prince -4:49:20 - LMT 1890 + -4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT + -5:00 Haiti E%sT + +# Honduras +# Shanks & Pottenger say 1921 Jan 1; go with Whitman's more precise Apr 1. + +# From Paul Eggert (2006-05-05): +# worldtimezone.com reports a 2006-05-02 Spanish-language AP article +# saying Honduras will start using DST midnight Saturday, effective 4 +# months until September. La Tribuna reported today +# <http://www.latribuna.hn/99299.html> that Manuel Zelaya, the president +# of Honduras, refused to back down on this. + +# From Jesper Norgaard Welen (2006-08-08): +# It seems that Honduras has returned from DST to standard time this Monday at +# 00:00 hours (prolonging Sunday to 25 hours duration). +# http://www.worldtimezone.com/dst_news/dst_news_honduras04.html + +# From Paul Eggert (2006-08-08): +# Also see Diario El Heraldo, The country returns to standard time (2006-08-08) +# <http://www.elheraldo.hn/nota.php?nid=54941&sec=12>. +# It mentions executive decree 18-2006. + +# From Steffen Thorsen (2006-08-17): +# Honduras will observe DST from 2007 to 2009, exact dates are not +# published, I have located this authoritative source: +# http://www.presidencia.gob.hn/noticia.aspx?nId=47 + +# From Steffen Thorsen (2007-03-30): +# http://www.laprensahn.com/pais_nota.php?id04962=7386 +# So it seems that Honduras will not enter DST this year.... + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Hond 1987 1988 - May Sun>=1 0:00 1:00 D +Rule Hond 1987 1988 - Sep lastSun 0:00 0 S +Rule Hond 2006 only - May Sun>=1 0:00 1:00 D +Rule Hond 2006 only - Aug Mon>=1 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr + -6:00 Hond C%sT +# +# Great Swan I ceded by US to Honduras in 1972 + +# Jamaica + +# From Bob Devine (1988-01-28): +# Follows US rules. + +# From U. S. Naval Observatory (1989-01-19): +# JAMAICA 5 H BEHIND UTC + +# From Shanks & Pottenger: +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Jamaica -5:07:12 - LMT 1890 # Kingston + -5:07:12 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST 1974 Apr 28 2:00 + -5:00 US E%sT 1984 + -5:00 - EST + +# Martinique +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France + -4:04:20 - FFMT 1911 May # Fort-de-France MT + -4:00 - AST 1980 Apr 6 + -4:00 1:00 ADT 1980 Sep 28 + -4:00 - AST + +# Montserrat +# From Paul Eggert (2006-03-22): +# In 1995 volcanic eruptions forced evacuation of Plymouth, the capital. +# world.gazetteer.com says Cork Hill is the most populous location now. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Cork Hill + -4:00 - AST + +# Nicaragua +# +# This uses Shanks & Pottenger for times before 2005. +# +# From Steffen Thorsen (2005-04-12): +# I've got reports from 8 different people that Nicaragua just started +# DST on Sunday 2005-04-10, in order to save energy because of +# expensive petroleum. The exact end date for DST is not yet +# announced, only "September" but some sites also say "mid-September". +# Some background information is available on the President's official site: +# http://www.presidencia.gob.ni/Presidencia/Files_index/Secretaria/Notas%20de%20Prensa/Presidente/2005/ABRIL/Gobierno-de-nicaragua-adelanta-hora-oficial-06abril.htm +# The Decree, no 23-2005 is available here: +# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2005/Decreto%2023-2005%20Se%20adelanta%20en%20una%20hora%20en%20todo%20el%20territorio%20nacional%20apartir%20de%20las%2024horas%20del%2009%20de%20Abril.pdf +# +# From Paul Eggert (2005-05-01): +# The decree doesn't say anything about daylight saving, but for now let's +# assume that it is daylight saving.... +# +# From Gwillim Law (2005-04-21): +# The Associated Press story on the time change, which can be found at +# http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html +# and elsewhere, says (fifth paragraph, translated from Spanish): "The last +# time that a change of clocks was applied to save energy was in the year 2000 +# during the Arnoldo Aleman administration."... +# The northamerica file says that Nicaragua has been on UTC-6 continuously +# since December 1998. I wasn't able to find any details of Nicaraguan time +# changes in 2000. Perhaps a note could be added to the northamerica file, to +# the effect that we have indirect evidence that DST was observed in 2000. +# +# From Jesper Norgaard Welen (2005-11-02): +# Nicaragua left DST the 2005-10-02 at 00:00 (local time). +# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm +# (2005-09-26) +# +# From Jesper Norgaard Welen (2006-05-05): +# http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410 +# (my informal translation) +# By order of the president of the republic, Enrique Bolanos, Nicaragua +# advanced by sixty minutes their official time, yesterday at 2 in the +# morning, and will stay that way until 30.th. of september. +# +# From Jesper Norgaard Welen (2006-09-30): +# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf +# My informal translation runs: +# The natural sun time is restored in all the national territory, in that the +# time is returned one hour at 01:00 am of October 1 of 2006. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D +Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S +Rule Nic 2005 only - Apr 10 0:00 1:00 D +Rule Nic 2005 only - Oct Sun>=1 0:00 0 S +Rule Nic 2006 only - Apr 30 2:00 1:00 D +Rule Nic 2006 only - Oct Sun>=1 1:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Managua -5:45:08 - LMT 1890 + -5:45:12 - MMT 1934 Jun 23 # Managua Mean Time? + -6:00 - CST 1973 May + -5:00 - EST 1975 Feb 16 + -6:00 Nic C%sT 1992 Jan 1 4:00 + -5:00 - EST 1992 Sep 24 + -6:00 - CST 1993 + -5:00 - EST 1997 + -6:00 Nic C%sT + +# Panama +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Panama -5:18:08 - LMT 1890 + -5:19:36 - CMT 1908 Apr 22 # Colon Mean Time + -5:00 - EST + +# Puerto Rico +# There are too many San Juans elsewhere, so we'll use `Puerto_Rico'. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan + -4:00 - AST 1942 May 3 + -4:00 US A%sT 1946 + -4:00 - AST + +# St Kitts-Nevis +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/St_Kitts -4:10:52 - LMT 1912 Mar 2 # Basseterre + -4:00 - AST + +# St Lucia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/St_Lucia -4:04:00 - LMT 1890 # Castries + -4:04:00 - CMT 1912 # Castries Mean Time + -4:00 - AST + +# St Pierre and Miquelon +# There are too many St Pierres elsewhere, so we'll use `Miquelon'. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre + -4:00 - AST 1980 May + -3:00 - PMST 1987 # Pierre & Miquelon Time + -3:00 Canada PM%sT + +# St Vincent and the Grenadines +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown + -4:04:56 - KMT 1912 # Kingstown Mean Time + -4:00 - AST + +# Turks and Caicos +# +# From Chris Dunn in +# <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007> +# (2007-03-15): In the Turks & Caicos Islands (America/Grand_Turk) the +# daylight saving dates for time changes have been adjusted to match +# the recent U.S. change of dates. +# +# From Brian Inglis (2007-04-28): +# http://www.turksandcaicos.tc/calendar/index.htm [2007-04-26] +# there is an entry for Nov 4 "Daylight Savings Time Ends 2007" and three +# rows before that there is an out of date entry for Oct: +# "Eastern Standard Times Begins 2007 +# Clocks are set back one hour at 2:00 a.m. local Daylight Saving Time" +# indicating that the normal ET rules are followed. +# +# From Paul Eggert (2006-05-01): +# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998) +# says they switch at midnight. Go with Shanks & Pottenger. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule TC 1979 1986 - Apr lastSun 2:00 1:00 D +Rule TC 1979 2006 - Oct lastSun 2:00 0 S +Rule TC 1987 2006 - Apr Sun>=1 2:00 1:00 D +Rule TC 2007 max - Mar Sun>=8 2:00 1:00 D +Rule TC 2007 max - Nov Sun>=1 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Grand_Turk -4:44:32 - LMT 1890 + -5:07:12 - KMT 1912 Feb # Kingston Mean Time + -5:00 TC E%sT + +# British Virgin Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Tortola -4:18:28 - LMT 1911 Jul # Road Town + -4:00 - AST + +# Virgin Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/St_Thomas -4:19:44 - LMT 1911 Jul # Charlotte Amalie + -4:00 - AST diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/pacificnew b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/pacificnew new file mode 100644 index 0000000..bccd852 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/pacificnew @@ -0,0 +1,28 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# From Arthur David Olson (1989-04-05): +# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill +# establishing "Pacific Presidential Election Time"; it was not acted on +# by the Senate or signed into law by the President. +# You might want to change the "PE" (Presidential Election) below to +# "Q" (Quadrennial) to maintain three-character zone abbreviations. +# If you're really conservative, you might want to change it to "D". +# Avoid "L" (Leap Year), which won't be true in 2100. + +# If Presidential Election Time is ever established, replace "XXXX" below +# with the year the law takes effect and uncomment the "##" lines. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +## Rule Twilite XXXX max - Apr Sun>=1 2:00 1:00 D +## Rule Twilite XXXX max uspres Oct lastSun 2:00 1:00 PE +## Rule Twilite XXXX max uspres Nov Sun>=7 2:00 0 S +## Rule Twilite XXXX max nonpres Oct lastSun 2:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +## Zone America/Los_Angeles-PET -8:00 US P%sT XXXX +## -8:00 Twilite P%sT + +# For now... +Link America/Los_Angeles US/Pacific-New ## diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/solar87 b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/solar87 new file mode 100644 index 0000000..2299558 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/solar87 @@ -0,0 +1,390 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# So much for footnotes about Saudi Arabia. +# Apparent noon times below are for Riyadh; your mileage will vary. +# Times were computed using formulas in the U.S. Naval Observatory's +# Almanac for Computers 1987; the formulas "will give EqT to an accuracy of +# [plus or minus two] seconds during the current year." +# +# Rounding to the nearest five seconds results in fewer than +# 256 different "time types"--a limit that's faced because time types are +# stored on disk as unsigned chars. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule sol87 1987 only - Jan 1 12:03:20s -0:03:20 - +Rule sol87 1987 only - Jan 2 12:03:50s -0:03:50 - +Rule sol87 1987 only - Jan 3 12:04:15s -0:04:15 - +Rule sol87 1987 only - Jan 4 12:04:45s -0:04:45 - +Rule sol87 1987 only - Jan 5 12:05:10s -0:05:10 - +Rule sol87 1987 only - Jan 6 12:05:40s -0:05:40 - +Rule sol87 1987 only - Jan 7 12:06:05s -0:06:05 - +Rule sol87 1987 only - Jan 8 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jan 9 12:06:55s -0:06:55 - +Rule sol87 1987 only - Jan 10 12:07:20s -0:07:20 - +Rule sol87 1987 only - Jan 11 12:07:45s -0:07:45 - +Rule sol87 1987 only - Jan 12 12:08:10s -0:08:10 - +Rule sol87 1987 only - Jan 13 12:08:30s -0:08:30 - +Rule sol87 1987 only - Jan 14 12:08:55s -0:08:55 - +Rule sol87 1987 only - Jan 15 12:09:15s -0:09:15 - +Rule sol87 1987 only - Jan 16 12:09:35s -0:09:35 - +Rule sol87 1987 only - Jan 17 12:09:55s -0:09:55 - +Rule sol87 1987 only - Jan 18 12:10:15s -0:10:15 - +Rule sol87 1987 only - Jan 19 12:10:35s -0:10:35 - +Rule sol87 1987 only - Jan 20 12:10:55s -0:10:55 - +Rule sol87 1987 only - Jan 21 12:11:10s -0:11:10 - +Rule sol87 1987 only - Jan 22 12:11:30s -0:11:30 - +Rule sol87 1987 only - Jan 23 12:11:45s -0:11:45 - +Rule sol87 1987 only - Jan 24 12:12:00s -0:12:00 - +Rule sol87 1987 only - Jan 25 12:12:15s -0:12:15 - +Rule sol87 1987 only - Jan 26 12:12:30s -0:12:30 - +Rule sol87 1987 only - Jan 27 12:12:40s -0:12:40 - +Rule sol87 1987 only - Jan 28 12:12:55s -0:12:55 - +Rule sol87 1987 only - Jan 29 12:13:05s -0:13:05 - +Rule sol87 1987 only - Jan 30 12:13:15s -0:13:15 - +Rule sol87 1987 only - Jan 31 12:13:25s -0:13:25 - +Rule sol87 1987 only - Feb 1 12:13:35s -0:13:35 - +Rule sol87 1987 only - Feb 2 12:13:40s -0:13:40 - +Rule sol87 1987 only - Feb 3 12:13:50s -0:13:50 - +Rule sol87 1987 only - Feb 4 12:13:55s -0:13:55 - +Rule sol87 1987 only - Feb 5 12:14:00s -0:14:00 - +Rule sol87 1987 only - Feb 6 12:14:05s -0:14:05 - +Rule sol87 1987 only - Feb 7 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 8 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 9 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 10 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 11 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 12 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 13 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 14 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 15 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 16 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 17 12:14:05s -0:14:05 - +Rule sol87 1987 only - Feb 18 12:14:00s -0:14:00 - +Rule sol87 1987 only - Feb 19 12:13:55s -0:13:55 - +Rule sol87 1987 only - Feb 20 12:13:50s -0:13:50 - +Rule sol87 1987 only - Feb 21 12:13:45s -0:13:45 - +Rule sol87 1987 only - Feb 22 12:13:35s -0:13:35 - +Rule sol87 1987 only - Feb 23 12:13:30s -0:13:30 - +Rule sol87 1987 only - Feb 24 12:13:20s -0:13:20 - +Rule sol87 1987 only - Feb 25 12:13:10s -0:13:10 - +Rule sol87 1987 only - Feb 26 12:13:00s -0:13:00 - +Rule sol87 1987 only - Feb 27 12:12:50s -0:12:50 - +Rule sol87 1987 only - Feb 28 12:12:40s -0:12:40 - +Rule sol87 1987 only - Mar 1 12:12:30s -0:12:30 - +Rule sol87 1987 only - Mar 2 12:12:20s -0:12:20 - +Rule sol87 1987 only - Mar 3 12:12:05s -0:12:05 - +Rule sol87 1987 only - Mar 4 12:11:55s -0:11:55 - +Rule sol87 1987 only - Mar 5 12:11:40s -0:11:40 - +Rule sol87 1987 only - Mar 6 12:11:25s -0:11:25 - +Rule sol87 1987 only - Mar 7 12:11:15s -0:11:15 - +Rule sol87 1987 only - Mar 8 12:11:00s -0:11:00 - +Rule sol87 1987 only - Mar 9 12:10:45s -0:10:45 - +Rule sol87 1987 only - Mar 10 12:10:30s -0:10:30 - +Rule sol87 1987 only - Mar 11 12:10:15s -0:10:15 - +Rule sol87 1987 only - Mar 12 12:09:55s -0:09:55 - +Rule sol87 1987 only - Mar 13 12:09:40s -0:09:40 - +Rule sol87 1987 only - Mar 14 12:09:25s -0:09:25 - +Rule sol87 1987 only - Mar 15 12:09:10s -0:09:10 - +Rule sol87 1987 only - Mar 16 12:08:50s -0:08:50 - +Rule sol87 1987 only - Mar 17 12:08:35s -0:08:35 - +Rule sol87 1987 only - Mar 18 12:08:15s -0:08:15 - +Rule sol87 1987 only - Mar 19 12:08:00s -0:08:00 - +Rule sol87 1987 only - Mar 20 12:07:40s -0:07:40 - +Rule sol87 1987 only - Mar 21 12:07:25s -0:07:25 - +Rule sol87 1987 only - Mar 22 12:07:05s -0:07:05 - +Rule sol87 1987 only - Mar 23 12:06:50s -0:06:50 - +Rule sol87 1987 only - Mar 24 12:06:30s -0:06:30 - +Rule sol87 1987 only - Mar 25 12:06:10s -0:06:10 - +Rule sol87 1987 only - Mar 26 12:05:55s -0:05:55 - +Rule sol87 1987 only - Mar 27 12:05:35s -0:05:35 - +Rule sol87 1987 only - Mar 28 12:05:15s -0:05:15 - +Rule sol87 1987 only - Mar 29 12:05:00s -0:05:00 - +Rule sol87 1987 only - Mar 30 12:04:40s -0:04:40 - +Rule sol87 1987 only - Mar 31 12:04:25s -0:04:25 - +Rule sol87 1987 only - Apr 1 12:04:05s -0:04:05 - +Rule sol87 1987 only - Apr 2 12:03:45s -0:03:45 - +Rule sol87 1987 only - Apr 3 12:03:30s -0:03:30 - +Rule sol87 1987 only - Apr 4 12:03:10s -0:03:10 - +Rule sol87 1987 only - Apr 5 12:02:55s -0:02:55 - +Rule sol87 1987 only - Apr 6 12:02:35s -0:02:35 - +Rule sol87 1987 only - Apr 7 12:02:20s -0:02:20 - +Rule sol87 1987 only - Apr 8 12:02:05s -0:02:05 - +Rule sol87 1987 only - Apr 9 12:01:45s -0:01:45 - +Rule sol87 1987 only - Apr 10 12:01:30s -0:01:30 - +Rule sol87 1987 only - Apr 11 12:01:15s -0:01:15 - +Rule sol87 1987 only - Apr 12 12:00:55s -0:00:55 - +Rule sol87 1987 only - Apr 13 12:00:40s -0:00:40 - +Rule sol87 1987 only - Apr 14 12:00:25s -0:00:25 - +Rule sol87 1987 only - Apr 15 12:00:10s -0:00:10 - +Rule sol87 1987 only - Apr 16 11:59:55s 0:00:05 - +Rule sol87 1987 only - Apr 17 11:59:45s 0:00:15 - +Rule sol87 1987 only - Apr 18 11:59:30s 0:00:30 - +Rule sol87 1987 only - Apr 19 11:59:15s 0:00:45 - +Rule sol87 1987 only - Apr 20 11:59:05s 0:00:55 - +Rule sol87 1987 only - Apr 21 11:58:50s 0:01:10 - +Rule sol87 1987 only - Apr 22 11:58:40s 0:01:20 - +Rule sol87 1987 only - Apr 23 11:58:25s 0:01:35 - +Rule sol87 1987 only - Apr 24 11:58:15s 0:01:45 - +Rule sol87 1987 only - Apr 25 11:58:05s 0:01:55 - +Rule sol87 1987 only - Apr 26 11:57:55s 0:02:05 - +Rule sol87 1987 only - Apr 27 11:57:45s 0:02:15 - +Rule sol87 1987 only - Apr 28 11:57:35s 0:02:25 - +Rule sol87 1987 only - Apr 29 11:57:25s 0:02:35 - +Rule sol87 1987 only - Apr 30 11:57:15s 0:02:45 - +Rule sol87 1987 only - May 1 11:57:10s 0:02:50 - +Rule sol87 1987 only - May 2 11:57:00s 0:03:00 - +Rule sol87 1987 only - May 3 11:56:55s 0:03:05 - +Rule sol87 1987 only - May 4 11:56:50s 0:03:10 - +Rule sol87 1987 only - May 5 11:56:45s 0:03:15 - +Rule sol87 1987 only - May 6 11:56:40s 0:03:20 - +Rule sol87 1987 only - May 7 11:56:35s 0:03:25 - +Rule sol87 1987 only - May 8 11:56:30s 0:03:30 - +Rule sol87 1987 only - May 9 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 10 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 11 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 12 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 13 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 14 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 15 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 16 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 17 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 18 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 19 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 20 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 21 11:56:30s 0:03:30 - +Rule sol87 1987 only - May 22 11:56:35s 0:03:25 - +Rule sol87 1987 only - May 23 11:56:40s 0:03:20 - +Rule sol87 1987 only - May 24 11:56:45s 0:03:15 - +Rule sol87 1987 only - May 25 11:56:50s 0:03:10 - +Rule sol87 1987 only - May 26 11:56:55s 0:03:05 - +Rule sol87 1987 only - May 27 11:57:00s 0:03:00 - +Rule sol87 1987 only - May 28 11:57:10s 0:02:50 - +Rule sol87 1987 only - May 29 11:57:15s 0:02:45 - +Rule sol87 1987 only - May 30 11:57:25s 0:02:35 - +Rule sol87 1987 only - May 31 11:57:30s 0:02:30 - +Rule sol87 1987 only - Jun 1 11:57:40s 0:02:20 - +Rule sol87 1987 only - Jun 2 11:57:50s 0:02:10 - +Rule sol87 1987 only - Jun 3 11:58:00s 0:02:00 - +Rule sol87 1987 only - Jun 4 11:58:10s 0:01:50 - +Rule sol87 1987 only - Jun 5 11:58:20s 0:01:40 - +Rule sol87 1987 only - Jun 6 11:58:30s 0:01:30 - +Rule sol87 1987 only - Jun 7 11:58:40s 0:01:20 - +Rule sol87 1987 only - Jun 8 11:58:50s 0:01:10 - +Rule sol87 1987 only - Jun 9 11:59:05s 0:00:55 - +Rule sol87 1987 only - Jun 10 11:59:15s 0:00:45 - +Rule sol87 1987 only - Jun 11 11:59:30s 0:00:30 - +Rule sol87 1987 only - Jun 12 11:59:40s 0:00:20 - +Rule sol87 1987 only - Jun 13 11:59:50s 0:00:10 - +Rule sol87 1987 only - Jun 14 12:00:05s -0:00:05 - +Rule sol87 1987 only - Jun 15 12:00:15s -0:00:15 - +Rule sol87 1987 only - Jun 16 12:00:30s -0:00:30 - +Rule sol87 1987 only - Jun 17 12:00:45s -0:00:45 - +Rule sol87 1987 only - Jun 18 12:00:55s -0:00:55 - +Rule sol87 1987 only - Jun 19 12:01:10s -0:01:10 - +Rule sol87 1987 only - Jun 20 12:01:20s -0:01:20 - +Rule sol87 1987 only - Jun 21 12:01:35s -0:01:35 - +Rule sol87 1987 only - Jun 22 12:01:50s -0:01:50 - +Rule sol87 1987 only - Jun 23 12:02:00s -0:02:00 - +Rule sol87 1987 only - Jun 24 12:02:15s -0:02:15 - +Rule sol87 1987 only - Jun 25 12:02:25s -0:02:25 - +Rule sol87 1987 only - Jun 26 12:02:40s -0:02:40 - +Rule sol87 1987 only - Jun 27 12:02:50s -0:02:50 - +Rule sol87 1987 only - Jun 28 12:03:05s -0:03:05 - +Rule sol87 1987 only - Jun 29 12:03:15s -0:03:15 - +Rule sol87 1987 only - Jun 30 12:03:30s -0:03:30 - +Rule sol87 1987 only - Jul 1 12:03:40s -0:03:40 - +Rule sol87 1987 only - Jul 2 12:03:50s -0:03:50 - +Rule sol87 1987 only - Jul 3 12:04:05s -0:04:05 - +Rule sol87 1987 only - Jul 4 12:04:15s -0:04:15 - +Rule sol87 1987 only - Jul 5 12:04:25s -0:04:25 - +Rule sol87 1987 only - Jul 6 12:04:35s -0:04:35 - +Rule sol87 1987 only - Jul 7 12:04:45s -0:04:45 - +Rule sol87 1987 only - Jul 8 12:04:55s -0:04:55 - +Rule sol87 1987 only - Jul 9 12:05:05s -0:05:05 - +Rule sol87 1987 only - Jul 10 12:05:15s -0:05:15 - +Rule sol87 1987 only - Jul 11 12:05:20s -0:05:20 - +Rule sol87 1987 only - Jul 12 12:05:30s -0:05:30 - +Rule sol87 1987 only - Jul 13 12:05:40s -0:05:40 - +Rule sol87 1987 only - Jul 14 12:05:45s -0:05:45 - +Rule sol87 1987 only - Jul 15 12:05:50s -0:05:50 - +Rule sol87 1987 only - Jul 16 12:06:00s -0:06:00 - +Rule sol87 1987 only - Jul 17 12:06:05s -0:06:05 - +Rule sol87 1987 only - Jul 18 12:06:10s -0:06:10 - +Rule sol87 1987 only - Jul 19 12:06:15s -0:06:15 - +Rule sol87 1987 only - Jul 20 12:06:15s -0:06:15 - +Rule sol87 1987 only - Jul 21 12:06:20s -0:06:20 - +Rule sol87 1987 only - Jul 22 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 23 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 24 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 25 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 26 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 27 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 28 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 29 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 30 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 31 12:06:25s -0:06:25 - +Rule sol87 1987 only - Aug 1 12:06:20s -0:06:20 - +Rule sol87 1987 only - Aug 2 12:06:15s -0:06:15 - +Rule sol87 1987 only - Aug 3 12:06:10s -0:06:10 - +Rule sol87 1987 only - Aug 4 12:06:05s -0:06:05 - +Rule sol87 1987 only - Aug 5 12:06:00s -0:06:00 - +Rule sol87 1987 only - Aug 6 12:05:55s -0:05:55 - +Rule sol87 1987 only - Aug 7 12:05:50s -0:05:50 - +Rule sol87 1987 only - Aug 8 12:05:40s -0:05:40 - +Rule sol87 1987 only - Aug 9 12:05:35s -0:05:35 - +Rule sol87 1987 only - Aug 10 12:05:25s -0:05:25 - +Rule sol87 1987 only - Aug 11 12:05:15s -0:05:15 - +Rule sol87 1987 only - Aug 12 12:05:05s -0:05:05 - +Rule sol87 1987 only - Aug 13 12:04:55s -0:04:55 - +Rule sol87 1987 only - Aug 14 12:04:45s -0:04:45 - +Rule sol87 1987 only - Aug 15 12:04:35s -0:04:35 - +Rule sol87 1987 only - Aug 16 12:04:25s -0:04:25 - +Rule sol87 1987 only - Aug 17 12:04:10s -0:04:10 - +Rule sol87 1987 only - Aug 18 12:04:00s -0:04:00 - +Rule sol87 1987 only - Aug 19 12:03:45s -0:03:45 - +Rule sol87 1987 only - Aug 20 12:03:30s -0:03:30 - +Rule sol87 1987 only - Aug 21 12:03:15s -0:03:15 - +Rule sol87 1987 only - Aug 22 12:03:00s -0:03:00 - +Rule sol87 1987 only - Aug 23 12:02:45s -0:02:45 - +Rule sol87 1987 only - Aug 24 12:02:30s -0:02:30 - +Rule sol87 1987 only - Aug 25 12:02:15s -0:02:15 - +Rule sol87 1987 only - Aug 26 12:02:00s -0:02:00 - +Rule sol87 1987 only - Aug 27 12:01:40s -0:01:40 - +Rule sol87 1987 only - Aug 28 12:01:25s -0:01:25 - +Rule sol87 1987 only - Aug 29 12:01:05s -0:01:05 - +Rule sol87 1987 only - Aug 30 12:00:50s -0:00:50 - +Rule sol87 1987 only - Aug 31 12:00:30s -0:00:30 - +Rule sol87 1987 only - Sep 1 12:00:10s -0:00:10 - +Rule sol87 1987 only - Sep 2 11:59:50s 0:00:10 - +Rule sol87 1987 only - Sep 3 11:59:35s 0:00:25 - +Rule sol87 1987 only - Sep 4 11:59:15s 0:00:45 - +Rule sol87 1987 only - Sep 5 11:58:55s 0:01:05 - +Rule sol87 1987 only - Sep 6 11:58:35s 0:01:25 - +Rule sol87 1987 only - Sep 7 11:58:15s 0:01:45 - +Rule sol87 1987 only - Sep 8 11:57:55s 0:02:05 - +Rule sol87 1987 only - Sep 9 11:57:30s 0:02:30 - +Rule sol87 1987 only - Sep 10 11:57:10s 0:02:50 - +Rule sol87 1987 only - Sep 11 11:56:50s 0:03:10 - +Rule sol87 1987 only - Sep 12 11:56:30s 0:03:30 - +Rule sol87 1987 only - Sep 13 11:56:10s 0:03:50 - +Rule sol87 1987 only - Sep 14 11:55:45s 0:04:15 - +Rule sol87 1987 only - Sep 15 11:55:25s 0:04:35 - +Rule sol87 1987 only - Sep 16 11:55:05s 0:04:55 - +Rule sol87 1987 only - Sep 17 11:54:45s 0:05:15 - +Rule sol87 1987 only - Sep 18 11:54:20s 0:05:40 - +Rule sol87 1987 only - Sep 19 11:54:00s 0:06:00 - +Rule sol87 1987 only - Sep 20 11:53:40s 0:06:20 - +Rule sol87 1987 only - Sep 21 11:53:15s 0:06:45 - +Rule sol87 1987 only - Sep 22 11:52:55s 0:07:05 - +Rule sol87 1987 only - Sep 23 11:52:35s 0:07:25 - +Rule sol87 1987 only - Sep 24 11:52:15s 0:07:45 - +Rule sol87 1987 only - Sep 25 11:51:55s 0:08:05 - +Rule sol87 1987 only - Sep 26 11:51:35s 0:08:25 - +Rule sol87 1987 only - Sep 27 11:51:10s 0:08:50 - +Rule sol87 1987 only - Sep 28 11:50:50s 0:09:10 - +Rule sol87 1987 only - Sep 29 11:50:30s 0:09:30 - +Rule sol87 1987 only - Sep 30 11:50:10s 0:09:50 - +Rule sol87 1987 only - Oct 1 11:49:50s 0:10:10 - +Rule sol87 1987 only - Oct 2 11:49:35s 0:10:25 - +Rule sol87 1987 only - Oct 3 11:49:15s 0:10:45 - +Rule sol87 1987 only - Oct 4 11:48:55s 0:11:05 - +Rule sol87 1987 only - Oct 5 11:48:35s 0:11:25 - +Rule sol87 1987 only - Oct 6 11:48:20s 0:11:40 - +Rule sol87 1987 only - Oct 7 11:48:00s 0:12:00 - +Rule sol87 1987 only - Oct 8 11:47:45s 0:12:15 - +Rule sol87 1987 only - Oct 9 11:47:25s 0:12:35 - +Rule sol87 1987 only - Oct 10 11:47:10s 0:12:50 - +Rule sol87 1987 only - Oct 11 11:46:55s 0:13:05 - +Rule sol87 1987 only - Oct 12 11:46:40s 0:13:20 - +Rule sol87 1987 only - Oct 13 11:46:25s 0:13:35 - +Rule sol87 1987 only - Oct 14 11:46:10s 0:13:50 - +Rule sol87 1987 only - Oct 15 11:45:55s 0:14:05 - +Rule sol87 1987 only - Oct 16 11:45:45s 0:14:15 - +Rule sol87 1987 only - Oct 17 11:45:30s 0:14:30 - +Rule sol87 1987 only - Oct 18 11:45:20s 0:14:40 - +Rule sol87 1987 only - Oct 19 11:45:05s 0:14:55 - +Rule sol87 1987 only - Oct 20 11:44:55s 0:15:05 - +Rule sol87 1987 only - Oct 21 11:44:45s 0:15:15 - +Rule sol87 1987 only - Oct 22 11:44:35s 0:15:25 - +Rule sol87 1987 only - Oct 23 11:44:25s 0:15:35 - +Rule sol87 1987 only - Oct 24 11:44:20s 0:15:40 - +Rule sol87 1987 only - Oct 25 11:44:10s 0:15:50 - +Rule sol87 1987 only - Oct 26 11:44:05s 0:15:55 - +Rule sol87 1987 only - Oct 27 11:43:55s 0:16:05 - +Rule sol87 1987 only - Oct 28 11:43:50s 0:16:10 - +Rule sol87 1987 only - Oct 29 11:43:45s 0:16:15 - +Rule sol87 1987 only - Oct 30 11:43:45s 0:16:15 - +Rule sol87 1987 only - Oct 31 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 1 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 2 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 3 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 4 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 5 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 6 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 7 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 8 11:43:45s 0:16:15 - +Rule sol87 1987 only - Nov 9 11:43:50s 0:16:10 - +Rule sol87 1987 only - Nov 10 11:43:55s 0:16:05 - +Rule sol87 1987 only - Nov 11 11:44:00s 0:16:00 - +Rule sol87 1987 only - Nov 12 11:44:05s 0:15:55 - +Rule sol87 1987 only - Nov 13 11:44:15s 0:15:45 - +Rule sol87 1987 only - Nov 14 11:44:20s 0:15:40 - +Rule sol87 1987 only - Nov 15 11:44:30s 0:15:30 - +Rule sol87 1987 only - Nov 16 11:44:40s 0:15:20 - +Rule sol87 1987 only - Nov 17 11:44:50s 0:15:10 - +Rule sol87 1987 only - Nov 18 11:45:05s 0:14:55 - +Rule sol87 1987 only - Nov 19 11:45:15s 0:14:45 - +Rule sol87 1987 only - Nov 20 11:45:30s 0:14:30 - +Rule sol87 1987 only - Nov 21 11:45:45s 0:14:15 - +Rule sol87 1987 only - Nov 22 11:46:00s 0:14:00 - +Rule sol87 1987 only - Nov 23 11:46:15s 0:13:45 - +Rule sol87 1987 only - Nov 24 11:46:30s 0:13:30 - +Rule sol87 1987 only - Nov 25 11:46:50s 0:13:10 - +Rule sol87 1987 only - Nov 26 11:47:10s 0:12:50 - +Rule sol87 1987 only - Nov 27 11:47:25s 0:12:35 - +Rule sol87 1987 only - Nov 28 11:47:45s 0:12:15 - +Rule sol87 1987 only - Nov 29 11:48:05s 0:11:55 - +Rule sol87 1987 only - Nov 30 11:48:30s 0:11:30 - +Rule sol87 1987 only - Dec 1 11:48:50s 0:11:10 - +Rule sol87 1987 only - Dec 2 11:49:10s 0:10:50 - +Rule sol87 1987 only - Dec 3 11:49:35s 0:10:25 - +Rule sol87 1987 only - Dec 4 11:50:00s 0:10:00 - +Rule sol87 1987 only - Dec 5 11:50:25s 0:09:35 - +Rule sol87 1987 only - Dec 6 11:50:50s 0:09:10 - +Rule sol87 1987 only - Dec 7 11:51:15s 0:08:45 - +Rule sol87 1987 only - Dec 8 11:51:40s 0:08:20 - +Rule sol87 1987 only - Dec 9 11:52:05s 0:07:55 - +Rule sol87 1987 only - Dec 10 11:52:30s 0:07:30 - +Rule sol87 1987 only - Dec 11 11:53:00s 0:07:00 - +Rule sol87 1987 only - Dec 12 11:53:25s 0:06:35 - +Rule sol87 1987 only - Dec 13 11:53:55s 0:06:05 - +Rule sol87 1987 only - Dec 14 11:54:25s 0:05:35 - +Rule sol87 1987 only - Dec 15 11:54:50s 0:05:10 - +Rule sol87 1987 only - Dec 16 11:55:20s 0:04:40 - +Rule sol87 1987 only - Dec 17 11:55:50s 0:04:10 - +Rule sol87 1987 only - Dec 18 11:56:20s 0:03:40 - +Rule sol87 1987 only - Dec 19 11:56:50s 0:03:10 - +Rule sol87 1987 only - Dec 20 11:57:20s 0:02:40 - +Rule sol87 1987 only - Dec 21 11:57:50s 0:02:10 - +Rule sol87 1987 only - Dec 22 11:58:20s 0:01:40 - +Rule sol87 1987 only - Dec 23 11:58:50s 0:01:10 - +Rule sol87 1987 only - Dec 24 11:59:20s 0:00:40 - +Rule sol87 1987 only - Dec 25 11:59:50s 0:00:10 - +Rule sol87 1987 only - Dec 26 12:00:20s -0:00:20 - +Rule sol87 1987 only - Dec 27 12:00:45s -0:00:45 - +Rule sol87 1987 only - Dec 28 12:01:15s -0:01:15 - +Rule sol87 1987 only - Dec 29 12:01:45s -0:01:45 - +Rule sol87 1987 only - Dec 30 12:02:15s -0:02:15 - +Rule sol87 1987 only - Dec 31 12:02:45s -0:02:45 - + +# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs +# Before and after 1987, we'll operate on local mean solar time. + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Asia/Riyadh87 3:07:04 - zzz 1987 + 3:07:04 sol87 zzz 1988 + 3:07:04 - zzz +# For backward compatibility... +Link Asia/Riyadh87 Mideast/Riyadh87 diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/solar88 b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/solar88 new file mode 100644 index 0000000..bb1d6ca --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/solar88 @@ -0,0 +1,390 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# Apparent noon times below are for Riyadh; they're a bit off for other places. +# Times were computed using formulas in the U.S. Naval Observatory's +# Almanac for Computers 1988; the formulas "will give EqT to an accuracy of +# [plus or minus two] seconds during the current year." +# +# Rounding to the nearest five seconds results in fewer than +# 256 different "time types"--a limit that's faced because time types are +# stored on disk as unsigned chars. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule sol88 1988 only - Jan 1 12:03:15s -0:03:15 - +Rule sol88 1988 only - Jan 2 12:03:40s -0:03:40 - +Rule sol88 1988 only - Jan 3 12:04:10s -0:04:10 - +Rule sol88 1988 only - Jan 4 12:04:40s -0:04:40 - +Rule sol88 1988 only - Jan 5 12:05:05s -0:05:05 - +Rule sol88 1988 only - Jan 6 12:05:30s -0:05:30 - +Rule sol88 1988 only - Jan 7 12:06:00s -0:06:00 - +Rule sol88 1988 only - Jan 8 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jan 9 12:06:50s -0:06:50 - +Rule sol88 1988 only - Jan 10 12:07:15s -0:07:15 - +Rule sol88 1988 only - Jan 11 12:07:40s -0:07:40 - +Rule sol88 1988 only - Jan 12 12:08:05s -0:08:05 - +Rule sol88 1988 only - Jan 13 12:08:25s -0:08:25 - +Rule sol88 1988 only - Jan 14 12:08:50s -0:08:50 - +Rule sol88 1988 only - Jan 15 12:09:10s -0:09:10 - +Rule sol88 1988 only - Jan 16 12:09:30s -0:09:30 - +Rule sol88 1988 only - Jan 17 12:09:50s -0:09:50 - +Rule sol88 1988 only - Jan 18 12:10:10s -0:10:10 - +Rule sol88 1988 only - Jan 19 12:10:30s -0:10:30 - +Rule sol88 1988 only - Jan 20 12:10:50s -0:10:50 - +Rule sol88 1988 only - Jan 21 12:11:05s -0:11:05 - +Rule sol88 1988 only - Jan 22 12:11:25s -0:11:25 - +Rule sol88 1988 only - Jan 23 12:11:40s -0:11:40 - +Rule sol88 1988 only - Jan 24 12:11:55s -0:11:55 - +Rule sol88 1988 only - Jan 25 12:12:10s -0:12:10 - +Rule sol88 1988 only - Jan 26 12:12:25s -0:12:25 - +Rule sol88 1988 only - Jan 27 12:12:40s -0:12:40 - +Rule sol88 1988 only - Jan 28 12:12:50s -0:12:50 - +Rule sol88 1988 only - Jan 29 12:13:00s -0:13:00 - +Rule sol88 1988 only - Jan 30 12:13:10s -0:13:10 - +Rule sol88 1988 only - Jan 31 12:13:20s -0:13:20 - +Rule sol88 1988 only - Feb 1 12:13:30s -0:13:30 - +Rule sol88 1988 only - Feb 2 12:13:40s -0:13:40 - +Rule sol88 1988 only - Feb 3 12:13:45s -0:13:45 - +Rule sol88 1988 only - Feb 4 12:13:55s -0:13:55 - +Rule sol88 1988 only - Feb 5 12:14:00s -0:14:00 - +Rule sol88 1988 only - Feb 6 12:14:05s -0:14:05 - +Rule sol88 1988 only - Feb 7 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 8 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 9 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 10 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 11 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 12 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 13 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 14 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 15 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 16 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 17 12:14:05s -0:14:05 - +Rule sol88 1988 only - Feb 18 12:14:00s -0:14:00 - +Rule sol88 1988 only - Feb 19 12:13:55s -0:13:55 - +Rule sol88 1988 only - Feb 20 12:13:50s -0:13:50 - +Rule sol88 1988 only - Feb 21 12:13:45s -0:13:45 - +Rule sol88 1988 only - Feb 22 12:13:40s -0:13:40 - +Rule sol88 1988 only - Feb 23 12:13:30s -0:13:30 - +Rule sol88 1988 only - Feb 24 12:13:20s -0:13:20 - +Rule sol88 1988 only - Feb 25 12:13:15s -0:13:15 - +Rule sol88 1988 only - Feb 26 12:13:05s -0:13:05 - +Rule sol88 1988 only - Feb 27 12:12:55s -0:12:55 - +Rule sol88 1988 only - Feb 28 12:12:45s -0:12:45 - +Rule sol88 1988 only - Feb 29 12:12:30s -0:12:30 - +Rule sol88 1988 only - Mar 1 12:12:20s -0:12:20 - +Rule sol88 1988 only - Mar 2 12:12:10s -0:12:10 - +Rule sol88 1988 only - Mar 3 12:11:55s -0:11:55 - +Rule sol88 1988 only - Mar 4 12:11:45s -0:11:45 - +Rule sol88 1988 only - Mar 5 12:11:30s -0:11:30 - +Rule sol88 1988 only - Mar 6 12:11:15s -0:11:15 - +Rule sol88 1988 only - Mar 7 12:11:00s -0:11:00 - +Rule sol88 1988 only - Mar 8 12:10:45s -0:10:45 - +Rule sol88 1988 only - Mar 9 12:10:30s -0:10:30 - +Rule sol88 1988 only - Mar 10 12:10:15s -0:10:15 - +Rule sol88 1988 only - Mar 11 12:10:00s -0:10:00 - +Rule sol88 1988 only - Mar 12 12:09:45s -0:09:45 - +Rule sol88 1988 only - Mar 13 12:09:30s -0:09:30 - +Rule sol88 1988 only - Mar 14 12:09:10s -0:09:10 - +Rule sol88 1988 only - Mar 15 12:08:55s -0:08:55 - +Rule sol88 1988 only - Mar 16 12:08:40s -0:08:40 - +Rule sol88 1988 only - Mar 17 12:08:20s -0:08:20 - +Rule sol88 1988 only - Mar 18 12:08:05s -0:08:05 - +Rule sol88 1988 only - Mar 19 12:07:45s -0:07:45 - +Rule sol88 1988 only - Mar 20 12:07:30s -0:07:30 - +Rule sol88 1988 only - Mar 21 12:07:10s -0:07:10 - +Rule sol88 1988 only - Mar 22 12:06:50s -0:06:50 - +Rule sol88 1988 only - Mar 23 12:06:35s -0:06:35 - +Rule sol88 1988 only - Mar 24 12:06:15s -0:06:15 - +Rule sol88 1988 only - Mar 25 12:06:00s -0:06:00 - +Rule sol88 1988 only - Mar 26 12:05:40s -0:05:40 - +Rule sol88 1988 only - Mar 27 12:05:20s -0:05:20 - +Rule sol88 1988 only - Mar 28 12:05:05s -0:05:05 - +Rule sol88 1988 only - Mar 29 12:04:45s -0:04:45 - +Rule sol88 1988 only - Mar 30 12:04:25s -0:04:25 - +Rule sol88 1988 only - Mar 31 12:04:10s -0:04:10 - +Rule sol88 1988 only - Apr 1 12:03:50s -0:03:50 - +Rule sol88 1988 only - Apr 2 12:03:35s -0:03:35 - +Rule sol88 1988 only - Apr 3 12:03:15s -0:03:15 - +Rule sol88 1988 only - Apr 4 12:03:00s -0:03:00 - +Rule sol88 1988 only - Apr 5 12:02:40s -0:02:40 - +Rule sol88 1988 only - Apr 6 12:02:25s -0:02:25 - +Rule sol88 1988 only - Apr 7 12:02:05s -0:02:05 - +Rule sol88 1988 only - Apr 8 12:01:50s -0:01:50 - +Rule sol88 1988 only - Apr 9 12:01:35s -0:01:35 - +Rule sol88 1988 only - Apr 10 12:01:15s -0:01:15 - +Rule sol88 1988 only - Apr 11 12:01:00s -0:01:00 - +Rule sol88 1988 only - Apr 12 12:00:45s -0:00:45 - +Rule sol88 1988 only - Apr 13 12:00:30s -0:00:30 - +Rule sol88 1988 only - Apr 14 12:00:15s -0:00:15 - +Rule sol88 1988 only - Apr 15 12:00:00s 0:00:00 - +Rule sol88 1988 only - Apr 16 11:59:45s 0:00:15 - +Rule sol88 1988 only - Apr 17 11:59:30s 0:00:30 - +Rule sol88 1988 only - Apr 18 11:59:20s 0:00:40 - +Rule sol88 1988 only - Apr 19 11:59:05s 0:00:55 - +Rule sol88 1988 only - Apr 20 11:58:55s 0:01:05 - +Rule sol88 1988 only - Apr 21 11:58:40s 0:01:20 - +Rule sol88 1988 only - Apr 22 11:58:30s 0:01:30 - +Rule sol88 1988 only - Apr 23 11:58:15s 0:01:45 - +Rule sol88 1988 only - Apr 24 11:58:05s 0:01:55 - +Rule sol88 1988 only - Apr 25 11:57:55s 0:02:05 - +Rule sol88 1988 only - Apr 26 11:57:45s 0:02:15 - +Rule sol88 1988 only - Apr 27 11:57:35s 0:02:25 - +Rule sol88 1988 only - Apr 28 11:57:30s 0:02:30 - +Rule sol88 1988 only - Apr 29 11:57:20s 0:02:40 - +Rule sol88 1988 only - Apr 30 11:57:10s 0:02:50 - +Rule sol88 1988 only - May 1 11:57:05s 0:02:55 - +Rule sol88 1988 only - May 2 11:56:55s 0:03:05 - +Rule sol88 1988 only - May 3 11:56:50s 0:03:10 - +Rule sol88 1988 only - May 4 11:56:45s 0:03:15 - +Rule sol88 1988 only - May 5 11:56:40s 0:03:20 - +Rule sol88 1988 only - May 6 11:56:35s 0:03:25 - +Rule sol88 1988 only - May 7 11:56:30s 0:03:30 - +Rule sol88 1988 only - May 8 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 9 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 10 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 11 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 12 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 13 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 14 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 15 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 16 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 17 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 18 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 19 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 20 11:56:30s 0:03:30 - +Rule sol88 1988 only - May 21 11:56:35s 0:03:25 - +Rule sol88 1988 only - May 22 11:56:40s 0:03:20 - +Rule sol88 1988 only - May 23 11:56:45s 0:03:15 - +Rule sol88 1988 only - May 24 11:56:50s 0:03:10 - +Rule sol88 1988 only - May 25 11:56:55s 0:03:05 - +Rule sol88 1988 only - May 26 11:57:00s 0:03:00 - +Rule sol88 1988 only - May 27 11:57:05s 0:02:55 - +Rule sol88 1988 only - May 28 11:57:15s 0:02:45 - +Rule sol88 1988 only - May 29 11:57:20s 0:02:40 - +Rule sol88 1988 only - May 30 11:57:30s 0:02:30 - +Rule sol88 1988 only - May 31 11:57:40s 0:02:20 - +Rule sol88 1988 only - Jun 1 11:57:50s 0:02:10 - +Rule sol88 1988 only - Jun 2 11:57:55s 0:02:05 - +Rule sol88 1988 only - Jun 3 11:58:05s 0:01:55 - +Rule sol88 1988 only - Jun 4 11:58:15s 0:01:45 - +Rule sol88 1988 only - Jun 5 11:58:30s 0:01:30 - +Rule sol88 1988 only - Jun 6 11:58:40s 0:01:20 - +Rule sol88 1988 only - Jun 7 11:58:50s 0:01:10 - +Rule sol88 1988 only - Jun 8 11:59:00s 0:01:00 - +Rule sol88 1988 only - Jun 9 11:59:15s 0:00:45 - +Rule sol88 1988 only - Jun 10 11:59:25s 0:00:35 - +Rule sol88 1988 only - Jun 11 11:59:35s 0:00:25 - +Rule sol88 1988 only - Jun 12 11:59:50s 0:00:10 - +Rule sol88 1988 only - Jun 13 12:00:00s 0:00:00 - +Rule sol88 1988 only - Jun 14 12:00:15s -0:00:15 - +Rule sol88 1988 only - Jun 15 12:00:25s -0:00:25 - +Rule sol88 1988 only - Jun 16 12:00:40s -0:00:40 - +Rule sol88 1988 only - Jun 17 12:00:55s -0:00:55 - +Rule sol88 1988 only - Jun 18 12:01:05s -0:01:05 - +Rule sol88 1988 only - Jun 19 12:01:20s -0:01:20 - +Rule sol88 1988 only - Jun 20 12:01:30s -0:01:30 - +Rule sol88 1988 only - Jun 21 12:01:45s -0:01:45 - +Rule sol88 1988 only - Jun 22 12:02:00s -0:02:00 - +Rule sol88 1988 only - Jun 23 12:02:10s -0:02:10 - +Rule sol88 1988 only - Jun 24 12:02:25s -0:02:25 - +Rule sol88 1988 only - Jun 25 12:02:35s -0:02:35 - +Rule sol88 1988 only - Jun 26 12:02:50s -0:02:50 - +Rule sol88 1988 only - Jun 27 12:03:00s -0:03:00 - +Rule sol88 1988 only - Jun 28 12:03:15s -0:03:15 - +Rule sol88 1988 only - Jun 29 12:03:25s -0:03:25 - +Rule sol88 1988 only - Jun 30 12:03:40s -0:03:40 - +Rule sol88 1988 only - Jul 1 12:03:50s -0:03:50 - +Rule sol88 1988 only - Jul 2 12:04:00s -0:04:00 - +Rule sol88 1988 only - Jul 3 12:04:10s -0:04:10 - +Rule sol88 1988 only - Jul 4 12:04:25s -0:04:25 - +Rule sol88 1988 only - Jul 5 12:04:35s -0:04:35 - +Rule sol88 1988 only - Jul 6 12:04:45s -0:04:45 - +Rule sol88 1988 only - Jul 7 12:04:55s -0:04:55 - +Rule sol88 1988 only - Jul 8 12:05:05s -0:05:05 - +Rule sol88 1988 only - Jul 9 12:05:10s -0:05:10 - +Rule sol88 1988 only - Jul 10 12:05:20s -0:05:20 - +Rule sol88 1988 only - Jul 11 12:05:30s -0:05:30 - +Rule sol88 1988 only - Jul 12 12:05:35s -0:05:35 - +Rule sol88 1988 only - Jul 13 12:05:45s -0:05:45 - +Rule sol88 1988 only - Jul 14 12:05:50s -0:05:50 - +Rule sol88 1988 only - Jul 15 12:05:55s -0:05:55 - +Rule sol88 1988 only - Jul 16 12:06:00s -0:06:00 - +Rule sol88 1988 only - Jul 17 12:06:05s -0:06:05 - +Rule sol88 1988 only - Jul 18 12:06:10s -0:06:10 - +Rule sol88 1988 only - Jul 19 12:06:15s -0:06:15 - +Rule sol88 1988 only - Jul 20 12:06:20s -0:06:20 - +Rule sol88 1988 only - Jul 21 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 22 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 23 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 24 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 25 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 26 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 27 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 28 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 29 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 30 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 31 12:06:20s -0:06:20 - +Rule sol88 1988 only - Aug 1 12:06:15s -0:06:15 - +Rule sol88 1988 only - Aug 2 12:06:15s -0:06:15 - +Rule sol88 1988 only - Aug 3 12:06:10s -0:06:10 - +Rule sol88 1988 only - Aug 4 12:06:05s -0:06:05 - +Rule sol88 1988 only - Aug 5 12:05:55s -0:05:55 - +Rule sol88 1988 only - Aug 6 12:05:50s -0:05:50 - +Rule sol88 1988 only - Aug 7 12:05:45s -0:05:45 - +Rule sol88 1988 only - Aug 8 12:05:35s -0:05:35 - +Rule sol88 1988 only - Aug 9 12:05:25s -0:05:25 - +Rule sol88 1988 only - Aug 10 12:05:20s -0:05:20 - +Rule sol88 1988 only - Aug 11 12:05:10s -0:05:10 - +Rule sol88 1988 only - Aug 12 12:05:00s -0:05:00 - +Rule sol88 1988 only - Aug 13 12:04:50s -0:04:50 - +Rule sol88 1988 only - Aug 14 12:04:35s -0:04:35 - +Rule sol88 1988 only - Aug 15 12:04:25s -0:04:25 - +Rule sol88 1988 only - Aug 16 12:04:15s -0:04:15 - +Rule sol88 1988 only - Aug 17 12:04:00s -0:04:00 - +Rule sol88 1988 only - Aug 18 12:03:50s -0:03:50 - +Rule sol88 1988 only - Aug 19 12:03:35s -0:03:35 - +Rule sol88 1988 only - Aug 20 12:03:20s -0:03:20 - +Rule sol88 1988 only - Aug 21 12:03:05s -0:03:05 - +Rule sol88 1988 only - Aug 22 12:02:50s -0:02:50 - +Rule sol88 1988 only - Aug 23 12:02:35s -0:02:35 - +Rule sol88 1988 only - Aug 24 12:02:20s -0:02:20 - +Rule sol88 1988 only - Aug 25 12:02:00s -0:02:00 - +Rule sol88 1988 only - Aug 26 12:01:45s -0:01:45 - +Rule sol88 1988 only - Aug 27 12:01:30s -0:01:30 - +Rule sol88 1988 only - Aug 28 12:01:10s -0:01:10 - +Rule sol88 1988 only - Aug 29 12:00:50s -0:00:50 - +Rule sol88 1988 only - Aug 30 12:00:35s -0:00:35 - +Rule sol88 1988 only - Aug 31 12:00:15s -0:00:15 - +Rule sol88 1988 only - Sep 1 11:59:55s 0:00:05 - +Rule sol88 1988 only - Sep 2 11:59:35s 0:00:25 - +Rule sol88 1988 only - Sep 3 11:59:20s 0:00:40 - +Rule sol88 1988 only - Sep 4 11:59:00s 0:01:00 - +Rule sol88 1988 only - Sep 5 11:58:40s 0:01:20 - +Rule sol88 1988 only - Sep 6 11:58:20s 0:01:40 - +Rule sol88 1988 only - Sep 7 11:58:00s 0:02:00 - +Rule sol88 1988 only - Sep 8 11:57:35s 0:02:25 - +Rule sol88 1988 only - Sep 9 11:57:15s 0:02:45 - +Rule sol88 1988 only - Sep 10 11:56:55s 0:03:05 - +Rule sol88 1988 only - Sep 11 11:56:35s 0:03:25 - +Rule sol88 1988 only - Sep 12 11:56:15s 0:03:45 - +Rule sol88 1988 only - Sep 13 11:55:50s 0:04:10 - +Rule sol88 1988 only - Sep 14 11:55:30s 0:04:30 - +Rule sol88 1988 only - Sep 15 11:55:10s 0:04:50 - +Rule sol88 1988 only - Sep 16 11:54:50s 0:05:10 - +Rule sol88 1988 only - Sep 17 11:54:25s 0:05:35 - +Rule sol88 1988 only - Sep 18 11:54:05s 0:05:55 - +Rule sol88 1988 only - Sep 19 11:53:45s 0:06:15 - +Rule sol88 1988 only - Sep 20 11:53:25s 0:06:35 - +Rule sol88 1988 only - Sep 21 11:53:00s 0:07:00 - +Rule sol88 1988 only - Sep 22 11:52:40s 0:07:20 - +Rule sol88 1988 only - Sep 23 11:52:20s 0:07:40 - +Rule sol88 1988 only - Sep 24 11:52:00s 0:08:00 - +Rule sol88 1988 only - Sep 25 11:51:40s 0:08:20 - +Rule sol88 1988 only - Sep 26 11:51:15s 0:08:45 - +Rule sol88 1988 only - Sep 27 11:50:55s 0:09:05 - +Rule sol88 1988 only - Sep 28 11:50:35s 0:09:25 - +Rule sol88 1988 only - Sep 29 11:50:15s 0:09:45 - +Rule sol88 1988 only - Sep 30 11:49:55s 0:10:05 - +Rule sol88 1988 only - Oct 1 11:49:35s 0:10:25 - +Rule sol88 1988 only - Oct 2 11:49:20s 0:10:40 - +Rule sol88 1988 only - Oct 3 11:49:00s 0:11:00 - +Rule sol88 1988 only - Oct 4 11:48:40s 0:11:20 - +Rule sol88 1988 only - Oct 5 11:48:25s 0:11:35 - +Rule sol88 1988 only - Oct 6 11:48:05s 0:11:55 - +Rule sol88 1988 only - Oct 7 11:47:50s 0:12:10 - +Rule sol88 1988 only - Oct 8 11:47:30s 0:12:30 - +Rule sol88 1988 only - Oct 9 11:47:15s 0:12:45 - +Rule sol88 1988 only - Oct 10 11:47:00s 0:13:00 - +Rule sol88 1988 only - Oct 11 11:46:45s 0:13:15 - +Rule sol88 1988 only - Oct 12 11:46:30s 0:13:30 - +Rule sol88 1988 only - Oct 13 11:46:15s 0:13:45 - +Rule sol88 1988 only - Oct 14 11:46:00s 0:14:00 - +Rule sol88 1988 only - Oct 15 11:45:45s 0:14:15 - +Rule sol88 1988 only - Oct 16 11:45:35s 0:14:25 - +Rule sol88 1988 only - Oct 17 11:45:20s 0:14:40 - +Rule sol88 1988 only - Oct 18 11:45:10s 0:14:50 - +Rule sol88 1988 only - Oct 19 11:45:00s 0:15:00 - +Rule sol88 1988 only - Oct 20 11:44:45s 0:15:15 - +Rule sol88 1988 only - Oct 21 11:44:40s 0:15:20 - +Rule sol88 1988 only - Oct 22 11:44:30s 0:15:30 - +Rule sol88 1988 only - Oct 23 11:44:20s 0:15:40 - +Rule sol88 1988 only - Oct 24 11:44:10s 0:15:50 - +Rule sol88 1988 only - Oct 25 11:44:05s 0:15:55 - +Rule sol88 1988 only - Oct 26 11:44:00s 0:16:00 - +Rule sol88 1988 only - Oct 27 11:43:55s 0:16:05 - +Rule sol88 1988 only - Oct 28 11:43:50s 0:16:10 - +Rule sol88 1988 only - Oct 29 11:43:45s 0:16:15 - +Rule sol88 1988 only - Oct 30 11:43:40s 0:16:20 - +Rule sol88 1988 only - Oct 31 11:43:40s 0:16:20 - +Rule sol88 1988 only - Nov 1 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 2 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 3 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 4 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 5 11:43:40s 0:16:20 - +Rule sol88 1988 only - Nov 6 11:43:40s 0:16:20 - +Rule sol88 1988 only - Nov 7 11:43:45s 0:16:15 - +Rule sol88 1988 only - Nov 8 11:43:45s 0:16:15 - +Rule sol88 1988 only - Nov 9 11:43:50s 0:16:10 - +Rule sol88 1988 only - Nov 10 11:44:00s 0:16:00 - +Rule sol88 1988 only - Nov 11 11:44:05s 0:15:55 - +Rule sol88 1988 only - Nov 12 11:44:10s 0:15:50 - +Rule sol88 1988 only - Nov 13 11:44:20s 0:15:40 - +Rule sol88 1988 only - Nov 14 11:44:30s 0:15:30 - +Rule sol88 1988 only - Nov 15 11:44:40s 0:15:20 - +Rule sol88 1988 only - Nov 16 11:44:50s 0:15:10 - +Rule sol88 1988 only - Nov 17 11:45:00s 0:15:00 - +Rule sol88 1988 only - Nov 18 11:45:15s 0:14:45 - +Rule sol88 1988 only - Nov 19 11:45:25s 0:14:35 - +Rule sol88 1988 only - Nov 20 11:45:40s 0:14:20 - +Rule sol88 1988 only - Nov 21 11:45:55s 0:14:05 - +Rule sol88 1988 only - Nov 22 11:46:10s 0:13:50 - +Rule sol88 1988 only - Nov 23 11:46:30s 0:13:30 - +Rule sol88 1988 only - Nov 24 11:46:45s 0:13:15 - +Rule sol88 1988 only - Nov 25 11:47:05s 0:12:55 - +Rule sol88 1988 only - Nov 26 11:47:20s 0:12:40 - +Rule sol88 1988 only - Nov 27 11:47:40s 0:12:20 - +Rule sol88 1988 only - Nov 28 11:48:00s 0:12:00 - +Rule sol88 1988 only - Nov 29 11:48:25s 0:11:35 - +Rule sol88 1988 only - Nov 30 11:48:45s 0:11:15 - +Rule sol88 1988 only - Dec 1 11:49:05s 0:10:55 - +Rule sol88 1988 only - Dec 2 11:49:30s 0:10:30 - +Rule sol88 1988 only - Dec 3 11:49:55s 0:10:05 - +Rule sol88 1988 only - Dec 4 11:50:15s 0:09:45 - +Rule sol88 1988 only - Dec 5 11:50:40s 0:09:20 - +Rule sol88 1988 only - Dec 6 11:51:05s 0:08:55 - +Rule sol88 1988 only - Dec 7 11:51:35s 0:08:25 - +Rule sol88 1988 only - Dec 8 11:52:00s 0:08:00 - +Rule sol88 1988 only - Dec 9 11:52:25s 0:07:35 - +Rule sol88 1988 only - Dec 10 11:52:55s 0:07:05 - +Rule sol88 1988 only - Dec 11 11:53:20s 0:06:40 - +Rule sol88 1988 only - Dec 12 11:53:50s 0:06:10 - +Rule sol88 1988 only - Dec 13 11:54:15s 0:05:45 - +Rule sol88 1988 only - Dec 14 11:54:45s 0:05:15 - +Rule sol88 1988 only - Dec 15 11:55:15s 0:04:45 - +Rule sol88 1988 only - Dec 16 11:55:45s 0:04:15 - +Rule sol88 1988 only - Dec 17 11:56:15s 0:03:45 - +Rule sol88 1988 only - Dec 18 11:56:40s 0:03:20 - +Rule sol88 1988 only - Dec 19 11:57:10s 0:02:50 - +Rule sol88 1988 only - Dec 20 11:57:40s 0:02:20 - +Rule sol88 1988 only - Dec 21 11:58:10s 0:01:50 - +Rule sol88 1988 only - Dec 22 11:58:40s 0:01:20 - +Rule sol88 1988 only - Dec 23 11:59:10s 0:00:50 - +Rule sol88 1988 only - Dec 24 11:59:40s 0:00:20 - +Rule sol88 1988 only - Dec 25 12:00:10s -0:00:10 - +Rule sol88 1988 only - Dec 26 12:00:40s -0:00:40 - +Rule sol88 1988 only - Dec 27 12:01:10s -0:01:10 - +Rule sol88 1988 only - Dec 28 12:01:40s -0:01:40 - +Rule sol88 1988 only - Dec 29 12:02:10s -0:02:10 - +Rule sol88 1988 only - Dec 30 12:02:35s -0:02:35 - +Rule sol88 1988 only - Dec 31 12:03:05s -0:03:05 - + +# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs +# Before and after 1988, we'll operate on local mean solar time. + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Asia/Riyadh88 3:07:04 - zzz 1988 + 3:07:04 sol88 zzz 1989 + 3:07:04 - zzz +# For backward compatibility... +Link Asia/Riyadh88 Mideast/Riyadh88 diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/solar89 b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/solar89 new file mode 100644 index 0000000..af93235 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/solar89 @@ -0,0 +1,395 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# Apparent noon times below are for Riyadh; they're a bit off for other places. +# Times were computed using a formula provided by the U. S. Naval Observatory: +# eqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l) +# -12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l) +# + 19.3 * cos(3 * l); +# where l is the "mean longitude of the Sun" given by +# l = 279.642 degrees + 0.985647 * d +# and d is the interval in days from January 0, 0 hours Universal Time +# (equaling the day of the year plus the fraction of a day from zero hours). +# The accuracy of the formula is plus or minus three seconds. +# +# Rounding to the nearest five seconds results in fewer than +# 256 different "time types"--a limit that's faced because time types are +# stored on disk as unsigned chars. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule sol89 1989 only - Jan 1 12:03:35s -0:03:35 - +Rule sol89 1989 only - Jan 2 12:04:05s -0:04:05 - +Rule sol89 1989 only - Jan 3 12:04:30s -0:04:30 - +Rule sol89 1989 only - Jan 4 12:05:00s -0:05:00 - +Rule sol89 1989 only - Jan 5 12:05:25s -0:05:25 - +Rule sol89 1989 only - Jan 6 12:05:50s -0:05:50 - +Rule sol89 1989 only - Jan 7 12:06:15s -0:06:15 - +Rule sol89 1989 only - Jan 8 12:06:45s -0:06:45 - +Rule sol89 1989 only - Jan 9 12:07:10s -0:07:10 - +Rule sol89 1989 only - Jan 10 12:07:35s -0:07:35 - +Rule sol89 1989 only - Jan 11 12:07:55s -0:07:55 - +Rule sol89 1989 only - Jan 12 12:08:20s -0:08:20 - +Rule sol89 1989 only - Jan 13 12:08:45s -0:08:45 - +Rule sol89 1989 only - Jan 14 12:09:05s -0:09:05 - +Rule sol89 1989 only - Jan 15 12:09:25s -0:09:25 - +Rule sol89 1989 only - Jan 16 12:09:45s -0:09:45 - +Rule sol89 1989 only - Jan 17 12:10:05s -0:10:05 - +Rule sol89 1989 only - Jan 18 12:10:25s -0:10:25 - +Rule sol89 1989 only - Jan 19 12:10:45s -0:10:45 - +Rule sol89 1989 only - Jan 20 12:11:05s -0:11:05 - +Rule sol89 1989 only - Jan 21 12:11:20s -0:11:20 - +Rule sol89 1989 only - Jan 22 12:11:35s -0:11:35 - +Rule sol89 1989 only - Jan 23 12:11:55s -0:11:55 - +Rule sol89 1989 only - Jan 24 12:12:10s -0:12:10 - +Rule sol89 1989 only - Jan 25 12:12:20s -0:12:20 - +Rule sol89 1989 only - Jan 26 12:12:35s -0:12:35 - +Rule sol89 1989 only - Jan 27 12:12:50s -0:12:50 - +Rule sol89 1989 only - Jan 28 12:13:00s -0:13:00 - +Rule sol89 1989 only - Jan 29 12:13:10s -0:13:10 - +Rule sol89 1989 only - Jan 30 12:13:20s -0:13:20 - +Rule sol89 1989 only - Jan 31 12:13:30s -0:13:30 - +Rule sol89 1989 only - Feb 1 12:13:40s -0:13:40 - +Rule sol89 1989 only - Feb 2 12:13:45s -0:13:45 - +Rule sol89 1989 only - Feb 3 12:13:55s -0:13:55 - +Rule sol89 1989 only - Feb 4 12:14:00s -0:14:00 - +Rule sol89 1989 only - Feb 5 12:14:05s -0:14:05 - +Rule sol89 1989 only - Feb 6 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 7 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 8 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 9 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 10 12:14:20s -0:14:20 - +Rule sol89 1989 only - Feb 11 12:14:20s -0:14:20 - +Rule sol89 1989 only - Feb 12 12:14:20s -0:14:20 - +Rule sol89 1989 only - Feb 13 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 14 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 15 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 16 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 17 12:14:05s -0:14:05 - +Rule sol89 1989 only - Feb 18 12:14:00s -0:14:00 - +Rule sol89 1989 only - Feb 19 12:13:55s -0:13:55 - +Rule sol89 1989 only - Feb 20 12:13:50s -0:13:50 - +Rule sol89 1989 only - Feb 21 12:13:40s -0:13:40 - +Rule sol89 1989 only - Feb 22 12:13:35s -0:13:35 - +Rule sol89 1989 only - Feb 23 12:13:25s -0:13:25 - +Rule sol89 1989 only - Feb 24 12:13:15s -0:13:15 - +Rule sol89 1989 only - Feb 25 12:13:05s -0:13:05 - +Rule sol89 1989 only - Feb 26 12:12:55s -0:12:55 - +Rule sol89 1989 only - Feb 27 12:12:45s -0:12:45 - +Rule sol89 1989 only - Feb 28 12:12:35s -0:12:35 - +Rule sol89 1989 only - Mar 1 12:12:25s -0:12:25 - +Rule sol89 1989 only - Mar 2 12:12:10s -0:12:10 - +Rule sol89 1989 only - Mar 3 12:12:00s -0:12:00 - +Rule sol89 1989 only - Mar 4 12:11:45s -0:11:45 - +Rule sol89 1989 only - Mar 5 12:11:35s -0:11:35 - +Rule sol89 1989 only - Mar 6 12:11:20s -0:11:20 - +Rule sol89 1989 only - Mar 7 12:11:05s -0:11:05 - +Rule sol89 1989 only - Mar 8 12:10:50s -0:10:50 - +Rule sol89 1989 only - Mar 9 12:10:35s -0:10:35 - +Rule sol89 1989 only - Mar 10 12:10:20s -0:10:20 - +Rule sol89 1989 only - Mar 11 12:10:05s -0:10:05 - +Rule sol89 1989 only - Mar 12 12:09:50s -0:09:50 - +Rule sol89 1989 only - Mar 13 12:09:30s -0:09:30 - +Rule sol89 1989 only - Mar 14 12:09:15s -0:09:15 - +Rule sol89 1989 only - Mar 15 12:09:00s -0:09:00 - +Rule sol89 1989 only - Mar 16 12:08:40s -0:08:40 - +Rule sol89 1989 only - Mar 17 12:08:25s -0:08:25 - +Rule sol89 1989 only - Mar 18 12:08:05s -0:08:05 - +Rule sol89 1989 only - Mar 19 12:07:50s -0:07:50 - +Rule sol89 1989 only - Mar 20 12:07:30s -0:07:30 - +Rule sol89 1989 only - Mar 21 12:07:15s -0:07:15 - +Rule sol89 1989 only - Mar 22 12:06:55s -0:06:55 - +Rule sol89 1989 only - Mar 23 12:06:35s -0:06:35 - +Rule sol89 1989 only - Mar 24 12:06:20s -0:06:20 - +Rule sol89 1989 only - Mar 25 12:06:00s -0:06:00 - +Rule sol89 1989 only - Mar 26 12:05:40s -0:05:40 - +Rule sol89 1989 only - Mar 27 12:05:25s -0:05:25 - +Rule sol89 1989 only - Mar 28 12:05:05s -0:05:05 - +Rule sol89 1989 only - Mar 29 12:04:50s -0:04:50 - +Rule sol89 1989 only - Mar 30 12:04:30s -0:04:30 - +Rule sol89 1989 only - Mar 31 12:04:10s -0:04:10 - +Rule sol89 1989 only - Apr 1 12:03:55s -0:03:55 - +Rule sol89 1989 only - Apr 2 12:03:35s -0:03:35 - +Rule sol89 1989 only - Apr 3 12:03:20s -0:03:20 - +Rule sol89 1989 only - Apr 4 12:03:00s -0:03:00 - +Rule sol89 1989 only - Apr 5 12:02:45s -0:02:45 - +Rule sol89 1989 only - Apr 6 12:02:25s -0:02:25 - +Rule sol89 1989 only - Apr 7 12:02:10s -0:02:10 - +Rule sol89 1989 only - Apr 8 12:01:50s -0:01:50 - +Rule sol89 1989 only - Apr 9 12:01:35s -0:01:35 - +Rule sol89 1989 only - Apr 10 12:01:20s -0:01:20 - +Rule sol89 1989 only - Apr 11 12:01:05s -0:01:05 - +Rule sol89 1989 only - Apr 12 12:00:50s -0:00:50 - +Rule sol89 1989 only - Apr 13 12:00:35s -0:00:35 - +Rule sol89 1989 only - Apr 14 12:00:20s -0:00:20 - +Rule sol89 1989 only - Apr 15 12:00:05s -0:00:05 - +Rule sol89 1989 only - Apr 16 11:59:50s 0:00:10 - +Rule sol89 1989 only - Apr 17 11:59:35s 0:00:25 - +Rule sol89 1989 only - Apr 18 11:59:20s 0:00:40 - +Rule sol89 1989 only - Apr 19 11:59:10s 0:00:50 - +Rule sol89 1989 only - Apr 20 11:58:55s 0:01:05 - +Rule sol89 1989 only - Apr 21 11:58:45s 0:01:15 - +Rule sol89 1989 only - Apr 22 11:58:30s 0:01:30 - +Rule sol89 1989 only - Apr 23 11:58:20s 0:01:40 - +Rule sol89 1989 only - Apr 24 11:58:10s 0:01:50 - +Rule sol89 1989 only - Apr 25 11:58:00s 0:02:00 - +Rule sol89 1989 only - Apr 26 11:57:50s 0:02:10 - +Rule sol89 1989 only - Apr 27 11:57:40s 0:02:20 - +Rule sol89 1989 only - Apr 28 11:57:30s 0:02:30 - +Rule sol89 1989 only - Apr 29 11:57:20s 0:02:40 - +Rule sol89 1989 only - Apr 30 11:57:15s 0:02:45 - +Rule sol89 1989 only - May 1 11:57:05s 0:02:55 - +Rule sol89 1989 only - May 2 11:57:00s 0:03:00 - +Rule sol89 1989 only - May 3 11:56:50s 0:03:10 - +Rule sol89 1989 only - May 4 11:56:45s 0:03:15 - +Rule sol89 1989 only - May 5 11:56:40s 0:03:20 - +Rule sol89 1989 only - May 6 11:56:35s 0:03:25 - +Rule sol89 1989 only - May 7 11:56:30s 0:03:30 - +Rule sol89 1989 only - May 8 11:56:30s 0:03:30 - +Rule sol89 1989 only - May 9 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 10 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 11 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 12 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 13 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 14 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 15 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 16 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 17 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 18 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 19 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 20 11:56:30s 0:03:30 - +Rule sol89 1989 only - May 21 11:56:35s 0:03:25 - +Rule sol89 1989 only - May 22 11:56:35s 0:03:25 - +Rule sol89 1989 only - May 23 11:56:40s 0:03:20 - +Rule sol89 1989 only - May 24 11:56:45s 0:03:15 - +Rule sol89 1989 only - May 25 11:56:55s 0:03:05 - +Rule sol89 1989 only - May 26 11:57:00s 0:03:00 - +Rule sol89 1989 only - May 27 11:57:05s 0:02:55 - +Rule sol89 1989 only - May 28 11:57:15s 0:02:45 - +Rule sol89 1989 only - May 29 11:57:20s 0:02:40 - +Rule sol89 1989 only - May 30 11:57:30s 0:02:30 - +Rule sol89 1989 only - May 31 11:57:35s 0:02:25 - +Rule sol89 1989 only - Jun 1 11:57:45s 0:02:15 - +Rule sol89 1989 only - Jun 2 11:57:55s 0:02:05 - +Rule sol89 1989 only - Jun 3 11:58:05s 0:01:55 - +Rule sol89 1989 only - Jun 4 11:58:15s 0:01:45 - +Rule sol89 1989 only - Jun 5 11:58:25s 0:01:35 - +Rule sol89 1989 only - Jun 6 11:58:35s 0:01:25 - +Rule sol89 1989 only - Jun 7 11:58:45s 0:01:15 - +Rule sol89 1989 only - Jun 8 11:59:00s 0:01:00 - +Rule sol89 1989 only - Jun 9 11:59:10s 0:00:50 - +Rule sol89 1989 only - Jun 10 11:59:20s 0:00:40 - +Rule sol89 1989 only - Jun 11 11:59:35s 0:00:25 - +Rule sol89 1989 only - Jun 12 11:59:45s 0:00:15 - +Rule sol89 1989 only - Jun 13 12:00:00s 0:00:00 - +Rule sol89 1989 only - Jun 14 12:00:10s -0:00:10 - +Rule sol89 1989 only - Jun 15 12:00:25s -0:00:25 - +Rule sol89 1989 only - Jun 16 12:00:35s -0:00:35 - +Rule sol89 1989 only - Jun 17 12:00:50s -0:00:50 - +Rule sol89 1989 only - Jun 18 12:01:05s -0:01:05 - +Rule sol89 1989 only - Jun 19 12:01:15s -0:01:15 - +Rule sol89 1989 only - Jun 20 12:01:30s -0:01:30 - +Rule sol89 1989 only - Jun 21 12:01:40s -0:01:40 - +Rule sol89 1989 only - Jun 22 12:01:55s -0:01:55 - +Rule sol89 1989 only - Jun 23 12:02:10s -0:02:10 - +Rule sol89 1989 only - Jun 24 12:02:20s -0:02:20 - +Rule sol89 1989 only - Jun 25 12:02:35s -0:02:35 - +Rule sol89 1989 only - Jun 26 12:02:45s -0:02:45 - +Rule sol89 1989 only - Jun 27 12:03:00s -0:03:00 - +Rule sol89 1989 only - Jun 28 12:03:10s -0:03:10 - +Rule sol89 1989 only - Jun 29 12:03:25s -0:03:25 - +Rule sol89 1989 only - Jun 30 12:03:35s -0:03:35 - +Rule sol89 1989 only - Jul 1 12:03:45s -0:03:45 - +Rule sol89 1989 only - Jul 2 12:04:00s -0:04:00 - +Rule sol89 1989 only - Jul 3 12:04:10s -0:04:10 - +Rule sol89 1989 only - Jul 4 12:04:20s -0:04:20 - +Rule sol89 1989 only - Jul 5 12:04:30s -0:04:30 - +Rule sol89 1989 only - Jul 6 12:04:40s -0:04:40 - +Rule sol89 1989 only - Jul 7 12:04:50s -0:04:50 - +Rule sol89 1989 only - Jul 8 12:05:00s -0:05:00 - +Rule sol89 1989 only - Jul 9 12:05:10s -0:05:10 - +Rule sol89 1989 only - Jul 10 12:05:20s -0:05:20 - +Rule sol89 1989 only - Jul 11 12:05:25s -0:05:25 - +Rule sol89 1989 only - Jul 12 12:05:35s -0:05:35 - +Rule sol89 1989 only - Jul 13 12:05:40s -0:05:40 - +Rule sol89 1989 only - Jul 14 12:05:50s -0:05:50 - +Rule sol89 1989 only - Jul 15 12:05:55s -0:05:55 - +Rule sol89 1989 only - Jul 16 12:06:00s -0:06:00 - +Rule sol89 1989 only - Jul 17 12:06:05s -0:06:05 - +Rule sol89 1989 only - Jul 18 12:06:10s -0:06:10 - +Rule sol89 1989 only - Jul 19 12:06:15s -0:06:15 - +Rule sol89 1989 only - Jul 20 12:06:20s -0:06:20 - +Rule sol89 1989 only - Jul 21 12:06:20s -0:06:20 - +Rule sol89 1989 only - Jul 22 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 23 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 24 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 25 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 26 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 27 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 28 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 29 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 30 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 31 12:06:20s -0:06:20 - +Rule sol89 1989 only - Aug 1 12:06:20s -0:06:20 - +Rule sol89 1989 only - Aug 2 12:06:15s -0:06:15 - +Rule sol89 1989 only - Aug 3 12:06:10s -0:06:10 - +Rule sol89 1989 only - Aug 4 12:06:05s -0:06:05 - +Rule sol89 1989 only - Aug 5 12:06:00s -0:06:00 - +Rule sol89 1989 only - Aug 6 12:05:50s -0:05:50 - +Rule sol89 1989 only - Aug 7 12:05:45s -0:05:45 - +Rule sol89 1989 only - Aug 8 12:05:35s -0:05:35 - +Rule sol89 1989 only - Aug 9 12:05:30s -0:05:30 - +Rule sol89 1989 only - Aug 10 12:05:20s -0:05:20 - +Rule sol89 1989 only - Aug 11 12:05:10s -0:05:10 - +Rule sol89 1989 only - Aug 12 12:05:00s -0:05:00 - +Rule sol89 1989 only - Aug 13 12:04:50s -0:04:50 - +Rule sol89 1989 only - Aug 14 12:04:40s -0:04:40 - +Rule sol89 1989 only - Aug 15 12:04:30s -0:04:30 - +Rule sol89 1989 only - Aug 16 12:04:15s -0:04:15 - +Rule sol89 1989 only - Aug 17 12:04:05s -0:04:05 - +Rule sol89 1989 only - Aug 18 12:03:50s -0:03:50 - +Rule sol89 1989 only - Aug 19 12:03:35s -0:03:35 - +Rule sol89 1989 only - Aug 20 12:03:25s -0:03:25 - +Rule sol89 1989 only - Aug 21 12:03:10s -0:03:10 - +Rule sol89 1989 only - Aug 22 12:02:55s -0:02:55 - +Rule sol89 1989 only - Aug 23 12:02:40s -0:02:40 - +Rule sol89 1989 only - Aug 24 12:02:20s -0:02:20 - +Rule sol89 1989 only - Aug 25 12:02:05s -0:02:05 - +Rule sol89 1989 only - Aug 26 12:01:50s -0:01:50 - +Rule sol89 1989 only - Aug 27 12:01:30s -0:01:30 - +Rule sol89 1989 only - Aug 28 12:01:15s -0:01:15 - +Rule sol89 1989 only - Aug 29 12:00:55s -0:00:55 - +Rule sol89 1989 only - Aug 30 12:00:40s -0:00:40 - +Rule sol89 1989 only - Aug 31 12:00:20s -0:00:20 - +Rule sol89 1989 only - Sep 1 12:00:00s 0:00:00 - +Rule sol89 1989 only - Sep 2 11:59:45s 0:00:15 - +Rule sol89 1989 only - Sep 3 11:59:25s 0:00:35 - +Rule sol89 1989 only - Sep 4 11:59:05s 0:00:55 - +Rule sol89 1989 only - Sep 5 11:58:45s 0:01:15 - +Rule sol89 1989 only - Sep 6 11:58:25s 0:01:35 - +Rule sol89 1989 only - Sep 7 11:58:05s 0:01:55 - +Rule sol89 1989 only - Sep 8 11:57:45s 0:02:15 - +Rule sol89 1989 only - Sep 9 11:57:20s 0:02:40 - +Rule sol89 1989 only - Sep 10 11:57:00s 0:03:00 - +Rule sol89 1989 only - Sep 11 11:56:40s 0:03:20 - +Rule sol89 1989 only - Sep 12 11:56:20s 0:03:40 - +Rule sol89 1989 only - Sep 13 11:56:00s 0:04:00 - +Rule sol89 1989 only - Sep 14 11:55:35s 0:04:25 - +Rule sol89 1989 only - Sep 15 11:55:15s 0:04:45 - +Rule sol89 1989 only - Sep 16 11:54:55s 0:05:05 - +Rule sol89 1989 only - Sep 17 11:54:35s 0:05:25 - +Rule sol89 1989 only - Sep 18 11:54:10s 0:05:50 - +Rule sol89 1989 only - Sep 19 11:53:50s 0:06:10 - +Rule sol89 1989 only - Sep 20 11:53:30s 0:06:30 - +Rule sol89 1989 only - Sep 21 11:53:10s 0:06:50 - +Rule sol89 1989 only - Sep 22 11:52:45s 0:07:15 - +Rule sol89 1989 only - Sep 23 11:52:25s 0:07:35 - +Rule sol89 1989 only - Sep 24 11:52:05s 0:07:55 - +Rule sol89 1989 only - Sep 25 11:51:45s 0:08:15 - +Rule sol89 1989 only - Sep 26 11:51:25s 0:08:35 - +Rule sol89 1989 only - Sep 27 11:51:05s 0:08:55 - +Rule sol89 1989 only - Sep 28 11:50:40s 0:09:20 - +Rule sol89 1989 only - Sep 29 11:50:20s 0:09:40 - +Rule sol89 1989 only - Sep 30 11:50:00s 0:10:00 - +Rule sol89 1989 only - Oct 1 11:49:45s 0:10:15 - +Rule sol89 1989 only - Oct 2 11:49:25s 0:10:35 - +Rule sol89 1989 only - Oct 3 11:49:05s 0:10:55 - +Rule sol89 1989 only - Oct 4 11:48:45s 0:11:15 - +Rule sol89 1989 only - Oct 5 11:48:30s 0:11:30 - +Rule sol89 1989 only - Oct 6 11:48:10s 0:11:50 - +Rule sol89 1989 only - Oct 7 11:47:50s 0:12:10 - +Rule sol89 1989 only - Oct 8 11:47:35s 0:12:25 - +Rule sol89 1989 only - Oct 9 11:47:20s 0:12:40 - +Rule sol89 1989 only - Oct 10 11:47:00s 0:13:00 - +Rule sol89 1989 only - Oct 11 11:46:45s 0:13:15 - +Rule sol89 1989 only - Oct 12 11:46:30s 0:13:30 - +Rule sol89 1989 only - Oct 13 11:46:15s 0:13:45 - +Rule sol89 1989 only - Oct 14 11:46:00s 0:14:00 - +Rule sol89 1989 only - Oct 15 11:45:50s 0:14:10 - +Rule sol89 1989 only - Oct 16 11:45:35s 0:14:25 - +Rule sol89 1989 only - Oct 17 11:45:20s 0:14:40 - +Rule sol89 1989 only - Oct 18 11:45:10s 0:14:50 - +Rule sol89 1989 only - Oct 19 11:45:00s 0:15:00 - +Rule sol89 1989 only - Oct 20 11:44:50s 0:15:10 - +Rule sol89 1989 only - Oct 21 11:44:40s 0:15:20 - +Rule sol89 1989 only - Oct 22 11:44:30s 0:15:30 - +Rule sol89 1989 only - Oct 23 11:44:20s 0:15:40 - +Rule sol89 1989 only - Oct 24 11:44:10s 0:15:50 - +Rule sol89 1989 only - Oct 25 11:44:05s 0:15:55 - +Rule sol89 1989 only - Oct 26 11:44:00s 0:16:00 - +Rule sol89 1989 only - Oct 27 11:43:50s 0:16:10 - +Rule sol89 1989 only - Oct 28 11:43:45s 0:16:15 - +Rule sol89 1989 only - Oct 29 11:43:40s 0:16:20 - +Rule sol89 1989 only - Oct 30 11:43:40s 0:16:20 - +Rule sol89 1989 only - Oct 31 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 1 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 2 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 3 11:43:30s 0:16:30 - +Rule sol89 1989 only - Nov 4 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 5 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 6 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 7 11:43:40s 0:16:20 - +Rule sol89 1989 only - Nov 8 11:43:45s 0:16:15 - +Rule sol89 1989 only - Nov 9 11:43:50s 0:16:10 - +Rule sol89 1989 only - Nov 10 11:43:55s 0:16:05 - +Rule sol89 1989 only - Nov 11 11:44:00s 0:16:00 - +Rule sol89 1989 only - Nov 12 11:44:05s 0:15:55 - +Rule sol89 1989 only - Nov 13 11:44:15s 0:15:45 - +Rule sol89 1989 only - Nov 14 11:44:25s 0:15:35 - +Rule sol89 1989 only - Nov 15 11:44:35s 0:15:25 - +Rule sol89 1989 only - Nov 16 11:44:45s 0:15:15 - +Rule sol89 1989 only - Nov 17 11:44:55s 0:15:05 - +Rule sol89 1989 only - Nov 18 11:45:10s 0:14:50 - +Rule sol89 1989 only - Nov 19 11:45:20s 0:14:40 - +Rule sol89 1989 only - Nov 20 11:45:35s 0:14:25 - +Rule sol89 1989 only - Nov 21 11:45:50s 0:14:10 - +Rule sol89 1989 only - Nov 22 11:46:05s 0:13:55 - +Rule sol89 1989 only - Nov 23 11:46:25s 0:13:35 - +Rule sol89 1989 only - Nov 24 11:46:40s 0:13:20 - +Rule sol89 1989 only - Nov 25 11:47:00s 0:13:00 - +Rule sol89 1989 only - Nov 26 11:47:20s 0:12:40 - +Rule sol89 1989 only - Nov 27 11:47:35s 0:12:25 - +Rule sol89 1989 only - Nov 28 11:47:55s 0:12:05 - +Rule sol89 1989 only - Nov 29 11:48:20s 0:11:40 - +Rule sol89 1989 only - Nov 30 11:48:40s 0:11:20 - +Rule sol89 1989 only - Dec 1 11:49:00s 0:11:00 - +Rule sol89 1989 only - Dec 2 11:49:25s 0:10:35 - +Rule sol89 1989 only - Dec 3 11:49:50s 0:10:10 - +Rule sol89 1989 only - Dec 4 11:50:15s 0:09:45 - +Rule sol89 1989 only - Dec 5 11:50:35s 0:09:25 - +Rule sol89 1989 only - Dec 6 11:51:00s 0:09:00 - +Rule sol89 1989 only - Dec 7 11:51:30s 0:08:30 - +Rule sol89 1989 only - Dec 8 11:51:55s 0:08:05 - +Rule sol89 1989 only - Dec 9 11:52:20s 0:07:40 - +Rule sol89 1989 only - Dec 10 11:52:50s 0:07:10 - +Rule sol89 1989 only - Dec 11 11:53:15s 0:06:45 - +Rule sol89 1989 only - Dec 12 11:53:45s 0:06:15 - +Rule sol89 1989 only - Dec 13 11:54:10s 0:05:50 - +Rule sol89 1989 only - Dec 14 11:54:40s 0:05:20 - +Rule sol89 1989 only - Dec 15 11:55:10s 0:04:50 - +Rule sol89 1989 only - Dec 16 11:55:40s 0:04:20 - +Rule sol89 1989 only - Dec 17 11:56:05s 0:03:55 - +Rule sol89 1989 only - Dec 18 11:56:35s 0:03:25 - +Rule sol89 1989 only - Dec 19 11:57:05s 0:02:55 - +Rule sol89 1989 only - Dec 20 11:57:35s 0:02:25 - +Rule sol89 1989 only - Dec 21 11:58:05s 0:01:55 - +Rule sol89 1989 only - Dec 22 11:58:35s 0:01:25 - +Rule sol89 1989 only - Dec 23 11:59:05s 0:00:55 - +Rule sol89 1989 only - Dec 24 11:59:35s 0:00:25 - +Rule sol89 1989 only - Dec 25 12:00:05s -0:00:05 - +Rule sol89 1989 only - Dec 26 12:00:35s -0:00:35 - +Rule sol89 1989 only - Dec 27 12:01:05s -0:01:05 - +Rule sol89 1989 only - Dec 28 12:01:35s -0:01:35 - +Rule sol89 1989 only - Dec 29 12:02:00s -0:02:00 - +Rule sol89 1989 only - Dec 30 12:02:30s -0:02:30 - +Rule sol89 1989 only - Dec 31 12:03:00s -0:03:00 - + +# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs +# Before and after 1989, we'll operate on local mean solar time. + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Asia/Riyadh89 3:07:04 - zzz 1989 + 3:07:04 sol89 zzz 1990 + 3:07:04 - zzz +# For backward compatibility... +Link Asia/Riyadh89 Mideast/Riyadh89 diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/southamerica b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/southamerica new file mode 100644 index 0000000..3301a43 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/southamerica @@ -0,0 +1,1711 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@iana.org for general use in the future). + +# From Paul Eggert (2006-03-22): +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1990, and IATA SSIM is the source for entries afterwards. +# +# Earlier editions of these tables used the North American style (e.g. ARST and +# ARDT for Argentine Standard and Daylight Time), but the following quote +# suggests that it's better to use European style (e.g. ART and ARST). +# I suggest the use of _Summer time_ instead of the more cumbersome +# _daylight-saving time_. _Summer time_ seems to be in general use +# in Europe and South America. +# -- E O Cutler, _New York Times_ (1937-02-14), quoted in +# H L Mencken, _The American Language: Supplement I_ (1960), p 466 +# +# Earlier editions of these tables also used the North American style +# for time zones in Brazil, but this was incorrect, as Brazilians say +# "summer time". Reinaldo Goulart, a Sao Paulo businessman active in +# the railroad sector, writes (1999-07-06): +# The subject of time zones is currently a matter of discussion/debate in +# Brazil. Let's say that "the Brasilia time" is considered the +# "official time" because Brasilia is the capital city. +# The other three time zones are called "Brasilia time "minus one" or +# "plus one" or "plus two". As far as I know there is no such +# name/designation as "Eastern Time" or "Central Time". +# So I invented the following (English-language) abbreviations for now. +# Corrections are welcome! +# std dst +# -2:00 FNT FNST Fernando de Noronha +# -3:00 BRT BRST Brasilia +# -4:00 AMT AMST Amazon +# -5:00 ACT ACST Acre + +############################################################################### + +############################################################################### + +# Argentina + +# From Bob Devine (1988-01-28): +# Argentina: first Sunday in October to first Sunday in April since 1976. +# Double Summer time from 1969 to 1974. Switches at midnight. + +# From U. S. Naval Observatory (1988-01-199): +# ARGENTINA 3 H BEHIND UTC + +# From Hernan G. Otero (1995-06-26): +# I am sending modifications to the Argentine time zone table... +# AR was chosen because they are the ISO letters that represent Argentina. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Arg 1930 only - Dec 1 0:00 1:00 S +Rule Arg 1931 only - Apr 1 0:00 0 - +Rule Arg 1931 only - Oct 15 0:00 1:00 S +Rule Arg 1932 1940 - Mar 1 0:00 0 - +Rule Arg 1932 1939 - Nov 1 0:00 1:00 S +Rule Arg 1940 only - Jul 1 0:00 1:00 S +Rule Arg 1941 only - Jun 15 0:00 0 - +Rule Arg 1941 only - Oct 15 0:00 1:00 S +Rule Arg 1943 only - Aug 1 0:00 0 - +Rule Arg 1943 only - Oct 15 0:00 1:00 S +Rule Arg 1946 only - Mar 1 0:00 0 - +Rule Arg 1946 only - Oct 1 0:00 1:00 S +Rule Arg 1963 only - Oct 1 0:00 0 - +Rule Arg 1963 only - Dec 15 0:00 1:00 S +Rule Arg 1964 1966 - Mar 1 0:00 0 - +Rule Arg 1964 1966 - Oct 15 0:00 1:00 S +Rule Arg 1967 only - Apr 2 0:00 0 - +Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 S +Rule Arg 1968 1969 - Apr Sun>=1 0:00 0 - +Rule Arg 1974 only - Jan 23 0:00 1:00 S +Rule Arg 1974 only - May 1 0:00 0 - +Rule Arg 1988 only - Dec 1 0:00 1:00 S +# +# From Hernan G. Otero (1995-06-26): +# These corrections were contributed by InterSoft Argentina S.A., +# obtaining the data from the: +# Talleres de Hidrografia Naval Argentina +# (Argentine Naval Hydrography Institute) +Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 - +Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S +# +# From Hernan G. Otero (1995-06-26): +# From this moment on, the law that mandated the daylight saving +# time corrections was derogated and no more modifications +# to the time zones (for daylight saving) are now made. +# +# From Rives McDow (2000-01-10): +# On October 3, 1999, 0:00 local, Argentina implemented daylight savings time, +# which did not result in the switch of a time zone, as they stayed 9 hours +# from the International Date Line. +Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 S +# From Paul Eggert (2007-12-28): +# DST was set to expire on March 5, not March 3, but since it was converted +# to standard time on March 3 it's more convenient for us to pretend that +# it ended on March 3. +Rule Arg 2000 only - Mar 3 0:00 0 - +# +# From Peter Gradelski via Steffen Thorsen (2000-03-01): +# We just checked with our Sao Paulo office and they say the government of +# Argentina decided not to become one of the countries that go on or off DST. +# So Buenos Aires should be -3 hours from GMT at all times. +# +# From Fabian L. Arce Jofre (2000-04-04): +# The law that claimed DST for Argentina was derogated by President Fernando +# de la Rua on March 2, 2000, because it would make people spend more energy +# in the winter time, rather than less. The change took effect on March 3. +# +# From Mariano Absatz (2001-06-06): +# one of the major newspapers here in Argentina said that the 1999 +# Timezone Law (which never was effectively applied) will (would?) be +# in effect.... The article is at +# http://ar.clarin.com/diario/2001-06-06/e-01701.htm +# ... The Law itself is "Ley No 25155", sanctioned on 1999-08-25, enacted +# 1999-09-17, and published 1999-09-21. The official publication is at: +# http://www.boletin.jus.gov.ar/BON/Primera/1999/09-Septiembre/21/PDF/BO21-09-99LEG.PDF +# Regretfully, you have to subscribe (and pay) for the on-line version.... +# +# (2001-06-12): +# the timezone for Argentina will not change next Sunday. +# Apparently it will do so on Sunday 24th.... +# http://ar.clarin.com/diario/2001-06-12/s-03501.htm +# +# (2001-06-25): +# Last Friday (yes, the last working day before the date of the change), the +# Senate annulled the 1999 law that introduced the changes later postponed. +# http://www.clarin.com.ar/diario/2001-06-22/s-03601.htm +# It remains the vote of the Deputies..., but it will be the same.... +# This kind of things had always been done this way in Argentina. +# We are still -03:00 all year round in all of the country. +# +# From Steffen Thorsen (2007-12-21): +# A user (Leonardo Chaim) reported that Argentina will adopt DST.... +# all of the country (all Zone-entries) are affected. News reports like +# http://www.lanacion.com.ar/opinion/nota.asp?nota_id=973037 indicate +# that Argentina will use DST next year as well, from October to +# March, although exact rules are not given. +# +# From Jesper Norgaard Welen (2007-12-26) +# The last hurdle of Argentina DST is over, the proposal was approved in +# the lower chamber too (Deputados) with a vote 192 for and 2 against. +# By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to +# the original scanned proposal, where the dates and the zero hours are +# clear and unambiguous...This is the article about final approval: +# <a href="http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996"> +# http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996 +# </a> +# +# From Paul Eggert (2007-12-22): +# For dates after mid-2008, the following rules are my guesses and +# are quite possibly wrong, but are more likely than no DST at all. + +# From Alexander Krivenyshev (2008-09-05): +# As per message from Carlos Alberto Fonseca Arauz (Nicaragua), +# Argentina will start DST on Sunday October 19, 2008. +# +# <a href="http://www.worldtimezone.com/dst_news/dst_news_argentina03.html"> +# http://www.worldtimezone.com/dst_news/dst_news_argentina03.html +# </a> +# OR +# <a href="http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)"> +# http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish) +# </a> + +# From Rodrigo Severo (2008-10-06): +# Here is some info available at a Gentoo bug related to TZ on Argentina's DST: +# ... +# ------- Comment #1 from [jmdocile] 2008-10-06 16:28 0000 ------- +# Hi, there is a problem with timezone-data-2008e and maybe with +# timezone-data-2008f +# Argentinian law [Number] 25.155 is no longer valid. +# <a href="http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm"> +# http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm +# </a> +# The new one is law [Number] 26.350 +# <a href="http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm"> +# http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm +# </a> +# So there is no summer time in Argentina for now. + +# From Mariano Absatz (2008-10-20): +# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST in Argentina +# From 2008-10-19 until 2009-03-15 +# <a href="http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01"> +# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01 +# </a> +# +# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer 2008/2009: +# Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La Pampa, Neuquen, Rio Negro, Chubut, Santa Cruz +# and Tierra del Fuego +# <a href="http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01"> +# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01 +# </a> +# +# Press release 235 dated Saturday October 18th, from the Government of the Province of Jujuy saying +# it will not apply DST either (even when it was not included in Decree 1705/2008) +# <a href="http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc"> +# http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc +# </a> + +# From fullinet (2009-10-18): +# As announced in +# <a hef="http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356"> +# http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356 +# </a> +# (an official .gob.ar) under title: "Sin Cambio de Hora" (english: "No hour change") +# +# "Por el momento, el Gobierno Nacional resolvio no modificar la hora +# oficial, decision que estaba en estudio para su implementacion el +# domingo 18 de octubre. Desde el Ministerio de Planificacion se anuncio +# que la Argentina hoy, en estas condiciones meteorologicas, no necesita +# la modificacion del huso horario, ya que 2009 nos encuentra con +# crecimiento en la produccion y distribucion energetica." + +Rule Arg 2007 only - Dec 30 0:00 1:00 S +Rule Arg 2008 2009 - Mar Sun>=15 0:00 0 - +Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S + +# From Mariano Absatz (2004-05-21): +# Today it was officially published that the Province of Mendoza is changing +# its timezone this winter... starting tomorrow night.... +# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040521-27158-normas.pdf +# From Paul Eggert (2004-05-24): +# It's Law No. 7,210. This change is due to a public power emergency, so for +# now we'll assume it's for this year only. +# +# From Paul Eggert (2006-03-22): +# <a href="http://www.spicasc.net/horvera.html"> +# Hora de verano para la Republica Argentina (2003-06-08) +# </a> says that standard time in Argentina from 1894-10-31 +# to 1920-05-01 was -4:16:48.25. Go with this more-precise value +# over Shanks & Pottenger. +# +# From Mariano Absatz (2004-06-05): +# These media articles from a major newspaper mostly cover the current state: +# http://www.lanacion.com.ar/04/05/27/de_604825.asp +# http://www.lanacion.com.ar/04/05/28/de_605203.asp +# +# The following eight (8) provinces pulled clocks back to UTC-04:00 at +# midnight Monday May 31st. (that is, the night between 05/31 and 06/01). +# Apparently, all nine provinces would go back to UTC-03:00 at the same +# time in October 17th. +# +# Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz, +# Tierra del Fuego, Tucuman. +# +# From Mariano Absatz (2004-06-14): +# ... this weekend, the Province of Tucuman decided it'd go back to UTC-03:00 +# yesterday midnight (that is, at 24:00 Saturday 12th), since the people's +# annoyance with the change is much higher than the power savings obtained.... +# +# From Gwillim Law (2004-06-14): +# http://www.lanacion.com.ar/04/06/10/de_609078.asp ... +# "The time change in Tierra del Fuego was a conflicted decision from +# the start. The government had decreed that the measure would take +# effect on June 1, but a normative error forced the new time to begin +# three days earlier, from a Saturday to a Sunday.... +# Our understanding was that the change was originally scheduled to take place +# on June 1 at 00:00 in Chubut, Santa Cruz, Tierra del Fuego (and some other +# provinces). Sunday was May 30, only two days earlier. So the article +# contains a contradiction. I would give more credence to the Saturday/Sunday +# date than the "three days earlier" phrase, and conclude that Tierra del +# Fuego set its clocks back at 2004-05-30 00:00. +# +# From Steffen Thorsen (2004-10-05): +# The previous law 7210 which changed the province of Mendoza's time zone +# back in May have been modified slightly in a new law 7277, which set the +# new end date to 2004-09-26 (original date was 2004-10-17). +# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040924-27244-normas.pdf +# +# From Mariano Absatz (2004-10-05): +# San Juan changed from UTC-03:00 to UTC-04:00 at midnight between +# Sunday, May 30th and Monday, May 31st. It changed back to UTC-03:00 +# at midnight between Saturday, July 24th and Sunday, July 25th.... +# http://www.sanjuan.gov.ar/prensa/archivo/000329.html +# http://www.sanjuan.gov.ar/prensa/archivo/000426.html +# http://www.sanjuan.gov.ar/prensa/archivo/000441.html + +# From Alex Krivenyshev (2008-01-17): +# Here are articles that Argentina Province San Luis is planning to end DST +# as earlier as upcoming Monday January 21, 2008 or February 2008: +# +# Provincia argentina retrasa reloj y marca diferencia con resto del pais +# (Argentine Province delayed clock and mark difference with the rest of the +# country) +# <a href="http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel"> +# http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel +# </a> +# +# Es inminente que en San Luis atrasen una hora los relojes +# (It is imminent in San Luis clocks one hour delay) +# <a href="http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414"> +# http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414 +# </a> +# +# <a href="http://www.worldtimezone.net/dst_news/dst_news_argentina02.html"> +# http://www.worldtimezone.net/dst_news/dst_news_argentina02.html +# </a> + +# From Jesper Norgaard Welen (2008-01-18): +# The page of the San Luis provincial government +# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812"> +# http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812 +# </a> +# confirms what Alex Krivenyshev has earlier sent to the tz +# emailing list about that San Luis plans to return to standard +# time much earlier than the rest of the country. It also +# confirms that upon request the provinces San Juan and Mendoza +# refused to follow San Luis in this change. +# +# The change is supposed to take place Monday the 21.st at 0:00 +# hours. As far as I understand it if this goes ahead, we need +# a new timezone for San Luis (although there are also documented +# independent changes in the southamerica file of San Luis in +# 1990 and 1991 which has not been confirmed). + +# From Jesper Norgaard Welen (2008-01-25): +# Unfortunately the below page has become defunct, about the San Luis +# time change. Perhaps because it now is part of a group of pages "Most +# important pages of 2008." +# +# You can use +# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834"> +# http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834 +# </a> +# instead it seems. Or use "Buscador" from the main page of the San Luis +# government, and fill in "huso" and click OK, and you will get 3 pages +# from which the first one is identical to the above. + +# From Mariano Absatz (2008-01-28): +# I can confirm that the Province of San Luis (and so far only that +# province) decided to go back to UTC-3 effective midnight Jan 20th 2008 +# (that is, Monday 21st at 0:00 is the time the clocks were delayed back +# 1 hour), and they intend to keep UTC-3 as their timezone all year round +# (that is, unless they change their mind any minute now). +# +# So we'll have to add yet another city to 'southamerica' (I think San +# Luis city is the mos populated city in the Province, so it'd be +# America/Argentina/San_Luis... of course I can't remember if San Luis's +# history of particular changes goes along with Mendoza or San Juan :-( +# (I only remember not being able to collect hard facts about San Luis +# back in 2004, when these provinces changed to UTC-4 for a few days, I +# mailed them personally and never got an answer). + +# From Paul Eggert (2008-06-30): +# Unless otherwise specified, data are from Shanks & Pottenger through 1992, +# from the IATA otherwise. As noted below, Shanks & Pottenger say that +# America/Cordoba split into 6 subregions during 1991/1992, one of which +# was America/San_Luis, but we haven't verified this yet so for now we'll +# keep America/Cordoba a single region rather than splitting it into the +# other 5 subregions. + +# From Mariano Absatz (2009-03-13): +# Yesterday (with our usual 2-day notice) the Province of San Luis +# decided that next Sunday instead of "staying" @utc-03:00 they will go +# to utc-04:00 until the second Saturday in October... +# +# The press release is at +# <a href="http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102"> +# http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102 +# </a> +# (I couldn't find the decree, but +# <a href="http://www.sanluis.gov.ar"> +# www.sanluis.gov.ar +# <a/> +# is the official page for the Province Government). +# +# There's also a note in only one of the major national papers (La Nacin) at +# <a href="http://www.lanacion.com.ar/nota.asp?nota_id=1107912"> +# http://www.lanacion.com.ar/nota.asp?nota_id=1107912 +# </a> +# +# The press release says: +# (...) anunci que el prximo domingo a las 00:00 los puntanos debern +# atrasar una hora sus relojes. +# +# A partir de entonces, San Luis establecer el huso horario propio de +# la Provincia. De esta manera, durante el periodo del calendario anual +# 2009, el cambio horario quedar comprendido entre las 00:00 del tercer +# domingo de marzo y las 24:00 del segundo sbado de octubre. +# Quick&dirty translation +# (...) announced that next Sunday, at 00:00, Puntanos (the San Luis +# inhabitants) will have to turn back one hour their clocks +# +# Since then, San Luis will establish its own Province timezone. Thus, +# during 2009, this timezone change will run from 00:00 the third Sunday +# in March until 24:00 of the second Saturday in October. + +# From Mariano Absatz (2009-10-16): +# ...the Province of San Luis is a case in itself. +# +# The Law at +# <a href="http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276>" +# http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276 +# </a> +# is ambiguous because establishes a calendar from the 2nd Sunday in +# October at 0:00 thru the 2nd Saturday in March at 24:00 and the +# complement of that starting on the 2nd Sunday of March at 0:00 and +# ending on the 2nd Saturday of March at 24:00. +# +# This clearly breaks every time the 1st of March or October is a Sunday. +# +# IMHO, the "spirit of the Law" is to make the changes at 0:00 on the 2nd +# Sunday of October and March. +# +# The problem is that the changes in the rest of the Provinces that did +# change in 2007/2008, were made according to the Federal Law and Decrees +# that did so on the 3rd Sunday of October and March. +# +# In fact, San Luis actually switched from UTC-4 to UTC-3 last Sunday +# (October 11th) at 0:00. +# +# So I guess a new set of rules, besides "Arg", must be made and the last +# America/Argentina/San_Luis entries should change to use these... +# +# I'm enclosing a patch that does what I say... regretfully, the San Luis +# timezone must be called "WART/WARST" even when most of the time (like, +# right now) WARST == ART... that is, since last Sunday, all the country +# is using UTC-3, but in my patch, San Luis calls it "WARST" and the rest +# of the country calls it "ART". +# ... + +# From Alexander Krivenyshev (2010-04-09): +# According to news reports from El Diario de la Republica Province San +# Luis, Argentina (standard time UTC-04) will keep Daylight Saving Time +# after April 11, 2010--will continue to have same time as rest of +# Argentina (UTC-3) (no DST). +# +# Confirmaron la prórroga del huso horario de verano (Spanish) +# <a href="http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9"> +# http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9 +# </a> +# or (some English translation): +# <a href="http://www.worldtimezone.com/dst_news/dst_news_argentina08.html"> +# http://www.worldtimezone.com/dst_news/dst_news_argentina08.html +# </a> + +# From Mariano Absatz (2010-04-12): +# yes...I can confirm this...and given that San Luis keeps calling +# UTC-03:00 "summer time", we should't just let San Luis go back to "Arg" +# rules...San Luis is still using "Western ARgentina Time" and it got +# stuck on Summer daylight savings time even though the summer is over. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# +# Buenos Aires (BA), Capital Federal (CF), +Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May # Cordoba Mean Time + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 Arg AR%sT +# +# Cordoba (CB), Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN), +# Chaco (CC), Formosa (FM), Santiago del Estero (SE) +# +# Shanks & Pottenger also make the following claims, which we haven't verified: +# - Formosa switched to -3:00 on 1991-01-07. +# - Misiones switched to -3:00 on 1990-12-29. +# - Chaco switched to -3:00 on 1991-01-04. +# - Santiago del Estero switched to -4:00 on 1991-04-01, +# then to -3:00 on 1991-04-26. +# +Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 3 + -4:00 - WART 1991 Oct 20 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 Arg AR%sT +# +# Salta (SA), La Pampa (LP), Neuquen (NQ), Rio Negro (RN) +Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 3 + -4:00 - WART 1991 Oct 20 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 Arg AR%sT 2008 Oct 18 + -3:00 - ART +# +# Tucuman (TM) +Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 3 + -4:00 - WART 1991 Oct 20 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 Jun 1 + -4:00 - WART 2004 Jun 13 + -3:00 Arg AR%sT +# +# La Rioja (LR) +Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 1 + -4:00 - WART 1991 May 7 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 Jun 1 + -4:00 - WART 2004 Jun 20 + -3:00 Arg AR%sT 2008 Oct 18 + -3:00 - ART +# +# San Juan (SJ) +Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 1 + -4:00 - WART 1991 May 7 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 May 31 + -4:00 - WART 2004 Jul 25 + -3:00 Arg AR%sT 2008 Oct 18 + -3:00 - ART +# +# Jujuy (JY) +Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1990 Mar 4 + -4:00 - WART 1990 Oct 28 + -4:00 1:00 WARST 1991 Mar 17 + -4:00 - WART 1991 Oct 6 + -3:00 1:00 ARST 1992 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 Arg AR%sT 2008 Oct 18 + -3:00 - ART +# +# Catamarca (CT), Chubut (CH) +Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 3 + -4:00 - WART 1991 Oct 20 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 Jun 1 + -4:00 - WART 2004 Jun 20 + -3:00 Arg AR%sT 2008 Oct 18 + -3:00 - ART +# +# Mendoza (MZ) +Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1990 Mar 4 + -4:00 - WART 1990 Oct 15 + -4:00 1:00 WARST 1991 Mar 1 + -4:00 - WART 1991 Oct 15 + -4:00 1:00 WARST 1992 Mar 1 + -4:00 - WART 1992 Oct 18 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 May 23 + -4:00 - WART 2004 Sep 26 + -3:00 Arg AR%sT 2008 Oct 18 + -3:00 - ART +# +# San Luis (SL) + +Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 - +Rule SanLuis 2007 2009 - Oct Sun>=8 0:00 1:00 S + +Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1990 + -3:00 1:00 ARST 1990 Mar 14 + -4:00 - WART 1990 Oct 15 + -4:00 1:00 WARST 1991 Mar 1 + -4:00 - WART 1991 Jun 1 + -3:00 - ART 1999 Oct 3 + -4:00 1:00 WARST 2000 Mar 3 + -3:00 - ART 2004 May 31 + -4:00 - WART 2004 Jul 25 + -3:00 Arg AR%sT 2008 Jan 21 + -4:00 SanLuis WAR%sT +# +# Santa Cruz (SC) +Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May # Cordoba Mean Time + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 Jun 1 + -4:00 - WART 2004 Jun 20 + -3:00 Arg AR%sT 2008 Oct 18 + -3:00 - ART +# +# Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF) +Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May # Cordoba Mean Time + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 May 30 + -4:00 - WART 2004 Jun 20 + -3:00 Arg AR%sT 2008 Oct 18 + -3:00 - ART + +# Aruba +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Aruba -4:40:24 - LMT 1912 Feb 12 # Oranjestad + -4:30 - ANT 1965 # Netherlands Antilles Time + -4:00 - AST + +# Bolivia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/La_Paz -4:32:36 - LMT 1890 + -4:32:36 - CMT 1931 Oct 15 # Calamarca MT + -4:32:36 1:00 BOST 1932 Mar 21 # Bolivia ST + -4:00 - BOT # Bolivia Time + +# Brazil + +# From Paul Eggert (1993-11-18): +# The mayor of Rio recently attempted to change the time zone rules +# just in his city, in order to leave more summer time for the tourist trade. +# The rule change lasted only part of the day; +# the federal government refused to follow the city's rules, and business +# was in a chaos, so the mayor backed down that afternoon. + +# From IATA SSIM (1996-02): +# _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS), +# Santa Catarina (SC), Parana (PR), Sao Paulo (SP), Rio de Janeiro (RJ), +# Espirito Santo (ES), Minas Gerais (MG), Bahia (BA), Goias (GO), +# Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL]. +# [The last three states are new to this issue of the IATA SSIM.] + +# From Gwillim Law (1996-10-07): +# Geography, history (Tocantins was part of Goias until 1989), and other +# sources of time zone information lead me to believe that AL, SE, and TO were +# always in BR1, and so the only change was whether or not they observed DST.... +# The earliest issue of the SSIM I have is 2/91. Each issue from then until +# 9/95 says that DST is observed only in the ten states I quoted from 9/95, +# along with Mato Grosso (MT) and Mato Grosso do Sul (MS), which are in BR2 +# (UTC-4).... The other two time zones given for Brazil are BR3, which is +# UTC-5, no DST, and applies only in the state of Acre (AC); and BR4, which is +# UTC-2, and applies to Fernando de Noronha (formerly FN, but I believe it's +# become part of the state of Pernambuco). The boundary between BR1 and BR2 +# has never been clearly stated. They've simply been called East and West. +# However, some conclusions can be drawn from another IATA manual: the Airline +# Coding Directory, which lists close to 400 airports in Brazil. For each +# airport it gives a time zone which is coded to the SSIM. From that +# information, I'm led to conclude that the states of Amapa (AP), Ceara (CE), +# Maranhao (MA), Paraiba (PR), Pernambuco (PE), Piaui (PI), and Rio Grande do +# Norte (RN), and the eastern part of Para (PA) are all in BR1 without DST. + +# From Marcos Tadeu (1998-09-27): +# <a href="http://pcdsh01.on.br/verao1.html"> +# Brazilian official page +# </a> + +# From Jesper Norgaard (2000-11-03): +# [For an official list of which regions in Brazil use which time zones, see:] +# http://pcdsh01.on.br/Fusbr.htm +# http://pcdsh01.on.br/Fusbrhv.htm + +# From Celso Doria via David Madeo (2002-10-09): +# The reason for the delay this year has to do with elections in Brazil. +# +# Unlike in the United States, elections in Brazil are 100% computerized and +# the results are known almost immediately. Yesterday, it was the first +# round of the elections when 115 million Brazilians voted for President, +# Governor, Senators, Federal Deputies, and State Deputies. Nobody is +# counting (or re-counting) votes anymore and we know there will be a second +# round for the Presidency and also for some Governors. The 2nd round will +# take place on October 27th. +# +# The reason why the DST will only begin November 3rd is that the thousands +# of electoral machines used cannot have their time changed, and since the +# Constitution says the elections must begin at 8:00 AM and end at 5:00 PM, +# the Government decided to postpone DST, instead of changing the Constitution +# (maybe, for the next elections, it will be possible to change the clock)... + +# From Rodrigo Severo (2004-10-04): +# It's just the biannual change made necessary by the much hyped, supposedly +# modern Brazilian eletronic voting machines which, apparently, can't deal +# with a time change between the first and the second rounds of the elections. + +# From Steffen Thorsen (2007-09-20): +# Brazil will start DST on 2007-10-14 00:00 and end on 2008-02-17 00:00: +# http://www.mme.gov.br/site/news/detail.do;jsessionid=BBA06811AFCAAC28F0285210913513DA?newsId=13975 + +# From Paul Schulze (2008-06-24): +# ...by law number 11.662 of April 24, 2008 (published in the "Diario +# Oficial da Uniao"...) in Brazil there are changes in the timezones, +# effective today (00:00am at June 24, 2008) as follows: +# +# a) The timezone UTC+5 is e[x]tinguished, with all the Acre state and the +# part of the Amazonas state that had this timezone now being put to the +# timezone UTC+4 +# b) The whole Para state now is put at timezone UTC+3, instead of just +# part of it, as was before. +# +# This change follows a proposal of senator Tiao Viana of Acre state, that +# proposed it due to concerns about open television channels displaying +# programs inappropriate to youths in the states that had the timezone +# UTC+5 too early in the night. In the occasion, some more corrections +# were proposed, trying to unify the timezones of any given state. This +# change modifies timezone rules defined in decree 2.784 of 18 June, +# 1913. + +# From Rodrigo Severo (2008-06-24): +# Just correcting the URL: +# <a href="https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008"> +# https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008 +# </a> +# +# As a result of the above Decree I believe the America/Rio_Branco +# timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall +# be created to represent the...west side of the Para State. I +# suggest this new timezone be called Santarem as the most +# important/populated city in the affected area. +# +# This new timezone would be the same as the Rio_Branco timezone up to +# the 2008/06/24 change which would be to UTC-3 instead of UTC-4. + +# From Alex Krivenyshev (2008-06-24): +# This is a quick reference page for New and Old Brazil Time Zones map. +# <a href="http://www.worldtimezone.com/brazil-time-new-old.php"> +# http://www.worldtimezone.com/brazil-time-new-old.php +# </a> +# +# - 4 time zones replaced by 3 time zones-eliminating time zone UTC- 05 +# (state Acre and the part of the Amazonas will be UTC/GMT- 04) - western +# part of Par state is moving to one timezone UTC- 03 (from UTC -04). + +# From Paul Eggert (2002-10-10): +# The official decrees referenced below are mostly taken from +# <a href="http://pcdsh01.on.br/DecHV.html"> +# Decretos sobre o Horario de Verao no Brasil +# </a>. + +# From Steffen Thorsen (2008-08-29): +# As announced by the government and many newspapers in Brazil late +# yesterday, Brazil will start DST on 2008-10-19 (need to change rule) and +# it will end on 2009-02-15 (current rule for Brazil is fine). Based on +# past years experience with the elections, there was a good chance that +# the start was postponed to November, but it did not happen this year. +# +# It has not yet been posted to http://pcdsh01.on.br/DecHV.html +# +# An official page about it: +# <a href="http://www.mme.gov.br/site/news/detail.do?newsId=16722"> +# http://www.mme.gov.br/site/news/detail.do?newsId=16722 +# </a> +# Note that this link does not always work directly, but must be accessed +# by going to +# <a href="http://www.mme.gov.br/first"> +# http://www.mme.gov.br/first +# </a> +# +# One example link that works directly: +# <a href="http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54"> +# http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54 +# (Portuguese) +# </a> +# +# We have a written a short article about it as well: +# <a href="http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html"> +# http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html +# </a> +# +# From Alexander Krivenyshev (2011-10-04): +# State Bahia will return to Daylight savings time this year after 8 years off. +# The announcement was made by Governor Jaques Wagner in an interview to a +# television station in Salvador. + +# In Portuguese: +# <a href="http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html"> +# http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html +# </a> and +# <a href="http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html"> +# http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html +# </a> + +# From Guilherme Bernardes Rodrigues (2011-10-07): +# There is news in the media, however there is still no decree about it. +# I just send a e-mail to Zulmira Brando at +# <a href="http://pcdsh01.on.br/">http://pcdsh01.on.br/</a> the +# oficial agency about time in Brazil, and she confirmed that the old rule is +# still in force. + +# From Guilherme Bernardes Rodrigues (2011-10-14) +# It's official, the President signed a decree that includes Bahia in summer +# time. +# [ and in a second message (same day): ] +# I found the decree. +# +# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011 +# Link : +# <a href="http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6"> +# http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6 +# </a> + +# From Kelley Cook (2012-10-16): +# The governor of state of Bahia in Brazil announced on Thursday that +# due to public pressure, he is reversing the DST policy they implemented +# last year and will not be going to Summer Time on October 21st.... +# http://www.correio24horas.com.br/r/artigo/apos-pressoes-wagner-suspende-horario-de-verao-na-bahia + +# From Rodrigo Severo (2012-10-16): +# Tocantins state will have DST. +# http://noticias.terra.com.br/brasil/noticias/0,,OI6232536-EI306.html + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Decree <a href="http://pcdsh01.on.br/HV20466.htm">20,466</a> (1931-10-01) +# Decree <a href="http://pcdsh01.on.br/HV21896.htm">21,896</a> (1932-01-10) +Rule Brazil 1931 only - Oct 3 11:00 1:00 S +Rule Brazil 1932 1933 - Apr 1 0:00 0 - +Rule Brazil 1932 only - Oct 3 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/HV23195.htm">23,195</a> (1933-10-10) +# revoked DST. +# Decree <a href="http://pcdsh01.on.br/HV27496.htm">27,496</a> (1949-11-24) +# Decree <a href="http://pcdsh01.on.br/HV27998.htm">27,998</a> (1950-04-13) +Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S +Rule Brazil 1950 only - Apr 16 1:00 0 - +Rule Brazil 1951 1952 - Apr 1 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV32308.htm">32,308</a> (1953-02-24) +Rule Brazil 1953 only - Mar 1 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV34724.htm">34,724</a> (1953-11-30) +# revoked DST. +# Decree <a href="http://pcdsh01.on.br/HV52700.htm">52,700</a> (1963-10-18) +# established DST from 1963-10-23 00:00 to 1964-02-29 00:00 +# in SP, RJ, GB, MG, ES, due to the prolongation of the drought. +# Decree <a href="http://pcdsh01.on.br/HV53071.htm">53,071</a> (1963-12-03) +# extended the above decree to all of the national territory on 12-09. +Rule Brazil 1963 only - Dec 9 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/HV53604.htm">53,604</a> (1964-02-25) +# extended summer time by one day to 1964-03-01 00:00 (start of school). +Rule Brazil 1964 only - Mar 1 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV55639.htm">55,639</a> (1965-01-27) +Rule Brazil 1965 only - Jan 31 0:00 1:00 S +Rule Brazil 1965 only - Mar 31 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV57303.htm">57,303</a> (1965-11-22) +Rule Brazil 1965 only - Dec 1 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/HV57843.htm">57,843</a> (1966-02-18) +Rule Brazil 1966 1968 - Mar 1 0:00 0 - +Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/HV63429.htm">63,429</a> (1968-10-15) +# revoked DST. +# Decree <a href="http://pcdsh01.on.br/HV91698.htm">91,698</a> (1985-09-27) +Rule Brazil 1985 only - Nov 2 0:00 1:00 S +# Decree 92,310 (1986-01-21) +# Decree 92,463 (1986-03-13) +Rule Brazil 1986 only - Mar 15 0:00 0 - +# Decree 93,316 (1986-10-01) +Rule Brazil 1986 only - Oct 25 0:00 1:00 S +Rule Brazil 1987 only - Feb 14 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV94922.htm">94,922</a> (1987-09-22) +Rule Brazil 1987 only - Oct 25 0:00 1:00 S +Rule Brazil 1988 only - Feb 7 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV96676.htm">96,676</a> (1988-09-12) +# except for the states of AC, AM, PA, RR, RO, and AP (then a territory) +Rule Brazil 1988 only - Oct 16 0:00 1:00 S +Rule Brazil 1989 only - Jan 29 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV98077.htm">98,077</a> (1989-08-21) +# with the same exceptions +Rule Brazil 1989 only - Oct 15 0:00 1:00 S +Rule Brazil 1990 only - Feb 11 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV99530.htm">99,530</a> (1990-09-17) +# adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF. +# Decree 99,629 (1990-10-19) adds BA, MT. +Rule Brazil 1990 only - Oct 21 0:00 1:00 S +Rule Brazil 1991 only - Feb 17 0:00 0 - +# <a href="http://pcdsh01.on.br/HV1991.htm">Unnumbered decree</a> (1991-09-25) +# adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF. +Rule Brazil 1991 only - Oct 20 0:00 1:00 S +Rule Brazil 1992 only - Feb 9 0:00 0 - +# <a href="http://pcdsh01.on.br/HV1992.htm">Unnumbered decree</a> (1992-10-16) +# adopted by same states. +Rule Brazil 1992 only - Oct 25 0:00 1:00 S +Rule Brazil 1993 only - Jan 31 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV942.htm">942</a> (1993-09-28) +# adopted by same states, plus AM. +# Decree <a href="http://pcdsh01.on.br/HV1252.htm">1,252</a> (1994-09-22; +# web page corrected 2004-01-07) adopted by same states, minus AM. +# Decree <a href="http://pcdsh01.on.br/HV1636.htm">1,636</a> (1995-09-14) +# adopted by same states, plus MT and TO. +# Decree <a href="http://pcdsh01.on.br/HV1674.htm">1,674</a> (1995-10-13) +# adds AL, SE. +Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S +Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 - +Rule Brazil 1996 only - Feb 11 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV2000.htm">2,000</a> (1996-09-04) +# adopted by same states, minus AL, SE. +Rule Brazil 1996 only - Oct 6 0:00 1:00 S +Rule Brazil 1997 only - Feb 16 0:00 0 - +# From Daniel C. Sobral (1998-02-12): +# In 1997, the DS began on October 6. The stated reason was that +# because international television networks ignored Brazil's policy on DS, +# they bought the wrong times on satellite for coverage of Pope's visit. +# This year, the ending date of DS was postponed to March 1 +# to help dealing with the shortages of electric power. +# +# Decree 2,317 (1997-09-04), adopted by same states. +Rule Brazil 1997 only - Oct 6 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/figuras/HV2495.JPG">2,495</a> +# (1998-02-10) +Rule Brazil 1998 only - Mar 1 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/figuras/Hv98.jpg">2,780</a> (1998-09-11) +# adopted by the same states as before. +Rule Brazil 1998 only - Oct 11 0:00 1:00 S +Rule Brazil 1999 only - Feb 21 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/figuras/HV3150.gif">3,150</a> +# (1999-08-23) adopted by same states. +# Decree <a href="http://pcdsh01.on.br/DecHV99.gif">3,188</a> (1999-09-30) +# adds SE, AL, PB, PE, RN, CE, PI, MA and RR. +Rule Brazil 1999 only - Oct 3 0:00 1:00 S +Rule Brazil 2000 only - Feb 27 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/DEC3592.htm">3,592</a> (2000-09-06) +# adopted by the same states as before. +# Decree <a href="http://pcdsh01.on.br/Dec3630.jpg">3,630</a> (2000-10-13) +# repeals DST in PE and RR, effective 2000-10-15 00:00. +# Decree <a href="http://pcdsh01.on.br/Dec3632.jpg">3,632</a> (2000-10-17) +# repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00. +# Decree <a href="http://pcdsh01.on.br/figuras/HV3916.gif">3,916</a> +# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE. +Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S +Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 - +# Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE. +# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm">4,399</a> +Rule Brazil 2002 only - Nov 3 0:00 1:00 S +# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO. +# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm">4,844</a> +Rule Brazil 2003 only - Oct 19 0:00 1:00 S +# Decree 5,223 (2004-10-01) reestablishes DST in MT. +# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm">5,223</a> +Rule Brazil 2004 only - Nov 2 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/DecHV5539.gif">5,539</a> (2005-09-19), +# adopted by the same states as before. +Rule Brazil 2005 only - Oct 16 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/DecHV5920.gif">5,920</a> (2006-10-03), +# adopted by the same states as before. +Rule Brazil 2006 only - Nov 5 0:00 1:00 S +Rule Brazil 2007 only - Feb 25 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/DecHV6212.gif">6,212</a> (2007-09-26), +# adopted by the same states as before. +Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 S +# From Frederico A. C. Neves (2008-09-10): +# Acording to this decree +# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm"> +# http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm +# </a> +# [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the +# 3rd Feb Sunday. There is an exception on the return date when this is +# the Carnival Sunday then the return date will be the next Sunday... +Rule Brazil 2008 max - Oct Sun>=15 0:00 1:00 S +Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 - +Rule Brazil 2012 only - Feb Sun>=22 0:00 0 - +Rule Brazil 2013 2014 - Feb Sun>=15 0:00 0 - +Rule Brazil 2015 only - Feb Sun>=22 0:00 0 - +Rule Brazil 2016 2022 - Feb Sun>=15 0:00 0 - +Rule Brazil 2023 only - Feb Sun>=22 0:00 0 - +Rule Brazil 2024 2025 - Feb Sun>=15 0:00 0 - +Rule Brazil 2026 only - Feb Sun>=22 0:00 0 - +Rule Brazil 2027 2033 - Feb Sun>=15 0:00 0 - +Rule Brazil 2034 only - Feb Sun>=22 0:00 0 - +Rule Brazil 2035 2036 - Feb Sun>=15 0:00 0 - +Rule Brazil 2037 only - Feb Sun>=22 0:00 0 - +# From Arthur David Olson (2008-09-29): +# The next is wrong in some years but is better than nothing. +Rule Brazil 2038 max - Feb Sun>=15 0:00 0 - + +# The latest ruleset listed above says that the following states observe DST: +# DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# +# Fernando de Noronha (administratively part of PE) +Zone America/Noronha -2:09:40 - LMT 1914 + -2:00 Brazil FN%sT 1990 Sep 17 + -2:00 - FNT 1999 Sep 30 + -2:00 Brazil FN%sT 2000 Oct 15 + -2:00 - FNT 2001 Sep 13 + -2:00 Brazil FN%sT 2002 Oct 1 + -2:00 - FNT +# Other Atlantic islands have no permanent settlement. +# These include Trindade and Martin Vaz (administratively part of ES), +# Atol das Rocas (RN), and Penedos de Sao Pedro e Sao Paulo (PE). +# Fernando de Noronha was a separate territory from 1942-09-02 to 1989-01-01; +# it also included the Penedos. +# +# Amapa (AP), east Para (PA) +# East Para includes Belem, Maraba, Serra Norte, and Sao Felix do Xingu. +# The division between east and west Para is the river Xingu. +# In the north a very small part from the river Javary (now Jari I guess, +# the border with Amapa) to the Amazon, then to the Xingu. +Zone America/Belem -3:13:56 - LMT 1914 + -3:00 Brazil BR%sT 1988 Sep 12 + -3:00 - BRT +# +# west Para (PA) +# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem. +Zone America/Santarem -3:38:48 - LMT 1914 + -4:00 Brazil AM%sT 1988 Sep 12 + -4:00 - AMT 2008 Jun 24 00:00 + -3:00 - BRT +# +# Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN), +# Paraiba (PB) +Zone America/Fortaleza -2:34:00 - LMT 1914 + -3:00 Brazil BR%sT 1990 Sep 17 + -3:00 - BRT 1999 Sep 30 + -3:00 Brazil BR%sT 2000 Oct 22 + -3:00 - BRT 2001 Sep 13 + -3:00 Brazil BR%sT 2002 Oct 1 + -3:00 - BRT +# +# Pernambuco (PE) (except Atlantic islands) +Zone America/Recife -2:19:36 - LMT 1914 + -3:00 Brazil BR%sT 1990 Sep 17 + -3:00 - BRT 1999 Sep 30 + -3:00 Brazil BR%sT 2000 Oct 15 + -3:00 - BRT 2001 Sep 13 + -3:00 Brazil BR%sT 2002 Oct 1 + -3:00 - BRT +# +# Tocantins (TO) +Zone America/Araguaina -3:12:48 - LMT 1914 + -3:00 Brazil BR%sT 1990 Sep 17 + -3:00 - BRT 1995 Sep 14 + -3:00 Brazil BR%sT 2003 Sep 24 + -3:00 - BRT 2012 Oct 21 + -3:00 Brazil BR%sT +# +# Alagoas (AL), Sergipe (SE) +Zone America/Maceio -2:22:52 - LMT 1914 + -3:00 Brazil BR%sT 1990 Sep 17 + -3:00 - BRT 1995 Oct 13 + -3:00 Brazil BR%sT 1996 Sep 4 + -3:00 - BRT 1999 Sep 30 + -3:00 Brazil BR%sT 2000 Oct 22 + -3:00 - BRT 2001 Sep 13 + -3:00 Brazil BR%sT 2002 Oct 1 + -3:00 - BRT +# +# Bahia (BA) +# There are too many Salvadors elsewhere, so use America/Bahia instead +# of America/Salvador. +Zone America/Bahia -2:34:04 - LMT 1914 + -3:00 Brazil BR%sT 2003 Sep 24 + -3:00 - BRT 2011 Oct 16 + -3:00 Brazil BR%sT 2012 Oct 21 + -3:00 - BRT +# +# Goias (GO), Distrito Federal (DF), Minas Gerais (MG), +# Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR), +# Santa Catarina (SC), Rio Grande do Sul (RS) +Zone America/Sao_Paulo -3:06:28 - LMT 1914 + -3:00 Brazil BR%sT 1963 Oct 23 00:00 + -3:00 1:00 BRST 1964 + -3:00 Brazil BR%sT +# +# Mato Grosso do Sul (MS) +Zone America/Campo_Grande -3:38:28 - LMT 1914 + -4:00 Brazil AM%sT +# +# Mato Grosso (MT) +Zone America/Cuiaba -3:44:20 - LMT 1914 + -4:00 Brazil AM%sT 2003 Sep 24 + -4:00 - AMT 2004 Oct 1 + -4:00 Brazil AM%sT +# +# Rondonia (RO) +Zone America/Porto_Velho -4:15:36 - LMT 1914 + -4:00 Brazil AM%sT 1988 Sep 12 + -4:00 - AMT +# +# Roraima (RR) +Zone America/Boa_Vista -4:02:40 - LMT 1914 + -4:00 Brazil AM%sT 1988 Sep 12 + -4:00 - AMT 1999 Sep 30 + -4:00 Brazil AM%sT 2000 Oct 15 + -4:00 - AMT +# +# east Amazonas (AM): Boca do Acre, Jutai, Manaus, Floriano Peixoto +# The great circle line from Tabatinga to Porto Acre divides +# east from west Amazonas. +Zone America/Manaus -4:00:04 - LMT 1914 + -4:00 Brazil AM%sT 1988 Sep 12 + -4:00 - AMT 1993 Sep 28 + -4:00 Brazil AM%sT 1994 Sep 22 + -4:00 - AMT +# +# west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant, +# Eirunepe, Envira, Ipixuna +Zone America/Eirunepe -4:39:28 - LMT 1914 + -5:00 Brazil AC%sT 1988 Sep 12 + -5:00 - ACT 1993 Sep 28 + -5:00 Brazil AC%sT 1994 Sep 22 + -5:00 - ACT 2008 Jun 24 00:00 + -4:00 - AMT +# +# Acre (AC) +Zone America/Rio_Branco -4:31:12 - LMT 1914 + -5:00 Brazil AC%sT 1988 Sep 12 + -5:00 - ACT 2008 Jun 24 00:00 + -4:00 - AMT + +# Chile + +# From Eduardo Krell (1995-10-19): +# The law says to switch to DST at midnight [24:00] on the second SATURDAY +# of October.... The law is the same for March and October. +# (1998-09-29): +# Because of the drought this year, the government decided to go into +# DST earlier (saturday 9/26 at 24:00). This is a one-time change only ... +# (unless there's another dry season next year, I guess). + +# From Julio I. Pacheco Troncoso (1999-03-18): +# Because of the same drought, the government decided to end DST later, +# on April 3, (one-time change). + +# From Oscar van Vlijmen (2006-10-08): +# http://www.horaoficial.cl/cambio.htm + +# From Jesper Norgaard Welen (2006-10-08): +# I think that there are some obvious mistakes in the suggested link +# from Oscar van Vlijmen,... for instance entry 66 says that GMT-4 +# ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15 +# (they should have been 1990-09-15 and 1990-09-16 respectively), but +# anyhow it clears up some doubts too. + +# From Paul Eggert (2006-12-27): +# The following data for Chile and America/Santiago are from +# <http://www.horaoficial.cl/horaof.htm> (2006-09-20), transcribed by +# Jesper Norgaard Welen. The data for Pacific/Easter are from Shanks +# & Pottenger, except with DST transitions after 1932 cloned from +# America/Santiago. The pre-1980 Pacific/Easter data are dubious, +# but we have no other source. + +# From German Poo-Caaman~o (2008-03-03): +# Due to drought, Chile extends Daylight Time in three weeks. This +# is one-time change (Saturday 3/29 at 24:00 for America/Santiago +# and Saturday 3/29 at 22:00 for Pacific/Easter) +# The Supreme Decree is located at +# <a href="http://www.shoa.cl/servicios/supremo316.pdf"> +# http://www.shoa.cl/servicios/supremo316.pdf +# </a> +# and the instructions for 2008 are located in: +# <a href="http://www.horaoficial.cl/cambio.htm"> +# http://www.horaoficial.cl/cambio.htm +# </a>. + +# From Jose Miguel Garrido (2008-03-05): +# ... +# You could see the announces of the change on +# <a href="http://www.shoa.cl/noticias/2008/04hora/hora.htm"> +# http://www.shoa.cl/noticias/2008/04hora/hora.htm +# </a>. + +# From Angel Chiang (2010-03-04): +# Subject: DST in Chile exceptionally extended to 3 April due to earthquake +# <a href="http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098"> +# http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098 +# </a> +# (in Spanish, last paragraph). +# +# This is breaking news. There should be more information available later. + +# From Arthur Daivd Olson (2010-03-06): +# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch. + +# From Glenn Eychaner (2011-03-02): [geychaner@mac.com] +# It appears that the Chilean government has decided to postpone the +# change from summer time to winter time again, by three weeks to April +# 2nd: +# <a href="http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651"> +# http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651 +# </a> +# +# This is not yet reflected in the offical "cambio de hora" site, but +# probably will be soon: +# <a href="http://www.horaoficial.cl/cambio.htm"> +# http://www.horaoficial.cl/cambio.htm +# </a> + +# From Arthur David Olson (2011-03-02): +# The emol.com article mentions a water shortage as the cause of the +# postponement, which may mean that it's not a permanent change. + +# From Glenn Eychaner (2011-03-28): +# The article: +# <a href="http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}"> +# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E} +# </a> +# +# In English: +# Chile's clocks will go back an hour this year on the 7th of May instead +# of this Saturday. They will go forward again the 3rd Saturday in +# August, not in October as they have since 1968. This is a pilot plan +# which will be reevaluated in 2012. + +# From Mauricio Parada (2012-02-22), translated by Glenn Eychaner (2012-02-23): +# As stated in the website of the Chilean Energy Ministry +# http://www.minenergia.cl/ministerio/noticias/generales/gobierno-anuncia-fechas-de-cambio-de.html +# The Chilean Government has decided to postpone the entrance into winter time +# (to leave DST) from March 11 2012 to April 28th 2012. The decision has not +# been yet formalized but it will within the next days. +# Quote from the website communication: +# +# 6. For the year 2012, the dates of entry into winter time will be as follows: +# a. Saturday April 28, 2012, clocks should go back 60 minutes; that is, at +# 23:59:59, instead of passing to 0:00, the time should be adjusted to be 23:00 +# of the same day. +# b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is, +# at 23:59:59, instead of passing to 0:00, the time should be adjusted to be +# 01:00 on September 2. +# +# Note that...this is yet another "temporary" change that will be reevaluated +# AGAIN in 2013. + +# NOTE: ChileAQ rules for Antarctic bases are stored separately in the +# 'antarctica' file. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Chile 1927 1932 - Sep 1 0:00 1:00 S +Rule Chile 1928 1932 - Apr 1 0:00 0 - +Rule Chile 1942 only - Jun 1 4:00u 0 - +Rule Chile 1942 only - Aug 1 5:00u 1:00 S +Rule Chile 1946 only - Jul 15 4:00u 1:00 S +Rule Chile 1946 only - Sep 1 3:00u 0:00 - +Rule Chile 1947 only - Apr 1 4:00u 0 - +Rule Chile 1968 only - Nov 3 4:00u 1:00 S +Rule Chile 1969 only - Mar 30 3:00u 0 - +Rule Chile 1969 only - Nov 23 4:00u 1:00 S +Rule Chile 1970 only - Mar 29 3:00u 0 - +Rule Chile 1971 only - Mar 14 3:00u 0 - +Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 S +Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 - +Rule Chile 1973 only - Sep 30 4:00u 1:00 S +Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S +Rule Chile 1987 only - Apr 12 3:00u 0 - +Rule Chile 1988 1989 - Mar Sun>=9 3:00u 0 - +Rule Chile 1988 only - Oct Sun>=1 4:00u 1:00 S +Rule Chile 1989 only - Oct Sun>=9 4:00u 1:00 S +Rule Chile 1990 only - Mar 18 3:00u 0 - +Rule Chile 1990 only - Sep 16 4:00u 1:00 S +Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 - +Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S +Rule Chile 1997 only - Mar 30 3:00u 0 - +Rule Chile 1998 only - Mar Sun>=9 3:00u 0 - +Rule Chile 1998 only - Sep 27 4:00u 1:00 S +Rule Chile 1999 only - Apr 4 3:00u 0 - +Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 S +Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 - +# N.B.: the end of March 29 in Chile is March 30 in Universal time, +# which is used below in specifying the transition. +Rule Chile 2008 only - Mar 30 3:00u 0 - +Rule Chile 2009 only - Mar Sun>=9 3:00u 0 - +Rule Chile 2010 only - Apr Sun>=1 3:00u 0 - +Rule Chile 2011 only - May Sun>=2 3:00u 0 - +Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S +Rule Chile 2012 only - Apr Sun>=23 3:00u 0 - +Rule Chile 2012 only - Sep Sun>=2 4:00u 1:00 S +Rule Chile 2013 max - Mar Sun>=9 3:00u 0 - +Rule Chile 2013 max - Oct Sun>=9 4:00u 1:00 S +# IATA SSIM anomalies: (1992-02) says 1992-03-14; +# (1996-09) says 1998-03-08. Ignore these. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Santiago -4:42:46 - LMT 1890 + -4:42:46 - SMT 1910 # Santiago Mean Time + -5:00 - CLT 1916 Jul 1 # Chile Time + -4:42:46 - SMT 1918 Sep 1 # Santiago Mean Time + -4:00 - CLT 1919 Jul 1 # Chile Time + -4:42:46 - SMT 1927 Sep 1 # Santiago Mean Time + -5:00 Chile CL%sT 1947 May 22 # Chile Time + -4:00 Chile CL%sT +Zone Pacific/Easter -7:17:44 - LMT 1890 + -7:17:28 - EMT 1932 Sep # Easter Mean Time + -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter I Time + -6:00 Chile EAS%sT +# +# Sala y Gomez Island is like Pacific/Easter. +# Other Chilean locations, including Juan Fernandez Is, San Ambrosio, +# San Felix, and Antarctic bases, are like America/Santiago. + +# Colombia +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule CO 1992 only - May 3 0:00 1:00 S +Rule CO 1993 only - Apr 4 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Bogota -4:56:20 - LMT 1884 Mar 13 + -4:56:20 - BMT 1914 Nov 23 # Bogota Mean Time + -5:00 CO CO%sT # Colombia Time +# Malpelo, Providencia, San Andres +# no information; probably like America/Bogota + +# Curacao +# +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger say that The Bottom and Philipsburg have been at +# -4:00 since standard time was introduced on 1912-03-02; and that +# Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from +# 1912-02-02 to 1965-01-01. The former is dubious, since S&P also say +# Saba Island has been like Curacao. +# This all predates our 1970 cutoff, though. +# +# By July 2007 Curacao and St Maarten are planned to become +# associated states within the Netherlands, much like Aruba; +# Bonaire, Saba and St Eustatius would become directly part of the +# Netherlands as Kingdom Islands. This won't affect their time zones +# though, as far as we know. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Curacao -4:35:44 - LMT 1912 Feb 12 # Willemstad + -4:30 - ANT 1965 # Netherlands Antilles Time + -4:00 - AST + +# From Arthur David Olson (2011-06-15): +# At least for now, use links for places with new iso3166 codes. +# The name "Lower Prince's Quarter" is both longer than fourteen charaters +# and contains an apostrophe; use "Lower_Princes" below. + +Link America/Curacao America/Lower_Princes # Sint Maarten +Link America/Curacao America/Kralendijk # Bonaire, Sint Estatius and Saba + +# Ecuador +# +# From Paul Eggert (2007-03-04): +# Apparently Ecuador had a failed experiment with DST in 1992. +# <http://midena.gov.ec/content/view/1261/208/> (2007-02-27) and +# <http://www.hoy.com.ec/NoticiaNue.asp?row_id=249856> (2006-11-06) both +# talk about "hora Sixto". Leave this alone for now, as we have no data. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Guayaquil -5:19:20 - LMT 1890 + -5:14:00 - QMT 1931 # Quito Mean Time + -5:00 - ECT # Ecuador Time +Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno + -5:00 - ECT 1986 + -6:00 - GALT # Galapagos Time + +# Falklands + +# From Paul Eggert (2006-03-22): +# Between 1990 and 2000 inclusive, Shanks & Pottenger and the IATA agree except +# the IATA gives 1996-09-08. Go with Shanks & Pottenger. + +# From Falkland Islands Government Office, London (2001-01-22) +# via Jesper Norgaard: +# ... the clocks revert back to Local Mean Time at 2 am on Sunday 15 +# April 2001 and advance one hour to summer time at 2 am on Sunday 2 +# September. It is anticipated that the clocks will revert back at 2 +# am on Sunday 21 April 2002 and advance to summer time at 2 am on +# Sunday 1 September. + +# From Rives McDow (2001-02-13): +# +# I have communicated several times with people there, and the last +# time I had communications that was helpful was in 1998. Here is +# what was said then: +# +# "The general rule was that Stanley used daylight saving and the Camp +# did not. However for various reasons many people in the Camp have +# started to use daylight saving (known locally as 'Stanley Time') +# There is no rule as to who uses daylight saving - it is a matter of +# personal choice and so it is impossible to draw a map showing who +# uses it and who does not. Any list would be out of date as soon as +# it was produced. This year daylight saving ended on April 18/19th +# and started again on September 12/13th. I do not know what the rule +# is, but can find out if you like. We do not change at the same time +# as UK or Chile." +# +# I did have in my notes that the rule was "Second Saturday in Sep at +# 0:00 until third Saturday in Apr at 0:00". I think that this does +# not agree in some cases with Shanks; is this true? +# +# Also, there is no mention in the list that some areas in the +# Falklands do not use DST. I have found in my communications there +# that these areas are on the western half of East Falkland and all of +# West Falkland. Stanley is the only place that consistently observes +# DST. Again, as in other places in the world, the farmers don't like +# it. West Falkland is almost entirely sheep farmers. +# +# I know one lady there that keeps a list of which farm keeps DST and +# which doesn't each year. She runs a shop in Stanley, and says that +# the list changes each year. She uses it to communicate to her +# customers, catching them when they are home for lunch or dinner. + +# From Paul Eggert (2001-03-05): +# For now, we'll just record the time in Stanley, since we have no +# better info. + +# From Steffen Thorsen (2011-04-01): +# The Falkland Islands will not turn back clocks this winter, but stay on +# daylight saving time. +# +# One source: +# <a href="http://www.falklandnews.com/public/story.cfm?get=5914&source=3"> +# http://www.falklandnews.com/public/story.cfm?get=5914&source=3 +# </a> +# +# We have gotten this confirmed by a clerk of the legislative assembly: +# Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the +# third Sunday of April at 0200hrs and advance to Summer Time (UTC/GMT -3 +# hours) on the first Sunday of September at 0200hrs. +# +# IMPORTANT NOTE: During 2011, on a trial basis, the Falkland Islands +# will not revert to local mean time, but clocks will remain on Summer +# time (UTC/GMT - 3 hours) throughout the whole of 2011. Any long term +# change to local time following the trial period will be notified. +# +# From Andrew Newman (2012-02-24) +# A letter from Justin McPhee, Chief Executive, +# Cable & Wireless Falkland Islands (dated 2012-02-22) +# states... +# The current Atlantic/Stanley entry under South America expects the +# clocks to go back to standard Falklands Time (FKT) on the 15th April. +# The database entry states that in 2011 Stanley was staying on fixed +# summer time on a trial basis only. FIG need to contact IANA and/or +# the maintainers of the database to inform them we're adopting +# the same policy this year and suggest recommendations for future years. +# +# For now we will assume permanent summer time for the Falklands +# until advised differently (to apply for 2012 and beyond, after the 2011 +# experiment was apparently successful.) +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S +Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 - +Rule Falk 1939 only - Oct 1 0:00 1:00 S +Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 S +Rule Falk 1943 only - Jan 1 0:00 0 - +Rule Falk 1983 only - Sep lastSun 0:00 1:00 S +Rule Falk 1984 1985 - Apr lastSun 0:00 0 - +Rule Falk 1984 only - Sep 16 0:00 1:00 S +Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S +Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 - +Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 - +Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/Stanley -3:51:24 - LMT 1890 + -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time + -4:00 Falk FK%sT 1983 May # Falkland Is Time + -3:00 Falk FK%sT 1985 Sep 15 + -4:00 Falk FK%sT 2010 Sep 5 02:00 + -3:00 - FKST + +# French Guiana +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Cayenne -3:29:20 - LMT 1911 Jul + -4:00 - GFT 1967 Oct # French Guiana Time + -3:00 - GFT + +# Guyana +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown + -3:45 - GBGT 1966 May 26 # Br Guiana Time + -3:45 - GYT 1975 Jul 31 # Guyana Time + -3:00 - GYT 1991 +# IATA SSIM (1996-06) says -4:00. Assume a 1991 switch. + -4:00 - GYT + +# Paraguay +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00, +# and autumn transitions are from 00:00 -> 23:00. Go with pre-1999 +# editions of Shanks, and with the IATA, who say transitions occur at 00:00. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Para 1975 1988 - Oct 1 0:00 1:00 S +Rule Para 1975 1978 - Mar 1 0:00 0 - +Rule Para 1979 1991 - Apr 1 0:00 0 - +Rule Para 1989 only - Oct 22 0:00 1:00 S +Rule Para 1990 only - Oct 1 0:00 1:00 S +Rule Para 1991 only - Oct 6 0:00 1:00 S +Rule Para 1992 only - Mar 1 0:00 0 - +Rule Para 1992 only - Oct 5 0:00 1:00 S +Rule Para 1993 only - Mar 31 0:00 0 - +Rule Para 1993 1995 - Oct 1 0:00 1:00 S +Rule Para 1994 1995 - Feb lastSun 0:00 0 - +Rule Para 1996 only - Mar 1 0:00 0 - +# IATA SSIM (2000-02) says 1999-10-10; ignore this for now. +# From Steffen Thorsen (2000-10-02): +# I have three independent reports that Paraguay changed to DST this Sunday +# (10-01). +# +# Translated by Gwillim Law (2001-02-27) from +# <a href="http://www.diarionoticias.com.py/011000/nacional/naciona1.htm"> +# Noticias, a daily paper in Asuncion, Paraguay (2000-10-01) +# </a>: +# Starting at 0:00 today, the clock will be set forward 60 minutes, in +# fulfillment of Decree No. 7,273 of the Executive Power.... The time change +# system has been operating for several years. Formerly there was a separate +# decree each year; the new law has the same effect, but permanently. Every +# year, the time will change on the first Sunday of October; likewise, the +# clock will be set back on the first Sunday of March. +# +Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 S +# IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger. +Rule Para 1997 only - Feb lastSun 0:00 0 - +# Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but +# (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27). +Rule Para 1998 2001 - Mar Sun>=1 0:00 0 - +# From Rives McDow (2002-02-28): +# A decree was issued in Paraguay (no. 16350) on 2002-02-26 that changed the +# dst method to be from the first Sunday in September to the first Sunday in +# April. +Rule Para 2002 2004 - Apr Sun>=1 0:00 0 - +Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S +# +# From Jesper Norgaard Welen (2005-01-02): +# There are several sources that claim that Paraguay made +# a timezone rule change in autumn 2004. +# From Steffen Thorsen (2005-01-05): +# Decree 1,867 (2004-03-05) +# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13) +# <http://www.presidencia.gov.py/decretos/D1867.pdf> +Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 S +Rule Para 2005 2009 - Mar Sun>=8 0:00 0 - +# From Carlos Raul Perasso (2010-02-18): +# By decree number 3958 issued yesterday ( +# <a href="http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf"> +# http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf +# </a> +# ) +# Paraguay changes its DST schedule, postponing the March rule to April and +# modifying the October date. The decree reads: +# ... +# Art. 1. It is hereby established that from the second Sunday of the month of +# April of this year (2010), the official time is to be set back 60 minutes, +# and that on the first Sunday of the month of October, it is to be set +# forward 60 minutes, in all the territory of the Paraguayan Republic. +# ... +Rule Para 2010 max - Oct Sun>=1 0:00 1:00 S +Rule Para 2010 max - Apr Sun>=8 0:00 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Asuncion -3:50:40 - LMT 1890 + -3:50:40 - AMT 1931 Oct 10 # Asuncion Mean Time + -4:00 - PYT 1972 Oct # Paraguay Time + -3:00 - PYT 1974 Apr + -4:00 Para PY%sT + +# Peru +# +# <a href="news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net"> +# From Evelyn C. Leeper via Mark Brader (2003-10-26):</a> +# When we were in Peru in 1985-1986, they apparently switched over +# sometime between December 29 and January 3 while we were on the Amazon. +# +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger don't have this transition. Assume 1986 was like 1987. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Peru 1938 only - Jan 1 0:00 1:00 S +Rule Peru 1938 only - Apr 1 0:00 0 - +Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 S +Rule Peru 1939 1940 - Mar Sun>=24 0:00 0 - +Rule Peru 1986 1987 - Jan 1 0:00 1:00 S +Rule Peru 1986 1987 - Apr 1 0:00 0 - +Rule Peru 1990 only - Jan 1 0:00 1:00 S +Rule Peru 1990 only - Apr 1 0:00 0 - +# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger. +Rule Peru 1994 only - Jan 1 0:00 1:00 S +Rule Peru 1994 only - Apr 1 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Lima -5:08:12 - LMT 1890 + -5:08:36 - LMT 1908 Jul 28 # Lima Mean Time? + -5:00 Peru PE%sT # Peru Time + +# South Georgia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken + -2:00 - GST # South Georgia Time + +# South Sandwich Is +# uninhabited; scientific personnel have wintered + +# Suriname +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Paramaribo -3:40:40 - LMT 1911 + -3:40:52 - PMT 1935 # Paramaribo Mean Time + -3:40:36 - PMT 1945 Oct # The capital moved? + -3:30 - NEGT 1975 Nov 20 # Dutch Guiana Time + -3:30 - SRT 1984 Oct # Suriname Time + -3:00 - SRT + +# Trinidad and Tobago +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2 + -4:00 - AST + +# Uruguay +# From Paul Eggert (1993-11-18): +# Uruguay wins the prize for the strangest peacetime manipulation of the rules. +# From Shanks & Pottenger: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Whitman gives 1923 Oct 1; go with Shanks & Pottenger. +Rule Uruguay 1923 only - Oct 2 0:00 0:30 HS +Rule Uruguay 1924 1926 - Apr 1 0:00 0 - +Rule Uruguay 1924 1925 - Oct 1 0:00 0:30 HS +Rule Uruguay 1933 1935 - Oct lastSun 0:00 0:30 HS +# Shanks & Pottenger give 1935 Apr 1 0:00 & 1936 Mar 30 0:00; go with Whitman. +Rule Uruguay 1934 1936 - Mar Sat>=25 23:30s 0 - +Rule Uruguay 1936 only - Nov 1 0:00 0:30 HS +Rule Uruguay 1937 1941 - Mar lastSun 0:00 0 - +# Whitman gives 1937 Oct 3; go with Shanks & Pottenger. +Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS +# Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13, +# and 1943 Apr 13 ``to present time''; go with Shanks & Pottenger. +Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS +Rule Uruguay 1942 only - Jan 1 0:00 0 - +Rule Uruguay 1942 only - Dec 14 0:00 1:00 S +Rule Uruguay 1943 only - Mar 14 0:00 0 - +Rule Uruguay 1959 only - May 24 0:00 1:00 S +Rule Uruguay 1959 only - Nov 15 0:00 0 - +Rule Uruguay 1960 only - Jan 17 0:00 1:00 S +Rule Uruguay 1960 only - Mar 6 0:00 0 - +Rule Uruguay 1965 1967 - Apr Sun>=1 0:00 1:00 S +Rule Uruguay 1965 only - Sep 26 0:00 0 - +Rule Uruguay 1966 1967 - Oct 31 0:00 0 - +Rule Uruguay 1968 1970 - May 27 0:00 0:30 HS +Rule Uruguay 1968 1970 - Dec 2 0:00 0 - +Rule Uruguay 1972 only - Apr 24 0:00 1:00 S +Rule Uruguay 1972 only - Aug 15 0:00 0 - +Rule Uruguay 1974 only - Mar 10 0:00 0:30 HS +Rule Uruguay 1974 only - Dec 22 0:00 1:00 S +Rule Uruguay 1976 only - Oct 1 0:00 0 - +Rule Uruguay 1977 only - Dec 4 0:00 1:00 S +Rule Uruguay 1978 only - Apr 1 0:00 0 - +Rule Uruguay 1979 only - Oct 1 0:00 1:00 S +Rule Uruguay 1980 only - May 1 0:00 0 - +Rule Uruguay 1987 only - Dec 14 0:00 1:00 S +Rule Uruguay 1988 only - Mar 14 0:00 0 - +Rule Uruguay 1988 only - Dec 11 0:00 1:00 S +Rule Uruguay 1989 only - Mar 12 0:00 0 - +Rule Uruguay 1989 only - Oct 29 0:00 1:00 S +# Shanks & Pottenger say no DST was observed in 1990/1 and 1991/2, +# and that 1992/3's DST was from 10-25 to 03-01. Go with IATA. +Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 - +Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S +Rule Uruguay 1992 only - Oct 18 0:00 1:00 S +Rule Uruguay 1993 only - Feb 28 0:00 0 - +# From Eduardo Cota (2004-09-20): +# The uruguayan government has decreed a change in the local time.... +# http://www.presidencia.gub.uy/decretos/2004091502.htm +Rule Uruguay 2004 only - Sep 19 0:00 1:00 S +# From Steffen Thorsen (2005-03-11): +# Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to +# save energy ... it was postponed two weeks.... +# http://www.presidencia.gub.uy/_Web/noticias/2005/03/2005031005.htm +Rule Uruguay 2005 only - Mar 27 2:00 0 - +# From Eduardo Cota (2005-09-27): +# http://www.presidencia.gub.uy/_Web/decretos/2005/09/CM%20119_09%2009%202005_00001.PDF +# This means that from 2005-10-09 at 02:00 local time, until 2006-03-12 at +# 02:00 local time, official time in Uruguay will be at GMT -2. +Rule Uruguay 2005 only - Oct 9 2:00 1:00 S +Rule Uruguay 2006 only - Mar 12 2:00 0 - +# From Jesper Norgaard Welen (2006-09-06): +# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF +Rule Uruguay 2006 max - Oct Sun>=1 2:00 1:00 S +Rule Uruguay 2007 max - Mar Sun>=8 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28 + -3:44:44 - MMT 1920 May 1 # Montevideo MT + -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time + -3:00 Uruguay UY%sT + +# Venezuela +# +# From John Stainforth (2007-11-28): +# ... the change for Venezuela originally expected for 2007-12-31 has +# been brought forward to 2007-12-09. The official announcement was +# published today in the "Gaceta Oficial de la Republica Bolivariana +# de Venezuela, numero 38.819" (official document for all laws or +# resolution publication) +# http://www.globovision.com/news.php?nid=72208 + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Caracas -4:27:44 - LMT 1890 + -4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time? + -4:30 - VET 1965 # Venezuela Time + -4:00 - VET 2007 Dec 9 03:00 + -4:30 - VET diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/systemv b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/systemv new file mode 100644 index 0000000..e651e85 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/systemv @@ -0,0 +1,38 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. + +# Old rules, should the need arise. +# No attempt is made to handle Newfoundland, since it cannot be expressed +# using the System V "TZ" scheme (half-hour offset), or anything outside +# North America (no support for non-standard DST start/end dates), nor +# the changes in the DST rules in the US after 1976 (which occurred after +# the old rules were written). +# +# If you need the old rules, uncomment ## lines. +# Compile this *without* leap second correction for true conformance. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D +Rule SystemV min 1973 - Oct lastSun 2:00 0 S +Rule SystemV 1974 only - Jan 6 2:00 1:00 D +Rule SystemV 1974 only - Nov lastSun 2:00 0 S +Rule SystemV 1975 only - Feb 23 2:00 1:00 D +Rule SystemV 1975 only - Oct lastSun 2:00 0 S +Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D +Rule SystemV 1976 max - Oct lastSun 2:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +## Zone SystemV/AST4ADT -4:00 SystemV A%sT +## Zone SystemV/EST5EDT -5:00 SystemV E%sT +## Zone SystemV/CST6CDT -6:00 SystemV C%sT +## Zone SystemV/MST7MDT -7:00 SystemV M%sT +## Zone SystemV/PST8PDT -8:00 SystemV P%sT +## Zone SystemV/YST9YDT -9:00 SystemV Y%sT +## Zone SystemV/AST4 -4:00 - AST +## Zone SystemV/EST5 -5:00 - EST +## Zone SystemV/CST6 -6:00 - CST +## Zone SystemV/MST7 -7:00 - MST +## Zone SystemV/PST8 -8:00 - PST +## Zone SystemV/YST9 -9:00 - YST +## Zone SystemV/HST10 -10:00 - HST diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/yearistype.sh b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/yearistype.sh new file mode 100644 index 0000000..bdc6e58 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/yearistype.sh @@ -0,0 +1,38 @@ +#! /bin/sh + +: 'This file is in the public domain, so clarified as of' +: '2006-07-17 by Arthur David Olson.' + +case $#-$1 in + 2-|2-0*|2-*[!0-9]*) + echo "$0: wild year - $1" >&2 + exit 1 ;; +esac + +case $#-$2 in + 2-even) + case $1 in + *[24680]) exit 0 ;; + *) exit 1 ;; + esac ;; + 2-nonpres|2-nonuspres) + case $1 in + *[02468][048]|*[13579][26]) exit 1 ;; + *) exit 0 ;; + esac ;; + 2-odd) + case $1 in + *[13579]) exit 0 ;; + *) exit 1 ;; + esac ;; + 2-uspres) + case $1 in + *[02468][048]|*[13579][26]) exit 0 ;; + *) exit 1 ;; + esac ;; + 2-*) + echo "$0: wild type - $2" >&2 ;; +esac + +echo "$0: usage is $0 year even|odd|uspres|nonpres|nonuspres" >&2 +exit 1 diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/zone.tab b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/zone.tab new file mode 100644 index 0000000..6bda826 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time-zones/tz/zone.tab @@ -0,0 +1,441 @@ +# <pre> +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. +# +# TZ zone descriptions +# +# From Paul Eggert (1996-08-05): +# +# This file contains a table with the following columns: +# 1. ISO 3166 2-character country code. See the file `iso3166.tab'. +# 2. Latitude and longitude of the zone's principal location +# in ISO 6709 sign-degrees-minutes-seconds format, +# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS, +# first latitude (+ is north), then longitude (+ is east). +# 3. Zone name used in value of TZ environment variable. +# 4. Comments; present if and only if the country has multiple rows. +# +# Columns are separated by a single tab. +# The table is sorted first by country, then an order within the country that +# (1) makes some geographical sense, and +# (2) puts the most populous zones first, where that does not contradict (1). +# +# Lines beginning with `#' are comments. +# +#country- +#code coordinates TZ comments +AD +4230+00131 Europe/Andorra +AE +2518+05518 Asia/Dubai +AF +3431+06912 Asia/Kabul +AG +1703-06148 America/Antigua +AI +1812-06304 America/Anguilla +AL +4120+01950 Europe/Tirane +AM +4011+04430 Asia/Yerevan +AO -0848+01314 Africa/Luanda +AQ -7750+16636 Antarctica/McMurdo McMurdo Station, Ross Island +AQ -9000+00000 Antarctica/South_Pole Amundsen-Scott Station, South Pole +AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island +AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island +AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay +AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills +AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula +AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok +AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie +AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I +AQ -5430+15857 Antarctica/Macquarie Macquarie Island Station, Macquarie Island +AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF) +AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, MN, SE, SF) +AR -2447-06525 America/Argentina/Salta (SA, LP, NQ, RN) +AR -2411-06518 America/Argentina/Jujuy Jujuy (JY) +AR -2649-06513 America/Argentina/Tucuman Tucuman (TM) +AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH) +AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR) +AR -3132-06831 America/Argentina/San_Juan San Juan (SJ) +AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ) +AR -3319-06621 America/Argentina/San_Luis San Luis (SL) +AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC) +AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF) +AS -1416-17042 Pacific/Pago_Pago +AT +4813+01620 Europe/Vienna +AU -3133+15905 Australia/Lord_Howe Lord Howe Island +AU -4253+14719 Australia/Hobart Tasmania - most locations +AU -3956+14352 Australia/Currie Tasmania - King Island +AU -3749+14458 Australia/Melbourne Victoria +AU -3352+15113 Australia/Sydney New South Wales - most locations +AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna +AU -2728+15302 Australia/Brisbane Queensland - most locations +AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands +AU -3455+13835 Australia/Adelaide South Australia +AU -1228+13050 Australia/Darwin Northern Territory +AU -3157+11551 Australia/Perth Western Australia - most locations +AU -3143+12852 Australia/Eucla Western Australia - Eucla area +AW +1230-06958 America/Aruba +AX +6006+01957 Europe/Mariehamn +AZ +4023+04951 Asia/Baku +BA +4352+01825 Europe/Sarajevo +BB +1306-05937 America/Barbados +BD +2343+09025 Asia/Dhaka +BE +5050+00420 Europe/Brussels +BF +1222-00131 Africa/Ouagadougou +BG +4241+02319 Europe/Sofia +BH +2623+05035 Asia/Bahrain +BI -0323+02922 Africa/Bujumbura +BJ +0629+00237 Africa/Porto-Novo +BL +1753-06251 America/St_Barthelemy +BM +3217-06446 Atlantic/Bermuda +BN +0456+11455 Asia/Brunei +BO -1630-06809 America/La_Paz +BQ +120903-0681636 America/Kralendijk +BR -0351-03225 America/Noronha Atlantic islands +BR -0127-04829 America/Belem Amapa, E Para +BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB) +BR -0803-03454 America/Recife Pernambuco +BR -0712-04812 America/Araguaina Tocantins +BR -0940-03543 America/Maceio Alagoas, Sergipe +BR -1259-03831 America/Bahia Bahia +BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS) +BR -2027-05437 America/Campo_Grande Mato Grosso do Sul +BR -1535-05605 America/Cuiaba Mato Grosso +BR -0226-05452 America/Santarem W Para +BR -0846-06354 America/Porto_Velho Rondonia +BR +0249-06040 America/Boa_Vista Roraima +BR -0308-06001 America/Manaus E Amazonas +BR -0640-06952 America/Eirunepe W Amazonas +BR -0958-06748 America/Rio_Branco Acre +BS +2505-07721 America/Nassau +BT +2728+08939 Asia/Thimphu +BW -2439+02555 Africa/Gaborone +BY +5354+02734 Europe/Minsk +BZ +1730-08812 America/Belize +CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador +CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI +CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971 +CA +4606-06447 America/Moncton Atlantic Time - New Brunswick +CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations +CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore +CA +4531-07334 America/Montreal Eastern Time - Quebec - most locations +CA +4339-07923 America/Toronto Eastern Time - Ontario - most locations +CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973 +CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario +CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations +CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut +CA +744144-0944945 America/Resolute Central Standard Time - Resolute, Nunavut +CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut +CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut +CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario +CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario +CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations +CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest +CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan +CA +690650-1050310 America/Cambridge_Bay Mountain Time - west Nunavut +CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories +CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories +CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia +CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia +CA +4916-12307 America/Vancouver Pacific Time - west British Columbia +CA +6043-13503 America/Whitehorse Pacific Time - south Yukon +CA +6404-13925 America/Dawson Pacific Time - north Yukon +CC -1210+09655 Indian/Cocos +CD -0418+01518 Africa/Kinshasa west Dem. Rep. of Congo +CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo +CF +0422+01835 Africa/Bangui +CG -0416+01517 Africa/Brazzaville +CH +4723+00832 Europe/Zurich +CI +0519-00402 Africa/Abidjan +CK -2114-15946 Pacific/Rarotonga +CL -3327-07040 America/Santiago most locations +CL -2709-10926 Pacific/Easter Easter Island & Sala y Gomez +CM +0403+00942 Africa/Douala +CN +3114+12128 Asia/Shanghai east China - Beijing, Guangdong, Shanghai, etc. +CN +4545+12641 Asia/Harbin Heilongjiang (except Mohe), Jilin +CN +2934+10635 Asia/Chongqing central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc. +CN +4348+08735 Asia/Urumqi most of Tibet & Xinjiang +CN +3929+07559 Asia/Kashgar west Tibet & Xinjiang +CO +0436-07405 America/Bogota +CR +0956-08405 America/Costa_Rica +CU +2308-08222 America/Havana +CV +1455-02331 Atlantic/Cape_Verde +CW +1211-06900 America/Curacao +CX -1025+10543 Indian/Christmas +CY +3510+03322 Asia/Nicosia +CZ +5005+01426 Europe/Prague +DE +5230+01322 Europe/Berlin +DJ +1136+04309 Africa/Djibouti +DK +5540+01235 Europe/Copenhagen +DM +1518-06124 America/Dominica +DO +1828-06954 America/Santo_Domingo +DZ +3647+00303 Africa/Algiers +EC -0210-07950 America/Guayaquil mainland +EC -0054-08936 Pacific/Galapagos Galapagos Islands +EE +5925+02445 Europe/Tallinn +EG +3003+03115 Africa/Cairo +EH +2709-01312 Africa/El_Aaiun +ER +1520+03853 Africa/Asmara +ES +4024-00341 Europe/Madrid mainland +ES +3553-00519 Africa/Ceuta Ceuta & Melilla +ES +2806-01524 Atlantic/Canary Canary Islands +ET +0902+03842 Africa/Addis_Ababa +FI +6010+02458 Europe/Helsinki +FJ -1808+17825 Pacific/Fiji +FK -5142-05751 Atlantic/Stanley +FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap +FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape) +FM +0519+16259 Pacific/Kosrae Kosrae +FO +6201-00646 Atlantic/Faroe +FR +4852+00220 Europe/Paris +GA +0023+00927 Africa/Libreville +GB +513030-0000731 Europe/London +GD +1203-06145 America/Grenada +GE +4143+04449 Asia/Tbilisi +GF +0456-05220 America/Cayenne +GG +4927-00232 Europe/Guernsey +GH +0533-00013 Africa/Accra +GI +3608-00521 Europe/Gibraltar +GL +6411-05144 America/Godthab most locations +GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund +GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit +GL +7634-06847 America/Thule Thule / Pituffik +GM +1328-01639 Africa/Banjul +GN +0931-01343 Africa/Conakry +GP +1614-06132 America/Guadeloupe +GQ +0345+00847 Africa/Malabo +GR +3758+02343 Europe/Athens +GS -5416-03632 Atlantic/South_Georgia +GT +1438-09031 America/Guatemala +GU +1328+14445 Pacific/Guam +GW +1151-01535 Africa/Bissau +GY +0648-05810 America/Guyana +HK +2217+11409 Asia/Hong_Kong +HN +1406-08713 America/Tegucigalpa +HR +4548+01558 Europe/Zagreb +HT +1832-07220 America/Port-au-Prince +HU +4730+01905 Europe/Budapest +ID -0610+10648 Asia/Jakarta Java & Sumatra +ID -0002+10920 Asia/Pontianak west & central Borneo +ID -0507+11924 Asia/Makassar east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor +ID -0232+14042 Asia/Jayapura west New Guinea (Irian Jaya) & Malukus (Moluccas) +IE +5320-00615 Europe/Dublin +IL +3146+03514 Asia/Jerusalem +IM +5409-00428 Europe/Isle_of_Man +IN +2232+08822 Asia/Kolkata +IO -0720+07225 Indian/Chagos +IQ +3321+04425 Asia/Baghdad +IR +3540+05126 Asia/Tehran +IS +6409-02151 Atlantic/Reykjavik +IT +4154+01229 Europe/Rome +JE +4912-00207 Europe/Jersey +JM +1800-07648 America/Jamaica +JO +3157+03556 Asia/Amman +JP +353916+1394441 Asia/Tokyo +KE -0117+03649 Africa/Nairobi +KG +4254+07436 Asia/Bishkek +KH +1133+10455 Asia/Phnom_Penh +KI +0125+17300 Pacific/Tarawa Gilbert Islands +KI -0308-17105 Pacific/Enderbury Phoenix Islands +KI +0152-15720 Pacific/Kiritimati Line Islands +KM -1141+04316 Indian/Comoro +KN +1718-06243 America/St_Kitts +KP +3901+12545 Asia/Pyongyang +KR +3733+12658 Asia/Seoul +KW +2920+04759 Asia/Kuwait +KY +1918-08123 America/Cayman +KZ +4315+07657 Asia/Almaty most locations +KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda) +KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe) +KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau) +KZ +5113+05121 Asia/Oral West Kazakhstan +LA +1758+10236 Asia/Vientiane +LB +3353+03530 Asia/Beirut +LC +1401-06100 America/St_Lucia +LI +4709+00931 Europe/Vaduz +LK +0656+07951 Asia/Colombo +LR +0618-01047 Africa/Monrovia +LS -2928+02730 Africa/Maseru +LT +5441+02519 Europe/Vilnius +LU +4936+00609 Europe/Luxembourg +LV +5657+02406 Europe/Riga +LY +3254+01311 Africa/Tripoli +MA +3339-00735 Africa/Casablanca +MC +4342+00723 Europe/Monaco +MD +4700+02850 Europe/Chisinau +ME +4226+01916 Europe/Podgorica +MF +1804-06305 America/Marigot +MG -1855+04731 Indian/Antananarivo +MH +0709+17112 Pacific/Majuro most locations +MH +0905+16720 Pacific/Kwajalein Kwajalein +MK +4159+02126 Europe/Skopje +ML +1239-00800 Africa/Bamako +MM +1647+09610 Asia/Rangoon +MN +4755+10653 Asia/Ulaanbaatar most locations +MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan +MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar +MO +2214+11335 Asia/Macau +MP +1512+14545 Pacific/Saipan +MQ +1436-06105 America/Martinique +MR +1806-01557 Africa/Nouakchott +MS +1643-06213 America/Montserrat +MT +3554+01431 Europe/Malta +MU -2010+05730 Indian/Mauritius +MV +0410+07330 Indian/Maldives +MW -1547+03500 Africa/Blantyre +MX +1924-09909 America/Mexico_City Central Time - most locations +MX +2105-08646 America/Cancun Central Time - Quintana Roo +MX +2058-08937 America/Merida Central Time - Campeche, Yucatan +MX +2540-10019 America/Monterrey Mexican Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas away from US border +MX +2550-09730 America/Matamoros US Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas near US border +MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa +MX +2838-10605 America/Chihuahua Mexican Mountain Time - Chihuahua away from US border +MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border +MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora +MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border +MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border +MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahia de Banderas +MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia +MY +0133+11020 Asia/Kuching Sabah & Sarawak +MZ -2558+03235 Africa/Maputo +NA -2234+01706 Africa/Windhoek +NC -2216+16627 Pacific/Noumea +NE +1331+00207 Africa/Niamey +NF -2903+16758 Pacific/Norfolk +NG +0627+00324 Africa/Lagos +NI +1209-08617 America/Managua +NL +5222+00454 Europe/Amsterdam +NO +5955+01045 Europe/Oslo +NP +2743+08519 Asia/Kathmandu +NR -0031+16655 Pacific/Nauru +NU -1901-16955 Pacific/Niue +NZ -3652+17446 Pacific/Auckland most locations +NZ -4357-17633 Pacific/Chatham Chatham Islands +OM +2336+05835 Asia/Muscat +PA +0858-07932 America/Panama +PE -1203-07703 America/Lima +PF -1732-14934 Pacific/Tahiti Society Islands +PF -0900-13930 Pacific/Marquesas Marquesas Islands +PF -2308-13457 Pacific/Gambier Gambier Islands +PG -0930+14710 Pacific/Port_Moresby +PH +1435+12100 Asia/Manila +PK +2452+06703 Asia/Karachi +PL +5215+02100 Europe/Warsaw +PM +4703-05620 America/Miquelon +PN -2504-13005 Pacific/Pitcairn +PR +182806-0660622 America/Puerto_Rico +PS +3130+03428 Asia/Gaza Gaza Strip +PS +313200+0350542 Asia/Hebron West Bank +PT +3843-00908 Europe/Lisbon mainland +PT +3238-01654 Atlantic/Madeira Madeira Islands +PT +3744-02540 Atlantic/Azores Azores +PW +0720+13429 Pacific/Palau +PY -2516-05740 America/Asuncion +QA +2517+05132 Asia/Qatar +RE -2052+05528 Indian/Reunion +RO +4426+02606 Europe/Bucharest +RS +4450+02030 Europe/Belgrade +RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad +RU +5545+03735 Europe/Moscow Moscow+00 - west Russia +RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea +RU +5312+05009 Europe/Samara Moscow+00 - Samara, Udmurtia +RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals +RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia +RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk +RU +5345+08707 Asia/Novokuznetsk Moscow+03 - Novokuznetsk +RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River +RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal +RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River +RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River +RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island +RU +5934+15048 Asia/Magadan Moscow+08 - Magadan +RU +5301+15839 Asia/Kamchatka Moscow+08 - Kamchatka +RU +6445+17729 Asia/Anadyr Moscow+08 - Bering Sea +RW -0157+03004 Africa/Kigali +SA +2438+04643 Asia/Riyadh +SB -0932+16012 Pacific/Guadalcanal +SC -0440+05528 Indian/Mahe +SD +1536+03232 Africa/Khartoum +SE +5920+01803 Europe/Stockholm +SG +0117+10351 Asia/Singapore +SH -1555-00542 Atlantic/St_Helena +SI +4603+01431 Europe/Ljubljana +SJ +7800+01600 Arctic/Longyearbyen +SK +4809+01707 Europe/Bratislava +SL +0830-01315 Africa/Freetown +SM +4355+01228 Europe/San_Marino +SN +1440-01726 Africa/Dakar +SO +0204+04522 Africa/Mogadishu +SR +0550-05510 America/Paramaribo +SS +0451+03136 Africa/Juba +ST +0020+00644 Africa/Sao_Tome +SV +1342-08912 America/El_Salvador +SX +180305-0630250 America/Lower_Princes +SY +3330+03618 Asia/Damascus +SZ -2618+03106 Africa/Mbabane +TC +2128-07108 America/Grand_Turk +TD +1207+01503 Africa/Ndjamena +TF -492110+0701303 Indian/Kerguelen +TG +0608+00113 Africa/Lome +TH +1345+10031 Asia/Bangkok +TJ +3835+06848 Asia/Dushanbe +TK -0922-17114 Pacific/Fakaofo +TL -0833+12535 Asia/Dili +TM +3757+05823 Asia/Ashgabat +TN +3648+01011 Africa/Tunis +TO -2110-17510 Pacific/Tongatapu +TR +4101+02858 Europe/Istanbul +TT +1039-06131 America/Port_of_Spain +TV -0831+17913 Pacific/Funafuti +TW +2503+12130 Asia/Taipei +TZ -0648+03917 Africa/Dar_es_Salaam +UA +5026+03031 Europe/Kiev most locations +UA +4837+02218 Europe/Uzhgorod Ruthenia +UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk +UA +4457+03406 Europe/Simferopol central Crimea +UG +0019+03225 Africa/Kampala +UM +1645-16931 Pacific/Johnston Johnston Atoll +UM +2813-17722 Pacific/Midway Midway Islands +UM +1917+16637 Pacific/Wake Wake Island +US +404251-0740023 America/New_York Eastern Time +US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations +US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area +US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County +US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations +US +384038-0873143 America/Indiana/Vincennes Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties +US +410305-0863611 America/Indiana/Winamac Eastern Time - Indiana - Pulaski County +US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County +US +382931-0871643 America/Indiana/Petersburg Eastern Time - Indiana - Pike County +US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County +US +415100-0873900 America/Chicago Central Time +US +375711-0864541 America/Indiana/Tell_City Central Time - Indiana - Perry County +US +411745-0863730 America/Indiana/Knox Central Time - Indiana - Starke County +US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties +US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County +US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area) +US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County +US +394421-1045903 America/Denver Mountain Time +US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon +US +364708-1084111 America/Shiprock Mountain Time - Navajo +US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona +US +340308-1181434 America/Los_Angeles Pacific Time +US +611305-1495401 America/Anchorage Alaska Time +US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle +US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle +US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck +US +643004-1652423 America/Nome Alaska Time - west Alaska +US +515248-1763929 America/Adak Aleutian Islands +US +550737-1313435 America/Metlakatla Metlakatla Time - Annette Island +US +211825-1575130 Pacific/Honolulu Hawaii +UY -3453-05611 America/Montevideo +UZ +3940+06648 Asia/Samarkand west Uzbekistan +UZ +4120+06918 Asia/Tashkent east Uzbekistan +VA +415408+0122711 Europe/Vatican +VC +1309-06114 America/St_Vincent +VE +1030-06656 America/Caracas +VG +1827-06437 America/Tortola +VI +1821-06456 America/St_Thomas +VN +1045+10640 Asia/Ho_Chi_Minh +VU -1740+16825 Pacific/Efate +WF -1318-17610 Pacific/Wallis +WS -1350-17144 Pacific/Apia +YE +1245+04512 Asia/Aden +YT -1247+04514 Indian/Mayotte +ZA -2615+02800 Africa/Johannesburg +ZM -1525+02817 Africa/Lusaka +ZW -1750+03103 Africa/Harare diff --git a/public/admin/view/javascript/jquery/flot/examples/axes-time/index.html b/public/admin/view/javascript/jquery/flot/examples/axes-time/index.html new file mode 100644 index 0000000..1391ca1 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/axes-time/index.html @@ -0,0 +1,137 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Time Axes</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.time.js"></script> + <script type="text/javascript"> + + $(function() { + + var d = [[-373597200000, 315.71], [-370918800000, 317.45], [-368326800000, 317.50], [-363056400000, 315.86], [-360378000000, 314.93], [-357699600000, 313.19], [-352429200000, 313.34], [-349837200000, 314.67], [-347158800000, 315.58], [-344480400000, 316.47], [-342061200000, 316.65], [-339382800000, 317.71], [-336790800000, 318.29], [-334112400000, 318.16], [-331520400000, 316.55], [-328842000000, 314.80], [-326163600000, 313.84], [-323571600000, 313.34], [-320893200000, 314.81], [-318301200000, 315.59], [-315622800000, 316.43], [-312944400000, 316.97], [-310438800000, 317.58], [-307760400000, 319.03], [-305168400000, 320.03], [-302490000000, 319.59], [-299898000000, 318.18], [-297219600000, 315.91], [-294541200000, 314.16], [-291949200000, 313.83], [-289270800000, 315.00], [-286678800000, 316.19], [-284000400000, 316.89], [-281322000000, 317.70], [-278902800000, 318.54], [-276224400000, 319.48], [-273632400000, 320.58], [-270954000000, 319.78], [-268362000000, 318.58], [-265683600000, 316.79], [-263005200000, 314.99], [-260413200000, 315.31], [-257734800000, 316.10], [-255142800000, 317.01], [-252464400000, 317.94], [-249786000000, 318.56], [-247366800000, 319.69], [-244688400000, 320.58], [-242096400000, 321.01], [-239418000000, 320.61], [-236826000000, 319.61], [-234147600000, 317.40], [-231469200000, 316.26], [-228877200000, 315.42], [-226198800000, 316.69], [-223606800000, 317.69], [-220928400000, 318.74], [-218250000000, 319.08], [-215830800000, 319.86], [-213152400000, 321.39], [-210560400000, 322.24], [-207882000000, 321.47], [-205290000000, 319.74], [-202611600000, 317.77], [-199933200000, 316.21], [-197341200000, 315.99], [-194662800000, 317.07], [-192070800000, 318.36], [-189392400000, 319.57], [-178938000000, 322.23], [-176259600000, 321.89], [-173667600000, 320.44], [-170989200000, 318.70], [-168310800000, 316.70], [-165718800000, 316.87], [-163040400000, 317.68], [-160448400000, 318.71], [-157770000000, 319.44], [-155091600000, 320.44], [-152672400000, 320.89], [-149994000000, 322.13], [-147402000000, 322.16], [-144723600000, 321.87], [-142131600000, 321.21], [-139453200000, 318.87], [-136774800000, 317.81], [-134182800000, 317.30], [-131504400000, 318.87], [-128912400000, 319.42], [-126234000000, 320.62], [-123555600000, 321.59], [-121136400000, 322.39], [-118458000000, 323.70], [-115866000000, 324.07], [-113187600000, 323.75], [-110595600000, 322.40], [-107917200000, 320.37], [-105238800000, 318.64], [-102646800000, 318.10], [-99968400000, 319.79], [-97376400000, 321.03], [-94698000000, 322.33], [-92019600000, 322.50], [-89600400000, 323.04], [-86922000000, 324.42], [-84330000000, 325.00], [-81651600000, 324.09], [-79059600000, 322.55], [-76381200000, 320.92], [-73702800000, 319.26], [-71110800000, 319.39], [-68432400000, 320.72], [-65840400000, 321.96], [-63162000000, 322.57], [-60483600000, 323.15], [-57978000000, 323.89], [-55299600000, 325.02], [-52707600000, 325.57], [-50029200000, 325.36], [-47437200000, 324.14], [-44758800000, 322.11], [-42080400000, 320.33], [-39488400000, 320.25], [-36810000000, 321.32], [-34218000000, 322.90], [-31539600000, 324.00], [-28861200000, 324.42], [-26442000000, 325.64], [-23763600000, 326.66], [-21171600000, 327.38], [-18493200000, 326.70], [-15901200000, 325.89], [-13222800000, 323.67], [-10544400000, 322.38], [-7952400000, 321.78], [-5274000000, 322.85], [-2682000000, 324.12], [-3600000, 325.06], [2674800000, 325.98], [5094000000, 326.93], [7772400000, 328.13], [10364400000, 328.07], [13042800000, 327.66], [15634800000, 326.35], [18313200000, 324.69], [20991600000, 323.10], [23583600000, 323.07], [26262000000, 324.01], [28854000000, 325.13], [31532400000, 326.17], [34210800000, 326.68], [36630000000, 327.18], [39308400000, 327.78], [41900400000, 328.92], [44578800000, 328.57], [47170800000, 327.37], [49849200000, 325.43], [52527600000, 323.36], [55119600000, 323.56], [57798000000, 324.80], [60390000000, 326.01], [63068400000, 326.77], [65746800000, 327.63], [68252400000, 327.75], [70930800000, 329.72], [73522800000, 330.07], [76201200000, 329.09], [78793200000, 328.05], [81471600000, 326.32], [84150000000, 324.84], [86742000000, 325.20], [89420400000, 326.50], [92012400000, 327.55], [94690800000, 328.54], [97369200000, 329.56], [99788400000, 330.30], [102466800000, 331.50], [105058800000, 332.48], [107737200000, 332.07], [110329200000, 330.87], [113007600000, 329.31], [115686000000, 327.51], [118278000000, 327.18], [120956400000, 328.16], [123548400000, 328.64], [126226800000, 329.35], [128905200000, 330.71], [131324400000, 331.48], [134002800000, 332.65], [136594800000, 333.16], [139273200000, 332.06], [141865200000, 330.99], [144543600000, 329.17], [147222000000, 327.41], [149814000000, 327.20], [152492400000, 328.33], [155084400000, 329.50], [157762800000, 330.68], [160441200000, 331.41], [162860400000, 331.85], [165538800000, 333.29], [168130800000, 333.91], [170809200000, 333.40], [173401200000, 331.78], [176079600000, 329.88], [178758000000, 328.57], [181350000000, 328.46], [184028400000, 329.26], [189298800000, 331.71], [191977200000, 332.76], [194482800000, 333.48], [197161200000, 334.78], [199753200000, 334.78], [202431600000, 334.17], [205023600000, 332.78], [207702000000, 330.64], [210380400000, 328.95], [212972400000, 328.77], [215650800000, 330.23], [218242800000, 331.69], [220921200000, 332.70], [223599600000, 333.24], [226018800000, 334.96], [228697200000, 336.04], [231289200000, 336.82], [233967600000, 336.13], [236559600000, 334.73], [239238000000, 332.52], [241916400000, 331.19], [244508400000, 331.19], [247186800000, 332.35], [249778800000, 333.47], [252457200000, 335.11], [255135600000, 335.26], [257554800000, 336.60], [260233200000, 337.77], [262825200000, 338.00], [265503600000, 337.99], [268095600000, 336.48], [270774000000, 334.37], [273452400000, 332.27], [276044400000, 332.41], [278722800000, 333.76], [281314800000, 334.83], [283993200000, 336.21], [286671600000, 336.64], [289090800000, 338.12], [291769200000, 339.02], [294361200000, 339.02], [297039600000, 339.20], [299631600000, 337.58], [302310000000, 335.55], [304988400000, 333.89], [307580400000, 334.14], [310258800000, 335.26], [312850800000, 336.71], [315529200000, 337.81], [318207600000, 338.29], [320713200000, 340.04], [323391600000, 340.86], [325980000000, 341.47], [328658400000, 341.26], [331250400000, 339.29], [333928800000, 337.60], [336607200000, 336.12], [339202800000, 336.08], [341881200000, 337.22], [344473200000, 338.34], [347151600000, 339.36], [349830000000, 340.51], [352249200000, 341.57], [354924000000, 342.56], [357516000000, 343.01], [360194400000, 342.47], [362786400000, 340.71], [365464800000, 338.52], [368143200000, 336.96], [370738800000, 337.13], [373417200000, 338.58], [376009200000, 339.89], [378687600000, 340.93], [381366000000, 341.69], [383785200000, 342.69], [389052000000, 344.30], [391730400000, 343.43], [394322400000, 341.88], [397000800000, 339.89], [399679200000, 337.95], [402274800000, 338.10], [404953200000, 339.27], [407545200000, 340.67], [410223600000, 341.42], [412902000000, 342.68], [415321200000, 343.46], [417996000000, 345.10], [420588000000, 345.76], [423266400000, 345.36], [425858400000, 343.91], [428536800000, 342.05], [431215200000, 340.00], [433810800000, 340.12], [436489200000, 341.33], [439081200000, 342.94], [441759600000, 343.87], [444438000000, 344.60], [446943600000, 345.20], [452210400000, 347.36], [454888800000, 346.74], [457480800000, 345.41], [460159200000, 343.01], [462837600000, 341.23], [465433200000, 341.52], [468111600000, 342.86], [470703600000, 344.41], [473382000000, 345.09], [476060400000, 345.89], [478479600000, 347.49], [481154400000, 348.00], [483746400000, 348.75], [486424800000, 348.19], [489016800000, 346.54], [491695200000, 344.63], [494373600000, 343.03], [496969200000, 342.92], [499647600000, 344.24], [502239600000, 345.62], [504918000000, 346.43], [507596400000, 346.94], [510015600000, 347.88], [512690400000, 349.57], [515282400000, 350.35], [517960800000, 349.72], [520552800000, 347.78], [523231200000, 345.86], [525909600000, 344.84], [528505200000, 344.32], [531183600000, 345.67], [533775600000, 346.88], [536454000000, 348.19], [539132400000, 348.55], [541551600000, 349.52], [544226400000, 351.12], [546818400000, 351.84], [549496800000, 351.49], [552088800000, 349.82], [554767200000, 347.63], [557445600000, 346.38], [560041200000, 346.49], [562719600000, 347.75], [565311600000, 349.03], [567990000000, 350.20], [570668400000, 351.61], [573174000000, 352.22], [575848800000, 353.53], [578440800000, 354.14], [581119200000, 353.62], [583711200000, 352.53], [586389600000, 350.41], [589068000000, 348.84], [591663600000, 348.94], [594342000000, 350.04], [596934000000, 351.29], [599612400000, 352.72], [602290800000, 353.10], [604710000000, 353.65], [607384800000, 355.43], [609976800000, 355.70], [612655200000, 355.11], [615247200000, 353.79], [617925600000, 351.42], [620604000000, 349.81], [623199600000, 350.11], [625878000000, 351.26], [628470000000, 352.63], [631148400000, 353.64], [633826800000, 354.72], [636246000000, 355.49], [638920800000, 356.09], [641512800000, 357.08], [644191200000, 356.11], [646783200000, 354.70], [649461600000, 352.68], [652140000000, 351.05], [654735600000, 351.36], [657414000000, 352.81], [660006000000, 354.22], [662684400000, 354.85], [665362800000, 355.66], [667782000000, 357.04], [670456800000, 358.40], [673048800000, 359.00], [675727200000, 357.99], [678319200000, 356.00], [680997600000, 353.78], [683676000000, 352.20], [686271600000, 352.22], [688950000000, 353.70], [691542000000, 354.98], [694220400000, 356.09], [696898800000, 356.85], [699404400000, 357.73], [702079200000, 358.91], [704671200000, 359.45], [707349600000, 359.19], [709941600000, 356.72], [712620000000, 354.79], [715298400000, 352.79], [717894000000, 353.20], [720572400000, 354.15], [723164400000, 355.39], [725842800000, 356.77], [728521200000, 357.17], [730940400000, 358.26], [733615200000, 359.16], [736207200000, 360.07], [738885600000, 359.41], [741477600000, 357.44], [744156000000, 355.30], [746834400000, 353.87], [749430000000, 354.04], [752108400000, 355.27], [754700400000, 356.70], [757378800000, 358.00], [760057200000, 358.81], [762476400000, 359.68], [765151200000, 361.13], [767743200000, 361.48], [770421600000, 360.60], [773013600000, 359.20], [775692000000, 357.23], [778370400000, 355.42], [780966000000, 355.89], [783644400000, 357.41], [786236400000, 358.74], [788914800000, 359.73], [791593200000, 360.61], [794012400000, 361.58], [796687200000, 363.05], [799279200000, 363.62], [801957600000, 363.03], [804549600000, 361.55], [807228000000, 358.94], [809906400000, 357.93], [812502000000, 357.80], [815180400000, 359.22], [817772400000, 360.44], [820450800000, 361.83], [823129200000, 362.95], [825634800000, 363.91], [828309600000, 364.28], [830901600000, 364.94], [833580000000, 364.70], [836172000000, 363.31], [838850400000, 361.15], [841528800000, 359.40], [844120800000, 359.34], [846802800000, 360.62], [849394800000, 361.96], [852073200000, 362.81], [854751600000, 363.87], [857170800000, 364.25], [859845600000, 366.02], [862437600000, 366.46], [865116000000, 365.32], [867708000000, 364.07], [870386400000, 361.95], [873064800000, 360.06], [875656800000, 360.49], [878338800000, 362.19], [880930800000, 364.12], [883609200000, 364.99], [886287600000, 365.82], [888706800000, 366.95], [891381600000, 368.42], [893973600000, 369.33], [896652000000, 368.78], [899244000000, 367.59], [901922400000, 365.84], [904600800000, 363.83], [907192800000, 364.18], [909874800000, 365.34], [912466800000, 366.93], [915145200000, 367.94], [917823600000, 368.82], [920242800000, 369.46], [922917600000, 370.77], [925509600000, 370.66], [928188000000, 370.10], [930780000000, 369.08], [933458400000, 366.66], [936136800000, 364.60], [938728800000, 365.17], [941410800000, 366.51], [944002800000, 367.89], [946681200000, 369.04], [949359600000, 369.35], [951865200000, 370.38], [954540000000, 371.63], [957132000000, 371.32], [959810400000, 371.53], [962402400000, 369.75], [965080800000, 368.23], [967759200000, 366.87], [970351200000, 366.94], [973033200000, 368.27], [975625200000, 369.64], [978303600000, 370.46], [980982000000, 371.44], [983401200000, 372.37], [986076000000, 373.33], [988668000000, 373.77], [991346400000, 373.09], [993938400000, 371.51], [996616800000, 369.55], [999295200000, 368.12], [1001887200000, 368.38], [1004569200000, 369.66], [1007161200000, 371.11], [1009839600000, 372.36], [1012518000000, 373.09], [1014937200000, 373.81], [1017612000000, 374.93], [1020204000000, 375.58], [1022882400000, 375.44], [1025474400000, 373.86], [1028152800000, 371.77], [1030831200000, 370.73], [1033423200000, 370.50], [1036105200000, 372.18], [1038697200000, 373.70], [1041375600000, 374.92], [1044054000000, 375.62], [1046473200000, 376.51], [1049148000000, 377.75], [1051740000000, 378.54], [1054418400000, 378.20], [1057010400000, 376.68], [1059688800000, 374.43], [1062367200000, 373.11], [1064959200000, 373.10], [1067641200000, 374.77], [1070233200000, 375.97], [1072911600000, 377.03], [1075590000000, 377.87], [1078095600000, 378.88], [1080770400000, 380.42], [1083362400000, 380.62], [1086040800000, 379.70], [1088632800000, 377.43], [1091311200000, 376.32], [1093989600000, 374.19], [1096581600000, 374.47], [1099263600000, 376.15], [1101855600000, 377.51], [1104534000000, 378.43], [1107212400000, 379.70], [1109631600000, 380.92], [1112306400000, 382.18], [1114898400000, 382.45], [1117576800000, 382.14], [1120168800000, 380.60], [1122847200000, 378.64], [1125525600000, 376.73], [1128117600000, 376.84], [1130799600000, 378.29], [1133391600000, 380.06], [1136070000000, 381.40], [1138748400000, 382.20], [1141167600000, 382.66], [1143842400000, 384.69], [1146434400000, 384.94], [1149112800000, 384.01], [1151704800000, 382.14], [1154383200000, 380.31], [1157061600000, 378.81], [1159653600000, 379.03], [1162335600000, 380.17], [1164927600000, 381.85], [1167606000000, 382.94], [1170284400000, 383.86], [1172703600000, 384.49], [1175378400000, 386.37], [1177970400000, 386.54], [1180648800000, 385.98], [1183240800000, 384.36], [1185919200000, 381.85], [1188597600000, 380.74], [1191189600000, 381.15], [1193871600000, 382.38], [1196463600000, 383.94], [1199142000000, 385.44]]; + + $.plot("#placeholder", [d], { + xaxis: { mode: "time" } + }); + + $("#whole").click(function () { + $.plot("#placeholder", [d], { + xaxis: { mode: "time" } + }); + }); + + $("#nineties").click(function () { + $.plot("#placeholder", [d], { + xaxis: { + mode: "time", + min: (new Date(1990, 0, 1)).getTime(), + max: (new Date(2000, 0, 1)).getTime() + } + }); + }); + + $("#latenineties").click(function () { + $.plot("#placeholder", [d], { + xaxis: { + mode: "time", + minTickSize: [1, "year"], + min: (new Date(1996, 0, 1)).getTime(), + max: (new Date(2000, 0, 1)).getTime() + } + }); + }); + + $("#ninetyninequarters").click(function () { + $.plot("#placeholder", [d], { + xaxis: { + mode: "time", + minTickSize: [1, "quarter"], + min: (new Date(1999, 0, 1)).getTime(), + max: (new Date(2000, 0, 1)).getTime() + } + }); + }); + + $("#ninetynine").click(function () { + $.plot("#placeholder", [d], { + xaxis: { + mode: "time", + minTickSize: [1, "month"], + min: (new Date(1999, 0, 1)).getTime(), + max: (new Date(2000, 0, 1)).getTime() + } + }); + }); + + $("#lastweekninetynine").click(function () { + $.plot("#placeholder", [d], { + xaxis: { + mode: "time", + minTickSize: [1, "day"], + min: (new Date(1999, 11, 25)).getTime(), + max: (new Date(2000, 0, 1)).getTime(), + timeformat: "%a" + } + }); + }); + + $("#lastdayninetynine").click(function () { + $.plot("#placeholder", [d], { + xaxis: { + mode: "time", + minTickSize: [1, "hour"], + min: (new Date(1999, 11, 31)).getTime(), + max: (new Date(2000, 0, 1)).getTime(), + twelveHourClock: true + } + }); + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Time Axes</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>Monthly mean atmospheric CO<sub>2</sub> in PPM at Mauna Loa, Hawaii (source: <a href="http://www.esrl.noaa.gov/gmd/ccgg/trends/">NOAA/ESRL</a>).</p> + + <p>If you tell Flot that an axis represents time, the data will be interpreted as timestamps and the ticks adjusted and formatted accordingly.</p> + + <p>Zoom to: <button id="whole">Whole period</button> + <button id="nineties">1990-2000</button> + <button id="latenineties">1996-2000</button></p> + + <p>Zoom to: <button id="ninetyninequarters">1999 by quarter</button> + <button id="ninetynine">1999 by month</button> + <button id="lastweekninetynine">Last week of 1999</button> + <button id="lastdayninetynine">Dec. 31, 1999</button></p> + + <p>The timestamps must be specified as Javascript timestamps, as milliseconds since January 1, 1970 00:00. This is like Unix timestamps, but in milliseconds instead of seconds (remember to multiply with 1000!).</p> + + <p>As an extra caveat, the timestamps are interpreted according to UTC and, by default, displayed as such. You can set the axis "timezone" option to "browser" to display the timestamps in the user's timezone, or, if you use timezoneJS, you can specify a time zone.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/background.png b/public/admin/view/javascript/jquery/flot/examples/background.png Binary files differnew file mode 100644 index 0000000..47a4a4c --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/background.png diff --git a/public/admin/view/javascript/jquery/flot/examples/basic-options/index.html b/public/admin/view/javascript/jquery/flot/examples/basic-options/index.html new file mode 100644 index 0000000..cb15fe2 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/basic-options/index.html @@ -0,0 +1,91 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Basic Options</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script type="text/javascript"> + + $(function () { + + var d1 = []; + for (var i = 0; i < Math.PI * 2; i += 0.25) { + d1.push([i, Math.sin(i)]); + } + + var d2 = []; + for (var i = 0; i < Math.PI * 2; i += 0.25) { + d2.push([i, Math.cos(i)]); + } + + var d3 = []; + for (var i = 0; i < Math.PI * 2; i += 0.1) { + d3.push([i, Math.tan(i)]); + } + + $.plot("#placeholder", [ + { label: "sin(x)", data: d1 }, + { label: "cos(x)", data: d2 }, + { label: "tan(x)", data: d3 } + ], { + series: { + lines: { show: true }, + points: { show: true } + }, + xaxis: { + ticks: [ + 0, [ Math.PI/2, "\u03c0/2" ], [ Math.PI, "\u03c0" ], + [ Math.PI * 3/2, "3\u03c0/2" ], [ Math.PI * 2, "2\u03c0" ] + ] + }, + yaxis: { + ticks: 10, + min: -2, + max: 2, + tickDecimals: 3 + }, + grid: { + backgroundColor: { colors: [ "#fff", "#eee" ] }, + borderWidth: { + top: 1, + right: 1, + bottom: 2, + left: 2 + } + } + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Basic Options</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>There are plenty of options you can set to control the precise looks of your plot. You can control the ticks on the axes, the legend, the graph type, etc.</p> + + <p>Flot goes to great lengths to provide sensible defaults so that you don't have to customize much for a good-looking result.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/basic-usage/index.html b/public/admin/view/javascript/jquery/flot/examples/basic-usage/index.html new file mode 100644 index 0000000..bf6d467 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/basic-usage/index.html @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Basic Usage</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script type="text/javascript"> + + $(function() { + + var d1 = []; + for (var i = 0; i < 14; i += 0.5) { + d1.push([i, Math.sin(i)]); + } + + var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]]; + + // A null signifies separate line segments + + var d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]]; + + $.plot("#placeholder", [ d1, d2, d3 ]); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Basic Usage</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>You don't have to do much to get an attractive plot. Create a placeholder, make sure it has dimensions (so Flot knows at what size to draw the plot), then call the plot function with your data.</p> + + <p>The axes are automatically scaled.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/canvas/index.html b/public/admin/view/javascript/jquery/flot/examples/canvas/index.html new file mode 100644 index 0000000..51f3656 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/canvas/index.html @@ -0,0 +1,75 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Canvas text</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.time.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.canvas.js"></script> + <script type="text/javascript"> + + $(function() { + + var oilPrices = [[1167692400000,61.05], [1167778800000,58.32], [1167865200000,57.35], [1167951600000,56.31], [1168210800000,55.55], [1168297200000,55.64], [1168383600000,54.02], [1168470000000,51.88], [1168556400000,52.99], [1168815600000,52.99], [1168902000000,51.21], [1168988400000,52.24], [1169074800000,50.48], [1169161200000,51.99], [1169420400000,51.13], [1169506800000,55.04], [1169593200000,55.37], [1169679600000,54.23], [1169766000000,55.42], [1170025200000,54.01], [1170111600000,56.97], [1170198000000,58.14], [1170284400000,58.14], [1170370800000,59.02], [1170630000000,58.74], [1170716400000,58.88], [1170802800000,57.71], [1170889200000,59.71], [1170975600000,59.89], [1171234800000,57.81], [1171321200000,59.06], [1171407600000,58.00], [1171494000000,57.99], [1171580400000,59.39], [1171839600000,59.39], [1171926000000,58.07], [1172012400000,60.07], [1172098800000,61.14], [1172444400000,61.39], [1172530800000,61.46], [1172617200000,61.79], [1172703600000,62.00], [1172790000000,60.07], [1173135600000,60.69], [1173222000000,61.82], [1173308400000,60.05], [1173654000000,58.91], [1173740400000,57.93], [1173826800000,58.16], [1173913200000,57.55], [1173999600000,57.11], [1174258800000,56.59], [1174345200000,59.61], [1174518000000,61.69], [1174604400000,62.28], [1174860000000,62.91], [1174946400000,62.93], [1175032800000,64.03], [1175119200000,66.03], [1175205600000,65.87], [1175464800000,64.64], [1175637600000,64.38], [1175724000000,64.28], [1175810400000,64.28], [1176069600000,61.51], [1176156000000,61.89], [1176242400000,62.01], [1176328800000,63.85], [1176415200000,63.63], [1176674400000,63.61], [1176760800000,63.10], [1176847200000,63.13], [1176933600000,61.83], [1177020000000,63.38], [1177279200000,64.58], [1177452000000,65.84], [1177538400000,65.06], [1177624800000,66.46], [1177884000000,64.40], [1178056800000,63.68], [1178143200000,63.19], [1178229600000,61.93], [1178488800000,61.47], [1178575200000,61.55], [1178748000000,61.81], [1178834400000,62.37], [1179093600000,62.46], [1179180000000,63.17], [1179266400000,62.55], [1179352800000,64.94], [1179698400000,66.27], [1179784800000,65.50], [1179871200000,65.77], [1179957600000,64.18], [1180044000000,65.20], [1180389600000,63.15], [1180476000000,63.49], [1180562400000,65.08], [1180908000000,66.30], [1180994400000,65.96], [1181167200000,66.93], [1181253600000,65.98], [1181599200000,65.35], [1181685600000,66.26], [1181858400000,68.00], [1182117600000,69.09], [1182204000000,69.10], [1182290400000,68.19], [1182376800000,68.19], [1182463200000,69.14], [1182722400000,68.19], [1182808800000,67.77], [1182895200000,68.97], [1182981600000,69.57], [1183068000000,70.68], [1183327200000,71.09], [1183413600000,70.92], [1183586400000,71.81], [1183672800000,72.81], [1183932000000,72.19], [1184018400000,72.56], [1184191200000,72.50], [1184277600000,74.15], [1184623200000,75.05], [1184796000000,75.92], [1184882400000,75.57], [1185141600000,74.89], [1185228000000,73.56], [1185314400000,75.57], [1185400800000,74.95], [1185487200000,76.83], [1185832800000,78.21], [1185919200000,76.53], [1186005600000,76.86], [1186092000000,76.00], [1186437600000,71.59], [1186696800000,71.47], [1186956000000,71.62], [1187042400000,71.00], [1187301600000,71.98], [1187560800000,71.12], [1187647200000,69.47], [1187733600000,69.26], [1187820000000,69.83], [1187906400000,71.09], [1188165600000,71.73], [1188338400000,73.36], [1188511200000,74.04], [1188856800000,76.30], [1189116000000,77.49], [1189461600000,78.23], [1189548000000,79.91], [1189634400000,80.09], [1189720800000,79.10], [1189980000000,80.57], [1190066400000,81.93], [1190239200000,83.32], [1190325600000,81.62], [1190584800000,80.95], [1190671200000,79.53], [1190757600000,80.30], [1190844000000,82.88], [1190930400000,81.66], [1191189600000,80.24], [1191276000000,80.05], [1191362400000,79.94], [1191448800000,81.44], [1191535200000,81.22], [1191794400000,79.02], [1191880800000,80.26], [1191967200000,80.30], [1192053600000,83.08], [1192140000000,83.69], [1192399200000,86.13], [1192485600000,87.61], [1192572000000,87.40], [1192658400000,89.47], [1192744800000,88.60], [1193004000000,87.56], [1193090400000,87.56], [1193176800000,87.10], [1193263200000,91.86], [1193612400000,93.53], [1193698800000,94.53], [1193871600000,95.93], [1194217200000,93.98], [1194303600000,96.37], [1194476400000,95.46], [1194562800000,96.32], [1195081200000,93.43], [1195167600000,95.10], [1195426800000,94.64], [1195513200000,95.10], [1196031600000,97.70], [1196118000000,94.42], [1196204400000,90.62], [1196290800000,91.01], [1196377200000,88.71], [1196636400000,88.32], [1196809200000,90.23], [1196982000000,88.28], [1197241200000,87.86], [1197327600000,90.02], [1197414000000,92.25], [1197586800000,90.63], [1197846000000,90.63], [1197932400000,90.49], [1198018800000,91.24], [1198105200000,91.06], [1198191600000,90.49], [1198710000000,96.62], [1198796400000,96.00], [1199142000000,99.62], [1199314800000,99.18], [1199401200000,95.09], [1199660400000,96.33], [1199833200000,95.67], [1200351600000,91.90], [1200438000000,90.84], [1200524400000,90.13], [1200610800000,90.57], [1200956400000,89.21], [1201042800000,86.99], [1201129200000,89.85], [1201474800000,90.99], [1201561200000,91.64], [1201647600000,92.33], [1201734000000,91.75], [1202079600000,90.02], [1202166000000,88.41], [1202252400000,87.14], [1202338800000,88.11], [1202425200000,91.77], [1202770800000,92.78], [1202857200000,93.27], [1202943600000,95.46], [1203030000000,95.46], [1203289200000,101.74], [1203462000000,98.81], [1203894000000,100.88], [1204066800000,99.64], [1204153200000,102.59], [1204239600000,101.84], [1204498800000,99.52], [1204585200000,99.52], [1204671600000,104.52], [1204758000000,105.47], [1204844400000,105.15], [1205103600000,108.75], [1205276400000,109.92], [1205362800000,110.33], [1205449200000,110.21], [1205708400000,105.68], [1205967600000,101.84], [1206313200000,100.86], [1206399600000,101.22], [1206486000000,105.90], [1206572400000,107.58], [1206658800000,105.62], [1206914400000,101.58], [1207000800000,100.98], [1207173600000,103.83], [1207260000000,106.23], [1207605600000,108.50], [1207778400000,110.11], [1207864800000,110.14], [1208210400000,113.79], [1208296800000,114.93], [1208383200000,114.86], [1208728800000,117.48], [1208815200000,118.30], [1208988000000,116.06], [1209074400000,118.52], [1209333600000,118.75], [1209420000000,113.46], [1209592800000,112.52], [1210024800000,121.84], [1210111200000,123.53], [1210197600000,123.69], [1210543200000,124.23], [1210629600000,125.80], [1210716000000,126.29], [1211148000000,127.05], [1211320800000,129.07], [1211493600000,132.19], [1211839200000,128.85], [1212357600000,127.76], [1212703200000,138.54], [1212962400000,136.80], [1213135200000,136.38], [1213308000000,134.86], [1213653600000,134.01], [1213740000000,136.68], [1213912800000,135.65], [1214172000000,134.62], [1214258400000,134.62], [1214344800000,134.62], [1214431200000,139.64], [1214517600000,140.21], [1214776800000,140.00], [1214863200000,140.97], [1214949600000,143.57], [1215036000000,145.29], [1215381600000,141.37], [1215468000000,136.04], [1215727200000,146.40], [1215986400000,145.18], [1216072800000,138.74], [1216159200000,134.60], [1216245600000,129.29], [1216332000000,130.65], [1216677600000,127.95], [1216850400000,127.95], [1217282400000,122.19], [1217455200000,124.08], [1217541600000,125.10], [1217800800000,121.41], [1217887200000,119.17], [1217973600000,118.58], [1218060000000,120.02], [1218405600000,114.45], [1218492000000,113.01], [1218578400000,116.00], [1218751200000,113.77], [1219010400000,112.87], [1219096800000,114.53], [1219269600000,114.98], [1219356000000,114.98], [1219701600000,116.27], [1219788000000,118.15], [1219874400000,115.59], [1219960800000,115.46], [1220306400000,109.71], [1220392800000,109.35], [1220565600000,106.23], [1220824800000,106.34]]; + + var exchangeRates = [[1167606000000,0.7580], [1167692400000,0.7580], [1167778800000,0.75470], [1167865200000,0.75490], [1167951600000,0.76130], [1168038000000,0.76550], [1168124400000,0.76930], [1168210800000,0.76940], [1168297200000,0.76880], [1168383600000,0.76780], [1168470000000,0.77080], [1168556400000,0.77270], [1168642800000,0.77490], [1168729200000,0.77410], [1168815600000,0.77410], [1168902000000,0.77320], [1168988400000,0.77270], [1169074800000,0.77370], [1169161200000,0.77240], [1169247600000,0.77120], [1169334000000,0.7720], [1169420400000,0.77210], [1169506800000,0.77170], [1169593200000,0.77040], [1169679600000,0.7690], [1169766000000,0.77110], [1169852400000,0.7740], [1169938800000,0.77450], [1170025200000,0.77450], [1170111600000,0.7740], [1170198000000,0.77160], [1170284400000,0.77130], [1170370800000,0.76780], [1170457200000,0.76880], [1170543600000,0.77180], [1170630000000,0.77180], [1170716400000,0.77280], [1170802800000,0.77290], [1170889200000,0.76980], [1170975600000,0.76850], [1171062000000,0.76810], [1171148400000,0.7690], [1171234800000,0.7690], [1171321200000,0.76980], [1171407600000,0.76990], [1171494000000,0.76510], [1171580400000,0.76130], [1171666800000,0.76160], [1171753200000,0.76140], [1171839600000,0.76140], [1171926000000,0.76070], [1172012400000,0.76020], [1172098800000,0.76110], [1172185200000,0.76220], [1172271600000,0.76150], [1172358000000,0.75980], [1172444400000,0.75980], [1172530800000,0.75920], [1172617200000,0.75730], [1172703600000,0.75660], [1172790000000,0.75670], [1172876400000,0.75910], [1172962800000,0.75820], [1173049200000,0.75850], [1173135600000,0.76130], [1173222000000,0.76310], [1173308400000,0.76150], [1173394800000,0.760], [1173481200000,0.76130], [1173567600000,0.76270], [1173654000000,0.76270], [1173740400000,0.76080], [1173826800000,0.75830], [1173913200000,0.75750], [1173999600000,0.75620], [1174086000000,0.7520], [1174172400000,0.75120], [1174258800000,0.75120], [1174345200000,0.75170], [1174431600000,0.7520], [1174518000000,0.75110], [1174604400000,0.7480], [1174690800000,0.75090], [1174777200000,0.75310], [1174860000000,0.75310], [1174946400000,0.75270], [1175032800000,0.74980], [1175119200000,0.74930], [1175205600000,0.75040], [1175292000000,0.750], [1175378400000,0.74910], [1175464800000,0.74910], [1175551200000,0.74850], [1175637600000,0.74840], [1175724000000,0.74920], [1175810400000,0.74710], [1175896800000,0.74590], [1175983200000,0.74770], [1176069600000,0.74770], [1176156000000,0.74830], [1176242400000,0.74580], [1176328800000,0.74480], [1176415200000,0.7430], [1176501600000,0.73990], [1176588000000,0.73950], [1176674400000,0.73950], [1176760800000,0.73780], [1176847200000,0.73820], [1176933600000,0.73620], [1177020000000,0.73550], [1177106400000,0.73480], [1177192800000,0.73610], [1177279200000,0.73610], [1177365600000,0.73650], [1177452000000,0.73620], [1177538400000,0.73310], [1177624800000,0.73390], [1177711200000,0.73440], [1177797600000,0.73270], [1177884000000,0.73270], [1177970400000,0.73360], [1178056800000,0.73330], [1178143200000,0.73590], [1178229600000,0.73590], [1178316000000,0.73720], [1178402400000,0.7360], [1178488800000,0.7360], [1178575200000,0.7350], [1178661600000,0.73650], [1178748000000,0.73840], [1178834400000,0.73950], [1178920800000,0.74130], [1179007200000,0.73970], [1179093600000,0.73960], [1179180000000,0.73850], [1179266400000,0.73780], [1179352800000,0.73660], [1179439200000,0.740], [1179525600000,0.74110], [1179612000000,0.74060], [1179698400000,0.74050], [1179784800000,0.74140], [1179871200000,0.74310], [1179957600000,0.74310], [1180044000000,0.74380], [1180130400000,0.74430], [1180216800000,0.74430], [1180303200000,0.74430], [1180389600000,0.74340], [1180476000000,0.74290], [1180562400000,0.74420], [1180648800000,0.7440], [1180735200000,0.74390], [1180821600000,0.74370], [1180908000000,0.74370], [1180994400000,0.74290], [1181080800000,0.74030], [1181167200000,0.73990], [1181253600000,0.74180], [1181340000000,0.74680], [1181426400000,0.7480], [1181512800000,0.7480], [1181599200000,0.7490], [1181685600000,0.74940], [1181772000000,0.75220], [1181858400000,0.75150], [1181944800000,0.75020], [1182031200000,0.74720], [1182117600000,0.74720], [1182204000000,0.74620], [1182290400000,0.74550], [1182376800000,0.74490], [1182463200000,0.74670], [1182549600000,0.74580], [1182636000000,0.74270], [1182722400000,0.74270], [1182808800000,0.7430], [1182895200000,0.74290], [1182981600000,0.7440], [1183068000000,0.7430], [1183154400000,0.74220], [1183240800000,0.73880], [1183327200000,0.73880], [1183413600000,0.73690], [1183500000000,0.73450], [1183586400000,0.73450], [1183672800000,0.73450], [1183759200000,0.73520], [1183845600000,0.73410], [1183932000000,0.73410], [1184018400000,0.7340], [1184104800000,0.73240], [1184191200000,0.72720], [1184277600000,0.72640], [1184364000000,0.72550], [1184450400000,0.72580], [1184536800000,0.72580], [1184623200000,0.72560], [1184709600000,0.72570], [1184796000000,0.72470], [1184882400000,0.72430], [1184968800000,0.72440], [1185055200000,0.72350], [1185141600000,0.72350], [1185228000000,0.72350], [1185314400000,0.72350], [1185400800000,0.72620], [1185487200000,0.72880], [1185573600000,0.73010], [1185660000000,0.73370], [1185746400000,0.73370], [1185832800000,0.73240], [1185919200000,0.72970], [1186005600000,0.73170], [1186092000000,0.73150], [1186178400000,0.72880], [1186264800000,0.72630], [1186351200000,0.72630], [1186437600000,0.72420], [1186524000000,0.72530], [1186610400000,0.72640], [1186696800000,0.7270], [1186783200000,0.73120], [1186869600000,0.73050], [1186956000000,0.73050], [1187042400000,0.73180], [1187128800000,0.73580], [1187215200000,0.74090], [1187301600000,0.74540], [1187388000000,0.74370], [1187474400000,0.74240], [1187560800000,0.74240], [1187647200000,0.74150], [1187733600000,0.74190], [1187820000000,0.74140], [1187906400000,0.73770], [1187992800000,0.73550], [1188079200000,0.73150], [1188165600000,0.73150], [1188252000000,0.7320], [1188338400000,0.73320], [1188424800000,0.73460], [1188511200000,0.73280], [1188597600000,0.73230], [1188684000000,0.7340], [1188770400000,0.7340], [1188856800000,0.73360], [1188943200000,0.73510], [1189029600000,0.73460], [1189116000000,0.73210], [1189202400000,0.72940], [1189288800000,0.72660], [1189375200000,0.72660], [1189461600000,0.72540], [1189548000000,0.72420], [1189634400000,0.72130], [1189720800000,0.71970], [1189807200000,0.72090], [1189893600000,0.7210], [1189980000000,0.7210], [1190066400000,0.7210], [1190152800000,0.72090], [1190239200000,0.71590], [1190325600000,0.71330], [1190412000000,0.71050], [1190498400000,0.70990], [1190584800000,0.70990], [1190671200000,0.70930], [1190757600000,0.70930], [1190844000000,0.70760], [1190930400000,0.7070], [1191016800000,0.70490], [1191103200000,0.70120], [1191189600000,0.70110], [1191276000000,0.70190], [1191362400000,0.70460], [1191448800000,0.70630], [1191535200000,0.70890], [1191621600000,0.70770], [1191708000000,0.70770], [1191794400000,0.70770], [1191880800000,0.70910], [1191967200000,0.71180], [1192053600000,0.70790], [1192140000000,0.70530], [1192226400000,0.7050], [1192312800000,0.70550], [1192399200000,0.70550], [1192485600000,0.70450], [1192572000000,0.70510], [1192658400000,0.70510], [1192744800000,0.70170], [1192831200000,0.70], [1192917600000,0.69950], [1193004000000,0.69940], [1193090400000,0.70140], [1193176800000,0.70360], [1193263200000,0.70210], [1193349600000,0.70020], [1193436000000,0.69670], [1193522400000,0.6950], [1193612400000,0.6950], [1193698800000,0.69390], [1193785200000,0.6940], [1193871600000,0.69220], [1193958000000,0.69190], [1194044400000,0.69140], [1194130800000,0.68940], [1194217200000,0.68910], [1194303600000,0.69040], [1194390000000,0.6890], [1194476400000,0.68340], [1194562800000,0.68230], [1194649200000,0.68070], [1194735600000,0.68150], [1194822000000,0.68150], [1194908400000,0.68470], [1194994800000,0.68590], [1195081200000,0.68220], [1195167600000,0.68270], [1195254000000,0.68370], [1195340400000,0.68230], [1195426800000,0.68220], [1195513200000,0.68220], [1195599600000,0.67920], [1195686000000,0.67460], [1195772400000,0.67350], [1195858800000,0.67310], [1195945200000,0.67420], [1196031600000,0.67440], [1196118000000,0.67390], [1196204400000,0.67310], [1196290800000,0.67610], [1196377200000,0.67610], [1196463600000,0.67850], [1196550000000,0.68180], [1196636400000,0.68360], [1196722800000,0.68230], [1196809200000,0.68050], [1196895600000,0.67930], [1196982000000,0.68490], [1197068400000,0.68330], [1197154800000,0.68250], [1197241200000,0.68250], [1197327600000,0.68160], [1197414000000,0.67990], [1197500400000,0.68130], [1197586800000,0.68090], [1197673200000,0.68680], [1197759600000,0.69330], [1197846000000,0.69330], [1197932400000,0.69450], [1198018800000,0.69440], [1198105200000,0.69460], [1198191600000,0.69640], [1198278000000,0.69650], [1198364400000,0.69560], [1198450800000,0.69560], [1198537200000,0.6950], [1198623600000,0.69480], [1198710000000,0.69280], [1198796400000,0.68870], [1198882800000,0.68240], [1198969200000,0.67940], [1199055600000,0.67940], [1199142000000,0.68030], [1199228400000,0.68550], [1199314800000,0.68240], [1199401200000,0.67910], [1199487600000,0.67830], [1199574000000,0.67850], [1199660400000,0.67850], [1199746800000,0.67970], [1199833200000,0.680], [1199919600000,0.68030], [1200006000000,0.68050], [1200092400000,0.6760], [1200178800000,0.6770], [1200265200000,0.6770], [1200351600000,0.67360], [1200438000000,0.67260], [1200524400000,0.67640], [1200610800000,0.68210], [1200697200000,0.68310], [1200783600000,0.68420], [1200870000000,0.68420], [1200956400000,0.68870], [1201042800000,0.69030], [1201129200000,0.68480], [1201215600000,0.68240], [1201302000000,0.67880], [1201388400000,0.68140], [1201474800000,0.68140], [1201561200000,0.67970], [1201647600000,0.67690], [1201734000000,0.67650], [1201820400000,0.67330], [1201906800000,0.67290], [1201993200000,0.67580], [1202079600000,0.67580], [1202166000000,0.6750], [1202252400000,0.6780], [1202338800000,0.68330], [1202425200000,0.68560], [1202511600000,0.69030], [1202598000000,0.68960], [1202684400000,0.68960], [1202770800000,0.68820], [1202857200000,0.68790], [1202943600000,0.68620], [1203030000000,0.68520], [1203116400000,0.68230], [1203202800000,0.68130], [1203289200000,0.68130], [1203375600000,0.68220], [1203462000000,0.68020], [1203548400000,0.68020], [1203634800000,0.67840], [1203721200000,0.67480], [1203807600000,0.67470], [1203894000000,0.67470], [1203980400000,0.67480], [1204066800000,0.67330], [1204153200000,0.6650], [1204239600000,0.66110], [1204326000000,0.65830], [1204412400000,0.6590], [1204498800000,0.6590], [1204585200000,0.65810], [1204671600000,0.65780], [1204758000000,0.65740], [1204844400000,0.65320], [1204930800000,0.65020], [1205017200000,0.65140], [1205103600000,0.65140], [1205190000000,0.65070], [1205276400000,0.6510], [1205362800000,0.64890], [1205449200000,0.64240], [1205535600000,0.64060], [1205622000000,0.63820], [1205708400000,0.63820], [1205794800000,0.63410], [1205881200000,0.63440], [1205967600000,0.63780], [1206054000000,0.64390], [1206140400000,0.64780], [1206226800000,0.64810], [1206313200000,0.64810], [1206399600000,0.64940], [1206486000000,0.64380], [1206572400000,0.63770], [1206658800000,0.63290], [1206745200000,0.63360], [1206831600000,0.63330], [1206914400000,0.63330], [1207000800000,0.6330], [1207087200000,0.63710], [1207173600000,0.64030], [1207260000000,0.63960], [1207346400000,0.63640], [1207432800000,0.63560], [1207519200000,0.63560], [1207605600000,0.63680], [1207692000000,0.63570], [1207778400000,0.63540], [1207864800000,0.6320], [1207951200000,0.63320], [1208037600000,0.63280], [1208124000000,0.63310], [1208210400000,0.63420], [1208296800000,0.63210], [1208383200000,0.63020], [1208469600000,0.62780], [1208556000000,0.63080], [1208642400000,0.63240], [1208728800000,0.63240], [1208815200000,0.63070], [1208901600000,0.62770], [1208988000000,0.62690], [1209074400000,0.63350], [1209160800000,0.63920], [1209247200000,0.640], [1209333600000,0.64010], [1209420000000,0.63960], [1209506400000,0.64070], [1209592800000,0.64230], [1209679200000,0.64290], [1209765600000,0.64720], [1209852000000,0.64850], [1209938400000,0.64860], [1210024800000,0.64670], [1210111200000,0.64440], [1210197600000,0.64670], [1210284000000,0.65090], [1210370400000,0.64780], [1210456800000,0.64610], [1210543200000,0.64610], [1210629600000,0.64680], [1210716000000,0.64490], [1210802400000,0.6470], [1210888800000,0.64610], [1210975200000,0.64520], [1211061600000,0.64220], [1211148000000,0.64220], [1211234400000,0.64250], [1211320800000,0.64140], [1211407200000,0.63660], [1211493600000,0.63460], [1211580000000,0.6350], [1211666400000,0.63460], [1211752800000,0.63460], [1211839200000,0.63430], [1211925600000,0.63460], [1212012000000,0.63790], [1212098400000,0.64160], [1212184800000,0.64420], [1212271200000,0.64310], [1212357600000,0.64310], [1212444000000,0.64350], [1212530400000,0.6440], [1212616800000,0.64730], [1212703200000,0.64690], [1212789600000,0.63860], [1212876000000,0.63560], [1212962400000,0.6340], [1213048800000,0.63460], [1213135200000,0.6430], [1213221600000,0.64520], [1213308000000,0.64670], [1213394400000,0.65060], [1213480800000,0.65040], [1213567200000,0.65030], [1213653600000,0.64810], [1213740000000,0.64510], [1213826400000,0.6450], [1213912800000,0.64410], [1213999200000,0.64140], [1214085600000,0.64090], [1214172000000,0.64090], [1214258400000,0.64280], [1214344800000,0.64310], [1214431200000,0.64180], [1214517600000,0.63710], [1214604000000,0.63490], [1214690400000,0.63330], [1214776800000,0.63340], [1214863200000,0.63380], [1214949600000,0.63420], [1215036000000,0.6320], [1215122400000,0.63180], [1215208800000,0.6370], [1215295200000,0.63680], [1215381600000,0.63680], [1215468000000,0.63830], [1215554400000,0.63710], [1215640800000,0.63710], [1215727200000,0.63550], [1215813600000,0.6320], [1215900000000,0.62770], [1215986400000,0.62760], [1216072800000,0.62910], [1216159200000,0.62740], [1216245600000,0.62930], [1216332000000,0.63110], [1216418400000,0.6310], [1216504800000,0.63120], [1216591200000,0.63120], [1216677600000,0.63040], [1216764000000,0.62940], [1216850400000,0.63480], [1216936800000,0.63780], [1217023200000,0.63680], [1217109600000,0.63680], [1217196000000,0.63680], [1217282400000,0.6360], [1217368800000,0.6370], [1217455200000,0.64180], [1217541600000,0.64110], [1217628000000,0.64350], [1217714400000,0.64270], [1217800800000,0.64270], [1217887200000,0.64190], [1217973600000,0.64460], [1218060000000,0.64680], [1218146400000,0.64870], [1218232800000,0.65940], [1218319200000,0.66660], [1218405600000,0.66660], [1218492000000,0.66780], [1218578400000,0.67120], [1218664800000,0.67050], [1218751200000,0.67180], [1218837600000,0.67840], [1218924000000,0.68110], [1219010400000,0.68110], [1219096800000,0.67940], [1219183200000,0.68040], [1219269600000,0.67810], [1219356000000,0.67560], [1219442400000,0.67350], [1219528800000,0.67630], [1219615200000,0.67620], [1219701600000,0.67770], [1219788000000,0.68150], [1219874400000,0.68020], [1219960800000,0.6780], [1220047200000,0.67960], [1220133600000,0.68170], [1220220000000,0.68170], [1220306400000,0.68320], [1220392800000,0.68770], [1220479200000,0.69120], [1220565600000,0.69140], [1220652000000,0.70090], [1220738400000,0.70120], [1220824800000,0.7010], [1220911200000,0.70050]]; + + var data = [ + { data: oilPrices, label: "Oil price ($)" }, + { data: exchangeRates, label: "USD/EUR exchange rate", yaxis: 2 } + ]; + + var options = { + canvas: true, + xaxes: [ { mode: "time" } ], + yaxes: [ { min: 0 }, { + position: "right", + alignTicksWithAxis: 1, + tickFormatter: function(value, axis) { + return value.toFixed(axis.tickDecimals) + "€"; + } + } ], + legend: { position: "sw" } + } + + $.plot("#placeholder", data, options); + + $("input").change(function () { + options.canvas = $(this).is(":checked"); + $.plot("#placeholder", data, options); + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Canvas text</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>This example uses the same dataset (raw oil price in US $/barrel of crude oil vs. the exchange rate from US $ to €) as the multiple-axes example, but uses the canvas plugin to render axis tick labels using canvas text.</p> + + <p><input type="checkbox" checked="checked">Enable canvas text</input></p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/categories/index.html b/public/admin/view/javascript/jquery/flot/examples/categories/index.html new file mode 100644 index 0000000..97bafb8 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/categories/index.html @@ -0,0 +1,64 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Categories</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.categories.js"></script> + <script type="text/javascript"> + + $(function() { + + var data = [ ["January", 10], ["February", 8], ["March", 4], ["April", 13], ["May", 17], ["June", 9] ]; + + $.plot("#placeholder", [ data ], { + series: { + bars: { + show: true, + barWidth: 0.6, + align: "center" + } + }, + xaxis: { + mode: "categories", + tickLength: 0 + } + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Categories</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>With the categories plugin you can plot categories/textual data easily.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> + + + + + diff --git a/public/admin/view/javascript/jquery/flot/examples/examples.css b/public/admin/view/javascript/jquery/flot/examples/examples.css new file mode 100644 index 0000000..ee47247 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/examples.css @@ -0,0 +1,97 @@ +* { padding: 0; margin: 0; vertical-align: top; } + +body { + background: url(background.png) repeat-x; + font: 18px/1.5em "proxima-nova", Helvetica, Arial, sans-serif; +} + +a { color: #069; } +a:hover { color: #28b; } + +h2 { + margin-top: 15px; + font: normal 32px "omnes-pro", Helvetica, Arial, sans-serif; +} + +h3 { + margin-left: 30px; + font: normal 26px "omnes-pro", Helvetica, Arial, sans-serif; + color: #666; +} + +p { + margin-top: 10px; +} + +button { + font-size: 18px; + padding: 1px 7px; +} + +input { + font-size: 18px; +} + +input[type=checkbox] { + margin: 7px; +} + +#header { + position: relative; + width: 900px; + margin: auto; +} + +#header h2 { + margin-left: 10px; + vertical-align: middle; + font-size: 42px; + font-weight: bold; + text-decoration: none; + color: #000; +} + +#content { + width: 880px; + margin: 0 auto; + padding: 10px; +} + +#footer { + margin-top: 25px; + margin-bottom: 10px; + text-align: center; + font-size: 12px; + color: #999; +} + +.demo-container { + box-sizing: border-box; + width: 850px; + height: 450px; + padding: 20px 15px 15px 15px; + margin: 15px auto 30px auto; + border: 1px solid #ddd; + background: #fff; + background: linear-gradient(#f6f6f6 0, #fff 50px); + background: -o-linear-gradient(#f6f6f6 0, #fff 50px); + background: -ms-linear-gradient(#f6f6f6 0, #fff 50px); + background: -moz-linear-gradient(#f6f6f6 0, #fff 50px); + background: -webkit-linear-gradient(#f6f6f6 0, #fff 50px); + box-shadow: 0 3px 10px rgba(0,0,0,0.15); + -o-box-shadow: 0 3px 10px rgba(0,0,0,0.1); + -ms-box-shadow: 0 3px 10px rgba(0,0,0,0.1); + -moz-box-shadow: 0 3px 10px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 3px 10px rgba(0,0,0,0.1); +} + +.demo-placeholder { + width: 100%; + height: 100%; + font-size: 14px; + line-height: 1.2em; +} + +.legend table { + border-spacing: 5px; +}
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/examples/image/hs-2004-27-a-large-web.jpg b/public/admin/view/javascript/jquery/flot/examples/image/hs-2004-27-a-large-web.jpg Binary files differnew file mode 100644 index 0000000..a1d5c05 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/image/hs-2004-27-a-large-web.jpg diff --git a/public/admin/view/javascript/jquery/flot/examples/image/index.html b/public/admin/view/javascript/jquery/flot/examples/image/index.html new file mode 100644 index 0000000..0bc89e0 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/image/index.html @@ -0,0 +1,69 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Image Plots</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.image.js"></script> + <script type="text/javascript"> + + $(function() { + + var data = [[["hs-2004-27-a-large-web.jpg", -10, -10, 10, 10]]]; + + var options = { + series: { + images: { + show: true + } + }, + xaxis: { + min: -8, + max: 4 + }, + yaxis: { + min: -8, + max: 4 + } + }; + + $.plot.image.loadDataImages(data, options, function () { + $.plot("#placeholder", data, options); + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Image Plots</h2> + </div> + + <div id="content"> + + <div class="demo-container" style="width:600px;height:600px;"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>The Cat's Eye Nebula (<a href="http://hubblesite.org/gallery/album/nebula/pr2004027a/">picture from Hubble</a>).</p> + + <p>With the image plugin, you can plot static images against a set of axes. This is for useful for adding ticks to complex prerendered visualizations. Instead of inputting data points, you specify the images and where their two opposite corners are supposed to be in plot space.</p> + + <p>Images represent a little further complication because you need to make sure they are loaded before you can use them (Flot skips incomplete images). The plugin comes with a couple of helpers for doing that.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/index.html b/public/admin/view/javascript/jquery/flot/examples/index.html new file mode 100644 index 0000000..6975d29 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/index.html @@ -0,0 +1,80 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples</title> + <link href="examples.css" rel="stylesheet" type="text/css"> + <style> + + h3 { + margin-top: 30px; + margin-bottom: 5px; + } + + </style> + <script language="javascript" type="text/javascript" src="../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script> + <script type="text/javascript"> + + $(function() { + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Flot Examples</h2> + </div> + + <div id="content"> + + <p>Here are some examples for <a href="http://www.flotcharts.org">Flot</a>, the Javascript charting library for jQuery:</p> + + <h3>Basic Usage</h3> + + <ul> + <li><a href="basic-usage/index.html">Basic example</a></li> + <li><a href="series-types/index.html">Different graph types</a> and <a href="categories/index.html">simple categories/textual data</a></li> + <li><a href="basic-options/index.html">Setting various options</a> and <a href="annotating/index.html">annotating a chart</a></li> + <li><a href="ajax/index.html">Updating graphs with AJAX</a> and <a href="realtime/index.html">real-time updates</a></li> + </ul> + + <h3>Interactivity</h3> + + <ul> + <li><a href="series-toggle/index.html">Turning series on/off</a></li> + <li><a href="selection/index.html">Rectangular selection support and zooming</a> and <a href="zooming/index.html">zooming with overview</a> (both with selection plugin)</li> + <li><a href="interacting/index.html">Interacting with the data points</a></li> + <li><a href="navigate/index.html">Panning and zooming</a> (with navigation plugin)</li> + <li><a href="resize/index.html">Automatically redraw when window is resized</a> (with resize plugin)</li> + </ul> + + <h3>Additional Features</h3> + + <ul> + <li><a href="symbols/index.html">Using other symbols than circles for points</a> (with symbol plugin)</li> + <li><a href="axes-time/index.html">Plotting time series</a>, <a href="visitors/index.html">visitors per day with zooming and weekends</a> (with selection plugin) and <a href="axes-time-zones/index.html">time zone support</a></li> + <li><a href="axes-multiple/index.html">Multiple axes</a> and <a href="axes-interacting/index.html">interacting with the axes</a></li> + <li><a href="threshold/index.html">Thresholding the data</a> (with threshold plugin)</li> + <li><a href="stacking/index.html">Stacked charts</a> (with stacking plugin)</li> + <li><a href="percentiles/index.html">Using filled areas to plot percentiles</a> (with fillbetween plugin)</li> + <li><a href="tracking/index.html">Tracking curves with crosshair</a> (with crosshair plugin)</li> + <li><a href="image/index.html">Plotting prerendered images</a> (with image plugin)</li> + <li><a href="series-errorbars/index.html">Plotting error bars</a> (with errorbars plugin)</li> + <li><a href="series-pie/index.html">Pie charts</a> (with pie plugin)</li> + <li><a href="canvas/index.html">Rendering text with canvas instead of HTML</a> (with canvas plugin)</li> + </ul> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/interacting/index.html b/public/admin/view/javascript/jquery/flot/examples/interacting/index.html new file mode 100644 index 0000000..19136df --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/interacting/index.html @@ -0,0 +1,130 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Interactivity</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script type="text/javascript"> + + $(function() { + + var sin = [], + cos = []; + + for (var i = 0; i < 14; i += 0.5) { + sin.push([i, Math.sin(i)]); + cos.push([i, Math.cos(i)]); + } + + var plot = $.plot("#placeholder", [ + { data: sin, label: "sin(x)"}, + { data: cos, label: "cos(x)"} + ], { + series: { + lines: { + show: true + }, + points: { + show: true + } + }, + grid: { + hoverable: true, + clickable: true + }, + yaxis: { + min: -1.2, + max: 1.2 + } + }); + + function showTooltip(x, y, contents) { + $("<div id='tooltip'>" + contents + "</div>").css({ + position: "absolute", + display: "none", + top: y + 5, + left: x + 5, + border: "1px solid #fdd", + padding: "2px", + "background-color": "#fee", + opacity: 0.80 + }).appendTo("body").fadeIn(200); + } + + var previousPoint = null; + $("#placeholder").bind("plothover", function (event, pos, item) { + + if ($("#enablePosition:checked").length > 0) { + var str = "(" + pos.x.toFixed(2) + ", " + pos.y.toFixed(2) + ")"; + $("#hoverdata").text(str); + } + + if ($("#enableTooltip:checked").length > 0) { + if (item) { + if (previousPoint != item.dataIndex) { + + previousPoint = item.dataIndex; + + $("#tooltip").remove(); + var x = item.datapoint[0].toFixed(2), + y = item.datapoint[1].toFixed(2); + + showTooltip(item.pageX, item.pageY, + item.series.label + " of " + x + " = " + y); + } + } else { + $("#tooltip").remove(); + previousPoint = null; + } + } + }); + + $("#placeholder").bind("plotclick", function (event, pos, item) { + if (item) { + $("#clickdata").text(" - click point " + item.dataIndex + " in " + item.series.label); + plot.highlight(item.series, item.datapoint); + } + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Interactivity</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>One of the goals of Flot is to support user interactions. Try pointing and clicking on the points.</p> + + <p> + <label><input id="enablePosition" type="checkbox"></input>Show mouse position</label> + <span id="hoverdata"></span> + <span id="clickdata"></span> + </p> + + <p>A tooltip is easy to build with a bit of jQuery code and the data returned from the plot.</p> + + <p><label><input id="enableTooltip" type="checkbox"></input>Enable tooltip</label></p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-down.gif b/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-down.gif Binary files differnew file mode 100644 index 0000000..e239d11 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-down.gif diff --git a/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-left.gif b/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-left.gif Binary files differnew file mode 100644 index 0000000..93ffd5a --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-left.gif diff --git a/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-right.gif b/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-right.gif Binary files differnew file mode 100644 index 0000000..5fd0530 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-right.gif diff --git a/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-up.gif b/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-up.gif Binary files differnew file mode 100644 index 0000000..7d19626 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/navigate/arrow-up.gif diff --git a/public/admin/view/javascript/jquery/flot/examples/navigate/index.html b/public/admin/view/javascript/jquery/flot/examples/navigate/index.html new file mode 100644 index 0000000..dbb170f --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/navigate/index.html @@ -0,0 +1,153 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Navigation</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <style type="text/css"> + + #placeholder .button { + position: absolute; + cursor: pointer; + } + + #placeholder div.button { + font-size: smaller; + color: #999; + background-color: #eee; + padding: 2px; + } + .message { + padding-left: 50px; + font-size: smaller; + } + + </style> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.navigate.js"></script> + <script type="text/javascript"> + + $(function() { + + // generate data set from a parametric function with a fractal look + + function sumf(f, t, m) { + var res = 0; + for (var i = 1; i < m; ++i) { + res += f(i * i * t) / (i * i); + } + return res; + } + + var d1 = []; + for (var t = 0; t <= 2 * Math.PI; t += 0.01) { + d1.push([sumf(Math.cos, t, 10), sumf(Math.sin, t, 10)]); + } + + var data = [ d1 ], + placeholder = $("#placeholder"); + + var plot = $.plot(placeholder, data, { + series: { + lines: { + show: true + }, + shadowSize: 0 + }, + xaxis: { + zoomRange: [0.1, 10], + panRange: [-10, 10] + }, + yaxis: { + zoomRange: [0.1, 10], + panRange: [-10, 10] + }, + zoom: { + interactive: true + }, + pan: { + interactive: true + } + }); + + // show pan/zoom messages to illustrate events + + placeholder.bind("plotpan", function (event, plot) { + var axes = plot.getAxes(); + $(".message").html("Panning to x: " + axes.xaxis.min.toFixed(2) + + " – " + axes.xaxis.max.toFixed(2) + + " and y: " + axes.yaxis.min.toFixed(2) + + " – " + axes.yaxis.max.toFixed(2)); + }); + + placeholder.bind("plotzoom", function (event, plot) { + var axes = plot.getAxes(); + $(".message").html("Zooming to x: " + axes.xaxis.min.toFixed(2) + + " – " + axes.xaxis.max.toFixed(2) + + " and y: " + axes.yaxis.min.toFixed(2) + + " – " + axes.yaxis.max.toFixed(2)); + }); + + // add zoom out button + + $("<div class='button' style='right:20px;top:20px'>zoom out</div>") + .appendTo(placeholder) + .click(function (event) { + event.preventDefault(); + plot.zoomOut(); + }); + + // and add panning buttons + + // little helper for taking the repetitive work out of placing + // panning arrows + + function addArrow(dir, right, top, offset) { + $("<img class='button' src='arrow-" + dir + ".gif' style='right:" + right + "px;top:" + top + "px'>") + .appendTo(placeholder) + .click(function (e) { + e.preventDefault(); + plot.pan(offset); + }); + } + + addArrow("left", 55, 60, { left: -100 }); + addArrow("right", 25, 60, { left: 100 }); + addArrow("up", 40, 45, { top: -100 }); + addArrow("down", 40, 75, { top: 100 }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Navigation</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p class="message"></p> + + <p>With the navigate plugin it is easy to add panning and zooming. Drag to pan, double click to zoom (or use the mouse scrollwheel).</p> + + <p>The plugin fires events (useful for synchronizing several plots) and adds a couple of public methods so you can easily build a little user interface around it, like the little buttons at the top right in the plot.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/percentiles/index.html b/public/admin/view/javascript/jquery/flot/examples/percentiles/index.html new file mode 100644 index 0000000..4513641 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/percentiles/index.html @@ -0,0 +1,79 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Percentiles</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.fillbetween.js"></script> + <script type="text/javascript"> + + $(function() { + + var males = {"15%": [[2, 88.0], [3, 93.3], [4, 102.0], [5, 108.5], [6, 115.7], [7, 115.6], [8, 124.6], [9, 130.3], [10, 134.3], [11, 141.4], [12, 146.5], [13, 151.7], [14, 159.9], [15, 165.4], [16, 167.8], [17, 168.7], [18, 169.5], [19, 168.0]], "90%": [[2, 96.8], [3, 105.2], [4, 113.9], [5, 120.8], [6, 127.0], [7, 133.1], [8, 139.1], [9, 143.9], [10, 151.3], [11, 161.1], [12, 164.8], [13, 173.5], [14, 179.0], [15, 182.0], [16, 186.9], [17, 185.2], [18, 186.3], [19, 186.6]], "25%": [[2, 89.2], [3, 94.9], [4, 104.4], [5, 111.4], [6, 117.5], [7, 120.2], [8, 127.1], [9, 132.9], [10, 136.8], [11, 144.4], [12, 149.5], [13, 154.1], [14, 163.1], [15, 169.2], [16, 170.4], [17, 171.2], [18, 172.4], [19, 170.8]], "10%": [[2, 86.9], [3, 92.6], [4, 99.9], [5, 107.0], [6, 114.0], [7, 113.5], [8, 123.6], [9, 129.2], [10, 133.0], [11, 140.6], [12, 145.2], [13, 149.7], [14, 158.4], [15, 163.5], [16, 166.9], [17, 167.5], [18, 167.1], [19, 165.3]], "mean": [[2, 91.9], [3, 98.5], [4, 107.1], [5, 114.4], [6, 120.6], [7, 124.7], [8, 131.1], [9, 136.8], [10, 142.3], [11, 150.0], [12, 154.7], [13, 161.9], [14, 168.7], [15, 173.6], [16, 175.9], [17, 176.6], [18, 176.8], [19, 176.7]], "75%": [[2, 94.5], [3, 102.1], [4, 110.8], [5, 117.9], [6, 124.0], [7, 129.3], [8, 134.6], [9, 141.4], [10, 147.0], [11, 156.1], [12, 160.3], [13, 168.3], [14, 174.7], [15, 178.0], [16, 180.2], [17, 181.7], [18, 181.3], [19, 182.5]], "85%": [[2, 96.2], [3, 103.8], [4, 111.8], [5, 119.6], [6, 125.6], [7, 131.5], [8, 138.0], [9, 143.3], [10, 149.3], [11, 159.8], [12, 162.5], [13, 171.3], [14, 177.5], [15, 180.2], [16, 183.8], [17, 183.4], [18, 183.5], [19, 185.5]], "50%": [[2, 91.9], [3, 98.2], [4, 106.8], [5, 114.6], [6, 120.8], [7, 125.2], [8, 130.3], [9, 137.1], [10, 141.5], [11, 149.4], [12, 153.9], [13, 162.2], [14, 169.0], [15, 174.8], [16, 176.0], [17, 176.8], [18, 176.4], [19, 177.4]]}; + + var females = {"15%": [[2, 84.8], [3, 93.7], [4, 100.6], [5, 105.8], [6, 113.3], [7, 119.3], [8, 124.3], [9, 131.4], [10, 136.9], [11, 143.8], [12, 149.4], [13, 151.2], [14, 152.3], [15, 155.9], [16, 154.7], [17, 157.0], [18, 156.1], [19, 155.4]], "90%": [[2, 95.6], [3, 104.1], [4, 111.9], [5, 119.6], [6, 127.6], [7, 133.1], [8, 138.7], [9, 147.1], [10, 152.8], [11, 161.3], [12, 166.6], [13, 167.9], [14, 169.3], [15, 170.1], [16, 172.4], [17, 169.2], [18, 171.1], [19, 172.4]], "25%": [[2, 87.2], [3, 95.9], [4, 101.9], [5, 107.4], [6, 114.8], [7, 121.4], [8, 126.8], [9, 133.4], [10, 138.6], [11, 146.2], [12, 152.0], [13, 153.8], [14, 155.7], [15, 158.4], [16, 157.0], [17, 158.5], [18, 158.4], [19, 158.1]], "10%": [[2, 84.0], [3, 91.9], [4, 99.2], [5, 105.2], [6, 112.7], [7, 118.0], [8, 123.3], [9, 130.2], [10, 135.0], [11, 141.1], [12, 148.3], [13, 150.0], [14, 150.7], [15, 154.3], [16, 153.6], [17, 155.6], [18, 154.7], [19, 153.1]], "mean": [[2, 90.2], [3, 98.3], [4, 105.2], [5, 112.2], [6, 119.0], [7, 125.8], [8, 131.3], [9, 138.6], [10, 144.2], [11, 151.3], [12, 156.7], [13, 158.6], [14, 160.5], [15, 162.1], [16, 162.9], [17, 162.2], [18, 163.0], [19, 163.1]], "75%": [[2, 93.2], [3, 101.5], [4, 107.9], [5, 116.6], [6, 122.8], [7, 129.3], [8, 135.2], [9, 143.7], [10, 148.7], [11, 156.9], [12, 160.8], [13, 163.0], [14, 165.0], [15, 165.8], [16, 168.7], [17, 166.2], [18, 167.6], [19, 168.0]], "85%": [[2, 94.5], [3, 102.8], [4, 110.4], [5, 119.0], [6, 125.7], [7, 131.5], [8, 137.9], [9, 146.0], [10, 151.3], [11, 159.9], [12, 164.0], [13, 166.5], [14, 167.5], [15, 168.5], [16, 171.5], [17, 168.0], [18, 169.8], [19, 170.3]], "50%": [[2, 90.2], [3, 98.1], [4, 105.2], [5, 111.7], [6, 118.2], [7, 125.6], [8, 130.5], [9, 138.3], [10, 143.7], [11, 151.4], [12, 156.7], [13, 157.7], [14, 161.0], [15, 162.0], [16, 162.8], [17, 162.2], [18, 162.8], [19, 163.3]]}; + + var dataset = [ + { label: "Female mean", data: females["mean"], lines: { show: true }, color: "rgb(255,50,50)" }, + { id: "f15%", data: females["15%"], lines: { show: true, lineWidth: 0, fill: false }, color: "rgb(255,50,50)" }, + { id: "f25%", data: females["25%"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: "rgb(255,50,50)", fillBetween: "f15%" }, + { id: "f50%", data: females["50%"], lines: { show: true, lineWidth: 0.5, fill: 0.4, shadowSize: 0 }, color: "rgb(255,50,50)", fillBetween: "f25%" }, + { id: "f75%", data: females["75%"], lines: { show: true, lineWidth: 0, fill: 0.4 }, color: "rgb(255,50,50)", fillBetween: "f50%" }, + { id: "f85%", data: females["85%"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: "rgb(255,50,50)", fillBetween: "f75%" }, + + { label: "Male mean", data: males["mean"], lines: { show: true }, color: "rgb(50,50,255)" }, + { id: "m15%", data: males["15%"], lines: { show: true, lineWidth: 0, fill: false }, color: "rgb(50,50,255)" }, + { id: "m25%", data: males["25%"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: "rgb(50,50,255)", fillBetween: "m15%" }, + { id: "m50%", data: males["50%"], lines: { show: true, lineWidth: 0.5, fill: 0.4, shadowSize: 0 }, color: "rgb(50,50,255)", fillBetween: "m25%" }, + { id: "m75%", data: males["75%"], lines: { show: true, lineWidth: 0, fill: 0.4 }, color: "rgb(50,50,255)", fillBetween: "m50%" }, + { id: "m85%", data: males["85%"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: "rgb(50,50,255)", fillBetween: "m75%" } + ]; + + $.plot($("#placeholder"), dataset, { + xaxis: { + tickDecimals: 0 + }, + yaxis: { + tickFormatter: function (v) { + return v + " cm"; + } + }, + legend: { + position: "se" + } + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Percentiles</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>Height in centimeters of individuals from the US (2003-2006) as function of age in years (source: <a href="http://www.cdc.gov/nchs/data/nhsr/nhsr010.pdf">CDC</a>). The 15%-85%, 25%-75% and 50% percentiles are indicated.</p> + + <p>For each point of a filled curve, you can specify an arbitrary bottom. As this example illustrates, this can be useful for plotting percentiles. If you have the data sets available without appropriate fill bottoms, you can use the fillbetween plugin to compute the data point bottoms automatically.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/realtime/index.html b/public/admin/view/javascript/jquery/flot/examples/realtime/index.html new file mode 100644 index 0000000..4333aca --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/realtime/index.html @@ -0,0 +1,122 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Real-time updates</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script type="text/javascript"> + + $(function() { + + // We use an inline data source in the example, usually data would + // be fetched from a server + + var data = [], + totalPoints = 300; + + function getRandomData() { + + if (data.length > 0) + data = data.slice(1); + + // Do a random walk + + while (data.length < totalPoints) { + + var prev = data.length > 0 ? data[data.length - 1] : 50, + y = prev + Math.random() * 10 - 5; + + if (y < 0) { + y = 0; + } else if (y > 100) { + y = 100; + } + + data.push(y); + } + + // Zip the generated y values with the x values + + var res = []; + for (var i = 0; i < data.length; ++i) { + res.push([i, data[i]]) + } + + return res; + } + + // Set up the control widget + + var updateInterval = 30; + $("#updateInterval").val(updateInterval).change(function () { + var v = $(this).val(); + if (v && !isNaN(+v)) { + updateInterval = +v; + if (updateInterval < 1) { + updateInterval = 1; + } else if (updateInterval > 2000) { + updateInterval = 2000; + } + $(this).val("" + updateInterval); + } + }); + + var plot = $.plot("#placeholder", [ getRandomData() ], { + series: { + shadowSize: 0 // Drawing is faster without shadows + }, + yaxis: { + min: 0, + max: 100 + }, + xaxis: { + show: false + } + }); + + function update() { + + plot.setData([getRandomData()]); + + // Since the axes don't change, we don't need to call plot.setupGrid() + + plot.draw(); + setTimeout(update, updateInterval); + } + + update(); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Real-time updates</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>You can update a chart periodically to get a real-time effect by using a timer to insert the new data in the plot and redraw it.</p> + + <p>Time between updates: <input id="updateInterval" type="text" value="" style="text-align: right; width:5em"> milliseconds</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/resize/index.html b/public/admin/view/javascript/jquery/flot/examples/resize/index.html new file mode 100644 index 0000000..e9dc1ad --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/resize/index.html @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Resizing</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <link href="../shared/jquery-ui/jquery-ui.min.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../shared/jquery-ui/jquery-ui.min.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.resize.js"></script> + <script type="text/javascript"> + + $(function() { + + var d1 = []; + for (var i = 0; i < 14; i += 0.5) { + d1.push([i, Math.sin(i)]); + } + + var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]]; + var d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]]; + + var placeholder = $("#placeholder"); + var plot = $.plot(placeholder, [d1, d2, d3]); + + // The plugin includes a jQuery plugin for adding resize events to any + // element. Add a callback so we can display the placeholder size. + + placeholder.resize(function () { + $(".message").text("Placeholder is now " + + $(this).width() + "x" + $(this).height() + + " pixels"); + }); + + $(".demo-container").resizable({ + maxWidth: 900, + maxHeight: 500, + minWidth: 450, + minHeight: 250, + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Resizing</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p class="message"></p> + + <p>Sometimes it makes more sense to just let the plot take up the available space. In that case, we need to redraw the plot each time the placeholder changes its size. If you include the resize plugin, this is handled automatically.</p> + + <p>Drag the bottom and right sides of the plot to resize it.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/selection/index.html b/public/admin/view/javascript/jquery/flot/examples/selection/index.html new file mode 100644 index 0000000..27f3367 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/selection/index.html @@ -0,0 +1,141 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Selection</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.selection.js"></script> + <script type="text/javascript"> + + $(function() { + + var data = [{ + label: "United States", + data: [[1990, 18.9], [1991, 18.7], [1992, 18.4], [1993, 19.3], [1994, 19.5], [1995, 19.3], [1996, 19.4], [1997, 20.2], [1998, 19.8], [1999, 19.9], [2000, 20.4], [2001, 20.1], [2002, 20.0], [2003, 19.8], [2004, 20.4]] + }, { + label: "Russia", + data: [[1992, 13.4], [1993, 12.2], [1994, 10.6], [1995, 10.2], [1996, 10.1], [1997, 9.7], [1998, 9.5], [1999, 9.7], [2000, 9.9], [2001, 9.9], [2002, 9.9], [2003, 10.3], [2004, 10.5]] + }, { + label: "United Kingdom", + data: [[1990, 10.0], [1991, 11.3], [1992, 9.9], [1993, 9.6], [1994, 9.5], [1995, 9.5], [1996, 9.9], [1997, 9.3], [1998, 9.2], [1999, 9.2], [2000, 9.5], [2001, 9.6], [2002, 9.3], [2003, 9.4], [2004, 9.79]] + }, { + label: "Germany", + data: [[1990, 12.4], [1991, 11.2], [1992, 10.8], [1993, 10.5], [1994, 10.4], [1995, 10.2], [1996, 10.5], [1997, 10.2], [1998, 10.1], [1999, 9.6], [2000, 9.7], [2001, 10.0], [2002, 9.7], [2003, 9.8], [2004, 9.79]] + }, { + label: "Denmark", + data: [[1990, 9.7], [1991, 12.1], [1992, 10.3], [1993, 11.3], [1994, 11.7], [1995, 10.6], [1996, 12.8], [1997, 10.8], [1998, 10.3], [1999, 9.4], [2000, 8.7], [2001, 9.0], [2002, 8.9], [2003, 10.1], [2004, 9.80]] + }, { + label: "Sweden", + data: [[1990, 5.8], [1991, 6.0], [1992, 5.9], [1993, 5.5], [1994, 5.7], [1995, 5.3], [1996, 6.1], [1997, 5.4], [1998, 5.4], [1999, 5.1], [2000, 5.2], [2001, 5.4], [2002, 6.2], [2003, 5.9], [2004, 5.89]] + }, { + label: "Norway", + data: [[1990, 8.3], [1991, 8.3], [1992, 7.8], [1993, 8.3], [1994, 8.4], [1995, 5.9], [1996, 6.4], [1997, 6.7], [1998, 6.9], [1999, 7.6], [2000, 7.4], [2001, 8.1], [2002, 12.5], [2003, 9.9], [2004, 19.0]] + }]; + + var options = { + series: { + lines: { + show: true + }, + points: { + show: true + } + }, + legend: { + noColumns: 2 + }, + xaxis: { + tickDecimals: 0 + }, + yaxis: { + min: 0 + }, + selection: { + mode: "x" + } + }; + + var placeholder = $("#placeholder"); + + placeholder.bind("plotselected", function (event, ranges) { + + $("#selection").text(ranges.xaxis.from.toFixed(1) + " to " + ranges.xaxis.to.toFixed(1)); + + var zoom = $("#zoom").attr("checked"); + + if (zoom) { + plot = $.plot(placeholder, data, $.extend(true, {}, options, { + xaxis: { + min: ranges.xaxis.from, + max: ranges.xaxis.to + } + })); + } + }); + + placeholder.bind("plotunselected", function (event) { + $("#selection").text(""); + }); + + var plot = $.plot(placeholder, data, options); + + $("#clearSelection").click(function () { + plot.clearSelection(); + }); + + $("#setSelection").click(function () { + plot.setSelection({ + xaxis: { + from: 1994, + to: 1995 + } + }); + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Selection</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>1000 kg. CO<sub>2</sub> emissions per year per capita for various countries (source: <a href="http://en.wikipedia.org/wiki/List_of_countries_by_carbon_dioxide_emissions_per_capita">Wikipedia</a>).</p> + + <p>Flot supports selections through the selection plugin. You can enable rectangular selection or one-dimensional selection if the user should only be able to select on one axis. Try left-click and drag on the plot above where selection on the x axis is enabled.</p> + + <p>You selected: <span id="selection"></span></p> + + <p>The plot command returns a plot object you can use to control the selection. Click the buttons below.</p> + + <p> + <button id="clearSelection">Clear selection</button> + <button id="setSelection">Select year 1994</button> + </p> + + <p>Selections are really useful for zooming. Just replot the chart with min and max values for the axes set to the values in the "plotselected" event triggered. Enable the checkbox below and select a region again.</p> + + <p><label><input id="zoom" type="checkbox"></input>Zoom to selection.</label></p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/series-errorbars/index.html b/public/admin/view/javascript/jquery/flot/examples/series-errorbars/index.html new file mode 100644 index 0000000..f76f08e --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/series-errorbars/index.html @@ -0,0 +1,150 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Error Bars</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.errorbars.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.navigate.js"></script> + <script type="text/javascript"> + + $(function() { + + function drawArrow(ctx, x, y, radius){ + ctx.beginPath(); + ctx.moveTo(x + radius, y + radius); + ctx.lineTo(x, y); + ctx.lineTo(x - radius, y + radius); + ctx.stroke(); + } + + function drawSemiCircle(ctx, x, y, radius){ + ctx.beginPath(); + ctx.arc(x, y, radius, 0, Math.PI, false); + ctx.moveTo(x - radius, y); + ctx.lineTo(x + radius, y); + ctx.stroke(); + } + + var data1 = [ + [1,1,.5,.1,.3], + [2,2,.3,.5,.2], + [3,3,.9,.5,.2], + [1.5,-.05,.5,.1,.3], + [3.15,1.,.5,.1,.3], + [2.5,-1.,.5,.1,.3] + ]; + + var data1_points = { + show: true, + radius: 5, + fillColor: "blue", + errorbars: "xy", + xerr: {show: true, asymmetric: true, upperCap: "-", lowerCap: "-"}, + yerr: {show: true, color: "red", upperCap: "-"} + }; + + var data2 = [ + [.7,3,.2,.4], + [1.5,2.2,.3,.4], + [2.3,1,.5,.2] + ]; + + var data2_points = { + show: true, + radius: 5, + errorbars: "y", + yerr: {show:true, asymmetric:true, upperCap: drawArrow, lowerCap: drawSemiCircle} + }; + + var data3 = [ + [1,2,.4], + [2,0.5,.3], + [2.7,2,.5] + ]; + + var data3_points = { + //do not show points + radius: 0, + errorbars: "y", + yerr: {show:true, upperCap: "-", lowerCap: "-", radius: 5} + }; + + var data4 = [ + [1.3, 1], + [1.75, 2.5], + [2.5, 0.5] + ]; + + var data4_errors = [0.1, 0.4, 0.2]; + for (var i = 0; i < data4.length; i++) { + data4_errors[i] = data4[i].concat(data4_errors[i]) + } + + var data = [ + {color: "blue", points: data1_points, data: data1, label: "data1"}, + {color: "red", points: data2_points, data: data2, label: "data2"}, + {color: "green", lines: {show: true}, points: data3_points, data: data3, label: "data3"}, + // bars with errors + {color: "orange", bars: {show: true, align: "center", barWidth: 0.25}, data: data4, label: "data4"}, + {color: "orange", points: data3_points, data: data4_errors} + ]; + + $.plot($("#placeholder"), data , { + legend: { + position: "sw", + show: true + }, + series: { + lines: { + show: false + } + }, + xaxis: { + min: 0.6, + max: 3.1 + }, + yaxis: { + min: 0, + max: 3.5 + }, + zoom: { + interactive: true + }, + pan: { + interactive: true + } + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Error Bars</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>With the errorbars plugin you can plot error bars to show standard deviation and other useful statistical properties.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/series-pie/index.html b/public/admin/view/javascript/jquery/flot/examples/series-pie/index.html new file mode 100644 index 0000000..12e9f44 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/series-pie/index.html @@ -0,0 +1,818 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Pie Charts</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <style type="text/css"> + + .demo-container { + position: relative; + height: 400px; + } + + #placeholder { + width: 550px; + } + + #menu { + position: absolute; + top: 20px; + left: 625px; + bottom: 20px; + right: 20px; + width: 200px; + } + + #menu button { + display: inline-block; + width: 200px; + padding: 3px 0 2px 0; + margin-bottom: 4px; + background: #eee; + border: 1px solid #999; + border-radius: 2px; + font-size: 16px; + -o-box-shadow: 0 1px 2px rgba(0,0,0,0.15); + -ms-box-shadow: 0 1px 2px rgba(0,0,0,0.15); + -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.15); + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.15); + box-shadow: 0 1px 2px rgba(0,0,0,0.15); + cursor: pointer; + } + + #description { + margin: 15px 10px 20px 10px; + } + + #code { + display: block; + width: 870px; + padding: 15px; + margin: 10px auto; + border: 1px dashed #999; + background-color: #f8f8f8; + font-size: 16px; + line-height: 20px; + color: #666; + } + + ul { + font-size: 10pt; + } + + ul li { + margin-bottom: 0.5em; + } + + ul.options li { + list-style: none; + margin-bottom: 1em; + } + + ul li i { + color: #999; + } + + </style> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.pie.js"></script> + <script type="text/javascript"> + + $(function() { + + // Example Data + + //var data = [ + // { label: "Series1", data: 10}, + // { label: "Series2", data: 30}, + // { label: "Series3", data: 90}, + // { label: "Series4", data: 70}, + // { label: "Series5", data: 80}, + // { label: "Series6", data: 110} + //]; + + //var data = [ + // { label: "Series1", data: [[1,10]]}, + // { label: "Series2", data: [[1,30]]}, + // { label: "Series3", data: [[1,90]]}, + // { label: "Series4", data: [[1,70]]}, + // { label: "Series5", data: [[1,80]]}, + // { label: "Series6", data: [[1,0]]} + //]; + + //var data = [ + // { label: "Series A", data: 0.2063}, + // { label: "Series B", data: 38888} + //]; + + // Randomly Generated Data + + var data = [], + series = Math.floor(Math.random() * 6) + 3; + + for (var i = 0; i < series; i++) { + data[i] = { + label: "Series" + (i + 1), + data: Math.floor(Math.random() * 100) + 1 + } + } + + var placeholder = $("#placeholder"); + + $("#example-1").click(function() { + + placeholder.unbind(); + + $("#title").text("Default pie chart"); + $("#description").text("The default pie chart with no options set."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true + } + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " show: true", + " }", + " }", + "});" + ]); + }); + + $("#example-2").click(function() { + + placeholder.unbind(); + + $("#title").text("Default without legend"); + $("#description").text("The default pie chart when the legend is disabled. Since the labels would normally be outside the container, the chart is resized to fit."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true + } + }, + legend: { + show: false + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " show: true", + " }", + " },", + " legend: {", + " show: false", + " }", + "});" + ]); + }); + + $("#example-3").click(function() { + + placeholder.unbind(); + + $("#title").text("Custom Label Formatter"); + $("#description").text("Added a semi-transparent background to the labels and a custom labelFormatter function."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true, + radius: 1, + label: { + show: true, + radius: 1, + formatter: labelFormatter, + background: { + opacity: 0.8 + } + } + } + }, + legend: { + show: false + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " show: true,", + " radius: 1,", + " label: {", + " show: true,", + " radius: 1,", + " formatter: labelFormatter,", + " background: {", + " opacity: 0.8", + " }", + " }", + " }", + " },", + " legend: {", + " show: false", + " }", + "});" + ]); + }); + + $("#example-4").click(function() { + + placeholder.unbind(); + + $("#title").text("Label Radius"); + $("#description").text("Slightly more transparent label backgrounds and adjusted the radius values to place them within the pie."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true, + radius: 1, + label: { + show: true, + radius: 3/4, + formatter: labelFormatter, + background: { + opacity: 0.5 + } + } + } + }, + legend: { + show: false + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " show: true,", + " radius: 1,", + " label: {", + " show: true,", + " radius: 3/4,", + " formatter: labelFormatter,", + " background: {", + " opacity: 0.5", + " }", + " }", + " }", + " },", + " legend: {", + " show: false", + " }", + "});" + ]); + }); + + $("#example-5").click(function() { + + placeholder.unbind(); + + $("#title").text("Label Styles #1"); + $("#description").text("Semi-transparent, black-colored label background."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true, + radius: 1, + label: { + show: true, + radius: 3/4, + formatter: labelFormatter, + background: { + opacity: 0.5, + color: "#000" + } + } + } + }, + legend: { + show: false + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: { ", + " show: true,", + " radius: 1,", + " label: {", + " show: true,", + " radius: 3/4,", + " formatter: labelFormatter,", + " background: { ", + " opacity: 0.5,", + " color: '#000'", + " }", + " }", + " }", + " },", + " legend: {", + " show: false", + " }", + "});" + ]); + }); + + $("#example-6").click(function() { + + placeholder.unbind(); + + $("#title").text("Label Styles #2"); + $("#description").text("Semi-transparent, black-colored label background placed at pie edge."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true, + radius: 3/4, + label: { + show: true, + radius: 3/4, + formatter: labelFormatter, + background: { + opacity: 0.5, + color: "#000" + } + } + } + }, + legend: { + show: false + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " show: true,", + " radius: 3/4,", + " label: {", + " show: true,", + " radius: 3/4,", + " formatter: labelFormatter,", + " background: {", + " opacity: 0.5,", + " color: '#000'", + " }", + " }", + " }", + " },", + " legend: {", + " show: false", + " }", + "});" + ]); + }); + + $("#example-7").click(function() { + + placeholder.unbind(); + + $("#title").text("Hidden Labels"); + $("#description").text("Labels can be hidden if the slice is less than a given percentage of the pie (10% in this case)."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true, + radius: 1, + label: { + show: true, + radius: 2/3, + formatter: labelFormatter, + threshold: 0.1 + } + } + }, + legend: { + show: false + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " show: true,", + " radius: 1,", + " label: {", + " show: true,", + " radius: 2/3,", + " formatter: labelFormatter,", + " threshold: 0.1", + " }", + " }", + " },", + " legend: {", + " show: false", + " }", + "});" + ]); + }); + + $("#example-8").click(function() { + + placeholder.unbind(); + + $("#title").text("Combined Slice"); + $("#description").text("Multiple slices less than a given percentage (5% in this case) of the pie can be combined into a single, larger slice."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true, + combine: { + color: "#999", + threshold: 0.05 + } + } + }, + legend: { + show: false + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " show: true,", + " combine: {", + " color: '#999',", + " threshold: 0.1", + " }", + " }", + " },", + " legend: {", + " show: false", + " }", + "});" + ]); + }); + + $("#example-9").click(function() { + + placeholder.unbind(); + + $("#title").text("Rectangular Pie"); + $("#description").text("The radius can also be set to a specific size (even larger than the container itself)."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true, + radius: 500, + label: { + show: true, + formatter: labelFormatter, + threshold: 0.1 + } + } + }, + legend: { + show: false + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " show: true,", + " radius: 500,", + " label: {", + " show: true,", + " formatter: labelFormatter,", + " threshold: 0.1", + " }", + " }", + " },", + " legend: {", + " show: false", + " }", + "});" + ]); + }); + + $("#example-10").click(function() { + + placeholder.unbind(); + + $("#title").text("Tilted Pie"); + $("#description").text("The pie can be tilted at an angle."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true, + radius: 1, + tilt: 0.5, + label: { + show: true, + radius: 1, + formatter: labelFormatter, + background: { + opacity: 0.8 + } + }, + combine: { + color: "#999", + threshold: 0.1 + } + } + }, + legend: { + show: false + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " show: true,", + " radius: 1,", + " tilt: 0.5,", + " label: {", + " show: true,", + " radius: 1,", + " formatter: labelFormatter,", + " background: {", + " opacity: 0.8", + " }", + " },", + " combine: {", + " color: '#999',", + " threshold: 0.1", + " }", + " }", + " },", + " legend: {", + " show: false", + " }", + "});", + ]); + }); + + $("#example-11").click(function() { + + placeholder.unbind(); + + $("#title").text("Donut Hole"); + $("#description").text("A donut hole can be added."); + + $.plot(placeholder, data, { + series: { + pie: { + innerRadius: 0.5, + show: true + } + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " innerRadius: 0.5,", + " show: true", + " }", + " }", + "});" + ]); + }); + + $("#example-12").click(function() { + + placeholder.unbind(); + + $("#title").text("Interactivity"); + $("#description").text("The pie can be made interactive with hover and click events."); + + $.plot(placeholder, data, { + series: { + pie: { + show: true + } + }, + grid: { + hoverable: true, + clickable: true + } + }); + + setCode([ + "$.plot('#placeholder', data, {", + " series: {", + " pie: {", + " show: true", + " }", + " },", + " grid: {", + " hoverable: true,", + " clickable: true", + " }", + "});" + ]); + + placeholder.bind("plothover", function(event, pos, obj) { + + if (!obj) { + return; + } + + var percent = parseFloat(obj.series.percent).toFixed(2); + $("#hover").html("<span style='font-weight:bold; color:" + obj.series.color + "'>" + obj.series.label + " (" + percent + "%)</span>"); + }); + + placeholder.bind("plotclick", function(event, pos, obj) { + + if (!obj) { + return; + } + + percent = parseFloat(obj.series.percent).toFixed(2); + alert("" + obj.series.label + ": " + percent + "%"); + }); + }); + + // Show the initial default chart + + $("#example-1").click(); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + // A custom label formatter used by several of the plots + + function labelFormatter(label, series) { + return "<div style='font-size:8pt; text-align:center; padding:2px; color:white;'>" + label + "<br/>" + Math.round(series.percent) + "%</div>"; + } + + // + + function setCode(lines) { + $("#code").text(lines.join("\n")); + } + + </script> +</head> +<body> + + <div id="header"> + <h2>Pie Charts</h2> + </div> + + <div id="content"> + + <h3 id="title"></h3> + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + <div id="menu"> + <button id="example-1">Default Options</button> + <button id="example-2">Without Legend</button> + <button id="example-3">Label Formatter</button> + <button id="example-4">Label Radius</button> + <button id="example-5">Label Styles #1</button> + <button id="example-6">Label Styles #2</button> + <button id="example-7">Hidden Labels</button> + <button id="example-8">Combined Slice</button> + <button id="example-9">Rectangular Pie</button> + <button id="example-10">Tilted Pie</button> + <button id="example-11">Donut Hole</button> + <button id="example-12">Interactivity</button> + </div> + </div> + + <p id="description"></p> + + <h3>Source Code</h3> + <pre><code id="code"></code></pre> + + <br/> + + <h2>Pie Options</h2> + + <ul class="options"> + <li style="border-bottom: 1px dotted #ccc;"><b>option:</b> <i>default value</i> - Description of option</li> + <li><b>show:</b> <i>false</i> - Enable the plugin and draw as a pie.</li> + <li><b>radius:</b> <i>'auto'</i> - Sets the radius of the pie. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the available space (size of the container), otherwise it will use the value as a direct pixel length. If set to 'auto', it will be set to 1 if the legend is enabled and 3/4 if not.</li> + <li><b>innerRadius:</b> <i>0</i> - Sets the radius of the donut hole. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the radius, otherwise it will use the value as a direct pixel length.</li> + <li><b>startAngle:</b> <i>3/2</i> - Factor of PI used for the starting angle (in radians) It can range between 0 and 2 (where 0 and 2 have the same result).</li> + <li><b>tilt:</b> <i>1</i> - Percentage of tilt ranging from 0 and 1, where 1 has no change (fully vertical) and 0 is completely flat (fully horizontal -- in which case nothing actually gets drawn).</li> + <li><b>shadow:</b> <ul> + <li><b>top:</b> <i>5</i> - Vertical distance in pixel of the tilted pie shadow.</li> + <li><b>left:</b> <i>15</i> - Horizontal distance in pixel of the tilted pie shadow.</li> + <li><b>alpha:</b> <i>0.02</i> - Alpha value of the tilted pie shadow.</li> + </ul> + <li><b>offset:</b> <ul> + <li><b>top:</b> <i>0</i> - Pixel distance to move the pie up and down (relative to the center).</li> + <li><b>left:</b> <i>'auto'</i> - Pixel distance to move the pie left and right (relative to the center).</li> + </ul> + <li><b>stroke:</b> <ul> + <li><b>color:</b> <i>'#FFF'</i> - Color of the border of each slice. Hexadecimal color definitions are prefered (other formats may or may not work).</li> + <li><b>width:</b> <i>1</i> - Pixel width of the border of each slice.</li> + </ul> + <li><b>label:</b> <ul> + <li><b>show:</b> <i>'auto'</i> - Enable/Disable the labels. This can be set to true, false, or 'auto'. When set to 'auto', it will be set to false if the legend is enabled and true if not.</li> + <li><b>radius:</b> <i>1</i> - Sets the radius at which to place the labels. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the available space (size of the container), otherwise it will use the value as a direct pixel length.</li> + <li><b>threshold:</b> <i>0</i> - Hides the labels of any pie slice that is smaller than the specified percentage (ranging from 0 to 1) i.e. a value of '0.03' will hide all slices 3% or less of the total.</li> + <li><b>formatter:</b> <i>[function]</i> - This function specifies how the positioned labels should be formatted, and is applied after the legend's labelFormatter function. The labels can also still be styled using the class "pieLabel" (i.e. ".pieLabel" or "#graph1 .pieLabel").</li> + <li><b>radius:</b> <i>1</i> - Sets the radius at which to place the labels. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the available space (size of the container), otherwise it will use the value as a direct pixel length.</li> + <li><b>background:</b> <ul> + <li><b>color:</b> <i>null</i> - Backgound color of the positioned labels. If null, the plugin will automatically use the color of the slice.</li> + <li><b>opacity:</b> <i>0</i> - Opacity of the background for the positioned labels. Acceptable values range from 0 to 1, where 0 is completely transparent and 1 is completely opaque.</li> + </ul> + </ul> + <li><b>combine:</b> <ul> + <li><b>threshold:</b> <i>0</i> - Combines all slices that are smaller than the specified percentage (ranging from 0 to 1) i.e. a value of '0.03' will combine all slices 3% or less into one slice).</li> + <li><b>color:</b> <i>null</i> - Backgound color of the positioned labels. If null, the plugin will automatically use the color of the first slice to be combined.</li> + <li><b>label:</b> <i>'Other'</i> - Label text for the combined slice.</li> + </ul> + <li><b>highlight:</b> <ul> + <li><b>opacity:</b> <i>0.5</i> - Opacity of the highlight overlay on top of the current pie slice. Currently this just uses a white overlay, but support for changing the color of the overlay will also be added at a later date. + </ul> + </ul> + + <h2>Changes/Features</h2> + <ul> + <li style="list-style: none;"><i>v1.0 - November 20th, 2009 - Brian Medendorp</i></li> + <li>The pie plug-in is now part of the Flot repository! This should make it a lot easier to deal with.</li> + <li>Added a new option (innerRadius) to add a "donut hole" to the center of the pie, based on comtributions from Anthony Aragues. I was a little reluctant to add this feature because it doesn't work very well with the shadow created for the tilted pie, but figured it was worthwhile for non-tilted pies. Also, excanvas apparently doesn't support compositing, so it will fall back to using the stroke color to fill in the center (but I recommend setting the stroke color to the background color anyway).</li> + <li>Changed the lineJoin for the border of the pie slices to use the 'round' option. This should make the center of the pie look better, particularly when there are numerous thin slices.</li> + <li>Included a bug fix submitted by btburnett3 to display a slightly smaller slice in the event that the slice is 100% and being rendered with Internet Explorer. I haven't experienced this bug myself, but it doesn't seem to hurt anything so I've included it.</li> + <li>The tilt value is now used when calculating the maximum radius of the pie in relation to the height of the container. This should prevent the pie from being smaller than it needed to in some cases, as well as reducing the amount of extra white space generated above and below the pie.</li> + <li><b>Hover and Click functionality are now availabe!</b><ul> + <li>Thanks to btburnett3 for the original hover functionality and Anthony Aragues for the modification that makes it compatable with excanvas, this was a huge help!</li> + <li>Added a new option (highlight opacity) to modify the highlight created when mousing over a slice. Currently this just uses a white overlay, but an option to change the hightlight color will be added when the appropriate functionality becomes available. + <li>I had a major setback that required me to practically rebuild the hover/click events from scratch one piece at a time (I discovered that it only worked with a single pie on a page at a time), but the end result ended up being virtually identical to the original, so I'm not quite sure what exactly made it work.</li> + <li><span style="color: red;">Warning:</span> There are some minor issues with using this functionality in conjuction with some of the other more advanced features (tilt and donut). When using a donut hole, the inner portion still triggers the events even though that portion of the pie is no longer visible. When tilted, the interactive portions still use the original, untilted version of the pie when determining mouse position (this is because the isPointInPath function apparently doesn't work with transformations), however hover and click both work this way, so the appropriate slice is still highlighted when clicking, and it isn't as noticable of a problem.</li> + </ul></li> + <li>Included a bug fix submitted by Xavi Ivars to fix array issues when other javascript libraries are included in addition to jQuery</li> + <br/> + <li style="list-style: none;"><i>v0.4 - July 1st, 2009 - Brian Medendorp</i></li> + <li>Each series will now be shown in the legend, even if it's value is zero. The series will not get a positioned label because it will overlap with the other labels present and often makes them unreadable.</li> + <li>Data can now be passed in using the standard Flot method using an array of datapoints, the pie plugin will simply use the first y-value that it finds for each series in this case. The plugin uses this datastructure internally, but you can still use the old method of passing in a single numerical value for each series (the plugin will convert it as necessary). This should make it easier to transition from other types of graphs (such as a stacked bar graph) to a pie.</li> + <li>The pie can now be tilted at an angle with a new "tilt" option. Acceptable values range from 0-1, where 1 has no change (fully vertical) and 0 is completely flat (fully horizontal -- in which case nothing actually gets drawn). If the plugin determines that it will fit within the canvas, a drop shadow will be drawn under the tilted pie (this also requires a tilt value of 0.8 or less).</li> + <br/> + <li style="list-style: none;"><i>v0.3.2 - June 25th, 2009 - Brian Medendorp</i></li> + <li>Fixed a bug that was causing the pie to be shifted too far left or right when the legend is showing in some cases.</li> + <br/> + <li style="list-style: none;"><i>v0.3.1 - June 24th, 2009 - Brian Medendorp</i></li> + <li>Fixed a bug that was causing nothing to be drawn and generating a javascript error if any of the data values were set to zero.</li> + <br/> + <li style="list-style: none;"><i>v0.3 - June 23rd, 2009 - Brian Medendorp</i></li> + <li>The legend now works without any modifications! Because of changes made to flot and the plugin system (thanks Ole Laursen!) I was able to simplify a number of things and am now able to use the legend without the direct access hack that was required in the previous version.</li> + <br/> + <li style="list-style: none;"><i>v0.2 - June 22nd, 2009 - Brian Medendorp</i></li> + <li>The legend now works but only if you make the necessary changes to jquery.flot.js. Because of this, I changed the default values for pie.radius and pie.label.show to new 'auto' settings that change the default behavior of the size and labels depending on whether the legend functionality is available or not.</li> + <br/> + <li style="list-style: none;"><i>v0.1 - June 18th, 2009 - Brian Medendorp</i></li> + <li>Rewrote the entire pie code into a flot plugin (since that is now an option), so it should be much easier to use and the code is cleaned up a bit. However, the (standard flot) legend is no longer available because the only way to prevent the grid lines from being displayed also prevents the legend from being displayed. Hopefully this can be fixed at a later date.</li> + <li>Restructured and combined some of the options. It should be much easier to deal with now.</li> + <li>Added the ability to change the starting point of the pie (still defaults to the top).</li> + <li>Modified the default options to show the labels to compensate for the lack of a legend.</li> + <li>Modified this page to use a random dataset. <span style="color: red">Note: you may need to refresh the page to see the effects of some of the examples.</span></li> + <br/> + <li style="list-style: none;"><i>May 21st, 2009 - Brian Medendorp</i></li> + <li>Merged original pie modifications by Sergey Nosenko into the latest SVN version <i>(as of May 15th, 2009)</i> so that it will work with ie8.</li> + <li>Pie graph will now be centered in the canvas unless moved because of the legend or manually via the options. Additionally it prevents the pie from being moved beyond the edge of the canvas.</li> + <li>Modified the code related to the labelFormatter option to apply flot's legend labelFormatter first. This is so that the labels will be consistent, but still provide extra formatting for the positioned labels (such as adding the percentage value).</li> + <li>Positioned labels now have their backgrounds applied as a seperate element (much like the legend background) so that the opacity value can be set independently from the label itself (foreground). Additionally, the background color defaults to that of the matching slice.</li> + <li>As long as the labelOffset and radiusLimit are not set to hard values, the pie will be shrunk if the labels will extend outside the edge of the canvas</li> + <li>Added new options "radiusLimitFactor" and "radiusLimit" which limits how large the (visual) radius of the pie is in relation to the full radius (as calculated from the canvas dimensions) or a hard-pixel value (respectively). This allows for pushing the labels "outside" the pie.</li> + <li>Added a new option "labelHidePercent" that does not show the positioned labels of slices smaller than the specified percentage. This is to help prevent a bunch of overlapping labels from small slices.</li> + <li>Added a new option "sliceCombinePercent" that combines all slices smaller than the specified percentage into one larger slice. This is to help make the pie more attractive when there are a number of tiny slices. The options "sliceCombineColor" and "sliceCombineLabel" have also been added to change the color and name of the new slice if desired.</li> + <li>Tested in Firefox (3.0.10, 3.5b4), Internet Explorer (6.0.2900, 7.0.5730, 8.0.6001), Chrome (1.0.154), Opera (9.64), and Safari (3.1.1, 4 beta 5528.16). + </ul> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/series-toggle/index.html b/public/admin/view/javascript/jquery/flot/examples/series-toggle/index.html new file mode 100644 index 0000000..c66d890 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/series-toggle/index.html @@ -0,0 +1,121 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Toggling Series</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script type="text/javascript"> + + $(function() { + + var datasets = { + "usa": { + label: "USA", + data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]] + }, + "russia": { + label: "Russia", + data: [[1988, 218000], [1989, 203000], [1990, 171000], [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996, 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100], [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005, 31100], [2006, 34700]] + }, + "uk": { + label: "UK", + data: [[1988, 62982], [1989, 62027], [1990, 60696], [1991, 62348], [1992, 58560], [1993, 56393], [1994, 54579], [1995, 50818], [1996, 50554], [1997, 48276], [1998, 47691], [1999, 47529], [2000, 47778], [2001, 48760], [2002, 50949], [2003, 57452], [2004, 60234], [2005, 60076], [2006, 59213]] + }, + "germany": { + label: "Germany", + data: [[1988, 55627], [1989, 55475], [1990, 58464], [1991, 55134], [1992, 52436], [1993, 47139], [1994, 43962], [1995, 43238], [1996, 42395], [1997, 40854], [1998, 40993], [1999, 41822], [2000, 41147], [2001, 40474], [2002, 40604], [2003, 40044], [2004, 38816], [2005, 38060], [2006, 36984]] + }, + "denmark": { + label: "Denmark", + data: [[1988, 3813], [1989, 3719], [1990, 3722], [1991, 3789], [1992, 3720], [1993, 3730], [1994, 3636], [1995, 3598], [1996, 3610], [1997, 3655], [1998, 3695], [1999, 3673], [2000, 3553], [2001, 3774], [2002, 3728], [2003, 3618], [2004, 3638], [2005, 3467], [2006, 3770]] + }, + "sweden": { + label: "Sweden", + data: [[1988, 6402], [1989, 6474], [1990, 6605], [1991, 6209], [1992, 6035], [1993, 6020], [1994, 6000], [1995, 6018], [1996, 3958], [1997, 5780], [1998, 5954], [1999, 6178], [2000, 6411], [2001, 5993], [2002, 5833], [2003, 5791], [2004, 5450], [2005, 5521], [2006, 5271]] + }, + "norway": { + label: "Norway", + data: [[1988, 4382], [1989, 4498], [1990, 4535], [1991, 4398], [1992, 4766], [1993, 4441], [1994, 4670], [1995, 4217], [1996, 4275], [1997, 4203], [1998, 4482], [1999, 4506], [2000, 4358], [2001, 4385], [2002, 5269], [2003, 5066], [2004, 5194], [2005, 4887], [2006, 4891]] + } + }; + + // hard-code color indices to prevent them from shifting as + // countries are turned on/off + + var i = 0; + $.each(datasets, function(key, val) { + val.color = i; + ++i; + }); + + // insert checkboxes + var choiceContainer = $("#choices"); + $.each(datasets, function(key, val) { + choiceContainer.append("<br/><input type='checkbox' name='" + key + + "' checked='checked' id='id" + key + "'></input>" + + "<label for='id" + key + "'>" + + val.label + "</label>"); + }); + + choiceContainer.find("input").click(plotAccordingToChoices); + + function plotAccordingToChoices() { + + var data = []; + + choiceContainer.find("input:checked").each(function () { + var key = $(this).attr("name"); + if (key && datasets[key]) { + data.push(datasets[key]); + } + }); + + if (data.length > 0) { + $.plot("#placeholder", data, { + yaxis: { + min: 0 + }, + xaxis: { + tickDecimals: 0 + } + }); + } + } + + plotAccordingToChoices(); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Toggling Series</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder" style="float:left; width:675px;"></div> + <p id="choices" style="float:right; width:135px;"></p> + </div> + + <p>This example shows military budgets for various countries in constant (2005) million US dollars (source: <a href="http://www.sipri.org/">SIPRI</a>).</p> + + <p>Since all data is available client-side, it's pretty easy to make the plot interactive. Try turning countries on and off with the checkboxes next to the plot.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/series-types/index.html b/public/admin/view/javascript/jquery/flot/examples/series-types/index.html new file mode 100644 index 0000000..dfafba2 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/series-types/index.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Series Types</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script type="text/javascript"> + + $(function() { + + var d1 = []; + for (var i = 0; i < 14; i += 0.5) { + d1.push([i, Math.sin(i)]); + } + + var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]]; + + var d3 = []; + for (var i = 0; i < 14; i += 0.5) { + d3.push([i, Math.cos(i)]); + } + + var d4 = []; + for (var i = 0; i < 14; i += 0.1) { + d4.push([i, Math.sqrt(i * 10)]); + } + + var d5 = []; + for (var i = 0; i < 14; i += 0.5) { + d5.push([i, Math.sqrt(i)]); + } + + var d6 = []; + for (var i = 0; i < 14; i += 0.5 + Math.random()) { + d6.push([i, Math.sqrt(2*i + Math.sin(i) + 5)]); + } + + $.plot("#placeholder", [{ + data: d1, + lines: { show: true, fill: true } + }, { + data: d2, + bars: { show: true } + }, { + data: d3, + points: { show: true } + }, { + data: d4, + lines: { show: true } + }, { + data: d5, + lines: { show: true }, + points: { show: true } + }, { + data: d6, + lines: { show: true, steps: true } + }]); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Series Types</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>Flot supports lines, points, filled areas, bars and any combinations of these, in the same plot and even on the same data series.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/shared/jquery-ui/jquery-ui.min.css b/public/admin/view/javascript/jquery/flot/examples/shared/jquery-ui/jquery-ui.min.css new file mode 100644 index 0000000..08331c1 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/shared/jquery-ui/jquery-ui.min.css @@ -0,0 +1,6 @@ +/*! jQuery UI - v1.10.0 - 2013-01-26 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.resizable.css +* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/examples/shared/jquery-ui/jquery-ui.min.js b/public/admin/view/javascript/jquery/flot/examples/shared/jquery-ui/jquery-ui.min.js new file mode 100644 index 0000000..8902282 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/shared/jquery-ui/jquery-ui.min.js @@ -0,0 +1,6 @@ +/*! jQuery UI - v1.10.0 - 2013-01-26 +* http://jqueryui.com +* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.resizable.js +* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */ + +(function(e,t){function i(t,n){var r,i,o,u=t.nodeName.toLowerCase();return"area"===u?(r=t.parentNode,i=r.name,!t.href||!i||r.nodeName.toLowerCase()!=="map"?!1:(o=e("img[usemap=#"+i+"]")[0],!!o&&s(o))):(/input|select|textarea|button|object/.test(u)?!t.disabled:"a"===u?t.href||n:n)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return e.css(this,"visibility")==="hidden"}).length}var n=0,r=/^ui-id-\d+$/;e.ui=e.ui||{};if(e.ui.version)return;e.extend(e.ui,{version:"1.10.0",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({_focus:e.fn.focus,focus:function(t,n){return typeof t=="number"?this.each(function(){var r=this;setTimeout(function(){e(r).focus(),n&&n.call(r)},t)}):this._focus.apply(this,arguments)},scrollParent:function(){var t;return e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?t=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):t=this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(n){if(n!==t)return this.css("zIndex",n);if(this.length){var r=e(this[0]),i,s;while(r.length&&r[0]!==document){i=r.css("position");if(i==="absolute"||i==="relative"||i==="fixed"){s=parseInt(r.css("zIndex"),10);if(!isNaN(s)&&s!==0)return s}r=r.parent()}}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){r.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(n){return!!e.data(n,t)}}):function(t,n,r){return!!e.data(t,r[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var n=e.attr(t,"tabindex"),r=isNaN(n);return(r||n>=0)&&i(t,!r)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(n,r){function u(t,n,r,s){return e.each(i,function(){n-=parseFloat(e.css(t,"padding"+this))||0,r&&(n-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(n-=parseFloat(e.css(t,"margin"+this))||0)}),n}var i=r==="Width"?["Left","Right"]:["Top","Bottom"],s=r.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+r]=function(n){return n===t?o["inner"+r].call(this):this.each(function(){e(this).css(s,u(this,n)+"px")})},e.fn["outer"+r]=function(t,n){return typeof t!="number"?o["outer"+r].call(this,t):this.each(function(){e(this).css(s,u(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(n){return arguments.length?t.call(this,e.camelCase(n)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,n,r){var i,s=e.ui[t].prototype;for(i in r)s.plugins[i]=s.plugins[i]||[],s.plugins[i].push([n,r[i]])},call:function(e,t,n){var r,i=e.plugins[t];if(!i||!e.element[0].parentNode||e.element[0].parentNode.nodeType===11)return;for(r=0;r<i.length;r++)e.options[i[r][0]]&&i[r][1].apply(e.element,n)}},hasScroll:function(t,n){if(e(t).css("overflow")==="hidden")return!1;var r=n&&n==="left"?"scrollLeft":"scrollTop",i=!1;return t[r]>0?!0:(t[r]=1,i=t[r]>0,t[r]=0,i)}})})(jQuery);(function(e,t){var n=0,r=Array.prototype.slice,i=e.cleanData;e.cleanData=function(t){for(var n=0,r;(r=t[n])!=null;n++)try{e(r).triggerHandler("remove")}catch(s){}i(t)},e.widget=function(t,n,r){var i,s,o,u,a={},f=t.split(".")[0];t=t.split(".")[1],i=f+"-"+t,r||(r=n,n=e.Widget),e.expr[":"][i.toLowerCase()]=function(t){return!!e.data(t,i)},e[f]=e[f]||{},s=e[f][t],o=e[f][t]=function(e,t){if(!this._createWidget)return new o(e,t);arguments.length&&this._createWidget(e,t)},e.extend(o,s,{version:r.version,_proto:e.extend({},r),_childConstructors:[]}),u=new n,u.options=e.widget.extend({},u.options),e.each(r,function(t,r){if(!e.isFunction(r)){a[t]=r;return}a[t]=function(){var e=function(){return n.prototype[t].apply(this,arguments)},i=function(e){return n.prototype[t].apply(this,e)};return function(){var t=this._super,n=this._superApply,s;return this._super=e,this._superApply=i,s=r.apply(this,arguments),this._super=t,this._superApply=n,s}}()}),o.prototype=e.widget.extend(u,{widgetEventPrefix:s?u.widgetEventPrefix:t},a,{constructor:o,namespace:f,widgetName:t,widgetFullName:i}),s?(e.each(s._childConstructors,function(t,n){var r=n.prototype;e.widget(r.namespace+"."+r.widgetName,o,n._proto)}),delete s._childConstructors):n._childConstructors.push(o),e.widget.bridge(t,o)},e.widget.extend=function(n){var i=r.call(arguments,1),s=0,o=i.length,u,a;for(;s<o;s++)for(u in i[s])a=i[s][u],i[s].hasOwnProperty(u)&&a!==t&&(e.isPlainObject(a)?n[u]=e.isPlainObject(n[u])?e.widget.extend({},n[u],a):e.widget.extend({},a):n[u]=a);return n},e.widget.bridge=function(n,i){var s=i.prototype.widgetFullName||n;e.fn[n]=function(o){var u=typeof o=="string",a=r.call(arguments,1),f=this;return o=!u&&a.length?e.widget.extend.apply(null,[o].concat(a)):o,u?this.each(function(){var r,i=e.data(this,s);if(!i)return e.error("cannot call methods on "+n+" prior to initialization; "+"attempted to call method '"+o+"'");if(!e.isFunction(i[o])||o.charAt(0)==="_")return e.error("no such method '"+o+"' for "+n+" widget instance");r=i[o].apply(i,a);if(r!==i&&r!==t)return f=r&&r.jquery?f.pushStack(r.get()):r,!1}):this.each(function(){var t=e.data(this,s);t?t.option(o||{})._init():e.data(this,s,new i(o,this))}),f}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,r){r=e(r||this.defaultElement||this)[0],this.element=e(r),this.uuid=n++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),r!==this&&(e.data(r,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===r&&this.destroy()}}),this.document=e(r.style?r.ownerDocument:r.document||r),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),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.widgetName).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(n,r){var i=n,s,o,u;if(arguments.length===0)return e.widget.extend({},this.options);if(typeof n=="string"){i={},s=n.split("."),n=s.shift();if(s.length){o=i[n]=e.widget.extend({},this.options[n]);for(u=0;u<s.length-1;u++)o[s[u]]=o[s[u]]||{},o=o[s[u]];n=s.pop();if(r===t)return o[n]===t?null:o[n];o[n]=r}else{if(r===t)return this.options[n]===t?null:this.options[n];i[n]=r}}return this._setOptions(i),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,e==="disabled"&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(t,n,r){var i,s=this;typeof t!="boolean"&&(r=n,n=t,t=!1),r?(n=i=e(n),this.bindings=this.bindings.add(n)):(r=n,n=this.element,i=this.widget()),e.each(r,function(r,o){function u(){if(!t&&(s.options.disabled===!0||e(this).hasClass("ui-state-disabled")))return;return(typeof o=="string"?s[o]:o).apply(s,arguments)}typeof o!="string"&&(u.guid=o.guid=o.guid||u.guid||e.guid++);var a=r.match(/^(\w+)\s*(.*)$/),f=a[1]+s.eventNamespace,l=a[2];l?i.delegate(l,f,u):n.bind(f,u)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function n(){return(typeof e=="string"?r[e]:e).apply(r,arguments)}var r=this;return setTimeout(n,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,n,r){var i,s,o=this.options[t];r=r||{},n=e.Event(n),n.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),n.target=this.element[0],s=n.originalEvent;if(s)for(i in s)i in n||(n[i]=s[i]);return this.element.trigger(n,r),!(e.isFunction(o)&&o.apply(this.element[0],[n].concat(r))===!1||n.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,n){e.Widget.prototype["_"+t]=function(r,i,s){typeof i=="string"&&(i={effect:i});var o,u=i?i===!0||typeof i=="number"?n:i.effect||n:t;i=i||{},typeof i=="number"&&(i={duration:i}),o=!e.isEmptyObject(i),i.complete=s,i.delay&&r.delay(i.delay),o&&e.effects&&e.effects.effect[u]?r[t](i):u!==t&&r[u]?r[u](i.duration,i.easing,s):r.queue(function(n){e(this)[t](),s&&s.call(r[0]),n()})}})})(jQuery);(function(e,t){var n=!1;e(document).mouseup(function(){n=!1}),e.widget("ui.mouse",{version:"1.10.0",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(n){if(!0===e.data(n.target,t.widgetName+".preventClickEvent"))return e.removeData(n.target,t.widgetName+".preventClickEvent"),n.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(n)return;this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var r=this,i=t.which===1,s=typeof this.options.cancel=="string"&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;if(!i||s||!this._mouseCapture(t))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){r.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)){this._mouseStarted=this._mouseStart(t)!==!1;if(!this._mouseStarted)return t.preventDefault(),!0}return!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return r._mouseMove(e)},this._mouseUpDelegate=function(e){return r._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),n=!0,!0},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(e,t){function n(e){return parseInt(e,10)||0}function r(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.0",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,n,r,i,s,o=this,u=this.options;this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!u.aspectRatio,aspectRatio:u.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:u.helper||u.ghost||u.animate?u.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=u.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor===String){this.handles==="all"&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={};for(n=0;n<t.length;n++)r=e.trim(t[n]),s="ui-resizable-"+r,i=e("<div class='ui-resizable-handle "+s+"'></div>"),i.css({zIndex:u.zIndex}),"se"===r&&i.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[r]=".ui-resizable-"+r,this.element.append(i)}this._renderAxis=function(t){var n,r,i,s;t=t||this.element;for(n in this.handles){this.handles[n].constructor===String&&(this.handles[n]=e(this.handles[n],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(r=e(this.handles[n],this.element),s=/sw|ne|nw|se|n|s/.test(n)?r.outerHeight():r.outerWidth(),i=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize());if(!e(this.handles[n]).length)continue}},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=i&&i[1]?i[1]:"se")}),u.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){if(u.disabled)return;e(this).removeClass("ui-resizable-autohide"),o._handles.show()}).mouseleave(function(){if(u.disabled)return;o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,n=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(n(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),n(this.originalElement),this},_mouseCapture:function(t){var n,r,i=!1;for(n in this.handles){r=e(this.handles[n])[0];if(r===t.target||e.contains(r,t.target))i=!0}return!this.options.disabled&&i},_mouseStart:function(t){var r,i,s,o=this.options,u=this.element.position(),a=this.element;return this.resizing=!0,/absolute/.test(a.css("position"))?a.css({position:"absolute",top:a.css("top"),left:a.css("left")}):a.is(".ui-draggable")&&a.css({position:"absolute",top:u.top,left:u.left}),this._renderProxy(),r=n(this.helper.css("left")),i=n(this.helper.css("top")),o.containment&&(r+=e(o.containment).scrollLeft()||0,i+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:r,top:i},this.size=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.originalPosition={left:r,top:i},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio=typeof o.aspectRatio=="number"?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor",s==="auto"?this.axis+"-resize":s),a.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var n,r=this.helper,i={},s=this.originalMousePosition,o=this.axis,u=this.position.top,a=this.position.left,f=this.size.width,l=this.size.height,c=t.pageX-s.left||0,h=t.pageY-s.top||0,p=this._change[o];if(!p)return!1;n=p.apply(this,[t,c,h]),this._updateVirtualBoundaries(t.shiftKey);if(this._aspectRatio||t.shiftKey)n=this._updateRatio(n,t);return n=this._respectSize(n,t),this._updateCache(n),this._propagate("resize",t),this.position.top!==u&&(i.top=this.position.top+"px"),this.position.left!==a&&(i.left=this.position.left+"px"),this.size.width!==f&&(i.width=this.size.width+"px"),this.size.height!==l&&(i.height=this.size.height+"px"),r.css(i),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(i)||this._trigger("resize",t,this.ui()),!1},_mouseStop:function(t){this.resizing=!1;var n,r,i,s,o,u,a,f=this.options,l=this;return this._helper&&(n=this._proportionallyResizeElements,r=n.length&&/textarea/i.test(n[0].nodeName),i=r&&e.ui.hasScroll(n[0],"left")?0:l.sizeDiff.height,s=r?0:l.sizeDiff.width,o={width:l.helper.width()-s,height:l.helper.height()-i},u=parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left)||null,a=parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top)||null,f.animate||this.element.css(e.extend(o,{top:a,left:u})),l.helper.height(l.size.height),l.helper.width(l.size.width),this._helper&&!f.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,n,i,s,o,u=this.options;o={minWidth:r(u.minWidth)?u.minWidth:0,maxWidth:r(u.maxWidth)?u.maxWidth:Infinity,minHeight:r(u.minHeight)?u.minHeight:0,maxHeight:r(u.maxHeight)?u.maxHeight:Infinity};if(this._aspectRatio||e)t=o.minHeight*this.aspectRatio,i=o.minWidth/this.aspectRatio,n=o.maxHeight*this.aspectRatio,s=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),i>o.minHeight&&(o.minHeight=i),n<o.maxWidth&&(o.maxWidth=n),s<o.maxHeight&&(o.maxHeight=s);this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),r(e.left)&&(this.position.left=e.left),r(e.top)&&(this.position.top=e.top),r(e.height)&&(this.size.height=e.height),r(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,n=this.size,i=this.axis;return r(e.height)?e.width=e.height*this.aspectRatio:r(e.width)&&(e.height=e.width/this.aspectRatio),i==="sw"&&(e.left=t.left+(n.width-e.width),e.top=null),i==="nw"&&(e.top=t.top+(n.height-e.height),e.left=t.left+(n.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,n=this.axis,i=r(e.width)&&t.maxWidth&&t.maxWidth<e.width,s=r(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=r(e.width)&&t.minWidth&&t.minWidth>e.width,u=r(e.height)&&t.minHeight&&t.minHeight>e.height,a=this.originalPosition.left+this.originalSize.width,f=this.position.top+this.size.height,l=/sw|nw|w/.test(n),c=/nw|ne|n/.test(n);return o&&(e.width=t.minWidth),u&&(e.height=t.minHeight),i&&(e.width=t.maxWidth),s&&(e.height=t.maxHeight),o&&l&&(e.left=a-t.minWidth),i&&l&&(e.left=a-t.maxWidth),u&&c&&(e.top=f-t.minHeight),s&&c&&(e.top=f-t.maxHeight),!e.width&&!e.height&&!e.left&&e.top?e.top=null:!e.width&&!e.height&&!e.top&&e.left&&(e.left=null),e},_proportionallyResize:function(){if(!this._proportionallyResizeElements.length)return;var e,t,n,r,i,s=this.helper||this.element;for(e=0;e<this._proportionallyResizeElements.length;e++){i=this._proportionallyResizeElements[e];if(!this.borderDif){this.borderDif=[],n=[i.css("borderTopWidth"),i.css("borderRightWidth"),i.css("borderBottomWidth"),i.css("borderLeftWidth")],r=[i.css("paddingTop"),i.css("paddingRight"),i.css("paddingBottom"),i.css("paddingLeft")];for(t=0;t<n.length;t++)this.borderDif[t]=(parseInt(n[t],10)||0)+(parseInt(r[t],10)||0)}i.css({height:s.height()-this.borderDif[0]-this.borderDif[2]||0,width:s.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var t=this.element,n=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++n.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var n=this.originalSize,r=this.originalPosition;return{left:r.left+t,width:n.width-t}},n:function(e,t,n){var r=this.originalSize,i=this.originalPosition;return{top:i.top+n,height:r.height-n}},s:function(e,t,n){return{height:this.originalSize.height+n}},se:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},sw:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,n,r]))},ne:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},nw:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,n,r]))}},_propagate:function(t,n){e.ui.plugin.call(this,t,[n,this.ui()]),t!=="resize"&&this._trigger(t,n,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var n=e(this).data("ui-resizable"),r=n.options,i=n._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),o=s&&e.ui.hasScroll(i[0],"left")?0:n.sizeDiff.height,u=s?0:n.sizeDiff.width,a={width:n.size.width-u,height:n.size.height-o},f=parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left)||null,l=parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top)||null;n.element.animate(e.extend(a,l&&f?{top:l,left:f}:{}),{duration:r.animateDuration,easing:r.animateEasing,step:function(){var r={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};i&&i.length&&e(i[0]).css({width:r.width,height:r.height}),n._updateCache(r),n._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,r,i,s,o,u,a,f=e(this).data("ui-resizable"),l=f.options,c=f.element,h=l.containment,p=h instanceof e?h.get(0):/parent/.test(h)?c.parent().get(0):h;if(!p)return;f.containerElement=e(p),/document/.test(h)||h===document?(f.containerOffset={left:0,top:0},f.containerPosition={left:0,top:0},f.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(p),r=[],e(["Top","Right","Left","Bottom"]).each(function(e,i){r[e]=n(t.css("padding"+i))}),f.containerOffset=t.offset(),f.containerPosition=t.position(),f.containerSize={height:t.innerHeight()-r[3],width:t.innerWidth()-r[1]},i=f.containerOffset,s=f.containerSize.height,o=f.containerSize.width,u=e.ui.hasScroll(p,"left")?p.scrollWidth:o,a=e.ui.hasScroll(p)?p.scrollHeight:s,f.parentData={element:p,left:i.left,top:i.top,width:u,height:a})},resize:function(t){var n,r,i,s,o=e(this).data("ui-resizable"),u=o.options,a=o.containerOffset,f=o.position,l=o._aspectRatio||t.shiftKey,c={top:0,left:0},h=o.containerElement;h[0]!==document&&/static/.test(h.css("position"))&&(c=a),f.left<(o._helper?a.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-a.left:o.position.left-c.left),l&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=u.helper?a.left:0),f.top<(o._helper?a.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-a.top:o.position.top),l&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?a.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,n=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),r=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-a.top)+o.sizeDiff.height),i=o.containerElement.get(0)===o.element.parent().get(0),s=/relative|absolute/.test(o.containerElement.css("position")),i&&s&&(n-=o.parentData.left),n+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-n,l&&(o.size.height=o.size.width/o.aspectRatio)),r+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-r,l&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.containerOffset,i=t.containerPosition,s=t.containerElement,o=e(t.helper),u=o.offset(),a=o.outerWidth()-t.sizeDiff.width,f=o.outerHeight()-t.sizeDiff.height;t._helper&&!n.animate&&/relative/.test(s.css("position"))&&e(this).css({left:u.left-i.left-r.left,width:a,height:f}),t._helper&&!n.animate&&/static/.test(s.css("position"))&&e(this).css({left:u.left-i.left-r.left,width:a,height:f})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),n=t.options,r=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};typeof n.alsoResize=="object"&&!n.alsoResize.parentNode?n.alsoResize.length?(n.alsoResize=n.alsoResize[0],r(n.alsoResize)):e.each(n.alsoResize,function(e){r(e)}):r(n.alsoResize)},resize:function(t,n){var r=e(this).data("ui-resizable"),i=r.options,s=r.originalSize,o=r.originalPosition,u={height:r.size.height-s.height||0,width:r.size.width-s.width||0,top:r.position.top-o.top||0,left:r.position.left-o.left||0},a=function(t,r){e(t).each(function(){var t=e(this),i=e(this).data("ui-resizable-alsoresize"),s={},o=r&&r.length?r:t.parents(n.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var n=(i[t]||0)+(u[t]||0);n&&n>=0&&(s[t]=n||null)}),t.css(s)})};typeof i.alsoResize=="object"&&!i.alsoResize.nodeType?e.each(i.alsoResize,function(e,t){a(e,t)}):a(i.alsoResize)},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:r.height,width:r.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof n.ghost=="string"?n.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.size,i=t.originalSize,s=t.originalPosition,o=t.axis,u=typeof n.grid=="number"?[n.grid,n.grid]:n.grid,a=u[0]||1,f=u[1]||1,l=Math.round((r.width-i.width)/a)*a,c=Math.round((r.height-i.height)/f)*f,h=i.width+l,p=i.height+c,d=n.maxWidth&&n.maxWidth<h,v=n.maxHeight&&n.maxHeight<p,m=n.minWidth&&n.minWidth>h,g=n.minHeight&&n.minHeight>p;n.grid=u,m&&(h+=a),g&&(p+=f),d&&(h-=a),v&&(p-=f),/^(se|s|e)$/.test(o)?(t.size.width=h,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=h,t.size.height=p,t.position.top=s.top-c):/^(sw)$/.test(o)?(t.size.width=h,t.size.height=p,t.position.left=s.left-l):(t.size.width=h,t.size.height=p,t.position.top=s.top-c,t.position.left=s.left-l)}})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/examples/stacking/index.html b/public/admin/view/javascript/jquery/flot/examples/stacking/index.html new file mode 100644 index 0000000..9eb0528 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/stacking/index.html @@ -0,0 +1,107 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Stacking</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.stack.js"></script> + <script type="text/javascript"> + + $(function() { + + var d1 = []; + for (var i = 0; i <= 10; i += 1) { + d1.push([i, parseInt(Math.random() * 30)]); + } + + var d2 = []; + for (var i = 0; i <= 10; i += 1) { + d2.push([i, parseInt(Math.random() * 30)]); + } + + var d3 = []; + for (var i = 0; i <= 10; i += 1) { + d3.push([i, parseInt(Math.random() * 30)]); + } + + var stack = 0, + bars = true, + lines = false, + steps = false; + + function plotWithOptions() { + $.plot("#placeholder", [ d1, d2, d3 ], { + series: { + stack: stack, + lines: { + show: lines, + fill: true, + steps: steps + }, + bars: { + show: bars, + barWidth: 0.6 + } + } + }); + } + + plotWithOptions(); + + $(".stackControls button").click(function (e) { + e.preventDefault(); + stack = $(this).text() == "With stacking" ? true : null; + plotWithOptions(); + }); + + $(".graphControls button").click(function (e) { + e.preventDefault(); + bars = $(this).text().indexOf("Bars") != -1; + lines = $(this).text().indexOf("Lines") != -1; + steps = $(this).text().indexOf("steps") != -1; + plotWithOptions(); + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Stacking</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>With the stack plugin, you can have Flot stack the series. This is useful if you wish to display both a total and the constituents it is made of. The only requirement is that you provide the input sorted on x.</p> + + <p class="stackControls"> + <button>With stacking</button> + <button>Without stacking</button> + </p> + + <p class="graphControls"> + <button>Bars</button> + <button>Lines</button> + <button>Lines with steps</button> + </p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/symbols/index.html b/public/admin/view/javascript/jquery/flot/examples/symbols/index.html new file mode 100644 index 0000000..47a4d5a --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/symbols/index.html @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Symbols</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.symbol.js"></script> + <script type="text/javascript"> + + $(function() { + + function generate(offset, amplitude) { + + var res = []; + var start = 0, end = 10; + + for (var i = 0; i <= 50; ++i) { + var x = start + i / 50 * (end - start); + res.push([x, amplitude * Math.sin(x + offset)]); + } + + return res; + } + + var data = [ + { data: generate(2, 1.8), points: { symbol: "circle" } }, + { data: generate(3, 1.5), points: { symbol: "square" } }, + { data: generate(4, 0.9), points: { symbol: "diamond" } }, + { data: generate(6, 1.4), points: { symbol: "triangle" } }, + { data: generate(7, 1.1), points: { symbol: "cross" } } + ]; + + $.plot("#placeholder", data, { + series: { + points: { + show: true, + radius: 3 + } + }, + grid: { + hoverable: true + } + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Symbols</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>Points can be marked in several ways, with circles being the built-in default. For other point types, you can define a callback function to draw the symbol. Some common symbols are available in the symbol plugin.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/threshold/index.html b/public/admin/view/javascript/jquery/flot/examples/threshold/index.html new file mode 100644 index 0000000..1079d76 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/threshold/index.html @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Thresholds</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.threshold.js"></script> + <script type="text/javascript"> + + $(function() { + + var d1 = []; + for (var i = 0; i <= 60; i += 1) { + d1.push([i, parseInt(Math.random() * 30 - 10)]); + } + + function plotWithOptions(t) { + $.plot("#placeholder", [{ + data: d1, + color: "rgb(30, 180, 20)", + threshold: { + below: t, + color: "rgb(200, 20, 30)" + }, + lines: { + steps: true + } + }]); + } + + plotWithOptions(0); + + $(".controls button").click(function (e) { + e.preventDefault(); + var t = parseFloat($(this).text().replace("Threshold at ", "")); + plotWithOptions(t); + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Thresholds</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>With the threshold plugin, you can apply a specific color to the part of a data series below a threshold. This is can be useful for highlighting negative values, e.g. when displaying net results or what's in stock.</p> + + <p class="controls"> + <button>Threshold at 5</button> + <button>Threshold at 0</button> + <button>Threshold at -2.5</button> + </p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/tracking/index.html b/public/admin/view/javascript/jquery/flot/examples/tracking/index.html new file mode 100644 index 0000000..59ace02 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/tracking/index.html @@ -0,0 +1,135 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Tracking</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.crosshair.js"></script> + <script type="text/javascript"> + + $(function() { + + var sin = [], cos = []; + for (var i = 0; i < 14; i += 0.1) { + sin.push([i, Math.sin(i)]); + cos.push([i, Math.cos(i)]); + } + + plot = $.plot("#placeholder", [ + { data: sin, label: "sin(x) = -0.00"}, + { data: cos, label: "cos(x) = -0.00" } + ], { + series: { + lines: { + show: true + } + }, + crosshair: { + mode: "x" + }, + grid: { + hoverable: true, + autoHighlight: false + }, + yaxis: { + min: -1.2, + max: 1.2 + } + }); + + var legends = $("#placeholder .legendLabel"); + + legends.each(function () { + // fix the widths so they don't jump around + $(this).css('width', $(this).width()); + }); + + var updateLegendTimeout = null; + var latestPosition = null; + + function updateLegend() { + + updateLegendTimeout = null; + + var pos = latestPosition; + + var axes = plot.getAxes(); + if (pos.x < axes.xaxis.min || pos.x > axes.xaxis.max || + pos.y < axes.yaxis.min || pos.y > axes.yaxis.max) { + return; + } + + var i, j, dataset = plot.getData(); + for (i = 0; i < dataset.length; ++i) { + + var series = dataset[i]; + + // Find the nearest points, x-wise + + for (j = 0; j < series.data.length; ++j) { + if (series.data[j][0] > pos.x) { + break; + } + } + + // Now Interpolate + + var y, + p1 = series.data[j - 1], + p2 = series.data[j]; + + if (p1 == null) { + y = p2[1]; + } else if (p2 == null) { + y = p1[1]; + } else { + y = p1[1] + (p2[1] - p1[1]) * (pos.x - p1[0]) / (p2[0] - p1[0]); + } + + legends.eq(i).text(series.label.replace(/=.*/, "= " + y.toFixed(2))); + } + } + + $("#placeholder").bind("plothover", function (event, pos, item) { + latestPosition = pos; + if (!updateLegendTimeout) { + updateLegendTimeout = setTimeout(updateLegend, 50); + } + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Tracking</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <p>You can add crosshairs that'll track the mouse position, either on both axes or as here on only one.</p> + + <p>If you combine it with listening on hover events, you can use it to track the intersection on the curves by interpolating the data points (look at the legend).</p> + + <p id="hoverdata"></p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/visitors/index.html b/public/admin/view/javascript/jquery/flot/examples/visitors/index.html new file mode 100644 index 0000000..8fc9a26 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/visitors/index.html @@ -0,0 +1,146 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Visitors</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.time.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.selection.js"></script> + <script type="text/javascript"> + + $(function() { + + var d = [[1196463600000, 0], [1196550000000, 0], [1196636400000, 0], [1196722800000, 77], [1196809200000, 3636], [1196895600000, 3575], [1196982000000, 2736], [1197068400000, 1086], [1197154800000, 676], [1197241200000, 1205], [1197327600000, 906], [1197414000000, 710], [1197500400000, 639], [1197586800000, 540], [1197673200000, 435], [1197759600000, 301], [1197846000000, 575], [1197932400000, 481], [1198018800000, 591], [1198105200000, 608], [1198191600000, 459], [1198278000000, 234], [1198364400000, 1352], [1198450800000, 686], [1198537200000, 279], [1198623600000, 449], [1198710000000, 468], [1198796400000, 392], [1198882800000, 282], [1198969200000, 208], [1199055600000, 229], [1199142000000, 177], [1199228400000, 374], [1199314800000, 436], [1199401200000, 404], [1199487600000, 253], [1199574000000, 218], [1199660400000, 476], [1199746800000, 462], [1199833200000, 448], [1199919600000, 442], [1200006000000, 403], [1200092400000, 204], [1200178800000, 194], [1200265200000, 327], [1200351600000, 374], [1200438000000, 507], [1200524400000, 546], [1200610800000, 482], [1200697200000, 283], [1200783600000, 221], [1200870000000, 483], [1200956400000, 523], [1201042800000, 528], [1201129200000, 483], [1201215600000, 452], [1201302000000, 270], [1201388400000, 222], [1201474800000, 439], [1201561200000, 559], [1201647600000, 521], [1201734000000, 477], [1201820400000, 442], [1201906800000, 252], [1201993200000, 236], [1202079600000, 525], [1202166000000, 477], [1202252400000, 386], [1202338800000, 409], [1202425200000, 408], [1202511600000, 237], [1202598000000, 193], [1202684400000, 357], [1202770800000, 414], [1202857200000, 393], [1202943600000, 353], [1203030000000, 364], [1203116400000, 215], [1203202800000, 214], [1203289200000, 356], [1203375600000, 399], [1203462000000, 334], [1203548400000, 348], [1203634800000, 243], [1203721200000, 126], [1203807600000, 157], [1203894000000, 288]]; + + // first correct the timestamps - they are recorded as the daily + // midnights in UTC+0100, but Flot always displays dates in UTC + // so we have to add one hour to hit the midnights in the plot + + for (var i = 0; i < d.length; ++i) { + d[i][0] += 60 * 60 * 1000; + } + + // helper for returning the weekends in a period + + function weekendAreas(axes) { + + var markings = [], + d = new Date(axes.xaxis.min); + + // go to the first Saturday + + d.setUTCDate(d.getUTCDate() - ((d.getUTCDay() + 1) % 7)) + d.setUTCSeconds(0); + d.setUTCMinutes(0); + d.setUTCHours(0); + + var i = d.getTime(); + + // when we don't set yaxis, the rectangle automatically + // extends to infinity upwards and downwards + + do { + markings.push({ xaxis: { from: i, to: i + 2 * 24 * 60 * 60 * 1000 } }); + i += 7 * 24 * 60 * 60 * 1000; + } while (i < axes.xaxis.max); + + return markings; + } + + var options = { + xaxis: { + mode: "time", + tickLength: 5 + }, + selection: { + mode: "x" + }, + grid: { + markings: weekendAreas + } + }; + + var plot = $.plot("#placeholder", [d], options); + + var overview = $.plot("#overview", [d], { + series: { + lines: { + show: true, + lineWidth: 1 + }, + shadowSize: 0 + }, + xaxis: { + ticks: [], + mode: "time" + }, + yaxis: { + ticks: [], + min: 0, + autoscaleMargin: 0.1 + }, + selection: { + mode: "x" + } + }); + + // now connect the two + + $("#placeholder").bind("plotselected", function (event, ranges) { + + // do the zooming + + plot = $.plot("#placeholder", [d], $.extend(true, {}, options, { + xaxis: { + min: ranges.xaxis.from, + max: ranges.xaxis.to + } + })); + + // don't fire event on the overview to prevent eternal loop + + overview.setSelection(ranges, true); + }); + + $("#overview").bind("plotselected", function (event, ranges) { + plot.setSelection(ranges); + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Visitors</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder"></div> + </div> + + <div class="demo-container" style="height:150px;"> + <div id="overview" class="demo-placeholder"></div> + </div> + + <p>This plot shows visitors per day to the Flot homepage, with weekends colored.</p> + + <p>The smaller plot is linked to the main plot, so it acts as an overview. Try dragging a selection on either plot, and watch the behavior of the other.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/examples/zooming/index.html b/public/admin/view/javascript/jquery/flot/examples/zooming/index.html new file mode 100644 index 0000000..8d6b3cb --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/examples/zooming/index.html @@ -0,0 +1,144 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Flot Examples: Selection and zooming</title> + <link href="../examples.css" rel="stylesheet" type="text/css"> + <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../../excanvas.min.js"></script><![endif]--> + <script language="javascript" type="text/javascript" src="../../jquery.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.js"></script> + <script language="javascript" type="text/javascript" src="../../jquery.flot.selection.js"></script> + <script type="text/javascript"> + + $(function() { + + // setup plot + + function getData(x1, x2) { + + var d = []; + for (var i = 0; i <= 100; ++i) { + var x = x1 + i * (x2 - x1) / 100; + d.push([x, Math.sin(x * Math.sin(x))]); + } + + return [ + { label: "sin(x sin(x))", data: d } + ]; + } + + var options = { + legend: { + show: false + }, + series: { + lines: { + show: true + }, + points: { + show: true + } + }, + yaxis: { + ticks: 10 + }, + selection: { + mode: "xy" + } + }; + + var startData = getData(0, 3 * Math.PI); + + var plot = $.plot("#placeholder", startData, options); + + // Create the overview plot + + var overview = $.plot("#overview", startData, { + legend: { + show: false + }, + series: { + lines: { + show: true, + lineWidth: 1 + }, + shadowSize: 0 + }, + xaxis: { + ticks: 4 + }, + yaxis: { + ticks: 3, + min: -2, + max: 2 + }, + grid: { + color: "#999" + }, + selection: { + mode: "xy" + } + }); + + // now connect the two + + $("#placeholder").bind("plotselected", function (event, ranges) { + + // clamp the zooming to prevent eternal zoom + + if (ranges.xaxis.to - ranges.xaxis.from < 0.00001) { + ranges.xaxis.to = ranges.xaxis.from + 0.00001; + } + + if (ranges.yaxis.to - ranges.yaxis.from < 0.00001) { + ranges.yaxis.to = ranges.yaxis.from + 0.00001; + } + + // do the zooming + + plot = $.plot("#placeholder", getData(ranges.xaxis.from, ranges.xaxis.to), + $.extend(true, {}, options, { + xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }, + yaxis: { min: ranges.yaxis.from, max: ranges.yaxis.to } + }) + ); + + // don't fire event on the overview to prevent eternal loop + + overview.setSelection(ranges, true); + }); + + $("#overview").bind("plotselected", function (event, ranges) { + plot.setSelection(ranges); + }); + + // Add the Flot version string to the footer + + $("#footer").prepend("Flot " + $.plot.version + " – "); + }); + + </script> +</head> +<body> + + <div id="header"> + <h2>Selection and zooming</h2> + </div> + + <div id="content"> + + <div class="demo-container"> + <div id="placeholder" class="demo-placeholder" style="float:left; width:650px;"></div> + <div id="overview" class="demo-placeholder" style="float:right;width:160px; height:125px;"></div> + </div> + + <p>Selection support makes it easy to construct flexible zooming schemes. With a few lines of code, the small overview plot to the right has been connected to the large plot. Try selecting a rectangle on either of them.</p> + + </div> + + <div id="footer"> + Copyright © 2007 - 2013 IOLA and Ole Laursen + </div> + +</body> +</html> diff --git a/public/admin/view/javascript/jquery/flot/excanvas.js b/public/admin/view/javascript/jquery/flot/excanvas.js new file mode 100644 index 0000000..70a8f25 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/excanvas.js @@ -0,0 +1,1428 @@ +// Copyright 2006 Google Inc. +// +// 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. + + +// Known Issues: +// +// * Patterns only support repeat. +// * Radial gradient are not implemented. The VML version of these look very +// different from the canvas one. +// * Clipping paths are not implemented. +// * Coordsize. The width and height attribute have higher priority than the +// width and height style values which isn't correct. +// * Painting mode isn't implemented. +// * Canvas width/height should is using content-box by default. IE in +// Quirks mode will draw the canvas using border-box. Either change your +// doctype to HTML5 +// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype) +// or use Box Sizing Behavior from WebFX +// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html) +// * Non uniform scaling does not correctly scale strokes. +// * Filling very large shapes (above 5000 points) is buggy. +// * Optimize. There is always room for speed improvements. + +// Only add this code if we do not already have a canvas implementation +if (!document.createElement('canvas').getContext) { + +(function() { + + // alias some functions to make (compiled) code shorter + var m = Math; + var mr = m.round; + var ms = m.sin; + var mc = m.cos; + var abs = m.abs; + var sqrt = m.sqrt; + + // this is used for sub pixel precision + var Z = 10; + var Z2 = Z / 2; + + var IE_VERSION = +navigator.userAgent.match(/MSIE ([\d.]+)?/)[1]; + + /** + * This funtion is assigned to the <canvas> elements as element.getContext(). + * @this {HTMLElement} + * @return {CanvasRenderingContext2D_} + */ + function getContext() { + return this.context_ || + (this.context_ = new CanvasRenderingContext2D_(this)); + } + + var slice = Array.prototype.slice; + + /** + * Binds a function to an object. The returned function will always use the + * passed in {@code obj} as {@code this}. + * + * Example: + * + * g = bind(f, obj, a, b) + * g(c, d) // will do f.call(obj, a, b, c, d) + * + * @param {Function} f The function to bind the object to + * @param {Object} obj The object that should act as this when the function + * is called + * @param {*} var_args Rest arguments that will be used as the initial + * arguments when the function is called + * @return {Function} A new function that has bound this + */ + function bind(f, obj, var_args) { + var a = slice.call(arguments, 2); + return function() { + return f.apply(obj, a.concat(slice.call(arguments))); + }; + } + + function encodeHtmlAttribute(s) { + return String(s).replace(/&/g, '&').replace(/"/g, '"'); + } + + function addNamespace(doc, prefix, urn) { + if (!doc.namespaces[prefix]) { + doc.namespaces.add(prefix, urn, '#default#VML'); + } + } + + function addNamespacesAndStylesheet(doc) { + addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml'); + addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office'); + + // Setup default CSS. Only add one style sheet per document + if (!doc.styleSheets['ex_canvas_']) { + var ss = doc.createStyleSheet(); + ss.owningElement.id = 'ex_canvas_'; + ss.cssText = 'canvas{display:inline-block;overflow:hidden;' + + // default size is 300x150 in Gecko and Opera + 'text-align:left;width:300px;height:150px}'; + } + } + + // Add namespaces and stylesheet at startup. + addNamespacesAndStylesheet(document); + + var G_vmlCanvasManager_ = { + init: function(opt_doc) { + var doc = opt_doc || document; + // Create a dummy element so that IE will allow canvas elements to be + // recognized. + doc.createElement('canvas'); + doc.attachEvent('onreadystatechange', bind(this.init_, this, doc)); + }, + + init_: function(doc) { + // find all canvas elements + var els = doc.getElementsByTagName('canvas'); + for (var i = 0; i < els.length; i++) { + this.initElement(els[i]); + } + }, + + /** + * Public initializes a canvas element so that it can be used as canvas + * element from now on. This is called automatically before the page is + * loaded but if you are creating elements using createElement you need to + * make sure this is called on the element. + * @param {HTMLElement} el The canvas element to initialize. + * @return {HTMLElement} the element that was created. + */ + initElement: function(el) { + if (!el.getContext) { + el.getContext = getContext; + + // Add namespaces and stylesheet to document of the element. + addNamespacesAndStylesheet(el.ownerDocument); + + // Remove fallback content. There is no way to hide text nodes so we + // just remove all childNodes. We could hide all elements and remove + // text nodes but who really cares about the fallback content. + el.innerHTML = ''; + + // do not use inline function because that will leak memory + el.attachEvent('onpropertychange', onPropertyChange); + el.attachEvent('onresize', onResize); + + var attrs = el.attributes; + if (attrs.width && attrs.width.specified) { + // TODO: use runtimeStyle and coordsize + // el.getContext().setWidth_(attrs.width.nodeValue); + el.style.width = attrs.width.nodeValue + 'px'; + } else { + el.width = el.clientWidth; + } + if (attrs.height && attrs.height.specified) { + // TODO: use runtimeStyle and coordsize + // el.getContext().setHeight_(attrs.height.nodeValue); + el.style.height = attrs.height.nodeValue + 'px'; + } else { + el.height = el.clientHeight; + } + //el.getContext().setCoordsize_() + } + return el; + } + }; + + function onPropertyChange(e) { + var el = e.srcElement; + + switch (e.propertyName) { + case 'width': + el.getContext().clearRect(); + el.style.width = el.attributes.width.nodeValue + 'px'; + // In IE8 this does not trigger onresize. + el.firstChild.style.width = el.clientWidth + 'px'; + break; + case 'height': + el.getContext().clearRect(); + el.style.height = el.attributes.height.nodeValue + 'px'; + el.firstChild.style.height = el.clientHeight + 'px'; + break; + } + } + + function onResize(e) { + var el = e.srcElement; + if (el.firstChild) { + el.firstChild.style.width = el.clientWidth + 'px'; + el.firstChild.style.height = el.clientHeight + 'px'; + } + } + + G_vmlCanvasManager_.init(); + + // precompute "00" to "FF" + var decToHex = []; + for (var i = 0; i < 16; i++) { + for (var j = 0; j < 16; j++) { + decToHex[i * 16 + j] = i.toString(16) + j.toString(16); + } + } + + function createMatrixIdentity() { + return [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1] + ]; + } + + function matrixMultiply(m1, m2) { + var result = createMatrixIdentity(); + + for (var x = 0; x < 3; x++) { + for (var y = 0; y < 3; y++) { + var sum = 0; + + for (var z = 0; z < 3; z++) { + sum += m1[x][z] * m2[z][y]; + } + + result[x][y] = sum; + } + } + return result; + } + + function copyState(o1, o2) { + o2.fillStyle = o1.fillStyle; + o2.lineCap = o1.lineCap; + o2.lineJoin = o1.lineJoin; + o2.lineWidth = o1.lineWidth; + o2.miterLimit = o1.miterLimit; + o2.shadowBlur = o1.shadowBlur; + o2.shadowColor = o1.shadowColor; + o2.shadowOffsetX = o1.shadowOffsetX; + o2.shadowOffsetY = o1.shadowOffsetY; + o2.strokeStyle = o1.strokeStyle; + o2.globalAlpha = o1.globalAlpha; + o2.font = o1.font; + o2.textAlign = o1.textAlign; + o2.textBaseline = o1.textBaseline; + o2.arcScaleX_ = o1.arcScaleX_; + o2.arcScaleY_ = o1.arcScaleY_; + o2.lineScale_ = o1.lineScale_; + } + + var colorData = { + aliceblue: '#F0F8FF', + antiquewhite: '#FAEBD7', + aquamarine: '#7FFFD4', + azure: '#F0FFFF', + beige: '#F5F5DC', + bisque: '#FFE4C4', + black: '#000000', + blanchedalmond: '#FFEBCD', + blueviolet: '#8A2BE2', + brown: '#A52A2A', + burlywood: '#DEB887', + cadetblue: '#5F9EA0', + chartreuse: '#7FFF00', + chocolate: '#D2691E', + coral: '#FF7F50', + cornflowerblue: '#6495ED', + cornsilk: '#FFF8DC', + crimson: '#DC143C', + cyan: '#00FFFF', + darkblue: '#00008B', + darkcyan: '#008B8B', + darkgoldenrod: '#B8860B', + darkgray: '#A9A9A9', + darkgreen: '#006400', + darkgrey: '#A9A9A9', + darkkhaki: '#BDB76B', + darkmagenta: '#8B008B', + darkolivegreen: '#556B2F', + darkorange: '#FF8C00', + darkorchid: '#9932CC', + darkred: '#8B0000', + darksalmon: '#E9967A', + darkseagreen: '#8FBC8F', + darkslateblue: '#483D8B', + darkslategray: '#2F4F4F', + darkslategrey: '#2F4F4F', + darkturquoise: '#00CED1', + darkviolet: '#9400D3', + deeppink: '#FF1493', + deepskyblue: '#00BFFF', + dimgray: '#696969', + dimgrey: '#696969', + dodgerblue: '#1E90FF', + firebrick: '#B22222', + floralwhite: '#FFFAF0', + forestgreen: '#228B22', + gainsboro: '#DCDCDC', + ghostwhite: '#F8F8FF', + gold: '#FFD700', + goldenrod: '#DAA520', + grey: '#808080', + greenyellow: '#ADFF2F', + honeydew: '#F0FFF0', + hotpink: '#FF69B4', + indianred: '#CD5C5C', + indigo: '#4B0082', + ivory: '#FFFFF0', + khaki: '#F0E68C', + lavender: '#E6E6FA', + lavenderblush: '#FFF0F5', + lawngreen: '#7CFC00', + lemonchiffon: '#FFFACD', + lightblue: '#ADD8E6', + lightcoral: '#F08080', + lightcyan: '#E0FFFF', + lightgoldenrodyellow: '#FAFAD2', + lightgreen: '#90EE90', + lightgrey: '#D3D3D3', + lightpink: '#FFB6C1', + lightsalmon: '#FFA07A', + lightseagreen: '#20B2AA', + lightskyblue: '#87CEFA', + lightslategray: '#778899', + lightslategrey: '#778899', + lightsteelblue: '#B0C4DE', + lightyellow: '#FFFFE0', + limegreen: '#32CD32', + linen: '#FAF0E6', + magenta: '#FF00FF', + mediumaquamarine: '#66CDAA', + mediumblue: '#0000CD', + mediumorchid: '#BA55D3', + mediumpurple: '#9370DB', + mediumseagreen: '#3CB371', + mediumslateblue: '#7B68EE', + mediumspringgreen: '#00FA9A', + mediumturquoise: '#48D1CC', + mediumvioletred: '#C71585', + midnightblue: '#191970', + mintcream: '#F5FFFA', + mistyrose: '#FFE4E1', + moccasin: '#FFE4B5', + navajowhite: '#FFDEAD', + oldlace: '#FDF5E6', + olivedrab: '#6B8E23', + orange: '#FFA500', + orangered: '#FF4500', + orchid: '#DA70D6', + palegoldenrod: '#EEE8AA', + palegreen: '#98FB98', + paleturquoise: '#AFEEEE', + palevioletred: '#DB7093', + papayawhip: '#FFEFD5', + peachpuff: '#FFDAB9', + peru: '#CD853F', + pink: '#FFC0CB', + plum: '#DDA0DD', + powderblue: '#B0E0E6', + rosybrown: '#BC8F8F', + royalblue: '#4169E1', + saddlebrown: '#8B4513', + salmon: '#FA8072', + sandybrown: '#F4A460', + seagreen: '#2E8B57', + seashell: '#FFF5EE', + sienna: '#A0522D', + skyblue: '#87CEEB', + slateblue: '#6A5ACD', + slategray: '#708090', + slategrey: '#708090', + snow: '#FFFAFA', + springgreen: '#00FF7F', + steelblue: '#4682B4', + tan: '#D2B48C', + thistle: '#D8BFD8', + tomato: '#FF6347', + turquoise: '#40E0D0', + violet: '#EE82EE', + wheat: '#F5DEB3', + whitesmoke: '#F5F5F5', + yellowgreen: '#9ACD32' + }; + + + function getRgbHslContent(styleString) { + var start = styleString.indexOf('(', 3); + var end = styleString.indexOf(')', start + 1); + var parts = styleString.substring(start + 1, end).split(','); + // add alpha if needed + if (parts.length != 4 || styleString.charAt(3) != 'a') { + parts[3] = 1; + } + return parts; + } + + function percent(s) { + return parseFloat(s) / 100; + } + + function clamp(v, min, max) { + return Math.min(max, Math.max(min, v)); + } + + function hslToRgb(parts){ + var r, g, b, h, s, l; + h = parseFloat(parts[0]) / 360 % 360; + if (h < 0) + h++; + s = clamp(percent(parts[1]), 0, 1); + l = clamp(percent(parts[2]), 0, 1); + if (s == 0) { + r = g = b = l; // achromatic + } else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hueToRgb(p, q, h + 1 / 3); + g = hueToRgb(p, q, h); + b = hueToRgb(p, q, h - 1 / 3); + } + + return '#' + decToHex[Math.floor(r * 255)] + + decToHex[Math.floor(g * 255)] + + decToHex[Math.floor(b * 255)]; + } + + function hueToRgb(m1, m2, h) { + if (h < 0) + h++; + if (h > 1) + h--; + + if (6 * h < 1) + return m1 + (m2 - m1) * 6 * h; + else if (2 * h < 1) + return m2; + else if (3 * h < 2) + return m1 + (m2 - m1) * (2 / 3 - h) * 6; + else + return m1; + } + + var processStyleCache = {}; + + function processStyle(styleString) { + if (styleString in processStyleCache) { + return processStyleCache[styleString]; + } + + var str, alpha = 1; + + styleString = String(styleString); + if (styleString.charAt(0) == '#') { + str = styleString; + } else if (/^rgb/.test(styleString)) { + var parts = getRgbHslContent(styleString); + var str = '#', n; + for (var i = 0; i < 3; i++) { + if (parts[i].indexOf('%') != -1) { + n = Math.floor(percent(parts[i]) * 255); + } else { + n = +parts[i]; + } + str += decToHex[clamp(n, 0, 255)]; + } + alpha = +parts[3]; + } else if (/^hsl/.test(styleString)) { + var parts = getRgbHslContent(styleString); + str = hslToRgb(parts); + alpha = parts[3]; + } else { + str = colorData[styleString] || styleString; + } + return processStyleCache[styleString] = {color: str, alpha: alpha}; + } + + var DEFAULT_STYLE = { + style: 'normal', + variant: 'normal', + weight: 'normal', + size: 10, + family: 'sans-serif' + }; + + // Internal text style cache + var fontStyleCache = {}; + + function processFontStyle(styleString) { + if (fontStyleCache[styleString]) { + return fontStyleCache[styleString]; + } + + var el = document.createElement('div'); + var style = el.style; + try { + style.font = styleString; + } catch (ex) { + // Ignore failures to set to invalid font. + } + + return fontStyleCache[styleString] = { + style: style.fontStyle || DEFAULT_STYLE.style, + variant: style.fontVariant || DEFAULT_STYLE.variant, + weight: style.fontWeight || DEFAULT_STYLE.weight, + size: style.fontSize || DEFAULT_STYLE.size, + family: style.fontFamily || DEFAULT_STYLE.family + }; + } + + function getComputedStyle(style, element) { + var computedStyle = {}; + + for (var p in style) { + computedStyle[p] = style[p]; + } + + // Compute the size + var canvasFontSize = parseFloat(element.currentStyle.fontSize), + fontSize = parseFloat(style.size); + + if (typeof style.size == 'number') { + computedStyle.size = style.size; + } else if (style.size.indexOf('px') != -1) { + computedStyle.size = fontSize; + } else if (style.size.indexOf('em') != -1) { + computedStyle.size = canvasFontSize * fontSize; + } else if(style.size.indexOf('%') != -1) { + computedStyle.size = (canvasFontSize / 100) * fontSize; + } else if (style.size.indexOf('pt') != -1) { + computedStyle.size = fontSize / .75; + } else { + computedStyle.size = canvasFontSize; + } + + // Different scaling between normal text and VML text. This was found using + // trial and error to get the same size as non VML text. + computedStyle.size *= 0.981; + + return computedStyle; + } + + function buildStyle(style) { + return style.style + ' ' + style.variant + ' ' + style.weight + ' ' + + style.size + 'px ' + style.family; + } + + var lineCapMap = { + 'butt': 'flat', + 'round': 'round' + }; + + function processLineCap(lineCap) { + return lineCapMap[lineCap] || 'square'; + } + + /** + * This class implements CanvasRenderingContext2D interface as described by + * the WHATWG. + * @param {HTMLElement} canvasElement The element that the 2D context should + * be associated with + */ + function CanvasRenderingContext2D_(canvasElement) { + this.m_ = createMatrixIdentity(); + + this.mStack_ = []; + this.aStack_ = []; + this.currentPath_ = []; + + // Canvas context properties + this.strokeStyle = '#000'; + this.fillStyle = '#000'; + + this.lineWidth = 1; + this.lineJoin = 'miter'; + this.lineCap = 'butt'; + this.miterLimit = Z * 1; + this.globalAlpha = 1; + this.font = '10px sans-serif'; + this.textAlign = 'left'; + this.textBaseline = 'alphabetic'; + this.canvas = canvasElement; + + var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' + + canvasElement.clientHeight + 'px;overflow:hidden;position:absolute'; + var el = canvasElement.ownerDocument.createElement('div'); + el.style.cssText = cssText; + canvasElement.appendChild(el); + + var overlayEl = el.cloneNode(false); + // Use a non transparent background. + overlayEl.style.backgroundColor = 'red'; + overlayEl.style.filter = 'alpha(opacity=0)'; + canvasElement.appendChild(overlayEl); + + this.element_ = el; + this.arcScaleX_ = 1; + this.arcScaleY_ = 1; + this.lineScale_ = 1; + } + + var contextPrototype = CanvasRenderingContext2D_.prototype; + contextPrototype.clearRect = function() { + if (this.textMeasureEl_) { + this.textMeasureEl_.removeNode(true); + this.textMeasureEl_ = null; + } + this.element_.innerHTML = ''; + }; + + contextPrototype.beginPath = function() { + // TODO: Branch current matrix so that save/restore has no effect + // as per safari docs. + this.currentPath_ = []; + }; + + contextPrototype.moveTo = function(aX, aY) { + var p = getCoords(this, aX, aY); + this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y}); + this.currentX_ = p.x; + this.currentY_ = p.y; + }; + + contextPrototype.lineTo = function(aX, aY) { + var p = getCoords(this, aX, aY); + this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y}); + + this.currentX_ = p.x; + this.currentY_ = p.y; + }; + + contextPrototype.bezierCurveTo = function(aCP1x, aCP1y, + aCP2x, aCP2y, + aX, aY) { + var p = getCoords(this, aX, aY); + var cp1 = getCoords(this, aCP1x, aCP1y); + var cp2 = getCoords(this, aCP2x, aCP2y); + bezierCurveTo(this, cp1, cp2, p); + }; + + // Helper function that takes the already fixed cordinates. + function bezierCurveTo(self, cp1, cp2, p) { + self.currentPath_.push({ + type: 'bezierCurveTo', + cp1x: cp1.x, + cp1y: cp1.y, + cp2x: cp2.x, + cp2y: cp2.y, + x: p.x, + y: p.y + }); + self.currentX_ = p.x; + self.currentY_ = p.y; + } + + contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) { + // the following is lifted almost directly from + // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes + + var cp = getCoords(this, aCPx, aCPy); + var p = getCoords(this, aX, aY); + + var cp1 = { + x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_), + y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_) + }; + var cp2 = { + x: cp1.x + (p.x - this.currentX_) / 3.0, + y: cp1.y + (p.y - this.currentY_) / 3.0 + }; + + bezierCurveTo(this, cp1, cp2, p); + }; + + contextPrototype.arc = function(aX, aY, aRadius, + aStartAngle, aEndAngle, aClockwise) { + aRadius *= Z; + var arcType = aClockwise ? 'at' : 'wa'; + + var xStart = aX + mc(aStartAngle) * aRadius - Z2; + var yStart = aY + ms(aStartAngle) * aRadius - Z2; + + var xEnd = aX + mc(aEndAngle) * aRadius - Z2; + var yEnd = aY + ms(aEndAngle) * aRadius - Z2; + + // IE won't render arches drawn counter clockwise if xStart == xEnd. + if (xStart == xEnd && !aClockwise) { + xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something + // that can be represented in binary + } + + var p = getCoords(this, aX, aY); + var pStart = getCoords(this, xStart, yStart); + var pEnd = getCoords(this, xEnd, yEnd); + + this.currentPath_.push({type: arcType, + x: p.x, + y: p.y, + radius: aRadius, + xStart: pStart.x, + yStart: pStart.y, + xEnd: pEnd.x, + yEnd: pEnd.y}); + + }; + + contextPrototype.rect = function(aX, aY, aWidth, aHeight) { + this.moveTo(aX, aY); + this.lineTo(aX + aWidth, aY); + this.lineTo(aX + aWidth, aY + aHeight); + this.lineTo(aX, aY + aHeight); + this.closePath(); + }; + + contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) { + var oldPath = this.currentPath_; + this.beginPath(); + + this.moveTo(aX, aY); + this.lineTo(aX + aWidth, aY); + this.lineTo(aX + aWidth, aY + aHeight); + this.lineTo(aX, aY + aHeight); + this.closePath(); + this.stroke(); + + this.currentPath_ = oldPath; + }; + + contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) { + var oldPath = this.currentPath_; + this.beginPath(); + + this.moveTo(aX, aY); + this.lineTo(aX + aWidth, aY); + this.lineTo(aX + aWidth, aY + aHeight); + this.lineTo(aX, aY + aHeight); + this.closePath(); + this.fill(); + + this.currentPath_ = oldPath; + }; + + contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) { + var gradient = new CanvasGradient_('gradient'); + gradient.x0_ = aX0; + gradient.y0_ = aY0; + gradient.x1_ = aX1; + gradient.y1_ = aY1; + return gradient; + }; + + contextPrototype.createRadialGradient = function(aX0, aY0, aR0, + aX1, aY1, aR1) { + var gradient = new CanvasGradient_('gradientradial'); + gradient.x0_ = aX0; + gradient.y0_ = aY0; + gradient.r0_ = aR0; + gradient.x1_ = aX1; + gradient.y1_ = aY1; + gradient.r1_ = aR1; + return gradient; + }; + + contextPrototype.drawImage = function(image, var_args) { + var dx, dy, dw, dh, sx, sy, sw, sh; + + // to find the original width we overide the width and height + var oldRuntimeWidth = image.runtimeStyle.width; + var oldRuntimeHeight = image.runtimeStyle.height; + image.runtimeStyle.width = 'auto'; + image.runtimeStyle.height = 'auto'; + + // get the original size + var w = image.width; + var h = image.height; + + // and remove overides + image.runtimeStyle.width = oldRuntimeWidth; + image.runtimeStyle.height = oldRuntimeHeight; + + if (arguments.length == 3) { + dx = arguments[1]; + dy = arguments[2]; + sx = sy = 0; + sw = dw = w; + sh = dh = h; + } else if (arguments.length == 5) { + dx = arguments[1]; + dy = arguments[2]; + dw = arguments[3]; + dh = arguments[4]; + sx = sy = 0; + sw = w; + sh = h; + } else if (arguments.length == 9) { + sx = arguments[1]; + sy = arguments[2]; + sw = arguments[3]; + sh = arguments[4]; + dx = arguments[5]; + dy = arguments[6]; + dw = arguments[7]; + dh = arguments[8]; + } else { + throw Error('Invalid number of arguments'); + } + + var d = getCoords(this, dx, dy); + + var w2 = sw / 2; + var h2 = sh / 2; + + var vmlStr = []; + + var W = 10; + var H = 10; + + // For some reason that I've now forgotten, using divs didn't work + vmlStr.push(' <g_vml_:group', + ' coordsize="', Z * W, ',', Z * H, '"', + ' coordorigin="0,0"' , + ' style="width:', W, 'px;height:', H, 'px;position:absolute;'); + + // If filters are necessary (rotation exists), create them + // filters are bog-slow, so only create them if abbsolutely necessary + // The following check doesn't account for skews (which don't exist + // in the canvas spec (yet) anyway. + + if (this.m_[0][0] != 1 || this.m_[0][1] || + this.m_[1][1] != 1 || this.m_[1][0]) { + var filter = []; + + // Note the 12/21 reversal + filter.push('M11=', this.m_[0][0], ',', + 'M12=', this.m_[1][0], ',', + 'M21=', this.m_[0][1], ',', + 'M22=', this.m_[1][1], ',', + 'Dx=', mr(d.x / Z), ',', + 'Dy=', mr(d.y / Z), ''); + + // Bounding box calculation (need to minimize displayed area so that + // filters don't waste time on unused pixels. + var max = d; + var c2 = getCoords(this, dx + dw, dy); + var c3 = getCoords(this, dx, dy + dh); + var c4 = getCoords(this, dx + dw, dy + dh); + + max.x = m.max(max.x, c2.x, c3.x, c4.x); + max.y = m.max(max.y, c2.y, c3.y, c4.y); + + vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z), + 'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(', + filter.join(''), ", sizingmethod='clip');"); + + } else { + vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;'); + } + + vmlStr.push(' ">' , + '<g_vml_:image src="', image.src, '"', + ' style="width:', Z * dw, 'px;', + ' height:', Z * dh, 'px"', + ' cropleft="', sx / w, '"', + ' croptop="', sy / h, '"', + ' cropright="', (w - sx - sw) / w, '"', + ' cropbottom="', (h - sy - sh) / h, '"', + ' />', + '</g_vml_:group>'); + + this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join('')); + }; + + contextPrototype.stroke = function(aFill) { + var W = 10; + var H = 10; + // Divide the shape into chunks if it's too long because IE has a limit + // somewhere for how long a VML shape can be. This simple division does + // not work with fills, only strokes, unfortunately. + var chunkSize = 5000; + + var min = {x: null, y: null}; + var max = {x: null, y: null}; + + for (var j = 0; j < this.currentPath_.length; j += chunkSize) { + var lineStr = []; + var lineOpen = false; + + lineStr.push('<g_vml_:shape', + ' filled="', !!aFill, '"', + ' style="position:absolute;width:', W, 'px;height:', H, 'px;"', + ' coordorigin="0,0"', + ' coordsize="', Z * W, ',', Z * H, '"', + ' stroked="', !aFill, '"', + ' path="'); + + var newSeq = false; + + for (var i = j; i < Math.min(j + chunkSize, this.currentPath_.length); i++) { + if (i % chunkSize == 0 && i > 0) { // move into position for next chunk + lineStr.push(' m ', mr(this.currentPath_[i-1].x), ',', mr(this.currentPath_[i-1].y)); + } + + var p = this.currentPath_[i]; + var c; + + switch (p.type) { + case 'moveTo': + c = p; + lineStr.push(' m ', mr(p.x), ',', mr(p.y)); + break; + case 'lineTo': + lineStr.push(' l ', mr(p.x), ',', mr(p.y)); + break; + case 'close': + lineStr.push(' x '); + p = null; + break; + case 'bezierCurveTo': + lineStr.push(' c ', + mr(p.cp1x), ',', mr(p.cp1y), ',', + mr(p.cp2x), ',', mr(p.cp2y), ',', + mr(p.x), ',', mr(p.y)); + break; + case 'at': + case 'wa': + lineStr.push(' ', p.type, ' ', + mr(p.x - this.arcScaleX_ * p.radius), ',', + mr(p.y - this.arcScaleY_ * p.radius), ' ', + mr(p.x + this.arcScaleX_ * p.radius), ',', + mr(p.y + this.arcScaleY_ * p.radius), ' ', + mr(p.xStart), ',', mr(p.yStart), ' ', + mr(p.xEnd), ',', mr(p.yEnd)); + break; + } + + + // TODO: Following is broken for curves due to + // move to proper paths. + + // Figure out dimensions so we can do gradient fills + // properly + if (p) { + if (min.x == null || p.x < min.x) { + min.x = p.x; + } + if (max.x == null || p.x > max.x) { + max.x = p.x; + } + if (min.y == null || p.y < min.y) { + min.y = p.y; + } + if (max.y == null || p.y > max.y) { + max.y = p.y; + } + } + } + lineStr.push(' ">'); + + if (!aFill) { + appendStroke(this, lineStr); + } else { + appendFill(this, lineStr, min, max); + } + + lineStr.push('</g_vml_:shape>'); + + this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); + } + }; + + function appendStroke(ctx, lineStr) { + var a = processStyle(ctx.strokeStyle); + var color = a.color; + var opacity = a.alpha * ctx.globalAlpha; + var lineWidth = ctx.lineScale_ * ctx.lineWidth; + + // VML cannot correctly render a line if the width is less than 1px. + // In that case, we dilute the color to make the line look thinner. + if (lineWidth < 1) { + opacity *= lineWidth; + } + + lineStr.push( + '<g_vml_:stroke', + ' opacity="', opacity, '"', + ' joinstyle="', ctx.lineJoin, '"', + ' miterlimit="', ctx.miterLimit, '"', + ' endcap="', processLineCap(ctx.lineCap), '"', + ' weight="', lineWidth, 'px"', + ' color="', color, '" />' + ); + } + + function appendFill(ctx, lineStr, min, max) { + var fillStyle = ctx.fillStyle; + var arcScaleX = ctx.arcScaleX_; + var arcScaleY = ctx.arcScaleY_; + var width = max.x - min.x; + var height = max.y - min.y; + if (fillStyle instanceof CanvasGradient_) { + // TODO: Gradients transformed with the transformation matrix. + var angle = 0; + var focus = {x: 0, y: 0}; + + // additional offset + var shift = 0; + // scale factor for offset + var expansion = 1; + + if (fillStyle.type_ == 'gradient') { + var x0 = fillStyle.x0_ / arcScaleX; + var y0 = fillStyle.y0_ / arcScaleY; + var x1 = fillStyle.x1_ / arcScaleX; + var y1 = fillStyle.y1_ / arcScaleY; + var p0 = getCoords(ctx, x0, y0); + var p1 = getCoords(ctx, x1, y1); + var dx = p1.x - p0.x; + var dy = p1.y - p0.y; + angle = Math.atan2(dx, dy) * 180 / Math.PI; + + // The angle should be a non-negative number. + if (angle < 0) { + angle += 360; + } + + // Very small angles produce an unexpected result because they are + // converted to a scientific notation string. + if (angle < 1e-6) { + angle = 0; + } + } else { + var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_); + focus = { + x: (p0.x - min.x) / width, + y: (p0.y - min.y) / height + }; + + width /= arcScaleX * Z; + height /= arcScaleY * Z; + var dimension = m.max(width, height); + shift = 2 * fillStyle.r0_ / dimension; + expansion = 2 * fillStyle.r1_ / dimension - shift; + } + + // We need to sort the color stops in ascending order by offset, + // otherwise IE won't interpret it correctly. + var stops = fillStyle.colors_; + stops.sort(function(cs1, cs2) { + return cs1.offset - cs2.offset; + }); + + var length = stops.length; + var color1 = stops[0].color; + var color2 = stops[length - 1].color; + var opacity1 = stops[0].alpha * ctx.globalAlpha; + var opacity2 = stops[length - 1].alpha * ctx.globalAlpha; + + var colors = []; + for (var i = 0; i < length; i++) { + var stop = stops[i]; + colors.push(stop.offset * expansion + shift + ' ' + stop.color); + } + + // When colors attribute is used, the meanings of opacity and o:opacity2 + // are reversed. + lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"', + ' method="none" focus="100%"', + ' color="', color1, '"', + ' color2="', color2, '"', + ' colors="', colors.join(','), '"', + ' opacity="', opacity2, '"', + ' g_o_:opacity2="', opacity1, '"', + ' angle="', angle, '"', + ' focusposition="', focus.x, ',', focus.y, '" />'); + } else if (fillStyle instanceof CanvasPattern_) { + if (width && height) { + var deltaLeft = -min.x; + var deltaTop = -min.y; + lineStr.push('<g_vml_:fill', + ' position="', + deltaLeft / width * arcScaleX * arcScaleX, ',', + deltaTop / height * arcScaleY * arcScaleY, '"', + ' type="tile"', + // TODO: Figure out the correct size to fit the scale. + //' size="', w, 'px ', h, 'px"', + ' src="', fillStyle.src_, '" />'); + } + } else { + var a = processStyle(ctx.fillStyle); + var color = a.color; + var opacity = a.alpha * ctx.globalAlpha; + lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity, + '" />'); + } + } + + contextPrototype.fill = function() { + this.stroke(true); + }; + + contextPrototype.closePath = function() { + this.currentPath_.push({type: 'close'}); + }; + + function getCoords(ctx, aX, aY) { + var m = ctx.m_; + return { + x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2, + y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2 + }; + }; + + contextPrototype.save = function() { + var o = {}; + copyState(this, o); + this.aStack_.push(o); + this.mStack_.push(this.m_); + this.m_ = matrixMultiply(createMatrixIdentity(), this.m_); + }; + + contextPrototype.restore = function() { + if (this.aStack_.length) { + copyState(this.aStack_.pop(), this); + this.m_ = this.mStack_.pop(); + } + }; + + function matrixIsFinite(m) { + return isFinite(m[0][0]) && isFinite(m[0][1]) && + isFinite(m[1][0]) && isFinite(m[1][1]) && + isFinite(m[2][0]) && isFinite(m[2][1]); + } + + function setM(ctx, m, updateLineScale) { + if (!matrixIsFinite(m)) { + return; + } + ctx.m_ = m; + + if (updateLineScale) { + // Get the line scale. + // Determinant of this.m_ means how much the area is enlarged by the + // transformation. So its square root can be used as a scale factor + // for width. + var det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; + ctx.lineScale_ = sqrt(abs(det)); + } + } + + contextPrototype.translate = function(aX, aY) { + var m1 = [ + [1, 0, 0], + [0, 1, 0], + [aX, aY, 1] + ]; + + setM(this, matrixMultiply(m1, this.m_), false); + }; + + contextPrototype.rotate = function(aRot) { + var c = mc(aRot); + var s = ms(aRot); + + var m1 = [ + [c, s, 0], + [-s, c, 0], + [0, 0, 1] + ]; + + setM(this, matrixMultiply(m1, this.m_), false); + }; + + contextPrototype.scale = function(aX, aY) { + this.arcScaleX_ *= aX; + this.arcScaleY_ *= aY; + var m1 = [ + [aX, 0, 0], + [0, aY, 0], + [0, 0, 1] + ]; + + setM(this, matrixMultiply(m1, this.m_), true); + }; + + contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) { + var m1 = [ + [m11, m12, 0], + [m21, m22, 0], + [dx, dy, 1] + ]; + + setM(this, matrixMultiply(m1, this.m_), true); + }; + + contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) { + var m = [ + [m11, m12, 0], + [m21, m22, 0], + [dx, dy, 1] + ]; + + setM(this, m, true); + }; + + /** + * The text drawing function. + * The maxWidth argument isn't taken in account, since no browser supports + * it yet. + */ + contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) { + var m = this.m_, + delta = 1000, + left = 0, + right = delta, + offset = {x: 0, y: 0}, + lineStr = []; + + var fontStyle = getComputedStyle(processFontStyle(this.font), + this.element_); + + var fontStyleString = buildStyle(fontStyle); + + var elementStyle = this.element_.currentStyle; + var textAlign = this.textAlign.toLowerCase(); + switch (textAlign) { + case 'left': + case 'center': + case 'right': + break; + case 'end': + textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left'; + break; + case 'start': + textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left'; + break; + default: + textAlign = 'left'; + } + + // 1.75 is an arbitrary number, as there is no info about the text baseline + switch (this.textBaseline) { + case 'hanging': + case 'top': + offset.y = fontStyle.size / 1.75; + break; + case 'middle': + break; + default: + case null: + case 'alphabetic': + case 'ideographic': + case 'bottom': + offset.y = -fontStyle.size / 2.25; + break; + } + + switch(textAlign) { + case 'right': + left = delta; + right = 0.05; + break; + case 'center': + left = right = delta / 2; + break; + } + + var d = getCoords(this, x + offset.x, y + offset.y); + + lineStr.push('<g_vml_:line from="', -left ,' 0" to="', right ,' 0.05" ', + ' coordsize="100 100" coordorigin="0 0"', + ' filled="', !stroke, '" stroked="', !!stroke, + '" style="position:absolute;width:1px;height:1px;">'); + + if (stroke) { + appendStroke(this, lineStr); + } else { + // TODO: Fix the min and max params. + appendFill(this, lineStr, {x: -left, y: 0}, + {x: right, y: fontStyle.size}); + } + + var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' + + m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0'; + + var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z); + + lineStr.push('<g_vml_:skew on="t" matrix="', skewM ,'" ', + ' offset="', skewOffset, '" origin="', left ,' 0" />', + '<g_vml_:path textpathok="true" />', + '<g_vml_:textpath on="true" string="', + encodeHtmlAttribute(text), + '" style="v-text-align:', textAlign, + ';font:', encodeHtmlAttribute(fontStyleString), + '" /></g_vml_:line>'); + + this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); + }; + + contextPrototype.fillText = function(text, x, y, maxWidth) { + this.drawText_(text, x, y, maxWidth, false); + }; + + contextPrototype.strokeText = function(text, x, y, maxWidth) { + this.drawText_(text, x, y, maxWidth, true); + }; + + contextPrototype.measureText = function(text) { + if (!this.textMeasureEl_) { + var s = '<span style="position:absolute;' + + 'top:-20000px;left:0;padding:0;margin:0;border:none;' + + 'white-space:pre;"></span>'; + this.element_.insertAdjacentHTML('beforeEnd', s); + this.textMeasureEl_ = this.element_.lastChild; + } + var doc = this.element_.ownerDocument; + this.textMeasureEl_.innerHTML = ''; + this.textMeasureEl_.style.font = this.font; + // Don't use innerHTML or innerText because they allow markup/whitespace. + this.textMeasureEl_.appendChild(doc.createTextNode(text)); + return {width: this.textMeasureEl_.offsetWidth}; + }; + + /******** STUBS ********/ + contextPrototype.clip = function() { + // TODO: Implement + }; + + contextPrototype.arcTo = function() { + // TODO: Implement + }; + + contextPrototype.createPattern = function(image, repetition) { + return new CanvasPattern_(image, repetition); + }; + + // Gradient / Pattern Stubs + function CanvasGradient_(aType) { + this.type_ = aType; + this.x0_ = 0; + this.y0_ = 0; + this.r0_ = 0; + this.x1_ = 0; + this.y1_ = 0; + this.r1_ = 0; + this.colors_ = []; + } + + CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) { + aColor = processStyle(aColor); + this.colors_.push({offset: aOffset, + color: aColor.color, + alpha: aColor.alpha}); + }; + + function CanvasPattern_(image, repetition) { + assertImageIsValid(image); + switch (repetition) { + case 'repeat': + case null: + case '': + this.repetition_ = 'repeat'; + break + case 'repeat-x': + case 'repeat-y': + case 'no-repeat': + this.repetition_ = repetition; + break; + default: + throwException('SYNTAX_ERR'); + } + + this.src_ = image.src; + this.width_ = image.width; + this.height_ = image.height; + } + + function throwException(s) { + throw new DOMException_(s); + } + + function assertImageIsValid(img) { + if (!img || img.nodeType != 1 || img.tagName != 'IMG') { + throwException('TYPE_MISMATCH_ERR'); + } + if (img.readyState != 'complete') { + throwException('INVALID_STATE_ERR'); + } + } + + function DOMException_(s) { + this.code = this[s]; + this.message = s +': DOM Exception ' + this.code; + } + var p = DOMException_.prototype = new Error; + p.INDEX_SIZE_ERR = 1; + p.DOMSTRING_SIZE_ERR = 2; + p.HIERARCHY_REQUEST_ERR = 3; + p.WRONG_DOCUMENT_ERR = 4; + p.INVALID_CHARACTER_ERR = 5; + p.NO_DATA_ALLOWED_ERR = 6; + p.NO_MODIFICATION_ALLOWED_ERR = 7; + p.NOT_FOUND_ERR = 8; + p.NOT_SUPPORTED_ERR = 9; + p.INUSE_ATTRIBUTE_ERR = 10; + p.INVALID_STATE_ERR = 11; + p.SYNTAX_ERR = 12; + p.INVALID_MODIFICATION_ERR = 13; + p.NAMESPACE_ERR = 14; + p.INVALID_ACCESS_ERR = 15; + p.VALIDATION_ERR = 16; + p.TYPE_MISMATCH_ERR = 17; + + // set up externs + G_vmlCanvasManager = G_vmlCanvasManager_; + CanvasRenderingContext2D = CanvasRenderingContext2D_; + CanvasGradient = CanvasGradient_; + CanvasPattern = CanvasPattern_; + DOMException = DOMException_; +})(); + +} // if diff --git a/public/admin/view/javascript/jquery/flot/excanvas.min.js b/public/admin/view/javascript/jquery/flot/excanvas.min.js new file mode 100644 index 0000000..fcf876c --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/excanvas.min.js @@ -0,0 +1 @@ +if(!document.createElement("canvas").getContext){(function(){var ab=Math;var n=ab.round;var l=ab.sin;var A=ab.cos;var H=ab.abs;var N=ab.sqrt;var d=10;var f=d/2;var z=+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];function y(){return this.context_||(this.context_=new D(this))}var t=Array.prototype.slice;function g(j,m,p){var i=t.call(arguments,2);return function(){return j.apply(m,i.concat(t.call(arguments)))}}function af(i){return String(i).replace(/&/g,"&").replace(/"/g,""")}function Y(m,j,i){if(!m.namespaces[j]){m.namespaces.add(j,i,"#default#VML")}}function R(j){Y(j,"g_vml_","urn:schemas-microsoft-com:vml");Y(j,"g_o_","urn:schemas-microsoft-com:office:office");if(!j.styleSheets.ex_canvas_){var i=j.createStyleSheet();i.owningElement.id="ex_canvas_";i.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}R(document);var e={init:function(i){var j=i||document;j.createElement("canvas");j.attachEvent("onreadystatechange",g(this.init_,this,j))},init_:function(p){var m=p.getElementsByTagName("canvas");for(var j=0;j<m.length;j++){this.initElement(m[j])}},initElement:function(j){if(!j.getContext){j.getContext=y;R(j.ownerDocument);j.innerHTML="";j.attachEvent("onpropertychange",x);j.attachEvent("onresize",W);var i=j.attributes;if(i.width&&i.width.specified){j.style.width=i.width.nodeValue+"px"}else{j.width=j.clientWidth}if(i.height&&i.height.specified){j.style.height=i.height.nodeValue+"px"}else{j.height=j.clientHeight}}return j}};function x(j){var i=j.srcElement;switch(j.propertyName){case"width":i.getContext().clearRect();i.style.width=i.attributes.width.nodeValue+"px";i.firstChild.style.width=i.clientWidth+"px";break;case"height":i.getContext().clearRect();i.style.height=i.attributes.height.nodeValue+"px";i.firstChild.style.height=i.clientHeight+"px";break}}function W(j){var i=j.srcElement;if(i.firstChild){i.firstChild.style.width=i.clientWidth+"px";i.firstChild.style.height=i.clientHeight+"px"}}e.init();var k=[];for(var ae=0;ae<16;ae++){for(var ad=0;ad<16;ad++){k[ae*16+ad]=ae.toString(16)+ad.toString(16)}}function B(){return[[1,0,0],[0,1,0],[0,0,1]]}function J(p,m){var j=B();for(var i=0;i<3;i++){for(var ah=0;ah<3;ah++){var Z=0;for(var ag=0;ag<3;ag++){Z+=p[i][ag]*m[ag][ah]}j[i][ah]=Z}}return j}function v(j,i){i.fillStyle=j.fillStyle;i.lineCap=j.lineCap;i.lineJoin=j.lineJoin;i.lineWidth=j.lineWidth;i.miterLimit=j.miterLimit;i.shadowBlur=j.shadowBlur;i.shadowColor=j.shadowColor;i.shadowOffsetX=j.shadowOffsetX;i.shadowOffsetY=j.shadowOffsetY;i.strokeStyle=j.strokeStyle;i.globalAlpha=j.globalAlpha;i.font=j.font;i.textAlign=j.textAlign;i.textBaseline=j.textBaseline;i.arcScaleX_=j.arcScaleX_;i.arcScaleY_=j.arcScaleY_;i.lineScale_=j.lineScale_}var b={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function M(j){var p=j.indexOf("(",3);var i=j.indexOf(")",p+1);var m=j.substring(p+1,i).split(",");if(m.length!=4||j.charAt(3)!="a"){m[3]=1}return m}function c(i){return parseFloat(i)/100}function r(j,m,i){return Math.min(i,Math.max(m,j))}function I(ag){var i,ai,aj,ah,ak,Z;ah=parseFloat(ag[0])/360%360;if(ah<0){ah++}ak=r(c(ag[1]),0,1);Z=r(c(ag[2]),0,1);if(ak==0){i=ai=aj=Z}else{var j=Z<0.5?Z*(1+ak):Z+ak-Z*ak;var m=2*Z-j;i=a(m,j,ah+1/3);ai=a(m,j,ah);aj=a(m,j,ah-1/3)}return"#"+k[Math.floor(i*255)]+k[Math.floor(ai*255)]+k[Math.floor(aj*255)]}function a(j,i,m){if(m<0){m++}if(m>1){m--}if(6*m<1){return j+(i-j)*6*m}else{if(2*m<1){return i}else{if(3*m<2){return j+(i-j)*(2/3-m)*6}else{return j}}}}var C={};function F(j){if(j in C){return C[j]}var ag,Z=1;j=String(j);if(j.charAt(0)=="#"){ag=j}else{if(/^rgb/.test(j)){var p=M(j);var ag="#",ah;for(var m=0;m<3;m++){if(p[m].indexOf("%")!=-1){ah=Math.floor(c(p[m])*255)}else{ah=+p[m]}ag+=k[r(ah,0,255)]}Z=+p[3]}else{if(/^hsl/.test(j)){var p=M(j);ag=I(p);Z=p[3]}else{ag=b[j]||j}}}return C[j]={color:ag,alpha:Z}}var o={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var L={};function E(i){if(L[i]){return L[i]}var p=document.createElement("div");var m=p.style;try{m.font=i}catch(j){}return L[i]={style:m.fontStyle||o.style,variant:m.fontVariant||o.variant,weight:m.fontWeight||o.weight,size:m.fontSize||o.size,family:m.fontFamily||o.family}}function u(m,j){var i={};for(var ah in m){i[ah]=m[ah]}var ag=parseFloat(j.currentStyle.fontSize),Z=parseFloat(m.size);if(typeof m.size=="number"){i.size=m.size}else{if(m.size.indexOf("px")!=-1){i.size=Z}else{if(m.size.indexOf("em")!=-1){i.size=ag*Z}else{if(m.size.indexOf("%")!=-1){i.size=(ag/100)*Z}else{if(m.size.indexOf("pt")!=-1){i.size=Z/0.75}else{i.size=ag}}}}}i.size*=0.981;return i}function ac(i){return i.style+" "+i.variant+" "+i.weight+" "+i.size+"px "+i.family}var s={butt:"flat",round:"round"};function S(i){return s[i]||"square"}function D(i){this.m_=B();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=d*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var m="width:"+i.clientWidth+"px;height:"+i.clientHeight+"px;overflow:hidden;position:absolute";var j=i.ownerDocument.createElement("div");j.style.cssText=m;i.appendChild(j);var p=j.cloneNode(false);p.style.backgroundColor="red";p.style.filter="alpha(opacity=0)";i.appendChild(p);this.element_=j;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var q=D.prototype;q.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};q.beginPath=function(){this.currentPath_=[]};q.moveTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"moveTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.lineTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"lineTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.bezierCurveTo=function(m,j,ak,aj,ai,ag){var i=V(this,ai,ag);var ah=V(this,m,j);var Z=V(this,ak,aj);K(this,ah,Z,i)};function K(i,Z,m,j){i.currentPath_.push({type:"bezierCurveTo",cp1x:Z.x,cp1y:Z.y,cp2x:m.x,cp2y:m.y,x:j.x,y:j.y});i.currentX_=j.x;i.currentY_=j.y}q.quadraticCurveTo=function(ai,m,j,i){var ah=V(this,ai,m);var ag=V(this,j,i);var aj={x:this.currentX_+2/3*(ah.x-this.currentX_),y:this.currentY_+2/3*(ah.y-this.currentY_)};var Z={x:aj.x+(ag.x-this.currentX_)/3,y:aj.y+(ag.y-this.currentY_)/3};K(this,aj,Z,ag)};q.arc=function(al,aj,ak,ag,j,m){ak*=d;var ap=m?"at":"wa";var am=al+A(ag)*ak-f;var ao=aj+l(ag)*ak-f;var i=al+A(j)*ak-f;var an=aj+l(j)*ak-f;if(am==i&&!m){am+=0.125}var Z=V(this,al,aj);var ai=V(this,am,ao);var ah=V(this,i,an);this.currentPath_.push({type:ap,x:Z.x,y:Z.y,radius:ak,xStart:ai.x,yStart:ai.y,xEnd:ah.x,yEnd:ah.y})};q.rect=function(m,j,i,p){this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath()};q.strokeRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.stroke();this.currentPath_=Z};q.fillRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.fill();this.currentPath_=Z};q.createLinearGradient=function(j,p,i,m){var Z=new U("gradient");Z.x0_=j;Z.y0_=p;Z.x1_=i;Z.y1_=m;return Z};q.createRadialGradient=function(p,ag,m,j,Z,i){var ah=new U("gradientradial");ah.x0_=p;ah.y0_=ag;ah.r0_=m;ah.x1_=j;ah.y1_=Z;ah.r1_=i;return ah};q.drawImage=function(aq,m){var aj,ah,al,ay,ao,am,at,aA;var ak=aq.runtimeStyle.width;var ap=aq.runtimeStyle.height;aq.runtimeStyle.width="auto";aq.runtimeStyle.height="auto";var ai=aq.width;var aw=aq.height;aq.runtimeStyle.width=ak;aq.runtimeStyle.height=ap;if(arguments.length==3){aj=arguments[1];ah=arguments[2];ao=am=0;at=al=ai;aA=ay=aw}else{if(arguments.length==5){aj=arguments[1];ah=arguments[2];al=arguments[3];ay=arguments[4];ao=am=0;at=ai;aA=aw}else{if(arguments.length==9){ao=arguments[1];am=arguments[2];at=arguments[3];aA=arguments[4];aj=arguments[5];ah=arguments[6];al=arguments[7];ay=arguments[8]}else{throw Error("Invalid number of arguments")}}}var az=V(this,aj,ah);var p=at/2;var j=aA/2;var ax=[];var i=10;var ag=10;ax.push(" <g_vml_:group",' coordsize="',d*i,",",d*ag,'"',' coordorigin="0,0"',' style="width:',i,"px;height:",ag,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var Z=[];Z.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",n(az.x/d),",","Dy=",n(az.y/d),"");var av=az;var au=V(this,aj+al,ah);var ar=V(this,aj,ah+ay);var an=V(this,aj+al,ah+ay);av.x=ab.max(av.x,au.x,ar.x,an.x);av.y=ab.max(av.y,au.y,ar.y,an.y);ax.push("padding:0 ",n(av.x/d),"px ",n(av.y/d),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",Z.join(""),", sizingmethod='clip');")}else{ax.push("top:",n(az.y/d),"px;left:",n(az.x/d),"px;")}ax.push(' ">','<g_vml_:image src="',aq.src,'"',' style="width:',d*al,"px;"," height:",d*ay,'px"',' cropleft="',ao/ai,'"',' croptop="',am/aw,'"',' cropright="',(ai-ao-at)/ai,'"',' cropbottom="',(aw-am-aA)/aw,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",ax.join(""))};q.stroke=function(ao){var Z=10;var ap=10;var ag=5000;var ai={x:null,y:null};var an={x:null,y:null};for(var aj=0;aj<this.currentPath_.length;aj+=ag){var am=[];var ah=false;am.push("<g_vml_:shape",' filled="',!!ao,'"',' style="position:absolute;width:',Z,"px;height:",ap,'px;"',' coordorigin="0,0"',' coordsize="',d*Z,",",d*ap,'"',' stroked="',!ao,'"',' path="');var aq=false;for(var ak=aj;ak<Math.min(aj+ag,this.currentPath_.length);ak++){if(ak%ag==0&&ak>0){am.push(" m ",n(this.currentPath_[ak-1].x),",",n(this.currentPath_[ak-1].y))}var m=this.currentPath_[ak];var al;switch(m.type){case"moveTo":al=m;am.push(" m ",n(m.x),",",n(m.y));break;case"lineTo":am.push(" l ",n(m.x),",",n(m.y));break;case"close":am.push(" x ");m=null;break;case"bezierCurveTo":am.push(" c ",n(m.cp1x),",",n(m.cp1y),",",n(m.cp2x),",",n(m.cp2y),",",n(m.x),",",n(m.y));break;case"at":case"wa":am.push(" ",m.type," ",n(m.x-this.arcScaleX_*m.radius),",",n(m.y-this.arcScaleY_*m.radius)," ",n(m.x+this.arcScaleX_*m.radius),",",n(m.y+this.arcScaleY_*m.radius)," ",n(m.xStart),",",n(m.yStart)," ",n(m.xEnd),",",n(m.yEnd));break}if(m){if(ai.x==null||m.x<ai.x){ai.x=m.x}if(an.x==null||m.x>an.x){an.x=m.x}if(ai.y==null||m.y<ai.y){ai.y=m.y}if(an.y==null||m.y>an.y){an.y=m.y}}}am.push(' ">');if(!ao){w(this,am)}else{G(this,am,ai,an)}am.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",am.join(""))}};function w(m,ag){var j=F(m.strokeStyle);var p=j.color;var Z=j.alpha*m.globalAlpha;var i=m.lineScale_*m.lineWidth;if(i<1){Z*=i}ag.push("<g_vml_:stroke",' opacity="',Z,'"',' joinstyle="',m.lineJoin,'"',' miterlimit="',m.miterLimit,'"',' endcap="',S(m.lineCap),'"',' weight="',i,'px"',' color="',p,'" />')}function G(aq,ai,aK,ar){var aj=aq.fillStyle;var aB=aq.arcScaleX_;var aA=aq.arcScaleY_;var j=ar.x-aK.x;var p=ar.y-aK.y;if(aj instanceof U){var an=0;var aF={x:0,y:0};var ax=0;var am=1;if(aj.type_=="gradient"){var al=aj.x0_/aB;var m=aj.y0_/aA;var ak=aj.x1_/aB;var aM=aj.y1_/aA;var aJ=V(aq,al,m);var aI=V(aq,ak,aM);var ag=aI.x-aJ.x;var Z=aI.y-aJ.y;an=Math.atan2(ag,Z)*180/Math.PI;if(an<0){an+=360}if(an<0.000001){an=0}}else{var aJ=V(aq,aj.x0_,aj.y0_);aF={x:(aJ.x-aK.x)/j,y:(aJ.y-aK.y)/p};j/=aB*d;p/=aA*d;var aD=ab.max(j,p);ax=2*aj.r0_/aD;am=2*aj.r1_/aD-ax}var av=aj.colors_;av.sort(function(aN,i){return aN.offset-i.offset});var ap=av.length;var au=av[0].color;var at=av[ap-1].color;var az=av[0].alpha*aq.globalAlpha;var ay=av[ap-1].alpha*aq.globalAlpha;var aE=[];for(var aH=0;aH<ap;aH++){var ao=av[aH];aE.push(ao.offset*am+ax+" "+ao.color)}ai.push('<g_vml_:fill type="',aj.type_,'"',' method="none" focus="100%"',' color="',au,'"',' color2="',at,'"',' colors="',aE.join(","),'"',' opacity="',ay,'"',' g_o_:opacity2="',az,'"',' angle="',an,'"',' focusposition="',aF.x,",",aF.y,'" />')}else{if(aj instanceof T){if(j&&p){var ah=-aK.x;var aC=-aK.y;ai.push("<g_vml_:fill",' position="',ah/j*aB*aB,",",aC/p*aA*aA,'"',' type="tile"',' src="',aj.src_,'" />')}}else{var aL=F(aq.fillStyle);var aw=aL.color;var aG=aL.alpha*aq.globalAlpha;ai.push('<g_vml_:fill color="',aw,'" opacity="',aG,'" />')}}}q.fill=function(){this.stroke(true)};q.closePath=function(){this.currentPath_.push({type:"close"})};function V(j,Z,p){var i=j.m_;return{x:d*(Z*i[0][0]+p*i[1][0]+i[2][0])-f,y:d*(Z*i[0][1]+p*i[1][1]+i[2][1])-f}}q.save=function(){var i={};v(this,i);this.aStack_.push(i);this.mStack_.push(this.m_);this.m_=J(B(),this.m_)};q.restore=function(){if(this.aStack_.length){v(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function h(i){return isFinite(i[0][0])&&isFinite(i[0][1])&&isFinite(i[1][0])&&isFinite(i[1][1])&&isFinite(i[2][0])&&isFinite(i[2][1])}function aa(j,i,p){if(!h(i)){return}j.m_=i;if(p){var Z=i[0][0]*i[1][1]-i[0][1]*i[1][0];j.lineScale_=N(H(Z))}}q.translate=function(m,j){var i=[[1,0,0],[0,1,0],[m,j,1]];aa(this,J(i,this.m_),false)};q.rotate=function(j){var p=A(j);var m=l(j);var i=[[p,m,0],[-m,p,0],[0,0,1]];aa(this,J(i,this.m_),false)};q.scale=function(m,j){this.arcScaleX_*=m;this.arcScaleY_*=j;var i=[[m,0,0],[0,j,0],[0,0,1]];aa(this,J(i,this.m_),true)};q.transform=function(Z,p,ah,ag,j,i){var m=[[Z,p,0],[ah,ag,0],[j,i,1]];aa(this,J(m,this.m_),true)};q.setTransform=function(ag,Z,ai,ah,p,j){var i=[[ag,Z,0],[ai,ah,0],[p,j,1]];aa(this,i,true)};q.drawText_=function(am,ak,aj,ap,ai){var ao=this.m_,at=1000,j=0,ar=at,ah={x:0,y:0},ag=[];var i=u(E(this.font),this.element_);var p=ac(i);var au=this.element_.currentStyle;var Z=this.textAlign.toLowerCase();switch(Z){case"left":case"center":case"right":break;case"end":Z=au.direction=="ltr"?"right":"left";break;case"start":Z=au.direction=="rtl"?"right":"left";break;default:Z="left"}switch(this.textBaseline){case"hanging":case"top":ah.y=i.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":ah.y=-i.size/2.25;break}switch(Z){case"right":j=at;ar=0.05;break;case"center":j=ar=at/2;break}var aq=V(this,ak+ah.x,aj+ah.y);ag.push('<g_vml_:line from="',-j,' 0" to="',ar,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!ai,'" stroked="',!!ai,'" style="position:absolute;width:1px;height:1px;">');if(ai){w(this,ag)}else{G(this,ag,{x:-j,y:0},{x:ar,y:i.size})}var an=ao[0][0].toFixed(3)+","+ao[1][0].toFixed(3)+","+ao[0][1].toFixed(3)+","+ao[1][1].toFixed(3)+",0,0";var al=n(aq.x/d)+","+n(aq.y/d);ag.push('<g_vml_:skew on="t" matrix="',an,'" ',' offset="',al,'" origin="',j,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',af(am),'" style="v-text-align:',Z,";font:",af(p),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",ag.join(""))};q.fillText=function(m,i,p,j){this.drawText_(m,i,p,j,false)};q.strokeText=function(m,i,p,j){this.drawText_(m,i,p,j,true)};q.measureText=function(m){if(!this.textMeasureEl_){var i='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",i);this.textMeasureEl_=this.element_.lastChild}var j=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(j.createTextNode(m));return{width:this.textMeasureEl_.offsetWidth}};q.clip=function(){};q.arcTo=function(){};q.createPattern=function(j,i){return new T(j,i)};function U(i){this.type_=i;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}U.prototype.addColorStop=function(j,i){i=F(i);this.colors_.push({offset:j,color:i.color,alpha:i.alpha})};function T(j,i){Q(j);switch(i){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=i;break;default:O("SYNTAX_ERR")}this.src_=j.src;this.width_=j.width;this.height_=j.height}function O(i){throw new P(i)}function Q(i){if(!i||i.nodeType!=1||i.tagName!="IMG"){O("TYPE_MISMATCH_ERR")}if(i.readyState!="complete"){O("INVALID_STATE_ERR")}}function P(i){this.code=this[i];this.message=i+": DOM Exception "+this.code}var X=P.prototype=new Error;X.INDEX_SIZE_ERR=1;X.DOMSTRING_SIZE_ERR=2;X.HIERARCHY_REQUEST_ERR=3;X.WRONG_DOCUMENT_ERR=4;X.INVALID_CHARACTER_ERR=5;X.NO_DATA_ALLOWED_ERR=6;X.NO_MODIFICATION_ALLOWED_ERR=7;X.NOT_FOUND_ERR=8;X.NOT_SUPPORTED_ERR=9;X.INUSE_ATTRIBUTE_ERR=10;X.INVALID_STATE_ERR=11;X.SYNTAX_ERR=12;X.INVALID_MODIFICATION_ERR=13;X.NAMESPACE_ERR=14;X.INVALID_ACCESS_ERR=15;X.VALIDATION_ERR=16;X.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=e;CanvasRenderingContext2D=D;CanvasGradient=U;CanvasPattern=T;DOMException=P})()};
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.colorhelpers.js b/public/admin/view/javascript/jquery/flot/jquery.colorhelpers.js new file mode 100644 index 0000000..d3524d7 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.colorhelpers.js @@ -0,0 +1,179 @@ +/* Plugin for jQuery for working with colors. + * + * Version 1.1. + * + * Inspiration from jQuery color animation plugin by John Resig. + * + * Released under the MIT license by Ole Laursen, October 2009. + * + * Examples: + * + * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() + * var c = $.color.extract($("#mydiv"), 'background-color'); + * console.log(c.r, c.g, c.b, c.a); + * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" + * + * Note that .scale() and .add() return the same modified object + * instead of making a new one. + * + * V. 1.1: Fix error handling so e.g. parsing an empty string does + * produce a color rather than just crashing. + */ + +(function($) { + $.color = {}; + + // construct color object with some convenient chainable helpers + $.color.make = function (r, g, b, a) { + var o = {}; + o.r = r || 0; + o.g = g || 0; + o.b = b || 0; + o.a = a != null ? a : 1; + + o.add = function (c, d) { + for (var i = 0; i < c.length; ++i) + o[c.charAt(i)] += d; + return o.normalize(); + }; + + o.scale = function (c, f) { + for (var i = 0; i < c.length; ++i) + o[c.charAt(i)] *= f; + return o.normalize(); + }; + + o.toString = function () { + if (o.a >= 1.0) { + return "rgb("+[o.r, o.g, o.b].join(",")+")"; + } else { + return "rgba("+[o.r, o.g, o.b, o.a].join(",")+")"; + } + }; + + o.normalize = function () { + function clamp(min, value, max) { + return value < min ? min: (value > max ? max: value); + } + + o.r = clamp(0, parseInt(o.r), 255); + o.g = clamp(0, parseInt(o.g), 255); + o.b = clamp(0, parseInt(o.b), 255); + o.a = clamp(0, o.a, 1); + return o; + }; + + o.clone = function () { + return $.color.make(o.r, o.b, o.g, o.a); + }; + + return o.normalize(); + } + + // extract CSS color property from element, going up in the DOM + // if it's "transparent" + $.color.extract = function (elem, css) { + var c; + do { + c = elem.css(css).toLowerCase(); + // keep going until we find an element that has color, or + // we hit the body + if (c != '' && c != 'transparent') + break; + elem = elem.parent(); + } while (!$.nodeName(elem.get(0), "body")); + + // catch Safari's way of signalling transparent + if (c == "rgba(0, 0, 0, 0)") + c = "transparent"; + + return $.color.parse(c); + } + + // parse CSS color string (like "rgb(10, 32, 43)" or "#fff"), + // returns color object, if parsing failed, you get black (0, 0, + // 0) out + $.color.parse = function (str) { + var res, m = $.color.make; + + // Look for rgb(num,num,num) + if (res = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str)) + return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10)); + + // Look for rgba(num,num,num,num) + if (res = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)) + return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4])); + + // Look for rgb(num%,num%,num%) + if (res = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str)) + return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55); + + // Look for rgba(num%,num%,num%,num) + if (res = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)) + return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4])); + + // Look for #a0b1c2 + if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str)) + return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16)); + + // Look for #fff + if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str)) + return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16)); + + // Otherwise, we're most likely dealing with a named color + var name = $.trim(str).toLowerCase(); + if (name == "transparent") + return m(255, 255, 255, 0); + else { + // default to black + res = lookupColors[name] || [0, 0, 0]; + return m(res[0], res[1], res[2]); + } + } + + var lookupColors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + violet:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0] + }; +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.colorhelpers.min.js b/public/admin/view/javascript/jquery/flot/jquery.colorhelpers.min.js new file mode 100644 index 0000000..844cef6 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.colorhelpers.min.js @@ -0,0 +1,21 @@ +/* Plugin for jQuery for working with colors. + * + * Version 1.1. + * + * Inspiration from jQuery color animation plugin by John Resig. + * + * Released under the MIT license by Ole Laursen, October 2009. + * + * Examples: + * + * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() + * var c = $.color.extract($("#mydiv"), 'background-color'); + * console.log(c.r, c.g, c.b, c.a); + * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" + * + * Note that .scale() and .add() return the same modified object + * instead of making a new one. + * + * V. 1.1: Fix error handling so e.g. parsing an empty string does + * produce a color rather than just crashing. + */(function(e){e.color={},e.color.make=function(t,n,r,i){var s={};return s.r=t||0,s.g=n||0,s.b=r||0,s.a=i!=null?i:1,s.add=function(e,t){for(var n=0;n<e.length;++n)s[e.charAt(n)]+=t;return s.normalize()},s.scale=function(e,t){for(var n=0;n<e.length;++n)s[e.charAt(n)]*=t;return s.normalize()},s.toString=function(){return s.a>=1?"rgb("+[s.r,s.g,s.b].join(",")+")":"rgba("+[s.r,s.g,s.b,s.a].join(",")+")"},s.normalize=function(){function e(e,t,n){return t<e?e:t>n?n:t}return s.r=e(0,parseInt(s.r),255),s.g=e(0,parseInt(s.g),255),s.b=e(0,parseInt(s.b),255),s.a=e(0,s.a,1),s},s.clone=function(){return e.color.make(s.r,s.b,s.g,s.a)},s.normalize()},e.color.extract=function(t,n){var r;do{r=t.css(n).toLowerCase();if(r!=""&&r!="transparent")break;t=t.parent()}while(!e.nodeName(t.get(0),"body"));return r=="rgba(0, 0, 0, 0)"&&(r="transparent"),e.color.parse(r)},e.color.parse=function(n){var r,i=e.color.make;if(r=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return i(parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10));if(r=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(n))return i(parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10),parseFloat(r[4]));if(r=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return i(parseFloat(r[1])*2.55,parseFloat(r[2])*2.55,parseFloat(r[3])*2.55);if(r=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(n))return i(parseFloat(r[1])*2.55,parseFloat(r[2])*2.55,parseFloat(r[3])*2.55,parseFloat(r[4]));if(r=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return i(parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16));if(r=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return i(parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16));var s=e.trim(n).toLowerCase();return s=="transparent"?i(255,255,255,0):(r=t[s]||[0,0,0],i(r[0],r[1],r[2]))};var t={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.canvas.js b/public/admin/view/javascript/jquery/flot/jquery.flot.canvas.js new file mode 100644 index 0000000..d94b961 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.canvas.js @@ -0,0 +1,345 @@ +/* Flot plugin for drawing all elements of a plot on the canvas. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +Flot normally produces certain elements, like axis labels and the legend, using +HTML elements. This permits greater interactivity and customization, and often +looks better, due to cross-browser canvas text inconsistencies and limitations. + +It can also be desirable to render the plot entirely in canvas, particularly +if the goal is to save it as an image, or if Flot is being used in a context +where the HTML DOM does not exist, as is the case within Node.js. This plugin +switches out Flot's standard drawing operations for canvas-only replacements. + +Currently the plugin supports only axis labels, but it will eventually allow +every element of the plot to be rendered directly to canvas. + +The plugin supports these options: + +{ + canvas: boolean +} + +The "canvas" option controls whether full canvas drawing is enabled, making it +possible to toggle on and off. This is useful when a plot uses HTML text in the +browser, but needs to redraw with canvas text when exporting as an image. + +*/ + +(function($) { + + var options = { + canvas: true + }; + + var render, getTextInfo, addText; + + // Cache the prototype hasOwnProperty for faster access + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + function init(plot, classes) { + + var Canvas = classes.Canvas; + + // We only want to replace the functions once; the second time around + // we would just get our new function back. This whole replacing of + // prototype functions is a disaster, and needs to be changed ASAP. + + if (render == null) { + getTextInfo = Canvas.prototype.getTextInfo, + addText = Canvas.prototype.addText, + render = Canvas.prototype.render; + } + + // Finishes rendering the canvas, including overlaid text + + Canvas.prototype.render = function() { + + if (!plot.getOptions().canvas) { + return render.call(this); + } + + var context = this.context, + cache = this._textCache; + + // For each text layer, render elements marked as active + + context.save(); + context.textBaseline = "middle"; + + for (var layerKey in cache) { + if (hasOwnProperty.call(cache, layerKey)) { + var layerCache = cache[layerKey]; + for (var styleKey in layerCache) { + if (hasOwnProperty.call(layerCache, styleKey)) { + var styleCache = layerCache[styleKey], + updateStyles = true; + for (var key in styleCache) { + if (hasOwnProperty.call(styleCache, key)) { + + var info = styleCache[key], + positions = info.positions, + lines = info.lines; + + // Since every element at this level of the cache have the + // same font and fill styles, we can just change them once + // using the values from the first element. + + if (updateStyles) { + context.fillStyle = info.font.color; + context.font = info.font.definition; + updateStyles = false; + } + + for (var i = 0, position; position = positions[i]; i++) { + if (position.active) { + for (var j = 0, line; line = position.lines[j]; j++) { + context.fillText(lines[j].text, line[0], line[1]); + } + } else { + positions.splice(i--, 1); + } + } + + if (positions.length == 0) { + delete styleCache[key]; + } + } + } + } + } + } + } + + context.restore(); + }; + + // Creates (if necessary) and returns a text info object. + // + // When the canvas option is set, the object looks like this: + // + // { + // width: Width of the text's bounding box. + // height: Height of the text's bounding box. + // positions: Array of positions at which this text is drawn. + // lines: [{ + // height: Height of this line. + // widths: Width of this line. + // text: Text on this line. + // }], + // font: { + // definition: Canvas font property string. + // color: Color of the text. + // }, + // } + // + // The positions array contains objects that look like this: + // + // { + // active: Flag indicating whether the text should be visible. + // lines: Array of [x, y] coordinates at which to draw the line. + // x: X coordinate at which to draw the text. + // y: Y coordinate at which to draw the text. + // } + + Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) { + + if (!plot.getOptions().canvas) { + return getTextInfo.call(this, layer, text, font, angle, width); + } + + var textStyle, layerCache, styleCache, info; + + // Cast the value to a string, in case we were given a number + + text = "" + text; + + // If the font is a font-spec object, generate a CSS definition + + if (typeof font === "object") { + textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px " + font.family; + } else { + textStyle = font; + } + + // Retrieve (or create) the cache for the text's layer and styles + + layerCache = this._textCache[layer]; + + if (layerCache == null) { + layerCache = this._textCache[layer] = {}; + } + + styleCache = layerCache[textStyle]; + + if (styleCache == null) { + styleCache = layerCache[textStyle] = {}; + } + + info = styleCache[text]; + + if (info == null) { + + var context = this.context; + + // If the font was provided as CSS, create a div with those + // classes and examine it to generate a canvas font spec. + + if (typeof font !== "object") { + + var element = $("<div> </div>") + .css("position", "absolute") + .addClass(typeof font === "string" ? font : null) + .appendTo(this.getTextLayer(layer)); + + font = { + lineHeight: element.height(), + style: element.css("font-style"), + variant: element.css("font-variant"), + weight: element.css("font-weight"), + family: element.css("font-family"), + color: element.css("color") + }; + + // Setting line-height to 1, without units, sets it equal + // to the font-size, even if the font-size is abstract, + // like 'smaller'. This enables us to read the real size + // via the element's height, working around browsers that + // return the literal 'smaller' value. + + font.size = element.css("line-height", 1).height(); + + element.remove(); + } + + textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px " + font.family; + + // Create a new info object, initializing the dimensions to + // zero so we can count them up line-by-line. + + info = styleCache[text] = { + width: 0, + height: 0, + positions: [], + lines: [], + font: { + definition: textStyle, + color: font.color + } + }; + + context.save(); + context.font = textStyle; + + // Canvas can't handle multi-line strings; break on various + // newlines, including HTML brs, to build a list of lines. + // Note that we could split directly on regexps, but IE < 9 is + // broken; revisit when we drop IE 7/8 support. + + var lines = (text + "").replace(/<br ?\/?>|\r\n|\r/g, "\n").split("\n"); + + for (var i = 0; i < lines.length; ++i) { + + var lineText = lines[i], + measured = context.measureText(lineText); + + info.width = Math.max(measured.width, info.width); + info.height += font.lineHeight; + + info.lines.push({ + text: lineText, + width: measured.width, + height: font.lineHeight + }); + } + + context.restore(); + } + + return info; + }; + + // Adds a text string to the canvas text overlay. + + Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) { + + if (!plot.getOptions().canvas) { + return addText.call(this, layer, x, y, text, font, angle, width, halign, valign); + } + + var info = this.getTextInfo(layer, text, font, angle, width), + positions = info.positions, + lines = info.lines; + + // Text is drawn with baseline 'middle', which we need to account + // for by adding half a line's height to the y position. + + y += info.height / lines.length / 2; + + // Tweak the initial y-position to match vertical alignment + + if (valign == "middle") { + y = Math.round(y - info.height / 2); + } else if (valign == "bottom") { + y = Math.round(y - info.height); + } else { + y = Math.round(y); + } + + // FIXME: LEGACY BROWSER FIX + // AFFECTS: Opera < 12.00 + + // Offset the y coordinate, since Opera is off pretty + // consistently compared to the other browsers. + + if (!!(window.opera && window.opera.version().split(".")[0] < 12)) { + y -= 2; + } + + // Determine whether this text already exists at this position. + // If so, mark it for inclusion in the next render pass. + + for (var i = 0, position; position = positions[i]; i++) { + if (position.x == x && position.y == y) { + position.active = true; + return; + } + } + + // If the text doesn't exist at this position, create a new entry + + position = { + active: true, + lines: [], + x: x, + y: y + }; + + positions.push(position); + + // Fill in the x & y positions of each line, adjusting them + // individually for horizontal alignment. + + for (var i = 0, line; line = lines[i]; i++) { + if (halign == "center") { + position.lines.push([Math.round(x - line.width / 2), y]); + } else if (halign == "right") { + position.lines.push([Math.round(x - line.width), y]); + } else { + position.lines.push([Math.round(x), y]); + } + y += line.height; + } + }; + } + + $.plot.plugins.push({ + init: init, + options: options, + name: "canvas", + version: "1.0" + }); + +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.canvas.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.canvas.min.js new file mode 100644 index 0000000..ac70b53 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.canvas.min.js @@ -0,0 +1,28 @@ +/* Flot plugin for drawing all elements of a plot on the canvas. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +Flot normally produces certain elements, like axis labels and the legend, using +HTML elements. This permits greater interactivity and customization, and often +looks better, due to cross-browser canvas text inconsistencies and limitations. + +It can also be desirable to render the plot entirely in canvas, particularly +if the goal is to save it as an image, or if Flot is being used in a context +where the HTML DOM does not exist, as is the case within Node.js. This plugin +switches out Flot's standard drawing operations for canvas-only replacements. + +Currently the plugin supports only axis labels, but it will eventually allow +every element of the plot to be rendered directly to canvas. + +The plugin supports these options: + +{ + canvas: boolean +} + +The "canvas" option controls whether full canvas drawing is enabled, making it +possible to toggle on and off. This is useful when a plot uses HTML text in the +browser, but needs to redraw with canvas text when exporting as an image. + +*/(function(e){function o(t,o){var u=o.Canvas;n==null&&(r=u.prototype.getTextInfo,i=u.prototype.addText,n=u.prototype.render),u.prototype.render=function(){if(!t.getOptions().canvas)return n.call(this);var e=this.context,r=this._textCache;e.save(),e.textBaseline="middle";for(var i in r)if(s.call(r,i)){var o=r[i];for(var u in o)if(s.call(o,u)){var a=o[u],f=!0;for(var l in a)if(s.call(a,l)){var c=a[l],h=c.positions,p=c.lines;f&&(e.fillStyle=c.font.color,e.font=c.font.definition,f=!1);for(var d=0,v;v=h[d];d++)if(v.active)for(var m=0,g;g=v.lines[m];m++)e.fillText(p[m].text,g[0],g[1]);else h.splice(d--,1);h.length==0&&delete a[l]}}}e.restore()},u.prototype.getTextInfo=function(n,i,s,o,u){if(!t.getOptions().canvas)return r.call(this,n,i,s,o,u);var a,f,l,c;i=""+i,typeof s=="object"?a=s.style+" "+s.variant+" "+s.weight+" "+s.size+"px "+s.family:a=s,f=this._textCache[n],f==null&&(f=this._textCache[n]={}),l=f[a],l==null&&(l=f[a]={}),c=l[i];if(c==null){var h=this.context;if(typeof s!="object"){var p=e("<div> </div>").css("position","absolute").addClass(typeof s=="string"?s:null).appendTo(this.getTextLayer(n));s={lineHeight:p.height(),style:p.css("font-style"),variant:p.css("font-variant"),weight:p.css("font-weight"),family:p.css("font-family"),color:p.css("color")},s.size=p.css("line-height",1).height(),p.remove()}a=s.style+" "+s.variant+" "+s.weight+" "+s.size+"px "+s.family,c=l[i]={width:0,height:0,positions:[],lines:[],font:{definition:a,color:s.color}},h.save(),h.font=a;var d=(i+"").replace(/<br ?\/?>|\r\n|\r/g,"\n").split("\n");for(var v=0;v<d.length;++v){var m=d[v],g=h.measureText(m);c.width=Math.max(g.width,c.width),c.height+=s.lineHeight,c.lines.push({text:m,width:g.width,height:s.lineHeight})}h.restore()}return c},u.prototype.addText=function(e,n,r,s,o,u,a,f,l){if(!t.getOptions().canvas)return i.call(this,e,n,r,s,o,u,a,f,l);var c=this.getTextInfo(e,s,o,u,a),h=c.positions,p=c.lines;r+=c.height/p.length/2,l=="middle"?r=Math.round(r-c.height/2):l=="bottom"?r=Math.round(r-c.height):r=Math.round(r),!(window.opera&&window.opera.version().split(".")[0]<12)||(r-=2);for(var d=0,v;v=h[d];d++)if(v.x==n&&v.y==r){v.active=!0;return}v={active:!0,lines:[],x:n,y:r},h.push(v);for(var d=0,m;m=p[d];d++)f=="center"?v.lines.push([Math.round(n-m.width/2),r]):f=="right"?v.lines.push([Math.round(n-m.width),r]):v.lines.push([Math.round(n),r]),r+=m.height}}var t={canvas:!0},n,r,i,s=Object.prototype.hasOwnProperty;e.plot.plugins.push({init:o,options:t,name:"canvas",version:"1.0"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.categories.js b/public/admin/view/javascript/jquery/flot/jquery.flot.categories.js new file mode 100644 index 0000000..6e6e8ba --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.categories.js @@ -0,0 +1,190 @@ +/* Flot plugin for plotting textual data or categories. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +Consider a dataset like [["February", 34], ["March", 20], ...]. This plugin +allows you to plot such a dataset directly. + +To enable it, you must specify mode: "categories" on the axis with the textual +labels, e.g. + + $.plot("#placeholder", data, { xaxis: { mode: "categories" } }); + +By default, the labels are ordered as they are met in the data series. If you +need a different ordering, you can specify "categories" on the axis options +and list the categories there: + + xaxis: { + mode: "categories", + categories: ["February", "March", "April"] + } + +If you need to customize the distances between the categories, you can specify +"categories" as an object mapping labels to values + + xaxis: { + mode: "categories", + categories: { "February": 1, "March": 3, "April": 4 } + } + +If you don't specify all categories, the remaining categories will be numbered +from the max value plus 1 (with a spacing of 1 between each). + +Internally, the plugin works by transforming the input data through an auto- +generated mapping where the first category becomes 0, the second 1, etc. +Hence, a point like ["February", 34] becomes [0, 34] internally in Flot (this +is visible in hover and click events that return numbers rather than the +category labels). The plugin also overrides the tick generator to spit out the +categories as ticks instead of the values. + +If you need to map a value back to its label, the mapping is always accessible +as "categories" on the axis object, e.g. plot.getAxes().xaxis.categories. + +*/ + +(function ($) { + var options = { + xaxis: { + categories: null + }, + yaxis: { + categories: null + } + }; + + function processRawData(plot, series, data, datapoints) { + // if categories are enabled, we need to disable + // auto-transformation to numbers so the strings are intact + // for later processing + + var xCategories = series.xaxis.options.mode == "categories", + yCategories = series.yaxis.options.mode == "categories"; + + if (!(xCategories || yCategories)) + return; + + var format = datapoints.format; + + if (!format) { + // FIXME: auto-detection should really not be defined here + var s = series; + format = []; + format.push({ x: true, number: true, required: true }); + format.push({ y: true, number: true, required: true }); + + if (s.bars.show || (s.lines.show && s.lines.fill)) { + var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero)); + format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale }); + if (s.bars.horizontal) { + delete format[format.length - 1].y; + format[format.length - 1].x = true; + } + } + + datapoints.format = format; + } + + for (var m = 0; m < format.length; ++m) { + if (format[m].x && xCategories) + format[m].number = false; + + if (format[m].y && yCategories) + format[m].number = false; + } + } + + function getNextIndex(categories) { + var index = -1; + + for (var v in categories) + if (categories[v] > index) + index = categories[v]; + + return index + 1; + } + + function categoriesTickGenerator(axis) { + var res = []; + for (var label in axis.categories) { + var v = axis.categories[label]; + if (v >= axis.min && v <= axis.max) + res.push([v, label]); + } + + res.sort(function (a, b) { return a[0] - b[0]; }); + + return res; + } + + function setupCategoriesForAxis(series, axis, datapoints) { + if (series[axis].options.mode != "categories") + return; + + if (!series[axis].categories) { + // parse options + var c = {}, o = series[axis].options.categories || {}; + if ($.isArray(o)) { + for (var i = 0; i < o.length; ++i) + c[o[i]] = i; + } + else { + for (var v in o) + c[v] = o[v]; + } + + series[axis].categories = c; + } + + // fix ticks + if (!series[axis].options.ticks) + series[axis].options.ticks = categoriesTickGenerator; + + transformPointsOnAxis(datapoints, axis, series[axis].categories); + } + + function transformPointsOnAxis(datapoints, axis, categories) { + // go through the points, transforming them + var points = datapoints.points, + ps = datapoints.pointsize, + format = datapoints.format, + formatColumn = axis.charAt(0), + index = getNextIndex(categories); + + for (var i = 0; i < points.length; i += ps) { + if (points[i] == null) + continue; + + for (var m = 0; m < ps; ++m) { + var val = points[i + m]; + + if (val == null || !format[m][formatColumn]) + continue; + + if (!(val in categories)) { + categories[val] = index; + ++index; + } + + points[i + m] = categories[val]; + } + } + } + + function processDatapoints(plot, series, datapoints) { + setupCategoriesForAxis(series, "xaxis", datapoints); + setupCategoriesForAxis(series, "yaxis", datapoints); + } + + function init(plot) { + plot.hooks.processRawData.push(processRawData); + plot.hooks.processDatapoints.push(processDatapoints); + } + + $.plot.plugins.push({ + init: init, + options: options, + name: 'categories', + version: '1.0' + }); +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.categories.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.categories.min.js new file mode 100644 index 0000000..ca86594 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.categories.min.js @@ -0,0 +1,44 @@ +/* Flot plugin for plotting textual data or categories. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +Consider a dataset like [["February", 34], ["March", 20], ...]. This plugin +allows you to plot such a dataset directly. + +To enable it, you must specify mode: "categories" on the axis with the textual +labels, e.g. + + $.plot("#placeholder", data, { xaxis: { mode: "categories" } }); + +By default, the labels are ordered as they are met in the data series. If you +need a different ordering, you can specify "categories" on the axis options +and list the categories there: + + xaxis: { + mode: "categories", + categories: ["February", "March", "April"] + } + +If you need to customize the distances between the categories, you can specify +"categories" as an object mapping labels to values + + xaxis: { + mode: "categories", + categories: { "February": 1, "March": 3, "April": 4 } + } + +If you don't specify all categories, the remaining categories will be numbered +from the max value plus 1 (with a spacing of 1 between each). + +Internally, the plugin works by transforming the input data through an auto- +generated mapping where the first category becomes 0, the second 1, etc. +Hence, a point like ["February", 34] becomes [0, 34] internally in Flot (this +is visible in hover and click events that return numbers rather than the +category labels). The plugin also overrides the tick generator to spit out the +categories as ticks instead of the values. + +If you need to map a value back to its label, the mapping is always accessible +as "categories" on the axis object, e.g. plot.getAxes().xaxis.categories. + +*/(function(e){function n(e,t,n,r){var i=t.xaxis.options.mode=="categories",s=t.yaxis.options.mode=="categories";if(!i&&!s)return;var o=r.format;if(!o){var u=t;o=[],o.push({x:!0,number:!0,required:!0}),o.push({y:!0,number:!0,required:!0});if(u.bars.show||u.lines.show&&u.lines.fill){var a=!!(u.bars.show&&u.bars.zero||u.lines.show&&u.lines.zero);o.push({y:!0,number:!0,required:!1,defaultValue:0,autoscale:a}),u.bars.horizontal&&(delete o[o.length-1].y,o[o.length-1].x=!0)}r.format=o}for(var f=0;f<o.length;++f)o[f].x&&i&&(o[f].number=!1),o[f].y&&s&&(o[f].number=!1)}function r(e){var t=-1;for(var n in e)e[n]>t&&(t=e[n]);return t+1}function i(e){var t=[];for(var n in e.categories){var r=e.categories[n];r>=e.min&&r<=e.max&&t.push([r,n])}return t.sort(function(e,t){return e[0]-t[0]}),t}function s(t,n,r){if(t[n].options.mode!="categories")return;if(!t[n].categories){var s={},u=t[n].options.categories||{};if(e.isArray(u))for(var a=0;a<u.length;++a)s[u[a]]=a;else for(var f in u)s[f]=u[f];t[n].categories=s}t[n].options.ticks||(t[n].options.ticks=i),o(r,n,t[n].categories)}function o(e,t,n){var i=e.points,s=e.pointsize,o=e.format,u=t.charAt(0),a=r(n);for(var f=0;f<i.length;f+=s){if(i[f]==null)continue;for(var l=0;l<s;++l){var c=i[f+l];if(c==null||!o[l][u])continue;c in n||(n[c]=a,++a),i[f+l]=n[c]}}}function u(e,t,n){s(t,"xaxis",n),s(t,"yaxis",n)}function a(e){e.hooks.processRawData.push(n),e.hooks.processDatapoints.push(u)}var t={xaxis:{categories:null},yaxis:{categories:null}};e.plot.plugins.push({init:a,options:t,name:"categories",version:"1.0"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.crosshair.js b/public/admin/view/javascript/jquery/flot/jquery.flot.crosshair.js new file mode 100644 index 0000000..c5df9d9 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.crosshair.js @@ -0,0 +1,176 @@ +/* Flot plugin for showing crosshairs when the mouse hovers over the plot. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The plugin supports these options: + + crosshair: { + mode: null or "x" or "y" or "xy" + color: color + lineWidth: number + } + +Set the mode to one of "x", "y" or "xy". The "x" mode enables a vertical +crosshair that lets you trace the values on the x axis, "y" enables a +horizontal crosshair and "xy" enables them both. "color" is the color of the +crosshair (default is "rgba(170, 0, 0, 0.80)"), "lineWidth" is the width of +the drawn lines (default is 1). + +The plugin also adds four public methods: + + - setCrosshair( pos ) + + Set the position of the crosshair. Note that this is cleared if the user + moves the mouse. "pos" is in coordinates of the plot and should be on the + form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple + axes), which is coincidentally the same format as what you get from a + "plothover" event. If "pos" is null, the crosshair is cleared. + + - clearCrosshair() + + Clear the crosshair. + + - lockCrosshair(pos) + + Cause the crosshair to lock to the current location, no longer updating if + the user moves the mouse. Optionally supply a position (passed on to + setCrosshair()) to move it to. + + Example usage: + + var myFlot = $.plot( $("#graph"), ..., { crosshair: { mode: "x" } } }; + $("#graph").bind( "plothover", function ( evt, position, item ) { + if ( item ) { + // Lock the crosshair to the data point being hovered + myFlot.lockCrosshair({ + x: item.datapoint[ 0 ], + y: item.datapoint[ 1 ] + }); + } else { + // Return normal crosshair operation + myFlot.unlockCrosshair(); + } + }); + + - unlockCrosshair() + + Free the crosshair to move again after locking it. +*/ + +(function ($) { + var options = { + crosshair: { + mode: null, // one of null, "x", "y" or "xy", + color: "rgba(170, 0, 0, 0.80)", + lineWidth: 1 + } + }; + + function init(plot) { + // position of crosshair in pixels + var crosshair = { x: -1, y: -1, locked: false }; + + plot.setCrosshair = function setCrosshair(pos) { + if (!pos) + crosshair.x = -1; + else { + var o = plot.p2c(pos); + crosshair.x = Math.max(0, Math.min(o.left, plot.width())); + crosshair.y = Math.max(0, Math.min(o.top, plot.height())); + } + + plot.triggerRedrawOverlay(); + }; + + plot.clearCrosshair = plot.setCrosshair; // passes null for pos + + plot.lockCrosshair = function lockCrosshair(pos) { + if (pos) + plot.setCrosshair(pos); + crosshair.locked = true; + }; + + plot.unlockCrosshair = function unlockCrosshair() { + crosshair.locked = false; + }; + + function onMouseOut(e) { + if (crosshair.locked) + return; + + if (crosshair.x != -1) { + crosshair.x = -1; + plot.triggerRedrawOverlay(); + } + } + + function onMouseMove(e) { + if (crosshair.locked) + return; + + if (plot.getSelection && plot.getSelection()) { + crosshair.x = -1; // hide the crosshair while selecting + return; + } + + var offset = plot.offset(); + crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width())); + crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height())); + plot.triggerRedrawOverlay(); + } + + plot.hooks.bindEvents.push(function (plot, eventHolder) { + if (!plot.getOptions().crosshair.mode) + return; + + eventHolder.mouseout(onMouseOut); + eventHolder.mousemove(onMouseMove); + }); + + plot.hooks.drawOverlay.push(function (plot, ctx) { + var c = plot.getOptions().crosshair; + if (!c.mode) + return; + + var plotOffset = plot.getPlotOffset(); + + ctx.save(); + ctx.translate(plotOffset.left, plotOffset.top); + + if (crosshair.x != -1) { + var adj = plot.getOptions().crosshair.lineWidth % 2 === 0 ? 0 : 0.5; + + ctx.strokeStyle = c.color; + ctx.lineWidth = c.lineWidth; + ctx.lineJoin = "round"; + + ctx.beginPath(); + if (c.mode.indexOf("x") != -1) { + var drawX = Math.round(crosshair.x) + adj; + ctx.moveTo(drawX, 0); + ctx.lineTo(drawX, plot.height()); + } + if (c.mode.indexOf("y") != -1) { + var drawY = Math.round(crosshair.y) + adj; + ctx.moveTo(0, drawY); + ctx.lineTo(plot.width(), drawY); + } + ctx.stroke(); + } + ctx.restore(); + }); + + plot.hooks.shutdown.push(function (plot, eventHolder) { + eventHolder.unbind("mouseout", onMouseOut); + eventHolder.unbind("mousemove", onMouseMove); + }); + } + + $.plot.plugins.push({ + init: init, + options: options, + name: 'crosshair', + version: '1.0' + }); +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.crosshair.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.crosshair.min.js new file mode 100644 index 0000000..65bb990 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.crosshair.min.js @@ -0,0 +1,59 @@ +/* Flot plugin for showing crosshairs when the mouse hovers over the plot. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The plugin supports these options: + + crosshair: { + mode: null or "x" or "y" or "xy" + color: color + lineWidth: number + } + +Set the mode to one of "x", "y" or "xy". The "x" mode enables a vertical +crosshair that lets you trace the values on the x axis, "y" enables a +horizontal crosshair and "xy" enables them both. "color" is the color of the +crosshair (default is "rgba(170, 0, 0, 0.80)"), "lineWidth" is the width of +the drawn lines (default is 1). + +The plugin also adds four public methods: + + - setCrosshair( pos ) + + Set the position of the crosshair. Note that this is cleared if the user + moves the mouse. "pos" is in coordinates of the plot and should be on the + form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple + axes), which is coincidentally the same format as what you get from a + "plothover" event. If "pos" is null, the crosshair is cleared. + + - clearCrosshair() + + Clear the crosshair. + + - lockCrosshair(pos) + + Cause the crosshair to lock to the current location, no longer updating if + the user moves the mouse. Optionally supply a position (passed on to + setCrosshair()) to move it to. + + Example usage: + + var myFlot = $.plot( $("#graph"), ..., { crosshair: { mode: "x" } } }; + $("#graph").bind( "plothover", function ( evt, position, item ) { + if ( item ) { + // Lock the crosshair to the data point being hovered + myFlot.lockCrosshair({ + x: item.datapoint[ 0 ], + y: item.datapoint[ 1 ] + }); + } else { + // Return normal crosshair operation + myFlot.unlockCrosshair(); + } + }); + + - unlockCrosshair() + + Free the crosshair to move again after locking it. +*/(function(e){function n(e){function n(n){if(t.locked)return;t.x!=-1&&(t.x=-1,e.triggerRedrawOverlay())}function r(n){if(t.locked)return;if(e.getSelection&&e.getSelection()){t.x=-1;return}var r=e.offset();t.x=Math.max(0,Math.min(n.pageX-r.left,e.width())),t.y=Math.max(0,Math.min(n.pageY-r.top,e.height())),e.triggerRedrawOverlay()}var t={x:-1,y:-1,locked:!1};e.setCrosshair=function(r){if(!r)t.x=-1;else{var i=e.p2c(r);t.x=Math.max(0,Math.min(i.left,e.width())),t.y=Math.max(0,Math.min(i.top,e.height()))}e.triggerRedrawOverlay()},e.clearCrosshair=e.setCrosshair,e.lockCrosshair=function(r){r&&e.setCrosshair(r),t.locked=!0},e.unlockCrosshair=function(){t.locked=!1},e.hooks.bindEvents.push(function(e,t){if(!e.getOptions().crosshair.mode)return;t.mouseout(n),t.mousemove(r)}),e.hooks.drawOverlay.push(function(e,n){var r=e.getOptions().crosshair;if(!r.mode)return;var i=e.getPlotOffset();n.save(),n.translate(i.left,i.top);if(t.x!=-1){var s=e.getOptions().crosshair.lineWidth%2===0?0:.5;n.strokeStyle=r.color,n.lineWidth=r.lineWidth,n.lineJoin="round",n.beginPath();if(r.mode.indexOf("x")!=-1){var o=Math.round(t.x)+s;n.moveTo(o,0),n.lineTo(o,e.height())}if(r.mode.indexOf("y")!=-1){var u=Math.round(t.y)+s;n.moveTo(0,u),n.lineTo(e.width(),u)}n.stroke()}n.restore()}),e.hooks.shutdown.push(function(e,t){t.unbind("mouseout",n),t.unbind("mousemove",r)})}var t={crosshair:{mode:null,color:"rgba(170, 0, 0, 0.80)",lineWidth:1}};e.plot.plugins.push({init:n,options:t,name:"crosshair",version:"1.0"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.errorbars.js b/public/admin/view/javascript/jquery/flot/jquery.flot.errorbars.js new file mode 100644 index 0000000..7298436 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.errorbars.js @@ -0,0 +1,353 @@ +/* Flot plugin for plotting error bars. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +Error bars are used to show standard deviation and other statistical +properties in a plot. + +* Created by Rui Pereira - rui (dot) pereira (at) gmail (dot) com + +This plugin allows you to plot error-bars over points. Set "errorbars" inside +the points series to the axis name over which there will be error values in +your data array (*even* if you do not intend to plot them later, by setting +"show: null" on xerr/yerr). + +The plugin supports these options: + + series: { + points: { + errorbars: "x" or "y" or "xy", + xerr: { + show: null/false or true, + asymmetric: null/false or true, + upperCap: null or "-" or function, + lowerCap: null or "-" or function, + color: null or color, + radius: null or number + }, + yerr: { same options as xerr } + } + } + +Each data point array is expected to be of the type: + + "x" [ x, y, xerr ] + "y" [ x, y, yerr ] + "xy" [ x, y, xerr, yerr ] + +Where xerr becomes xerr_lower,xerr_upper for the asymmetric error case, and +equivalently for yerr. Eg., a datapoint for the "xy" case with symmetric +error-bars on X and asymmetric on Y would be: + + [ x, y, xerr, yerr_lower, yerr_upper ] + +By default no end caps are drawn. Setting upperCap and/or lowerCap to "-" will +draw a small cap perpendicular to the error bar. They can also be set to a +user-defined drawing function, with (ctx, x, y, radius) as parameters, as eg. + + function drawSemiCircle( ctx, x, y, radius ) { + ctx.beginPath(); + ctx.arc( x, y, radius, 0, Math.PI, false ); + ctx.moveTo( x - radius, y ); + ctx.lineTo( x + radius, y ); + ctx.stroke(); + } + +Color and radius both default to the same ones of the points series if not +set. The independent radius parameter on xerr/yerr is useful for the case when +we may want to add error-bars to a line, without showing the interconnecting +points (with radius: 0), and still showing end caps on the error-bars. +shadowSize and lineWidth are derived as well from the points series. + +*/ + +(function ($) { + var options = { + series: { + points: { + errorbars: null, //should be 'x', 'y' or 'xy' + xerr: { err: 'x', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null}, + yerr: { err: 'y', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null} + } + } + }; + + function processRawData(plot, series, data, datapoints){ + if (!series.points.errorbars) + return; + + // x,y values + var format = [ + { x: true, number: true, required: true }, + { y: true, number: true, required: true } + ]; + + var errors = series.points.errorbars; + // error bars - first X then Y + if (errors == 'x' || errors == 'xy') { + // lower / upper error + if (series.points.xerr.asymmetric) { + format.push({ x: true, number: true, required: true }); + format.push({ x: true, number: true, required: true }); + } else + format.push({ x: true, number: true, required: true }); + } + if (errors == 'y' || errors == 'xy') { + // lower / upper error + if (series.points.yerr.asymmetric) { + format.push({ y: true, number: true, required: true }); + format.push({ y: true, number: true, required: true }); + } else + format.push({ y: true, number: true, required: true }); + } + datapoints.format = format; + } + + function parseErrors(series, i){ + + var points = series.datapoints.points; + + // read errors from points array + var exl = null, + exu = null, + eyl = null, + eyu = null; + var xerr = series.points.xerr, + yerr = series.points.yerr; + + var eb = series.points.errorbars; + // error bars - first X + if (eb == 'x' || eb == 'xy') { + if (xerr.asymmetric) { + exl = points[i + 2]; + exu = points[i + 3]; + if (eb == 'xy') + if (yerr.asymmetric){ + eyl = points[i + 4]; + eyu = points[i + 5]; + } else eyl = points[i + 4]; + } else { + exl = points[i + 2]; + if (eb == 'xy') + if (yerr.asymmetric) { + eyl = points[i + 3]; + eyu = points[i + 4]; + } else eyl = points[i + 3]; + } + // only Y + } else if (eb == 'y') + if (yerr.asymmetric) { + eyl = points[i + 2]; + eyu = points[i + 3]; + } else eyl = points[i + 2]; + + // symmetric errors? + if (exu == null) exu = exl; + if (eyu == null) eyu = eyl; + + var errRanges = [exl, exu, eyl, eyu]; + // nullify if not showing + if (!xerr.show){ + errRanges[0] = null; + errRanges[1] = null; + } + if (!yerr.show){ + errRanges[2] = null; + errRanges[3] = null; + } + return errRanges; + } + + function drawSeriesErrors(plot, ctx, s){ + + var points = s.datapoints.points, + ps = s.datapoints.pointsize, + ax = [s.xaxis, s.yaxis], + radius = s.points.radius, + err = [s.points.xerr, s.points.yerr]; + + //sanity check, in case some inverted axis hack is applied to flot + var invertX = false; + if (ax[0].p2c(ax[0].max) < ax[0].p2c(ax[0].min)) { + invertX = true; + var tmp = err[0].lowerCap; + err[0].lowerCap = err[0].upperCap; + err[0].upperCap = tmp; + } + + var invertY = false; + if (ax[1].p2c(ax[1].min) < ax[1].p2c(ax[1].max)) { + invertY = true; + var tmp = err[1].lowerCap; + err[1].lowerCap = err[1].upperCap; + err[1].upperCap = tmp; + } + + for (var i = 0; i < s.datapoints.points.length; i += ps) { + + //parse + var errRanges = parseErrors(s, i); + + //cycle xerr & yerr + for (var e = 0; e < err.length; e++){ + + var minmax = [ax[e].min, ax[e].max]; + + //draw this error? + if (errRanges[e * err.length]){ + + //data coordinates + var x = points[i], + y = points[i + 1]; + + //errorbar ranges + var upper = [x, y][e] + errRanges[e * err.length + 1], + lower = [x, y][e] - errRanges[e * err.length]; + + //points outside of the canvas + if (err[e].err == 'x') + if (y > ax[1].max || y < ax[1].min || upper < ax[0].min || lower > ax[0].max) + continue; + if (err[e].err == 'y') + if (x > ax[0].max || x < ax[0].min || upper < ax[1].min || lower > ax[1].max) + continue; + + // prevent errorbars getting out of the canvas + var drawUpper = true, + drawLower = true; + + if (upper > minmax[1]) { + drawUpper = false; + upper = minmax[1]; + } + if (lower < minmax[0]) { + drawLower = false; + lower = minmax[0]; + } + + //sanity check, in case some inverted axis hack is applied to flot + if ((err[e].err == 'x' && invertX) || (err[e].err == 'y' && invertY)) { + //swap coordinates + var tmp = lower; + lower = upper; + upper = tmp; + tmp = drawLower; + drawLower = drawUpper; + drawUpper = tmp; + tmp = minmax[0]; + minmax[0] = minmax[1]; + minmax[1] = tmp; + } + + // convert to pixels + x = ax[0].p2c(x), + y = ax[1].p2c(y), + upper = ax[e].p2c(upper); + lower = ax[e].p2c(lower); + minmax[0] = ax[e].p2c(minmax[0]); + minmax[1] = ax[e].p2c(minmax[1]); + + //same style as points by default + var lw = err[e].lineWidth ? err[e].lineWidth : s.points.lineWidth, + sw = s.points.shadowSize != null ? s.points.shadowSize : s.shadowSize; + + //shadow as for points + if (lw > 0 && sw > 0) { + var w = sw / 2; + ctx.lineWidth = w; + ctx.strokeStyle = "rgba(0,0,0,0.1)"; + drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w + w/2, minmax); + + ctx.strokeStyle = "rgba(0,0,0,0.2)"; + drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w/2, minmax); + } + + ctx.strokeStyle = err[e].color? err[e].color: s.color; + ctx.lineWidth = lw; + //draw it + drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, 0, minmax); + } + } + } + } + + function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){ + + //shadow offset + y += offset; + upper += offset; + lower += offset; + + // error bar - avoid plotting over circles + if (err.err == 'x'){ + if (upper > x + radius) drawPath(ctx, [[upper,y],[Math.max(x + radius,minmax[0]),y]]); + else drawUpper = false; + if (lower < x - radius) drawPath(ctx, [[Math.min(x - radius,minmax[1]),y],[lower,y]] ); + else drawLower = false; + } + else { + if (upper < y - radius) drawPath(ctx, [[x,upper],[x,Math.min(y - radius,minmax[0])]] ); + else drawUpper = false; + if (lower > y + radius) drawPath(ctx, [[x,Math.max(y + radius,minmax[1])],[x,lower]] ); + else drawLower = false; + } + + //internal radius value in errorbar, allows to plot radius 0 points and still keep proper sized caps + //this is a way to get errorbars on lines without visible connecting dots + radius = err.radius != null? err.radius: radius; + + // upper cap + if (drawUpper) { + if (err.upperCap == '-'){ + if (err.err=='x') drawPath(ctx, [[upper,y - radius],[upper,y + radius]] ); + else drawPath(ctx, [[x - radius,upper],[x + radius,upper]] ); + } else if ($.isFunction(err.upperCap)){ + if (err.err=='x') err.upperCap(ctx, upper, y, radius); + else err.upperCap(ctx, x, upper, radius); + } + } + // lower cap + if (drawLower) { + if (err.lowerCap == '-'){ + if (err.err=='x') drawPath(ctx, [[lower,y - radius],[lower,y + radius]] ); + else drawPath(ctx, [[x - radius,lower],[x + radius,lower]] ); + } else if ($.isFunction(err.lowerCap)){ + if (err.err=='x') err.lowerCap(ctx, lower, y, radius); + else err.lowerCap(ctx, x, lower, radius); + } + } + } + + function drawPath(ctx, pts){ + ctx.beginPath(); + ctx.moveTo(pts[0][0], pts[0][1]); + for (var p=1; p < pts.length; p++) + ctx.lineTo(pts[p][0], pts[p][1]); + ctx.stroke(); + } + + function draw(plot, ctx){ + var plotOffset = plot.getPlotOffset(); + + ctx.save(); + ctx.translate(plotOffset.left, plotOffset.top); + $.each(plot.getData(), function (i, s) { + if (s.points.errorbars && (s.points.xerr.show || s.points.yerr.show)) + drawSeriesErrors(plot, ctx, s); + }); + ctx.restore(); + } + + function init(plot) { + plot.hooks.processRawData.push(processRawData); + plot.hooks.draw.push(draw); + } + + $.plot.plugins.push({ + init: init, + options: options, + name: 'errorbars', + version: '1.0' + }); +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.errorbars.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.errorbars.min.js new file mode 100644 index 0000000..72d7e3d --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.errorbars.min.js @@ -0,0 +1,63 @@ +/* Flot plugin for plotting error bars. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +Error bars are used to show standard deviation and other statistical +properties in a plot. + +* Created by Rui Pereira - rui (dot) pereira (at) gmail (dot) com + +This plugin allows you to plot error-bars over points. Set "errorbars" inside +the points series to the axis name over which there will be error values in +your data array (*even* if you do not intend to plot them later, by setting +"show: null" on xerr/yerr). + +The plugin supports these options: + + series: { + points: { + errorbars: "x" or "y" or "xy", + xerr: { + show: null/false or true, + asymmetric: null/false or true, + upperCap: null or "-" or function, + lowerCap: null or "-" or function, + color: null or color, + radius: null or number + }, + yerr: { same options as xerr } + } + } + +Each data point array is expected to be of the type: + + "x" [ x, y, xerr ] + "y" [ x, y, yerr ] + "xy" [ x, y, xerr, yerr ] + +Where xerr becomes xerr_lower,xerr_upper for the asymmetric error case, and +equivalently for yerr. Eg., a datapoint for the "xy" case with symmetric +error-bars on X and asymmetric on Y would be: + + [ x, y, xerr, yerr_lower, yerr_upper ] + +By default no end caps are drawn. Setting upperCap and/or lowerCap to "-" will +draw a small cap perpendicular to the error bar. They can also be set to a +user-defined drawing function, with (ctx, x, y, radius) as parameters, as eg. + + function drawSemiCircle( ctx, x, y, radius ) { + ctx.beginPath(); + ctx.arc( x, y, radius, 0, Math.PI, false ); + ctx.moveTo( x - radius, y ); + ctx.lineTo( x + radius, y ); + ctx.stroke(); + } + +Color and radius both default to the same ones of the points series if not +set. The independent radius parameter on xerr/yerr is useful for the case when +we may want to add error-bars to a line, without showing the interconnecting +points (with radius: 0), and still showing end caps on the error-bars. +shadowSize and lineWidth are derived as well from the points series. + +*/(function(e){function n(e,t,n,r){if(!t.points.errorbars)return;var i=[{x:!0,number:!0,required:!0},{y:!0,number:!0,required:!0}],s=t.points.errorbars;if(s=="x"||s=="xy")t.points.xerr.asymmetric?(i.push({x:!0,number:!0,required:!0}),i.push({x:!0,number:!0,required:!0})):i.push({x:!0,number:!0,required:!0});if(s=="y"||s=="xy")t.points.yerr.asymmetric?(i.push({y:!0,number:!0,required:!0}),i.push({y:!0,number:!0,required:!0})):i.push({y:!0,number:!0,required:!0});r.format=i}function r(e,t){var n=e.datapoints.points,r=null,i=null,s=null,o=null,u=e.points.xerr,a=e.points.yerr,f=e.points.errorbars;f=="x"||f=="xy"?u.asymmetric?(r=n[t+2],i=n[t+3],f=="xy"&&(a.asymmetric?(s=n[t+4],o=n[t+5]):s=n[t+4])):(r=n[t+2],f=="xy"&&(a.asymmetric?(s=n[t+3],o=n[t+4]):s=n[t+3])):f=="y"&&(a.asymmetric?(s=n[t+2],o=n[t+3]):s=n[t+2]),i==null&&(i=r),o==null&&(o=s);var l=[r,i,s,o];return u.show||(l[0]=null,l[1]=null),a.show||(l[2]=null,l[3]=null),l}function i(e,t,n){var i=n.datapoints.points,o=n.datapoints.pointsize,u=[n.xaxis,n.yaxis],a=n.points.radius,f=[n.points.xerr,n.points.yerr],l=!1;if(u[0].p2c(u[0].max)<u[0].p2c(u[0].min)){l=!0;var c=f[0].lowerCap;f[0].lowerCap=f[0].upperCap,f[0].upperCap=c}var h=!1;if(u[1].p2c(u[1].min)<u[1].p2c(u[1].max)){h=!0;var c=f[1].lowerCap;f[1].lowerCap=f[1].upperCap,f[1].upperCap=c}for(var p=0;p<n.datapoints.points.length;p+=o){var d=r(n,p);for(var v=0;v<f.length;v++){var m=[u[v].min,u[v].max];if(d[v*f.length]){var g=i[p],y=i[p+1],b=[g,y][v]+d[v*f.length+1],w=[g,y][v]-d[v*f.length];if(f[v].err=="x")if(y>u[1].max||y<u[1].min||b<u[0].min||w>u[0].max)continue;if(f[v].err=="y")if(g>u[0].max||g<u[0].min||b<u[1].min||w>u[1].max)continue;var E=!0,S=!0;b>m[1]&&(E=!1,b=m[1]),w<m[0]&&(S=!1,w=m[0]);if(f[v].err=="x"&&l||f[v].err=="y"&&h){var c=w;w=b,b=c,c=S,S=E,E=c,c=m[0],m[0]=m[1],m[1]=c}g=u[0].p2c(g),y=u[1].p2c(y),b=u[v].p2c(b),w=u[v].p2c(w),m[0]=u[v].p2c(m[0]),m[1]=u[v].p2c(m[1]);var x=f[v].lineWidth?f[v].lineWidth:n.points.lineWidth,T=n.points.shadowSize!=null?n.points.shadowSize:n.shadowSize;if(x>0&&T>0){var N=T/2;t.lineWidth=N,t.strokeStyle="rgba(0,0,0,0.1)",s(t,f[v],g,y,b,w,E,S,a,N+N/2,m),t.strokeStyle="rgba(0,0,0,0.2)",s(t,f[v],g,y,b,w,E,S,a,N/2,m)}t.strokeStyle=f[v].color?f[v].color:n.color,t.lineWidth=x,s(t,f[v],g,y,b,w,E,S,a,0,m)}}}}function s(t,n,r,i,s,u,a,f,l,c,h){i+=c,s+=c,u+=c,n.err=="x"?(s>r+l?o(t,[[s,i],[Math.max(r+l,h[0]),i]]):a=!1,u<r-l?o(t,[[Math.min(r-l,h[1]),i],[u,i]]):f=!1):(s<i-l?o(t,[[r,s],[r,Math.min(i-l,h[0])]]):a=!1,u>i+l?o(t,[[r,Math.max(i+l,h[1])],[r,u]]):f=!1),l=n.radius!=null?n.radius:l,a&&(n.upperCap=="-"?n.err=="x"?o(t,[[s,i-l],[s,i+l]]):o(t,[[r-l,s],[r+l,s]]):e.isFunction(n.upperCap)&&(n.err=="x"?n.upperCap(t,s,i,l):n.upperCap(t,r,s,l))),f&&(n.lowerCap=="-"?n.err=="x"?o(t,[[u,i-l],[u,i+l]]):o(t,[[r-l,u],[r+l,u]]):e.isFunction(n.lowerCap)&&(n.err=="x"?n.lowerCap(t,u,i,l):n.lowerCap(t,r,u,l)))}function o(e,t){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(var n=1;n<t.length;n++)e.lineTo(t[n][0],t[n][1]);e.stroke()}function u(t,n){var r=t.getPlotOffset();n.save(),n.translate(r.left,r.top),e.each(t.getData(),function(e,r){r.points.errorbars&&(r.points.xerr.show||r.points.yerr.show)&&i(t,n,r)}),n.restore()}function a(e){e.hooks.processRawData.push(n),e.hooks.draw.push(u)}var t={series:{points:{errorbars:null,xerr:{err:"x",show:null,asymmetric:null,upperCap:null,lowerCap:null,color:null,radius:null},yerr:{err:"y",show:null,asymmetric:null,upperCap:null,lowerCap:null,color:null,radius:null}}}};e.plot.plugins.push({init:a,options:t,name:"errorbars",version:"1.0"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.fillbetween.js b/public/admin/view/javascript/jquery/flot/jquery.flot.fillbetween.js new file mode 100644 index 0000000..2854d2d --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.fillbetween.js @@ -0,0 +1,226 @@ +/* Flot plugin for computing bottoms for filled line and bar charts. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The case: you've got two series that you want to fill the area between. In Flot +terms, you need to use one as the fill bottom of the other. You can specify the +bottom of each data point as the third coordinate manually, or you can use this +plugin to compute it for you. + +In order to name the other series, you need to give it an id, like this: + + var dataset = [ + { data: [ ... ], id: "foo" } , // use default bottom + { data: [ ... ], fillBetween: "foo" }, // use first dataset as bottom + ]; + + $.plot($("#placeholder"), dataset, { lines: { show: true, fill: true }}); + +As a convenience, if the id given is a number that doesn't appear as an id in +the series, it is interpreted as the index in the array instead (so fillBetween: +0 can also mean the first series). + +Internally, the plugin modifies the datapoints in each series. For line series, +extra data points might be inserted through interpolation. Note that at points +where the bottom line is not defined (due to a null point or start/end of line), +the current line will show a gap too. The algorithm comes from the +jquery.flot.stack.js plugin, possibly some code could be shared. + +*/ + +(function ( $ ) { + + var options = { + series: { + fillBetween: null // or number + } + }; + + function init( plot ) { + + function findBottomSeries( s, allseries ) { + + var i; + + for ( i = 0; i < allseries.length; ++i ) { + if ( allseries[ i ].id === s.fillBetween ) { + return allseries[ i ]; + } + } + + if ( typeof s.fillBetween === "number" ) { + if ( s.fillBetween < 0 || s.fillBetween >= allseries.length ) { + return null; + } + return allseries[ s.fillBetween ]; + } + + return null; + } + + function computeFillBottoms( plot, s, datapoints ) { + + if ( s.fillBetween == null ) { + return; + } + + var other = findBottomSeries( s, plot.getData() ); + + if ( !other ) { + return; + } + + var ps = datapoints.pointsize, + points = datapoints.points, + otherps = other.datapoints.pointsize, + otherpoints = other.datapoints.points, + newpoints = [], + px, py, intery, qx, qy, bottom, + withlines = s.lines.show, + withbottom = ps > 2 && datapoints.format[2].y, + withsteps = withlines && s.lines.steps, + fromgap = true, + i = 0, + j = 0, + l, m; + + while ( true ) { + + if ( i >= points.length ) { + break; + } + + l = newpoints.length; + + if ( points[ i ] == null ) { + + // copy gaps + + for ( m = 0; m < ps; ++m ) { + newpoints.push( points[ i + m ] ); + } + + i += ps; + + } else if ( j >= otherpoints.length ) { + + // for lines, we can't use the rest of the points + + if ( !withlines ) { + for ( m = 0; m < ps; ++m ) { + newpoints.push( points[ i + m ] ); + } + } + + i += ps; + + } else if ( otherpoints[ j ] == null ) { + + // oops, got a gap + + for ( m = 0; m < ps; ++m ) { + newpoints.push( null ); + } + + fromgap = true; + j += otherps; + + } else { + + // cases where we actually got two points + + px = points[ i ]; + py = points[ i + 1 ]; + qx = otherpoints[ j ]; + qy = otherpoints[ j + 1 ]; + bottom = 0; + + if ( px === qx ) { + + for ( m = 0; m < ps; ++m ) { + newpoints.push( points[ i + m ] ); + } + + //newpoints[ l + 1 ] += qy; + bottom = qy; + + i += ps; + j += otherps; + + } else if ( px > qx ) { + + // we got past point below, might need to + // insert interpolated extra point + + if ( withlines && i > 0 && points[ i - ps ] != null ) { + intery = py + ( points[ i - ps + 1 ] - py ) * ( qx - px ) / ( points[ i - ps ] - px ); + newpoints.push( qx ); + newpoints.push( intery ); + for ( m = 2; m < ps; ++m ) { + newpoints.push( points[ i + m ] ); + } + bottom = qy; + } + + j += otherps; + + } else { // px < qx + + // if we come from a gap, we just skip this point + + if ( fromgap && withlines ) { + i += ps; + continue; + } + + for ( m = 0; m < ps; ++m ) { + newpoints.push( points[ i + m ] ); + } + + // we might be able to interpolate a point below, + // this can give us a better y + + if ( withlines && j > 0 && otherpoints[ j - otherps ] != null ) { + bottom = qy + ( otherpoints[ j - otherps + 1 ] - qy ) * ( px - qx ) / ( otherpoints[ j - otherps ] - qx ); + } + + //newpoints[l + 1] += bottom; + + i += ps; + } + + fromgap = false; + + if ( l !== newpoints.length && withbottom ) { + newpoints[ l + 2 ] = bottom; + } + } + + // maintain the line steps invariant + + if ( withsteps && l !== newpoints.length && l > 0 && + newpoints[ l ] !== null && + newpoints[ l ] !== newpoints[ l - ps ] && + newpoints[ l + 1 ] !== newpoints[ l - ps + 1 ] ) { + for (m = 0; m < ps; ++m) { + newpoints[ l + ps + m ] = newpoints[ l + m ]; + } + newpoints[ l + 1 ] = newpoints[ l - ps + 1 ]; + } + } + + datapoints.points = newpoints; + } + + plot.hooks.processDatapoints.push( computeFillBottoms ); + } + + $.plot.plugins.push({ + init: init, + options: options, + name: "fillbetween", + version: "1.0" + }); + +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.fillbetween.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.fillbetween.min.js new file mode 100644 index 0000000..e94efb7 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.fillbetween.min.js @@ -0,0 +1,30 @@ +/* Flot plugin for computing bottoms for filled line and bar charts. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The case: you've got two series that you want to fill the area between. In Flot +terms, you need to use one as the fill bottom of the other. You can specify the +bottom of each data point as the third coordinate manually, or you can use this +plugin to compute it for you. + +In order to name the other series, you need to give it an id, like this: + + var dataset = [ + { data: [ ... ], id: "foo" } , // use default bottom + { data: [ ... ], fillBetween: "foo" }, // use first dataset as bottom + ]; + + $.plot($("#placeholder"), dataset, { lines: { show: true, fill: true }}); + +As a convenience, if the id given is a number that doesn't appear as an id in +the series, it is interpreted as the index in the array instead (so fillBetween: +0 can also mean the first series). + +Internally, the plugin modifies the datapoints in each series. For line series, +extra data points might be inserted through interpolation. Note that at points +where the bottom line is not defined (due to a null point or start/end of line), +the current line will show a gap too. The algorithm comes from the +jquery.flot.stack.js plugin, possibly some code could be shared. + +*/(function(e){function n(e){function t(e,t){var n;for(n=0;n<t.length;++n)if(t[n].id===e.fillBetween)return t[n];return typeof e.fillBetween=="number"?e.fillBetween<0||e.fillBetween>=t.length?null:t[e.fillBetween]:null}function n(e,n,r){if(n.fillBetween==null)return;var i=t(n,e.getData());if(!i)return;var s=r.pointsize,o=r.points,u=i.datapoints.pointsize,a=i.datapoints.points,f=[],l,c,h,p,d,v,m=n.lines.show,g=s>2&&r.format[2].y,y=m&&n.lines.steps,b=!0,w=0,E=0,S,x;for(;;){if(w>=o.length)break;S=f.length;if(o[w]==null){for(x=0;x<s;++x)f.push(o[w+x]);w+=s}else if(E>=a.length){if(!m)for(x=0;x<s;++x)f.push(o[w+x]);w+=s}else if(a[E]==null){for(x=0;x<s;++x)f.push(null);b=!0,E+=u}else{l=o[w],c=o[w+1],p=a[E],d=a[E+1],v=0;if(l===p){for(x=0;x<s;++x)f.push(o[w+x]);v=d,w+=s,E+=u}else if(l>p){if(m&&w>0&&o[w-s]!=null){h=c+(o[w-s+1]-c)*(p-l)/(o[w-s]-l),f.push(p),f.push(h);for(x=2;x<s;++x)f.push(o[w+x]);v=d}E+=u}else{if(b&&m){w+=s;continue}for(x=0;x<s;++x)f.push(o[w+x]);m&&E>0&&a[E-u]!=null&&(v=d+(a[E-u+1]-d)*(l-p)/(a[E-u]-p)),w+=s}b=!1,S!==f.length&&g&&(f[S+2]=v)}if(y&&S!==f.length&&S>0&&f[S]!==null&&f[S]!==f[S-s]&&f[S+1]!==f[S-s+1]){for(x=0;x<s;++x)f[S+s+x]=f[S+x];f[S+1]=f[S-s+1]}}r.points=f}e.hooks.processDatapoints.push(n)}var t={series:{fillBetween:null}};e.plot.plugins.push({init:n,options:t,name:"fillbetween",version:"1.0"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.image.js b/public/admin/view/javascript/jquery/flot/jquery.flot.image.js new file mode 100644 index 0000000..d2837cf --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.image.js @@ -0,0 +1,241 @@ +/* Flot plugin for plotting images. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The data syntax is [ [ image, x1, y1, x2, y2 ], ... ] where (x1, y1) and +(x2, y2) are where you intend the two opposite corners of the image to end up +in the plot. Image must be a fully loaded Javascript image (you can make one +with new Image()). If the image is not complete, it's skipped when plotting. + +There are two helpers included for retrieving images. The easiest work the way +that you put in URLs instead of images in the data, like this: + + [ "myimage.png", 0, 0, 10, 10 ] + +Then call $.plot.image.loadData( data, options, callback ) where data and +options are the same as you pass in to $.plot. This loads the images, replaces +the URLs in the data with the corresponding images and calls "callback" when +all images are loaded (or failed loading). In the callback, you can then call +$.plot with the data set. See the included example. + +A more low-level helper, $.plot.image.load(urls, callback) is also included. +Given a list of URLs, it calls callback with an object mapping from URL to +Image object when all images are loaded or have failed loading. + +The plugin supports these options: + + series: { + images: { + show: boolean + anchor: "corner" or "center" + alpha: [ 0, 1 ] + } + } + +They can be specified for a specific series: + + $.plot( $("#placeholder"), [{ + data: [ ... ], + images: { ... } + ]) + +Note that because the data format is different from usual data points, you +can't use images with anything else in a specific data series. + +Setting "anchor" to "center" causes the pixels in the image to be anchored at +the corner pixel centers inside of at the pixel corners, effectively letting +half a pixel stick out to each side in the plot. + +A possible future direction could be support for tiling for large images (like +Google Maps). + +*/ + +(function ($) { + var options = { + series: { + images: { + show: false, + alpha: 1, + anchor: "corner" // or "center" + } + } + }; + + $.plot.image = {}; + + $.plot.image.loadDataImages = function (series, options, callback) { + var urls = [], points = []; + + var defaultShow = options.series.images.show; + + $.each(series, function (i, s) { + if (!(defaultShow || s.images.show)) + return; + + if (s.data) + s = s.data; + + $.each(s, function (i, p) { + if (typeof p[0] == "string") { + urls.push(p[0]); + points.push(p); + } + }); + }); + + $.plot.image.load(urls, function (loadedImages) { + $.each(points, function (i, p) { + var url = p[0]; + if (loadedImages[url]) + p[0] = loadedImages[url]; + }); + + callback(); + }); + } + + $.plot.image.load = function (urls, callback) { + var missing = urls.length, loaded = {}; + if (missing == 0) + callback({}); + + $.each(urls, function (i, url) { + var handler = function () { + --missing; + + loaded[url] = this; + + if (missing == 0) + callback(loaded); + }; + + $('<img />').load(handler).error(handler).attr('src', url); + }); + }; + + function drawSeries(plot, ctx, series) { + var plotOffset = plot.getPlotOffset(); + + if (!series.images || !series.images.show) + return; + + var points = series.datapoints.points, + ps = series.datapoints.pointsize; + + for (var i = 0; i < points.length; i += ps) { + var img = points[i], + x1 = points[i + 1], y1 = points[i + 2], + x2 = points[i + 3], y2 = points[i + 4], + xaxis = series.xaxis, yaxis = series.yaxis, + tmp; + + // actually we should check img.complete, but it + // appears to be a somewhat unreliable indicator in + // IE6 (false even after load event) + if (!img || img.width <= 0 || img.height <= 0) + continue; + + if (x1 > x2) { + tmp = x2; + x2 = x1; + x1 = tmp; + } + if (y1 > y2) { + tmp = y2; + y2 = y1; + y1 = tmp; + } + + // if the anchor is at the center of the pixel, expand the + // image by 1/2 pixel in each direction + if (series.images.anchor == "center") { + tmp = 0.5 * (x2-x1) / (img.width - 1); + x1 -= tmp; + x2 += tmp; + tmp = 0.5 * (y2-y1) / (img.height - 1); + y1 -= tmp; + y2 += tmp; + } + + // clip + if (x1 == x2 || y1 == y2 || + x1 >= xaxis.max || x2 <= xaxis.min || + y1 >= yaxis.max || y2 <= yaxis.min) + continue; + + var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height; + if (x1 < xaxis.min) { + sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1); + x1 = xaxis.min; + } + + if (x2 > xaxis.max) { + sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1); + x2 = xaxis.max; + } + + if (y1 < yaxis.min) { + sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1); + y1 = yaxis.min; + } + + if (y2 > yaxis.max) { + sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1); + y2 = yaxis.max; + } + + x1 = xaxis.p2c(x1); + x2 = xaxis.p2c(x2); + y1 = yaxis.p2c(y1); + y2 = yaxis.p2c(y2); + + // the transformation may have swapped us + if (x1 > x2) { + tmp = x2; + x2 = x1; + x1 = tmp; + } + if (y1 > y2) { + tmp = y2; + y2 = y1; + y1 = tmp; + } + + tmp = ctx.globalAlpha; + ctx.globalAlpha *= series.images.alpha; + ctx.drawImage(img, + sx1, sy1, sx2 - sx1, sy2 - sy1, + x1 + plotOffset.left, y1 + plotOffset.top, + x2 - x1, y2 - y1); + ctx.globalAlpha = tmp; + } + } + + function processRawData(plot, series, data, datapoints) { + if (!series.images.show) + return; + + // format is Image, x1, y1, x2, y2 (opposite corners) + datapoints.format = [ + { required: true }, + { x: true, number: true, required: true }, + { y: true, number: true, required: true }, + { x: true, number: true, required: true }, + { y: true, number: true, required: true } + ]; + } + + function init(plot) { + plot.hooks.processRawData.push(processRawData); + plot.hooks.drawSeries.push(drawSeries); + } + + $.plot.plugins.push({ + init: init, + options: options, + name: 'image', + version: '1.1' + }); +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.image.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.image.min.js new file mode 100644 index 0000000..b128d30 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.image.min.js @@ -0,0 +1,53 @@ +/* Flot plugin for plotting images. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The data syntax is [ [ image, x1, y1, x2, y2 ], ... ] where (x1, y1) and +(x2, y2) are where you intend the two opposite corners of the image to end up +in the plot. Image must be a fully loaded Javascript image (you can make one +with new Image()). If the image is not complete, it's skipped when plotting. + +There are two helpers included for retrieving images. The easiest work the way +that you put in URLs instead of images in the data, like this: + + [ "myimage.png", 0, 0, 10, 10 ] + +Then call $.plot.image.loadData( data, options, callback ) where data and +options are the same as you pass in to $.plot. This loads the images, replaces +the URLs in the data with the corresponding images and calls "callback" when +all images are loaded (or failed loading). In the callback, you can then call +$.plot with the data set. See the included example. + +A more low-level helper, $.plot.image.load(urls, callback) is also included. +Given a list of URLs, it calls callback with an object mapping from URL to +Image object when all images are loaded or have failed loading. + +The plugin supports these options: + + series: { + images: { + show: boolean + anchor: "corner" or "center" + alpha: [ 0, 1 ] + } + } + +They can be specified for a specific series: + + $.plot( $("#placeholder"), [{ + data: [ ... ], + images: { ... } + ]) + +Note that because the data format is different from usual data points, you +can't use images with anything else in a specific data series. + +Setting "anchor" to "center" causes the pixels in the image to be anchored at +the corner pixel centers inside of at the pixel corners, effectively letting +half a pixel stick out to each side in the plot. + +A possible future direction could be support for tiling for large images (like +Google Maps). + +*/(function(e){function n(e,t,n){var r=e.getPlotOffset();if(!n.images||!n.images.show)return;var i=n.datapoints.points,s=n.datapoints.pointsize;for(var o=0;o<i.length;o+=s){var u=i[o],a=i[o+1],f=i[o+2],l=i[o+3],c=i[o+4],h=n.xaxis,p=n.yaxis,d;if(!u||u.width<=0||u.height<=0)continue;a>l&&(d=l,l=a,a=d),f>c&&(d=c,c=f,f=d),n.images.anchor=="center"&&(d=.5*(l-a)/(u.width-1),a-=d,l+=d,d=.5*(c-f)/(u.height-1),f-=d,c+=d);if(a==l||f==c||a>=h.max||l<=h.min||f>=p.max||c<=p.min)continue;var v=0,m=0,g=u.width,y=u.height;a<h.min&&(v+=(g-v)*(h.min-a)/(l-a),a=h.min),l>h.max&&(g+=(g-v)*(h.max-l)/(l-a),l=h.max),f<p.min&&(y+=(m-y)*(p.min-f)/(c-f),f=p.min),c>p.max&&(m+=(m-y)*(p.max-c)/(c-f),c=p.max),a=h.p2c(a),l=h.p2c(l),f=p.p2c(f),c=p.p2c(c),a>l&&(d=l,l=a,a=d),f>c&&(d=c,c=f,f=d),d=t.globalAlpha,t.globalAlpha*=n.images.alpha,t.drawImage(u,v,m,g-v,y-m,a+r.left,f+r.top,l-a,c-f),t.globalAlpha=d}}function r(e,t,n,r){if(!t.images.show)return;r.format=[{required:!0},{x:!0,number:!0,required:!0},{y:!0,number:!0,required:!0},{x:!0,number:!0,required:!0},{y:!0,number:!0,required:!0}]}function i(e){e.hooks.processRawData.push(r),e.hooks.drawSeries.push(n)}var t={series:{images:{show:!1,alpha:1,anchor:"corner"}}};e.plot.image={},e.plot.image.loadDataImages=function(t,n,r){var i=[],s=[],o=n.series.images.show;e.each(t,function(t,n){if(!o&&!n.images.show)return;n.data&&(n=n.data),e.each(n,function(e,t){typeof t[0]=="string"&&(i.push(t[0]),s.push(t))})}),e.plot.image.load(i,function(t){e.each(s,function(e,n){var r=n[0];t[r]&&(n[0]=t[r])}),r()})},e.plot.image.load=function(t,n){var r=t.length,i={};r==0&&n({}),e.each(t,function(t,s){var o=function(){--r,i[s]=this,r==0&&n(i)};e("<img />").load(o).error(o).attr("src",s)})},e.plot.plugins.push({init:i,options:t,name:"image",version:"1.1"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.js b/public/admin/view/javascript/jquery/flot/jquery.flot.js new file mode 100644 index 0000000..aa7e362 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.js @@ -0,0 +1,3061 @@ +/* Javascript plotting library for jQuery, version 0.8.1. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +*/ + +// first an inline dependency, jquery.colorhelpers.js, we inline it here +// for convenience + +/* Plugin for jQuery for working with colors. + * + * Version 1.1. + * + * Inspiration from jQuery color animation plugin by John Resig. + * + * Released under the MIT license by Ole Laursen, October 2009. + * + * Examples: + * + * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() + * var c = $.color.extract($("#mydiv"), 'background-color'); + * console.log(c.r, c.g, c.b, c.a); + * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" + * + * Note that .scale() and .add() return the same modified object + * instead of making a new one. + * + * V. 1.1: Fix error handling so e.g. parsing an empty string does + * produce a color rather than just crashing. + */ +(function(B){B.color={};B.color.make=function(F,E,C,D){var G={};G.r=F||0;G.g=E||0;G.b=C||0;G.a=D!=null?D:1;G.add=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]+=I}return G.normalize()};G.scale=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]*=I}return G.normalize()};G.toString=function(){if(G.a>=1){return"rgb("+[G.r,G.g,G.b].join(",")+")"}else{return"rgba("+[G.r,G.g,G.b,G.a].join(",")+")"}};G.normalize=function(){function H(J,K,I){return K<J?J:(K>I?I:K)}G.r=H(0,parseInt(G.r),255);G.g=H(0,parseInt(G.g),255);G.b=H(0,parseInt(G.b),255);G.a=H(0,G.a,1);return G};G.clone=function(){return B.color.make(G.r,G.b,G.g,G.a)};return G.normalize()};B.color.extract=function(D,C){var E;do{E=D.css(C).toLowerCase();if(E!=""&&E!="transparent"){break}D=D.parent()}while(!B.nodeName(D.get(0),"body"));if(E=="rgba(0, 0, 0, 0)"){E="transparent"}return B.color.parse(E)};B.color.parse=function(F){var E,C=B.color.make;if(E=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10))}if(E=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10),parseFloat(E[4]))}if(E=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55)}if(E=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55,parseFloat(E[4]))}if(E=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(F)){return C(parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16))}if(E=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(F)){return C(parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16))}var D=B.trim(F).toLowerCase();if(D=="transparent"){return C(255,255,255,0)}else{E=A[D]||[0,0,0];return C(E[0],E[1],E[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery); + +// the actual Flot code +(function($) { + + // Cache the prototype hasOwnProperty for faster access + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + /////////////////////////////////////////////////////////////////////////// + // The Canvas object is a wrapper around an HTML5 <canvas> tag. + // + // @constructor + // @param {string} cls List of classes to apply to the canvas. + // @param {element} container Element onto which to append the canvas. + // + // Requiring a container is a little iffy, but unfortunately canvas + // operations don't work unless the canvas is attached to the DOM. + + function Canvas(cls, container) { + + var element = container.children("." + cls)[0]; + + if (element == null) { + + element = document.createElement("canvas"); + element.className = cls; + + $(element).css({ direction: "ltr", position: "absolute", left: 0, top: 0 }) + .appendTo(container); + + // If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas + + if (!element.getContext) { + if (window.G_vmlCanvasManager) { + element = window.G_vmlCanvasManager.initElement(element); + } else { + throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode."); + } + } + } + + this.element = element; + + var context = this.context = element.getContext("2d"); + + // Determine the screen's ratio of physical to device-independent + // pixels. This is the ratio between the canvas width that the browser + // advertises and the number of pixels actually present in that space. + + // The iPhone 4, for example, has a device-independent width of 320px, + // but its screen is actually 640px wide. It therefore has a pixel + // ratio of 2, while most normal devices have a ratio of 1. + + var devicePixelRatio = window.devicePixelRatio || 1, + backingStoreRatio = + context.webkitBackingStorePixelRatio || + context.mozBackingStorePixelRatio || + context.msBackingStorePixelRatio || + context.oBackingStorePixelRatio || + context.backingStorePixelRatio || 1; + + this.pixelRatio = devicePixelRatio / backingStoreRatio; + + // Size the canvas to match the internal dimensions of its container + + this.resize(container.width(), container.height()); + + // Collection of HTML div layers for text overlaid onto the canvas + + this.textContainer = null; + this.text = {}; + + // Cache of text fragments and metrics, so we can avoid expensively + // re-calculating them when the plot is re-rendered in a loop. + + this._textCache = {}; + } + + // Resizes the canvas to the given dimensions. + // + // @param {number} width New width of the canvas, in pixels. + // @param {number} width New height of the canvas, in pixels. + + Canvas.prototype.resize = function(width, height) { + + if (width <= 0 || height <= 0) { + throw new Error("Invalid dimensions for plot, width = " + width + ", height = " + height); + } + + var element = this.element, + context = this.context, + pixelRatio = this.pixelRatio; + + // Resize the canvas, increasing its density based on the display's + // pixel ratio; basically giving it more pixels without increasing the + // size of its element, to take advantage of the fact that retina + // displays have that many more pixels in the same advertised space. + + // Resizing should reset the state (excanvas seems to be buggy though) + + if (this.width != width) { + element.width = width * pixelRatio; + element.style.width = width + "px"; + this.width = width; + } + + if (this.height != height) { + element.height = height * pixelRatio; + element.style.height = height + "px"; + this.height = height; + } + + // Save the context, so we can reset in case we get replotted. The + // restore ensure that we're really back at the initial state, and + // should be safe even if we haven't saved the initial state yet. + + context.restore(); + context.save(); + + // Scale the coordinate space to match the display density; so even though we + // may have twice as many pixels, we still want lines and other drawing to + // appear at the same size; the extra pixels will just make them crisper. + + context.scale(pixelRatio, pixelRatio); + }; + + // Clears the entire canvas area, not including any overlaid HTML text + + Canvas.prototype.clear = function() { + this.context.clearRect(0, 0, this.width, this.height); + }; + + // Finishes rendering the canvas, including managing the text overlay. + + Canvas.prototype.render = function() { + + var cache = this._textCache; + + // For each text layer, add elements marked as active that haven't + // already been rendered, and remove those that are no longer active. + + for (var layerKey in cache) { + if (hasOwnProperty.call(cache, layerKey)) { + + var layer = this.getTextLayer(layerKey), + layerCache = cache[layerKey]; + + layer.hide(); + + for (var styleKey in layerCache) { + if (hasOwnProperty.call(layerCache, styleKey)) { + var styleCache = layerCache[styleKey]; + for (var key in styleCache) { + if (hasOwnProperty.call(styleCache, key)) { + + var positions = styleCache[key].positions; + + for (var i = 0, position; position = positions[i]; i++) { + if (position.active) { + if (!position.rendered) { + layer.append(position.element); + position.rendered = true; + } + } else { + positions.splice(i--, 1); + if (position.rendered) { + position.element.detach(); + } + } + } + + if (positions.length == 0) { + delete styleCache[key]; + } + } + } + } + } + + layer.show(); + } + } + }; + + // Creates (if necessary) and returns the text overlay container. + // + // @param {string} classes String of space-separated CSS classes used to + // uniquely identify the text layer. + // @return {object} The jQuery-wrapped text-layer div. + + Canvas.prototype.getTextLayer = function(classes) { + + var layer = this.text[classes]; + + // Create the text layer if it doesn't exist + + if (layer == null) { + + // Create the text layer container, if it doesn't exist + + if (this.textContainer == null) { + this.textContainer = $("<div class='flot-text'></div>") + .css({ + position: "absolute", + top: 0, + left: 0, + bottom: 0, + right: 0, + 'font-size': "smaller", + color: "#545454" + }) + .insertAfter(this.element); + } + + layer = this.text[classes] = $("<div></div>") + .addClass(classes) + .css({ + position: "absolute", + top: 0, + left: 0, + bottom: 0, + right: 0 + }) + .appendTo(this.textContainer); + } + + return layer; + }; + + // Creates (if necessary) and returns a text info object. + // + // The object looks like this: + // + // { + // width: Width of the text's wrapper div. + // height: Height of the text's wrapper div. + // element: The jQuery-wrapped HTML div containing the text. + // positions: Array of positions at which this text is drawn. + // } + // + // The positions array contains objects that look like this: + // + // { + // active: Flag indicating whether the text should be visible. + // rendered: Flag indicating whether the text is currently visible. + // element: The jQuery-wrapped HTML div containing the text. + // x: X coordinate at which to draw the text. + // y: Y coordinate at which to draw the text. + // } + // + // Each position after the first receives a clone of the original element. + // + // The idea is that that the width, height, and general 'identity' of the + // text is constant no matter where it is placed; the placements are a + // secondary property. + // + // Canvas maintains a cache of recently-used text info objects; getTextInfo + // either returns the cached element or creates a new entry. + // + // @param {string} layer A string of space-separated CSS classes uniquely + // identifying the layer containing this text. + // @param {string} text Text string to retrieve info for. + // @param {(string|object)=} font Either a string of space-separated CSS + // classes or a font-spec object, defining the text's font and style. + // @param {number=} angle Angle at which to rotate the text, in degrees. + // Angle is currently unused, it will be implemented in the future. + // @param {number=} width Maximum width of the text before it wraps. + // @return {object} a text info object. + + Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) { + + var textStyle, layerCache, styleCache, info; + + // Cast the value to a string, in case we were given a number or such + + text = "" + text; + + // If the font is a font-spec object, generate a CSS font definition + + if (typeof font === "object") { + textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px/" + font.lineHeight + "px " + font.family; + } else { + textStyle = font; + } + + // Retrieve (or create) the cache for the text's layer and styles + + layerCache = this._textCache[layer]; + + if (layerCache == null) { + layerCache = this._textCache[layer] = {}; + } + + styleCache = layerCache[textStyle]; + + if (styleCache == null) { + styleCache = layerCache[textStyle] = {}; + } + + info = styleCache[text]; + + // If we can't find a matching element in our cache, create a new one + + if (info == null) { + + var element = $("<div></div>").html(text) + .css({ + position: "absolute", + 'max-width': width, + top: -9999 + }) + .appendTo(this.getTextLayer(layer)); + + if (typeof font === "object") { + element.css({ + font: textStyle, + color: font.color + }); + } else if (typeof font === "string") { + element.addClass(font); + } + + info = styleCache[text] = { + width: element.outerWidth(true), + height: element.outerHeight(true), + element: element, + positions: [] + }; + + element.detach(); + } + + return info; + }; + + // Adds a text string to the canvas text overlay. + // + // The text isn't drawn immediately; it is marked as rendering, which will + // result in its addition to the canvas on the next render pass. + // + // @param {string} layer A string of space-separated CSS classes uniquely + // identifying the layer containing this text. + // @param {number} x X coordinate at which to draw the text. + // @param {number} y Y coordinate at which to draw the text. + // @param {string} text Text string to draw. + // @param {(string|object)=} font Either a string of space-separated CSS + // classes or a font-spec object, defining the text's font and style. + // @param {number=} angle Angle at which to rotate the text, in degrees. + // Angle is currently unused, it will be implemented in the future. + // @param {number=} width Maximum width of the text before it wraps. + // @param {string=} halign Horizontal alignment of the text; either "left", + // "center" or "right". + // @param {string=} valign Vertical alignment of the text; either "top", + // "middle" or "bottom". + + Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) { + + var info = this.getTextInfo(layer, text, font, angle, width), + positions = info.positions; + + // Tweak the div's position to match the text's alignment + + if (halign == "center") { + x -= info.width / 2; + } else if (halign == "right") { + x -= info.width; + } + + if (valign == "middle") { + y -= info.height / 2; + } else if (valign == "bottom") { + y -= info.height; + } + + // Determine whether this text already exists at this position. + // If so, mark it for inclusion in the next render pass. + + for (var i = 0, position; position = positions[i]; i++) { + if (position.x == x && position.y == y) { + position.active = true; + return; + } + } + + // If the text doesn't exist at this position, create a new entry + + // For the very first position we'll re-use the original element, + // while for subsequent ones we'll clone it. + + position = { + active: true, + rendered: false, + element: positions.length ? info.element.clone() : info.element, + x: x, + y: y + } + + positions.push(position); + + // Move the element to its final position within the container + + position.element.css({ + top: Math.round(y), + left: Math.round(x), + 'text-align': halign // In case the text wraps + }); + }; + + // Removes one or more text strings from the canvas text overlay. + // + // If no parameters are given, all text within the layer is removed. + // + // Note that the text is not immediately removed; it is simply marked as + // inactive, which will result in its removal on the next render pass. + // This avoids the performance penalty for 'clear and redraw' behavior, + // where we potentially get rid of all text on a layer, but will likely + // add back most or all of it later, as when redrawing axes, for example. + // + // @param {string} layer A string of space-separated CSS classes uniquely + // identifying the layer containing this text. + // @param {number=} x X coordinate of the text. + // @param {number=} y Y coordinate of the text. + // @param {string=} text Text string to remove. + // @param {(string|object)=} font Either a string of space-separated CSS + // classes or a font-spec object, defining the text's font and style. + // @param {number=} angle Angle at which the text is rotated, in degrees. + // Angle is currently unused, it will be implemented in the future. + + Canvas.prototype.removeText = function(layer, x, y, text, font, angle) { + if (text == null) { + var layerCache = this._textCache[layer]; + if (layerCache != null) { + for (var styleKey in layerCache) { + if (hasOwnProperty.call(layerCache, styleKey)) { + var styleCache = layerCache[styleKey]; + for (var key in styleCache) { + if (hasOwnProperty.call(styleCache, key)) { + var positions = styleCache[key].positions; + for (var i = 0, position; position = positions[i]; i++) { + position.active = false; + } + } + } + } + } + } + } else { + var positions = this.getTextInfo(layer, text, font, angle).positions; + for (var i = 0, position; position = positions[i]; i++) { + if (position.x == x && position.y == y) { + position.active = false; + } + } + } + }; + + /////////////////////////////////////////////////////////////////////////// + // The top-level container for the entire plot. + + function Plot(placeholder, data_, options_, plugins) { + // data is on the form: + // [ series1, series2 ... ] + // where series is either just the data as [ [x1, y1], [x2, y2], ... ] + // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... } + + var series = [], + options = { + // the color theme used for graphs + colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"], + legend: { + show: true, + noColumns: 1, // number of colums in legend table + labelFormatter: null, // fn: string -> string + labelBoxBorderColor: "#ccc", // border color for the little label boxes + container: null, // container (as jQuery object) to put legend in, null means default on top of graph + position: "ne", // position of default legend container within plot + margin: 5, // distance from grid edge to default legend container within plot + backgroundColor: null, // null means auto-detect + backgroundOpacity: 0.85, // set to 0 to avoid background + sorted: null // default to no legend sorting + }, + xaxis: { + show: null, // null = auto-detect, true = always, false = never + position: "bottom", // or "top" + mode: null, // null or "time" + font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: "italic", weight: "bold", family: "sans-serif", variant: "small-caps" } + color: null, // base color, labels, ticks + tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)" + transform: null, // null or f: number -> number to transform axis + inverseTransform: null, // if transform is set, this should be the inverse function + min: null, // min. value to show, null means set automatically + max: null, // max. value to show, null means set automatically + autoscaleMargin: null, // margin in % to add if auto-setting min/max + ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks + tickFormatter: null, // fn: number -> string + labelWidth: null, // size of tick labels in pixels + labelHeight: null, + reserveSpace: null, // whether to reserve space even if axis isn't shown + tickLength: null, // size in pixels of ticks, or "full" for whole line + alignTicksWithAxis: null, // axis number or null for no sync + tickDecimals: null, // no. of decimals, null means auto + tickSize: null, // number or [number, "unit"] + minTickSize: null // number or [number, "unit"] + }, + yaxis: { + autoscaleMargin: 0.02, + position: "left" // or "right" + }, + xaxes: [], + yaxes: [], + series: { + points: { + show: false, + radius: 3, + lineWidth: 2, // in pixels + fill: true, + fillColor: "#ffffff", + symbol: "circle" // or callback + }, + lines: { + // we don't put in show: false so we can see + // whether lines were actively disabled + lineWidth: 2, // in pixels + fill: false, + fillColor: null, + steps: false + // Omit 'zero', so we can later default its value to + // match that of the 'fill' option. + }, + bars: { + show: false, + lineWidth: 2, // in pixels + barWidth: 1, // in units of the x axis + fill: true, + fillColor: null, + align: "left", // "left", "right", or "center" + horizontal: false, + zero: true + }, + shadowSize: 3, + highlightColor: null + }, + grid: { + show: true, + aboveData: false, + color: "#545454", // primary color used for outline and labels + backgroundColor: null, // null for transparent, else color + borderColor: null, // set if different from the grid color + tickColor: null, // color for the ticks, e.g. "rgba(0,0,0,0.15)" + margin: 0, // distance from the canvas edge to the grid + labelMargin: 5, // in pixels + axisMargin: 8, // in pixels + borderWidth: 2, // in pixels + minBorderMargin: null, // in pixels, null means taken from points radius + markings: null, // array of ranges or fn: axes -> array of ranges + markingsColor: "#f4f4f4", + markingsLineWidth: 2, + // interactive stuff + clickable: false, + hoverable: false, + autoHighlight: true, // highlight in case mouse is near + mouseActiveRadius: 10 // how far the mouse can be away to activate an item + }, + interaction: { + redrawOverlayInterval: 1000/60 // time between updates, -1 means in same flow + }, + hooks: {} + }, + surface = null, // the canvas for the plot itself + overlay = null, // canvas for interactive stuff on top of plot + eventHolder = null, // jQuery object that events should be bound to + ctx = null, octx = null, + xaxes = [], yaxes = [], + plotOffset = { left: 0, right: 0, top: 0, bottom: 0}, + plotWidth = 0, plotHeight = 0, + hooks = { + processOptions: [], + processRawData: [], + processDatapoints: [], + processOffset: [], + drawBackground: [], + drawSeries: [], + draw: [], + bindEvents: [], + drawOverlay: [], + shutdown: [] + }, + plot = this; + + // public functions + plot.setData = setData; + plot.setupGrid = setupGrid; + plot.draw = draw; + plot.getPlaceholder = function() { return placeholder; }; + plot.getCanvas = function() { return surface.element; }; + plot.getPlotOffset = function() { return plotOffset; }; + plot.width = function () { return plotWidth; }; + plot.height = function () { return plotHeight; }; + plot.offset = function () { + var o = eventHolder.offset(); + o.left += plotOffset.left; + o.top += plotOffset.top; + return o; + }; + plot.getData = function () { return series; }; + plot.getAxes = function () { + var res = {}, i; + $.each(xaxes.concat(yaxes), function (_, axis) { + if (axis) + res[axis.direction + (axis.n != 1 ? axis.n : "") + "axis"] = axis; + }); + return res; + }; + plot.getXAxes = function () { return xaxes; }; + plot.getYAxes = function () { return yaxes; }; + plot.c2p = canvasToAxisCoords; + plot.p2c = axisToCanvasCoords; + plot.getOptions = function () { return options; }; + plot.highlight = highlight; + plot.unhighlight = unhighlight; + plot.triggerRedrawOverlay = triggerRedrawOverlay; + plot.pointOffset = function(point) { + return { + left: parseInt(xaxes[axisNumber(point, "x") - 1].p2c(+point.x) + plotOffset.left, 10), + top: parseInt(yaxes[axisNumber(point, "y") - 1].p2c(+point.y) + plotOffset.top, 10) + }; + }; + plot.shutdown = shutdown; + plot.resize = function () { + var width = placeholder.width(), + height = placeholder.height(); + surface.resize(width, height); + overlay.resize(width, height); + }; + + // public attributes + plot.hooks = hooks; + + // initialize + initPlugins(plot); + parseOptions(options_); + setupCanvases(); + setData(data_); + setupGrid(); + draw(); + bindEvents(); + + + function executeHooks(hook, args) { + args = [plot].concat(args); + for (var i = 0; i < hook.length; ++i) + hook[i].apply(this, args); + } + + function initPlugins() { + + // References to key classes, allowing plugins to modify them + + var classes = { + Canvas: Canvas + }; + + for (var i = 0; i < plugins.length; ++i) { + var p = plugins[i]; + p.init(plot, classes); + if (p.options) + $.extend(true, options, p.options); + } + } + + function parseOptions(opts) { + + $.extend(true, options, opts); + + // $.extend merges arrays, rather than replacing them. When less + // colors are provided than the size of the default palette, we + // end up with those colors plus the remaining defaults, which is + // not expected behavior; avoid it by replacing them here. + + if (opts && opts.colors) { + options.colors = opts.colors; + } + + if (options.xaxis.color == null) + options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString(); + if (options.yaxis.color == null) + options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString(); + + if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility + options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color; + if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility + options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color; + + if (options.grid.borderColor == null) + options.grid.borderColor = options.grid.color; + if (options.grid.tickColor == null) + options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString(); + + // Fill in defaults for axis options, including any unspecified + // font-spec fields, if a font-spec was provided. + + // If no x/y axis options were provided, create one of each anyway, + // since the rest of the code assumes that they exist. + + var i, axisOptions, axisCount, + fontDefaults = { + style: placeholder.css("font-style"), + size: Math.round(0.8 * (+placeholder.css("font-size").replace("px", "") || 13)), + variant: placeholder.css("font-variant"), + weight: placeholder.css("font-weight"), + family: placeholder.css("font-family") + }; + + fontDefaults.lineHeight = fontDefaults.size * 1.15; + + axisCount = options.xaxes.length || 1; + for (i = 0; i < axisCount; ++i) { + + axisOptions = options.xaxes[i]; + if (axisOptions && !axisOptions.tickColor) { + axisOptions.tickColor = axisOptions.color; + } + + axisOptions = $.extend(true, {}, options.xaxis, axisOptions); + options.xaxes[i] = axisOptions; + + if (axisOptions.font) { + axisOptions.font = $.extend({}, fontDefaults, axisOptions.font); + if (!axisOptions.font.color) { + axisOptions.font.color = axisOptions.color; + } + } + } + + axisCount = options.yaxes.length || 1; + for (i = 0; i < axisCount; ++i) { + + axisOptions = options.yaxes[i]; + if (axisOptions && !axisOptions.tickColor) { + axisOptions.tickColor = axisOptions.color; + } + + axisOptions = $.extend(true, {}, options.yaxis, axisOptions); + options.yaxes[i] = axisOptions; + + if (axisOptions.font) { + axisOptions.font = $.extend({}, fontDefaults, axisOptions.font); + if (!axisOptions.font.color) { + axisOptions.font.color = axisOptions.color; + } + } + } + + // backwards compatibility, to be removed in future + if (options.xaxis.noTicks && options.xaxis.ticks == null) + options.xaxis.ticks = options.xaxis.noTicks; + if (options.yaxis.noTicks && options.yaxis.ticks == null) + options.yaxis.ticks = options.yaxis.noTicks; + if (options.x2axis) { + options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis); + options.xaxes[1].position = "top"; + } + if (options.y2axis) { + options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis); + options.yaxes[1].position = "right"; + } + if (options.grid.coloredAreas) + options.grid.markings = options.grid.coloredAreas; + if (options.grid.coloredAreasColor) + options.grid.markingsColor = options.grid.coloredAreasColor; + if (options.lines) + $.extend(true, options.series.lines, options.lines); + if (options.points) + $.extend(true, options.series.points, options.points); + if (options.bars) + $.extend(true, options.series.bars, options.bars); + if (options.shadowSize != null) + options.series.shadowSize = options.shadowSize; + if (options.highlightColor != null) + options.series.highlightColor = options.highlightColor; + + // save options on axes for future reference + for (i = 0; i < options.xaxes.length; ++i) + getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i]; + for (i = 0; i < options.yaxes.length; ++i) + getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i]; + + // add hooks from options + for (var n in hooks) + if (options.hooks[n] && options.hooks[n].length) + hooks[n] = hooks[n].concat(options.hooks[n]); + + executeHooks(hooks.processOptions, [options]); + } + + function setData(d) { + series = parseData(d); + fillInSeriesOptions(); + processData(); + } + + function parseData(d) { + var res = []; + for (var i = 0; i < d.length; ++i) { + var s = $.extend(true, {}, options.series); + + if (d[i].data != null) { + s.data = d[i].data; // move the data instead of deep-copy + delete d[i].data; + + $.extend(true, s, d[i]); + + d[i].data = s.data; + } + else + s.data = d[i]; + res.push(s); + } + + return res; + } + + function axisNumber(obj, coord) { + var a = obj[coord + "axis"]; + if (typeof a == "object") // if we got a real axis, extract number + a = a.n; + if (typeof a != "number") + a = 1; // default to first axis + return a; + } + + function allAxes() { + // return flat array without annoying null entries + return $.grep(xaxes.concat(yaxes), function (a) { return a; }); + } + + function canvasToAxisCoords(pos) { + // return an object with x/y corresponding to all used axes + var res = {}, i, axis; + for (i = 0; i < xaxes.length; ++i) { + axis = xaxes[i]; + if (axis && axis.used) + res["x" + axis.n] = axis.c2p(pos.left); + } + + for (i = 0; i < yaxes.length; ++i) { + axis = yaxes[i]; + if (axis && axis.used) + res["y" + axis.n] = axis.c2p(pos.top); + } + + if (res.x1 !== undefined) + res.x = res.x1; + if (res.y1 !== undefined) + res.y = res.y1; + + return res; + } + + function axisToCanvasCoords(pos) { + // get canvas coords from the first pair of x/y found in pos + var res = {}, i, axis, key; + + for (i = 0; i < xaxes.length; ++i) { + axis = xaxes[i]; + if (axis && axis.used) { + key = "x" + axis.n; + if (pos[key] == null && axis.n == 1) + key = "x"; + + if (pos[key] != null) { + res.left = axis.p2c(pos[key]); + break; + } + } + } + + for (i = 0; i < yaxes.length; ++i) { + axis = yaxes[i]; + if (axis && axis.used) { + key = "y" + axis.n; + if (pos[key] == null && axis.n == 1) + key = "y"; + + if (pos[key] != null) { + res.top = axis.p2c(pos[key]); + break; + } + } + } + + return res; + } + + function getOrCreateAxis(axes, number) { + if (!axes[number - 1]) + axes[number - 1] = { + n: number, // save the number for future reference + direction: axes == xaxes ? "x" : "y", + options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis) + }; + + return axes[number - 1]; + } + + function fillInSeriesOptions() { + + var neededColors = series.length, maxIndex = -1, i; + + // Subtract the number of series that already have fixed colors or + // color indexes from the number that we still need to generate. + + for (i = 0; i < series.length; ++i) { + var sc = series[i].color; + if (sc != null) { + neededColors--; + if (typeof sc == "number" && sc > maxIndex) { + maxIndex = sc; + } + } + } + + // If any of the series have fixed color indexes, then we need to + // generate at least as many colors as the highest index. + + if (neededColors <= maxIndex) { + neededColors = maxIndex + 1; + } + + // Generate all the colors, using first the option colors and then + // variations on those colors once they're exhausted. + + var c, colors = [], colorPool = options.colors, + colorPoolSize = colorPool.length, variation = 0; + + for (i = 0; i < neededColors; i++) { + + c = $.color.parse(colorPool[i % colorPoolSize] || "#666"); + + // Each time we exhaust the colors in the pool we adjust + // a scaling factor used to produce more variations on + // those colors. The factor alternates negative/positive + // to produce lighter/darker colors. + + // Reset the variation after every few cycles, or else + // it will end up producing only white or black colors. + + if (i % colorPoolSize == 0 && i) { + if (variation >= 0) { + if (variation < 0.5) { + variation = -variation - 0.2; + } else variation = 0; + } else variation = -variation; + } + + colors[i] = c.scale('rgb', 1 + variation); + } + + // Finalize the series options, filling in their colors + + var colori = 0, s; + for (i = 0; i < series.length; ++i) { + s = series[i]; + + // assign colors + if (s.color == null) { + s.color = colors[colori].toString(); + ++colori; + } + else if (typeof s.color == "number") + s.color = colors[s.color].toString(); + + // turn on lines automatically in case nothing is set + if (s.lines.show == null) { + var v, show = true; + for (v in s) + if (s[v] && s[v].show) { + show = false; + break; + } + if (show) + s.lines.show = true; + } + + // If nothing was provided for lines.zero, default it to match + // lines.fill, since areas by default should extend to zero. + + if (s.lines.zero == null) { + s.lines.zero = !!s.lines.fill; + } + + // setup axes + s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, "x")); + s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, "y")); + } + } + + function processData() { + var topSentry = Number.POSITIVE_INFINITY, + bottomSentry = Number.NEGATIVE_INFINITY, + fakeInfinity = Number.MAX_VALUE, + i, j, k, m, length, + s, points, ps, x, y, axis, val, f, p, + data, format; + + function updateAxis(axis, min, max) { + if (min < axis.datamin && min != -fakeInfinity) + axis.datamin = min; + if (max > axis.datamax && max != fakeInfinity) + axis.datamax = max; + } + + $.each(allAxes(), function (_, axis) { + // init axis + axis.datamin = topSentry; + axis.datamax = bottomSentry; + axis.used = false; + }); + + for (i = 0; i < series.length; ++i) { + s = series[i]; + s.datapoints = { points: [] }; + + executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]); + } + + // first pass: clean and copy data + for (i = 0; i < series.length; ++i) { + s = series[i]; + + data = s.data; + format = s.datapoints.format; + + if (!format) { + format = []; + // find out how to copy + format.push({ x: true, number: true, required: true }); + format.push({ y: true, number: true, required: true }); + + if (s.bars.show || (s.lines.show && s.lines.fill)) { + var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero)); + format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale }); + if (s.bars.horizontal) { + delete format[format.length - 1].y; + format[format.length - 1].x = true; + } + } + + s.datapoints.format = format; + } + + if (s.datapoints.pointsize != null) + continue; // already filled in + + s.datapoints.pointsize = format.length; + + ps = s.datapoints.pointsize; + points = s.datapoints.points; + + var insertSteps = s.lines.show && s.lines.steps; + s.xaxis.used = s.yaxis.used = true; + + for (j = k = 0; j < data.length; ++j, k += ps) { + p = data[j]; + + var nullify = p == null; + if (!nullify) { + for (m = 0; m < ps; ++m) { + val = p[m]; + f = format[m]; + + if (f) { + if (f.number && val != null) { + val = +val; // convert to number + if (isNaN(val)) + val = null; + else if (val == Infinity) + val = fakeInfinity; + else if (val == -Infinity) + val = -fakeInfinity; + } + + if (val == null) { + if (f.required) + nullify = true; + + if (f.defaultValue != null) + val = f.defaultValue; + } + } + + points[k + m] = val; + } + } + + if (nullify) { + for (m = 0; m < ps; ++m) { + val = points[k + m]; + if (val != null) { + f = format[m]; + // extract min/max info + if (f.autoscale) { + if (f.x) { + updateAxis(s.xaxis, val, val); + } + if (f.y) { + updateAxis(s.yaxis, val, val); + } + } + } + points[k + m] = null; + } + } + else { + // a little bit of line specific stuff that + // perhaps shouldn't be here, but lacking + // better means... + if (insertSteps && k > 0 + && points[k - ps] != null + && points[k - ps] != points[k] + && points[k - ps + 1] != points[k + 1]) { + // copy the point to make room for a middle point + for (m = 0; m < ps; ++m) + points[k + ps + m] = points[k + m]; + + // middle point has same y + points[k + 1] = points[k - ps + 1]; + + // we've added a point, better reflect that + k += ps; + } + } + } + } + + // give the hooks a chance to run + for (i = 0; i < series.length; ++i) { + s = series[i]; + + executeHooks(hooks.processDatapoints, [ s, s.datapoints]); + } + + // second pass: find datamax/datamin for auto-scaling + for (i = 0; i < series.length; ++i) { + s = series[i]; + points = s.datapoints.points; + ps = s.datapoints.pointsize; + format = s.datapoints.format; + + var xmin = topSentry, ymin = topSentry, + xmax = bottomSentry, ymax = bottomSentry; + + for (j = 0; j < points.length; j += ps) { + if (points[j] == null) + continue; + + for (m = 0; m < ps; ++m) { + val = points[j + m]; + f = format[m]; + if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity) + continue; + + if (f.x) { + if (val < xmin) + xmin = val; + if (val > xmax) + xmax = val; + } + if (f.y) { + if (val < ymin) + ymin = val; + if (val > ymax) + ymax = val; + } + } + } + + if (s.bars.show) { + // make sure we got room for the bar on the dancing floor + var delta; + + switch (s.bars.align) { + case "left": + delta = 0; + break; + case "right": + delta = -s.bars.barWidth; + break; + case "center": + delta = -s.bars.barWidth / 2; + break; + default: + throw new Error("Invalid bar alignment: " + s.bars.align); + } + + if (s.bars.horizontal) { + ymin += delta; + ymax += delta + s.bars.barWidth; + } + else { + xmin += delta; + xmax += delta + s.bars.barWidth; + } + } + + updateAxis(s.xaxis, xmin, xmax); + updateAxis(s.yaxis, ymin, ymax); + } + + $.each(allAxes(), function (_, axis) { + if (axis.datamin == topSentry) + axis.datamin = null; + if (axis.datamax == bottomSentry) + axis.datamax = null; + }); + } + + function setupCanvases() { + + // Make sure the placeholder is clear of everything except canvases + // from a previous plot in this container that we'll try to re-use. + + placeholder.css("padding", 0) // padding messes up the positioning + .children(":not(.flot-base,.flot-overlay)").remove(); + + if (placeholder.css("position") == 'static') + placeholder.css("position", "relative"); // for positioning labels and overlay + + surface = new Canvas("flot-base", placeholder); + overlay = new Canvas("flot-overlay", placeholder); // overlay canvas for interactive features + + ctx = surface.context; + octx = overlay.context; + + // define which element we're listening for events on + eventHolder = $(overlay.element).unbind(); + + // If we're re-using a plot object, shut down the old one + + var existing = placeholder.data("plot"); + + if (existing) { + existing.shutdown(); + overlay.clear(); + } + + // save in case we get replotted + placeholder.data("plot", plot); + } + + function bindEvents() { + // bind events + if (options.grid.hoverable) { + eventHolder.mousemove(onMouseMove); + + // Use bind, rather than .mouseleave, because we officially + // still support jQuery 1.2.6, which doesn't define a shortcut + // for mouseenter or mouseleave. This was a bug/oversight that + // was fixed somewhere around 1.3.x. We can return to using + // .mouseleave when we drop support for 1.2.6. + + eventHolder.bind("mouseleave", onMouseLeave); + } + + if (options.grid.clickable) + eventHolder.click(onClick); + + executeHooks(hooks.bindEvents, [eventHolder]); + } + + function shutdown() { + if (redrawTimeout) + clearTimeout(redrawTimeout); + + eventHolder.unbind("mousemove", onMouseMove); + eventHolder.unbind("mouseleave", onMouseLeave); + eventHolder.unbind("click", onClick); + + executeHooks(hooks.shutdown, [eventHolder]); + } + + function setTransformationHelpers(axis) { + // set helper functions on the axis, assumes plot area + // has been computed already + + function identity(x) { return x; } + + var s, m, t = axis.options.transform || identity, + it = axis.options.inverseTransform; + + // precompute how much the axis is scaling a point + // in canvas space + if (axis.direction == "x") { + s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min)); + m = Math.min(t(axis.max), t(axis.min)); + } + else { + s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min)); + s = -s; + m = Math.max(t(axis.max), t(axis.min)); + } + + // data point to canvas coordinate + if (t == identity) // slight optimization + axis.p2c = function (p) { return (p - m) * s; }; + else + axis.p2c = function (p) { return (t(p) - m) * s; }; + // canvas coordinate to data point + if (!it) + axis.c2p = function (c) { return m + c / s; }; + else + axis.c2p = function (c) { return it(m + c / s); }; + } + + function measureTickLabels(axis) { + + var opts = axis.options, + ticks = axis.ticks || [], + labelWidth = opts.labelWidth || 0, + labelHeight = opts.labelHeight || 0, + maxWidth = labelWidth || axis.direction == "x" ? Math.floor(surface.width / (ticks.length || 1)) : null; + legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis", + layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles, + font = opts.font || "flot-tick-label tickLabel"; + + for (var i = 0; i < ticks.length; ++i) { + + var t = ticks[i]; + + if (!t.label) + continue; + + var info = surface.getTextInfo(layer, t.label, font, null, maxWidth); + + labelWidth = Math.max(labelWidth, info.width); + labelHeight = Math.max(labelHeight, info.height); + } + + axis.labelWidth = opts.labelWidth || labelWidth; + axis.labelHeight = opts.labelHeight || labelHeight; + } + + function allocateAxisBoxFirstPhase(axis) { + // find the bounding box of the axis by looking at label + // widths/heights and ticks, make room by diminishing the + // plotOffset; this first phase only looks at one + // dimension per axis, the other dimension depends on the + // other axes so will have to wait + + var lw = axis.labelWidth, + lh = axis.labelHeight, + pos = axis.options.position, + tickLength = axis.options.tickLength, + axisMargin = options.grid.axisMargin, + padding = options.grid.labelMargin, + all = axis.direction == "x" ? xaxes : yaxes, + index, innermost; + + // determine axis margin + var samePosition = $.grep(all, function (a) { + return a && a.options.position == pos && a.reserveSpace; + }); + if ($.inArray(axis, samePosition) == samePosition.length - 1) + axisMargin = 0; // outermost + + // determine tick length - if we're innermost, we can use "full" + if (tickLength == null) { + var sameDirection = $.grep(all, function (a) { + return a && a.reserveSpace; + }); + + innermost = $.inArray(axis, sameDirection) == 0; + if (innermost) + tickLength = "full"; + else + tickLength = 5; + } + + if (!isNaN(+tickLength)) + padding += +tickLength; + + // compute box + if (axis.direction == "x") { + lh += padding; + + if (pos == "bottom") { + plotOffset.bottom += lh + axisMargin; + axis.box = { top: surface.height - plotOffset.bottom, height: lh }; + } + else { + axis.box = { top: plotOffset.top + axisMargin, height: lh }; + plotOffset.top += lh + axisMargin; + } + } + else { + lw += padding; + + if (pos == "left") { + axis.box = { left: plotOffset.left + axisMargin, width: lw }; + plotOffset.left += lw + axisMargin; + } + else { + plotOffset.right += lw + axisMargin; + axis.box = { left: surface.width - plotOffset.right, width: lw }; + } + } + + // save for future reference + axis.position = pos; + axis.tickLength = tickLength; + axis.box.padding = padding; + axis.innermost = innermost; + } + + function allocateAxisBoxSecondPhase(axis) { + // now that all axis boxes have been placed in one + // dimension, we can set the remaining dimension coordinates + if (axis.direction == "x") { + axis.box.left = plotOffset.left - axis.labelWidth / 2; + axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth; + } + else { + axis.box.top = plotOffset.top - axis.labelHeight / 2; + axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight; + } + } + + function adjustLayoutForThingsStickingOut() { + // possibly adjust plot offset to ensure everything stays + // inside the canvas and isn't clipped off + + var minMargin = options.grid.minBorderMargin, + margins = { x: 0, y: 0 }, i, axis; + + // check stuff from the plot (FIXME: this should just read + // a value from the series, otherwise it's impossible to + // customize) + if (minMargin == null) { + minMargin = 0; + for (i = 0; i < series.length; ++i) + minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth/2)); + } + + margins.x = margins.y = Math.ceil(minMargin); + + // check axis labels, note we don't check the actual + // labels but instead use the overall width/height to not + // jump as much around with replots + $.each(allAxes(), function (_, axis) { + var dir = axis.direction; + if (axis.reserveSpace) + margins[dir] = Math.ceil(Math.max(margins[dir], (dir == "x" ? axis.labelWidth : axis.labelHeight) / 2)); + }); + + plotOffset.left = Math.max(margins.x, plotOffset.left); + plotOffset.right = Math.max(margins.x, plotOffset.right); + plotOffset.top = Math.max(margins.y, plotOffset.top); + plotOffset.bottom = Math.max(margins.y, plotOffset.bottom); + } + + function setupGrid() { + var i, axes = allAxes(), showGrid = options.grid.show; + + // Initialize the plot's offset from the edge of the canvas + + for (var a in plotOffset) { + var margin = options.grid.margin || 0; + plotOffset[a] = typeof margin == "number" ? margin : margin[a] || 0; + } + + executeHooks(hooks.processOffset, [plotOffset]); + + // If the grid is visible, add its border width to the offset + + for (var a in plotOffset) { + if(typeof(options.grid.borderWidth) == "object") { + plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0; + } + else { + plotOffset[a] += showGrid ? options.grid.borderWidth : 0; + } + } + + // init axes + $.each(axes, function (_, axis) { + axis.show = axis.options.show; + if (axis.show == null) + axis.show = axis.used; // by default an axis is visible if it's got data + + axis.reserveSpace = axis.show || axis.options.reserveSpace; + + setRange(axis); + }); + + if (showGrid) { + + var allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; }); + + $.each(allocatedAxes, function (_, axis) { + // make the ticks + setupTickGeneration(axis); + setTicks(axis); + snapRangeToTicks(axis, axis.ticks); + // find labelWidth/Height for axis + measureTickLabels(axis); + }); + + // with all dimensions calculated, we can compute the + // axis bounding boxes, start from the outside + // (reverse order) + for (i = allocatedAxes.length - 1; i >= 0; --i) + allocateAxisBoxFirstPhase(allocatedAxes[i]); + + // make sure we've got enough space for things that + // might stick out + adjustLayoutForThingsStickingOut(); + + $.each(allocatedAxes, function (_, axis) { + allocateAxisBoxSecondPhase(axis); + }); + } + + plotWidth = surface.width - plotOffset.left - plotOffset.right; + plotHeight = surface.height - plotOffset.bottom - plotOffset.top; + + // now we got the proper plot dimensions, we can compute the scaling + $.each(axes, function (_, axis) { + setTransformationHelpers(axis); + }); + + if (showGrid) { + drawAxisLabels(); + } + + insertLegend(); + } + + function setRange(axis) { + var opts = axis.options, + min = +(opts.min != null ? opts.min : axis.datamin), + max = +(opts.max != null ? opts.max : axis.datamax), + delta = max - min; + + if (delta == 0.0) { + // degenerate case + var widen = max == 0 ? 1 : 0.01; + + if (opts.min == null) + min -= widen; + // always widen max if we couldn't widen min to ensure we + // don't fall into min == max which doesn't work + if (opts.max == null || opts.min != null) + max += widen; + } + else { + // consider autoscaling + var margin = opts.autoscaleMargin; + if (margin != null) { + if (opts.min == null) { + min -= delta * margin; + // make sure we don't go below zero if all values + // are positive + if (min < 0 && axis.datamin != null && axis.datamin >= 0) + min = 0; + } + if (opts.max == null) { + max += delta * margin; + if (max > 0 && axis.datamax != null && axis.datamax <= 0) + max = 0; + } + } + } + axis.min = min; + axis.max = max; + } + + function setupTickGeneration(axis) { + var opts = axis.options; + + // estimate number of ticks + var noTicks; + if (typeof opts.ticks == "number" && opts.ticks > 0) + noTicks = opts.ticks; + else + // heuristic based on the model a*sqrt(x) fitted to + // some data points that seemed reasonable + noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? surface.width : surface.height); + + var delta = (axis.max - axis.min) / noTicks, + dec = -Math.floor(Math.log(delta) / Math.LN10), + maxDec = opts.tickDecimals; + + if (maxDec != null && dec > maxDec) { + dec = maxDec; + } + + var magn = Math.pow(10, -dec), + norm = delta / magn, // norm is between 1.0 and 10.0 + size; + + if (norm < 1.5) { + size = 1; + } else if (norm < 3) { + size = 2; + // special case for 2.5, requires an extra decimal + if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) { + size = 2.5; + ++dec; + } + } else if (norm < 7.5) { + size = 5; + } else { + size = 10; + } + + size *= magn; + + if (opts.minTickSize != null && size < opts.minTickSize) { + size = opts.minTickSize; + } + + axis.delta = delta; + axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec); + axis.tickSize = opts.tickSize || size; + + // Time mode was moved to a plug-in in 0.8, but since so many people use this + // we'll add an especially friendly make sure they remembered to include it. + + if (opts.mode == "time" && !axis.tickGenerator) { + throw new Error("Time mode requires the flot.time plugin."); + } + + // Flot supports base-10 axes; any other mode else is handled by a plug-in, + // like flot.time.js. + + if (!axis.tickGenerator) { + + axis.tickGenerator = function (axis) { + + var ticks = [], + start = floorInBase(axis.min, axis.tickSize), + i = 0, + v = Number.NaN, + prev; + + do { + prev = v; + v = start + i * axis.tickSize; + ticks.push(v); + ++i; + } while (v < axis.max && v != prev); + return ticks; + }; + + axis.tickFormatter = function (value, axis) { + + var factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1; + var formatted = "" + Math.round(value * factor) / factor; + + // If tickDecimals was specified, ensure that we have exactly that + // much precision; otherwise default to the value's own precision. + + if (axis.tickDecimals != null) { + var decimal = formatted.indexOf("."); + var precision = decimal == -1 ? 0 : formatted.length - decimal - 1; + if (precision < axis.tickDecimals) { + return (precision ? formatted : formatted + ".") + ("" + factor).substr(1, axis.tickDecimals - precision); + } + } + + return formatted; + }; + } + + if ($.isFunction(opts.tickFormatter)) + axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); }; + + if (opts.alignTicksWithAxis != null) { + var otherAxis = (axis.direction == "x" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1]; + if (otherAxis && otherAxis.used && otherAxis != axis) { + // consider snapping min/max to outermost nice ticks + var niceTicks = axis.tickGenerator(axis); + if (niceTicks.length > 0) { + if (opts.min == null) + axis.min = Math.min(axis.min, niceTicks[0]); + if (opts.max == null && niceTicks.length > 1) + axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]); + } + + axis.tickGenerator = function (axis) { + // copy ticks, scaled to this axis + var ticks = [], v, i; + for (i = 0; i < otherAxis.ticks.length; ++i) { + v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min); + v = axis.min + v * (axis.max - axis.min); + ticks.push(v); + } + return ticks; + }; + + // we might need an extra decimal since forced + // ticks don't necessarily fit naturally + if (!axis.mode && opts.tickDecimals == null) { + var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1), + ts = axis.tickGenerator(axis); + + // only proceed if the tick interval rounded + // with an extra decimal doesn't give us a + // zero at end + if (!(ts.length > 1 && /\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec)))) + axis.tickDecimals = extraDec; + } + } + } + } + + function setTicks(axis) { + var oticks = axis.options.ticks, ticks = []; + if (oticks == null || (typeof oticks == "number" && oticks > 0)) + ticks = axis.tickGenerator(axis); + else if (oticks) { + if ($.isFunction(oticks)) + // generate the ticks + ticks = oticks(axis); + else + ticks = oticks; + } + + // clean up/labelify the supplied ticks, copy them over + var i, v; + axis.ticks = []; + for (i = 0; i < ticks.length; ++i) { + var label = null; + var t = ticks[i]; + if (typeof t == "object") { + v = +t[0]; + if (t.length > 1) + label = t[1]; + } + else + v = +t; + if (label == null) + label = axis.tickFormatter(v, axis); + if (!isNaN(v)) + axis.ticks.push({ v: v, label: label }); + } + } + + function snapRangeToTicks(axis, ticks) { + if (axis.options.autoscaleMargin && ticks.length > 0) { + // snap to ticks + if (axis.options.min == null) + axis.min = Math.min(axis.min, ticks[0].v); + if (axis.options.max == null && ticks.length > 1) + axis.max = Math.max(axis.max, ticks[ticks.length - 1].v); + } + } + + function draw() { + + surface.clear(); + + executeHooks(hooks.drawBackground, [ctx]); + + var grid = options.grid; + + // draw background, if any + if (grid.show && grid.backgroundColor) + drawBackground(); + + if (grid.show && !grid.aboveData) { + drawGrid(); + } + + for (var i = 0; i < series.length; ++i) { + executeHooks(hooks.drawSeries, [ctx, series[i]]); + drawSeries(series[i]); + } + + executeHooks(hooks.draw, [ctx]); + + if (grid.show && grid.aboveData) { + drawGrid(); + } + + surface.render(); + + // A draw implies that either the axes or data have changed, so we + // should probably update the overlay highlights as well. + + triggerRedrawOverlay(); + } + + function extractRange(ranges, coord) { + var axis, from, to, key, axes = allAxes(); + + for (var i = 0; i < axes.length; ++i) { + axis = axes[i]; + if (axis.direction == coord) { + key = coord + axis.n + "axis"; + if (!ranges[key] && axis.n == 1) + key = coord + "axis"; // support x1axis as xaxis + if (ranges[key]) { + from = ranges[key].from; + to = ranges[key].to; + break; + } + } + } + + // backwards-compat stuff - to be removed in future + if (!ranges[key]) { + axis = coord == "x" ? xaxes[0] : yaxes[0]; + from = ranges[coord + "1"]; + to = ranges[coord + "2"]; + } + + // auto-reverse as an added bonus + if (from != null && to != null && from > to) { + var tmp = from; + from = to; + to = tmp; + } + + return { from: from, to: to, axis: axis }; + } + + function drawBackground() { + ctx.save(); + ctx.translate(plotOffset.left, plotOffset.top); + + ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)"); + ctx.fillRect(0, 0, plotWidth, plotHeight); + ctx.restore(); + } + + function drawGrid() { + var i, axes, bw, bc; + + ctx.save(); + ctx.translate(plotOffset.left, plotOffset.top); + + // draw markings + var markings = options.grid.markings; + if (markings) { + if ($.isFunction(markings)) { + axes = plot.getAxes(); + // xmin etc. is backwards compatibility, to be + // removed in the future + axes.xmin = axes.xaxis.min; + axes.xmax = axes.xaxis.max; + axes.ymin = axes.yaxis.min; + axes.ymax = axes.yaxis.max; + + markings = markings(axes); + } + + for (i = 0; i < markings.length; ++i) { + var m = markings[i], + xrange = extractRange(m, "x"), + yrange = extractRange(m, "y"); + + // fill in missing + if (xrange.from == null) + xrange.from = xrange.axis.min; + if (xrange.to == null) + xrange.to = xrange.axis.max; + if (yrange.from == null) + yrange.from = yrange.axis.min; + if (yrange.to == null) + yrange.to = yrange.axis.max; + + // clip + if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max || + yrange.to < yrange.axis.min || yrange.from > yrange.axis.max) + continue; + + xrange.from = Math.max(xrange.from, xrange.axis.min); + xrange.to = Math.min(xrange.to, xrange.axis.max); + yrange.from = Math.max(yrange.from, yrange.axis.min); + yrange.to = Math.min(yrange.to, yrange.axis.max); + + if (xrange.from == xrange.to && yrange.from == yrange.to) + continue; + + // then draw + xrange.from = xrange.axis.p2c(xrange.from); + xrange.to = xrange.axis.p2c(xrange.to); + yrange.from = yrange.axis.p2c(yrange.from); + yrange.to = yrange.axis.p2c(yrange.to); + + if (xrange.from == xrange.to || yrange.from == yrange.to) { + // draw line + ctx.beginPath(); + ctx.strokeStyle = m.color || options.grid.markingsColor; + ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth; + ctx.moveTo(xrange.from, yrange.from); + ctx.lineTo(xrange.to, yrange.to); + ctx.stroke(); + } + else { + // fill area + ctx.fillStyle = m.color || options.grid.markingsColor; + ctx.fillRect(xrange.from, yrange.to, + xrange.to - xrange.from, + yrange.from - yrange.to); + } + } + } + + // draw the ticks + axes = allAxes(); + bw = options.grid.borderWidth; + + for (var j = 0; j < axes.length; ++j) { + var axis = axes[j], box = axis.box, + t = axis.tickLength, x, y, xoff, yoff; + if (!axis.show || axis.ticks.length == 0) + continue; + + ctx.lineWidth = 1; + + // find the edges + if (axis.direction == "x") { + x = 0; + if (t == "full") + y = (axis.position == "top" ? 0 : plotHeight); + else + y = box.top - plotOffset.top + (axis.position == "top" ? box.height : 0); + } + else { + y = 0; + if (t == "full") + x = (axis.position == "left" ? 0 : plotWidth); + else + x = box.left - plotOffset.left + (axis.position == "left" ? box.width : 0); + } + + // draw tick bar + if (!axis.innermost) { + ctx.strokeStyle = axis.options.color; + ctx.beginPath(); + xoff = yoff = 0; + if (axis.direction == "x") + xoff = plotWidth + 1; + else + yoff = plotHeight + 1; + + if (ctx.lineWidth == 1) { + if (axis.direction == "x") { + y = Math.floor(y) + 0.5; + } else { + x = Math.floor(x) + 0.5; + } + } + + ctx.moveTo(x, y); + ctx.lineTo(x + xoff, y + yoff); + ctx.stroke(); + } + + // draw ticks + + ctx.strokeStyle = axis.options.tickColor; + + ctx.beginPath(); + for (i = 0; i < axis.ticks.length; ++i) { + var v = axis.ticks[i].v; + + xoff = yoff = 0; + + if (isNaN(v) || v < axis.min || v > axis.max + // skip those lying on the axes if we got a border + || (t == "full" + && ((typeof bw == "object" && bw[axis.position] > 0) || bw > 0) + && (v == axis.min || v == axis.max))) + continue; + + if (axis.direction == "x") { + x = axis.p2c(v); + yoff = t == "full" ? -plotHeight : t; + + if (axis.position == "top") + yoff = -yoff; + } + else { + y = axis.p2c(v); + xoff = t == "full" ? -plotWidth : t; + + if (axis.position == "left") + xoff = -xoff; + } + + if (ctx.lineWidth == 1) { + if (axis.direction == "x") + x = Math.floor(x) + 0.5; + else + y = Math.floor(y) + 0.5; + } + + ctx.moveTo(x, y); + ctx.lineTo(x + xoff, y + yoff); + } + + ctx.stroke(); + } + + + // draw border + if (bw) { + // If either borderWidth or borderColor is an object, then draw the border + // line by line instead of as one rectangle + bc = options.grid.borderColor; + if(typeof bw == "object" || typeof bc == "object") { + if (typeof bw !== "object") { + bw = {top: bw, right: bw, bottom: bw, left: bw}; + } + if (typeof bc !== "object") { + bc = {top: bc, right: bc, bottom: bc, left: bc}; + } + + if (bw.top > 0) { + ctx.strokeStyle = bc.top; + ctx.lineWidth = bw.top; + ctx.beginPath(); + ctx.moveTo(0 - bw.left, 0 - bw.top/2); + ctx.lineTo(plotWidth, 0 - bw.top/2); + ctx.stroke(); + } + + if (bw.right > 0) { + ctx.strokeStyle = bc.right; + ctx.lineWidth = bw.right; + ctx.beginPath(); + ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top); + ctx.lineTo(plotWidth + bw.right / 2, plotHeight); + ctx.stroke(); + } + + if (bw.bottom > 0) { + ctx.strokeStyle = bc.bottom; + ctx.lineWidth = bw.bottom; + ctx.beginPath(); + ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2); + ctx.lineTo(0, plotHeight + bw.bottom / 2); + ctx.stroke(); + } + + if (bw.left > 0) { + ctx.strokeStyle = bc.left; + ctx.lineWidth = bw.left; + ctx.beginPath(); + ctx.moveTo(0 - bw.left/2, plotHeight + bw.bottom); + ctx.lineTo(0- bw.left/2, 0); + ctx.stroke(); + } + } + else { + ctx.lineWidth = bw; + ctx.strokeStyle = options.grid.borderColor; + ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw); + } + } + + ctx.restore(); + } + + function drawAxisLabels() { + + $.each(allAxes(), function (_, axis) { + if (!axis.show || axis.ticks.length == 0) + return; + + var box = axis.box, + legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis", + layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles, + font = axis.options.font || "flot-tick-label tickLabel", + tick, x, y, halign, valign; + + surface.removeText(layer); + + for (var i = 0; i < axis.ticks.length; ++i) { + + tick = axis.ticks[i]; + if (!tick.label || tick.v < axis.min || tick.v > axis.max) + continue; + + if (axis.direction == "x") { + halign = "center"; + x = plotOffset.left + axis.p2c(tick.v); + if (axis.position == "bottom") { + y = box.top + box.padding; + } else { + y = box.top + box.height - box.padding; + valign = "bottom"; + } + } else { + valign = "middle"; + y = plotOffset.top + axis.p2c(tick.v); + if (axis.position == "left") { + x = box.left + box.width - box.padding; + halign = "right"; + } else { + x = box.left + box.padding; + } + } + + surface.addText(layer, x, y, tick.label, font, null, null, halign, valign); + } + }); + } + + function drawSeries(series) { + if (series.lines.show) + drawSeriesLines(series); + if (series.bars.show) + drawSeriesBars(series); + if (series.points.show) + drawSeriesPoints(series); + } + + function drawSeriesLines(series) { + function plotLine(datapoints, xoffset, yoffset, axisx, axisy) { + var points = datapoints.points, + ps = datapoints.pointsize, + prevx = null, prevy = null; + + ctx.beginPath(); + for (var i = ps; i < points.length; i += ps) { + var x1 = points[i - ps], y1 = points[i - ps + 1], + x2 = points[i], y2 = points[i + 1]; + + if (x1 == null || x2 == null) + continue; + + // clip with ymin + if (y1 <= y2 && y1 < axisy.min) { + if (y2 < axisy.min) + continue; // line segment is outside + // compute new intersection point + x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; + y1 = axisy.min; + } + else if (y2 <= y1 && y2 < axisy.min) { + if (y1 < axisy.min) + continue; + x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; + y2 = axisy.min; + } + + // clip with ymax + if (y1 >= y2 && y1 > axisy.max) { + if (y2 > axisy.max) + continue; + x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; + y1 = axisy.max; + } + else if (y2 >= y1 && y2 > axisy.max) { + if (y1 > axisy.max) + continue; + x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; + y2 = axisy.max; + } + + // clip with xmin + if (x1 <= x2 && x1 < axisx.min) { + if (x2 < axisx.min) + continue; + y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; + x1 = axisx.min; + } + else if (x2 <= x1 && x2 < axisx.min) { + if (x1 < axisx.min) + continue; + y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; + x2 = axisx.min; + } + + // clip with xmax + if (x1 >= x2 && x1 > axisx.max) { + if (x2 > axisx.max) + continue; + y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; + x1 = axisx.max; + } + else if (x2 >= x1 && x2 > axisx.max) { + if (x1 > axisx.max) + continue; + y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; + x2 = axisx.max; + } + + if (x1 != prevx || y1 != prevy) + ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset); + + prevx = x2; + prevy = y2; + ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset); + } + ctx.stroke(); + } + + function plotLineArea(datapoints, axisx, axisy) { + var points = datapoints.points, + ps = datapoints.pointsize, + bottom = Math.min(Math.max(0, axisy.min), axisy.max), + i = 0, top, areaOpen = false, + ypos = 1, segmentStart = 0, segmentEnd = 0; + + // we process each segment in two turns, first forward + // direction to sketch out top, then once we hit the + // end we go backwards to sketch the bottom + while (true) { + if (ps > 0 && i > points.length + ps) + break; + + i += ps; // ps is negative if going backwards + + var x1 = points[i - ps], + y1 = points[i - ps + ypos], + x2 = points[i], y2 = points[i + ypos]; + + if (areaOpen) { + if (ps > 0 && x1 != null && x2 == null) { + // at turning point + segmentEnd = i; + ps = -ps; + ypos = 2; + continue; + } + + if (ps < 0 && i == segmentStart + ps) { + // done with the reverse sweep + ctx.fill(); + areaOpen = false; + ps = -ps; + ypos = 1; + i = segmentStart = segmentEnd + ps; + continue; + } + } + + if (x1 == null || x2 == null) + continue; + + // clip x values + + // clip with xmin + if (x1 <= x2 && x1 < axisx.min) { + if (x2 < axisx.min) + continue; + y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; + x1 = axisx.min; + } + else if (x2 <= x1 && x2 < axisx.min) { + if (x1 < axisx.min) + continue; + y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; + x2 = axisx.min; + } + + // clip with xmax + if (x1 >= x2 && x1 > axisx.max) { + if (x2 > axisx.max) + continue; + y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; + x1 = axisx.max; + } + else if (x2 >= x1 && x2 > axisx.max) { + if (x1 > axisx.max) + continue; + y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; + x2 = axisx.max; + } + + if (!areaOpen) { + // open area + ctx.beginPath(); + ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom)); + areaOpen = true; + } + + // now first check the case where both is outside + if (y1 >= axisy.max && y2 >= axisy.max) { + ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max)); + ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max)); + continue; + } + else if (y1 <= axisy.min && y2 <= axisy.min) { + ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min)); + ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min)); + continue; + } + + // else it's a bit more complicated, there might + // be a flat maxed out rectangle first, then a + // triangular cutout or reverse; to find these + // keep track of the current x values + var x1old = x1, x2old = x2; + + // clip the y values, without shortcutting, we + // go through all cases in turn + + // clip with ymin + if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) { + x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; + y1 = axisy.min; + } + else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) { + x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; + y2 = axisy.min; + } + + // clip with ymax + if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) { + x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; + y1 = axisy.max; + } + else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) { + x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; + y2 = axisy.max; + } + + // if the x value was changed we got a rectangle + // to fill + if (x1 != x1old) { + ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1)); + // it goes to (x1, y1), but we fill that below + } + + // fill triangular section, this sometimes result + // in redundant points if (x1, y1) hasn't changed + // from previous line to, but we just ignore that + ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1)); + ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2)); + + // fill the other rectangle if it's there + if (x2 != x2old) { + ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2)); + ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2)); + } + } + } + + ctx.save(); + ctx.translate(plotOffset.left, plotOffset.top); + ctx.lineJoin = "round"; + + var lw = series.lines.lineWidth, + sw = series.shadowSize; + // FIXME: consider another form of shadow when filling is turned on + if (lw > 0 && sw > 0) { + // draw shadow as a thick and thin line with transparency + ctx.lineWidth = sw; + ctx.strokeStyle = "rgba(0,0,0,0.1)"; + // position shadow at angle from the mid of line + var angle = Math.PI/18; + plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis); + ctx.lineWidth = sw/2; + plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis); + } + + ctx.lineWidth = lw; + ctx.strokeStyle = series.color; + var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight); + if (fillStyle) { + ctx.fillStyle = fillStyle; + plotLineArea(series.datapoints, series.xaxis, series.yaxis); + } + + if (lw > 0) + plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis); + ctx.restore(); + } + + function drawSeriesPoints(series) { + function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) { + var points = datapoints.points, ps = datapoints.pointsize; + + for (var i = 0; i < points.length; i += ps) { + var x = points[i], y = points[i + 1]; + if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max) + continue; + + ctx.beginPath(); + x = axisx.p2c(x); + y = axisy.p2c(y) + offset; + if (symbol == "circle") + ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false); + else + symbol(ctx, x, y, radius, shadow); + ctx.closePath(); + + if (fillStyle) { + ctx.fillStyle = fillStyle; + ctx.fill(); + } + ctx.stroke(); + } + } + + ctx.save(); + ctx.translate(plotOffset.left, plotOffset.top); + + var lw = series.points.lineWidth, + sw = series.shadowSize, + radius = series.points.radius, + symbol = series.points.symbol; + + // If the user sets the line width to 0, we change it to a very + // small value. A line width of 0 seems to force the default of 1. + // Doing the conditional here allows the shadow setting to still be + // optional even with a lineWidth of 0. + + if( lw == 0 ) + lw = 0.0001; + + if (lw > 0 && sw > 0) { + // draw shadow in two steps + var w = sw / 2; + ctx.lineWidth = w; + ctx.strokeStyle = "rgba(0,0,0,0.1)"; + plotPoints(series.datapoints, radius, null, w + w/2, true, + series.xaxis, series.yaxis, symbol); + + ctx.strokeStyle = "rgba(0,0,0,0.2)"; + plotPoints(series.datapoints, radius, null, w/2, true, + series.xaxis, series.yaxis, symbol); + } + + ctx.lineWidth = lw; + ctx.strokeStyle = series.color; + plotPoints(series.datapoints, radius, + getFillStyle(series.points, series.color), 0, false, + series.xaxis, series.yaxis, symbol); + ctx.restore(); + } + + function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) { + var left, right, bottom, top, + drawLeft, drawRight, drawTop, drawBottom, + tmp; + + // in horizontal mode, we start the bar from the left + // instead of from the bottom so it appears to be + // horizontal rather than vertical + if (horizontal) { + drawBottom = drawRight = drawTop = true; + drawLeft = false; + left = b; + right = x; + top = y + barLeft; + bottom = y + barRight; + + // account for negative bars + if (right < left) { + tmp = right; + right = left; + left = tmp; + drawLeft = true; + drawRight = false; + } + } + else { + drawLeft = drawRight = drawTop = true; + drawBottom = false; + left = x + barLeft; + right = x + barRight; + bottom = b; + top = y; + + // account for negative bars + if (top < bottom) { + tmp = top; + top = bottom; + bottom = tmp; + drawBottom = true; + drawTop = false; + } + } + + // clip + if (right < axisx.min || left > axisx.max || + top < axisy.min || bottom > axisy.max) + return; + + if (left < axisx.min) { + left = axisx.min; + drawLeft = false; + } + + if (right > axisx.max) { + right = axisx.max; + drawRight = false; + } + + if (bottom < axisy.min) { + bottom = axisy.min; + drawBottom = false; + } + + if (top > axisy.max) { + top = axisy.max; + drawTop = false; + } + + left = axisx.p2c(left); + bottom = axisy.p2c(bottom); + right = axisx.p2c(right); + top = axisy.p2c(top); + + // fill the bar + if (fillStyleCallback) { + c.beginPath(); + c.moveTo(left, bottom); + c.lineTo(left, top); + c.lineTo(right, top); + c.lineTo(right, bottom); + c.fillStyle = fillStyleCallback(bottom, top); + c.fill(); + } + + // draw outline + if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) { + c.beginPath(); + + // FIXME: inline moveTo is buggy with excanvas + c.moveTo(left, bottom + offset); + if (drawLeft) + c.lineTo(left, top + offset); + else + c.moveTo(left, top + offset); + if (drawTop) + c.lineTo(right, top + offset); + else + c.moveTo(right, top + offset); + if (drawRight) + c.lineTo(right, bottom + offset); + else + c.moveTo(right, bottom + offset); + if (drawBottom) + c.lineTo(left, bottom + offset); + else + c.moveTo(left, bottom + offset); + c.stroke(); + } + } + + function drawSeriesBars(series) { + function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) { + var points = datapoints.points, ps = datapoints.pointsize; + + for (var i = 0; i < points.length; i += ps) { + if (points[i] == null) + continue; + drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth); + } + } + + ctx.save(); + ctx.translate(plotOffset.left, plotOffset.top); + + // FIXME: figure out a way to add shadows (for instance along the right edge) + ctx.lineWidth = series.bars.lineWidth; + ctx.strokeStyle = series.color; + + var barLeft; + + switch (series.bars.align) { + case "left": + barLeft = 0; + break; + case "right": + barLeft = -series.bars.barWidth; + break; + case "center": + barLeft = -series.bars.barWidth / 2; + break; + default: + throw new Error("Invalid bar alignment: " + series.bars.align); + } + + var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null; + plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis); + ctx.restore(); + } + + function getFillStyle(filloptions, seriesColor, bottom, top) { + var fill = filloptions.fill; + if (!fill) + return null; + + if (filloptions.fillColor) + return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor); + + var c = $.color.parse(seriesColor); + c.a = typeof fill == "number" ? fill : 0.4; + c.normalize(); + return c.toString(); + } + + function insertLegend() { + + placeholder.find(".legend").remove(); + + if (!options.legend.show) + return; + + var fragments = [], entries = [], rowStarted = false, + lf = options.legend.labelFormatter, s, label; + + // Build a list of legend entries, with each having a label and a color + + for (var i = 0; i < series.length; ++i) { + s = series[i]; + if (s.label) { + label = lf ? lf(s.label, s) : s.label; + if (label) { + entries.push({ + label: label, + color: s.color + }); + } + } + } + + // Sort the legend using either the default or a custom comparator + + if (options.legend.sorted) { + if ($.isFunction(options.legend.sorted)) { + entries.sort(options.legend.sorted); + } else if (options.legend.sorted == "reverse") { + entries.reverse(); + } else { + var ascending = options.legend.sorted != "descending"; + entries.sort(function(a, b) { + return a.label == b.label ? 0 : ( + (a.label < b.label) != ascending ? 1 : -1 // Logical XOR + ); + }); + } + } + + // Generate markup for the list of entries, in their final order + + for (var i = 0; i < entries.length; ++i) { + + var entry = entries[i]; + + if (i % options.legend.noColumns == 0) { + if (rowStarted) + fragments.push('</tr>'); + fragments.push('<tr>'); + rowStarted = true; + } + + fragments.push( + '<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden"></div></div></td>' + + '<td class="legendLabel">' + entry.label + '</td>' + ); + } + + if (rowStarted) + fragments.push('</tr>'); + + if (fragments.length == 0) + return; + + var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>'; + if (options.legend.container != null) + $(options.legend.container).html(table); + else { + var pos = "", + p = options.legend.position, + m = options.legend.margin; + if (m[0] == null) + m = [m, m]; + if (p.charAt(0) == "n") + pos += 'top:' + (m[1] + plotOffset.top) + 'px;'; + else if (p.charAt(0) == "s") + pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;'; + if (p.charAt(1) == "e") + pos += 'right:' + (m[0] + plotOffset.right) + 'px;'; + else if (p.charAt(1) == "w") + pos += 'left:' + (m[0] + plotOffset.left) + 'px;'; + var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder); + if (options.legend.backgroundOpacity != 0.0) { + // put in the transparent background + // separately to avoid blended labels and + // label boxes + var c = options.legend.backgroundColor; + if (c == null) { + c = options.grid.backgroundColor; + if (c && typeof c == "string") + c = $.color.parse(c); + else + c = $.color.extract(legend, 'background-color'); + c.a = 1; + c = c.toString(); + } + var div = legend.children(); + $('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity); + } + } + } + + + // interactive features + + var highlights = [], + redrawTimeout = null; + + // returns the data item the mouse is over, or null if none is found + function findNearbyItem(mouseX, mouseY, seriesFilter) { + var maxDistance = options.grid.mouseActiveRadius, + smallestDistance = maxDistance * maxDistance + 1, + item = null, foundPoint = false, i, j, ps; + + for (i = series.length - 1; i >= 0; --i) { + if (!seriesFilter(series[i])) + continue; + + var s = series[i], + axisx = s.xaxis, + axisy = s.yaxis, + points = s.datapoints.points, + mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster + my = axisy.c2p(mouseY), + maxx = maxDistance / axisx.scale, + maxy = maxDistance / axisy.scale; + + ps = s.datapoints.pointsize; + // with inverse transforms, we can't use the maxx/maxy + // optimization, sadly + if (axisx.options.inverseTransform) + maxx = Number.MAX_VALUE; + if (axisy.options.inverseTransform) + maxy = Number.MAX_VALUE; + + if (s.lines.show || s.points.show) { + for (j = 0; j < points.length; j += ps) { + var x = points[j], y = points[j + 1]; + if (x == null) + continue; + + // For points and lines, the cursor must be within a + // certain distance to the data point + if (x - mx > maxx || x - mx < -maxx || + y - my > maxy || y - my < -maxy) + continue; + + // We have to calculate distances in pixels, not in + // data units, because the scales of the axes may be different + var dx = Math.abs(axisx.p2c(x) - mouseX), + dy = Math.abs(axisy.p2c(y) - mouseY), + dist = dx * dx + dy * dy; // we save the sqrt + + // use <= to ensure last point takes precedence + // (last generally means on top of) + if (dist < smallestDistance) { + smallestDistance = dist; + item = [i, j / ps]; + } + } + } + + if (s.bars.show && !item) { // no other point can be nearby + var barLeft = s.bars.align == "left" ? 0 : -s.bars.barWidth/2, + barRight = barLeft + s.bars.barWidth; + + for (j = 0; j < points.length; j += ps) { + var x = points[j], y = points[j + 1], b = points[j + 2]; + if (x == null) + continue; + + // for a bar graph, the cursor must be inside the bar + if (series[i].bars.horizontal ? + (mx <= Math.max(b, x) && mx >= Math.min(b, x) && + my >= y + barLeft && my <= y + barRight) : + (mx >= x + barLeft && mx <= x + barRight && + my >= Math.min(b, y) && my <= Math.max(b, y))) + item = [i, j / ps]; + } + } + } + + if (item) { + i = item[0]; + j = item[1]; + ps = series[i].datapoints.pointsize; + + return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps), + dataIndex: j, + series: series[i], + seriesIndex: i }; + } + + return null; + } + + function onMouseMove(e) { + if (options.grid.hoverable) + triggerClickHoverEvent("plothover", e, + function (s) { return s["hoverable"] != false; }); + } + + function onMouseLeave(e) { + if (options.grid.hoverable) + triggerClickHoverEvent("plothover", e, + function (s) { return false; }); + } + + function onClick(e) { + triggerClickHoverEvent("plotclick", e, + function (s) { return s["clickable"] != false; }); + } + + // trigger click or hover event (they send the same parameters + // so we share their code) + function triggerClickHoverEvent(eventname, event, seriesFilter) { + var offset = eventHolder.offset(), + canvasX = event.pageX - offset.left - plotOffset.left, + canvasY = event.pageY - offset.top - plotOffset.top, + pos = canvasToAxisCoords({ left: canvasX, top: canvasY }); + + pos.pageX = event.pageX; + pos.pageY = event.pageY; + + var item = findNearbyItem(canvasX, canvasY, seriesFilter); + + if (item) { + // fill in mouse pos for any listeners out there + item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10); + item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10); + } + + if (options.grid.autoHighlight) { + // clear auto-highlights + for (var i = 0; i < highlights.length; ++i) { + var h = highlights[i]; + if (h.auto == eventname && + !(item && h.series == item.series && + h.point[0] == item.datapoint[0] && + h.point[1] == item.datapoint[1])) + unhighlight(h.series, h.point); + } + + if (item) + highlight(item.series, item.datapoint, eventname); + } + + placeholder.trigger(eventname, [ pos, item ]); + } + + function triggerRedrawOverlay() { + var t = options.interaction.redrawOverlayInterval; + if (t == -1) { // skip event queue + drawOverlay(); + return; + } + + if (!redrawTimeout) + redrawTimeout = setTimeout(drawOverlay, t); + } + + function drawOverlay() { + redrawTimeout = null; + + // draw highlights + octx.save(); + overlay.clear(); + octx.translate(plotOffset.left, plotOffset.top); + + var i, hi; + for (i = 0; i < highlights.length; ++i) { + hi = highlights[i]; + + if (hi.series.bars.show) + drawBarHighlight(hi.series, hi.point); + else + drawPointHighlight(hi.series, hi.point); + } + octx.restore(); + + executeHooks(hooks.drawOverlay, [octx]); + } + + function highlight(s, point, auto) { + if (typeof s == "number") + s = series[s]; + + if (typeof point == "number") { + var ps = s.datapoints.pointsize; + point = s.datapoints.points.slice(ps * point, ps * (point + 1)); + } + + var i = indexOfHighlight(s, point); + if (i == -1) { + highlights.push({ series: s, point: point, auto: auto }); + + triggerRedrawOverlay(); + } + else if (!auto) + highlights[i].auto = false; + } + + function unhighlight(s, point) { + if (s == null && point == null) { + highlights = []; + triggerRedrawOverlay(); + return; + } + + if (typeof s == "number") + s = series[s]; + + if (typeof point == "number") { + var ps = s.datapoints.pointsize; + point = s.datapoints.points.slice(ps * point, ps * (point + 1)); + } + + var i = indexOfHighlight(s, point); + if (i != -1) { + highlights.splice(i, 1); + + triggerRedrawOverlay(); + } + } + + function indexOfHighlight(s, p) { + for (var i = 0; i < highlights.length; ++i) { + var h = highlights[i]; + if (h.series == s && h.point[0] == p[0] + && h.point[1] == p[1]) + return i; + } + return -1; + } + + function drawPointHighlight(series, point) { + var x = point[0], y = point[1], + axisx = series.xaxis, axisy = series.yaxis, + highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(); + + if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max) + return; + + var pointRadius = series.points.radius + series.points.lineWidth / 2; + octx.lineWidth = pointRadius; + octx.strokeStyle = highlightColor; + var radius = 1.5 * pointRadius; + x = axisx.p2c(x); + y = axisy.p2c(y); + + octx.beginPath(); + if (series.points.symbol == "circle") + octx.arc(x, y, radius, 0, 2 * Math.PI, false); + else + series.points.symbol(octx, x, y, radius, false); + octx.closePath(); + octx.stroke(); + } + + function drawBarHighlight(series, point) { + var highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(), + fillStyle = highlightColor, + barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2; + + octx.lineWidth = series.bars.lineWidth; + octx.strokeStyle = highlightColor; + + drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth, + 0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth); + } + + function getColorOrGradient(spec, bottom, top, defaultColor) { + if (typeof spec == "string") + return spec; + else { + // assume this is a gradient spec; IE currently only + // supports a simple vertical gradient properly, so that's + // what we support too + var gradient = ctx.createLinearGradient(0, top, 0, bottom); + + for (var i = 0, l = spec.colors.length; i < l; ++i) { + var c = spec.colors[i]; + if (typeof c != "string") { + var co = $.color.parse(defaultColor); + if (c.brightness != null) + co = co.scale('rgb', c.brightness); + if (c.opacity != null) + co.a *= c.opacity; + c = co.toString(); + } + gradient.addColorStop(i / (l - 1), c); + } + + return gradient; + } + } + } + + // Add the plot function to the top level of the jQuery object + + $.plot = function(placeholder, data, options) { + //var t0 = new Date(); + var plot = new Plot($(placeholder), data, options, $.plot.plugins); + //(window.console ? console.log : alert)("time used (msecs): " + ((new Date()).getTime() - t0.getTime())); + return plot; + }; + + $.plot.version = "0.8.1"; + + $.plot.plugins = []; + + // Also add the plot function as a chainable property + + $.fn.plot = function(data, options) { + return this.each(function() { + $.plot(this, data, options); + }); + }; + + // round to nearby lower multiple of base + function floorInBase(n, base) { + return base * Math.floor(n / base); + } + +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.min.js new file mode 100644 index 0000000..3706512 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.min.js @@ -0,0 +1,29 @@ +/* Javascript plotting library for jQuery, version 0.8.1. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +*/// first an inline dependency, jquery.colorhelpers.js, we inline it here +// for convenience +/* Plugin for jQuery for working with colors. + * + * Version 1.1. + * + * Inspiration from jQuery color animation plugin by John Resig. + * + * Released under the MIT license by Ole Laursen, October 2009. + * + * Examples: + * + * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() + * var c = $.color.extract($("#mydiv"), 'background-color'); + * console.log(c.r, c.g, c.b, c.a); + * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" + * + * Note that .scale() and .add() return the same modified object + * instead of making a new one. + * + * V. 1.1: Fix error handling so e.g. parsing an empty string does + * produce a color rather than just crashing. + */(function(e){e.color={},e.color.make=function(t,n,r,i){var s={};return s.r=t||0,s.g=n||0,s.b=r||0,s.a=i!=null?i:1,s.add=function(e,t){for(var n=0;n<e.length;++n)s[e.charAt(n)]+=t;return s.normalize()},s.scale=function(e,t){for(var n=0;n<e.length;++n)s[e.charAt(n)]*=t;return s.normalize()},s.toString=function(){return s.a>=1?"rgb("+[s.r,s.g,s.b].join(",")+")":"rgba("+[s.r,s.g,s.b,s.a].join(",")+")"},s.normalize=function(){function e(e,t,n){return t<e?e:t>n?n:t}return s.r=e(0,parseInt(s.r),255),s.g=e(0,parseInt(s.g),255),s.b=e(0,parseInt(s.b),255),s.a=e(0,s.a,1),s},s.clone=function(){return e.color.make(s.r,s.b,s.g,s.a)},s.normalize()},e.color.extract=function(t,n){var r;do{r=t.css(n).toLowerCase();if(r!=""&&r!="transparent")break;t=t.parent()}while(!e.nodeName(t.get(0),"body"));return r=="rgba(0, 0, 0, 0)"&&(r="transparent"),e.color.parse(r)},e.color.parse=function(n){var r,i=e.color.make;if(r=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return i(parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10));if(r=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(n))return i(parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10),parseFloat(r[4]));if(r=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return i(parseFloat(r[1])*2.55,parseFloat(r[2])*2.55,parseFloat(r[3])*2.55);if(r=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(n))return i(parseFloat(r[1])*2.55,parseFloat(r[2])*2.55,parseFloat(r[3])*2.55,parseFloat(r[4]));if(r=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return i(parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16));if(r=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return i(parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16));var s=e.trim(n).toLowerCase();return s=="transparent"?i(255,255,255,0):(r=t[s]||[0,0,0],i(r[0],r[1],r[2]))};var t={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery),function(e){function n(t,n){var r=n.children("."+t)[0];if(r==null){r=document.createElement("canvas"),r.className=t,e(r).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(n);if(!r.getContext){if(!window.G_vmlCanvasManager)throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.");r=window.G_vmlCanvasManager.initElement(r)}}this.element=r;var i=this.context=r.getContext("2d"),s=window.devicePixelRatio||1,o=i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1;this.pixelRatio=s/o,this.resize(n.width(),n.height()),this.textContainer=null,this.text={},this._textCache={}}function r(t,r,s,o){function E(e,t){t=[w].concat(t);for(var n=0;n<e.length;++n)e[n].apply(this,t)}function S(){var t={Canvas:n};for(var r=0;r<o.length;++r){var i=o[r];i.init(w,t),i.options&&e.extend(!0,a,i.options)}}function x(n){e.extend(!0,a,n),n&&n.colors&&(a.colors=n.colors),a.xaxis.color==null&&(a.xaxis.color=e.color.parse(a.grid.color).scale("a",.22).toString()),a.yaxis.color==null&&(a.yaxis.color=e.color.parse(a.grid.color).scale("a",.22).toString()),a.xaxis.tickColor==null&&(a.xaxis.tickColor=a.grid.tickColor||a.xaxis.color),a.yaxis.tickColor==null&&(a.yaxis.tickColor=a.grid.tickColor||a.yaxis.color),a.grid.borderColor==null&&(a.grid.borderColor=a.grid.color),a.grid.tickColor==null&&(a.grid.tickColor=e.color.parse(a.grid.color).scale("a",.22).toString());var r,i,s,o={style:t.css("font-style"),size:Math.round(.8*(+t.css("font-size").replace("px","")||13)),variant:t.css("font-variant"),weight:t.css("font-weight"),family:t.css("font-family")};o.lineHeight=o.size*1.15,s=a.xaxes.length||1;for(r=0;r<s;++r)i=a.xaxes[r],i&&!i.tickColor&&(i.tickColor=i.color),i=e.extend(!0,{},a.xaxis,i),a.xaxes[r]=i,i.font&&(i.font=e.extend({},o,i.font),i.font.color||(i.font.color=i.color));s=a.yaxes.length||1;for(r=0;r<s;++r)i=a.yaxes[r],i&&!i.tickColor&&(i.tickColor=i.color),i=e.extend(!0,{},a.yaxis,i),a.yaxes[r]=i,i.font&&(i.font=e.extend({},o,i.font),i.font.color||(i.font.color=i.color));a.xaxis.noTicks&&a.xaxis.ticks==null&&(a.xaxis.ticks=a.xaxis.noTicks),a.yaxis.noTicks&&a.yaxis.ticks==null&&(a.yaxis.ticks=a.yaxis.noTicks),a.x2axis&&(a.xaxes[1]=e.extend(!0,{},a.xaxis,a.x2axis),a.xaxes[1].position="top"),a.y2axis&&(a.yaxes[1]=e.extend(!0,{},a.yaxis,a.y2axis),a.yaxes[1].position="right"),a.grid.coloredAreas&&(a.grid.markings=a.grid.coloredAreas),a.grid.coloredAreasColor&&(a.grid.markingsColor=a.grid.coloredAreasColor),a.lines&&e.extend(!0,a.series.lines,a.lines),a.points&&e.extend(!0,a.series.points,a.points),a.bars&&e.extend(!0,a.series.bars,a.bars),a.shadowSize!=null&&(a.series.shadowSize=a.shadowSize),a.highlightColor!=null&&(a.series.highlightColor=a.highlightColor);for(r=0;r<a.xaxes.length;++r)O(d,r+1).options=a.xaxes[r];for(r=0;r<a.yaxes.length;++r)O(v,r+1).options=a.yaxes[r];for(var u in b)a.hooks[u]&&a.hooks[u].length&&(b[u]=b[u].concat(a.hooks[u]));E(b.processOptions,[a])}function T(e){u=N(e),M(),_()}function N(t){var n=[];for(var r=0;r<t.length;++r){var i=e.extend(!0,{},a.series);t[r].data!=null?(i.data=t[r].data,delete t[r].data,e.extend(!0,i,t[r]),t[r].data=i.data):i.data=t[r],n.push(i)}return n}function C(e,t){var n=e[t+"axis"];return typeof n=="object"&&(n=n.n),typeof n!="number"&&(n=1),n}function k(){return e.grep(d.concat(v),function(e){return e})}function L(e){var t={},n,r;for(n=0;n<d.length;++n)r=d[n],r&&r.used&&(t["x"+r.n]=r.c2p(e.left));for(n=0;n<v.length;++n)r=v[n],r&&r.used&&(t["y"+r.n]=r.c2p(e.top));return t.x1!==undefined&&(t.x=t.x1),t.y1!==undefined&&(t.y=t.y1),t}function A(e){var t={},n,r,i;for(n=0;n<d.length;++n){r=d[n];if(r&&r.used){i="x"+r.n,e[i]==null&&r.n==1&&(i="x");if(e[i]!=null){t.left=r.p2c(e[i]);break}}}for(n=0;n<v.length;++n){r=v[n];if(r&&r.used){i="y"+r.n,e[i]==null&&r.n==1&&(i="y");if(e[i]!=null){t.top=r.p2c(e[i]);break}}}return t}function O(t,n){return t[n-1]||(t[n-1]={n:n,direction:t==d?"x":"y",options:e.extend(!0,{},t==d?a.xaxis:a.yaxis)}),t[n-1]}function M(){var t=u.length,n=-1,r;for(r=0;r<u.length;++r){var i=u[r].color;i!=null&&(t--,typeof i=="number"&&i>n&&(n=i))}t<=n&&(t=n+1);var s,o=[],f=a.colors,l=f.length,c=0;for(r=0;r<t;r++)s=e.color.parse(f[r%l]||"#666"),r%l==0&&r&&(c>=0?c<.5?c=-c-.2:c=0:c=-c),o[r]=s.scale("rgb",1+c);var h=0,p;for(r=0;r<u.length;++r){p=u[r],p.color==null?(p.color=o[h].toString(),++h):typeof p.color=="number"&&(p.color=o[p.color].toString());if(p.lines.show==null){var m,g=!0;for(m in p)if(p[m]&&p[m].show){g=!1;break}g&&(p.lines.show=!0)}p.lines.zero==null&&(p.lines.zero=!!p.lines.fill),p.xaxis=O(d,C(p,"x")),p.yaxis=O(v,C(p,"y"))}}function _(){function x(e,t,n){t<e.datamin&&t!=-r&&(e.datamin=t),n>e.datamax&&n!=r&&(e.datamax=n)}var t=Number.POSITIVE_INFINITY,n=Number.NEGATIVE_INFINITY,r=Number.MAX_VALUE,i,s,o,a,f,l,c,h,p,d,v,m,g,y,w,S;e.each(k(),function(e,r){r.datamin=t,r.datamax=n,r.used=!1});for(i=0;i<u.length;++i)l=u[i],l.datapoints={points:[]},E(b.processRawData,[l,l.data,l.datapoints]);for(i=0;i<u.length;++i){l=u[i],w=l.data,S=l.datapoints.format;if(!S){S=[],S.push({x:!0,number:!0,required:!0}),S.push({y:!0,number:!0,required:!0});if(l.bars.show||l.lines.show&&l.lines.fill){var T=!!(l.bars.show&&l.bars.zero||l.lines.show&&l.lines.zero);S.push({y:!0,number:!0,required:!1,defaultValue:0,autoscale:T}),l.bars.horizontal&&(delete S[S.length-1].y,S[S.length-1].x=!0)}l.datapoints.format=S}if(l.datapoints.pointsize!=null)continue;l.datapoints.pointsize=S.length,h=l.datapoints.pointsize,c=l.datapoints.points;var N=l.lines.show&&l.lines.steps;l.xaxis.used=l.yaxis.used=!0;for(s=o=0;s<w.length;++s,o+=h){y=w[s];var C=y==null;if(!C)for(a=0;a<h;++a)m=y[a],g=S[a],g&&(g.number&&m!=null&&(m=+m,isNaN(m)?m=null:m==Infinity?m=r:m==-Infinity&&(m=-r)),m==null&&(g.required&&(C=!0),g.defaultValue!=null&&(m=g.defaultValue))),c[o+a]=m;if(C)for(a=0;a<h;++a)m=c[o+a],m!=null&&(g=S[a],g.autoscale&&(g.x&&x(l.xaxis,m,m),g.y&&x(l.yaxis,m,m))),c[o+a]=null;else if(N&&o>0&&c[o-h]!=null&&c[o-h]!=c[o]&&c[o-h+1]!=c[o+1]){for(a=0;a<h;++a)c[o+h+a]=c[o+a];c[o+1]=c[o-h+1],o+=h}}}for(i=0;i<u.length;++i)l=u[i],E(b.processDatapoints,[l,l.datapoints]);for(i=0;i<u.length;++i){l=u[i],c=l.datapoints.points,h=l.datapoints.pointsize,S=l.datapoints.format;var L=t,A=t,O=n,M=n;for(s=0;s<c.length;s+=h){if(c[s]==null)continue;for(a=0;a<h;++a){m=c[s+a],g=S[a];if(!g||g.autoscale===!1||m==r||m==-r)continue;g.x&&(m<L&&(L=m),m>O&&(O=m)),g.y&&(m<A&&(A=m),m>M&&(M=m))}}if(l.bars.show){var _;switch(l.bars.align){case"left":_=0;break;case"right":_=-l.bars.barWidth;break;case"center":_=-l.bars.barWidth/2;break;default:throw new Error("Invalid bar alignment: "+l.bars.align)}l.bars.horizontal?(A+=_,M+=_+l.bars.barWidth):(L+=_,O+=_+l.bars.barWidth)}x(l.xaxis,L,O),x(l.yaxis,A,M)}e.each(k(),function(e,r){r.datamin==t&&(r.datamin=null),r.datamax==n&&(r.datamax=null)})}function D(){t.css("padding",0).children(":not(.flot-base,.flot-overlay)").remove(),t.css("position")=="static"&&t.css("position","relative"),f=new n("flot-base",t),l=new n("flot-overlay",t),h=f.context,p=l.context,c=e(l.element).unbind();var r=t.data("plot");r&&(r.shutdown(),l.clear()),t.data("plot",w)}function P(){a.grid.hoverable&&(c.mousemove(at),c.bind("mouseleave",ft)),a.grid.clickable&&c.click(lt),E(b.bindEvents,[c])}function H(){ot&&clearTimeout(ot),c.unbind("mousemove",at),c.unbind("mouseleave",ft),c.unbind("click",lt),E(b.shutdown,[c])}function B(e){function t(e){return e}var n,r,i=e.options.transform||t,s=e.options.inverseTransform;e.direction=="x"?(n=e.scale=g/Math.abs(i(e.max)-i(e.min)),r=Math.min(i(e.max),i(e.min))):(n=e.scale=y/Math.abs(i(e.max)-i(e.min)),n=-n,r=Math.max(i(e.max),i(e.min))),i==t?e.p2c=function(e){return(e-r)*n}:e.p2c=function(e){return(i(e)-r)*n},s?e.c2p=function(e){return s(r+e/n)}:e.c2p=function(e){return r+e/n}}function j(e){var t=e.options,n=e.ticks||[],r=t.labelWidth||0,i=t.labelHeight||0,s=r||e.direction=="x"?Math.floor(f.width/(n.length||1)):null;legacyStyles=e.direction+"Axis "+e.direction+e.n+"Axis",layer="flot-"+e.direction+"-axis flot-"+e.direction+e.n+"-axis "+legacyStyles,font=t.font||"flot-tick-label tickLabel";for(var o=0;o<n.length;++o){var u=n[o];if(!u.label)continue;var a=f.getTextInfo(layer,u.label,font,null,s);r=Math.max(r,a.width),i=Math.max(i,a.height)}e.labelWidth=t.labelWidth||r,e.labelHeight=t.labelHeight||i}function F(t){var n=t.labelWidth,r=t.labelHeight,i=t.options.position,s=t.options.tickLength,o=a.grid.axisMargin,u=a.grid.labelMargin,l=t.direction=="x"?d:v,c,h,p=e.grep(l,function(e){return e&&e.options.position==i&&e.reserveSpace});e.inArray(t,p)==p.length-1&&(o=0);if(s==null){var g=e.grep(l,function(e){return e&&e.reserveSpace});h=e.inArray(t,g)==0,h?s="full":s=5}isNaN(+s)||(u+=+s),t.direction=="x"?(r+=u,i=="bottom"?(m.bottom+=r+o,t.box={top:f.height-m.bottom,height:r}):(t.box={top:m.top+o,height:r},m.top+=r+o)):(n+=u,i=="left"?(t.box={left:m.left+o,width:n},m.left+=n+o):(m.right+=n+o,t.box={left:f.width-m.right,width:n})),t.position=i,t.tickLength=s,t.box.padding=u,t.innermost=h}function I(e){e.direction=="x"?(e.box.left=m.left-e.labelWidth/2,e.box.width=f.width-m.left-m.right+e.labelWidth):(e.box.top=m.top-e.labelHeight/2,e.box.height=f.height-m.bottom-m.top+e.labelHeight)}function q(){var t=a.grid.minBorderMargin,n={x:0,y:0},r,i;if(t==null){t=0;for(r=0;r<u.length;++r)t=Math.max(t,2*(u[r].points.radius+u[r].points.lineWidth/2))}n.x=n.y=Math.ceil(t),e.each(k(),function(e,t){var r=t.direction;t.reserveSpace&&(n[r]=Math.ceil(Math.max(n[r],(r=="x"?t.labelWidth:t.labelHeight)/2)))}),m.left=Math.max(n.x,m.left),m.right=Math.max(n.x,m.right),m.top=Math.max(n.y,m.top),m.bottom=Math.max(n.y,m.bottom)}function R(){var t,n=k(),r=a.grid.show;for(var i in m){var s=a.grid.margin||0;m[i]=typeof s=="number"?s:s[i]||0}E(b.processOffset,[m]);for(var i in m)typeof a.grid.borderWidth=="object"?m[i]+=r?a.grid.borderWidth[i]:0:m[i]+=r?a.grid.borderWidth:0;e.each(n,function(e,t){t.show=t.options.show,t.show==null&&(t.show=t.used),t.reserveSpace=t.show||t.options.reserveSpace,U(t)});if(r){var o=e.grep(n,function(e){return e.reserveSpace});e.each(o,function(e,t){z(t),W(t),X(t,t.ticks),j(t)});for(t=o.length-1;t>=0;--t)F(o[t]);q(),e.each(o,function(e,t){I(t)})}g=f.width-m.left-m.right,y=f.height-m.bottom-m.top,e.each(n,function(e,t){B(t)}),r&&G(),it()}function U(e){var t=e.options,n=+(t.min!=null?t.min:e.datamin),r=+(t.max!=null?t.max:e.datamax),i=r-n;if(i==0){var s=r==0?1:.01;t.min==null&&(n-=s);if(t.max==null||t.min!=null)r+=s}else{var o=t.autoscaleMargin;o!=null&&(t.min==null&&(n-=i*o,n<0&&e.datamin!=null&&e.datamin>=0&&(n=0)),t.max==null&&(r+=i*o,r>0&&e.datamax!=null&&e.datamax<=0&&(r=0)))}e.min=n,e.max=r}function z(t){var n=t.options,r;typeof n.ticks=="number"&&n.ticks>0?r=n.ticks:r=.3*Math.sqrt(t.direction=="x"?f.width:f.height);var s=(t.max-t.min)/r,o=-Math.floor(Math.log(s)/Math.LN10),u=n.tickDecimals;u!=null&&o>u&&(o=u);var a=Math.pow(10,-o),l=s/a,c;l<1.5?c=1:l<3?(c=2,l>2.25&&(u==null||o+1<=u)&&(c=2.5,++o)):l<7.5?c=5:c=10,c*=a,n.minTickSize!=null&&c<n.minTickSize&&(c=n.minTickSize),t.delta=s,t.tickDecimals=Math.max(0,u!=null?u:o),t.tickSize=n.tickSize||c;if(n.mode=="time"&&!t.tickGenerator)throw new Error("Time mode requires the flot.time plugin.");t.tickGenerator||(t.tickGenerator=function(e){var t=[],n=i(e.min,e.tickSize),r=0,s=Number.NaN,o;do o=s,s=n+r*e.tickSize,t.push(s),++r;while(s<e.max&&s!=o);return t},t.tickFormatter=function(e,t){var n=t.tickDecimals?Math.pow(10,t.tickDecimals):1,r=""+Math.round(e*n)/n;if(t.tickDecimals!=null){var i=r.indexOf("."),s=i==-1?0:r.length-i-1;if(s<t.tickDecimals)return(s?r:r+".")+(""+n).substr(1,t.tickDecimals-s)}return r}),e.isFunction(n.tickFormatter)&&(t.tickFormatter=function(e,t){return""+n.tickFormatter(e,t)});if(n.alignTicksWithAxis!=null){var h=(t.direction=="x"?d:v)[n.alignTicksWithAxis-1];if(h&&h.used&&h!=t){var p=t.tickGenerator(t);p.length>0&&(n.min==null&&(t.min=Math.min(t.min,p[0])),n.max==null&&p.length>1&&(t.max=Math.max(t.max,p[p.length-1]))),t.tickGenerator=function(e){var t=[],n,r;for(r=0;r<h.ticks.length;++r)n=(h.ticks[r].v-h.min)/(h.max-h.min),n=e.min+n*(e.max-e.min),t.push(n);return t};if(!t.mode&&n.tickDecimals==null){var m=Math.max(0,-Math.floor(Math.log(t.delta)/Math.LN10)+1),g=t.tickGenerator(t);g.length>1&&/\..*0$/.test((g[1]-g[0]).toFixed(m))||(t.tickDecimals=m)}}}}function W(t){var n=t.options.ticks,r=[];n==null||typeof n=="number"&&n>0?r=t.tickGenerator(t):n&&(e.isFunction(n)?r=n(t):r=n);var i,s;t.ticks=[];for(i=0;i<r.length;++i){var o=null,u=r[i];typeof u=="object"?(s=+u[0],u.length>1&&(o=u[1])):s=+u,o==null&&(o=t.tickFormatter(s,t)),isNaN(s)||t.ticks.push({v:s,label:o})}}function X(e,t){e.options.autoscaleMargin&&t.length>0&&(e.options.min==null&&(e.min=Math.min(e.min,t[0].v)),e.options.max==null&&t.length>1&&(e.max=Math.max(e.max,t[t.length-1].v)))}function V(){f.clear(),E(b.drawBackground,[h]);var e=a.grid;e.show&&e.backgroundColor&&K(),e.show&&!e.aboveData&&Q();for(var t=0;t<u.length;++t)E(b.drawSeries,[h,u[t]]),Y(u[t]);E(b.draw,[h]),e.show&&e.aboveData&&Q(),f.render(),ht()}function J(e,t){var n,r,i,s,o=k();for(var u=0;u<o.length;++u){n=o[u];if(n.direction==t){s=t+n.n+"axis",!e[s]&&n.n==1&&(s=t+"axis");if(e[s]){r=e[s].from,i=e[s].to;break}}}e[s]||(n=t=="x"?d[0]:v[0],r=e[t+"1"],i=e[t+"2"]);if(r!=null&&i!=null&&r>i){var a=r;r=i,i=a}return{from:r,to:i,axis:n}}function K(){h.save(),h.translate(m.left,m.top),h.fillStyle=bt(a.grid.backgroundColor,y,0,"rgba(255, 255, 255, 0)"),h.fillRect(0,0,g,y),h.restore()}function Q(){var t,n,r,i;h.save(),h.translate(m.left,m.top);var s=a.grid.markings;if(s){e.isFunction(s)&&(n=w.getAxes(),n.xmin=n.xaxis.min,n.xmax=n.xaxis.max,n.ymin=n.yaxis.min,n.ymax=n.yaxis.max,s=s(n));for(t=0;t<s.length;++t){var o=s[t],u=J(o,"x"),f=J(o,"y");u.from==null&&(u.from=u.axis.min),u.to==null&&(u.to=u.axis.max),f.from==null&&(f.from=f.axis.min),f.to==null&&(f.to=f.axis.max);if(u.to<u.axis.min||u.from>u.axis.max||f.to<f.axis.min||f.from>f.axis.max)continue;u.from=Math.max(u.from,u.axis.min),u.to=Math.min(u.to,u.axis.max),f.from=Math.max(f.from,f.axis.min),f.to=Math.min(f.to,f.axis.max);if(u.from==u.to&&f.from==f.to)continue;u.from=u.axis.p2c(u.from),u.to=u.axis.p2c(u.to),f.from=f.axis.p2c(f.from),f.to=f.axis.p2c(f.to),u.from==u.to||f.from==f.to?(h.beginPath(),h.strokeStyle=o.color||a.grid.markingsColor,h.lineWidth=o.lineWidth||a.grid.markingsLineWidth,h.moveTo(u.from,f.from),h.lineTo(u.to,f.to),h.stroke()):(h.fillStyle=o.color||a.grid.markingsColor,h.fillRect(u.from,f.to,u.to-u.from,f.from-f.to))}}n=k(),r=a.grid.borderWidth;for(var l=0;l<n.length;++l){var c=n[l],p=c.box,d=c.tickLength,v,b,E,S;if(!c.show||c.ticks.length==0)continue;h.lineWidth=1,c.direction=="x"?(v=0,d=="full"?b=c.position=="top"?0:y:b=p.top-m.top+(c.position=="top"?p.height:0)):(b=0,d=="full"?v=c.position=="left"?0:g:v=p.left-m.left+(c.position=="left"?p.width:0)),c.innermost||(h.strokeStyle=c.options.color,h.beginPath(),E=S=0,c.direction=="x"?E=g+1:S=y+1,h.lineWidth==1&&(c.direction=="x"?b=Math.floor(b)+.5:v=Math.floor(v)+.5),h.moveTo(v,b),h.lineTo(v+E,b+S),h.stroke()),h.strokeStyle=c.options.tickColor,h.beginPath();for(t=0;t<c.ticks.length;++t){var x=c.ticks[t].v;E=S=0;if(isNaN(x)||x<c.min||x>c.max||d=="full"&&(typeof r=="object"&&r[c.position]>0||r>0)&&(x==c.min||x==c.max))continue;c.direction=="x"?(v=c.p2c(x),S=d=="full"?-y:d,c.position=="top"&&(S=-S)):(b=c.p2c(x),E=d=="full"?-g:d,c.position=="left"&&(E=-E)),h.lineWidth==1&&(c.direction=="x"?v=Math.floor(v)+.5:b=Math.floor(b)+.5),h.moveTo(v,b),h.lineTo(v+E,b+S)}h.stroke()}r&&(i=a.grid.borderColor,typeof r=="object"||typeof i=="object"?(typeof r!="object"&&(r={top:r,right:r,bottom:r,left:r}),typeof i!="object"&&(i={top:i,right:i,bottom:i,left:i}),r.top>0&&(h.strokeStyle=i.top,h.lineWidth=r.top,h.beginPath(),h.moveTo(0-r.left,0-r.top/2),h.lineTo(g,0-r.top/2),h.stroke()),r.right>0&&(h.strokeStyle=i.right,h.lineWidth=r.right,h.beginPath(),h.moveTo(g+r.right/2,0-r.top),h.lineTo(g+r.right/2,y),h.stroke()),r.bottom>0&&(h.strokeStyle=i.bottom,h.lineWidth=r.bottom,h.beginPath(),h.moveTo(g+r.right,y+r.bottom/2),h.lineTo(0,y+r.bottom/2),h.stroke()),r.left>0&&(h.strokeStyle=i.left,h.lineWidth=r.left,h.beginPath(),h.moveTo(0-r.left/2,y+r.bottom),h.lineTo(0-r.left/2,0),h.stroke())):(h.lineWidth=r,h.strokeStyle=a.grid.borderColor,h.strokeRect(-r/2,-r/2,g+r,y+r))),h.restore()}function G(){e.each(k(),function(e,t){if(!t.show||t.ticks.length==0)return;var n=t.box,r=t.direction+"Axis "+t.direction+t.n+"Axis",i="flot-"+t.direction+"-axis flot-"+t.direction+t.n+"-axis "+r,s=t.options.font||"flot-tick-label tickLabel",o,u,a,l,c;f.removeText(i);for(var h=0;h<t.ticks.length;++h){o=t.ticks[h];if(!o.label||o.v<t.min||o.v>t.max)continue;t.direction=="x"?(l="center",u=m.left+t.p2c(o.v),t.position=="bottom"?a=n.top+n.padding:(a=n.top+n.height-n.padding,c="bottom")):(c="middle",a=m.top+t.p2c(o.v),t.position=="left"?(u=n.left+n.width-n.padding,l="right"):u=n.left+n.padding),f.addText(i,u,a,o.label,s,null,null,l,c)}})}function Y(e){e.lines.show&&Z(e),e.bars.show&&nt(e),e.points.show&&et(e)}function Z(e){function t(e,t,n,r,i){var s=e.points,o=e.pointsize,u=null,a=null;h.beginPath();for(var f=o;f<s.length;f+=o){var l=s[f-o],c=s[f-o+1],p=s[f],d=s[f+1];if(l==null||p==null)continue;if(c<=d&&c<i.min){if(d<i.min)continue;l=(i.min-c)/(d-c)*(p-l)+l,c=i.min}else if(d<=c&&d<i.min){if(c<i.min)continue;p=(i.min-c)/(d-c)*(p-l)+l,d=i.min}if(c>=d&&c>i.max){if(d>i.max)continue;l=(i.max-c)/(d-c)*(p-l)+l,c=i.max}else if(d>=c&&d>i.max){if(c>i.max)continue;p=(i.max-c)/(d-c)*(p-l)+l,d=i.max}if(l<=p&&l<r.min){if(p<r.min)continue;c=(r.min-l)/(p-l)*(d-c)+c,l=r.min}else if(p<=l&&p<r.min){if(l<r.min)continue;d=(r.min-l)/(p-l)*(d-c)+c,p=r.min}if(l>=p&&l>r.max){if(p>r.max)continue;c=(r.max-l)/(p-l)*(d-c)+c,l=r.max}else if(p>=l&&p>r.max){if(l>r.max)continue;d=(r.max-l)/(p-l)*(d-c)+c,p=r.max}(l!=u||c!=a)&&h.moveTo(r.p2c(l)+t,i.p2c(c)+n),u=p,a=d,h.lineTo(r.p2c(p)+t,i.p2c(d)+n)}h.stroke()}function n(e,t,n){var r=e.points,i=e.pointsize,s=Math.min(Math.max(0,n.min),n.max),o=0,u,a=!1,f=1,l=0,c=0;for(;;){if(i>0&&o>r.length+i)break;o+=i;var p=r[o-i],d=r[o-i+f],v=r[o],m=r[o+f];if(a){if(i>0&&p!=null&&v==null){c=o,i=-i,f=2;continue}if(i<0&&o==l+i){h.fill(),a=!1,i=-i,f=1,o=l=c+i;continue}}if(p==null||v==null)continue;if(p<=v&&p<t.min){if(v<t.min)continue;d=(t.min-p)/(v-p)*(m-d)+d,p=t.min}else if(v<=p&&v<t.min){if(p<t.min)continue;m=(t.min-p)/(v-p)*(m-d)+d,v=t.min}if(p>=v&&p>t.max){if(v>t.max)continue;d=(t.max-p)/(v-p)*(m-d)+d,p=t.max}else if(v>=p&&v>t.max){if(p>t.max)continue;m=(t.max-p)/(v-p)*(m-d)+d,v=t.max}a||(h.beginPath(),h.moveTo(t.p2c(p),n.p2c(s)),a=!0);if(d>=n.max&&m>=n.max){h.lineTo(t.p2c(p),n.p2c(n.max)),h.lineTo(t.p2c(v),n.p2c(n.max));continue}if(d<=n.min&&m<=n.min){h.lineTo(t.p2c(p),n.p2c(n.min)),h.lineTo(t.p2c(v),n.p2c(n.min));continue}var g=p,y=v;d<=m&&d<n.min&&m>=n.min?(p=(n.min-d)/(m-d)*(v-p)+p,d=n.min):m<=d&&m<n.min&&d>=n.min&&(v=(n.min-d)/(m-d)*(v-p)+p,m=n.min),d>=m&&d>n.max&&m<=n.max?(p=(n.max-d)/(m-d)*(v-p)+p,d=n.max):m>=d&&m>n.max&&d<=n.max&&(v=(n.max-d)/(m-d)*(v-p)+p,m=n.max),p!=g&&h.lineTo(t.p2c(g),n.p2c(d)),h.lineTo(t.p2c(p),n.p2c(d)),h.lineTo(t.p2c(v),n.p2c(m)),v!=y&&(h.lineTo(t.p2c(v),n.p2c(m)),h.lineTo(t.p2c(y),n.p2c(m)))}}h.save(),h.translate(m.left,m.top),h.lineJoin="round";var r=e.lines.lineWidth,i=e.shadowSize;if(r>0&&i>0){h.lineWidth=i,h.strokeStyle="rgba(0,0,0,0.1)";var s=Math.PI/18;t(e.datapoints,Math.sin(s)*(r/2+i/2),Math.cos(s)*(r/2+i/2),e.xaxis,e.yaxis),h.lineWidth=i/2,t(e.datapoints,Math.sin(s)*(r/2+i/4),Math.cos(s)*(r/2+i/4),e.xaxis,e.yaxis)}h.lineWidth=r,h.strokeStyle=e.color;var o=rt(e.lines,e.color,0,y);o&&(h.fillStyle=o,n(e.datapoints,e.xaxis,e.yaxis)),r>0&&t(e.datapoints,0,0,e.xaxis,e.yaxis),h.restore()}function et(e){function t(e,t,n,r,i,s,o,u){var a=e.points,f=e.pointsize;for(var l=0;l<a.length;l+=f){var c=a[l],p=a[l+1];if(c==null||c<s.min||c>s.max||p<o.min||p>o.max)continue;h.beginPath(),c=s.p2c(c),p=o.p2c(p)+r,u=="circle"?h.arc(c,p,t,0,i?Math.PI:Math.PI*2,!1):u(h,c,p,t,i),h.closePath(),n&&(h.fillStyle=n,h.fill()),h.stroke()}}h.save(),h.translate(m.left,m.top);var n=e.points.lineWidth,r=e.shadowSize,i=e.points.radius,s=e.points.symbol;n==0&&(n=1e-4);if(n>0&&r>0){var o=r/2;h.lineWidth=o,h.strokeStyle="rgba(0,0,0,0.1)",t(e.datapoints,i,null,o+o/2,!0,e.xaxis,e.yaxis,s),h.strokeStyle="rgba(0,0,0,0.2)",t(e.datapoints,i,null,o/2,!0,e.xaxis,e.yaxis,s)}h.lineWidth=n,h.strokeStyle=e.color,t(e.datapoints,i,rt(e.points,e.color),0,!1,e.xaxis,e.yaxis,s),h.restore()}function tt(e,t,n,r,i,s,o,u,a,f,l,c){var h,p,d,v,m,g,y,b,w;l?(b=g=y=!0,m=!1,h=n,p=e,v=t+r,d=t+i,p<h&&(w=p,p=h,h=w,m=!0,g=!1)):(m=g=y=!0,b=!1,h=e+r,p=e+i,d=n,v=t,v<d&&(w=v,v=d,d=w,b=!0,y=!1));if(p<u.min||h>u.max||v<a.min||d>a.max)return;h<u.min&&(h=u.min,m=!1),p>u.max&&(p=u.max,g=!1),d<a.min&&(d=a.min,b=!1),v>a.max&&(v=a.max,y=!1),h=u.p2c(h),d=a.p2c(d),p=u.p2c(p),v=a.p2c(v),o&&(f.beginPath(),f.moveTo(h,d),f.lineTo(h,v),f.lineTo(p,v),f.lineTo(p,d),f.fillStyle=o(d,v),f.fill()),c>0&&(m||g||y||b)&&(f.beginPath(),f.moveTo(h,d+s),m?f.lineTo(h,v+s):f.moveTo(h,v+s),y?f.lineTo(p,v+s):f.moveTo(p,v+s),g?f.lineTo(p,d+s):f.moveTo(p,d+s),b?f.lineTo(h,d+s):f.moveTo(h,d+s),f.stroke())}function nt(e){function t(t,n,r,i,s,o,u){var a=t.points,f=t.pointsize;for(var l=0;l<a.length;l+=f){if(a[l]==null)continue;tt(a[l],a[l+1],a[l+2],n,r,i,s,o,u,h,e.bars.horizontal,e.bars.lineWidth)}}h.save(),h.translate(m.left,m.top),h.lineWidth=e.bars.lineWidth,h.strokeStyle=e.color;var n;switch(e.bars.align){case"left":n=0;break;case"right":n=-e.bars.barWidth;break;case"center":n=-e.bars.barWidth/2;break;default:throw new Error("Invalid bar alignment: "+e.bars.align)}var r=e.bars.fill?function(t,n){return rt(e.bars,e.color,t,n)}:null;t(e.datapoints,n,n+e.bars.barWidth,0,r,e.xaxis,e.yaxis),h.restore()}function rt(t,n,r,i){var s=t.fill;if(!s)return null;if(t.fillColor)return bt(t.fillColor,r,i,n);var o=e.color.parse(n);return o.a=typeof s=="number"?s:.4,o.normalize(),o.toString()}function it(){t.find(".legend").remove();if(!a.legend.show)return;var n=[],r=[],i=!1,s=a.legend.labelFormatter,o,f;for(var l=0;l<u.length;++l)o=u[l],o.label&&(f=s?s(o.label,o):o.label,f&&r.push({label:f,color:o.color}));if(a.legend.sorted)if(e.isFunction(a.legend.sorted))r.sort(a.legend.sorted);else if(a.legend.sorted=="reverse")r.reverse();else{var c=a.legend.sorted!="descending";r.sort(function(e,t){return e.label==t.label?0:e.label<t.label!=c?1:-1})}for(var l=0;l<r.length;++l){var h=r[l];l%a.legend.noColumns==0&&(i&&n.push("</tr>"),n.push("<tr>"),i=!0),n.push('<td class="legendColorBox"><div style="border:1px solid '+a.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+h.color+';overflow:hidden"></div></div></td>'+'<td class="legendLabel">'+h.label+"</td>")}i&&n.push("</tr>");if(n.length==0)return;var p='<table style="font-size:smaller;color:'+a.grid.color+'">'+n.join("")+"</table>";if(a.legend.container!=null)e(a.legend.container).html(p);else{var d="",v=a.legend.position,g=a.legend.margin;g[0]==null&&(g=[g,g]),v.charAt(0)=="n"?d+="top:"+(g[1]+m.top)+"px;":v.charAt(0)=="s"&&(d+="bottom:"+(g[1]+m.bottom)+"px;"),v.charAt(1)=="e"?d+="right:"+(g[0]+m.right)+"px;":v.charAt(1)=="w"&&(d+="left:"+(g[0]+m.left)+"px;");var y=e('<div class="legend">'+p.replace('style="','style="position:absolute;'+d+";")+"</div>").appendTo(t);if(a.legend.backgroundOpacity!=0){var b=a.legend.backgroundColor;b==null&&(b=a.grid.backgroundColor,b&&typeof b=="string"?b=e.color.parse(b):b=e.color.extract(y,"background-color"),b.a=1,b=b.toString());var w=y.children();e('<div style="position:absolute;width:'+w.width()+"px;height:"+w.height()+"px;"+d+"background-color:"+b+';"> </div>').prependTo(y).css("opacity",a.legend.backgroundOpacity)}}}function ut(e,t,n){var r=a.grid.mouseActiveRadius,i=r*r+1,s=null,o=!1,f,l,c;for(f=u.length-1;f>=0;--f){if(!n(u[f]))continue;var h=u[f],p=h.xaxis,d=h.yaxis,v=h.datapoints.points,m=p.c2p(e),g=d.c2p(t),y=r/p.scale,b=r/d.scale;c=h.datapoints.pointsize,p.options.inverseTransform&&(y=Number.MAX_VALUE),d.options.inverseTransform&&(b=Number.MAX_VALUE);if(h.lines.show||h.points.show)for(l=0;l<v.length;l+=c){var w=v[l],E=v[l+1];if(w==null)continue;if(w-m>y||w-m<-y||E-g>b||E-g<-b)continue;var S=Math.abs(p.p2c(w)-e),x=Math.abs(d.p2c(E)-t),T=S*S+x*x;T<i&&(i=T,s=[f,l/c])}if(h.bars.show&&!s){var N=h.bars.align=="left"?0:-h.bars.barWidth/2,C=N+h.bars.barWidth;for(l=0;l<v.length;l+=c){var w=v[l],E=v[l+1],k=v[l+2];if(w==null)continue;if(u[f].bars.horizontal?m<=Math.max(k,w)&&m>=Math.min(k,w)&&g>=E+N&&g<=E+C:m>=w+N&&m<=w+C&&g>=Math.min(k,E)&&g<=Math.max(k,E))s=[f,l/c]}}}return s?(f=s[0],l=s[1],c=u[f].datapoints.pointsize,{datapoint:u[f].datapoints.points.slice(l*c,(l+1)*c),dataIndex:l,series:u[f],seriesIndex:f}):null}function at(e){a.grid.hoverable&&ct("plothover",e,function(e){return e["hoverable"]!=0})}function ft(e){a.grid.hoverable&&ct("plothover",e,function(e){return!1})}function lt(e){ct("plotclick",e,function(e){return e["clickable"]!=0})}function ct(e,n,r){var i=c.offset(),s=n.pageX-i.left-m.left,o=n.pageY-i.top-m.top,u=L({left:s,top:o});u.pageX=n.pageX,u.pageY=n.pageY;var f=ut(s,o,r);f&&(f.pageX=parseInt(f.series.xaxis.p2c(f.datapoint[0])+i.left+m.left,10),f.pageY=parseInt(f.series.yaxis.p2c(f.datapoint[1])+i.top+m.top,10));if(a.grid.autoHighlight){for(var l=0;l<st.length;++l){var h=st[l];h.auto==e&&(!f||h.series!=f.series||h.point[0]!=f.datapoint[0]||h.point[1]!=f.datapoint[1])&&vt(h.series,h.point)}f&&dt(f.series,f.datapoint,e)}t.trigger(e,[u,f])}function ht(){var e=a.interaction.redrawOverlayInterval;if(e==-1){pt();return}ot||(ot=setTimeout(pt,e))}function pt(){ot=null,p.save(),l.clear(),p.translate(m.left,m.top);var e,t;for(e=0;e<st.length;++e)t=st[e],t.series.bars.show?yt(t.series,t.point):gt(t.series,t.point);p.restore(),E(b.drawOverlay,[p])}function dt(e,t,n){typeof e=="number"&&(e=u[e]);if(typeof t=="number"){var r=e.datapoints.pointsize;t=e.datapoints.points.slice(r*t,r*(t+1))}var i=mt(e,t);i==-1?(st.push({series:e,point:t,auto:n}),ht()):n||(st[i].auto=!1)}function vt(e,t){if(e==null&&t==null){st=[],ht();return}typeof e=="number"&&(e=u[e]);if(typeof t=="number"){var n=e.datapoints.pointsize;t=e.datapoints.points.slice(n*t,n*(t+1))}var r=mt(e,t);r!=-1&&(st.splice(r,1),ht())}function mt(e,t){for(var n=0;n<st.length;++n){var r=st[n];if(r.series==e&&r.point[0]==t[0]&&r.point[1]==t[1])return n}return-1}function gt(t,n){var r=n[0],i=n[1],s=t.xaxis,o=t.yaxis,u=typeof t.highlightColor=="string"?t.highlightColor:e.color.parse(t.color).scale("a",.5).toString();if(r<s.min||r>s.max||i<o.min||i>o.max)return;var a=t.points.radius+t.points.lineWidth/2;p.lineWidth=a,p.strokeStyle=u;var f=1.5*a;r=s.p2c(r),i=o.p2c(i),p.beginPath(),t.points.symbol=="circle"?p.arc(r,i,f,0,2*Math.PI,!1):t.points.symbol(p,r,i,f,!1),p.closePath(),p.stroke()}function yt(t,n){var r=typeof t.highlightColor=="string"?t.highlightColor:e.color.parse(t.color).scale("a",.5).toString(),i=r,s=t.bars.align=="left"?0:-t.bars.barWidth/2;p.lineWidth=t.bars.lineWidth,p.strokeStyle=r,tt(n[0],n[1],n[2]||0,s,s+t.bars.barWidth,0,function(){return i},t.xaxis,t.yaxis,p,t.bars.horizontal,t.bars.lineWidth)}function bt(t,n,r,i){if(typeof t=="string")return t;var s=h.createLinearGradient(0,r,0,n);for(var o=0,u=t.colors.length;o<u;++o){var a=t.colors[o];if(typeof a!="string"){var f=e.color.parse(i);a.brightness!=null&&(f=f.scale("rgb",a.brightness)),a.opacity!=null&&(f.a*=a.opacity),a=f.toString()}s.addColorStop(o/(u-1),a)}return s}var u=[],a={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:!0,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:.85,sorted:null},xaxis:{show:null,position:"bottom",mode:null,font:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:!1,radius:3,lineWidth:2,fill:!0,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:!1,fillColor:null,steps:!1},bars:{show:!1,lineWidth:2,barWidth:1,fill:!0,fillColor:null,align:"left",horizontal:!1,zero:!0},shadowSize:3,highlightColor:null},grid:{show:!0,aboveData:!1,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:!1,hoverable:!1,autoHighlight:!0,mouseActiveRadius:10},interaction:{redrawOverlayInterval:1e3/60},hooks:{}},f=null,l=null,c=null,h=null,p=null,d=[],v=[],m={left:0,right:0,top:0,bottom +:0},g=0,y=0,b={processOptions:[],processRawData:[],processDatapoints:[],processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},w=this;w.setData=T,w.setupGrid=R,w.draw=V,w.getPlaceholder=function(){return t},w.getCanvas=function(){return f.element},w.getPlotOffset=function(){return m},w.width=function(){return g},w.height=function(){return y},w.offset=function(){var e=c.offset();return e.left+=m.left,e.top+=m.top,e},w.getData=function(){return u},w.getAxes=function(){var t={},n;return e.each(d.concat(v),function(e,n){n&&(t[n.direction+(n.n!=1?n.n:"")+"axis"]=n)}),t},w.getXAxes=function(){return d},w.getYAxes=function(){return v},w.c2p=L,w.p2c=A,w.getOptions=function(){return a},w.highlight=dt,w.unhighlight=vt,w.triggerRedrawOverlay=ht,w.pointOffset=function(e){return{left:parseInt(d[C(e,"x")-1].p2c(+e.x)+m.left,10),top:parseInt(v[C(e,"y")-1].p2c(+e.y)+m.top,10)}},w.shutdown=H,w.resize=function(){var e=t.width(),n=t.height();f.resize(e,n),l.resize(e,n)},w.hooks=b,S(w),x(s),D(),T(r),R(),V(),P();var st=[],ot=null}function i(e,t){return t*Math.floor(e/t)}var t=Object.prototype.hasOwnProperty;n.prototype.resize=function(e,t){if(e<=0||t<=0)throw new Error("Invalid dimensions for plot, width = "+e+", height = "+t);var n=this.element,r=this.context,i=this.pixelRatio;this.width!=e&&(n.width=e*i,n.style.width=e+"px",this.width=e),this.height!=t&&(n.height=t*i,n.style.height=t+"px",this.height=t),r.restore(),r.save(),r.scale(i,i)},n.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},n.prototype.render=function(){var e=this._textCache;for(var n in e)if(t.call(e,n)){var r=this.getTextLayer(n),i=e[n];r.hide();for(var s in i)if(t.call(i,s)){var o=i[s];for(var u in o)if(t.call(o,u)){var a=o[u].positions;for(var f=0,l;l=a[f];f++)l.active?l.rendered||(r.append(l.element),l.rendered=!0):(a.splice(f--,1),l.rendered&&l.element.detach());a.length==0&&delete o[u]}}r.show()}},n.prototype.getTextLayer=function(t){var n=this.text[t];return n==null&&(this.textContainer==null&&(this.textContainer=e("<div class='flot-text'></div>").css({position:"absolute",top:0,left:0,bottom:0,right:0,"font-size":"smaller",color:"#545454"}).insertAfter(this.element)),n=this.text[t]=e("<div></div>").addClass(t).css({position:"absolute",top:0,left:0,bottom:0,right:0}).appendTo(this.textContainer)),n},n.prototype.getTextInfo=function(t,n,r,i,s){var o,u,a,f;n=""+n,typeof r=="object"?o=r.style+" "+r.variant+" "+r.weight+" "+r.size+"px/"+r.lineHeight+"px "+r.family:o=r,u=this._textCache[t],u==null&&(u=this._textCache[t]={}),a=u[o],a==null&&(a=u[o]={}),f=a[n];if(f==null){var l=e("<div></div>").html(n).css({position:"absolute","max-width":s,top:-9999}).appendTo(this.getTextLayer(t));typeof r=="object"?l.css({font:o,color:r.color}):typeof r=="string"&&l.addClass(r),f=a[n]={width:l.outerWidth(!0),height:l.outerHeight(!0),element:l,positions:[]},l.detach()}return f},n.prototype.addText=function(e,t,n,r,i,s,o,u,a){var f=this.getTextInfo(e,r,i,s,o),l=f.positions;u=="center"?t-=f.width/2:u=="right"&&(t-=f.width),a=="middle"?n-=f.height/2:a=="bottom"&&(n-=f.height);for(var c=0,h;h=l[c];c++)if(h.x==t&&h.y==n){h.active=!0;return}h={active:!0,rendered:!1,element:l.length?f.element.clone():f.element,x:t,y:n},l.push(h),h.element.css({top:Math.round(n),left:Math.round(t),"text-align":u})},n.prototype.removeText=function(e,n,r,i,s,o){if(i==null){var u=this._textCache[e];if(u!=null)for(var a in u)if(t.call(u,a)){var f=u[a];for(var l in f)if(t.call(f,l)){var c=f[l].positions;for(var h=0,p;p=c[h];h++)p.active=!1}}}else{var c=this.getTextInfo(e,i,s,o).positions;for(var h=0,p;p=c[h];h++)p.x==n&&p.y==r&&(p.active=!1)}},e.plot=function(t,n,i){var s=new r(e(t),n,i,e.plot.plugins);return s},e.plot.version="0.8.1",e.plot.plugins=[],e.fn.plot=function(t,n){return this.each(function(){e.plot(this,t,n)})}}(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.navigate.js b/public/admin/view/javascript/jquery/flot/jquery.flot.navigate.js new file mode 100644 index 0000000..10256b8 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.navigate.js @@ -0,0 +1,346 @@ +/* Flot plugin for adding the ability to pan and zoom the plot. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The default behaviour is double click and scrollwheel up/down to zoom in, drag +to pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and +plot.pan( offset ) so you easily can add custom controls. It also fires +"plotpan" and "plotzoom" events, useful for synchronizing plots. + +The plugin supports these options: + + zoom: { + interactive: false + trigger: "dblclick" // or "click" for single click + amount: 1.5 // 2 = 200% (zoom in), 0.5 = 50% (zoom out) + } + + pan: { + interactive: false + cursor: "move" // CSS mouse cursor value used when dragging, e.g. "pointer" + frameRate: 20 + } + + xaxis, yaxis, x2axis, y2axis: { + zoomRange: null // or [ number, number ] (min range, max range) or false + panRange: null // or [ number, number ] (min, max) or false + } + +"interactive" enables the built-in drag/click behaviour. If you enable +interactive for pan, then you'll have a basic plot that supports moving +around; the same for zoom. + +"amount" specifies the default amount to zoom in (so 1.5 = 150%) relative to +the current viewport. + +"cursor" is a standard CSS mouse cursor string used for visual feedback to the +user when dragging. + +"frameRate" specifies the maximum number of times per second the plot will +update itself while the user is panning around on it (set to null to disable +intermediate pans, the plot will then not update until the mouse button is +released). + +"zoomRange" is the interval in which zooming can happen, e.g. with zoomRange: +[1, 100] the zoom will never scale the axis so that the difference between min +and max is smaller than 1 or larger than 100. You can set either end to null +to ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis +will be disabled. + +"panRange" confines the panning to stay within a range, e.g. with panRange: +[-10, 20] panning stops at -10 in one end and at 20 in the other. Either can +be null, e.g. [-10, null]. If you set panRange to false, panning on that axis +will be disabled. + +Example API usage: + + plot = $.plot(...); + + // zoom default amount in on the pixel ( 10, 20 ) + plot.zoom({ center: { left: 10, top: 20 } }); + + // zoom out again + plot.zoomOut({ center: { left: 10, top: 20 } }); + + // zoom 200% in on the pixel (10, 20) + plot.zoom({ amount: 2, center: { left: 10, top: 20 } }); + + // pan 100 pixels to the left and 20 down + plot.pan({ left: -100, top: 20 }) + +Here, "center" specifies where the center of the zooming should happen. Note +that this is defined in pixel space, not the space of the data points (you can +use the p2c helpers on the axes in Flot to help you convert between these). + +"amount" is the amount to zoom the viewport relative to the current range, so +1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You +can set the default in the options. + +*/ + +// First two dependencies, jquery.event.drag.js and +// jquery.mousewheel.js, we put them inline here to save people the +// effort of downloading them. + +/* +jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com) +Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt +*/ +(function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case"mousedown":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,"mousemove mouseup",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&"mousemove":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,"dragstart",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case"mousemove":if(d.dragging){if(k=f(h,"drag",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type="mouseup"}case"mouseup":b.remove(document,"mousemove mouseup",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,"dragend",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?"off":"on",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?"":"none"))}a.fn.drag=function(a,b,c){return b&&this.bind("dragstart",a),c&&this.bind("dragend",c),a?this.bind("drag",b?b:a):this.trigger("drag")};var b=a.event,c=b.special,d=c.drag={not:":input",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,"mousedown",e,c),this.attachEvent&&this.attachEvent("ondragstart",h)},teardown:function(){b.remove(this,"mousedown",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent("ondragstart",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery); + +/* jquery.mousewheel.min.js + * Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) + * Licensed under the MIT License (LICENSE.txt). + * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. + * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. + * Thanks to: Seamus Leahy for adding deltaX and deltaY + * + * Version: 3.0.6 + * + * Requires: 1.2.2+ + */ +(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery); + + + + +(function ($) { + var options = { + xaxis: { + zoomRange: null, // or [number, number] (min range, max range) + panRange: null // or [number, number] (min, max) + }, + zoom: { + interactive: false, + trigger: "dblclick", // or "click" for single click + amount: 1.5 // how much to zoom relative to current position, 2 = 200% (zoom in), 0.5 = 50% (zoom out) + }, + pan: { + interactive: false, + cursor: "move", + frameRate: 20 + } + }; + + function init(plot) { + function onZoomClick(e, zoomOut) { + var c = plot.offset(); + c.left = e.pageX - c.left; + c.top = e.pageY - c.top; + if (zoomOut) + plot.zoomOut({ center: c }); + else + plot.zoom({ center: c }); + } + + function onMouseWheel(e, delta) { + e.preventDefault(); + onZoomClick(e, delta < 0); + return false; + } + + var prevCursor = 'default', prevPageX = 0, prevPageY = 0, + panTimeout = null; + + function onDragStart(e) { + if (e.which != 1) // only accept left-click + return false; + var c = plot.getPlaceholder().css('cursor'); + if (c) + prevCursor = c; + plot.getPlaceholder().css('cursor', plot.getOptions().pan.cursor); + prevPageX = e.pageX; + prevPageY = e.pageY; + } + + function onDrag(e) { + var frameRate = plot.getOptions().pan.frameRate; + if (panTimeout || !frameRate) + return; + + panTimeout = setTimeout(function () { + plot.pan({ left: prevPageX - e.pageX, + top: prevPageY - e.pageY }); + prevPageX = e.pageX; + prevPageY = e.pageY; + + panTimeout = null; + }, 1 / frameRate * 1000); + } + + function onDragEnd(e) { + if (panTimeout) { + clearTimeout(panTimeout); + panTimeout = null; + } + + plot.getPlaceholder().css('cursor', prevCursor); + plot.pan({ left: prevPageX - e.pageX, + top: prevPageY - e.pageY }); + } + + function bindEvents(plot, eventHolder) { + var o = plot.getOptions(); + if (o.zoom.interactive) { + eventHolder[o.zoom.trigger](onZoomClick); + eventHolder.mousewheel(onMouseWheel); + } + + if (o.pan.interactive) { + eventHolder.bind("dragstart", { distance: 10 }, onDragStart); + eventHolder.bind("drag", onDrag); + eventHolder.bind("dragend", onDragEnd); + } + } + + plot.zoomOut = function (args) { + if (!args) + args = {}; + + if (!args.amount) + args.amount = plot.getOptions().zoom.amount; + + args.amount = 1 / args.amount; + plot.zoom(args); + }; + + plot.zoom = function (args) { + if (!args) + args = {}; + + var c = args.center, + amount = args.amount || plot.getOptions().zoom.amount, + w = plot.width(), h = plot.height(); + + if (!c) + c = { left: w / 2, top: h / 2 }; + + var xf = c.left / w, + yf = c.top / h, + minmax = { + x: { + min: c.left - xf * w / amount, + max: c.left + (1 - xf) * w / amount + }, + y: { + min: c.top - yf * h / amount, + max: c.top + (1 - yf) * h / amount + } + }; + + $.each(plot.getAxes(), function(_, axis) { + var opts = axis.options, + min = minmax[axis.direction].min, + max = minmax[axis.direction].max, + zr = opts.zoomRange, + pr = opts.panRange; + + if (zr === false) // no zooming on this axis + return; + + min = axis.c2p(min); + max = axis.c2p(max); + if (min > max) { + // make sure min < max + var tmp = min; + min = max; + max = tmp; + } + + //Check that we are in panRange + if (pr) { + if (pr[0] != null && min < pr[0]) { + min = pr[0]; + } + if (pr[1] != null && max > pr[1]) { + max = pr[1]; + } + } + + var range = max - min; + if (zr && + ((zr[0] != null && range < zr[0]) || + (zr[1] != null && range > zr[1]))) + return; + + opts.min = min; + opts.max = max; + }); + + plot.setupGrid(); + plot.draw(); + + if (!args.preventEvent) + plot.getPlaceholder().trigger("plotzoom", [ plot, args ]); + }; + + plot.pan = function (args) { + var delta = { + x: +args.left, + y: +args.top + }; + + if (isNaN(delta.x)) + delta.x = 0; + if (isNaN(delta.y)) + delta.y = 0; + + $.each(plot.getAxes(), function (_, axis) { + var opts = axis.options, + min, max, d = delta[axis.direction]; + + min = axis.c2p(axis.p2c(axis.min) + d), + max = axis.c2p(axis.p2c(axis.max) + d); + + var pr = opts.panRange; + if (pr === false) // no panning on this axis + return; + + if (pr) { + // check whether we hit the wall + if (pr[0] != null && pr[0] > min) { + d = pr[0] - min; + min += d; + max += d; + } + + if (pr[1] != null && pr[1] < max) { + d = pr[1] - max; + min += d; + max += d; + } + } + + opts.min = min; + opts.max = max; + }); + + plot.setupGrid(); + plot.draw(); + + if (!args.preventEvent) + plot.getPlaceholder().trigger("plotpan", [ plot, args ]); + }; + + function shutdown(plot, eventHolder) { + eventHolder.unbind(plot.getOptions().zoom.trigger, onZoomClick); + eventHolder.unbind("mousewheel", onMouseWheel); + eventHolder.unbind("dragstart", onDragStart); + eventHolder.unbind("drag", onDrag); + eventHolder.unbind("dragend", onDragEnd); + if (panTimeout) + clearTimeout(panTimeout); + } + + plot.hooks.bindEvents.push(bindEvents); + plot.hooks.shutdown.push(shutdown); + } + + $.plot.plugins.push({ + init: init, + options: options, + name: 'navigate', + version: '1.3' + }); +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.navigate.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.navigate.min.js new file mode 100644 index 0000000..0420f16 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.navigate.min.js @@ -0,0 +1,86 @@ +/* Flot plugin for adding the ability to pan and zoom the plot. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The default behaviour is double click and scrollwheel up/down to zoom in, drag +to pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and +plot.pan( offset ) so you easily can add custom controls. It also fires +"plotpan" and "plotzoom" events, useful for synchronizing plots. + +The plugin supports these options: + + zoom: { + interactive: false + trigger: "dblclick" // or "click" for single click + amount: 1.5 // 2 = 200% (zoom in), 0.5 = 50% (zoom out) + } + + pan: { + interactive: false + cursor: "move" // CSS mouse cursor value used when dragging, e.g. "pointer" + frameRate: 20 + } + + xaxis, yaxis, x2axis, y2axis: { + zoomRange: null // or [ number, number ] (min range, max range) or false + panRange: null // or [ number, number ] (min, max) or false + } + +"interactive" enables the built-in drag/click behaviour. If you enable +interactive for pan, then you'll have a basic plot that supports moving +around; the same for zoom. + +"amount" specifies the default amount to zoom in (so 1.5 = 150%) relative to +the current viewport. + +"cursor" is a standard CSS mouse cursor string used for visual feedback to the +user when dragging. + +"frameRate" specifies the maximum number of times per second the plot will +update itself while the user is panning around on it (set to null to disable +intermediate pans, the plot will then not update until the mouse button is +released). + +"zoomRange" is the interval in which zooming can happen, e.g. with zoomRange: +[1, 100] the zoom will never scale the axis so that the difference between min +and max is smaller than 1 or larger than 100. You can set either end to null +to ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis +will be disabled. + +"panRange" confines the panning to stay within a range, e.g. with panRange: +[-10, 20] panning stops at -10 in one end and at 20 in the other. Either can +be null, e.g. [-10, null]. If you set panRange to false, panning on that axis +will be disabled. + +Example API usage: + + plot = $.plot(...); + + // zoom default amount in on the pixel ( 10, 20 ) + plot.zoom({ center: { left: 10, top: 20 } }); + + // zoom out again + plot.zoomOut({ center: { left: 10, top: 20 } }); + + // zoom 200% in on the pixel (10, 20) + plot.zoom({ amount: 2, center: { left: 10, top: 20 } }); + + // pan 100 pixels to the left and 20 down + plot.pan({ left: -100, top: 20 }) + +Here, "center" specifies where the center of the zooming should happen. Note +that this is defined in pixel space, not the space of the data points (you can +use the p2c helpers on the axes in Flot to help you convert between these). + +"amount" is the amount to zoom the viewport relative to the current range, so +1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You +can set the default in the options. + +*/// First two dependencies, jquery.event.drag.js and +// jquery.mousewheel.js, we put them inline here to save people the +// effort of downloading them. +/* +jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com) +Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt +*/(function(e){function t(i){var l,h=this,p=i.data||{};if(p.elem)h=i.dragTarget=p.elem,i.dragProxy=a.proxy||h,i.cursorOffsetX=p.pageX-p.left,i.cursorOffsetY=p.pageY-p.top,i.offsetX=i.pageX-i.cursorOffsetX,i.offsetY=i.pageY-i.cursorOffsetY;else if(a.dragging||p.which>0&&i.which!=p.which||e(i.target).is(p.not))return;switch(i.type){case"mousedown":return e.extend(p,e(h).offset(),{elem:h,target:i.target,pageX:i.pageX,pageY:i.pageY}),o.add(document,"mousemove mouseup",t,p),s(h,!1),a.dragging=null,!1;case!a.dragging&&"mousemove":if(r(i.pageX-p.pageX)+r(i.pageY-p.pageY)<p.distance)break;i.target=p.target,l=n(i,"dragstart",h),l!==!1&&(a.dragging=h,a.proxy=i.dragProxy=e(l||h)[0]);case"mousemove":if(a.dragging){if(l=n(i,"drag",h),u.drop&&(u.drop.allowed=l!==!1,u.drop.handler(i)),l!==!1)break;i.type="mouseup"};case"mouseup":o.remove(document,"mousemove mouseup",t),a.dragging&&(u.drop&&u.drop.handler(i),n(i,"dragend",h)),s(h,!0),a.dragging=a.proxy=p.elem=!1}return!0}function n(t,n,r){t.type=n;var i=e.event.dispatch.call(r,t);return i===!1?!1:i||t.result}function r(e){return Math.pow(e,2)}function i(){return a.dragging===!1}function s(e,t){e&&(e.unselectable=t?"off":"on",e.onselectstart=function(){return t},e.style&&(e.style.MozUserSelect=t?"":"none"))}e.fn.drag=function(e,t,n){return t&&this.bind("dragstart",e),n&&this.bind("dragend",n),e?this.bind("drag",t?t:e):this.trigger("drag")};var o=e.event,u=o.special,a=u.drag={not:":input",distance:0,which:1,dragging:!1,setup:function(n){n=e.extend({distance:a.distance,which:a.which,not:a.not},n||{}),n.distance=r(n.distance),o.add(this,"mousedown",t,n),this.attachEvent&&this.attachEvent("ondragstart",i)},teardown:function(){o.remove(this,"mousedown",t),this===a.dragging&&(a.dragging=a.proxy=!1),s(this,!0),this.detachEvent&&this.detachEvent("ondragstart",i)}};u.dragstart=u.dragend={setup:function(){},teardown:function(){}}})(jQuery),function(e){function t(t){var n=t||window.event,r=[].slice.call(arguments,1),i=0,s=0,o=0,t=e.event.fix(n);return t.type="mousewheel",n.wheelDelta&&(i=n.wheelDelta/120),n.detail&&(i=-n.detail/3),o=i,void 0!==n.axis&&n.axis===n.HORIZONTAL_AXIS&&(o=0,s=-1*i),void 0!==n.wheelDeltaY&&(o=n.wheelDeltaY/120),void 0!==n.wheelDeltaX&&(s=-1*n.wheelDeltaX/120),r.unshift(t,i,s,o),(e.event.dispatch||e.event.handle).apply(this,r)}var n=["DOMMouseScroll","mousewheel"];if(e.event.fixHooks)for(var r=n.length;r;)e.event.fixHooks[n[--r]]=e.event.mouseHooks;e.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var e=n.length;e;)this.addEventListener(n[--e],t,!1);else this.onmousewheel=t},teardown:function(){if(this.removeEventListener)for(var e=n.length;e;)this.removeEventListener(n[--e],t,!1);else this.onmousewheel=null}},e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})}(jQuery),function(e){function n(t){function n(e,n){var r=t.offset();r.left=e.pageX-r.left,r.top=e.pageY-r.top,n?t.zoomOut({center:r}):t.zoom({center:r})}function r(e,t){return e.preventDefault(),n(e,t<0),!1}function a(e){if(e.which!=1)return!1;var n=t.getPlaceholder().css("cursor");n&&(i=n),t.getPlaceholder().css("cursor",t.getOptions().pan.cursor),s=e.pageX,o=e.pageY}function f(e){var n=t.getOptions().pan.frameRate;if(u||!n)return;u=setTimeout(function(){t.pan({left:s-e.pageX,top:o-e.pageY}),s=e.pageX,o=e.pageY,u=null},1/n*1e3)}function l(e){u&&(clearTimeout(u),u=null),t.getPlaceholder().css("cursor",i),t.pan({left:s-e.pageX,top:o-e.pageY})}function c(e,t){var i=e.getOptions();i.zoom.interactive&&(t[i.zoom.trigger](n),t.mousewheel(r)),i.pan.interactive&&(t.bind("dragstart",{distance:10},a),t.bind("drag",f),t.bind("dragend",l))}function h(e,t){t.unbind(e.getOptions().zoom.trigger,n),t.unbind("mousewheel",r),t.unbind("dragstart",a),t.unbind("drag",f),t.unbind("dragend",l),u&&clearTimeout(u)}var i="default",s=0,o=0,u=null;t.zoomOut=function(e){e||(e={}),e.amount||(e.amount=t.getOptions().zoom.amount),e.amount=1/e.amount,t.zoom(e)},t.zoom=function(n){n||(n={});var r=n.center,i=n.amount||t.getOptions().zoom.amount,s=t.width(),o=t.height();r||(r={left:s/2,top:o/2});var u=r.left/s,a=r.top/o,f={x:{min:r.left-u*s/i,max:r.left+(1-u)*s/i},y:{min:r.top-a*o/i,max:r.top+(1-a)*o/i}};e.each(t.getAxes(),function(e,t){var n=t.options,r=f[t.direction].min,i=f[t.direction].max,s=n.zoomRange,o=n.panRange;if(s===!1)return;r=t.c2p(r),i=t.c2p(i);if(r>i){var u=r;r=i,i=u}o&&(o[0]!=null&&r<o[0]&&(r=o[0]),o[1]!=null&&i>o[1]&&(i=o[1]));var a=i-r;if(s&&(s[0]!=null&&a<s[0]||s[1]!=null&&a>s[1]))return;n.min=r,n.max=i}),t.setupGrid(),t.draw(),n.preventEvent||t.getPlaceholder().trigger("plotzoom",[t,n])},t.pan=function(n){var r={x:+n.left,y:+n.top};isNaN(r.x)&&(r.x=0),isNaN(r.y)&&(r.y=0),e.each(t.getAxes(),function(e,t){var n=t.options,i,s,o=r[t.direction];i=t.c2p(t.p2c(t.min)+o),s=t.c2p(t.p2c(t.max)+o);var u=n.panRange;if(u===!1)return;u&&(u[0]!=null&&u[0]>i&&(o=u[0]-i,i+=o,s+=o),u[1]!=null&&u[1]<s&&(o=u[1]-s,i+=o,s+=o)),n.min=i,n.max=s}),t.setupGrid(),t.draw(),n.preventEvent||t.getPlaceholder().trigger("plotpan",[t,n])},t.hooks.bindEvents.push(c),t.hooks.shutdown.push(h)}var t={xaxis:{zoomRange:null,panRange:null},zoom:{interactive:!1,trigger:"dblclick",amount:1.5},pan:{interactive:!1,cursor:"move",frameRate:20}};e.plot.plugins.push({init:n,options:t,name:"navigate",version:"1.3"})}(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.pie.js b/public/admin/view/javascript/jquery/flot/jquery.flot.pie.js new file mode 100644 index 0000000..6553c8e --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.pie.js @@ -0,0 +1,817 @@ +/* Flot plugin for rendering pie charts. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The plugin assumes that each series has a single data value, and that each +value is a positive integer or zero. Negative numbers don't make sense for a +pie chart, and have unpredictable results. The values do NOT need to be +passed in as percentages; the plugin will calculate the total and per-slice +percentages internally. + +* Created by Brian Medendorp + +* Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars + +The plugin supports these options: + + series: { + pie: { + show: true/false + radius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto' + innerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect + startAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result + tilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show) + offset: { + top: integer value to move the pie up or down + left: integer value to move the pie left or right, or 'auto' + }, + stroke: { + color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF') + width: integer pixel width of the stroke + }, + label: { + show: true/false, or 'auto' + formatter: a user-defined function that modifies the text/style of the label text + radius: 0-1 for percentage of fullsize, or a specified pixel length + background: { + color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000') + opacity: 0-1 + }, + threshold: 0-1 for the percentage value at which to hide labels (if they're too small) + }, + combine: { + threshold: 0-1 for the percentage value at which to combine slices (if they're too small) + color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined + label: any text value of what the combined slice should be labeled + } + highlight: { + opacity: 0-1 + } + } + } + +More detail and specific examples can be found in the included HTML file. + +*/ + +(function($) { + + // Maximum redraw attempts when fitting labels within the plot + + var REDRAW_ATTEMPTS = 10; + + // Factor by which to shrink the pie when fitting labels within the plot + + var REDRAW_SHRINK = 0.95; + + function init(plot) { + + var canvas = null, + target = null, + maxRadius = null, + centerLeft = null, + centerTop = null, + processed = false, + ctx = null; + + // interactive variables + + var highlights = []; + + // add hook to determine if pie plugin in enabled, and then perform necessary operations + + plot.hooks.processOptions.push(function(plot, options) { + if (options.series.pie.show) { + + options.grid.show = false; + + // set labels.show + + if (options.series.pie.label.show == "auto") { + if (options.legend.show) { + options.series.pie.label.show = false; + } else { + options.series.pie.label.show = true; + } + } + + // set radius + + if (options.series.pie.radius == "auto") { + if (options.series.pie.label.show) { + options.series.pie.radius = 3/4; + } else { + options.series.pie.radius = 1; + } + } + + // ensure sane tilt + + if (options.series.pie.tilt > 1) { + options.series.pie.tilt = 1; + } else if (options.series.pie.tilt < 0) { + options.series.pie.tilt = 0; + } + } + }); + + plot.hooks.bindEvents.push(function(plot, eventHolder) { + var options = plot.getOptions(); + if (options.series.pie.show) { + if (options.grid.hoverable) { + eventHolder.unbind("mousemove").mousemove(onMouseMove); + } + if (options.grid.clickable) { + eventHolder.unbind("click").click(onClick); + } + } + }); + + plot.hooks.processDatapoints.push(function(plot, series, data, datapoints) { + var options = plot.getOptions(); + if (options.series.pie.show) { + processDatapoints(plot, series, data, datapoints); + } + }); + + plot.hooks.drawOverlay.push(function(plot, octx) { + var options = plot.getOptions(); + if (options.series.pie.show) { + drawOverlay(plot, octx); + } + }); + + plot.hooks.draw.push(function(plot, newCtx) { + var options = plot.getOptions(); + if (options.series.pie.show) { + draw(plot, newCtx); + } + }); + + function processDatapoints(plot, series, datapoints) { + if (!processed) { + processed = true; + canvas = plot.getCanvas(); + target = $(canvas).parent(); + options = plot.getOptions(); + plot.setData(combine(plot.getData())); + } + } + + function combine(data) { + + var total = 0, + combined = 0, + numCombined = 0, + color = options.series.pie.combine.color, + newdata = []; + + // Fix up the raw data from Flot, ensuring the data is numeric + + for (var i = 0; i < data.length; ++i) { + + var value = data[i].data; + + // If the data is an array, we'll assume that it's a standard + // Flot x-y pair, and are concerned only with the second value. + + // Note how we use the original array, rather than creating a + // new one; this is more efficient and preserves any extra data + // that the user may have stored in higher indexes. + + if ($.isArray(value) && value.length == 1) { + value = value[0]; + } + + if ($.isArray(value)) { + // Equivalent to $.isNumeric() but compatible with jQuery < 1.7 + if (!isNaN(parseFloat(value[1])) && isFinite(value[1])) { + value[1] = +value[1]; + } else { + value[1] = 0; + } + } else if (!isNaN(parseFloat(value)) && isFinite(value)) { + value = [1, +value]; + } else { + value = [1, 0]; + } + + data[i].data = [value]; + } + + // Sum up all the slices, so we can calculate percentages for each + + for (var i = 0; i < data.length; ++i) { + total += data[i].data[0][1]; + } + + // Count the number of slices with percentages below the combine + // threshold; if it turns out to be just one, we won't combine. + + for (var i = 0; i < data.length; ++i) { + var value = data[i].data[0][1]; + if (value / total <= options.series.pie.combine.threshold) { + combined += value; + numCombined++; + if (!color) { + color = data[i].color; + } + } + } + + for (var i = 0; i < data.length; ++i) { + var value = data[i].data[0][1]; + if (numCombined < 2 || value / total > options.series.pie.combine.threshold) { + newdata.push({ + data: [[1, value]], + color: data[i].color, + label: data[i].label, + angle: value * Math.PI * 2 / total, + percent: value / (total / 100) + }); + } + } + + if (numCombined > 1) { + newdata.push({ + data: [[1, combined]], + color: color, + label: options.series.pie.combine.label, + angle: combined * Math.PI * 2 / total, + percent: combined / (total / 100) + }); + } + + return newdata; + } + + function draw(plot, newCtx) { + + if (!target) { + return; // if no series were passed + } + + var canvasWidth = plot.getPlaceholder().width(), + canvasHeight = plot.getPlaceholder().height(), + legendWidth = target.children().filter(".legend").children().width() || 0; + + ctx = newCtx; + + // WARNING: HACK! REWRITE THIS CODE AS SOON AS POSSIBLE! + + // When combining smaller slices into an 'other' slice, we need to + // add a new series. Since Flot gives plugins no way to modify the + // list of series, the pie plugin uses a hack where the first call + // to processDatapoints results in a call to setData with the new + // list of series, then subsequent processDatapoints do nothing. + + // The plugin-global 'processed' flag is used to control this hack; + // it starts out false, and is set to true after the first call to + // processDatapoints. + + // Unfortunately this turns future setData calls into no-ops; they + // call processDatapoints, the flag is true, and nothing happens. + + // To fix this we'll set the flag back to false here in draw, when + // all series have been processed, so the next sequence of calls to + // processDatapoints once again starts out with a slice-combine. + // This is really a hack; in 0.9 we need to give plugins a proper + // way to modify series before any processing begins. + + processed = false; + + // calculate maximum radius and center point + + maxRadius = Math.min(canvasWidth, canvasHeight / options.series.pie.tilt) / 2; + centerTop = canvasHeight / 2 + options.series.pie.offset.top; + centerLeft = canvasWidth / 2; + + if (options.series.pie.offset.left == "auto") { + if (options.legend.position.match("w")) { + centerLeft += legendWidth / 2; + } else { + centerLeft -= legendWidth / 2; + } + } else { + centerLeft += options.series.pie.offset.left; + } + + if (centerLeft < maxRadius) { + centerLeft = maxRadius; + } else if (centerLeft > canvasWidth - maxRadius) { + centerLeft = canvasWidth - maxRadius; + } + + var slices = plot.getData(), + attempts = 0; + + // Keep shrinking the pie's radius until drawPie returns true, + // indicating that all the labels fit, or we try too many times. + + do { + if (attempts > 0) { + maxRadius *= REDRAW_SHRINK; + } + attempts += 1; + clear(); + if (options.series.pie.tilt <= 0.8) { + drawShadow(); + } + } while (!drawPie() && attempts < REDRAW_ATTEMPTS) + + if (attempts >= REDRAW_ATTEMPTS) { + clear(); + target.prepend("<div class='error'>Could not draw pie with labels contained inside canvas</div>"); + } + + if (plot.setSeries && plot.insertLegend) { + plot.setSeries(slices); + plot.insertLegend(); + } + + // we're actually done at this point, just defining internal functions at this point + + function clear() { + ctx.clearRect(0, 0, canvasWidth, canvasHeight); + target.children().filter(".pieLabel, .pieLabelBackground").remove(); + } + + function drawShadow() { + + var shadowLeft = options.series.pie.shadow.left; + var shadowTop = options.series.pie.shadow.top; + var edge = 10; + var alpha = options.series.pie.shadow.alpha; + var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; + + if (radius >= canvasWidth / 2 - shadowLeft || radius * options.series.pie.tilt >= canvasHeight / 2 - shadowTop || radius <= edge) { + return; // shadow would be outside canvas, so don't draw it + } + + ctx.save(); + ctx.translate(shadowLeft,shadowTop); + ctx.globalAlpha = alpha; + ctx.fillStyle = "#000"; + + // center and rotate to starting position + + ctx.translate(centerLeft,centerTop); + ctx.scale(1, options.series.pie.tilt); + + //radius -= edge; + + for (var i = 1; i <= edge; i++) { + ctx.beginPath(); + ctx.arc(0, 0, radius, 0, Math.PI * 2, false); + ctx.fill(); + radius -= i; + } + + ctx.restore(); + } + + function drawPie() { + + var startAngle = Math.PI * options.series.pie.startAngle; + var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; + + // center and rotate to starting position + + ctx.save(); + ctx.translate(centerLeft,centerTop); + ctx.scale(1, options.series.pie.tilt); + //ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera + + // draw slices + + ctx.save(); + var currentAngle = startAngle; + for (var i = 0; i < slices.length; ++i) { + slices[i].startAngle = currentAngle; + drawSlice(slices[i].angle, slices[i].color, true); + } + ctx.restore(); + + // draw slice outlines + + if (options.series.pie.stroke.width > 0) { + ctx.save(); + ctx.lineWidth = options.series.pie.stroke.width; + currentAngle = startAngle; + for (var i = 0; i < slices.length; ++i) { + drawSlice(slices[i].angle, options.series.pie.stroke.color, false); + } + ctx.restore(); + } + + // draw donut hole + + drawDonutHole(ctx); + + ctx.restore(); + + // Draw the labels, returning true if they fit within the plot + + if (options.series.pie.label.show) { + return drawLabels(); + } else return true; + + function drawSlice(angle, color, fill) { + + if (angle <= 0 || isNaN(angle)) { + return; + } + + if (fill) { + ctx.fillStyle = color; + } else { + ctx.strokeStyle = color; + ctx.lineJoin = "round"; + } + + ctx.beginPath(); + if (Math.abs(angle - Math.PI * 2) > 0.000000001) { + ctx.moveTo(0, 0); // Center of the pie + } + + //ctx.arc(0, 0, radius, 0, angle, false); // This doesn't work properly in Opera + ctx.arc(0, 0, radius,currentAngle, currentAngle + angle / 2, false); + ctx.arc(0, 0, radius,currentAngle + angle / 2, currentAngle + angle, false); + ctx.closePath(); + //ctx.rotate(angle); // This doesn't work properly in Opera + currentAngle += angle; + + if (fill) { + ctx.fill(); + } else { + ctx.stroke(); + } + } + + function drawLabels() { + + var currentAngle = startAngle; + var radius = options.series.pie.label.radius > 1 ? options.series.pie.label.radius : maxRadius * options.series.pie.label.radius; + + for (var i = 0; i < slices.length; ++i) { + if (slices[i].percent >= options.series.pie.label.threshold * 100) { + if (!drawLabel(slices[i], currentAngle, i)) { + return false; + } + } + currentAngle += slices[i].angle; + } + + return true; + + function drawLabel(slice, startAngle, index) { + + if (slice.data[0][1] == 0) { + return true; + } + + // format label text + + var lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter; + + if (lf) { + text = lf(slice.label, slice); + } else { + text = slice.label; + } + + if (plf) { + text = plf(text, slice); + } + + var halfAngle = ((startAngle + slice.angle) + startAngle) / 2; + var x = centerLeft + Math.round(Math.cos(halfAngle) * radius); + var y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt; + + var html = "<span class='pieLabel' id='pieLabel" + index + "' style='position:absolute;top:" + y + "px;left:" + x + "px;'>" + text + "</span>"; + target.append(html); + + var label = target.children("#pieLabel" + index); + var labelTop = (y - label.height() / 2); + var labelLeft = (x - label.width() / 2); + + label.css("top", labelTop); + label.css("left", labelLeft); + + // check to make sure that the label is not outside the canvas + + if (0 - labelTop > 0 || 0 - labelLeft > 0 || canvasHeight - (labelTop + label.height()) < 0 || canvasWidth - (labelLeft + label.width()) < 0) { + return false; + } + + if (options.series.pie.label.background.opacity != 0) { + + // put in the transparent background separately to avoid blended labels and label boxes + + var c = options.series.pie.label.background.color; + + if (c == null) { + c = slice.color; + } + + var pos = "top:" + labelTop + "px;left:" + labelLeft + "px;"; + $("<div class='pieLabelBackground' style='position:absolute;width:" + label.width() + "px;height:" + label.height() + "px;" + pos + "background-color:" + c + ";'></div>") + .css("opacity", options.series.pie.label.background.opacity) + .insertBefore(label); + } + + return true; + } // end individual label function + } // end drawLabels function + } // end drawPie function + } // end draw function + + // Placed here because it needs to be accessed from multiple locations + + function drawDonutHole(layer) { + if (options.series.pie.innerRadius > 0) { + + // subtract the center + + layer.save(); + var innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius; + layer.globalCompositeOperation = "destination-out"; // this does not work with excanvas, but it will fall back to using the stroke color + layer.beginPath(); + layer.fillStyle = options.series.pie.stroke.color; + layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false); + layer.fill(); + layer.closePath(); + layer.restore(); + + // add inner stroke + + layer.save(); + layer.beginPath(); + layer.strokeStyle = options.series.pie.stroke.color; + layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false); + layer.stroke(); + layer.closePath(); + layer.restore(); + + // TODO: add extra shadow inside hole (with a mask) if the pie is tilted. + } + } + + //-- Additional Interactive related functions -- + + function isPointInPoly(poly, pt) { + for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i) + ((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1])) + && (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0]) + && (c = !c); + return c; + } + + function findNearbySlice(mouseX, mouseY) { + + var slices = plot.getData(), + options = plot.getOptions(), + radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius, + x, y; + + for (var i = 0; i < slices.length; ++i) { + + var s = slices[i]; + + if (s.pie.show) { + + ctx.save(); + ctx.beginPath(); + ctx.moveTo(0, 0); // Center of the pie + //ctx.scale(1, options.series.pie.tilt); // this actually seems to break everything when here. + ctx.arc(0, 0, radius, s.startAngle, s.startAngle + s.angle / 2, false); + ctx.arc(0, 0, radius, s.startAngle + s.angle / 2, s.startAngle + s.angle, false); + ctx.closePath(); + x = mouseX - centerLeft; + y = mouseY - centerTop; + + if (ctx.isPointInPath) { + if (ctx.isPointInPath(mouseX - centerLeft, mouseY - centerTop)) { + ctx.restore(); + return { + datapoint: [s.percent, s.data], + dataIndex: 0, + series: s, + seriesIndex: i + }; + } + } else { + + // excanvas for IE doesn;t support isPointInPath, this is a workaround. + + var p1X = radius * Math.cos(s.startAngle), + p1Y = radius * Math.sin(s.startAngle), + p2X = radius * Math.cos(s.startAngle + s.angle / 4), + p2Y = radius * Math.sin(s.startAngle + s.angle / 4), + p3X = radius * Math.cos(s.startAngle + s.angle / 2), + p3Y = radius * Math.sin(s.startAngle + s.angle / 2), + p4X = radius * Math.cos(s.startAngle + s.angle / 1.5), + p4Y = radius * Math.sin(s.startAngle + s.angle / 1.5), + p5X = radius * Math.cos(s.startAngle + s.angle), + p5Y = radius * Math.sin(s.startAngle + s.angle), + arrPoly = [[0, 0], [p1X, p1Y], [p2X, p2Y], [p3X, p3Y], [p4X, p4Y], [p5X, p5Y]], + arrPoint = [x, y]; + + // TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt? + + if (isPointInPoly(arrPoly, arrPoint)) { + ctx.restore(); + return { + datapoint: [s.percent, s.data], + dataIndex: 0, + series: s, + seriesIndex: i + }; + } + } + + ctx.restore(); + } + } + + return null; + } + + function onMouseMove(e) { + triggerClickHoverEvent("plothover", e); + } + + function onClick(e) { + triggerClickHoverEvent("plotclick", e); + } + + // trigger click or hover event (they send the same parameters so we share their code) + + function triggerClickHoverEvent(eventname, e) { + + var offset = plot.offset(); + var canvasX = parseInt(e.pageX - offset.left); + var canvasY = parseInt(e.pageY - offset.top); + var item = findNearbySlice(canvasX, canvasY); + + if (options.grid.autoHighlight) { + + // clear auto-highlights + + for (var i = 0; i < highlights.length; ++i) { + var h = highlights[i]; + if (h.auto == eventname && !(item && h.series == item.series)) { + unhighlight(h.series); + } + } + } + + // highlight the slice + + if (item) { + highlight(item.series, eventname); + } + + // trigger any hover bind events + + var pos = { pageX: e.pageX, pageY: e.pageY }; + target.trigger(eventname, [pos, item]); + } + + function highlight(s, auto) { + //if (typeof s == "number") { + // s = series[s]; + //} + + var i = indexOfHighlight(s); + + if (i == -1) { + highlights.push({ series: s, auto: auto }); + plot.triggerRedrawOverlay(); + } else if (!auto) { + highlights[i].auto = false; + } + } + + function unhighlight(s) { + if (s == null) { + highlights = []; + plot.triggerRedrawOverlay(); + } + + //if (typeof s == "number") { + // s = series[s]; + //} + + var i = indexOfHighlight(s); + + if (i != -1) { + highlights.splice(i, 1); + plot.triggerRedrawOverlay(); + } + } + + function indexOfHighlight(s) { + for (var i = 0; i < highlights.length; ++i) { + var h = highlights[i]; + if (h.series == s) + return i; + } + return -1; + } + + function drawOverlay(plot, octx) { + + var options = plot.getOptions(); + + var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; + + octx.save(); + octx.translate(centerLeft, centerTop); + octx.scale(1, options.series.pie.tilt); + + for (var i = 0; i < highlights.length; ++i) { + drawHighlight(highlights[i].series); + } + + drawDonutHole(octx); + + octx.restore(); + + function drawHighlight(series) { + + if (series.angle <= 0 || isNaN(series.angle)) { + return; + } + + //octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString(); + octx.fillStyle = "rgba(255, 255, 255, " + options.series.pie.highlight.opacity + ")"; // this is temporary until we have access to parseColor + octx.beginPath(); + if (Math.abs(series.angle - Math.PI * 2) > 0.000000001) { + octx.moveTo(0, 0); // Center of the pie + } + octx.arc(0, 0, radius, series.startAngle, series.startAngle + series.angle / 2, false); + octx.arc(0, 0, radius, series.startAngle + series.angle / 2, series.startAngle + series.angle, false); + octx.closePath(); + octx.fill(); + } + } + } // end init (plugin body) + + // define pie specific options and their default values + + var options = { + series: { + pie: { + show: false, + radius: "auto", // actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value) + innerRadius: 0, /* for donut */ + startAngle: 3/2, + tilt: 1, + shadow: { + left: 5, // shadow left offset + top: 15, // shadow top offset + alpha: 0.02 // shadow alpha + }, + offset: { + top: 0, + left: "auto" + }, + stroke: { + color: "#fff", + width: 1 + }, + label: { + show: "auto", + formatter: function(label, slice) { + return "<div style='font-size:x-small;text-align:center;padding:2px;color:" + slice.color + ";'>" + label + "<br/>" + Math.round(slice.percent) + "%</div>"; + }, // formatter function + radius: 1, // radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value) + background: { + color: null, + opacity: 0 + }, + threshold: 0 // percentage at which to hide the label (i.e. the slice is too narrow) + }, + combine: { + threshold: -1, // percentage at which to combine little slices into one larger slice + color: null, // color to give the new slice (auto-generated if null) + label: "Other" // label to give the new slice + }, + highlight: { + //color: "#fff", // will add this functionality once parseColor is available + opacity: 0.5 + } + } + } + }; + + $.plot.plugins.push({ + init: init, + options: options, + name: "pie", + version: "1.1" + }); + +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.pie.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.pie.min.js new file mode 100644 index 0000000..3de8f44 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.pie.min.js @@ -0,0 +1,56 @@ +/* Flot plugin for rendering pie charts. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The plugin assumes that each series has a single data value, and that each +value is a positive integer or zero. Negative numbers don't make sense for a +pie chart, and have unpredictable results. The values do NOT need to be +passed in as percentages; the plugin will calculate the total and per-slice +percentages internally. + +* Created by Brian Medendorp + +* Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars + +The plugin supports these options: + + series: { + pie: { + show: true/false + radius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto' + innerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect + startAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result + tilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show) + offset: { + top: integer value to move the pie up or down + left: integer value to move the pie left or right, or 'auto' + }, + stroke: { + color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF') + width: integer pixel width of the stroke + }, + label: { + show: true/false, or 'auto' + formatter: a user-defined function that modifies the text/style of the label text + radius: 0-1 for percentage of fullsize, or a specified pixel length + background: { + color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000') + opacity: 0-1 + }, + threshold: 0-1 for the percentage value at which to hide labels (if they're too small) + }, + combine: { + threshold: 0-1 for the percentage value at which to combine slices (if they're too small) + color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined + label: any text value of what the combined slice should be labeled + } + highlight: { + opacity: 0-1 + } + } + } + +More detail and specific examples can be found in the included HTML file. + +*/(function(e){function r(r){function p(t,n,r){l||(l=!0,s=t.getCanvas(),o=e(s).parent(),i=t.getOptions(),t.setData(d(t.getData())))}function d(t){var n=0,r=0,s=0,o=i.series.pie.combine.color,u=[];for(var a=0;a<t.length;++a){var f=t[a].data;e.isArray(f)&&f.length==1&&(f=f[0]),e.isArray(f)?!isNaN(parseFloat(f[1]))&&isFinite(f[1])?f[1]=+f[1]:f[1]=0:!isNaN(parseFloat(f))&&isFinite(f)?f=[1,+f]:f=[1,0],t[a].data=[f]}for(var a=0;a<t.length;++a)n+=t[a].data[0][1];for(var a=0;a<t.length;++a){var f=t[a].data[0][1];f/n<=i.series.pie.combine.threshold&&(r+=f,s++,o||(o=t[a].color))}for(var a=0;a<t.length;++a){var f=t[a].data[0][1];(s<2||f/n>i.series.pie.combine.threshold)&&u.push({data:[[1,f]],color:t[a].color,label:t[a].label,angle:f*Math.PI*2/n,percent:f/(n/100)})}return s>1&&u.push({data:[[1,r]],color:o,label:i.series.pie.combine.label,angle:r*Math.PI*2/n,percent:r/(n/100)}),u}function v(r,s){function y(){c.clearRect(0,0,h,p),o.children().filter(".pieLabel, .pieLabelBackground").remove()}function b(){var e=i.series.pie.shadow.left,t=i.series.pie.shadow.top,n=10,r=i.series.pie.shadow.alpha,s=i.series.pie.radius>1?i.series.pie.radius:u*i.series.pie.radius;if(s>=h/2-e||s*i.series.pie.tilt>=p/2-t||s<=n)return;c.save(),c.translate(e,t),c.globalAlpha=r,c.fillStyle="#000",c.translate(a,f),c.scale(1,i.series.pie.tilt);for(var o=1;o<=n;o++)c.beginPath(),c.arc(0,0,s,0,Math.PI*2,!1),c.fill(),s-=o;c.restore()}function w(){function l(e,t,i){if(e<=0||isNaN(e))return;i?c.fillStyle=t:(c.strokeStyle=t,c.lineJoin="round"),c.beginPath(),Math.abs(e-Math.PI*2)>1e-9&&c.moveTo(0,0),c.arc(0,0,n,r,r+e/2,!1),c.arc(0,0,n,r+e/2,r+e,!1),c.closePath(),r+=e,i?c.fill():c.stroke()}function d(){function l(t,n,s){if(t.data[0][1]==0)return!0;var u=i.legend.labelFormatter,l,c=i.series.pie.label.formatter;u?l=u(t.label,t):l=t.label,c&&(l=c(l,t));var d=(n+t.angle+n)/2,v=a+Math.round(Math.cos(d)*r),m=f+Math.round(Math.sin(d)*r)*i.series.pie.tilt,g="<span class='pieLabel' id='pieLabel"+s+"' style='position:absolute;top:"+m+"px;left:"+v+"px;'>"+l+"</span>";o.append(g);var y=o.children("#pieLabel"+s),b=m-y.height()/2,w=v-y.width()/2;y.css("top",b),y.css("left",w);if(0-b>0||0-w>0||p-(b+y.height())<0||h-(w+y.width())<0)return!1;if(i.series.pie.label.background.opacity!=0){var E=i.series.pie.label.background.color;E==null&&(E=t.color);var S="top:"+b+"px;left:"+w+"px;";e("<div class='pieLabelBackground' style='position:absolute;width:"+y.width()+"px;height:"+y.height()+"px;"+S+"background-color:"+E+";'></div>").css("opacity",i.series.pie.label.background.opacity).insertBefore(y)}return!0}var n=t,r=i.series.pie.label.radius>1?i.series.pie.label.radius:u*i.series.pie.label.radius;for(var s=0;s<v.length;++s){if(v[s].percent>=i.series.pie.label.threshold*100&&!l(v[s],n,s))return!1;n+=v[s].angle}return!0}var t=Math.PI*i.series.pie.startAngle,n=i.series.pie.radius>1?i.series.pie.radius:u*i.series.pie.radius;c.save(),c.translate(a,f),c.scale(1,i.series.pie.tilt),c.save();var r=t;for(var s=0;s<v.length;++s)v[s].startAngle=r,l(v[s].angle,v[s].color,!0);c.restore();if(i.series.pie.stroke.width>0){c.save(),c.lineWidth=i.series.pie.stroke.width,r=t;for(var s=0;s<v.length;++s)l(v[s].angle,i.series.pie.stroke.color,!1);c.restore()}return m(c),c.restore(),i.series.pie.label.show?d():!0}if(!o)return;var h=r.getPlaceholder().width(),p=r.getPlaceholder().height(),d=o.children().filter(".legend").children().width()||0;c=s,l=!1,u=Math.min(h,p/i.series.pie.tilt)/2,f=p/2+i.series.pie.offset.top,a=h/2,i.series.pie.offset.left=="auto"?i.legend.position.match("w")?a+=d/2:a-=d/2:a+=i.series.pie.offset.left,a<u?a=u:a>h-u&&(a=h-u);var v=r.getData(),g=0;do g>0&&(u*=n),g+=1,y(),i.series.pie.tilt<=.8&&b();while(!w()&&g<t);g>=t&&(y(),o.prepend("<div class='error'>Could not draw pie with labels contained inside canvas</div>")),r.setSeries&&r.insertLegend&&(r.setSeries(v),r.insertLegend())}function m(e){if(i.series.pie.innerRadius>0){e.save();var t=i.series.pie.innerRadius>1?i.series.pie.innerRadius:u*i.series.pie.innerRadius;e.globalCompositeOperation="destination-out",e.beginPath(),e.fillStyle=i.series.pie.stroke.color,e.arc(0,0,t,0,Math.PI*2,!1),e.fill(),e.closePath(),e.restore(),e.save(),e.beginPath(),e.strokeStyle=i.series.pie.stroke.color,e.arc(0,0,t,0,Math.PI*2,!1),e.stroke(),e.closePath(),e.restore()}}function g(e,t){for(var n=!1,r=-1,i=e.length,s=i-1;++r<i;s=r)(e[r][1]<=t[1]&&t[1]<e[s][1]||e[s][1]<=t[1]&&t[1]<e[r][1])&&t[0]<(e[s][0]-e[r][0])*(t[1]-e[r][1])/(e[s][1]-e[r][1])+e[r][0]&&(n=!n);return n}function y(e,t){var n=r.getData(),i=r.getOptions(),s=i.series.pie.radius>1?i.series.pie.radius:u*i.series.pie.radius,o,l;for(var h=0;h<n.length;++h){var p=n[h];if(p.pie.show){c.save(),c.beginPath(),c.moveTo(0,0),c.arc(0,0,s,p.startAngle,p.startAngle+p.angle/2,!1),c.arc(0,0,s,p.startAngle+p.angle/2,p.startAngle+p.angle,!1),c.closePath(),o=e-a,l=t-f;if(c.isPointInPath){if(c.isPointInPath(e-a,t-f))return c.restore(),{datapoint:[p.percent,p.data],dataIndex:0,series:p,seriesIndex:h}}else{var d=s*Math.cos(p.startAngle),v=s*Math.sin(p.startAngle),m=s*Math.cos(p.startAngle+p.angle/4),y=s*Math.sin(p.startAngle+p.angle/4),b=s*Math.cos(p.startAngle+p.angle/2),w=s*Math.sin(p.startAngle+p.angle/2),E=s*Math.cos(p.startAngle+p.angle/1.5),S=s*Math.sin(p.startAngle+p.angle/1.5),x=s*Math.cos(p.startAngle+p.angle),T=s*Math.sin(p.startAngle+p.angle),N=[[0,0],[d,v],[m,y],[b,w],[E,S],[x,T]],C=[o,l];if(g(N,C))return c.restore(),{datapoint:[p.percent,p.data],dataIndex:0,series:p,seriesIndex:h}}c.restore()}}return null}function b(e){E("plothover",e)}function w(e){E("plotclick",e)}function E(e,t){var n=r.offset(),s=parseInt(t.pageX-n.left),u=parseInt(t.pageY-n.top),a=y(s,u);if(i.grid.autoHighlight)for(var f=0;f<h.length;++f){var l=h[f];l.auto==e&&(!a||l.series!=a.series)&&x(l.series)}a&&S(a.series,e);var c={pageX:t.pageX,pageY:t.pageY};o.trigger(e,[c,a])}function S(e,t){var n=T(e);n==-1?(h.push({series:e,auto:t}),r.triggerRedrawOverlay()):t||(h[n].auto=!1)}function x(e){e==null&&(h=[],r.triggerRedrawOverlay());var t=T(e);t!=-1&&(h.splice(t,1),r.triggerRedrawOverlay())}function T(e){for(var t=0;t<h.length;++t){var n=h[t];if(n.series==e)return t}return-1}function N(e,t){function s(e){if(e.angle<=0||isNaN(e.angle))return;t.fillStyle="rgba(255, 255, 255, "+n.series.pie.highlight.opacity+")",t.beginPath(),Math.abs(e.angle-Math.PI*2)>1e-9&&t.moveTo(0,0),t.arc(0,0,r,e.startAngle,e.startAngle+e.angle/2,!1),t.arc(0,0,r,e.startAngle+e.angle/2,e.startAngle+e.angle,!1),t.closePath(),t.fill()}var n=e.getOptions(),r=n.series.pie.radius>1?n.series.pie.radius:u*n.series.pie.radius;t.save(),t.translate(a,f),t.scale(1,n.series.pie.tilt);for(var i=0;i<h.length;++i)s(h[i].series);m(t),t.restore()}var s=null,o=null,u=null,a=null,f=null,l=!1,c=null,h=[];r.hooks.processOptions.push(function(e,t){t.series.pie.show&&(t.grid.show=!1,t.series.pie.label.show=="auto"&&(t.legend.show?t.series.pie.label.show=!1:t.series.pie.label.show=!0),t.series.pie.radius=="auto"&&(t.series.pie.label.show?t.series.pie.radius=.75:t.series.pie.radius=1),t.series.pie.tilt>1?t.series.pie.tilt=1:t.series.pie.tilt<0&&(t.series.pie.tilt=0))}),r.hooks.bindEvents.push(function(e,t){var n=e.getOptions();n.series.pie.show&&(n.grid.hoverable&&t.unbind("mousemove").mousemove(b),n.grid.clickable&&t.unbind("click").click(w))}),r.hooks.processDatapoints.push(function(e,t,n,r){var i=e.getOptions();i.series.pie.show&&p(e,t,n,r)}),r.hooks.drawOverlay.push(function(e,t){var n=e.getOptions();n.series.pie.show&&N(e,t)}),r.hooks.draw.push(function(e,t){var n=e.getOptions();n.series.pie.show&&v(e,t)})}var t=10,n=.95,i={series:{pie:{show:!1,radius:"auto",innerRadius:0,startAngle:1.5,tilt:1,shadow:{left:5,top:15,alpha:.02},offset:{top:0,left:"auto"},stroke:{color:"#fff",width:1},label:{show:"auto",formatter:function(e,t){return"<div style='font-size:x-small;text-align:center;padding:2px;color:"+t.color+";'>"+e+"<br/>"+Math.round(t.percent)+"%</div>"},radius:1,background:{color:null,opacity:0},threshold:0},combine:{threshold:-1,color:null,label:"Other"},highlight:{opacity:.5}}}};e.plot.plugins.push({init:r,options:i,name:"pie",version:"1.1"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.resize.js b/public/admin/view/javascript/jquery/flot/jquery.flot.resize.js new file mode 100644 index 0000000..6b2c5d4 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.resize.js @@ -0,0 +1,60 @@ +/* Flot plugin for automatically redrawing plots as the placeholder resizes. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +It works by listening for changes on the placeholder div (through the jQuery +resize event plugin) - if the size changes, it will redraw the plot. + +There are no options. If you need to disable the plugin for some plots, you +can just fix the size of their placeholders. + +*/ + +/* Inline dependency: + * jQuery resize event - v1.1 - 3/14/2010 + * http://benalman.com/projects/jquery-resize-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ + +(function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this); + +(function ($) { + var options = { }; // no options + + function init(plot) { + function onResize() { + var placeholder = plot.getPlaceholder(); + + // somebody might have hidden us and we can't plot + // when we don't have the dimensions + if (placeholder.width() == 0 || placeholder.height() == 0) + return; + + plot.resize(); + plot.setupGrid(); + plot.draw(); + } + + function bindEvents(plot, eventHolder) { + plot.getPlaceholder().resize(onResize); + } + + function shutdown(plot, eventHolder) { + plot.getPlaceholder().unbind("resize", onResize); + } + + plot.hooks.bindEvents.push(bindEvents); + plot.hooks.shutdown.push(shutdown); + } + + $.plot.plugins.push({ + init: init, + options: options, + name: 'resize', + version: '1.0' + }); +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.resize.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.resize.min.js new file mode 100644 index 0000000..b2ddec1 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.resize.min.js @@ -0,0 +1,19 @@ +/* Flot plugin for automatically redrawing plots as the placeholder resizes. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +It works by listening for changes on the placeholder div (through the jQuery +resize event plugin) - if the size changes, it will redraw the plot. + +There are no options. If you need to disable the plugin for some plots, you +can just fix the size of their placeholders. + +*//* Inline dependency: + * jQuery resize event - v1.1 - 3/14/2010 + * http://benalman.com/projects/jquery-resize-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */(function(e,t,n){function c(){s=t[o](function(){r.each(function(){var t=e(this),n=t.width(),r=t.height(),i=e.data(this,a);(n!==i.w||r!==i.h)&&t.trigger(u,[i.w=n,i.h=r])}),c()},i[f])}var r=e([]),i=e.resize=e.extend(e.resize,{}),s,o="setTimeout",u="resize",a=u+"-special-event",f="delay",l="throttleWindow";i[f]=250,i[l]=!0,e.event.special[u]={setup:function(){if(!i[l]&&this[o])return!1;var t=e(this);r=r.add(t),e.data(this,a,{w:t.width(),h:t.height()}),r.length===1&&c()},teardown:function(){if(!i[l]&&this[o])return!1;var t=e(this);r=r.not(t),t.removeData(a),r.length||clearTimeout(s)},add:function(t){function s(t,i,s){var o=e(this),u=e.data(this,a);u.w=i!==n?i:o.width(),u.h=s!==n?s:o.height(),r.apply(this,arguments)}if(!i[l]&&this[o])return!1;var r;if(e.isFunction(t))return r=t,s;r=t.handler,t.handler=s}}})(jQuery,this),function(e){function n(e){function t(){var t=e.getPlaceholder();if(t.width()==0||t.height()==0)return;e.resize(),e.setupGrid(),e.draw()}function n(e,n){e.getPlaceholder().resize(t)}function r(e,n){e.getPlaceholder().unbind("resize",t)}e.hooks.bindEvents.push(n),e.hooks.shutdown.push(r)}var t={};e.plot.plugins.push({init:n,options:t,name:"resize",version:"1.0"})}(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.selection.js b/public/admin/view/javascript/jquery/flot/jquery.flot.selection.js new file mode 100644 index 0000000..f8fa668 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.selection.js @@ -0,0 +1,360 @@ +/* Flot plugin for selecting regions of a plot. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The plugin supports these options: + +selection: { + mode: null or "x" or "y" or "xy", + color: color, + shape: "round" or "miter" or "bevel", + minSize: number of pixels +} + +Selection support is enabled by setting the mode to one of "x", "y" or "xy". +In "x" mode, the user will only be able to specify the x range, similarly for +"y" mode. For "xy", the selection becomes a rectangle where both ranges can be +specified. "color" is color of the selection (if you need to change the color +later on, you can get to it with plot.getOptions().selection.color). "shape" +is the shape of the corners of the selection. + +"minSize" is the minimum size a selection can be in pixels. This value can +be customized to determine the smallest size a selection can be and still +have the selection rectangle be displayed. When customizing this value, the +fact that it refers to pixels, not axis units must be taken into account. +Thus, for example, if there is a bar graph in time mode with BarWidth set to 1 +minute, setting "minSize" to 1 will not make the minimum selection size 1 +minute, but rather 1 pixel. Note also that setting "minSize" to 0 will prevent +"plotunselected" events from being fired when the user clicks the mouse without +dragging. + +When selection support is enabled, a "plotselected" event will be emitted on +the DOM element you passed into the plot function. The event handler gets a +parameter with the ranges selected on the axes, like this: + + placeholder.bind( "plotselected", function( event, ranges ) { + alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to) + // similar for yaxis - with multiple axes, the extra ones are in + // x2axis, x3axis, ... + }); + +The "plotselected" event is only fired when the user has finished making the +selection. A "plotselecting" event is fired during the process with the same +parameters as the "plotselected" event, in case you want to know what's +happening while it's happening, + +A "plotunselected" event with no arguments is emitted when the user clicks the +mouse to remove the selection. As stated above, setting "minSize" to 0 will +destroy this behavior. + +The plugin allso adds the following methods to the plot object: + +- setSelection( ranges, preventEvent ) + + Set the selection rectangle. The passed in ranges is on the same form as + returned in the "plotselected" event. If the selection mode is "x", you + should put in either an xaxis range, if the mode is "y" you need to put in + an yaxis range and both xaxis and yaxis if the selection mode is "xy", like + this: + + setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } }); + + setSelection will trigger the "plotselected" event when called. If you don't + want that to happen, e.g. if you're inside a "plotselected" handler, pass + true as the second parameter. If you are using multiple axes, you can + specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of + xaxis, the plugin picks the first one it sees. + +- clearSelection( preventEvent ) + + Clear the selection rectangle. Pass in true to avoid getting a + "plotunselected" event. + +- getSelection() + + Returns the current selection in the same format as the "plotselected" + event. If there's currently no selection, the function returns null. + +*/ + +(function ($) { + function init(plot) { + var selection = { + first: { x: -1, y: -1}, second: { x: -1, y: -1}, + show: false, + active: false + }; + + // FIXME: The drag handling implemented here should be + // abstracted out, there's some similar code from a library in + // the navigation plugin, this should be massaged a bit to fit + // the Flot cases here better and reused. Doing this would + // make this plugin much slimmer. + var savedhandlers = {}; + + var mouseUpHandler = null; + + function onMouseMove(e) { + if (selection.active) { + updateSelection(e); + + plot.getPlaceholder().trigger("plotselecting", [ getSelection() ]); + } + } + + function onMouseDown(e) { + if (e.which != 1) // only accept left-click + return; + + // cancel out any text selections + document.body.focus(); + + // prevent text selection and drag in old-school browsers + if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) { + savedhandlers.onselectstart = document.onselectstart; + document.onselectstart = function () { return false; }; + } + if (document.ondrag !== undefined && savedhandlers.ondrag == null) { + savedhandlers.ondrag = document.ondrag; + document.ondrag = function () { return false; }; + } + + setSelectionPos(selection.first, e); + + selection.active = true; + + // this is a bit silly, but we have to use a closure to be + // able to whack the same handler again + mouseUpHandler = function (e) { onMouseUp(e); }; + + $(document).one("mouseup", mouseUpHandler); + } + + function onMouseUp(e) { + mouseUpHandler = null; + + // revert drag stuff for old-school browsers + if (document.onselectstart !== undefined) + document.onselectstart = savedhandlers.onselectstart; + if (document.ondrag !== undefined) + document.ondrag = savedhandlers.ondrag; + + // no more dragging + selection.active = false; + updateSelection(e); + + if (selectionIsSane()) + triggerSelectedEvent(); + else { + // this counts as a clear + plot.getPlaceholder().trigger("plotunselected", [ ]); + plot.getPlaceholder().trigger("plotselecting", [ null ]); + } + + return false; + } + + function getSelection() { + if (!selectionIsSane()) + return null; + + if (!selection.show) return null; + + var r = {}, c1 = selection.first, c2 = selection.second; + $.each(plot.getAxes(), function (name, axis) { + if (axis.used) { + var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]); + r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) }; + } + }); + return r; + } + + function triggerSelectedEvent() { + var r = getSelection(); + + plot.getPlaceholder().trigger("plotselected", [ r ]); + + // backwards-compat stuff, to be removed in future + if (r.xaxis && r.yaxis) + plot.getPlaceholder().trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]); + } + + function clamp(min, value, max) { + return value < min ? min: (value > max ? max: value); + } + + function setSelectionPos(pos, e) { + var o = plot.getOptions(); + var offset = plot.getPlaceholder().offset(); + var plotOffset = plot.getPlotOffset(); + pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width()); + pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height()); + + if (o.selection.mode == "y") + pos.x = pos == selection.first ? 0 : plot.width(); + + if (o.selection.mode == "x") + pos.y = pos == selection.first ? 0 : plot.height(); + } + + function updateSelection(pos) { + if (pos.pageX == null) + return; + + setSelectionPos(selection.second, pos); + if (selectionIsSane()) { + selection.show = true; + plot.triggerRedrawOverlay(); + } + else + clearSelection(true); + } + + function clearSelection(preventEvent) { + if (selection.show) { + selection.show = false; + plot.triggerRedrawOverlay(); + if (!preventEvent) + plot.getPlaceholder().trigger("plotunselected", [ ]); + } + } + + // function taken from markings support in Flot + function extractRange(ranges, coord) { + var axis, from, to, key, axes = plot.getAxes(); + + for (var k in axes) { + axis = axes[k]; + if (axis.direction == coord) { + key = coord + axis.n + "axis"; + if (!ranges[key] && axis.n == 1) + key = coord + "axis"; // support x1axis as xaxis + if (ranges[key]) { + from = ranges[key].from; + to = ranges[key].to; + break; + } + } + } + + // backwards-compat stuff - to be removed in future + if (!ranges[key]) { + axis = coord == "x" ? plot.getXAxes()[0] : plot.getYAxes()[0]; + from = ranges[coord + "1"]; + to = ranges[coord + "2"]; + } + + // auto-reverse as an added bonus + if (from != null && to != null && from > to) { + var tmp = from; + from = to; + to = tmp; + } + + return { from: from, to: to, axis: axis }; + } + + function setSelection(ranges, preventEvent) { + var axis, range, o = plot.getOptions(); + + if (o.selection.mode == "y") { + selection.first.x = 0; + selection.second.x = plot.width(); + } + else { + range = extractRange(ranges, "x"); + + selection.first.x = range.axis.p2c(range.from); + selection.second.x = range.axis.p2c(range.to); + } + + if (o.selection.mode == "x") { + selection.first.y = 0; + selection.second.y = plot.height(); + } + else { + range = extractRange(ranges, "y"); + + selection.first.y = range.axis.p2c(range.from); + selection.second.y = range.axis.p2c(range.to); + } + + selection.show = true; + plot.triggerRedrawOverlay(); + if (!preventEvent && selectionIsSane()) + triggerSelectedEvent(); + } + + function selectionIsSane() { + var minSize = plot.getOptions().selection.minSize; + return Math.abs(selection.second.x - selection.first.x) >= minSize && + Math.abs(selection.second.y - selection.first.y) >= minSize; + } + + plot.clearSelection = clearSelection; + plot.setSelection = setSelection; + plot.getSelection = getSelection; + + plot.hooks.bindEvents.push(function(plot, eventHolder) { + var o = plot.getOptions(); + if (o.selection.mode != null) { + eventHolder.mousemove(onMouseMove); + eventHolder.mousedown(onMouseDown); + } + }); + + + plot.hooks.drawOverlay.push(function (plot, ctx) { + // draw selection + if (selection.show && selectionIsSane()) { + var plotOffset = plot.getPlotOffset(); + var o = plot.getOptions(); + + ctx.save(); + ctx.translate(plotOffset.left, plotOffset.top); + + var c = $.color.parse(o.selection.color); + + ctx.strokeStyle = c.scale('a', 0.8).toString(); + ctx.lineWidth = 1; + ctx.lineJoin = o.selection.shape; + ctx.fillStyle = c.scale('a', 0.4).toString(); + + var x = Math.min(selection.first.x, selection.second.x) + 0.5, + y = Math.min(selection.first.y, selection.second.y) + 0.5, + w = Math.abs(selection.second.x - selection.first.x) - 1, + h = Math.abs(selection.second.y - selection.first.y) - 1; + + ctx.fillRect(x, y, w, h); + ctx.strokeRect(x, y, w, h); + + ctx.restore(); + } + }); + + plot.hooks.shutdown.push(function (plot, eventHolder) { + eventHolder.unbind("mousemove", onMouseMove); + eventHolder.unbind("mousedown", onMouseDown); + + if (mouseUpHandler) + $(document).unbind("mouseup", mouseUpHandler); + }); + + } + + $.plot.plugins.push({ + init: init, + options: { + selection: { + mode: null, // one of null, "x", "y" or "xy" + color: "#e8cfac", + shape: "round", // one of "round", "miter", or "bevel" + minSize: 5 // minimum number of pixels + } + }, + name: 'selection', + version: '1.1' + }); +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.selection.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.selection.min.js new file mode 100644 index 0000000..bbfb975 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.selection.min.js @@ -0,0 +1,79 @@ +/* Flot plugin for selecting regions of a plot. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The plugin supports these options: + +selection: { + mode: null or "x" or "y" or "xy", + color: color, + shape: "round" or "miter" or "bevel", + minSize: number of pixels +} + +Selection support is enabled by setting the mode to one of "x", "y" or "xy". +In "x" mode, the user will only be able to specify the x range, similarly for +"y" mode. For "xy", the selection becomes a rectangle where both ranges can be +specified. "color" is color of the selection (if you need to change the color +later on, you can get to it with plot.getOptions().selection.color). "shape" +is the shape of the corners of the selection. + +"minSize" is the minimum size a selection can be in pixels. This value can +be customized to determine the smallest size a selection can be and still +have the selection rectangle be displayed. When customizing this value, the +fact that it refers to pixels, not axis units must be taken into account. +Thus, for example, if there is a bar graph in time mode with BarWidth set to 1 +minute, setting "minSize" to 1 will not make the minimum selection size 1 +minute, but rather 1 pixel. Note also that setting "minSize" to 0 will prevent +"plotunselected" events from being fired when the user clicks the mouse without +dragging. + +When selection support is enabled, a "plotselected" event will be emitted on +the DOM element you passed into the plot function. The event handler gets a +parameter with the ranges selected on the axes, like this: + + placeholder.bind( "plotselected", function( event, ranges ) { + alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to) + // similar for yaxis - with multiple axes, the extra ones are in + // x2axis, x3axis, ... + }); + +The "plotselected" event is only fired when the user has finished making the +selection. A "plotselecting" event is fired during the process with the same +parameters as the "plotselected" event, in case you want to know what's +happening while it's happening, + +A "plotunselected" event with no arguments is emitted when the user clicks the +mouse to remove the selection. As stated above, setting "minSize" to 0 will +destroy this behavior. + +The plugin allso adds the following methods to the plot object: + +- setSelection( ranges, preventEvent ) + + Set the selection rectangle. The passed in ranges is on the same form as + returned in the "plotselected" event. If the selection mode is "x", you + should put in either an xaxis range, if the mode is "y" you need to put in + an yaxis range and both xaxis and yaxis if the selection mode is "xy", like + this: + + setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } }); + + setSelection will trigger the "plotselected" event when called. If you don't + want that to happen, e.g. if you're inside a "plotselected" handler, pass + true as the second parameter. If you are using multiple axes, you can + specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of + xaxis, the plugin picks the first one it sees. + +- clearSelection( preventEvent ) + + Clear the selection rectangle. Pass in true to avoid getting a + "plotunselected" event. + +- getSelection() + + Returns the current selection in the same format as the "plotselected" + event. If there's currently no selection, the function returns null. + +*/(function(e){function t(t){function s(e){n.active&&(h(e),t.getPlaceholder().trigger("plotselecting",[a()]))}function o(t){if(t.which!=1)return;document.body.focus(),document.onselectstart!==undefined&&r.onselectstart==null&&(r.onselectstart=document.onselectstart,document.onselectstart=function(){return!1}),document.ondrag!==undefined&&r.ondrag==null&&(r.ondrag=document.ondrag,document.ondrag=function(){return!1}),c(n.first,t),n.active=!0,i=function(e){u(e)},e(document).one("mouseup",i)}function u(e){return i=null,document.onselectstart!==undefined&&(document.onselectstart=r.onselectstart),document.ondrag!==undefined&&(document.ondrag=r.ondrag),n.active=!1,h(e),m()?f():(t.getPlaceholder().trigger("plotunselected",[]),t.getPlaceholder().trigger("plotselecting",[null])),!1}function a(){if(!m())return null;if(!n.show)return null;var r={},i=n.first,s=n.second;return e.each(t.getAxes(),function(e,t){if(t.used){var n=t.c2p(i[t.direction]),o=t.c2p(s[t.direction]);r[e]={from:Math.min(n,o),to:Math.max(n,o)}}}),r}function f(){var e=a();t.getPlaceholder().trigger("plotselected",[e]),e.xaxis&&e.yaxis&&t.getPlaceholder().trigger("selected",[{x1:e.xaxis.from,y1:e.yaxis.from,x2:e.xaxis.to,y2:e.yaxis.to}])}function l(e,t,n){return t<e?e:t>n?n:t}function c(e,r){var i=t.getOptions(),s=t.getPlaceholder().offset(),o=t.getPlotOffset();e.x=l(0,r.pageX-s.left-o.left,t.width()),e.y=l(0,r.pageY-s.top-o.top,t.height()),i.selection.mode=="y"&&(e.x=e==n.first?0:t.width()),i.selection.mode=="x"&&(e.y=e==n.first?0:t.height())}function h(e){if(e.pageX==null)return;c(n.second,e),m()?(n.show=!0,t.triggerRedrawOverlay()):p(!0)}function p(e){n.show&&(n.show=!1,t.triggerRedrawOverlay(),e||t.getPlaceholder().trigger("plotunselected",[]))}function d(e,n){var r,i,s,o,u=t.getAxes();for(var a in u){r=u[a];if(r.direction==n){o=n+r.n+"axis",!e[o]&&r.n==1&&(o=n+"axis");if(e[o]){i=e[o].from,s=e[o].to;break}}}e[o]||(r=n=="x"?t.getXAxes()[0]:t.getYAxes()[0],i=e[n+"1"],s=e[n+"2"]);if(i!=null&&s!=null&&i>s){var f=i;i=s,s=f}return{from:i,to:s,axis:r}}function v(e,r){var i,s,o=t.getOptions();o.selection.mode=="y"?(n.first.x=0,n.second.x=t.width()):(s=d(e,"x"),n.first.x=s.axis.p2c(s.from),n.second.x=s.axis.p2c(s.to)),o.selection.mode=="x"?(n.first.y=0,n.second.y=t.height()):(s=d(e,"y"),n.first.y=s.axis.p2c(s.from),n.second.y=s.axis.p2c(s.to)),n.show=!0,t.triggerRedrawOverlay(),!r&&m()&&f()}function m(){var e=t.getOptions().selection.minSize;return Math.abs(n.second.x-n.first.x)>=e&&Math.abs(n.second.y-n.first.y)>=e}var n={first:{x:-1,y:-1},second:{x:-1,y:-1},show:!1,active:!1},r={},i=null;t.clearSelection=p,t.setSelection=v,t.getSelection=a,t.hooks.bindEvents.push(function(e,t){var n=e.getOptions();n.selection.mode!=null&&(t.mousemove(s),t.mousedown(o))}),t.hooks.drawOverlay.push(function(t,r){if(n.show&&m()){var i=t.getPlotOffset(),s=t.getOptions();r.save(),r.translate(i.left,i.top);var o=e.color.parse(s.selection.color);r.strokeStyle=o.scale("a",.8).toString(),r.lineWidth=1,r.lineJoin=s.selection.shape,r.fillStyle=o.scale("a",.4).toString();var u=Math.min(n.first.x,n.second.x)+.5,a=Math.min(n.first.y,n.second.y)+.5,f=Math.abs(n.second.x-n.first.x)-1,l=Math.abs(n.second.y-n.first.y)-1;r.fillRect(u,a,f,l),r.strokeRect(u,a,f,l),r.restore()}}),t.hooks.shutdown.push(function(t,n){n.unbind("mousemove",s),n.unbind("mousedown",o),i&&e(document).unbind("mouseup",i)})}e.plot.plugins.push({init:t,options:{selection:{mode:null,color:"#e8cfac",shape:"round",minSize:5}},name:"selection",version:"1.1"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.stack.js b/public/admin/view/javascript/jquery/flot/jquery.flot.stack.js new file mode 100644 index 0000000..c01de67 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.stack.js @@ -0,0 +1,188 @@ +/* Flot plugin for stacking data sets rather than overlyaing them. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The plugin assumes the data is sorted on x (or y if stacking horizontally). +For line charts, it is assumed that if a line has an undefined gap (from a +null point), then the line above it should have the same gap - insert zeros +instead of "null" if you want another behaviour. This also holds for the start +and end of the chart. Note that stacking a mix of positive and negative values +in most instances doesn't make sense (so it looks weird). + +Two or more series are stacked when their "stack" attribute is set to the same +key (which can be any number or string or just "true"). To specify the default +stack, you can set the stack option like this: + + series: { + stack: null/false, true, or a key (number/string) + } + +You can also specify it for a single series, like this: + + $.plot( $("#placeholder"), [{ + data: [ ... ], + stack: true + }]) + +The stacking order is determined by the order of the data series in the array +(later series end up on top of the previous). + +Internally, the plugin modifies the datapoints in each series, adding an +offset to the y value. For line series, extra data points are inserted through +interpolation. If there's a second y value, it's also adjusted (e.g for bar +charts or filled areas). + +*/ + +(function ($) { + var options = { + series: { stack: null } // or number/string + }; + + function init(plot) { + function findMatchingSeries(s, allseries) { + var res = null; + for (var i = 0; i < allseries.length; ++i) { + if (s == allseries[i]) + break; + + if (allseries[i].stack == s.stack) + res = allseries[i]; + } + + return res; + } + + function stackData(plot, s, datapoints) { + if (s.stack == null || s.stack === false) + return; + + var other = findMatchingSeries(s, plot.getData()); + if (!other) + return; + + var ps = datapoints.pointsize, + points = datapoints.points, + otherps = other.datapoints.pointsize, + otherpoints = other.datapoints.points, + newpoints = [], + px, py, intery, qx, qy, bottom, + withlines = s.lines.show, + horizontal = s.bars.horizontal, + withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y), + withsteps = withlines && s.lines.steps, + fromgap = true, + keyOffset = horizontal ? 1 : 0, + accumulateOffset = horizontal ? 0 : 1, + i = 0, j = 0, l, m; + + while (true) { + if (i >= points.length) + break; + + l = newpoints.length; + + if (points[i] == null) { + // copy gaps + for (m = 0; m < ps; ++m) + newpoints.push(points[i + m]); + i += ps; + } + else if (j >= otherpoints.length) { + // for lines, we can't use the rest of the points + if (!withlines) { + for (m = 0; m < ps; ++m) + newpoints.push(points[i + m]); + } + i += ps; + } + else if (otherpoints[j] == null) { + // oops, got a gap + for (m = 0; m < ps; ++m) + newpoints.push(null); + fromgap = true; + j += otherps; + } + else { + // cases where we actually got two points + px = points[i + keyOffset]; + py = points[i + accumulateOffset]; + qx = otherpoints[j + keyOffset]; + qy = otherpoints[j + accumulateOffset]; + bottom = 0; + + if (px == qx) { + for (m = 0; m < ps; ++m) + newpoints.push(points[i + m]); + + newpoints[l + accumulateOffset] += qy; + bottom = qy; + + i += ps; + j += otherps; + } + else if (px > qx) { + // we got past point below, might need to + // insert interpolated extra point + if (withlines && i > 0 && points[i - ps] != null) { + intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px); + newpoints.push(qx); + newpoints.push(intery + qy); + for (m = 2; m < ps; ++m) + newpoints.push(points[i + m]); + bottom = qy; + } + + j += otherps; + } + else { // px < qx + if (fromgap && withlines) { + // if we come from a gap, we just skip this point + i += ps; + continue; + } + + for (m = 0; m < ps; ++m) + newpoints.push(points[i + m]); + + // we might be able to interpolate a point below, + // this can give us a better y + if (withlines && j > 0 && otherpoints[j - otherps] != null) + bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx); + + newpoints[l + accumulateOffset] += bottom; + + i += ps; + } + + fromgap = false; + + if (l != newpoints.length && withbottom) + newpoints[l + 2] += bottom; + } + + // maintain the line steps invariant + if (withsteps && l != newpoints.length && l > 0 + && newpoints[l] != null + && newpoints[l] != newpoints[l - ps] + && newpoints[l + 1] != newpoints[l - ps + 1]) { + for (m = 0; m < ps; ++m) + newpoints[l + ps + m] = newpoints[l + m]; + newpoints[l + 1] = newpoints[l - ps + 1]; + } + } + + datapoints.points = newpoints; + } + + plot.hooks.processDatapoints.push(stackData); + } + + $.plot.plugins.push({ + init: init, + options: options, + name: 'stack', + version: '1.2' + }); +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.stack.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.stack.min.js new file mode 100644 index 0000000..14e9931 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.stack.min.js @@ -0,0 +1,36 @@ +/* Flot plugin for stacking data sets rather than overlyaing them. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The plugin assumes the data is sorted on x (or y if stacking horizontally). +For line charts, it is assumed that if a line has an undefined gap (from a +null point), then the line above it should have the same gap - insert zeros +instead of "null" if you want another behaviour. This also holds for the start +and end of the chart. Note that stacking a mix of positive and negative values +in most instances doesn't make sense (so it looks weird). + +Two or more series are stacked when their "stack" attribute is set to the same +key (which can be any number or string or just "true"). To specify the default +stack, you can set the stack option like this: + + series: { + stack: null/false, true, or a key (number/string) + } + +You can also specify it for a single series, like this: + + $.plot( $("#placeholder"), [{ + data: [ ... ], + stack: true + }]) + +The stacking order is determined by the order of the data series in the array +(later series end up on top of the previous). + +Internally, the plugin modifies the datapoints in each series, adding an +offset to the y value. For line series, extra data points are inserted through +interpolation. If there's a second y value, it's also adjusted (e.g for bar +charts or filled areas). + +*/(function(e){function n(e){function t(e,t){var n=null;for(var r=0;r<t.length;++r){if(e==t[r])break;t[r].stack==e.stack&&(n=t[r])}return n}function n(e,n,r){if(n.stack==null||n.stack===!1)return;var i=t(n,e.getData());if(!i)return;var s=r.pointsize,o=r.points,u=i.datapoints.pointsize,a=i.datapoints.points,f=[],l,c,h,p,d,v,m=n.lines.show,g=n.bars.horizontal,y=s>2&&(g?r.format[2].x:r.format[2].y),b=m&&n.lines.steps,w=!0,E=g?1:0,S=g?0:1,x=0,T=0,N,C;for(;;){if(x>=o.length)break;N=f.length;if(o[x]==null){for(C=0;C<s;++C)f.push(o[x+C]);x+=s}else if(T>=a.length){if(!m)for(C=0;C<s;++C)f.push(o[x+C]);x+=s}else if(a[T]==null){for(C=0;C<s;++C)f.push(null);w=!0,T+=u}else{l=o[x+E],c=o[x+S],p=a[T+E],d=a[T+S],v=0;if(l==p){for(C=0;C<s;++C)f.push(o[x+C]);f[N+S]+=d,v=d,x+=s,T+=u}else if(l>p){if(m&&x>0&&o[x-s]!=null){h=c+(o[x-s+S]-c)*(p-l)/(o[x-s+E]-l),f.push(p),f.push(h+d);for(C=2;C<s;++C)f.push(o[x+C]);v=d}T+=u}else{if(w&&m){x+=s;continue}for(C=0;C<s;++C)f.push(o[x+C]);m&&T>0&&a[T-u]!=null&&(v=d+(a[T-u+S]-d)*(l-p)/(a[T-u+E]-p)),f[N+S]+=v,x+=s}w=!1,N!=f.length&&y&&(f[N+2]+=v)}if(b&&N!=f.length&&N>0&&f[N]!=null&&f[N]!=f[N-s]&&f[N+1]!=f[N-s+1]){for(C=0;C<s;++C)f[N+s+C]=f[N+C];f[N+1]=f[N-s+1]}}r.points=f}e.hooks.processDatapoints.push(n)}var t={series:{stack:null}};e.plot.plugins.push({init:n,options:t,name:"stack",version:"1.2"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.symbol.js b/public/admin/view/javascript/jquery/flot/jquery.flot.symbol.js new file mode 100644 index 0000000..cc181ff --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.symbol.js @@ -0,0 +1,71 @@ +/* Flot plugin that adds some extra symbols for plotting points. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The symbols are accessed as strings through the standard symbol options: + + series: { + points: { + symbol: "square" // or "diamond", "triangle", "cross" + } + } + +*/ + +(function ($) { + function processRawData(plot, series, datapoints) { + // we normalize the area of each symbol so it is approximately the + // same as a circle of the given radius + + var handlers = { + square: function (ctx, x, y, radius, shadow) { + // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 + var size = radius * Math.sqrt(Math.PI) / 2; + ctx.rect(x - size, y - size, size + size, size + size); + }, + diamond: function (ctx, x, y, radius, shadow) { + // pi * r^2 = 2s^2 => s = r * sqrt(pi/2) + var size = radius * Math.sqrt(Math.PI / 2); + ctx.moveTo(x - size, y); + ctx.lineTo(x, y - size); + ctx.lineTo(x + size, y); + ctx.lineTo(x, y + size); + ctx.lineTo(x - size, y); + }, + triangle: function (ctx, x, y, radius, shadow) { + // pi * r^2 = 1/2 * s^2 * sin (pi / 3) => s = r * sqrt(2 * pi / sin(pi / 3)) + var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3)); + var height = size * Math.sin(Math.PI / 3); + ctx.moveTo(x - size/2, y + height/2); + ctx.lineTo(x + size/2, y + height/2); + if (!shadow) { + ctx.lineTo(x, y - height/2); + ctx.lineTo(x - size/2, y + height/2); + } + }, + cross: function (ctx, x, y, radius, shadow) { + // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 + var size = radius * Math.sqrt(Math.PI) / 2; + ctx.moveTo(x - size, y - size); + ctx.lineTo(x + size, y + size); + ctx.moveTo(x - size, y + size); + ctx.lineTo(x + size, y - size); + } + }; + + var s = series.points.symbol; + if (handlers[s]) + series.points.symbol = handlers[s]; + } + + function init(plot) { + plot.hooks.processDatapoints.push(processRawData); + } + + $.plot.plugins.push({ + init: init, + name: 'symbols', + version: '1.0' + }); +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.symbol.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.symbol.min.js new file mode 100644 index 0000000..b78ea2e --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.symbol.min.js @@ -0,0 +1,14 @@ +/* Flot plugin that adds some extra symbols for plotting points. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The symbols are accessed as strings through the standard symbol options: + + series: { + points: { + symbol: "square" // or "diamond", "triangle", "cross" + } + } + +*/(function(e){function t(e,t,n){var r={square:function(e,t,n,r,i){var s=r*Math.sqrt(Math.PI)/2;e.rect(t-s,n-s,s+s,s+s)},diamond:function(e,t,n,r,i){var s=r*Math.sqrt(Math.PI/2);e.moveTo(t-s,n),e.lineTo(t,n-s),e.lineTo(t+s,n),e.lineTo(t,n+s),e.lineTo(t-s,n)},triangle:function(e,t,n,r,i){var s=r*Math.sqrt(2*Math.PI/Math.sin(Math.PI/3)),o=s*Math.sin(Math.PI/3);e.moveTo(t-s/2,n+o/2),e.lineTo(t+s/2,n+o/2),i||(e.lineTo(t,n-o/2),e.lineTo(t-s/2,n+o/2))},cross:function(e,t,n,r,i){var s=r*Math.sqrt(Math.PI)/2;e.moveTo(t-s,n-s),e.lineTo(t+s,n+s),e.moveTo(t-s,n+s),e.lineTo(t+s,n-s)}},i=t.points.symbol;r[i]&&(t.points.symbol=r[i])}function n(e){e.hooks.processDatapoints.push(t)}e.plot.plugins.push({init:n,name:"symbols",version:"1.0"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.threshold.js b/public/admin/view/javascript/jquery/flot/jquery.flot.threshold.js new file mode 100644 index 0000000..2f6e635 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.threshold.js @@ -0,0 +1,142 @@ +/* Flot plugin for thresholding data. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The plugin supports these options: + + series: { + threshold: { + below: number + color: colorspec + } + } + +It can also be applied to a single series, like this: + + $.plot( $("#placeholder"), [{ + data: [ ... ], + threshold: { ... } + }]) + +An array can be passed for multiple thresholding, like this: + + threshold: [{ + below: number1 + color: color1 + },{ + below: number2 + color: color2 + }] + +These multiple threshold objects can be passed in any order since they are +sorted by the processing function. + +The data points below "below" are drawn with the specified color. This makes +it easy to mark points below 0, e.g. for budget data. + +Internally, the plugin works by splitting the data into two series, above and +below the threshold. The extra series below the threshold will have its label +cleared and the special "originSeries" attribute set to the original series. +You may need to check for this in hover events. + +*/ + +(function ($) { + var options = { + series: { threshold: null } // or { below: number, color: color spec} + }; + + function init(plot) { + function thresholdData(plot, s, datapoints, below, color) { + var ps = datapoints.pointsize, i, x, y, p, prevp, + thresholded = $.extend({}, s); // note: shallow copy + + thresholded.datapoints = { points: [], pointsize: ps, format: datapoints.format }; + thresholded.label = null; + thresholded.color = color; + thresholded.threshold = null; + thresholded.originSeries = s; + thresholded.data = []; + + var origpoints = datapoints.points, + addCrossingPoints = s.lines.show; + + var threspoints = []; + var newpoints = []; + var m; + + for (i = 0; i < origpoints.length; i += ps) { + x = origpoints[i]; + y = origpoints[i + 1]; + + prevp = p; + if (y < below) + p = threspoints; + else + p = newpoints; + + if (addCrossingPoints && prevp != p && x != null + && i > 0 && origpoints[i - ps] != null) { + var interx = x + (below - y) * (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]); + prevp.push(interx); + prevp.push(below); + for (m = 2; m < ps; ++m) + prevp.push(origpoints[i + m]); + + p.push(null); // start new segment + p.push(null); + for (m = 2; m < ps; ++m) + p.push(origpoints[i + m]); + p.push(interx); + p.push(below); + for (m = 2; m < ps; ++m) + p.push(origpoints[i + m]); + } + + p.push(x); + p.push(y); + for (m = 2; m < ps; ++m) + p.push(origpoints[i + m]); + } + + datapoints.points = newpoints; + thresholded.datapoints.points = threspoints; + + if (thresholded.datapoints.points.length > 0) { + var origIndex = $.inArray(s, plot.getData()); + // Insert newly-generated series right after original one (to prevent it from becoming top-most) + plot.getData().splice(origIndex + 1, 0, thresholded); + } + + // FIXME: there are probably some edge cases left in bars + } + + function processThresholds(plot, s, datapoints) { + if (!s.threshold) + return; + + if (s.threshold instanceof Array) { + s.threshold.sort(function(a, b) { + return a.below - b.below; + }); + + $(s.threshold).each(function(i, th) { + thresholdData(plot, s, datapoints, th.below, th.color); + }); + } + else { + thresholdData(plot, s, datapoints, s.threshold.below, s.threshold.color); + } + } + + plot.hooks.processDatapoints.push(processThresholds); + } + + $.plot.plugins.push({ + init: init, + options: options, + name: 'threshold', + version: '1.2' + }); +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.threshold.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.threshold.min.js new file mode 100644 index 0000000..1ca88a6 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.threshold.min.js @@ -0,0 +1,43 @@ +/* Flot plugin for thresholding data. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +The plugin supports these options: + + series: { + threshold: { + below: number + color: colorspec + } + } + +It can also be applied to a single series, like this: + + $.plot( $("#placeholder"), [{ + data: [ ... ], + threshold: { ... } + }]) + +An array can be passed for multiple thresholding, like this: + + threshold: [{ + below: number1 + color: color1 + },{ + below: number2 + color: color2 + }] + +These multiple threshold objects can be passed in any order since they are +sorted by the processing function. + +The data points below "below" are drawn with the specified color. This makes +it easy to mark points below 0, e.g. for budget data. + +Internally, the plugin works by splitting the data into two series, above and +below the threshold. The extra series below the threshold will have its label +cleared and the special "originSeries" attribute set to the original series. +You may need to check for this in hover events. + +*/(function(e){function n(t){function n(t,n,r,i,s){var o=r.pointsize,u,a,f,l,c,h=e.extend({},n);h.datapoints={points:[],pointsize:o,format:r.format},h.label=null,h.color=s,h.threshold=null,h.originSeries=n,h.data=[];var p=r.points,d=n.lines.show,v=[],m=[],g;for(u=0;u<p.length;u+=o){a=p[u],f=p[u+1],c=l,f<i?l=v:l=m;if(d&&c!=l&&a!=null&&u>0&&p[u-o]!=null){var y=a+(i-f)*(a-p[u-o])/(f-p[u-o+1]);c.push(y),c.push(i);for(g=2;g<o;++g)c.push(p[u+g]);l.push(null),l.push(null);for(g=2;g<o;++g)l.push(p[u+g]);l.push(y),l.push(i);for(g=2;g<o;++g)l.push(p[u+g])}l.push(a),l.push(f);for(g=2;g<o;++g)l.push(p[u+g])}r.points=m,h.datapoints.points=v;if(h.datapoints.points.length>0){var b=e.inArray(n,t.getData());t.getData().splice(b+1,0,h)}}function r(t,r,i){if(!r.threshold)return;r.threshold instanceof Array?(r.threshold.sort(function(e,t){return e.below-t.below}),e(r.threshold).each(function(e,o){n(t,r,i,o.below,o.color)})):n(t,r,i,r.threshold.below,r.threshold.color)}t.hooks.processDatapoints.push(r)}var t={series:{threshold:null}};e.plot.plugins.push({init:n,options:t,name:"threshold",version:"1.2"})})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.time.js b/public/admin/view/javascript/jquery/flot/jquery.flot.time.js new file mode 100644 index 0000000..15f5281 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.time.js @@ -0,0 +1,431 @@ +/* Pretty handling of time axes. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +Set axis.mode to "time" to enable. See the section "Time series data" in +API.txt for details. + +*/ + +(function($) { + + var options = { + xaxis: { + timezone: null, // "browser" for local to the client or timezone for timezone-js + timeformat: null, // format string to use + twelveHourClock: false, // 12 or 24 time in time mode + monthNames: null // list of names of months + } + }; + + // round to nearby lower multiple of base + + function floorInBase(n, base) { + return base * Math.floor(n / base); + } + + // Returns a string with the date d formatted according to fmt. + // A subset of the Open Group's strftime format is supported. + + function formatDate(d, fmt, monthNames, dayNames) { + + if (typeof d.strftime == "function") { + return d.strftime(fmt); + } + + var leftPad = function(n, pad) { + n = "" + n; + pad = "" + (pad == null ? "0" : pad); + return n.length == 1 ? pad + n : n; + }; + + var r = []; + var escape = false; + var hours = d.getHours(); + var isAM = hours < 12; + + if (monthNames == null) { + monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + } + + if (dayNames == null) { + dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; + } + + var hours12; + + if (hours > 12) { + hours12 = hours - 12; + } else if (hours == 0) { + hours12 = 12; + } else { + hours12 = hours; + } + + for (var i = 0; i < fmt.length; ++i) { + + var c = fmt.charAt(i); + + if (escape) { + switch (c) { + case 'a': c = "" + dayNames[d.getDay()]; break; + case 'b': c = "" + monthNames[d.getMonth()]; break; + case 'd': c = leftPad(d.getDate()); break; + case 'e': c = leftPad(d.getDate(), " "); break; + case 'h': // For back-compat with 0.7; remove in 1.0 + case 'H': c = leftPad(hours); break; + case 'I': c = leftPad(hours12); break; + case 'l': c = leftPad(hours12, " "); break; + case 'm': c = leftPad(d.getMonth() + 1); break; + case 'M': c = leftPad(d.getMinutes()); break; + // quarters not in Open Group's strftime specification + case 'q': + c = "" + (Math.floor(d.getMonth() / 3) + 1); break; + case 'S': c = leftPad(d.getSeconds()); break; + case 'y': c = leftPad(d.getFullYear() % 100); break; + case 'Y': c = "" + d.getFullYear(); break; + case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break; + case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break; + case 'w': c = "" + d.getDay(); break; + } + r.push(c); + escape = false; + } else { + if (c == "%") { + escape = true; + } else { + r.push(c); + } + } + } + + return r.join(""); + } + + // To have a consistent view of time-based data independent of which time + // zone the client happens to be in we need a date-like object independent + // of time zones. This is done through a wrapper that only calls the UTC + // versions of the accessor methods. + + function makeUtcWrapper(d) { + + function addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) { + sourceObj[sourceMethod] = function() { + return targetObj[targetMethod].apply(targetObj, arguments); + }; + }; + + var utc = { + date: d + }; + + // support strftime, if found + + if (d.strftime != undefined) { + addProxyMethod(utc, "strftime", d, "strftime"); + } + + addProxyMethod(utc, "getTime", d, "getTime"); + addProxyMethod(utc, "setTime", d, "setTime"); + + var props = ["Date", "Day", "FullYear", "Hours", "Milliseconds", "Minutes", "Month", "Seconds"]; + + for (var p = 0; p < props.length; p++) { + addProxyMethod(utc, "get" + props[p], d, "getUTC" + props[p]); + addProxyMethod(utc, "set" + props[p], d, "setUTC" + props[p]); + } + + return utc; + }; + + // select time zone strategy. This returns a date-like object tied to the + // desired timezone + + function dateGenerator(ts, opts) { + if (opts.timezone == "browser") { + return new Date(ts); + } else if (!opts.timezone || opts.timezone == "utc") { + return makeUtcWrapper(new Date(ts)); + } else if (typeof timezoneJS != "undefined" && typeof timezoneJS.Date != "undefined") { + var d = new timezoneJS.Date(); + // timezone-js is fickle, so be sure to set the time zone before + // setting the time. + d.setTimezone(opts.timezone); + d.setTime(ts); + return d; + } else { + return makeUtcWrapper(new Date(ts)); + } + } + + // map of app. size of time units in milliseconds + + var timeUnitSize = { + "second": 1000, + "minute": 60 * 1000, + "hour": 60 * 60 * 1000, + "day": 24 * 60 * 60 * 1000, + "month": 30 * 24 * 60 * 60 * 1000, + "quarter": 3 * 30 * 24 * 60 * 60 * 1000, + "year": 365.2425 * 24 * 60 * 60 * 1000 + }; + + // the allowed tick sizes, after 1 year we use + // an integer algorithm + + var baseSpec = [ + [1, "second"], [2, "second"], [5, "second"], [10, "second"], + [30, "second"], + [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"], + [30, "minute"], + [1, "hour"], [2, "hour"], [4, "hour"], + [8, "hour"], [12, "hour"], + [1, "day"], [2, "day"], [3, "day"], + [0.25, "month"], [0.5, "month"], [1, "month"], + [2, "month"] + ]; + + // we don't know which variant(s) we'll need yet, but generating both is + // cheap + + var specMonths = baseSpec.concat([[3, "month"], [6, "month"], + [1, "year"]]); + var specQuarters = baseSpec.concat([[1, "quarter"], [2, "quarter"], + [1, "year"]]); + + function init(plot) { + plot.hooks.processOptions.push(function (plot, options) { + $.each(plot.getAxes(), function(axisName, axis) { + + var opts = axis.options; + + if (opts.mode == "time") { + axis.tickGenerator = function(axis) { + + var ticks = []; + var d = dateGenerator(axis.min, opts); + var minSize = 0; + + // make quarter use a possibility if quarters are + // mentioned in either of these options + + var spec = (opts.tickSize && opts.tickSize[1] === + "quarter") || + (opts.minTickSize && opts.minTickSize[1] === + "quarter") ? specQuarters : specMonths; + + if (opts.minTickSize != null) { + if (typeof opts.tickSize == "number") { + minSize = opts.tickSize; + } else { + minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]]; + } + } + + for (var i = 0; i < spec.length - 1; ++i) { + if (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]] + + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2 + && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) { + break; + } + } + + var size = spec[i][0]; + var unit = spec[i][1]; + + // special-case the possibility of several years + + if (unit == "year") { + + // if given a minTickSize in years, just use it, + // ensuring that it's an integer + + if (opts.minTickSize != null && opts.minTickSize[1] == "year") { + size = Math.floor(opts.minTickSize[0]); + } else { + + var magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10)); + var norm = (axis.delta / timeUnitSize.year) / magn; + + if (norm < 1.5) { + size = 1; + } else if (norm < 3) { + size = 2; + } else if (norm < 7.5) { + size = 5; + } else { + size = 10; + } + + size *= magn; + } + + // minimum size for years is 1 + + if (size < 1) { + size = 1; + } + } + + axis.tickSize = opts.tickSize || [size, unit]; + var tickSize = axis.tickSize[0]; + unit = axis.tickSize[1]; + + var step = tickSize * timeUnitSize[unit]; + + if (unit == "second") { + d.setSeconds(floorInBase(d.getSeconds(), tickSize)); + } else if (unit == "minute") { + d.setMinutes(floorInBase(d.getMinutes(), tickSize)); + } else if (unit == "hour") { + d.setHours(floorInBase(d.getHours(), tickSize)); + } else if (unit == "month") { + d.setMonth(floorInBase(d.getMonth(), tickSize)); + } else if (unit == "quarter") { + d.setMonth(3 * floorInBase(d.getMonth() / 3, + tickSize)); + } else if (unit == "year") { + d.setFullYear(floorInBase(d.getFullYear(), tickSize)); + } + + // reset smaller components + + d.setMilliseconds(0); + + if (step >= timeUnitSize.minute) { + d.setSeconds(0); + } + if (step >= timeUnitSize.hour) { + d.setMinutes(0); + } + if (step >= timeUnitSize.day) { + d.setHours(0); + } + if (step >= timeUnitSize.day * 4) { + d.setDate(1); + } + if (step >= timeUnitSize.month * 2) { + d.setMonth(floorInBase(d.getMonth(), 3)); + } + if (step >= timeUnitSize.quarter * 2) { + d.setMonth(floorInBase(d.getMonth(), 6)); + } + if (step >= timeUnitSize.year) { + d.setMonth(0); + } + + var carry = 0; + var v = Number.NaN; + var prev; + + do { + + prev = v; + v = d.getTime(); + ticks.push(v); + + if (unit == "month" || unit == "quarter") { + if (tickSize < 1) { + + // a bit complicated - we'll divide the + // month/quarter up but we need to take + // care of fractions so we don't end up in + // the middle of a day + + d.setDate(1); + var start = d.getTime(); + d.setMonth(d.getMonth() + + (unit == "quarter" ? 3 : 1)); + var end = d.getTime(); + d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize); + carry = d.getHours(); + d.setHours(0); + } else { + d.setMonth(d.getMonth() + + tickSize * (unit == "quarter" ? 3 : 1)); + } + } else if (unit == "year") { + d.setFullYear(d.getFullYear() + tickSize); + } else { + d.setTime(v + step); + } + } while (v < axis.max && v != prev); + + return ticks; + }; + + axis.tickFormatter = function (v, axis) { + + var d = dateGenerator(v, axis.options); + + // first check global format + + if (opts.timeformat != null) { + return formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames); + } + + // possibly use quarters if quarters are mentioned in + // any of these places + + var useQuarters = (axis.options.tickSize && + axis.options.tickSize[1] == "quarter") || + (axis.options.minTickSize && + axis.options.minTickSize[1] == "quarter"); + + var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]]; + var span = axis.max - axis.min; + var suffix = (opts.twelveHourClock) ? " %p" : ""; + var hourCode = (opts.twelveHourClock) ? "%I" : "%H"; + var fmt; + + if (t < timeUnitSize.minute) { + fmt = hourCode + ":%M:%S" + suffix; + } else if (t < timeUnitSize.day) { + if (span < 2 * timeUnitSize.day) { + fmt = hourCode + ":%M" + suffix; + } else { + fmt = "%b %d " + hourCode + ":%M" + suffix; + } + } else if (t < timeUnitSize.month) { + fmt = "%b %d"; + } else if ((useQuarters && t < timeUnitSize.quarter) || + (!useQuarters && t < timeUnitSize.year)) { + if (span < timeUnitSize.year) { + fmt = "%b"; + } else { + fmt = "%b %Y"; + } + } else if (useQuarters && t < timeUnitSize.year) { + if (span < timeUnitSize.year) { + fmt = "Q%q"; + } else { + fmt = "Q%q %Y"; + } + } else { + fmt = "%Y"; + } + + var rt = formatDate(d, fmt, opts.monthNames, opts.dayNames); + + return rt; + }; + } + }); + }); + } + + $.plot.plugins.push({ + init: init, + options: options, + name: 'time', + version: '1.0' + }); + + // Time-axis support used to be in Flot core, which exposed the + // formatDate function on the plot object. Various plugins depend + // on the function, so we need to re-expose it here. + + $.plot.formatDate = formatDate; + +})(jQuery); diff --git a/public/admin/view/javascript/jquery/flot/jquery.flot.time.min.js b/public/admin/view/javascript/jquery/flot/jquery.flot.time.min.js new file mode 100644 index 0000000..21d8477 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.flot.time.min.js @@ -0,0 +1,9 @@ +/* Pretty handling of time axes. + +Copyright (c) 2007-2013 IOLA and Ole Laursen. +Licensed under the MIT license. + +Set axis.mode to "time" to enable. See the section "Time series data" in +API.txt for details. + +*/(function(e){function n(e,t){return t*Math.floor(e/t)}function r(e,t,n,r){if(typeof e.strftime=="function")return e.strftime(t);var i=function(e,t){return e=""+e,t=""+(t==null?"0":t),e.length==1?t+e:e},s=[],o=!1,u=e.getHours(),a=u<12;n==null&&(n=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),r==null&&(r=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]);var f;u>12?f=u-12:u==0?f=12:f=u;for(var l=0;l<t.length;++l){var c=t.charAt(l);if(o){switch(c){case"a":c=""+r[e.getDay()];break;case"b":c=""+n[e.getMonth()];break;case"d":c=i(e.getDate());break;case"e":c=i(e.getDate()," ");break;case"h":case"H":c=i(u);break;case"I":c=i(f);break;case"l":c=i(f," ");break;case"m":c=i(e.getMonth()+1);break;case"M":c=i(e.getMinutes());break;case"q":c=""+(Math.floor(e.getMonth()/3)+1);break;case"S":c=i(e.getSeconds());break;case"y":c=i(e.getFullYear()%100);break;case"Y":c=""+e.getFullYear();break;case"p":c=a?"am":"pm";break;case"P":c=a?"AM":"PM";break;case"w":c=""+e.getDay()}s.push(c),o=!1}else c=="%"?o=!0:s.push(c)}return s.join("")}function i(e){function t(e,t,n,r){e[t]=function(){return n[r].apply(n,arguments)}}var n={date:e};e.strftime!=undefined&&t(n,"strftime",e,"strftime"),t(n,"getTime",e,"getTime"),t(n,"setTime",e,"setTime");var r=["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds"];for(var i=0;i<r.length;i++)t(n,"get"+r[i],e,"getUTC"+r[i]),t(n,"set"+r[i],e,"setUTC"+r[i]);return n}function s(e,t){if(t.timezone=="browser")return new Date(e);if(!t.timezone||t.timezone=="utc")return i(new Date(e));if(typeof timezoneJS!="undefined"&&typeof timezoneJS.Date!="undefined"){var n=new timezoneJS.Date;return n.setTimezone(t.timezone),n.setTime(e),n}return i(new Date(e))}function l(t){t.hooks.processOptions.push(function(t,i){e.each(t.getAxes(),function(e,t){var i=t.options;i.mode=="time"&&(t.tickGenerator=function(e){var t=[],r=s(e.min,i),u=0,l=i.tickSize&&i.tickSize[1]==="quarter"||i.minTickSize&&i.minTickSize[1]==="quarter"?f:a;i.minTickSize!=null&&(typeof i.tickSize=="number"?u=i.tickSize:u=i.minTickSize[0]*o[i.minTickSize[1]]);for(var c=0;c<l.length-1;++c)if(e.delta<(l[c][0]*o[l[c][1]]+l[c+1][0]*o[l[c+1][1]])/2&&l[c][0]*o[l[c][1]]>=u)break;var h=l[c][0],p=l[c][1];if(p=="year"){if(i.minTickSize!=null&&i.minTickSize[1]=="year")h=Math.floor(i.minTickSize[0]);else{var d=Math.pow(10,Math.floor(Math.log(e.delta/o.year)/Math.LN10)),v=e.delta/o.year/d;v<1.5?h=1:v<3?h=2:v<7.5?h=5:h=10,h*=d}h<1&&(h=1)}e.tickSize=i.tickSize||[h,p];var m=e.tickSize[0];p=e.tickSize[1];var g=m*o[p];p=="second"?r.setSeconds(n(r.getSeconds(),m)):p=="minute"?r.setMinutes(n(r.getMinutes(),m)):p=="hour"?r.setHours(n(r.getHours(),m)):p=="month"?r.setMonth(n(r.getMonth(),m)):p=="quarter"?r.setMonth(3*n(r.getMonth()/3,m)):p=="year"&&r.setFullYear(n(r.getFullYear(),m)),r.setMilliseconds(0),g>=o.minute&&r.setSeconds(0),g>=o.hour&&r.setMinutes(0),g>=o.day&&r.setHours(0),g>=o.day*4&&r.setDate(1),g>=o.month*2&&r.setMonth(n(r.getMonth(),3)),g>=o.quarter*2&&r.setMonth(n(r.getMonth(),6)),g>=o.year&&r.setMonth(0);var y=0,b=Number.NaN,w;do{w=b,b=r.getTime(),t.push(b);if(p=="month"||p=="quarter")if(m<1){r.setDate(1);var E=r.getTime();r.setMonth(r.getMonth()+(p=="quarter"?3:1));var S=r.getTime();r.setTime(b+y*o.hour+(S-E)*m),y=r.getHours(),r.setHours(0)}else r.setMonth(r.getMonth()+m*(p=="quarter"?3:1));else p=="year"?r.setFullYear(r.getFullYear()+m):r.setTime(b+g)}while(b<e.max&&b!=w);return t},t.tickFormatter=function(e,t){var n=s(e,t.options);if(i.timeformat!=null)return r(n,i.timeformat,i.monthNames,i.dayNames);var u=t.options.tickSize&&t.options.tickSize[1]=="quarter"||t.options.minTickSize&&t.options.minTickSize[1]=="quarter",a=t.tickSize[0]*o[t.tickSize[1]],f=t.max-t.min,l=i.twelveHourClock?" %p":"",c=i.twelveHourClock?"%I":"%H",h;a<o.minute?h=c+":%M:%S"+l:a<o.day?f<2*o.day?h=c+":%M"+l:h="%b %d "+c+":%M"+l:a<o.month?h="%b %d":u&&a<o.quarter||!u&&a<o.year?f<o.year?h="%b":h="%b %Y":u&&a<o.year?f<o.year?h="Q%q":h="Q%q %Y":h="%Y";var p=r(n,h,i.monthNames,i.dayNames);return p})})})}var t={xaxis:{timezone:null,timeformat:null,twelveHourClock:!1,monthNames:null}},o={second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,quarter:7776e6,year:525949.2*60*1e3},u=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[.25,"month"],[.5,"month"],[1,"month"],[2,"month"]],a=u.concat([[3,"month"],[6,"month"],[1,"year"]]),f=u.concat([[1,"quarter"],[2,"quarter"],[1,"year"]]);e.plot.plugins.push({init:l,options:t,name:"time",version:"1.0"}),e.plot.formatDate=r})(jQuery);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/flot/jquery.js b/public/admin/view/javascript/jquery/flot/jquery.js new file mode 100644 index 0000000..8c24ffc --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.js @@ -0,0 +1,9472 @@ +/*! + * jQuery JavaScript Library v1.8.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time) + */ +(function( window, undefined ) { +var + // A central reference to the root jQuery(document) + rootjQuery, + + // The deferred used on DOM ready + readyList, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + location = window.location, + navigator = window.navigator, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Save a reference to some core methods + core_push = Array.prototype.push, + core_slice = Array.prototype.slice, + core_indexOf = Array.prototype.indexOf, + core_toString = Object.prototype.toString, + core_hasOwn = Object.prototype.hasOwnProperty, + core_trim = String.prototype.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, + + // Used for detecting and trimming whitespace + core_rnotwhite = /\S/, + core_rspace = /\s+/, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // The ready event handler and self cleanup method + DOMContentLoaded = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + } else if ( document.readyState === "complete" ) { + // we're here because readyState === "complete" in oldIE + // which is good enough for us to call the dom ready! + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context && context.nodeType ? context.ownerDocument || context : document ); + + // scripts is true for back-compat + selector = jQuery.parseHTML( match[1], doc, true ); + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + this.attr.call( selector, context, true ); + } + + return jQuery.merge( this, selector ); + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.8.3", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ), + "slice", core_slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ core_toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // scripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, scripts ) { + var parsed; + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + scripts = context; + context = 0; + } + context = context || document; + + // Single tag + if ( (parsed = rsingleTag.exec( data )) ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] ); + return jQuery.merge( [], + (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes ); + }, + + parseJSON: function( data ) { + if ( !data || typeof data !== "string") { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && core_rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var name, + i = 0, + length = obj.length, + isObj = length === undefined || jQuery.isFunction( obj ); + + if ( args ) { + if ( isObj ) { + for ( name in obj ) { + if ( callback.apply( obj[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( obj[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in obj ) { + if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var type, + ret = results || []; + + if ( arr != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + type = jQuery.type( arr ); + + if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) { + core_push.call( ret, arr ); + } else { + jQuery.merge( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, + ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready, 1 ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.split( core_rspace ), function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + return jQuery.inArray( fn, list ) > -1; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ]( jQuery.isFunction( fn ) ? + function() { + var returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + } : + newDefer[ action ] + ); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] = list.fire + deferred[ tuple[0] ] = list.fire; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + eventName, + i, + isSupported, + clickFn, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; + + // Support tests won't run in some limited or non-browser environments + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + if ( !all || !a || !all.length ) { + return {}; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form (#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: ( document.compatMode === "CSS1Compat" ), + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", clickFn = function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent("onclick"); + div.detachEvent( "onclick", clickFn ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + input.setAttribute( "checked", "checked" ); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: true, + change: true, + focusin: true + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + // Run tests that need a body at doc ready + jQuery(function() { + var container, div, tds, marginDiv, + divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // NOTE: To any future maintainer, we've window.getComputedStyle + // because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = document.createElement("div"); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "<div></div>"; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + container.style.zoom = 1; + } + + // Null elements to avoid leaks in IE + body.removeChild( container ); + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + fragment.removeChild( div ); + all = a = select = opt = input = fragment = div = null; + + return support; +})(); +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + deletedIds: [], + + // Remove at next major release (1.9/2.0) + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery.removeData( elem, type + "queue", true ); + jQuery.removeData( elem, key, true ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, fixSpecified, + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea|)$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( core_rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var removes, className, elem, c, cl, i, l; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + if ( (value && typeof value === "string") || value === undefined ) { + removes = ( value || "" ).split( core_rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + if ( elem.nodeType === 1 && elem.className ) { + + className = (" " + elem.className + " ").replace( rclass, " " ); + + // loop over each item in the removal list + for ( c = 0, cl = removes.length; c < cl; c++ ) { + // Remove until there is nothing to remove, + while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) { + className = className.replace( " " + removes[ c ] + " " , " " ); + } + } + elem.className = value ? jQuery.trim( className ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( core_rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val, + self = jQuery(this); + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9 + attrFn: {}, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + + attrNames = value.split( core_rspace ); + + for ( ; i < attrNames.length; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.value = value + "" ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, + rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var t, tns, type, origType, namespaces, origCount, + j, events, special, eventType, handleObj, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, "events", true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, + type = event.type || event, + namespaces = []; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + for ( old = elem; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old === (elem.ownerDocument || document) ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related, + handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = core_slice.call( arguments ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = []; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + selMatch = {}; + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8) + event.metaKey = !!event.metaKey; + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === "undefined" ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "_submit_attached" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "_submit_attached", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "_change_attached", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function( window, undefined ) { + +var cachedruns, + assertGetIdNotName, + Expr, + getText, + isXML, + contains, + compile, + sortOrder, + hasDuplicate, + outermostContext, + + baseHasDuplicate = true, + strundefined = "undefined", + + expando = ( "sizcache" + Math.random() ).replace( ".", "" ), + + Token = String, + document = window.document, + docElem = document.documentElement, + dirruns = 0, + done = 0, + pop = [].pop, + push = [].push, + slice = [].slice, + // Use a stripped-down indexOf if a native one is unavailable + indexOf = [].indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + // Augment a function for special use by Sizzle + markFunction = function( fn, value ) { + fn[ expando ] = value == null || value; + return fn; + }, + + createCache = function() { + var cache = {}, + keys = []; + + return markFunction(function( key, value ) { + // Only keep the most recent entries + if ( keys.push( key ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + + // Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157) + return (cache[ key + " " ] = value); + }, cache ); + }, + + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + + // Regex + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors) + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments not in parens/brackets, + // then attribute selectors and non-pseudos (denoted by :), + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)", + + // For matchExpr.POS and matchExpr.needsContext + pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, + + rnot = /^:not/, + rsibling = /[\x20\t\r\n\f]*[+~]/, + rendsWithNot = /:not\($/, + + rheader = /h\d/i, + rinputs = /input|select|textarea|button/i, + + rbackslash = /\\(?!\\)/g, + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "POS": new RegExp( pos, "i" ), + "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" ) + }, + + // Support + + // Used for testing something on an element + assert = function( fn ) { + var div = document.createElement("div"); + + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } + }, + + // Check if getElementsByTagName("*") returns only elements + assertTagNameNoComments = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }), + + // Check if getAttribute returns normalized href attributes + assertHrefNotNormalized = assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }), + + // Check if attributes should be retrieved by attribute nodes + assertAttributes = assert(function( div ) { + div.innerHTML = "<select></select>"; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }), + + // Check if getElementsByClassName can be trusted + assertUsableClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>"; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }), + + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by ID + assertUsableName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>"; + docElem.insertBefore( div, docElem.firstChild ); + + // Test + var pass = document.getElementsByName && + // buggy browsers will return fewer than the correct 2 + document.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + document.getElementsByName( expando + 0 ).length; + assertGetIdNotName = !document.getElementById( expando ); + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + +// If slice is not available, provide a backup +try { + slice.call( docElem.childNodes, 0 )[0].nodeType; +} catch ( e ) { + slice = function( i ) { + var elem, + results = []; + for ( ; (elem = this[i]); i++ ) { + results.push( elem ); + } + return results; + }; +} + +function Sizzle( selector, context, results, seed ) { + results = results || []; + context = context || document; + var match, elem, xml, m, + nodeType = context.nodeType; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( nodeType !== 1 && nodeType !== 9 ) { + return []; + } + + xml = isXML( context ); + + if ( !xml && !seed ) { + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed, xml ); +} + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + return Sizzle( expr, null, null, [ elem ] ).length > 0; +}; + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + } else { + + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } + return ret; +}; + +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +// Element contains another +contains = Sizzle.contains = docElem.contains ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) ); + } : + docElem.compareDocumentPosition ? + function( a, b ) { + return b && !!( a.compareDocumentPosition( b ) & 16 ); + } : + function( a, b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + return false; + }; + +Sizzle.attr = function( elem, name ) { + var val, + xml = isXML( elem ); + + if ( !xml ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( xml || assertAttributes ) { + return elem.getAttribute( name ); + } + val = elem.getAttributeNode( name ); + return val ? + typeof elem[ name ] === "boolean" ? + elem[ name ] ? name : null : + val.specified ? val.value : null : + null; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + // IE6/7 return a modified href + attrHandle: assertHrefNotNormalized ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }, + + find: { + "ID": assertGetIdNotName ? + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + } : + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }, + + "TAG": assertTagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + var elem, + tmp = [], + i = 0; + + for ( ; (elem = results[i]); i++ ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }, + + "NAME": assertUsableName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }, + + "CLASS": assertUsableClassName && function( className, context, xml ) { + if ( typeof context.getElementsByClassName !== strundefined && !xml ) { + return context.getElementsByClassName( className ); + } + } + }, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( rbackslash, "" ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 3 xn-component of xn+y argument ([+-]?\d*n|) + 4 sign of xn-component + 5 x of xn-component + 6 sign of y-component + 7 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1] === "nth" ) { + // nth-child requires argument + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) ); + match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" ); + + // other types prohibit arguments + } else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var unquoted, excess; + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] ) { + match[2] = match[3]; + } else if ( (unquoted = match[4]) ) { + // Only check arguments that contain a pseudo + if ( rpseudo.test(unquoted) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + unquoted = unquoted.slice( 0, excess ); + match[0] = match[0].slice( 0, excess ); + } + match[2] = unquoted; + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + "ID": assertGetIdNotName ? + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + return elem.getAttribute("id") === id; + }; + } : + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === id; + }; + }, + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + nodeName = nodeName.replace( rbackslash, "" ).toLowerCase(); + + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ expando ][ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem, context ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.substr( result.length - check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, argument, first, last ) { + + if ( type === "nth" ) { + return function( elem ) { + var node, diff, + parent = elem.parentNode; + + if ( first === 1 && last === 0 ) { + return true; + } + + if ( parent ) { + diff = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + diff++; + if ( elem === node ) { + break; + } + } + } + } + + // Incorporate the offset (or cast to NaN), then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + }; + } + + return function( elem ) { + var node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + var nodeType; + elem = elem.firstChild; + while ( elem ) { + if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) { + return false; + } + elem = elem.nextSibling; + } + return true; + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "text": function( elem ) { + var type, attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + (type = elem.type) === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type ); + }, + + // Input types + "radio": createInputPseudo("radio"), + "checkbox": createInputPseudo("checkbox"), + "file": createInputPseudo("file"), + "password": createInputPseudo("password"), + "image": createInputPseudo("image"), + + "submit": createButtonPseudo("submit"), + "reset": createButtonPseudo("reset"), + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "focus": function( elem ) { + var doc = elem.ownerDocument; + return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "active": function( elem ) { + return elem === elem.ownerDocument.activeElement; + }, + + // Positional types + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + for ( var i = 0; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + for ( var i = 1; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +function siblingCheck( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; +} + +sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + return ( !a.compareDocumentPosition || !b.compareDocumentPosition ? + a.compareDocumentPosition : + a.compareDocumentPosition(b) & 4 + ) ? -1 : 1; + } : + function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + +// Always assume the presence of duplicates if sort doesn't +// pass them to our comparison function (as in Google Chrome). +[0, 0].sort( sortOrder ); +baseHasDuplicate = !hasDuplicate; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + i = 1, + j = 0; + + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ expando ][ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + tokens.push( matched = new Token( match.shift() ) ); + soFar = soFar.slice( matched.length ); + + // Cast descendant combinators to space + matched.type = match[0].replace( rtrim, " " ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + + tokens.push( matched = new Token( match.shift() ) ); + soFar = soFar.slice( matched.length ); + matched.type = type; + matched.matches = match; + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && combinator.dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( !xml ) { + var cache, + dirkey = dirruns + " " + doneName + " ", + cachedkey = dirkey + cachedruns; + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + if ( (cache = elem[ expando ]) === cachedkey ) { + return elem.sizset; + } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) { + if ( elem.sizset ) { + return elem; + } + } else { + elem[ expando ] = cachedkey; + if ( matcher( elem, context, xml ) ) { + elem.sizset = true; + return elem; + } + elem.sizset = false; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + if ( matcher( elem, context, xml ) ) { + return elem; + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && tokens.join("") + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Nested matchers should use non-integer dirruns + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = superMatcher.el; + } + + // Add elements passing elementMatchers directly to results + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + for ( j = 0; (matcher = elementMatchers[j]); j++ ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++superMatcher.el; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + for ( j = 0; (matcher = setMatchers[j]); j++ ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + superMatcher.el = 0; + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ expando ][ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed, xml ) { + var i, tokens, token, type, find, + match = tokenize( selector ), + j = match.length; + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && !xml && + Expr.relative[ tokens[1].type ] ) { + + context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().length ); + } + + // Fetch a seed set for right-to-left matching + for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( rbackslash, "" ), + rsibling.test( tokens[0].type ) && context.parentNode || context, + xml + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && tokens.join(""); + if ( !selector ) { + push.apply( results, slice.call( seed, 0 ) ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + xml, + results, + rsibling.test( selector ) + ); + return results; +} + +if ( document.querySelectorAll ) { + (function() { + var disconnectedMatch, + oldSelect = select, + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ], + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + // A support test would require too much code (would include document ready) + // just skip matchesSelector for :active + rbuggyMatches = [ ":active" ], + matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector; + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = "<select><option selected=''></option></select>"; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here (do not put tests after this one) + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE9 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = "<p test=''></p>"; + if ( div.querySelectorAll("[test^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here (do not put tests after this one) + div.innerHTML = "<input type='hidden'/>"; + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push(":enabled", ":disabled"); + } + }); + + // rbuggyQSA always contains :focus, so no need for a length check + rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") ); + + select = function( selector, context, results, seed, xml ) { + // Only use querySelectorAll when not filtering, + // when this is not xml, + // and when no QSA bugs apply + if ( !seed && !xml && !rbuggyQSA.test( selector ) ) { + var groups, i, + old = true, + nid = expando, + newContext = context, + newSelector = context.nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + groups[i].join(""); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, slice.call( newContext.querySelectorAll( + newSelector + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + + return oldSelect( selector, context, results, seed, xml ); + }; + + if ( matches ) { + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + try { + matches.call( div, "[test!='']:sizzle" ); + rbuggyMatches.push( "!=", pseudos ); + } catch ( e ) {} + }); + + // rbuggyMatches always contains :active and :focus, so no need for a length check + rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") ); + + Sizzle.matchesSelector = function( elem, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyMatches always contains :active, so no need for an existence check + if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, null, null, [ elem ] ).length > 0; + }; + } + })(); +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Back-compat +function setFilters() {} +Expr.filters = setFilters.prototype = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, l, length, n, r, ret, + self = this; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + ret = this.pushStack( "", "find", selector ); + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + cur = this[i]; + + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +jQuery.fn.andSelf = jQuery.fn.addBack; + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( this.length > 1 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, core_slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /<tbody/i, + rhtml = /<|&#?\w+;/, + rnoInnerhtml = /<(?:script|style|link)/i, + rnocache = /<(?:script|object|embed|option|style)/i, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rcheckableType = /^(?:checkbox|radio)$/, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g, + wrapMap = { + option: [ 1, "<select multiple='multiple'>", "</select>" ], + legend: [ 1, "<fieldset>", "</fieldset>" ], + thead: [ 1, "<table>", "</table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ], + area: [ 1, "<map>", "</map>" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, +// unless wrapped in a div with non-breaking characters in front of it. +if ( !jQuery.support.htmlSerialize ) { + wrapMap._default = [ 1, "X<div>", "</div>" ]; +} + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, + + before: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this ); + }); + } + + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( set, this ), "before", this.selector ); + } + }, + + after: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + }); + } + + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( this, set ), "after", this.selector ); + } + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + jQuery.cleanData( [ elem ] ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1></$2>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName( "*" ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function( value ) { + if ( !isDisconnected( this[0] ) ) { + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this), old = self.html(); + self.replaceWith( value.call( this, i, old ) ); + }); + } + + if ( typeof value !== "string" ) { + value = jQuery( value ).detach(); + } + + return this.each(function() { + var next = this.nextSibling, + parent = this.parentNode; + + jQuery( this ).remove(); + + if ( next ) { + jQuery(next).before( value ); + } else { + jQuery(parent).append( value ); + } + }); + } + + return this.length ? + this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : + this; + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, table, callback ) { + + // Flatten any nested arrays + args = [].concat.apply( [], args ); + + var results, first, fragment, iNoClone, + i = 0, + value = args[0], + scripts = [], + l = this.length; + + // We can't cloneNode fragments that contain checked, in WebKit + if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) { + return this.each(function() { + jQuery(this).domManip( args, table, callback ); + }); + } + + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + args[0] = value.call( this, i, table ? self.html() : undefined ); + self.domManip( args, table, callback ); + }); + } + + if ( this[0] ) { + results = jQuery.buildFragment( args, this, scripts ); + fragment = results.fragment; + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + // Fragments from the fragment cache must always be cloned and never used in place. + for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) { + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + i === iNoClone ? + fragment : + jQuery.clone( fragment, true, true ) + ); + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + + if ( scripts.length ) { + jQuery.each( scripts, function( i, elem ) { + if ( elem.src ) { + if ( jQuery.ajax ) { + jQuery.ajax({ + url: elem.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.error("no ajax"); + } + } else { + jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + }); + } + } + + return this; + } +}); + +function findOrAppend( elem, tag ) { + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function cloneFixAttributes( src, dest ) { + var nodeName; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + // clearAttributes removes the attributes, which we don't want, + // but also removes the attachEvent events, which we *do* want + if ( dest.clearAttributes ) { + dest.clearAttributes(); + } + + // mergeAttributes, in contrast, only merges back on the + // original attributes, not the events + if ( dest.mergeAttributes ) { + dest.mergeAttributes( src ); + } + + nodeName = dest.nodeName.toLowerCase(); + + if ( nodeName === "object" ) { + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + + // IE blanks contents when cloning scripts + } else if ( nodeName === "script" && dest.text !== src.text ) { + dest.text = src.text; + } + + // Event data gets referenced instead of copied if the expando + // gets copied too + dest.removeAttribute( jQuery.expando ); +} + +jQuery.buildFragment = function( args, context, scripts ) { + var fragment, cacheable, cachehit, + first = args[ 0 ]; + + // Set context from what may come in as undefined or a jQuery collection or a node + // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 & + // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception + context = context || document; + context = !context.nodeType && context[0] || context; + context = context.ownerDocument || context; + + // Only cache "small" (1/2 KB) HTML strings that are associated with the main document + // Cloning options loses the selected state, so don't cache them + // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment + // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache + // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 + if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document && + first.charAt(0) === "<" && !rnocache.test( first ) && + (jQuery.support.checkClone || !rchecked.test( first )) && + (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { + + // Mark cacheable and look for a hit + cacheable = true; + fragment = jQuery.fragments[ first ]; + cachehit = fragment !== undefined; + } + + if ( !fragment ) { + fragment = context.createDocumentFragment(); + jQuery.clean( args, context, fragment, scripts ); + + // Update the cache, but only store false + // unless this is a second parsing of the same content + if ( cacheable ) { + jQuery.fragments[ first ] = cachehit && fragment; + } + } + + return { fragment: fragment, cacheable: cacheable }; +}; + +jQuery.fragments = {}; + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + l = insert.length, + parent = this.length === 1 && this[0].parentNode; + + if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) { + insert[ original ]( this[0] ); + return this; + } else { + for ( ; i < l; i++ ) { + elems = ( i > 0 ? this.clone(true) : this ).get(); + jQuery( insert[i] )[ original ]( elems ); + ret = ret.concat( elems ); + } + + return this.pushStack( ret, name, insert.selector ); + } + }; +}); + +function getAll( elem ) { + if ( typeof elem.getElementsByTagName !== "undefined" ) { + return elem.getElementsByTagName( "*" ); + + } else if ( typeof elem.querySelectorAll !== "undefined" ) { + return elem.querySelectorAll( "*" ); + + } else { + return []; + } +} + +// Used in clean, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var srcElements, + destElements, + i, + clone; + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + // IE copies events bound via attachEvent when using cloneNode. + // Calling detachEvent on the clone will also remove the events + // from the original. In order to get around this, we use some + // proprietary methods to clear the events. Thanks to MooTools + // guys for this hotness. + + cloneFixAttributes( elem, clone ); + + // Using Sizzle here is crazy slow, so we use getElementsByTagName instead + srcElements = getAll( elem ); + destElements = getAll( clone ); + + // Weird iteration because IE will replace the length property + // with an element if you are cloning the body and one of the + // elements on the page has a name or id of "length" + for ( i = 0; srcElements[i]; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + cloneFixAttributes( srcElements[i], destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + cloneCopyEvent( elem, clone ); + + if ( deepDataAndEvents ) { + srcElements = getAll( elem ); + destElements = getAll( clone ); + + for ( i = 0; srcElements[i]; ++i ) { + cloneCopyEvent( srcElements[i], destElements[i] ); + } + } + } + + srcElements = destElements = null; + + // Return the cloned set + return clone; + }, + + clean: function( elems, context, fragment, scripts ) { + var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags, + safe = context === document && safeFragment, + ret = []; + + // Ensure that context is a document + if ( !context || typeof context.createDocumentFragment === "undefined" ) { + context = document; + } + + // Use the already-created safe fragment if context permits + for ( i = 0; (elem = elems[i]) != null; i++ ) { + if ( typeof elem === "number" ) { + elem += ""; + } + + if ( !elem ) { + continue; + } + + // Convert html string into DOM nodes + if ( typeof elem === "string" ) { + if ( !rhtml.test( elem ) ) { + elem = context.createTextNode( elem ); + } else { + // Ensure a safe container in which to render the html + safe = safe || createSafeFragment( context ); + div = context.createElement("div"); + safe.appendChild( div ); + + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1></$2>"); + + // Go to html and back, then peel off extra wrappers + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + depth = wrap[0]; + div.innerHTML = wrap[1] + elem + wrap[2]; + + // Move to the right depth + while ( depth-- ) { + div = div.lastChild; + } + + // Remove IE's autoinserted <tbody> from table fragments + if ( !jQuery.support.tbody ) { + + // String was a <table>, *may* have spurious <tbody> + hasBody = rtbody.test(elem); + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : + + // String was a bare <thead> or <tfoot> + wrap[1] === "<table>" && !hasBody ? + div.childNodes : + []; + + for ( j = tbody.length - 1; j >= 0 ; --j ) { + if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { + tbody[ j ].parentNode.removeChild( tbody[ j ] ); + } + } + } + + // IE completely kills leading whitespace when innerHTML is used + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); + } + + elem = div.childNodes; + + // Take out of fragment container (we need a fresh div each time) + div.parentNode.removeChild( div ); + } + } + + if ( elem.nodeType ) { + ret.push( elem ); + } else { + jQuery.merge( ret, elem ); + } + } + + // Fix #11356: Clear elements from safeFragment + if ( div ) { + elem = div = safe = null; + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + for ( i = 0; (elem = ret[i]) != null; i++ ) { + if ( jQuery.nodeName( elem, "input" ) ) { + fixDefaultChecked( elem ); + } else if ( typeof elem.getElementsByTagName !== "undefined" ) { + jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); + } + } + } + + // Append elements to a provided document fragment + if ( fragment ) { + // Special handling of each script element + handleScript = function( elem ) { + // Check if we consider it executable + if ( !elem.type || rscriptType.test( elem.type ) ) { + // Detach the script and store it in the scripts array (if provided) or the fragment + // Return truthy to indicate that it has been handled + return scripts ? + scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : + fragment.appendChild( elem ); + } + }; + + for ( i = 0; (elem = ret[i]) != null; i++ ) { + // Check if we're done after handling an executable script + if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { + // Append to fragment and handle embedded scripts + fragment.appendChild( elem ); + if ( typeof elem.getElementsByTagName !== "undefined" ) { + // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration + jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); + + // Splice the scripts into ret after their former ancestor and advance our index beyond them + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); + i += jsTags.length; + } + } + } + } + + return ret; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var data, id, elem, type, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + jQuery.deletedIds.push( id ); + } + } + } + } + } +}); +// Limit scope pollution from any deprecated API +(function() { + +var matched, browser; + +// Use of jQuery.browser is frowned upon. +// More details: http://api.jquery.com/jQuery.browser +// jQuery.uaMatch maintained for back-compat +jQuery.uaMatch = function( ua ) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; +}; + +matched = jQuery.uaMatch( navigator.userAgent ); +browser = {}; + +if ( matched.browser ) { + browser[ matched.browser ] = true; + browser.version = matched.version; +} + +// Chrome is Webkit, but Webkit is also Safari. +if ( browser.chrome ) { + browser.webkit = true; +} else if ( browser.webkit ) { + browser.safari = true; +} + +jQuery.browser = browser; + +jQuery.sub = function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; +}; + +})(); +var curCSS, iframe, iframeDoc, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity=([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + + eventsToggle = jQuery.fn.toggle; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var elem, display, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + values[ index ] = jQuery._data( elem, "olddisplay" ); + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && elem.style.display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + display = curCSS( elem, "display" ); + + if ( !values[ index ] && display !== "none" ) { + jQuery._data( elem, "olddisplay", display ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state, fn2 ) { + var bool = typeof state === "boolean"; + + if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) { + return eventsToggle.apply( this, arguments ); + } + + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + + } + } + } + }, + + // Exclude the following css properties to add px + cssNumber: { + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, numeric, extra ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( numeric || extra !== undefined ) { + num = parseFloat( val ); + return numeric || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// NOTE: To any future maintainer, we've window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + curCSS = function( elem, name ) { + var ret, width, minWidth, maxWidth, + computed = window.getComputedStyle( elem, null ), + style = elem.style; + + if ( computed ) { + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + curCSS = function( elem, name ) { + var left, rsLeft, + ret = elem.currentStyle && elem.currentStyle[ name ], + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + elem.runtimeStyle.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + elem.runtimeStyle.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + // we use jQuery.css instead of curCSS here + // because of the reliableMarginRight CSS hook! + val += jQuery.css( elem, extra + cssExpand[ i ], true ); + } + + // From this point on we use curCSS for maximum performance (relevant in animations) + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } else { + // at this point, extra isn't content, so add padding + val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + valueIsBorderBox = true, + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox + ) + ) + "px"; +} + + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + if ( elemdisplay[ nodeName ] ) { + return elemdisplay[ nodeName ]; + } + + var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ), + display = elem.css("display"); + elem.remove(); + + // If the simple way fails, + // get element's real default display by attaching it to a temp iframe + if ( display === "none" || display === "" ) { + // Use the already-created iframe if possible + iframe = document.body.appendChild( + iframe || jQuery.extend( document.createElement("iframe"), { + frameBorder: 0, + width: 0, + height: 0 + }) + ); + + // Create a cacheable copy of the iframe document on first call. + // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML + // document to it; WebKit & Firefox won't allow reusing the iframe document. + if ( !iframeDoc || !iframe.createElement ) { + iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; + iframeDoc.write("<!doctype html><html><body>"); + iframeDoc.close(); + } + + elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) ); + + display = curCSS( elem, "display" ); + document.body.removeChild( iframe ); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + + return display; +} + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + // certain elements can have dimension info if we invisibly show them + // however, it must have a current display style that would benefit from this + if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) { + return jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }); + } else { + return getWidthOrHeight( elem, name, extra ); + } + } + }, + + set: function( elem, value, extra ) { + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box" + ) : 0 + ); + } + }; +}); + +if ( !jQuery.support.opacity ) { + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : + computed ? "1" : ""; + }, + + set: function( elem, value ) { + var style = elem.style, + currentStyle = elem.currentStyle, + opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", + filter = currentStyle && currentStyle.filter || style.filter || ""; + + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; + + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" && + style.removeAttribute ) { + + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + + // if there there is no filter style applied in a css rule, we are done + if ( currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; + } + }; +} + +// These hooks cannot be added until DOM ready because the support test +// for it is not run until after DOM ready +jQuery(function() { + if ( !jQuery.support.reliableMarginRight ) { + jQuery.cssHooks.marginRight = { + get: function( elem, computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, function() { + if ( computed ) { + return curCSS( elem, "marginRight" ); + } + }); + } + }; + } + + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // getComputedStyle returns percent when specified for top/left/bottom/right + // rather than make the css module depend on the offset module, we just check for it here + if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = { + get: function( elem, computed ) { + if ( computed ) { + var ret = curCSS( elem, prop ); + // if curCSS returns percentage, fallback to offset + return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret; + } + } + }; + }); + } + +}); + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.hidden = function( elem ) { + return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none"); + }; + + jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); + }; +} + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i, + + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ], + expanded = {}; + + for ( i = 0; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +}); +var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + rselectTextarea = /^(?:select|textarea)/i; + +jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function(){ + return this.elements ? jQuery.makeArray( this.elements ) : this; + }) + .filter(function(){ + return this.name && !this.disabled && + ( this.checked || rselectTextarea.test( this.nodeName ) || + rinput.test( this.type ) ); + }) + .map(function( i, elem ){ + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val, i ){ + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + +//Serialize an array of form elements or a set of +//key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); +}; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // If array item is non-scalar (array or object), encode its + // numeric index to resolve deserialization ambiguity issues. + // Note that rack (as of 1.0.0) can't currently deserialize + // nested arrays properly, and attempting to do so may cause + // a server error. Possible fixes are to modify rack's + // deserialization algorithm or to provide an option or flag + // to force array serialization to be shallow. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} +var + // Document location + ajaxLocParts, + ajaxLocation, + + rhash = /#.*$/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rquery = /\?/, + rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, + rts = /([?&])_=[^&]*/, + rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, + + // Keep a copy of the old load method + _load = jQuery.fn.load, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = ["*/"] + ["*"]; + +// #8138, IE may throw an exception when accessing +// a field from window.location if document.domain has been set +try { + ajaxLocation = location.href; +} catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + ajaxLocation = document.createElement( "a" ); + ajaxLocation.href = ""; + ajaxLocation = ajaxLocation.href; +} + +// Segment location into parts +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, list, placeBefore, + dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ), + i = 0, + length = dataTypes.length; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + for ( ; i < length; i++ ) { + dataType = dataTypes[ i ]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test( dataType ); + if ( placeBefore ) { + dataType = dataType.substr( 1 ) || "*"; + } + list = structure[ dataType ] = structure[ dataType ] || []; + // then we add to the structure accordingly + list[ placeBefore ? "unshift" : "push" ]( func ); + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, + dataType /* internal */, inspected /* internal */ ) { + + dataType = dataType || options.dataTypes[ 0 ]; + inspected = inspected || {}; + + inspected[ dataType ] = true; + + var selection, + list = structure[ dataType ], + i = 0, + length = list ? list.length : 0, + executeOnly = ( structure === prefilters ); + + for ( ; i < length && ( executeOnly || !selection ); i++ ) { + selection = list[ i ]( options, originalOptions, jqXHR ); + // If we got redirected to another dataType + // we try there if executing only and not done already + if ( typeof selection === "string" ) { + if ( !executeOnly || inspected[ selection ] ) { + selection = undefined; + } else { + options.dataTypes.unshift( selection ); + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, selection, inspected ); + } + } + } + // If we're only executing or nothing was selected + // we try the catchall dataType if not done already + if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, "*", inspected ); + } + // unnecessary when only executing (prefilters) + // but it'll be ignored by the caller in that case + return selection; +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } +} + +jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + // Don't do a request if no elements are being requested + if ( !this.length ) { + return this; + } + + var selector, type, response, + self = this, + off = url.indexOf(" "); + + if ( off >= 0 ) { + selector = url.slice( off, url.length ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // Request the remote document + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params, + complete: function( jqXHR, status ) { + if ( callback ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + } + } + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + // See if a selector was specified + self.html( selector ? + + // Create a dummy div to hold the results + jQuery("<div>") + + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append( responseText.replace( rscript, "" ) ) + + // Locate the specified elements + .find( selector ) : + + // If not, just inject the full result + responseText ); + + }); + + return this; +}; + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){ + jQuery.fn[ o ] = function( f ){ + return this.on( o, f ); + }; +}); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; +}); + +jQuery.extend({ + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + if ( settings ) { + // Building a settings object + ajaxExtend( target, jQuery.ajaxSettings ); + } else { + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; + } + ajaxExtend( target, settings ); + return target; + }, + + ajaxSettings: { + url: ajaxLocation, + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + global: true, + type: "GET", + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + processData: true, + async: true, + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + xml: "application/xml, text/xml", + html: "text/html", + text: "text/plain", + json: "application/json, text/javascript", + "*": allTypes + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText" + }, + + // List of data converters + // 1) key format is "source_type destination_type" (a single space in-between) + // 2) the catchall symbol "*" can be used for source_type + converters: { + + // Convert anything to text + "* text": window.String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + context: true, + url: true + } + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // ifModified key + ifModifiedKey, + // Response headers + responseHeadersString, + responseHeaders, + // transport + transport, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events + // It's the callbackContext if one was provided in the options + // and if it's a DOM node or a jQuery collection + globalEventContext = callbackContext !== s && + ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? + jQuery( callbackContext ) : jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + + readyState: 0, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( !state ) { + var lname = name.toLowerCase(); + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match === undefined ? null : match; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + statusText = statusText || strAbort; + if ( transport ) { + transport.abort( statusText ); + } + done( 0, statusText ); + return this; + } + }; + + // Callback for when everything is done + // It is defined here because jslint complains if it is declared + // at the end of the function (which would be more logical and readable) + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // If successful, handle type chaining + if ( status >= 200 && status < 300 || status === 304 ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ ifModifiedKey ] = modified; + } + modified = jqXHR.getResponseHeader("Etag"); + if ( modified ) { + jQuery.etag[ ifModifiedKey ] = modified; + } + } + + // If not modified + if ( status === 304 ) { + + statusText = "notmodified"; + isSuccess = true; + + // If we have data + } else { + + isSuccess = ajaxConvert( s, response ); + statusText = isSuccess.state; + success = isSuccess.data; + error = isSuccess.error; + isSuccess = !error; + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if ( !statusText || status ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + // Attach deferreds + deferred.promise( jqXHR ); + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + jqXHR.complete = completeDeferred.add; + + // Status-dependent callbacks + jqXHR.statusCode = function( map ) { + if ( map ) { + var tmp; + if ( state < 2 ) { + for ( tmp in map ) { + statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; + } + } else { + tmp = map[ jqXHR.status ]; + jqXHR.always( tmp ); + } + } + return this; + }; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // We also use the url parameter if available + s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace ); + + // A cross-domain request is in order when we have a protocol:host:port mismatch + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) != + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ) + ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Get ifModifiedKey before adding the anti-cache parameter + ifModifiedKey = s.url; + + // Add anti-cache in url if needed + if ( s.cache === false ) { + + var ts = jQuery.now(), + // try replacing _= if it is there + ret = s.url.replace( rts, "$1_=" + ts ); + + // if nothing was replaced, add timestamp to the end + s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + ifModifiedKey = ifModifiedKey || s.url; + if ( jQuery.lastModified[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); + } + if ( jQuery.etag[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); + } + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + + } + + // aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout( function(){ + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch (e) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + return jqXHR; + }, + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {} + +}); + +/* Handles responses to an ajax request: + * - sets all responseXXX fields accordingly + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes, + responseFields = s.responseFields; + + // Fill responseXXX fields + for ( type in responseFields ) { + if ( type in responses ) { + jqXHR[ responseFields[type] ] = responses[ type ]; + } + } + + // Remove auto dataType and get content-type in the process + while( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +// Chain conversions given the request and the original response +function ajaxConvert( s, response ) { + + var conv, conv2, current, tmp, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(), + prev = dataTypes[ 0 ], + converters = {}, + i = 0; + + // Apply the dataFilter if provided + if ( s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + // Convert to each sequential dataType, tolerating list modification + for ( ; (current = dataTypes[++i]); ) { + + // There's only work to do if current dataType is non-auto + if ( current !== "*" ) { + + // Convert response if prev dataType is non-auto and differs from current + if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split(" "); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.splice( i--, 0, current ); + } + + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s["throws"] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; + } + } + } + } + + // Update prev for next iteration + prev = current; + } + } + + return { state: "success", data: response }; +} +var oldCallbacks = [], + rquestion = /\?/, + rjsonp = /(=)\?(?=&|$)|\?\?/, + nonce = jQuery.now(); + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + data = s.data, + url = s.url, + hasCallback = s.jsonp !== false, + replaceInUrl = hasCallback && rjsonp.test( url ), + replaceInData = hasCallback && !replaceInUrl && typeof data === "string" && + !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && + rjsonp.test( data ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + overwritten = window[ callbackName ]; + + // Insert callback into url or form data + if ( replaceInUrl ) { + s.url = url.replace( rjsonp, "$1" + callbackName ); + } else if ( replaceInData ) { + s.data = data.replace( rjsonp, "$1" + callbackName ); + } else if ( hasCallback ) { + s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /javascript|ecmascript/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +}); + +// Handle cache's special case and global +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + s.global = false; + } +}); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function(s) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + + var script, + head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; + + return { + + send: function( _, callback ) { + + script = document.createElement( "script" ); + + script.async = "async"; + + if ( s.scriptCharset ) { + script.charset = s.scriptCharset; + } + + script.src = s.url; + + // Attach handlers for all browsers + script.onload = script.onreadystatechange = function( _, isAbort ) { + + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + + // Remove the script + if ( head && script.parentNode ) { + head.removeChild( script ); + } + + // Dereference the script + script = undefined; + + // Callback if not abort + if ( !isAbort ) { + callback( 200, "success" ); + } + } + }; + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709 and #4378). + head.insertBefore( script, head.firstChild ); + }, + + abort: function() { + if ( script ) { + script.onload( 0, 1 ); + } + } + }; + } +}); +var xhrCallbacks, + // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject ? function() { + // Abort all pending requests + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ]( 0, 1 ); + } + } : false, + xhrId = 0; + +// Functions to create xhrs +function createStandardXHR() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} +} + +function createActiveXHR() { + try { + return new window.ActiveXObject( "Microsoft.XMLHTTP" ); + } catch( e ) {} +} + +// Create the request object +// (This is still attached to ajaxSettings for backward compatibility) +jQuery.ajaxSettings.xhr = window.ActiveXObject ? + /* Microsoft failed to properly + * implement the XMLHttpRequest in IE7 (can't request local files), + * so we use the ActiveXObject when it is available + * Additionally XMLHttpRequest can be disabled in IE7/IE8 so + * we need a fallback. + */ + function() { + return !this.isLocal && createStandardXHR() || createActiveXHR(); + } : + // For all other browsers, use the standard XMLHttpRequest object + createStandardXHR; + +// Determine support properties +(function( xhr ) { + jQuery.extend( jQuery.support, { + ajax: !!xhr, + cors: !!xhr && ( "withCredentials" in xhr ) + }); +})( jQuery.ajaxSettings.xhr() ); + +// Create transport if the browser can provide an xhr +if ( jQuery.support.ajax ) { + + jQuery.ajaxTransport(function( s ) { + // Cross domain only allowed if supported through XMLHttpRequest + if ( !s.crossDomain || jQuery.support.cors ) { + + var callback; + + return { + send: function( headers, complete ) { + + // Get a new xhr + var handle, i, + xhr = s.xhr(); + + // Open the socket + // Passing null username, generates a login popup on Opera (#2865) + if ( s.username ) { + xhr.open( s.type, s.url, s.async, s.username, s.password ); + } else { + xhr.open( s.type, s.url, s.async ); + } + + // Apply custom fields if provided + if ( s.xhrFields ) { + for ( i in s.xhrFields ) { + xhr[ i ] = s.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( s.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( s.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !s.crossDomain && !headers["X-Requested-With"] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Need an extra try/catch for cross domain requests in Firefox 3 + try { + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + } catch( _ ) {} + + // Do send the request + // This may raise an exception which is actually + // handled in jQuery.ajax (so no try/catch here) + xhr.send( ( s.hasContent && s.data ) || null ); + + // Listener + callback = function( _, isAbort ) { + + var status, + statusText, + responseHeaders, + responses, + xml; + + // Firefox throws exceptions when accessing properties + // of an xhr when a network error occurred + // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) + try { + + // Was never called and is aborted or complete + if ( callback && ( isAbort || xhr.readyState === 4 ) ) { + + // Only called once + callback = undefined; + + // Do not keep as active anymore + if ( handle ) { + xhr.onreadystatechange = jQuery.noop; + if ( xhrOnUnloadAbort ) { + delete xhrCallbacks[ handle ]; + } + } + + // If it's an abort + if ( isAbort ) { + // Abort it manually if needed + if ( xhr.readyState !== 4 ) { + xhr.abort(); + } + } else { + status = xhr.status; + responseHeaders = xhr.getAllResponseHeaders(); + responses = {}; + xml = xhr.responseXML; + + // Construct response list + if ( xml && xml.documentElement /* #4958 */ ) { + responses.xml = xml; + } + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + try { + responses.text = xhr.responseText; + } catch( e ) { + } + + // Firefox throws an exception when accessing + // statusText for faulty cross-domain requests + try { + statusText = xhr.statusText; + } catch( e ) { + // We normalize with Webkit giving an empty statusText + statusText = ""; + } + + // Filter status for non standard behaviors + + // If the request is local and we have data: assume a success + // (success with no data won't get notified, that's the best we + // can do given current implementations) + if ( !status && s.isLocal && !s.crossDomain ) { + status = responses.text ? 200 : 404; + // IE - #1450: sometimes returns 1223 when it should be 204 + } else if ( status === 1223 ) { + status = 204; + } + } + } + } catch( firefoxAccessException ) { + if ( !isAbort ) { + complete( -1, firefoxAccessException ); + } + } + + // Call complete if needed + if ( responses ) { + complete( status, statusText, responses, responseHeaders ); + } + }; + + if ( !s.async ) { + // if we're in sync mode we fire the callback + callback(); + } else if ( xhr.readyState === 4 ) { + // (IE6 & IE7) if it's in cache and has been + // retrieved directly we need to fire the callback + setTimeout( callback, 0 ); + } else { + handle = ++xhrId; + if ( xhrOnUnloadAbort ) { + // Create the active xhrs callbacks list if needed + // and attach the unload handler + if ( !xhrCallbacks ) { + xhrCallbacks = {}; + jQuery( window ).unload( xhrOnUnloadAbort ); + } + // Add to list of active xhrs callbacks + xhrCallbacks[ handle ] = callback; + } + xhr.onreadystatechange = callback; + } + }, + + abort: function() { + if ( callback ) { + callback(0,1); + } + } + }; + } + }); +} +var fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [function( prop, value ) { + var end, unit, + tween = this.createTween( prop, value ), + parts = rfxnum.exec( value ), + target = tween.cur(), + start = +target || 0, + scale = 1, + maxIterations = 20; + + if ( parts ) { + end = +parts[2]; + unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + + // We need to compute starting value + if ( unit !== "px" && start ) { + // Iteratively approximate from a nonzero starting point + // Prefer the current property, because this process will be trivial if it uses the same units + // Fallback to end or a simple constant + start = jQuery.css( tween.elem, prop, true ) || end || 1; + + do { + // If previous iteration zeroed out, double until we get *something* + // Use a string for doubling factor so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // And breaking the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } + + tween.unit = unit; + tween.start = start; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; + } + return tween; + }] + }; + +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }, 0 ); + return ( fxNow = jQuery.now() ); +} + +function createTweens( animation, props ) { + jQuery.each( props, function( prop, value ) { + var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( collection[ index ].call( animation, prop, value ) ) { + + // we're done with this property + return; + } + } + }); +} + +function Animation( elem, properties, options ) { + var result, + index = 0, + tweenerIndex = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ]); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end, easing ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // if we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // resolve when we played the last frame + // otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } + + createTweens( animation, props ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + anim: animation, + queue: animation.opts.queue, + elem: elem + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'index' from above because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, + + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } +}); + +function defaultPrefilter( elem, props, opts ) { + var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire, + anim = this, + style = elem.style, + orig = {}, + handled = [], + hidden = elem.nodeType && isHidden( elem ); + + // handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always(function() { + // doing this makes sure that the complete handler will be called + // before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if ( jQuery.css( elem, "display" ) === "inline" && + jQuery.css( elem, "float" ) === "none" ) { + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { + style.display = "inline-block"; + + } else { + style.zoom = 1; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + if ( !jQuery.support.shrinkWrapBlocks ) { + anim.done(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + } + + + // show/hide pass + for ( index in props ) { + value = props[ index ]; + if ( rfxtypes.exec( value ) ) { + delete props[ index ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + continue; + } + handled.push( index ); + } + } + + length = handled.length; + if ( length ) { + dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + + // store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + jQuery.removeData( elem, "fxshow", true ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( index = 0 ; index < length ; index++ ) { + prop = handled[ index ]; + tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 ); + orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + } +} + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { + return tween.elem[ tween.prop ]; + } + + // passing any value as a 4th parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails + // so, simple values such as "10px" are parsed to Float. + // complex values such as "rotate(1rad)" are returned as is. + result = jQuery.css( tween.elem, tween.prop, false, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // use step hook for back compat - use cssHook if its there - use .style if its + // available and use plain properties where available + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Remove in 2.0 - this supports IE8's panic based approach +// to setting things on disconnected nodes + +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" || + // special check for .toggle( handler, handler, ... ) + ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +}); + +jQuery.fn.extend({ + fadeTo: function( speed, to, easing, callback ) { + + // show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations resolve immediately + if ( empty ) { + anim.stop( true ); + } + }; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = jQuery._data( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + } +}); + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + attrs = { height: type }, + i = 0; + + // if we include width, step value is 1 to do all cssExpand values, + // if we don't include width, step value is 2 to skip over Left and Right + includeWidth = includeWidth? 1 : 0; + for( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +// Generate shortcuts for custom animations +jQuery.each({ + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +}); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p*Math.PI ) / 2; + } +}; + +jQuery.timers = []; +jQuery.fx = Tween.prototype.init; +jQuery.fx.tick = function() { + var timer, + timers = jQuery.timers, + i = 0; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + if ( timer() && jQuery.timers.push( timer ) && !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.interval = 13; + +jQuery.fx.stop = function() { + clearInterval( timerId ); + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 +}; + +// Back Compat <1.8 extension point +jQuery.fx.step = {}; + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; + }; +} +var rroot = /^(?:body|html)$/i; + +jQuery.fn.offset = function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, + box = { top: 0, left: 0 }, + elem = this[ 0 ], + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + if ( (body = doc.body) === elem ) { + return jQuery.offset.bodyOffset( elem ); + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + // If we don't have gBCR, just use 0,0 rather than error + // BlackBerry 5, iOS 3 (original iPhone) + if ( typeof elem.getBoundingClientRect !== "undefined" ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + clientTop = docElem.clientTop || body.clientTop || 0; + clientLeft = docElem.clientLeft || body.clientLeft || 0; + scrollTop = win.pageYOffset || docElem.scrollTop; + scrollLeft = win.pageXOffset || docElem.scrollLeft; + return { + top: box.top + scrollTop - clientTop, + left: box.left + scrollLeft - clientLeft + }; +}; + +jQuery.offset = { + + bodyOffset: function( body ) { + var top = body.offsetTop, + left = body.offsetLeft; + + if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { + top += parseFloat( jQuery.css(body, "marginTop") ) || 0; + left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; + } + + return { top: top, left: left }; + }, + + setOffset: function( elem, options, i ) { + var position = jQuery.css( elem, "position" ); + + // set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + var curElem = jQuery( elem ), + curOffset = curElem.offset(), + curCSSTop = jQuery.css( elem, "top" ), + curCSSLeft = jQuery.css( elem, "left" ), + calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, + props = {}, curPosition = {}, curTop, curLeft; + + // need to be able to calculate position if either top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + } +}; + + +jQuery.fn.extend({ + + position: function() { + if ( !this[0] ) { + return; + } + + var elem = this[0], + + // Get *real* offsetParent + offsetParent = this.offsetParent(), + + // Get correct offsets + offset = this.offset(), + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + + // Subtract element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; + offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; + + // Add offsetParent borders + parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; + parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; + + // Subtract the two offsets + return { + top: offset.top - parentOffset.top, + left: offset.left - parentOffset.left + }; + }, + + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || document.body; + while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || document.body; + }); + } +}); + + +// Create scrollLeft and scrollTop methods +jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { + var top = /Y/.test( prop ); + + jQuery.fn[ method ] = function( val ) { + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + win.document.documentElement[ method ] : + elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? + elem : + elem.nodeType === 9 ? + elem.defaultView || elem.parentWindow : + false; +} +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return jQuery.access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, value, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); +// Expose jQuery to the global object +window.jQuery = window.$ = jQuery; + +// Expose jQuery as an AMD module, but only for AMD loaders that +// understand the issues with loading multiple versions of jQuery +// in a page that all might call define(). The loader will indicate +// they have special allowances for multiple jQuery versions by +// specifying define.amd.jQuery = true. Register as a named module, +// since jQuery can be concatenated with other files that may use define, +// but not use a proper concatenation script that understands anonymous +// AMD modules. A named AMD is safest and most robust way to register. +// Lowercase jquery is used because AMD module names are derived from +// file names, and jQuery is normally delivered in a lowercase file name. +// Do this after creating the global so that if an AMD module wants to call +// noConflict to hide this version of jQuery, it will work. +if ( typeof define === "function" && define.amd && define.amd.jQuery ) { + define( "jquery", [], function () { return jQuery; } ); +} + +})( window ); diff --git a/public/admin/view/javascript/jquery/flot/jquery.min.js b/public/admin/view/javascript/jquery/flot/jquery.min.js new file mode 100644 index 0000000..3883779 --- /dev/null +++ b/public/admin/view/javascript/jquery/flot/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.3 jquery.com | jquery.org/license */ +(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r<i;r++)v.event.add(t,n,u[n][r])}o.data&&(o.data=v.extend({},o.data))}function Ot(e,t){var n;if(t.nodeType!==1)return;t.clearAttributes&&t.clearAttributes(),t.mergeAttributes&&t.mergeAttributes(e),n=t.nodeName.toLowerCase(),n==="object"?(t.parentNode&&(t.outerHTML=e.outerHTML),v.support.html5Clone&&e.innerHTML&&!v.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):n==="input"&&Et.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):n==="option"?t.selected=e.defaultSelected:n==="input"||n==="textarea"?t.defaultValue=e.defaultValue:n==="script"&&t.text!==e.text&&(t.text=e.text),t.removeAttribute(v.expando)}function Mt(e){return typeof e.getElementsByTagName!="undefined"?e.getElementsByTagName("*"):typeof e.querySelectorAll!="undefined"?e.querySelectorAll("*"):[]}function _t(e){Et.test(e.type)&&(e.defaultChecked=e.checked)}function Qt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Jt.length;while(i--){t=Jt[i]+n;if(t in e)return t}return r}function Gt(e,t){return e=t||e,v.css(e,"display")==="none"||!v.contains(e.ownerDocument,e)}function Yt(e,t){var n,r,i=[],s=0,o=e.length;for(;s<o;s++){n=e[s];if(!n.style)continue;i[s]=v._data(n,"olddisplay"),t?(!i[s]&&n.style.display==="none"&&(n.style.display=""),n.style.display===""&&Gt(n)&&(i[s]=v._data(n,"olddisplay",nn(n.nodeName)))):(r=Dt(n,"display"),!i[s]&&r!=="none"&&v._data(n,"olddisplay",r))}for(s=0;s<o;s++){n=e[s];if(!n.style)continue;if(!t||n.style.display==="none"||n.style.display==="")n.style.display=t?i[s]||"":"none"}return e}function Zt(e,t,n){var r=Rt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function en(e,t,n,r){var i=n===(r?"border":"content")?4:t==="width"?1:0,s=0;for(;i<4;i+=2)n==="margin"&&(s+=v.css(e,n+$t[i],!0)),r?(n==="content"&&(s-=parseFloat(Dt(e,"padding"+$t[i]))||0),n!=="margin"&&(s-=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0)):(s+=parseFloat(Dt(e,"padding"+$t[i]))||0,n!=="padding"&&(s+=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0));return s}function tn(e,t,n){var r=t==="width"?e.offsetWidth:e.offsetHeight,i=!0,s=v.support.boxSizing&&v.css(e,"boxSizing")==="border-box";if(r<=0||r==null){r=Dt(e,t);if(r<0||r==null)r=e.style[t];if(Ut.test(r))return r;i=s&&(v.support.boxSizingReliable||r===e.style[t]),r=parseFloat(r)||0}return r+en(e,t,n||(s?"border":"content"),i)+"px"}function nn(e){if(Wt[e])return Wt[e];var t=v("<"+e+">").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write("<!doctype html><html><body>"),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u<a;u++)r=o[u],s=/^\+/.test(r),s&&(r=r.substr(1)||"*"),i=e[r]=e[r]||[],i[s?"unshift":"push"](n)}}function kn(e,n,r,i,s,o){s=s||n.dataTypes[0],o=o||{},o[s]=!0;var u,a=e[s],f=0,l=a?a.length:0,c=e===Sn;for(;f<l&&(c||!u);f++)u=a[f](n,r,i),typeof u=="string"&&(!c||o[u]?u=t:(n.dataTypes.unshift(u),u=kn(e,n,r,i,u,o)));return(c||!u)&&!o["*"]&&(u=kn(e,n,r,i,"*",o)),u}function Ln(e,n){var r,i,s=v.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((s[r]?e:i||(i={}))[r]=n[r]);i&&v.extend(!0,e,i)}function An(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes,l=e.responseFields;for(s in l)s in r&&(n[l[s]]=r[s]);while(f[0]==="*")f.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("content-type"));if(i)for(s in a)if(a[s]&&a[s].test(i)){f.unshift(s);break}if(f[0]in r)o=f[0];else{for(s in r){if(!f[0]||e.converters[s+" "+f[0]]){o=s;break}u||(u=s)}o=o||u}if(o)return o!==f[0]&&f.unshift(o),r[o]}function On(e,t){var n,r,i,s,o=e.dataTypes.slice(),u=o[0],a={},f=0;e.dataFilter&&(t=e.dataFilter(t,e.dataType));if(o[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=o[++f];)if(i!=="*"){if(u!=="*"&&u!==i){n=a[u+" "+i]||a["* "+i];if(!n)for(r in a){s=r.split(" ");if(s[1]===i){n=a[u+" "+s[0]]||a["* "+s[0]];if(n){n===!0?n=a[r]:a[r]!==!0&&(i=s[0],o.splice(f--,0,i));break}}}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(l){return{state:"parsererror",error:n?l:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:t}}function Fn(){try{return new e.XMLHttpRequest}catch(t){}}function In(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function $n(){return setTimeout(function(){qn=t},0),qn=v.now()}function Jn(e,t){v.each(t,function(t,n){var r=(Vn[t]||[]).concat(Vn["*"]),i=0,s=r.length;for(;i<s;i++)if(r[i].call(e,t,n))return})}function Kn(e,t,n){var r,i=0,s=0,o=Xn.length,u=v.Deferred().always(function(){delete a.elem}),a=function(){var t=qn||$n(),n=Math.max(0,f.startTime+f.duration-t),r=n/f.duration||0,i=1-r,s=0,o=f.tweens.length;for(;s<o;s++)f.tweens[s].run(i);return u.notifyWith(e,[f,i,n]),i<1&&o?n:(u.resolveWith(e,[f]),!1)},f=u.promise({elem:e,props:v.extend({},t),opts:v.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:qn||$n(),duration:n.duration,tweens:[],createTween:function(t,n,r){var i=v.Tween(e,f.opts,t,n,f.opts.specialEasing[t]||f.opts.easing);return f.tweens.push(i),i},stop:function(t){var n=0,r=t?f.tweens.length:0;for(;n<r;n++)f.tweens[n].run(1);return t?u.resolveWith(e,[f,t]):u.rejectWith(e,[f,t]),this}}),l=f.props;Qn(l,f.opts.specialEasing);for(;i<o;i++){r=Xn[i].call(f,e,l,f.opts);if(r)return r}return Jn(f,l),v.isFunction(f.opts.start)&&f.opts.start.call(e,f),v.fx.timer(v.extend(a,{anim:f,queue:f.opts.queue,elem:e})),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always)}function Qn(e,t){var n,r,i,s,o;for(n in e){r=v.camelCase(n),i=t[r],s=e[n],v.isArray(s)&&(i=s[1],s=e[n]=s[0]),n!==r&&(e[r]=s,delete e[n]),o=v.cssHooks[r];if(o&&"expand"in o){s=o.expand(s),delete e[r];for(n in s)n in e||(e[n]=s[n],t[n]=i)}else t[r]=i}}function Gn(e,t,n){var r,i,s,o,u,a,f,l,c,h=this,p=e.style,d={},m=[],g=e.nodeType&&Gt(e);n.queue||(l=v._queueHooks(e,"fx"),l.unqueued==null&&(l.unqueued=0,c=l.empty.fire,l.empty.fire=function(){l.unqueued||c()}),l.unqueued++,h.always(function(){h.always(function(){l.unqueued--,v.queue(e,"fx").length||l.empty.fire()})})),e.nodeType===1&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],v.css(e,"display")==="inline"&&v.css(e,"float")==="none"&&(!v.support.inlineBlockNeedsLayout||nn(e.nodeName)==="inline"?p.display="inline-block":p.zoom=1)),n.overflow&&(p.overflow="hidden",v.support.shrinkWrapBlocks||h.done(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t){s=t[r];if(Un.exec(s)){delete t[r],a=a||s==="toggle";if(s===(g?"hide":"show"))continue;m.push(r)}}o=m.length;if(o){u=v._data(e,"fxshow")||v._data(e,"fxshow",{}),"hidden"in u&&(g=u.hidden),a&&(u.hidden=!g),g?v(e).show():h.done(function(){v(e).hide()}),h.done(function(){var t;v.removeData(e,"fxshow",!0);for(t in d)v.style(e,t,d[t])});for(r=0;r<o;r++)i=m[r],f=h.createTween(i,g?u[i]:0),d[i]=u[i]||v.style(e,i),i in u||(u[i]=f.start,g&&(f.end=f.start,f.start=i==="width"||i==="height"?1:0))}}function Yn(e,t,n,r,i){return new Yn.prototype.init(e,t,n,r,i)}function Zn(e,t){var n,r={height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=$t[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function tr(e){return v.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:!1}var n,r,i=e.document,s=e.location,o=e.navigator,u=e.jQuery,a=e.$,f=Array.prototype.push,l=Array.prototype.slice,c=Array.prototype.indexOf,h=Object.prototype.toString,p=Object.prototype.hasOwnProperty,d=String.prototype.trim,v=function(e,t){return new v.fn.init(e,t,n)},m=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,g=/\S/,y=/\s+/,b=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,w=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a<f;a++)if((e=arguments[a])!=null)for(n in e){r=u[n],i=e[n];if(u===i)continue;l&&i&&(v.isPlainObject(i)||(s=v.isArray(i)))?(s?(s=!1,o=r&&v.isArray(r)?r:[]):o=r&&v.isPlainObject(r)?r:{},u[n]=v.extend(l,o,i)):i!==t&&(u[n]=i)}return u},v.extend({noConflict:function(t){return e.$===v&&(e.$=a),t&&e.jQuery===v&&(e.jQuery=u),v},isReady:!1,readyWait:1,holdReady:function(e){e?v.readyWait++:v.ready(!0)},ready:function(e){if(e===!0?--v.readyWait:v.isReady)return;if(!i.body)return setTimeout(v.ready,1);v.isReady=!0;if(e!==!0&&--v.readyWait>0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s<o;)if(n.apply(e[s++],r)===!1)break}else if(u){for(i in e)if(n.call(e[i],i,e[i])===!1)break}else for(;s<o;)if(n.call(e[s],s,e[s++])===!1)break;return e},trim:d&&!d.call("\ufeff\u00a0")?function(e){return e==null?"":d.call(e)}:function(e){return e==null?"":(e+"").replace(b,"")},makeArray:function(e,t){var n,r=t||[];return e!=null&&(n=v.type(e),e.length==null||n==="string"||n==="function"||n==="regexp"||v.isWindow(e)?f.call(r,e):v.merge(r,e)),r},inArray:function(e,t,n){var r;if(t){if(c)return c.call(t,e,n);r=t.length,n=n?n<0?Math.max(0,r+n):n:0;for(;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,s=0;if(typeof r=="number")for(;s<r;s++)e[i++]=n[s];else while(n[s]!==t)e[i++]=n[s++];return e.length=i,e},grep:function(e,t,n){var r,i=[],s=0,o=e.length;n=!!n;for(;s<o;s++)r=!!t(e[s],s),n!==r&&i.push(e[s]);return i},map:function(e,n,r){var i,s,o=[],u=0,a=e.length,f=e instanceof v||a!==t&&typeof a=="number"&&(a>0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u<a;u++)i=n(e[u],u,r),i!=null&&(o[o.length]=i);else for(s in e)i=n(e[s],s,r),i!=null&&(o[o.length]=i);return o.concat.apply([],o)},guid:1,proxy:function(e,n){var r,i,s;return typeof n=="string"&&(r=e[n],n=e,e=r),v.isFunction(e)?(i=l.call(arguments,2),s=function(){return e.apply(n,i.concat(l.call(arguments)))},s.guid=e.guid=e.guid||v.guid++,s):t},access:function(e,n,r,i,s,o,u){var a,f=r==null,l=0,c=e.length;if(r&&typeof r=="object"){for(l in r)v.access(e,n,l,r[l],1,o,i);s=1}else if(i!==t){a=u===t&&v.isFunction(i),f&&(a?(a=n,n=function(e,t,n){return a.call(v(e),n)}):(n.call(e,i),n=null));if(n)for(;l<c;l++)n(e[l],r,a?i.call(e[l],l,n(e[l],r)):i,u);s=1}return s?e:f?n.call(e):c?n(e[0],r):o},now:function(){return(new Date).getTime()}}),v.ready.promise=function(t){if(!r){r=v.Deferred();if(i.readyState==="complete")setTimeout(v.ready,1);else if(i.addEventListener)i.addEventListener("DOMContentLoaded",A,!1),e.addEventListener("load",v.ready,!1);else{i.attachEvent("onreadystatechange",A),e.attachEvent("onload",v.ready);var n=!1;try{n=e.frameElement==null&&i.documentElement}catch(s){}n&&n.doScroll&&function o(){if(!v.isReady){try{n.doScroll("left")}catch(e){return setTimeout(o,50)}v.ready()}}()}}return r.promise(t)},v.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(e,t){O["[object "+t+"]"]=t.toLowerCase()}),n=v(i);var M={};v.Callbacks=function(e){e=typeof e=="string"?M[e]||_(e):v.extend({},e);var n,r,i,s,o,u,a=[],f=!e.once&&[],l=function(t){n=e.memory&&t,r=!0,u=s||0,s=0,o=a.length,i=!0;for(;a&&u<o;u++)if(a[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}i=!1,a&&(f?f.length&&l(f.shift()):n?a=[]:c.disable())},c={add:function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this},remove:function(){return a&&v.each(arguments,function(e,t){var n;while((n=v.inArray(t,a,n))>-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t<r;t++)n[t]&&v.isFunction(n[t].promise)?n[t].promise().done(o(t,f,n)).fail(s.reject).progress(o(t,a,u)):--i}return i||s.resolveWith(f,n),s.promise()}}),v.support=function(){var t,n,r,s,o,u,a,f,l,c,h,p=i.createElement("div");p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="<table><tr><td></td><td>t</td></tr></table>",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="<div></div>",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i<s;i++)delete r[t[i]];if(!(n?B:v.isEmptyObject)(r))return}}if(!n){delete u[a].data;if(!B(u[a]))return}o?v.cleanData([e],!0):v.support.deleteExpando||u!=u.window?delete u[a]:u[a]=null},_data:function(e,t,n){return v.data(e,t,n,!0)},acceptData:function(e){var t=e.nodeName&&v.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),v.fn.extend({data:function(e,n){var r,i,s,o,u,a=this[0],f=0,l=null;if(e===t){if(this.length){l=v.data(a);if(a.nodeType===1&&!v._data(a,"parsedAttrs")){s=a.attributes;for(u=s.length;f<u;f++)o=s[f].name,o.indexOf("data-")||(o=v.camelCase(o.substring(5)),H(a,o,l[o]));v._data(a,"parsedAttrs",!0)}}return l}return typeof e=="object"?this.each(function(){v.data(this,e)}):(r=e.split(".",2),r[1]=r[1]?"."+r[1]:"",i=r[1]+"!",v.access(this,function(n){if(n===t)return l=this.triggerHandler("getData"+i,[r[0]]),l===t&&a&&(l=v.data(a,e),l=H(a,e,l)),l===t&&r[1]?this.data(r[0]):l;r[1]=n,this.each(function(){var t=v(this);t.triggerHandler("setData"+i,r),v.data(this,e,n),t.triggerHandler("changeData"+i,r)})},null,n,arguments.length>1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length<r?v.queue(this[0],e):n===t?this:this.each(function(){var t=v.queue(this,e,n);v._queueHooks(this,e),e==="fx"&&t[0]!=="inprogress"&&v.dequeue(this,e)})},dequeue:function(e){return this.each(function(){v.dequeue(this,e)})},delay:function(e,t){return e=v.fx?v.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,s=v.Deferred(),o=this,u=this.length,a=function(){--i||s.resolveWith(o,[o])};typeof e!="string"&&(n=e,e=t),e=e||"fx";while(u--)r=v._data(o[u],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(a));return a(),s.promise(n)}});var j,F,I,q=/[\t\r\n]/g,R=/\r/g,U=/^(?:button|input)$/i,z=/^(?:button|input|object|select|textarea)$/i,W=/^a(?:rea|)$/i,X=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,V=v.support.getSetAttribute;v.fn.extend({attr:function(e,t){return v.access(this,v.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n<r;n++){i=this[n];if(i.nodeType===1)if(!i.className&&t.length===1)i.className=e;else{s=" "+i.className+" ";for(o=0,u=t.length;o<u;o++)s.indexOf(" "+t[o]+" ")<0&&(s+=t[o]+" ");i.className=v.trim(s)}}}return this},removeClass:function(e){var n,r,i,s,o,u,a;if(v.isFunction(e))return this.each(function(t){v(this).removeClass(e.call(this,t,this.className))});if(e&&typeof e=="string"||e===t){n=(e||"").split(y);for(u=0,a=this.length;u<a;u++){i=this[u];if(i.nodeType===1&&i.className){r=(" "+i.className+" ").replace(q," ");for(s=0,o=n.length;s<o;s++)while(r.indexOf(" "+n[s]+" ")>=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n<r;n++)if(this[n].nodeType===1&&(" "+this[n].className+" ").replace(q," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(v.support.optDisabled?!n.disabled:n.getAttribute("disabled")===null)&&(!n.parentNode.disabled||!v.nodeName(n.parentNode,"optgroup"))){t=v(n).val();if(s)return t;o.push(t)}}return o},set:function(e,t){var n=v.makeArray(t);return v(e).find("option").each(function(){this.selected=v.inArray(v(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o<r.length;o++)i=r[o],i&&(n=v.propFix[i]||i,s=X.test(i),s||v.attr(e,i,""),e.removeAttribute(V?i:n),s&&n in e&&(e[n]=!1))}},attrHooks:{type:{set:function(e,t){if(U.test(e.nodeName)&&e.parentNode)v.error("type property can't be changed");else if(!v.support.radioValue&&t==="radio"&&v.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}},value:{get:function(e,t){return j&&v.nodeName(e,"button")?j.get(e,t):t in e?e.value:null},set:function(e,t,n){if(j&&v.nodeName(e,"button"))return j.set(e,t,n);e.value=t}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,s,o,u=e.nodeType;if(!e||u===3||u===8||u===2)return;return o=u!==1||!v.isXMLDoc(e),o&&(n=v.propFix[n]||n,s=v.propHooks[n]),r!==t?s&&"set"in s&&(i=s.set(e,r,n))!==t?i:e[n]=r:s&&"get"in s&&(i=s.get(e,n))!==null?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):z.test(e.nodeName)||W.test(e.nodeName)&&e.href?0:t}}}}),F={get:function(e,n){var r,i=v.prop(e,n);return i===!0||typeof i!="boolean"&&(r=e.getAttributeNode(n))&&r.nodeValue!==!1?n.toLowerCase():t},set:function(e,t,n){var r;return t===!1?v.removeAttr(e,n):(r=v.propFix[n]||n,r in e&&(e[r]=!0),e.setAttribute(n,n.toLowerCase())),n}},V||(I={name:!0,id:!0,coords:!0},j=v.valHooks.button={get:function(e,n){var r;return r=e.getAttributeNode(n),r&&(I[n]?r.value!=="":r.specified)?r.value:t},set:function(e,t,n){var r=e.getAttributeNode(n);return r||(r=i.createAttribute(n),e.setAttributeNode(r)),r.value=t+""}},v.each(["width","height"],function(e,t){v.attrHooks[t]=v.extend(v.attrHooks[t],{set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}})}),v.attrHooks.contenteditable={get:j.get,set:function(e,t,n){t===""&&(t="false"),j.set(e,t,n)}}),v.support.hrefNormalized||v.each(["href","src","width","height"],function(e,n){v.attrHooks[n]=v.extend(v.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return r===null?t:r}})}),v.support.style||(v.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=t+""}}),v.support.optSelected||(v.propHooks.selected=v.extend(v.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),v.support.enctype||(v.propFix.enctype="encoding"),v.support.checkOn||v.each(["radio","checkbox"],function(){v.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}}),v.each(["radio","checkbox"],function(){v.valHooks[this]=v.extend(v.valHooks[this],{set:function(e,t){if(v.isArray(t))return e.checked=v.inArray(v(e).val(),t)>=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f<n.length;f++){l=J.exec(n[f])||[],c=l[1],h=(l[2]||"").split(".").sort(),g=v.event.special[c]||{},c=(s?g.delegateType:g.bindType)||c,g=v.event.special[c]||{},p=v.extend({type:c,origType:l[1],data:i,handler:r,guid:r.guid,selector:s,needsContext:s&&v.expr.match.needsContext.test(s),namespace:h.join(".")},d),m=a[c];if(!m){m=a[c]=[],m.delegateCount=0;if(!g.setup||g.setup.call(e,i,h,u)===!1)e.addEventListener?e.addEventListener(c,u,!1):e.attachEvent&&e.attachEvent("on"+c,u)}g.add&&(g.add.call(e,p),p.handler.guid||(p.handler.guid=r.guid)),s?m.splice(m.delegateCount++,0,p):m.push(p),v.event.global[c]=!0}e=null},global:{},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,p,d,m,g=v.hasData(e)&&v._data(e);if(!g||!(h=g.events))return;t=v.trim(Z(t||"")).split(" ");for(s=0;s<t.length;s++){o=J.exec(t[s])||[],u=a=o[1],f=o[2];if(!u){for(u in h)v.event.remove(e,u+t[s],n,r,!0);continue}p=v.event.special[u]||{},u=(r?p.delegateType:p.bindType)||u,d=h[u]||[],l=d.length,f=f?new RegExp("(^|\\.)"+f.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(c=0;c<d.length;c++)m=d[c],(i||a===m.origType)&&(!n||n.guid===m.guid)&&(!f||f.test(m.namespace))&&(!r||r===m.selector||r==="**"&&m.selector)&&(d.splice(c--,1),m.selector&&d.delegateCount--,p.remove&&p.remove.call(e,m));d.length===0&&l!==d.length&&((!p.teardown||p.teardown.call(e,f,g.handle)===!1)&&v.removeEvent(e,u,g.handle),delete h[u])}v.isEmptyObject(h)&&(delete g.handle,v.removeData(e,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(n,r,s,o){if(!s||s.nodeType!==3&&s.nodeType!==8){var u,a,f,l,c,h,p,d,m,g,y=n.type||n,b=[];if(Y.test(y+v.event.triggered))return;y.indexOf("!")>=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f<m.length&&!n.isPropagationStopped();f++)l=m[f][0],n.type=m[f][1],d=(v._data(l,"events")||{})[n.type]&&v._data(l,"handle"),d&&d.apply(l,r),d=h&&l[h],d&&v.acceptData(l)&&d.apply&&d.apply(l,r)===!1&&n.preventDefault();return n.type=y,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(s.ownerDocument,r)===!1)&&(y!=="click"||!v.nodeName(s,"a"))&&v.acceptData(s)&&h&&s[y]&&(y!=="focus"&&y!=="blur"||n.target.offsetWidth!==0)&&!v.isWindow(s)&&(c=s[h],c&&(s[h]=null),v.event.triggered=y,s[y](),v.event.triggered=t,c&&(s[h]=c)),n.result}return},dispatch:function(n){n=v.event.fix(n||e.event);var r,i,s,o,u,a,f,c,h,p,d=(v._data(this,"events")||{})[n.type]||[],m=d.delegateCount,g=l.call(arguments),y=!n.exclusive&&!n.namespace,b=v.event.special[n.type]||{},w=[];g[0]=n,n.delegateTarget=this;if(b.preDispatch&&b.preDispatch.call(this,n)===!1)return;if(m&&(!n.button||n.type!=="click"))for(s=n.target;s!=this;s=s.parentNode||this)if(s.disabled!==!0||n.type!=="click"){u={},f=[];for(r=0;r<m;r++)c=d[r],h=c.selector,u[h]===t&&(u[h]=c.needsContext?v(h,this).index(s)>=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r<w.length&&!n.isPropagationStopped();r++){a=w[r],n.currentTarget=a.elem;for(i=0;i<a.matches.length&&!n.isImmediatePropagationStopped();i++){c=a.matches[i];if(y||!n.namespace&&!c.namespace||n.namespace_re&&n.namespace_re.test(c.namespace))n.data=c.data,n.handleObj=c,o=((v.event.special[c.origType]||{}).handle||c.handler).apply(a.elem,g),o!==t&&(n.result=o,o===!1&&(n.preventDefault(),n.stopPropagation()))}}return b.postDispatch&&b.postDispatch.call(this,n),n.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return e.which==null&&(e.which=t.charCode!=null?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,s,o,u=n.button,a=n.fromElement;return e.pageX==null&&n.clientX!=null&&(r=e.target.ownerDocument||i,s=r.documentElement,o=r.body,e.pageX=n.clientX+(s&&s.scrollLeft||o&&o.scrollLeft||0)-(s&&s.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(s&&s.scrollTop||o&&o.scrollTop||0)-(s&&s.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?n.toElement:a),!e.which&&u!==t&&(e.which=u&1?1:u&2?3:u&4?2:0),e}},fix:function(e){if(e[v.expando])return e;var t,n,r=e,s=v.event.fixHooks[e.type]||{},o=s.props?this.props.concat(s.props):this.props;e=v.Event(r);for(t=o.length;t;)n=o[--t],e[n]=r[n];return e.target||(e.target=r.srcElement||i),e.target.nodeType===3&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(e,t,n){v.isWindow(this)&&(this.onbeforeunload=n)},teardown:function(e,t){this.onbeforeunload===t&&(this.onbeforeunload=null)}}},simulate:function(e,t,n,r){var i=v.extend(new v.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?v.event.trigger(i,null,t):v.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},v.event.handle=v.event.dispatch,v.removeEvent=i.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]=="undefined"&&(e[r]=null),e.detachEvent(r,n))},v.Event=function(e,t){if(!(this instanceof v.Event))return new v.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?tt:et):this.type=e,t&&v.extend(this,t),this.timeStamp=e&&e.timeStamp||v.now(),this[v.expando]=!0},v.Event.prototype={preventDefault:function(){this.isDefaultPrevented=tt;var e=this.originalEvent;if(!e)return;e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=tt;var e=this.originalEvent;if(!e)return;e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=tt,this.stopPropagation()},isDefaultPrevented:et,isPropagationStopped:et,isImmediatePropagationStopped:et},v.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){v.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,s=e.handleObj,o=s.selector;if(!i||i!==r&&!v.contains(r,i))e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t;return n}}}),v.support.submitBubbles||(v.event.special.submit={setup:function(){if(v.nodeName(this,"form"))return!1;v.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=v.nodeName(n,"input")||v.nodeName(n,"button")?n.form:t;r&&!v._data(r,"_submit_attached")&&(v.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),v._data(r,"_submit_attached",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&v.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){if(v.nodeName(this,"form"))return!1;v.event.remove(this,"._submit")}}),v.support.changeBubbles||(v.event.special.change={setup:function(){if($.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")v.event.add(this,"propertychange._change",function(e){e.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),v.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),v.event.simulate("change",this,e,!0)});return!1}v.event.add(this,"beforeactivate._change",function(e){var t=e.target;$.test(t.nodeName)&&!v._data(t,"_change_attached")&&(v.event.add(t,"change._change",function(e){this.parentNode&&!e.isSimulated&&!e.isTrigger&&v.event.simulate("change",this.parentNode,e,!0)}),v._data(t,"_change_attached",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||t.type!=="radio"&&t.type!=="checkbox")return e.handleObj.handler.apply(this,arguments)},teardown:function(){return v.event.remove(this,"._change"),!$.test(this.nodeName)}}),v.support.focusinBubbles||v.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){v.event.simulate(t,e.target,v.event.fix(e),!0)};v.event.special[t]={setup:function(){n++===0&&i.addEventListener(e,r,!0)},teardown:function(){--n===0&&i.removeEventListener(e,r,!0)}}}),v.fn.extend({on:function(e,n,r,i,s){var o,u;if(typeof e=="object"){typeof n!="string"&&(r=r||n,n=t);for(u in e)this.on(u,n,r,e[u],s);return this}r==null&&i==null?(i=n,r=n=t):i==null&&(typeof n=="string"?(i=r,r=t):(i=r,r=n,n=t));if(i===!1)i=et;else if(!i)return this;return s===1&&(o=i,i=function(e){return v().off(e),o.apply(this,arguments)},i.guid=o.guid||(o.guid=v.guid++)),this.each(function(){v.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,s;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,v(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if(typeof e=="object"){for(s in e)this.off(s,n,e[s]);return this}if(n===!1||typeof n=="function")r=n,n=t;return r===!1&&(r=et),this.each(function(){v.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},live:function(e,t,n){return v(this.context).on(e,this.selector,t,n),this},die:function(e,t){return v(this.context).off(e,this.selector||"**",t),this},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){v.event.trigger(e,t,this)})},triggerHandler:function(e,t){if(this[0])return v.event.trigger(e,t,this[0],!0)},toggle:function(e){var t=arguments,n=e.guid||v.guid++,r=0,i=function(n){var i=(v._data(this,"lastToggle"+e.guid)||0)%r;return v._data(this,"lastToggle"+e.guid,i+1),n.preventDefault(),t[i].apply(this,arguments)||!1};i.guid=n;while(r<t.length)t[r++].guid=n;return this.click(i)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){v.fn[t]=function(e,n){return n==null&&(n=e,e=null),arguments.length>0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return o}function ct(e,t,n,r,i,s){return r&&!r[d]&&(r=ct(r)),i&&!i[d]&&(i=ct(i,s)),N(function(s,o,u,a){var f,l,c,h=[],p=[],d=o.length,v=s||dt(t||"*",u.nodeType?[u]:u,[]),m=e&&(s||!t)?lt(v,h,e,u,a):v,g=n?i||(s?e:d||r)?[]:o:m;n&&n(m,g,u,a);if(r){f=lt(g,p),r(f,[],u,a),l=f.length;while(l--)if(c=f[l])g[p[l]]=!(m[p[l]]=c)}if(s){if(i||e){if(i){f=[],l=g.length;while(l--)(c=g[l])&&f.push(m[l]=c);i(null,g=[],f,a)}l=g.length;while(l--)(c=g[l])&&(f=i?T.call(s,c):h[l])>-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a<s;a++)if(n=i.relative[e[a].type])h=[at(ft(h),n)];else{n=i.filter[e[a].type].apply(null,e[a].matches);if(n[d]){r=++a;for(;r<s;r++)if(i.relative[e[r].type])break;return ct(a>1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a<r&&ht(e.slice(a,r)),r<s&&ht(e=e.slice(r)),r<s&&e.join(""))}h.push(n)}return ft(h)}function pt(e,t){var r=t.length>0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r<i;r++)nt(e,t[r],n);return n}function vt(e,t,n,r,s){var o,u,f,l,c,h=ut(e),p=h.length;if(!r&&h.length===1){u=h[0]=h[0].slice(0);if(u.length>2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;t<n;t++)if(this[t]===e)return t;return-1},N=function(e,t){return e[d]=t==null||t,e},C=function(){var e={},t=[];return N(function(n,r){return t.push(n)>i.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="<a name='"+d+"'></a><div name='"+d+"'></div>",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:st(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:st(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},f=y.compareDocumentPosition?function(e,t){return e===t?(l=!0,0):(!e.compareDocumentPosition||!t.compareDocumentPosition?e.compareDocumentPosition:e.compareDocumentPosition(t)&4)?-1:1}:function(e,t){if(e===t)return l=!0,0;if(e.sourceIndex&&t.sourceIndex)return e.sourceIndex-t.sourceIndex;var n,r,i=[],s=[],o=e.parentNode,u=t.parentNode,a=o;if(o===u)return ot(e,t);if(!o)return-1;if(!u)return 1;while(a)i.unshift(a),a=a.parentNode;a=u;while(a)s.unshift(a),a=a.parentNode;n=i.length,r=s.length;for(var f=0;f<n&&f<r;f++)if(i[f]!==s[f])return ot(i[f],s[f]);return f===n?ot(e,s[f],-1):ot(i[f],t,1)},[0,0].sort(f),h=!l,nt.uniqueSort=function(e){var t,n=[],r=1,i=0;l=h,e.sort(f);if(l){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e},nt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},a=nt.compile=function(e,t){var n,r=[],i=[],s=A[d][e+" "];if(!s){t||(t=ut(e)),n=t.length;while(n--)s=ht(t[n]),s[d]?r.push(s):i.push(s);s=A(e,pt(i,r))}return s},g.querySelectorAll&&function(){var e,t=vt,n=/'|\\/g,r=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,i=[":focus"],s=[":active"],u=y.matchesSelector||y.mozMatchesSelector||y.webkitMatchesSelector||y.oMatchesSelector||y.msMatchesSelector;K(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="<p test=''></p>",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="<input type='hidden'/>",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t<n;t++)if(v.contains(u[t],this))return!0});o=this.pushStack("","find",e);for(t=0,n=this.length;t<n;t++){r=o.length,v.find(e,this[t],o);if(t>0)for(i=r;i<o.length;i++)for(s=0;s<r;s++)if(o[s]===o[i]){o.splice(i--,1);break}}return o},has:function(e){var t,n=v(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(v.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1),"not",e)},filter:function(e){return this.pushStack(ft(this,e,!0),"filter",e)},is:function(e){return!!e&&(typeof e=="string"?st.test(e)?v(e,this.context).index(this[0])>=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r<i;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&n.nodeType!==11){if(o?o.index(n)>-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/<tbody/i,gt=/<|&#?\w+;/,yt=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,wt=new RegExp("<(?:"+ct+")[\\s/>]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,Nt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X<div>","</div>"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1></$2>");try{for(;r<i;r++)n=this[r]||{},n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),n.innerHTML=e);n=0}catch(s){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){return ut(this[0])?this.length?this.pushStack(v(v.isFunction(e)?e():e),"replaceWith",e):this:v.isFunction(e)?this.each(function(t){var n=v(this),r=n.html();n.replaceWith(e.call(this,t,r))}):(typeof e!="string"&&(e=v(e).detach()),this.each(function(){var t=this.nextSibling,n=this.parentNode;v(this).remove(),t?v(t).before(e):v(n).append(e)}))},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=[].concat.apply([],e);var i,s,o,u,a=0,f=e[0],l=[],c=this.length;if(!v.support.checkClone&&c>1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a<c;a++)r.call(n&&v.nodeName(this[a],"table")?Lt(this[a],"tbody"):this[a],a===u?o:v.clone(o,!0,!0))}o=s=null,l.length&&v.each(l,function(e,t){t.src?v.ajax?v.ajax({url:t.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):v.error("no ajax"):v.globalEval((t.text||t.textContent||t.innerHTML||"").replace(Tt,"")),t.parentNode&&t.parentNode.removeChild(t)})}return this}}),v.buildFragment=function(e,n,r){var s,o,u,a=e[0];return n=n||i,n=!n.nodeType&&n[0]||n,n=n.ownerDocument||n,e.length===1&&typeof a=="string"&&a.length<512&&n===i&&a.charAt(0)==="<"&&!bt.test(a)&&(v.support.checkClone||!St.test(a))&&(v.support.html5Clone||!wt.test(a))&&(o=!0,s=v.fragments[a],u=s!==t),s||(s=n.createDocumentFragment(),v.clean(e,n,s,r),o&&(v.fragments[a]=u&&s)),{fragment:s,cacheable:o}},v.fragments={},v.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){v.fn[e]=function(n){var r,i=0,s=[],o=v(n),u=o.length,a=this.length===1&&this[0].parentNode;if((a==null||a&&a.nodeType===11&&a.childNodes.length===1)&&u===1)return o[t](this[0]),this;for(;i<u;i++)r=(i>0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1></$2>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]==="<table>"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("<div>").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r<i;r++)n=e[r],Vn[n]=Vn[n]||[],Vn[n].unshift(t)},prefilter:function(e,t){t?Xn.unshift(e):Xn.push(e)}}),v.Tween=Yn,Yn.prototype={constructor:Yn,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(v.cssNumber[n]?"":"px")},cur:function(){var e=Yn.propHooks[this.prop];return e&&e.get?e.get(this):Yn.propHooks._default.get(this)},run:function(e){var t,n=Yn.propHooks[this.prop];return this.options.duration?this.pos=t=v.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yn.propHooks._default.set(this),this}},Yn.prototype.init.prototype=Yn.prototype,Yn.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=v.css(e.elem,e.prop,!1,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){v.fx.step[e.prop]?v.fx.step[e.prop](e):e.elem.style&&(e.elem.style[v.cssProps[e.prop]]!=null||v.cssHooks[e.prop])?v.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yn.propHooks.scrollTop=Yn.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},v.each(["toggle","show","hide"],function(e,t){var n=v.fn[t];v.fn[t]=function(r,i,s){return r==null||typeof r=="boolean"||!e&&v.isFunction(r)&&v.isFunction(i)?n.apply(this,arguments):this.animate(Zn(t,!0),r,i,s)}}),v.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Gt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=v.isEmptyObject(e),s=v.speed(t,n,r),o=function(){var t=Kn(this,v.extend({},e),s);i&&t.stop(!0)};return i||s.queue===!1?this.each(o):this.queue(s.queue,o)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return typeof e!="string"&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=e!=null&&e+"queueHooks",s=v.timers,o=v._data(this);if(n)o[n]&&o[n].stop&&i(o[n]);else for(n in o)o[n]&&o[n].stop&&Wn.test(n)&&i(o[n]);for(n=s.length;n--;)s[n].elem===this&&(e==null||s[n].queue===e)&&(s[n].anim.stop(r),t=!1,s.splice(n,1));(t||!r)&&v.dequeue(this,e)})}}),v.each({slideDown:Zn("show"),slideUp:Zn("hide"),slideToggle:Zn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){v.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),v.speed=function(e,t,n){var r=e&&typeof e=="object"?v.extend({},e):{complete:n||!n&&t||v.isFunction(e)&&e,duration:e,easing:n&&t||t&&!v.isFunction(t)&&t};r.duration=v.fx.off?0:typeof r.duration=="number"?r.duration:r.duration in v.fx.speeds?v.fx.speeds[r.duration]:v.fx.speeds._default;if(r.queue==null||r.queue===!0)r.queue="fx";return r.old=r.complete,r.complete=function(){v.isFunction(r.old)&&r.old.call(this),r.queue&&v.dequeue(this,r.queue)},r},v.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},v.timers=[],v.fx=Yn.prototype.init,v.fx.tick=function(){var e,n=v.timers,r=0;qn=v.now();for(;r<n.length;r++)e=n[r],!e()&&n[r]===e&&n.splice(r--,1);n.length||v.fx.stop(),qn=t},v.fx.timer=function(e){e()&&v.timers.push(e)&&!Rn&&(Rn=setInterval(v.fx.tick,v.fx.interval))},v.fx.interval=13,v.fx.stop=function(){clearInterval(Rn),Rn=null},v.fx.speeds={slow:600,fast:200,_default:400},v.fx.step={},v.expr&&v.expr.filters&&(v.expr.filters.animated=function(e){return v.grep(v.timers,function(t){return e===t.elem}).length});var er=/^(?:body|html)$/i;v.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){v.offset.setOffset(this,e,t)});var n,r,i,s,o,u,a,f={top:0,left:0},l=this[0],c=l&&l.ownerDocument;if(!c)return;return(r=c.body)===l?v.offset.bodyOffset(l):(n=c.documentElement,v.contains(n,l)?(typeof l.getBoundingClientRect!="undefined"&&(f=l.getBoundingClientRect()),i=tr(c),s=n.clientTop||r.clientTop||0,o=n.clientLeft||r.clientLeft||0,u=i.pageYOffset||n.scrollTop,a=i.pageXOffset||n.scrollLeft,{top:f.top+u-s,left:f.left+a-o}):f)},v.offset={bodyOffset:function(e){var t=e.offsetTop,n=e.offsetLeft;return v.support.doesNotIncludeMarginInBodyOffset&&(t+=parseFloat(v.css(e,"marginTop"))||0,n+=parseFloat(v.css(e,"marginLeft"))||0),{top:t,left:n}},setOffset:function(e,t,n){var r=v.css(e,"position");r==="static"&&(e.style.position="relative");var i=v(e),s=i.offset(),o=v.css(e,"top"),u=v.css(e,"left"),a=(r==="absolute"||r==="fixed")&&v.inArray("auto",[o,u])>-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window);
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jquery-2.1.1.min.js b/public/admin/view/javascript/jquery/jquery-2.1.1.min.js new file mode 100644 index 0000000..e5ace11 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-2.1.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) +},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b)) +},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n}); diff --git a/public/admin/view/javascript/jquery/jquery-2.1.1.min.map b/public/admin/view/javascript/jquery/jquery-2.1.1.min.map new file mode 100644 index 0000000..2529eaf --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-2.1.1.min.map @@ -0,0 +1 @@ +{"version":3,"file":"jquery-2.1.1.min.js","sources":["jquery-2.1.1.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","args","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","name","src","copy","copyIsArray","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","parseFloat","nodeType","isEmptyObject","globalEval","code","script","indirect","eval","trim","createElement","text","head","appendChild","parentNode","removeChild","camelCase","string","nodeName","toLowerCase","value","isArraylike","makeArray","results","Object","inArray","second","grep","invert","callbackInverse","matches","callbackExpect","arg","guid","proxy","tmp","now","Date","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","strundefined","MAX_NEGATIVE","pop","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","childNodes","e","els","seed","match","m","groups","old","nid","newContext","newSelector","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","testContext","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","div","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","doc","parent","defaultView","top","addEventListener","attachEvent","className","createComment","innerHTML","firstChild","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","is","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","until","truncate","sibling","n","targets","l","closest","pos","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","reverse","rnotwhite","optionsCache","createOptions","object","flag","Callbacks","memory","fired","firing","firingStart","firingLength","firingIndex","list","stack","once","fire","data","stopOnFalse","disable","remove","lock","locked","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","resolve","reject","progress","notify","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","resolveWith","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","completed","removeEventListener","readyState","setTimeout","access","chainable","emptyGet","raw","bulk","acceptData","owner","Data","defineProperty","uid","accepts","descriptor","unlock","defineProperties","set","prop","stored","camel","hasData","discard","data_priv","data_user","rbrace","rmultiDash","dataAttr","parseJSON","removeData","_data","_removeData","camelKey","queue","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","cssExpand","isHidden","el","css","rcheckableType","fragment","createDocumentFragment","checkClone","cloneNode","noCloneChecked","focusinBubbles","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","event","types","handleObjIn","eventHandle","events","t","handleObj","special","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","bubbleType","ontype","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","props","fixHooks","keyHooks","original","which","charCode","keyCode","mouseHooks","eventDoc","body","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","load","blur","click","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","relatedTarget","attaches","on","one","origFn","rxhtmlTag","rtagName","rhtml","rnoInnerhtml","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","manipulationTarget","content","disableScript","restoreScript","setGlobalEval","refElements","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","getAll","fixInput","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","buildFragment","scripts","selection","wrap","nodes","createTextNode","cleanData","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","detach","hasScripts","iNoClone","_evalUrl","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","actualDisplay","style","display","getDefaultComputedStyle","defaultDisplay","write","close","rmargin","rnumnonpx","getStyles","getComputedStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","pixelPositionVal","boxSizingReliableVal","container","backgroundClip","clearCloneStyle","cssText","computePixelPositionAndBoxSizingReliable","divStyle","pixelPosition","boxSizingReliable","reliableMarginRight","marginDiv","marginRight","swap","rdisplayswap","rnumsplit","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","vendorPropName","capName","origName","setPositiveNumber","subtract","max","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","showHide","show","hidden","cssHooks","opacity","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","cssProps","float","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","unit","propHooks","run","percent","eased","duration","step","tween","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","defaultPrefilter","tweeners","*","createTween","scale","maxIterations","createFxNow","genFx","includeWidth","height","animation","collection","opts","oldfire","checkDisplay","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","Animation","properties","stopped","tick","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","rejectWith","timer","complete","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","optDisabled","radioValue","nodeHook","boolHook","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","rfocusable","removeProp","for","class","notxml","hasAttribute","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","transports","allTypes","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","ct","finalDataType","firstDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","processData","async","contentType","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","status","abort","statusText","finalText","success","method","crossDomain","param","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","unwrap","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrId","xhrCallbacks","xhrSuccessStatus",1223,"xhrSupported","ActiveXObject","cors","open","username","xhrFields","onload","onerror","responseText","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","left","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict"],"mappings":";CAcC,SAAUA,EAAQC,GAEK,gBAAXC,SAAiD,gBAAnBA,QAAOC,QAQhDD,OAAOC,QAAUH,EAAOI,SACvBH,EAASD,GAAQ,GACjB,SAAUK,GACT,IAAMA,EAAED,SACP,KAAM,IAAIE,OAAO,2CAElB,OAAOL,GAASI,IAGlBJ,EAASD,IAIS,mBAAXO,QAAyBA,OAASC,KAAM,SAAUD,EAAQE,GAQnE,GAAIC,MAEAC,EAAQD,EAAIC,MAEZC,EAASF,EAAIE,OAEbC,EAAOH,EAAIG,KAEXC,EAAUJ,EAAII,QAEdC,KAEAC,EAAWD,EAAWC,SAEtBC,EAASF,EAAWG,eAEpBC,KAMHf,EAAWG,EAAOH,SAElBgB,EAAU,QAGVC,EAAS,SAAUC,EAAUC,GAG5B,MAAO,IAAIF,GAAOG,GAAGC,KAAMH,EAAUC,IAKtCG,EAAQ,qCAGRC,EAAY,QACZC,EAAa,eAGbC,EAAa,SAAUC,EAAKC,GAC3B,MAAOA,GAAOC,cAGhBX,GAAOG,GAAKH,EAAOY,WAElBC,OAAQd,EAERe,YAAad,EAGbC,SAAU,GAGVc,OAAQ,EAERC,QAAS,WACR,MAAO1B,GAAM2B,KAAM9B,OAKpB+B,IAAK,SAAUC,GACd,MAAc,OAAPA,EAGE,EAANA,EAAUhC,KAAMgC,EAAMhC,KAAK4B,QAAW5B,KAAMgC,GAG9C7B,EAAM2B,KAAM9B,OAKdiC,UAAW,SAAUC,GAGpB,GAAIC,GAAMtB,EAAOuB,MAAOpC,KAAK2B,cAAeO,EAO5C,OAJAC,GAAIE,WAAarC,KACjBmC,EAAIpB,QAAUf,KAAKe,QAGZoB,GAMRG,KAAM,SAAUC,EAAUC,GACzB,MAAO3B,GAAOyB,KAAMtC,KAAMuC,EAAUC,IAGrCC,IAAK,SAAUF,GACd,MAAOvC,MAAKiC,UAAWpB,EAAO4B,IAAIzC,KAAM,SAAU0C,EAAMC,GACvD,MAAOJ,GAAST,KAAMY,EAAMC,EAAGD,OAIjCvC,MAAO,WACN,MAAOH,MAAKiC,UAAW9B,EAAMyC,MAAO5C,KAAM6C,aAG3CC,MAAO,WACN,MAAO9C,MAAK+C,GAAI,IAGjBC,KAAM,WACL,MAAOhD,MAAK+C,GAAI,KAGjBA,GAAI,SAAUJ,GACb,GAAIM,GAAMjD,KAAK4B,OACdsB,GAAKP,GAAU,EAAJA,EAAQM,EAAM,EAC1B,OAAOjD,MAAKiC,UAAWiB,GAAK,GAASD,EAAJC,GAAYlD,KAAKkD,SAGnDC,IAAK,WACJ,MAAOnD,MAAKqC,YAAcrC,KAAK2B,YAAY,OAK5CtB,KAAMA,EACN+C,KAAMlD,EAAIkD,KACVC,OAAQnD,EAAImD,QAGbxC,EAAOyC,OAASzC,EAAOG,GAAGsC,OAAS,WAClC,GAAIC,GAASC,EAAMC,EAAKC,EAAMC,EAAaC,EAC1CC,EAAShB,UAAU,OACnBF,EAAI,EACJf,EAASiB,UAAUjB,OACnBkC,GAAO,CAsBR,KAnBuB,iBAAXD,KACXC,EAAOD,EAGPA,EAAShB,UAAWF,OACpBA,KAIsB,gBAAXkB,IAAwBhD,EAAOkD,WAAWF,KACrDA,MAIIlB,IAAMf,IACViC,EAAS7D,KACT2C,KAGWf,EAAJe,EAAYA,IAEnB,GAAmC,OAA7BY,EAAUV,UAAWF,IAE1B,IAAMa,IAAQD,GACbE,EAAMI,EAAQL,GACdE,EAAOH,EAASC,GAGXK,IAAWH,IAKXI,GAAQJ,IAAU7C,EAAOmD,cAAcN,KAAUC,EAAc9C,EAAOoD,QAAQP,MAC7EC,GACJA,GAAc,EACdC,EAAQH,GAAO5C,EAAOoD,QAAQR,GAAOA,MAGrCG,EAAQH,GAAO5C,EAAOmD,cAAcP,GAAOA,KAI5CI,EAAQL,GAAS3C,EAAOyC,OAAQQ,EAAMF,EAAOF,IAGzBQ,SAATR,IACXG,EAAQL,GAASE,GAOrB,OAAOG,IAGRhD,EAAOyC,QAENa,QAAS,UAAavD,EAAUwD,KAAKC,UAAWC,QAAS,MAAO,IAGhEC,SAAS,EAETC,MAAO,SAAUC,GAChB,KAAM,IAAI3E,OAAO2E,IAGlBC,KAAM,aAKNX,WAAY,SAAUY,GACrB,MAA4B,aAArB9D,EAAO+D,KAAKD,IAGpBV,QAASY,MAAMZ,QAEfa,SAAU,SAAUH,GACnB,MAAc,OAAPA,GAAeA,IAAQA,EAAI5E,QAGnCgF,UAAW,SAAUJ,GAIpB,OAAQ9D,EAAOoD,QAASU,IAASA,EAAMK,WAAYL,IAAS,GAG7DX,cAAe,SAAUW,GAKxB,MAA4B,WAAvB9D,EAAO+D,KAAMD,IAAsBA,EAAIM,UAAYpE,EAAOiE,SAAUH,IACjE,EAGHA,EAAIhD,cACNlB,EAAOqB,KAAM6C,EAAIhD,YAAYF,UAAW,kBACnC,GAKD,GAGRyD,cAAe,SAAUP,GACxB,GAAInB,EACJ,KAAMA,IAAQmB,GACb,OAAO,CAER,QAAO,GAGRC,KAAM,SAAUD,GACf,MAAY,OAAPA,EACGA,EAAM,GAGQ,gBAARA,IAAmC,kBAARA,GACxCpE,EAAYC,EAASsB,KAAK6C,KAAU,eAC7BA,IAITQ,WAAY,SAAUC,GACrB,GAAIC,GACHC,EAAWC,IAEZH,GAAOvE,EAAO2E,KAAMJ,GAEfA,IAIgC,IAA/BA,EAAK9E,QAAQ,eACjB+E,EAASzF,EAAS6F,cAAc,UAChCJ,EAAOK,KAAON,EACdxF,EAAS+F,KAAKC,YAAaP,GAASQ,WAAWC,YAAaT,IAI5DC,EAAUF,KAObW,UAAW,SAAUC,GACpB,MAAOA,GAAO1B,QAASnD,EAAW,OAAQmD,QAASlD,EAAYC,IAGhE4E,SAAU,SAAUvD,EAAMc,GACzB,MAAOd,GAAKuD,UAAYvD,EAAKuD,SAASC,gBAAkB1C,EAAK0C,eAI9D5D,KAAM,SAAUqC,EAAKpC,EAAUC,GAC9B,GAAI2D,GACHxD,EAAI,EACJf,EAAS+C,EAAI/C,OACbqC,EAAUmC,EAAazB,EAExB,IAAKnC,GACJ,GAAKyB,GACJ,KAAYrC,EAAJe,EAAYA,IAGnB,GAFAwD,EAAQ5D,EAASK,MAAO+B,EAAKhC,GAAKH,GAE7B2D,KAAU,EACd,UAIF,KAAMxD,IAAKgC,GAGV,GAFAwB,EAAQ5D,EAASK,MAAO+B,EAAKhC,GAAKH,GAE7B2D,KAAU,EACd,UAOH,IAAKlC,GACJ,KAAYrC,EAAJe,EAAYA,IAGnB,GAFAwD,EAAQ5D,EAAST,KAAM6C,EAAKhC,GAAKA,EAAGgC,EAAKhC,IAEpCwD,KAAU,EACd,UAIF,KAAMxD,IAAKgC,GAGV,GAFAwB,EAAQ5D,EAAST,KAAM6C,EAAKhC,GAAKA,EAAGgC,EAAKhC,IAEpCwD,KAAU,EACd,KAMJ,OAAOxB,IAIRa,KAAM,SAAUE,GACf,MAAe,OAARA,EACN,IACEA,EAAO,IAAKpB,QAASpD,EAAO,KAIhCmF,UAAW,SAAUnG,EAAKoG,GACzB,GAAInE,GAAMmE,KAaV,OAXY,OAAPpG,IACCkG,EAAaG,OAAOrG,IACxBW,EAAOuB,MAAOD,EACE,gBAARjC,IACLA,GAAQA,GAGXG,EAAKyB,KAAMK,EAAKjC,IAIXiC,GAGRqE,QAAS,SAAU9D,EAAMxC,EAAKyC,GAC7B,MAAc,OAAPzC,EAAc,GAAKI,EAAQwB,KAAM5B,EAAKwC,EAAMC,IAGpDP,MAAO,SAAUU,EAAO2D,GAKvB,IAJA,GAAIxD,IAAOwD,EAAO7E,OACjBsB,EAAI,EACJP,EAAIG,EAAMlB,OAECqB,EAAJC,EAASA,IAChBJ,EAAOH,KAAQ8D,EAAQvD,EAKxB,OAFAJ,GAAMlB,OAASe,EAERG,GAGR4D,KAAM,SAAUxE,EAAOK,EAAUoE,GAShC,IARA,GAAIC,GACHC,KACAlE,EAAI,EACJf,EAASM,EAAMN,OACfkF,GAAkBH,EAIP/E,EAAJe,EAAYA,IACnBiE,GAAmBrE,EAAUL,EAAOS,GAAKA,GACpCiE,IAAoBE,GACxBD,EAAQxG,KAAM6B,EAAOS,GAIvB,OAAOkE,IAIRpE,IAAK,SAAUP,EAAOK,EAAUwE,GAC/B,GAAIZ,GACHxD,EAAI,EACJf,EAASM,EAAMN,OACfqC,EAAUmC,EAAalE,GACvBC,IAGD,IAAK8B,EACJ,KAAYrC,EAAJe,EAAYA,IACnBwD,EAAQ5D,EAAUL,EAAOS,GAAKA,EAAGoE,GAEnB,MAATZ,GACJhE,EAAI9B,KAAM8F,OAMZ,KAAMxD,IAAKT,GACViE,EAAQ5D,EAAUL,EAAOS,GAAKA,EAAGoE,GAEnB,MAATZ,GACJhE,EAAI9B,KAAM8F,EAMb,OAAO/F,GAAOwC,SAAWT,IAI1B6E,KAAM,EAINC,MAAO,SAAUjG,EAAID,GACpB,GAAImG,GAAK1E,EAAMyE,CAUf,OARwB,gBAAZlG,KACXmG,EAAMlG,EAAID,GACVA,EAAUC,EACVA,EAAKkG,GAKArG,EAAOkD,WAAY/C,IAKzBwB,EAAOrC,EAAM2B,KAAMe,UAAW,GAC9BoE,EAAQ,WACP,MAAOjG,GAAG4B,MAAO7B,GAAWf,KAAMwC,EAAKpC,OAAQD,EAAM2B,KAAMe,cAI5DoE,EAAMD,KAAOhG,EAAGgG,KAAOhG,EAAGgG,MAAQnG,EAAOmG,OAElCC,GAZC/C,QAeTiD,IAAKC,KAAKD,IAIVxG,QAASA,IAIVE,EAAOyB,KAAK,gEAAgE+E,MAAM,KAAM,SAAS1E,EAAGa,GACnGjD,EAAY,WAAaiD,EAAO,KAAQA,EAAK0C,eAG9C,SAASE,GAAazB,GACrB,GAAI/C,GAAS+C,EAAI/C,OAChBgD,EAAO/D,EAAO+D,KAAMD,EAErB,OAAc,aAATC,GAAuB/D,EAAOiE,SAAUH,IACrC,EAGc,IAAjBA,EAAIM,UAAkBrD,GACnB,EAGQ,UAATgD,GAA+B,IAAXhD,GACR,gBAAXA,IAAuBA,EAAS,GAAOA,EAAS,IAAO+C,GAEhE,GAAI2C,GAWJ,SAAWvH,GAEX,GAAI4C,GACHhC,EACA4G,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EACApI,EACAqI,EACAC,EACAC,EACAC,EACAvB,EACAwB,EAGAlE,EAAU,UAAY,GAAKiD,MAC3BkB,EAAevI,EAAOH,SACtB2I,EAAU,EACVC,EAAO,EACPC,EAAaC,KACbC,EAAaD,KACbE,EAAgBF,KAChBG,EAAY,SAAUC,EAAGC,GAIxB,MAHKD,KAAMC,IACVhB,GAAe,GAET,GAIRiB,EAAe,YACfC,EAAe,GAAK,GAGpBxI,KAAcC,eACdR,KACAgJ,EAAMhJ,EAAIgJ,IACVC,EAAcjJ,EAAIG,KAClBA,EAAOH,EAAIG,KACXF,EAAQD,EAAIC,MAEZG,EAAUJ,EAAII,SAAW,SAAUoC,GAGlC,IAFA,GAAIC,GAAI,EACPM,EAAMjD,KAAK4B,OACAqB,EAAJN,EAASA,IAChB,GAAK3C,KAAK2C,KAAOD,EAChB,MAAOC,EAGT,OAAO,IAGRyG,EAAW,6HAKXC,EAAa,sBAEbC,EAAoB,mCAKpBC,EAAaD,EAAkBhF,QAAS,IAAK,MAG7CkF,EAAa,MAAQH,EAAa,KAAOC,EAAoB,OAASD,EAErE,gBAAkBA,EAElB,2DAA6DE,EAAa,OAASF,EACnF,OAEDI,EAAU,KAAOH,EAAoB,wFAKPE,EAAa,eAM3CtI,EAAQ,GAAIwI,QAAQ,IAAML,EAAa,8BAAgCA,EAAa,KAAM,KAE1FM,EAAS,GAAID,QAAQ,IAAML,EAAa,KAAOA,EAAa,KAC5DO,EAAe,GAAIF,QAAQ,IAAML,EAAa,WAAaA,EAAa,IAAMA,EAAa,KAE3FQ,EAAmB,GAAIH,QAAQ,IAAML,EAAa,iBAAmBA,EAAa,OAAQ,KAE1FS,EAAU,GAAIJ,QAAQD,GACtBM,EAAc,GAAIL,QAAQ,IAAMH,EAAa,KAE7CS,GACCC,GAAM,GAAIP,QAAQ,MAAQJ,EAAoB,KAC9CY,MAAS,GAAIR,QAAQ,QAAUJ,EAAoB,KACnDa,IAAO,GAAIT,QAAQ,KAAOJ,EAAkBhF,QAAS,IAAK,MAAS,KACnE8F,KAAQ,GAAIV,QAAQ,IAAMF,GAC1Ba,OAAU,GAAIX,QAAQ,IAAMD,GAC5Ba,MAAS,GAAIZ,QAAQ,yDAA2DL,EAC/E,+BAAiCA,EAAa,cAAgBA,EAC9D,aAAeA,EAAa,SAAU,KACvCkB,KAAQ,GAAIb,QAAQ,OAASN,EAAW,KAAM,KAG9CoB,aAAgB,GAAId,QAAQ,IAAML,EAAa,mDAC9CA,EAAa,mBAAqBA,EAAa,mBAAoB,MAGrEoB,EAAU,sCACVC,EAAU,SAEVC,EAAU,yBAGVC,EAAa,mCAEbC,GAAW,OACXC,GAAU,QAGVC,GAAY,GAAIrB,QAAQ,qBAAuBL,EAAa,MAAQA,EAAa,OAAQ,MACzF2B,GAAY,SAAUC,EAAGC,EAASC,GACjC,GAAIC,GAAO,KAAOF,EAAU,KAI5B,OAAOE,KAASA,GAAQD,EACvBD,EACO,EAAPE,EAECC,OAAOC,aAAcF,EAAO,OAE5BC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,OAI7D,KACC/K,EAAKuC,MACH1C,EAAMC,EAAM2B,KAAMwG,EAAaiD,YAChCjD,EAAaiD,YAIdrL,EAAKoI,EAAaiD,WAAW3J,QAASqD,SACrC,MAAQuG,IACTnL,GAASuC,MAAO1C,EAAI0B,OAGnB,SAAUiC,EAAQ4H,GACjBtC,EAAYvG,MAAOiB,EAAQ1D,EAAM2B,KAAK2J,KAKvC,SAAU5H,EAAQ4H,GACjB,GAAIvI,GAAIW,EAAOjC,OACde,EAAI,CAEL,OAASkB,EAAOX,KAAOuI,EAAI9I,MAC3BkB,EAAOjC,OAASsB,EAAI,IAKvB,QAASoE,IAAQxG,EAAUC,EAASuF,EAASoF,GAC5C,GAAIC,GAAOjJ,EAAMkJ,EAAG3G,EAEnBtC,EAAGkJ,EAAQC,EAAKC,EAAKC,EAAYC,CASlC,KAPOlL,EAAUA,EAAQmL,eAAiBnL,EAAUuH,KAAmB1I,GACtEoI,EAAajH,GAGdA,EAAUA,GAAWnB,EACrB0G,EAAUA,OAEJxF,GAAgC,gBAAbA,GACxB,MAAOwF,EAGR,IAAuC,KAAjCrB,EAAWlE,EAAQkE,WAAgC,IAAbA,EAC3C,QAGD,IAAKiD,IAAmBwD,EAAO,CAG9B,GAAMC,EAAQf,EAAWuB,KAAMrL,GAE9B,GAAM8K,EAAID,EAAM,IACf,GAAkB,IAAb1G,EAAiB,CAIrB,GAHAvC,EAAO3B,EAAQqL,eAAgBR,IAG1BlJ,IAAQA,EAAKmD,WAQjB,MAAOS,EALP,IAAK5D,EAAK2J,KAAOT,EAEhB,MADAtF,GAAQjG,KAAMqC,GACP4D,MAOT,IAAKvF,EAAQmL,gBAAkBxJ,EAAO3B,EAAQmL,cAAcE,eAAgBR,KAC3EvD,EAAUtH,EAAS2B,IAAUA,EAAK2J,KAAOT,EAEzC,MADAtF,GAAQjG,KAAMqC,GACP4D,MAKH,CAAA,GAAKqF,EAAM,GAEjB,MADAtL,GAAKuC,MAAO0D,EAASvF,EAAQuL,qBAAsBxL,IAC5CwF,CAGD,KAAMsF,EAAID,EAAM,KAAOhL,EAAQ4L,wBAA0BxL,EAAQwL,uBAEvE,MADAlM,GAAKuC,MAAO0D,EAASvF,EAAQwL,uBAAwBX,IAC9CtF,EAKT,GAAK3F,EAAQ6L,OAASrE,IAAcA,EAAUsE,KAAM3L,IAAc,CASjE,GARAiL,EAAMD,EAAM3H,EACZ6H,EAAajL,EACbkL,EAA2B,IAAbhH,GAAkBnE,EAMd,IAAbmE,GAAqD,WAAnClE,EAAQkF,SAASC,cAA6B,CACpE2F,EAASnE,EAAU5G,IAEbgL,EAAM/K,EAAQ2L,aAAa,OAChCX,EAAMD,EAAIxH,QAASwG,GAAS,QAE5B/J,EAAQ4L,aAAc,KAAMZ,GAE7BA,EAAM,QAAUA,EAAM,MAEtBpJ,EAAIkJ,EAAOjK,MACX,OAAQe,IACPkJ,EAAOlJ,GAAKoJ,EAAMa,GAAYf,EAAOlJ,GAEtCqJ,GAAanB,GAAS4B,KAAM3L,IAAc+L,GAAa9L,EAAQ8E,aAAgB9E,EAC/EkL,EAAcJ,EAAOiB,KAAK,KAG3B,GAAKb,EACJ,IAIC,MAHA5L,GAAKuC,MAAO0D,EACX0F,EAAWe,iBAAkBd,IAEvB3F,EACN,MAAM0G,IACN,QACKlB,GACL/K,EAAQkM,gBAAgB,QAQ7B,MAAOrF,GAAQ9G,EAASwD,QAASpD,EAAO,MAAQH,EAASuF,EAASoF,GASnE,QAAShD,MACR,GAAIwE,KAEJ,SAASC,GAAOC,EAAKjH,GAMpB,MAJK+G,GAAK7M,KAAM+M,EAAM,KAAQ7F,EAAK8F,mBAE3BF,GAAOD,EAAKI,SAEZH,EAAOC,EAAM,KAAQjH,EAE9B,MAAOgH,GAOR,QAASI,IAAcvM,GAEtB,MADAA,GAAImD,IAAY,EACTnD,EAOR,QAASwM,IAAQxM,GAChB,GAAIyM,GAAM7N,EAAS6F,cAAc,MAEjC,KACC,QAASzE,EAAIyM,GACZ,MAAOjC,GACR,OAAO,EACN,QAEIiC,EAAI5H,YACR4H,EAAI5H,WAAWC,YAAa2H,GAG7BA,EAAM,MASR,QAASC,IAAWC,EAAOC,GAC1B,GAAI1N,GAAMyN,EAAMtG,MAAM,KACrB1E,EAAIgL,EAAM/L,MAEX,OAAQe,IACP4E,EAAKsG,WAAY3N,EAAIyC,IAAOiL,EAU9B,QAASE,IAAchF,EAAGC,GACzB,GAAIgF,GAAMhF,GAAKD,EACdkF,EAAOD,GAAsB,IAAfjF,EAAE7D,UAAiC,IAAf8D,EAAE9D,YAChC8D,EAAEkF,aAAehF,KACjBH,EAAEmF,aAAehF,EAGtB,IAAK+E,EACJ,MAAOA,EAIR,IAAKD,EACJ,MAASA,EAAMA,EAAIG,YAClB,GAAKH,IAAQhF,EACZ,MAAO,EAKV,OAAOD,GAAI,EAAI,GAOhB,QAASqF,IAAmBvJ,GAC3B,MAAO,UAAUlC,GAChB,GAAIc,GAAOd,EAAKuD,SAASC,aACzB,OAAgB,UAAT1C,GAAoBd,EAAKkC,OAASA,GAQ3C,QAASwJ,IAAoBxJ,GAC5B,MAAO,UAAUlC,GAChB,GAAIc,GAAOd,EAAKuD,SAASC,aACzB,QAAiB,UAAT1C,GAA6B,WAATA,IAAsBd,EAAKkC,OAASA,GAQlE,QAASyJ,IAAwBrN,GAChC,MAAOuM,IAAa,SAAUe,GAE7B,MADAA,IAAYA,EACLf,GAAa,SAAU7B,EAAM7E,GACnC,GAAI3D,GACHqL,EAAevN,KAAQ0K,EAAK9J,OAAQ0M,GACpC3L,EAAI4L,EAAa3M,MAGlB,OAAQe,IACF+I,EAAOxI,EAAIqL,EAAa5L,MAC5B+I,EAAKxI,KAAO2D,EAAQ3D,GAAKwI,EAAKxI,SAYnC,QAAS2J,IAAa9L,GACrB,MAAOA,UAAkBA,GAAQuL,uBAAyBtD,GAAgBjI,EAI3EJ,EAAU2G,GAAO3G,WAOjB8G,EAAQH,GAAOG,MAAQ,SAAU/E,GAGhC,GAAI8L,GAAkB9L,IAASA,EAAKwJ,eAAiBxJ,GAAM8L,eAC3D,OAAOA,GAA+C,SAA7BA,EAAgBvI,UAAsB,GAQhE+B,EAAcV,GAAOU,YAAc,SAAUyG,GAC5C,GAAIC,GACHC,EAAMF,EAAOA,EAAKvC,eAAiBuC,EAAOnG,EAC1CsG,EAASD,EAAIE,WAGd,OAAKF,KAAQ/O,GAA6B,IAAjB+O,EAAI1J,UAAmB0J,EAAIH,iBAKpD5O,EAAW+O,EACX1G,EAAU0G,EAAIH,gBAGdtG,GAAkBT,EAAOkH,GAMpBC,GAAUA,IAAWA,EAAOE,MAE3BF,EAAOG,iBACXH,EAAOG,iBAAkB,SAAU,WAClC/G,MACE,GACQ4G,EAAOI,aAClBJ,EAAOI,YAAa,WAAY,WAC/BhH,OAUHrH,EAAQ6I,WAAagE,GAAO,SAAUC,GAErC,MADAA,GAAIwB,UAAY,KACRxB,EAAIf,aAAa,eAO1B/L,EAAQ2L,qBAAuBkB,GAAO,SAAUC,GAE/C,MADAA,GAAI7H,YAAa+I,EAAIO,cAAc,MAC3BzB,EAAInB,qBAAqB,KAAK1K,SAIvCjB,EAAQ4L,uBAAyB5B,EAAQ8B,KAAMkC,EAAIpC,yBAA4BiB,GAAO,SAAUC,GAQ/F,MAPAA,GAAI0B,UAAY,+CAIhB1B,EAAI2B,WAAWH,UAAY,IAGuB,IAA3CxB,EAAIlB,uBAAuB,KAAK3K,SAOxCjB,EAAQ0O,QAAU7B,GAAO,SAAUC,GAElC,MADAxF,GAAQrC,YAAa6H,GAAMpB,GAAKlI,GACxBwK,EAAIW,oBAAsBX,EAAIW,kBAAmBnL,GAAUvC,SAI/DjB,EAAQ0O,SACZ9H,EAAKgI,KAAS,GAAI,SAAUlD,EAAItL,GAC/B,SAAYA,GAAQqL,iBAAmBpD,GAAgBd,EAAiB,CACvE,GAAI0D,GAAI7K,EAAQqL,eAAgBC,EAGhC,OAAOT,IAAKA,EAAE/F,YAAe+F,QAG/BrE,EAAKiI,OAAW,GAAI,SAAUnD,GAC7B,GAAIoD,GAASpD,EAAG/H,QAASyG,GAAWC,GACpC,OAAO,UAAUtI,GAChB,MAAOA,GAAKgK,aAAa,QAAU+C,YAM9BlI,GAAKgI,KAAS,GAErBhI,EAAKiI,OAAW,GAAK,SAAUnD,GAC9B,GAAIoD,GAASpD,EAAG/H,QAASyG,GAAWC,GACpC,OAAO,UAAUtI,GAChB,GAAI+L,SAAc/L,GAAKgN,mBAAqB1G,GAAgBtG,EAAKgN,iBAAiB,KAClF,OAAOjB,IAAQA,EAAKtI,QAAUsJ,KAMjClI,EAAKgI,KAAU,IAAI5O,EAAQ2L,qBAC1B,SAAUqD,EAAK5O,GACd,aAAYA,GAAQuL,uBAAyBtD,EACrCjI,EAAQuL,qBAAsBqD,GADtC,QAID,SAAUA,EAAK5O,GACd,GAAI2B,GACHwE,KACAvE,EAAI,EACJ2D,EAAUvF,EAAQuL,qBAAsBqD,EAGzC,IAAa,MAARA,EAAc,CAClB,MAASjN,EAAO4D,EAAQ3D,KACA,IAAlBD,EAAKuC,UACTiC,EAAI7G,KAAMqC,EAIZ,OAAOwE,GAER,MAAOZ,IAITiB,EAAKgI,KAAY,MAAI5O,EAAQ4L,wBAA0B,SAAU0C,EAAWlO,GAC3E,aAAYA,GAAQwL,yBAA2BvD,GAAgBd,EACvDnH,EAAQwL,uBAAwB0C,GADxC,QAWD7G,KAOAD,MAEMxH,EAAQ6L,IAAM7B,EAAQ8B,KAAMkC,EAAI5B,qBAGrCS,GAAO,SAAUC,GAMhBA,EAAI0B,UAAY,gEAMX1B,EAAIV,iBAAiB,qBAAqBnL,QAC9CuG,EAAU9H,KAAM,SAAWgJ,EAAa,gBAKnCoE,EAAIV,iBAAiB,cAAcnL,QACxCuG,EAAU9H,KAAM,MAAQgJ,EAAa,aAAeD,EAAW,KAM1DqE,EAAIV,iBAAiB,YAAYnL,QACtCuG,EAAU9H,KAAK,cAIjBmN,GAAO,SAAUC,GAGhB,GAAImC,GAAQjB,EAAIlJ,cAAc,QAC9BmK,GAAMjD,aAAc,OAAQ,UAC5Bc,EAAI7H,YAAagK,GAAQjD,aAAc,OAAQ,KAI1Cc,EAAIV,iBAAiB,YAAYnL,QACrCuG,EAAU9H,KAAM,OAASgJ,EAAa,eAKjCoE,EAAIV,iBAAiB,YAAYnL,QACtCuG,EAAU9H,KAAM,WAAY,aAI7BoN,EAAIV,iBAAiB,QACrB5E,EAAU9H,KAAK,YAIXM,EAAQkP,gBAAkBlF,EAAQ8B,KAAO5F,EAAUoB,EAAQpB,SAChEoB,EAAQ6H,uBACR7H,EAAQ8H,oBACR9H,EAAQ+H,kBACR/H,EAAQgI,qBAERzC,GAAO,SAAUC,GAGhB9M,EAAQuP,kBAAoBrJ,EAAQ/E,KAAM2L,EAAK,OAI/C5G,EAAQ/E,KAAM2L,EAAK,aACnBrF,EAAc/H,KAAM,KAAMoJ,KAI5BtB,EAAYA,EAAUvG,QAAU,GAAI8H,QAAQvB,EAAU2E,KAAK,MAC3D1E,EAAgBA,EAAcxG,QAAU,GAAI8H,QAAQtB,EAAc0E,KAAK,MAIvE4B,EAAa/D,EAAQ8B,KAAMxE,EAAQkI,yBAKnC9H,EAAWqG,GAAc/D,EAAQ8B,KAAMxE,EAAQI,UAC9C,SAAUS,EAAGC,GACZ,GAAIqH,GAAuB,IAAftH,EAAE7D,SAAiB6D,EAAE0F,gBAAkB1F,EAClDuH,EAAMtH,GAAKA,EAAElD,UACd,OAAOiD,KAAMuH,MAAWA,GAAwB,IAAjBA,EAAIpL,YAClCmL,EAAM/H,SACL+H,EAAM/H,SAAUgI,GAChBvH,EAAEqH,yBAA8D,GAAnCrH,EAAEqH,wBAAyBE,MAG3D,SAAUvH,EAAGC,GACZ,GAAKA,EACJ,MAASA,EAAIA,EAAElD,WACd,GAAKkD,IAAMD,EACV,OAAO,CAIV,QAAO,GAOTD,EAAY6F,EACZ,SAAU5F,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,MADAhB,IAAe,EACR,CAIR,IAAIuI,IAAWxH,EAAEqH,yBAA2BpH,EAAEoH,uBAC9C,OAAKG,GACGA,GAIRA,GAAYxH,EAAEoD,eAAiBpD,MAAUC,EAAEmD,eAAiBnD,GAC3DD,EAAEqH,wBAAyBpH,GAG3B,EAGc,EAAVuH,IACF3P,EAAQ4P,cAAgBxH,EAAEoH,wBAAyBrH,KAAQwH,EAGxDxH,IAAM6F,GAAO7F,EAAEoD,gBAAkB5D,GAAgBD,EAASC,EAAcQ,GACrE,GAEHC,IAAM4F,GAAO5F,EAAEmD,gBAAkB5D,GAAgBD,EAASC,EAAcS,GACrE,EAIDjB,EACJxH,EAAQwB,KAAMgG,EAAWgB,GAAMxI,EAAQwB,KAAMgG,EAAWiB,GAC1D,EAGe,EAAVuH,EAAc,GAAK,IAE3B,SAAUxH,EAAGC,GAEZ,GAAKD,IAAMC,EAEV,MADAhB,IAAe,EACR,CAGR,IAAIgG,GACHpL,EAAI,EACJ6N,EAAM1H,EAAEjD,WACRwK,EAAMtH,EAAElD,WACR4K,GAAO3H,GACP4H,GAAO3H,EAGR,KAAMyH,IAAQH,EACb,MAAOvH,KAAM6F,EAAM,GAClB5F,IAAM4F,EAAM,EACZ6B,EAAM,GACNH,EAAM,EACNvI,EACExH,EAAQwB,KAAMgG,EAAWgB,GAAMxI,EAAQwB,KAAMgG,EAAWiB,GAC1D,CAGK,IAAKyH,IAAQH,EACnB,MAAOvC,IAAchF,EAAGC,EAIzBgF,GAAMjF,CACN,OAASiF,EAAMA,EAAIlI,WAClB4K,EAAGE,QAAS5C,EAEbA,GAAMhF,CACN,OAASgF,EAAMA,EAAIlI,WAClB6K,EAAGC,QAAS5C,EAIb,OAAQ0C,EAAG9N,KAAO+N,EAAG/N,GACpBA,GAGD,OAAOA,GAENmL,GAAc2C,EAAG9N,GAAI+N,EAAG/N,IAGxB8N,EAAG9N,KAAO2F,EAAe,GACzBoI,EAAG/N,KAAO2F,EAAe,EACzB,GAGKqG,GAhWC/O,GAmWT0H,GAAOT,QAAU,SAAU+J,EAAMC,GAChC,MAAOvJ,IAAQsJ,EAAM,KAAM,KAAMC,IAGlCvJ,GAAOuI,gBAAkB,SAAUnN,EAAMkO,GASxC,IAPOlO,EAAKwJ,eAAiBxJ,KAAW9C,GACvCoI,EAAatF,GAIdkO,EAAOA,EAAKtM,QAASuF,EAAkB,aAElClJ,EAAQkP,kBAAmB3H,GAC5BE,GAAkBA,EAAcqE,KAAMmE,IACtCzI,GAAkBA,EAAUsE,KAAMmE,IAErC,IACC,GAAIzO,GAAM0E,EAAQ/E,KAAMY,EAAMkO,EAG9B,IAAKzO,GAAOxB,EAAQuP,mBAGlBxN,EAAK9C,UAAuC,KAA3B8C,EAAK9C,SAASqF,SAChC,MAAO9C,GAEP,MAAMqJ,IAGT,MAAOlE,IAAQsJ,EAAMhR,EAAU,MAAQ8C,IAASd,OAAS,GAG1D0F,GAAOe,SAAW,SAAUtH,EAAS2B,GAKpC,OAHO3B,EAAQmL,eAAiBnL,KAAcnB,GAC7CoI,EAAajH,GAEPsH,EAAUtH,EAAS2B,IAG3B4E,GAAOwJ,KAAO,SAAUpO,EAAMc,IAEtBd,EAAKwJ,eAAiBxJ,KAAW9C,GACvCoI,EAAatF,EAGd,IAAI1B,GAAKuG,EAAKsG,WAAYrK,EAAK0C,eAE9B6K,EAAM/P,GAAMP,EAAOqB,KAAMyF,EAAKsG,WAAYrK,EAAK0C,eAC9ClF,EAAI0B,EAAMc,GAAO0E,GACjBhE,MAEF,OAAeA,UAAR6M,EACNA,EACApQ,EAAQ6I,aAAetB,EACtBxF,EAAKgK,aAAclJ,IAClBuN,EAAMrO,EAAKgN,iBAAiBlM,KAAUuN,EAAIC,UAC1CD,EAAI5K,MACJ,MAGJmB,GAAO9C,MAAQ,SAAUC,GACxB,KAAM,IAAI3E,OAAO,0CAA4C2E,IAO9D6C,GAAO2J,WAAa,SAAU3K,GAC7B,GAAI5D,GACHwO,KACAhO,EAAI,EACJP,EAAI,CAOL,IAJAoF,GAAgBpH,EAAQwQ,iBACxBrJ,GAAanH,EAAQyQ,YAAc9K,EAAQnG,MAAO,GAClDmG,EAAQlD,KAAMyF,GAETd,EAAe,CACnB,MAASrF,EAAO4D,EAAQ3D,KAClBD,IAAS4D,EAAS3D,KACtBO,EAAIgO,EAAW7Q,KAAMsC,GAGvB,OAAQO,IACPoD,EAAQjD,OAAQ6N,EAAYhO,GAAK,GAQnC,MAFA4E,GAAY,KAELxB,GAORkB,EAAUF,GAAOE,QAAU,SAAU9E,GACpC,GAAI+L,GACHtM,EAAM,GACNQ,EAAI,EACJsC,EAAWvC,EAAKuC,QAEjB,IAAMA,GAMC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAGjE,GAAiC,gBAArBvC,GAAK2O,YAChB,MAAO3O,GAAK2O,WAGZ,KAAM3O,EAAOA,EAAK0M,WAAY1M,EAAMA,EAAOA,EAAKwL,YAC/C/L,GAAOqF,EAAS9E,OAGZ,IAAkB,IAAbuC,GAA+B,IAAbA,EAC7B,MAAOvC,GAAK4O,cAhBZ,OAAS7C,EAAO/L,EAAKC,KAEpBR,GAAOqF,EAASiH,EAkBlB,OAAOtM,IAGRoF,EAAOD,GAAOiK,WAGblE,YAAa,GAEbmE,aAAcjE,GAEd5B,MAAO3B,EAEP6D,cAEA0B,QAEAkC,UACCC,KAAOC,IAAK,aAAc7O,OAAO,GACjC8O,KAAOD,IAAK,cACZE,KAAOF,IAAK,kBAAmB7O,OAAO,GACtCgP,KAAOH,IAAK,oBAGbI,WACC3H,KAAQ,SAAUuB,GAUjB,MATAA,GAAM,GAAKA,EAAM,GAAGrH,QAASyG,GAAWC,IAGxCW,EAAM,IAAOA,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAM,IAAKrH,QAASyG,GAAWC,IAExD,OAAbW,EAAM,KACVA,EAAM,GAAK,IAAMA,EAAM,GAAK,KAGtBA,EAAMxL,MAAO,EAAG,IAGxBmK,MAAS,SAAUqB,GA6BlB,MAlBAA,GAAM,GAAKA,EAAM,GAAGzF,cAEY,QAA3ByF,EAAM,GAAGxL,MAAO,EAAG,IAEjBwL,EAAM,IACXrE,GAAO9C,MAAOmH,EAAM,IAKrBA,EAAM,KAAQA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAAK,GAAmB,SAAbA,EAAM,IAA8B,QAAbA,EAAM,KACzFA,EAAM,KAAUA,EAAM,GAAKA,EAAM,IAAqB,QAAbA,EAAM,KAGpCA,EAAM,IACjBrE,GAAO9C,MAAOmH,EAAM,IAGdA,GAGRtB,OAAU,SAAUsB,GACnB,GAAIqG,GACHC,GAAYtG,EAAM,IAAMA,EAAM,EAE/B,OAAK3B,GAAiB,MAAEyC,KAAMd,EAAM,IAC5B,MAIHA,EAAM,GACVA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAGxBsG,GAAYnI,EAAQ2C,KAAMwF,KAEpCD,EAAStK,EAAUuK,GAAU,MAE7BD,EAASC,EAAS3R,QAAS,IAAK2R,EAASrQ,OAASoQ,GAAWC,EAASrQ,UAGvE+J,EAAM,GAAKA,EAAM,GAAGxL,MAAO,EAAG6R,GAC9BrG,EAAM,GAAKsG,EAAS9R,MAAO,EAAG6R,IAIxBrG,EAAMxL,MAAO,EAAG,MAIzBqP,QAECrF,IAAO,SAAU+H,GAChB,GAAIjM,GAAWiM,EAAiB5N,QAASyG,GAAWC,IAAY9E,aAChE,OAA4B,MAArBgM,EACN,WAAa,OAAO,GACpB,SAAUxP,GACT,MAAOA,GAAKuD,UAAYvD,EAAKuD,SAASC,gBAAkBD,IAI3DiE,MAAS,SAAU+E,GAClB,GAAIkD,GAAU1J,EAAYwG,EAAY,IAEtC,OAAOkD,KACLA,EAAU,GAAIzI,QAAQ,MAAQL,EAAa,IAAM4F,EAAY,IAAM5F,EAAa,SACjFZ,EAAYwG,EAAW,SAAUvM,GAChC,MAAOyP,GAAQ1F,KAAgC,gBAAnB/J,GAAKuM,WAA0BvM,EAAKuM,iBAAoBvM,GAAKgK,eAAiB1D,GAAgBtG,EAAKgK,aAAa,UAAY,OAI3JtC,KAAQ,SAAU5G,EAAM4O,EAAUC,GACjC,MAAO,UAAU3P,GAChB,GAAI4P,GAAShL,GAAOwJ,KAAMpO,EAAMc,EAEhC,OAAe,OAAV8O,EACgB,OAAbF,EAEFA,GAINE,GAAU,GAEU,MAAbF,EAAmBE,IAAWD,EACvB,OAAbD,EAAoBE,IAAWD,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BC,EAAOhS,QAAS+R,GAChC,OAAbD,EAAoBC,GAASC,EAAOhS,QAAS+R,GAAU,GAC1C,OAAbD,EAAoBC,GAASC,EAAOnS,OAAQkS,EAAMzQ,UAAayQ,EAClD,OAAbD,GAAsB,IAAME,EAAS,KAAMhS,QAAS+R,GAAU,GACjD,OAAbD,EAAoBE,IAAWD,GAASC,EAAOnS,MAAO,EAAGkS,EAAMzQ,OAAS,KAAQyQ,EAAQ,KACxF,IAZO,IAgBV/H,MAAS,SAAU1F,EAAM2N,EAAMjE,EAAUxL,EAAOE,GAC/C,GAAIwP,GAAgC,QAAvB5N,EAAKzE,MAAO,EAAG,GAC3BsS,EAA+B,SAArB7N,EAAKzE,MAAO,IACtBuS,EAAkB,YAATH,CAEV,OAAiB,KAAVzP,GAAwB,IAATE,EAGrB,SAAUN,GACT,QAASA,EAAKmD,YAGf,SAAUnD,EAAM3B,EAAS4R,GACxB,GAAIxF,GAAOyF,EAAYnE,EAAMT,EAAM6E,EAAWC,EAC7CnB,EAAMa,IAAWC,EAAU,cAAgB,kBAC3C7D,EAASlM,EAAKmD,WACdrC,EAAOkP,GAAUhQ,EAAKuD,SAASC,cAC/B6M,GAAYJ,IAAQD,CAErB,IAAK9D,EAAS,CAGb,GAAK4D,EAAS,CACb,MAAQb,EAAM,CACblD,EAAO/L,CACP,OAAS+L,EAAOA,EAAMkD,GACrB,GAAKe,EAASjE,EAAKxI,SAASC,gBAAkB1C,EAAyB,IAAlBiL,EAAKxJ,SACzD,OAAO,CAIT6N,GAAQnB,EAAe,SAAT/M,IAAoBkO,GAAS,cAE5C,OAAO,EAMR,GAHAA,GAAUL,EAAU7D,EAAOQ,WAAaR,EAAOoE,WAG1CP,GAAWM,EAAW,CAE1BH,EAAahE,EAAQzK,KAAcyK,EAAQzK,OAC3CgJ,EAAQyF,EAAYhO,OACpBiO,EAAY1F,EAAM,KAAO5E,GAAW4E,EAAM,GAC1Ca,EAAOb,EAAM,KAAO5E,GAAW4E,EAAM,GACrCsB,EAAOoE,GAAajE,EAAOrD,WAAYsH,EAEvC,OAASpE,IAASoE,GAAapE,GAAQA,EAAMkD,KAG3C3D,EAAO6E,EAAY,IAAMC,EAAM5J,MAGhC,GAAuB,IAAlBuF,EAAKxJ,YAAoB+I,GAAQS,IAAS/L,EAAO,CACrDkQ,EAAYhO,IAAW2D,EAASsK,EAAW7E,EAC3C,YAKI,IAAK+E,IAAa5F,GAASzK,EAAMyB,KAAczB,EAAMyB,QAAkBS,KAAWuI,EAAM,KAAO5E,EACrGyF,EAAOb,EAAM,OAKb,OAASsB,IAASoE,GAAapE,GAAQA,EAAMkD,KAC3C3D,EAAO6E,EAAY,IAAMC,EAAM5J,MAEhC,IAAOwJ,EAASjE,EAAKxI,SAASC,gBAAkB1C,EAAyB,IAAlBiL,EAAKxJ,aAAsB+I,IAE5E+E,KACHtE,EAAMtK,KAAcsK,EAAMtK,QAAkBS,IAAW2D,EAASyF,IAG7DS,IAAS/L,GACb,KAQJ,OADAsL,IAAQhL,EACDgL,IAASlL,GAAWkL,EAAOlL,IAAU,GAAKkL,EAAOlL,GAAS,KAKrEuH,OAAU,SAAU4I,EAAQ3E,GAK3B,GAAI9L,GACHxB,EAAKuG,EAAKkC,QAASwJ,IAAY1L,EAAK2L,WAAYD,EAAO/M,gBACtDoB,GAAO9C,MAAO,uBAAyByO,EAKzC,OAAKjS,GAAImD,GACDnD,EAAIsN,GAIPtN,EAAGY,OAAS,GAChBY,GAASyQ,EAAQA,EAAQ,GAAI3E,GACtB/G,EAAK2L,WAAWxS,eAAgBuS,EAAO/M,eAC7CqH,GAAa,SAAU7B,EAAM7E,GAC5B,GAAIsM,GACHC,EAAUpS,EAAI0K,EAAM4C,GACpB3L,EAAIyQ,EAAQxR,MACb,OAAQe,IACPwQ,EAAM7S,EAAQwB,KAAM4J,EAAM0H,EAAQzQ,IAClC+I,EAAMyH,KAAWtM,EAASsM,GAAQC,EAAQzQ,MAG5C,SAAUD,GACT,MAAO1B,GAAI0B,EAAM,EAAGF,KAIhBxB,IAITyI,SAEC4J,IAAO9F,GAAa,SAAUzM,GAI7B,GAAI8O,MACHtJ,KACAgN,EAAU3L,EAAS7G,EAASwD,QAASpD,EAAO,MAE7C,OAAOoS,GAASnP,GACfoJ,GAAa,SAAU7B,EAAM7E,EAAS9F,EAAS4R,GAC9C,GAAIjQ,GACH6Q,EAAYD,EAAS5H,EAAM,KAAMiH,MACjChQ,EAAI+I,EAAK9J,MAGV,OAAQe,KACDD,EAAO6Q,EAAU5Q,MACtB+I,EAAK/I,KAAOkE,EAAQlE,GAAKD,MAI5B,SAAUA,EAAM3B,EAAS4R,GAGxB,MAFA/C,GAAM,GAAKlN,EACX4Q,EAAS1D,EAAO,KAAM+C,EAAKrM,IACnBA,EAAQ4C,SAInBsK,IAAOjG,GAAa,SAAUzM,GAC7B,MAAO,UAAU4B,GAChB,MAAO4E,IAAQxG,EAAU4B,GAAOd,OAAS,KAI3CyG,SAAYkF,GAAa,SAAU7H,GAClC,MAAO,UAAUhD,GAChB,OAASA,EAAK2O,aAAe3O,EAAK+Q,WAAajM,EAAS9E,IAASpC,QAASoF,GAAS,MAWrFgO,KAAQnG,GAAc,SAAUmG,GAM/B,MAJM3J,GAAY0C,KAAKiH,GAAQ,KAC9BpM,GAAO9C,MAAO,qBAAuBkP,GAEtCA,EAAOA,EAAKpP,QAASyG,GAAWC,IAAY9E,cACrC,SAAUxD,GAChB,GAAIiR,EACJ,GACC,IAAMA,EAAWzL,EAChBxF,EAAKgR,KACLhR,EAAKgK,aAAa,aAAehK,EAAKgK,aAAa,QAGnD,MADAiH,GAAWA,EAASzN,cACbyN,IAAaD,GAA2C,IAAnCC,EAASrT,QAASoT,EAAO,YAE5ChR,EAAOA,EAAKmD,aAAiC,IAAlBnD,EAAKuC,SAC3C,QAAO,KAKTpB,OAAU,SAAUnB,GACnB,GAAIkR,GAAO7T,EAAO8T,UAAY9T,EAAO8T,SAASD,IAC9C,OAAOA,IAAQA,EAAKzT,MAAO,KAAQuC,EAAK2J,IAGzCyH,KAAQ,SAAUpR,GACjB,MAAOA,KAASuF,GAGjB8L,MAAS,SAAUrR,GAClB,MAAOA,KAAS9C,EAASoU,iBAAmBpU,EAASqU,UAAYrU,EAASqU,gBAAkBvR,EAAKkC,MAAQlC,EAAKwR,OAASxR,EAAKyR,WAI7HC,QAAW,SAAU1R,GACpB,MAAOA,GAAK2R,YAAa,GAG1BA,SAAY,SAAU3R,GACrB,MAAOA,GAAK2R,YAAa,GAG1BC,QAAW,SAAU5R,GAGpB,GAAIuD,GAAWvD,EAAKuD,SAASC,aAC7B,OAAqB,UAAbD,KAA0BvD,EAAK4R,SAA0B,WAAbrO,KAA2BvD,EAAK6R,UAGrFA,SAAY,SAAU7R,GAOrB,MAJKA,GAAKmD,YACTnD,EAAKmD,WAAW2O,cAGV9R,EAAK6R,YAAa,GAI1BE,MAAS,SAAU/R,GAKlB,IAAMA,EAAOA,EAAK0M,WAAY1M,EAAMA,EAAOA,EAAKwL,YAC/C,GAAKxL,EAAKuC,SAAW,EACpB,OAAO,CAGT,QAAO,GAGR2J,OAAU,SAAUlM,GACnB,OAAQ6E,EAAKkC,QAAe,MAAG/G,IAIhCgS,OAAU,SAAUhS,GACnB,MAAOgI,GAAQ+B,KAAM/J,EAAKuD,WAG3B2J,MAAS,SAAUlN,GAClB,MAAO+H,GAAQgC,KAAM/J,EAAKuD,WAG3B0O,OAAU,SAAUjS,GACnB,GAAIc,GAAOd,EAAKuD,SAASC,aACzB,OAAgB,UAAT1C,GAAkC,WAAdd,EAAKkC,MAA8B,WAATpB,GAGtDkC,KAAQ,SAAUhD,GACjB,GAAIoO,EACJ,OAAuC,UAAhCpO,EAAKuD,SAASC,eACN,SAAdxD,EAAKkC,OAImC,OAArCkM,EAAOpO,EAAKgK,aAAa,UAA2C,SAAvBoE,EAAK5K,gBAIvDpD,MAASuL,GAAuB,WAC/B,OAAS,KAGVrL,KAAQqL,GAAuB,SAAUE,EAAc3M,GACtD,OAASA,EAAS,KAGnBmB,GAAMsL,GAAuB,SAAUE,EAAc3M,EAAQ0M,GAC5D,OAAoB,EAAXA,EAAeA,EAAW1M,EAAS0M,KAG7CsG,KAAQvG,GAAuB,SAAUE,EAAc3M,GAEtD,IADA,GAAIe,GAAI,EACIf,EAAJe,EAAYA,GAAK,EACxB4L,EAAalO,KAAMsC,EAEpB,OAAO4L,KAGRsG,IAAOxG,GAAuB,SAAUE,EAAc3M,GAErD,IADA,GAAIe,GAAI,EACIf,EAAJe,EAAYA,GAAK,EACxB4L,EAAalO,KAAMsC,EAEpB,OAAO4L,KAGRuG,GAAMzG,GAAuB,SAAUE,EAAc3M,EAAQ0M,GAE5D,IADA,GAAI3L,GAAe,EAAX2L,EAAeA,EAAW1M,EAAS0M,IACjC3L,GAAK,GACd4L,EAAalO,KAAMsC,EAEpB,OAAO4L,KAGRwG,GAAM1G,GAAuB,SAAUE,EAAc3M,EAAQ0M,GAE5D,IADA,GAAI3L,GAAe,EAAX2L,EAAeA,EAAW1M,EAAS0M,IACjC3L,EAAIf,GACb2M,EAAalO,KAAMsC,EAEpB,OAAO4L,OAKVhH,EAAKkC,QAAa,IAAIlC,EAAKkC,QAAY,EAGvC,KAAM9G,KAAOqS,OAAO,EAAMC,UAAU,EAAMC,MAAM,EAAMC,UAAU,EAAMC,OAAO,GAC5E7N,EAAKkC,QAAS9G,GAAMwL,GAAmBxL,EAExC,KAAMA,KAAO0S,QAAQ,EAAMC,OAAO,GACjC/N,EAAKkC,QAAS9G,GAAMyL,GAAoBzL,EAIzC,SAASuQ,OACTA,GAAWzR,UAAY8F,EAAKgO,QAAUhO,EAAKkC,QAC3ClC,EAAK2L,WAAa,GAAIA,IAEtBxL,EAAWJ,GAAOI,SAAW,SAAU5G,EAAU0U,GAChD,GAAIpC,GAASzH,EAAO8J,EAAQ7Q,EAC3B8Q,EAAO7J,EAAQ8J,EACfC,EAASjN,EAAY7H,EAAW,IAEjC,IAAK8U,EACJ,MAAOJ,GAAY,EAAII,EAAOzV,MAAO,EAGtCuV,GAAQ5U,EACR+K,KACA8J,EAAapO,EAAKwK,SAElB,OAAQ2D,EAAQ,GAGTtC,IAAYzH,EAAQhC,EAAOwC,KAAMuJ,OACjC/J,IAEJ+J,EAAQA,EAAMvV,MAAOwL,EAAM,GAAG/J,SAAY8T,GAE3C7J,EAAOxL,KAAOoV,OAGfrC,GAAU,GAGJzH,EAAQ/B,EAAauC,KAAMuJ,MAChCtC,EAAUzH,EAAM2B,QAChBmI,EAAOpV,MACN8F,MAAOiN,EAEPxO,KAAM+G,EAAM,GAAGrH,QAASpD,EAAO,OAEhCwU,EAAQA,EAAMvV,MAAOiT,EAAQxR,QAI9B,KAAMgD,IAAQ2C,GAAKiI,SACZ7D,EAAQ3B,EAAWpF,GAAOuH,KAAMuJ,KAAcC,EAAY/Q,MAC9D+G,EAAQgK,EAAY/Q,GAAQ+G,MAC7ByH,EAAUzH,EAAM2B,QAChBmI,EAAOpV,MACN8F,MAAOiN,EACPxO,KAAMA,EACNiC,QAAS8E,IAEV+J,EAAQA,EAAMvV,MAAOiT,EAAQxR,QAI/B,KAAMwR,EACL,MAOF,MAAOoC,GACNE,EAAM9T,OACN8T,EACCpO,GAAO9C,MAAO1D,GAEd6H,EAAY7H,EAAU+K,GAAS1L,MAAO,GAGzC,SAASyM,IAAY6I,GAIpB,IAHA,GAAI9S,GAAI,EACPM,EAAMwS,EAAO7T,OACbd,EAAW,GACAmC,EAAJN,EAASA,IAChB7B,GAAY2U,EAAO9S,GAAGwD,KAEvB,OAAOrF,GAGR,QAAS+U,IAAevC,EAASwC,EAAYC,GAC5C,GAAIpE,GAAMmE,EAAWnE,IACpBqE,EAAmBD,GAAgB,eAARpE,EAC3BsE,EAAWzN,GAEZ,OAAOsN,GAAWhT,MAEjB,SAAUJ,EAAM3B,EAAS4R,GACxB,MAASjQ,EAAOA,EAAMiP,GACrB,GAAuB,IAAlBjP,EAAKuC,UAAkB+Q,EAC3B,MAAO1C,GAAS5Q,EAAM3B,EAAS4R,IAMlC,SAAUjQ,EAAM3B,EAAS4R,GACxB,GAAIuD,GAAUtD,EACbuD,GAAa5N,EAAS0N,EAGvB,IAAKtD,GACJ,MAASjQ,EAAOA,EAAMiP,GACrB,IAAuB,IAAlBjP,EAAKuC,UAAkB+Q,IACtB1C,EAAS5Q,EAAM3B,EAAS4R,GAC5B,OAAO,MAKV,OAASjQ,EAAOA,EAAMiP,GACrB,GAAuB,IAAlBjP,EAAKuC,UAAkB+Q,EAAmB,CAE9C,GADApD,EAAalQ,EAAMyB,KAAczB,EAAMyB,QACjC+R,EAAWtD,EAAYjB,KAC5BuE,EAAU,KAAQ3N,GAAW2N,EAAU,KAAQD,EAG/C,MAAQE,GAAU,GAAMD,EAAU,EAMlC,IAHAtD,EAAYjB,GAAQwE,EAGdA,EAAU,GAAM7C,EAAS5Q,EAAM3B,EAAS4R,GAC7C,OAAO,IASf,QAASyD,IAAgBC,GACxB,MAAOA,GAASzU,OAAS,EACxB,SAAUc,EAAM3B,EAAS4R,GACxB,GAAIhQ,GAAI0T,EAASzU,MACjB,OAAQe,IACP,IAAM0T,EAAS1T,GAAID,EAAM3B,EAAS4R,GACjC,OAAO,CAGT,QAAO,GAER0D,EAAS,GAGX,QAASC,IAAkBxV,EAAUyV,EAAUjQ,GAG9C,IAFA,GAAI3D,GAAI,EACPM,EAAMsT,EAAS3U,OACJqB,EAAJN,EAASA,IAChB2E,GAAQxG,EAAUyV,EAAS5T,GAAI2D,EAEhC,OAAOA,GAGR,QAASkQ,IAAUjD,EAAW9Q,EAAK+M,EAAQzO,EAAS4R,GAOnD,IANA,GAAIjQ,GACH+T,KACA9T,EAAI,EACJM,EAAMsQ,EAAU3R,OAChB8U,EAAgB,MAAPjU,EAEEQ,EAAJN,EAASA,KACVD,EAAO6Q,EAAU5Q,OAChB6M,GAAUA,EAAQ9M,EAAM3B,EAAS4R,MACtC8D,EAAapW,KAAMqC,GACdgU,GACJjU,EAAIpC,KAAMsC,GAMd,OAAO8T,GAGR,QAASE,IAAY5E,EAAWjR,EAAUwS,EAASsD,EAAYC,EAAYC,GAO1E,MANKF,KAAeA,EAAYzS,KAC/ByS,EAAaD,GAAYC,IAErBC,IAAeA,EAAY1S,KAC/B0S,EAAaF,GAAYE,EAAYC,IAE/BvJ,GAAa,SAAU7B,EAAMpF,EAASvF,EAAS4R,GACrD,GAAIoE,GAAMpU,EAAGD,EACZsU,KACAC,KACAC,EAAc5Q,EAAQ1E,OAGtBM,EAAQwJ,GAAQ4K,GAAkBxV,GAAY,IAAKC,EAAQkE,UAAalE,GAAYA,MAGpFoW,GAAYpF,IAAerG,GAAS5K,EAEnCoB,EADAsU,GAAUtU,EAAO8U,EAAQjF,EAAWhR,EAAS4R,GAG9CyE,EAAa9D,EAEZuD,IAAgBnL,EAAOqG,EAAYmF,GAAeN,MAMjDtQ,EACD6Q,CAQF,IALK7D,GACJA,EAAS6D,EAAWC,EAAYrW,EAAS4R,GAIrCiE,EAAa,CACjBG,EAAOP,GAAUY,EAAYH,GAC7BL,EAAYG,KAAUhW,EAAS4R,GAG/BhQ,EAAIoU,EAAKnV,MACT,OAAQe,KACDD,EAAOqU,EAAKpU,MACjByU,EAAYH,EAAQtU,MAASwU,EAAWF,EAAQtU,IAAOD,IAK1D,GAAKgJ,GACJ,GAAKmL,GAAc9E,EAAY,CAC9B,GAAK8E,EAAa,CAEjBE,KACApU,EAAIyU,EAAWxV,MACf,OAAQe,KACDD,EAAO0U,EAAWzU,KAEvBoU,EAAK1W,KAAO8W,EAAUxU,GAAKD,EAG7BmU,GAAY,KAAOO,KAAkBL,EAAMpE,GAI5ChQ,EAAIyU,EAAWxV,MACf,OAAQe,KACDD,EAAO0U,EAAWzU,MACtBoU,EAAOF,EAAavW,EAAQwB,KAAM4J,EAAMhJ,GAASsU,EAAOrU,IAAM,KAE/D+I,EAAKqL,KAAUzQ,EAAQyQ,GAAQrU,SAOlC0U,GAAaZ,GACZY,IAAe9Q,EACd8Q,EAAW/T,OAAQ6T,EAAaE,EAAWxV,QAC3CwV,GAEGP,EACJA,EAAY,KAAMvQ,EAAS8Q,EAAYzE,GAEvCtS,EAAKuC,MAAO0D,EAAS8Q,KAMzB,QAASC,IAAmB5B,GAqB3B,IApBA,GAAI6B,GAAchE,EAASpQ,EAC1BD,EAAMwS,EAAO7T,OACb2V,EAAkBhQ,EAAKkK,SAAUgE,EAAO,GAAG7Q,MAC3C4S,EAAmBD,GAAmBhQ,EAAKkK,SAAS,KACpD9O,EAAI4U,EAAkB,EAAI,EAG1BE,EAAe5B,GAAe,SAAUnT,GACvC,MAAOA,KAAS4U,GACdE,GAAkB,GACrBE,EAAkB7B,GAAe,SAAUnT,GAC1C,MAAOpC,GAAQwB,KAAMwV,EAAc5U,GAAS,IAC1C8U,GAAkB,GACrBnB,GAAa,SAAU3T,EAAM3B,EAAS4R,GACrC,OAAU4E,IAAqB5E,GAAO5R,IAAY8G,MAChDyP,EAAevW,GAASkE,SACxBwS,EAAc/U,EAAM3B,EAAS4R,GAC7B+E,EAAiBhV,EAAM3B,EAAS4R,MAGxB1P,EAAJN,EAASA,IAChB,GAAM2Q,EAAU/L,EAAKkK,SAAUgE,EAAO9S,GAAGiC,MACxCyR,GAAaR,GAAcO,GAAgBC,GAAY/C,QACjD,CAIN,GAHAA,EAAU/L,EAAKiI,OAAQiG,EAAO9S,GAAGiC,MAAOhC,MAAO,KAAM6S,EAAO9S,GAAGkE,SAG1DyM,EAASnP,GAAY,CAGzB,IADAjB,IAAMP,EACMM,EAAJC,EAASA,IAChB,GAAKqE,EAAKkK,SAAUgE,EAAOvS,GAAG0B,MAC7B,KAGF,OAAO+R,IACNhU,EAAI,GAAKyT,GAAgBC,GACzB1T,EAAI,GAAKiK,GAER6I,EAAOtV,MAAO,EAAGwC,EAAI,GAAIvC,QAAS+F,MAAgC,MAAzBsP,EAAQ9S,EAAI,GAAIiC,KAAe,IAAM,MAC7EN,QAASpD,EAAO,MAClBoS,EACIpQ,EAAJP,GAAS0U,GAAmB5B,EAAOtV,MAAOwC,EAAGO,IACzCD,EAAJC,GAAWmU,GAAoB5B,EAASA,EAAOtV,MAAO+C,IAClDD,EAAJC,GAAW0J,GAAY6I,IAGzBY,EAAShW,KAAMiT,GAIjB,MAAO8C,IAAgBC,GAGxB,QAASsB,IAA0BC,EAAiBC,GACnD,GAAIC,GAAQD,EAAYjW,OAAS,EAChCmW,EAAYH,EAAgBhW,OAAS,EACrCoW,EAAe,SAAUtM,EAAM3K,EAAS4R,EAAKrM,EAAS2R,GACrD,GAAIvV,GAAMQ,EAAGoQ,EACZ4E,EAAe,EACfvV,EAAI,IACJ4Q,EAAY7H,MACZyM,KACAC,EAAgBvQ,EAEhB3F,EAAQwJ,GAAQqM,GAAaxQ,EAAKgI,KAAU,IAAG,IAAK0I,GAEpDI,EAAiB9P,GAA4B,MAAjB6P,EAAwB,EAAIhU,KAAKC,UAAY,GACzEpB,EAAMf,EAAMN,MAUb,KARKqW,IACJpQ,EAAmB9G,IAAYnB,GAAYmB,GAOpC4B,IAAMM,GAA4B,OAApBP,EAAOR,EAAMS,IAAaA,IAAM,CACrD,GAAKoV,GAAarV,EAAO,CACxBQ,EAAI,CACJ,OAASoQ,EAAUsE,EAAgB1U,KAClC,GAAKoQ,EAAS5Q,EAAM3B,EAAS4R,GAAQ,CACpCrM,EAAQjG,KAAMqC,EACd,OAGGuV,IACJ1P,EAAU8P,GAKPP,KAEEpV,GAAQ4Q,GAAW5Q,IACxBwV,IAIIxM,GACJ6H,EAAUlT,KAAMqC,IAOnB,GADAwV,GAAgBvV,EACXmV,GAASnV,IAAMuV,EAAe,CAClChV,EAAI,CACJ,OAASoQ,EAAUuE,EAAY3U,KAC9BoQ,EAASC,EAAW4E,EAAYpX,EAAS4R,EAG1C,IAAKjH,EAAO,CAEX,GAAKwM,EAAe,EACnB,MAAQvV,IACA4Q,EAAU5Q,IAAMwV,EAAWxV,KACjCwV,EAAWxV,GAAKuG,EAAIpH,KAAMwE,GAM7B6R,GAAa3B,GAAU2B,GAIxB9X,EAAKuC,MAAO0D,EAAS6R,GAGhBF,IAAcvM,GAAQyM,EAAWvW,OAAS,GAC5CsW,EAAeL,EAAYjW,OAAW,GAExC0F,GAAO2J,WAAY3K,GAUrB,MALK2R,KACJ1P,EAAU8P,EACVxQ,EAAmBuQ,GAGb7E,EAGT,OAAOuE,GACNvK,GAAcyK,GACdA,EA+KF,MA5KArQ,GAAUL,GAAOK,QAAU,SAAU7G,EAAU6K,GAC9C,GAAIhJ,GACHkV,KACAD,KACAhC,EAAShN,EAAe9H,EAAW,IAEpC,KAAM8U,EAAS,CAERjK,IACLA,EAAQjE,EAAU5G,IAEnB6B,EAAIgJ,EAAM/J,MACV,OAAQe,IACPiT,EAASyB,GAAmB1L,EAAMhJ,IAC7BiT,EAAQzR,GACZ0T,EAAYxX,KAAMuV,GAElBgC,EAAgBvX,KAAMuV,EAKxBA,GAAShN,EAAe9H,EAAU6W,GAA0BC,EAAiBC,IAG7EjC,EAAO9U,SAAWA,EAEnB,MAAO8U,IAYRhO,EAASN,GAAOM,OAAS,SAAU9G,EAAUC,EAASuF,EAASoF,GAC9D,GAAI/I,GAAG8S,EAAQ6C,EAAO1T,EAAM2K,EAC3BgJ,EAA+B,kBAAbzX,IAA2BA,EAC7C6K,GAASD,GAAQhE,EAAW5G,EAAWyX,EAASzX,UAAYA,EAK7D,IAHAwF,EAAUA,MAGY,IAAjBqF,EAAM/J,OAAe,CAIzB,GADA6T,EAAS9J,EAAM,GAAKA,EAAM,GAAGxL,MAAO,GAC/BsV,EAAO7T,OAAS,GAAkC,QAA5B0W,EAAQ7C,EAAO,IAAI7Q,MAC5CjE,EAAQ0O,SAAgC,IAArBtO,EAAQkE,UAAkBiD,GAC7CX,EAAKkK,SAAUgE,EAAO,GAAG7Q,MAAS,CAGnC,GADA7D,GAAYwG,EAAKgI,KAAS,GAAG+I,EAAMzR,QAAQ,GAAGvC,QAAQyG,GAAWC,IAAYjK,QAAkB,IACzFA,EACL,MAAOuF,EAGIiS,KACXxX,EAAUA,EAAQ8E,YAGnB/E,EAAWA,EAASX,MAAOsV,EAAOnI,QAAQnH,MAAMvE,QAIjDe,EAAIqH,EAAwB,aAAEyC,KAAM3L,GAAa,EAAI2U,EAAO7T,MAC5D,OAAQe,IAAM,CAIb,GAHA2V,EAAQ7C,EAAO9S,GAGV4E,EAAKkK,SAAW7M,EAAO0T,EAAM1T,MACjC,KAED,KAAM2K,EAAOhI,EAAKgI,KAAM3K,MAEjB8G,EAAO6D,EACZ+I,EAAMzR,QAAQ,GAAGvC,QAASyG,GAAWC,IACrCH,GAAS4B,KAAMgJ,EAAO,GAAG7Q,OAAUiI,GAAa9L,EAAQ8E,aAAgB9E,IACpE,CAKJ,GAFA0U,EAAOpS,OAAQV,EAAG,GAClB7B,EAAW4K,EAAK9J,QAAUgL,GAAY6I,IAChC3U,EAEL,MADAT,GAAKuC,MAAO0D,EAASoF,GACdpF,CAGR,SAeJ,OAPEiS,GAAY5Q,EAAS7G,EAAU6K,IAChCD,EACA3K,GACCmH,EACD5B,EACAuE,GAAS4B,KAAM3L,IAAc+L,GAAa9L,EAAQ8E,aAAgB9E,GAE5DuF,GAMR3F,EAAQyQ,WAAajN,EAAQkD,MAAM,IAAIjE,KAAMyF,GAAYiE,KAAK,MAAQ3I,EAItExD,EAAQwQ,mBAAqBpJ,EAG7BC,IAIArH,EAAQ4P,aAAe/C,GAAO,SAAUgL,GAEvC,MAAuE,GAAhEA,EAAKrI,wBAAyBvQ,EAAS6F,cAAc,UAMvD+H,GAAO,SAAUC,GAEtB,MADAA,GAAI0B,UAAY,mBAC+B,MAAxC1B,EAAI2B,WAAW1C,aAAa,WAEnCgB,GAAW,yBAA0B,SAAUhL,EAAMc,EAAMiE,GAC1D,MAAMA,GAAN,OACQ/E,EAAKgK,aAAclJ,EAA6B,SAAvBA,EAAK0C,cAA2B,EAAI,KAOjEvF,EAAQ6I,YAAegE,GAAO,SAAUC,GAG7C,MAFAA,GAAI0B,UAAY,WAChB1B,EAAI2B,WAAWzC,aAAc,QAAS,IACY,KAA3Cc,EAAI2B,WAAW1C,aAAc,YAEpCgB,GAAW,QAAS,SAAUhL,EAAMc,EAAMiE,GACzC,MAAMA,IAAyC,UAAhC/E,EAAKuD,SAASC,cAA7B,OACQxD,EAAK+V,eAOTjL,GAAO,SAAUC,GACtB,MAAuC,OAAhCA,EAAIf,aAAa,eAExBgB,GAAWtE,EAAU,SAAU1G,EAAMc,EAAMiE,GAC1C,GAAIsJ,EACJ,OAAMtJ,GAAN,OACQ/E,EAAMc,MAAW,EAAOA,EAAK0C,eACjC6K,EAAMrO,EAAKgN,iBAAkBlM,KAAWuN,EAAIC,UAC7CD,EAAI5K,MACL,OAKGmB,IAEHvH,EAIJc,GAAO0O,KAAOjI,EACdzG,EAAO+P,KAAOtJ,EAAOiK,UACrB1Q,EAAO+P,KAAK,KAAO/P,EAAO+P,KAAKnH,QAC/B5I,EAAO6X,OAASpR,EAAO2J,WACvBpQ,EAAO6E,KAAO4B,EAAOE,QACrB3G,EAAO8X,SAAWrR,EAAOG,MACzB5G,EAAOwH,SAAWf,EAAOe,QAIzB,IAAIuQ,GAAgB/X,EAAO+P,KAAKjF,MAAMnB,aAElCqO,EAAa,6BAIbC,EAAY,gBAGhB,SAASC,GAAQlI,EAAUmI,EAAW3F,GACrC,GAAKxS,EAAOkD,WAAYiV,GACvB,MAAOnY,GAAO6F,KAAMmK,EAAU,SAAUnO,EAAMC,GAE7C,QAASqW,EAAUlX,KAAMY,EAAMC,EAAGD,KAAW2Q,GAK/C,IAAK2F,EAAU/T,SACd,MAAOpE,GAAO6F,KAAMmK,EAAU,SAAUnO,GACvC,MAASA,KAASsW,IAAgB3F,GAKpC,IAA0B,gBAAd2F,GAAyB,CACpC,GAAKF,EAAUrM,KAAMuM,GACpB,MAAOnY,GAAO2O,OAAQwJ,EAAWnI,EAAUwC,EAG5C2F,GAAYnY,EAAO2O,OAAQwJ,EAAWnI,GAGvC,MAAOhQ,GAAO6F,KAAMmK,EAAU,SAAUnO,GACvC,MAASpC,GAAQwB,KAAMkX,EAAWtW,IAAU,IAAQ2Q,IAItDxS,EAAO2O,OAAS,SAAUoB,EAAM1O,EAAOmR,GACtC,GAAI3Q,GAAOR,EAAO,EAMlB,OAJKmR,KACJzC,EAAO,QAAUA,EAAO,KAGD,IAAjB1O,EAAMN,QAAkC,IAAlBc,EAAKuC,SACjCpE,EAAO0O,KAAKM,gBAAiBnN,EAAMkO,IAAWlO,MAC9C7B,EAAO0O,KAAK1I,QAAS+J,EAAM/P,EAAO6F,KAAMxE,EAAO,SAAUQ,GACxD,MAAyB,KAAlBA,EAAKuC,aAIfpE,EAAOG,GAAGsC,QACTiM,KAAM,SAAUzO,GACf,GAAI6B,GACHM,EAAMjD,KAAK4B,OACXO,KACA8W,EAAOjZ,IAER,IAAyB,gBAAbc,GACX,MAAOd,MAAKiC,UAAWpB,EAAQC,GAAW0O,OAAO,WAChD,IAAM7M,EAAI,EAAOM,EAAJN,EAASA,IACrB,GAAK9B,EAAOwH,SAAU4Q,EAAMtW,GAAK3C,MAChC,OAAO,IAMX,KAAM2C,EAAI,EAAOM,EAAJN,EAASA,IACrB9B,EAAO0O,KAAMzO,EAAUmY,EAAMtW,GAAKR,EAMnC,OAFAA,GAAMnC,KAAKiC,UAAWgB,EAAM,EAAIpC,EAAO6X,OAAQvW,GAAQA,GACvDA,EAAIrB,SAAWd,KAAKc,SAAWd,KAAKc,SAAW,IAAMA,EAAWA,EACzDqB,GAERqN,OAAQ,SAAU1O,GACjB,MAAOd,MAAKiC,UAAW8W,EAAO/Y,KAAMc,OAAgB,KAErDuS,IAAK,SAAUvS,GACd,MAAOd,MAAKiC,UAAW8W,EAAO/Y,KAAMc,OAAgB,KAErDoY,GAAI,SAAUpY,GACb,QAASiY,EACR/Y,KAIoB,gBAAbc,IAAyB8X,EAAcnM,KAAM3L,GACnDD,EAAQC,GACRA,OACD,GACCc,SASJ,IAAIuX,GAKHvO,EAAa,sCAEb3J,EAAOJ,EAAOG,GAAGC,KAAO,SAAUH,EAAUC,GAC3C,GAAI4K,GAAOjJ,CAGX,KAAM5B,EACL,MAAOd,KAIR,IAAyB,gBAAbc,GAAwB,CAUnC,GAPC6K,EAFoB,MAAhB7K,EAAS,IAAkD,MAApCA,EAAUA,EAASc,OAAS,IAAed,EAASc,QAAU,GAE/E,KAAMd,EAAU,MAGlB8J,EAAWuB,KAAMrL,IAIrB6K,IAAUA,EAAM,IAAO5K,EAgDrB,OAAMA,GAAWA,EAAQW,QACtBX,GAAWoY,GAAa5J,KAAMzO,GAKhCd,KAAK2B,YAAaZ,GAAUwO,KAAMzO,EAnDzC,IAAK6K,EAAM,GAAK,CAYf,GAXA5K,EAAUA,YAAmBF,GAASE,EAAQ,GAAKA,EAInDF,EAAOuB,MAAOpC,KAAMa,EAAOuY,UAC1BzN,EAAM,GACN5K,GAAWA,EAAQkE,SAAWlE,EAAQmL,eAAiBnL,EAAUnB,GACjE,IAIIiZ,EAAWpM,KAAMd,EAAM,KAAQ9K,EAAOmD,cAAejD,GACzD,IAAM4K,IAAS5K,GAETF,EAAOkD,WAAY/D,KAAM2L,IAC7B3L,KAAM2L,GAAS5K,EAAS4K,IAIxB3L,KAAK8Q,KAAMnF,EAAO5K,EAAS4K,GAK9B,OAAO3L,MAgBP,MAZA0C,GAAO9C,EAASwM,eAAgBT,EAAM,IAIjCjJ,GAAQA,EAAKmD,aAEjB7F,KAAK4B,OAAS,EACd5B,KAAK,GAAK0C,GAGX1C,KAAKe,QAAUnB,EACfI,KAAKc,SAAWA,EACTd,KAcH,MAAKc,GAASmE,UACpBjF,KAAKe,QAAUf,KAAK,GAAKc,EACzBd,KAAK4B,OAAS,EACP5B,MAIIa,EAAOkD,WAAYjD,GACK,mBAArBqY,GAAWE,MACxBF,EAAWE,MAAOvY,GAElBA,EAAUD,IAGeqD,SAAtBpD,EAASA,WACbd,KAAKc,SAAWA,EAASA,SACzBd,KAAKe,QAAUD,EAASC,SAGlBF,EAAOwF,UAAWvF,EAAUd,OAIrCiB,GAAKQ,UAAYZ,EAAOG,GAGxBmY,EAAatY,EAAQjB,EAGrB,IAAI0Z,GAAe,iCAElBC,GACCC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,MAAM,EAGR9Y,GAAOyC,QACNqO,IAAK,SAAUjP,EAAMiP,EAAKiI,GACzB,GAAIxG,MACHyG,EAAqB3V,SAAV0V,CAEZ,QAASlX,EAAOA,EAAMiP,KAA4B,IAAlBjP,EAAKuC,SACpC,GAAuB,IAAlBvC,EAAKuC,SAAiB,CAC1B,GAAK4U,GAAYhZ,EAAQ6B,GAAOwW,GAAIU,GACnC,KAEDxG,GAAQ/S,KAAMqC,GAGhB,MAAO0Q,IAGR0G,QAAS,SAAUC,EAAGrX,GAGrB,IAFA,GAAI0Q,MAEI2G,EAAGA,EAAIA,EAAE7L,YACI,IAAf6L,EAAE9U,UAAkB8U,IAAMrX,GAC9B0Q,EAAQ/S,KAAM0Z,EAIhB,OAAO3G,MAITvS,EAAOG,GAAGsC,QACTkQ,IAAK,SAAU3P,GACd,GAAImW,GAAUnZ,EAAQgD,EAAQ7D,MAC7Bia,EAAID,EAAQpY,MAEb,OAAO5B,MAAKwP,OAAO,WAElB,IADA,GAAI7M,GAAI,EACIsX,EAAJtX,EAAOA,IACd,GAAK9B,EAAOwH,SAAUrI,KAAMga,EAAQrX,IACnC,OAAO,KAMXuX,QAAS,SAAU3I,EAAWxQ,GAS7B,IARA,GAAIgN,GACHpL,EAAI,EACJsX,EAAIja,KAAK4B,OACTwR,KACA+G,EAAMvB,EAAcnM,KAAM8E,IAAoC,gBAAdA,GAC/C1Q,EAAQ0Q,EAAWxQ,GAAWf,KAAKe,SACnC,EAEUkZ,EAAJtX,EAAOA,IACd,IAAMoL,EAAM/N,KAAK2C,GAAIoL,GAAOA,IAAQhN,EAASgN,EAAMA,EAAIlI,WAEtD,GAAKkI,EAAI9I,SAAW,KAAOkV,EAC1BA,EAAIC,MAAMrM,GAAO,GAGA,IAAjBA,EAAI9I,UACHpE,EAAO0O,KAAKM,gBAAgB9B,EAAKwD,IAAc,CAEhD6B,EAAQ/S,KAAM0N,EACd,OAKH,MAAO/N,MAAKiC,UAAWmR,EAAQxR,OAAS,EAAIf,EAAO6X,OAAQtF,GAAYA,IAKxEgH,MAAO,SAAU1X,GAGhB,MAAMA,GAKe,gBAATA,GACJpC,EAAQwB,KAAMjB,EAAQ6B,GAAQ1C,KAAM,IAIrCM,EAAQwB,KAAM9B,KAGpB0C,EAAKhB,OAASgB,EAAM,GAAMA,GAZjB1C,KAAM,IAAOA,KAAM,GAAI6F,WAAe7F,KAAK8C,QAAQuX,UAAUzY,OAAS,IAgBjF0Y,IAAK,SAAUxZ,EAAUC,GACxB,MAAOf,MAAKiC,UACXpB,EAAO6X,OACN7X,EAAOuB,MAAOpC,KAAK+B,MAAOlB,EAAQC,EAAUC,OAK/CwZ,QAAS,SAAUzZ,GAClB,MAAOd,MAAKsa,IAAiB,MAAZxZ,EAChBd,KAAKqC,WAAarC,KAAKqC,WAAWmN,OAAO1O,MAK5C,SAASgZ,GAAS/L,EAAK4D,GACtB,OAAS5D,EAAMA,EAAI4D,KAA0B,IAAjB5D,EAAI9I,UAChC,MAAO8I,GAGRlN,EAAOyB,MACNsM,OAAQ,SAAUlM,GACjB,GAAIkM,GAASlM,EAAKmD,UAClB,OAAO+I,IAA8B,KAApBA,EAAO3J,SAAkB2J,EAAS,MAEpD4L,QAAS,SAAU9X,GAClB,MAAO7B,GAAO8Q,IAAKjP,EAAM,eAE1B+X,aAAc,SAAU/X,EAAMC,EAAGiX,GAChC,MAAO/Y,GAAO8Q,IAAKjP,EAAM,aAAckX,IAExCF,KAAM,SAAUhX,GACf,MAAOoX,GAASpX,EAAM,gBAEvBiX,KAAM,SAAUjX,GACf,MAAOoX,GAASpX,EAAM,oBAEvBgY,QAAS,SAAUhY,GAClB,MAAO7B,GAAO8Q,IAAKjP,EAAM,gBAE1B2X,QAAS,SAAU3X,GAClB,MAAO7B,GAAO8Q,IAAKjP,EAAM,oBAE1BiY,UAAW,SAAUjY,EAAMC,EAAGiX,GAC7B,MAAO/Y,GAAO8Q,IAAKjP,EAAM,cAAekX,IAEzCgB,UAAW,SAAUlY,EAAMC,EAAGiX,GAC7B,MAAO/Y,GAAO8Q,IAAKjP,EAAM,kBAAmBkX,IAE7CiB,SAAU,SAAUnY,GACnB,MAAO7B,GAAOiZ,SAAWpX,EAAKmD,gBAAmBuJ,WAAY1M,IAE9D8W,SAAU,SAAU9W,GACnB,MAAO7B,GAAOiZ,QAASpX,EAAK0M,aAE7BqK,SAAU,SAAU/W,GACnB,MAAOA,GAAKoY,iBAAmBja,EAAOuB,SAAWM,EAAK6I,cAErD,SAAU/H,EAAMxC,GAClBH,EAAOG,GAAIwC,GAAS,SAAUoW,EAAO9Y,GACpC,GAAIsS,GAAUvS,EAAO4B,IAAKzC,KAAMgB,EAAI4Y,EAsBpC,OApB0B,UAArBpW,EAAKrD,MAAO,MAChBW,EAAW8Y,GAGP9Y,GAAgC,gBAAbA,KACvBsS,EAAUvS,EAAO2O,OAAQ1O,EAAUsS,IAG/BpT,KAAK4B,OAAS,IAEZ2X,EAAkB/V,IACvB3C,EAAO6X,OAAQtF,GAIXkG,EAAa7M,KAAMjJ,IACvB4P,EAAQ2H,WAIH/a,KAAKiC,UAAWmR,KAGzB,IAAI4H,GAAY,OAKZC,IAGJ,SAASC,GAAe3X,GACvB,GAAI4X,GAASF,EAAc1X,KAI3B,OAHA1C,GAAOyB,KAAMiB,EAAQoI,MAAOqP,OAAmB,SAAU/P,EAAGmQ,GAC3DD,EAAQC,IAAS,IAEXD,EAyBRta,EAAOwa,UAAY,SAAU9X,GAI5BA,EAA6B,gBAAZA,GACd0X,EAAc1X,IAAa2X,EAAe3X,GAC5C1C,EAAOyC,UAAYC,EAEpB,IACC+X,GAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,KAEAC,GAAStY,EAAQuY,SAEjBC,EAAO,SAAUC,GAOhB,IANAV,EAAS/X,EAAQ+X,QAAUU,EAC3BT,GAAQ,EACRI,EAAcF,GAAe,EAC7BA,EAAc,EACdC,EAAeE,EAAKha,OACpB4Z,GAAS,EACDI,GAAsBF,EAAdC,EAA4BA,IAC3C,GAAKC,EAAMD,GAAc/Y,MAAOoZ,EAAM,GAAKA,EAAM,OAAU,GAASzY,EAAQ0Y,YAAc,CACzFX,GAAS,CACT,OAGFE,GAAS,EACJI,IACCC,EACCA,EAAMja,QACVma,EAAMF,EAAMvO,SAEFgO,EACXM,KAEA3C,EAAKiD,YAKRjD,GAECqB,IAAK,WACJ,GAAKsB,EAAO,CAEX,GAAI9I,GAAQ8I,EAAKha,QACjB,QAAU0Y,GAAK9X,GACd3B,EAAOyB,KAAME,EAAM,SAAUyI,EAAGlE,GAC/B,GAAInC,GAAO/D,EAAO+D,KAAMmC,EACV,cAATnC,EACErB,EAAQmV,QAAWO,EAAKzF,IAAKzM,IAClC6U,EAAKvb,KAAM0G,GAEDA,GAAOA,EAAInF,QAAmB,WAATgD,GAEhC0V,EAAKvT,MAGJlE,WAGC2Y,EACJE,EAAeE,EAAKha,OAGT0Z,IACXG,EAAc3I,EACdiJ,EAAMT,IAGR,MAAOtb,OAGRmc,OAAQ,WAkBP,MAjBKP,IACJ/a,EAAOyB,KAAMO,UAAW,SAAUoI,EAAGlE,GACpC,GAAIqT,EACJ,QAAUA,EAAQvZ,EAAO2F,QAASO,EAAK6U,EAAMxB,IAAY,GACxDwB,EAAKvY,OAAQ+W,EAAO,GAEfoB,IACUE,GAATtB,GACJsB,IAEaC,GAATvB,GACJuB,OAME3b,MAIRwT,IAAK,SAAUxS,GACd,MAAOA,GAAKH,EAAO2F,QAASxF,EAAI4a,GAAS,MAASA,IAAQA,EAAKha,SAGhE6S,MAAO,WAGN,MAFAmH,MACAF,EAAe,EACR1b,MAGRkc,QAAS,WAER,MADAN,GAAOC,EAAQP,EAASpX,OACjBlE,MAGRqU,SAAU,WACT,OAAQuH,GAGTQ,KAAM,WAKL,MAJAP,GAAQ3X,OACFoX,GACLrC,EAAKiD,UAEClc,MAGRqc,OAAQ,WACP,OAAQR,GAGTS,SAAU,SAAUvb,EAASyB,GAU5B,OATKoZ,GAAWL,IAASM,IACxBrZ,EAAOA,MACPA,GAASzB,EAASyB,EAAKrC,MAAQqC,EAAKrC,QAAUqC,GACzCgZ,EACJK,EAAMxb,KAAMmC,GAEZuZ,EAAMvZ,IAGDxC,MAGR+b,KAAM,WAEL,MADA9C,GAAKqD,SAAUtc,KAAM6C,WACd7C,MAGRub,MAAO,WACN,QAASA,GAIZ,OAAOtC,IAIRpY,EAAOyC,QAENiZ,SAAU,SAAUC,GACnB,GAAIC,KAEA,UAAW,OAAQ5b,EAAOwa,UAAU,eAAgB,aACpD,SAAU,OAAQxa,EAAOwa,UAAU,eAAgB,aACnD,SAAU,WAAYxa,EAAOwa,UAAU,YAE1CqB,EAAQ,UACRC,GACCD,MAAO,WACN,MAAOA,IAERE,OAAQ,WAEP,MADAC,GAASrU,KAAM3F,WAAYia,KAAMja,WAC1B7C,MAER+c,KAAM,WACL,GAAIC,GAAMna,SACV,OAAOhC,GAAO0b,SAAS,SAAUU,GAChCpc,EAAOyB,KAAMma,EAAQ,SAAU9Z,EAAGua,GACjC,GAAIlc,GAAKH,EAAOkD,WAAYiZ,EAAKra,KAASqa,EAAKra,EAE/Cka,GAAUK,EAAM,IAAK,WACpB,GAAIC,GAAWnc,GAAMA,EAAG4B,MAAO5C,KAAM6C,UAChCsa,IAAYtc,EAAOkD,WAAYoZ,EAASR,SAC5CQ,EAASR,UACPnU,KAAMyU,EAASG,SACfN,KAAMG,EAASI,QACfC,SAAUL,EAASM,QAErBN,EAAUC,EAAO,GAAM,QAAUld,OAAS2c,EAAUM,EAASN,UAAY3c,KAAMgB,GAAOmc,GAAata,eAItGma,EAAM,OACJL,WAIJA,QAAS,SAAUhY,GAClB,MAAc,OAAPA,EAAc9D,EAAOyC,OAAQqB,EAAKgY,GAAYA,IAGvDE,IAwCD,OArCAF,GAAQa,KAAOb,EAAQI,KAGvBlc,EAAOyB,KAAMma,EAAQ,SAAU9Z,EAAGua,GACjC,GAAItB,GAAOsB,EAAO,GACjBO,EAAcP,EAAO,EAGtBP,GAASO,EAAM,IAAOtB,EAAKtB,IAGtBmD,GACJ7B,EAAKtB,IAAI,WAERoC,EAAQe,GAGNhB,EAAY,EAAJ9Z,GAAS,GAAIuZ,QAASO,EAAQ,GAAK,GAAIL,MAInDS,EAAUK,EAAM,IAAO,WAEtB,MADAL,GAAUK,EAAM,GAAK,QAAUld,OAAS6c,EAAWF,EAAU3c,KAAM6C,WAC5D7C,MAER6c,EAAUK,EAAM,GAAK,QAAWtB,EAAKU,WAItCK,EAAQA,QAASE,GAGZL,GACJA,EAAK1a,KAAM+a,EAAUA,GAIfA,GAIRa,KAAM,SAAUC,GACf,GAAIhb,GAAI,EACPib,EAAgBzd,EAAM2B,KAAMe,WAC5BjB,EAASgc,EAAchc,OAGvBic,EAAuB,IAAXjc,GAAkB+b,GAAe9c,EAAOkD,WAAY4Z,EAAYhB,SAAc/a,EAAS,EAGnGib,EAAyB,IAAdgB,EAAkBF,EAAc9c,EAAO0b,WAGlDuB,EAAa,SAAUnb,EAAG4T,EAAUwH,GACnC,MAAO,UAAU5X,GAChBoQ,EAAU5T,GAAM3C,KAChB+d,EAAQpb,GAAME,UAAUjB,OAAS,EAAIzB,EAAM2B,KAAMe,WAAcsD,EAC1D4X,IAAWC,EACfnB,EAASoB,WAAY1H,EAAUwH,KACfF,GAChBhB,EAASqB,YAAa3H,EAAUwH,KAKnCC,EAAgBG,EAAkBC,CAGnC,IAAKxc,EAAS,EAIb,IAHAoc,EAAiB,GAAInZ,OAAOjD,GAC5Buc,EAAmB,GAAItZ,OAAOjD,GAC9Bwc,EAAkB,GAAIvZ,OAAOjD,GACjBA,EAAJe,EAAYA,IACdib,EAAejb,IAAO9B,EAAOkD,WAAY6Z,EAAejb,GAAIga,SAChEiB,EAAejb,GAAIga,UACjBnU,KAAMsV,EAAYnb,EAAGyb,EAAiBR,IACtCd,KAAMD,EAASQ,QACfC,SAAUQ,EAAYnb,EAAGwb,EAAkBH,MAE3CH,CAUL,OAJMA,IACLhB,EAASqB,YAAaE,EAAiBR,GAGjCf,EAASF,YAMlB,IAAI0B,EAEJxd,GAAOG,GAAGqY,MAAQ,SAAUrY,GAI3B,MAFAH,GAAOwY,MAAMsD,UAAUnU,KAAMxH,GAEtBhB,MAGRa,EAAOyC,QAENiB,SAAS,EAIT+Z,UAAW,EAGXC,UAAW,SAAUC,GACfA,EACJ3d,EAAOyd,YAEPzd,EAAOwY,OAAO,IAKhBA,MAAO,SAAUoF,IAGXA,KAAS,IAAS5d,EAAOyd,UAAYzd,EAAO0D,WAKjD1D,EAAO0D,SAAU,EAGZka,KAAS,KAAU5d,EAAOyd,UAAY,IAK3CD,EAAUH,YAAate,GAAYiB,IAG9BA,EAAOG,GAAG0d,iBACd7d,EAAQjB,GAAW8e,eAAgB,SACnC7d,EAAQjB,GAAW+e,IAAK,cAQ3B,SAASC,KACRhf,EAASif,oBAAqB,mBAAoBD,GAAW,GAC7D7e,EAAO8e,oBAAqB,OAAQD,GAAW,GAC/C/d,EAAOwY,QAGRxY,EAAOwY,MAAMsD,QAAU,SAAUhY,GAqBhC,MApBM0Z,KAELA,EAAYxd,EAAO0b,WAKU,aAAxB3c,EAASkf,WAEbC,WAAYle,EAAOwY,QAKnBzZ,EAASmP,iBAAkB,mBAAoB6P,GAAW,GAG1D7e,EAAOgP,iBAAkB,OAAQ6P,GAAW,KAGvCP,EAAU1B,QAAShY,IAI3B9D,EAAOwY,MAAMsD,SAOb,IAAIqC,GAASne,EAAOme,OAAS,SAAU9c,EAAOlB,EAAIoM,EAAKjH,EAAO8Y,EAAWC,EAAUC,GAClF,GAAIxc,GAAI,EACPM,EAAMf,EAAMN,OACZwd,EAAc,MAAPhS,CAGR,IAA4B,WAAvBvM,EAAO+D,KAAMwI,GAAqB,CACtC6R,GAAY,CACZ,KAAMtc,IAAKyK,GACVvM,EAAOme,OAAQ9c,EAAOlB,EAAI2B,EAAGyK,EAAIzK,IAAI,EAAMuc,EAAUC,OAIhD,IAAejb,SAAViC,IACX8Y,GAAY,EAENpe,EAAOkD,WAAYoC,KACxBgZ,GAAM,GAGFC,IAECD,GACJne,EAAGc,KAAMI,EAAOiE,GAChBnF,EAAK,OAILoe,EAAOpe,EACPA,EAAK,SAAU0B,EAAM0K,EAAKjH,GACzB,MAAOiZ,GAAKtd,KAAMjB,EAAQ6B,GAAQyD,MAKhCnF,GACJ,KAAYiC,EAAJN,EAASA,IAChB3B,EAAIkB,EAAMS,GAAIyK,EAAK+R,EAAMhZ,EAAQA,EAAMrE,KAAMI,EAAMS,GAAIA,EAAG3B,EAAIkB,EAAMS,GAAIyK,IAK3E,OAAO6R,GACN/c,EAGAkd,EACCpe,EAAGc,KAAMI,GACTe,EAAMjC,EAAIkB,EAAM,GAAIkL,GAAQ8R,EAO/Bre,GAAOwe,WAAa,SAAUC,GAQ7B,MAA0B,KAAnBA,EAAMra,UAAqC,IAAnBqa,EAAMra,YAAsBqa,EAAMra,SAIlE,SAASsa,KAIRhZ,OAAOiZ,eAAgBxf,KAAKmN,SAAY,GACvCpL,IAAK,WACJ,YAIF/B,KAAKmE,QAAUtD,EAAOsD,QAAUC,KAAKC,SAGtCkb,EAAKE,IAAM,EACXF,EAAKG,QAAU7e,EAAOwe,WAEtBE,EAAK9d,WACJ2L,IAAK,SAAUkS,GAId,IAAMC,EAAKG,QAASJ,GACnB,MAAO,EAGR,IAAIK,MAEHC,EAASN,EAAOtf,KAAKmE,QAGtB,KAAMyb,EAAS,CACdA,EAASL,EAAKE,KAGd,KACCE,EAAY3f,KAAKmE,UAAcgC,MAAOyZ,GACtCrZ,OAAOsZ,iBAAkBP,EAAOK,GAI/B,MAAQnU,GACTmU,EAAY3f,KAAKmE,SAAYyb,EAC7B/e,EAAOyC,OAAQgc,EAAOK,IASxB,MAJM3f,MAAKmN,MAAOyS,KACjB5f,KAAKmN,MAAOyS,OAGNA,GAERE,IAAK,SAAUR,EAAOtD,EAAM7V,GAC3B,GAAI4Z,GAIHH,EAAS5f,KAAKoN,IAAKkS,GACnBnS,EAAQnN,KAAKmN,MAAOyS,EAGrB,IAAqB,gBAAT5D,GACX7O,EAAO6O,GAAS7V,MAKhB,IAAKtF,EAAOqE,cAAeiI,GAC1BtM,EAAOyC,OAAQtD,KAAKmN,MAAOyS,GAAU5D,OAGrC,KAAM+D,IAAQ/D,GACb7O,EAAO4S,GAAS/D,EAAM+D,EAIzB,OAAO5S,IAERpL,IAAK,SAAUud,EAAOlS,GAKrB,GAAID,GAAQnN,KAAKmN,MAAOnN,KAAKoN,IAAKkS,GAElC,OAAepb,UAARkJ,EACND,EAAQA,EAAOC,IAEjB4R,OAAQ,SAAUM,EAAOlS,EAAKjH,GAC7B,GAAI6Z,EAYJ,OAAa9b,UAARkJ,GACDA,GAAsB,gBAARA,IAA+BlJ,SAAViC,GAEtC6Z,EAAShgB,KAAK+B,IAAKud,EAAOlS,GAERlJ,SAAX8b,EACNA,EAAShgB,KAAK+B,IAAKud,EAAOze,EAAOkF,UAAUqH,MAS7CpN,KAAK8f,IAAKR,EAAOlS,EAAKjH,GAILjC,SAAViC,EAAsBA,EAAQiH,IAEtC+O,OAAQ,SAAUmD,EAAOlS,GACxB,GAAIzK,GAAGa,EAAMyc,EACZL,EAAS5f,KAAKoN,IAAKkS,GACnBnS,EAAQnN,KAAKmN,MAAOyS,EAErB,IAAa1b,SAARkJ,EACJpN,KAAKmN,MAAOyS,UAEN,CAED/e,EAAOoD,QAASmJ,GAOpB5J,EAAO4J,EAAIhN,OAAQgN,EAAI3K,IAAK5B,EAAOkF,aAEnCka,EAAQpf,EAAOkF,UAAWqH,GAErBA,IAAOD,GACX3J,GAAS4J,EAAK6S,IAIdzc,EAAOyc,EACPzc,EAAOA,IAAQ2J,IACZ3J,GAAWA,EAAKmI,MAAOqP,SAI5BrY,EAAIa,EAAK5B,MACT,OAAQe,UACAwK,GAAO3J,EAAMb,MAIvBud,QAAS,SAAUZ,GAClB,OAAQze,EAAOqE,cACdlF,KAAKmN,MAAOmS,EAAOtf,KAAKmE,gBAG1Bgc,QAAS,SAAUb,GACbA,EAAOtf,KAAKmE,gBACTnE,MAAKmN,MAAOmS,EAAOtf,KAAKmE,WAIlC,IAAIic,GAAY,GAAIb,GAEhBc,EAAY,GAAId,GAehBe,EAAS,gCACZC,EAAa,UAEd,SAASC,GAAU9d,EAAM0K,EAAK4O,GAC7B,GAAIxY,EAIJ,IAAcU,SAAT8X,GAAwC,IAAlBtZ,EAAKuC,SAI/B,GAHAzB,EAAO,QAAU4J,EAAI9I,QAASic,EAAY,OAAQra,cAClD8V,EAAOtZ,EAAKgK,aAAclJ,GAEL,gBAATwY,GAAoB,CAC/B,IACCA,EAAgB,SAATA,GAAkB,EACf,UAATA,GAAmB,EACV,SAATA,EAAkB,MAEjBA,EAAO,KAAOA,GAAQA,EACvBsE,EAAO7T,KAAMuP,GAASnb,EAAO4f,UAAWzE,GACxCA,EACA,MAAOxQ,IAGT6U,EAAUP,IAAKpd,EAAM0K,EAAK4O,OAE1BA,GAAO9X,MAGT,OAAO8X,GAGRnb,EAAOyC,QACN4c,QAAS,SAAUxd,GAClB,MAAO2d,GAAUH,QAASxd,IAAU0d,EAAUF,QAASxd,IAGxDsZ,KAAM,SAAUtZ,EAAMc,EAAMwY,GAC3B,MAAOqE,GAAUrB,OAAQtc,EAAMc,EAAMwY,IAGtC0E,WAAY,SAAUhe,EAAMc,GAC3B6c,EAAUlE,OAAQzZ,EAAMc;EAKzBmd,MAAO,SAAUje,EAAMc,EAAMwY,GAC5B,MAAOoE,GAAUpB,OAAQtc,EAAMc,EAAMwY,IAGtC4E,YAAa,SAAUle,EAAMc,GAC5B4c,EAAUjE,OAAQzZ,EAAMc,MAI1B3C,EAAOG,GAAGsC,QACT0Y,KAAM,SAAU5O,EAAKjH,GACpB,GAAIxD,GAAGa,EAAMwY,EACZtZ,EAAO1C,KAAM,GACb2N,EAAQjL,GAAQA,EAAK8G,UAGtB,IAAatF,SAARkJ,EAAoB,CACxB,GAAKpN,KAAK4B,SACToa,EAAOqE,EAAUte,IAAKW,GAEC,IAAlBA,EAAKuC,WAAmBmb,EAAUre,IAAKW,EAAM,iBAAmB,CACpEC,EAAIgL,EAAM/L,MACV,OAAQe,IAIFgL,EAAOhL,KACXa,EAAOmK,EAAOhL,GAAIa,KACe,IAA5BA,EAAKlD,QAAS,WAClBkD,EAAO3C,EAAOkF,UAAWvC,EAAKrD,MAAM,IACpCqgB,EAAU9d,EAAMc,EAAMwY,EAAMxY,KAI/B4c,GAAUN,IAAKpd,EAAM,gBAAgB,GAIvC,MAAOsZ,GAIR,MAAoB,gBAAR5O,GACJpN,KAAKsC,KAAK,WAChB+d,EAAUP,IAAK9f,KAAMoN,KAIhB4R,EAAQhf,KAAM,SAAUmG,GAC9B,GAAI6V,GACH6E,EAAWhgB,EAAOkF,UAAWqH,EAO9B,IAAK1K,GAAkBwB,SAAViC,EAAb,CAIC,GADA6V,EAAOqE,EAAUte,IAAKW,EAAM0K,GACdlJ,SAAT8X,EACJ,MAAOA,EAMR,IADAA,EAAOqE,EAAUte,IAAKW,EAAMme,GACd3c,SAAT8X,EACJ,MAAOA,EAMR,IADAA,EAAOwE,EAAU9d,EAAMme,EAAU3c,QACnBA,SAAT8X,EACJ,MAAOA,OAQThc,MAAKsC,KAAK,WAGT,GAAI0Z,GAAOqE,EAAUte,IAAK/B,KAAM6gB,EAKhCR,GAAUP,IAAK9f,KAAM6gB,EAAU1a,GAKL,KAArBiH,EAAI9M,QAAQ,MAAwB4D,SAAT8X,GAC/BqE,EAAUP,IAAK9f,KAAMoN,EAAKjH,MAG1B,KAAMA,EAAOtD,UAAUjB,OAAS,EAAG,MAAM,IAG7C8e,WAAY,SAAUtT,GACrB,MAAOpN,MAAKsC,KAAK,WAChB+d,EAAUlE,OAAQnc,KAAMoN,QAM3BvM,EAAOyC,QACNwd,MAAO,SAAUpe,EAAMkC,EAAMoX,GAC5B,GAAI8E,EAEJ,OAAKpe,IACJkC,GAASA,GAAQ,MAAS,QAC1Bkc,EAAQV,EAAUre,IAAKW,EAAMkC,GAGxBoX,KACE8E,GAASjgB,EAAOoD,QAAS+X,GAC9B8E,EAAQV,EAAUpB,OAAQtc,EAAMkC,EAAM/D,EAAOwF,UAAU2V,IAEvD8E,EAAMzgB,KAAM2b,IAGP8E,OAZR,QAgBDC,QAAS,SAAUre,EAAMkC,GACxBA,EAAOA,GAAQ,IAEf,IAAIkc,GAAQjgB,EAAOigB,MAAOpe,EAAMkC,GAC/Boc,EAAcF,EAAMlf,OACpBZ,EAAK8f,EAAMxT,QACX2T,EAAQpgB,EAAOqgB,YAAaxe,EAAMkC,GAClC8U,EAAO,WACN7Y,EAAOkgB,QAASre,EAAMkC,GAIZ,gBAAP5D,IACJA,EAAK8f,EAAMxT,QACX0T,KAGIhgB,IAIU,OAAT4D,GACJkc,EAAMnQ,QAAS,oBAITsQ,GAAME,KACbngB,EAAGc,KAAMY,EAAMgX,EAAMuH,KAGhBD,GAAeC,GACpBA,EAAMxM,MAAMsH,QAKdmF,YAAa,SAAUxe,EAAMkC,GAC5B,GAAIwI,GAAMxI,EAAO,YACjB,OAAOwb,GAAUre,IAAKW,EAAM0K,IAASgT,EAAUpB,OAAQtc,EAAM0K,GAC5DqH,MAAO5T,EAAOwa,UAAU,eAAef,IAAI,WAC1C8F,EAAUjE,OAAQzZ,GAAQkC,EAAO,QAASwI,WAM9CvM,EAAOG,GAAGsC,QACTwd,MAAO,SAAUlc,EAAMoX,GACtB,GAAIoF,GAAS,CAQb,OANqB,gBAATxc,KACXoX,EAAOpX,EACPA,EAAO,KACPwc,KAGIve,UAAUjB,OAASwf,EAChBvgB,EAAOigB,MAAO9gB,KAAK,GAAI4E,GAGfV,SAAT8X,EACNhc,KACAA,KAAKsC,KAAK,WACT,GAAIwe,GAAQjgB,EAAOigB,MAAO9gB,KAAM4E,EAAMoX,EAGtCnb,GAAOqgB,YAAalhB,KAAM4E,GAEZ,OAATA,GAA8B,eAAbkc,EAAM,IAC3BjgB,EAAOkgB,QAAS/gB,KAAM4E,MAI1Bmc,QAAS,SAAUnc,GAClB,MAAO5E,MAAKsC,KAAK,WAChBzB,EAAOkgB,QAAS/gB,KAAM4E,MAGxByc,WAAY,SAAUzc,GACrB,MAAO5E,MAAK8gB,MAAOlc,GAAQ,UAI5B+X,QAAS,SAAU/X,EAAMD,GACxB,GAAIuC,GACHoa,EAAQ,EACRC,EAAQ1gB,EAAO0b,WACf1L,EAAW7Q,KACX2C,EAAI3C,KAAK4B,OACTwb,EAAU,aACCkE,GACTC,EAAMrD,YAAarN,GAAYA,IAIb,iBAATjM,KACXD,EAAMC,EACNA,EAAOV,QAERU,EAAOA,GAAQ,IAEf,OAAQjC,IACPuE,EAAMkZ,EAAUre,IAAK8O,EAAUlO,GAAKiC,EAAO,cACtCsC,GAAOA,EAAIuN,QACf6M,IACApa,EAAIuN,MAAM6F,IAAK8C,GAIjB,OADAA,KACOmE,EAAM5E,QAAShY,KAGxB,IAAI6c,GAAO,sCAAwCC,OAE/CC,GAAc,MAAO,QAAS,SAAU,QAExCC,EAAW,SAAUjf,EAAMkf,GAI7B,MADAlf,GAAOkf,GAAMlf,EAC4B,SAAlC7B,EAAOghB,IAAKnf,EAAM,aAA2B7B,EAAOwH,SAAU3F,EAAKwJ,cAAexJ,IAGvFof,EAAiB,yBAIrB,WACC,GAAIC,GAAWniB,EAASoiB,yBACvBvU,EAAMsU,EAASnc,YAAahG,EAAS6F,cAAe,QACpDmK,EAAQhQ,EAAS6F,cAAe,QAKjCmK,GAAMjD,aAAc,OAAQ,SAC5BiD,EAAMjD,aAAc,UAAW,WAC/BiD,EAAMjD,aAAc,OAAQ,KAE5Bc,EAAI7H,YAAagK,GAIjBjP,EAAQshB,WAAaxU,EAAIyU,WAAW,GAAOA,WAAW,GAAOlP,UAAUsB,QAIvE7G,EAAI0B,UAAY,yBAChBxO,EAAQwhB,iBAAmB1U,EAAIyU,WAAW,GAAOlP,UAAUyF,eAE5D,IAAIzP,GAAe,WAInBrI,GAAQyhB,eAAiB,aAAeriB,EAGxC,IACCsiB,GAAY,OACZC,EAAc,uCACdC,EAAc,kCACdC,EAAiB,sBAElB,SAASC,KACR,OAAO,EAGR,QAASC,KACR,OAAO,EAGR,QAASC,KACR,IACC,MAAO/iB,GAASoU,cACf,MAAQ4O,KAOX/hB,EAAOgiB,OAENrjB,UAEA8a,IAAK,SAAU5X,EAAMogB,EAAOlV,EAASoO,EAAMlb,GAE1C,GAAIiiB,GAAaC,EAAa9b,EAC7B+b,EAAQC,EAAGC,EACXC,EAASC,EAAUze,EAAM0e,EAAYC,EACrCC,EAAWpD,EAAUre,IAAKW,EAG3B,IAAM8gB,EAAN,CAKK5V,EAAQA,UACZmV,EAAcnV,EACdA,EAAUmV,EAAYnV,QACtB9M,EAAWiiB,EAAYjiB,UAIlB8M,EAAQ5G,OACb4G,EAAQ5G,KAAOnG,EAAOmG,SAIhBic,EAASO,EAASP,UACxBA,EAASO,EAASP,YAEZD,EAAcQ,EAASC,UAC7BT,EAAcQ,EAASC,OAAS,SAAUjY,GAGzC,aAAc3K,KAAWmI,GAAgBnI,EAAOgiB,MAAMa,YAAclY,EAAE5G,KACrE/D,EAAOgiB,MAAMc,SAAS/gB,MAAOF,EAAMG,WAAcqB,SAKpD4e,GAAUA,GAAS,IAAKnX,MAAOqP,KAAiB,IAChDkI,EAAIJ,EAAMlhB,MACV,OAAQshB,IACPhc,EAAMsb,EAAerW,KAAM2W,EAAMI,QACjCte,EAAO2e,EAAWrc,EAAI,GACtBoc,GAAepc,EAAI,IAAM,IAAKG,MAAO,KAAMjE,OAGrCwB,IAKNwe,EAAUviB,EAAOgiB,MAAMO,QAASxe,OAGhCA,GAAS9D,EAAWsiB,EAAQQ,aAAeR,EAAQS,WAAcjf,EAGjEwe,EAAUviB,EAAOgiB,MAAMO,QAASxe,OAGhCue,EAAYtiB,EAAOyC,QAClBsB,KAAMA,EACN2e,SAAUA,EACVvH,KAAMA,EACNpO,QAASA,EACT5G,KAAM4G,EAAQ5G,KACdlG,SAAUA,EACV0J,aAAc1J,GAAYD,EAAO+P,KAAKjF,MAAMnB,aAAaiC,KAAM3L,GAC/DgjB,UAAWR,EAAWxW,KAAK,MACzBiW,IAGIM,EAAWJ,EAAQre,MACzBye,EAAWJ,EAAQre,MACnBye,EAASU,cAAgB,EAGnBX,EAAQY,OAASZ,EAAQY,MAAMliB,KAAMY,EAAMsZ,EAAMsH,EAAYN,MAAkB,GAC/EtgB,EAAKqM,kBACTrM,EAAKqM,iBAAkBnK,EAAMoe,GAAa,IAKxCI,EAAQ9I,MACZ8I,EAAQ9I,IAAIxY,KAAMY,EAAMygB,GAElBA,EAAUvV,QAAQ5G,OACvBmc,EAAUvV,QAAQ5G,KAAO4G,EAAQ5G,OAK9BlG,EACJuiB,EAAShgB,OAAQggB,EAASU,gBAAiB,EAAGZ,GAE9CE,EAAShjB,KAAM8iB,GAIhBtiB,EAAOgiB,MAAMrjB,OAAQoF,IAAS,KAMhCuX,OAAQ,SAAUzZ,EAAMogB,EAAOlV,EAAS9M,EAAUmjB,GAEjD,GAAI/gB,GAAGghB,EAAWhd,EACjB+b,EAAQC,EAAGC,EACXC,EAASC,EAAUze,EAAM0e,EAAYC,EACrCC,EAAWpD,EAAUF,QAASxd,IAAU0d,EAAUre,IAAKW,EAExD,IAAM8gB,IAAcP,EAASO,EAASP,QAAtC,CAKAH,GAAUA,GAAS,IAAKnX,MAAOqP,KAAiB,IAChDkI,EAAIJ,EAAMlhB,MACV,OAAQshB,IAMP,GALAhc,EAAMsb,EAAerW,KAAM2W,EAAMI,QACjCte,EAAO2e,EAAWrc,EAAI,GACtBoc,GAAepc,EAAI,IAAM,IAAKG,MAAO,KAAMjE,OAGrCwB,EAAN,CAOAwe,EAAUviB,EAAOgiB,MAAMO,QAASxe,OAChCA,GAAS9D,EAAWsiB,EAAQQ,aAAeR,EAAQS,WAAcjf,EACjEye,EAAWJ,EAAQre,OACnBsC,EAAMA,EAAI,IAAM,GAAIwC,QAAQ,UAAY4Z,EAAWxW,KAAK,iBAAmB,WAG3EoX,EAAYhhB,EAAImgB,EAASzhB,MACzB,OAAQsB,IACPigB,EAAYE,EAAUngB,IAEf+gB,GAAeV,IAAaJ,EAAUI,UACzC3V,GAAWA,EAAQ5G,OAASmc,EAAUnc,MACtCE,IAAOA,EAAIuF,KAAM0W,EAAUW,YAC3BhjB,GAAYA,IAAaqiB,EAAUriB,WAAyB,OAAbA,IAAqBqiB,EAAUriB,YACjFuiB,EAAShgB,OAAQH,EAAG,GAEfigB,EAAUriB,UACduiB,EAASU,gBAELX,EAAQjH,QACZiH,EAAQjH,OAAOra,KAAMY,EAAMygB,GAOzBe,KAAcb,EAASzhB,SACrBwhB,EAAQe,UAAYf,EAAQe,SAASriB,KAAMY,EAAM4gB,EAAYE,EAASC,WAAa,GACxF5iB,EAAOujB,YAAa1hB,EAAMkC,EAAM4e,EAASC,cAGnCR,GAAQre,QAtCf,KAAMA,IAAQqe,GACbpiB,EAAOgiB,MAAM1G,OAAQzZ,EAAMkC,EAAOke,EAAOI,GAAKtV,EAAS9M,GAAU,EA0C/DD,GAAOqE,cAAe+d,WACnBO,GAASC,OAChBrD,EAAUjE,OAAQzZ,EAAM,aAI1B2hB,QAAS,SAAUxB,EAAO7G,EAAMtZ,EAAM4hB,GAErC,GAAI3hB,GAAGoL,EAAK7G,EAAKqd,EAAYC,EAAQf,EAAQL,EAC5CqB,GAAc/hB,GAAQ9C,GACtBgF,EAAOnE,EAAOqB,KAAM+gB,EAAO,QAAWA,EAAMje,KAAOie,EACnDS,EAAa7iB,EAAOqB,KAAM+gB,EAAO,aAAgBA,EAAMiB,UAAUzc,MAAM,OAKxE,IAHA0G,EAAM7G,EAAMxE,EAAOA,GAAQ9C,EAGJ,IAAlB8C,EAAKuC,UAAoC,IAAlBvC,EAAKuC,WAK5Bsd,EAAY9V,KAAM7H,EAAO/D,EAAOgiB,MAAMa,aAItC9e,EAAKtE,QAAQ,MAAQ,IAEzBgjB,EAAa1e,EAAKyC,MAAM,KACxBzC,EAAO0e,EAAWhW,QAClBgW,EAAWlgB,QAEZohB,EAAS5f,EAAKtE,QAAQ,KAAO,GAAK,KAAOsE,EAGzCie,EAAQA,EAAOhiB,EAAOsD,SACrB0e,EACA,GAAIhiB,GAAO6jB,MAAO9f,EAAuB,gBAAVie,IAAsBA,GAGtDA,EAAM8B,UAAYL,EAAe,EAAI,EACrCzB,EAAMiB,UAAYR,EAAWxW,KAAK,KAClC+V,EAAM+B,aAAe/B,EAAMiB,UAC1B,GAAIpa,QAAQ,UAAY4Z,EAAWxW,KAAK,iBAAmB,WAC3D,KAGD+V,EAAMvQ,OAASpO,OACT2e,EAAMhf,SACXgf,EAAMhf,OAASnB,GAIhBsZ,EAAe,MAARA,GACJ6G,GACFhiB,EAAOwF,UAAW2V,GAAQ6G,IAG3BO,EAAUviB,EAAOgiB,MAAMO,QAASxe,OAC1B0f,IAAgBlB,EAAQiB,SAAWjB,EAAQiB,QAAQzhB,MAAOF,EAAMsZ,MAAW,GAAjF,CAMA,IAAMsI,IAAiBlB,EAAQyB,WAAahkB,EAAOiE,SAAUpC,GAAS,CAMrE,IAJA6hB,EAAanB,EAAQQ,cAAgBhf,EAC/B2d,EAAY9V,KAAM8X,EAAa3f,KACpCmJ,EAAMA,EAAIlI,YAEHkI,EAAKA,EAAMA,EAAIlI,WACtB4e,EAAUpkB,KAAM0N,GAChB7G,EAAM6G,CAIF7G,MAASxE,EAAKwJ,eAAiBtM,IACnC6kB,EAAUpkB,KAAM6G,EAAI2H,aAAe3H,EAAI4d,cAAgB/kB,GAKzD4C,EAAI,CACJ,QAASoL,EAAM0W,EAAU9hB,QAAUkgB,EAAMkC,uBAExClC,EAAMje,KAAOjC,EAAI,EAChB4hB,EACAnB,EAAQS,UAAYjf,EAGrB6e,GAAWrD,EAAUre,IAAKgM,EAAK,eAAoB8U,EAAMje,OAAUwb,EAAUre,IAAKgM,EAAK,UAClF0V,GACJA,EAAO7gB,MAAOmL,EAAKiO,GAIpByH,EAASe,GAAUzW,EAAKyW,GACnBf,GAAUA,EAAO7gB,OAAS/B,EAAOwe,WAAYtR,KACjD8U,EAAMvQ,OAASmR,EAAO7gB,MAAOmL,EAAKiO,GAC7B6G,EAAMvQ,UAAW,GACrBuQ,EAAMmC,iBAmCT,OA/BAnC,GAAMje,KAAOA,EAGP0f,GAAiBzB,EAAMoC,sBAErB7B,EAAQ8B,UAAY9B,EAAQ8B,SAAStiB,MAAO6hB,EAAUvb,MAAO8S,MAAW,IAC9Enb,EAAOwe,WAAY3c,IAId8hB,GAAU3jB,EAAOkD,WAAYrB,EAAMkC,MAAa/D,EAAOiE,SAAUpC,KAGrEwE,EAAMxE,EAAM8hB,GAEPtd,IACJxE,EAAM8hB,GAAW,MAIlB3jB,EAAOgiB,MAAMa,UAAY9e,EACzBlC,EAAMkC,KACN/D,EAAOgiB,MAAMa,UAAYxf,OAEpBgD,IACJxE,EAAM8hB,GAAWtd,IAMd2b,EAAMvQ,SAGdqR,SAAU,SAAUd,GAGnBA,EAAQhiB,EAAOgiB,MAAMsC,IAAKtC,EAE1B,IAAIlgB,GAAGO,EAAGf,EAAKiR,EAAS+P,EACvBiC,KACA5iB,EAAOrC,EAAM2B,KAAMe,WACnBwgB,GAAajD,EAAUre,IAAK/B,KAAM,eAAoB6iB,EAAMje,UAC5Dwe,EAAUviB,EAAOgiB,MAAMO,QAASP,EAAMje,SAOvC,IAJApC,EAAK,GAAKqgB,EACVA,EAAMwC,eAAiBrlB,MAGlBojB,EAAQkC,aAAelC,EAAQkC,YAAYxjB,KAAM9B,KAAM6iB,MAAY,EAAxE,CAKAuC,EAAevkB,EAAOgiB,MAAMQ,SAASvhB,KAAM9B,KAAM6iB,EAAOQ,GAGxD1gB,EAAI,CACJ,QAASyQ,EAAUgS,EAAcziB,QAAWkgB,EAAMkC,uBAAyB,CAC1ElC,EAAM0C,cAAgBnS,EAAQ1Q,KAE9BQ,EAAI,CACJ,QAASigB,EAAY/P,EAAQiQ,SAAUngB,QAAW2f,EAAM2C,kCAIjD3C,EAAM+B,cAAgB/B,EAAM+B,aAAanY,KAAM0W,EAAUW,cAE9DjB,EAAMM,UAAYA,EAClBN,EAAM7G,KAAOmH,EAAUnH,KAEvB7Z,IAAStB,EAAOgiB,MAAMO,QAASD,EAAUI,eAAkBE,QAAUN,EAAUvV,SAC5EhL,MAAOwQ,EAAQ1Q,KAAMF,GAEX0B,SAAR/B,IACE0gB,EAAMvQ,OAASnQ,MAAS,IAC7B0gB,EAAMmC,iBACNnC,EAAM4C,oBAYX,MAJKrC,GAAQsC,cACZtC,EAAQsC,aAAa5jB,KAAM9B,KAAM6iB,GAG3BA,EAAMvQ,SAGd+Q,SAAU,SAAUR,EAAOQ,GAC1B,GAAI1gB,GAAGkE,EAAS8e,EAAKxC,EACpBiC,KACArB,EAAgBV,EAASU,cACzBhW,EAAM8U,EAAMhf,MAKb,IAAKkgB,GAAiBhW,EAAI9I,YAAc4d,EAAMlO,QAAyB,UAAfkO,EAAMje,MAE7D,KAAQmJ,IAAQ/N,KAAM+N,EAAMA,EAAIlI,YAAc7F,KAG7C,GAAK+N,EAAIsG,YAAa,GAAuB,UAAfwO,EAAMje,KAAmB,CAEtD,IADAiC,KACMlE,EAAI,EAAOohB,EAAJphB,EAAmBA,IAC/BwgB,EAAYE,EAAU1gB,GAGtBgjB,EAAMxC,EAAUriB,SAAW,IAEHoD,SAAnB2C,EAAS8e,KACb9e,EAAS8e,GAAQxC,EAAU3Y,aAC1B3J,EAAQ8kB,EAAK3lB,MAAOoa,MAAOrM,IAAS,EACpClN,EAAO0O,KAAMoW,EAAK3lB,KAAM,MAAQ+N,IAAQnM,QAErCiF,EAAS8e,IACb9e,EAAQxG,KAAM8iB,EAGXtc,GAAQjF,QACZwjB,EAAa/kB,MAAOqC,KAAMqL,EAAKsV,SAAUxc,IAW7C,MAJKkd,GAAgBV,EAASzhB,QAC7BwjB,EAAa/kB,MAAOqC,KAAM1C,KAAMqjB,SAAUA,EAASljB,MAAO4jB,KAGpDqB,GAIRQ,MAAO,wHAAwHve,MAAM,KAErIwe,YAEAC,UACCF,MAAO,4BAA4Bve,MAAM,KACzCmI,OAAQ,SAAUqT,EAAOkD,GAOxB,MAJoB,OAAflD,EAAMmD,QACVnD,EAAMmD,MAA6B,MAArBD,EAASE,SAAmBF,EAASE,SAAWF,EAASG,SAGjErD,IAITsD,YACCP,MAAO,uFAAuFve,MAAM,KACpGmI,OAAQ,SAAUqT,EAAOkD,GACxB,GAAIK,GAAUzX,EAAK0X,EAClB1R,EAASoR,EAASpR,MAkBnB,OAfoB,OAAfkO,EAAMyD,OAAqC,MAApBP,EAASQ,UACpCH,EAAWvD,EAAMhf,OAAOqI,eAAiBtM,EACzC+O,EAAMyX,EAAS5X,gBACf6X,EAAOD,EAASC,KAEhBxD,EAAMyD,MAAQP,EAASQ,SAAY5X,GAAOA,EAAI6X,YAAcH,GAAQA,EAAKG,YAAc,IAAQ7X,GAAOA,EAAI8X,YAAcJ,GAAQA,EAAKI,YAAc,GACnJ5D,EAAM6D,MAAQX,EAASY,SAAYhY,GAAOA,EAAIiY,WAAcP,GAAQA,EAAKO,WAAc,IAAQjY,GAAOA,EAAIkY,WAAcR,GAAQA,EAAKQ,WAAc,IAK9IhE,EAAMmD,OAAoB9hB,SAAXyQ,IACpBkO,EAAMmD,MAAmB,EAATrR,EAAa,EAAe,EAATA,EAAa,EAAe,EAATA,EAAa,EAAI,GAGjEkO,IAITsC,IAAK,SAAUtC,GACd,GAAKA,EAAOhiB,EAAOsD,SAClB,MAAO0e,EAIR,IAAIlgB,GAAGod,EAAMrc,EACZkB,EAAOie,EAAMje,KACbkiB,EAAgBjE,EAChBkE,EAAU/mB,KAAK6lB,SAAUjhB,EAEpBmiB,KACL/mB,KAAK6lB,SAAUjhB,GAASmiB,EACvBzE,EAAY7V,KAAM7H,GAAS5E,KAAKmmB,WAChC9D,EAAU5V,KAAM7H,GAAS5E,KAAK8lB,aAGhCpiB,EAAOqjB,EAAQnB,MAAQ5lB,KAAK4lB,MAAMxlB,OAAQ2mB,EAAQnB,OAAU5lB,KAAK4lB,MAEjE/C,EAAQ,GAAIhiB,GAAO6jB,MAAOoC,GAE1BnkB,EAAIe,EAAK9B,MACT,OAAQe,IACPod,EAAOrc,EAAMf,GACbkgB,EAAO9C,GAAS+G,EAAe/G,EAehC,OAVM8C,GAAMhf,SACXgf,EAAMhf,OAASjE,GAKe,IAA1BijB,EAAMhf,OAAOoB,WACjB4d,EAAMhf,OAASgf,EAAMhf,OAAOgC,YAGtBkhB,EAAQvX,OAASuX,EAAQvX,OAAQqT,EAAOiE,GAAkBjE,GAGlEO,SACC4D,MAECnC,UAAU,GAEX9Q,OAECsQ,QAAS,WACR,MAAKrkB,QAAS2iB,KAAuB3iB,KAAK+T,OACzC/T,KAAK+T,SACE,GAFR,QAKD6P,aAAc,WAEfqD,MACC5C,QAAS,WACR,MAAKrkB,QAAS2iB,KAAuB3iB,KAAKinB,MACzCjnB,KAAKinB,QACE,GAFR,QAKDrD,aAAc,YAEfsD,OAEC7C,QAAS,WACR,MAAmB,aAAdrkB,KAAK4E,MAAuB5E,KAAKknB,OAASrmB,EAAOoF,SAAUjG,KAAM,UACrEA,KAAKknB,SACE,GAFR,QAODhC,SAAU,SAAUrC,GACnB,MAAOhiB,GAAOoF,SAAU4c,EAAMhf,OAAQ,OAIxCsjB,cACCzB,aAAc,SAAU7C,GAID3e,SAAjB2e,EAAMvQ,QAAwBuQ,EAAMiE,gBACxCjE,EAAMiE,cAAcM,YAAcvE,EAAMvQ,WAM5C+U,SAAU,SAAUziB,EAAMlC,EAAMmgB,EAAOyE,GAItC,GAAI9b,GAAI3K,EAAOyC,OACd,GAAIzC,GAAO6jB,MACX7B,GAECje,KAAMA,EACN2iB,aAAa,EACbT,kBAGGQ,GACJzmB,EAAOgiB,MAAMwB,QAAS7Y,EAAG,KAAM9I,GAE/B7B,EAAOgiB,MAAMc,SAAS7hB,KAAMY,EAAM8I,GAE9BA,EAAEyZ,sBACNpC,EAAMmC,mBAKTnkB,EAAOujB,YAAc,SAAU1hB,EAAMkC,EAAM6e,GACrC/gB,EAAKmc,qBACTnc,EAAKmc,oBAAqBja,EAAM6e,GAAQ,IAI1C5iB,EAAO6jB,MAAQ,SAAUjhB,EAAKmiB,GAE7B,MAAO5lB,gBAAgBa,GAAO6jB,OAKzBjhB,GAAOA,EAAImB,MACf5E,KAAK8mB,cAAgBrjB,EACrBzD,KAAK4E,KAAOnB,EAAImB,KAIhB5E,KAAKilB,mBAAqBxhB,EAAI+jB,kBACHtjB,SAAzBT,EAAI+jB,kBAEJ/jB,EAAI2jB,eAAgB,EACrB3E,EACAC,GAID1iB,KAAK4E,KAAOnB,EAIRmiB,GACJ/kB,EAAOyC,OAAQtD,KAAM4lB,GAItB5lB,KAAKynB,UAAYhkB,GAAOA,EAAIgkB,WAAa5mB,EAAOsG,WAGhDnH,KAAMa,EAAOsD,UAAY,IA/BjB,GAAItD,GAAO6jB,MAAOjhB,EAAKmiB,IAoChC/kB,EAAO6jB,MAAMjjB,WACZwjB,mBAAoBvC,EACpBqC,qBAAsBrC,EACtB8C,8BAA+B9C,EAE/BsC,eAAgB,WACf,GAAIxZ,GAAIxL,KAAK8mB,aAEb9mB,MAAKilB,mBAAqBxC,EAErBjX,GAAKA,EAAEwZ,gBACXxZ,EAAEwZ,kBAGJS,gBAAiB,WAChB,GAAIja,GAAIxL,KAAK8mB,aAEb9mB,MAAK+kB,qBAAuBtC,EAEvBjX,GAAKA,EAAEia,iBACXja,EAAEia,mBAGJiC,yBAA0B,WACzB,GAAIlc,GAAIxL,KAAK8mB,aAEb9mB,MAAKwlB,8BAAgC/C,EAEhCjX,GAAKA,EAAEkc,0BACXlc,EAAEkc,2BAGH1nB,KAAKylB,oBAMP5kB,EAAOyB,MACNqlB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,cACZ,SAAUC,EAAM5C,GAClBtkB,EAAOgiB,MAAMO,QAAS2E,IACrBnE,aAAcuB,EACdtB,SAAUsB,EAEV1B,OAAQ,SAAUZ,GACjB,GAAI1gB,GACH0B,EAAS7D,KACTgoB,EAAUnF,EAAMoF,cAChB9E,EAAYN,EAAMM,SASnB,SALM6E,GAAYA,IAAYnkB,IAAWhD,EAAOwH,SAAUxE,EAAQmkB,MACjEnF,EAAMje,KAAOue,EAAUI,SACvBphB,EAAMghB,EAAUvV,QAAQhL,MAAO5C,KAAM6C,WACrCggB,EAAMje,KAAOugB,GAEPhjB,MAOJxB,EAAQyhB,gBACbvhB,EAAOyB,MAAOyR,MAAO,UAAWkT,KAAM,YAAc,SAAUc,EAAM5C,GAGnE,GAAIvX,GAAU,SAAUiV,GACtBhiB,EAAOgiB,MAAMwE,SAAUlC,EAAKtC,EAAMhf,OAAQhD,EAAOgiB,MAAMsC,IAAKtC,IAAS,GAGvEhiB,GAAOgiB,MAAMO,QAAS+B,IACrBnB,MAAO,WACN,GAAIrV,GAAM3O,KAAKkM,eAAiBlM,KAC/BkoB,EAAW9H,EAAUpB,OAAQrQ,EAAKwW,EAE7B+C,IACLvZ,EAAII,iBAAkBgZ,EAAMna,GAAS,GAEtCwS,EAAUpB,OAAQrQ,EAAKwW,GAAO+C,GAAY,GAAM,IAEjD/D,SAAU,WACT,GAAIxV,GAAM3O,KAAKkM,eAAiBlM,KAC/BkoB,EAAW9H,EAAUpB,OAAQrQ,EAAKwW,GAAQ,CAErC+C,GAKL9H,EAAUpB,OAAQrQ,EAAKwW,EAAK+C,IAJ5BvZ,EAAIkQ,oBAAqBkJ,EAAMna,GAAS,GACxCwS,EAAUjE,OAAQxN,EAAKwW,QAU5BtkB,EAAOG,GAAGsC,QAET6kB,GAAI,SAAUrF,EAAOhiB,EAAUkb,EAAMhb,EAAiBonB,GACrD,GAAIC,GAAQzjB,CAGZ,IAAsB,gBAAVke,GAAqB,CAEP,gBAAbhiB,KAEXkb,EAAOA,GAAQlb,EACfA,EAAWoD,OAEZ,KAAMU,IAAQke,GACb9iB,KAAKmoB,GAAIvjB,EAAM9D,EAAUkb,EAAM8G,EAAOle,GAAQwjB,EAE/C,OAAOpoB,MAmBR,GAhBa,MAARgc,GAAsB,MAANhb,GAEpBA,EAAKF,EACLkb,EAAOlb,EAAWoD,QACD,MAANlD,IACc,gBAAbF,IAEXE,EAAKgb,EACLA,EAAO9X,SAGPlD,EAAKgb,EACLA,EAAOlb,EACPA,EAAWoD,SAGRlD,KAAO,EACXA,EAAK0hB,MACC,KAAM1hB,EACZ,MAAOhB,KAaR,OAVa,KAARooB,IACJC,EAASrnB,EACTA,EAAK,SAAU6hB,GAGd,MADAhiB,KAAS8d,IAAKkE,GACPwF,EAAOzlB,MAAO5C,KAAM6C,YAG5B7B,EAAGgG,KAAOqhB,EAAOrhB,OAAUqhB,EAAOrhB,KAAOnG,EAAOmG,SAE1ChH,KAAKsC,KAAM,WACjBzB,EAAOgiB,MAAMvI,IAAKta,KAAM8iB,EAAO9hB,EAAIgb,EAAMlb,MAG3CsnB,IAAK,SAAUtF,EAAOhiB,EAAUkb,EAAMhb,GACrC,MAAOhB,MAAKmoB,GAAIrF,EAAOhiB,EAAUkb,EAAMhb,EAAI,IAE5C2d,IAAK,SAAUmE,EAAOhiB,EAAUE,GAC/B,GAAImiB,GAAWve,CACf,IAAKke,GAASA,EAAMkC,gBAAkBlC,EAAMK,UAQ3C,MANAA,GAAYL,EAAMK,UAClBtiB,EAAQiiB,EAAMuC,gBAAiB1G,IAC9BwE,EAAUW,UAAYX,EAAUI,SAAW,IAAMJ,EAAUW,UAAYX,EAAUI,SACjFJ,EAAUriB,SACVqiB,EAAUvV,SAEJ5N,IAER,IAAsB,gBAAV8iB,GAAqB,CAEhC,IAAMle,IAAQke,GACb9iB,KAAK2e,IAAK/Z,EAAM9D,EAAUgiB,EAAOle,GAElC,OAAO5E,MAUR,OARKc,KAAa,GAA6B,kBAAbA,MAEjCE,EAAKF,EACLA,EAAWoD,QAEPlD,KAAO,IACXA,EAAK0hB,GAEC1iB,KAAKsC,KAAK,WAChBzB,EAAOgiB,MAAM1G,OAAQnc,KAAM8iB,EAAO9hB,EAAIF,MAIxCujB,QAAS,SAAUzf,EAAMoX,GACxB,MAAOhc,MAAKsC,KAAK,WAChBzB,EAAOgiB,MAAMwB,QAASzf,EAAMoX,EAAMhc,SAGpC0e,eAAgB,SAAU9Z,EAAMoX,GAC/B,GAAItZ,GAAO1C,KAAK,EAChB,OAAK0C,GACG7B,EAAOgiB,MAAMwB,QAASzf,EAAMoX,EAAMtZ,GAAM,GADhD,SAOF,IACC4lB,IAAY,0EACZC,GAAW,YACXC,GAAQ,YACRC,GAAe,0BAEfC,GAAW,oCACXC,GAAc,4BACdC,GAAoB,cACpBC,GAAe,2CAGfC,IAGCC,QAAU,EAAG,+BAAgC,aAE7CC,OAAS,EAAG,UAAW,YACvBC,KAAO,EAAG,oBAAqB,uBAC/BC,IAAM,EAAG,iBAAkB,oBAC3BC,IAAM,EAAG,qBAAsB,yBAE/BjE,UAAY,EAAG,GAAI,IAIrB4D,IAAQM,SAAWN,GAAQC,OAE3BD,GAAQO,MAAQP,GAAQQ,MAAQR,GAAQS,SAAWT,GAAQU,QAAUV,GAAQE,MAC7EF,GAAQW,GAAKX,GAAQK,EAIrB,SAASO,IAAoBhnB,EAAMinB,GAClC,MAAO9oB,GAAOoF,SAAUvD,EAAM,UAC7B7B,EAAOoF,SAA+B,KAArB0jB,EAAQ1kB,SAAkB0kB,EAAUA,EAAQva,WAAY,MAEzE1M,EAAK4J,qBAAqB,SAAS,IAClC5J,EAAKkD,YAAalD,EAAKwJ,cAAczG,cAAc,UACpD/C,EAIF,QAASknB,IAAelnB,GAEvB,MADAA,GAAKkC,MAAsC,OAA9BlC,EAAKgK,aAAa,SAAoB,IAAMhK,EAAKkC,KACvDlC,EAER,QAASmnB,IAAennB,GACvB,GAAIiJ,GAAQid,GAAkBzc,KAAMzJ,EAAKkC,KAQzC,OANK+G,GACJjJ,EAAKkC,KAAO+G,EAAO,GAEnBjJ,EAAKuK,gBAAgB,QAGfvK,EAIR,QAASonB,IAAe5nB,EAAO6nB,GAI9B,IAHA,GAAIpnB,GAAI,EACPsX,EAAI/X,EAAMN,OAECqY,EAAJtX,EAAOA,IACdyd,EAAUN,IACT5d,EAAOS,GAAK,cAAeonB,GAAe3J,EAAUre,IAAKgoB,EAAapnB,GAAK,eAK9E,QAASqnB,IAAgBvmB,EAAKwmB,GAC7B,GAAItnB,GAAGsX,EAAGrV,EAAMslB,EAAUC,EAAUC,EAAUC,EAAUpH,CAExD,IAAuB,IAAlBgH,EAAKhlB,SAAV,CAKA,GAAKmb,EAAUF,QAASzc,KACvBymB,EAAW9J,EAAUpB,OAAQvb,GAC7B0mB,EAAW/J,EAAUN,IAAKmK,EAAMC,GAChCjH,EAASiH,EAASjH,QAEJ,OACNkH,GAAS1G,OAChB0G,EAASlH,SAET,KAAMre,IAAQqe,GACb,IAAMtgB,EAAI,EAAGsX,EAAIgJ,EAAQre,GAAOhD,OAAYqY,EAAJtX,EAAOA,IAC9C9B,EAAOgiB,MAAMvI,IAAK2P,EAAMrlB,EAAMqe,EAAQre,GAAQjC,IAO7C0d,EAAUH,QAASzc,KACvB2mB,EAAW/J,EAAUrB,OAAQvb,GAC7B4mB,EAAWxpB,EAAOyC,UAAY8mB,GAE9B/J,EAAUP,IAAKmK,EAAMI,KAIvB,QAASC,IAAQvpB,EAAS4O,GACzB,GAAIxN,GAAMpB,EAAQuL,qBAAuBvL,EAAQuL,qBAAsBqD,GAAO,KAC5E5O,EAAQgM,iBAAmBhM,EAAQgM,iBAAkB4C,GAAO,OAG9D,OAAezL,UAARyL,GAAqBA,GAAO9O,EAAOoF,SAAUlF,EAAS4O,GAC5D9O,EAAOuB,OAASrB,GAAWoB,GAC3BA,EAIF,QAASooB,IAAU9mB,EAAKwmB,GACvB,GAAIhkB,GAAWgkB,EAAKhkB,SAASC,aAGX,WAAbD,GAAwB6b,EAAerV,KAAMhJ,EAAImB,MACrDqlB,EAAK3V,QAAU7Q,EAAI6Q,SAGK,UAAbrO,GAAqC,aAAbA,KACnCgkB,EAAKxR,aAAehV,EAAIgV,cAI1B5X,EAAOyC,QACNM,MAAO,SAAUlB,EAAM8nB,EAAeC,GACrC,GAAI9nB,GAAGsX,EAAGyQ,EAAaC,EACtB/mB,EAAQlB,EAAKwf,WAAW,GACxB0I,EAAS/pB,EAAOwH,SAAU3F,EAAKwJ,cAAexJ,EAI/C,MAAM/B,EAAQwhB,gBAAsC,IAAlBzf,EAAKuC,UAAoC,KAAlBvC,EAAKuC,UAC3DpE,EAAO8X,SAAUjW,IAMnB,IAHAioB,EAAeL,GAAQ1mB,GACvB8mB,EAAcJ,GAAQ5nB,GAEhBC,EAAI,EAAGsX,EAAIyQ,EAAY9oB,OAAYqY,EAAJtX,EAAOA,IAC3C4nB,GAAUG,EAAa/nB,GAAKgoB,EAAchoB,GAK5C,IAAK6nB,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAeJ,GAAQ5nB,GACrCioB,EAAeA,GAAgBL,GAAQ1mB,GAEjCjB,EAAI,EAAGsX,EAAIyQ,EAAY9oB,OAAYqY,EAAJtX,EAAOA,IAC3CqnB,GAAgBU,EAAa/nB,GAAKgoB,EAAchoB,QAGjDqnB,IAAgBtnB,EAAMkB,EAWxB,OANA+mB,GAAeL,GAAQ1mB,EAAO,UACzB+mB,EAAa/oB,OAAS,GAC1BkoB,GAAea,GAAeC,GAAUN,GAAQ5nB,EAAM,WAIhDkB,GAGRinB,cAAe,SAAU3oB,EAAOnB,EAAS+pB,EAASC,GAOjD,IANA,GAAIroB,GAAMwE,EAAKyI,EAAKqb,EAAM3iB,EAAUnF,EACnC6e,EAAWhhB,EAAQihB,yBACnBiJ,KACAtoB,EAAI,EACJsX,EAAI/X,EAAMN,OAECqY,EAAJtX,EAAOA,IAGd,GAFAD,EAAOR,EAAOS,GAETD,GAAiB,IAATA,EAGZ,GAA6B,WAAxB7B,EAAO+D,KAAMlC,GAGjB7B,EAAOuB,MAAO6oB,EAAOvoB,EAAKuC,UAAavC,GAASA,OAG1C,IAAM8lB,GAAM/b,KAAM/J,GAIlB,CACNwE,EAAMA,GAAO6a,EAASnc,YAAa7E,EAAQ0E,cAAc,QAGzDkK,GAAQ4Y,GAASpc,KAAMzJ,KAAY,GAAI,KAAQ,GAAIwD,cACnD8kB,EAAOlC,GAASnZ,IAASmZ,GAAQ5D,SACjChe,EAAIiI,UAAY6b,EAAM,GAAMtoB,EAAK4B,QAASgkB,GAAW,aAAgB0C,EAAM,GAG3E9nB,EAAI8nB,EAAM,EACV,OAAQ9nB,IACPgE,EAAMA,EAAI8L,SAKXnS,GAAOuB,MAAO6oB,EAAO/jB,EAAIqE,YAGzBrE,EAAM6a,EAAS3S,WAIflI,EAAImK,YAAc,OA1BlB4Z,GAAM5qB,KAAMU,EAAQmqB,eAAgBxoB,GAgCvCqf,GAAS1Q,YAAc,GAEvB1O,EAAI,CACJ,OAASD,EAAOuoB,EAAOtoB,KAItB,KAAKooB,GAAmD,KAAtClqB,EAAO2F,QAAS9D,EAAMqoB,MAIxC1iB,EAAWxH,EAAOwH,SAAU3F,EAAKwJ,cAAexJ,GAGhDwE,EAAMojB,GAAQvI,EAASnc,YAAalD,GAAQ,UAGvC2F,GACJyhB,GAAe5iB,GAIX4jB,GAAU,CACd5nB,EAAI,CACJ,OAASR,EAAOwE,EAAKhE,KACfylB,GAAYlc,KAAM/J,EAAKkC,MAAQ,KACnCkmB,EAAQzqB,KAAMqC,GAMlB,MAAOqf,IAGRoJ,UAAW,SAAUjpB,GAKpB,IAJA,GAAI8Z,GAAMtZ,EAAMkC,EAAMwI,EACrBgW,EAAUviB,EAAOgiB,MAAMO,QACvBzgB,EAAI,EAE2BuB,UAAvBxB,EAAOR,EAAOS,IAAoBA,IAAM,CAChD,GAAK9B,EAAOwe,WAAY3c,KACvB0K,EAAM1K,EAAM0d,EAAUjc,SAEjBiJ,IAAQ4O,EAAOoE,EAAUjT,MAAOC,KAAS,CAC7C,GAAK4O,EAAKiH,OACT,IAAMre,IAAQoX,GAAKiH,OACbG,EAASxe,GACb/D,EAAOgiB,MAAM1G,OAAQzZ,EAAMkC,GAI3B/D,EAAOujB,YAAa1hB,EAAMkC,EAAMoX,EAAKyH,OAInCrD,GAAUjT,MAAOC,UAEdgT,GAAUjT,MAAOC,SAKpBiT,GAAUlT,MAAOzK,EAAM2d,EAAUlc,cAK3CtD,EAAOG,GAAGsC,QACToC,KAAM,SAAUS,GACf,MAAO6Y,GAAQhf,KAAM,SAAUmG,GAC9B,MAAiBjC,UAAViC,EACNtF,EAAO6E,KAAM1F,MACbA,KAAKyU,QAAQnS,KAAK,YACM,IAAlBtC,KAAKiF,UAAoC,KAAlBjF,KAAKiF,UAAqC,IAAlBjF,KAAKiF,YACxDjF,KAAKqR,YAAclL,MAGpB,KAAMA,EAAOtD,UAAUjB,SAG3BwpB,OAAQ,WACP,MAAOprB,MAAKqrB,SAAUxoB,UAAW,SAAUH,GAC1C,GAAuB,IAAlB1C,KAAKiF,UAAoC,KAAlBjF,KAAKiF,UAAqC,IAAlBjF,KAAKiF,SAAiB,CACzE,GAAIpB,GAAS6lB,GAAoB1pB,KAAM0C,EACvCmB,GAAO+B,YAAalD,OAKvB4oB,QAAS,WACR,MAAOtrB,MAAKqrB,SAAUxoB,UAAW,SAAUH,GAC1C,GAAuB,IAAlB1C,KAAKiF,UAAoC,KAAlBjF,KAAKiF,UAAqC,IAAlBjF,KAAKiF,SAAiB,CACzE,GAAIpB,GAAS6lB,GAAoB1pB,KAAM0C,EACvCmB,GAAO0nB,aAAc7oB,EAAMmB,EAAOuL,gBAKrCoc,OAAQ,WACP,MAAOxrB,MAAKqrB,SAAUxoB,UAAW,SAAUH,GACrC1C,KAAK6F,YACT7F,KAAK6F,WAAW0lB,aAAc7oB,EAAM1C,SAKvCyrB,MAAO,WACN,MAAOzrB,MAAKqrB,SAAUxoB,UAAW,SAAUH,GACrC1C,KAAK6F,YACT7F,KAAK6F,WAAW0lB,aAAc7oB,EAAM1C,KAAKkO,gBAK5CiO,OAAQ,SAAUrb,EAAU4qB,GAK3B,IAJA,GAAIhpB,GACHR,EAAQpB,EAAWD,EAAO2O,OAAQ1O,EAAUd,MAASA,KACrD2C,EAAI,EAEwB,OAApBD,EAAOR,EAAMS,IAAaA,IAC5B+oB,GAA8B,IAAlBhpB,EAAKuC,UACtBpE,EAAOsqB,UAAWb,GAAQ5nB,IAGtBA,EAAKmD,aACJ6lB,GAAY7qB,EAAOwH,SAAU3F,EAAKwJ,cAAexJ,IACrDonB,GAAeQ,GAAQ5nB,EAAM,WAE9BA,EAAKmD,WAAWC,YAAapD,GAI/B,OAAO1C,OAGRyU,MAAO,WAIN,IAHA,GAAI/R,GACHC,EAAI,EAEuB,OAAnBD,EAAO1C,KAAK2C,IAAaA,IACV,IAAlBD,EAAKuC,WAGTpE,EAAOsqB,UAAWb,GAAQ5nB,GAAM,IAGhCA,EAAK2O,YAAc,GAIrB,OAAOrR,OAGR4D,MAAO,SAAU4mB,EAAeC,GAI/B,MAHAD,GAAiC,MAAjBA,GAAwB,EAAQA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDzqB,KAAKyC,IAAI,WACf,MAAO5B,GAAO+C,MAAO5D,KAAMwqB,EAAeC,MAI5CkB,KAAM,SAAUxlB,GACf,MAAO6Y,GAAQhf,KAAM,SAAUmG,GAC9B,GAAIzD,GAAO1C,KAAM,OAChB2C,EAAI,EACJsX,EAAIja,KAAK4B,MAEV,IAAesC,SAAViC,GAAyC,IAAlBzD,EAAKuC,SAChC,MAAOvC,GAAKyM,SAIb,IAAsB,gBAAVhJ,KAAuBsiB,GAAahc,KAAMtG,KACpD2iB,IAAWP,GAASpc,KAAMhG,KAAa,GAAI,KAAQ,GAAID,eAAkB,CAE1EC,EAAQA,EAAM7B,QAASgkB,GAAW,YAElC,KACC,KAAYrO,EAAJtX,EAAOA,IACdD,EAAO1C,KAAM2C,OAGU,IAAlBD,EAAKuC,WACTpE,EAAOsqB,UAAWb,GAAQ5nB,GAAM,IAChCA,EAAKyM,UAAYhJ,EAInBzD,GAAO,EAGN,MAAO8I,KAGL9I,GACJ1C,KAAKyU,QAAQ2W,OAAQjlB,IAEpB,KAAMA,EAAOtD,UAAUjB,SAG3BgqB,YAAa,WACZ,GAAI7kB,GAAMlE,UAAW,EAcrB,OAXA7C,MAAKqrB,SAAUxoB,UAAW,SAAUH,GACnCqE,EAAM/G,KAAK6F,WAEXhF,EAAOsqB,UAAWb,GAAQtqB,OAErB+G,GACJA,EAAI8kB,aAAcnpB,EAAM1C,QAKnB+G,IAAQA,EAAInF,QAAUmF,EAAI9B,UAAYjF,KAAOA,KAAKmc,UAG1D2P,OAAQ,SAAUhrB,GACjB,MAAOd,MAAKmc,OAAQrb,GAAU,IAG/BuqB,SAAU,SAAU7oB,EAAMD,GAGzBC,EAAOpC,EAAOwC,SAAWJ,EAEzB,IAAIuf,GAAUjf,EAAOgoB,EAASiB,EAAYtd,EAAME,EAC/ChM,EAAI,EACJsX,EAAIja,KAAK4B,OACTke,EAAM9f,KACNgsB,EAAW/R,EAAI,EACf9T,EAAQ3D,EAAM,GACduB,EAAalD,EAAOkD,WAAYoC,EAGjC,IAAKpC,GACDkW,EAAI,GAAsB,gBAAV9T,KAChBxF,EAAQshB,YAAcyG,GAASjc,KAAMtG,GACxC,MAAOnG,MAAKsC,KAAK,SAAU8X,GAC1B,GAAInB,GAAO6G,EAAI/c,GAAIqX,EACdrW,KACJvB,EAAM,GAAM2D,EAAMrE,KAAM9B,KAAMoa,EAAOnB,EAAK0S,SAE3C1S,EAAKoS,SAAU7oB,EAAMD,IAIvB,IAAK0X,IACJ8H,EAAWlhB,EAAOgqB,cAAeroB,EAAMxC,KAAM,GAAIkM,eAAe,EAAOlM,MACvE8C,EAAQif,EAAS3S,WAEmB,IAA/B2S,EAASxW,WAAW3J,SACxBmgB,EAAWjf,GAGPA,GAAQ,CAMZ,IALAgoB,EAAUjqB,EAAO4B,IAAK6nB,GAAQvI,EAAU,UAAY6H,IACpDmC,EAAajB,EAAQlpB,OAITqY,EAAJtX,EAAOA,IACd8L,EAAOsT,EAEFpf,IAAMqpB,IACVvd,EAAO5N,EAAO+C,MAAO6K,GAAM,GAAM,GAG5Bsd,GAGJlrB,EAAOuB,MAAO0oB,EAASR,GAAQ7b,EAAM,YAIvClM,EAAST,KAAM9B,KAAM2C,GAAK8L,EAAM9L,EAGjC,IAAKopB,EAOJ,IANApd,EAAMmc,EAASA,EAAQlpB,OAAS,GAAIsK,cAGpCrL,EAAO4B,IAAKqoB,EAASjB,IAGflnB,EAAI,EAAOopB,EAAJppB,EAAgBA,IAC5B8L,EAAOqc,EAASnoB,GACXgmB,GAAYlc,KAAMgC,EAAK7J,MAAQ,MAClCwb,EAAUpB,OAAQvQ,EAAM,eAAkB5N,EAAOwH,SAAUsG,EAAKF,KAE5DA,EAAKhL,IAEJ5C,EAAOorB,UACXprB,EAAOorB,SAAUxd,EAAKhL,KAGvB5C,EAAOsE,WAAYsJ,EAAK4C,YAAY/M,QAASukB,GAAc,MAQjE,MAAO7oB,SAITa,EAAOyB,MACN4pB,SAAU,SACVC,UAAW,UACXZ,aAAc,SACda,YAAa,QACbC,WAAY,eACV,SAAU7oB,EAAMuiB,GAClBllB,EAAOG,GAAIwC,GAAS,SAAU1C,GAO7B,IANA,GAAIoB,GACHC,KACAmqB,EAASzrB,EAAQC,GACjBkC,EAAOspB,EAAO1qB,OAAS,EACvBe,EAAI,EAEQK,GAALL,EAAWA,IAClBT,EAAQS,IAAMK,EAAOhD,KAAOA,KAAK4D,OAAO,GACxC/C,EAAQyrB,EAAQ3pB,IAAOojB,GAAY7jB,GAInC7B,EAAKuC,MAAOT,EAAKD,EAAMH,MAGxB,OAAO/B,MAAKiC,UAAWE,KAKzB,IAAIoqB,IACHC,KAQD,SAASC,IAAejpB,EAAMmL,GAC7B,GAAI+d,GACHhqB,EAAO7B,EAAQ8N,EAAIlJ,cAAejC,IAAS0oB,SAAUvd,EAAI0X,MAGzDsG,EAAU5sB,EAAO6sB,0BAA6BF,EAAQ3sB,EAAO6sB,wBAAyBlqB,EAAM,KAI3FgqB,EAAMC,QAAU9rB,EAAOghB,IAAKnf,EAAM,GAAK,UAMzC,OAFAA,GAAKopB,SAEEa,EAOR,QAASE,IAAgB5mB,GACxB,GAAI0I,GAAM/O,EACT+sB,EAAUH,GAAavmB,EA0BxB,OAxBM0mB,KACLA,EAAUF,GAAexmB,EAAU0I,GAGlB,SAAZge,GAAuBA,IAG3BJ,IAAUA,IAAU1rB,EAAQ,mDAAoDqrB,SAAUvd,EAAIH,iBAG9FG,EAAM4d,GAAQ,GAAIzR,gBAGlBnM,EAAIme,QACJne,EAAIoe,QAEJJ,EAAUF,GAAexmB,EAAU0I,GACnC4d,GAAOT,UAIRU,GAAavmB,GAAa0mB,GAGpBA,EAER,GAAIK,IAAU,UAEVC,GAAY,GAAIvjB,QAAQ,KAAO8X,EAAO,kBAAmB,KAEzD0L,GAAY,SAAUxqB,GACxB,MAAOA,GAAKwJ,cAAc2C,YAAYse,iBAAkBzqB,EAAM,MAKhE,SAAS0qB,IAAQ1qB,EAAMc,EAAM6pB,GAC5B,GAAIC,GAAOC,EAAUC,EAAUrrB,EAC9BuqB,EAAQhqB,EAAKgqB,KAsCd,OApCAW,GAAWA,GAAYH,GAAWxqB,GAI7B2qB,IACJlrB,EAAMkrB,EAASI,iBAAkBjqB,IAAU6pB,EAAU7pB,IAGjD6pB,IAES,KAARlrB,GAAetB,EAAOwH,SAAU3F,EAAKwJ,cAAexJ,KACxDP,EAAMtB,EAAO6rB,MAAOhqB,EAAMc,IAOtBypB,GAAUxgB,KAAMtK,IAAS6qB,GAAQvgB,KAAMjJ,KAG3C8pB,EAAQZ,EAAMY,MACdC,EAAWb,EAAMa,SACjBC,EAAWd,EAAMc,SAGjBd,EAAMa,SAAWb,EAAMc,SAAWd,EAAMY,MAAQnrB,EAChDA,EAAMkrB,EAASC,MAGfZ,EAAMY,MAAQA,EACdZ,EAAMa,SAAWA,EACjBb,EAAMc,SAAWA,IAIJtpB,SAAR/B,EAGNA,EAAM,GACNA,EAIF,QAASurB,IAAcC,EAAaC,GAEnC,OACC7rB,IAAK,WACJ,MAAK4rB,gBAIG3tB,MAAK+B,KAML/B,KAAK+B,IAAM6rB,GAAQhrB,MAAO5C,KAAM6C,cAM3C,WACC,GAAIgrB,GAAkBC,EACrB7lB,EAAUrI,EAAS4O,gBACnBuf,EAAYnuB,EAAS6F,cAAe,OACpCgI,EAAM7N,EAAS6F,cAAe,MAE/B,IAAMgI,EAAIif,MAAV,CAIAjf,EAAIif,MAAMsB,eAAiB,cAC3BvgB,EAAIyU,WAAW,GAAOwK,MAAMsB,eAAiB,GAC7CrtB,EAAQstB,gBAA+C,gBAA7BxgB,EAAIif,MAAMsB,eAEpCD,EAAUrB,MAAMwB,QAAU,gFAE1BH,EAAUnoB,YAAa6H,EAIvB,SAAS0gB,KACR1gB,EAAIif,MAAMwB,QAGT,uKAGDzgB,EAAI0B,UAAY,GAChBlH,EAAQrC,YAAamoB,EAErB,IAAIK,GAAWruB,EAAOotB,iBAAkB1f,EAAK,KAC7CogB,GAAoC,OAAjBO,EAAStf,IAC5Bgf,EAA0C,QAAnBM,EAASd,MAEhCrlB,EAAQnC,YAAaioB,GAKjBhuB,EAAOotB,kBACXtsB,EAAOyC,OAAQ3C,GACd0tB,cAAe,WAKd,MADAF,KACON,GAERS,kBAAmB,WAIlB,MAH6B,OAAxBR,GACJK,IAEML,GAERS,oBAAqB,WAMpB,GAAIpsB,GACHqsB,EAAY/gB,EAAI7H,YAAahG,EAAS6F,cAAe,OAgBtD,OAbA+oB,GAAU9B,MAAMwB,QAAUzgB,EAAIif,MAAMwB,QAGnC,8HAEDM,EAAU9B,MAAM+B,YAAcD,EAAU9B,MAAMY,MAAQ,IACtD7f,EAAIif,MAAMY,MAAQ,MAClBrlB,EAAQrC,YAAamoB,GAErB5rB,GAAO6C,WAAYjF,EAAOotB,iBAAkBqB,EAAW,MAAOC,aAE9DxmB,EAAQnC,YAAaioB,GAEd5rB,SAQXtB,EAAO6tB,KAAO,SAAUhsB,EAAMa,EAAShB,EAAUC,GAChD,GAAIL,GAAKqB,EACRsI,IAGD,KAAMtI,IAAQD,GACbuI,EAAKtI,GAASd,EAAKgqB,MAAOlpB,GAC1Bd,EAAKgqB,MAAOlpB,GAASD,EAASC,EAG/BrB,GAAMI,EAASK,MAAOF,EAAMF,MAG5B,KAAMgB,IAAQD,GACbb,EAAKgqB,MAAOlpB,GAASsI,EAAKtI,EAG3B,OAAOrB,GAIR,IAGCwsB,IAAe,4BACfC,GAAY,GAAIllB,QAAQ,KAAO8X,EAAO,SAAU,KAChDqN,GAAU,GAAInlB,QAAQ,YAAc8X,EAAO,IAAK,KAEhDsN,IAAYC,SAAU,WAAYC,WAAY,SAAUrC,QAAS,SACjEsC,IACCC,cAAe,IACfC,WAAY,OAGbC,IAAgB,SAAU,IAAK,MAAO,KAGvC,SAASC,IAAgB3C,EAAOlpB,GAG/B,GAAKA,IAAQkpB,GACZ,MAAOlpB,EAIR,IAAI8rB,GAAU9rB,EAAK,GAAGhC,cAAgBgC,EAAKrD,MAAM,GAChDovB,EAAW/rB,EACXb,EAAIysB,GAAYxtB,MAEjB,OAAQe,IAEP,GADAa,EAAO4rB,GAAazsB,GAAM2sB,EACrB9rB,IAAQkpB,GACZ,MAAOlpB,EAIT,OAAO+rB,GAGR,QAASC,IAAmB9sB,EAAMyD,EAAOspB,GACxC,GAAI5oB,GAAU+nB,GAAUziB,KAAMhG,EAC9B,OAAOU,GAENzC,KAAKsrB,IAAK,EAAG7oB,EAAS,IAAQ4oB,GAAY,KAAU5oB,EAAS,IAAO,MACpEV,EAGF,QAASwpB,IAAsBjtB,EAAMc,EAAMosB,EAAOC,EAAaC,GAS9D,IARA,GAAIntB,GAAIitB,KAAYC,EAAc,SAAW,WAE5C,EAES,UAATrsB,EAAmB,EAAI,EAEvBuN,EAAM,EAEK,EAAJpO,EAAOA,GAAK,EAEJ,WAAVitB,IACJ7e,GAAOlQ,EAAOghB,IAAKnf,EAAMktB,EAAQlO,EAAW/e,IAAK,EAAMmtB,IAGnDD,GAEW,YAAVD,IACJ7e,GAAOlQ,EAAOghB,IAAKnf,EAAM,UAAYgf,EAAW/e,IAAK,EAAMmtB,IAI7C,WAAVF,IACJ7e,GAAOlQ,EAAOghB,IAAKnf,EAAM,SAAWgf,EAAW/e,GAAM,SAAS,EAAMmtB,MAIrE/e,GAAOlQ,EAAOghB,IAAKnf,EAAM,UAAYgf,EAAW/e,IAAK,EAAMmtB,GAG5C,YAAVF,IACJ7e,GAAOlQ,EAAOghB,IAAKnf,EAAM,SAAWgf,EAAW/e,GAAM,SAAS,EAAMmtB,IAKvE,OAAO/e,GAGR,QAASgf,IAAkBrtB,EAAMc,EAAMosB,GAGtC,GAAII,IAAmB,EACtBjf,EAAe,UAATvN,EAAmBd,EAAKutB,YAAcvtB,EAAKwtB,aACjDJ,EAAS5C,GAAWxqB,GACpBmtB,EAAiE,eAAnDhvB,EAAOghB,IAAKnf,EAAM,aAAa,EAAOotB,EAKrD,IAAY,GAAP/e,GAAmB,MAAPA,EAAc,CAQ9B,GANAA,EAAMqc,GAAQ1qB,EAAMc,EAAMssB,IACf,EAAN/e,GAAkB,MAAPA,KACfA,EAAMrO,EAAKgqB,MAAOlpB,IAIdypB,GAAUxgB,KAAKsE,GACnB,MAAOA,EAKRif,GAAmBH,IAChBlvB,EAAQ2tB,qBAAuBvd,IAAQrO,EAAKgqB,MAAOlpB,IAGtDuN,EAAM/L,WAAY+L,IAAS,EAI5B,MAASA,GACR4e,GACCjtB,EACAc,EACAosB,IAAWC,EAAc,SAAW,WACpCG,EACAF,GAEE,KAGL,QAASK,IAAUtf,EAAUuf,GAM5B,IALA,GAAIzD,GAASjqB,EAAM2tB,EAClBtS,KACA3D,EAAQ,EACRxY,EAASiP,EAASjP,OAEHA,EAARwY,EAAgBA,IACvB1X,EAAOmO,EAAUuJ,GACX1X,EAAKgqB,QAIX3O,EAAQ3D,GAAUgG,EAAUre,IAAKW,EAAM,cACvCiqB,EAAUjqB,EAAKgqB,MAAMC,QAChByD,GAGErS,EAAQ3D,IAAuB,SAAZuS,IACxBjqB,EAAKgqB,MAAMC,QAAU,IAMM,KAAvBjqB,EAAKgqB,MAAMC,SAAkBhL,EAAUjf,KAC3Cqb,EAAQ3D,GAAUgG,EAAUpB,OAAQtc,EAAM,aAAcmqB,GAAenqB,EAAKuD,cAG7EoqB,EAAS1O,EAAUjf,GAEF,SAAZiqB,GAAuB0D,GAC3BjQ,EAAUN,IAAKpd,EAAM,aAAc2tB,EAAS1D,EAAU9rB,EAAOghB,IAAKnf,EAAM,aAO3E,KAAM0X,EAAQ,EAAWxY,EAARwY,EAAgBA,IAChC1X,EAAOmO,EAAUuJ,GACX1X,EAAKgqB,QAGL0D,GAA+B,SAAvB1tB,EAAKgqB,MAAMC,SAA6C,KAAvBjqB,EAAKgqB,MAAMC,UACzDjqB,EAAKgqB,MAAMC,QAAUyD,EAAOrS,EAAQ3D,IAAW,GAAK,QAItD,OAAOvJ,GAGRhQ,EAAOyC,QAGNgtB,UACCC,SACCxuB,IAAK,SAAUW,EAAM2qB,GACpB,GAAKA,EAAW,CAEf,GAAIlrB,GAAMirB,GAAQ1qB,EAAM,UACxB,OAAe,KAARP,EAAa,IAAMA,MAO9BquB,WACCC,aAAe,EACfC,aAAe,EACfC,UAAY,EACZC,YAAc,EACdzB,YAAc,EACd0B,YAAc,EACdN,SAAW,EACXO,OAAS,EACTC,SAAW,EACXC,QAAU,EACVC,QAAU,EACVC,MAAQ,GAKTC,UAECC,QAAS,YAIV1E,MAAO,SAAUhqB,EAAMc,EAAM2C,EAAOypB,GAEnC,GAAMltB,GAA0B,IAAlBA,EAAKuC,UAAoC,IAAlBvC,EAAKuC,UAAmBvC,EAAKgqB,MAAlE,CAKA,GAAIvqB,GAAKyC,EAAMqc,EACdsO,EAAW1uB,EAAOkF,UAAWvC,GAC7BkpB,EAAQhqB,EAAKgqB,KASd,OAPAlpB,GAAO3C,EAAOswB,SAAU5B,KAAgB1uB,EAAOswB,SAAU5B,GAAaF,GAAgB3C,EAAO6C,IAI7FtO,EAAQpgB,EAAOyvB,SAAU9sB,IAAU3C,EAAOyvB,SAAUf,GAGrCrrB,SAAViC,EAiCC8a,GAAS,OAASA,IAAqD/c,UAA3C/B,EAAM8e,EAAMlf,IAAKW,GAAM,EAAOktB,IACvDztB,EAIDuqB,EAAOlpB,IArCdoB,QAAcuB,GAGA,WAATvB,IAAsBzC,EAAM0sB,GAAQ1iB,KAAMhG,MAC9CA,GAAUhE,EAAI,GAAK,GAAMA,EAAI,GAAK6C,WAAYnE,EAAOghB,IAAKnf,EAAMc,IAEhEoB,EAAO,UAIM,MAATuB,GAAiBA,IAAUA,IAKlB,WAATvB,GAAsB/D,EAAO2vB,UAAWjB,KAC5CppB,GAAS,MAKJxF,EAAQstB,iBAA6B,KAAV9nB,GAAiD,IAAjC3C,EAAKlD,QAAS,gBAC9DosB,EAAOlpB,GAAS,WAIXyd,GAAW,OAASA,IAAwD/c,UAA7CiC,EAAQ8a,EAAMnB,IAAKpd,EAAMyD,EAAOypB,MACpElD,EAAOlpB,GAAS2C,IAjBjB,UA+BF0b,IAAK,SAAUnf,EAAMc,EAAMosB,EAAOE,GACjC,GAAI/e,GAAK/O,EAAKif,EACbsO,EAAW1uB,EAAOkF,UAAWvC,EAyB9B,OAtBAA,GAAO3C,EAAOswB,SAAU5B,KAAgB1uB,EAAOswB,SAAU5B,GAAaF,GAAgB3sB,EAAKgqB,MAAO6C,IAIlGtO,EAAQpgB,EAAOyvB,SAAU9sB,IAAU3C,EAAOyvB,SAAUf,GAG/CtO,GAAS,OAASA,KACtBlQ,EAAMkQ,EAAMlf,IAAKW,GAAM,EAAMktB,IAIjB1rB,SAAR6M,IACJA,EAAMqc,GAAQ1qB,EAAMc,EAAMssB,IAId,WAAR/e,GAAoBvN,IAAQyrB,MAChCle,EAAMke,GAAoBzrB,IAIZ,KAAVosB,GAAgBA,GACpB5tB,EAAMgD,WAAY+L,GACX6e,KAAU,GAAQ/uB,EAAOkE,UAAW/C,GAAQA,GAAO,EAAI+O,GAExDA,KAITlQ,EAAOyB,MAAO,SAAU,SAAW,SAAUK,EAAGa,GAC/C3C,EAAOyvB,SAAU9sB,IAChBzB,IAAK,SAAUW,EAAM2qB,EAAUuC,GAC9B,MAAKvC,GAGGsB,GAAaliB,KAAM5L,EAAOghB,IAAKnf,EAAM,aAAsC,IAArBA,EAAKutB,YACjEpvB,EAAO6tB,KAAMhsB,EAAMosB,GAAS,WAC3B,MAAOiB,IAAkBrtB,EAAMc,EAAMosB,KAEtCG,GAAkBrtB,EAAMc,EAAMosB,GAPhC,QAWD9P,IAAK,SAAUpd,EAAMyD,EAAOypB,GAC3B,GAAIE,GAASF,GAAS1C,GAAWxqB,EACjC,OAAO8sB,IAAmB9sB,EAAMyD,EAAOypB,EACtCD,GACCjtB,EACAc,EACAosB,EACmD,eAAnD/uB,EAAOghB,IAAKnf,EAAM,aAAa,EAAOotB,GACtCA,GACG,OAORjvB,EAAOyvB,SAAS7B,YAAcf,GAAc/sB,EAAQ4tB,oBACnD,SAAU7rB,EAAM2qB,GACf,MAAKA,GAGGxsB,EAAO6tB,KAAMhsB,GAAQiqB,QAAW,gBACtCS,IAAU1qB,EAAM,gBAJlB,SAUF7B,EAAOyB,MACN+uB,OAAQ,GACRC,QAAS,GACTC,OAAQ,SACN,SAAUC,EAAQC,GACpB5wB,EAAOyvB,SAAUkB,EAASC,IACzBC,OAAQ,SAAUvrB,GAOjB,IANA,GAAIxD,GAAI,EACPgvB,KAGAC,EAAyB,gBAAVzrB,GAAqBA,EAAMkB,MAAM,MAASlB,GAE9C,EAAJxD,EAAOA,IACdgvB,EAAUH,EAAS9P,EAAW/e,GAAM8uB,GACnCG,EAAOjvB,IAAOivB,EAAOjvB,EAAI,IAAOivB,EAAO,EAGzC,OAAOD,KAIH3E,GAAQvgB,KAAM+kB,KACnB3wB,EAAOyvB,SAAUkB,EAASC,GAAS3R,IAAM0P,MAI3C3uB,EAAOG,GAAGsC,QACTue,IAAK,SAAUre,EAAM2C,GACpB,MAAO6Y,GAAQhf,KAAM,SAAU0C,EAAMc,EAAM2C,GAC1C,GAAI2pB,GAAQ7sB,EACXR,KACAE,EAAI,CAEL,IAAK9B,EAAOoD,QAAST,GAAS,CAI7B,IAHAssB,EAAS5C,GAAWxqB,GACpBO,EAAMO,EAAK5B,OAECqB,EAAJN,EAASA,IAChBF,EAAKe,EAAMb,IAAQ9B,EAAOghB,IAAKnf,EAAMc,EAAMb,IAAK,EAAOmtB,EAGxD,OAAOrtB,GAGR,MAAiByB,UAAViC,EACNtF,EAAO6rB,MAAOhqB,EAAMc,EAAM2C,GAC1BtF,EAAOghB,IAAKnf,EAAMc,IACjBA,EAAM2C,EAAOtD,UAAUjB,OAAS,IAEpCwuB,KAAM,WACL,MAAOD,IAAUnwB,MAAM,IAExB6xB,KAAM,WACL,MAAO1B,IAAUnwB,OAElB8xB,OAAQ,SAAUpV,GACjB,MAAsB,iBAAVA,GACJA,EAAQ1c,KAAKowB,OAASpwB,KAAK6xB,OAG5B7xB,KAAKsC,KAAK,WACXqf,EAAU3hB,MACda,EAAQb,MAAOowB,OAEfvvB,EAAQb,MAAO6xB,WAOnB,SAASE,IAAOrvB,EAAMa,EAASwc,EAAM5c,EAAK6uB,GACzC,MAAO,IAAID,IAAMtwB,UAAUR,KAAMyB,EAAMa,EAASwc,EAAM5c,EAAK6uB,GAE5DnxB,EAAOkxB,MAAQA,GAEfA,GAAMtwB,WACLE,YAAaowB,GACb9wB,KAAM,SAAUyB,EAAMa,EAASwc,EAAM5c,EAAK6uB,EAAQC,GACjDjyB,KAAK0C,KAAOA,EACZ1C,KAAK+f,KAAOA,EACZ/f,KAAKgyB,OAASA,GAAU,QACxBhyB,KAAKuD,QAAUA,EACfvD,KAAK8S,MAAQ9S,KAAKmH,IAAMnH,KAAK+N,MAC7B/N,KAAKmD,IAAMA,EACXnD,KAAKiyB,KAAOA,IAAUpxB,EAAO2vB,UAAWzQ,GAAS,GAAK,OAEvDhS,IAAK,WACJ,GAAIkT,GAAQ8Q,GAAMG,UAAWlyB,KAAK+f,KAElC,OAAOkB,IAASA,EAAMlf,IACrBkf,EAAMlf,IAAK/B,MACX+xB,GAAMG,UAAUhN,SAASnjB,IAAK/B,OAEhCmyB,IAAK,SAAUC,GACd,GAAIC,GACHpR,EAAQ8Q,GAAMG,UAAWlyB,KAAK+f,KAoB/B,OAjBC/f,MAAKma,IAAMkY,EADPryB,KAAKuD,QAAQ+uB,SACEzxB,EAAOmxB,OAAQhyB,KAAKgyB,QACtCI,EAASpyB,KAAKuD,QAAQ+uB,SAAWF,EAAS,EAAG,EAAGpyB,KAAKuD,QAAQ+uB,UAG3CF,EAEpBpyB,KAAKmH,KAAQnH,KAAKmD,IAAMnD,KAAK8S,OAAUuf,EAAQryB,KAAK8S,MAE/C9S,KAAKuD,QAAQgvB,MACjBvyB,KAAKuD,QAAQgvB,KAAKzwB,KAAM9B,KAAK0C,KAAM1C,KAAKmH,IAAKnH,MAGzCihB,GAASA,EAAMnB,IACnBmB,EAAMnB,IAAK9f,MAEX+xB,GAAMG,UAAUhN,SAASpF,IAAK9f,MAExBA,OAIT+xB,GAAMtwB,UAAUR,KAAKQ,UAAYswB,GAAMtwB,UAEvCswB,GAAMG,WACLhN,UACCnjB,IAAK,SAAUywB,GACd,GAAIlgB,EAEJ,OAAiC,OAA5BkgB,EAAM9vB,KAAM8vB,EAAMzS,OACpByS,EAAM9vB,KAAKgqB,OAA2C,MAAlC8F,EAAM9vB,KAAKgqB,MAAO8F,EAAMzS,OAQ/CzN,EAASzR,EAAOghB,IAAK2Q,EAAM9vB,KAAM8vB,EAAMzS,KAAM,IAErCzN,GAAqB,SAAXA,EAAwBA,EAAJ,GAT9BkgB,EAAM9vB,KAAM8vB,EAAMzS,OAW3BD,IAAK,SAAU0S,GAGT3xB,EAAO4xB,GAAGF,KAAMC,EAAMzS,MAC1Blf,EAAO4xB,GAAGF,KAAMC,EAAMzS,MAAQyS,GACnBA,EAAM9vB,KAAKgqB,QAAgE,MAArD8F,EAAM9vB,KAAKgqB,MAAO7rB,EAAOswB,SAAUqB,EAAMzS,QAAoBlf,EAAOyvB,SAAUkC,EAAMzS,OACrHlf,EAAO6rB,MAAO8F,EAAM9vB,KAAM8vB,EAAMzS,KAAMyS,EAAMrrB,IAAMqrB,EAAMP,MAExDO,EAAM9vB,KAAM8vB,EAAMzS,MAASyS,EAAMrrB,OASrC4qB,GAAMG,UAAUtL,UAAYmL,GAAMG,UAAU1L,YAC3C1G,IAAK,SAAU0S,GACTA,EAAM9vB,KAAKuC,UAAYutB,EAAM9vB,KAAKmD,aACtC2sB,EAAM9vB,KAAM8vB,EAAMzS,MAASyS,EAAMrrB,OAKpCtG,EAAOmxB,QACNU,OAAQ,SAAUC,GACjB,MAAOA,IAERC,MAAO,SAAUD,GAChB,MAAO,GAAMvuB,KAAKyuB,IAAKF,EAAIvuB,KAAK0uB,IAAO,IAIzCjyB,EAAO4xB,GAAKV,GAAMtwB,UAAUR,KAG5BJ,EAAO4xB,GAAGF,OAKV,IACCQ,IAAOC,GACPC,GAAW,yBACXC,GAAS,GAAIxpB,QAAQ,iBAAmB8X,EAAO,cAAe,KAC9D2R,GAAO,cACPC,IAAwBC,IACxBC,IACCC,KAAO,SAAUxT,EAAM5Z,GACtB,GAAIqsB,GAAQxyB,KAAKwzB,YAAazT,EAAM5Z,GACnCtC,EAAS2uB,EAAMzkB,MACf6jB,EAAQsB,GAAO/mB,KAAMhG,GACrB8rB,EAAOL,GAASA,EAAO,KAAS/wB,EAAO2vB,UAAWzQ,GAAS,GAAK,MAGhEjN,GAAUjS,EAAO2vB,UAAWzQ,IAAmB,OAATkS,IAAkBpuB,IACvDqvB,GAAO/mB,KAAMtL,EAAOghB,IAAK2Q,EAAM9vB,KAAMqd,IACtC0T,EAAQ,EACRC,EAAgB,EAEjB,IAAK5gB,GAASA,EAAO,KAAQmf,EAAO,CAEnCA,EAAOA,GAAQnf,EAAO,GAGtB8e,EAAQA,MAGR9e,GAASjP,GAAU,CAEnB,GAGC4vB,GAAQA,GAAS,KAGjB3gB,GAAgB2gB,EAChB5yB,EAAO6rB,MAAO8F,EAAM9vB,KAAMqd,EAAMjN,EAAQmf,SAI/BwB,KAAWA,EAAQjB,EAAMzkB,MAAQlK,IAAqB,IAAV4vB,KAAiBC,GAaxE,MATK9B,KACJ9e,EAAQ0f,EAAM1f,OAASA,IAAUjP,GAAU,EAC3C2uB,EAAMP,KAAOA,EAEbO,EAAMrvB,IAAMyuB,EAAO,GAClB9e,GAAU8e,EAAO,GAAM,GAAMA,EAAO,IACnCA,EAAO,IAGHY,IAKV,SAASmB,MAIR,MAHA5U,YAAW,WACVgU,GAAQ7uB,SAEA6uB,GAAQlyB,EAAOsG,MAIzB,QAASysB,IAAOhvB,EAAMivB,GACrB,GAAI7N,GACHrjB,EAAI,EACJgL,GAAUmmB,OAAQlvB,EAKnB,KADAivB,EAAeA,EAAe,EAAI,EACtB,EAAJlxB,EAAQA,GAAK,EAAIkxB,EACxB7N,EAAQtE,EAAW/e,GACnBgL,EAAO,SAAWqY,GAAUrY,EAAO,UAAYqY,GAAUphB,CAO1D,OAJKivB,KACJlmB,EAAM4iB,QAAU5iB,EAAM2f,MAAQ1oB,GAGxB+I,EAGR,QAAS6lB,IAAartB,EAAO4Z,EAAMgU,GAKlC,IAJA,GAAIvB,GACHwB,GAAeV,GAAUvT,QAAe3f,OAAQkzB,GAAU,MAC1DlZ,EAAQ,EACRxY,EAASoyB,EAAWpyB,OACLA,EAARwY,EAAgBA,IACvB,GAAMoY,EAAQwB,EAAY5Z,GAAQtY,KAAMiyB,EAAWhU,EAAM5Z,GAGxD,MAAOqsB,GAKV,QAASa,IAAkB3wB,EAAMkjB,EAAOqO,GAEvC,GAAIlU,GAAM5Z,EAAO2rB,EAAQU,EAAOvR,EAAOiT,EAASvH,EAASwH,EACxDC,EAAOp0B,KACP+nB,KACA2E,EAAQhqB,EAAKgqB,MACb2D,EAAS3tB,EAAKuC,UAAY0c,EAAUjf,GACpC2xB,EAAWjU,EAAUre,IAAKW,EAAM,SAG3BuxB,GAAKnT,QACVG,EAAQpgB,EAAOqgB,YAAaxe,EAAM,MACX,MAAlBue,EAAMqT,WACVrT,EAAMqT,SAAW,EACjBJ,EAAUjT,EAAMxM,MAAMsH,KACtBkF,EAAMxM,MAAMsH,KAAO,WACZkF,EAAMqT,UACXJ,MAIHjT,EAAMqT,WAENF,EAAKxX,OAAO,WAGXwX,EAAKxX,OAAO,WACXqE,EAAMqT,WACAzzB,EAAOigB,MAAOpe,EAAM,MAAOd,QAChCqf,EAAMxM,MAAMsH,YAOO,IAAlBrZ,EAAKuC,WAAoB,UAAY2gB,IAAS,SAAWA,MAK7DqO,EAAKM,UAAa7H,EAAM6H,SAAU7H,EAAM8H,UAAW9H,EAAM+H,WAIzD9H,EAAU9rB,EAAOghB,IAAKnf,EAAM,WAG5ByxB,EAA2B,SAAZxH,EACdvM,EAAUre,IAAKW,EAAM,eAAkBmqB,GAAgBnqB,EAAKuD,UAAa0mB,EAEpD,WAAjBwH,GAA6D,SAAhCtzB,EAAOghB,IAAKnf,EAAM,WACnDgqB,EAAMC,QAAU,iBAIbsH,EAAKM,WACT7H,EAAM6H,SAAW,SACjBH,EAAKxX,OAAO,WACX8P,EAAM6H,SAAWN,EAAKM,SAAU,GAChC7H,EAAM8H,UAAYP,EAAKM,SAAU,GACjC7H,EAAM+H,UAAYR,EAAKM,SAAU,KAKnC,KAAMxU,IAAQ6F,GAEb,GADAzf,EAAQyf,EAAO7F,GACVkT,GAAS9mB,KAAMhG,GAAU,CAG7B,SAFOyf,GAAO7F,GACd+R,EAASA,GAAoB,WAAV3rB,EACdA,KAAYkqB,EAAS,OAAS,QAAW,CAG7C,GAAe,SAAVlqB,IAAoBkuB,GAAiCnwB,SAArBmwB,EAAUtU,GAG9C,QAFAsQ,IAAS,EAKXtI,EAAMhI,GAASsU,GAAYA,EAAUtU,IAAUlf,EAAO6rB,MAAOhqB,EAAMqd,OAInE4M,GAAUzoB,MAIZ,IAAMrD,EAAOqE,cAAe6iB,GAyCqD,YAAxD,SAAZ4E,EAAqBE,GAAgBnqB,EAAKuD,UAAa0mB,KACnED,EAAMC,QAAUA,OA1CoB,CAC/B0H,EACC,UAAYA,KAChBhE,EAASgE,EAAShE,QAGnBgE,EAAWjU,EAAUpB,OAAQtc,EAAM,aAI/BovB,IACJuC,EAAShE,QAAUA,GAEfA,EACJxvB,EAAQ6B,GAAO0tB,OAEfgE,EAAK5rB,KAAK,WACT3H,EAAQ6B,GAAOmvB,SAGjBuC,EAAK5rB,KAAK,WACT,GAAIuX,EAEJK,GAAUjE,OAAQzZ,EAAM,SACxB,KAAMqd,IAAQgI,GACblnB,EAAO6rB,MAAOhqB,EAAMqd,EAAMgI,EAAMhI,KAGlC,KAAMA,IAAQgI,GACbyK,EAAQgB,GAAanD,EAASgE,EAAUtU,GAAS,EAAGA,EAAMqU,GAElDrU,IAAQsU,KACfA,EAAUtU,GAASyS,EAAM1f,MACpBud,IACJmC,EAAMrvB,IAAMqvB,EAAM1f,MAClB0f,EAAM1f,MAAiB,UAATiN,GAA6B,WAATA,EAAoB,EAAI,KAW/D,QAAS2U,IAAY9O,EAAO+O,GAC3B,GAAIva,GAAO5W,EAAMwuB,EAAQ7rB,EAAO8a,CAGhC,KAAM7G,IAASwL,GAed,GAdApiB,EAAO3C,EAAOkF,UAAWqU,GACzB4X,EAAS2C,EAAenxB,GACxB2C,EAAQyf,EAAOxL,GACVvZ,EAAOoD,QAASkC,KACpB6rB,EAAS7rB,EAAO,GAChBA,EAAQyf,EAAOxL,GAAUjU,EAAO,IAG5BiU,IAAU5W,IACdoiB,EAAOpiB,GAAS2C,QACTyf,GAAOxL,IAGf6G,EAAQpgB,EAAOyvB,SAAU9sB,GACpByd,GAAS,UAAYA,GAAQ,CACjC9a,EAAQ8a,EAAMyQ,OAAQvrB,SACfyf,GAAOpiB,EAId,KAAM4W,IAASjU,GACNiU,IAASwL,KAChBA,EAAOxL,GAAUjU,EAAOiU,GACxBua,EAAeva,GAAU4X,OAI3B2C,GAAenxB,GAASwuB,EAK3B,QAAS4C,IAAWlyB,EAAMmyB,EAAYtxB,GACrC,GAAI+O,GACHwiB,EACA1a,EAAQ,EACRxY,EAASwxB,GAAoBxxB,OAC7Bib,EAAWhc,EAAO0b,WAAWK,OAAQ,iBAE7BmY,GAAKryB,OAEbqyB,EAAO,WACN,GAAKD,EACJ,OAAO,CAUR,KARA,GAAIE,GAAcjC,IAASY,KAC1B9V,EAAYzZ,KAAKsrB,IAAK,EAAGqE,EAAUkB,UAAYlB,EAAUzB,SAAW0C,GAEpEje,EAAO8G,EAAYkW,EAAUzB,UAAY,EACzCF,EAAU,EAAIrb,EACdqD,EAAQ,EACRxY,EAASmyB,EAAUmB,OAAOtzB,OAEXA,EAARwY,EAAiBA,IACxB2Z,EAAUmB,OAAQ9a,GAAQ+X,IAAKC,EAKhC,OAFAvV,GAASoB,WAAYvb,GAAQqxB,EAAW3B,EAASvU,IAElC,EAAVuU,GAAexwB,EACZic,GAEPhB,EAASqB,YAAaxb,GAAQqxB,KACvB,IAGTA,EAAYlX,EAASF,SACpBja,KAAMA,EACNkjB,MAAO/kB,EAAOyC,UAAYuxB,GAC1BZ,KAAMpzB,EAAOyC,QAAQ,GAAQqxB,kBAAqBpxB,GAClD4xB,mBAAoBN,EACpBO,gBAAiB7xB,EACjB0xB,UAAWlC,IAASY,KACpBrB,SAAU/uB,EAAQ+uB,SAClB4C,UACA1B,YAAa,SAAUzT,EAAM5c,GAC5B,GAAIqvB,GAAQ3xB,EAAOkxB,MAAOrvB,EAAMqxB,EAAUE,KAAMlU,EAAM5c,EACpD4wB,EAAUE,KAAKU,cAAe5U,IAAUgU,EAAUE,KAAKjC,OAEzD,OADA+B,GAAUmB,OAAO70B,KAAMmyB,GAChBA,GAERrR,KAAM,SAAUkU,GACf,GAAIjb,GAAQ,EAGXxY,EAASyzB,EAAUtB,EAAUmB,OAAOtzB,OAAS,CAC9C,IAAKkzB,EACJ,MAAO90B,KAGR,KADA80B,GAAU,EACMlzB,EAARwY,EAAiBA,IACxB2Z,EAAUmB,OAAQ9a,GAAQ+X,IAAK,EAUhC,OALKkD,GACJxY,EAASqB,YAAaxb,GAAQqxB,EAAWsB,IAEzCxY,EAASyY,WAAY5yB,GAAQqxB,EAAWsB,IAElCr1B,QAGT4lB,EAAQmO,EAAUnO,KAInB,KAFA8O,GAAY9O,EAAOmO,EAAUE,KAAKU,eAElB/yB,EAARwY,EAAiBA,IAExB,GADA9H,EAAS8gB,GAAqBhZ,GAAQtY,KAAMiyB,EAAWrxB,EAAMkjB,EAAOmO,EAAUE,MAE7E,MAAO3hB,EAmBT,OAfAzR,GAAO4B,IAAKmjB,EAAO4N,GAAaO,GAE3BlzB,EAAOkD,WAAYgwB,EAAUE,KAAKnhB,QACtCihB,EAAUE,KAAKnhB,MAAMhR,KAAMY,EAAMqxB,GAGlClzB,EAAO4xB,GAAG8C,MACT10B,EAAOyC,OAAQyxB,GACdryB,KAAMA,EACN0xB,KAAML,EACNjT,MAAOiT,EAAUE,KAAKnT,SAKjBiT,EAAUzW,SAAUyW,EAAUE,KAAK3W,UACxC9U,KAAMurB,EAAUE,KAAKzrB,KAAMurB,EAAUE,KAAKuB,UAC1C1Y,KAAMiX,EAAUE,KAAKnX,MACrBF,OAAQmX,EAAUE,KAAKrX,QAG1B/b,EAAO+zB,UAAY/zB,EAAOyC,OAAQsxB,IAEjCa,QAAS,SAAU7P,EAAOrjB,GACpB1B,EAAOkD,WAAY6hB,IACvBrjB,EAAWqjB,EACXA,GAAU,MAEVA,EAAQA,EAAMve,MAAM,IAOrB,KAJA,GAAI0Y,GACH3F,EAAQ,EACRxY,EAASgkB,EAAMhkB,OAEAA,EAARwY,EAAiBA,IACxB2F,EAAO6F,EAAOxL,GACdkZ,GAAUvT,GAASuT,GAAUvT,OAC7BuT,GAAUvT,GAAOpP,QAASpO,IAI5BmzB,UAAW,SAAUnzB,EAAU+oB,GACzBA,EACJ8H,GAAoBziB,QAASpO,GAE7B6wB,GAAoB/yB,KAAMkC,MAK7B1B,EAAO80B,MAAQ,SAAUA,EAAO3D,EAAQhxB,GACvC,GAAI40B,GAAMD,GAA0B,gBAAVA,GAAqB90B,EAAOyC,UAAYqyB,IACjEH,SAAUx0B,IAAOA,GAAMgxB,GACtBnxB,EAAOkD,WAAY4xB,IAAWA,EAC/BrD,SAAUqD,EACV3D,OAAQhxB,GAAMgxB,GAAUA,IAAWnxB,EAAOkD,WAAYiuB,IAAYA,EAwBnE,OArBA4D,GAAItD,SAAWzxB,EAAO4xB,GAAG9T,IAAM,EAA4B,gBAAjBiX,GAAItD,SAAwBsD,EAAItD,SACzEsD,EAAItD,WAAYzxB,GAAO4xB,GAAGoD,OAASh1B,EAAO4xB,GAAGoD,OAAQD,EAAItD,UAAazxB,EAAO4xB,GAAGoD,OAAO3Q,UAGtE,MAAb0Q,EAAI9U,OAAiB8U,EAAI9U,SAAU,KACvC8U,EAAI9U,MAAQ,MAIb8U,EAAI9pB,IAAM8pB,EAAIJ,SAEdI,EAAIJ,SAAW,WACT30B,EAAOkD,WAAY6xB,EAAI9pB,MAC3B8pB,EAAI9pB,IAAIhK,KAAM9B,MAGV41B,EAAI9U,OACRjgB,EAAOkgB,QAAS/gB,KAAM41B,EAAI9U,QAIrB8U,GAGR/0B,EAAOG,GAAGsC,QACTwyB,OAAQ,SAAUH,EAAOI,EAAI/D,EAAQzvB,GAGpC,MAAOvC,MAAKwP,OAAQmS,GAAWE,IAAK,UAAW,GAAIuO,OAGjDjtB,MAAM6yB,SAAUzF,QAASwF,GAAMJ,EAAO3D,EAAQzvB,IAEjDyzB,QAAS,SAAUjW,EAAM4V,EAAO3D,EAAQzvB,GACvC,GAAIkS,GAAQ5T,EAAOqE,cAAe6a,GACjCkW,EAASp1B,EAAO80B,MAAOA,EAAO3D,EAAQzvB,GACtC2zB,EAAc,WAEb,GAAI9B,GAAOQ,GAAW50B,KAAMa,EAAOyC,UAAYyc,GAAQkW,IAGlDxhB,GAAS2L,EAAUre,IAAK/B,KAAM,YAClCo0B,EAAKjT,MAAM,GAKd,OAFC+U,GAAYC,OAASD,EAEfzhB,GAASwhB,EAAOnV,SAAU,EAChC9gB,KAAKsC,KAAM4zB,GACXl2B,KAAK8gB,MAAOmV,EAAOnV,MAAOoV,IAE5B/U,KAAM,SAAUvc,EAAMyc,EAAYgU,GACjC,GAAIe,GAAY,SAAUnV,GACzB,GAAIE,GAAOF,EAAME,WACVF,GAAME,KACbA,EAAMkU,GAYP,OATqB,gBAATzwB,KACXywB,EAAUhU,EACVA,EAAazc,EACbA,EAAOV,QAEHmd,GAAczc,KAAS,GAC3B5E,KAAK8gB,MAAOlc,GAAQ,SAGd5E,KAAKsC,KAAK,WAChB,GAAIye,IAAU,EACb3G,EAAgB,MAARxV,GAAgBA,EAAO,aAC/ByxB,EAASx1B,EAAOw1B,OAChBra,EAAOoE,EAAUre,IAAK/B,KAEvB,IAAKoa,EACC4B,EAAM5B,IAAW4B,EAAM5B,GAAQ+G,MACnCiV,EAAWpa,EAAM5B,QAGlB,KAAMA,IAAS4B,GACTA,EAAM5B,IAAW4B,EAAM5B,GAAQ+G,MAAQgS,GAAK1mB,KAAM2N,IACtDgc,EAAWpa,EAAM5B,GAKpB,KAAMA,EAAQic,EAAOz0B,OAAQwY,KACvBic,EAAQjc,GAAQ1X,OAAS1C,MAAiB,MAAR4E,GAAgByxB,EAAQjc,GAAQ0G,QAAUlc,IAChFyxB,EAAQjc,GAAQga,KAAKjT,KAAMkU,GAC3BtU,GAAU,EACVsV,EAAOhzB,OAAQ+W,EAAO,KAOnB2G,IAAYsU,IAChBx0B,EAAOkgB,QAAS/gB,KAAM4E,MAIzBuxB,OAAQ,SAAUvxB,GAIjB,MAHKA,MAAS,IACbA,EAAOA,GAAQ,MAET5E,KAAKsC,KAAK,WAChB,GAAI8X,GACH4B,EAAOoE,EAAUre,IAAK/B,MACtB8gB,EAAQ9E,EAAMpX,EAAO,SACrBqc,EAAQjF,EAAMpX,EAAO,cACrByxB,EAASx1B,EAAOw1B,OAChBz0B,EAASkf,EAAQA,EAAMlf,OAAS,CAajC,KAVAoa,EAAKma,QAAS,EAGdt1B,EAAOigB,MAAO9gB,KAAM4E,MAEfqc,GAASA,EAAME,MACnBF,EAAME,KAAKrf,KAAM9B,MAAM,GAIlBoa,EAAQic,EAAOz0B,OAAQwY,KACvBic,EAAQjc,GAAQ1X,OAAS1C,MAAQq2B,EAAQjc,GAAQ0G,QAAUlc,IAC/DyxB,EAAQjc,GAAQga,KAAKjT,MAAM,GAC3BkV,EAAOhzB,OAAQ+W,EAAO,GAKxB,KAAMA,EAAQ,EAAWxY,EAARwY,EAAgBA,IAC3B0G,EAAO1G,IAAW0G,EAAO1G,GAAQ+b,QACrCrV,EAAO1G,GAAQ+b,OAAOr0B,KAAM9B,YAKvBgc,GAAKma,YAKft1B,EAAOyB,MAAO,SAAU,OAAQ,QAAU,SAAUK,EAAGa,GACtD,GAAI8yB,GAAQz1B,EAAOG,GAAIwC,EACvB3C,GAAOG,GAAIwC,GAAS,SAAUmyB,EAAO3D,EAAQzvB,GAC5C,MAAgB,OAATozB,GAAkC,iBAAVA,GAC9BW,EAAM1zB,MAAO5C,KAAM6C,WACnB7C,KAAKg2B,QAASpC,GAAOpwB,GAAM,GAAQmyB,EAAO3D,EAAQzvB,MAKrD1B,EAAOyB,MACNi0B,UAAW3C,GAAM,QACjB4C,QAAS5C,GAAM,QACf6C,YAAa7C,GAAM,UACnB8C,QAAUnG,QAAS,QACnBoG,SAAWpG,QAAS,QACpBqG,YAAcrG,QAAS,WACrB,SAAU/sB,EAAMoiB,GAClB/kB,EAAOG,GAAIwC,GAAS,SAAUmyB,EAAO3D,EAAQzvB,GAC5C,MAAOvC,MAAKg2B,QAASpQ,EAAO+P,EAAO3D,EAAQzvB,MAI7C1B,EAAOw1B,UACPx1B,EAAO4xB,GAAGsC,KAAO,WAChB,GAAIQ,GACH5yB,EAAI,EACJ0zB,EAASx1B,EAAOw1B,MAIjB,KAFAtD,GAAQlyB,EAAOsG,MAEPxE,EAAI0zB,EAAOz0B,OAAQe,IAC1B4yB,EAAQc,EAAQ1zB,GAEV4yB,KAAWc,EAAQ1zB,KAAQ4yB,GAChCc,EAAOhzB,OAAQV,IAAK,EAIhB0zB,GAAOz0B,QACZf,EAAO4xB,GAAGtR,OAEX4R,GAAQ7uB,QAGTrD,EAAO4xB,GAAG8C,MAAQ,SAAUA,GAC3B10B,EAAOw1B,OAAOh2B,KAAMk1B,GACfA,IACJ10B,EAAO4xB,GAAG3f,QAEVjS,EAAOw1B,OAAOntB,OAIhBrI,EAAO4xB,GAAGoE,SAAW,GAErBh2B,EAAO4xB,GAAG3f,MAAQ,WACXkgB,KACLA,GAAU8D,YAAaj2B,EAAO4xB,GAAGsC,KAAMl0B,EAAO4xB,GAAGoE,YAInDh2B,EAAO4xB,GAAGtR,KAAO,WAChB4V,cAAe/D,IACfA,GAAU,MAGXnyB,EAAO4xB,GAAGoD,QACTmB,KAAM,IACNC,KAAM,IAEN/R,SAAU,KAMXrkB,EAAOG,GAAGk2B,MAAQ,SAAUC,EAAMvyB,GAIjC,MAHAuyB,GAAOt2B,EAAO4xB,GAAK5xB,EAAO4xB,GAAGoD,OAAQsB,IAAUA,EAAOA,EACtDvyB,EAAOA,GAAQ,KAER5E,KAAK8gB,MAAOlc,EAAM,SAAU8U,EAAMuH,GACxC,GAAImW,GAAUrY,WAAYrF,EAAMyd,EAChClW,GAAME,KAAO,WACZkW,aAAcD,OAMjB,WACC,GAAIxnB,GAAQhQ,EAAS6F,cAAe,SACnCmC,EAAShI,EAAS6F,cAAe,UACjCmwB,EAAMhuB,EAAOhC,YAAahG,EAAS6F,cAAe,UAEnDmK,GAAMhL,KAAO,WAIbjE,EAAQ22B,QAA0B,KAAhB1nB,EAAMzJ,MAIxBxF,EAAQ42B,YAAc3B,EAAIrhB,SAI1B3M,EAAOyM,UAAW,EAClB1T,EAAQ62B,aAAe5B,EAAIvhB,SAI3BzE,EAAQhQ,EAAS6F,cAAe,SAChCmK,EAAMzJ,MAAQ,IACdyJ,EAAMhL,KAAO,QACbjE,EAAQ82B,WAA6B,MAAhB7nB,EAAMzJ,QAI5B,IAAIuxB,IAAUC,GACb9pB,GAAahN,EAAO+P,KAAK/C,UAE1BhN,GAAOG,GAAGsC,QACTwN,KAAM,SAAUtN,EAAM2C,GACrB,MAAO6Y,GAAQhf,KAAMa,EAAOiQ,KAAMtN,EAAM2C,EAAOtD,UAAUjB,OAAS,IAGnEg2B,WAAY,SAAUp0B,GACrB,MAAOxD,MAAKsC,KAAK,WAChBzB,EAAO+2B,WAAY53B,KAAMwD,QAK5B3C,EAAOyC,QACNwN,KAAM,SAAUpO,EAAMc,EAAM2C,GAC3B,GAAI8a,GAAO9e,EACV01B,EAAQn1B,EAAKuC,QAGd,IAAMvC,GAAkB,IAAVm1B,GAAyB,IAAVA,GAAyB,IAAVA,EAK5C,aAAYn1B,GAAKgK,eAAiB1D,EAC1BnI,EAAOkf,KAAMrd,EAAMc,EAAM2C,IAKlB,IAAV0xB,GAAgBh3B,EAAO8X,SAAUjW,KACrCc,EAAOA,EAAK0C,cACZ+a,EAAQpgB,EAAOi3B,UAAWt0B,KACvB3C,EAAO+P,KAAKjF,MAAMpB,KAAKkC,KAAMjJ,GAASm0B,GAAWD,KAGtCxzB,SAAViC,EAaO8a,GAAS,OAASA,IAA6C,QAAnC9e,EAAM8e,EAAMlf,IAAKW,EAAMc,IACvDrB,GAGPA,EAAMtB,EAAO0O,KAAKuB,KAAMpO,EAAMc,GAGhB,MAAPrB,EACN+B,OACA/B,GApBc,OAAVgE,EAGO8a,GAAS,OAASA,IAAoD/c,UAA1C/B,EAAM8e,EAAMnB,IAAKpd,EAAMyD,EAAO3C,IAC9DrB,GAGPO,EAAKiK,aAAcnJ,EAAM2C,EAAQ,IAC1BA,OAPPtF,GAAO+2B,WAAYl1B,EAAMc;EAuB5Bo0B,WAAY,SAAUl1B,EAAMyD,GAC3B,GAAI3C,GAAMu0B,EACTp1B,EAAI,EACJq1B,EAAY7xB,GAASA,EAAMwF,MAAOqP,EAEnC,IAAKgd,GAA+B,IAAlBt1B,EAAKuC,SACtB,MAASzB,EAAOw0B,EAAUr1B,KACzBo1B,EAAWl3B,EAAOo3B,QAASz0B,IAAUA,EAGhC3C,EAAO+P,KAAKjF,MAAMpB,KAAKkC,KAAMjJ,KAEjCd,EAAMq1B,IAAa,GAGpBr1B,EAAKuK,gBAAiBzJ,IAKzBs0B,WACClzB,MACCkb,IAAK,SAAUpd,EAAMyD,GACpB,IAAMxF,EAAQ82B,YAAwB,UAAVtxB,GAC3BtF,EAAOoF,SAAUvD,EAAM,SAAY,CAGnC,GAAIqO,GAAMrO,EAAKyD,KAKf,OAJAzD,GAAKiK,aAAc,OAAQxG,GACtB4K,IACJrO,EAAKyD,MAAQ4K,GAEP5K,QAQZwxB,IACC7X,IAAK,SAAUpd,EAAMyD,EAAO3C,GAO3B,MANK2C,MAAU,EAEdtF,EAAO+2B,WAAYl1B,EAAMc,GAEzBd,EAAKiK,aAAcnJ,EAAMA,GAEnBA,IAGT3C,EAAOyB,KAAMzB,EAAO+P,KAAKjF,MAAMpB,KAAKkX,OAAO9V,MAAO,QAAU,SAAUhJ,EAAGa,GACxE,GAAI00B,GAASrqB,GAAYrK,IAAU3C,EAAO0O,KAAKuB,IAE/CjD,IAAYrK,GAAS,SAAUd,EAAMc,EAAMiE,GAC1C,GAAItF,GAAKshB,CAUT,OATMhc,KAELgc,EAAS5V,GAAYrK,GACrBqK,GAAYrK,GAASrB,EACrBA,EAAqC,MAA/B+1B,EAAQx1B,EAAMc,EAAMiE,GACzBjE,EAAK0C,cACL,KACD2H,GAAYrK,GAASigB,GAEfthB,IAOT,IAAIg2B,IAAa,qCAEjBt3B,GAAOG,GAAGsC,QACTyc,KAAM,SAAUvc,EAAM2C,GACrB,MAAO6Y,GAAQhf,KAAMa,EAAOkf,KAAMvc,EAAM2C,EAAOtD,UAAUjB,OAAS,IAGnEw2B,WAAY,SAAU50B,GACrB,MAAOxD,MAAKsC,KAAK,iBACTtC,MAAMa,EAAOo3B,QAASz0B,IAAUA,QAK1C3C,EAAOyC,QACN20B,SACCI,MAAO,UACPC,QAAS,aAGVvY,KAAM,SAAUrd,EAAMc,EAAM2C,GAC3B,GAAIhE,GAAK8e,EAAOsX,EACfV,EAAQn1B,EAAKuC,QAGd,IAAMvC,GAAkB,IAAVm1B,GAAyB,IAAVA,GAAyB,IAAVA,EAY5C,MARAU,GAAmB,IAAVV,IAAgBh3B,EAAO8X,SAAUjW,GAErC61B,IAEJ/0B,EAAO3C,EAAOo3B,QAASz0B,IAAUA,EACjCyd,EAAQpgB,EAAOqxB,UAAW1uB,IAGZU,SAAViC,EACG8a,GAAS,OAASA,IAAoD/c,UAA1C/B,EAAM8e,EAAMnB,IAAKpd,EAAMyD,EAAO3C,IAChErB,EACEO,EAAMc,GAAS2C,EAGX8a,GAAS,OAASA,IAA6C,QAAnC9e,EAAM8e,EAAMlf,IAAKW,EAAMc,IACzDrB,EACAO,EAAMc,IAIT0uB,WACC/d,UACCpS,IAAK,SAAUW,GACd,MAAOA,GAAK81B,aAAc,aAAgBL,GAAW1rB,KAAM/J,EAAKuD,WAAcvD,EAAKwR,KAClFxR,EAAKyR,SACL,QAQCxT,EAAQ42B,cACb12B,EAAOqxB,UAAU3d,UAChBxS,IAAK,SAAUW,GACd,GAAIkM,GAASlM,EAAKmD,UAIlB,OAHK+I,IAAUA,EAAO/I,YACrB+I,EAAO/I,WAAW2O,cAEZ,QAKV3T,EAAOyB,MACN,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACFzB,EAAOo3B,QAASj4B,KAAKkG,eAAkBlG,MAMxC,IAAIy4B,IAAS,aAEb53B,GAAOG,GAAGsC,QACTo1B,SAAU,SAAUvyB,GACnB,GAAIwyB,GAASj2B,EAAMqL,EAAK6qB,EAAO11B,EAAG21B,EACjCC,EAA2B,gBAAV3yB,IAAsBA,EACvCxD,EAAI,EACJM,EAAMjD,KAAK4B,MAEZ,IAAKf,EAAOkD,WAAYoC,GACvB,MAAOnG,MAAKsC,KAAK,SAAUY,GAC1BrC,EAAQb,MAAO04B,SAAUvyB,EAAMrE,KAAM9B,KAAMkD,EAAGlD,KAAKiP,aAIrD,IAAK6pB,EAIJ,IAFAH,GAAYxyB,GAAS,IAAKwF,MAAOqP,OAErB/X,EAAJN,EAASA,IAOhB,GANAD,EAAO1C,KAAM2C,GACboL,EAAwB,IAAlBrL,EAAKuC,WAAoBvC,EAAKuM,WACjC,IAAMvM,EAAKuM,UAAY,KAAM3K,QAASm0B,GAAQ,KAChD,KAGU,CACVv1B,EAAI,CACJ,OAAS01B,EAAQD,EAAQz1B,KACnB6K,EAAIzN,QAAS,IAAMs4B,EAAQ,KAAQ,IACvC7qB,GAAO6qB,EAAQ,IAKjBC,GAAah4B,EAAO2E,KAAMuI,GACrBrL,EAAKuM,YAAc4pB,IACvBn2B,EAAKuM,UAAY4pB,GAMrB,MAAO74B,OAGR+4B,YAAa,SAAU5yB,GACtB,GAAIwyB,GAASj2B,EAAMqL,EAAK6qB,EAAO11B,EAAG21B,EACjCC,EAA+B,IAArBj2B,UAAUjB,QAAiC,gBAAVuE,IAAsBA,EACjExD,EAAI,EACJM,EAAMjD,KAAK4B,MAEZ,IAAKf,EAAOkD,WAAYoC,GACvB,MAAOnG,MAAKsC,KAAK,SAAUY,GAC1BrC,EAAQb,MAAO+4B,YAAa5yB,EAAMrE,KAAM9B,KAAMkD,EAAGlD,KAAKiP,aAGxD,IAAK6pB,EAGJ,IAFAH,GAAYxyB,GAAS,IAAKwF,MAAOqP,OAErB/X,EAAJN,EAASA,IAQhB,GAPAD,EAAO1C,KAAM2C,GAEboL,EAAwB,IAAlBrL,EAAKuC,WAAoBvC,EAAKuM,WACjC,IAAMvM,EAAKuM,UAAY,KAAM3K,QAASm0B,GAAQ,KAChD,IAGU,CACVv1B,EAAI,CACJ,OAAS01B,EAAQD,EAAQz1B,KAExB,MAAQ6K,EAAIzN,QAAS,IAAMs4B,EAAQ,MAAS,EAC3C7qB,EAAMA,EAAIzJ,QAAS,IAAMs0B,EAAQ,IAAK,IAKxCC,GAAa1yB,EAAQtF,EAAO2E,KAAMuI,GAAQ,GACrCrL,EAAKuM,YAAc4pB,IACvBn2B,EAAKuM,UAAY4pB,GAMrB,MAAO74B,OAGRg5B,YAAa,SAAU7yB,EAAO8yB,GAC7B,GAAIr0B,SAAcuB,EAElB,OAAyB,iBAAb8yB,IAAmC,WAATr0B,EAC9Bq0B,EAAWj5B,KAAK04B,SAAUvyB,GAAUnG,KAAK+4B,YAAa5yB,GAItDnG,KAAKsC,KADRzB,EAAOkD,WAAYoC,GACN,SAAUxD,GAC1B9B,EAAQb,MAAOg5B,YAAa7yB,EAAMrE,KAAK9B,KAAM2C,EAAG3C,KAAKiP,UAAWgqB,GAAWA,IAI5D,WAChB,GAAc,WAATr0B,EAAoB,CAExB,GAAIqK,GACHtM,EAAI,EACJsW,EAAOpY,EAAQb,MACfk5B,EAAa/yB,EAAMwF,MAAOqP,MAE3B,OAAS/L,EAAYiqB,EAAYv2B,KAE3BsW,EAAKkgB,SAAUlqB,GACnBgK,EAAK8f,YAAa9pB,GAElBgK,EAAKyf,SAAUzpB,QAKNrK,IAASoE,GAAyB,YAATpE,KAC/B5E,KAAKiP,WAETmR,EAAUN,IAAK9f,KAAM,gBAAiBA,KAAKiP,WAO5CjP,KAAKiP,UAAYjP,KAAKiP,WAAa9I,KAAU,EAAQ,GAAKia,EAAUre,IAAK/B,KAAM,kBAAqB,OAKvGm5B,SAAU,SAAUr4B,GAInB,IAHA,GAAImO,GAAY,IAAMnO,EAAW,IAChC6B,EAAI,EACJsX,EAAIja,KAAK4B,OACEqY,EAAJtX,EAAOA,IACd,GAA0B,IAArB3C,KAAK2C,GAAGsC,WAAmB,IAAMjF,KAAK2C,GAAGsM,UAAY,KAAK3K,QAAQm0B,GAAQ,KAAKn4B,QAAS2O,IAAe,EAC3G,OAAO,CAIT,QAAO,IAOT,IAAImqB,IAAU,KAEdv4B,GAAOG,GAAGsC,QACTyN,IAAK,SAAU5K,GACd,GAAI8a,GAAO9e,EAAK4B,EACfrB,EAAO1C,KAAK,EAEb,EAAA,GAAM6C,UAAUjB,OAsBhB,MAFAmC,GAAalD,EAAOkD,WAAYoC,GAEzBnG,KAAKsC,KAAK,SAAUK,GAC1B,GAAIoO,EAEmB,KAAlB/Q,KAAKiF,WAKT8L,EADIhN,EACEoC,EAAMrE,KAAM9B,KAAM2C,EAAG9B,EAAQb,MAAO+Q,OAEpC5K,EAIK,MAAP4K,EACJA,EAAM,GAEoB,gBAARA,GAClBA,GAAO,GAEIlQ,EAAOoD,QAAS8M,KAC3BA,EAAMlQ,EAAO4B,IAAKsO,EAAK,SAAU5K,GAChC,MAAgB,OAATA,EAAgB,GAAKA,EAAQ,MAItC8a,EAAQpgB,EAAOw4B,SAAUr5B,KAAK4E,OAAU/D,EAAOw4B,SAAUr5B,KAAKiG,SAASC,eAGjE+a,GAAW,OAASA,IAA8C/c,SAApC+c,EAAMnB,IAAK9f,KAAM+Q,EAAK,WACzD/Q,KAAKmG,MAAQ4K,KAnDd,IAAKrO,EAGJ,MAFAue,GAAQpgB,EAAOw4B,SAAU32B,EAAKkC,OAAU/D,EAAOw4B,SAAU32B,EAAKuD,SAASC,eAElE+a,GAAS,OAASA,IAAgD/c,UAAtC/B,EAAM8e,EAAMlf,IAAKW,EAAM,UAChDP,GAGRA,EAAMO,EAAKyD,MAEW,gBAARhE,GAEbA,EAAImC,QAAQ80B,GAAS,IAEd,MAAPj3B,EAAc,GAAKA,OA4CxBtB,EAAOyC,QACN+1B,UACCtQ,QACChnB,IAAK,SAAUW,GACd,GAAIqO,GAAMlQ,EAAO0O,KAAKuB,KAAMpO,EAAM,QAClC,OAAc,OAAPqO,EACNA,EAGAlQ,EAAO2E,KAAM3E,EAAO6E,KAAMhD,MAG7BkF,QACC7F,IAAK,SAAUW,GAYd,IAXA,GAAIyD,GAAO4iB,EACVxlB,EAAUb,EAAKa,QACf6W,EAAQ1X,EAAK8R,cACb4T,EAAoB,eAAd1lB,EAAKkC,MAAiC,EAARwV,EACpC2D,EAASqK,EAAM,QACfsH,EAAMtH,EAAMhO,EAAQ,EAAI7W,EAAQ3B,OAChCe,EAAY,EAARyX,EACHsV,EACAtH,EAAMhO,EAAQ,EAGJsV,EAAJ/sB,EAASA,IAIhB,GAHAomB,EAASxlB,EAASZ,MAGXomB,EAAOxU,UAAY5R,IAAMyX,IAE5BzZ,EAAQ62B,YAAezO,EAAO1U,SAAiD,OAAtC0U,EAAOrc,aAAc,cAC7Dqc,EAAOljB,WAAWwO,UAAaxT,EAAOoF,SAAU8iB,EAAOljB,WAAY,aAAiB,CAMxF,GAHAM,EAAQtF,EAAQkoB,GAAShY,MAGpBqX,EACJ,MAAOjiB,EAIR4X,GAAO1d,KAAM8F,GAIf,MAAO4X,IAGR+B,IAAK,SAAUpd,EAAMyD,GACpB,GAAImzB,GAAWvQ,EACdxlB,EAAUb,EAAKa,QACfwa,EAASld,EAAOwF,UAAWF,GAC3BxD,EAAIY,EAAQ3B,MAEb,OAAQe,IACPomB,EAASxlB,EAASZ,IACZomB,EAAOxU,SAAW1T,EAAO2F,QAASuiB,EAAO5iB,MAAO4X,IAAY,KACjEub,GAAY,EAQd,OAHMA,KACL52B,EAAK8R,cAAgB,IAEfuJ,OAOXld,EAAOyB,MAAO,QAAS,YAAc,WACpCzB,EAAOw4B,SAAUr5B,OAChB8f,IAAK,SAAUpd,EAAMyD,GACpB,MAAKtF,GAAOoD,QAASkC,GACXzD,EAAK4R,QAAUzT,EAAO2F,QAAS3F,EAAO6B,GAAMqO,MAAO5K,IAAW,EADxE,SAKIxF,EAAQ22B,UACbz2B,EAAOw4B,SAAUr5B,MAAO+B,IAAM,SAAUW,GAGvC,MAAsC,QAA/BA,EAAKgK,aAAa,SAAoB,KAAOhK,EAAKyD,UAW5DtF,EAAOyB,KAAM,0MAEqD+E,MAAM,KAAM,SAAU1E,EAAGa,GAG1F3C,EAAOG,GAAIwC,GAAS,SAAUwY,EAAMhb,GACnC,MAAO6B,WAAUjB,OAAS,EACzB5B,KAAKmoB,GAAI3kB,EAAM,KAAMwY,EAAMhb,GAC3BhB,KAAKqkB,QAAS7gB,MAIjB3C,EAAOG,GAAGsC,QACTi2B,MAAO,SAAUC,EAAQC,GACxB,MAAOz5B,MAAK2nB,WAAY6R,GAAS5R,WAAY6R,GAASD,IAGvDE,KAAM,SAAU5W,EAAO9G,EAAMhb,GAC5B,MAAOhB,MAAKmoB,GAAIrF,EAAO,KAAM9G,EAAMhb,IAEpC24B,OAAQ,SAAU7W,EAAO9hB,GACxB,MAAOhB,MAAK2e,IAAKmE,EAAO,KAAM9hB,IAG/B44B,SAAU,SAAU94B,EAAUgiB,EAAO9G,EAAMhb,GAC1C,MAAOhB,MAAKmoB,GAAIrF,EAAOhiB,EAAUkb,EAAMhb,IAExC64B,WAAY,SAAU/4B,EAAUgiB,EAAO9hB,GAEtC,MAA4B,KAArB6B,UAAUjB,OAAe5B,KAAK2e,IAAK7d,EAAU,MAASd,KAAK2e,IAAKmE,EAAOhiB,GAAY,KAAME,KAKlG,IAAI84B,IAAQj5B,EAAOsG,MAEf4yB,GAAS,IAMbl5B,GAAO4f,UAAY,SAAUzE,GAC5B,MAAOge,MAAKC,MAAOje,EAAO,KAK3Bnb,EAAOq5B,SAAW,SAAUle,GAC3B,GAAIrJ,GAAKzL,CACT,KAAM8U,GAAwB,gBAATA,GACpB,MAAO,KAIR,KACC9U,EAAM,GAAIizB,WACVxnB,EAAMzL,EAAIkzB,gBAAiBpe,EAAM,YAChC,MAAQxQ,GACTmH,EAAMzO,OAMP,QAHMyO,GAAOA,EAAIrG,qBAAsB,eAAgB1K,SACtDf,EAAO2D,MAAO,gBAAkBwX,GAE1BrJ,EAIR,IAEC0nB,IACAC,GAEAC,GAAQ,OACRC,GAAM,gBACNC,GAAW,6BAEXC,GAAiB,4DACjBC,GAAa,iBACbC,GAAY,QACZC,GAAO,4DAWPC,MAOAC,MAGAC,GAAW,KAAK56B,OAAO,IAIxB,KACCk6B,GAAezmB,SAASK,KACvB,MAAO1I,IAGR8uB,GAAe16B,EAAS6F,cAAe,KACvC60B,GAAapmB,KAAO,GACpBomB,GAAeA,GAAapmB,KAI7BmmB,GAAeQ,GAAK1uB,KAAMmuB,GAAap0B,kBAGvC,SAAS+0B,IAA6BC,GAGrC,MAAO,UAAUC,EAAoB3e,GAED,gBAAvB2e,KACX3e,EAAO2e,EACPA,EAAqB,IAGtB,IAAIC,GACHz4B,EAAI,EACJ04B,EAAYF,EAAmBj1B,cAAcyF,MAAOqP,MAErD,IAAKna,EAAOkD,WAAYyY,GAEvB,MAAS4e,EAAWC,EAAU14B,KAER,MAAhBy4B,EAAS,IACbA,EAAWA,EAASj7B,MAAO,IAAO,KACjC+6B,EAAWE,GAAaF,EAAWE,QAAkBzqB,QAAS6L,KAI9D0e,EAAWE,GAAaF,EAAWE,QAAkB/6B,KAAMmc,IAQjE,QAAS8e,IAA+BJ,EAAW33B,EAAS6xB,EAAiBmG,GAE5E,GAAIC,MACHC,EAAqBP,IAAcH,EAEpC,SAASW,GAASN,GACjB,GAAI7mB,EAYJ,OAXAinB,GAAWJ,IAAa,EACxBv6B,EAAOyB,KAAM44B,EAAWE,OAAkB,SAAUnwB,EAAG0wB,GACtD,GAAIC,GAAsBD,EAAoBp4B,EAAS6xB,EAAiBmG,EACxE,OAAoC,gBAAxBK,IAAqCH,GAAqBD,EAAWI,GAIrEH,IACDlnB,EAAWqnB,GADf,QAHNr4B,EAAQ83B,UAAU1qB,QAASirB,GAC3BF,EAASE,IACF,KAKFrnB,EAGR,MAAOmnB,GAASn4B,EAAQ83B,UAAW,MAAUG,EAAW,MAASE,EAAS,KAM3E,QAASG,IAAYh4B,EAAQJ,GAC5B,GAAI2J,GAAKtJ,EACRg4B,EAAcj7B,EAAOk7B,aAAaD,eAEnC,KAAM1uB,IAAO3J,GACQS,SAAfT,EAAK2J,MACP0uB,EAAa1uB,GAAQvJ,EAAWC,IAASA,OAAgBsJ,GAAQ3J,EAAK2J,GAO1E,OAJKtJ,IACJjD,EAAOyC,QAAQ,EAAMO,EAAQC,GAGvBD,EAOR,QAASm4B,IAAqBC,EAAGV,EAAOW,GAEvC,GAAIC,GAAIv3B,EAAMw3B,EAAeC,EAC5B5iB,EAAWwiB,EAAExiB,SACb4hB,EAAYY,EAAEZ,SAGf,OAA2B,MAAnBA,EAAW,GAClBA,EAAU/tB,QACEpJ,SAAPi4B,IACJA,EAAKF,EAAEK,UAAYf,EAAMgB,kBAAkB,gBAK7C,IAAKJ,EACJ,IAAMv3B,IAAQ6U,GACb,GAAKA,EAAU7U,IAAU6U,EAAU7U,GAAO6H,KAAM0vB,GAAO,CACtDd,EAAU1qB,QAAS/L,EACnB,OAMH,GAAKy2B,EAAW,IAAOa,GACtBE,EAAgBf,EAAW,OACrB,CAEN,IAAMz2B,IAAQs3B,GAAY,CACzB,IAAMb,EAAW,IAAOY,EAAEO,WAAY53B,EAAO,IAAMy2B,EAAU,IAAO,CACnEe,EAAgBx3B,CAChB,OAEKy3B,IACLA,EAAgBz3B,GAIlBw3B,EAAgBA,GAAiBC,EAMlC,MAAKD,IACCA,IAAkBf,EAAW,IACjCA,EAAU1qB,QAASyrB,GAEbF,EAAWE,IAJnB,OAWD,QAASK,IAAaR,EAAGS,EAAUnB,EAAOoB,GACzC,GAAIC,GAAOC,EAASC,EAAM51B,EAAKyS,EAC9B6iB,KAEAnB,EAAYY,EAAEZ,UAAUl7B,OAGzB,IAAKk7B,EAAW,GACf,IAAMyB,IAAQb,GAAEO,WACfA,EAAYM,EAAK52B,eAAkB+1B,EAAEO,WAAYM,EAInDD,GAAUxB,EAAU/tB,OAGpB,OAAQuvB,EAcP,GAZKZ,EAAEc,eAAgBF,KACtBtB,EAAOU,EAAEc,eAAgBF,IAAcH,IAIlC/iB,GAAQgjB,GAAaV,EAAEe,aAC5BN,EAAWT,EAAEe,WAAYN,EAAUT,EAAEb,WAGtCzhB,EAAOkjB,EACPA,EAAUxB,EAAU/tB,QAKnB,GAAiB,MAAZuvB,EAEJA,EAAUljB,MAGJ,IAAc,MAATA,GAAgBA,IAASkjB,EAAU,CAM9C,GAHAC,EAAON,EAAY7iB,EAAO,IAAMkjB,IAAaL,EAAY,KAAOK,IAG1DC,EACL,IAAMF,IAASJ,GAId,GADAt1B,EAAM01B,EAAMv1B,MAAO,KACdH,EAAK,KAAQ21B,IAGjBC,EAAON,EAAY7iB,EAAO,IAAMzS,EAAK,KACpCs1B,EAAY,KAAOt1B,EAAK,KACb,CAEN41B,KAAS,EACbA,EAAON,EAAYI,GAGRJ,EAAYI,MAAY,IACnCC,EAAU31B,EAAK,GACfm0B,EAAU1qB,QAASzJ,EAAK,IAEzB,OAOJ,GAAK41B,KAAS,EAGb,GAAKA,GAAQb,EAAG,UACfS,EAAWI,EAAMJ,OAEjB,KACCA,EAAWI,EAAMJ,GAChB,MAAQlxB,GACT,OAASkR,MAAO,cAAelY,MAAOs4B,EAAOtxB,EAAI,sBAAwBmO,EAAO,OAASkjB,IAQ/F,OAASngB,MAAO,UAAWV,KAAM0gB,GAGlC77B,EAAOyC,QAGN25B,OAAQ,EAGRC,gBACAC,QAEApB,cACCqB,IAAK9C,GACL11B,KAAM,MACNy4B,QAAS3C,GAAejuB,KAAM4tB,GAAc,IAC5C76B,QAAQ,EACR89B,aAAa,EACbC,OAAO,EACPC,YAAa,mDAab9d,SACC6T,IAAKyH,GACLt1B,KAAM,aACNimB,KAAM,YACNhZ,IAAK,4BACL8qB,KAAM,qCAGPhkB,UACC9G,IAAK,MACLgZ,KAAM,OACN8R,KAAM,QAGPV,gBACCpqB,IAAK,cACLjN,KAAM,eACN+3B,KAAM,gBAKPjB,YAGCkB,SAAUryB,OAGVsyB,aAAa,EAGbC,YAAa/8B,EAAO4f,UAGpBod,WAAYh9B,EAAOq5B,UAOpB4B,aACCsB,KAAK,EACLr8B,SAAS,IAOX+8B,UAAW,SAAUj6B,EAAQk6B,GAC5B,MAAOA,GAGNlC,GAAYA,GAAYh4B,EAAQhD,EAAOk7B,cAAgBgC,GAGvDlC,GAAYh7B,EAAOk7B,aAAcl4B,IAGnCm6B,cAAe/C,GAA6BH,IAC5CmD,cAAehD,GAA6BF,IAG5CmD,KAAM,SAAUd,EAAK75B,GAGA,gBAAR65B,KACX75B,EAAU65B,EACVA,EAAMl5B,QAIPX,EAAUA,KAEV,IAAI46B,GAEHC,EAEAC,EACAC,EAEAC,EAEA3M,EAEA4M,EAEA77B,EAEAs5B,EAAIp7B,EAAOi9B,aAAev6B,GAE1Bk7B,EAAkBxC,EAAEl7B,SAAWk7B,EAE/ByC,EAAqBzC,EAAEl7B,UAAa09B,EAAgBx5B,UAAYw5B,EAAgB/8B,QAC/Eb,EAAQ49B,GACR59B,EAAOgiB,MAERhG,EAAWhc,EAAO0b,WAClBoiB,EAAmB99B,EAAOwa,UAAU,eAEpCujB,EAAa3C,EAAE2C,eAEfC,KACAC,KAEApiB,EAAQ,EAERqiB,EAAW,WAEXxD,GACCzc,WAAY,EAGZyd,kBAAmB,SAAUnvB,GAC5B,GAAIzB,EACJ,IAAe,IAAV+Q,EAAc,CAClB,IAAM4hB,EAAkB,CACvBA,IACA,OAAS3yB,EAAQ8uB,GAAStuB,KAAMkyB,GAC/BC,EAAiB3yB,EAAM,GAAGzF,eAAkByF,EAAO,GAGrDA,EAAQ2yB,EAAiBlxB,EAAIlH,eAE9B,MAAgB,OAATyF,EAAgB,KAAOA,GAI/BqzB,sBAAuB,WACtB,MAAiB,KAAVtiB,EAAc2hB,EAAwB,MAI9CY,iBAAkB,SAAUz7B,EAAM2C,GACjC,GAAI+4B,GAAQ17B,EAAK0C,aAKjB,OAJMwW,KACLlZ,EAAOs7B,EAAqBI,GAAUJ,EAAqBI,IAAW17B,EACtEq7B,EAAgBr7B,GAAS2C,GAEnBnG,MAIRm/B,iBAAkB,SAAUv6B,GAI3B,MAHM8X,KACLuf,EAAEK,SAAW13B,GAEP5E,MAIR4+B,WAAY,SAAUn8B,GACrB,GAAI2C,EACJ,IAAK3C,EACJ,GAAa,EAARia,EACJ,IAAMtX,IAAQ3C,GAEbm8B,EAAYx5B,IAAWw5B,EAAYx5B,GAAQ3C,EAAK2C,QAIjDm2B,GAAM3e,OAAQna,EAAK84B,EAAM6D,QAG3B,OAAOp/B,OAIRq/B,MAAO,SAAUC,GAChB,GAAIC,GAAYD,GAAcP,CAK9B,OAJKZ,IACJA,EAAUkB,MAAOE,GAElB/2B,EAAM,EAAG+2B,GACFv/B,MAyCV,IApCA6c,EAASF,QAAS4e,GAAQ/F,SAAWmJ,EAAiBrkB,IACtDihB,EAAMiE,QAAUjE,EAAM/yB,KACtB+yB,EAAM/2B,MAAQ+2B,EAAMze,KAMpBmf,EAAEmB,MAAUA,GAAOnB,EAAEmB,KAAO9C,IAAiB,IAAKh2B,QAASi2B,GAAO,IAChEj2B,QAASs2B,GAAWP,GAAc,GAAM,MAG1C4B,EAAEr3B,KAAOrB,EAAQk8B,QAAUl8B,EAAQqB,MAAQq3B,EAAEwD,QAAUxD,EAAEr3B,KAGzDq3B,EAAEZ,UAAYx6B,EAAO2E,KAAMy2B,EAAEb,UAAY,KAAMl1B,cAAcyF,MAAOqP,KAAiB,IAG/D,MAAjBihB,EAAEyD,cACN9N,EAAQiJ,GAAK1uB,KAAM8vB,EAAEmB,IAAIl3B,eACzB+1B,EAAEyD,eAAkB9N,GACjBA,EAAO,KAAQyI,GAAc,IAAOzI,EAAO,KAAQyI,GAAc,KAChEzI,EAAO,KAAwB,UAAfA,EAAO,GAAkB,KAAO,WAC/CyI,GAAc,KAA+B,UAAtBA,GAAc,GAAkB,KAAO,UAK/D4B,EAAEjgB,MAAQigB,EAAEqB,aAAiC,gBAAXrB,GAAEjgB,OACxCigB,EAAEjgB,KAAOnb,EAAO8+B,MAAO1D,EAAEjgB,KAAMigB,EAAE2D,cAIlCtE,GAA+BR,GAAYmB,EAAG14B,EAASg4B,GAGxC,IAAV7e,EACJ,MAAO6e,EAIRiD,GAAcvC,EAAEz8B,OAGXg/B,GAAmC,IAApB39B,EAAOo8B,UAC1Bp8B,EAAOgiB,MAAMwB,QAAQ,aAItB4X,EAAEr3B,KAAOq3B,EAAEr3B,KAAKpD,cAGhBy6B,EAAE4D,YAAclF,GAAWluB,KAAMwvB,EAAEr3B,MAInCw5B,EAAWnC,EAAEmB,IAGPnB,EAAE4D,aAGF5D,EAAEjgB,OACNoiB,EAAanC,EAAEmB,MAASrD,GAAOttB,KAAM2xB,GAAa,IAAM,KAAQnC,EAAEjgB,WAE3DigB,GAAEjgB,MAILigB,EAAE9uB,SAAU,IAChB8uB,EAAEmB,IAAM5C,GAAI/tB,KAAM2xB,GAGjBA,EAAS95B,QAASk2B,GAAK,OAASV,MAGhCsE,GAAarE,GAAOttB,KAAM2xB,GAAa,IAAM,KAAQ,KAAOtE,OAK1DmC,EAAE6D,aACDj/B,EAAOq8B,aAAckB,IACzB7C,EAAM0D,iBAAkB,oBAAqBp+B,EAAOq8B,aAAckB,IAE9Dv9B,EAAOs8B,KAAMiB,IACjB7C,EAAM0D,iBAAkB,gBAAiBp+B,EAAOs8B,KAAMiB,MAKnDnC,EAAEjgB,MAAQigB,EAAE4D,YAAc5D,EAAEuB,eAAgB,GAASj6B,EAAQi6B,cACjEjC,EAAM0D,iBAAkB,eAAgBhD,EAAEuB,aAI3CjC,EAAM0D,iBACL,SACAhD,EAAEZ,UAAW,IAAOY,EAAEvc,QAASuc,EAAEZ,UAAU,IAC1CY,EAAEvc,QAASuc,EAAEZ,UAAU,KAA8B,MAArBY,EAAEZ,UAAW,GAAc,KAAOL,GAAW,WAAa,IAC1FiB,EAAEvc,QAAS,KAIb,KAAM/c,IAAKs5B,GAAE8D,QACZxE,EAAM0D,iBAAkBt8B,EAAGs5B,EAAE8D,QAASp9B,GAIvC,IAAKs5B,EAAE+D,aAAgB/D,EAAE+D,WAAWl+B,KAAM28B,EAAiBlD,EAAOU,MAAQ,GAAmB,IAAVvf,GAElF,MAAO6e,GAAM8D,OAIdN,GAAW,OAGX,KAAMp8B,KAAO68B,QAAS,EAAGh7B,MAAO,EAAGgxB,SAAU,GAC5C+F,EAAO54B,GAAKs5B,EAAGt5B,GAOhB,IAHAw7B,EAAY7C,GAA+BP,GAAYkB,EAAG14B,EAASg4B,GAK5D,CACNA,EAAMzc,WAAa,EAGd0f,GACJE,EAAmBra,QAAS,YAAckX,EAAOU,IAG7CA,EAAEsB,OAAStB,EAAE7E,QAAU,IAC3BmH,EAAexf,WAAW,WACzBwc,EAAM8D,MAAM,YACVpD,EAAE7E,SAGN,KACC1a,EAAQ,EACRyhB,EAAU8B,KAAMpB,EAAgBr2B,GAC/B,MAAQgD,GAET,KAAa,EAARkR,GAIJ,KAAMlR,EAHNhD,GAAM,GAAIgD,QArBZhD,GAAM,GAAI,eA8BX,SAASA,GAAM42B,EAAQc,EAAkBhE,EAAW6D,GACnD,GAAIpD,GAAW6C,EAASh7B,EAAOk4B,EAAUyD,EACxCb,EAAaY,CAGC,KAAVxjB,IAKLA,EAAQ,EAGH6hB,GACJlH,aAAckH,GAKfJ,EAAYj6B,OAGZm6B,EAAwB0B,GAAW,GAGnCxE,EAAMzc,WAAasgB,EAAS,EAAI,EAAI,EAGpCzC,EAAYyC,GAAU,KAAgB,IAATA,GAA2B,MAAXA,EAGxClD,IACJQ,EAAWV,GAAqBC,EAAGV,EAAOW,IAI3CQ,EAAWD,GAAaR,EAAGS,EAAUnB,EAAOoB,GAGvCA,GAGCV,EAAE6D,aACNK,EAAW5E,EAAMgB,kBAAkB,iBAC9B4D,IACJt/B,EAAOq8B,aAAckB,GAAa+B,GAEnCA,EAAW5E,EAAMgB,kBAAkB,QAC9B4D,IACJt/B,EAAOs8B,KAAMiB,GAAa+B,IAKZ,MAAXf,GAA6B,SAAXnD,EAAEr3B,KACxB06B,EAAa,YAGS,MAAXF,EACXE,EAAa,eAIbA,EAAa5C,EAAShgB,MACtB8iB,EAAU9C,EAAS1gB,KACnBxX,EAAQk4B,EAASl4B,MACjBm4B,GAAan4B,KAKdA,EAAQ86B,GACHF,IAAWE,KACfA,EAAa,QACC,EAATF,IACJA,EAAS,KAMZ7D,EAAM6D,OAASA,EACf7D,EAAM+D,YAAeY,GAAoBZ,GAAe,GAGnD3C,EACJ9f,EAASqB,YAAaugB,GAAmBe,EAASF,EAAY/D,IAE9D1e,EAASyY,WAAYmJ,GAAmBlD,EAAO+D,EAAY96B,IAI5D+2B,EAAMqD,WAAYA,GAClBA,EAAa16B,OAERs6B,GACJE,EAAmBra,QAASsY,EAAY,cAAgB,aACrDpB,EAAOU,EAAGU,EAAY6C,EAAUh7B,IAIpCm6B,EAAiBriB,SAAUmiB,GAAmBlD,EAAO+D,IAEhDd,IACJE,EAAmBra,QAAS,gBAAkBkX,EAAOU,MAE3Cp7B,EAAOo8B,QAChBp8B,EAAOgiB,MAAMwB,QAAQ,cAKxB,MAAOkX,IAGR6E,QAAS,SAAUhD,EAAKphB,EAAMzZ,GAC7B,MAAO1B,GAAOkB,IAAKq7B,EAAKphB,EAAMzZ,EAAU,SAGzC89B,UAAW,SAAUjD,EAAK76B,GACzB,MAAO1B,GAAOkB,IAAKq7B,EAAKl5B,OAAW3B,EAAU,aAI/C1B,EAAOyB,MAAQ,MAAO,QAAU,SAAUK,EAAG88B,GAC5C5+B,EAAQ4+B,GAAW,SAAUrC,EAAKphB,EAAMzZ,EAAUqC,GAQjD,MANK/D,GAAOkD,WAAYiY,KACvBpX,EAAOA,GAAQrC,EACfA,EAAWyZ,EACXA,EAAO9X,QAGDrD,EAAOq9B,MACbd,IAAKA,EACLx4B,KAAM66B,EACNrE,SAAUx2B,EACVoX,KAAMA,EACNwjB,QAASj9B,OAMZ1B,EAAOyB,MAAQ,YAAa,WAAY,eAAgB,YAAa,cAAe,YAAc,SAAUK,EAAGiC,GAC9G/D,EAAOG,GAAI4D,GAAS,SAAU5D,GAC7B,MAAOhB,MAAKmoB,GAAIvjB,EAAM5D,MAKxBH,EAAOorB,SAAW,SAAUmR,GAC3B,MAAOv8B,GAAOq9B,MACbd,IAAKA,EACLx4B,KAAM,MACNw2B,SAAU,SACVmC,OAAO,EACP/9B,QAAQ,EACR8gC,UAAU,KAKZz/B,EAAOG,GAAGsC,QACTi9B,QAAS,SAAU5U,GAClB,GAAIX,EAEJ,OAAKnqB,GAAOkD,WAAY4nB,GAChB3rB,KAAKsC,KAAK,SAAUK,GAC1B9B,EAAQb,MAAOugC,QAAS5U,EAAK7pB,KAAK9B,KAAM2C,OAIrC3C,KAAM,KAGVgrB,EAAOnqB,EAAQ8qB,EAAM3rB,KAAM,GAAIkM,eAAgBnJ,GAAI,GAAIa,OAAO,GAEzD5D,KAAM,GAAI6F,YACdmlB,EAAKO,aAAcvrB,KAAM,IAG1BgrB,EAAKvoB,IAAI,WACR,GAAIC,GAAO1C,IAEX,OAAQ0C,EAAK89B,kBACZ99B,EAAOA,EAAK89B,iBAGb,OAAO99B,KACL0oB,OAAQprB,OAGLA,OAGRygC,UAAW,SAAU9U,GACpB,MACQ3rB,MAAKsC,KADRzB,EAAOkD,WAAY4nB,GACN,SAAUhpB,GAC1B9B,EAAQb,MAAOygC,UAAW9U,EAAK7pB,KAAK9B,KAAM2C,KAI3B,WAChB,GAAIsW,GAAOpY,EAAQb,MAClByZ,EAAWR,EAAKQ,UAEZA,GAAS7X,OACb6X,EAAS8mB,QAAS5U,GAGlB1S,EAAKmS,OAAQO,MAKhBX,KAAM,SAAUW,GACf,GAAI5nB,GAAalD,EAAOkD,WAAY4nB,EAEpC,OAAO3rB,MAAKsC,KAAK,SAAUK,GAC1B9B,EAAQb,MAAOugC,QAASx8B,EAAa4nB,EAAK7pB,KAAK9B,KAAM2C,GAAKgpB,MAI5D+U,OAAQ,WACP,MAAO1gC,MAAK4O,SAAStM,KAAK,WACnBzB,EAAOoF,SAAUjG,KAAM,SAC5Ba,EAAQb,MAAO4rB,YAAa5rB,KAAKuL,cAEhCpI,SAKLtC,EAAO+P,KAAK2E,QAAQ8a,OAAS,SAAU3tB,GAGtC,MAAOA,GAAKutB,aAAe,GAAKvtB,EAAKwtB,cAAgB,GAEtDrvB,EAAO+P,KAAK2E,QAAQorB,QAAU,SAAUj+B,GACvC,OAAQ7B,EAAO+P,KAAK2E,QAAQ8a,OAAQ3tB,GAMrC,IAAIk+B,IAAM,OACTC,GAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,oCAEhB,SAASC,IAAazP,EAAQ7sB,EAAKi7B,EAAatlB,GAC/C,GAAI9W,EAEJ,IAAK3C,EAAOoD,QAASU,GAEpB9D,EAAOyB,KAAMqC,EAAK,SAAUhC,EAAGu+B,GACzBtB,GAAeiB,GAASp0B,KAAM+kB,GAElClX,EAAKkX,EAAQ0P,GAIbD,GAAazP,EAAS,KAAqB,gBAAN0P,GAAiBv+B,EAAI,IAAO,IAAKu+B,EAAGtB,EAAatlB,SAIlF,IAAMslB,GAAsC,WAAvB/+B,EAAO+D,KAAMD,GAQxC2V,EAAKkX,EAAQ7sB,OANb,KAAMnB,IAAQmB,GACbs8B,GAAazP,EAAS,IAAMhuB,EAAO,IAAKmB,EAAKnB,GAAQo8B,EAAatlB,GAWrEzZ,EAAO8+B,MAAQ,SAAU72B,EAAG82B,GAC3B,GAAIpO,GACHyK,KACA3hB,EAAM,SAAUlN,EAAKjH,GAEpBA,EAAQtF,EAAOkD,WAAYoC,GAAUA,IAAqB,MAATA,EAAgB,GAAKA,EACtE81B,EAAGA,EAAEr6B,QAAWu/B,mBAAoB/zB,GAAQ,IAAM+zB,mBAAoBh7B,GASxE,IALqBjC,SAAhB07B,IACJA,EAAc/+B,EAAOk7B,cAAgBl7B,EAAOk7B,aAAa6D,aAIrD/+B,EAAOoD,QAAS6E,IAASA,EAAEpH,SAAWb,EAAOmD,cAAe8E,GAEhEjI,EAAOyB,KAAMwG,EAAG,WACfwR,EAAKta,KAAKwD,KAAMxD,KAAKmG,aAMtB,KAAMqrB,IAAU1oB,GACfm4B,GAAazP,EAAQ1oB,EAAG0oB,GAAUoO,EAAatlB,EAKjD,OAAO2hB,GAAEnvB,KAAM,KAAMxI,QAASs8B,GAAK,MAGpC//B,EAAOG,GAAGsC,QACT89B,UAAW,WACV,MAAOvgC,GAAO8+B,MAAO3/B,KAAKqhC,mBAE3BA,eAAgB,WACf,MAAOrhC,MAAKyC,IAAI,WAEf,GAAIoO,GAAWhQ,EAAOkf,KAAM/f,KAAM,WAClC,OAAO6Q,GAAWhQ,EAAOwF,UAAWwK,GAAa7Q,OAEjDwP,OAAO,WACP,GAAI5K,GAAO5E,KAAK4E,IAGhB,OAAO5E,MAAKwD,OAAS3C,EAAQb,MAAOkZ,GAAI,cACvC8nB,GAAav0B,KAAMzM,KAAKiG,YAAe86B,GAAgBt0B,KAAM7H,KAC3D5E,KAAKsU,UAAYwN,EAAerV,KAAM7H,MAEzCnC,IAAI,SAAUE,EAAGD,GACjB,GAAIqO,GAAMlQ,EAAQb,MAAO+Q,KAEzB,OAAc,OAAPA,EACN,KACAlQ,EAAOoD,QAAS8M,GACflQ,EAAO4B,IAAKsO,EAAK,SAAUA,GAC1B,OAASvN,KAAMd,EAAKc,KAAM2C,MAAO4K,EAAIzM,QAASw8B,GAAO,YAEpDt9B,KAAMd,EAAKc,KAAM2C,MAAO4K,EAAIzM,QAASw8B,GAAO,WAC9C/+B,SAKLlB,EAAOk7B,aAAauF,IAAM,WACzB,IACC,MAAO,IAAIC,gBACV,MAAO/1B,KAGV,IAAIg2B,IAAQ,EACXC,MACAC,IAEC,EAAG,IAGHC,KAAM,KAEPC,GAAe/gC,EAAOk7B,aAAauF,KAI/BvhC,GAAO8hC,eACXhhC,EAAQd,GAASooB,GAAI,SAAU,WAC9B,IAAM,GAAI/a,KAAOq0B,IAChBA,GAAcr0B,OAKjBzM,EAAQmhC,OAASF,IAAkB,mBAAqBA,IACxDjhC,EAAQu9B,KAAO0D,KAAiBA,GAEhC/gC,EAAOo9B,cAAc,SAAU16B,GAC9B,GAAIhB,EAGJ,OAAK5B,GAAQmhC,MAAQF,KAAiBr+B,EAAQm8B,aAE5CO,KAAM,SAAUF,EAASvK,GACxB,GAAI7yB,GACH2+B,EAAM/9B,EAAQ+9B,MACdj1B,IAAOm1B,EAKR,IAHAF,EAAIS,KAAMx+B,EAAQqB,KAAMrB,EAAQ65B,IAAK75B,EAAQg6B,MAAOh6B,EAAQy+B,SAAUz+B,EAAQ4R,UAGzE5R,EAAQ0+B,UACZ,IAAMt/B,IAAKY,GAAQ0+B,UAClBX,EAAK3+B,GAAMY,EAAQ0+B,UAAWt/B,EAK3BY,GAAQ+4B,UAAYgF,EAAInC,kBAC5BmC,EAAInC,iBAAkB57B,EAAQ+4B,UAQzB/4B,EAAQm8B,aAAgBK,EAAQ,sBACrCA,EAAQ,oBAAsB,iBAI/B,KAAMp9B,IAAKo9B,GACVuB,EAAIrC,iBAAkBt8B,EAAGo9B,EAASp9B,GAInCJ,GAAW,SAAUqC,GACpB,MAAO,YACDrC,UACGk/B,IAAcp1B,GACrB9J,EAAW++B,EAAIY,OAASZ,EAAIa,QAAU,KAExB,UAATv9B,EACJ08B,EAAIjC,QACgB,UAATz6B,EACX4wB,EAEC8L,EAAIlC,OACJkC,EAAIhC,YAGL9J,EACCkM,GAAkBJ,EAAIlC,SAAYkC,EAAIlC,OACtCkC,EAAIhC,WAIwB,gBAArBgC,GAAIc,cACV18B,KAAM47B,EAAIc,cACPl+B,OACJo9B,EAAItC,4BAQTsC,EAAIY,OAAS3/B,IACb++B,EAAIa,QAAU5/B,EAAS,SAGvBA,EAAWk/B,GAAcp1B,GAAO9J,EAAS,QAEzC,KAEC++B,EAAIrB,KAAM18B,EAAQs8B,YAAct8B,EAAQyY,MAAQ,MAC/C,MAAQxQ,GAET,GAAKjJ,EACJ,KAAMiJ,KAKT6zB,MAAO,WACD98B,GACJA,MAvFJ,SAkGD1B,EAAOi9B,WACNpe,SACCra,OAAQ,6FAEToU,UACCpU,OAAQ,uBAETm3B,YACC6F,cAAe,SAAU38B,GAExB,MADA7E,GAAOsE,WAAYO,GACZA,MAMV7E,EAAOm9B,cAAe,SAAU,SAAU/B,GACxB/3B,SAAZ+3B,EAAE9uB,QACN8uB,EAAE9uB,OAAQ,GAEN8uB,EAAEyD,cACNzD,EAAEr3B,KAAO,SAKX/D,EAAOo9B,cAAe,SAAU,SAAUhC,GAEzC,GAAKA,EAAEyD,YAAc,CACpB,GAAIr6B,GAAQ9C,CACZ,QACC09B,KAAM,SAAUh1B,EAAGuqB,GAClBnwB,EAASxE,EAAO,YAAYkf,MAC3Bwd,OAAO,EACP+E,QAASrG,EAAEsG,cACX9+B,IAAKw4B,EAAEmB,MACLjV,GACF,aACA5lB,EAAW,SAAUigC,GACpBn9B,EAAO8W,SACP5Z,EAAW,KACNigC,GACJhN,EAAuB,UAAbgN,EAAI59B,KAAmB,IAAM,IAAK49B,EAAI59B,QAInDhF,EAAS+F,KAAKC,YAAaP,EAAQ,KAEpCg6B,MAAO,WACD98B,GACJA,QAUL,IAAIkgC,OACHC,GAAS,mBAGV7hC,GAAOi9B,WACN6E,MAAO,WACPC,cAAe,WACd,GAAIrgC,GAAWkgC,GAAav5B,OAAWrI,EAAOsD,QAAU,IAAQ21B,IAEhE,OADA95B,MAAMuC,IAAa,EACZA,KAKT1B,EAAOm9B,cAAe,aAAc,SAAU/B,EAAG4G,EAAkBtH,GAElE,GAAIuH,GAAcC,EAAaC,EAC9BC,EAAWhH,EAAE0G,SAAU,IAAWD,GAAOj2B,KAAMwvB,EAAEmB,KAChD,MACkB,gBAAXnB,GAAEjgB,QAAwBigB,EAAEuB,aAAe,IAAKl9B,QAAQ,sCAAwCoiC,GAAOj2B,KAAMwvB,EAAEjgB,OAAU,OAIlI,OAAKinB,IAAiC,UAArBhH,EAAEZ,UAAW,IAG7ByH,EAAe7G,EAAE2G,cAAgB/hC,EAAOkD,WAAYk4B,EAAE2G,eACrD3G,EAAE2G,gBACF3G,EAAE2G,cAGEK,EACJhH,EAAGgH,GAAahH,EAAGgH,GAAW3+B,QAASo+B,GAAQ,KAAOI,GAC3C7G,EAAE0G,SAAU,IACvB1G,EAAEmB,MAASrD,GAAOttB,KAAMwvB,EAAEmB,KAAQ,IAAM,KAAQnB,EAAE0G,MAAQ,IAAMG,GAIjE7G,EAAEO,WAAW,eAAiB,WAI7B,MAHMwG,IACLniC,EAAO2D,MAAOs+B,EAAe,mBAEvBE,EAAmB,IAI3B/G,EAAEZ,UAAW,GAAM,OAGnB0H,EAAchjC,EAAQ+iC,GACtB/iC,EAAQ+iC,GAAiB,WACxBE,EAAoBngC,WAIrB04B,EAAM3e,OAAO,WAEZ7c,EAAQ+iC,GAAiBC,EAGpB9G,EAAG6G,KAEP7G,EAAE2G,cAAgBC,EAAiBD,cAGnCH,GAAapiC,KAAMyiC,IAIfE,GAAqBniC,EAAOkD,WAAYg/B,IAC5CA,EAAaC,EAAmB,IAGjCA,EAAoBD,EAAc7+B,SAI5B,UAtDR,SAgEDrD,EAAOuY,UAAY,SAAU4C,EAAMjb,EAASmiC,GAC3C,IAAMlnB,GAAwB,gBAATA,GACpB,MAAO,KAEgB,kBAAZjb,KACXmiC,EAAcniC,EACdA,GAAU,GAEXA,EAAUA,GAAWnB,CAErB,IAAIujC,GAAStqB,EAAW1M,KAAM6P,GAC7B8O,GAAWoY,KAGZ,OAAKC,IACKpiC,EAAQ0E,cAAe09B,EAAO,MAGxCA,EAAStiC,EAAOgqB,eAAiB7O,GAAQjb,EAAS+pB,GAE7CA,GAAWA,EAAQlpB,QACvBf,EAAQiqB,GAAU3O,SAGZtb,EAAOuB,SAAW+gC,EAAO53B,aAKjC,IAAI63B,IAAQviC,EAAOG,GAAGgmB,IAKtBnmB,GAAOG,GAAGgmB,KAAO,SAAUoW,EAAKiG,EAAQ9gC,GACvC,GAAoB,gBAAR66B,IAAoBgG,GAC/B,MAAOA,IAAMxgC,MAAO5C,KAAM6C,UAG3B,IAAI/B,GAAU8D,EAAM83B,EACnBzjB,EAAOjZ,KACP2e,EAAMye,EAAI98B,QAAQ,IA+CnB,OA7CKqe,IAAO,IACX7d,EAAWD,EAAO2E,KAAM43B,EAAIj9B,MAAOwe,IACnCye,EAAMA,EAAIj9B,MAAO,EAAGwe,IAIhB9d,EAAOkD,WAAYs/B,IAGvB9gC,EAAW8gC,EACXA,EAASn/B,QAGEm/B,GAA4B,gBAAXA,KAC5Bz+B,EAAO,QAIHqU,EAAKrX,OAAS,GAClBf,EAAOq9B,MACNd,IAAKA,EAGLx4B,KAAMA,EACNw2B,SAAU,OACVpf,KAAMqnB,IACJ76B,KAAK,SAAU45B,GAGjB1F,EAAW75B,UAEXoW,EAAK0S,KAAM7qB,EAIVD,EAAO,SAASuqB,OAAQvqB,EAAOuY,UAAWgpB,IAAiB7yB,KAAMzO,GAGjEshC,KAEC5M,SAAUjzB,GAAY,SAAUg5B,EAAO6D,GACzCnmB,EAAK3W,KAAMC,EAAUm6B,IAAcnB,EAAM6G,aAAchD,EAAQ7D,MAI1Dv7B,MAMRa,EAAO+P,KAAK2E,QAAQ+tB,SAAW,SAAU5gC,GACxC,MAAO7B,GAAO6F,KAAK7F,EAAOw1B,OAAQ,SAAUr1B,GAC3C,MAAO0B,KAAS1B,EAAG0B,OACjBd,OAMJ,IAAIqG,IAAUlI,EAAOH,SAAS4O,eAK9B,SAAS+0B,IAAW7gC,GACnB,MAAO7B,GAAOiE,SAAUpC,GAASA,EAAyB,IAAlBA,EAAKuC,UAAkBvC,EAAKmM,YAGrEhO,EAAO2iC,QACNC,UAAW,SAAU/gC,EAAMa,EAASZ,GACnC,GAAI+gC,GAAaC,EAASC,EAAWC,EAAQC,EAAWC,EAAYC,EACnEjV,EAAWluB,EAAOghB,IAAKnf,EAAM,YAC7BuhC,EAAUpjC,EAAQ6B,GAClBkjB,IAGiB,YAAbmJ,IACJrsB,EAAKgqB,MAAMqC,SAAW,YAGvB+U,EAAYG,EAAQT,SACpBI,EAAY/iC,EAAOghB,IAAKnf,EAAM,OAC9BqhC,EAAaljC,EAAOghB,IAAKnf,EAAM,QAC/BshC,GAAmC,aAAbjV,GAAwC,UAAbA,KAC9C6U,EAAYG,GAAazjC,QAAQ,QAAU,GAGzC0jC,GACJN,EAAcO,EAAQlV,WACtB8U,EAASH,EAAY50B,IACrB60B,EAAUD,EAAYQ,OAGtBL,EAAS7+B,WAAY4+B,IAAe,EACpCD,EAAU3+B,WAAY++B,IAAgB,GAGlCljC,EAAOkD,WAAYR,KACvBA,EAAUA,EAAQzB,KAAMY,EAAMC,EAAGmhC,IAGd,MAAfvgC,EAAQuL,MACZ8W,EAAM9W,IAAQvL,EAAQuL,IAAMg1B,EAAUh1B,IAAQ+0B,GAE1B,MAAhBtgC,EAAQ2gC,OACZte,EAAMse,KAAS3gC,EAAQ2gC,KAAOJ,EAAUI,KAASP,GAG7C,SAAWpgC,GACfA,EAAQ4gC,MAAMriC,KAAMY,EAAMkjB,GAG1Bqe,EAAQpiB,IAAK+D,KAKhB/kB,EAAOG,GAAGsC,QACTkgC,OAAQ,SAAUjgC,GACjB,GAAKV,UAAUjB,OACd,MAAmBsC,UAAZX,EACNvD,KACAA,KAAKsC,KAAK,SAAUK,GACnB9B,EAAO2iC,OAAOC,UAAWzjC,KAAMuD,EAASZ,IAI3C,IAAIsF,GAASm8B,EACZ1hC,EAAO1C,KAAM,GACbqkC,GAAQv1B,IAAK,EAAGo1B,KAAM,GACtBv1B,EAAMjM,GAAQA,EAAKwJ,aAEpB,IAAMyC,EAON,MAHA1G,GAAU0G,EAAIH,gBAGR3N,EAAOwH,SAAUJ,EAASvF,UAMpBA,GAAK4hC,wBAA0Bt7B,IAC1Cq7B,EAAM3hC,EAAK4hC,yBAEZF,EAAMb,GAAW50B,IAEhBG,IAAKu1B,EAAIv1B,IAAMs1B,EAAIG,YAAct8B,EAAQ4e,UACzCqd,KAAMG,EAAIH,KAAOE,EAAII,YAAcv8B,EAAQwe,aAXpC4d,GAeTtV,SAAU,WACT,GAAM/uB,KAAM,GAAZ,CAIA,GAAIykC,GAAcjB,EACjB9gC,EAAO1C,KAAM,GACb0kC,GAAiB51B,IAAK,EAAGo1B,KAAM,EAuBhC,OApBwC,UAAnCrjC,EAAOghB,IAAKnf,EAAM,YAEtB8gC,EAAS9gC,EAAK4hC,yBAIdG,EAAezkC,KAAKykC,eAGpBjB,EAASxjC,KAAKwjC,SACR3iC,EAAOoF,SAAUw+B,EAAc,GAAK,UACzCC,EAAeD,EAAajB,UAI7BkB,EAAa51B,KAAOjO,EAAOghB,IAAK4iB,EAAc,GAAK,kBAAkB,GACrEC,EAAaR,MAAQrjC,EAAOghB,IAAK4iB,EAAc,GAAK,mBAAmB,KAKvE31B,IAAK00B,EAAO10B,IAAM41B,EAAa51B,IAAMjO,EAAOghB,IAAKnf,EAAM,aAAa,GACpEwhC,KAAMV,EAAOU,KAAOQ,EAAaR,KAAOrjC,EAAOghB,IAAKnf,EAAM,cAAc,MAI1E+hC,aAAc,WACb,MAAOzkC,MAAKyC,IAAI,WACf,GAAIgiC,GAAezkC,KAAKykC,cAAgBx8B,EAExC,OAAQw8B,IAAmB5jC,EAAOoF,SAAUw+B,EAAc,SAAuD,WAA3C5jC,EAAOghB,IAAK4iB,EAAc,YAC/FA,EAAeA,EAAaA,YAG7B,OAAOA,IAAgBx8B,QAM1BpH,EAAOyB,MAAQkkB,WAAY,cAAeI,UAAW,eAAiB,SAAU6Y,EAAQ1f,GACvF,GAAIjR,GAAM,gBAAkBiR,CAE5Blf,GAAOG,GAAIy+B,GAAW,SAAU1uB,GAC/B,MAAOiO,GAAQhf,KAAM,SAAU0C,EAAM+8B,EAAQ1uB,GAC5C,GAAIqzB,GAAMb,GAAW7gC,EAErB,OAAawB,UAAR6M,EACGqzB,EAAMA,EAAKrkB,GAASrd,EAAM+8B,QAG7B2E,EACJA,EAAIO,SACF71B,EAAY/O,EAAOykC,YAAbzzB,EACPjC,EAAMiC,EAAMhR,EAAOwkC,aAIpB7hC,EAAM+8B,GAAW1uB,IAEhB0uB,EAAQ1uB,EAAKlO,UAAUjB,OAAQ,SAQpCf,EAAOyB,MAAQ,MAAO,QAAU,SAAUK,EAAGod,GAC5Clf,EAAOyvB,SAAUvQ,GAAS2N,GAAc/sB,EAAQ0tB,cAC/C,SAAU3rB,EAAM2qB,GACf,MAAKA,IACJA,EAAWD,GAAQ1qB,EAAMqd,GAElBkN,GAAUxgB,KAAM4gB,GACtBxsB,EAAQ6B,GAAOqsB,WAAYhP,GAAS,KACpCsN,GALF,WAaHxsB,EAAOyB,MAAQsiC,OAAQ,SAAUC,MAAO,SAAW,SAAUrhC,EAAMoB,GAClE/D,EAAOyB,MAAQgvB,QAAS,QAAU9tB,EAAMmmB,QAAS/kB,EAAM,GAAI,QAAUpB,GAAQ,SAAUshC,EAAcC,GAEpGlkC,EAAOG,GAAI+jC,GAAa,SAAU1T,EAAQlrB,GACzC,GAAI8Y,GAAYpc,UAAUjB,SAAYkjC,GAAkC,iBAAXzT,IAC5DzB,EAAQkV,IAAkBzT,KAAW,GAAQlrB,KAAU,EAAO,SAAW,SAE1E,OAAO6Y,GAAQhf,KAAM,SAAU0C,EAAMkC,EAAMuB,GAC1C,GAAIwI,EAEJ,OAAK9N,GAAOiE,SAAUpC,GAIdA,EAAK9C,SAAS4O,gBAAiB,SAAWhL,GAI3B,IAAlBd,EAAKuC,UACT0J,EAAMjM,EAAK8L,gBAIJpK,KAAKsrB,IACXhtB,EAAK2jB,KAAM,SAAW7iB,GAAQmL,EAAK,SAAWnL,GAC9Cd,EAAK2jB,KAAM,SAAW7iB,GAAQmL,EAAK,SAAWnL,GAC9CmL,EAAK,SAAWnL,KAIDU,SAAViC,EAENtF,EAAOghB,IAAKnf,EAAMkC,EAAMgrB,GAGxB/uB,EAAO6rB,MAAOhqB,EAAMkC,EAAMuB,EAAOypB,IAChChrB,EAAMqa,EAAYoS,EAASntB,OAAW+a,EAAW,WAOvDpe,EAAOG,GAAGgkC,KAAO,WAChB,MAAOhlC,MAAK4B,QAGbf,EAAOG,GAAGikC,QAAUpkC,EAAOG,GAAGuZ,QAkBP,kBAAX2qB,SAAyBA,OAAOC,KAC3CD,OAAQ,YAAc,WACrB,MAAOrkC,IAOT,IAECukC,IAAUrlC,EAAOc,OAGjBwkC,GAAKtlC,EAAOulC,CAwBb,OAtBAzkC,GAAO0kC,WAAa,SAAUzhC,GAS7B,MARK/D,GAAOulC,IAAMzkC,IACjBd,EAAOulC,EAAID,IAGPvhC,GAAQ/D,EAAOc,SAAWA,IAC9Bd,EAAOc,OAASukC,IAGVvkC,SAMIZ,KAAa+I,IACxBjJ,EAAOc,OAASd,EAAOulC,EAAIzkC,GAMrBA"}
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jquery-ui/external/jquery/jquery.js b/public/admin/view/javascript/jquery/jquery-ui/external/jquery/jquery.js new file mode 100644 index 0000000..c5c6482 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/external/jquery/jquery.js @@ -0,0 +1,9789 @@ +/*! + * jQuery JavaScript Library v1.10.2 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-07-03T13:48Z + */ +(function( window, undefined ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +//"use strict"; +var + // The deferred used on DOM ready + readyList, + + // A central reference to the root jQuery(document) + rootjQuery, + + // Support: IE<10 + // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined` + core_strundefined = typeof undefined, + + // Use the correct document accordingly with window argument (sandbox) + location = window.location, + document = window.document, + docElem = document.documentElement, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // [[Class]] -> type pairs + class2type = {}, + + // List of deleted data cache ids, so we can reuse them + core_deletedIds = [], + + core_version = "1.10.2", + + // Save a reference to some core methods + core_concat = core_deletedIds.concat, + core_push = core_deletedIds.push, + core_slice = core_deletedIds.slice, + core_indexOf = core_deletedIds.indexOf, + core_toString = class2type.toString, + core_hasOwn = class2type.hasOwnProperty, + core_trim = core_version.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + + // Used for splitting on whitespace + core_rnotwhite = /\S+/g, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + + // The ready event handler + completed = function( event ) { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } + }, + // Clean-up method for dom ready events + detach = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: core_version, + + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), + + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + if ( obj == null ) { + return String( obj ); + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ core_toString.call(obj) ] || "object" : + typeof obj; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( jQuery.support.ownLast ) { + for ( key in obj ) { + return core_hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + if ( scripts ) { + jQuery( scripts ).remove(); + } + return jQuery.merge( [], parsed.childNodes ); + }, + + parseJSON: function( data ) { + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + if ( data === null ) { + return data; + } + + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + if ( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + } + } + } + + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + core_push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return core_concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations. + // Note: this method belongs to the css module but it's needed here for the support module. + // If support gets modularized, this method should be moved back to the css module. + swap: function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || type !== "function" && + ( length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj ); +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +/*! + * Sizzle CSS Selector Engine v1.10.2 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-07-03 + */ +(function( window, undefined ) { + +var i, + support, + cachedruns, + Expr, + getText, + isXML, + compile, + outermostContext, + sortInput, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + hasDuplicate = false, + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + return 0; + }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rsibling = new RegExp( whitespace + "*[+~]" ), + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent.attachEvent && parent !== parent.top ) { + parent.attachEvent( "onbeforeunload", function() { + setDocument(); + }); + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = assert(function( div ) { + div.innerHTML = "<div class='a'></div><div class='a i'></div>"; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = "<select><option selected=''></option></select>"; + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Support: Opera 10-12/IE8 + // ^= $= *= and empty values + // Should not select anything + // Support: Windows 8 Native Apps + // The type attribute is restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "t", "" ); + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); + + if ( compare ) { + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } + + // Not directly comparable, sort on existence of method + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val === undefined ? + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null : + val; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + } + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) + ); + return results; +} + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome<14 +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = "<input/>"; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + elem[ name ] === true ? name.toLowerCase() : null; + } + }); +} + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function( support ) { + + var all, a, input, select, fragment, opt, eventName, isSupported, i, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; + + // Finish early in limited (non-browser) environments + all = div.getElementsByTagName("*") || []; + a = div.getElementsByTagName("a")[ 0 ]; + if ( !a || !a.style || !all.length ) { + return support; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + support.getSetAttribute = div.className !== "t"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName("tbody").length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName("link").length; + + // Get the style information from getAttribute + // (IE uses .cssText instead) + support.style = /top/.test( a.getAttribute("style") ); + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + support.hrefNormalized = a.getAttribute("href") === "/a"; + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + support.opacity = /^0.5/.test( a.style.opacity ); + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + support.cssFloat = !!a.style.cssFloat; + + // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) + support.checkOn = !!input.value; + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + support.optSelected = opt.selected; + + // Tests for enctype support on a form (#6743) + support.enctype = !!document.createElement("form").enctype; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>"; + + // Will be defined later + support.inlineBlockNeedsLayout = false; + support.shrinkWrapBlocks = false; + support.pixelPosition = false; + support.deleteExpando = true; + support.noCloneEvent = true; + support.reliableMarginRight = true; + support.boxSizingReliable = true; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<9 + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + // Check if we can trust getAttribute("value") + input = document.createElement("input"); + input.setAttribute( "value", "" ); + support.input = input.getAttribute( "value" ) === ""; + + // Check if an input maintains its value after becoming a radio + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "checked", "t" ); + input.setAttribute( "name", "t" ); + + fragment = document.createDocumentFragment(); + fragment.appendChild( input ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + for ( i in { submit: true, change: true, focusin: true }) { + div.setAttribute( eventName = "on" + i, "t" ); + + support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; + } + + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + // Support: IE<9 + // Iteration over object's inherited properties before its own. + for ( i in jQuery( support ) ) { + break; + } + support.ownLast = i !== "0"; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, marginDiv, tds, + divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; + + body.appendChild( container ).appendChild( div ); + + // Support: IE8 + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Support: IE8 + // Check if empty table cells still have offsetWidth/Height + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior. + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + + // Workaround failing boxSizing test due to offsetWidth returning wrong value + // with some non-1 values of body zoom, ticket #13543 + jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() { + support.boxSizing = div.offsetWidth === 4; + }); + + // Use window.getComputedStyle because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = div.appendChild( document.createElement("div") ); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== core_strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + div.style.display = "block"; + div.innerHTML = "<div></div>"; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + if ( support.inlineBlockNeedsLayout ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); + + // Null elements to avoid leaks in IE + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + all = select = fragment = opt = a = input = null; + + return support; +})({}); + +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +function internalData( elem, name, data, pvt /* Internal Use Only */ ){ + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "applet": true, + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + // Do not set data on non-element because it will not be cleared (#8335). + if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { + return false; + } + + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var attrs, name, + data = null, + i = 0, + elem = this[0]; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attrs = elem.attributes; + for ( ; i < attrs.length; i++ ) { + name = attrs[i].name; + + if ( name.indexOf("data-") === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, + rclass = /[\t\r\n\f]/g, + rreturn = /\r/g, + rfocusable = /^(?:input|select|textarea|button|object)$/i, + rclickable = /^(?:a|area)$/i, + ruseDefault = /^(?:checked|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + getSetInput = jQuery.support.input; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + elem.className = jQuery.trim( cur ); + + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = arguments.length === 0 || typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + elem.className = value ? jQuery.trim( cur ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + classNames = value.match( core_rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( type === core_strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed "false", + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var ret, hooks, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // Use proper attribute retrieval(#6932, #12072) + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) { + optionSet = true; + } + } + + // force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attr: function( elem, name, value ) { + var hooks, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === core_strundefined ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( core_rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + // Set corresponding property to false + if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + elem[ propName ] = false; + // Support: IE<9 + // Also clear defaultChecked/defaultSelected (if appropriate) + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = + elem[ propName ] = false; + } + + // See #9699 for explanation of this approach (setting first, then removal) + } else { + jQuery.attr( elem, name, "" ); + } + + elem.removeAttribute( getSetAttribute ? name : propName ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to default in case type is set after value during creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? + ret : + ( elem[ name ] = value ); + + } else { + return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? + ret : + elem[ name ]; + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + return tabindex ? + parseInt( tabindex, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + -1; + } + } + } +}); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + // IE<8 needs the *property* name + elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); + + // Use defaultChecked and defaultSelected for oldIE + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; + } + + return name; + } +}; +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr; + + jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ? + function( elem, name, isXML ) { + var fn = jQuery.expr.attrHandle[ name ], + ret = isXML ? + undefined : + /* jshint eqeqeq: false */ + (jQuery.expr.attrHandle[ name ] = undefined) != + getter( elem, name, isXML ) ? + + name.toLowerCase() : + null; + jQuery.expr.attrHandle[ name ] = fn; + return ret; + } : + function( elem, name, isXML ) { + return isXML ? + undefined : + elem[ jQuery.camelCase( "default-" + name ) ] ? + name.toLowerCase() : + null; + }; +}); + +// fix oldIE attroperties +if ( !getSetInput || !getSetAttribute ) { + jQuery.attrHooks.value = { + set: function( elem, value, name ) { + if ( jQuery.nodeName( elem, "input" ) ) { + // Does not return so that setAttribute is also used + elem.defaultValue = value; + } else { + // Use nodeHook if defined (#1954); otherwise setAttribute is fine + return nodeHook && nodeHook.set( elem, value, name ); + } + } + }; +} + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = { + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + elem.setAttributeNode( + (ret = elem.ownerDocument.createAttribute( name )) + ); + } + + ret.value = value += ""; + + // Break association with cloned elements by also using setAttribute (#9646) + return name === "value" || value === elem.getAttribute( name ) ? + value : + undefined; + } + }; + jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords = + // Some attributes are constructed with empty-string values when not defined + function( elem, name, isXML ) { + var ret; + return isXML ? + undefined : + (ret = elem.getAttributeNode( name )) && ret.value !== "" ? + ret.value : + null; + }; + jQuery.valHooks.button = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return ret && ret.specified ? + ret.value : + undefined; + }, + set: nodeHook.set + }; + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + set: function( elem, value, name ) { + nodeHook.set( elem, value === "" ? false : value, name ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }; + }); +} + + +// Some attributes require a special call on IE +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !jQuery.support.hrefNormalized ) { + // href/src property should get the full normalized URL (#10299/#12915) + jQuery.each([ "href", "src" ], function( i, name ) { + jQuery.propHooks[ name ] = { + get: function( elem ) { + return elem.getAttribute( name, 4 ); + } + }; + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Note: IE uppercases css property names, but if we were to .toLowerCase() + // .cssText, that would destroy case senstitivity in URL's, like in "background" + return elem.style.cssText || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }; +} + +jQuery.each([ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +}); + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }; + if ( !jQuery.support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + // Support: Webkit + // "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + }; + } +}); +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = core_hasOwn.call( event, "type" ) ? event.type : event, + namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = core_slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Even when returnValue equals to undefined Firefox will still show alert + if ( event.result !== undefined ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === core_strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); +var isSimple = /^.[^:#\[\.,]*$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + cur = ret.push( cur ); + break; + } + } + } + + return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( jQuery.unique(all) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( isSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /<tbody/i, + rhtml = /<|&#?\w+;/, + rnoInnerhtml = /<(?:script|style|link)/i, + manipulation_rcheckableType = /^(?:checkbox|radio)$/i, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /^$|\/(?:java|ecma)script/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "<select multiple='multiple'>", "</select>" ], + legend: [ 1, "<fieldset>", "</fieldset>" ], + area: [ 1, "<map>", "</map>" ], + param: [ 1, "<object>", "</object>" ], + thead: [ 1, "<table>", "</table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1></$2>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var + // Snapshot the DOM in case .domManip sweeps something relevant into its fragment + args = jQuery.map( this, function( elem ) { + return [ elem.nextSibling, elem.parentNode ]; + }), + i = 0; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + var next = args[ i++ ], + parent = args[ i++ ]; + + if ( parent ) { + // Don't use the snapshot next if it has moved (#13810) + if ( next && next.parentNode !== parent ) { + next = this.nextSibling; + } + jQuery( this ).remove(); + parent.insertBefore( elem, next ); + } + // Allow new content to include elements from the context set + }, true ); + + // Force removal if there was no new content (e.g., from empty arguments) + return i ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback, allowIntersection ) { + + // Flatten any nested arrays + args = core_concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback, allowIntersection ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Hope ajax is available... + jQuery._evalUrl( node.src ); + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( manipulation_rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted <tbody> from table fragments + if ( !jQuery.support.tbody ) { + + // String was a <table>, *may* have spurious <tbody> + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare <thead> or <tfoot> + wrap[1] === "<table>" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== core_strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + core_deletedIds.push( id ); + } + } + } + } + }, + + _evalUrl: function( url ) { + return jQuery.ajax({ + url: url, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } +}); +jQuery.fn.extend({ + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + } +}); +var iframe, getStyles, curCSS, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity\s*=\s*([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = jQuery._data( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + + if ( !values[ index ] ) { + hidden = isHidden( elem ); + + if ( display && display !== "none" || !hidden ) { + jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + var len, styles, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each(function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var num, val, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + } +}); + +// NOTE: we've included the "window" in window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + getStyles = function( elem ) { + return window.getComputedStyle( elem, null ); + }; + + curCSS = function( elem, name, _computed ) { + var width, minWidth, maxWidth, + computed = _computed || getStyles( elem ), + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, + style = elem.style; + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + getStyles = function( elem ) { + return elem.currentStyle; + }; + + curCSS = function( elem, name, _computed ) { + var left, rs, rsLeft, + computed = _computed || getStyles( elem ), + ret = computed ? computed[ name ] : undefined, + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rs = elem.runtimeStyle; + rsLeft = rs && rs.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + rs.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + rs.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // at this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + // Use the already-created iframe if possible + iframe = ( iframe || + jQuery("<iframe frameborder='0' width='0' height='0'/>") + .css( "cssText", "display:block !important" ) + ).appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document; + doc.write("<!doctype html><html><body>"); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; +} + +// Called ONLY from within css_defaultDisplay +function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + display = jQuery.css( elem[0], "display" ); + elem.remove(); + return display; +} + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + // certain elements can have dimension info if we invisibly show them + // however, it must have a current display style that would benefit from this + return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ? + jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var styles = extra && getStyles( elem ); + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ) : 0 + ); + } + }; +}); + +if ( !jQuery.support.opacity ) { + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : + computed ? "1" : ""; + }, + + set: function( elem, value ) { + var style = elem.style, + currentStyle = elem.currentStyle, + opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", + filter = currentStyle && currentStyle.filter || style.filter || ""; + + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; + + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + // if value === "", then remove inline opacity #12685 + if ( ( value >= 1 || value === "" ) && + jQuery.trim( filter.replace( ralpha, "" ) ) === "" && + style.removeAttribute ) { + + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + + // if there is no filter style applied in a css rule or unset inline opacity, we are done + if ( value === "" || currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; + } + }; +} + +// These hooks cannot be added until DOM ready because the support test +// for it is not run until after DOM ready +jQuery(function() { + if ( !jQuery.support.reliableMarginRight ) { + jQuery.cssHooks.marginRight = { + get: function( elem, computed ) { + if ( computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } + }; + } + + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // getComputedStyle returns percent when specified for top/left/bottom/right + // rather than make the css module depend on the offset module, we just check for it here + if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = { + get: function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + // if curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + }; + }); + } + +}); + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.hidden = function( elem ) { + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 || + (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none"); + }; + + jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); + }; +} + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +}); +var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function(){ + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + }) + .filter(function(){ + var type = this.type; + // Use .is(":disabled") so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !manipulation_rcheckableType.test( type ) ); + }) + .map(function( i, elem ){ + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ){ + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + +//Serialize an array of form elements or a set of +//key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); +}; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // Item is non-scalar (array or object), encode its numeric index. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +}); + +jQuery.fn.extend({ + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + } +}); +var + // Document location + ajaxLocParts, + ajaxLocation, + ajax_nonce = jQuery.now(), + + ajax_rquery = /\?/, + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, + + // Keep a copy of the old load method + _load = jQuery.fn.load, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat("*"); + +// #8138, IE may throw an exception when accessing +// a field from window.location if document.domain has been set +try { + ajaxLocation = location.href; +} catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + ajaxLocation = document.createElement( "a" ); + ajaxLocation.href = ""; + ajaxLocation = ajaxLocation.href; +} + +// Segment location into parts +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + while ( (dataType = dataTypes[i++]) ) { + // Prepend if requested + if ( dataType[0] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); + + // Otherwise append + } else { + (structure[ dataType ] = structure[ dataType ] || []).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + }); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var deep, key, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + var selector, response, type, + self = this, + off = url.indexOf(" "); + + if ( off >= 0 ) { + selector = url.slice( off, url.length ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + }).complete( callback && function( jqXHR, status ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + }); + } + + return this; +}; + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){ + jQuery.fn[ type ] = function( fn ){ + return this.on( type, fn ); + }; +}); + +jQuery.extend({ + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: ajaxLocation, + type: "GET", + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // Cross-domain detection vars + parts, + // Loop variable + i, + // URL without anti-cache param + cacheURL, + // Response headers as string + responseHeadersString, + // timeout handle + timeoutTimer, + + // To know if global events are to be dispatched + fireGlobals, + + transport, + // Response headers + responseHeaders, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks("once memory"), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( (match = rheaders.exec( responseHeadersString )) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""]; + + // A cross-domain request is in order when we have a protocol:host:port mismatch + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) + ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger("ajaxStart"); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + } + + // aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout(function() { + jqXHR.abort("timeout"); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader("etag"); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger("ajaxStop"); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +}); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + url: url, + type: method, + dataType: type, + data: data, + success: callback + }); + }; +}); + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + var firstDataType, ct, finalDataType, type, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s[ "throws" ] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /(?:java|ecma)script/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +}); + +// Handle cache's special case and global +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + s.global = false; + } +}); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function(s) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + + var script, + head = document.head || jQuery("head")[0] || document.documentElement; + + return { + + send: function( _, callback ) { + + script = document.createElement("script"); + + script.async = true; + + if ( s.scriptCharset ) { + script.charset = s.scriptCharset; + } + + script.src = s.url; + + // Attach handlers for all browsers + script.onload = script.onreadystatechange = function( _, isAbort ) { + + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + + // Remove the script + if ( script.parentNode ) { + script.parentNode.removeChild( script ); + } + + // Dereference the script + script = null; + + // Callback if not abort + if ( !isAbort ) { + callback( 200, "success" ); + } + } + }; + + // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending + // Use native DOM manipulation to avoid our domManip AJAX trickery + head.insertBefore( script, head.firstChild ); + }, + + abort: function() { + if ( script ) { + script.onload( undefined, true ); + } + } + }; + } +}); +var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); +var xhrCallbacks, xhrSupported, + xhrId = 0, + // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject && function() { + // Abort all pending requests + var key; + for ( key in xhrCallbacks ) { + xhrCallbacks[ key ]( undefined, true ); + } + }; + +// Functions to create xhrs +function createStandardXHR() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} +} + +function createActiveXHR() { + try { + return new window.ActiveXObject("Microsoft.XMLHTTP"); + } catch( e ) {} +} + +// Create the request object +// (This is still attached to ajaxSettings for backward compatibility) +jQuery.ajaxSettings.xhr = window.ActiveXObject ? + /* Microsoft failed to properly + * implement the XMLHttpRequest in IE7 (can't request local files), + * so we use the ActiveXObject when it is available + * Additionally XMLHttpRequest can be disabled in IE7/IE8 so + * we need a fallback. + */ + function() { + return !this.isLocal && createStandardXHR() || createActiveXHR(); + } : + // For all other browsers, use the standard XMLHttpRequest object + createStandardXHR; + +// Determine support properties +xhrSupported = jQuery.ajaxSettings.xhr(); +jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +xhrSupported = jQuery.support.ajax = !!xhrSupported; + +// Create transport if the browser can provide an xhr +if ( xhrSupported ) { + + jQuery.ajaxTransport(function( s ) { + // Cross domain only allowed if supported through XMLHttpRequest + if ( !s.crossDomain || jQuery.support.cors ) { + + var callback; + + return { + send: function( headers, complete ) { + + // Get a new xhr + var handle, i, + xhr = s.xhr(); + + // Open the socket + // Passing null username, generates a login popup on Opera (#2865) + if ( s.username ) { + xhr.open( s.type, s.url, s.async, s.username, s.password ); + } else { + xhr.open( s.type, s.url, s.async ); + } + + // Apply custom fields if provided + if ( s.xhrFields ) { + for ( i in s.xhrFields ) { + xhr[ i ] = s.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( s.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( s.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !s.crossDomain && !headers["X-Requested-With"] ) { + headers["X-Requested-With"] = "XMLHttpRequest"; + } + + // Need an extra try/catch for cross domain requests in Firefox 3 + try { + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + } catch( err ) {} + + // Do send the request + // This may raise an exception which is actually + // handled in jQuery.ajax (so no try/catch here) + xhr.send( ( s.hasContent && s.data ) || null ); + + // Listener + callback = function( _, isAbort ) { + var status, responseHeaders, statusText, responses; + + // Firefox throws exceptions when accessing properties + // of an xhr when a network error occurred + // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) + try { + + // Was never called and is aborted or complete + if ( callback && ( isAbort || xhr.readyState === 4 ) ) { + + // Only called once + callback = undefined; + + // Do not keep as active anymore + if ( handle ) { + xhr.onreadystatechange = jQuery.noop; + if ( xhrOnUnloadAbort ) { + delete xhrCallbacks[ handle ]; + } + } + + // If it's an abort + if ( isAbort ) { + // Abort it manually if needed + if ( xhr.readyState !== 4 ) { + xhr.abort(); + } + } else { + responses = {}; + status = xhr.status; + responseHeaders = xhr.getAllResponseHeaders(); + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + if ( typeof xhr.responseText === "string" ) { + responses.text = xhr.responseText; + } + + // Firefox throws an exception when accessing + // statusText for faulty cross-domain requests + try { + statusText = xhr.statusText; + } catch( e ) { + // We normalize with Webkit giving an empty statusText + statusText = ""; + } + + // Filter status for non standard behaviors + + // If the request is local and we have data: assume a success + // (success with no data won't get notified, that's the best we + // can do given current implementations) + if ( !status && s.isLocal && !s.crossDomain ) { + status = responses.text ? 200 : 404; + // IE - #1450: sometimes returns 1223 when it should be 204 + } else if ( status === 1223 ) { + status = 204; + } + } + } + } catch( firefoxAccessException ) { + if ( !isAbort ) { + complete( -1, firefoxAccessException ); + } + } + + // Call complete if needed + if ( responses ) { + complete( status, statusText, responses, responseHeaders ); + } + }; + + if ( !s.async ) { + // if we're in sync mode we fire the callback + callback(); + } else if ( xhr.readyState === 4 ) { + // (IE6 & IE7) if it's in cache and has been + // retrieved directly we need to fire the callback + setTimeout( callback ); + } else { + handle = ++xhrId; + if ( xhrOnUnloadAbort ) { + // Create the active xhrs callbacks list if needed + // and attach the unload handler + if ( !xhrCallbacks ) { + xhrCallbacks = {}; + jQuery( window ).unload( xhrOnUnloadAbort ); + } + // Add to list of active xhrs callbacks + xhrCallbacks[ handle ] = callback; + } + xhr.onreadystatechange = callback; + } + }, + + abort: function() { + if ( callback ) { + callback( undefined, true ); + } + } + }; + } + }); +} +var fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [function( prop, value ) { + var tween = this.createTween( prop, value ), + target = tween.cur(), + parts = rfxnum.exec( value ), + unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && + rfxnum.exec( jQuery.css( tween.elem, prop ) ), + scale = 1, + maxIterations = 20; + + if ( start && start[ 3 ] !== unit ) { + // Trust units reported by jQuery.css + unit = unit || start[ 3 ]; + + // Make sure we update the tween properties later on + parts = parts || []; + + // Iteratively approximate from a nonzero starting point + start = +target || 1; + + do { + // If previous iteration zeroed out, double until we get *something* + // Use a string for doubling factor so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // And breaking the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } + + // Update tween properties + if ( parts ) { + start = tween.start = +start || +target || 0; + tween.unit = unit; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[ 1 ] ? + start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : + +parts[ 2 ]; + } + + return tween; + }] + }; + +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }); + return ( fxNow = jQuery.now() ); +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( (tween = collection[ index ].call( animation, prop, value )) ) { + + // we're done with this property + return tween; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ]); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // if we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // resolve when we played the last frame + // otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'index' from above because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, + + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } +}); + +function defaultPrefilter( elem, props, opts ) { + /* jshint validthis: true */ + var prop, value, toggle, tween, hooks, oldfire, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = jQuery._data( elem, "fxshow" ); + + // handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always(function() { + // doing this makes sure that the complete handler will be called + // before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if ( jQuery.css( elem, "display" ) === "inline" && + jQuery.css( elem, "float" ) === "none" ) { + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { + style.display = "inline-block"; + + } else { + style.zoom = 1; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + if ( !jQuery.support.shrinkWrapBlocks ) { + anim.always(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + } + + + // show/hide pass + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.exec( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + continue; + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + if ( !jQuery.isEmptyObject( orig ) ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = jQuery._data( elem, "fxshow", {} ); + } + + // store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + jQuery._removeData( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( prop in orig ) { + tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + } +} + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { + return tween.elem[ tween.prop ]; + } + + // passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails + // so, simple values such as "10px" are parsed to Float. + // complex values such as "rotate(1rad)" are returned as is. + result = jQuery.css( tween.elem, tween.prop, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // use step hook for back compat - use cssHook if its there - use .style if its + // available and use plain properties where available + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 +// Panic based approach to setting things on disconnected nodes + +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +}); + +jQuery.fn.extend({ + fadeTo: function( speed, to, easing, callback ) { + + // show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || jQuery._data( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = jQuery._data( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each(function() { + var index, + data = jQuery._data( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // enable finishing flag on private data + data.finish = true; + + // empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // turn off finishing flag + delete data.finish; + }); + } +}); + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + attrs = { height: type }, + i = 0; + + // if we include width, step value is 1 to do all cssExpand values, + // if we don't include width, step value is 2 to skip over Left and Right + includeWidth = includeWidth? 1 : 0; + for( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +// Generate shortcuts for custom animations +jQuery.each({ + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +}); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p*Math.PI ) / 2; + } +}; + +jQuery.timers = []; +jQuery.fx = Tween.prototype.init; +jQuery.fx.tick = function() { + var timer, + timers = jQuery.timers, + i = 0; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + if ( timer() && jQuery.timers.push( timer ) ) { + jQuery.fx.start(); + } +}; + +jQuery.fx.interval = 13; + +jQuery.fx.start = function() { + if ( !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.stop = function() { + clearInterval( timerId ); + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 +}; + +// Back Compat <1.8 extension point +jQuery.fx.step = {}; + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; + }; +} +jQuery.fn.offset = function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var docElem, win, + box = { top: 0, left: 0 }, + elem = this[ 0 ], + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + // If we don't have gBCR, just use 0,0 rather than error + // BlackBerry 5, iOS 3 (original iPhone) + if ( typeof elem.getBoundingClientRect !== core_strundefined ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + return { + top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ), + left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 ) + }; +}; + +jQuery.offset = { + + setOffset: function( elem, options, i ) { + var position = jQuery.css( elem, "position" ); + + // set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + var curElem = jQuery( elem ), + curOffset = curElem.offset(), + curCSSTop = jQuery.css( elem, "top" ), + curCSSLeft = jQuery.css( elem, "left" ), + calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, + props = {}, curPosition = {}, curTop, curLeft; + + // need to be able to calculate position if either top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + } +}; + + +jQuery.fn.extend({ + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + parentOffset = { top: 0, left: 0 }, + elem = this[ 0 ]; + + // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + // we assume that getBoundingClientRect is available when computed position is fixed + offset = elem.getBoundingClientRect(); + } else { + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true) + }; + }, + + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || docElem; + while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || docElem; + }); + } +}); + + +// Create scrollLeft and scrollTop methods +jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { + var top = /Y/.test( prop ); + + jQuery.fn[ method ] = function( val ) { + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + win.document.documentElement[ method ] : + elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? + elem : + elem.nodeType === 9 ? + elem.defaultView || elem.parentWindow : + false; +} +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return jQuery.access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); +// Limit scope pollution from any deprecated API +// (function() { + +// The number of elements contained in the matched element set +jQuery.fn.size = function() { + return this.length; +}; + +jQuery.fn.andSelf = jQuery.fn.addBack; + +// })(); +if ( typeof module === "object" && module && typeof module.exports === "object" ) { + // Expose jQuery as module.exports in loaders that implement the Node + // module pattern (including browserify). Do not create the global, since + // the user will be storing it themselves locally, and globals are frowned + // upon in the Node module world. + module.exports = jQuery; +} else { + // Otherwise expose jQuery to the global object as usual + window.jQuery = window.$ = jQuery; + + // Register as a named AMD module, since jQuery can be concatenated with other + // files that may use define, but not via a proper concatenation script that + // understands anonymous AMD modules. A named AMD is safest and most robust + // way to register. Lowercase jquery is used because AMD module names are + // derived from file names, and jQuery is normally delivered in a lowercase + // file name. Do this after creating the global so that if an AMD module wants + // to call noConflict to hide this version of jQuery, it will work. + if ( typeof define === "function" && define.amd ) { + define( "jquery", [], function () { return jQuery; } ); + } +} + +})( window ); diff --git a/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_444444_256x240.png b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_444444_256x240.png Binary files differnew file mode 100644 index 0000000..a802263 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_444444_256x240.png diff --git a/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_555555_256x240.png b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_555555_256x240.png Binary files differnew file mode 100644 index 0000000..7009bf7 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_555555_256x240.png diff --git a/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_777620_256x240.png b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_777620_256x240.png Binary files differnew file mode 100644 index 0000000..e0a1fdf --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_777620_256x240.png diff --git a/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_777777_256x240.png b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_777777_256x240.png Binary files differnew file mode 100644 index 0000000..8e26ee4 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_777777_256x240.png diff --git a/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_cc0000_256x240.png b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_cc0000_256x240.png Binary files differnew file mode 100644 index 0000000..2815430 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_cc0000_256x240.png diff --git a/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_ffffff_256x240.png b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_ffffff_256x240.png Binary files differnew file mode 100644 index 0000000..4d66f59 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/images/ui-icons_ffffff_256x240.png diff --git a/public/admin/view/javascript/jquery/jquery-ui/index.html b/public/admin/view/javascript/jquery/jquery-ui/index.html new file mode 100644 index 0000000..b878272 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/index.html @@ -0,0 +1,513 @@ +<!doctype html> +<html lang="us"> +<head> + <meta charset="utf-8"> + <title>jQuery UI Example Page</title> + <link href="jquery-ui.css" rel="stylesheet"> + <style> + body{ + font: 62.5% "Trebuchet MS", sans-serif; + margin: 50px; + } + .demoHeaders { + margin-top: 2em; + } + #dialog-link { + padding: .4em 1em .4em 20px; + text-decoration: none; + position: relative; + } + #dialog-link span.ui-icon { + margin: 0 5px 0 0; + position: absolute; + left: .2em; + top: 50%; + margin-top: -8px; + } + #icons { + margin: 0; + padding: 0; + } + #icons li { + margin: 2px; + position: relative; + padding: 4px 0; + cursor: pointer; + float: left; + list-style: none; + } + #icons span.ui-icon { + float: left; + margin: 0 4px; + } + .fakewindowcontain .ui-widget-overlay { + position: absolute; + } + select { + width: 200px; + } + </style> +</head> +<body> + +<h1>Welcome to jQuery UI!</h1> + +<div class="ui-widget"> + <p>This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using them with a compatible jQuery version.</p> +</div> + +<h1>YOUR COMPONENTS:</h1> + + +<!-- Accordion --> +<h2 class="demoHeaders">Accordion</h2> +<div id="accordion"> + <h3>First</h3> + <div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div> + <h3>Second</h3> + <div>Phasellus mattis tincidunt nibh.</div> + <h3>Third</h3> + <div>Nam dui erat, auctor a, dignissim quis.</div> +</div> + + + +<!-- Autocomplete --> +<h2 class="demoHeaders">Autocomplete</h2> +<div> + <input id="autocomplete" title="type "a""> +</div> + + + +<!-- Button --> +<h2 class="demoHeaders">Button</h2> +<button id="button">A button element</button> +<form style="margin-top: 1em;"> + <div id="radioset"> + <input type="radio" id="radio1" name="radio"><label for="radio1">Choice 1</label> + <input type="radio" id="radio2" name="radio" checked="checked"><label for="radio2">Choice 2</label> + <input type="radio" id="radio3" name="radio"><label for="radio3">Choice 3</label> + </div> +</form> + + + +<!-- Tabs --> +<h2 class="demoHeaders">Tabs</h2> +<div id="tabs"> + <ul> + <li><a href="#tabs-1">First</a></li> + <li><a href="#tabs-2">Second</a></li> + <li><a href="#tabs-3">Third</a></li> + </ul> + <div id="tabs-1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div> + <div id="tabs-2">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div> + <div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div> +</div> + + + +<!-- Dialog NOTE: Dialog is not generated by UI in this demo so it can be visually styled in themeroller--> +<h2 class="demoHeaders">Dialog</h2> +<p><a href="#" id="dialog-link" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-newwin"></span>Open Dialog</a></p> + +<h2 class="demoHeaders">Overlay and Shadow Classes <em>(not currently used in UI widgets)</em></h2> +<div style="position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;" class="fakewindowcontain"> + <p>Lorem ipsum dolor sit amet, Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p> + + <!-- ui-dialog --> + <div class="ui-overlay"><div class="ui-widget-overlay"></div><div class="ui-widget-shadow ui-corner-all" style="width: 302px; height: 152px; position: absolute; left: 50px; top: 30px;"></div></div> + <div style="position: absolute; width: 280px; height: 130px;left: 50px; top: 30px; padding: 10px;" class="ui-widget ui-widget-content ui-corner-all"> + <div class="ui-dialog-content ui-widget-content" style="background: none; border: 0;"> + <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> + </div> + </div> + +</div> + +<!-- ui-dialog --> +<div id="dialog" title="Dialog Title"> + <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> +</div> + + + +<h2 class="demoHeaders">Framework Icons (content color preview)</h2> +<ul id="icons" class="ui-widget ui-helper-clearfix"> + <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-n"><span class="ui-icon ui-icon-carat-1-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-ne"><span class="ui-icon ui-icon-carat-1-ne"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-e"><span class="ui-icon ui-icon-carat-1-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-se"><span class="ui-icon ui-icon-carat-1-se"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-s"><span class="ui-icon ui-icon-carat-1-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-sw"><span class="ui-icon ui-icon-carat-1-sw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-w"><span class="ui-icon ui-icon-carat-1-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-nw"><span class="ui-icon ui-icon-carat-1-nw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-n-s"><span class="ui-icon ui-icon-carat-2-n-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-e-w"><span class="ui-icon ui-icon-carat-2-e-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-n"><span class="ui-icon ui-icon-triangle-1-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-ne"><span class="ui-icon ui-icon-triangle-1-ne"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-e"><span class="ui-icon ui-icon-triangle-1-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-se"><span class="ui-icon ui-icon-triangle-1-se"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-s"><span class="ui-icon ui-icon-triangle-1-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-sw"><span class="ui-icon ui-icon-triangle-1-sw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-w"><span class="ui-icon ui-icon-triangle-1-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-nw"><span class="ui-icon ui-icon-triangle-1-nw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-n-s"><span class="ui-icon ui-icon-triangle-2-n-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-e-w"><span class="ui-icon ui-icon-triangle-2-e-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-n"><span class="ui-icon ui-icon-arrow-1-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-ne"><span class="ui-icon ui-icon-arrow-1-ne"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-e"><span class="ui-icon ui-icon-arrow-1-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-se"><span class="ui-icon ui-icon-arrow-1-se"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-s"><span class="ui-icon ui-icon-arrow-1-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-sw"><span class="ui-icon ui-icon-arrow-1-sw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-w"><span class="ui-icon ui-icon-arrow-1-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-nw"><span class="ui-icon ui-icon-arrow-1-nw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-n-s"><span class="ui-icon ui-icon-arrow-2-n-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-ne-sw"><span class="ui-icon ui-icon-arrow-2-ne-sw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-e-w"><span class="ui-icon ui-icon-arrow-2-e-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-se-nw"><span class="ui-icon ui-icon-arrow-2-se-nw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-n"><span class="ui-icon ui-icon-arrowstop-1-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-e"><span class="ui-icon ui-icon-arrowstop-1-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-s"><span class="ui-icon ui-icon-arrowstop-1-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-w"><span class="ui-icon ui-icon-arrowstop-1-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-n"><span class="ui-icon ui-icon-arrowthick-1-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-ne"><span class="ui-icon ui-icon-arrowthick-1-ne"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-e"><span class="ui-icon ui-icon-arrowthick-1-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-se"><span class="ui-icon ui-icon-arrowthick-1-se"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-s"><span class="ui-icon ui-icon-arrowthick-1-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-sw"><span class="ui-icon ui-icon-arrowthick-1-sw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-w"><span class="ui-icon ui-icon-arrowthick-1-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-nw"><span class="ui-icon ui-icon-arrowthick-1-nw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-n-s"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-ne-sw"><span class="ui-icon ui-icon-arrowthick-2-ne-sw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-e-w"><span class="ui-icon ui-icon-arrowthick-2-e-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-se-nw"><span class="ui-icon ui-icon-arrowthick-2-se-nw"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-n"><span class="ui-icon ui-icon-arrowthickstop-1-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-e"><span class="ui-icon ui-icon-arrowthickstop-1-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-s"><span class="ui-icon ui-icon-arrowthickstop-1-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-w"><span class="ui-icon ui-icon-arrowthickstop-1-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-w"><span class="ui-icon ui-icon-arrowreturnthick-1-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-n"><span class="ui-icon ui-icon-arrowreturnthick-1-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-e"><span class="ui-icon ui-icon-arrowreturnthick-1-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-s"><span class="ui-icon ui-icon-arrowreturnthick-1-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-w"><span class="ui-icon ui-icon-arrowreturn-1-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-n"><span class="ui-icon ui-icon-arrowreturn-1-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-e"><span class="ui-icon ui-icon-arrowreturn-1-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-s"><span class="ui-icon ui-icon-arrowreturn-1-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-w"><span class="ui-icon ui-icon-arrowrefresh-1-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-n"><span class="ui-icon ui-icon-arrowrefresh-1-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-e"><span class="ui-icon ui-icon-arrowrefresh-1-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-s"><span class="ui-icon ui-icon-arrowrefresh-1-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4"><span class="ui-icon ui-icon-arrow-4"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4-diag"><span class="ui-icon ui-icon-arrow-4-diag"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-extlink"><span class="ui-icon ui-icon-extlink"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-newwin"><span class="ui-icon ui-icon-newwin"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-refresh"><span class="ui-icon ui-icon-refresh"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-shuffle"><span class="ui-icon ui-icon-shuffle"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-transfer-e-w"><span class="ui-icon ui-icon-transfer-e-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-transferthick-e-w"><span class="ui-icon ui-icon-transferthick-e-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-folder-collapsed"><span class="ui-icon ui-icon-folder-collapsed"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-folder-open"><span class="ui-icon ui-icon-folder-open"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-document"><span class="ui-icon ui-icon-document"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-document-b"><span class="ui-icon ui-icon-document-b"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-note"><span class="ui-icon ui-icon-note"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-mail-open"><span class="ui-icon ui-icon-mail-open"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-suitcase"><span class="ui-icon ui-icon-suitcase"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-comment"><span class="ui-icon ui-icon-comment"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-person"><span class="ui-icon ui-icon-person"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-print"><span class="ui-icon ui-icon-print"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-trash"><span class="ui-icon ui-icon-trash"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-locked"><span class="ui-icon ui-icon-locked"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-unlocked"><span class="ui-icon ui-icon-unlocked"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-bookmark"><span class="ui-icon ui-icon-bookmark"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-tag"><span class="ui-icon ui-icon-tag"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-home"><span class="ui-icon ui-icon-home"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-flag"><span class="ui-icon ui-icon-flag"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-calculator"><span class="ui-icon ui-icon-calculator"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-cart"><span class="ui-icon ui-icon-cart"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-pencil"><span class="ui-icon ui-icon-pencil"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-clock"><span class="ui-icon ui-icon-clock"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-disk"><span class="ui-icon ui-icon-disk"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-calendar"><span class="ui-icon ui-icon-calendar"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-zoomin"><span class="ui-icon ui-icon-zoomin"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-zoomout"><span class="ui-icon ui-icon-zoomout"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-search"><span class="ui-icon ui-icon-search"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-wrench"><span class="ui-icon ui-icon-wrench"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-gear"><span class="ui-icon ui-icon-gear"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-heart"><span class="ui-icon ui-icon-heart"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-star"><span class="ui-icon ui-icon-star"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-link"><span class="ui-icon ui-icon-link"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-cancel"><span class="ui-icon ui-icon-cancel"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-plus"><span class="ui-icon ui-icon-plus"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-minus"><span class="ui-icon ui-icon-minus"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-minusthick"><span class="ui-icon ui-icon-minusthick"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-close"><span class="ui-icon ui-icon-close"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-closethick"><span class="ui-icon ui-icon-closethick"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-key"><span class="ui-icon ui-icon-key"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-lightbulb"><span class="ui-icon ui-icon-lightbulb"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-scissors"><span class="ui-icon ui-icon-scissors"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-clipboard"><span class="ui-icon ui-icon-clipboard"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-copy"><span class="ui-icon ui-icon-copy"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-contact"><span class="ui-icon ui-icon-contact"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-image"><span class="ui-icon ui-icon-image"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-video"><span class="ui-icon ui-icon-video"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-script"><span class="ui-icon ui-icon-script"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-alert"><span class="ui-icon ui-icon-alert"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-info"><span class="ui-icon ui-icon-info"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-notice"><span class="ui-icon ui-icon-notice"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-help"><span class="ui-icon ui-icon-help"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-bullet"><span class="ui-icon ui-icon-bullet"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-radio-off"><span class="ui-icon ui-icon-radio-off"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-radio-on"><span class="ui-icon ui-icon-radio-on"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-pin-w"><span class="ui-icon ui-icon-pin-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-pin-s"><span class="ui-icon ui-icon-pin-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-play"><span class="ui-icon ui-icon-play"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-pause"><span class="ui-icon ui-icon-pause"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-next"><span class="ui-icon ui-icon-seek-next"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-prev"><span class="ui-icon ui-icon-seek-prev"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-end"><span class="ui-icon ui-icon-seek-end"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-first"><span class="ui-icon ui-icon-seek-first"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-stop"><span class="ui-icon ui-icon-stop"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-eject"><span class="ui-icon ui-icon-eject"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-volume-off"><span class="ui-icon ui-icon-volume-off"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-volume-on"><span class="ui-icon ui-icon-volume-on"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-power"><span class="ui-icon ui-icon-power"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-signal-diag"><span class="ui-icon ui-icon-signal-diag"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-signal"><span class="ui-icon ui-icon-signal"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-0"><span class="ui-icon ui-icon-battery-0"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-1"><span class="ui-icon ui-icon-battery-1"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-2"><span class="ui-icon ui-icon-battery-2"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-3"><span class="ui-icon ui-icon-battery-3"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-plus"><span class="ui-icon ui-icon-circle-plus"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-minus"><span class="ui-icon ui-icon-circle-minus"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-close"><span class="ui-icon ui-icon-circle-close"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-e"><span class="ui-icon ui-icon-circle-triangle-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-s"><span class="ui-icon ui-icon-circle-triangle-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-w"><span class="ui-icon ui-icon-circle-triangle-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-n"><span class="ui-icon ui-icon-circle-triangle-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-e"><span class="ui-icon ui-icon-circle-arrow-e"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-s"><span class="ui-icon ui-icon-circle-arrow-s"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-w"><span class="ui-icon ui-icon-circle-arrow-w"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-n"><span class="ui-icon ui-icon-circle-arrow-n"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomin"><span class="ui-icon ui-icon-circle-zoomin"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomout"><span class="ui-icon ui-icon-circle-zoomout"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-check"><span class="ui-icon ui-icon-circle-check"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-plus"><span class="ui-icon ui-icon-circlesmall-plus"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-minus"><span class="ui-icon ui-icon-circlesmall-minus"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-close"><span class="ui-icon ui-icon-circlesmall-close"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-plus"><span class="ui-icon ui-icon-squaresmall-plus"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-minus"><span class="ui-icon ui-icon-squaresmall-minus"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-close"><span class="ui-icon ui-icon-squaresmall-close"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-vertical"><span class="ui-icon ui-icon-grip-dotted-vertical"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-horizontal"><span class="ui-icon ui-icon-grip-dotted-horizontal"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-vertical"><span class="ui-icon ui-icon-grip-solid-vertical"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-horizontal"><span class="ui-icon ui-icon-grip-solid-horizontal"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-gripsmall-diagonal-se"><span class="ui-icon ui-icon-gripsmall-diagonal-se"></span></li> + <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span class="ui-icon ui-icon-grip-diagonal-se"></span></li> +</ul> + + +<!-- Slider --> +<h2 class="demoHeaders">Slider</h2> +<div id="slider"></div> + + + +<!-- Datepicker --> +<h2 class="demoHeaders">Datepicker</h2> +<div id="datepicker"></div> + + + +<!-- Progressbar --> +<h2 class="demoHeaders">Progressbar</h2> +<div id="progressbar"></div> + + + +<!-- Progressbar --> +<h2 class="demoHeaders">Selectmenu</h2> +<select id="selectmenu"> + <option>Slower</option> + <option>Slow</option> + <option selected="selected">Medium</option> + <option>Fast</option> + <option>Faster</option> +</select> + + + +<!-- Spinner --> +<h2 class="demoHeaders">Spinner</h2> +<input id="spinner"> + + + +<!-- Menu --> +<h2 class="demoHeaders">Menu</h2> +<ul style="width:100px;" id="menu"> + <li>Item 1</li> + <li>Item 2</li> + <li>Item 3 + <ul> + <li>Item 3-1</li> + <li>Item 3-2</li> + <li>Item 3-3</li> + <li>Item 3-4</li> + <li>Item 3-5</li> + </ul> + </li> + <li>Item 4</li> + <li>Item 5</li> +</ul> + + + +<!-- Tooltip --> +<h2 class="demoHeaders">Tooltip</h2> +<p id="tooltip"> + <a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover +the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip. +</p> + + +<!-- Highlight / Error --> +<h2 class="demoHeaders">Highlight / Error</h2> +<div class="ui-widget"> + <div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;"> + <p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span> + <strong>Hey!</strong> Sample ui-state-highlight style.</p> + </div> +</div> +<br> +<div class="ui-widget"> + <div class="ui-state-error ui-corner-all" style="padding: 0 .7em;"> + <p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span> + <strong>Alert:</strong> Sample ui-state-error style.</p> + </div> +</div> + +<script src="external/jquery/jquery.js"></script> +<script src="jquery-ui.js"></script> +<script> + +$( "#accordion" ).accordion(); + + + +var availableTags = [ + "ActionScript", + "AppleScript", + "Asp", + "BASIC", + "C", + "C++", + "Clojure", + "COBOL", + "ColdFusion", + "Erlang", + "Fortran", + "Groovy", + "Haskell", + "Java", + "JavaScript", + "Lisp", + "Perl", + "PHP", + "Python", + "Ruby", + "Scala", + "Scheme" +]; +$( "#autocomplete" ).autocomplete({ + source: availableTags +}); + + + +$( "#button" ).button(); +$( "#radioset" ).buttonset(); + + + +$( "#tabs" ).tabs(); + + + +$( "#dialog" ).dialog({ + autoOpen: false, + width: 400, + buttons: [ + { + text: "Ok", + click: function() { + $( this ).dialog( "close" ); + } + }, + { + text: "Cancel", + click: function() { + $( this ).dialog( "close" ); + } + } + ] +}); + +// Link to open the dialog +$( "#dialog-link" ).click(function( event ) { + $( "#dialog" ).dialog( "open" ); + event.preventDefault(); +}); + + + +$( "#datepicker" ).datepicker({ + inline: true +}); + + + +$( "#slider" ).slider({ + range: true, + values: [ 17, 67 ] +}); + + + +$( "#progressbar" ).progressbar({ + value: 20 +}); + + + +$( "#spinner" ).spinner(); + + + +$( "#menu" ).menu(); + + + +$( "#tooltip" ).tooltip(); + + + +$( "#selectmenu" ).selectmenu(); + + +// Hover states on the static widgets +$( "#dialog-link, #icons li" ).hover( + function() { + $( this ).addClass( "ui-state-hover" ); + }, + function() { + $( this ).removeClass( "ui-state-hover" ); + } +); +</script> +</body> +</html> diff --git a/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.css b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.css new file mode 100644 index 0000000..9832d3b --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.css @@ -0,0 +1,1225 @@ +/*! jQuery UI - v1.11.4 - 2016-04-08 +* http://jqueryui.com +* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ + font-size: 100%; +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + position: relative; + margin: 0; + padding: 3px 1em 3px .4em; + cursor: pointer; + min-height: 0; /* support: IE7 */ + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + /* Support: IE7 */ + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-button { + display: inline-block; + overflow: hidden; + position: relative; + text-decoration: none; + cursor: pointer; +} +.ui-selectmenu-button span.ui-icon { + right: 0.5em; + left: auto; + margin-top: -8px; + position: absolute; + top: 50%; +} +.ui-selectmenu-button span.ui-selectmenu-text { + text-align: left; + padding: 0.4em 2.1em 0.4em 1em; + display: block; + line-height: 1.4; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertically center icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; +} +.ui-widget-content a { + color: #333333; +} +.ui-widget-header { + border: 1px solid #dddddd; + background: #e9e9e9; + color: #333333; + font-weight: bold; +} +.ui-widget-header a { + color: #333333; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #c5c5c5; + background: #f6f6f6; + font-weight: normal; + color: #454545; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #454545; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #cccccc; + background: #ededed; + font-weight: normal; + color: #2b2b2b; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #2b2b2b; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #003eff; + background: #007fff; + font-weight: normal; + color: #ffffff; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #777620; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #5f3f3f; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #5f3f3f; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-state-default .ui-icon { + background-image: url("images/ui-icons_777777_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url("images/ui-icons_555555_256x240.png"); +} +.ui-state-active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} +.ui-state-highlight .ui-icon { + background-image: url("images/ui-icons_777620_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cc0000_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 3px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + margin: 0px 0 0 0px; + padding: 5px; + background: #666666; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ + border-radius: 8px; +} diff --git a/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.js b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.js new file mode 100644 index 0000000..ecbe03f --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.js @@ -0,0 +1,16617 @@ +/*! jQuery UI - v1.11.4 - 2016-04-08 +* http://jqueryui.com +* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, menu.js, progressbar.js, selectmenu.js, slider.js, spinner.js, tabs.js, tooltip.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define([ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}(function( $ ) { +/*! + * jQuery UI Core 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/ui-core/ + */ + + +// $.ui might exist from components with no dependencies, e.g., $.ui.position +$.ui = $.ui || {}; + +$.extend( $.ui, { + version: "1.11.4", + + keyCode: { + BACKSPACE: 8, + COMMA: 188, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + LEFT: 37, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SPACE: 32, + TAB: 9, + UP: 38 + } +}); + +// plugins +$.fn.extend({ + scrollParent: function( includeHidden ) { + var position = this.css( "position" ), + excludeStaticParent = position === "absolute", + overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, + scrollParent = this.parents().filter( function() { + var parent = $( this ); + if ( excludeStaticParent && parent.css( "position" ) === "static" ) { + return false; + } + return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) ); + }).eq( 0 ); + + return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent; + }, + + uniqueId: (function() { + var uuid = 0; + + return function() { + return this.each(function() { + if ( !this.id ) { + this.id = "ui-id-" + ( ++uuid ); + } + }); + }; + })(), + + removeUniqueId: function() { + return this.each(function() { + if ( /^ui-id-\d+$/.test( this.id ) ) { + $( this ).removeAttr( "id" ); + } + }); + } +}); + +// selectors +function focusable( element, isTabIndexNotNaN ) { + var map, mapName, img, + nodeName = element.nodeName.toLowerCase(); + if ( "area" === nodeName ) { + map = element.parentNode; + mapName = map.name; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap='#" + mapName + "']" )[ 0 ]; + return !!img && visible( img ); + } + return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ? + !element.disabled : + "a" === nodeName ? + element.href || isTabIndexNotNaN : + isTabIndexNotNaN) && + // the element and all of its ancestors must be visible + visible( element ); +} + +function visible( element ) { + return $.expr.filters.visible( element ) && + !$( element ).parents().addBack().filter(function() { + return $.css( this, "visibility" ) === "hidden"; + }).length; +} + +$.extend( $.expr[ ":" ], { + data: $.expr.createPseudo ? + $.expr.createPseudo(function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + }) : + // support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + }, + + focusable: function( element ) { + return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); + }, + + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ), + isTabIndexNaN = isNaN( tabIndex ); + return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); + } +}); + +// support: jQuery <1.8 +if ( !$( "<a>" ).outerWidth( 1 ).jquery ) { + $.each( [ "Width", "Height" ], function( i, name ) { + var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], + type = name.toLowerCase(), + orig = { + innerWidth: $.fn.innerWidth, + innerHeight: $.fn.innerHeight, + outerWidth: $.fn.outerWidth, + outerHeight: $.fn.outerHeight + }; + + function reduce( elem, size, border, margin ) { + $.each( side, function() { + size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; + if ( border ) { + size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; + } + if ( margin ) { + size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; + } + }); + return size; + } + + $.fn[ "inner" + name ] = function( size ) { + if ( size === undefined ) { + return orig[ "inner" + name ].call( this ); + } + + return this.each(function() { + $( this ).css( type, reduce( this, size ) + "px" ); + }); + }; + + $.fn[ "outer" + name] = function( size, margin ) { + if ( typeof size !== "number" ) { + return orig[ "outer" + name ].call( this, size ); + } + + return this.each(function() { + $( this).css( type, reduce( this, size, true, margin ) + "px" ); + }); + }; + }); +} + +// support: jQuery <1.8 +if ( !$.fn.addBack ) { + $.fn.addBack = function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + }; +} + +// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413) +if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { + $.fn.removeData = (function( removeData ) { + return function( key ) { + if ( arguments.length ) { + return removeData.call( this, $.camelCase( key ) ); + } else { + return removeData.call( this ); + } + }; + })( $.fn.removeData ); +} + +// deprecated +$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); + +$.fn.extend({ + focus: (function( orig ) { + return function( delay, fn ) { + return typeof delay === "number" ? + this.each(function() { + var elem = this; + setTimeout(function() { + $( elem ).focus(); + if ( fn ) { + fn.call( elem ); + } + }, delay ); + }) : + orig.apply( this, arguments ); + }; + })( $.fn.focus ), + + disableSelection: (function() { + var eventType = "onselectstart" in document.createElement( "div" ) ? + "selectstart" : + "mousedown"; + + return function() { + return this.bind( eventType + ".ui-disableSelection", function( event ) { + event.preventDefault(); + }); + }; + })(), + + enableSelection: function() { + return this.unbind( ".ui-disableSelection" ); + }, + + zIndex: function( zIndex ) { + if ( zIndex !== undefined ) { + return this.css( "zIndex", zIndex ); + } + + if ( this.length ) { + var elem = $( this[ 0 ] ), position, value; + while ( elem.length && elem[ 0 ] !== document ) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css( "position" ); + if ( position === "absolute" || position === "relative" || position === "fixed" ) { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + // <div style="z-index: -10;"><div style="z-index: 0;"></div></div> + value = parseInt( elem.css( "zIndex" ), 10 ); + if ( !isNaN( value ) && value !== 0 ) { + return value; + } + } + elem = elem.parent(); + } + } + + return 0; + } +}); + +// $.ui.plugin is deprecated. Use $.widget() extensions instead. +$.ui.plugin = { + add: function( module, option, set ) { + var i, + proto = $.ui[ module ].prototype; + for ( i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args, allowDisconnected ) { + var i, + set = instance.plugins[ name ]; + + if ( !set ) { + return; + } + + if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) { + return; + } + + for ( i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } + } +}; + + +/*! + * jQuery UI Widget 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/jQuery.widget/ + */ + + +var widget_uuid = 0, + widget_slice = Array.prototype.slice; + +$.cleanData = (function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; (elem = elems[i]) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} + } + orig( elems ); + }; +})( $.cleanData ); + +$.widget = function( name, base, prototype ) { + var fullName, existingConstructor, constructor, basePrototype, + // proxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + proxiedPrototype = {}, + namespace = name.split( "." )[ 0 ]; + + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + // extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + // copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + // track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + }); + + basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( !$.isFunction( value ) ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = (function() { + var _super = function() { + return base.prototype[ prop ].apply( this, arguments ); + }, + _superApply = function( args ) { + return base.prototype[ prop ].apply( this, args ); + }; + return function() { + var __super = this._super, + __superApply = this._superApply, + returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + })(); + }); + constructor.prototype = $.widget.extend( basePrototype, { + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + }); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); + }); + // remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); + + return constructor; +}; + +$.widget.extend = function( target ) { + var input = widget_slice.call( arguments, 1 ), + inputIndex = 0, + inputLength = input.length, + key, + value; + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + // Copy everything else by reference + } else { + target[ key ] = value; + } + } + } + } + return target; +}; + +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = widget_slice.call( arguments, 1 ), + returnValue = this; + + if ( isMethodCall ) { + this.each(function() { + var methodValue, + instance = $.data( this, fullName ); + if ( options === "instance" ) { + returnValue = instance; + return false; + } + if ( !instance ) { + return $.error( "cannot call methods on " + name + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + " widget instance" ); + } + methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + }); + } else { + + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat(args) ); + } + + this.each(function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } + } else { + $.data( this, fullName, new object( options, this ) ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( /* options, element */ ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "<div>", + options: { + disabled: false, + + // callbacks + create: null + }, + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = widget_uuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + }); + this.document = $( element.style ? + // element within the document + element.ownerDocument : + // element is window or document + element.document || element ); + this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); + } + + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this._create(); + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + _getCreateOptions: $.noop, + _getCreateEventData: $.noop, + _create: $.noop, + _init: $.noop, + + destroy: function() { + this._destroy(); + // we can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .unbind( this.eventNamespace ) + .removeData( this.widgetFullName ) + // support: jquery <1.6.3 + // http://bugs.jquery.com/ticket/9413 + .removeData( $.camelCase( this.widgetFullName ) ); + this.widget() + .unbind( this.eventNamespace ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetFullName + "-disabled " + + "ui-state-disabled" ); + + // clean up events and states + this.bindings.unbind( this.eventNamespace ); + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + }, + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key, + parts, + curOption, + i; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + .toggleClass( this.widgetFullName + "-disabled", !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + } + } + + return this; + }, + + enable: function() { + return this._setOptions({ disabled: false }); + }, + disable: function() { + return this._setOptions({ disabled: true }); + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement, + instance = this; + + // no suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // no element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); + } + + $.each( handlers, function( event, handler ) { + function handlerProxy() { + // allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^([\w:-]*)\s*(.*)$/ ), + eventName = match[1] + instance.eventNamespace, + selector = match[2]; + if ( selector ) { + delegateElement.delegate( selector, eventName, handlerProxy ); + } else { + element.bind( eventName, handlerProxy ); + } + }); + }, + + _off: function( element, eventName ) { + eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.unbind( eventName ).undelegate( eventName ); + + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + $( event.currentTarget ).addClass( "ui-state-hover" ); + }, + mouseleave: function( event ) { + $( event.currentTarget ).removeClass( "ui-state-hover" ); + } + }); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + $( event.currentTarget ).addClass( "ui-state-focus" ); + }, + focusout: function( event ) { + $( event.currentTarget ).removeClass( "ui-state-focus" ); + } + }); + }, + + _trigger: function( type, event, data ) { + var prop, orig, + callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + // the original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( $.isFunction( callback ) && + callback.apply( this.element[0], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; + +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + var hasOptions, + effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + if ( options.delay ) { + element.delay( options.delay ); + } + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue(function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + }); + } + }; +}); + +var widget = $.widget; + + +/*! + * jQuery UI Mouse 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/mouse/ + */ + + +var mouseHandled = false; +$( document ).mouseup( function() { + mouseHandled = false; +}); + +var mouse = $.widget("ui.mouse", { + version: "1.11.4", + options: { + cancel: "input,textarea,button,select,option", + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var that = this; + + this.element + .bind("mousedown." + this.widgetName, function(event) { + return that._mouseDown(event); + }) + .bind("click." + this.widgetName, function(event) { + if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) { + $.removeData(event.target, that.widgetName + ".preventClickEvent"); + event.stopImmediatePropagation(); + return false; + } + }); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.unbind("." + this.widgetName); + if ( this._mouseMoveDelegate ) { + this.document + .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate) + .unbind("mouseup." + this.widgetName, this._mouseUpDelegate); + } + }, + + _mouseDown: function(event) { + // don't let more than one widget handle mouseStart + if ( mouseHandled ) { + return; + } + + this._mouseMoved = false; + + // we may have missed mouseup (out of window) + (this._mouseStarted && this._mouseUp(event)); + + this._mouseDownEvent = event; + + var that = this, + btnIsLeft = (event.which === 1), + // event.target.nodeName works around a bug in IE 8 with + // disabled inputs (#7620) + elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); + if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if (!this.mouseDelayMet) { + this._mouseDelayTimer = setTimeout(function() { + that.mouseDelayMet = true; + }, this.options.delay); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = (this._mouseStart(event) !== false); + if (!this._mouseStarted) { + event.preventDefault(); + return true; + } + } + + // Click event may never have fired (Gecko & Opera) + if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) { + $.removeData(event.target, this.widgetName + ".preventClickEvent"); + } + + // these delegates are required to keep context + this._mouseMoveDelegate = function(event) { + return that._mouseMove(event); + }; + this._mouseUpDelegate = function(event) { + return that._mouseUp(event); + }; + + this.document + .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .bind( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + event.preventDefault(); + + mouseHandled = true; + return true; + }, + + _mouseMove: function(event) { + // Only check for mouseups outside the document if you've moved inside the document + // at least once. This prevents the firing of mouseup in the case of IE<9, which will + // fire a mousemove event if content is placed under the cursor. See #7778 + // Support: IE <9 + if ( this._mouseMoved ) { + // IE mouseup check - mouseup happened when mouse was out of window + if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) { + return this._mouseUp(event); + + // Iframe mouseup check - mouseup occurred in another document + } else if ( !event.which ) { + return this._mouseUp( event ); + } + } + + if ( event.which || event.button ) { + this._mouseMoved = true; + } + + if (this._mouseStarted) { + this._mouseDrag(event); + return event.preventDefault(); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = + (this._mouseStart(this._mouseDownEvent, event) !== false); + (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); + } + + return !this._mouseStarted; + }, + + _mouseUp: function(event) { + this.document + .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + if (this._mouseStarted) { + this._mouseStarted = false; + + if (event.target === this._mouseDownEvent.target) { + $.data(event.target, this.widgetName + ".preventClickEvent", true); + } + + this._mouseStop(event); + } + + mouseHandled = false; + return false; + }, + + _mouseDistanceMet: function(event) { + return (Math.max( + Math.abs(this._mouseDownEvent.pageX - event.pageX), + Math.abs(this._mouseDownEvent.pageY - event.pageY) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function(/* event */) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function(/* event */) {}, + _mouseDrag: function(/* event */) {}, + _mouseStop: function(/* event */) {}, + _mouseCapture: function(/* event */) { return true; } +}); + + +/*! + * jQuery UI Position 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/position/ + */ + +(function() { + +$.ui = $.ui || {}; + +var cachedScrollbarWidth, supportsOffsetFractions, + max = Math.max, + abs = Math.abs, + round = Math.round, + rhorizontal = /left|center|right/, + rvertical = /top|center|bottom/, + roffset = /[\+\-]\d+(\.[\d]+)?%?/, + rposition = /^\w+/, + rpercent = /%$/, + _position = $.fn.position; + +function getOffsets( offsets, width, height ) { + return [ + parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), + parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) + ]; +} + +function parseCss( element, property ) { + return parseInt( $.css( element, property ), 10 ) || 0; +} + +function getDimensions( elem ) { + var raw = elem[0]; + if ( raw.nodeType === 9 ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: 0, left: 0 } + }; + } + if ( $.isWindow( raw ) ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: elem.scrollTop(), left: elem.scrollLeft() } + }; + } + if ( raw.preventDefault ) { + return { + width: 0, + height: 0, + offset: { top: raw.pageY, left: raw.pageX } + }; + } + return { + width: elem.outerWidth(), + height: elem.outerHeight(), + offset: elem.offset() + }; +} + +$.position = { + scrollbarWidth: function() { + if ( cachedScrollbarWidth !== undefined ) { + return cachedScrollbarWidth; + } + var w1, w2, + div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ), + innerDiv = div.children()[0]; + + $( "body" ).append( div ); + w1 = innerDiv.offsetWidth; + div.css( "overflow", "scroll" ); + + w2 = innerDiv.offsetWidth; + + if ( w1 === w2 ) { + w2 = div[0].clientWidth; + } + + div.remove(); + + return (cachedScrollbarWidth = w1 - w2); + }, + getScrollInfo: function( within ) { + var overflowX = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-x" ), + overflowY = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-y" ), + hasOverflowX = overflowX === "scroll" || + ( overflowX === "auto" && within.width < within.element[0].scrollWidth ), + hasOverflowY = overflowY === "scroll" || + ( overflowY === "auto" && within.height < within.element[0].scrollHeight ); + return { + width: hasOverflowY ? $.position.scrollbarWidth() : 0, + height: hasOverflowX ? $.position.scrollbarWidth() : 0 + }; + }, + getWithinInfo: function( element ) { + var withinElement = $( element || window ), + isWindow = $.isWindow( withinElement[0] ), + isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9; + return { + element: withinElement, + isWindow: isWindow, + isDocument: isDocument, + offset: withinElement.offset() || { left: 0, top: 0 }, + scrollLeft: withinElement.scrollLeft(), + scrollTop: withinElement.scrollTop(), + + // support: jQuery 1.6.x + // jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows + width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(), + height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight() + }; + } +}; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, + target = $( options.of ), + within = $.position.getWithinInfo( options.within ), + scrollInfo = $.position.getScrollInfo( within ), + collision = ( options.collision || "flip" ).split( " " ), + offsets = {}; + + dimensions = getDimensions( target ); + if ( target[0].preventDefault ) { + // force left top to allow flipping + options.at = "left top"; + } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + // clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); + + // force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[ this ] || "" ).split( " " ), + horizontalOffset, + verticalOffset; + + if ( pos.length === 1) { + pos = rhorizontal.test( pos[ 0 ] ) ? + pos.concat( [ "center" ] ) : + rvertical.test( pos[ 0 ] ) ? + [ "center" ].concat( pos ) : + [ "center", "center" ]; + } + pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; + pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; + + // calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + }); + + // normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + if ( options.at[ 0 ] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[ 0 ] === "center" ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[ 1 ] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[ 1 ] === "center" ) { + basePosition.top += targetHeight / 2; + } + + atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); + basePosition.left += atOffset[ 0 ]; + basePosition.top += atOffset[ 1 ]; + + return this.each(function() { + var collisionPosition, using, + elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseCss( this, "marginLeft" ), + marginTop = parseCss( this, "marginTop" ), + collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width, + collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height, + position = $.extend( {}, basePosition ), + myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); + + if ( options.my[ 0 ] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[ 0 ] === "center" ) { + position.left -= elemWidth / 2; + } + + if ( options.my[ 1 ] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[ 1 ] === "center" ) { + position.top -= elemHeight / 2; + } + + position.left += myOffset[ 0 ]; + position.top += myOffset[ 1 ]; + + // if the browser doesn't support fractions, then round for consistent results + if ( !supportsOffsetFractions ) { + position.left = round( position.left ); + position.top = round( position.top ); + } + + collisionPosition = { + marginLeft: marginLeft, + marginTop: marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[ i ] ] ) { + $.ui.position[ collision[ i ] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], + my: options.my, + at: options.at, + within: within, + elem: elem + }); + } + }); + + if ( options.using ) { + // adds feedback as second argument to using callback, if present + using = function( props ) { + var left = targetOffset.left - position.left, + right = left + targetWidth - elemWidth, + top = targetOffset.top - position.top, + bottom = top + targetHeight - elemHeight, + feedback = { + target: { + element: target, + left: targetOffset.left, + top: targetOffset.top, + width: targetWidth, + height: targetHeight + }, + element: { + element: elem, + left: position.left, + top: position.top, + width: elemWidth, + height: elemHeight + }, + horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", + vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" + }; + if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { + feedback.horizontal = "center"; + } + if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { + feedback.vertical = "middle"; + } + if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { + feedback.important = "horizontal"; + } else { + feedback.important = "vertical"; + } + options.using.call( this, props, feedback ); + }; + } + + elem.offset( $.extend( position, { using: using } ) ); + }); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, + outerWidth = within.width, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = withinOffset - collisionPosLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, + newOverRight; + + // element is wider than within + if ( data.collisionWidth > outerWidth ) { + // element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset; + position.left += overLeft - newOverRight; + // element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + // element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + // too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + // too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + // adjust based on position and margin + } else { + position.left = max( position.left - collisionPosLeft, position.left ); + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollTop : within.offset.top, + outerHeight = data.within.height, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = withinOffset - collisionPosTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, + newOverBottom; + + // element is taller than within + if ( data.collisionHeight > outerHeight ) { + // element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset; + position.top += overTop - newOverBottom; + // element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + // element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + // too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + // too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + // adjust based on position and margin + } else { + position.top = max( position.top - collisionPosTop, position.top ); + } + } + }, + flip: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.offset.left + within.scrollLeft, + outerWidth = within.width, + offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = collisionPosLeft - offsetLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + data.at[ 0 ] === "right" ? + -data.targetWidth : + 0, + offset = -2 * data.offset[ 0 ], + newOverRight, + newOverLeft; + + if ( overLeft < 0 ) { + newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset; + if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { + position.left += myOffset + atOffset + offset; + } + } else if ( overRight > 0 ) { + newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft; + if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { + position.left += myOffset + atOffset + offset; + } + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.offset.top + within.scrollTop, + outerHeight = within.height, + offsetTop = within.isWindow ? within.scrollTop : within.offset.top, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = collisionPosTop - offsetTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, + top = data.my[ 1 ] === "top", + myOffset = top ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + data.at[ 1 ] === "bottom" ? + -data.targetHeight : + 0, + offset = -2 * data.offset[ 1 ], + newOverTop, + newOverBottom; + if ( overTop < 0 ) { + newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset; + if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { + position.top += myOffset + atOffset + offset; + } + } else if ( overBottom > 0 ) { + newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop; + if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { + position.top += myOffset + atOffset + offset; + } + } + } + }, + flipfit: { + left: function() { + $.ui.position.flip.left.apply( this, arguments ); + $.ui.position.fit.left.apply( this, arguments ); + }, + top: function() { + $.ui.position.flip.top.apply( this, arguments ); + $.ui.position.fit.top.apply( this, arguments ); + } + } +}; + +// fraction support test +(function() { + var testElement, testElementParent, testElementStyle, offsetLeft, i, + body = document.getElementsByTagName( "body" )[ 0 ], + div = document.createElement( "div" ); + + //Create a "fake body" for testing based on method used in jQuery.support + testElement = document.createElement( body ? "div" : "body" ); + testElementStyle = { + visibility: "hidden", + width: 0, + height: 0, + border: 0, + margin: 0, + background: "none" + }; + if ( body ) { + $.extend( testElementStyle, { + position: "absolute", + left: "-1000px", + top: "-1000px" + }); + } + for ( i in testElementStyle ) { + testElement.style[ i ] = testElementStyle[ i ]; + } + testElement.appendChild( div ); + testElementParent = body || document.documentElement; + testElementParent.insertBefore( testElement, testElementParent.firstChild ); + + div.style.cssText = "position: absolute; left: 10.7432222px;"; + + offsetLeft = $( div ).offset().left; + supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11; + + testElement.innerHTML = ""; + testElementParent.removeChild( testElement ); +})(); + +})(); + +var position = $.ui.position; + + +/*! + * jQuery UI Draggable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/draggable/ + */ + + +$.widget("ui.draggable", $.ui.mouse, { + version: "1.11.4", + widgetEventPrefix: "drag", + options: { + addClasses: true, + appendTo: "parent", + axis: false, + connectToSortable: false, + containment: false, + cursor: "auto", + cursorAt: false, + grid: false, + handle: false, + helper: "original", + iframeFix: false, + opacity: false, + refreshPositions: false, + revert: false, + revertDuration: 500, + scope: "default", + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + snap: false, + snapMode: "both", + snapTolerance: 20, + stack: false, + zIndex: false, + + // callbacks + drag: null, + start: null, + stop: null + }, + _create: function() { + + if ( this.options.helper === "original" ) { + this._setPositionRelative(); + } + if (this.options.addClasses){ + this.element.addClass("ui-draggable"); + } + if (this.options.disabled){ + this.element.addClass("ui-draggable-disabled"); + } + this._setHandleClassName(); + + this._mouseInit(); + }, + + _setOption: function( key, value ) { + this._super( key, value ); + if ( key === "handle" ) { + this._removeHandleClassName(); + this._setHandleClassName(); + } + }, + + _destroy: function() { + if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) { + this.destroyOnClear = true; + return; + } + this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" ); + this._removeHandleClassName(); + this._mouseDestroy(); + }, + + _mouseCapture: function(event) { + var o = this.options; + + this._blurActiveElement( event ); + + // among others, prevent a drag on a resizable-handle + if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) { + return false; + } + + //Quit if we're not on a valid handle + this.handle = this._getHandle(event); + if (!this.handle) { + return false; + } + + this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix ); + + return true; + + }, + + _blockFrames: function( selector ) { + this.iframeBlocks = this.document.find( selector ).map(function() { + var iframe = $( this ); + + return $( "<div>" ) + .css( "position", "absolute" ) + .appendTo( iframe.parent() ) + .outerWidth( iframe.outerWidth() ) + .outerHeight( iframe.outerHeight() ) + .offset( iframe.offset() )[ 0 ]; + }); + }, + + _unblockFrames: function() { + if ( this.iframeBlocks ) { + this.iframeBlocks.remove(); + delete this.iframeBlocks; + } + }, + + _blurActiveElement: function( event ) { + var document = this.document[ 0 ]; + + // Only need to blur if the event occurred on the draggable itself, see #10527 + if ( !this.handleElement.is( event.target ) ) { + return; + } + + // support: IE9 + // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe> + try { + + // Support: IE9, IE10 + // If the <body> is blurred, IE will switch windows, see #9520 + if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) { + + // Blur any element that currently has focus, see #4261 + $( document.activeElement ).blur(); + } + } catch ( error ) {} + }, + + _mouseStart: function(event) { + + var o = this.options; + + //Create and append the visible helper + this.helper = this._createHelper(event); + + this.helper.addClass("ui-draggable-dragging"); + + //Cache the helper size + this._cacheHelperProportions(); + + //If ddmanager is used for droppables, set the global draggable + if ($.ui.ddmanager) { + $.ui.ddmanager.current = this; + } + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Store the helper's css position + this.cssPosition = this.helper.css( "position" ); + this.scrollParent = this.helper.scrollParent( true ); + this.offsetParent = this.helper.offsetParent(); + this.hasFixedAncestor = this.helper.parents().filter(function() { + return $( this ).css( "position" ) === "fixed"; + }).length > 0; + + //The element's absolute position on the page minus margins + this.positionAbs = this.element.offset(); + this._refreshOffsets( event ); + + //Generate the original position + this.originalPosition = this.position = this._generatePosition( event, false ); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if "cursorAt" is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Set a containment if given in the options + this._setContainment(); + + //Trigger event + callbacks + if (this._trigger("start", event) === false) { + this._clear(); + return false; + } + + //Recache the helper size + this._cacheHelperProportions(); + + //Prepare the droppable offsets + if ($.ui.ddmanager && !o.dropBehaviour) { + $.ui.ddmanager.prepareOffsets(this, event); + } + + // Reset helper's right/bottom css if they're set and set explicit width/height instead + // as this prevents resizing of elements with right/bottom set (see #7772) + this._normalizeRightBottom(); + + this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position + + //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003) + if ( $.ui.ddmanager ) { + $.ui.ddmanager.dragStart(this, event); + } + + return true; + }, + + _refreshOffsets: function( event ) { + this.offset = { + top: this.positionAbs.top - this.margins.top, + left: this.positionAbs.left - this.margins.left, + scroll: false, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() + }; + + this.offset.click = { + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }; + }, + + _mouseDrag: function(event, noPropagation) { + // reset any necessary cached properties (see #5009) + if ( this.hasFixedAncestor ) { + this.offset.parent = this._getParentOffset(); + } + + //Compute the helpers position + this.position = this._generatePosition( event, true ); + this.positionAbs = this._convertPositionTo("absolute"); + + //Call plugins and callbacks and use the resulting position if something is returned + if (!noPropagation) { + var ui = this._uiHash(); + if (this._trigger("drag", event, ui) === false) { + this._mouseUp({}); + return false; + } + this.position = ui.position; + } + + this.helper[ 0 ].style.left = this.position.left + "px"; + this.helper[ 0 ].style.top = this.position.top + "px"; + + if ($.ui.ddmanager) { + $.ui.ddmanager.drag(this, event); + } + + return false; + }, + + _mouseStop: function(event) { + + //If we are using droppables, inform the manager about the drop + var that = this, + dropped = false; + if ($.ui.ddmanager && !this.options.dropBehaviour) { + dropped = $.ui.ddmanager.drop(this, event); + } + + //if a drop comes from outside (a sortable) + if (this.dropped) { + dropped = this.dropped; + this.dropped = false; + } + + if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { + $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { + if (that._trigger("stop", event) !== false) { + that._clear(); + } + }); + } else { + if (this._trigger("stop", event) !== false) { + this._clear(); + } + } + + return false; + }, + + _mouseUp: function( event ) { + this._unblockFrames(); + + //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003) + if ( $.ui.ddmanager ) { + $.ui.ddmanager.dragStop(this, event); + } + + // Only need to focus if the event occurred on the draggable itself, see #10527 + if ( this.handleElement.is( event.target ) ) { + // The interaction is over; whether or not the click resulted in a drag, focus the element + this.element.focus(); + } + + return $.ui.mouse.prototype._mouseUp.call(this, event); + }, + + cancel: function() { + + if (this.helper.is(".ui-draggable-dragging")) { + this._mouseUp({}); + } else { + this._clear(); + } + + return this; + + }, + + _getHandle: function(event) { + return this.options.handle ? + !!$( event.target ).closest( this.element.find( this.options.handle ) ).length : + true; + }, + + _setHandleClassName: function() { + this.handleElement = this.options.handle ? + this.element.find( this.options.handle ) : this.element; + this.handleElement.addClass( "ui-draggable-handle" ); + }, + + _removeHandleClassName: function() { + this.handleElement.removeClass( "ui-draggable-handle" ); + }, + + _createHelper: function(event) { + + var o = this.options, + helperIsFunction = $.isFunction( o.helper ), + helper = helperIsFunction ? + $( o.helper.apply( this.element[ 0 ], [ event ] ) ) : + ( o.helper === "clone" ? + this.element.clone().removeAttr( "id" ) : + this.element ); + + if (!helper.parents("body").length) { + helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo)); + } + + // http://bugs.jqueryui.com/ticket/9446 + // a helper function can return the original element + // which wouldn't have been set to relative in _create + if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) { + this._setPositionRelative(); + } + + if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) { + helper.css("position", "absolute"); + } + + return helper; + + }, + + _setPositionRelative: function() { + if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) { + this.element[ 0 ].style.position = "relative"; + } + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj === "string") { + obj = obj.split(" "); + } + if ($.isArray(obj)) { + obj = { left: +obj[0], top: +obj[1] || 0 }; + } + if ("left" in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ("right" in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ("top" in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ("bottom" in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _isRootNode: function( element ) { + return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ]; + }, + + _getParentOffset: function() { + + //Get the offsetParent and cache its position + var po = this.offsetParent.offset(), + document = this.document[ 0 ]; + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if ( this._isRootNode( this.offsetParent[ 0 ] ) ) { + po = { top: 0, left: 0 }; + } + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0) + }; + + }, + + _getRelativeOffset: function() { + if ( this.cssPosition !== "relative" ) { + return { top: 0, left: 0 }; + } + + var p = this.element.position(), + scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ); + + return { + top: p.top - ( parseInt(this.helper.css( "top" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ), + left: p.left - ( parseInt(this.helper.css( "left" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 ) + }; + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.element.css("marginLeft"), 10) || 0), + top: (parseInt(this.element.css("marginTop"), 10) || 0), + right: (parseInt(this.element.css("marginRight"), 10) || 0), + bottom: (parseInt(this.element.css("marginBottom"), 10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var isUserScrollable, c, ce, + o = this.options, + document = this.document[ 0 ]; + + this.relativeContainer = null; + + if ( !o.containment ) { + this.containment = null; + return; + } + + if ( o.containment === "window" ) { + this.containment = [ + $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left, + $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top, + $( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left, + $( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top + ]; + return; + } + + if ( o.containment === "document") { + this.containment = [ + 0, + 0, + $( document ).width() - this.helperProportions.width - this.margins.left, + ( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top + ]; + return; + } + + if ( o.containment.constructor === Array ) { + this.containment = o.containment; + return; + } + + if ( o.containment === "parent" ) { + o.containment = this.helper[ 0 ].parentNode; + } + + c = $( o.containment ); + ce = c[ 0 ]; + + if ( !ce ) { + return; + } + + isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) ); + + this.containment = [ + ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ), + ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ), + ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - + ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - + ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - + this.helperProportions.width - + this.margins.left - + this.margins.right, + ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - + ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - + ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - + this.helperProportions.height - + this.margins.top - + this.margins.bottom + ]; + this.relativeContainer = c; + }, + + _convertPositionTo: function(d, pos) { + + if (!pos) { + pos = this.position; + } + + var mod = d === "absolute" ? 1 : -1, + scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ); + + return { + top: ( + pos.top + // The absolute mouse position + this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod) + ), + left: ( + pos.left + // The absolute mouse position + this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod) + ) + }; + + }, + + _generatePosition: function( event, constrainPosition ) { + + var containment, co, top, left, + o = this.options, + scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ), + pageX = event.pageX, + pageY = event.pageY; + + // Cache the scroll + if ( !scrollIsRootNode || !this.offset.scroll ) { + this.offset.scroll = { + top: this.scrollParent.scrollTop(), + left: this.scrollParent.scrollLeft() + }; + } + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + // If we are not dragging yet, we won't check for options + if ( constrainPosition ) { + if ( this.containment ) { + if ( this.relativeContainer ){ + co = this.relativeContainer.offset(); + containment = [ + this.containment[ 0 ] + co.left, + this.containment[ 1 ] + co.top, + this.containment[ 2 ] + co.left, + this.containment[ 3 ] + co.top + ]; + } else { + containment = this.containment; + } + + if (event.pageX - this.offset.click.left < containment[0]) { + pageX = containment[0] + this.offset.click.left; + } + if (event.pageY - this.offset.click.top < containment[1]) { + pageY = containment[1] + this.offset.click.top; + } + if (event.pageX - this.offset.click.left > containment[2]) { + pageX = containment[2] + this.offset.click.left; + } + if (event.pageY - this.offset.click.top > containment[3]) { + pageY = containment[3] + this.offset.click.top; + } + } + + if (o.grid) { + //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950) + top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; + pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; + pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + if ( o.axis === "y" ) { + pageX = this.originalPageX; + } + + if ( o.axis === "x" ) { + pageY = this.originalPageY; + } + } + + return { + top: ( + pageY - // The absolute mouse position + this.offset.click.top - // Click offset (relative to the element) + this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.top + // The offsetParent's offset without borders (offset + border) + ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) + ), + left: ( + pageX - // The absolute mouse position + this.offset.click.left - // Click offset (relative to the element) + this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.left + // The offsetParent's offset without borders (offset + border) + ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) + ) + }; + + }, + + _clear: function() { + this.helper.removeClass("ui-draggable-dragging"); + if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) { + this.helper.remove(); + } + this.helper = null; + this.cancelHelperRemoval = false; + if ( this.destroyOnClear ) { + this.destroy(); + } + }, + + _normalizeRightBottom: function() { + if ( this.options.axis !== "y" && this.helper.css( "right" ) !== "auto" ) { + this.helper.width( this.helper.width() ); + this.helper.css( "right", "auto" ); + } + if ( this.options.axis !== "x" && this.helper.css( "bottom" ) !== "auto" ) { + this.helper.height( this.helper.height() ); + this.helper.css( "bottom", "auto" ); + } + }, + + // From now on bulk stuff - mainly helpers + + _trigger: function( type, event, ui ) { + ui = ui || this._uiHash(); + $.ui.plugin.call( this, type, [ event, ui, this ], true ); + + // Absolute position and offset (see #6884 ) have to be recalculated after plugins + if ( /^(drag|start|stop)/.test( type ) ) { + this.positionAbs = this._convertPositionTo( "absolute" ); + ui.offset = this.positionAbs; + } + return $.Widget.prototype._trigger.call( this, type, event, ui ); + }, + + plugins: {}, + + _uiHash: function() { + return { + helper: this.helper, + position: this.position, + originalPosition: this.originalPosition, + offset: this.positionAbs + }; + } + +}); + +$.ui.plugin.add( "draggable", "connectToSortable", { + start: function( event, ui, draggable ) { + var uiSortable = $.extend( {}, ui, { + item: draggable.element + }); + + draggable.sortables = []; + $( draggable.options.connectToSortable ).each(function() { + var sortable = $( this ).sortable( "instance" ); + + if ( sortable && !sortable.options.disabled ) { + draggable.sortables.push( sortable ); + + // refreshPositions is called at drag start to refresh the containerCache + // which is used in drag. This ensures it's initialized and synchronized + // with any changes that might have happened on the page since initialization. + sortable.refreshPositions(); + sortable._trigger("activate", event, uiSortable); + } + }); + }, + stop: function( event, ui, draggable ) { + var uiSortable = $.extend( {}, ui, { + item: draggable.element + }); + + draggable.cancelHelperRemoval = false; + + $.each( draggable.sortables, function() { + var sortable = this; + + if ( sortable.isOver ) { + sortable.isOver = 0; + + // Allow this sortable to handle removing the helper + draggable.cancelHelperRemoval = true; + sortable.cancelHelperRemoval = false; + + // Use _storedCSS To restore properties in the sortable, + // as this also handles revert (#9675) since the draggable + // may have modified them in unexpected ways (#8809) + sortable._storedCSS = { + position: sortable.placeholder.css( "position" ), + top: sortable.placeholder.css( "top" ), + left: sortable.placeholder.css( "left" ) + }; + + sortable._mouseStop(event); + + // Once drag has ended, the sortable should return to using + // its original helper, not the shared helper from draggable + sortable.options.helper = sortable.options._helper; + } else { + // Prevent this Sortable from removing the helper. + // However, don't set the draggable to remove the helper + // either as another connected Sortable may yet handle the removal. + sortable.cancelHelperRemoval = true; + + sortable._trigger( "deactivate", event, uiSortable ); + } + }); + }, + drag: function( event, ui, draggable ) { + $.each( draggable.sortables, function() { + var innermostIntersecting = false, + sortable = this; + + // Copy over variables that sortable's _intersectsWith uses + sortable.positionAbs = draggable.positionAbs; + sortable.helperProportions = draggable.helperProportions; + sortable.offset.click = draggable.offset.click; + + if ( sortable._intersectsWith( sortable.containerCache ) ) { + innermostIntersecting = true; + + $.each( draggable.sortables, function() { + // Copy over variables that sortable's _intersectsWith uses + this.positionAbs = draggable.positionAbs; + this.helperProportions = draggable.helperProportions; + this.offset.click = draggable.offset.click; + + if ( this !== sortable && + this._intersectsWith( this.containerCache ) && + $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) { + innermostIntersecting = false; + } + + return innermostIntersecting; + }); + } + + if ( innermostIntersecting ) { + // If it intersects, we use a little isOver variable and set it once, + // so that the move-in stuff gets fired only once. + if ( !sortable.isOver ) { + sortable.isOver = 1; + + // Store draggable's parent in case we need to reappend to it later. + draggable._parent = ui.helper.parent(); + + sortable.currentItem = ui.helper + .appendTo( sortable.element ) + .data( "ui-sortable-item", true ); + + // Store helper option to later restore it + sortable.options._helper = sortable.options.helper; + + sortable.options.helper = function() { + return ui.helper[ 0 ]; + }; + + // Fire the start events of the sortable with our passed browser event, + // and our own helper (so it doesn't create a new one) + event.target = sortable.currentItem[ 0 ]; + sortable._mouseCapture( event, true ); + sortable._mouseStart( event, true, true ); + + // Because the browser event is way off the new appended portlet, + // modify necessary variables to reflect the changes + sortable.offset.click.top = draggable.offset.click.top; + sortable.offset.click.left = draggable.offset.click.left; + sortable.offset.parent.left -= draggable.offset.parent.left - + sortable.offset.parent.left; + sortable.offset.parent.top -= draggable.offset.parent.top - + sortable.offset.parent.top; + + draggable._trigger( "toSortable", event ); + + // Inform draggable that the helper is in a valid drop zone, + // used solely in the revert option to handle "valid/invalid". + draggable.dropped = sortable.element; + + // Need to refreshPositions of all sortables in the case that + // adding to one sortable changes the location of the other sortables (#9675) + $.each( draggable.sortables, function() { + this.refreshPositions(); + }); + + // hack so receive/update callbacks work (mostly) + draggable.currentItem = draggable.element; + sortable.fromOutside = draggable; + } + + if ( sortable.currentItem ) { + sortable._mouseDrag( event ); + // Copy the sortable's position because the draggable's can potentially reflect + // a relative position, while sortable is always absolute, which the dragged + // element has now become. (#8809) + ui.position = sortable.position; + } + } else { + // If it doesn't intersect with the sortable, and it intersected before, + // we fake the drag stop of the sortable, but make sure it doesn't remove + // the helper by using cancelHelperRemoval. + if ( sortable.isOver ) { + + sortable.isOver = 0; + sortable.cancelHelperRemoval = true; + + // Calling sortable's mouseStop would trigger a revert, + // so revert must be temporarily false until after mouseStop is called. + sortable.options._revert = sortable.options.revert; + sortable.options.revert = false; + + sortable._trigger( "out", event, sortable._uiHash( sortable ) ); + sortable._mouseStop( event, true ); + + // restore sortable behaviors that were modfied + // when the draggable entered the sortable area (#9481) + sortable.options.revert = sortable.options._revert; + sortable.options.helper = sortable.options._helper; + + if ( sortable.placeholder ) { + sortable.placeholder.remove(); + } + + // Restore and recalculate the draggable's offset considering the sortable + // may have modified them in unexpected ways. (#8809, #10669) + ui.helper.appendTo( draggable._parent ); + draggable._refreshOffsets( event ); + ui.position = draggable._generatePosition( event, true ); + + draggable._trigger( "fromSortable", event ); + + // Inform draggable that the helper is no longer in a valid drop zone + draggable.dropped = false; + + // Need to refreshPositions of all sortables just in case removing + // from one sortable changes the location of other sortables (#9675) + $.each( draggable.sortables, function() { + this.refreshPositions(); + }); + } + } + }); + } +}); + +$.ui.plugin.add("draggable", "cursor", { + start: function( event, ui, instance ) { + var t = $( "body" ), + o = instance.options; + + if (t.css("cursor")) { + o._cursor = t.css("cursor"); + } + t.css("cursor", o.cursor); + }, + stop: function( event, ui, instance ) { + var o = instance.options; + if (o._cursor) { + $("body").css("cursor", o._cursor); + } + } +}); + +$.ui.plugin.add("draggable", "opacity", { + start: function( event, ui, instance ) { + var t = $( ui.helper ), + o = instance.options; + if (t.css("opacity")) { + o._opacity = t.css("opacity"); + } + t.css("opacity", o.opacity); + }, + stop: function( event, ui, instance ) { + var o = instance.options; + if (o._opacity) { + $(ui.helper).css("opacity", o._opacity); + } + } +}); + +$.ui.plugin.add("draggable", "scroll", { + start: function( event, ui, i ) { + if ( !i.scrollParentNotHidden ) { + i.scrollParentNotHidden = i.helper.scrollParent( false ); + } + + if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) { + i.overflowOffset = i.scrollParentNotHidden.offset(); + } + }, + drag: function( event, ui, i ) { + + var o = i.options, + scrolled = false, + scrollParent = i.scrollParentNotHidden[ 0 ], + document = i.document[ 0 ]; + + if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) { + if ( !o.axis || o.axis !== "x" ) { + if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) { + scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed; + } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) { + scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed; + } + } + + if ( !o.axis || o.axis !== "y" ) { + if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) { + scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed; + } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) { + scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed; + } + } + + } else { + + if (!o.axis || o.axis !== "x") { + if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) { + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + } else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) { + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + } + } + + if (!o.axis || o.axis !== "y") { + if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) { + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + } else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) { + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + } + } + + } + + if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) { + $.ui.ddmanager.prepareOffsets(i, event); + } + + } +}); + +$.ui.plugin.add("draggable", "snap", { + start: function( event, ui, i ) { + + var o = i.options; + + i.snapElements = []; + + $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() { + var $t = $(this), + $o = $t.offset(); + if (this !== i.element[0]) { + i.snapElements.push({ + item: this, + width: $t.outerWidth(), height: $t.outerHeight(), + top: $o.top, left: $o.left + }); + } + }); + + }, + drag: function( event, ui, inst ) { + + var ts, bs, ls, rs, l, r, t, b, i, first, + o = inst.options, + d = o.snapTolerance, + x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, + y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; + + for (i = inst.snapElements.length - 1; i >= 0; i--){ + + l = inst.snapElements[i].left - inst.margins.left; + r = l + inst.snapElements[i].width; + t = inst.snapElements[i].top - inst.margins.top; + b = t + inst.snapElements[i].height; + + if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) { + if (inst.snapElements[i].snapping) { + (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + } + inst.snapElements[i].snapping = false; + continue; + } + + if (o.snapMode !== "inner") { + ts = Math.abs(t - y2) <= d; + bs = Math.abs(b - y1) <= d; + ls = Math.abs(l - x2) <= d; + rs = Math.abs(r - x1) <= d; + if (ts) { + ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top; + } + if (bs) { + ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top; + } + if (ls) { + ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left; + } + if (rs) { + ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left; + } + } + + first = (ts || bs || ls || rs); + + if (o.snapMode !== "outer") { + ts = Math.abs(t - y1) <= d; + bs = Math.abs(b - y2) <= d; + ls = Math.abs(l - x1) <= d; + rs = Math.abs(r - x2) <= d; + if (ts) { + ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top; + } + if (bs) { + ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top; + } + if (ls) { + ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left; + } + if (rs) { + ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left; + } + } + + if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) { + (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + } + inst.snapElements[i].snapping = (ts || bs || ls || rs || first); + + } + + } +}); + +$.ui.plugin.add("draggable", "stack", { + start: function( event, ui, instance ) { + var min, + o = instance.options, + group = $.makeArray($(o.stack)).sort(function(a, b) { + return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0); + }); + + if (!group.length) { return; } + + min = parseInt($(group[0]).css("zIndex"), 10) || 0; + $(group).each(function(i) { + $(this).css("zIndex", min + i); + }); + this.css("zIndex", (min + group.length)); + } +}); + +$.ui.plugin.add("draggable", "zIndex", { + start: function( event, ui, instance ) { + var t = $( ui.helper ), + o = instance.options; + + if (t.css("zIndex")) { + o._zIndex = t.css("zIndex"); + } + t.css("zIndex", o.zIndex); + }, + stop: function( event, ui, instance ) { + var o = instance.options; + + if (o._zIndex) { + $(ui.helper).css("zIndex", o._zIndex); + } + } +}); + +var draggable = $.ui.draggable; + + +/*! + * jQuery UI Droppable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/droppable/ + */ + + +$.widget( "ui.droppable", { + version: "1.11.4", + widgetEventPrefix: "drop", + options: { + accept: "*", + activeClass: false, + addClasses: true, + greedy: false, + hoverClass: false, + scope: "default", + tolerance: "intersect", + + // callbacks + activate: null, + deactivate: null, + drop: null, + out: null, + over: null + }, + _create: function() { + + var proportions, + o = this.options, + accept = o.accept; + + this.isover = false; + this.isout = true; + + this.accept = $.isFunction( accept ) ? accept : function( d ) { + return d.is( accept ); + }; + + this.proportions = function( /* valueToWrite */ ) { + if ( arguments.length ) { + // Store the droppable's proportions + proportions = arguments[ 0 ]; + } else { + // Retrieve or derive the droppable's proportions + return proportions ? + proportions : + proportions = { + width: this.element[ 0 ].offsetWidth, + height: this.element[ 0 ].offsetHeight + }; + } + }; + + this._addToManager( o.scope ); + + o.addClasses && this.element.addClass( "ui-droppable" ); + + }, + + _addToManager: function( scope ) { + // Add the reference and positions to the manager + $.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || []; + $.ui.ddmanager.droppables[ scope ].push( this ); + }, + + _splice: function( drop ) { + var i = 0; + for ( ; i < drop.length; i++ ) { + if ( drop[ i ] === this ) { + drop.splice( i, 1 ); + } + } + }, + + _destroy: function() { + var drop = $.ui.ddmanager.droppables[ this.options.scope ]; + + this._splice( drop ); + + this.element.removeClass( "ui-droppable ui-droppable-disabled" ); + }, + + _setOption: function( key, value ) { + + if ( key === "accept" ) { + this.accept = $.isFunction( value ) ? value : function( d ) { + return d.is( value ); + }; + } else if ( key === "scope" ) { + var drop = $.ui.ddmanager.droppables[ this.options.scope ]; + + this._splice( drop ); + this._addToManager( value ); + } + + this._super( key, value ); + }, + + _activate: function( event ) { + var draggable = $.ui.ddmanager.current; + if ( this.options.activeClass ) { + this.element.addClass( this.options.activeClass ); + } + if ( draggable ){ + this._trigger( "activate", event, this.ui( draggable ) ); + } + }, + + _deactivate: function( event ) { + var draggable = $.ui.ddmanager.current; + if ( this.options.activeClass ) { + this.element.removeClass( this.options.activeClass ); + } + if ( draggable ){ + this._trigger( "deactivate", event, this.ui( draggable ) ); + } + }, + + _over: function( event ) { + + var draggable = $.ui.ddmanager.current; + + // Bail if draggable and droppable are same element + if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) { + return; + } + + if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) { + if ( this.options.hoverClass ) { + this.element.addClass( this.options.hoverClass ); + } + this._trigger( "over", event, this.ui( draggable ) ); + } + + }, + + _out: function( event ) { + + var draggable = $.ui.ddmanager.current; + + // Bail if draggable and droppable are same element + if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) { + return; + } + + if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) { + if ( this.options.hoverClass ) { + this.element.removeClass( this.options.hoverClass ); + } + this._trigger( "out", event, this.ui( draggable ) ); + } + + }, + + _drop: function( event, custom ) { + + var draggable = custom || $.ui.ddmanager.current, + childrenIntersection = false; + + // Bail if draggable and droppable are same element + if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) { + return false; + } + + this.element.find( ":data(ui-droppable)" ).not( ".ui-draggable-dragging" ).each(function() { + var inst = $( this ).droppable( "instance" ); + if ( + inst.options.greedy && + !inst.options.disabled && + inst.options.scope === draggable.options.scope && + inst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) && + $.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event ) + ) { childrenIntersection = true; return false; } + }); + if ( childrenIntersection ) { + return false; + } + + if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) { + if ( this.options.activeClass ) { + this.element.removeClass( this.options.activeClass ); + } + if ( this.options.hoverClass ) { + this.element.removeClass( this.options.hoverClass ); + } + this._trigger( "drop", event, this.ui( draggable ) ); + return this.element; + } + + return false; + + }, + + ui: function( c ) { + return { + draggable: ( c.currentItem || c.element ), + helper: c.helper, + position: c.position, + offset: c.positionAbs + }; + } + +}); + +$.ui.intersect = (function() { + function isOverAxis( x, reference, size ) { + return ( x >= reference ) && ( x < ( reference + size ) ); + } + + return function( draggable, droppable, toleranceMode, event ) { + + if ( !droppable.offset ) { + return false; + } + + var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left, + y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top, + x2 = x1 + draggable.helperProportions.width, + y2 = y1 + draggable.helperProportions.height, + l = droppable.offset.left, + t = droppable.offset.top, + r = l + droppable.proportions().width, + b = t + droppable.proportions().height; + + switch ( toleranceMode ) { + case "fit": + return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b ); + case "intersect": + return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half + x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half + t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half + y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half + case "pointer": + return isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width ); + case "touch": + return ( + ( y1 >= t && y1 <= b ) || // Top edge touching + ( y2 >= t && y2 <= b ) || // Bottom edge touching + ( y1 < t && y2 > b ) // Surrounded vertically + ) && ( + ( x1 >= l && x1 <= r ) || // Left edge touching + ( x2 >= l && x2 <= r ) || // Right edge touching + ( x1 < l && x2 > r ) // Surrounded horizontally + ); + default: + return false; + } + }; +})(); + +/* + This manager tracks offsets of draggables and droppables +*/ +$.ui.ddmanager = { + current: null, + droppables: { "default": [] }, + prepareOffsets: function( t, event ) { + + var i, j, + m = $.ui.ddmanager.droppables[ t.options.scope ] || [], + type = event ? event.type : null, // workaround for #2317 + list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack(); + + droppablesLoop: for ( i = 0; i < m.length; i++ ) { + + // No disabled and non-accepted + if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], ( t.currentItem || t.element ) ) ) ) { + continue; + } + + // Filter out elements in the current dragged item + for ( j = 0; j < list.length; j++ ) { + if ( list[ j ] === m[ i ].element[ 0 ] ) { + m[ i ].proportions().height = 0; + continue droppablesLoop; + } + } + + m[ i ].visible = m[ i ].element.css( "display" ) !== "none"; + if ( !m[ i ].visible ) { + continue; + } + + // Activate the droppable if used directly from draggables + if ( type === "mousedown" ) { + m[ i ]._activate.call( m[ i ], event ); + } + + m[ i ].offset = m[ i ].element.offset(); + m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight }); + + } + + }, + drop: function( draggable, event ) { + + var dropped = false; + // Create a copy of the droppables in case the list changes during the drop (#9116) + $.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() { + + if ( !this.options ) { + return; + } + if ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance, event ) ) { + dropped = this._drop.call( this, event ) || dropped; + } + + if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) { + this.isout = true; + this.isover = false; + this._deactivate.call( this, event ); + } + + }); + return dropped; + + }, + dragStart: function( draggable, event ) { + // Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003) + draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() { + if ( !draggable.options.refreshPositions ) { + $.ui.ddmanager.prepareOffsets( draggable, event ); + } + }); + }, + drag: function( draggable, event ) { + + // If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. + if ( draggable.options.refreshPositions ) { + $.ui.ddmanager.prepareOffsets( draggable, event ); + } + + // Run through all droppables and check their positions based on specific tolerance options + $.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() { + + if ( this.options.disabled || this.greedyChild || !this.visible ) { + return; + } + + var parentInstance, scope, parent, + intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ), + c = !intersects && this.isover ? "isout" : ( intersects && !this.isover ? "isover" : null ); + if ( !c ) { + return; + } + + if ( this.options.greedy ) { + // find droppable parents with same scope + scope = this.options.scope; + parent = this.element.parents( ":data(ui-droppable)" ).filter(function() { + return $( this ).droppable( "instance" ).options.scope === scope; + }); + + if ( parent.length ) { + parentInstance = $( parent[ 0 ] ).droppable( "instance" ); + parentInstance.greedyChild = ( c === "isover" ); + } + } + + // we just moved into a greedy child + if ( parentInstance && c === "isover" ) { + parentInstance.isover = false; + parentInstance.isout = true; + parentInstance._out.call( parentInstance, event ); + } + + this[ c ] = true; + this[c === "isout" ? "isover" : "isout"] = false; + this[c === "isover" ? "_over" : "_out"].call( this, event ); + + // we just moved out of a greedy child + if ( parentInstance && c === "isout" ) { + parentInstance.isout = false; + parentInstance.isover = true; + parentInstance._over.call( parentInstance, event ); + } + }); + + }, + dragStop: function( draggable, event ) { + draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" ); + // Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003) + if ( !draggable.options.refreshPositions ) { + $.ui.ddmanager.prepareOffsets( draggable, event ); + } + } +}; + +var droppable = $.ui.droppable; + + +/*! + * jQuery UI Resizable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/resizable/ + */ + + +$.widget("ui.resizable", $.ui.mouse, { + version: "1.11.4", + widgetEventPrefix: "resize", + options: { + alsoResize: false, + animate: false, + animateDuration: "slow", + animateEasing: "swing", + aspectRatio: false, + autoHide: false, + containment: false, + ghost: false, + grid: false, + handles: "e,s,se", + helper: false, + maxHeight: null, + maxWidth: null, + minHeight: 10, + minWidth: 10, + // See #7960 + zIndex: 90, + + // callbacks + resize: null, + start: null, + stop: null + }, + + _num: function( value ) { + return parseInt( value, 10 ) || 0; + }, + + _isNumber: function( value ) { + return !isNaN( parseInt( value, 10 ) ); + }, + + _hasScroll: function( el, a ) { + + if ( $( el ).css( "overflow" ) === "hidden") { + return false; + } + + var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", + has = false; + + if ( el[ scroll ] > 0 ) { + return true; + } + + // TODO: determine which cases actually cause this to happen + // if the element doesn't have the scroll set, see if it's possible to + // set the scroll + el[ scroll ] = 1; + has = ( el[ scroll ] > 0 ); + el[ scroll ] = 0; + return has; + }, + + _create: function() { + + var n, i, handle, axis, hname, + that = this, + o = this.options; + this.element.addClass("ui-resizable"); + + $.extend(this, { + _aspectRatio: !!(o.aspectRatio), + aspectRatio: o.aspectRatio, + originalElement: this.element, + _proportionallyResizeElements: [], + _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null + }); + + // Wrap the element if it cannot hold child nodes + if (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) { + + this.element.wrap( + $("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({ + position: this.element.css("position"), + width: this.element.outerWidth(), + height: this.element.outerHeight(), + top: this.element.css("top"), + left: this.element.css("left") + }) + ); + + this.element = this.element.parent().data( + "ui-resizable", this.element.resizable( "instance" ) + ); + + this.elementIsWrapper = true; + + this.element.css({ + marginLeft: this.originalElement.css("marginLeft"), + marginTop: this.originalElement.css("marginTop"), + marginRight: this.originalElement.css("marginRight"), + marginBottom: this.originalElement.css("marginBottom") + }); + this.originalElement.css({ + marginLeft: 0, + marginTop: 0, + marginRight: 0, + marginBottom: 0 + }); + // support: Safari + // Prevent Safari textarea resize + this.originalResizeStyle = this.originalElement.css("resize"); + this.originalElement.css("resize", "none"); + + this._proportionallyResizeElements.push( this.originalElement.css({ + position: "static", + zoom: 1, + display: "block" + }) ); + + // support: IE9 + // avoid IE jump (hard set the margin) + this.originalElement.css({ margin: this.originalElement.css("margin") }); + + this._proportionallyResize(); + } + + this.handles = o.handles || + ( !$(".ui-resizable-handle", this.element).length ? + "e,s,se" : { + n: ".ui-resizable-n", + e: ".ui-resizable-e", + s: ".ui-resizable-s", + w: ".ui-resizable-w", + se: ".ui-resizable-se", + sw: ".ui-resizable-sw", + ne: ".ui-resizable-ne", + nw: ".ui-resizable-nw" + } ); + + this._handles = $(); + if ( this.handles.constructor === String ) { + + if ( this.handles === "all") { + this.handles = "n,e,s,w,se,sw,ne,nw"; + } + + n = this.handles.split(","); + this.handles = {}; + + for (i = 0; i < n.length; i++) { + + handle = $.trim(n[i]); + hname = "ui-resizable-" + handle; + axis = $("<div class='ui-resizable-handle " + hname + "'></div>"); + + axis.css({ zIndex: o.zIndex }); + + // TODO : What's going on here? + if ("se" === handle) { + axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se"); + } + + this.handles[handle] = ".ui-resizable-" + handle; + this.element.append(axis); + } + + } + + this._renderAxis = function(target) { + + var i, axis, padPos, padWrapper; + + target = target || this.element; + + for (i in this.handles) { + + if (this.handles[i].constructor === String) { + this.handles[i] = this.element.children( this.handles[ i ] ).first().show(); + } else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) { + this.handles[ i ] = $( this.handles[ i ] ); + this._on( this.handles[ i ], { "mousedown": that._mouseDown }); + } + + if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) { + + axis = $(this.handles[i], this.element); + + padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); + + padPos = [ "padding", + /ne|nw|n/.test(i) ? "Top" : + /se|sw|s/.test(i) ? "Bottom" : + /^e$/.test(i) ? "Right" : "Left" ].join(""); + + target.css(padPos, padWrapper); + + this._proportionallyResize(); + } + + this._handles = this._handles.add( this.handles[ i ] ); + } + }; + + // TODO: make renderAxis a prototype function + this._renderAxis(this.element); + + this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) ); + this._handles.disableSelection(); + + this._handles.mouseover(function() { + if (!that.resizing) { + if (this.className) { + axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); + } + that.axis = axis && axis[1] ? axis[1] : "se"; + } + }); + + if (o.autoHide) { + this._handles.hide(); + $(this.element) + .addClass("ui-resizable-autohide") + .mouseenter(function() { + if (o.disabled) { + return; + } + $(this).removeClass("ui-resizable-autohide"); + that._handles.show(); + }) + .mouseleave(function() { + if (o.disabled) { + return; + } + if (!that.resizing) { + $(this).addClass("ui-resizable-autohide"); + that._handles.hide(); + } + }); + } + + this._mouseInit(); + }, + + _destroy: function() { + + this._mouseDestroy(); + + var wrapper, + _destroy = function(exp) { + $(exp) + .removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") + .removeData("resizable") + .removeData("ui-resizable") + .unbind(".resizable") + .find(".ui-resizable-handle") + .remove(); + }; + + // TODO: Unwrap at same DOM position + if (this.elementIsWrapper) { + _destroy(this.element); + wrapper = this.element; + this.originalElement.css({ + position: wrapper.css("position"), + width: wrapper.outerWidth(), + height: wrapper.outerHeight(), + top: wrapper.css("top"), + left: wrapper.css("left") + }).insertAfter( wrapper ); + wrapper.remove(); + } + + this.originalElement.css("resize", this.originalResizeStyle); + _destroy(this.originalElement); + + return this; + }, + + _mouseCapture: function(event) { + var i, handle, + capture = false; + + for (i in this.handles) { + handle = $(this.handles[i])[0]; + if (handle === event.target || $.contains(handle, event.target)) { + capture = true; + } + } + + return !this.options.disabled && capture; + }, + + _mouseStart: function(event) { + + var curleft, curtop, cursor, + o = this.options, + el = this.element; + + this.resizing = true; + + this._renderProxy(); + + curleft = this._num(this.helper.css("left")); + curtop = this._num(this.helper.css("top")); + + if (o.containment) { + curleft += $(o.containment).scrollLeft() || 0; + curtop += $(o.containment).scrollTop() || 0; + } + + this.offset = this.helper.offset(); + this.position = { left: curleft, top: curtop }; + + this.size = this._helper ? { + width: this.helper.width(), + height: this.helper.height() + } : { + width: el.width(), + height: el.height() + }; + + this.originalSize = this._helper ? { + width: el.outerWidth(), + height: el.outerHeight() + } : { + width: el.width(), + height: el.height() + }; + + this.sizeDiff = { + width: el.outerWidth() - el.width(), + height: el.outerHeight() - el.height() + }; + + this.originalPosition = { left: curleft, top: curtop }; + this.originalMousePosition = { left: event.pageX, top: event.pageY }; + + this.aspectRatio = (typeof o.aspectRatio === "number") ? + o.aspectRatio : + ((this.originalSize.width / this.originalSize.height) || 1); + + cursor = $(".ui-resizable-" + this.axis).css("cursor"); + $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor); + + el.addClass("ui-resizable-resizing"); + this._propagate("start", event); + return true; + }, + + _mouseDrag: function(event) { + + var data, props, + smp = this.originalMousePosition, + a = this.axis, + dx = (event.pageX - smp.left) || 0, + dy = (event.pageY - smp.top) || 0, + trigger = this._change[a]; + + this._updatePrevProperties(); + + if (!trigger) { + return false; + } + + data = trigger.apply(this, [ event, dx, dy ]); + + this._updateVirtualBoundaries(event.shiftKey); + if (this._aspectRatio || event.shiftKey) { + data = this._updateRatio(data, event); + } + + data = this._respectSize(data, event); + + this._updateCache(data); + + this._propagate("resize", event); + + props = this._applyChanges(); + + if ( !this._helper && this._proportionallyResizeElements.length ) { + this._proportionallyResize(); + } + + if ( !$.isEmptyObject( props ) ) { + this._updatePrevProperties(); + this._trigger( "resize", event, this.ui() ); + this._applyChanges(); + } + + return false; + }, + + _mouseStop: function(event) { + + this.resizing = false; + var pr, ista, soffseth, soffsetw, s, left, top, + o = this.options, that = this; + + if (this._helper) { + + pr = this._proportionallyResizeElements; + ista = pr.length && (/textarea/i).test(pr[0].nodeName); + soffseth = ista && this._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height; + soffsetw = ista ? 0 : that.sizeDiff.width; + + s = { + width: (that.helper.width() - soffsetw), + height: (that.helper.height() - soffseth) + }; + left = (parseInt(that.element.css("left"), 10) + + (that.position.left - that.originalPosition.left)) || null; + top = (parseInt(that.element.css("top"), 10) + + (that.position.top - that.originalPosition.top)) || null; + + if (!o.animate) { + this.element.css($.extend(s, { top: top, left: left })); + } + + that.helper.height(that.size.height); + that.helper.width(that.size.width); + + if (this._helper && !o.animate) { + this._proportionallyResize(); + } + } + + $("body").css("cursor", "auto"); + + this.element.removeClass("ui-resizable-resizing"); + + this._propagate("stop", event); + + if (this._helper) { + this.helper.remove(); + } + + return false; + + }, + + _updatePrevProperties: function() { + this.prevPosition = { + top: this.position.top, + left: this.position.left + }; + this.prevSize = { + width: this.size.width, + height: this.size.height + }; + }, + + _applyChanges: function() { + var props = {}; + + if ( this.position.top !== this.prevPosition.top ) { + props.top = this.position.top + "px"; + } + if ( this.position.left !== this.prevPosition.left ) { + props.left = this.position.left + "px"; + } + if ( this.size.width !== this.prevSize.width ) { + props.width = this.size.width + "px"; + } + if ( this.size.height !== this.prevSize.height ) { + props.height = this.size.height + "px"; + } + + this.helper.css( props ); + + return props; + }, + + _updateVirtualBoundaries: function(forceAspectRatio) { + var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b, + o = this.options; + + b = { + minWidth: this._isNumber(o.minWidth) ? o.minWidth : 0, + maxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : Infinity, + minHeight: this._isNumber(o.minHeight) ? o.minHeight : 0, + maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity + }; + + if (this._aspectRatio || forceAspectRatio) { + pMinWidth = b.minHeight * this.aspectRatio; + pMinHeight = b.minWidth / this.aspectRatio; + pMaxWidth = b.maxHeight * this.aspectRatio; + pMaxHeight = b.maxWidth / this.aspectRatio; + + if (pMinWidth > b.minWidth) { + b.minWidth = pMinWidth; + } + if (pMinHeight > b.minHeight) { + b.minHeight = pMinHeight; + } + if (pMaxWidth < b.maxWidth) { + b.maxWidth = pMaxWidth; + } + if (pMaxHeight < b.maxHeight) { + b.maxHeight = pMaxHeight; + } + } + this._vBoundaries = b; + }, + + _updateCache: function(data) { + this.offset = this.helper.offset(); + if (this._isNumber(data.left)) { + this.position.left = data.left; + } + if (this._isNumber(data.top)) { + this.position.top = data.top; + } + if (this._isNumber(data.height)) { + this.size.height = data.height; + } + if (this._isNumber(data.width)) { + this.size.width = data.width; + } + }, + + _updateRatio: function( data ) { + + var cpos = this.position, + csize = this.size, + a = this.axis; + + if (this._isNumber(data.height)) { + data.width = (data.height * this.aspectRatio); + } else if (this._isNumber(data.width)) { + data.height = (data.width / this.aspectRatio); + } + + if (a === "sw") { + data.left = cpos.left + (csize.width - data.width); + data.top = null; + } + if (a === "nw") { + data.top = cpos.top + (csize.height - data.height); + data.left = cpos.left + (csize.width - data.width); + } + + return data; + }, + + _respectSize: function( data ) { + + var o = this._vBoundaries, + a = this.axis, + ismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), + ismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), + isminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width), + isminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height), + dw = this.originalPosition.left + this.originalSize.width, + dh = this.position.top + this.size.height, + cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); + if (isminw) { + data.width = o.minWidth; + } + if (isminh) { + data.height = o.minHeight; + } + if (ismaxw) { + data.width = o.maxWidth; + } + if (ismaxh) { + data.height = o.maxHeight; + } + + if (isminw && cw) { + data.left = dw - o.minWidth; + } + if (ismaxw && cw) { + data.left = dw - o.maxWidth; + } + if (isminh && ch) { + data.top = dh - o.minHeight; + } + if (ismaxh && ch) { + data.top = dh - o.maxHeight; + } + + // Fixing jump error on top/left - bug #2330 + if (!data.width && !data.height && !data.left && data.top) { + data.top = null; + } else if (!data.width && !data.height && !data.top && data.left) { + data.left = null; + } + + return data; + }, + + _getPaddingPlusBorderDimensions: function( element ) { + var i = 0, + widths = [], + borders = [ + element.css( "borderTopWidth" ), + element.css( "borderRightWidth" ), + element.css( "borderBottomWidth" ), + element.css( "borderLeftWidth" ) + ], + paddings = [ + element.css( "paddingTop" ), + element.css( "paddingRight" ), + element.css( "paddingBottom" ), + element.css( "paddingLeft" ) + ]; + + for ( ; i < 4; i++ ) { + widths[ i ] = ( parseInt( borders[ i ], 10 ) || 0 ); + widths[ i ] += ( parseInt( paddings[ i ], 10 ) || 0 ); + } + + return { + height: widths[ 0 ] + widths[ 2 ], + width: widths[ 1 ] + widths[ 3 ] + }; + }, + + _proportionallyResize: function() { + + if (!this._proportionallyResizeElements.length) { + return; + } + + var prel, + i = 0, + element = this.helper || this.element; + + for ( ; i < this._proportionallyResizeElements.length; i++) { + + prel = this._proportionallyResizeElements[i]; + + // TODO: Seems like a bug to cache this.outerDimensions + // considering that we are in a loop. + if (!this.outerDimensions) { + this.outerDimensions = this._getPaddingPlusBorderDimensions( prel ); + } + + prel.css({ + height: (element.height() - this.outerDimensions.height) || 0, + width: (element.width() - this.outerDimensions.width) || 0 + }); + + } + + }, + + _renderProxy: function() { + + var el = this.element, o = this.options; + this.elementOffset = el.offset(); + + if (this._helper) { + + this.helper = this.helper || $("<div style='overflow:hidden;'></div>"); + + this.helper.addClass(this._helper).css({ + width: this.element.outerWidth() - 1, + height: this.element.outerHeight() - 1, + position: "absolute", + left: this.elementOffset.left + "px", + top: this.elementOffset.top + "px", + zIndex: ++o.zIndex //TODO: Don't modify option + }); + + this.helper + .appendTo("body") + .disableSelection(); + + } else { + this.helper = this.element; + } + + }, + + _change: { + e: function(event, dx) { + return { width: this.originalSize.width + dx }; + }, + w: function(event, dx) { + var cs = this.originalSize, sp = this.originalPosition; + return { left: sp.left + dx, width: cs.width - dx }; + }, + n: function(event, dx, dy) { + var cs = this.originalSize, sp = this.originalPosition; + return { top: sp.top + dy, height: cs.height - dy }; + }, + s: function(event, dx, dy) { + return { height: this.originalSize.height + dy }; + }, + se: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), + this._change.e.apply(this, [ event, dx, dy ])); + }, + sw: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), + this._change.w.apply(this, [ event, dx, dy ])); + }, + ne: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), + this._change.e.apply(this, [ event, dx, dy ])); + }, + nw: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), + this._change.w.apply(this, [ event, dx, dy ])); + } + }, + + _propagate: function(n, event) { + $.ui.plugin.call(this, n, [ event, this.ui() ]); + (n !== "resize" && this._trigger(n, event, this.ui())); + }, + + plugins: {}, + + ui: function() { + return { + originalElement: this.originalElement, + element: this.element, + helper: this.helper, + position: this.position, + size: this.size, + originalSize: this.originalSize, + originalPosition: this.originalPosition + }; + } + +}); + +/* + * Resizable Extensions + */ + +$.ui.plugin.add("resizable", "animate", { + + stop: function( event ) { + var that = $(this).resizable( "instance" ), + o = that.options, + pr = that._proportionallyResizeElements, + ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && that._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height, + soffsetw = ista ? 0 : that.sizeDiff.width, + style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) }, + left = (parseInt(that.element.css("left"), 10) + + (that.position.left - that.originalPosition.left)) || null, + top = (parseInt(that.element.css("top"), 10) + + (that.position.top - that.originalPosition.top)) || null; + + that.element.animate( + $.extend(style, top && left ? { top: top, left: left } : {}), { + duration: o.animateDuration, + easing: o.animateEasing, + step: function() { + + var data = { + width: parseInt(that.element.css("width"), 10), + height: parseInt(that.element.css("height"), 10), + top: parseInt(that.element.css("top"), 10), + left: parseInt(that.element.css("left"), 10) + }; + + if (pr && pr.length) { + $(pr[0]).css({ width: data.width, height: data.height }); + } + + // propagating resize, and updating values for each animation step + that._updateCache(data); + that._propagate("resize", event); + + } + } + ); + } + +}); + +$.ui.plugin.add( "resizable", "containment", { + + start: function() { + var element, p, co, ch, cw, width, height, + that = $( this ).resizable( "instance" ), + o = that.options, + el = that.element, + oc = o.containment, + ce = ( oc instanceof $ ) ? oc.get( 0 ) : ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc; + + if ( !ce ) { + return; + } + + that.containerElement = $( ce ); + + if ( /document/.test( oc ) || oc === document ) { + that.containerOffset = { + left: 0, + top: 0 + }; + that.containerPosition = { + left: 0, + top: 0 + }; + + that.parentData = { + element: $( document ), + left: 0, + top: 0, + width: $( document ).width(), + height: $( document ).height() || document.body.parentNode.scrollHeight + }; + } else { + element = $( ce ); + p = []; + $([ "Top", "Right", "Left", "Bottom" ]).each(function( i, name ) { + p[ i ] = that._num( element.css( "padding" + name ) ); + }); + + that.containerOffset = element.offset(); + that.containerPosition = element.position(); + that.containerSize = { + height: ( element.innerHeight() - p[ 3 ] ), + width: ( element.innerWidth() - p[ 1 ] ) + }; + + co = that.containerOffset; + ch = that.containerSize.height; + cw = that.containerSize.width; + width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw ); + height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ; + + that.parentData = { + element: ce, + left: co.left, + top: co.top, + width: width, + height: height + }; + } + }, + + resize: function( event ) { + var woset, hoset, isParent, isOffsetRelative, + that = $( this ).resizable( "instance" ), + o = that.options, + co = that.containerOffset, + cp = that.position, + pRatio = that._aspectRatio || event.shiftKey, + cop = { + top: 0, + left: 0 + }, + ce = that.containerElement, + continueResize = true; + + if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) { + cop = co; + } + + if ( cp.left < ( that._helper ? co.left : 0 ) ) { + that.size.width = that.size.width + + ( that._helper ? + ( that.position.left - co.left ) : + ( that.position.left - cop.left ) ); + + if ( pRatio ) { + that.size.height = that.size.width / that.aspectRatio; + continueResize = false; + } + that.position.left = o.helper ? co.left : 0; + } + + if ( cp.top < ( that._helper ? co.top : 0 ) ) { + that.size.height = that.size.height + + ( that._helper ? + ( that.position.top - co.top ) : + that.position.top ); + + if ( pRatio ) { + that.size.width = that.size.height * that.aspectRatio; + continueResize = false; + } + that.position.top = that._helper ? co.top : 0; + } + + isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 ); + isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) ); + + if ( isParent && isOffsetRelative ) { + that.offset.left = that.parentData.left + that.position.left; + that.offset.top = that.parentData.top + that.position.top; + } else { + that.offset.left = that.element.offset().left; + that.offset.top = that.element.offset().top; + } + + woset = Math.abs( that.sizeDiff.width + + (that._helper ? + that.offset.left - cop.left : + (that.offset.left - co.left)) ); + + hoset = Math.abs( that.sizeDiff.height + + (that._helper ? + that.offset.top - cop.top : + (that.offset.top - co.top)) ); + + if ( woset + that.size.width >= that.parentData.width ) { + that.size.width = that.parentData.width - woset; + if ( pRatio ) { + that.size.height = that.size.width / that.aspectRatio; + continueResize = false; + } + } + + if ( hoset + that.size.height >= that.parentData.height ) { + that.size.height = that.parentData.height - hoset; + if ( pRatio ) { + that.size.width = that.size.height * that.aspectRatio; + continueResize = false; + } + } + + if ( !continueResize ) { + that.position.left = that.prevPosition.left; + that.position.top = that.prevPosition.top; + that.size.width = that.prevSize.width; + that.size.height = that.prevSize.height; + } + }, + + stop: function() { + var that = $( this ).resizable( "instance" ), + o = that.options, + co = that.containerOffset, + cop = that.containerPosition, + ce = that.containerElement, + helper = $( that.helper ), + ho = helper.offset(), + w = helper.outerWidth() - that.sizeDiff.width, + h = helper.outerHeight() - that.sizeDiff.height; + + if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) { + $( this ).css({ + left: ho.left - cop.left - co.left, + width: w, + height: h + }); + } + + if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) { + $( this ).css({ + left: ho.left - cop.left - co.left, + width: w, + height: h + }); + } + } +}); + +$.ui.plugin.add("resizable", "alsoResize", { + + start: function() { + var that = $(this).resizable( "instance" ), + o = that.options; + + $(o.alsoResize).each(function() { + var el = $(this); + el.data("ui-resizable-alsoresize", { + width: parseInt(el.width(), 10), height: parseInt(el.height(), 10), + left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10) + }); + }); + }, + + resize: function(event, ui) { + var that = $(this).resizable( "instance" ), + o = that.options, + os = that.originalSize, + op = that.originalPosition, + delta = { + height: (that.size.height - os.height) || 0, + width: (that.size.width - os.width) || 0, + top: (that.position.top - op.top) || 0, + left: (that.position.left - op.left) || 0 + }; + + $(o.alsoResize).each(function() { + var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {}, + css = el.parents(ui.originalElement[0]).length ? + [ "width", "height" ] : + [ "width", "height", "top", "left" ]; + + $.each(css, function(i, prop) { + var sum = (start[prop] || 0) + (delta[prop] || 0); + if (sum && sum >= 0) { + style[prop] = sum || null; + } + }); + + el.css(style); + }); + }, + + stop: function() { + $(this).removeData("resizable-alsoresize"); + } +}); + +$.ui.plugin.add("resizable", "ghost", { + + start: function() { + + var that = $(this).resizable( "instance" ), o = that.options, cs = that.size; + + that.ghost = that.originalElement.clone(); + that.ghost + .css({ + opacity: 0.25, + display: "block", + position: "relative", + height: cs.height, + width: cs.width, + margin: 0, + left: 0, + top: 0 + }) + .addClass("ui-resizable-ghost") + .addClass(typeof o.ghost === "string" ? o.ghost : ""); + + that.ghost.appendTo(that.helper); + + }, + + resize: function() { + var that = $(this).resizable( "instance" ); + if (that.ghost) { + that.ghost.css({ + position: "relative", + height: that.size.height, + width: that.size.width + }); + } + }, + + stop: function() { + var that = $(this).resizable( "instance" ); + if (that.ghost && that.helper) { + that.helper.get(0).removeChild(that.ghost.get(0)); + } + } + +}); + +$.ui.plugin.add("resizable", "grid", { + + resize: function() { + var outerDimensions, + that = $(this).resizable( "instance" ), + o = that.options, + cs = that.size, + os = that.originalSize, + op = that.originalPosition, + a = that.axis, + grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid, + gridX = (grid[0] || 1), + gridY = (grid[1] || 1), + ox = Math.round((cs.width - os.width) / gridX) * gridX, + oy = Math.round((cs.height - os.height) / gridY) * gridY, + newWidth = os.width + ox, + newHeight = os.height + oy, + isMaxWidth = o.maxWidth && (o.maxWidth < newWidth), + isMaxHeight = o.maxHeight && (o.maxHeight < newHeight), + isMinWidth = o.minWidth && (o.minWidth > newWidth), + isMinHeight = o.minHeight && (o.minHeight > newHeight); + + o.grid = grid; + + if (isMinWidth) { + newWidth += gridX; + } + if (isMinHeight) { + newHeight += gridY; + } + if (isMaxWidth) { + newWidth -= gridX; + } + if (isMaxHeight) { + newHeight -= gridY; + } + + if (/^(se|s|e)$/.test(a)) { + that.size.width = newWidth; + that.size.height = newHeight; + } else if (/^(ne)$/.test(a)) { + that.size.width = newWidth; + that.size.height = newHeight; + that.position.top = op.top - oy; + } else if (/^(sw)$/.test(a)) { + that.size.width = newWidth; + that.size.height = newHeight; + that.position.left = op.left - ox; + } else { + if ( newHeight - gridY <= 0 || newWidth - gridX <= 0) { + outerDimensions = that._getPaddingPlusBorderDimensions( this ); + } + + if ( newHeight - gridY > 0 ) { + that.size.height = newHeight; + that.position.top = op.top - oy; + } else { + newHeight = gridY - outerDimensions.height; + that.size.height = newHeight; + that.position.top = op.top + os.height - newHeight; + } + if ( newWidth - gridX > 0 ) { + that.size.width = newWidth; + that.position.left = op.left - ox; + } else { + newWidth = gridX - outerDimensions.width; + that.size.width = newWidth; + that.position.left = op.left + os.width - newWidth; + } + } + } + +}); + +var resizable = $.ui.resizable; + + +/*! + * jQuery UI Selectable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/selectable/ + */ + + +var selectable = $.widget("ui.selectable", $.ui.mouse, { + version: "1.11.4", + options: { + appendTo: "body", + autoRefresh: true, + distance: 0, + filter: "*", + tolerance: "touch", + + // callbacks + selected: null, + selecting: null, + start: null, + stop: null, + unselected: null, + unselecting: null + }, + _create: function() { + var selectees, + that = this; + + this.element.addClass("ui-selectable"); + + this.dragged = false; + + // cache selectee children based on filter + this.refresh = function() { + selectees = $(that.options.filter, that.element[0]); + selectees.addClass("ui-selectee"); + selectees.each(function() { + var $this = $(this), + pos = $this.offset(); + $.data(this, "selectable-item", { + element: this, + $element: $this, + left: pos.left, + top: pos.top, + right: pos.left + $this.outerWidth(), + bottom: pos.top + $this.outerHeight(), + startselected: false, + selected: $this.hasClass("ui-selected"), + selecting: $this.hasClass("ui-selecting"), + unselecting: $this.hasClass("ui-unselecting") + }); + }); + }; + this.refresh(); + + this.selectees = selectees.addClass("ui-selectee"); + + this._mouseInit(); + + this.helper = $("<div class='ui-selectable-helper'></div>"); + }, + + _destroy: function() { + this.selectees + .removeClass("ui-selectee") + .removeData("selectable-item"); + this.element + .removeClass("ui-selectable ui-selectable-disabled"); + this._mouseDestroy(); + }, + + _mouseStart: function(event) { + var that = this, + options = this.options; + + this.opos = [ event.pageX, event.pageY ]; + + if (this.options.disabled) { + return; + } + + this.selectees = $(options.filter, this.element[0]); + + this._trigger("start", event); + + $(options.appendTo).append(this.helper); + // position helper (lasso) + this.helper.css({ + "left": event.pageX, + "top": event.pageY, + "width": 0, + "height": 0 + }); + + if (options.autoRefresh) { + this.refresh(); + } + + this.selectees.filter(".ui-selected").each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.startselected = true; + if (!event.metaKey && !event.ctrlKey) { + selectee.$element.removeClass("ui-selected"); + selectee.selected = false; + selectee.$element.addClass("ui-unselecting"); + selectee.unselecting = true; + // selectable UNSELECTING callback + that._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + }); + + $(event.target).parents().addBack().each(function() { + var doSelect, + selectee = $.data(this, "selectable-item"); + if (selectee) { + doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected"); + selectee.$element + .removeClass(doSelect ? "ui-unselecting" : "ui-selected") + .addClass(doSelect ? "ui-selecting" : "ui-unselecting"); + selectee.unselecting = !doSelect; + selectee.selecting = doSelect; + selectee.selected = doSelect; + // selectable (UN)SELECTING callback + if (doSelect) { + that._trigger("selecting", event, { + selecting: selectee.element + }); + } else { + that._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + return false; + } + }); + + }, + + _mouseDrag: function(event) { + + this.dragged = true; + + if (this.options.disabled) { + return; + } + + var tmp, + that = this, + options = this.options, + x1 = this.opos[0], + y1 = this.opos[1], + x2 = event.pageX, + y2 = event.pageY; + + if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; } + if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; } + this.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 }); + + this.selectees.each(function() { + var selectee = $.data(this, "selectable-item"), + hit = false; + + //prevent helper from being selected if appendTo: selectable + if (!selectee || selectee.element === that.element[0]) { + return; + } + + if (options.tolerance === "touch") { + hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); + } else if (options.tolerance === "fit") { + hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); + } + + if (hit) { + // SELECT + if (selectee.selected) { + selectee.$element.removeClass("ui-selected"); + selectee.selected = false; + } + if (selectee.unselecting) { + selectee.$element.removeClass("ui-unselecting"); + selectee.unselecting = false; + } + if (!selectee.selecting) { + selectee.$element.addClass("ui-selecting"); + selectee.selecting = true; + // selectable SELECTING callback + that._trigger("selecting", event, { + selecting: selectee.element + }); + } + } else { + // UNSELECT + if (selectee.selecting) { + if ((event.metaKey || event.ctrlKey) && selectee.startselected) { + selectee.$element.removeClass("ui-selecting"); + selectee.selecting = false; + selectee.$element.addClass("ui-selected"); + selectee.selected = true; + } else { + selectee.$element.removeClass("ui-selecting"); + selectee.selecting = false; + if (selectee.startselected) { + selectee.$element.addClass("ui-unselecting"); + selectee.unselecting = true; + } + // selectable UNSELECTING callback + that._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + if (selectee.selected) { + if (!event.metaKey && !event.ctrlKey && !selectee.startselected) { + selectee.$element.removeClass("ui-selected"); + selectee.selected = false; + + selectee.$element.addClass("ui-unselecting"); + selectee.unselecting = true; + // selectable UNSELECTING callback + that._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + } + }); + + return false; + }, + + _mouseStop: function(event) { + var that = this; + + this.dragged = false; + + $(".ui-unselecting", this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass("ui-unselecting"); + selectee.unselecting = false; + selectee.startselected = false; + that._trigger("unselected", event, { + unselected: selectee.element + }); + }); + $(".ui-selecting", this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass("ui-selecting").addClass("ui-selected"); + selectee.selecting = false; + selectee.selected = true; + selectee.startselected = true; + that._trigger("selected", event, { + selected: selectee.element + }); + }); + this._trigger("stop", event); + + this.helper.remove(); + + return false; + } + +}); + + +/*! + * jQuery UI Sortable 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/sortable/ + */ + + +var sortable = $.widget("ui.sortable", $.ui.mouse, { + version: "1.11.4", + widgetEventPrefix: "sort", + ready: false, + options: { + appendTo: "parent", + axis: false, + connectWith: false, + containment: false, + cursor: "auto", + cursorAt: false, + dropOnEmpty: true, + forcePlaceholderSize: false, + forceHelperSize: false, + grid: false, + handle: false, + helper: "original", + items: "> *", + opacity: false, + placeholder: false, + revert: false, + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + scope: "default", + tolerance: "intersect", + zIndex: 1000, + + // callbacks + activate: null, + beforeStop: null, + change: null, + deactivate: null, + out: null, + over: null, + receive: null, + remove: null, + sort: null, + start: null, + stop: null, + update: null + }, + + _isOverAxis: function( x, reference, size ) { + return ( x >= reference ) && ( x < ( reference + size ) ); + }, + + _isFloating: function( item ) { + return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display")); + }, + + _create: function() { + this.containerCache = {}; + this.element.addClass("ui-sortable"); + + //Get the items + this.refresh(); + + //Let's determine the parent's offset + this.offset = this.element.offset(); + + //Initialize mouse events for interaction + this._mouseInit(); + + this._setHandleClassName(); + + //We're ready to go + this.ready = true; + + }, + + _setOption: function( key, value ) { + this._super( key, value ); + + if ( key === "handle" ) { + this._setHandleClassName(); + } + }, + + _setHandleClassName: function() { + this.element.find( ".ui-sortable-handle" ).removeClass( "ui-sortable-handle" ); + $.each( this.items, function() { + ( this.instance.options.handle ? + this.item.find( this.instance.options.handle ) : this.item ) + .addClass( "ui-sortable-handle" ); + }); + }, + + _destroy: function() { + this.element + .removeClass( "ui-sortable ui-sortable-disabled" ) + .find( ".ui-sortable-handle" ) + .removeClass( "ui-sortable-handle" ); + this._mouseDestroy(); + + for ( var i = this.items.length - 1; i >= 0; i-- ) { + this.items[i].item.removeData(this.widgetName + "-item"); + } + + return this; + }, + + _mouseCapture: function(event, overrideHandle) { + var currentItem = null, + validHandle = false, + that = this; + + if (this.reverting) { + return false; + } + + if(this.options.disabled || this.options.type === "static") { + return false; + } + + //We have to refresh the items data once first + this._refreshItems(event); + + //Find out if the clicked node (or one of its parents) is a actual item in this.items + $(event.target).parents().each(function() { + if($.data(this, that.widgetName + "-item") === that) { + currentItem = $(this); + return false; + } + }); + if($.data(event.target, that.widgetName + "-item") === that) { + currentItem = $(event.target); + } + + if(!currentItem) { + return false; + } + if(this.options.handle && !overrideHandle) { + $(this.options.handle, currentItem).find("*").addBack().each(function() { + if(this === event.target) { + validHandle = true; + } + }); + if(!validHandle) { + return false; + } + } + + this.currentItem = currentItem; + this._removeCurrentsFromItems(); + return true; + + }, + + _mouseStart: function(event, overrideHandle, noActivation) { + + var i, body, + o = this.options; + + this.currentContainer = this; + + //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture + this.refreshPositions(); + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Get the next scrolling parent + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.currentItem.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + // Only after we got the offset, we can change the helper's position to absolute + // TODO: Still need to figure out a way to make relative sorting possible + this.helper.css("position", "absolute"); + this.cssPosition = this.helper.css("position"); + + //Generate the original position + this.originalPosition = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if "cursorAt" is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Cache the former DOM position + this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; + + //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way + if(this.helper[0] !== this.currentItem[0]) { + this.currentItem.hide(); + } + + //Create the placeholder + this._createPlaceholder(); + + //Set a containment if given in the options + if(o.containment) { + this._setContainment(); + } + + if( o.cursor && o.cursor !== "auto" ) { // cursor option + body = this.document.find( "body" ); + + // support: IE + this.storedCursor = body.css( "cursor" ); + body.css( "cursor", o.cursor ); + + this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body ); + } + + if(o.opacity) { // opacity option + if (this.helper.css("opacity")) { + this._storedOpacity = this.helper.css("opacity"); + } + this.helper.css("opacity", o.opacity); + } + + if(o.zIndex) { // zIndex option + if (this.helper.css("zIndex")) { + this._storedZIndex = this.helper.css("zIndex"); + } + this.helper.css("zIndex", o.zIndex); + } + + //Prepare scrolling + if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") { + this.overflowOffset = this.scrollParent.offset(); + } + + //Call callbacks + this._trigger("start", event, this._uiHash()); + + //Recache the helper size + if(!this._preserveHelperProportions) { + this._cacheHelperProportions(); + } + + + //Post "activate" events to possible containers + if( !noActivation ) { + for ( i = this.containers.length - 1; i >= 0; i-- ) { + this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) ); + } + } + + //Prepare possible droppables + if($.ui.ddmanager) { + $.ui.ddmanager.current = this; + } + + if ($.ui.ddmanager && !o.dropBehaviour) { + $.ui.ddmanager.prepareOffsets(this, event); + } + + this.dragging = true; + + this.helper.addClass("ui-sortable-helper"); + this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position + return true; + + }, + + _mouseDrag: function(event) { + var i, item, itemElement, intersection, + o = this.options, + scrolled = false; + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + if (!this.lastPositionAbs) { + this.lastPositionAbs = this.positionAbs; + } + + //Do scrolling + if(this.options.scroll) { + if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") { + + if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) { + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; + } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) { + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; + } + + if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) { + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; + } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) { + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; + } + + } else { + + if(event.pageY - this.document.scrollTop() < o.scrollSensitivity) { + scrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed); + } else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) { + scrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed); + } + + if(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) { + scrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed); + } else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) { + scrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed); + } + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) { + $.ui.ddmanager.prepareOffsets(this, event); + } + } + + //Regenerate the absolute position used for position checks + this.positionAbs = this._convertPositionTo("absolute"); + + //Set the helper position + if(!this.options.axis || this.options.axis !== "y") { + this.helper[0].style.left = this.position.left+"px"; + } + if(!this.options.axis || this.options.axis !== "x") { + this.helper[0].style.top = this.position.top+"px"; + } + + //Rearrange + for (i = this.items.length - 1; i >= 0; i--) { + + //Cache variables and intersection, continue if no intersection + item = this.items[i]; + itemElement = item.item[0]; + intersection = this._intersectsWithPointer(item); + if (!intersection) { + continue; + } + + // Only put the placeholder inside the current Container, skip all + // items from other containers. This works because when moving + // an item from one container to another the + // currentContainer is switched before the placeholder is moved. + // + // Without this, moving items in "sub-sortables" can cause + // the placeholder to jitter between the outer and inner container. + if (item.instance !== this.currentContainer) { + continue; + } + + // cannot intersect with itself + // no useless actions that have been done before + // no action if the item moved is the parent of the item checked + if (itemElement !== this.currentItem[0] && + this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement && + !$.contains(this.placeholder[0], itemElement) && + (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true) + ) { + + this.direction = intersection === 1 ? "down" : "up"; + + if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) { + this._rearrange(event, item); + } else { + break; + } + + this._trigger("change", event, this._uiHash()); + break; + } + } + + //Post events to containers + this._contactContainers(event); + + //Interconnect with droppables + if($.ui.ddmanager) { + $.ui.ddmanager.drag(this, event); + } + + //Call callbacks + this._trigger("sort", event, this._uiHash()); + + this.lastPositionAbs = this.positionAbs; + return false; + + }, + + _mouseStop: function(event, noPropagation) { + + if(!event) { + return; + } + + //If we are using droppables, inform the manager about the drop + if ($.ui.ddmanager && !this.options.dropBehaviour) { + $.ui.ddmanager.drop(this, event); + } + + if(this.options.revert) { + var that = this, + cur = this.placeholder.offset(), + axis = this.options.axis, + animation = {}; + + if ( !axis || axis === "x" ) { + animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft); + } + if ( !axis || axis === "y" ) { + animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop); + } + this.reverting = true; + $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() { + that._clear(event); + }); + } else { + this._clear(event, noPropagation); + } + + return false; + + }, + + cancel: function() { + + if(this.dragging) { + + this._mouseUp({ target: null }); + + if(this.options.helper === "original") { + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + } else { + this.currentItem.show(); + } + + //Post deactivating events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + this.containers[i]._trigger("deactivate", null, this._uiHash(this)); + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", null, this._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + if (this.placeholder) { + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + if(this.placeholder[0].parentNode) { + this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + } + if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) { + this.helper.remove(); + } + + $.extend(this, { + helper: null, + dragging: false, + reverting: false, + _noFinalSort: null + }); + + if(this.domPosition.prev) { + $(this.domPosition.prev).after(this.currentItem); + } else { + $(this.domPosition.parent).prepend(this.currentItem); + } + } + + return this; + + }, + + serialize: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected), + str = []; + o = o || {}; + + $(items).each(function() { + var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/)); + if (res) { + str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2])); + } + }); + + if(!str.length && o.key) { + str.push(o.key + "="); + } + + return str.join("&"); + + }, + + toArray: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected), + ret = []; + + o = o || {}; + + items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); }); + return ret; + + }, + + /* Be careful with the following core functions */ + _intersectsWith: function(item) { + + var x1 = this.positionAbs.left, + x2 = x1 + this.helperProportions.width, + y1 = this.positionAbs.top, + y2 = y1 + this.helperProportions.height, + l = item.left, + r = l + item.width, + t = item.top, + b = t + item.height, + dyClick = this.offset.click.top, + dxClick = this.offset.click.left, + isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ), + isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ), + isOverElement = isOverElementHeight && isOverElementWidth; + + if ( this.options.tolerance === "pointer" || + this.options.forcePointerForContainers || + (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"]) + ) { + return isOverElement; + } else { + + return (l < x1 + (this.helperProportions.width / 2) && // Right Half + x2 - (this.helperProportions.width / 2) < r && // Left Half + t < y1 + (this.helperProportions.height / 2) && // Bottom Half + y2 - (this.helperProportions.height / 2) < b ); // Top Half + + } + }, + + _intersectsWithPointer: function(item) { + + var isOverElementHeight = (this.options.axis === "x") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), + isOverElementWidth = (this.options.axis === "y") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), + isOverElement = isOverElementHeight && isOverElementWidth, + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (!isOverElement) { + return false; + } + + return this.floating ? + ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 ) + : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) ); + + }, + + _intersectsWithSides: function(item) { + + var isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), + isOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (this.floating && horizontalDirection) { + return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf)); + } else { + return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf)); + } + + }, + + _getDragVerticalDirection: function() { + var delta = this.positionAbs.top - this.lastPositionAbs.top; + return delta !== 0 && (delta > 0 ? "down" : "up"); + }, + + _getDragHorizontalDirection: function() { + var delta = this.positionAbs.left - this.lastPositionAbs.left; + return delta !== 0 && (delta > 0 ? "right" : "left"); + }, + + refresh: function(event) { + this._refreshItems(event); + this._setHandleClassName(); + this.refreshPositions(); + return this; + }, + + _connectWith: function() { + var options = this.options; + return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith; + }, + + _getItemsAsjQuery: function(connected) { + + var i, j, cur, inst, + items = [], + queries = [], + connectWith = this._connectWith(); + + if(connectWith && connected) { + for (i = connectWith.length - 1; i >= 0; i--){ + cur = $(connectWith[i], this.document[0]); + for ( j = cur.length - 1; j >= 0; j--){ + inst = $.data(cur[j], this.widgetFullName); + if(inst && inst !== this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]); + } + } + } + } + + queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]); + + function addItems() { + items.push( this ); + } + for (i = queries.length - 1; i >= 0; i--){ + queries[i][0].each( addItems ); + } + + return $(items); + + }, + + _removeCurrentsFromItems: function() { + + var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); + + this.items = $.grep(this.items, function (item) { + for (var j=0; j < list.length; j++) { + if(list[j] === item.item[0]) { + return false; + } + } + return true; + }); + + }, + + _refreshItems: function(event) { + + this.items = []; + this.containers = [this]; + + var i, j, cur, inst, targetData, _queries, item, queriesLength, + items = this.items, + queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]], + connectWith = this._connectWith(); + + if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down + for (i = connectWith.length - 1; i >= 0; i--){ + cur = $(connectWith[i], this.document[0]); + for (j = cur.length - 1; j >= 0; j--){ + inst = $.data(cur[j], this.widgetFullName); + if(inst && inst !== this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); + this.containers.push(inst); + } + } + } + } + + for (i = queries.length - 1; i >= 0; i--) { + targetData = queries[i][1]; + _queries = queries[i][0]; + + for (j=0, queriesLength = _queries.length; j < queriesLength; j++) { + item = $(_queries[j]); + + item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager) + + items.push({ + item: item, + instance: targetData, + width: 0, height: 0, + left: 0, top: 0 + }); + } + } + + }, + + refreshPositions: function(fast) { + + // Determine whether items are being displayed horizontally + this.floating = this.items.length ? + this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) : + false; + + //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change + if(this.offsetParent && this.helper) { + this.offset.parent = this._getParentOffset(); + } + + var i, item, t, p; + + for (i = this.items.length - 1; i >= 0; i--){ + item = this.items[i]; + + //We ignore calculating positions of all connected containers when we're not over them + if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) { + continue; + } + + t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; + + if (!fast) { + item.width = t.outerWidth(); + item.height = t.outerHeight(); + } + + p = t.offset(); + item.left = p.left; + item.top = p.top; + } + + if(this.options.custom && this.options.custom.refreshContainers) { + this.options.custom.refreshContainers.call(this); + } else { + for (i = this.containers.length - 1; i >= 0; i--){ + p = this.containers[i].element.offset(); + this.containers[i].containerCache.left = p.left; + this.containers[i].containerCache.top = p.top; + this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); + this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); + } + } + + return this; + }, + + _createPlaceholder: function(that) { + that = that || this; + var className, + o = that.options; + + if(!o.placeholder || o.placeholder.constructor === String) { + className = o.placeholder; + o.placeholder = { + element: function() { + + var nodeName = that.currentItem[0].nodeName.toLowerCase(), + element = $( "<" + nodeName + ">", that.document[0] ) + .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder") + .removeClass("ui-sortable-helper"); + + if ( nodeName === "tbody" ) { + that._createTrPlaceholder( + that.currentItem.find( "tr" ).eq( 0 ), + $( "<tr>", that.document[ 0 ] ).appendTo( element ) + ); + } else if ( nodeName === "tr" ) { + that._createTrPlaceholder( that.currentItem, element ); + } else if ( nodeName === "img" ) { + element.attr( "src", that.currentItem.attr( "src" ) ); + } + + if ( !className ) { + element.css( "visibility", "hidden" ); + } + + return element; + }, + update: function(container, p) { + + // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that + // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified + if(className && !o.forcePlaceholderSize) { + return; + } + + //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item + if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); } + if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); } + } + }; + } + + //Create the placeholder + that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem)); + + //Append it after the actual current item + that.currentItem.after(that.placeholder); + + //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) + o.placeholder.update(that, that.placeholder); + + }, + + _createTrPlaceholder: function( sourceTr, targetTr ) { + var that = this; + + sourceTr.children().each(function() { + $( "<td> </td>", that.document[ 0 ] ) + .attr( "colspan", $( this ).attr( "colspan" ) || 1 ) + .appendTo( targetTr ); + }); + }, + + _contactContainers: function(event) { + var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis, + innermostContainer = null, + innermostIndex = null; + + // get innermost container that intersects with item + for (i = this.containers.length - 1; i >= 0; i--) { + + // never consider a container that's located within the item itself + if($.contains(this.currentItem[0], this.containers[i].element[0])) { + continue; + } + + if(this._intersectsWith(this.containers[i].containerCache)) { + + // if we've already found a container and it's more "inner" than this, then continue + if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) { + continue; + } + + innermostContainer = this.containers[i]; + innermostIndex = i; + + } else { + // container doesn't intersect. trigger "out" event if necessary + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", event, this._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + // if no intersecting containers found, return + if(!innermostContainer) { + return; + } + + // move the item into the container if it's not there already + if(this.containers.length === 1) { + if (!this.containers[innermostIndex].containerCache.over) { + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } + } else { + + //When entering a new container, we will find the item with the least distance and append our item near it + dist = 10000; + itemWithLeastDistance = null; + floating = innermostContainer.floating || this._isFloating(this.currentItem); + posProperty = floating ? "left" : "top"; + sizeProperty = floating ? "width" : "height"; + axis = floating ? "clientX" : "clientY"; + + for (j = this.items.length - 1; j >= 0; j--) { + if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) { + continue; + } + if(this.items[j].item[0] === this.currentItem[0]) { + continue; + } + + cur = this.items[j].item.offset()[posProperty]; + nearBottom = false; + if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) { + nearBottom = true; + } + + if ( Math.abs( event[ axis ] - cur ) < dist ) { + dist = Math.abs( event[ axis ] - cur ); + itemWithLeastDistance = this.items[ j ]; + this.direction = nearBottom ? "up": "down"; + } + } + + //Check if dropOnEmpty is enabled + if(!itemWithLeastDistance && !this.options.dropOnEmpty) { + return; + } + + if(this.currentContainer === this.containers[innermostIndex]) { + if ( !this.currentContainer.containerCache.over ) { + this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() ); + this.currentContainer.containerCache.over = 1; + } + return; + } + + itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); + this._trigger("change", event, this._uiHash()); + this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); + this.currentContainer = this.containers[innermostIndex]; + + //Update the placeholder + this.options.placeholder.update(this.currentContainer, this.placeholder); + + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } + + + }, + + _createHelper: function(event) { + + var o = this.options, + helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem); + + //Add the helper to the DOM if that didn't happen already + if(!helper.parents("body").length) { + $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); + } + + if(helper[0] === this.currentItem[0]) { + this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; + } + + if(!helper[0].style.width || o.forceHelperSize) { + helper.width(this.currentItem.width()); + } + if(!helper[0].style.height || o.forceHelperSize) { + helper.height(this.currentItem.height()); + } + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj === "string") { + obj = obj.split(" "); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ("left" in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ("right" in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ("top" in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ("bottom" in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition === "absolute" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + // This needs to be actually done for all browsers, since pageX/pageY includes this information + // with an ugly IE fix + if( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) { + po = { top: 0, left: 0 }; + } + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition === "relative") { + var p = this.currentItem.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), + top: (parseInt(this.currentItem.css("marginTop"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var ce, co, over, + o = this.options; + if(o.containment === "parent") { + o.containment = this.helper[0].parentNode; + } + if(o.containment === "document" || o.containment === "window") { + this.containment = [ + 0 - this.offset.relative.left - this.offset.parent.left, + 0 - this.offset.relative.top - this.offset.parent.top, + o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left, + (o.containment === "document" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + } + + if(!(/^(document|window|parent)$/).test(o.containment)) { + ce = $(o.containment)[0]; + co = $(o.containment).offset(); + over = ($(ce).css("overflow") !== "hidden"); + + this.containment = [ + co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, + co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, + co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, + co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top + ]; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) { + pos = this.position; + } + var mod = d === "absolute" ? 1 : -1, + scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, + scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top + // The absolute mouse position + this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left + // The absolute mouse position + this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var top, left, + o = this.options, + pageX = event.pageX, + pageY = event.pageY, + scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + // This is another very weird special case that only happens for relative elements: + // 1. If the css position is relative + // 2. and the scroll parent is the document or similar to the offset parent + // we have to refresh the relative offset during the scroll so there are no jumps + if(this.cssPosition === "relative" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) { + this.offset.relative = this._getRelativeOffset(); + } + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + + if(this.containment) { + if(event.pageX - this.offset.click.left < this.containment[0]) { + pageX = this.containment[0] + this.offset.click.left; + } + if(event.pageY - this.offset.click.top < this.containment[1]) { + pageY = this.containment[1] + this.offset.click.top; + } + if(event.pageX - this.offset.click.left > this.containment[2]) { + pageX = this.containment[2] + this.offset.click.left; + } + if(event.pageY - this.offset.click.top > this.containment[3]) { + pageY = this.containment[3] + this.offset.click.top; + } + } + + if(o.grid) { + top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; + pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; + pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY - // The absolute mouse position + this.offset.click.top - // Click offset (relative to the element) + this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.top + // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX - // The absolute mouse position + this.offset.click.left - // Click offset (relative to the element) + this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.left + // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _rearrange: function(event, i, a, hardRefresh) { + + a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling)); + + //Various things done here to improve the performance: + // 1. we create a setTimeout, that calls refreshPositions + // 2. on the instance, we have a counter variable, that get's higher after every append + // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same + // 4. this lets only the last addition to the timeout stack through + this.counter = this.counter ? ++this.counter : 1; + var counter = this.counter; + + this._delay(function() { + if(counter === this.counter) { + this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove + } + }); + + }, + + _clear: function(event, noPropagation) { + + this.reverting = false; + // We delay all events that have to be triggered to after the point where the placeholder has been removed and + // everything else normalized again + var i, + delayedTriggers = []; + + // We first have to update the dom position of the actual currentItem + // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) + if(!this._noFinalSort && this.currentItem.parent().length) { + this.placeholder.before(this.currentItem); + } + this._noFinalSort = null; + + if(this.helper[0] === this.currentItem[0]) { + for(i in this._storedCSS) { + if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") { + this._storedCSS[i] = ""; + } + } + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + } else { + this.currentItem.show(); + } + + if(this.fromOutside && !noPropagation) { + delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); + } + if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) { + delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed + } + + // Check if the items Container has Changed and trigger appropriate + // events. + if (this !== this.currentContainer) { + if(!noPropagation) { + delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); + delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); + delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); + } + } + + + //Post events to containers + function delayEvent( type, instance, container ) { + return function( event ) { + container._trigger( type, event, instance._uiHash( instance ) ); + }; + } + for (i = this.containers.length - 1; i >= 0; i--){ + if (!noPropagation) { + delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) ); + } + if(this.containers[i].containerCache.over) { + delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) ); + this.containers[i].containerCache.over = 0; + } + } + + //Do what was originally in plugins + if ( this.storedCursor ) { + this.document.find( "body" ).css( "cursor", this.storedCursor ); + this.storedStylesheet.remove(); + } + if(this._storedOpacity) { + this.helper.css("opacity", this._storedOpacity); + } + if(this._storedZIndex) { + this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex); + } + + this.dragging = false; + + if(!noPropagation) { + this._trigger("beforeStop", event, this._uiHash()); + } + + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + + if ( !this.cancelHelperRemoval ) { + if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) { + this.helper.remove(); + } + this.helper = null; + } + + if(!noPropagation) { + for (i=0; i < delayedTriggers.length; i++) { + delayedTriggers[i].call(this, event); + } //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + + this.fromOutside = false; + return !this.cancelHelperRemoval; + + }, + + _trigger: function() { + if ($.Widget.prototype._trigger.apply(this, arguments) === false) { + this.cancel(); + } + }, + + _uiHash: function(_inst) { + var inst = _inst || this; + return { + helper: inst.helper, + placeholder: inst.placeholder || $([]), + position: inst.position, + originalPosition: inst.originalPosition, + offset: inst.positionAbs, + item: inst.currentItem, + sender: _inst ? _inst.element : null + }; + } + +}); + + +/*! + * jQuery UI Accordion 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/accordion/ + */ + + +var accordion = $.widget( "ui.accordion", { + version: "1.11.4", + options: { + active: 0, + animate: {}, + collapsible: false, + event: "click", + header: "> li > :first-child,> :not(li):even", + heightStyle: "auto", + icons: { + activeHeader: "ui-icon-triangle-1-s", + header: "ui-icon-triangle-1-e" + }, + + // callbacks + activate: null, + beforeActivate: null + }, + + hideProps: { + borderTopWidth: "hide", + borderBottomWidth: "hide", + paddingTop: "hide", + paddingBottom: "hide", + height: "hide" + }, + + showProps: { + borderTopWidth: "show", + borderBottomWidth: "show", + paddingTop: "show", + paddingBottom: "show", + height: "show" + }, + + _create: function() { + var options = this.options; + this.prevShow = this.prevHide = $(); + this.element.addClass( "ui-accordion ui-widget ui-helper-reset" ) + // ARIA + .attr( "role", "tablist" ); + + // don't allow collapsible: false and active: false / null + if ( !options.collapsible && (options.active === false || options.active == null) ) { + options.active = 0; + } + + this._processPanels(); + // handle negative values + if ( options.active < 0 ) { + options.active += this.headers.length; + } + this._refresh(); + }, + + _getCreateEventData: function() { + return { + header: this.active, + panel: !this.active.length ? $() : this.active.next() + }; + }, + + _createIcons: function() { + var icons = this.options.icons; + if ( icons ) { + $( "<span>" ) + .addClass( "ui-accordion-header-icon ui-icon " + icons.header ) + .prependTo( this.headers ); + this.active.children( ".ui-accordion-header-icon" ) + .removeClass( icons.header ) + .addClass( icons.activeHeader ); + this.headers.addClass( "ui-accordion-icons" ); + } + }, + + _destroyIcons: function() { + this.headers + .removeClass( "ui-accordion-icons" ) + .children( ".ui-accordion-header-icon" ) + .remove(); + }, + + _destroy: function() { + var contents; + + // clean up main element + this.element + .removeClass( "ui-accordion ui-widget ui-helper-reset" ) + .removeAttr( "role" ); + + // clean up headers + this.headers + .removeClass( "ui-accordion-header ui-accordion-header-active ui-state-default " + + "ui-corner-all ui-state-active ui-state-disabled ui-corner-top" ) + .removeAttr( "role" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "aria-selected" ) + .removeAttr( "aria-controls" ) + .removeAttr( "tabIndex" ) + .removeUniqueId(); + + this._destroyIcons(); + + // clean up content panels + contents = this.headers.next() + .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom " + + "ui-accordion-content ui-accordion-content-active ui-state-disabled" ) + .css( "display", "" ) + .removeAttr( "role" ) + .removeAttr( "aria-hidden" ) + .removeAttr( "aria-labelledby" ) + .removeUniqueId(); + + if ( this.options.heightStyle !== "content" ) { + contents.css( "height", "" ); + } + }, + + _setOption: function( key, value ) { + if ( key === "active" ) { + // _activate() will handle invalid values and update this.options + this._activate( value ); + return; + } + + if ( key === "event" ) { + if ( this.options.event ) { + this._off( this.headers, this.options.event ); + } + this._setupEvents( value ); + } + + this._super( key, value ); + + // setting collapsible: false while collapsed; open first panel + if ( key === "collapsible" && !value && this.options.active === false ) { + this._activate( 0 ); + } + + if ( key === "icons" ) { + this._destroyIcons(); + if ( value ) { + this._createIcons(); + } + } + + // #5332 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + if ( key === "disabled" ) { + this.element + .toggleClass( "ui-state-disabled", !!value ) + .attr( "aria-disabled", value ); + this.headers.add( this.headers.next() ) + .toggleClass( "ui-state-disabled", !!value ); + } + }, + + _keydown: function( event ) { + if ( event.altKey || event.ctrlKey ) { + return; + } + + var keyCode = $.ui.keyCode, + length = this.headers.length, + currentIndex = this.headers.index( event.target ), + toFocus = false; + + switch ( event.keyCode ) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[ ( currentIndex + 1 ) % length ]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._eventHandler( event ); + break; + case keyCode.HOME: + toFocus = this.headers[ 0 ]; + break; + case keyCode.END: + toFocus = this.headers[ length - 1 ]; + break; + } + + if ( toFocus ) { + $( event.target ).attr( "tabIndex", -1 ); + $( toFocus ).attr( "tabIndex", 0 ); + toFocus.focus(); + event.preventDefault(); + } + }, + + _panelKeyDown: function( event ) { + if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) { + $( event.currentTarget ).prev().focus(); + } + }, + + refresh: function() { + var options = this.options; + this._processPanels(); + + // was collapsed or no panel + if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) { + options.active = false; + this.active = $(); + // active false only when collapsible is true + } else if ( options.active === false ) { + this._activate( 0 ); + // was active, but active panel is gone + } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { + // all remaining panel are disabled + if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) { + options.active = false; + this.active = $(); + // activate previous panel + } else { + this._activate( Math.max( 0, options.active - 1 ) ); + } + // was active, active panel still exists + } else { + // make sure active index is correct + options.active = this.headers.index( this.active ); + } + + this._destroyIcons(); + + this._refresh(); + }, + + _processPanels: function() { + var prevHeaders = this.headers, + prevPanels = this.panels; + + this.headers = this.element.find( this.options.header ) + .addClass( "ui-accordion-header ui-state-default ui-corner-all" ); + + this.panels = this.headers.next() + .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ) + .filter( ":not(.ui-accordion-content-active)" ) + .hide(); + + // Avoid memory leaks (#10056) + if ( prevPanels ) { + this._off( prevHeaders.not( this.headers ) ); + this._off( prevPanels.not( this.panels ) ); + } + }, + + _refresh: function() { + var maxHeight, + options = this.options, + heightStyle = options.heightStyle, + parent = this.element.parent(); + + this.active = this._findActive( options.active ) + .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" ) + .removeClass( "ui-corner-all" ); + this.active.next() + .addClass( "ui-accordion-content-active" ) + .show(); + + this.headers + .attr( "role", "tab" ) + .each(function() { + var header = $( this ), + headerId = header.uniqueId().attr( "id" ), + panel = header.next(), + panelId = panel.uniqueId().attr( "id" ); + header.attr( "aria-controls", panelId ); + panel.attr( "aria-labelledby", headerId ); + }) + .next() + .attr( "role", "tabpanel" ); + + this.headers + .not( this.active ) + .attr({ + "aria-selected": "false", + "aria-expanded": "false", + tabIndex: -1 + }) + .next() + .attr({ + "aria-hidden": "true" + }) + .hide(); + + // make sure at least one header is in the tab order + if ( !this.active.length ) { + this.headers.eq( 0 ).attr( "tabIndex", 0 ); + } else { + this.active.attr({ + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + }) + .next() + .attr({ + "aria-hidden": "false" + }); + } + + this._createIcons(); + + this._setupEvents( options.event ); + + if ( heightStyle === "fill" ) { + maxHeight = parent.height(); + this.element.siblings( ":visible" ).each(function() { + var elem = $( this ), + position = elem.css( "position" ); + + if ( position === "absolute" || position === "fixed" ) { + return; + } + maxHeight -= elem.outerHeight( true ); + }); + + this.headers.each(function() { + maxHeight -= $( this ).outerHeight( true ); + }); + + this.headers.next() + .each(function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + }) + .css( "overflow", "auto" ); + } else if ( heightStyle === "auto" ) { + maxHeight = 0; + this.headers.next() + .each(function() { + maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() ); + }) + .height( maxHeight ); + } + }, + + _activate: function( index ) { + var active = this._findActive( index )[ 0 ]; + + // trying to activate the already active panel + if ( active === this.active[ 0 ] ) { + return; + } + + // trying to collapse, simulate a click on the currently active header + active = active || this.active[ 0 ]; + + this._eventHandler({ + target: active, + currentTarget: active, + preventDefault: $.noop + }); + }, + + _findActive: function( selector ) { + return typeof selector === "number" ? this.headers.eq( selector ) : $(); + }, + + _setupEvents: function( event ) { + var events = { + keydown: "_keydown" + }; + if ( event ) { + $.each( event.split( " " ), function( index, eventName ) { + events[ eventName ] = "_eventHandler"; + }); + } + + this._off( this.headers.add( this.headers.next() ) ); + this._on( this.headers, events ); + this._on( this.headers.next(), { keydown: "_panelKeyDown" }); + this._hoverable( this.headers ); + this._focusable( this.headers ); + }, + + _eventHandler: function( event ) { + var options = this.options, + active = this.active, + clicked = $( event.currentTarget ), + clickedIsActive = clicked[ 0 ] === active[ 0 ], + collapsing = clickedIsActive && options.collapsible, + toShow = collapsing ? $() : clicked.next(), + toHide = active.next(), + eventData = { + oldHeader: active, + oldPanel: toHide, + newHeader: collapsing ? $() : clicked, + newPanel: toShow + }; + + event.preventDefault(); + + if ( + // click on active header, but not collapsible + ( clickedIsActive && !options.collapsible ) || + // allow canceling activation + ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { + return; + } + + options.active = collapsing ? false : this.headers.index( clicked ); + + // when the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $() : clicked; + this._toggle( eventData ); + + // switch classes + // corner classes on the previously active header stay after the animation + active.removeClass( "ui-accordion-header-active ui-state-active" ); + if ( options.icons ) { + active.children( ".ui-accordion-header-icon" ) + .removeClass( options.icons.activeHeader ) + .addClass( options.icons.header ); + } + + if ( !clickedIsActive ) { + clicked + .removeClass( "ui-corner-all" ) + .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" ); + if ( options.icons ) { + clicked.children( ".ui-accordion-header-icon" ) + .removeClass( options.icons.header ) + .addClass( options.icons.activeHeader ); + } + + clicked + .next() + .addClass( "ui-accordion-content-active" ); + } + }, + + _toggle: function( data ) { + var toShow = data.newPanel, + toHide = this.prevShow.length ? this.prevShow : data.oldPanel; + + // handle activating a panel during the animation for another activation + this.prevShow.add( this.prevHide ).stop( true, true ); + this.prevShow = toShow; + this.prevHide = toHide; + + if ( this.options.animate ) { + this._animate( toShow, toHide, data ); + } else { + toHide.hide(); + toShow.show(); + this._toggleComplete( data ); + } + + toHide.attr({ + "aria-hidden": "true" + }); + toHide.prev().attr({ + "aria-selected": "false", + "aria-expanded": "false" + }); + // if we're switching panels, remove the old header from the tab order + // if we're opening from collapsed state, remove the previous header from the tab order + // if we're collapsing, then keep the collapsing header in the tab order + if ( toShow.length && toHide.length ) { + toHide.prev().attr({ + "tabIndex": -1, + "aria-expanded": "false" + }); + } else if ( toShow.length ) { + this.headers.filter(function() { + return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0; + }) + .attr( "tabIndex", -1 ); + } + + toShow + .attr( "aria-hidden", "false" ) + .prev() + .attr({ + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + }); + }, + + _animate: function( toShow, toHide, data ) { + var total, easing, duration, + that = this, + adjust = 0, + boxSizing = toShow.css( "box-sizing" ), + down = toShow.length && + ( !toHide.length || ( toShow.index() < toHide.index() ) ), + animate = this.options.animate || {}, + options = down && animate.down || animate, + complete = function() { + that._toggleComplete( data ); + }; + + if ( typeof options === "number" ) { + duration = options; + } + if ( typeof options === "string" ) { + easing = options; + } + // fall back from options to animation in case of partial down settings + easing = easing || options.easing || animate.easing; + duration = duration || options.duration || animate.duration; + + if ( !toHide.length ) { + return toShow.animate( this.showProps, duration, easing, complete ); + } + if ( !toShow.length ) { + return toHide.animate( this.hideProps, duration, easing, complete ); + } + + total = toShow.show().outerHeight(); + toHide.animate( this.hideProps, { + duration: duration, + easing: easing, + step: function( now, fx ) { + fx.now = Math.round( now ); + } + }); + toShow + .hide() + .animate( this.showProps, { + duration: duration, + easing: easing, + complete: complete, + step: function( now, fx ) { + fx.now = Math.round( now ); + if ( fx.prop !== "height" ) { + if ( boxSizing === "content-box" ) { + adjust += fx.now; + } + } else if ( that.options.heightStyle !== "content" ) { + fx.now = Math.round( total - toHide.outerHeight() - adjust ); + adjust = 0; + } + } + }); + }, + + _toggleComplete: function( data ) { + var toHide = data.oldPanel; + + toHide + .removeClass( "ui-accordion-content-active" ) + .prev() + .removeClass( "ui-corner-top" ) + .addClass( "ui-corner-all" ); + + // Work around for rendering bug in IE (#5421) + if ( toHide.length ) { + toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className; + } + this._trigger( "activate", null, data ); + } +}); + + +/*! + * jQuery UI Menu 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/menu/ + */ + + +var menu = $.widget( "ui.menu", { + version: "1.11.4", + defaultElement: "<ul>", + delay: 300, + options: { + icons: { + submenu: "ui-icon-carat-1-e" + }, + items: "> *", + menus: "ul", + position: { + my: "left-1 top", + at: "right top" + }, + role: "menu", + + // callbacks + blur: null, + focus: null, + select: null + }, + + _create: function() { + this.activeMenu = this.element; + + // Flag used to prevent firing of the click handler + // as the event bubbles up through nested menus + this.mouseHandled = false; + this.element + .uniqueId() + .addClass( "ui-menu ui-widget ui-widget-content" ) + .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length ) + .attr({ + role: this.options.role, + tabIndex: 0 + }); + + if ( this.options.disabled ) { + this.element + .addClass( "ui-state-disabled" ) + .attr( "aria-disabled", "true" ); + } + + this._on({ + // Prevent focus from sticking to links inside menu after clicking + // them (focus should always stay on UL during navigation). + "mousedown .ui-menu-item": function( event ) { + event.preventDefault(); + }, + "click .ui-menu-item": function( event ) { + var target = $( event.target ); + if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) { + this.select( event ); + + // Only set the mouseHandled flag if the event will bubble, see #9469. + if ( !event.isPropagationStopped() ) { + this.mouseHandled = true; + } + + // Open submenu on click + if ( target.has( ".ui-menu" ).length ) { + this.expand( event ); + } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) { + + // Redirect focus to the menu + this.element.trigger( "focus", [ true ] ); + + // If the active item is on the top level, let it stay active. + // Otherwise, blur the active item since it is no longer visible. + if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) { + clearTimeout( this.timer ); + } + } + } + }, + "mouseenter .ui-menu-item": function( event ) { + // Ignore mouse events while typeahead is active, see #10458. + // Prevents focusing the wrong item when typeahead causes a scroll while the mouse + // is over an item in the menu + if ( this.previousFilter ) { + return; + } + var target = $( event.currentTarget ); + // Remove ui-state-active class from siblings of the newly focused menu item + // to avoid a jump caused by adjacent elements both having a class with a border + target.siblings( ".ui-state-active" ).removeClass( "ui-state-active" ); + this.focus( event, target ); + }, + mouseleave: "collapseAll", + "mouseleave .ui-menu": "collapseAll", + focus: function( event, keepActiveItem ) { + // If there's already an active item, keep it active + // If not, activate the first item + var item = this.active || this.element.find( this.options.items ).eq( 0 ); + + if ( !keepActiveItem ) { + this.focus( event, item ); + } + }, + blur: function( event ) { + this._delay(function() { + if ( !$.contains( this.element[0], this.document[0].activeElement ) ) { + this.collapseAll( event ); + } + }); + }, + keydown: "_keydown" + }); + + this.refresh(); + + // Clicks outside of a menu collapse any open menus + this._on( this.document, { + click: function( event ) { + if ( this._closeOnDocumentClick( event ) ) { + this.collapseAll( event ); + } + + // Reset the mouseHandled flag + this.mouseHandled = false; + } + }); + }, + + _destroy: function() { + // Destroy (sub)menus + this.element + .removeAttr( "aria-activedescendant" ) + .find( ".ui-menu" ).addBack() + .removeClass( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" ) + .removeAttr( "role" ) + .removeAttr( "tabIndex" ) + .removeAttr( "aria-labelledby" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "aria-hidden" ) + .removeAttr( "aria-disabled" ) + .removeUniqueId() + .show(); + + // Destroy menu items + this.element.find( ".ui-menu-item" ) + .removeClass( "ui-menu-item" ) + .removeAttr( "role" ) + .removeAttr( "aria-disabled" ) + .removeUniqueId() + .removeClass( "ui-state-hover" ) + .removeAttr( "tabIndex" ) + .removeAttr( "role" ) + .removeAttr( "aria-haspopup" ) + .children().each( function() { + var elem = $( this ); + if ( elem.data( "ui-menu-submenu-carat" ) ) { + elem.remove(); + } + }); + + // Destroy menu dividers + this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" ); + }, + + _keydown: function( event ) { + var match, prev, character, skip, + preventDefault = true; + + switch ( event.keyCode ) { + case $.ui.keyCode.PAGE_UP: + this.previousPage( event ); + break; + case $.ui.keyCode.PAGE_DOWN: + this.nextPage( event ); + break; + case $.ui.keyCode.HOME: + this._move( "first", "first", event ); + break; + case $.ui.keyCode.END: + this._move( "last", "last", event ); + break; + case $.ui.keyCode.UP: + this.previous( event ); + break; + case $.ui.keyCode.DOWN: + this.next( event ); + break; + case $.ui.keyCode.LEFT: + this.collapse( event ); + break; + case $.ui.keyCode.RIGHT: + if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { + this.expand( event ); + } + break; + case $.ui.keyCode.ENTER: + case $.ui.keyCode.SPACE: + this._activate( event ); + break; + case $.ui.keyCode.ESCAPE: + this.collapse( event ); + break; + default: + preventDefault = false; + prev = this.previousFilter || ""; + character = String.fromCharCode( event.keyCode ); + skip = false; + + clearTimeout( this.filterTimer ); + + if ( character === prev ) { + skip = true; + } else { + character = prev + character; + } + + match = this._filterMenuItems( character ); + match = skip && match.index( this.active.next() ) !== -1 ? + this.active.nextAll( ".ui-menu-item" ) : + match; + + // If no matches on the current filter, reset to the last character pressed + // to move down the menu to the first item that starts with that character + if ( !match.length ) { + character = String.fromCharCode( event.keyCode ); + match = this._filterMenuItems( character ); + } + + if ( match.length ) { + this.focus( event, match ); + this.previousFilter = character; + this.filterTimer = this._delay(function() { + delete this.previousFilter; + }, 1000 ); + } else { + delete this.previousFilter; + } + } + + if ( preventDefault ) { + event.preventDefault(); + } + }, + + _activate: function( event ) { + if ( !this.active.is( ".ui-state-disabled" ) ) { + if ( this.active.is( "[aria-haspopup='true']" ) ) { + this.expand( event ); + } else { + this.select( event ); + } + } + }, + + refresh: function() { + var menus, items, + that = this, + icon = this.options.icons.submenu, + submenus = this.element.find( this.options.menus ); + + this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length ); + + // Initialize nested menus + submenus.filter( ":not(.ui-menu)" ) + .addClass( "ui-menu ui-widget ui-widget-content ui-front" ) + .hide() + .attr({ + role: this.options.role, + "aria-hidden": "true", + "aria-expanded": "false" + }) + .each(function() { + var menu = $( this ), + item = menu.parent(), + submenuCarat = $( "<span>" ) + .addClass( "ui-menu-icon ui-icon " + icon ) + .data( "ui-menu-submenu-carat", true ); + + item + .attr( "aria-haspopup", "true" ) + .prepend( submenuCarat ); + menu.attr( "aria-labelledby", item.attr( "id" ) ); + }); + + menus = submenus.add( this.element ); + items = menus.find( this.options.items ); + + // Initialize menu-items containing spaces and/or dashes only as dividers + items.not( ".ui-menu-item" ).each(function() { + var item = $( this ); + if ( that._isDivider( item ) ) { + item.addClass( "ui-widget-content ui-menu-divider" ); + } + }); + + // Don't refresh list items that are already adapted + items.not( ".ui-menu-item, .ui-menu-divider" ) + .addClass( "ui-menu-item" ) + .uniqueId() + .attr({ + tabIndex: -1, + role: this._itemRole() + }); + + // Add aria-disabled attribute to any disabled menu item + items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" ); + + // If the active item has been removed, blur the menu + if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { + this.blur(); + } + }, + + _itemRole: function() { + return { + menu: "menuitem", + listbox: "option" + }[ this.options.role ]; + }, + + _setOption: function( key, value ) { + if ( key === "icons" ) { + this.element.find( ".ui-menu-icon" ) + .removeClass( this.options.icons.submenu ) + .addClass( value.submenu ); + } + if ( key === "disabled" ) { + this.element + .toggleClass( "ui-state-disabled", !!value ) + .attr( "aria-disabled", value ); + } + this._super( key, value ); + }, + + focus: function( event, item ) { + var nested, focused; + this.blur( event, event && event.type === "focus" ); + + this._scrollIntoView( item ); + + this.active = item.first(); + focused = this.active.addClass( "ui-state-focus" ).removeClass( "ui-state-active" ); + // Only update aria-activedescendant if there's a role + // otherwise we assume focus is managed elsewhere + if ( this.options.role ) { + this.element.attr( "aria-activedescendant", focused.attr( "id" ) ); + } + + // Highlight active parent menu item, if any + this.active + .parent() + .closest( ".ui-menu-item" ) + .addClass( "ui-state-active" ); + + if ( event && event.type === "keydown" ) { + this._close(); + } else { + this.timer = this._delay(function() { + this._close(); + }, this.delay ); + } + + nested = item.children( ".ui-menu" ); + if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) { + this._startOpening(nested); + } + this.activeMenu = item.parent(); + + this._trigger( "focus", event, { item: item } ); + }, + + _scrollIntoView: function( item ) { + var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; + if ( this._hasScroll() ) { + borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0; + paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0; + offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; + scroll = this.activeMenu.scrollTop(); + elementHeight = this.activeMenu.height(); + itemHeight = item.outerHeight(); + + if ( offset < 0 ) { + this.activeMenu.scrollTop( scroll + offset ); + } else if ( offset + itemHeight > elementHeight ) { + this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); + } + } + }, + + blur: function( event, fromFocus ) { + if ( !fromFocus ) { + clearTimeout( this.timer ); + } + + if ( !this.active ) { + return; + } + + this.active.removeClass( "ui-state-focus" ); + this.active = null; + + this._trigger( "blur", event, { item: this.active } ); + }, + + _startOpening: function( submenu ) { + clearTimeout( this.timer ); + + // Don't open if already open fixes a Firefox bug that caused a .5 pixel + // shift in the submenu position when mousing over the carat icon + if ( submenu.attr( "aria-hidden" ) !== "true" ) { + return; + } + + this.timer = this._delay(function() { + this._close(); + this._open( submenu ); + }, this.delay ); + }, + + _open: function( submenu ) { + var position = $.extend({ + of: this.active + }, this.options.position ); + + clearTimeout( this.timer ); + this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) ) + .hide() + .attr( "aria-hidden", "true" ); + + submenu + .show() + .removeAttr( "aria-hidden" ) + .attr( "aria-expanded", "true" ) + .position( position ); + }, + + collapseAll: function( event, all ) { + clearTimeout( this.timer ); + this.timer = this._delay(function() { + // If we were passed an event, look for the submenu that contains the event + var currentMenu = all ? this.element : + $( event && event.target ).closest( this.element.find( ".ui-menu" ) ); + + // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway + if ( !currentMenu.length ) { + currentMenu = this.element; + } + + this._close( currentMenu ); + + this.blur( event ); + this.activeMenu = currentMenu; + }, this.delay ); + }, + + // With no arguments, closes the currently active menu - if nothing is active + // it closes all menus. If passed an argument, it will search for menus BELOW + _close: function( startMenu ) { + if ( !startMenu ) { + startMenu = this.active ? this.active.parent() : this.element; + } + + startMenu + .find( ".ui-menu" ) + .hide() + .attr( "aria-hidden", "true" ) + .attr( "aria-expanded", "false" ) + .end() + .find( ".ui-state-active" ).not( ".ui-state-focus" ) + .removeClass( "ui-state-active" ); + }, + + _closeOnDocumentClick: function( event ) { + return !$( event.target ).closest( ".ui-menu" ).length; + }, + + _isDivider: function( item ) { + + // Match hyphen, em dash, en dash + return !/[^\-\u2014\u2013\s]/.test( item.text() ); + }, + + collapse: function( event ) { + var newItem = this.active && + this.active.parent().closest( ".ui-menu-item", this.element ); + if ( newItem && newItem.length ) { + this._close(); + this.focus( event, newItem ); + } + }, + + expand: function( event ) { + var newItem = this.active && + this.active + .children( ".ui-menu " ) + .find( this.options.items ) + .first(); + + if ( newItem && newItem.length ) { + this._open( newItem.parent() ); + + // Delay so Firefox will not hide activedescendant change in expanding submenu from AT + this._delay(function() { + this.focus( event, newItem ); + }); + } + }, + + next: function( event ) { + this._move( "next", "first", event ); + }, + + previous: function( event ) { + this._move( "prev", "last", event ); + }, + + isFirstItem: function() { + return this.active && !this.active.prevAll( ".ui-menu-item" ).length; + }, + + isLastItem: function() { + return this.active && !this.active.nextAll( ".ui-menu-item" ).length; + }, + + _move: function( direction, filter, event ) { + var next; + if ( this.active ) { + if ( direction === "first" || direction === "last" ) { + next = this.active + [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ) + .eq( -1 ); + } else { + next = this.active + [ direction + "All" ]( ".ui-menu-item" ) + .eq( 0 ); + } + } + if ( !next || !next.length || !this.active ) { + next = this.activeMenu.find( this.options.items )[ filter ](); + } + + this.focus( event, next ); + }, + + nextPage: function( event ) { + var item, base, height; + + if ( !this.active ) { + this.next( event ); + return; + } + if ( this.isLastItem() ) { + return; + } + if ( this._hasScroll() ) { + base = this.active.offset().top; + height = this.element.height(); + this.active.nextAll( ".ui-menu-item" ).each(function() { + item = $( this ); + return item.offset().top - base - height < 0; + }); + + this.focus( event, item ); + } else { + this.focus( event, this.activeMenu.find( this.options.items ) + [ !this.active ? "first" : "last" ]() ); + } + }, + + previousPage: function( event ) { + var item, base, height; + if ( !this.active ) { + this.next( event ); + return; + } + if ( this.isFirstItem() ) { + return; + } + if ( this._hasScroll() ) { + base = this.active.offset().top; + height = this.element.height(); + this.active.prevAll( ".ui-menu-item" ).each(function() { + item = $( this ); + return item.offset().top - base + height > 0; + }); + + this.focus( event, item ); + } else { + this.focus( event, this.activeMenu.find( this.options.items ).first() ); + } + }, + + _hasScroll: function() { + return this.element.outerHeight() < this.element.prop( "scrollHeight" ); + }, + + select: function( event ) { + // TODO: It should never be possible to not have an active item at this + // point, but the tests don't trigger mouseenter before click. + this.active = this.active || $( event.target ).closest( ".ui-menu-item" ); + var ui = { item: this.active }; + if ( !this.active.has( ".ui-menu" ).length ) { + this.collapseAll( event, true ); + } + this._trigger( "select", event, ui ); + }, + + _filterMenuItems: function(character) { + var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ), + regex = new RegExp( "^" + escapedCharacter, "i" ); + + return this.activeMenu + .find( this.options.items ) + + // Only match on items, not dividers or other content (#10571) + .filter( ".ui-menu-item" ) + .filter(function() { + return regex.test( $.trim( $( this ).text() ) ); + }); + } +}); + + +/*! + * jQuery UI Autocomplete 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/autocomplete/ + */ + + +$.widget( "ui.autocomplete", { + version: "1.11.4", + defaultElement: "<input>", + options: { + appendTo: null, + autoFocus: false, + delay: 300, + minLength: 1, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + source: null, + + // callbacks + change: null, + close: null, + focus: null, + open: null, + response: null, + search: null, + select: null + }, + + requestIndex: 0, + pending: 0, + + _create: function() { + // Some browsers only repeat keydown events, not keypress events, + // so we use the suppressKeyPress flag to determine if we've already + // handled the keydown event. #7269 + // Unfortunately the code for & in keypress is the same as the up arrow, + // so we use the suppressKeyPressRepeat flag to avoid handling keypress + // events when we know the keydown event was used to modify the + // search term. #7799 + var suppressKeyPress, suppressKeyPressRepeat, suppressInput, + nodeName = this.element[ 0 ].nodeName.toLowerCase(), + isTextarea = nodeName === "textarea", + isInput = nodeName === "input"; + + this.isMultiLine = + // Textareas are always multi-line + isTextarea ? true : + // Inputs are always single-line, even if inside a contentEditable element + // IE also treats inputs as contentEditable + isInput ? false : + // All other element types are determined by whether or not they're contentEditable + this.element.prop( "isContentEditable" ); + + this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ]; + this.isNewMenu = true; + + this.element + .addClass( "ui-autocomplete-input" ) + .attr( "autocomplete", "off" ); + + this._on( this.element, { + keydown: function( event ) { + if ( this.element.prop( "readOnly" ) ) { + suppressKeyPress = true; + suppressInput = true; + suppressKeyPressRepeat = true; + return; + } + + suppressKeyPress = false; + suppressInput = false; + suppressKeyPressRepeat = false; + var keyCode = $.ui.keyCode; + switch ( event.keyCode ) { + case keyCode.PAGE_UP: + suppressKeyPress = true; + this._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + suppressKeyPress = true; + this._move( "nextPage", event ); + break; + case keyCode.UP: + suppressKeyPress = true; + this._keyEvent( "previous", event ); + break; + case keyCode.DOWN: + suppressKeyPress = true; + this._keyEvent( "next", event ); + break; + case keyCode.ENTER: + // when menu is open and has focus + if ( this.menu.active ) { + // #6055 - Opera still allows the keypress to occur + // which causes forms to submit + suppressKeyPress = true; + event.preventDefault(); + this.menu.select( event ); + } + break; + case keyCode.TAB: + if ( this.menu.active ) { + this.menu.select( event ); + } + break; + case keyCode.ESCAPE: + if ( this.menu.element.is( ":visible" ) ) { + if ( !this.isMultiLine ) { + this._value( this.term ); + } + this.close( event ); + // Different browsers have different default behavior for escape + // Single press can mean undo or clear + // Double press in IE means clear the whole form + event.preventDefault(); + } + break; + default: + suppressKeyPressRepeat = true; + // search timeout should be triggered before the input value is changed + this._searchTimeout( event ); + break; + } + }, + keypress: function( event ) { + if ( suppressKeyPress ) { + suppressKeyPress = false; + if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { + event.preventDefault(); + } + return; + } + if ( suppressKeyPressRepeat ) { + return; + } + + // replicate some key handlers to allow them to repeat in Firefox and Opera + var keyCode = $.ui.keyCode; + switch ( event.keyCode ) { + case keyCode.PAGE_UP: + this._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + this._move( "nextPage", event ); + break; + case keyCode.UP: + this._keyEvent( "previous", event ); + break; + case keyCode.DOWN: + this._keyEvent( "next", event ); + break; + } + }, + input: function( event ) { + if ( suppressInput ) { + suppressInput = false; + event.preventDefault(); + return; + } + this._searchTimeout( event ); + }, + focus: function() { + this.selectedItem = null; + this.previous = this._value(); + }, + blur: function( event ) { + if ( this.cancelBlur ) { + delete this.cancelBlur; + return; + } + + clearTimeout( this.searching ); + this.close( event ); + this._change( event ); + } + }); + + this._initSource(); + this.menu = $( "<ul>" ) + .addClass( "ui-autocomplete ui-front" ) + .appendTo( this._appendTo() ) + .menu({ + // disable ARIA support, the live region takes care of that + role: null + }) + .hide() + .menu( "instance" ); + + this._on( this.menu.element, { + mousedown: function( event ) { + // prevent moving focus out of the text field + event.preventDefault(); + + // IE doesn't prevent moving focus even with event.preventDefault() + // so we set a flag to know when we should ignore the blur event + this.cancelBlur = true; + this._delay(function() { + delete this.cancelBlur; + }); + + // clicking on the scrollbar causes focus to shift to the body + // but we can't detect a mouseup or a click immediately afterward + // so we have to track the next mousedown and close the menu if + // the user clicks somewhere outside of the autocomplete + var menuElement = this.menu.element[ 0 ]; + if ( !$( event.target ).closest( ".ui-menu-item" ).length ) { + this._delay(function() { + var that = this; + this.document.one( "mousedown", function( event ) { + if ( event.target !== that.element[ 0 ] && + event.target !== menuElement && + !$.contains( menuElement, event.target ) ) { + that.close(); + } + }); + }); + } + }, + menufocus: function( event, ui ) { + var label, item; + // support: Firefox + // Prevent accidental activation of menu items in Firefox (#7024 #9118) + if ( this.isNewMenu ) { + this.isNewMenu = false; + if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) { + this.menu.blur(); + + this.document.one( "mousemove", function() { + $( event.target ).trigger( event.originalEvent ); + }); + + return; + } + } + + item = ui.item.data( "ui-autocomplete-item" ); + if ( false !== this._trigger( "focus", event, { item: item } ) ) { + // use value to match what will end up in the input, if it was a key event + if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) { + this._value( item.value ); + } + } + + // Announce the value in the liveRegion + label = ui.item.attr( "aria-label" ) || item.value; + if ( label && $.trim( label ).length ) { + this.liveRegion.children().hide(); + $( "<div>" ).text( label ).appendTo( this.liveRegion ); + } + }, + menuselect: function( event, ui ) { + var item = ui.item.data( "ui-autocomplete-item" ), + previous = this.previous; + + // only trigger when focus was lost (click on menu) + if ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) { + this.element.focus(); + this.previous = previous; + // #6109 - IE triggers two focus events and the second + // is asynchronous, so we need to reset the previous + // term synchronously and asynchronously :-( + this._delay(function() { + this.previous = previous; + this.selectedItem = item; + }); + } + + if ( false !== this._trigger( "select", event, { item: item } ) ) { + this._value( item.value ); + } + // reset the term after the select event + // this allows custom select handling to work properly + this.term = this._value(); + + this.close( event ); + this.selectedItem = item; + } + }); + + this.liveRegion = $( "<span>", { + role: "status", + "aria-live": "assertive", + "aria-relevant": "additions" + }) + .addClass( "ui-helper-hidden-accessible" ) + .appendTo( this.document[ 0 ].body ); + + // turning off autocomplete prevents the browser from remembering the + // value when navigating through history, so we re-enable autocomplete + // if the page is unloaded before the widget is destroyed. #7790 + this._on( this.window, { + beforeunload: function() { + this.element.removeAttr( "autocomplete" ); + } + }); + }, + + _destroy: function() { + clearTimeout( this.searching ); + this.element + .removeClass( "ui-autocomplete-input" ) + .removeAttr( "autocomplete" ); + this.menu.element.remove(); + this.liveRegion.remove(); + }, + + _setOption: function( key, value ) { + this._super( key, value ); + if ( key === "source" ) { + this._initSource(); + } + if ( key === "appendTo" ) { + this.menu.element.appendTo( this._appendTo() ); + } + if ( key === "disabled" && value && this.xhr ) { + this.xhr.abort(); + } + }, + + _appendTo: function() { + var element = this.options.appendTo; + + if ( element ) { + element = element.jquery || element.nodeType ? + $( element ) : + this.document.find( element ).eq( 0 ); + } + + if ( !element || !element[ 0 ] ) { + element = this.element.closest( ".ui-front" ); + } + + if ( !element.length ) { + element = this.document[ 0 ].body; + } + + return element; + }, + + _initSource: function() { + var array, url, + that = this; + if ( $.isArray( this.options.source ) ) { + array = this.options.source; + this.source = function( request, response ) { + response( $.ui.autocomplete.filter( array, request.term ) ); + }; + } else if ( typeof this.options.source === "string" ) { + url = this.options.source; + this.source = function( request, response ) { + if ( that.xhr ) { + that.xhr.abort(); + } + that.xhr = $.ajax({ + url: url, + data: request, + dataType: "json", + success: function( data ) { + response( data ); + }, + error: function() { + response([]); + } + }); + }; + } else { + this.source = this.options.source; + } + }, + + _searchTimeout: function( event ) { + clearTimeout( this.searching ); + this.searching = this._delay(function() { + + // Search if the value has changed, or if the user retypes the same value (see #7434) + var equalValues = this.term === this._value(), + menuVisible = this.menu.element.is( ":visible" ), + modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey; + + if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) { + this.selectedItem = null; + this.search( null, event ); + } + }, this.options.delay ); + }, + + search: function( value, event ) { + value = value != null ? value : this._value(); + + // always save the actual value, not the one passed as an argument + this.term = this._value(); + + if ( value.length < this.options.minLength ) { + return this.close( event ); + } + + if ( this._trigger( "search", event ) === false ) { + return; + } + + return this._search( value ); + }, + + _search: function( value ) { + this.pending++; + this.element.addClass( "ui-autocomplete-loading" ); + this.cancelSearch = false; + + this.source( { term: value }, this._response() ); + }, + + _response: function() { + var index = ++this.requestIndex; + + return $.proxy(function( content ) { + if ( index === this.requestIndex ) { + this.__response( content ); + } + + this.pending--; + if ( !this.pending ) { + this.element.removeClass( "ui-autocomplete-loading" ); + } + }, this ); + }, + + __response: function( content ) { + if ( content ) { + content = this._normalize( content ); + } + this._trigger( "response", null, { content: content } ); + if ( !this.options.disabled && content && content.length && !this.cancelSearch ) { + this._suggest( content ); + this._trigger( "open" ); + } else { + // use ._close() instead of .close() so we don't cancel future searches + this._close(); + } + }, + + close: function( event ) { + this.cancelSearch = true; + this._close( event ); + }, + + _close: function( event ) { + if ( this.menu.element.is( ":visible" ) ) { + this.menu.element.hide(); + this.menu.blur(); + this.isNewMenu = true; + this._trigger( "close", event ); + } + }, + + _change: function( event ) { + if ( this.previous !== this._value() ) { + this._trigger( "change", event, { item: this.selectedItem } ); + } + }, + + _normalize: function( items ) { + // assume all items have the right format when the first item is complete + if ( items.length && items[ 0 ].label && items[ 0 ].value ) { + return items; + } + return $.map( items, function( item ) { + if ( typeof item === "string" ) { + return { + label: item, + value: item + }; + } + return $.extend( {}, item, { + label: item.label || item.value, + value: item.value || item.label + }); + }); + }, + + _suggest: function( items ) { + var ul = this.menu.element.empty(); + this._renderMenu( ul, items ); + this.isNewMenu = true; + this.menu.refresh(); + + // size and position menu + ul.show(); + this._resizeMenu(); + ul.position( $.extend({ + of: this.element + }, this.options.position ) ); + + if ( this.options.autoFocus ) { + this.menu.next(); + } + }, + + _resizeMenu: function() { + var ul = this.menu.element; + ul.outerWidth( Math.max( + // Firefox wraps long text (possibly a rounding bug) + // so we add 1px to avoid the wrapping (#7513) + ul.width( "" ).outerWidth() + 1, + this.element.outerWidth() + ) ); + }, + + _renderMenu: function( ul, items ) { + var that = this; + $.each( items, function( index, item ) { + that._renderItemData( ul, item ); + }); + }, + + _renderItemData: function( ul, item ) { + return this._renderItem( ul, item ).data( "ui-autocomplete-item", item ); + }, + + _renderItem: function( ul, item ) { + return $( "<li>" ).text( item.label ).appendTo( ul ); + }, + + _move: function( direction, event ) { + if ( !this.menu.element.is( ":visible" ) ) { + this.search( null, event ); + return; + } + if ( this.menu.isFirstItem() && /^previous/.test( direction ) || + this.menu.isLastItem() && /^next/.test( direction ) ) { + + if ( !this.isMultiLine ) { + this._value( this.term ); + } + + this.menu.blur(); + return; + } + this.menu[ direction ]( event ); + }, + + widget: function() { + return this.menu.element; + }, + + _value: function() { + return this.valueMethod.apply( this.element, arguments ); + }, + + _keyEvent: function( keyEvent, event ) { + if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { + this._move( keyEvent, event ); + + // prevents moving cursor to beginning/end of the text field in some browsers + event.preventDefault(); + } + } +}); + +$.extend( $.ui.autocomplete, { + escapeRegex: function( value ) { + return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); + }, + filter: function( array, term ) { + var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" ); + return $.grep( array, function( value ) { + return matcher.test( value.label || value.value || value ); + }); + } +}); + +// live region extension, adding a `messages` option +// NOTE: This is an experimental API. We are still investigating +// a full solution for string manipulation and internationalization. +$.widget( "ui.autocomplete", $.ui.autocomplete, { + options: { + messages: { + noResults: "No search results.", + results: function( amount ) { + return amount + ( amount > 1 ? " results are" : " result is" ) + + " available, use up and down arrow keys to navigate."; + } + } + }, + + __response: function( content ) { + var message; + this._superApply( arguments ); + if ( this.options.disabled || this.cancelSearch ) { + return; + } + if ( content && content.length ) { + message = this.options.messages.results( content.length ); + } else { + message = this.options.messages.noResults; + } + this.liveRegion.children().hide(); + $( "<div>" ).text( message ).appendTo( this.liveRegion ); + } +}); + +var autocomplete = $.ui.autocomplete; + + +/*! + * jQuery UI Button 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/button/ + */ + + +var lastActive, + baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", + typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", + formResetHandler = function() { + var form = $( this ); + setTimeout(function() { + form.find( ":ui-button" ).button( "refresh" ); + }, 1 ); + }, + radioGroup = function( radio ) { + var name = radio.name, + form = radio.form, + radios = $( [] ); + if ( name ) { + name = name.replace( /'/g, "\\'" ); + if ( form ) { + radios = $( form ).find( "[name='" + name + "'][type=radio]" ); + } else { + radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument ) + .filter(function() { + return !this.form; + }); + } + } + return radios; + }; + +$.widget( "ui.button", { + version: "1.11.4", + defaultElement: "<button>", + options: { + disabled: null, + text: true, + label: null, + icons: { + primary: null, + secondary: null + } + }, + _create: function() { + this.element.closest( "form" ) + .unbind( "reset" + this.eventNamespace ) + .bind( "reset" + this.eventNamespace, formResetHandler ); + + if ( typeof this.options.disabled !== "boolean" ) { + this.options.disabled = !!this.element.prop( "disabled" ); + } else { + this.element.prop( "disabled", this.options.disabled ); + } + + this._determineButtonType(); + this.hasTitle = !!this.buttonElement.attr( "title" ); + + var that = this, + options = this.options, + toggleButton = this.type === "checkbox" || this.type === "radio", + activeClass = !toggleButton ? "ui-state-active" : ""; + + if ( options.label === null ) { + options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html()); + } + + this._hoverable( this.buttonElement ); + + this.buttonElement + .addClass( baseClasses ) + .attr( "role", "button" ) + .bind( "mouseenter" + this.eventNamespace, function() { + if ( options.disabled ) { + return; + } + if ( this === lastActive ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "mouseleave" + this.eventNamespace, function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( activeClass ); + }) + .bind( "click" + this.eventNamespace, function( event ) { + if ( options.disabled ) { + event.preventDefault(); + event.stopImmediatePropagation(); + } + }); + + // Can't use _focusable() because the element that receives focus + // and the element that gets the ui-state-focus class are different + this._on({ + focus: function() { + this.buttonElement.addClass( "ui-state-focus" ); + }, + blur: function() { + this.buttonElement.removeClass( "ui-state-focus" ); + } + }); + + if ( toggleButton ) { + this.element.bind( "change" + this.eventNamespace, function() { + that.refresh(); + }); + } + + if ( this.type === "checkbox" ) { + this.buttonElement.bind( "click" + this.eventNamespace, function() { + if ( options.disabled ) { + return false; + } + }); + } else if ( this.type === "radio" ) { + this.buttonElement.bind( "click" + this.eventNamespace, function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + that.buttonElement.attr( "aria-pressed", "true" ); + + var radio = that.element[ 0 ]; + radioGroup( radio ) + .not( radio ) + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + }); + } else { + this.buttonElement + .bind( "mousedown" + this.eventNamespace, function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + lastActive = this; + that.document.one( "mouseup", function() { + lastActive = null; + }); + }) + .bind( "mouseup" + this.eventNamespace, function() { + if ( options.disabled ) { + return false; + } + $( this ).removeClass( "ui-state-active" ); + }) + .bind( "keydown" + this.eventNamespace, function(event) { + if ( options.disabled ) { + return false; + } + if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) { + $( this ).addClass( "ui-state-active" ); + } + }) + // see #8559, we bind to blur here in case the button element loses + // focus between keydown and keyup, it would be left in an "active" state + .bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() { + $( this ).removeClass( "ui-state-active" ); + }); + + if ( this.buttonElement.is("a") ) { + this.buttonElement.keyup(function(event) { + if ( event.keyCode === $.ui.keyCode.SPACE ) { + // TODO pass through original event correctly (just as 2nd argument doesn't work) + $( this ).click(); + } + }); + } + } + + this._setOption( "disabled", options.disabled ); + this._resetButton(); + }, + + _determineButtonType: function() { + var ancestor, labelSelector, checked; + + if ( this.element.is("[type=checkbox]") ) { + this.type = "checkbox"; + } else if ( this.element.is("[type=radio]") ) { + this.type = "radio"; + } else if ( this.element.is("input") ) { + this.type = "input"; + } else { + this.type = "button"; + } + + if ( this.type === "checkbox" || this.type === "radio" ) { + // we don't search against the document in case the element + // is disconnected from the DOM + ancestor = this.element.parents().last(); + labelSelector = "label[for='" + this.element.attr("id") + "']"; + this.buttonElement = ancestor.find( labelSelector ); + if ( !this.buttonElement.length ) { + ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings(); + this.buttonElement = ancestor.filter( labelSelector ); + if ( !this.buttonElement.length ) { + this.buttonElement = ancestor.find( labelSelector ); + } + } + this.element.addClass( "ui-helper-hidden-accessible" ); + + checked = this.element.is( ":checked" ); + if ( checked ) { + this.buttonElement.addClass( "ui-state-active" ); + } + this.buttonElement.prop( "aria-pressed", checked ); + } else { + this.buttonElement = this.element; + } + }, + + widget: function() { + return this.buttonElement; + }, + + _destroy: function() { + this.element + .removeClass( "ui-helper-hidden-accessible" ); + this.buttonElement + .removeClass( baseClasses + " ui-state-active " + typeClasses ) + .removeAttr( "role" ) + .removeAttr( "aria-pressed" ) + .html( this.buttonElement.find(".ui-button-text").html() ); + + if ( !this.hasTitle ) { + this.buttonElement.removeAttr( "title" ); + } + }, + + _setOption: function( key, value ) { + this._super( key, value ); + if ( key === "disabled" ) { + this.widget().toggleClass( "ui-state-disabled", !!value ); + this.element.prop( "disabled", !!value ); + if ( value ) { + if ( this.type === "checkbox" || this.type === "radio" ) { + this.buttonElement.removeClass( "ui-state-focus" ); + } else { + this.buttonElement.removeClass( "ui-state-focus ui-state-active" ); + } + } + return; + } + this._resetButton(); + }, + + refresh: function() { + //See #8237 & #8828 + var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" ); + + if ( isDisabled !== this.options.disabled ) { + this._setOption( "disabled", isDisabled ); + } + if ( this.type === "radio" ) { + radioGroup( this.element[0] ).each(function() { + if ( $( this ).is( ":checked" ) ) { + $( this ).button( "widget" ) + .addClass( "ui-state-active" ) + .attr( "aria-pressed", "true" ); + } else { + $( this ).button( "widget" ) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + } + }); + } else if ( this.type === "checkbox" ) { + if ( this.element.is( ":checked" ) ) { + this.buttonElement + .addClass( "ui-state-active" ) + .attr( "aria-pressed", "true" ); + } else { + this.buttonElement + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + } + } + }, + + _resetButton: function() { + if ( this.type === "input" ) { + if ( this.options.label ) { + this.element.val( this.options.label ); + } + return; + } + var buttonElement = this.buttonElement.removeClass( typeClasses ), + buttonText = $( "<span></span>", this.document[0] ) + .addClass( "ui-button-text" ) + .html( this.options.label ) + .appendTo( buttonElement.empty() ) + .text(), + icons = this.options.icons, + multipleIcons = icons.primary && icons.secondary, + buttonClasses = []; + + if ( icons.primary || icons.secondary ) { + if ( this.options.text ) { + buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) ); + } + + if ( icons.primary ) { + buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" ); + } + + if ( icons.secondary ) { + buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" ); + } + + if ( !this.options.text ) { + buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" ); + + if ( !this.hasTitle ) { + buttonElement.attr( "title", $.trim( buttonText ) ); + } + } + } else { + buttonClasses.push( "ui-button-text-only" ); + } + buttonElement.addClass( buttonClasses.join( " " ) ); + } +}); + +$.widget( "ui.buttonset", { + version: "1.11.4", + options: { + items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)" + }, + + _create: function() { + this.element.addClass( "ui-buttonset" ); + }, + + _init: function() { + this.refresh(); + }, + + _setOption: function( key, value ) { + if ( key === "disabled" ) { + this.buttons.button( "option", key, value ); + } + + this._super( key, value ); + }, + + refresh: function() { + var rtl = this.element.css( "direction" ) === "rtl", + allButtons = this.element.find( this.options.items ), + existingButtons = allButtons.filter( ":ui-button" ); + + // Initialize new buttons + allButtons.not( ":ui-button" ).button(); + + // Refresh existing buttons + existingButtons.button( "refresh" ); + + this.buttons = allButtons + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-all ui-corner-left ui-corner-right" ) + .filter( ":first" ) + .addClass( rtl ? "ui-corner-right" : "ui-corner-left" ) + .end() + .filter( ":last" ) + .addClass( rtl ? "ui-corner-left" : "ui-corner-right" ) + .end() + .end(); + }, + + _destroy: function() { + this.element.removeClass( "ui-buttonset" ); + this.buttons + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-left ui-corner-right" ) + .end() + .button( "destroy" ); + } +}); + +var button = $.ui.button; + + +/*! + * jQuery UI Datepicker 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/datepicker/ + */ + + +$.extend($.ui, { datepicker: { version: "1.11.4" } }); + +var datepicker_instActive; + +function datepicker_getZindex( elem ) { + var position, value; + while ( elem.length && elem[ 0 ] !== document ) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css( "position" ); + if ( position === "absolute" || position === "relative" || position === "fixed" ) { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + // <div style="z-index: -10;"><div style="z-index: 0;"></div></div> + value = parseInt( elem.css( "zIndex" ), 10 ); + if ( !isNaN( value ) && value !== 0 ) { + return value; + } + } + elem = elem.parent(); + } + + return 0; +} +/* Date picker manager. + Use the singleton instance of this class, $.datepicker, to interact with the date picker. + Settings for (groups of) date pickers are maintained in an instance object, + allowing multiple different settings on the same page. */ + +function Datepicker() { + this._curInst = null; // The current instance in use + this._keyEvent = false; // If the last event was a key event + this._disabledInputs = []; // List of date picker inputs that have been disabled + this._datepickerShowing = false; // True if the popup picker is showing , false if not + this._inDialog = false; // True if showing within a "dialog", false if not + this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division + this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class + this._appendClass = "ui-datepicker-append"; // The name of the append marker class + this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class + this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class + this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class + this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class + this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class + this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class + this.regional = []; // Available regional settings, indexed by language code + this.regional[""] = { // Default regional settings + closeText: "Done", // Display text for close link + prevText: "Prev", // Display text for previous month link + nextText: "Next", // Display text for next month link + currentText: "Today", // Display text for current month link + monthNames: ["January","February","March","April","May","June", + "July","August","September","October","November","December"], // Names of months for drop-down and formatting + monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting + dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting + dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting + dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday + weekHeader: "Wk", // Column header for week of the year + dateFormat: "mm/dd/yy", // See format options on parseDate + firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... + isRTL: false, // True if right-to-left language, false if left-to-right + showMonthAfterYear: false, // True if the year select precedes month, false for month then year + yearSuffix: "" // Additional text to append to the year in the month headers + }; + this._defaults = { // Global defaults for all the date picker instances + showOn: "focus", // "focus" for popup on focus, + // "button" for trigger button, or "both" for either + showAnim: "fadeIn", // Name of jQuery animation for popup + showOptions: {}, // Options for enhanced animations + defaultDate: null, // Used when field is blank: actual date, + // +/-number for offset from today, null for today + appendText: "", // Display text following the input box, e.g. showing the format + buttonText: "...", // Text for trigger button + buttonImage: "", // URL for trigger button image + buttonImageOnly: false, // True if the image appears alone, false if it appears on a button + hideIfNoPrevNext: false, // True to hide next/previous month links + // if not applicable, false to just disable them + navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links + gotoCurrent: false, // True if today link goes back to current selection instead + changeMonth: false, // True if month can be selected directly, false if only prev/next + changeYear: false, // True if year can be selected directly, false if only prev/next + yearRange: "c-10:c+10", // Range of years to display in drop-down, + // either relative to today's year (-nn:+nn), relative to currently displayed year + // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) + showOtherMonths: false, // True to show dates in other months, false to leave blank + selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable + showWeek: false, // True to show week of the year, false to not show it + calculateWeek: this.iso8601Week, // How to calculate the week of the year, + // takes a Date and returns the number of the week for it + shortYearCutoff: "+10", // Short year values < this are in the current century, + // > this are in the previous century, + // string value starting with "+" for current year + value + minDate: null, // The earliest selectable date, or null for no limit + maxDate: null, // The latest selectable date, or null for no limit + duration: "fast", // Duration of display/closure + beforeShowDay: null, // Function that takes a date and returns an array with + // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "", + // [2] = cell title (optional), e.g. $.datepicker.noWeekends + beforeShow: null, // Function that takes an input field and + // returns a set of custom settings for the date picker + onSelect: null, // Define a callback function when a date is selected + onChangeMonthYear: null, // Define a callback function when the month or year is changed + onClose: null, // Define a callback function when the datepicker is closed + numberOfMonths: 1, // Number of months to show at a time + showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) + stepMonths: 1, // Number of months to step back/forward + stepBigMonths: 12, // Number of months to step back/forward for the big links + altField: "", // Selector for an alternate field to store selected dates into + altFormat: "", // The date format to use for the alternate field + constrainInput: true, // The input is constrained by the current date format + showButtonPanel: false, // True to show button panel, false to not show it + autoSize: false, // True to size the input for the date format, false to leave as is + disabled: false // The initial disabled state + }; + $.extend(this._defaults, this.regional[""]); + this.regional.en = $.extend( true, {}, this.regional[ "" ]); + this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en ); + this.dpDiv = datepicker_bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")); +} + +$.extend(Datepicker.prototype, { + /* Class name added to elements to indicate already configured with a date picker. */ + markerClassName: "hasDatepicker", + + //Keep track of the maximum number of rows displayed (see #7043) + maxRows: 4, + + // TODO rename to "widget" when switching to widget factory + _widgetDatepicker: function() { + return this.dpDiv; + }, + + /* Override the default settings for all instances of the date picker. + * @param settings object - the new settings to use as defaults (anonymous object) + * @return the manager object + */ + setDefaults: function(settings) { + datepicker_extendRemove(this._defaults, settings || {}); + return this; + }, + + /* Attach the date picker to a jQuery selection. + * @param target element - the target input field or division or span + * @param settings object - the new settings to use for this date picker instance (anonymous) + */ + _attachDatepicker: function(target, settings) { + var nodeName, inline, inst; + nodeName = target.nodeName.toLowerCase(); + inline = (nodeName === "div" || nodeName === "span"); + if (!target.id) { + this.uuid += 1; + target.id = "dp" + this.uuid; + } + inst = this._newInst($(target), inline); + inst.settings = $.extend({}, settings || {}); + if (nodeName === "input") { + this._connectDatepicker(target, inst); + } else if (inline) { + this._inlineDatepicker(target, inst); + } + }, + + /* Create a new instance object. */ + _newInst: function(target, inline) { + var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars + return {id: id, input: target, // associated target + selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection + drawMonth: 0, drawYear: 0, // month being drawn + inline: inline, // is datepicker inline or not + dpDiv: (!inline ? this.dpDiv : // presentation div + datepicker_bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))}; + }, + + /* Attach the date picker to an input field. */ + _connectDatepicker: function(target, inst) { + var input = $(target); + inst.append = $([]); + inst.trigger = $([]); + if (input.hasClass(this.markerClassName)) { + return; + } + this._attachments(input, inst); + input.addClass(this.markerClassName).keydown(this._doKeyDown). + keypress(this._doKeyPress).keyup(this._doKeyUp); + this._autoSize(inst); + $.data(target, "datepicker", inst); + //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665) + if( inst.settings.disabled ) { + this._disableDatepicker( target ); + } + }, + + /* Make attachments based on settings. */ + _attachments: function(input, inst) { + var showOn, buttonText, buttonImage, + appendText = this._get(inst, "appendText"), + isRTL = this._get(inst, "isRTL"); + + if (inst.append) { + inst.append.remove(); + } + if (appendText) { + inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>"); + input[isRTL ? "before" : "after"](inst.append); + } + + input.unbind("focus", this._showDatepicker); + + if (inst.trigger) { + inst.trigger.remove(); + } + + showOn = this._get(inst, "showOn"); + if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field + input.focus(this._showDatepicker); + } + if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked + buttonText = this._get(inst, "buttonText"); + buttonImage = this._get(inst, "buttonImage"); + inst.trigger = $(this._get(inst, "buttonImageOnly") ? + $("<img/>").addClass(this._triggerClass). + attr({ src: buttonImage, alt: buttonText, title: buttonText }) : + $("<button type='button'></button>").addClass(this._triggerClass). + html(!buttonImage ? buttonText : $("<img/>").attr( + { src:buttonImage, alt:buttonText, title:buttonText }))); + input[isRTL ? "before" : "after"](inst.trigger); + inst.trigger.click(function() { + if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) { + $.datepicker._hideDatepicker(); + } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) { + $.datepicker._hideDatepicker(); + $.datepicker._showDatepicker(input[0]); + } else { + $.datepicker._showDatepicker(input[0]); + } + return false; + }); + } + }, + + /* Apply the maximum length for the date format. */ + _autoSize: function(inst) { + if (this._get(inst, "autoSize") && !inst.inline) { + var findMax, max, maxI, i, + date = new Date(2009, 12 - 1, 20), // Ensure double digits + dateFormat = this._get(inst, "dateFormat"); + + if (dateFormat.match(/[DM]/)) { + findMax = function(names) { + max = 0; + maxI = 0; + for (i = 0; i < names.length; i++) { + if (names[i].length > max) { + max = names[i].length; + maxI = i; + } + } + return maxI; + }; + date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? + "monthNames" : "monthNamesShort")))); + date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? + "dayNames" : "dayNamesShort"))) + 20 - date.getDay()); + } + inst.input.attr("size", this._formatDate(inst, date).length); + } + }, + + /* Attach an inline date picker to a div. */ + _inlineDatepicker: function(target, inst) { + var divSpan = $(target); + if (divSpan.hasClass(this.markerClassName)) { + return; + } + divSpan.addClass(this.markerClassName).append(inst.dpDiv); + $.data(target, "datepicker", inst); + this._setDate(inst, this._getDefaultDate(inst), true); + this._updateDatepicker(inst); + this._updateAlternate(inst); + //If disabled option is true, disable the datepicker before showing it (see ticket #5665) + if( inst.settings.disabled ) { + this._disableDatepicker( target ); + } + // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements + // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height + inst.dpDiv.css( "display", "block" ); + }, + + /* Pop-up the date picker in a "dialog" box. + * @param input element - ignored + * @param date string or Date - the initial date to display + * @param onSelect function - the function to call when a date is selected + * @param settings object - update the dialog date picker instance's settings (anonymous object) + * @param pos int[2] - coordinates for the dialog's position within the screen or + * event - with x/y coordinates or + * leave empty for default (screen centre) + * @return the manager object + */ + _dialogDatepicker: function(input, date, onSelect, settings, pos) { + var id, browserWidth, browserHeight, scrollX, scrollY, + inst = this._dialogInst; // internal instance + + if (!inst) { + this.uuid += 1; + id = "dp" + this.uuid; + this._dialogInput = $("<input type='text' id='" + id + + "' style='position: absolute; top: -100px; width: 0px;'/>"); + this._dialogInput.keydown(this._doKeyDown); + $("body").append(this._dialogInput); + inst = this._dialogInst = this._newInst(this._dialogInput, false); + inst.settings = {}; + $.data(this._dialogInput[0], "datepicker", inst); + } + datepicker_extendRemove(inst.settings, settings || {}); + date = (date && date.constructor === Date ? this._formatDate(inst, date) : date); + this._dialogInput.val(date); + + this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); + if (!this._pos) { + browserWidth = document.documentElement.clientWidth; + browserHeight = document.documentElement.clientHeight; + scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; + scrollY = document.documentElement.scrollTop || document.body.scrollTop; + this._pos = // should use actual width/height below + [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; + } + + // move input on screen for focus, but hidden behind dialog + this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px"); + inst.settings.onSelect = onSelect; + this._inDialog = true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]); + if ($.blockUI) { + $.blockUI(this.dpDiv); + } + $.data(this._dialogInput[0], "datepicker", inst); + return this; + }, + + /* Detach a datepicker from its control. + * @param target element - the target input field or division or span + */ + _destroyDatepicker: function(target) { + var nodeName, + $target = $(target), + inst = $.data(target, "datepicker"); + + if (!$target.hasClass(this.markerClassName)) { + return; + } + + nodeName = target.nodeName.toLowerCase(); + $.removeData(target, "datepicker"); + if (nodeName === "input") { + inst.append.remove(); + inst.trigger.remove(); + $target.removeClass(this.markerClassName). + unbind("focus", this._showDatepicker). + unbind("keydown", this._doKeyDown). + unbind("keypress", this._doKeyPress). + unbind("keyup", this._doKeyUp); + } else if (nodeName === "div" || nodeName === "span") { + $target.removeClass(this.markerClassName).empty(); + } + + if ( datepicker_instActive === inst ) { + datepicker_instActive = null; + } + }, + + /* Enable the date picker to a jQuery selection. + * @param target element - the target input field or division or span + */ + _enableDatepicker: function(target) { + var nodeName, inline, + $target = $(target), + inst = $.data(target, "datepicker"); + + if (!$target.hasClass(this.markerClassName)) { + return; + } + + nodeName = target.nodeName.toLowerCase(); + if (nodeName === "input") { + target.disabled = false; + inst.trigger.filter("button"). + each(function() { this.disabled = false; }).end(). + filter("img").css({opacity: "1.0", cursor: ""}); + } else if (nodeName === "div" || nodeName === "span") { + inline = $target.children("." + this._inlineClass); + inline.children().removeClass("ui-state-disabled"); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + prop("disabled", false); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value === target ? null : value); }); // delete entry + }, + + /* Disable the date picker to a jQuery selection. + * @param target element - the target input field or division or span + */ + _disableDatepicker: function(target) { + var nodeName, inline, + $target = $(target), + inst = $.data(target, "datepicker"); + + if (!$target.hasClass(this.markerClassName)) { + return; + } + + nodeName = target.nodeName.toLowerCase(); + if (nodeName === "input") { + target.disabled = true; + inst.trigger.filter("button"). + each(function() { this.disabled = true; }).end(). + filter("img").css({opacity: "0.5", cursor: "default"}); + } else if (nodeName === "div" || nodeName === "span") { + inline = $target.children("." + this._inlineClass); + inline.children().addClass("ui-state-disabled"); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + prop("disabled", true); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value === target ? null : value); }); // delete entry + this._disabledInputs[this._disabledInputs.length] = target; + }, + + /* Is the first field in a jQuery collection disabled as a datepicker? + * @param target element - the target input field or division or span + * @return boolean - true if disabled, false if enabled + */ + _isDisabledDatepicker: function(target) { + if (!target) { + return false; + } + for (var i = 0; i < this._disabledInputs.length; i++) { + if (this._disabledInputs[i] === target) { + return true; + } + } + return false; + }, + + /* Retrieve the instance data for the target control. + * @param target element - the target input field or division or span + * @return object - the associated instance data + * @throws error if a jQuery problem getting data + */ + _getInst: function(target) { + try { + return $.data(target, "datepicker"); + } + catch (err) { + throw "Missing instance data for this datepicker"; + } + }, + + /* Update or retrieve the settings for a date picker attached to an input field or division. + * @param target element - the target input field or division or span + * @param name object - the new settings to update or + * string - the name of the setting to change or retrieve, + * when retrieving also "all" for all instance settings or + * "defaults" for all global defaults + * @param value any - the new value for the setting + * (omit if above is an object or to retrieve a value) + */ + _optionDatepicker: function(target, name, value) { + var settings, date, minDate, maxDate, + inst = this._getInst(target); + + if (arguments.length === 2 && typeof name === "string") { + return (name === "defaults" ? $.extend({}, $.datepicker._defaults) : + (inst ? (name === "all" ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } + + settings = name || {}; + if (typeof name === "string") { + settings = {}; + settings[name] = value; + } + + if (inst) { + if (this._curInst === inst) { + this._hideDatepicker(); + } + + date = this._getDateDatepicker(target, true); + minDate = this._getMinMaxDate(inst, "min"); + maxDate = this._getMinMaxDate(inst, "max"); + datepicker_extendRemove(inst.settings, settings); + // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided + if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) { + inst.settings.minDate = this._formatDate(inst, minDate); + } + if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) { + inst.settings.maxDate = this._formatDate(inst, maxDate); + } + if ( "disabled" in settings ) { + if ( settings.disabled ) { + this._disableDatepicker(target); + } else { + this._enableDatepicker(target); + } + } + this._attachments($(target), inst); + this._autoSize(inst); + this._setDate(inst, date); + this._updateAlternate(inst); + this._updateDatepicker(inst); + } + }, + + // change method deprecated + _changeDatepicker: function(target, name, value) { + this._optionDatepicker(target, name, value); + }, + + /* Redraw the date picker attached to an input field or division. + * @param target element - the target input field or division or span + */ + _refreshDatepicker: function(target) { + var inst = this._getInst(target); + if (inst) { + this._updateDatepicker(inst); + } + }, + + /* Set the dates for a jQuery selection. + * @param target element - the target input field or division or span + * @param date Date - the new date + */ + _setDateDatepicker: function(target, date) { + var inst = this._getInst(target); + if (inst) { + this._setDate(inst, date); + this._updateDatepicker(inst); + this._updateAlternate(inst); + } + }, + + /* Get the date(s) for the first entry in a jQuery selection. + * @param target element - the target input field or division or span + * @param noDefault boolean - true if no default date is to be used + * @return Date - the current date + */ + _getDateDatepicker: function(target, noDefault) { + var inst = this._getInst(target); + if (inst && !inst.inline) { + this._setDateFromField(inst, noDefault); + } + return (inst ? this._getDate(inst) : null); + }, + + /* Handle keystrokes. */ + _doKeyDown: function(event) { + var onSelect, dateStr, sel, + inst = $.datepicker._getInst(event.target), + handled = true, + isRTL = inst.dpDiv.is(".ui-datepicker-rtl"); + + inst._keyEvent = true; + if ($.datepicker._datepickerShowing) { + switch (event.keyCode) { + case 9: $.datepicker._hideDatepicker(); + handled = false; + break; // hide on tab out + case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." + + $.datepicker._currentClass + ")", inst.dpDiv); + if (sel[0]) { + $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); + } + + onSelect = $.datepicker._get(inst, "onSelect"); + if (onSelect) { + dateStr = $.datepicker._formatDate(inst); + + // trigger custom callback + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); + } else { + $.datepicker._hideDatepicker(); + } + + return false; // don't submit the form + case 27: $.datepicker._hideDatepicker(); + break; // hide on escape + case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, "stepBigMonths") : + -$.datepicker._get(inst, "stepMonths")), "M"); + break; // previous month/year on page up/+ ctrl + case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, "stepBigMonths") : + +$.datepicker._get(inst, "stepMonths")), "M"); + break; // next month/year on page down/+ ctrl + case 35: if (event.ctrlKey || event.metaKey) { + $.datepicker._clearDate(event.target); + } + handled = event.ctrlKey || event.metaKey; + break; // clear on ctrl or command +end + case 36: if (event.ctrlKey || event.metaKey) { + $.datepicker._gotoToday(event.target); + } + handled = event.ctrlKey || event.metaKey; + break; // current on ctrl or command +home + case 37: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D"); + } + handled = event.ctrlKey || event.metaKey; + // -1 day on ctrl or command +left + if (event.originalEvent.altKey) { + $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, "stepBigMonths") : + -$.datepicker._get(inst, "stepMonths")), "M"); + } + // next month/year on alt +left on Mac + break; + case 38: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, -7, "D"); + } + handled = event.ctrlKey || event.metaKey; + break; // -1 week on ctrl or command +up + case 39: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D"); + } + handled = event.ctrlKey || event.metaKey; + // +1 day on ctrl or command +right + if (event.originalEvent.altKey) { + $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, "stepBigMonths") : + +$.datepicker._get(inst, "stepMonths")), "M"); + } + // next month/year on alt +right + break; + case 40: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, +7, "D"); + } + handled = event.ctrlKey || event.metaKey; + break; // +1 week on ctrl or command +down + default: handled = false; + } + } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home + $.datepicker._showDatepicker(this); + } else { + handled = false; + } + + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + }, + + /* Filter entered characters - based on date format. */ + _doKeyPress: function(event) { + var chars, chr, + inst = $.datepicker._getInst(event.target); + + if ($.datepicker._get(inst, "constrainInput")) { + chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat")); + chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode); + return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1); + } + }, + + /* Synchronise manual entry and field/alternate field. */ + _doKeyUp: function(event) { + var date, + inst = $.datepicker._getInst(event.target); + + if (inst.input.val() !== inst.lastVal) { + try { + date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (err) { + } + } + return true; + }, + + /* Pop-up the date picker for a given input field. + * If false returned from beforeShow event handler do not show. + * @param input element - the input field attached to the date picker or + * event - if triggered by focus + */ + _showDatepicker: function(input) { + input = input.target || input; + if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger + input = $("input", input.parentNode)[0]; + } + + if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here + return; + } + + var inst, beforeShow, beforeShowSettings, isFixed, + offset, showAnim, duration; + + inst = $.datepicker._getInst(input); + if ($.datepicker._curInst && $.datepicker._curInst !== inst) { + $.datepicker._curInst.dpDiv.stop(true, true); + if ( inst && $.datepicker._datepickerShowing ) { + $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] ); + } + } + + beforeShow = $.datepicker._get(inst, "beforeShow"); + beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {}; + if(beforeShowSettings === false){ + return; + } + datepicker_extendRemove(inst.settings, beforeShowSettings); + + inst.lastVal = null; + $.datepicker._lastInput = input; + $.datepicker._setDateFromField(inst); + + if ($.datepicker._inDialog) { // hide cursor + input.value = ""; + } + if (!$.datepicker._pos) { // position below input + $.datepicker._pos = $.datepicker._findPos(input); + $.datepicker._pos[1] += input.offsetHeight; // add the height + } + + isFixed = false; + $(input).parents().each(function() { + isFixed |= $(this).css("position") === "fixed"; + return !isFixed; + }); + + offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; + $.datepicker._pos = null; + //to avoid flashes on Firefox + inst.dpDiv.empty(); + // determine sizing offscreen + inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"}); + $.datepicker._updateDatepicker(inst); + // fix width for dynamic number of date pickers + // and adjust position before showing + offset = $.datepicker._checkOffset(inst, offset, isFixed); + inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? + "static" : (isFixed ? "fixed" : "absolute")), display: "none", + left: offset.left + "px", top: offset.top + "px"}); + + if (!inst.inline) { + showAnim = $.datepicker._get(inst, "showAnim"); + duration = $.datepicker._get(inst, "duration"); + inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 ); + $.datepicker._datepickerShowing = true; + + if ( $.effects && $.effects.effect[ showAnim ] ) { + inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration); + } else { + inst.dpDiv[showAnim || "show"](showAnim ? duration : null); + } + + if ( $.datepicker._shouldFocusInput( inst ) ) { + inst.input.focus(); + } + + $.datepicker._curInst = inst; + } + }, + + /* Generate the date picker content. */ + _updateDatepicker: function(inst) { + this.maxRows = 4; //Reset the max number of rows being displayed (see #7043) + datepicker_instActive = inst; // for delegate hover events + inst.dpDiv.empty().append(this._generateHTML(inst)); + this._attachHandlers(inst); + + var origyearshtml, + numMonths = this._getNumberOfMonths(inst), + cols = numMonths[1], + width = 17, + activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" ); + + if ( activeCell.length > 0 ) { + datepicker_handleMouseover.apply( activeCell.get( 0 ) ); + } + + inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""); + if (cols > 1) { + inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em"); + } + inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") + + "Class"]("ui-datepicker-multi"); + inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") + + "Class"]("ui-datepicker-rtl"); + + if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) { + inst.input.focus(); + } + + // deffered render of the years select (to avoid flashes on Firefox) + if( inst.yearshtml ){ + origyearshtml = inst.yearshtml; + setTimeout(function(){ + //assure that inst.yearshtml didn't change. + if( origyearshtml === inst.yearshtml && inst.yearshtml ){ + inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml); + } + origyearshtml = inst.yearshtml = null; + }, 0); + } + }, + + // #6694 - don't focus the input if it's already focused + // this breaks the change event in IE + // Support: IE and jQuery <1.9 + _shouldFocusInput: function( inst ) { + return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" ); + }, + + /* Check positioning to remain on screen. */ + _checkOffset: function(inst, offset, isFixed) { + var dpWidth = inst.dpDiv.outerWidth(), + dpHeight = inst.dpDiv.outerHeight(), + inputWidth = inst.input ? inst.input.outerWidth() : 0, + inputHeight = inst.input ? inst.input.outerHeight() : 0, + viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()), + viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop()); + + offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0); + offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0; + offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + + // now check if datepicker is showing outside window viewport - move to a better place if so. + offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight) : 0); + + return offset; + }, + + /* Find an object's position on the screen. */ + _findPos: function(obj) { + var position, + inst = this._getInst(obj), + isRTL = this._get(inst, "isRTL"); + + while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) { + obj = obj[isRTL ? "previousSibling" : "nextSibling"]; + } + + position = $(obj).offset(); + return [position.left, position.top]; + }, + + /* Hide the date picker from view. + * @param input element - the input field attached to the date picker + */ + _hideDatepicker: function(input) { + var showAnim, duration, postProcess, onClose, + inst = this._curInst; + + if (!inst || (input && inst !== $.data(input, "datepicker"))) { + return; + } + + if (this._datepickerShowing) { + showAnim = this._get(inst, "showAnim"); + duration = this._get(inst, "duration"); + postProcess = function() { + $.datepicker._tidyDialog(inst); + }; + + // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed + if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) { + inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess); + } else { + inst.dpDiv[(showAnim === "slideDown" ? "slideUp" : + (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess); + } + + if (!showAnim) { + postProcess(); + } + this._datepickerShowing = false; + + onClose = this._get(inst, "onClose"); + if (onClose) { + onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]); + } + + this._lastInput = null; + if (this._inDialog) { + this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" }); + if ($.blockUI) { + $.unblockUI(); + $("body").append(this.dpDiv); + } + } + this._inDialog = false; + } + }, + + /* Tidy up after a dialog display. */ + _tidyDialog: function(inst) { + inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar"); + }, + + /* Close date picker if clicked elsewhere. */ + _checkExternalClick: function(event) { + if (!$.datepicker._curInst) { + return; + } + + var $target = $(event.target), + inst = $.datepicker._getInst($target[0]); + + if ( ( ( $target[0].id !== $.datepicker._mainDivId && + $target.parents("#" + $.datepicker._mainDivId).length === 0 && + !$target.hasClass($.datepicker.markerClassName) && + !$target.closest("." + $.datepicker._triggerClass).length && + $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) || + ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) { + $.datepicker._hideDatepicker(); + } + }, + + /* Adjust one of the date sub-fields. */ + _adjustDate: function(id, offset, period) { + var target = $(id), + inst = this._getInst(target[0]); + + if (this._isDisabledDatepicker(target[0])) { + return; + } + this._adjustInstDate(inst, offset + + (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning + period); + this._updateDatepicker(inst); + }, + + /* Action for current link. */ + _gotoToday: function(id) { + var date, + target = $(id), + inst = this._getInst(target[0]); + + if (this._get(inst, "gotoCurrent") && inst.currentDay) { + inst.selectedDay = inst.currentDay; + inst.drawMonth = inst.selectedMonth = inst.currentMonth; + inst.drawYear = inst.selectedYear = inst.currentYear; + } else { + date = new Date(); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + } + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a new month/year. */ + _selectMonthYear: function(id, select, period) { + var target = $(id), + inst = this._getInst(target[0]); + + inst["selected" + (period === "M" ? "Month" : "Year")] = + inst["draw" + (period === "M" ? "Month" : "Year")] = + parseInt(select.options[select.selectedIndex].value,10); + + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a day. */ + _selectDay: function(id, month, year, td) { + var inst, + target = $(id); + + if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { + return; + } + + inst = this._getInst(target[0]); + inst.selectedDay = inst.currentDay = $("a", td).html(); + inst.selectedMonth = inst.currentMonth = month; + inst.selectedYear = inst.currentYear = year; + this._selectDate(id, this._formatDate(inst, + inst.currentDay, inst.currentMonth, inst.currentYear)); + }, + + /* Erase the input field and hide the date picker. */ + _clearDate: function(id) { + var target = $(id); + this._selectDate(target, ""); + }, + + /* Update the input field with the selected date. */ + _selectDate: function(id, dateStr) { + var onSelect, + target = $(id), + inst = this._getInst(target[0]); + + dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); + if (inst.input) { + inst.input.val(dateStr); + } + this._updateAlternate(inst); + + onSelect = this._get(inst, "onSelect"); + if (onSelect) { + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback + } else if (inst.input) { + inst.input.trigger("change"); // fire the change event + } + + if (inst.inline){ + this._updateDatepicker(inst); + } else { + this._hideDatepicker(); + this._lastInput = inst.input[0]; + if (typeof(inst.input[0]) !== "object") { + inst.input.focus(); // restore focus + } + this._lastInput = null; + } + }, + + /* Update any alternate field to synchronise with the main field. */ + _updateAlternate: function(inst) { + var altFormat, date, dateStr, + altField = this._get(inst, "altField"); + + if (altField) { // update alternate field too + altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat"); + date = this._getDate(inst); + dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); + $(altField).each(function() { $(this).val(dateStr); }); + } + }, + + /* Set as beforeShowDay function to prevent selection of weekends. + * @param date Date - the date to customise + * @return [boolean, string] - is this date selectable?, what is its CSS class? + */ + noWeekends: function(date) { + var day = date.getDay(); + return [(day > 0 && day < 6), ""]; + }, + + /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. + * @param date Date - the date to get the week for + * @return number - the number of the week within the year that contains this date + */ + iso8601Week: function(date) { + var time, + checkDate = new Date(date.getTime()); + + // Find Thursday of this week starting on Monday + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + + time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + }, + + /* Parse a string value into a date object. + * See formatDate below for the possible formats. + * + * @param format string - the expected format of the date + * @param value string - the date in the above format + * @param settings Object - attributes include: + * shortYearCutoff number - the cutoff year for determining the century (optional) + * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + * dayNames string[7] - names of the days from Sunday (optional) + * monthNamesShort string[12] - abbreviated names of the months (optional) + * monthNames string[12] - names of the months (optional) + * @return Date - the extracted date value or null if value is blank + */ + parseDate: function (format, value, settings) { + if (format == null || value == null) { + throw "Invalid arguments"; + } + + value = (typeof value === "object" ? value.toString() : value + ""); + if (value === "") { + return null; + } + + var iFormat, dim, extra, + iValue = 0, + shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff, + shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp : + new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)), + dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort, + dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames, + monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort, + monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames, + year = -1, + month = -1, + day = -1, + doy = -1, + literal = false, + date, + // Check whether a format character is doubled + lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); + if (matches) { + iFormat++; + } + return matches; + }, + // Extract a number from the string value + getNumber = function(match) { + var isDoubled = lookAhead(match), + size = (match === "@" ? 14 : (match === "!" ? 20 : + (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))), + minSize = (match === "y" ? size : 1), + digits = new RegExp("^\\d{" + minSize + "," + size + "}"), + num = value.substring(iValue).match(digits); + if (!num) { + throw "Missing number at position " + iValue; + } + iValue += num[0].length; + return parseInt(num[0], 10); + }, + // Extract a name from the string value and convert to an index + getName = function(match, shortNames, longNames) { + var index = -1, + names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) { + return [ [k, v] ]; + }).sort(function (a, b) { + return -(a[1].length - b[1].length); + }); + + $.each(names, function (i, pair) { + var name = pair[1]; + if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) { + index = pair[0]; + iValue += name.length; + return false; + } + }); + if (index !== -1) { + return index + 1; + } else { + throw "Unknown name at position " + iValue; + } + }, + // Confirm that a literal character matches the string value + checkLiteral = function() { + if (value.charAt(iValue) !== format.charAt(iFormat)) { + throw "Unexpected literal at position " + iValue; + } + iValue++; + }; + + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + checkLiteral(); + } + } else { + switch (format.charAt(iFormat)) { + case "d": + day = getNumber("d"); + break; + case "D": + getName("D", dayNamesShort, dayNames); + break; + case "o": + doy = getNumber("o"); + break; + case "m": + month = getNumber("m"); + break; + case "M": + month = getName("M", monthNamesShort, monthNames); + break; + case "y": + year = getNumber("y"); + break; + case "@": + date = new Date(getNumber("@")); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "!": + date = new Date((getNumber("!") - this._ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "'": + if (lookAhead("'")){ + checkLiteral(); + } else { + literal = true; + } + break; + default: + checkLiteral(); + } + } + } + + if (iValue < value.length){ + extra = value.substr(iValue); + if (!/^\s+/.test(extra)) { + throw "Extra/unparsed characters found in date: " + extra; + } + } + + if (year === -1) { + year = new Date().getFullYear(); + } else if (year < 100) { + year += new Date().getFullYear() - new Date().getFullYear() % 100 + + (year <= shortYearCutoff ? 0 : -100); + } + + if (doy > -1) { + month = 1; + day = doy; + do { + dim = this._getDaysInMonth(year, month - 1); + if (day <= dim) { + break; + } + month++; + day -= dim; + } while (true); + } + + date = this._daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) { + throw "Invalid date"; // E.g. 31/02/00 + } + return date; + }, + + /* Standard date formats. */ + ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601) + COOKIE: "D, dd M yy", + ISO_8601: "yy-mm-dd", + RFC_822: "D, d M y", + RFC_850: "DD, dd-M-y", + RFC_1036: "D, d M y", + RFC_1123: "D, d M yy", + RFC_2822: "D, d M yy", + RSS: "D, d M y", // RFC 822 + TICKS: "!", + TIMESTAMP: "@", + W3C: "yy-mm-dd", // ISO 8601 + + _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), + + /* Format a date object into a string value. + * The format can be combinations of the following: + * d - day of month (no leading zero) + * dd - day of month (two digit) + * o - day of year (no leading zeros) + * oo - day of year (three digit) + * D - day name short + * DD - day name long + * m - month of year (no leading zero) + * mm - month of year (two digit) + * M - month name short + * MM - month name long + * y - year (two digit) + * yy - year (four digit) + * @ - Unix timestamp (ms since 01/01/1970) + * ! - Windows ticks (100ns since 01/01/0001) + * "..." - literal text + * '' - single quote + * + * @param format string - the desired format of the date + * @param date Date - the date value to format + * @param settings Object - attributes include: + * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + * dayNames string[7] - names of the days from Sunday (optional) + * monthNamesShort string[12] - abbreviated names of the months (optional) + * monthNames string[12] - names of the months (optional) + * @return string - the date in the above format + */ + formatDate: function (format, date, settings) { + if (!date) { + return ""; + } + + var iFormat, + dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort, + dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames, + monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort, + monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames, + // Check whether a format character is doubled + lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); + if (matches) { + iFormat++; + } + return matches; + }, + // Format a number, with leading zero if necessary + formatNumber = function(match, value, len) { + var num = "" + value; + if (lookAhead(match)) { + while (num.length < len) { + num = "0" + num; + } + } + return num; + }, + // Format a name, short or long as requested + formatName = function(match, value, shortNames, longNames) { + return (lookAhead(match) ? longNames[value] : shortNames[value]); + }, + output = "", + literal = false; + + if (date) { + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + output += format.charAt(iFormat); + } + } else { + switch (format.charAt(iFormat)) { + case "d": + output += formatNumber("d", date.getDate(), 2); + break; + case "D": + output += formatName("D", date.getDay(), dayNamesShort, dayNames); + break; + case "o": + output += formatNumber("o", + Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); + break; + case "m": + output += formatNumber("m", date.getMonth() + 1, 2); + break; + case "M": + output += formatName("M", date.getMonth(), monthNamesShort, monthNames); + break; + case "y": + output += (lookAhead("y") ? date.getFullYear() : + (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100); + break; + case "@": + output += date.getTime(); + break; + case "!": + output += date.getTime() * 10000 + this._ticksTo1970; + break; + case "'": + if (lookAhead("'")) { + output += "'"; + } else { + literal = true; + } + break; + default: + output += format.charAt(iFormat); + } + } + } + } + return output; + }, + + /* Extract all possible characters from the date format. */ + _possibleChars: function (format) { + var iFormat, + chars = "", + literal = false, + // Check whether a format character is doubled + lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); + if (matches) { + iFormat++; + } + return matches; + }; + + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + chars += format.charAt(iFormat); + } + } else { + switch (format.charAt(iFormat)) { + case "d": case "m": case "y": case "@": + chars += "0123456789"; + break; + case "D": case "M": + return null; // Accept anything + case "'": + if (lookAhead("'")) { + chars += "'"; + } else { + literal = true; + } + break; + default: + chars += format.charAt(iFormat); + } + } + } + return chars; + }, + + /* Get a setting value, defaulting if necessary. */ + _get: function(inst, name) { + return inst.settings[name] !== undefined ? + inst.settings[name] : this._defaults[name]; + }, + + /* Parse existing date and initialise date picker. */ + _setDateFromField: function(inst, noDefault) { + if (inst.input.val() === inst.lastVal) { + return; + } + + var dateFormat = this._get(inst, "dateFormat"), + dates = inst.lastVal = inst.input ? inst.input.val() : null, + defaultDate = this._getDefaultDate(inst), + date = defaultDate, + settings = this._getFormatConfig(inst); + + try { + date = this.parseDate(dateFormat, dates, settings) || defaultDate; + } catch (event) { + dates = (noDefault ? "" : dates); + } + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + inst.currentDay = (dates ? date.getDate() : 0); + inst.currentMonth = (dates ? date.getMonth() : 0); + inst.currentYear = (dates ? date.getFullYear() : 0); + this._adjustInstDate(inst); + }, + + /* Retrieve the default date shown on opening. */ + _getDefaultDate: function(inst) { + return this._restrictMinMax(inst, + this._determineDate(inst, this._get(inst, "defaultDate"), new Date())); + }, + + /* A date may be specified as an exact value or a relative one. */ + _determineDate: function(inst, date, defaultDate) { + var offsetNumeric = function(offset) { + var date = new Date(); + date.setDate(date.getDate() + offset); + return date; + }, + offsetString = function(offset) { + try { + return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), + offset, $.datepicker._getFormatConfig(inst)); + } + catch (e) { + // Ignore + } + + var date = (offset.toLowerCase().match(/^c/) ? + $.datepicker._getDate(inst) : null) || new Date(), + year = date.getFullYear(), + month = date.getMonth(), + day = date.getDate(), + pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, + matches = pattern.exec(offset); + + while (matches) { + switch (matches[2] || "d") { + case "d" : case "D" : + day += parseInt(matches[1],10); break; + case "w" : case "W" : + day += parseInt(matches[1],10) * 7; break; + case "m" : case "M" : + month += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + case "y": case "Y" : + year += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day); + }, + newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) : + (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); + + newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate); + if (newDate) { + newDate.setHours(0); + newDate.setMinutes(0); + newDate.setSeconds(0); + newDate.setMilliseconds(0); + } + return this._daylightSavingAdjust(newDate); + }, + + /* Handle switch to/from daylight saving. + * Hours may be non-zero on daylight saving cut-over: + * > 12 when midnight changeover, but then cannot generate + * midnight datetime, so jump to 1AM, otherwise reset. + * @param date (Date) the date to check + * @return (Date) the corrected date + */ + _daylightSavingAdjust: function(date) { + if (!date) { + return null; + } + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, + + /* Set the date(s) directly. */ + _setDate: function(inst, date, noChange) { + var clear = !date, + origMonth = inst.selectedMonth, + origYear = inst.selectedYear, + newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); + + inst.selectedDay = inst.currentDay = newDate.getDate(); + inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); + inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); + if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) { + this._notifyChange(inst); + } + this._adjustInstDate(inst); + if (inst.input) { + inst.input.val(clear ? "" : this._formatDate(inst)); + } + }, + + /* Retrieve the date(s) directly. */ + _getDate: function(inst) { + var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null : + this._daylightSavingAdjust(new Date( + inst.currentYear, inst.currentMonth, inst.currentDay))); + return startDate; + }, + + /* Attach the onxxx handlers. These are declared statically so + * they work with static code transformers like Caja. + */ + _attachHandlers: function(inst) { + var stepMonths = this._get(inst, "stepMonths"), + id = "#" + inst.id.replace( /\\\\/g, "\\" ); + inst.dpDiv.find("[data-handler]").map(function () { + var handler = { + prev: function () { + $.datepicker._adjustDate(id, -stepMonths, "M"); + }, + next: function () { + $.datepicker._adjustDate(id, +stepMonths, "M"); + }, + hide: function () { + $.datepicker._hideDatepicker(); + }, + today: function () { + $.datepicker._gotoToday(id); + }, + selectDay: function () { + $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this); + return false; + }, + selectMonth: function () { + $.datepicker._selectMonthYear(id, this, "M"); + return false; + }, + selectYear: function () { + $.datepicker._selectMonthYear(id, this, "Y"); + return false; + } + }; + $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]); + }); + }, + + /* Generate the HTML for the current state of the date picker. */ + _generateHTML: function(inst) { + var maxDraw, prevText, prev, nextText, next, currentText, gotoDate, + controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin, + monthNames, monthNamesShort, beforeShowDay, showOtherMonths, + selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate, + cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows, + printDate, dRow, tbody, daySettings, otherMonth, unselectable, + tempDate = new Date(), + today = this._daylightSavingAdjust( + new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time + isRTL = this._get(inst, "isRTL"), + showButtonPanel = this._get(inst, "showButtonPanel"), + hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"), + navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"), + numMonths = this._getNumberOfMonths(inst), + showCurrentAtPos = this._get(inst, "showCurrentAtPos"), + stepMonths = this._get(inst, "stepMonths"), + isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1), + currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : + new Date(inst.currentYear, inst.currentMonth, inst.currentDay))), + minDate = this._getMinMaxDate(inst, "min"), + maxDate = this._getMinMaxDate(inst, "max"), + drawMonth = inst.drawMonth - showCurrentAtPos, + drawYear = inst.drawYear; + + if (drawMonth < 0) { + drawMonth += 12; + drawYear--; + } + if (maxDate) { + maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), + maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); + maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); + while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { + drawMonth--; + if (drawMonth < 0) { + drawMonth = 11; + drawYear--; + } + } + } + inst.drawMonth = drawMonth; + inst.drawYear = drawYear; + + prevText = this._get(inst, "prevText"); + prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), + this._getFormatConfig(inst))); + + prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? + "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" + + " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" : + (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>")); + + nextText = this._get(inst, "nextText"); + nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), + this._getFormatConfig(inst))); + + next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? + "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" + + " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" : + (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>")); + + currentText = this._get(inst, "currentText"); + gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today); + currentText = (!navigationAsDateFormat ? currentText : + this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); + + controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + + this._get(inst, "closeText") + "</button>" : ""); + + buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") + + (this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" + + ">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : ""; + + firstDay = parseInt(this._get(inst, "firstDay"),10); + firstDay = (isNaN(firstDay) ? 0 : firstDay); + + showWeek = this._get(inst, "showWeek"); + dayNames = this._get(inst, "dayNames"); + dayNamesMin = this._get(inst, "dayNamesMin"); + monthNames = this._get(inst, "monthNames"); + monthNamesShort = this._get(inst, "monthNamesShort"); + beforeShowDay = this._get(inst, "beforeShowDay"); + showOtherMonths = this._get(inst, "showOtherMonths"); + selectOtherMonths = this._get(inst, "selectOtherMonths"); + defaultDate = this._getDefaultDate(inst); + html = ""; + dow; + for (row = 0; row < numMonths[0]; row++) { + group = ""; + this.maxRows = 4; + for (col = 0; col < numMonths[1]; col++) { + selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + cornerClass = " ui-corner-all"; + calender = ""; + if (isMultiMonth) { + calender += "<div class='ui-datepicker-group"; + if (numMonths[1] > 1) { + switch (col) { + case 0: calender += " ui-datepicker-group-first"; + cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break; + case numMonths[1]-1: calender += " ui-datepicker-group-last"; + cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break; + default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break; + } + } + calender += "'>"; + } + calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" + + (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") + + (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") + + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, + row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers + "</div><table class='ui-datepicker-calendar'><thead>" + + "<tr>"; + thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : ""); + for (dow = 0; dow < 7; dow++) { // days of the week + day = (dow + firstDay) % 7; + thead += "<th scope='col'" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" + + "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>"; + } + calender += thead + "</tr></thead><tbody>"; + daysInMonth = this._getDaysInMonth(drawYear, drawMonth); + if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) { + inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); + } + leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; + curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate + numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043) + this.maxRows = numRows; + printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); + for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows + calender += "<tr>"; + tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" + + this._get(inst, "calculateWeek")(printDate) + "</td>"); + for (dow = 0; dow < 7; dow++) { // create date picker days + daySettings = (beforeShowDay ? + beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]); + otherMonth = (printDate.getMonth() !== drawMonth); + unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || + (minDate && printDate < minDate) || (maxDate && printDate > maxDate); + tbody += "<td class='" + + ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends + (otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months + ((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key + (defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ? + // or defaultDate is current printedDate and defaultDate is selectedDate + " " + this._dayOverClass : "") + // highlight selected day + (unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") + // highlight unselectable days + (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates + (printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day + (printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different) + ((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "'") + "'" : "") + // cell title + (unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions + (otherMonth && !showOtherMonths ? " " : // display for other months + (unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" + + (printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") + + (printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day + (otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months + "' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date + printDate.setDate(printDate.getDate() + 1); + printDate = this._daylightSavingAdjust(printDate); + } + calender += tbody + "</tr>"; + } + drawMonth++; + if (drawMonth > 11) { + drawMonth = 0; + drawYear++; + } + calender += "</tbody></table>" + (isMultiMonth ? "</div>" + + ((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : ""); + group += calender; + } + html += group; + } + html += buttonPanel; + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + + var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear, + changeMonth = this._get(inst, "changeMonth"), + changeYear = this._get(inst, "changeYear"), + showMonthAfterYear = this._get(inst, "showMonthAfterYear"), + html = "<div class='ui-datepicker-title'>", + monthHtml = ""; + + // month selection + if (secondary || !changeMonth) { + monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>"; + } else { + inMinYear = (minDate && minDate.getFullYear() === drawYear); + inMaxYear = (maxDate && maxDate.getFullYear() === drawYear); + monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>"; + for ( month = 0; month < 12; month++) { + if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) { + monthHtml += "<option value='" + month + "'" + + (month === drawMonth ? " selected='selected'" : "") + + ">" + monthNamesShort[month] + "</option>"; + } + } + monthHtml += "</select>"; + } + + if (!showMonthAfterYear) { + html += monthHtml + (secondary || !(changeMonth && changeYear) ? " " : ""); + } + + // year selection + if ( !inst.yearshtml ) { + inst.yearshtml = ""; + if (secondary || !changeYear) { + html += "<span class='ui-datepicker-year'>" + drawYear + "</span>"; + } else { + // determine range of years to display + years = this._get(inst, "yearRange").split(":"); + thisYear = new Date().getFullYear(); + determineYear = function(value) { + var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + year = determineYear(years[0]); + endYear = Math.max(year, determineYear(years[1] || "")); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>"; + for (; year <= endYear; year++) { + inst.yearshtml += "<option value='" + year + "'" + + (year === drawYear ? " selected='selected'" : "") + + ">" + year + "</option>"; + } + inst.yearshtml += "</select>"; + + html += inst.yearshtml; + inst.yearshtml = null; + } + } + + html += this._get(inst, "yearSuffix"); + if (showMonthAfterYear) { + html += (secondary || !(changeMonth && changeYear) ? " " : "") + monthHtml; + } + html += "</div>"; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period === "Y" ? offset : 0), + month = inst.drawMonth + (period === "M" ? offset : 0), + day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0), + date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day))); + + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period === "M" || period === "Y") { + this._notifyChange(inst); + } + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, "min"), + maxDate = this._getMinMaxDate(inst, "max"), + newDate = (minDate && date < minDate ? minDate : date); + return (maxDate && newDate > maxDate ? maxDate : newDate); + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, "onChangeMonthYear"); + if (onChange) { + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + } + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, "numberOfMonths"); + return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + "Date"), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst), + date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + + if (offset < 0) { + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + } + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var yearSplit, currentYear, + minDate = this._getMinMaxDate(inst, "min"), + maxDate = this._getMinMaxDate(inst, "max"), + minYear = null, + maxYear = null, + years = this._get(inst, "yearRange"); + if (years){ + yearSplit = years.split(":"); + currentYear = new Date().getFullYear(); + minYear = parseInt(yearSplit[0], 10); + maxYear = parseInt(yearSplit[1], 10); + if ( yearSplit[0].match(/[+\-].*/) ) { + minYear += currentYear; + } + if ( yearSplit[1].match(/[+\-].*/) ) { + maxYear += currentYear; + } + } + + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime()) && + (!minYear || date.getFullYear() >= minYear) && + (!maxYear || date.getFullYear() <= maxYear)); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, "shortYearCutoff"); + shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"), + monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day === "object" ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst)); + } +}); + +/* + * Bind hover events for datepicker elements. + * Done via delegate so the binding only occurs once in the lifetime of the parent div. + * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. + */ +function datepicker_bindHover(dpDiv) { + var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"; + return dpDiv.delegate(selector, "mouseout", function() { + $(this).removeClass("ui-state-hover"); + if (this.className.indexOf("ui-datepicker-prev") !== -1) { + $(this).removeClass("ui-datepicker-prev-hover"); + } + if (this.className.indexOf("ui-datepicker-next") !== -1) { + $(this).removeClass("ui-datepicker-next-hover"); + } + }) + .delegate( selector, "mouseover", datepicker_handleMouseover ); +} + +function datepicker_handleMouseover() { + if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) { + $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); + $(this).addClass("ui-state-hover"); + if (this.className.indexOf("ui-datepicker-prev") !== -1) { + $(this).addClass("ui-datepicker-prev-hover"); + } + if (this.className.indexOf("ui-datepicker-next") !== -1) { + $(this).addClass("ui-datepicker-next-hover"); + } + } +} + +/* jQuery extend now ignores nulls! */ +function datepicker_extendRemove(target, props) { + $.extend(target, props); + for (var name in props) { + if (props[name] == null) { + target[name] = props[name]; + } + } + return target; +} + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick); + $.datepicker.initialized = true; + } + + /* Append datepicker main container to body if not exist. */ + if ($("#"+$.datepicker._mainDivId).length === 0) { + $("body").append($.datepicker.dpDiv); + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) { + return $.datepicker["_" + options + "Datepicker"]. + apply($.datepicker, [this[0]].concat(otherArgs)); + } + if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") { + return $.datepicker["_" + options + "Datepicker"]. + apply($.datepicker, [this[0]].concat(otherArgs)); + } + return this.each(function() { + typeof options === "string" ? + $.datepicker["_" + options + "Datepicker"]. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.11.4"; + +var datepicker = $.datepicker; + + +/*! + * jQuery UI Dialog 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/dialog/ + */ + + +var dialog = $.widget( "ui.dialog", { + version: "1.11.4", + options: { + appendTo: "body", + autoOpen: true, + buttons: [], + closeOnEscape: true, + closeText: "Close", + dialogClass: "", + draggable: true, + hide: null, + height: "auto", + maxHeight: null, + maxWidth: null, + minHeight: 150, + minWidth: 150, + modal: false, + position: { + my: "center", + at: "center", + of: window, + collision: "fit", + // Ensure the titlebar is always visible + using: function( pos ) { + var topOffset = $( this ).css( pos ).offset().top; + if ( topOffset < 0 ) { + $( this ).css( "top", pos.top - topOffset ); + } + } + }, + resizable: true, + show: null, + title: null, + width: 300, + + // callbacks + beforeClose: null, + close: null, + drag: null, + dragStart: null, + dragStop: null, + focus: null, + open: null, + resize: null, + resizeStart: null, + resizeStop: null + }, + + sizeRelatedOptions: { + buttons: true, + height: true, + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true, + width: true + }, + + resizableRelatedOptions: { + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true + }, + + _create: function() { + this.originalCss = { + display: this.element[ 0 ].style.display, + width: this.element[ 0 ].style.width, + minHeight: this.element[ 0 ].style.minHeight, + maxHeight: this.element[ 0 ].style.maxHeight, + height: this.element[ 0 ].style.height + }; + this.originalPosition = { + parent: this.element.parent(), + index: this.element.parent().children().index( this.element ) + }; + this.originalTitle = this.element.attr( "title" ); + this.options.title = this.options.title || this.originalTitle; + + this._createWrapper(); + + this.element + .show() + .removeAttr( "title" ) + .addClass( "ui-dialog-content ui-widget-content" ) + .appendTo( this.uiDialog ); + + this._createTitlebar(); + this._createButtonPane(); + + if ( this.options.draggable && $.fn.draggable ) { + this._makeDraggable(); + } + if ( this.options.resizable && $.fn.resizable ) { + this._makeResizable(); + } + + this._isOpen = false; + + this._trackFocus(); + }, + + _init: function() { + if ( this.options.autoOpen ) { + this.open(); + } + }, + + _appendTo: function() { + var element = this.options.appendTo; + if ( element && (element.jquery || element.nodeType) ) { + return $( element ); + } + return this.document.find( element || "body" ).eq( 0 ); + }, + + _destroy: function() { + var next, + originalPosition = this.originalPosition; + + this._untrackInstance(); + this._destroyOverlay(); + + this.element + .removeUniqueId() + .removeClass( "ui-dialog-content ui-widget-content" ) + .css( this.originalCss ) + // Without detaching first, the following becomes really slow + .detach(); + + this.uiDialog.stop( true, true ).remove(); + + if ( this.originalTitle ) { + this.element.attr( "title", this.originalTitle ); + } + + next = originalPosition.parent.children().eq( originalPosition.index ); + // Don't try to place the dialog next to itself (#8613) + if ( next.length && next[ 0 ] !== this.element[ 0 ] ) { + next.before( this.element ); + } else { + originalPosition.parent.append( this.element ); + } + }, + + widget: function() { + return this.uiDialog; + }, + + disable: $.noop, + enable: $.noop, + + close: function( event ) { + var activeElement, + that = this; + + if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) { + return; + } + + this._isOpen = false; + this._focusedElement = null; + this._destroyOverlay(); + this._untrackInstance(); + + if ( !this.opener.filter( ":focusable" ).focus().length ) { + + // support: IE9 + // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe> + try { + activeElement = this.document[ 0 ].activeElement; + + // Support: IE9, IE10 + // If the <body> is blurred, IE will switch windows, see #4520 + if ( activeElement && activeElement.nodeName.toLowerCase() !== "body" ) { + + // Hiding a focused element doesn't trigger blur in WebKit + // so in case we have nothing to focus on, explicitly blur the active element + // https://bugs.webkit.org/show_bug.cgi?id=47182 + $( activeElement ).blur(); + } + } catch ( error ) {} + } + + this._hide( this.uiDialog, this.options.hide, function() { + that._trigger( "close", event ); + }); + }, + + isOpen: function() { + return this._isOpen; + }, + + moveToTop: function() { + this._moveToTop(); + }, + + _moveToTop: function( event, silent ) { + var moved = false, + zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map(function() { + return +$( this ).css( "z-index" ); + }).get(), + zIndexMax = Math.max.apply( null, zIndices ); + + if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) { + this.uiDialog.css( "z-index", zIndexMax + 1 ); + moved = true; + } + + if ( moved && !silent ) { + this._trigger( "focus", event ); + } + return moved; + }, + + open: function() { + var that = this; + if ( this._isOpen ) { + if ( this._moveToTop() ) { + this._focusTabbable(); + } + return; + } + + this._isOpen = true; + this.opener = $( this.document[ 0 ].activeElement ); + + this._size(); + this._position(); + this._createOverlay(); + this._moveToTop( null, true ); + + // Ensure the overlay is moved to the top with the dialog, but only when + // opening. The overlay shouldn't move after the dialog is open so that + // modeless dialogs opened after the modal dialog stack properly. + if ( this.overlay ) { + this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 ); + } + + this._show( this.uiDialog, this.options.show, function() { + that._focusTabbable(); + that._trigger( "focus" ); + }); + + // Track the dialog immediately upon openening in case a focus event + // somehow occurs outside of the dialog before an element inside the + // dialog is focused (#10152) + this._makeFocusTarget(); + + this._trigger( "open" ); + }, + + _focusTabbable: function() { + // Set focus to the first match: + // 1. An element that was focused previously + // 2. First element inside the dialog matching [autofocus] + // 3. Tabbable element inside the content element + // 4. Tabbable element inside the buttonpane + // 5. The close button + // 6. The dialog itself + var hasFocus = this._focusedElement; + if ( !hasFocus ) { + hasFocus = this.element.find( "[autofocus]" ); + } + if ( !hasFocus.length ) { + hasFocus = this.element.find( ":tabbable" ); + } + if ( !hasFocus.length ) { + hasFocus = this.uiDialogButtonPane.find( ":tabbable" ); + } + if ( !hasFocus.length ) { + hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" ); + } + if ( !hasFocus.length ) { + hasFocus = this.uiDialog; + } + hasFocus.eq( 0 ).focus(); + }, + + _keepFocus: function( event ) { + function checkFocus() { + var activeElement = this.document[0].activeElement, + isActive = this.uiDialog[0] === activeElement || + $.contains( this.uiDialog[0], activeElement ); + if ( !isActive ) { + this._focusTabbable(); + } + } + event.preventDefault(); + checkFocus.call( this ); + // support: IE + // IE <= 8 doesn't prevent moving focus even with event.preventDefault() + // so we check again later + this._delay( checkFocus ); + }, + + _createWrapper: function() { + this.uiDialog = $("<div>") + .addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " + + this.options.dialogClass ) + .hide() + .attr({ + // Setting tabIndex makes the div focusable + tabIndex: -1, + role: "dialog" + }) + .appendTo( this._appendTo() ); + + this._on( this.uiDialog, { + keydown: function( event ) { + if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE ) { + event.preventDefault(); + this.close( event ); + return; + } + + // prevent tabbing out of dialogs + if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) { + return; + } + var tabbables = this.uiDialog.find( ":tabbable" ), + first = tabbables.filter( ":first" ), + last = tabbables.filter( ":last" ); + + if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) { + this._delay(function() { + first.focus(); + }); + event.preventDefault(); + } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) { + this._delay(function() { + last.focus(); + }); + event.preventDefault(); + } + }, + mousedown: function( event ) { + if ( this._moveToTop( event ) ) { + this._focusTabbable(); + } + } + }); + + // We assume that any existing aria-describedby attribute means + // that the dialog content is marked up properly + // otherwise we brute force the content as the description + if ( !this.element.find( "[aria-describedby]" ).length ) { + this.uiDialog.attr({ + "aria-describedby": this.element.uniqueId().attr( "id" ) + }); + } + }, + + _createTitlebar: function() { + var uiDialogTitle; + + this.uiDialogTitlebar = $( "<div>" ) + .addClass( "ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix" ) + .prependTo( this.uiDialog ); + this._on( this.uiDialogTitlebar, { + mousedown: function( event ) { + // Don't prevent click on close button (#8838) + // Focusing a dialog that is partially scrolled out of view + // causes the browser to scroll it into view, preventing the click event + if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) { + // Dialog isn't getting focus when dragging (#8063) + this.uiDialog.focus(); + } + } + }); + + // support: IE + // Use type="button" to prevent enter keypresses in textboxes from closing the + // dialog in IE (#9312) + this.uiDialogTitlebarClose = $( "<button type='button'></button>" ) + .button({ + label: this.options.closeText, + icons: { + primary: "ui-icon-closethick" + }, + text: false + }) + .addClass( "ui-dialog-titlebar-close" ) + .appendTo( this.uiDialogTitlebar ); + this._on( this.uiDialogTitlebarClose, { + click: function( event ) { + event.preventDefault(); + this.close( event ); + } + }); + + uiDialogTitle = $( "<span>" ) + .uniqueId() + .addClass( "ui-dialog-title" ) + .prependTo( this.uiDialogTitlebar ); + this._title( uiDialogTitle ); + + this.uiDialog.attr({ + "aria-labelledby": uiDialogTitle.attr( "id" ) + }); + }, + + _title: function( title ) { + if ( !this.options.title ) { + title.html( " " ); + } + title.text( this.options.title ); + }, + + _createButtonPane: function() { + this.uiDialogButtonPane = $( "<div>" ) + .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" ); + + this.uiButtonSet = $( "<div>" ) + .addClass( "ui-dialog-buttonset" ) + .appendTo( this.uiDialogButtonPane ); + + this._createButtons(); + }, + + _createButtons: function() { + var that = this, + buttons = this.options.buttons; + + // if we already have a button pane, remove it + this.uiDialogButtonPane.remove(); + this.uiButtonSet.empty(); + + if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) { + this.uiDialog.removeClass( "ui-dialog-buttons" ); + return; + } + + $.each( buttons, function( name, props ) { + var click, buttonOptions; + props = $.isFunction( props ) ? + { click: props, text: name } : + props; + // Default to a non-submitting button + props = $.extend( { type: "button" }, props ); + // Change the context for the click callback to be the main element + click = props.click; + props.click = function() { + click.apply( that.element[ 0 ], arguments ); + }; + buttonOptions = { + icons: props.icons, + text: props.showText + }; + delete props.icons; + delete props.showText; + $( "<button></button>", props ) + .button( buttonOptions ) + .appendTo( that.uiButtonSet ); + }); + this.uiDialog.addClass( "ui-dialog-buttons" ); + this.uiDialogButtonPane.appendTo( this.uiDialog ); + }, + + _makeDraggable: function() { + var that = this, + options = this.options; + + function filteredUi( ui ) { + return { + position: ui.position, + offset: ui.offset + }; + } + + this.uiDialog.draggable({ + cancel: ".ui-dialog-content, .ui-dialog-titlebar-close", + handle: ".ui-dialog-titlebar", + containment: "document", + start: function( event, ui ) { + $( this ).addClass( "ui-dialog-dragging" ); + that._blockFrames(); + that._trigger( "dragStart", event, filteredUi( ui ) ); + }, + drag: function( event, ui ) { + that._trigger( "drag", event, filteredUi( ui ) ); + }, + stop: function( event, ui ) { + var left = ui.offset.left - that.document.scrollLeft(), + top = ui.offset.top - that.document.scrollTop(); + + options.position = { + my: "left top", + at: "left" + (left >= 0 ? "+" : "") + left + " " + + "top" + (top >= 0 ? "+" : "") + top, + of: that.window + }; + $( this ).removeClass( "ui-dialog-dragging" ); + that._unblockFrames(); + that._trigger( "dragStop", event, filteredUi( ui ) ); + } + }); + }, + + _makeResizable: function() { + var that = this, + options = this.options, + handles = options.resizable, + // .ui-resizable has position: relative defined in the stylesheet + // but dialogs have to use absolute or fixed positioning + position = this.uiDialog.css("position"), + resizeHandles = typeof handles === "string" ? + handles : + "n,e,s,w,se,sw,ne,nw"; + + function filteredUi( ui ) { + return { + originalPosition: ui.originalPosition, + originalSize: ui.originalSize, + position: ui.position, + size: ui.size + }; + } + + this.uiDialog.resizable({ + cancel: ".ui-dialog-content", + containment: "document", + alsoResize: this.element, + maxWidth: options.maxWidth, + maxHeight: options.maxHeight, + minWidth: options.minWidth, + minHeight: this._minHeight(), + handles: resizeHandles, + start: function( event, ui ) { + $( this ).addClass( "ui-dialog-resizing" ); + that._blockFrames(); + that._trigger( "resizeStart", event, filteredUi( ui ) ); + }, + resize: function( event, ui ) { + that._trigger( "resize", event, filteredUi( ui ) ); + }, + stop: function( event, ui ) { + var offset = that.uiDialog.offset(), + left = offset.left - that.document.scrollLeft(), + top = offset.top - that.document.scrollTop(); + + options.height = that.uiDialog.height(); + options.width = that.uiDialog.width(); + options.position = { + my: "left top", + at: "left" + (left >= 0 ? "+" : "") + left + " " + + "top" + (top >= 0 ? "+" : "") + top, + of: that.window + }; + $( this ).removeClass( "ui-dialog-resizing" ); + that._unblockFrames(); + that._trigger( "resizeStop", event, filteredUi( ui ) ); + } + }) + .css( "position", position ); + }, + + _trackFocus: function() { + this._on( this.widget(), { + focusin: function( event ) { + this._makeFocusTarget(); + this._focusedElement = $( event.target ); + } + }); + }, + + _makeFocusTarget: function() { + this._untrackInstance(); + this._trackingInstances().unshift( this ); + }, + + _untrackInstance: function() { + var instances = this._trackingInstances(), + exists = $.inArray( this, instances ); + if ( exists !== -1 ) { + instances.splice( exists, 1 ); + } + }, + + _trackingInstances: function() { + var instances = this.document.data( "ui-dialog-instances" ); + if ( !instances ) { + instances = []; + this.document.data( "ui-dialog-instances", instances ); + } + return instances; + }, + + _minHeight: function() { + var options = this.options; + + return options.height === "auto" ? + options.minHeight : + Math.min( options.minHeight, options.height ); + }, + + _position: function() { + // Need to show the dialog to get the actual offset in the position plugin + var isVisible = this.uiDialog.is( ":visible" ); + if ( !isVisible ) { + this.uiDialog.show(); + } + this.uiDialog.position( this.options.position ); + if ( !isVisible ) { + this.uiDialog.hide(); + } + }, + + _setOptions: function( options ) { + var that = this, + resize = false, + resizableOptions = {}; + + $.each( options, function( key, value ) { + that._setOption( key, value ); + + if ( key in that.sizeRelatedOptions ) { + resize = true; + } + if ( key in that.resizableRelatedOptions ) { + resizableOptions[ key ] = value; + } + }); + + if ( resize ) { + this._size(); + this._position(); + } + if ( this.uiDialog.is( ":data(ui-resizable)" ) ) { + this.uiDialog.resizable( "option", resizableOptions ); + } + }, + + _setOption: function( key, value ) { + var isDraggable, isResizable, + uiDialog = this.uiDialog; + + if ( key === "dialogClass" ) { + uiDialog + .removeClass( this.options.dialogClass ) + .addClass( value ); + } + + if ( key === "disabled" ) { + return; + } + + this._super( key, value ); + + if ( key === "appendTo" ) { + this.uiDialog.appendTo( this._appendTo() ); + } + + if ( key === "buttons" ) { + this._createButtons(); + } + + if ( key === "closeText" ) { + this.uiDialogTitlebarClose.button({ + // Ensure that we always pass a string + label: "" + value + }); + } + + if ( key === "draggable" ) { + isDraggable = uiDialog.is( ":data(ui-draggable)" ); + if ( isDraggable && !value ) { + uiDialog.draggable( "destroy" ); + } + + if ( !isDraggable && value ) { + this._makeDraggable(); + } + } + + if ( key === "position" ) { + this._position(); + } + + if ( key === "resizable" ) { + // currently resizable, becoming non-resizable + isResizable = uiDialog.is( ":data(ui-resizable)" ); + if ( isResizable && !value ) { + uiDialog.resizable( "destroy" ); + } + + // currently resizable, changing handles + if ( isResizable && typeof value === "string" ) { + uiDialog.resizable( "option", "handles", value ); + } + + // currently non-resizable, becoming resizable + if ( !isResizable && value !== false ) { + this._makeResizable(); + } + } + + if ( key === "title" ) { + this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) ); + } + }, + + _size: function() { + // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content + // divs will both have width and height set, so we need to reset them + var nonContentHeight, minContentHeight, maxContentHeight, + options = this.options; + + // Reset content sizing + this.element.show().css({ + width: "auto", + minHeight: 0, + maxHeight: "none", + height: 0 + }); + + if ( options.minWidth > options.width ) { + options.width = options.minWidth; + } + + // reset wrapper sizing + // determine the height of all the non-content elements + nonContentHeight = this.uiDialog.css({ + height: "auto", + width: options.width + }) + .outerHeight(); + minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); + maxContentHeight = typeof options.maxHeight === "number" ? + Math.max( 0, options.maxHeight - nonContentHeight ) : + "none"; + + if ( options.height === "auto" ) { + this.element.css({ + minHeight: minContentHeight, + maxHeight: maxContentHeight, + height: "auto" + }); + } else { + this.element.height( Math.max( 0, options.height - nonContentHeight ) ); + } + + if ( this.uiDialog.is( ":data(ui-resizable)" ) ) { + this.uiDialog.resizable( "option", "minHeight", this._minHeight() ); + } + }, + + _blockFrames: function() { + this.iframeBlocks = this.document.find( "iframe" ).map(function() { + var iframe = $( this ); + + return $( "<div>" ) + .css({ + position: "absolute", + width: iframe.outerWidth(), + height: iframe.outerHeight() + }) + .appendTo( iframe.parent() ) + .offset( iframe.offset() )[0]; + }); + }, + + _unblockFrames: function() { + if ( this.iframeBlocks ) { + this.iframeBlocks.remove(); + delete this.iframeBlocks; + } + }, + + _allowInteraction: function( event ) { + if ( $( event.target ).closest( ".ui-dialog" ).length ) { + return true; + } + + // TODO: Remove hack when datepicker implements + // the .ui-front logic (#8989) + return !!$( event.target ).closest( ".ui-datepicker" ).length; + }, + + _createOverlay: function() { + if ( !this.options.modal ) { + return; + } + + // We use a delay in case the overlay is created from an + // event that we're going to be cancelling (#2804) + var isOpening = true; + this._delay(function() { + isOpening = false; + }); + + if ( !this.document.data( "ui-dialog-overlays" ) ) { + + // Prevent use of anchors and inputs + // Using _on() for an event handler shared across many instances is + // safe because the dialogs stack and must be closed in reverse order + this._on( this.document, { + focusin: function( event ) { + if ( isOpening ) { + return; + } + + if ( !this._allowInteraction( event ) ) { + event.preventDefault(); + this._trackingInstances()[ 0 ]._focusTabbable(); + } + } + }); + } + + this.overlay = $( "<div>" ) + .addClass( "ui-widget-overlay ui-front" ) + .appendTo( this._appendTo() ); + this._on( this.overlay, { + mousedown: "_keepFocus" + }); + this.document.data( "ui-dialog-overlays", + (this.document.data( "ui-dialog-overlays" ) || 0) + 1 ); + }, + + _destroyOverlay: function() { + if ( !this.options.modal ) { + return; + } + + if ( this.overlay ) { + var overlays = this.document.data( "ui-dialog-overlays" ) - 1; + + if ( !overlays ) { + this.document + .unbind( "focusin" ) + .removeData( "ui-dialog-overlays" ); + } else { + this.document.data( "ui-dialog-overlays", overlays ); + } + + this.overlay.remove(); + this.overlay = null; + } + } +}); + + +/*! + * jQuery UI Progressbar 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/progressbar/ + */ + + +var progressbar = $.widget( "ui.progressbar", { + version: "1.11.4", + options: { + max: 100, + value: 0, + + change: null, + complete: null + }, + + min: 0, + + _create: function() { + // Constrain initial value + this.oldValue = this.options.value = this._constrainedValue(); + + this.element + .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .attr({ + // Only set static values, aria-valuenow and aria-valuemax are + // set inside _refreshValue() + role: "progressbar", + "aria-valuemin": this.min + }); + + this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" ) + .appendTo( this.element ); + + this._refreshValue(); + }, + + _destroy: function() { + this.element + .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .removeAttr( "role" ) + .removeAttr( "aria-valuemin" ) + .removeAttr( "aria-valuemax" ) + .removeAttr( "aria-valuenow" ); + + this.valueDiv.remove(); + }, + + value: function( newValue ) { + if ( newValue === undefined ) { + return this.options.value; + } + + this.options.value = this._constrainedValue( newValue ); + this._refreshValue(); + }, + + _constrainedValue: function( newValue ) { + if ( newValue === undefined ) { + newValue = this.options.value; + } + + this.indeterminate = newValue === false; + + // sanitize value + if ( typeof newValue !== "number" ) { + newValue = 0; + } + + return this.indeterminate ? false : + Math.min( this.options.max, Math.max( this.min, newValue ) ); + }, + + _setOptions: function( options ) { + // Ensure "value" option is set after other values (like max) + var value = options.value; + delete options.value; + + this._super( options ); + + this.options.value = this._constrainedValue( value ); + this._refreshValue(); + }, + + _setOption: function( key, value ) { + if ( key === "max" ) { + // Don't allow a max less than min + value = Math.max( this.min, value ); + } + if ( key === "disabled" ) { + this.element + .toggleClass( "ui-state-disabled", !!value ) + .attr( "aria-disabled", value ); + } + this._super( key, value ); + }, + + _percentage: function() { + return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min ); + }, + + _refreshValue: function() { + var value = this.options.value, + percentage = this._percentage(); + + this.valueDiv + .toggle( this.indeterminate || value > this.min ) + .toggleClass( "ui-corner-right", value === this.options.max ) + .width( percentage.toFixed(0) + "%" ); + + this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate ); + + if ( this.indeterminate ) { + this.element.removeAttr( "aria-valuenow" ); + if ( !this.overlayDiv ) { + this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv ); + } + } else { + this.element.attr({ + "aria-valuemax": this.options.max, + "aria-valuenow": value + }); + if ( this.overlayDiv ) { + this.overlayDiv.remove(); + this.overlayDiv = null; + } + } + + if ( this.oldValue !== value ) { + this.oldValue = value; + this._trigger( "change" ); + } + if ( value === this.options.max ) { + this._trigger( "complete" ); + } + } +}); + + +/*! + * jQuery UI Selectmenu 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/selectmenu + */ + + +var selectmenu = $.widget( "ui.selectmenu", { + version: "1.11.4", + defaultElement: "<select>", + options: { + appendTo: null, + disabled: null, + icons: { + button: "ui-icon-triangle-1-s" + }, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + width: null, + + // callbacks + change: null, + close: null, + focus: null, + open: null, + select: null + }, + + _create: function() { + var selectmenuId = this.element.uniqueId().attr( "id" ); + this.ids = { + element: selectmenuId, + button: selectmenuId + "-button", + menu: selectmenuId + "-menu" + }; + + this._drawButton(); + this._drawMenu(); + + if ( this.options.disabled ) { + this.disable(); + } + }, + + _drawButton: function() { + var that = this; + + // Associate existing label with the new button + this.label = $( "label[for='" + this.ids.element + "']" ).attr( "for", this.ids.button ); + this._on( this.label, { + click: function( event ) { + this.button.focus(); + event.preventDefault(); + } + }); + + // Hide original select element + this.element.hide(); + + // Create button + this.button = $( "<span>", { + "class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all", + tabindex: this.options.disabled ? -1 : 0, + id: this.ids.button, + role: "combobox", + "aria-expanded": "false", + "aria-autocomplete": "list", + "aria-owns": this.ids.menu, + "aria-haspopup": "true" + }) + .insertAfter( this.element ); + + $( "<span>", { + "class": "ui-icon " + this.options.icons.button + }) + .prependTo( this.button ); + + this.buttonText = $( "<span>", { + "class": "ui-selectmenu-text" + }) + .appendTo( this.button ); + + this._setText( this.buttonText, this.element.find( "option:selected" ).text() ); + this._resizeButton(); + + this._on( this.button, this._buttonEvents ); + this.button.one( "focusin", function() { + + // Delay rendering the menu items until the button receives focus. + // The menu may have already been rendered via a programmatic open. + if ( !that.menuItems ) { + that._refreshMenu(); + } + }); + this._hoverable( this.button ); + this._focusable( this.button ); + }, + + _drawMenu: function() { + var that = this; + + // Create menu + this.menu = $( "<ul>", { + "aria-hidden": "true", + "aria-labelledby": this.ids.button, + id: this.ids.menu + }); + + // Wrap menu + this.menuWrap = $( "<div>", { + "class": "ui-selectmenu-menu ui-front" + }) + .append( this.menu ) + .appendTo( this._appendTo() ); + + // Initialize menu widget + this.menuInstance = this.menu + .menu({ + role: "listbox", + select: function( event, ui ) { + event.preventDefault(); + + // support: IE8 + // If the item was selected via a click, the text selection + // will be destroyed in IE + that._setSelection(); + + that._select( ui.item.data( "ui-selectmenu-item" ), event ); + }, + focus: function( event, ui ) { + var item = ui.item.data( "ui-selectmenu-item" ); + + // Prevent inital focus from firing and check if its a newly focused item + if ( that.focusIndex != null && item.index !== that.focusIndex ) { + that._trigger( "focus", event, { item: item } ); + if ( !that.isOpen ) { + that._select( item, event ); + } + } + that.focusIndex = item.index; + + that.button.attr( "aria-activedescendant", + that.menuItems.eq( item.index ).attr( "id" ) ); + } + }) + .menu( "instance" ); + + // Adjust menu styles to dropdown + this.menu + .addClass( "ui-corner-bottom" ) + .removeClass( "ui-corner-all" ); + + // Don't close the menu on mouseleave + this.menuInstance._off( this.menu, "mouseleave" ); + + // Cancel the menu's collapseAll on document click + this.menuInstance._closeOnDocumentClick = function() { + return false; + }; + + // Selects often contain empty items, but never contain dividers + this.menuInstance._isDivider = function() { + return false; + }; + }, + + refresh: function() { + this._refreshMenu(); + this._setText( this.buttonText, this._getSelectedItem().text() ); + if ( !this.options.width ) { + this._resizeButton(); + } + }, + + _refreshMenu: function() { + this.menu.empty(); + + var item, + options = this.element.find( "option" ); + + if ( !options.length ) { + return; + } + + this._parseOptions( options ); + this._renderMenu( this.menu, this.items ); + + this.menuInstance.refresh(); + this.menuItems = this.menu.find( "li" ).not( ".ui-selectmenu-optgroup" ); + + item = this._getSelectedItem(); + + // Update the menu to have the correct item focused + this.menuInstance.focus( null, item ); + this._setAria( item.data( "ui-selectmenu-item" ) ); + + // Set disabled state + this._setOption( "disabled", this.element.prop( "disabled" ) ); + }, + + open: function( event ) { + if ( this.options.disabled ) { + return; + } + + // If this is the first time the menu is being opened, render the items + if ( !this.menuItems ) { + this._refreshMenu(); + } else { + + // Menu clears focus on close, reset focus to selected item + this.menu.find( ".ui-state-focus" ).removeClass( "ui-state-focus" ); + this.menuInstance.focus( null, this._getSelectedItem() ); + } + + this.isOpen = true; + this._toggleAttr(); + this._resizeMenu(); + this._position(); + + this._on( this.document, this._documentClick ); + + this._trigger( "open", event ); + }, + + _position: function() { + this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) ); + }, + + close: function( event ) { + if ( !this.isOpen ) { + return; + } + + this.isOpen = false; + this._toggleAttr(); + + this.range = null; + this._off( this.document ); + + this._trigger( "close", event ); + }, + + widget: function() { + return this.button; + }, + + menuWidget: function() { + return this.menu; + }, + + _renderMenu: function( ul, items ) { + var that = this, + currentOptgroup = ""; + + $.each( items, function( index, item ) { + if ( item.optgroup !== currentOptgroup ) { + $( "<li>", { + "class": "ui-selectmenu-optgroup ui-menu-divider" + + ( item.element.parent( "optgroup" ).prop( "disabled" ) ? + " ui-state-disabled" : + "" ), + text: item.optgroup + }) + .appendTo( ul ); + + currentOptgroup = item.optgroup; + } + + that._renderItemData( ul, item ); + }); + }, + + _renderItemData: function( ul, item ) { + return this._renderItem( ul, item ).data( "ui-selectmenu-item", item ); + }, + + _renderItem: function( ul, item ) { + var li = $( "<li>" ); + + if ( item.disabled ) { + li.addClass( "ui-state-disabled" ); + } + this._setText( li, item.label ); + + return li.appendTo( ul ); + }, + + _setText: function( element, value ) { + if ( value ) { + element.text( value ); + } else { + element.html( " " ); + } + }, + + _move: function( direction, event ) { + var item, next, + filter = ".ui-menu-item"; + + if ( this.isOpen ) { + item = this.menuItems.eq( this.focusIndex ); + } else { + item = this.menuItems.eq( this.element[ 0 ].selectedIndex ); + filter += ":not(.ui-state-disabled)"; + } + + if ( direction === "first" || direction === "last" ) { + next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 ); + } else { + next = item[ direction + "All" ]( filter ).eq( 0 ); + } + + if ( next.length ) { + this.menuInstance.focus( event, next ); + } + }, + + _getSelectedItem: function() { + return this.menuItems.eq( this.element[ 0 ].selectedIndex ); + }, + + _toggle: function( event ) { + this[ this.isOpen ? "close" : "open" ]( event ); + }, + + _setSelection: function() { + var selection; + + if ( !this.range ) { + return; + } + + if ( window.getSelection ) { + selection = window.getSelection(); + selection.removeAllRanges(); + selection.addRange( this.range ); + + // support: IE8 + } else { + this.range.select(); + } + + // support: IE + // Setting the text selection kills the button focus in IE, but + // restoring the focus doesn't kill the selection. + this.button.focus(); + }, + + _documentClick: { + mousedown: function( event ) { + if ( !this.isOpen ) { + return; + } + + if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" + this.ids.button ).length ) { + this.close( event ); + } + } + }, + + _buttonEvents: { + + // Prevent text selection from being reset when interacting with the selectmenu (#10144) + mousedown: function() { + var selection; + + if ( window.getSelection ) { + selection = window.getSelection(); + if ( selection.rangeCount ) { + this.range = selection.getRangeAt( 0 ); + } + + // support: IE8 + } else { + this.range = document.selection.createRange(); + } + }, + + click: function( event ) { + this._setSelection(); + this._toggle( event ); + }, + + keydown: function( event ) { + var preventDefault = true; + switch ( event.keyCode ) { + case $.ui.keyCode.TAB: + case $.ui.keyCode.ESCAPE: + this.close( event ); + preventDefault = false; + break; + case $.ui.keyCode.ENTER: + if ( this.isOpen ) { + this._selectFocusedItem( event ); + } + break; + case $.ui.keyCode.UP: + if ( event.altKey ) { + this._toggle( event ); + } else { + this._move( "prev", event ); + } + break; + case $.ui.keyCode.DOWN: + if ( event.altKey ) { + this._toggle( event ); + } else { + this._move( "next", event ); + } + break; + case $.ui.keyCode.SPACE: + if ( this.isOpen ) { + this._selectFocusedItem( event ); + } else { + this._toggle( event ); + } + break; + case $.ui.keyCode.LEFT: + this._move( "prev", event ); + break; + case $.ui.keyCode.RIGHT: + this._move( "next", event ); + break; + case $.ui.keyCode.HOME: + case $.ui.keyCode.PAGE_UP: + this._move( "first", event ); + break; + case $.ui.keyCode.END: + case $.ui.keyCode.PAGE_DOWN: + this._move( "last", event ); + break; + default: + this.menu.trigger( event ); + preventDefault = false; + } + + if ( preventDefault ) { + event.preventDefault(); + } + } + }, + + _selectFocusedItem: function( event ) { + var item = this.menuItems.eq( this.focusIndex ); + if ( !item.hasClass( "ui-state-disabled" ) ) { + this._select( item.data( "ui-selectmenu-item" ), event ); + } + }, + + _select: function( item, event ) { + var oldIndex = this.element[ 0 ].selectedIndex; + + // Change native select element + this.element[ 0 ].selectedIndex = item.index; + this._setText( this.buttonText, item.label ); + this._setAria( item ); + this._trigger( "select", event, { item: item } ); + + if ( item.index !== oldIndex ) { + this._trigger( "change", event, { item: item } ); + } + + this.close( event ); + }, + + _setAria: function( item ) { + var id = this.menuItems.eq( item.index ).attr( "id" ); + + this.button.attr({ + "aria-labelledby": id, + "aria-activedescendant": id + }); + this.menu.attr( "aria-activedescendant", id ); + }, + + _setOption: function( key, value ) { + if ( key === "icons" ) { + this.button.find( "span.ui-icon" ) + .removeClass( this.options.icons.button ) + .addClass( value.button ); + } + + this._super( key, value ); + + if ( key === "appendTo" ) { + this.menuWrap.appendTo( this._appendTo() ); + } + + if ( key === "disabled" ) { + this.menuInstance.option( "disabled", value ); + this.button + .toggleClass( "ui-state-disabled", value ) + .attr( "aria-disabled", value ); + + this.element.prop( "disabled", value ); + if ( value ) { + this.button.attr( "tabindex", -1 ); + this.close(); + } else { + this.button.attr( "tabindex", 0 ); + } + } + + if ( key === "width" ) { + this._resizeButton(); + } + }, + + _appendTo: function() { + var element = this.options.appendTo; + + if ( element ) { + element = element.jquery || element.nodeType ? + $( element ) : + this.document.find( element ).eq( 0 ); + } + + if ( !element || !element[ 0 ] ) { + element = this.element.closest( ".ui-front" ); + } + + if ( !element.length ) { + element = this.document[ 0 ].body; + } + + return element; + }, + + _toggleAttr: function() { + this.button + .toggleClass( "ui-corner-top", this.isOpen ) + .toggleClass( "ui-corner-all", !this.isOpen ) + .attr( "aria-expanded", this.isOpen ); + this.menuWrap.toggleClass( "ui-selectmenu-open", this.isOpen ); + this.menu.attr( "aria-hidden", !this.isOpen ); + }, + + _resizeButton: function() { + var width = this.options.width; + + if ( !width ) { + width = this.element.show().outerWidth(); + this.element.hide(); + } + + this.button.outerWidth( width ); + }, + + _resizeMenu: function() { + this.menu.outerWidth( Math.max( + this.button.outerWidth(), + + // support: IE10 + // IE10 wraps long text (possibly a rounding bug) + // so we add 1px to avoid the wrapping + this.menu.width( "" ).outerWidth() + 1 + ) ); + }, + + _getCreateOptions: function() { + return { disabled: this.element.prop( "disabled" ) }; + }, + + _parseOptions: function( options ) { + var data = []; + options.each(function( index, item ) { + var option = $( item ), + optgroup = option.parent( "optgroup" ); + data.push({ + element: option, + index: index, + value: option.val(), + label: option.text(), + optgroup: optgroup.attr( "label" ) || "", + disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" ) + }); + }); + this.items = data; + }, + + _destroy: function() { + this.menuWrap.remove(); + this.button.remove(); + this.element.show(); + this.element.removeUniqueId(); + this.label.attr( "for", this.ids.element ); + } +}); + + +/*! + * jQuery UI Slider 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/slider/ + */ + + +var slider = $.widget( "ui.slider", $.ui.mouse, { + version: "1.11.4", + widgetEventPrefix: "slide", + + options: { + animate: false, + distance: 0, + max: 100, + min: 0, + orientation: "horizontal", + range: false, + step: 1, + value: 0, + values: null, + + // callbacks + change: null, + slide: null, + start: null, + stop: null + }, + + // number of pages in a slider + // (how many times can you page up/down to go through the whole range) + numPages: 5, + + _create: function() { + this._keySliding = false; + this._mouseSliding = false; + this._animateOff = true; + this._handleIndex = null; + this._detectOrientation(); + this._mouseInit(); + this._calculateNewMax(); + + this.element + .addClass( "ui-slider" + + " ui-slider-" + this.orientation + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all"); + + this._refresh(); + this._setOption( "disabled", this.options.disabled ); + + this._animateOff = false; + }, + + _refresh: function() { + this._createRange(); + this._createHandles(); + this._setupEvents(); + this._refreshValue(); + }, + + _createHandles: function() { + var i, handleCount, + options = this.options, + existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ), + handle = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>", + handles = []; + + handleCount = ( options.values && options.values.length ) || 1; + + if ( existingHandles.length > handleCount ) { + existingHandles.slice( handleCount ).remove(); + existingHandles = existingHandles.slice( 0, handleCount ); + } + + for ( i = existingHandles.length; i < handleCount; i++ ) { + handles.push( handle ); + } + + this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) ); + + this.handle = this.handles.eq( 0 ); + + this.handles.each(function( i ) { + $( this ).data( "ui-slider-handle-index", i ); + }); + }, + + _createRange: function() { + var options = this.options, + classes = ""; + + if ( options.range ) { + if ( options.range === true ) { + if ( !options.values ) { + options.values = [ this._valueMin(), this._valueMin() ]; + } else if ( options.values.length && options.values.length !== 2 ) { + options.values = [ options.values[0], options.values[0] ]; + } else if ( $.isArray( options.values ) ) { + options.values = options.values.slice(0); + } + } + + if ( !this.range || !this.range.length ) { + this.range = $( "<div></div>" ) + .appendTo( this.element ); + + classes = "ui-slider-range" + + // note: this isn't the most fittingly semantic framework class for this element, + // but worked best visually with a variety of themes + " ui-widget-header ui-corner-all"; + } else { + this.range.removeClass( "ui-slider-range-min ui-slider-range-max" ) + // Handle range switching from true to min/max + .css({ + "left": "", + "bottom": "" + }); + } + + this.range.addClass( classes + + ( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) ); + } else { + if ( this.range ) { + this.range.remove(); + } + this.range = null; + } + }, + + _setupEvents: function() { + this._off( this.handles ); + this._on( this.handles, this._handleEvents ); + this._hoverable( this.handles ); + this._focusable( this.handles ); + }, + + _destroy: function() { + this.handles.remove(); + if ( this.range ) { + this.range.remove(); + } + + this.element + .removeClass( "ui-slider" + + " ui-slider-horizontal" + + " ui-slider-vertical" + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ); + + this._mouseDestroy(); + }, + + _mouseCapture: function( event ) { + var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle, + that = this, + o = this.options; + + if ( o.disabled ) { + return false; + } + + this.elementSize = { + width: this.element.outerWidth(), + height: this.element.outerHeight() + }; + this.elementOffset = this.element.offset(); + + position = { x: event.pageX, y: event.pageY }; + normValue = this._normValueFromMouse( position ); + distance = this._valueMax() - this._valueMin() + 1; + this.handles.each(function( i ) { + var thisDistance = Math.abs( normValue - that.values(i) ); + if (( distance > thisDistance ) || + ( distance === thisDistance && + (i === that._lastChangedValue || that.values(i) === o.min ))) { + distance = thisDistance; + closestHandle = $( this ); + index = i; + } + }); + + allowed = this._start( event, index ); + if ( allowed === false ) { + return false; + } + this._mouseSliding = true; + + this._handleIndex = index; + + closestHandle + .addClass( "ui-state-active" ) + .focus(); + + offset = closestHandle.offset(); + mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" ); + this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { + left: event.pageX - offset.left - ( closestHandle.width() / 2 ), + top: event.pageY - offset.top - + ( closestHandle.height() / 2 ) - + ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - + ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + + ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) + }; + + if ( !this.handles.hasClass( "ui-state-hover" ) ) { + this._slide( event, index, normValue ); + } + this._animateOff = true; + return true; + }, + + _mouseStart: function() { + return true; + }, + + _mouseDrag: function( event ) { + var position = { x: event.pageX, y: event.pageY }, + normValue = this._normValueFromMouse( position ); + + this._slide( event, this._handleIndex, normValue ); + + return false; + }, + + _mouseStop: function( event ) { + this.handles.removeClass( "ui-state-active" ); + this._mouseSliding = false; + + this._stop( event, this._handleIndex ); + this._change( event, this._handleIndex ); + + this._handleIndex = null; + this._clickOffset = null; + this._animateOff = false; + + return false; + }, + + _detectOrientation: function() { + this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; + }, + + _normValueFromMouse: function( position ) { + var pixelTotal, + pixelMouse, + percentMouse, + valueTotal, + valueMouse; + + if ( this.orientation === "horizontal" ) { + pixelTotal = this.elementSize.width; + pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); + } else { + pixelTotal = this.elementSize.height; + pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); + } + + percentMouse = ( pixelMouse / pixelTotal ); + if ( percentMouse > 1 ) { + percentMouse = 1; + } + if ( percentMouse < 0 ) { + percentMouse = 0; + } + if ( this.orientation === "vertical" ) { + percentMouse = 1 - percentMouse; + } + + valueTotal = this._valueMax() - this._valueMin(); + valueMouse = this._valueMin() + percentMouse * valueTotal; + + return this._trimAlignValue( valueMouse ); + }, + + _start: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + return this._trigger( "start", event, uiHash ); + }, + + _slide: function( event, index, newVal ) { + var otherVal, + newValues, + allowed; + + if ( this.options.values && this.options.values.length ) { + otherVal = this.values( index ? 0 : 1 ); + + if ( ( this.options.values.length === 2 && this.options.range === true ) && + ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) + ) { + newVal = otherVal; + } + + if ( newVal !== this.values( index ) ) { + newValues = this.values(); + newValues[ index ] = newVal; + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal, + values: newValues + } ); + otherVal = this.values( index ? 0 : 1 ); + if ( allowed !== false ) { + this.values( index, newVal ); + } + } + } else { + if ( newVal !== this.value() ) { + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal + } ); + if ( allowed !== false ) { + this.value( newVal ); + } + } + } + }, + + _stop: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "stop", event, uiHash ); + }, + + _change: function( event, index ) { + if ( !this._keySliding && !this._mouseSliding ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + //store the last changed value index for reference when handles overlap + this._lastChangedValue = index; + + this._trigger( "change", event, uiHash ); + } + }, + + value: function( newValue ) { + if ( arguments.length ) { + this.options.value = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, 0 ); + return; + } + + return this._value(); + }, + + values: function( index, newValue ) { + var vals, + newValues, + i; + + if ( arguments.length > 1 ) { + this.options.values[ index ] = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, index ); + return; + } + + if ( arguments.length ) { + if ( $.isArray( arguments[ 0 ] ) ) { + vals = this.options.values; + newValues = arguments[ 0 ]; + for ( i = 0; i < vals.length; i += 1 ) { + vals[ i ] = this._trimAlignValue( newValues[ i ] ); + this._change( null, i ); + } + this._refreshValue(); + } else { + if ( this.options.values && this.options.values.length ) { + return this._values( index ); + } else { + return this.value(); + } + } + } else { + return this._values(); + } + }, + + _setOption: function( key, value ) { + var i, + valsLength = 0; + + if ( key === "range" && this.options.range === true ) { + if ( value === "min" ) { + this.options.value = this._values( 0 ); + this.options.values = null; + } else if ( value === "max" ) { + this.options.value = this._values( this.options.values.length - 1 ); + this.options.values = null; + } + } + + if ( $.isArray( this.options.values ) ) { + valsLength = this.options.values.length; + } + + if ( key === "disabled" ) { + this.element.toggleClass( "ui-state-disabled", !!value ); + } + + this._super( key, value ); + + switch ( key ) { + case "orientation": + this._detectOrientation(); + this.element + .removeClass( "ui-slider-horizontal ui-slider-vertical" ) + .addClass( "ui-slider-" + this.orientation ); + this._refreshValue(); + + // Reset positioning from previous orientation + this.handles.css( value === "horizontal" ? "bottom" : "left", "" ); + break; + case "value": + this._animateOff = true; + this._refreshValue(); + this._change( null, 0 ); + this._animateOff = false; + break; + case "values": + this._animateOff = true; + this._refreshValue(); + for ( i = 0; i < valsLength; i += 1 ) { + this._change( null, i ); + } + this._animateOff = false; + break; + case "step": + case "min": + case "max": + this._animateOff = true; + this._calculateNewMax(); + this._refreshValue(); + this._animateOff = false; + break; + case "range": + this._animateOff = true; + this._refresh(); + this._animateOff = false; + break; + } + }, + + //internal value getter + // _value() returns value trimmed by min and max, aligned by step + _value: function() { + var val = this.options.value; + val = this._trimAlignValue( val ); + + return val; + }, + + //internal values getter + // _values() returns array of values trimmed by min and max, aligned by step + // _values( index ) returns single value trimmed by min and max, aligned by step + _values: function( index ) { + var val, + vals, + i; + + if ( arguments.length ) { + val = this.options.values[ index ]; + val = this._trimAlignValue( val ); + + return val; + } else if ( this.options.values && this.options.values.length ) { + // .slice() creates a copy of the array + // this copy gets trimmed by min and max and then returned + vals = this.options.values.slice(); + for ( i = 0; i < vals.length; i += 1) { + vals[ i ] = this._trimAlignValue( vals[ i ] ); + } + + return vals; + } else { + return []; + } + }, + + // returns the step-aligned value that val is closest to, between (inclusive) min and max + _trimAlignValue: function( val ) { + if ( val <= this._valueMin() ) { + return this._valueMin(); + } + if ( val >= this._valueMax() ) { + return this._valueMax(); + } + var step = ( this.options.step > 0 ) ? this.options.step : 1, + valModStep = (val - this._valueMin()) % step, + alignValue = val - valModStep; + + if ( Math.abs(valModStep) * 2 >= step ) { + alignValue += ( valModStep > 0 ) ? step : ( -step ); + } + + // Since JavaScript has problems with large floats, round + // the final value to 5 digits after the decimal point (see #4124) + return parseFloat( alignValue.toFixed(5) ); + }, + + _calculateNewMax: function() { + var max = this.options.max, + min = this._valueMin(), + step = this.options.step, + aboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step; + max = aboveMin + min; + this.max = parseFloat( max.toFixed( this._precision() ) ); + }, + + _precision: function() { + var precision = this._precisionOf( this.options.step ); + if ( this.options.min !== null ) { + precision = Math.max( precision, this._precisionOf( this.options.min ) ); + } + return precision; + }, + + _precisionOf: function( num ) { + var str = num.toString(), + decimal = str.indexOf( "." ); + return decimal === -1 ? 0 : str.length - decimal - 1; + }, + + _valueMin: function() { + return this.options.min; + }, + + _valueMax: function() { + return this.max; + }, + + _refreshValue: function() { + var lastValPercent, valPercent, value, valueMin, valueMax, + oRange = this.options.range, + o = this.options, + that = this, + animate = ( !this._animateOff ) ? o.animate : false, + _set = {}; + + if ( this.options.values && this.options.values.length ) { + this.handles.each(function( i ) { + valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100; + _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + if ( that.options.range === true ) { + if ( that.orientation === "horizontal" ) { + if ( i === 0 ) { + that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); + } + if ( i === 1 ) { + that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } else { + if ( i === 0 ) { + that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); + } + if ( i === 1 ) { + that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + lastValPercent = valPercent; + }); + } else { + value = this.value(); + valueMin = this._valueMin(); + valueMax = this._valueMax(); + valPercent = ( valueMax !== valueMin ) ? + ( value - valueMin ) / ( valueMax - valueMin ) * 100 : + 0; + _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + + if ( oRange === "min" && this.orientation === "horizontal" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "horizontal" ) { + this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + if ( oRange === "min" && this.orientation === "vertical" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "vertical" ) { + this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + }, + + _handleEvents: { + keydown: function( event ) { + var allowed, curVal, newVal, step, + index = $( event.target ).data( "ui-slider-handle-index" ); + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + case $.ui.keyCode.END: + case $.ui.keyCode.PAGE_UP: + case $.ui.keyCode.PAGE_DOWN: + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + event.preventDefault(); + if ( !this._keySliding ) { + this._keySliding = true; + $( event.target ).addClass( "ui-state-active" ); + allowed = this._start( event, index ); + if ( allowed === false ) { + return; + } + } + break; + } + + step = this.options.step; + if ( this.options.values && this.options.values.length ) { + curVal = newVal = this.values( index ); + } else { + curVal = newVal = this.value(); + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + newVal = this._valueMin(); + break; + case $.ui.keyCode.END: + newVal = this._valueMax(); + break; + case $.ui.keyCode.PAGE_UP: + newVal = this._trimAlignValue( + curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages ) + ); + break; + case $.ui.keyCode.PAGE_DOWN: + newVal = this._trimAlignValue( + curVal - ( (this._valueMax() - this._valueMin()) / this.numPages ) ); + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + if ( curVal === this._valueMax() ) { + return; + } + newVal = this._trimAlignValue( curVal + step ); + break; + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + if ( curVal === this._valueMin() ) { + return; + } + newVal = this._trimAlignValue( curVal - step ); + break; + } + + this._slide( event, index, newVal ); + }, + keyup: function( event ) { + var index = $( event.target ).data( "ui-slider-handle-index" ); + + if ( this._keySliding ) { + this._keySliding = false; + this._stop( event, index ); + this._change( event, index ); + $( event.target ).removeClass( "ui-state-active" ); + } + } + } +}); + + +/*! + * jQuery UI Spinner 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/spinner/ + */ + + +function spinner_modifier( fn ) { + return function() { + var previous = this.element.val(); + fn.apply( this, arguments ); + this._refresh(); + if ( previous !== this.element.val() ) { + this._trigger( "change" ); + } + }; +} + +var spinner = $.widget( "ui.spinner", { + version: "1.11.4", + defaultElement: "<input>", + widgetEventPrefix: "spin", + options: { + culture: null, + icons: { + down: "ui-icon-triangle-1-s", + up: "ui-icon-triangle-1-n" + }, + incremental: true, + max: null, + min: null, + numberFormat: null, + page: 10, + step: 1, + + change: null, + spin: null, + start: null, + stop: null + }, + + _create: function() { + // handle string values that need to be parsed + this._setOption( "max", this.options.max ); + this._setOption( "min", this.options.min ); + this._setOption( "step", this.options.step ); + + // Only format if there is a value, prevents the field from being marked + // as invalid in Firefox, see #9573. + if ( this.value() !== "" ) { + // Format the value, but don't constrain. + this._value( this.element.val(), true ); + } + + this._draw(); + this._on( this._events ); + this._refresh(); + + // turning off autocomplete prevents the browser from remembering the + // value when navigating through history, so we re-enable autocomplete + // if the page is unloaded before the widget is destroyed. #7790 + this._on( this.window, { + beforeunload: function() { + this.element.removeAttr( "autocomplete" ); + } + }); + }, + + _getCreateOptions: function() { + var options = {}, + element = this.element; + + $.each( [ "min", "max", "step" ], function( i, option ) { + var value = element.attr( option ); + if ( value !== undefined && value.length ) { + options[ option ] = value; + } + }); + + return options; + }, + + _events: { + keydown: function( event ) { + if ( this._start( event ) && this._keydown( event ) ) { + event.preventDefault(); + } + }, + keyup: "_stop", + focus: function() { + this.previous = this.element.val(); + }, + blur: function( event ) { + if ( this.cancelBlur ) { + delete this.cancelBlur; + return; + } + + this._stop(); + this._refresh(); + if ( this.previous !== this.element.val() ) { + this._trigger( "change", event ); + } + }, + mousewheel: function( event, delta ) { + if ( !delta ) { + return; + } + if ( !this.spinning && !this._start( event ) ) { + return false; + } + + this._spin( (delta > 0 ? 1 : -1) * this.options.step, event ); + clearTimeout( this.mousewheelTimer ); + this.mousewheelTimer = this._delay(function() { + if ( this.spinning ) { + this._stop( event ); + } + }, 100 ); + event.preventDefault(); + }, + "mousedown .ui-spinner-button": function( event ) { + var previous; + + // We never want the buttons to have focus; whenever the user is + // interacting with the spinner, the focus should be on the input. + // If the input is focused then this.previous is properly set from + // when the input first received focus. If the input is not focused + // then we need to set this.previous based on the value before spinning. + previous = this.element[0] === this.document[0].activeElement ? + this.previous : this.element.val(); + function checkFocus() { + var isActive = this.element[0] === this.document[0].activeElement; + if ( !isActive ) { + this.element.focus(); + this.previous = previous; + // support: IE + // IE sets focus asynchronously, so we need to check if focus + // moved off of the input because the user clicked on the button. + this._delay(function() { + this.previous = previous; + }); + } + } + + // ensure focus is on (or stays on) the text field + event.preventDefault(); + checkFocus.call( this ); + + // support: IE + // IE doesn't prevent moving focus even with event.preventDefault() + // so we set a flag to know when we should ignore the blur event + // and check (again) if focus moved off of the input. + this.cancelBlur = true; + this._delay(function() { + delete this.cancelBlur; + checkFocus.call( this ); + }); + + if ( this._start( event ) === false ) { + return; + } + + this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event ); + }, + "mouseup .ui-spinner-button": "_stop", + "mouseenter .ui-spinner-button": function( event ) { + // button will add ui-state-active if mouse was down while mouseleave and kept down + if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) { + return; + } + + if ( this._start( event ) === false ) { + return false; + } + this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event ); + }, + // TODO: do we really want to consider this a stop? + // shouldn't we just stop the repeater and wait until mouseup before + // we trigger the stop event? + "mouseleave .ui-spinner-button": "_stop" + }, + + _draw: function() { + var uiSpinner = this.uiSpinner = this.element + .addClass( "ui-spinner-input" ) + .attr( "autocomplete", "off" ) + .wrap( this._uiSpinnerHtml() ) + .parent() + // add buttons + .append( this._buttonHtml() ); + + this.element.attr( "role", "spinbutton" ); + + // button bindings + this.buttons = uiSpinner.find( ".ui-spinner-button" ) + .attr( "tabIndex", -1 ) + .button() + .removeClass( "ui-corner-all" ); + + // IE 6 doesn't understand height: 50% for the buttons + // unless the wrapper has an explicit height + if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) && + uiSpinner.height() > 0 ) { + uiSpinner.height( uiSpinner.height() ); + } + + // disable spinner if element was already disabled + if ( this.options.disabled ) { + this.disable(); + } + }, + + _keydown: function( event ) { + var options = this.options, + keyCode = $.ui.keyCode; + + switch ( event.keyCode ) { + case keyCode.UP: + this._repeat( null, 1, event ); + return true; + case keyCode.DOWN: + this._repeat( null, -1, event ); + return true; + case keyCode.PAGE_UP: + this._repeat( null, options.page, event ); + return true; + case keyCode.PAGE_DOWN: + this._repeat( null, -options.page, event ); + return true; + } + + return false; + }, + + _uiSpinnerHtml: function() { + return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"; + }, + + _buttonHtml: function() { + return "" + + "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" + + "<span class='ui-icon " + this.options.icons.up + "'>▲</span>" + + "</a>" + + "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" + + "<span class='ui-icon " + this.options.icons.down + "'>▼</span>" + + "</a>"; + }, + + _start: function( event ) { + if ( !this.spinning && this._trigger( "start", event ) === false ) { + return false; + } + + if ( !this.counter ) { + this.counter = 1; + } + this.spinning = true; + return true; + }, + + _repeat: function( i, steps, event ) { + i = i || 500; + + clearTimeout( this.timer ); + this.timer = this._delay(function() { + this._repeat( 40, steps, event ); + }, i ); + + this._spin( steps * this.options.step, event ); + }, + + _spin: function( step, event ) { + var value = this.value() || 0; + + if ( !this.counter ) { + this.counter = 1; + } + + value = this._adjustValue( value + step * this._increment( this.counter ) ); + + if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) { + this._value( value ); + this.counter++; + } + }, + + _increment: function( i ) { + var incremental = this.options.incremental; + + if ( incremental ) { + return $.isFunction( incremental ) ? + incremental( i ) : + Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 ); + } + + return 1; + }, + + _precision: function() { + var precision = this._precisionOf( this.options.step ); + if ( this.options.min !== null ) { + precision = Math.max( precision, this._precisionOf( this.options.min ) ); + } + return precision; + }, + + _precisionOf: function( num ) { + var str = num.toString(), + decimal = str.indexOf( "." ); + return decimal === -1 ? 0 : str.length - decimal - 1; + }, + + _adjustValue: function( value ) { + var base, aboveMin, + options = this.options; + + // make sure we're at a valid step + // - find out where we are relative to the base (min or 0) + base = options.min !== null ? options.min : 0; + aboveMin = value - base; + // - round to the nearest step + aboveMin = Math.round(aboveMin / options.step) * options.step; + // - rounding is based on 0, so adjust back to our base + value = base + aboveMin; + + // fix precision from bad JS floating point math + value = parseFloat( value.toFixed( this._precision() ) ); + + // clamp the value + if ( options.max !== null && value > options.max) { + return options.max; + } + if ( options.min !== null && value < options.min ) { + return options.min; + } + + return value; + }, + + _stop: function( event ) { + if ( !this.spinning ) { + return; + } + + clearTimeout( this.timer ); + clearTimeout( this.mousewheelTimer ); + this.counter = 0; + this.spinning = false; + this._trigger( "stop", event ); + }, + + _setOption: function( key, value ) { + if ( key === "culture" || key === "numberFormat" ) { + var prevValue = this._parse( this.element.val() ); + this.options[ key ] = value; + this.element.val( this._format( prevValue ) ); + return; + } + + if ( key === "max" || key === "min" || key === "step" ) { + if ( typeof value === "string" ) { + value = this._parse( value ); + } + } + if ( key === "icons" ) { + this.buttons.first().find( ".ui-icon" ) + .removeClass( this.options.icons.up ) + .addClass( value.up ); + this.buttons.last().find( ".ui-icon" ) + .removeClass( this.options.icons.down ) + .addClass( value.down ); + } + + this._super( key, value ); + + if ( key === "disabled" ) { + this.widget().toggleClass( "ui-state-disabled", !!value ); + this.element.prop( "disabled", !!value ); + this.buttons.button( value ? "disable" : "enable" ); + } + }, + + _setOptions: spinner_modifier(function( options ) { + this._super( options ); + }), + + _parse: function( val ) { + if ( typeof val === "string" && val !== "" ) { + val = window.Globalize && this.options.numberFormat ? + Globalize.parseFloat( val, 10, this.options.culture ) : +val; + } + return val === "" || isNaN( val ) ? null : val; + }, + + _format: function( value ) { + if ( value === "" ) { + return ""; + } + return window.Globalize && this.options.numberFormat ? + Globalize.format( value, this.options.numberFormat, this.options.culture ) : + value; + }, + + _refresh: function() { + this.element.attr({ + "aria-valuemin": this.options.min, + "aria-valuemax": this.options.max, + // TODO: what should we do with values that can't be parsed? + "aria-valuenow": this._parse( this.element.val() ) + }); + }, + + isValid: function() { + var value = this.value(); + + // null is invalid + if ( value === null ) { + return false; + } + + // if value gets adjusted, it's invalid + return value === this._adjustValue( value ); + }, + + // update the value without triggering change + _value: function( value, allowAny ) { + var parsed; + if ( value !== "" ) { + parsed = this._parse( value ); + if ( parsed !== null ) { + if ( !allowAny ) { + parsed = this._adjustValue( parsed ); + } + value = this._format( parsed ); + } + } + this.element.val( value ); + this._refresh(); + }, + + _destroy: function() { + this.element + .removeClass( "ui-spinner-input" ) + .prop( "disabled", false ) + .removeAttr( "autocomplete" ) + .removeAttr( "role" ) + .removeAttr( "aria-valuemin" ) + .removeAttr( "aria-valuemax" ) + .removeAttr( "aria-valuenow" ); + this.uiSpinner.replaceWith( this.element ); + }, + + stepUp: spinner_modifier(function( steps ) { + this._stepUp( steps ); + }), + _stepUp: function( steps ) { + if ( this._start() ) { + this._spin( (steps || 1) * this.options.step ); + this._stop(); + } + }, + + stepDown: spinner_modifier(function( steps ) { + this._stepDown( steps ); + }), + _stepDown: function( steps ) { + if ( this._start() ) { + this._spin( (steps || 1) * -this.options.step ); + this._stop(); + } + }, + + pageUp: spinner_modifier(function( pages ) { + this._stepUp( (pages || 1) * this.options.page ); + }), + + pageDown: spinner_modifier(function( pages ) { + this._stepDown( (pages || 1) * this.options.page ); + }), + + value: function( newVal ) { + if ( !arguments.length ) { + return this._parse( this.element.val() ); + } + spinner_modifier( this._value ).call( this, newVal ); + }, + + widget: function() { + return this.uiSpinner; + } +}); + + +/*! + * jQuery UI Tabs 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/tabs/ + */ + + +var tabs = $.widget( "ui.tabs", { + version: "1.11.4", + delay: 300, + options: { + active: null, + collapsible: false, + event: "click", + heightStyle: "content", + hide: null, + show: null, + + // callbacks + activate: null, + beforeActivate: null, + beforeLoad: null, + load: null + }, + + _isLocal: (function() { + var rhash = /#.*$/; + + return function( anchor ) { + var anchorUrl, locationUrl; + + // support: IE7 + // IE7 doesn't normalize the href property when set via script (#9317) + anchor = anchor.cloneNode( false ); + + anchorUrl = anchor.href.replace( rhash, "" ); + locationUrl = location.href.replace( rhash, "" ); + + // decoding may throw an error if the URL isn't UTF-8 (#9518) + try { + anchorUrl = decodeURIComponent( anchorUrl ); + } catch ( error ) {} + try { + locationUrl = decodeURIComponent( locationUrl ); + } catch ( error ) {} + + return anchor.hash.length > 1 && anchorUrl === locationUrl; + }; + })(), + + _create: function() { + var that = this, + options = this.options; + + this.running = false; + + this.element + .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ) + .toggleClass( "ui-tabs-collapsible", options.collapsible ); + + this._processTabs(); + options.active = this._initialActive(); + + // Take disabling tabs via class attribute from HTML + // into account and update option properly. + if ( $.isArray( options.disabled ) ) { + options.disabled = $.unique( options.disabled.concat( + $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) { + return that.tabs.index( li ); + }) + ) ).sort(); + } + + // check for length avoids error when initializing empty list + if ( this.options.active !== false && this.anchors.length ) { + this.active = this._findActive( options.active ); + } else { + this.active = $(); + } + + this._refresh(); + + if ( this.active.length ) { + this.load( options.active ); + } + }, + + _initialActive: function() { + var active = this.options.active, + collapsible = this.options.collapsible, + locationHash = location.hash.substring( 1 ); + + if ( active === null ) { + // check the fragment identifier in the URL + if ( locationHash ) { + this.tabs.each(function( i, tab ) { + if ( $( tab ).attr( "aria-controls" ) === locationHash ) { + active = i; + return false; + } + }); + } + + // check for a tab marked active via a class + if ( active === null ) { + active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) ); + } + + // no active tab, set to false + if ( active === null || active === -1 ) { + active = this.tabs.length ? 0 : false; + } + } + + // handle numbers: negative, out of range + if ( active !== false ) { + active = this.tabs.index( this.tabs.eq( active ) ); + if ( active === -1 ) { + active = collapsible ? false : 0; + } + } + + // don't allow collapsible: false and active: false + if ( !collapsible && active === false && this.anchors.length ) { + active = 0; + } + + return active; + }, + + _getCreateEventData: function() { + return { + tab: this.active, + panel: !this.active.length ? $() : this._getPanelForTab( this.active ) + }; + }, + + _tabKeydown: function( event ) { + var focusedTab = $( this.document[0].activeElement ).closest( "li" ), + selectedIndex = this.tabs.index( focusedTab ), + goingForward = true; + + if ( this._handlePageNav( event ) ) { + return; + } + + switch ( event.keyCode ) { + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + selectedIndex++; + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.LEFT: + goingForward = false; + selectedIndex--; + break; + case $.ui.keyCode.END: + selectedIndex = this.anchors.length - 1; + break; + case $.ui.keyCode.HOME: + selectedIndex = 0; + break; + case $.ui.keyCode.SPACE: + // Activate only, no collapsing + event.preventDefault(); + clearTimeout( this.activating ); + this._activate( selectedIndex ); + return; + case $.ui.keyCode.ENTER: + // Toggle (cancel delayed activation, allow collapsing) + event.preventDefault(); + clearTimeout( this.activating ); + // Determine if we should collapse or activate + this._activate( selectedIndex === this.options.active ? false : selectedIndex ); + return; + default: + return; + } + + // Focus the appropriate tab, based on which key was pressed + event.preventDefault(); + clearTimeout( this.activating ); + selectedIndex = this._focusNextTab( selectedIndex, goingForward ); + + // Navigating with control/command key will prevent automatic activation + if ( !event.ctrlKey && !event.metaKey ) { + + // Update aria-selected immediately so that AT think the tab is already selected. + // Otherwise AT may confuse the user by stating that they need to activate the tab, + // but the tab will already be activated by the time the announcement finishes. + focusedTab.attr( "aria-selected", "false" ); + this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" ); + + this.activating = this._delay(function() { + this.option( "active", selectedIndex ); + }, this.delay ); + } + }, + + _panelKeydown: function( event ) { + if ( this._handlePageNav( event ) ) { + return; + } + + // Ctrl+up moves focus to the current tab + if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) { + event.preventDefault(); + this.active.focus(); + } + }, + + // Alt+page up/down moves focus to the previous/next tab (and activates) + _handlePageNav: function( event ) { + if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) { + this._activate( this._focusNextTab( this.options.active - 1, false ) ); + return true; + } + if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) { + this._activate( this._focusNextTab( this.options.active + 1, true ) ); + return true; + } + }, + + _findNextTab: function( index, goingForward ) { + var lastTabIndex = this.tabs.length - 1; + + function constrain() { + if ( index > lastTabIndex ) { + index = 0; + } + if ( index < 0 ) { + index = lastTabIndex; + } + return index; + } + + while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) { + index = goingForward ? index + 1 : index - 1; + } + + return index; + }, + + _focusNextTab: function( index, goingForward ) { + index = this._findNextTab( index, goingForward ); + this.tabs.eq( index ).focus(); + return index; + }, + + _setOption: function( key, value ) { + if ( key === "active" ) { + // _activate() will handle invalid values and update this.options + this._activate( value ); + return; + } + + if ( key === "disabled" ) { + // don't use the widget factory's disabled handling + this._setupDisabled( value ); + return; + } + + this._super( key, value); + + if ( key === "collapsible" ) { + this.element.toggleClass( "ui-tabs-collapsible", value ); + // Setting collapsible: false while collapsed; open first panel + if ( !value && this.options.active === false ) { + this._activate( 0 ); + } + } + + if ( key === "event" ) { + this._setupEvents( value ); + } + + if ( key === "heightStyle" ) { + this._setupHeightStyle( value ); + } + }, + + _sanitizeSelector: function( hash ) { + return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : ""; + }, + + refresh: function() { + var options = this.options, + lis = this.tablist.children( ":has(a[href])" ); + + // get disabled tabs from class attribute from HTML + // this will get converted to a boolean if needed in _refresh() + options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) { + return lis.index( tab ); + }); + + this._processTabs(); + + // was collapsed or no tabs + if ( options.active === false || !this.anchors.length ) { + options.active = false; + this.active = $(); + // was active, but active tab is gone + } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) { + // all remaining tabs are disabled + if ( this.tabs.length === options.disabled.length ) { + options.active = false; + this.active = $(); + // activate previous tab + } else { + this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) ); + } + // was active, active tab still exists + } else { + // make sure active index is correct + options.active = this.tabs.index( this.active ); + } + + this._refresh(); + }, + + _refresh: function() { + this._setupDisabled( this.options.disabled ); + this._setupEvents( this.options.event ); + this._setupHeightStyle( this.options.heightStyle ); + + this.tabs.not( this.active ).attr({ + "aria-selected": "false", + "aria-expanded": "false", + tabIndex: -1 + }); + this.panels.not( this._getPanelForTab( this.active ) ) + .hide() + .attr({ + "aria-hidden": "true" + }); + + // Make sure one tab is in the tab order + if ( !this.active.length ) { + this.tabs.eq( 0 ).attr( "tabIndex", 0 ); + } else { + this.active + .addClass( "ui-tabs-active ui-state-active" ) + .attr({ + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + }); + this._getPanelForTab( this.active ) + .show() + .attr({ + "aria-hidden": "false" + }); + } + }, + + _processTabs: function() { + var that = this, + prevTabs = this.tabs, + prevAnchors = this.anchors, + prevPanels = this.panels; + + this.tablist = this._getList() + .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ) + .attr( "role", "tablist" ) + + // Prevent users from focusing disabled tabs via click + .delegate( "> li", "mousedown" + this.eventNamespace, function( event ) { + if ( $( this ).is( ".ui-state-disabled" ) ) { + event.preventDefault(); + } + }) + + // support: IE <9 + // Preventing the default action in mousedown doesn't prevent IE + // from focusing the element, so if the anchor gets focused, blur. + // We don't have to worry about focusing the previously focused + // element since clicking on a non-focusable element should focus + // the body anyway. + .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() { + if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) { + this.blur(); + } + }); + + this.tabs = this.tablist.find( "> li:has(a[href])" ) + .addClass( "ui-state-default ui-corner-top" ) + .attr({ + role: "tab", + tabIndex: -1 + }); + + this.anchors = this.tabs.map(function() { + return $( "a", this )[ 0 ]; + }) + .addClass( "ui-tabs-anchor" ) + .attr({ + role: "presentation", + tabIndex: -1 + }); + + this.panels = $(); + + this.anchors.each(function( i, anchor ) { + var selector, panel, panelId, + anchorId = $( anchor ).uniqueId().attr( "id" ), + tab = $( anchor ).closest( "li" ), + originalAriaControls = tab.attr( "aria-controls" ); + + // inline tab + if ( that._isLocal( anchor ) ) { + selector = anchor.hash; + panelId = selector.substring( 1 ); + panel = that.element.find( that._sanitizeSelector( selector ) ); + // remote tab + } else { + // If the tab doesn't already have aria-controls, + // generate an id by using a throw-away element + panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id; + selector = "#" + panelId; + panel = that.element.find( selector ); + if ( !panel.length ) { + panel = that._createPanel( panelId ); + panel.insertAfter( that.panels[ i - 1 ] || that.tablist ); + } + panel.attr( "aria-live", "polite" ); + } + + if ( panel.length) { + that.panels = that.panels.add( panel ); + } + if ( originalAriaControls ) { + tab.data( "ui-tabs-aria-controls", originalAriaControls ); + } + tab.attr({ + "aria-controls": panelId, + "aria-labelledby": anchorId + }); + panel.attr( "aria-labelledby", anchorId ); + }); + + this.panels + .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) + .attr( "role", "tabpanel" ); + + // Avoid memory leaks (#10056) + if ( prevTabs ) { + this._off( prevTabs.not( this.tabs ) ); + this._off( prevAnchors.not( this.anchors ) ); + this._off( prevPanels.not( this.panels ) ); + } + }, + + // allow overriding how to find the list for rare usage scenarios (#7715) + _getList: function() { + return this.tablist || this.element.find( "ol,ul" ).eq( 0 ); + }, + + _createPanel: function( id ) { + return $( "<div>" ) + .attr( "id", id ) + .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) + .data( "ui-tabs-destroy", true ); + }, + + _setupDisabled: function( disabled ) { + if ( $.isArray( disabled ) ) { + if ( !disabled.length ) { + disabled = false; + } else if ( disabled.length === this.anchors.length ) { + disabled = true; + } + } + + // disable tabs + for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) { + if ( disabled === true || $.inArray( i, disabled ) !== -1 ) { + $( li ) + .addClass( "ui-state-disabled" ) + .attr( "aria-disabled", "true" ); + } else { + $( li ) + .removeClass( "ui-state-disabled" ) + .removeAttr( "aria-disabled" ); + } + } + + this.options.disabled = disabled; + }, + + _setupEvents: function( event ) { + var events = {}; + if ( event ) { + $.each( event.split(" "), function( index, eventName ) { + events[ eventName ] = "_eventHandler"; + }); + } + + this._off( this.anchors.add( this.tabs ).add( this.panels ) ); + // Always prevent the default action, even when disabled + this._on( true, this.anchors, { + click: function( event ) { + event.preventDefault(); + } + }); + this._on( this.anchors, events ); + this._on( this.tabs, { keydown: "_tabKeydown" } ); + this._on( this.panels, { keydown: "_panelKeydown" } ); + + this._focusable( this.tabs ); + this._hoverable( this.tabs ); + }, + + _setupHeightStyle: function( heightStyle ) { + var maxHeight, + parent = this.element.parent(); + + if ( heightStyle === "fill" ) { + maxHeight = parent.height(); + maxHeight -= this.element.outerHeight() - this.element.height(); + + this.element.siblings( ":visible" ).each(function() { + var elem = $( this ), + position = elem.css( "position" ); + + if ( position === "absolute" || position === "fixed" ) { + return; + } + maxHeight -= elem.outerHeight( true ); + }); + + this.element.children().not( this.panels ).each(function() { + maxHeight -= $( this ).outerHeight( true ); + }); + + this.panels.each(function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + }) + .css( "overflow", "auto" ); + } else if ( heightStyle === "auto" ) { + maxHeight = 0; + this.panels.each(function() { + maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); + }).height( maxHeight ); + } + }, + + _eventHandler: function( event ) { + var options = this.options, + active = this.active, + anchor = $( event.currentTarget ), + tab = anchor.closest( "li" ), + clickedIsActive = tab[ 0 ] === active[ 0 ], + collapsing = clickedIsActive && options.collapsible, + toShow = collapsing ? $() : this._getPanelForTab( tab ), + toHide = !active.length ? $() : this._getPanelForTab( active ), + eventData = { + oldTab: active, + oldPanel: toHide, + newTab: collapsing ? $() : tab, + newPanel: toShow + }; + + event.preventDefault(); + + if ( tab.hasClass( "ui-state-disabled" ) || + // tab is already loading + tab.hasClass( "ui-tabs-loading" ) || + // can't switch durning an animation + this.running || + // click on active header, but not collapsible + ( clickedIsActive && !options.collapsible ) || + // allow canceling activation + ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { + return; + } + + options.active = collapsing ? false : this.tabs.index( tab ); + + this.active = clickedIsActive ? $() : tab; + if ( this.xhr ) { + this.xhr.abort(); + } + + if ( !toHide.length && !toShow.length ) { + $.error( "jQuery UI Tabs: Mismatching fragment identifier." ); + } + + if ( toShow.length ) { + this.load( this.tabs.index( tab ), event ); + } + this._toggle( event, eventData ); + }, + + // handles show/hide for selecting tabs + _toggle: function( event, eventData ) { + var that = this, + toShow = eventData.newPanel, + toHide = eventData.oldPanel; + + this.running = true; + + function complete() { + that.running = false; + that._trigger( "activate", event, eventData ); + } + + function show() { + eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" ); + + if ( toShow.length && that.options.show ) { + that._show( toShow, that.options.show, complete ); + } else { + toShow.show(); + complete(); + } + } + + // start out by hiding, then showing, then completing + if ( toHide.length && this.options.hide ) { + this._hide( toHide, this.options.hide, function() { + eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); + show(); + }); + } else { + eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); + toHide.hide(); + show(); + } + + toHide.attr( "aria-hidden", "true" ); + eventData.oldTab.attr({ + "aria-selected": "false", + "aria-expanded": "false" + }); + // If we're switching tabs, remove the old tab from the tab order. + // If we're opening from collapsed state, remove the previous tab from the tab order. + // If we're collapsing, then keep the collapsing tab in the tab order. + if ( toShow.length && toHide.length ) { + eventData.oldTab.attr( "tabIndex", -1 ); + } else if ( toShow.length ) { + this.tabs.filter(function() { + return $( this ).attr( "tabIndex" ) === 0; + }) + .attr( "tabIndex", -1 ); + } + + toShow.attr( "aria-hidden", "false" ); + eventData.newTab.attr({ + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + }); + }, + + _activate: function( index ) { + var anchor, + active = this._findActive( index ); + + // trying to activate the already active panel + if ( active[ 0 ] === this.active[ 0 ] ) { + return; + } + + // trying to collapse, simulate a click on the current active header + if ( !active.length ) { + active = this.active; + } + + anchor = active.find( ".ui-tabs-anchor" )[ 0 ]; + this._eventHandler({ + target: anchor, + currentTarget: anchor, + preventDefault: $.noop + }); + }, + + _findActive: function( index ) { + return index === false ? $() : this.tabs.eq( index ); + }, + + _getIndex: function( index ) { + // meta-function to give users option to provide a href string instead of a numerical index. + if ( typeof index === "string" ) { + index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) ); + } + + return index; + }, + + _destroy: function() { + if ( this.xhr ) { + this.xhr.abort(); + } + + this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" ); + + this.tablist + .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ) + .removeAttr( "role" ); + + this.anchors + .removeClass( "ui-tabs-anchor" ) + .removeAttr( "role" ) + .removeAttr( "tabIndex" ) + .removeUniqueId(); + + this.tablist.unbind( this.eventNamespace ); + + this.tabs.add( this.panels ).each(function() { + if ( $.data( this, "ui-tabs-destroy" ) ) { + $( this ).remove(); + } else { + $( this ) + .removeClass( "ui-state-default ui-state-active ui-state-disabled " + + "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" ) + .removeAttr( "tabIndex" ) + .removeAttr( "aria-live" ) + .removeAttr( "aria-busy" ) + .removeAttr( "aria-selected" ) + .removeAttr( "aria-labelledby" ) + .removeAttr( "aria-hidden" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "role" ); + } + }); + + this.tabs.each(function() { + var li = $( this ), + prev = li.data( "ui-tabs-aria-controls" ); + if ( prev ) { + li + .attr( "aria-controls", prev ) + .removeData( "ui-tabs-aria-controls" ); + } else { + li.removeAttr( "aria-controls" ); + } + }); + + this.panels.show(); + + if ( this.options.heightStyle !== "content" ) { + this.panels.css( "height", "" ); + } + }, + + enable: function( index ) { + var disabled = this.options.disabled; + if ( disabled === false ) { + return; + } + + if ( index === undefined ) { + disabled = false; + } else { + index = this._getIndex( index ); + if ( $.isArray( disabled ) ) { + disabled = $.map( disabled, function( num ) { + return num !== index ? num : null; + }); + } else { + disabled = $.map( this.tabs, function( li, num ) { + return num !== index ? num : null; + }); + } + } + this._setupDisabled( disabled ); + }, + + disable: function( index ) { + var disabled = this.options.disabled; + if ( disabled === true ) { + return; + } + + if ( index === undefined ) { + disabled = true; + } else { + index = this._getIndex( index ); + if ( $.inArray( index, disabled ) !== -1 ) { + return; + } + if ( $.isArray( disabled ) ) { + disabled = $.merge( [ index ], disabled ).sort(); + } else { + disabled = [ index ]; + } + } + this._setupDisabled( disabled ); + }, + + load: function( index, event ) { + index = this._getIndex( index ); + var that = this, + tab = this.tabs.eq( index ), + anchor = tab.find( ".ui-tabs-anchor" ), + panel = this._getPanelForTab( tab ), + eventData = { + tab: tab, + panel: panel + }, + complete = function( jqXHR, status ) { + if ( status === "abort" ) { + that.panels.stop( false, true ); + } + + tab.removeClass( "ui-tabs-loading" ); + panel.removeAttr( "aria-busy" ); + + if ( jqXHR === that.xhr ) { + delete that.xhr; + } + }; + + // not remote + if ( this._isLocal( anchor[ 0 ] ) ) { + return; + } + + this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) ); + + // support: jQuery <1.8 + // jQuery <1.8 returns false if the request is canceled in beforeSend, + // but as of 1.8, $.ajax() always returns a jqXHR object. + if ( this.xhr && this.xhr.statusText !== "canceled" ) { + tab.addClass( "ui-tabs-loading" ); + panel.attr( "aria-busy", "true" ); + + this.xhr + .done(function( response, status, jqXHR ) { + // support: jQuery <1.8 + // http://bugs.jquery.com/ticket/11778 + setTimeout(function() { + panel.html( response ); + that._trigger( "load", event, eventData ); + + complete( jqXHR, status ); + }, 1 ); + }) + .fail(function( jqXHR, status ) { + // support: jQuery <1.8 + // http://bugs.jquery.com/ticket/11778 + setTimeout(function() { + complete( jqXHR, status ); + }, 1 ); + }); + } + }, + + _ajaxSettings: function( anchor, event, eventData ) { + var that = this; + return { + url: anchor.attr( "href" ), + beforeSend: function( jqXHR, settings ) { + return that._trigger( "beforeLoad", event, + $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) ); + } + }; + }, + + _getPanelForTab: function( tab ) { + var id = $( tab ).attr( "aria-controls" ); + return this.element.find( this._sanitizeSelector( "#" + id ) ); + } +}); + + +/*! + * jQuery UI Tooltip 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/tooltip/ + */ + + +var tooltip = $.widget( "ui.tooltip", { + version: "1.11.4", + options: { + content: function() { + // support: IE<9, Opera in jQuery <1.7 + // .text() can't accept undefined, so coerce to a string + var title = $( this ).attr( "title" ) || ""; + // Escape title, since we're going from an attribute to raw HTML + return $( "<a>" ).text( title ).html(); + }, + hide: true, + // Disabled elements have inconsistent behavior across browsers (#8661) + items: "[title]:not([disabled])", + position: { + my: "left top+15", + at: "left bottom", + collision: "flipfit flip" + }, + show: true, + tooltipClass: null, + track: false, + + // callbacks + close: null, + open: null + }, + + _addDescribedBy: function( elem, id ) { + var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ); + describedby.push( id ); + elem + .data( "ui-tooltip-id", id ) + .attr( "aria-describedby", $.trim( describedby.join( " " ) ) ); + }, + + _removeDescribedBy: function( elem ) { + var id = elem.data( "ui-tooltip-id" ), + describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ), + index = $.inArray( id, describedby ); + + if ( index !== -1 ) { + describedby.splice( index, 1 ); + } + + elem.removeData( "ui-tooltip-id" ); + describedby = $.trim( describedby.join( " " ) ); + if ( describedby ) { + elem.attr( "aria-describedby", describedby ); + } else { + elem.removeAttr( "aria-describedby" ); + } + }, + + _create: function() { + this._on({ + mouseover: "open", + focusin: "open" + }); + + // IDs of generated tooltips, needed for destroy + this.tooltips = {}; + + // IDs of parent tooltips where we removed the title attribute + this.parents = {}; + + if ( this.options.disabled ) { + this._disable(); + } + + // Append the aria-live region so tooltips announce correctly + this.liveRegion = $( "<div>" ) + .attr({ + role: "log", + "aria-live": "assertive", + "aria-relevant": "additions" + }) + .addClass( "ui-helper-hidden-accessible" ) + .appendTo( this.document[ 0 ].body ); + }, + + _setOption: function( key, value ) { + var that = this; + + if ( key === "disabled" ) { + this[ value ? "_disable" : "_enable" ](); + this.options[ key ] = value; + // disable element style changes + return; + } + + this._super( key, value ); + + if ( key === "content" ) { + $.each( this.tooltips, function( id, tooltipData ) { + that._updateContent( tooltipData.element ); + }); + } + }, + + _disable: function() { + var that = this; + + // close open tooltips + $.each( this.tooltips, function( id, tooltipData ) { + var event = $.Event( "blur" ); + event.target = event.currentTarget = tooltipData.element[ 0 ]; + that.close( event, true ); + }); + + // remove title attributes to prevent native tooltips + this.element.find( this.options.items ).addBack().each(function() { + var element = $( this ); + if ( element.is( "[title]" ) ) { + element + .data( "ui-tooltip-title", element.attr( "title" ) ) + .removeAttr( "title" ); + } + }); + }, + + _enable: function() { + // restore title attributes + this.element.find( this.options.items ).addBack().each(function() { + var element = $( this ); + if ( element.data( "ui-tooltip-title" ) ) { + element.attr( "title", element.data( "ui-tooltip-title" ) ); + } + }); + }, + + open: function( event ) { + var that = this, + target = $( event ? event.target : this.element ) + // we need closest here due to mouseover bubbling, + // but always pointing at the same event target + .closest( this.options.items ); + + // No element to show a tooltip for or the tooltip is already open + if ( !target.length || target.data( "ui-tooltip-id" ) ) { + return; + } + + if ( target.attr( "title" ) ) { + target.data( "ui-tooltip-title", target.attr( "title" ) ); + } + + target.data( "ui-tooltip-open", true ); + + // kill parent tooltips, custom or native, for hover + if ( event && event.type === "mouseover" ) { + target.parents().each(function() { + var parent = $( this ), + blurEvent; + if ( parent.data( "ui-tooltip-open" ) ) { + blurEvent = $.Event( "blur" ); + blurEvent.target = blurEvent.currentTarget = this; + that.close( blurEvent, true ); + } + if ( parent.attr( "title" ) ) { + parent.uniqueId(); + that.parents[ this.id ] = { + element: this, + title: parent.attr( "title" ) + }; + parent.attr( "title", "" ); + } + }); + } + + this._registerCloseHandlers( event, target ); + this._updateContent( target, event ); + }, + + _updateContent: function( target, event ) { + var content, + contentOption = this.options.content, + that = this, + eventType = event ? event.type : null; + + if ( typeof contentOption === "string" ) { + return this._open( event, target, contentOption ); + } + + content = contentOption.call( target[0], function( response ) { + + // IE may instantly serve a cached response for ajax requests + // delay this call to _open so the other call to _open runs first + that._delay(function() { + + // Ignore async response if tooltip was closed already + if ( !target.data( "ui-tooltip-open" ) ) { + return; + } + + // jQuery creates a special event for focusin when it doesn't + // exist natively. To improve performance, the native event + // object is reused and the type is changed. Therefore, we can't + // rely on the type being correct after the event finished + // bubbling, so we set it back to the previous value. (#8740) + if ( event ) { + event.type = eventType; + } + this._open( event, target, response ); + }); + }); + if ( content ) { + this._open( event, target, content ); + } + }, + + _open: function( event, target, content ) { + var tooltipData, tooltip, delayedShow, a11yContent, + positionOption = $.extend( {}, this.options.position ); + + if ( !content ) { + return; + } + + // Content can be updated multiple times. If the tooltip already + // exists, then just update the content and bail. + tooltipData = this._find( target ); + if ( tooltipData ) { + tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content ); + return; + } + + // if we have a title, clear it to prevent the native tooltip + // we have to check first to avoid defining a title if none exists + // (we don't want to cause an element to start matching [title]) + // + // We use removeAttr only for key events, to allow IE to export the correct + // accessible attributes. For mouse events, set to empty string to avoid + // native tooltip showing up (happens only when removing inside mouseover). + if ( target.is( "[title]" ) ) { + if ( event && event.type === "mouseover" ) { + target.attr( "title", "" ); + } else { + target.removeAttr( "title" ); + } + } + + tooltipData = this._tooltip( target ); + tooltip = tooltipData.tooltip; + this._addDescribedBy( target, tooltip.attr( "id" ) ); + tooltip.find( ".ui-tooltip-content" ).html( content ); + + // Support: Voiceover on OS X, JAWS on IE <= 9 + // JAWS announces deletions even when aria-relevant="additions" + // Voiceover will sometimes re-read the entire log region's contents from the beginning + this.liveRegion.children().hide(); + if ( content.clone ) { + a11yContent = content.clone(); + a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" ); + } else { + a11yContent = content; + } + $( "<div>" ).html( a11yContent ).appendTo( this.liveRegion ); + + function position( event ) { + positionOption.of = event; + if ( tooltip.is( ":hidden" ) ) { + return; + } + tooltip.position( positionOption ); + } + if ( this.options.track && event && /^mouse/.test( event.type ) ) { + this._on( this.document, { + mousemove: position + }); + // trigger once to override element-relative positioning + position( event ); + } else { + tooltip.position( $.extend({ + of: target + }, this.options.position ) ); + } + + tooltip.hide(); + + this._show( tooltip, this.options.show ); + // Handle tracking tooltips that are shown with a delay (#8644). As soon + // as the tooltip is visible, position the tooltip using the most recent + // event. + if ( this.options.show && this.options.show.delay ) { + delayedShow = this.delayedShow = setInterval(function() { + if ( tooltip.is( ":visible" ) ) { + position( positionOption.of ); + clearInterval( delayedShow ); + } + }, $.fx.interval ); + } + + this._trigger( "open", event, { tooltip: tooltip } ); + }, + + _registerCloseHandlers: function( event, target ) { + var events = { + keyup: function( event ) { + if ( event.keyCode === $.ui.keyCode.ESCAPE ) { + var fakeEvent = $.Event(event); + fakeEvent.currentTarget = target[0]; + this.close( fakeEvent, true ); + } + } + }; + + // Only bind remove handler for delegated targets. Non-delegated + // tooltips will handle this in destroy. + if ( target[ 0 ] !== this.element[ 0 ] ) { + events.remove = function() { + this._removeTooltip( this._find( target ).tooltip ); + }; + } + + if ( !event || event.type === "mouseover" ) { + events.mouseleave = "close"; + } + if ( !event || event.type === "focusin" ) { + events.focusout = "close"; + } + this._on( true, target, events ); + }, + + close: function( event ) { + var tooltip, + that = this, + target = $( event ? event.currentTarget : this.element ), + tooltipData = this._find( target ); + + // The tooltip may already be closed + if ( !tooltipData ) { + + // We set ui-tooltip-open immediately upon open (in open()), but only set the + // additional data once there's actually content to show (in _open()). So even if the + // tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in + // the period between open() and _open(). + target.removeData( "ui-tooltip-open" ); + return; + } + + tooltip = tooltipData.tooltip; + + // disabling closes the tooltip, so we need to track when we're closing + // to avoid an infinite loop in case the tooltip becomes disabled on close + if ( tooltipData.closing ) { + return; + } + + // Clear the interval for delayed tracking tooltips + clearInterval( this.delayedShow ); + + // only set title if we had one before (see comment in _open()) + // If the title attribute has changed since open(), don't restore + if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) { + target.attr( "title", target.data( "ui-tooltip-title" ) ); + } + + this._removeDescribedBy( target ); + + tooltipData.hiding = true; + tooltip.stop( true ); + this._hide( tooltip, this.options.hide, function() { + that._removeTooltip( $( this ) ); + }); + + target.removeData( "ui-tooltip-open" ); + this._off( target, "mouseleave focusout keyup" ); + + // Remove 'remove' binding only on delegated targets + if ( target[ 0 ] !== this.element[ 0 ] ) { + this._off( target, "remove" ); + } + this._off( this.document, "mousemove" ); + + if ( event && event.type === "mouseleave" ) { + $.each( this.parents, function( id, parent ) { + $( parent.element ).attr( "title", parent.title ); + delete that.parents[ id ]; + }); + } + + tooltipData.closing = true; + this._trigger( "close", event, { tooltip: tooltip } ); + if ( !tooltipData.hiding ) { + tooltipData.closing = false; + } + }, + + _tooltip: function( element ) { + var tooltip = $( "<div>" ) + .attr( "role", "tooltip" ) + .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " + + ( this.options.tooltipClass || "" ) ), + id = tooltip.uniqueId().attr( "id" ); + + $( "<div>" ) + .addClass( "ui-tooltip-content" ) + .appendTo( tooltip ); + + tooltip.appendTo( this.document[0].body ); + + return this.tooltips[ id ] = { + element: element, + tooltip: tooltip + }; + }, + + _find: function( target ) { + var id = target.data( "ui-tooltip-id" ); + return id ? this.tooltips[ id ] : null; + }, + + _removeTooltip: function( tooltip ) { + tooltip.remove(); + delete this.tooltips[ tooltip.attr( "id" ) ]; + }, + + _destroy: function() { + var that = this; + + // close open tooltips + $.each( this.tooltips, function( id, tooltipData ) { + // Delegate to close method to handle common cleanup + var event = $.Event( "blur" ), + element = tooltipData.element; + event.target = event.currentTarget = element[ 0 ]; + that.close( event, true ); + + // Remove immediately; destroying an open tooltip doesn't use the + // hide animation + $( "#" + id ).remove(); + + // Restore the title + if ( element.data( "ui-tooltip-title" ) ) { + // If the title attribute has changed since open(), don't restore + if ( !element.attr( "title" ) ) { + element.attr( "title", element.data( "ui-tooltip-title" ) ); + } + element.removeData( "ui-tooltip-title" ); + } + }); + this.liveRegion.remove(); + } +}); + + +/*! + * jQuery UI Effects 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/effects-core/ + */ + + +var dataSpace = "ui-effects-", + + // Create a local jQuery because jQuery Color relies on it and the + // global may not exist with AMD and a custom build (#10199) + jQuery = $; + +$.effects = { + effect: {} +}; + +/*! + * jQuery Color Animations v2.1.2 + * https://github.com/jquery/jquery-color + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * Date: Wed Jan 16 08:47:09 2013 -0600 + */ +(function( jQuery, undefined ) { + + var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor", + + // plusequals test for += 100 -= 100 + rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, + // a set of RE's that can match strings and generate color tuples. + stringParsers = [ { + re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + parse: function( execResult ) { + return [ + execResult[ 1 ], + execResult[ 2 ], + execResult[ 3 ], + execResult[ 4 ] + ]; + } + }, { + re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + parse: function( execResult ) { + return [ + execResult[ 1 ] * 2.55, + execResult[ 2 ] * 2.55, + execResult[ 3 ] * 2.55, + execResult[ 4 ] + ]; + } + }, { + // this regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, + parse: function( execResult ) { + return [ + parseInt( execResult[ 1 ], 16 ), + parseInt( execResult[ 2 ], 16 ), + parseInt( execResult[ 3 ], 16 ) + ]; + } + }, { + // this regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, + parse: function( execResult ) { + return [ + parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ), + parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ), + parseInt( execResult[ 3 ] + execResult[ 3 ], 16 ) + ]; + } + }, { + re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + space: "hsla", + parse: function( execResult ) { + return [ + execResult[ 1 ], + execResult[ 2 ] / 100, + execResult[ 3 ] / 100, + execResult[ 4 ] + ]; + } + } ], + + // jQuery.Color( ) + color = jQuery.Color = function( color, green, blue, alpha ) { + return new jQuery.Color.fn.parse( color, green, blue, alpha ); + }, + spaces = { + rgba: { + props: { + red: { + idx: 0, + type: "byte" + }, + green: { + idx: 1, + type: "byte" + }, + blue: { + idx: 2, + type: "byte" + } + } + }, + + hsla: { + props: { + hue: { + idx: 0, + type: "degrees" + }, + saturation: { + idx: 1, + type: "percent" + }, + lightness: { + idx: 2, + type: "percent" + } + } + } + }, + propTypes = { + "byte": { + floor: true, + max: 255 + }, + "percent": { + max: 1 + }, + "degrees": { + mod: 360, + floor: true + } + }, + support = color.support = {}, + + // element for support tests + supportElem = jQuery( "<p>" )[ 0 ], + + // colors = jQuery.Color.names + colors, + + // local aliases of functions called often + each = jQuery.each; + +// determine rgba support immediately +supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; +support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1; + +// define cache name and alpha properties +// for rgba and hsla spaces +each( spaces, function( spaceName, space ) { + space.cache = "_" + spaceName; + space.props.alpha = { + idx: 3, + type: "percent", + def: 1 + }; +}); + +function clamp( value, prop, allowEmpty ) { + var type = propTypes[ prop.type ] || {}; + + if ( value == null ) { + return (allowEmpty || !prop.def) ? null : prop.def; + } + + // ~~ is an short way of doing floor for positive numbers + value = type.floor ? ~~value : parseFloat( value ); + + // IE will pass in empty strings as value for alpha, + // which will hit this case + if ( isNaN( value ) ) { + return prop.def; + } + + if ( type.mod ) { + // we add mod before modding to make sure that negatives values + // get converted properly: -10 -> 350 + return (value + type.mod) % type.mod; + } + + // for now all property types without mod have min and max + return 0 > value ? 0 : type.max < value ? type.max : value; +} + +function stringParse( string ) { + var inst = color(), + rgba = inst._rgba = []; + + string = string.toLowerCase(); + + each( stringParsers, function( i, parser ) { + var parsed, + match = parser.re.exec( string ), + values = match && parser.parse( match ), + spaceName = parser.space || "rgba"; + + if ( values ) { + parsed = inst[ spaceName ]( values ); + + // if this was an rgba parse the assignment might happen twice + // oh well.... + inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ]; + rgba = inst._rgba = parsed._rgba; + + // exit each( stringParsers ) here because we matched + return false; + } + }); + + // Found a stringParser that handled it + if ( rgba.length ) { + + // if this came from a parsed string, force "transparent" when alpha is 0 + // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) + if ( rgba.join() === "0,0,0,0" ) { + jQuery.extend( rgba, colors.transparent ); + } + return inst; + } + + // named colors + return colors[ string ]; +} + +color.fn = jQuery.extend( color.prototype, { + parse: function( red, green, blue, alpha ) { + if ( red === undefined ) { + this._rgba = [ null, null, null, null ]; + return this; + } + if ( red.jquery || red.nodeType ) { + red = jQuery( red ).css( green ); + green = undefined; + } + + var inst = this, + type = jQuery.type( red ), + rgba = this._rgba = []; + + // more than 1 argument specified - assume ( red, green, blue, alpha ) + if ( green !== undefined ) { + red = [ red, green, blue, alpha ]; + type = "array"; + } + + if ( type === "string" ) { + return this.parse( stringParse( red ) || colors._default ); + } + + if ( type === "array" ) { + each( spaces.rgba.props, function( key, prop ) { + rgba[ prop.idx ] = clamp( red[ prop.idx ], prop ); + }); + return this; + } + + if ( type === "object" ) { + if ( red instanceof color ) { + each( spaces, function( spaceName, space ) { + if ( red[ space.cache ] ) { + inst[ space.cache ] = red[ space.cache ].slice(); + } + }); + } else { + each( spaces, function( spaceName, space ) { + var cache = space.cache; + each( space.props, function( key, prop ) { + + // if the cache doesn't exist, and we know how to convert + if ( !inst[ cache ] && space.to ) { + + // if the value was null, we don't need to copy it + // if the key was alpha, we don't need to copy it either + if ( key === "alpha" || red[ key ] == null ) { + return; + } + inst[ cache ] = space.to( inst._rgba ); + } + + // this is the only case where we allow nulls for ALL properties. + // call clamp with alwaysAllowEmpty + inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true ); + }); + + // everything defined but alpha? + if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) { + // use the default of 1 + inst[ cache ][ 3 ] = 1; + if ( space.from ) { + inst._rgba = space.from( inst[ cache ] ); + } + } + }); + } + return this; + } + }, + is: function( compare ) { + var is = color( compare ), + same = true, + inst = this; + + each( spaces, function( _, space ) { + var localCache, + isCache = is[ space.cache ]; + if (isCache) { + localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || []; + each( space.props, function( _, prop ) { + if ( isCache[ prop.idx ] != null ) { + same = ( isCache[ prop.idx ] === localCache[ prop.idx ] ); + return same; + } + }); + } + return same; + }); + return same; + }, + _space: function() { + var used = [], + inst = this; + each( spaces, function( spaceName, space ) { + if ( inst[ space.cache ] ) { + used.push( spaceName ); + } + }); + return used.pop(); + }, + transition: function( other, distance ) { + var end = color( other ), + spaceName = end._space(), + space = spaces[ spaceName ], + startColor = this.alpha() === 0 ? color( "transparent" ) : this, + start = startColor[ space.cache ] || space.to( startColor._rgba ), + result = start.slice(); + + end = end[ space.cache ]; + each( space.props, function( key, prop ) { + var index = prop.idx, + startValue = start[ index ], + endValue = end[ index ], + type = propTypes[ prop.type ] || {}; + + // if null, don't override start value + if ( endValue === null ) { + return; + } + // if null - use end + if ( startValue === null ) { + result[ index ] = endValue; + } else { + if ( type.mod ) { + if ( endValue - startValue > type.mod / 2 ) { + startValue += type.mod; + } else if ( startValue - endValue > type.mod / 2 ) { + startValue -= type.mod; + } + } + result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); + } + }); + return this[ spaceName ]( result ); + }, + blend: function( opaque ) { + // if we are already opaque - return ourself + if ( this._rgba[ 3 ] === 1 ) { + return this; + } + + var rgb = this._rgba.slice(), + a = rgb.pop(), + blend = color( opaque )._rgba; + + return color( jQuery.map( rgb, function( v, i ) { + return ( 1 - a ) * blend[ i ] + a * v; + })); + }, + toRgbaString: function() { + var prefix = "rgba(", + rgba = jQuery.map( this._rgba, function( v, i ) { + return v == null ? ( i > 2 ? 1 : 0 ) : v; + }); + + if ( rgba[ 3 ] === 1 ) { + rgba.pop(); + prefix = "rgb("; + } + + return prefix + rgba.join() + ")"; + }, + toHslaString: function() { + var prefix = "hsla(", + hsla = jQuery.map( this.hsla(), function( v, i ) { + if ( v == null ) { + v = i > 2 ? 1 : 0; + } + + // catch 1 and 2 + if ( i && i < 3 ) { + v = Math.round( v * 100 ) + "%"; + } + return v; + }); + + if ( hsla[ 3 ] === 1 ) { + hsla.pop(); + prefix = "hsl("; + } + return prefix + hsla.join() + ")"; + }, + toHexString: function( includeAlpha ) { + var rgba = this._rgba.slice(), + alpha = rgba.pop(); + + if ( includeAlpha ) { + rgba.push( ~~( alpha * 255 ) ); + } + + return "#" + jQuery.map( rgba, function( v ) { + + // default to 0 when nulls exist + v = ( v || 0 ).toString( 16 ); + return v.length === 1 ? "0" + v : v; + }).join(""); + }, + toString: function() { + return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString(); + } +}); +color.fn.parse.prototype = color.fn; + +// hsla conversions adapted from: +// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 + +function hue2rgb( p, q, h ) { + h = ( h + 1 ) % 1; + if ( h * 6 < 1 ) { + return p + ( q - p ) * h * 6; + } + if ( h * 2 < 1) { + return q; + } + if ( h * 3 < 2 ) { + return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6; + } + return p; +} + +spaces.hsla.to = function( rgba ) { + if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) { + return [ null, null, null, rgba[ 3 ] ]; + } + var r = rgba[ 0 ] / 255, + g = rgba[ 1 ] / 255, + b = rgba[ 2 ] / 255, + a = rgba[ 3 ], + max = Math.max( r, g, b ), + min = Math.min( r, g, b ), + diff = max - min, + add = max + min, + l = add * 0.5, + h, s; + + if ( min === max ) { + h = 0; + } else if ( r === max ) { + h = ( 60 * ( g - b ) / diff ) + 360; + } else if ( g === max ) { + h = ( 60 * ( b - r ) / diff ) + 120; + } else { + h = ( 60 * ( r - g ) / diff ) + 240; + } + + // chroma (diff) == 0 means greyscale which, by definition, saturation = 0% + // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add) + if ( diff === 0 ) { + s = 0; + } else if ( l <= 0.5 ) { + s = diff / add; + } else { + s = diff / ( 2 - add ); + } + return [ Math.round(h) % 360, s, l, a == null ? 1 : a ]; +}; + +spaces.hsla.from = function( hsla ) { + if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) { + return [ null, null, null, hsla[ 3 ] ]; + } + var h = hsla[ 0 ] / 360, + s = hsla[ 1 ], + l = hsla[ 2 ], + a = hsla[ 3 ], + q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s, + p = 2 * l - q; + + return [ + Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ), + Math.round( hue2rgb( p, q, h ) * 255 ), + Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ), + a + ]; +}; + +each( spaces, function( spaceName, space ) { + var props = space.props, + cache = space.cache, + to = space.to, + from = space.from; + + // makes rgba() and hsla() + color.fn[ spaceName ] = function( value ) { + + // generate a cache for this space if it doesn't exist + if ( to && !this[ cache ] ) { + this[ cache ] = to( this._rgba ); + } + if ( value === undefined ) { + return this[ cache ].slice(); + } + + var ret, + type = jQuery.type( value ), + arr = ( type === "array" || type === "object" ) ? value : arguments, + local = this[ cache ].slice(); + + each( props, function( key, prop ) { + var val = arr[ type === "object" ? key : prop.idx ]; + if ( val == null ) { + val = local[ prop.idx ]; + } + local[ prop.idx ] = clamp( val, prop ); + }); + + if ( from ) { + ret = color( from( local ) ); + ret[ cache ] = local; + return ret; + } else { + return color( local ); + } + }; + + // makes red() green() blue() alpha() hue() saturation() lightness() + each( props, function( key, prop ) { + // alpha is included in more than one space + if ( color.fn[ key ] ) { + return; + } + color.fn[ key ] = function( value ) { + var vtype = jQuery.type( value ), + fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ), + local = this[ fn ](), + cur = local[ prop.idx ], + match; + + if ( vtype === "undefined" ) { + return cur; + } + + if ( vtype === "function" ) { + value = value.call( this, cur ); + vtype = jQuery.type( value ); + } + if ( value == null && prop.empty ) { + return this; + } + if ( vtype === "string" ) { + match = rplusequals.exec( value ); + if ( match ) { + value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 ); + } + } + local[ prop.idx ] = value; + return this[ fn ]( local ); + }; + }); +}); + +// add cssHook and .fx.step function for each named hook. +// accept a space separated string of properties +color.hook = function( hook ) { + var hooks = hook.split( " " ); + each( hooks, function( i, hook ) { + jQuery.cssHooks[ hook ] = { + set: function( elem, value ) { + var parsed, curElem, + backgroundColor = ""; + + if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) { + value = color( parsed || value ); + if ( !support.rgba && value._rgba[ 3 ] !== 1 ) { + curElem = hook === "backgroundColor" ? elem.parentNode : elem; + while ( + (backgroundColor === "" || backgroundColor === "transparent") && + curElem && curElem.style + ) { + try { + backgroundColor = jQuery.css( curElem, "backgroundColor" ); + curElem = curElem.parentNode; + } catch ( e ) { + } + } + + value = value.blend( backgroundColor && backgroundColor !== "transparent" ? + backgroundColor : + "_default" ); + } + + value = value.toRgbaString(); + } + try { + elem.style[ hook ] = value; + } catch ( e ) { + // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit' + } + } + }; + jQuery.fx.step[ hook ] = function( fx ) { + if ( !fx.colorInit ) { + fx.start = color( fx.elem, hook ); + fx.end = color( fx.end ); + fx.colorInit = true; + } + jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) ); + }; + }); + +}; + +color.hook( stepHooks ); + +jQuery.cssHooks.borderColor = { + expand: function( value ) { + var expanded = {}; + + each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) { + expanded[ "border" + part + "Color" ] = value; + }); + return expanded; + } +}; + +// Basic color names only. +// Usage of any of the other color names requires adding yourself or including +// jquery.color.svg-names.js. +colors = jQuery.Color.names = { + // 4.1. Basic color keywords + aqua: "#00ffff", + black: "#000000", + blue: "#0000ff", + fuchsia: "#ff00ff", + gray: "#808080", + green: "#008000", + lime: "#00ff00", + maroon: "#800000", + navy: "#000080", + olive: "#808000", + purple: "#800080", + red: "#ff0000", + silver: "#c0c0c0", + teal: "#008080", + white: "#ffffff", + yellow: "#ffff00", + + // 4.2.3. "transparent" color keyword + transparent: [ null, null, null, 0 ], + + _default: "#ffffff" +}; + +})( jQuery ); + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ +(function() { + +var classAnimationActions = [ "add", "remove", "toggle" ], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }; + +$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) { + $.fx.step[ prop ] = function( fx ) { + if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) { + jQuery.style( fx.elem, prop, fx.end ); + fx.setAttr = true; + } + }; +}); + +function getElementStyles( elem ) { + var key, len, + style = elem.ownerDocument.defaultView ? + elem.ownerDocument.defaultView.getComputedStyle( elem, null ) : + elem.currentStyle, + styles = {}; + + if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) { + len = style.length; + while ( len-- ) { + key = style[ len ]; + if ( typeof style[ key ] === "string" ) { + styles[ $.camelCase( key ) ] = style[ key ]; + } + } + // support: Opera, IE <9 + } else { + for ( key in style ) { + if ( typeof style[ key ] === "string" ) { + styles[ key ] = style[ key ]; + } + } + } + + return styles; +} + +function styleDifference( oldStyle, newStyle ) { + var diff = {}, + name, value; + + for ( name in newStyle ) { + value = newStyle[ name ]; + if ( oldStyle[ name ] !== value ) { + if ( !shorthandStyles[ name ] ) { + if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) { + diff[ name ] = value; + } + } + } + } + + return diff; +} + +// support: jQuery <1.8 +if ( !$.fn.addBack ) { + $.fn.addBack = function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + }; +} + +$.effects.animateClass = function( value, duration, easing, callback ) { + var o = $.speed( duration, easing, callback ); + + return this.queue( function() { + var animated = $( this ), + baseClass = animated.attr( "class" ) || "", + applyClassChange, + allAnimations = o.children ? animated.find( "*" ).addBack() : animated; + + // map the animated objects to store the original styles. + allAnimations = allAnimations.map(function() { + var el = $( this ); + return { + el: el, + start: getElementStyles( this ) + }; + }); + + // apply class change + applyClassChange = function() { + $.each( classAnimationActions, function(i, action) { + if ( value[ action ] ) { + animated[ action + "Class" ]( value[ action ] ); + } + }); + }; + applyClassChange(); + + // map all animated objects again - calculate new styles and diff + allAnimations = allAnimations.map(function() { + this.end = getElementStyles( this.el[ 0 ] ); + this.diff = styleDifference( this.start, this.end ); + return this; + }); + + // apply original class + animated.attr( "class", baseClass ); + + // map all animated objects again - this time collecting a promise + allAnimations = allAnimations.map(function() { + var styleInfo = this, + dfd = $.Deferred(), + opts = $.extend({}, o, { + queue: false, + complete: function() { + dfd.resolve( styleInfo ); + } + }); + + this.el.animate( this.diff, opts ); + return dfd.promise(); + }); + + // once all animations have completed: + $.when.apply( $, allAnimations.get() ).done(function() { + + // set the final class + applyClassChange(); + + // for each animated element, + // clear all css properties that were animated + $.each( arguments, function() { + var el = this.el; + $.each( this.diff, function(key) { + el.css( key, "" ); + }); + }); + + // this is guarnteed to be there if you use jQuery.speed() + // it also handles dequeuing the next anim... + o.complete.call( animated[ 0 ] ); + }); + }); +}; + +$.fn.extend({ + addClass: (function( orig ) { + return function( classNames, speed, easing, callback ) { + return speed ? + $.effects.animateClass.call( this, + { add: classNames }, speed, easing, callback ) : + orig.apply( this, arguments ); + }; + })( $.fn.addClass ), + + removeClass: (function( orig ) { + return function( classNames, speed, easing, callback ) { + return arguments.length > 1 ? + $.effects.animateClass.call( this, + { remove: classNames }, speed, easing, callback ) : + orig.apply( this, arguments ); + }; + })( $.fn.removeClass ), + + toggleClass: (function( orig ) { + return function( classNames, force, speed, easing, callback ) { + if ( typeof force === "boolean" || force === undefined ) { + if ( !speed ) { + // without speed parameter + return orig.apply( this, arguments ); + } else { + return $.effects.animateClass.call( this, + (force ? { add: classNames } : { remove: classNames }), + speed, easing, callback ); + } + } else { + // without force parameter + return $.effects.animateClass.call( this, + { toggle: classNames }, force, speed, easing ); + } + }; + })( $.fn.toggleClass ), + + switchClass: function( remove, add, speed, easing, callback) { + return $.effects.animateClass.call( this, { + add: add, + remove: remove + }, speed, easing, callback ); + } +}); + +})(); + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +(function() { + +$.extend( $.effects, { + version: "1.11.4", + + // Saves a set of properties in a data storage + save: function( element, set ) { + for ( var i = 0; i < set.length; i++ ) { + if ( set[ i ] !== null ) { + element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] ); + } + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function( element, set ) { + var val, i; + for ( i = 0; i < set.length; i++ ) { + if ( set[ i ] !== null ) { + val = element.data( dataSpace + set[ i ] ); + // support: jQuery 1.6.2 + // http://bugs.jquery.com/ticket/9917 + // jQuery 1.6.2 incorrectly returns undefined for any falsy value. + // We can't differentiate between "" and 0 here, so we just assume + // empty string since it's likely to be a more common value... + if ( val === undefined ) { + val = ""; + } + element.css( set[ i ], val ); + } + } + }, + + setMode: function( el, mode ) { + if (mode === "toggle") { + mode = el.is( ":hidden" ) ? "show" : "hide"; + } + return mode; + }, + + // Translates a [top,left] array into a baseline value + // this should be a little more flexible in the future to handle a string & hash + getBaseline: function( origin, original ) { + var y, x; + switch ( origin[ 0 ] ) { + case "top": y = 0; break; + case "middle": y = 0.5; break; + case "bottom": y = 1; break; + default: y = origin[ 0 ] / original.height; + } + switch ( origin[ 1 ] ) { + case "left": x = 0; break; + case "center": x = 0.5; break; + case "right": x = 1; break; + default: x = origin[ 1 ] / original.width; + } + return { + x: x, + y: y + }; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function( element ) { + + // if the element is already wrapped, return it + if ( element.parent().is( ".ui-effects-wrapper" )) { + return element.parent(); + } + + // wrap the element + var props = { + width: element.outerWidth(true), + height: element.outerHeight(true), + "float": element.css( "float" ) + }, + wrapper = $( "<div></div>" ) + .addClass( "ui-effects-wrapper" ) + .css({ + fontSize: "100%", + background: "transparent", + border: "none", + margin: 0, + padding: 0 + }), + // Store the size in case width/height are defined in % - Fixes #5245 + size = { + width: element.width(), + height: element.height() + }, + active = document.activeElement; + + // support: Firefox + // Firefox incorrectly exposes anonymous content + // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 + try { + active.id; + } catch ( e ) { + active = document.body; + } + + element.wrap( wrapper ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).focus(); + } + + wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element + + // transfer positioning properties to the wrapper + if ( element.css( "position" ) === "static" ) { + wrapper.css({ position: "relative" }); + element.css({ position: "relative" }); + } else { + $.extend( props, { + position: element.css( "position" ), + zIndex: element.css( "z-index" ) + }); + $.each([ "top", "left", "bottom", "right" ], function(i, pos) { + props[ pos ] = element.css( pos ); + if ( isNaN( parseInt( props[ pos ], 10 ) ) ) { + props[ pos ] = "auto"; + } + }); + element.css({ + position: "relative", + top: 0, + left: 0, + right: "auto", + bottom: "auto" + }); + } + element.css(size); + + return wrapper.css( props ).show(); + }, + + removeWrapper: function( element ) { + var active = document.activeElement; + + if ( element.parent().is( ".ui-effects-wrapper" ) ) { + element.parent().replaceWith( element ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).focus(); + } + } + + return element; + }, + + setTransition: function( element, list, factor, value ) { + value = value || {}; + $.each( list, function( i, x ) { + var unit = element.cssUnit( x ); + if ( unit[ 0 ] > 0 ) { + value[ x ] = unit[ 0 ] * factor + unit[ 1 ]; + } + }); + return value; + } +}); + +// return an effect options object for the given parameters: +function _normalizeArguments( effect, options, speed, callback ) { + + // allow passing all options as the first parameter + if ( $.isPlainObject( effect ) ) { + options = effect; + effect = effect.effect; + } + + // convert to an object + effect = { effect: effect }; + + // catch (effect, null, ...) + if ( options == null ) { + options = {}; + } + + // catch (effect, callback) + if ( $.isFunction( options ) ) { + callback = options; + speed = null; + options = {}; + } + + // catch (effect, speed, ?) + if ( typeof options === "number" || $.fx.speeds[ options ] ) { + callback = speed; + speed = options; + options = {}; + } + + // catch (effect, options, callback) + if ( $.isFunction( speed ) ) { + callback = speed; + speed = null; + } + + // add options to effect + if ( options ) { + $.extend( effect, options ); + } + + speed = speed || options.duration; + effect.duration = $.fx.off ? 0 : + typeof speed === "number" ? speed : + speed in $.fx.speeds ? $.fx.speeds[ speed ] : + $.fx.speeds._default; + + effect.complete = callback || options.complete; + + return effect; +} + +function standardAnimationOption( option ) { + // Valid standard speeds (nothing, number, named speed) + if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) { + return true; + } + + // Invalid strings - treat as "normal" speed + if ( typeof option === "string" && !$.effects.effect[ option ] ) { + return true; + } + + // Complete callback + if ( $.isFunction( option ) ) { + return true; + } + + // Options hash (but not naming an effect) + if ( typeof option === "object" && !option.effect ) { + return true; + } + + // Didn't match any standard API + return false; +} + +$.fn.extend({ + effect: function( /* effect, options, speed, callback */ ) { + var args = _normalizeArguments.apply( this, arguments ), + mode = args.mode, + queue = args.queue, + effectMethod = $.effects.effect[ args.effect ]; + + if ( $.fx.off || !effectMethod ) { + // delegate to the original method (e.g., .show()) if possible + if ( mode ) { + return this[ mode ]( args.duration, args.complete ); + } else { + return this.each( function() { + if ( args.complete ) { + args.complete.call( this ); + } + }); + } + } + + function run( next ) { + var elem = $( this ), + complete = args.complete, + mode = args.mode; + + function done() { + if ( $.isFunction( complete ) ) { + complete.call( elem[0] ); + } + if ( $.isFunction( next ) ) { + next(); + } + } + + // If the element already has the correct final state, delegate to + // the core methods so the internal tracking of "olddisplay" works. + if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { + elem[ mode ](); + done(); + } else { + effectMethod.call( elem[0], args, done ); + } + } + + return queue === false ? this.each( run ) : this.queue( queue || "fx", run ); + }, + + show: (function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "show"; + return this.effect.call( this, args ); + } + }; + })( $.fn.show ), + + hide: (function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "hide"; + return this.effect.call( this, args ); + } + }; + })( $.fn.hide ), + + toggle: (function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) || typeof option === "boolean" ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "toggle"; + return this.effect.call( this, args ); + } + }; + })( $.fn.toggle ), + + // helper functions + cssUnit: function(key) { + var style = this.css( key ), + val = []; + + $.each( [ "em", "px", "%", "pt" ], function( i, unit ) { + if ( style.indexOf( unit ) > 0 ) { + val = [ parseFloat( style ), unit ]; + } + }); + return val; + } +}); + +})(); + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +(function() { + +// based on easing equations from Robert Penner (http://www.robertpenner.com/easing) + +var baseEasings = {}; + +$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) { + baseEasings[ name ] = function( p ) { + return Math.pow( p, i + 2 ); + }; +}); + +$.extend( baseEasings, { + Sine: function( p ) { + return 1 - Math.cos( p * Math.PI / 2 ); + }, + Circ: function( p ) { + return 1 - Math.sqrt( 1 - p * p ); + }, + Elastic: function( p ) { + return p === 0 || p === 1 ? p : + -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 ); + }, + Back: function( p ) { + return p * p * ( 3 * p - 2 ); + }, + Bounce: function( p ) { + var pow2, + bounce = 4; + + while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {} + return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 ); + } +}); + +$.each( baseEasings, function( name, easeIn ) { + $.easing[ "easeIn" + name ] = easeIn; + $.easing[ "easeOut" + name ] = function( p ) { + return 1 - easeIn( 1 - p ); + }; + $.easing[ "easeInOut" + name ] = function( p ) { + return p < 0.5 ? + easeIn( p * 2 ) / 2 : + 1 - easeIn( p * -2 + 2 ) / 2; + }; +}); + +})(); + +var effect = $.effects; + + +/*! + * jQuery UI Effects Blind 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/blind-effect/ + */ + + +var effectBlind = $.effects.effect.blind = function( o, done ) { + // Create element + var el = $( this ), + rvertical = /up|down|vertical/, + rpositivemotion = /up|left|vertical|horizontal/, + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "hide" ), + direction = o.direction || "up", + vertical = rvertical.test( direction ), + ref = vertical ? "height" : "width", + ref2 = vertical ? "top" : "left", + motion = rpositivemotion.test( direction ), + animation = {}, + show = mode === "show", + wrapper, distance, margin; + + // if already wrapped, the wrapper's properties are my property. #6245 + if ( el.parent().is( ".ui-effects-wrapper" ) ) { + $.effects.save( el.parent(), props ); + } else { + $.effects.save( el, props ); + } + el.show(); + wrapper = $.effects.createWrapper( el ).css({ + overflow: "hidden" + }); + + distance = wrapper[ ref ](); + margin = parseFloat( wrapper.css( ref2 ) ) || 0; + + animation[ ref ] = show ? distance : 0; + if ( !motion ) { + el + .css( vertical ? "bottom" : "right", 0 ) + .css( vertical ? "top" : "left", "auto" ) + .css({ position: "absolute" }); + + animation[ ref2 ] = show ? margin : distance + margin; + } + + // start at 0 if we are showing + if ( show ) { + wrapper.css( ref, 0 ); + if ( !motion ) { + wrapper.css( ref2, margin + distance ); + } + } + + // Animate + wrapper.animate( animation, { + duration: o.duration, + easing: o.easing, + queue: false, + complete: function() { + if ( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + } + }); +}; + + +/*! + * jQuery UI Effects Bounce 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/bounce-effect/ + */ + + +var effectBounce = $.effects.effect.bounce = function( o, done ) { + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + + // defaults: + mode = $.effects.setMode( el, o.mode || "effect" ), + hide = mode === "hide", + show = mode === "show", + direction = o.direction || "up", + distance = o.distance, + times = o.times || 5, + + // number of internal animations + anims = times * 2 + ( show || hide ? 1 : 0 ), + speed = o.duration / anims, + easing = o.easing, + + // utility: + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + motion = ( direction === "up" || direction === "left" ), + i, + upAnim, + downAnim, + + // we will need to re-assemble the queue to stack our animations in place + queue = el.queue(), + queuelen = queue.length; + + // Avoid touching opacity to prevent clearType and PNG issues in IE + if ( show || hide ) { + props.push( "opacity" ); + } + + $.effects.save( el, props ); + el.show(); + $.effects.createWrapper( el ); // Create Wrapper + + // default distance for the BIGGEST bounce is the outer Distance / 3 + if ( !distance ) { + distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; + } + + if ( show ) { + downAnim = { opacity: 1 }; + downAnim[ ref ] = 0; + + // if we are showing, force opacity 0 and set the initial position + // then do the "first" animation + el.css( "opacity", 0 ) + .css( ref, motion ? -distance * 2 : distance * 2 ) + .animate( downAnim, speed, easing ); + } + + // start at the smallest distance if we are hiding + if ( hide ) { + distance = distance / Math.pow( 2, times - 1 ); + } + + downAnim = {}; + downAnim[ ref ] = 0; + // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here + for ( i = 0; i < times; i++ ) { + upAnim = {}; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; + + el.animate( upAnim, speed, easing ) + .animate( downAnim, speed, easing ); + + distance = hide ? distance * 2 : distance / 2; + } + + // Last Bounce when Hiding + if ( hide ) { + upAnim = { opacity: 0 }; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; + + el.animate( upAnim, speed, easing ); + } + + el.queue(function() { + if ( hide ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + }); + + // inject all the animations we just queued to be first in line (after "inprogress") + if ( queuelen > 1) { + queue.splice.apply( queue, + [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); + } + el.dequeue(); + +}; + + +/*! + * jQuery UI Effects Clip 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/clip-effect/ + */ + + +var effectClip = $.effects.effect.clip = function( o, done ) { + // Create element + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "hide" ), + show = mode === "show", + direction = o.direction || "vertical", + vert = direction === "vertical", + size = vert ? "height" : "width", + position = vert ? "top" : "left", + animation = {}, + wrapper, animate, distance; + + // Save & Show + $.effects.save( el, props ); + el.show(); + + // Create Wrapper + wrapper = $.effects.createWrapper( el ).css({ + overflow: "hidden" + }); + animate = ( el[0].tagName === "IMG" ) ? wrapper : el; + distance = animate[ size ](); + + // Shift + if ( show ) { + animate.css( size, 0 ); + animate.css( position, distance / 2 ); + } + + // Create Animation Object: + animation[ size ] = show ? distance : 0; + animation[ position ] = show ? 0 : distance / 2; + + // Animate + animate.animate( animation, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: function() { + if ( !show ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + } + }); + +}; + + +/*! + * jQuery UI Effects Drop 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/drop-effect/ + */ + + +var effectDrop = $.effects.effect.drop = function( o, done ) { + + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "hide" ), + show = mode === "show", + direction = o.direction || "left", + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg", + animation = { + opacity: show ? 1 : 0 + }, + distance; + + // Adjust + $.effects.save( el, props ); + el.show(); + $.effects.createWrapper( el ); + + distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2; + + if ( show ) { + el + .css( "opacity", 0 ) + .css( ref, motion === "pos" ? -distance : distance ); + } + + // Animation + animation[ ref ] = ( show ? + ( motion === "pos" ? "+=" : "-=" ) : + ( motion === "pos" ? "-=" : "+=" ) ) + + distance; + + // Animate + el.animate( animation, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: function() { + if ( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + } + }); +}; + + +/*! + * jQuery UI Effects Explode 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/explode-effect/ + */ + + +var effectExplode = $.effects.effect.explode = function( o, done ) { + + var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3, + cells = rows, + el = $( this ), + mode = $.effects.setMode( el, o.mode || "hide" ), + show = mode === "show", + + // show and then visibility:hidden the element before calculating offset + offset = el.show().css( "visibility", "hidden" ).offset(), + + // width and height of a piece + width = Math.ceil( el.outerWidth() / cells ), + height = Math.ceil( el.outerHeight() / rows ), + pieces = [], + + // loop + i, j, left, top, mx, my; + + // children animate complete: + function childComplete() { + pieces.push( this ); + if ( pieces.length === rows * cells ) { + animComplete(); + } + } + + // clone the element for each row and cell. + for ( i = 0; i < rows ; i++ ) { // ===> + top = offset.top + i * height; + my = i - ( rows - 1 ) / 2 ; + + for ( j = 0; j < cells ; j++ ) { // ||| + left = offset.left + j * width; + mx = j - ( cells - 1 ) / 2 ; + + // Create a clone of the now hidden main element that will be absolute positioned + // within a wrapper div off the -left and -top equal to size of our pieces + el + .clone() + .appendTo( "body" ) + .wrap( "<div></div>" ) + .css({ + position: "absolute", + visibility: "visible", + left: -j * width, + top: -i * height + }) + + // select the wrapper - make it overflow: hidden and absolute positioned based on + // where the original was located +left and +top equal to the size of pieces + .parent() + .addClass( "ui-effects-explode" ) + .css({ + position: "absolute", + overflow: "hidden", + width: width, + height: height, + left: left + ( show ? mx * width : 0 ), + top: top + ( show ? my * height : 0 ), + opacity: show ? 0 : 1 + }).animate({ + left: left + ( show ? 0 : mx * width ), + top: top + ( show ? 0 : my * height ), + opacity: show ? 1 : 0 + }, o.duration || 500, o.easing, childComplete ); + } + } + + function animComplete() { + el.css({ + visibility: "visible" + }); + $( pieces ).remove(); + if ( !show ) { + el.hide(); + } + done(); + } +}; + + +/*! + * jQuery UI Effects Fade 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/fade-effect/ + */ + + +var effectFade = $.effects.effect.fade = function( o, done ) { + var el = $( this ), + mode = $.effects.setMode( el, o.mode || "toggle" ); + + el.animate({ + opacity: mode + }, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: done + }); +}; + + +/*! + * jQuery UI Effects Fold 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/fold-effect/ + */ + + +var effectFold = $.effects.effect.fold = function( o, done ) { + + // Create element + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "hide" ), + show = mode === "show", + hide = mode === "hide", + size = o.size || 15, + percent = /([0-9]+)%/.exec( size ), + horizFirst = !!o.horizFirst, + widthFirst = show !== horizFirst, + ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ], + duration = o.duration / 2, + wrapper, distance, + animation1 = {}, + animation2 = {}; + + $.effects.save( el, props ); + el.show(); + + // Create Wrapper + wrapper = $.effects.createWrapper( el ).css({ + overflow: "hidden" + }); + distance = widthFirst ? + [ wrapper.width(), wrapper.height() ] : + [ wrapper.height(), wrapper.width() ]; + + if ( percent ) { + size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ]; + } + if ( show ) { + wrapper.css( horizFirst ? { + height: 0, + width: size + } : { + height: size, + width: 0 + }); + } + + // Animation + animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size; + animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0; + + // Animate + wrapper + .animate( animation1, duration, o.easing ) + .animate( animation2, duration, o.easing, function() { + if ( hide ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + }); + +}; + + +/*! + * jQuery UI Effects Highlight 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/highlight-effect/ + */ + + +var effectHighlight = $.effects.effect.highlight = function( o, done ) { + var elem = $( this ), + props = [ "backgroundImage", "backgroundColor", "opacity" ], + mode = $.effects.setMode( elem, o.mode || "show" ), + animation = { + backgroundColor: elem.css( "backgroundColor" ) + }; + + if (mode === "hide") { + animation.opacity = 0; + } + + $.effects.save( elem, props ); + + elem + .show() + .css({ + backgroundImage: "none", + backgroundColor: o.color || "#ffff99" + }) + .animate( animation, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: function() { + if ( mode === "hide" ) { + elem.hide(); + } + $.effects.restore( elem, props ); + done(); + } + }); +}; + + +/*! + * jQuery UI Effects Size 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/size-effect/ + */ + + +var effectSize = $.effects.effect.size = function( o, done ) { + + // Create element + var original, baseline, factor, + el = $( this ), + props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ], + + // Always restore + props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ], + + // Copy for children + props2 = [ "width", "height", "overflow" ], + cProps = [ "fontSize" ], + vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ], + hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ], + + // Set options + mode = $.effects.setMode( el, o.mode || "effect" ), + restore = o.restore || mode !== "effect", + scale = o.scale || "both", + origin = o.origin || [ "middle", "center" ], + position = el.css( "position" ), + props = restore ? props0 : props1, + zero = { + height: 0, + width: 0, + outerHeight: 0, + outerWidth: 0 + }; + + if ( mode === "show" ) { + el.show(); + } + original = { + height: el.height(), + width: el.width(), + outerHeight: el.outerHeight(), + outerWidth: el.outerWidth() + }; + + if ( o.mode === "toggle" && mode === "show" ) { + el.from = o.to || zero; + el.to = o.from || original; + } else { + el.from = o.from || ( mode === "show" ? zero : original ); + el.to = o.to || ( mode === "hide" ? zero : original ); + } + + // Set scaling factor + factor = { + from: { + y: el.from.height / original.height, + x: el.from.width / original.width + }, + to: { + y: el.to.height / original.height, + x: el.to.width / original.width + } + }; + + // Scale the css box + if ( scale === "box" || scale === "both" ) { + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + props = props.concat( vProps ); + el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from ); + el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to ); + } + + // Horizontal props scaling + if ( factor.from.x !== factor.to.x ) { + props = props.concat( hProps ); + el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from ); + el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to ); + } + } + + // Scale the content + if ( scale === "content" || scale === "both" ) { + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + props = props.concat( cProps ).concat( props2 ); + el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from ); + el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to ); + } + } + + $.effects.save( el, props ); + el.show(); + $.effects.createWrapper( el ); + el.css( "overflow", "hidden" ).css( el.from ); + + // Adjust + if (origin) { // Calculate baseline shifts + baseline = $.effects.getBaseline( origin, original ); + el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y; + el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x; + el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y; + el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x; + } + el.css( el.from ); // set top & left + + // Animate + if ( scale === "content" || scale === "both" ) { // Scale the children + + // Add margins/font-size + vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps); + hProps = hProps.concat([ "marginLeft", "marginRight" ]); + props2 = props0.concat(vProps).concat(hProps); + + el.find( "*[width]" ).each( function() { + var child = $( this ), + c_original = { + height: child.height(), + width: child.width(), + outerHeight: child.outerHeight(), + outerWidth: child.outerWidth() + }; + if (restore) { + $.effects.save(child, props2); + } + + child.from = { + height: c_original.height * factor.from.y, + width: c_original.width * factor.from.x, + outerHeight: c_original.outerHeight * factor.from.y, + outerWidth: c_original.outerWidth * factor.from.x + }; + child.to = { + height: c_original.height * factor.to.y, + width: c_original.width * factor.to.x, + outerHeight: c_original.height * factor.to.y, + outerWidth: c_original.width * factor.to.x + }; + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from ); + child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to ); + } + + // Horizontal props scaling + if ( factor.from.x !== factor.to.x ) { + child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from ); + child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to ); + } + + // Animate children + child.css( child.from ); + child.animate( child.to, o.duration, o.easing, function() { + + // Restore children + if ( restore ) { + $.effects.restore( child, props2 ); + } + }); + }); + } + + // Animate + el.animate( el.to, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: function() { + if ( el.to.opacity === 0 ) { + el.css( "opacity", el.from.opacity ); + } + if ( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + if ( !restore ) { + + // we need to calculate our new positioning based on the scaling + if ( position === "static" ) { + el.css({ + position: "relative", + top: el.to.top, + left: el.to.left + }); + } else { + $.each([ "top", "left" ], function( idx, pos ) { + el.css( pos, function( _, str ) { + var val = parseInt( str, 10 ), + toRef = idx ? el.to.left : el.to.top; + + // if original was "auto", recalculate the new value from wrapper + if ( str === "auto" ) { + return toRef + "px"; + } + + return val + toRef + "px"; + }); + }); + } + } + + $.effects.removeWrapper( el ); + done(); + } + }); + +}; + + +/*! + * jQuery UI Effects Scale 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/scale-effect/ + */ + + +var effectScale = $.effects.effect.scale = function( o, done ) { + + // Create element + var el = $( this ), + options = $.extend( true, {}, o ), + mode = $.effects.setMode( el, o.mode || "effect" ), + percent = parseInt( o.percent, 10 ) || + ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ), + direction = o.direction || "both", + origin = o.origin, + original = { + height: el.height(), + width: el.width(), + outerHeight: el.outerHeight(), + outerWidth: el.outerWidth() + }, + factor = { + y: direction !== "horizontal" ? (percent / 100) : 1, + x: direction !== "vertical" ? (percent / 100) : 1 + }; + + // We are going to pass this effect to the size effect: + options.effect = "size"; + options.queue = false; + options.complete = done; + + // Set default origin and restore for show/hide + if ( mode !== "effect" ) { + options.origin = origin || [ "middle", "center" ]; + options.restore = true; + } + + options.from = o.from || ( mode === "show" ? { + height: 0, + width: 0, + outerHeight: 0, + outerWidth: 0 + } : original ); + options.to = { + height: original.height * factor.y, + width: original.width * factor.x, + outerHeight: original.outerHeight * factor.y, + outerWidth: original.outerWidth * factor.x + }; + + // Fade option to support puff + if ( options.fade ) { + if ( mode === "show" ) { + options.from.opacity = 0; + options.to.opacity = 1; + } + if ( mode === "hide" ) { + options.from.opacity = 1; + options.to.opacity = 0; + } + } + + // Animate + el.effect( options ); + +}; + + +/*! + * jQuery UI Effects Puff 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/puff-effect/ + */ + + +var effectPuff = $.effects.effect.puff = function( o, done ) { + var elem = $( this ), + mode = $.effects.setMode( elem, o.mode || "hide" ), + hide = mode === "hide", + percent = parseInt( o.percent, 10 ) || 150, + factor = percent / 100, + original = { + height: elem.height(), + width: elem.width(), + outerHeight: elem.outerHeight(), + outerWidth: elem.outerWidth() + }; + + $.extend( o, { + effect: "scale", + queue: false, + fade: true, + mode: mode, + complete: done, + percent: hide ? percent : 100, + from: hide ? + original : + { + height: original.height * factor, + width: original.width * factor, + outerHeight: original.outerHeight * factor, + outerWidth: original.outerWidth * factor + } + }); + + elem.effect( o ); +}; + + +/*! + * jQuery UI Effects Pulsate 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/pulsate-effect/ + */ + + +var effectPulsate = $.effects.effect.pulsate = function( o, done ) { + var elem = $( this ), + mode = $.effects.setMode( elem, o.mode || "show" ), + show = mode === "show", + hide = mode === "hide", + showhide = ( show || mode === "hide" ), + + // showing or hiding leaves of the "last" animation + anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ), + duration = o.duration / anims, + animateTo = 0, + queue = elem.queue(), + queuelen = queue.length, + i; + + if ( show || !elem.is(":visible")) { + elem.css( "opacity", 0 ).show(); + animateTo = 1; + } + + // anims - 1 opacity "toggles" + for ( i = 1; i < anims; i++ ) { + elem.animate({ + opacity: animateTo + }, duration, o.easing ); + animateTo = 1 - animateTo; + } + + elem.animate({ + opacity: animateTo + }, duration, o.easing); + + elem.queue(function() { + if ( hide ) { + elem.hide(); + } + done(); + }); + + // We just queued up "anims" animations, we need to put them next in the queue + if ( queuelen > 1 ) { + queue.splice.apply( queue, + [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); + } + elem.dequeue(); +}; + + +/*! + * jQuery UI Effects Shake 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/shake-effect/ + */ + + +var effectShake = $.effects.effect.shake = function( o, done ) { + + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "effect" ), + direction = o.direction || "left", + distance = o.distance || 20, + times = o.times || 3, + anims = times * 2 + 1, + speed = Math.round( o.duration / anims ), + ref = (direction === "up" || direction === "down") ? "top" : "left", + positiveMotion = (direction === "up" || direction === "left"), + animation = {}, + animation1 = {}, + animation2 = {}, + i, + + // we will need to re-assemble the queue to stack our animations in place + queue = el.queue(), + queuelen = queue.length; + + $.effects.save( el, props ); + el.show(); + $.effects.createWrapper( el ); + + // Animation + animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance; + animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2; + animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2; + + // Animate + el.animate( animation, speed, o.easing ); + + // Shakes + for ( i = 1; i < times; i++ ) { + el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing ); + } + el + .animate( animation1, speed, o.easing ) + .animate( animation, speed / 2, o.easing ) + .queue(function() { + if ( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + }); + + // inject all the animations we just queued to be first in line (after "inprogress") + if ( queuelen > 1) { + queue.splice.apply( queue, + [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); + } + el.dequeue(); + +}; + + +/*! + * jQuery UI Effects Slide 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/slide-effect/ + */ + + +var effectSlide = $.effects.effect.slide = function( o, done ) { + + // Create element + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "width", "height" ], + mode = $.effects.setMode( el, o.mode || "show" ), + show = mode === "show", + direction = o.direction || "left", + ref = (direction === "up" || direction === "down") ? "top" : "left", + positiveMotion = (direction === "up" || direction === "left"), + distance, + animation = {}; + + // Adjust + $.effects.save( el, props ); + el.show(); + distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ); + + $.effects.createWrapper( el ).css({ + overflow: "hidden" + }); + + if ( show ) { + el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance ); + } + + // Animation + animation[ ref ] = ( show ? + ( positiveMotion ? "+=" : "-=") : + ( positiveMotion ? "-=" : "+=")) + + distance; + + // Animate + el.animate( animation, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: function() { + if ( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + } + }); +}; + + +/*! + * jQuery UI Effects Transfer 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/transfer-effect/ + */ + + +var effectTransfer = $.effects.effect.transfer = function( o, done ) { + var elem = $( this ), + target = $( o.to ), + targetFixed = target.css( "position" ) === "fixed", + body = $("body"), + fixTop = targetFixed ? body.scrollTop() : 0, + fixLeft = targetFixed ? body.scrollLeft() : 0, + endPosition = target.offset(), + animation = { + top: endPosition.top - fixTop, + left: endPosition.left - fixLeft, + height: target.innerHeight(), + width: target.innerWidth() + }, + startPosition = elem.offset(), + transfer = $( "<div class='ui-effects-transfer'></div>" ) + .appendTo( document.body ) + .addClass( o.className ) + .css({ + top: startPosition.top - fixTop, + left: startPosition.left - fixLeft, + height: elem.innerHeight(), + width: elem.innerWidth(), + position: targetFixed ? "fixed" : "absolute" + }) + .animate( animation, o.duration, o.easing, function() { + transfer.remove(); + done(); + }); +}; + + + +}));
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.min.css b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.min.css new file mode 100644 index 0000000..84c192c --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.min.css @@ -0,0 +1,7 @@ +/*! jQuery UI - v1.11.4 - 2016-04-08 +* http://jqueryui.com +* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#2b2b2b;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:0 0 0 0;padding:5px;background:#666;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.min.js b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.min.js new file mode 100644 index 0000000..14b1239 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.min.js @@ -0,0 +1,13 @@ +/*! jQuery UI - v1.11.4 - 2016-04-08 +* http://jqueryui.com +* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, menu.js, progressbar.js, selectmenu.js, slider.js, spinner.js, tabs.js, tooltip.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=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 i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):(o.length&&(n=e.widget.extend.apply(null,[n].concat(o))),this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))})),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),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;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.4",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)} +},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,s._parent=i.helper.parent(),a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.droppable",{version:"1.11.4",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=e(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=e(this.handles[i]),this._on(this.handles[i],{mousedown:o._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options;e(i.alsoResize).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0};e(n.alsoResize).each(function(){var t=e(this),s=e(this).data("ui-resizable-alsoresize"),n={},a=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(a,function(e,t){var i=(s[t]||0)+(r[t]||0);i&&i>=0&&(n[t]=i||null)}),t.css(n)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=l-t.width,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.selectable",e.ui.mouse,{version:"1.11.4",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this; +this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-this.document.scrollTop()<o.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-o.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<o.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+o.scrollSpeed)),t.pageX-this.document.scrollLeft()<o.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-o.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<o.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s],this.document[0]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i],this.document[0]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tbody"===s?t._createTrPlaceholder(t.currentItem.find("tr").eq(0),e("<tr>",t.document[0]).appendTo(n)):"tr"===s?t._createTrPlaceholder(t.currentItem,n):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_createTrPlaceholder:function(t,i){var s=this;t.children().each(function(){e("<td> </td>",s.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.accordion",{version:"1.11.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels))) +},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(e(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.css("box-sizing"),l=e.length&&(!t.length||e.index()<t.index()),u=this.options.animate||{},d=l&&u.down||u,c=function(){o._toggleComplete(i)};return"number"==typeof d&&(a=d),"string"==typeof d&&(n=d),n=n||d.easing||u.easing,a=a||d.duration||u.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:c,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,c):e.animate(this.showProps,a,n,c)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.4",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget("ui.autocomplete",{version:"1.11.4",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.4",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.4",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.4"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this +},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),v===n&&(v=null))},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,H,z,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",C=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+u)%7,C+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[N]+"'>"+p[N]+"</span></th>";for(M+=C+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),H=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=H,z=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;H>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(z)+"</td>":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[z]):[!0,""],j=z.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>z||$&&z>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(j?" ui-datepicker-other-month":"")+(z.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===z.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(j&&!v?"":" "+O[1]+(z.getTime()===G.getTime()?" "+this._currentClass:"")+(z.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(j&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"'")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+z.getMonth()+"' data-year='"+z.getFullYear()+"'")+">"+(j&&!v?" ":W?"<span class='ui-state-default'>"+z.getDate()+"</span>":"<a class='ui-state-default"+(z.getTime()===R.getTime()?" ui-state-highlight":"")+(z.getTime()===G.getTime()?" ui-state-active":"")+(j?" ui-priority-secondary":"")+"' href='#'>"+z.getDate()+"</a>")+"</td>",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":" ")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":" ")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.4",e.datepicker,e.widget("ui.dialog",{version:"1.11.4",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this; +return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.progressbar",{version:"1.11.4",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectmenu",{version:"1.11.4",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this;this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html(" ")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.val(),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=this.options.max,t=this._valueMin(),i=this.options.step,s=Math.floor(+(e-t).toFixed(this._precision())/i)*i;e=s+t,this.max=parseFloat(e.toFixed(this._precision()))},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.spinner",{version:"1.11.4",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable() +},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>▲</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>▼</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger("load",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.4",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(t,s),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){n._delay(function(){e.data("ui-tooltip-open")&&(t&&(t.type=a),this._open(t,e,i))})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,o.is(":hidden")||o.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("<div>").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:o})}},_registerCloseHandlers:function(t,i){var s={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&&"mouseover"!==t.type||(s.mouseleave="close"),t&&"focusin"!==t.type||(s.focusout="close"),this._on(!0,i,s)},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);return a?(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}});var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.4",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement; +return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})}});
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.structure.css b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.structure.css new file mode 100644 index 0000000..8184e15 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.structure.css @@ -0,0 +1,833 @@ +/*! + * jQuery UI CSS Framework 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ + font-size: 100%; +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + position: relative; + margin: 0; + padding: 3px 1em 3px .4em; + cursor: pointer; + min-height: 0; /* support: IE7 */ + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + /* Support: IE7 */ + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-button { + display: inline-block; + overflow: hidden; + position: relative; + text-decoration: none; + cursor: pointer; +} +.ui-selectmenu-button span.ui-icon { + right: 0.5em; + left: auto; + margin-top: -8px; + position: absolute; + top: 50%; +} +.ui-selectmenu-button span.ui-selectmenu-text { + text-align: left; + padding: 0.4em 2.1em 0.4em 1em; + display: block; + line-height: 1.4; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertically center icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} diff --git a/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.structure.min.css b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.structure.min.css new file mode 100644 index 0000000..10ca000 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.structure.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.11.4 - 2016-04-08 +* http://jqueryui.com +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.theme.css b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.theme.css new file mode 100644 index 0000000..998a19d --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.theme.css @@ -0,0 +1,410 @@ +/*! + * jQuery UI CSS Framework 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; +} +.ui-widget-content a { + color: #333333; +} +.ui-widget-header { + border: 1px solid #dddddd; + background: #e9e9e9; + color: #333333; + font-weight: bold; +} +.ui-widget-header a { + color: #333333; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #c5c5c5; + background: #f6f6f6; + font-weight: normal; + color: #454545; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #454545; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #cccccc; + background: #ededed; + font-weight: normal; + color: #2b2b2b; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #2b2b2b; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #003eff; + background: #007fff; + font-weight: normal; + color: #ffffff; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #777620; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #5f3f3f; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #5f3f3f; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-state-default .ui-icon { + background-image: url("images/ui-icons_777777_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url("images/ui-icons_555555_256x240.png"); +} +.ui-state-active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} +.ui-state-highlight .ui-icon { + background-image: url("images/ui-icons_777620_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cc0000_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 3px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + margin: 0px 0 0 0px; + padding: 5px; + background: #666666; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ + border-radius: 8px; +} diff --git a/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.theme.min.css b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.theme.min.css new file mode 100644 index 0000000..1512885 --- /dev/null +++ b/public/admin/view/javascript/jquery/jquery-ui/jquery-ui.theme.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.11.4 - 2016-04-08 +* http://jqueryui.com +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#2b2b2b;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:0 0 0 0;padding:5px;background:#666;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jqvmap/data/jquery.vmap.sampledata.js b/public/admin/view/javascript/jquery/jqvmap/data/jquery.vmap.sampledata.js new file mode 100644 index 0000000..9d018ab --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/data/jquery.vmap.sampledata.js @@ -0,0 +1 @@ +var sample_data = {"af":"16.63","al":"11.58","dz":"158.97","ao":"85.81","ag":"1.1","ar":"351.02","am":"8.83","au":"1219.72","at":"366.26","az":"52.17","bs":"7.54","bh":"21.73","bd":"105.4","bb":"3.96","by":"52.89","be":"461.33","bz":"1.43","bj":"6.49","bt":"1.4","bo":"19.18","ba":"16.2","bw":"12.5","br":"2023.53","bn":"11.96","bg":"44.84","bf":"8.67","bi":"1.47","kh":"11.36","cm":"21.88","ca":"1563.66","cv":"1.57","cf":"2.11","td":"7.59","cl":"199.18","cn":"5745.13","co":"283.11","km":"0.56","cd":"12.6","cg":"11.88","cr":"35.02","ci":"22.38","hr":"59.92","cy":"22.75","cz":"195.23","dk":"304.56","dj":"1.14","dm":"0.38","do":"50.87","ec":"61.49","eg":"216.83","sv":"21.8","gq":"14.55","er":"2.25","ee":"19.22","et":"30.94","fj":"3.15","fi":"231.98","fr":"2555.44","ga":"12.56","gm":"1.04","ge":"11.23","de":"3305.9","gh":"18.06","gr":"305.01","gd":"0.65","gt":"40.77","gn":"4.34","gw":"0.83","gy":"2.2","ht":"6.5","hn":"15.34","hk":"226.49","hu":"132.28","is":"12.77","in":"1430.02","id":"695.06","ir":"337.9","iq":"84.14","ie":"204.14","il":"201.25","it":"2036.69","jm":"13.74","jp":"5390.9","jo":"27.13","kz":"129.76","ke":"32.42","ki":"0.15","kr":"986.26","undefined":"5.73","kw":"117.32","kg":"4.44","la":"6.34","lv":"23.39","lb":"39.15","ls":"1.8","lr":"0.98","ly":"77.91","lt":"35.73","lu":"52.43","mk":"9.58","mg":"8.33","mw":"5.04","my":"218.95","mv":"1.43","ml":"9.08","mt":"7.8","mr":"3.49","mu":"9.43","mx":"1004.04","md":"5.36","mn":"5.81","me":"3.88","ma":"91.7","mz":"10.21","mm":"35.65","na":"11.45","np":"15.11","nl":"770.31","nz":"138","ni":"6.38","ne":"5.6","ng":"206.66","no":"413.51","om":"53.78","pk":"174.79","pa":"27.2","pg":"8.81","py":"17.17","pe":"153.55","ph":"189.06","pl":"438.88","pt":"223.7","qa":"126.52","ro":"158.39","ru":"1476.91","rw":"5.69","ws":"0.55","st":"0.19","sa":"434.44","sn":"12.66","rs":"38.92","sc":"0.92","sl":"1.9","sg":"217.38","sk":"86.26","si":"46.44","sb":"0.67","za":"354.41","es":"1374.78","lk":"48.24","kn":"0.56","lc":"1","vc":"0.58","sd":"65.93","sr":"3.3","sz":"3.17","se":"444.59","ch":"522.44","sy":"59.63","tw":"426.98","tj":"5.58","tz":"22.43","th":"312.61","tl":"0.62","tg":"3.07","to":"0.3","tt":"21.2","tn":"43.86","tr":"729.05","tm":0,"ug":"17.12","ua":"136.56","ae":"239.65","gb":"2258.57","us":"14624.18","uy":"40.71","uz":"37.72","vu":"0.72","ve":"285.21","vn":"101.99","ye":"30.02","zm":"15.69","zw":"5.57"};
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jqvmap/jquery.vmap.js b/public/admin/view/javascript/jquery/jqvmap/jquery.vmap.js new file mode 100644 index 0000000..db70d85 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/jquery.vmap.js @@ -0,0 +1,1100 @@ +/*! + * jQVMap Version 1.0 + * + * http://jqvmap.com + * + * Copyright 2012, Peter Schmalfeldt <manifestinteractive@gmail.com> + * Copyright 2011-2012, Kirill Lebedev + * Licensed under the MIT license. + * + * Fork Me @ https://github.com/manifestinteractive/jqvmap + */ +(function ($) { + + var apiParams = { + colors: 1, + values: 1, + backgroundColor: 1, + scaleColors: 1, + normalizeFunction: 1, + enableZoom: 1, + showTooltip: 1, + borderColor: 1, + borderWidth: 1, + borderOpacity: 1, + selectedRegions: 1, + multiSelectRegion: 1 + }; + + var apiEvents = { + onLabelShow: 'labelShow', + onRegionOver: 'regionMouseOver', + onRegionOut: 'regionMouseOut', + onRegionClick: 'regionClick', + onRegionSelect: 'regionSelect', + onRegionDeselect: 'regionDeselect' + }; + + $.fn.vectorMap = function (options) { + + var defaultParams = { + map: 'world_en', + backgroundColor: '#a5bfdd', + color: '#f4f3f0', + hoverColor: '#c9dfaf', + selectedColor: '#c9dfaf', + scaleColors: ['#b6d6ff', '#005ace'], + normalizeFunction: 'linear', + enableZoom: true, + showTooltip: true, + borderColor: '#818181', + borderWidth: 1, + borderOpacity: 0.25, + selectedRegions: null, + multiSelectRegion: false + }, map = this.data('mapObject'); + + if (options === 'addMap') { + WorldMap.maps[arguments[1]] = arguments[2]; + } else if (options === 'set' && apiParams[arguments[1]]) { + map['set' + arguments[1].charAt(0).toUpperCase() + arguments[1].substr(1)].apply(map, Array.prototype.slice.call(arguments, 2)); + } else if (typeof options === 'string' && + typeof map[options] === 'function') { + return map[options].apply(map, Array.prototype.slice.call(arguments, 1)); + } else { + $.extend(defaultParams, options); + defaultParams.container = this; + this.css({ position: 'relative', overflow: 'hidden' }); + + map = new WorldMap(defaultParams); + + this.data('mapObject', map); + + for (var e in apiEvents) { + if (defaultParams[e]) { + this.bind(apiEvents[e] + '.jqvmap', defaultParams[e]); + } + } + } + }; + + var VectorCanvas = function (width, height, params) { + this.mode = window.SVGAngle ? 'svg' : 'vml'; + this.params = params; + + if (this.mode == 'svg') { + this.createSvgNode = function (nodeName) { + return document.createElementNS(this.svgns, nodeName); + }; + } else { + try { + if (!document.namespaces.rvml) { + document.namespaces.add("rvml", "urn:schemas-microsoft-com:vml"); + } + this.createVmlNode = function (tagName) { + return document.createElement('<rvml:' + tagName + ' class="rvml">'); + }; + } catch (e) { + this.createVmlNode = function (tagName) { + return document.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">'); + }; + } + + document.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)"); + } + + if (this.mode == 'svg') { + this.canvas = this.createSvgNode('svg'); + } else { + this.canvas = this.createVmlNode('group'); + this.canvas.style.position = 'absolute'; + } + + this.setSize(width, height); + }; + + VectorCanvas.prototype = { + svgns: "http://www.w3.org/2000/svg", + mode: 'svg', + width: 0, + height: 0, + canvas: null, + + setSize: function (width, height) { + if (this.mode == 'svg') { + this.canvas.setAttribute('width', width); + this.canvas.setAttribute('height', height); + } else { + this.canvas.style.width = width + "px"; + this.canvas.style.height = height + "px"; + this.canvas.coordsize = width + ' ' + height; + this.canvas.coordorigin = "0 0"; + if (this.rootGroup) { + var pathes = this.rootGroup.getElementsByTagName('shape'); + for (var i = 0, l = pathes.length; i < l; i++) { + pathes[i].coordsize = width + ' ' + height; + pathes[i].style.width = width + 'px'; + pathes[i].style.height = height + 'px'; + } + this.rootGroup.coordsize = width + ' ' + height; + this.rootGroup.style.width = width + 'px'; + this.rootGroup.style.height = height + 'px'; + } + } + this.width = width; + this.height = height; + }, + + createPath: function (config) { + var node; + if (this.mode == 'svg') { + node = this.createSvgNode('path'); + node.setAttribute('d', config.path); + + if (this.params.borderColor !== null) { + node.setAttribute('stroke', this.params.borderColor); + } + if (this.params.borderWidth > 0) { + node.setAttribute('stroke-width', this.params.borderWidth); + node.setAttribute('stroke-linecap', 'round'); + node.setAttribute('stroke-linejoin', 'round'); + } + if (this.params.borderOpacity > 0) { + node.setAttribute('stroke-opacity', this.params.borderOpacity); + } + + node.setFill = function (color) { + this.setAttribute("fill", color); + if (this.getAttribute("original") === null) { + this.setAttribute("original", color); + } + }; + + node.getFill = function (color) { + return this.getAttribute("fill"); + }; + + node.getOriginalFill = function () { + return this.getAttribute("original"); + }; + + node.setOpacity = function (opacity) { + this.setAttribute('fill-opacity', opacity); + }; + } else { + node = this.createVmlNode('shape'); + node.coordorigin = "0 0"; + node.coordsize = this.width + ' ' + this.height; + node.style.width = this.width + 'px'; + node.style.height = this.height + 'px'; + node.fillcolor = WorldMap.defaultFillColor; + node.stroked = false; + node.path = VectorCanvas.pathSvgToVml(config.path); + + var scale = this.createVmlNode('skew'); + scale.on = true; + scale.matrix = '0.01,0,0,0.01,0,0'; + scale.offset = '0,0'; + + node.appendChild(scale); + + var fill = this.createVmlNode('fill'); + node.appendChild(fill); + + node.setFill = function (color) { + this.getElementsByTagName('fill')[0].color = color; + if (this.getAttribute("original") === null) { + this.setAttribute("original", color); + } + }; + + node.getFill = function (color) { + return this.getElementsByTagName('fill')[0].color; + }; + node.getOriginalFill = function () { + return this.getAttribute("original"); + }; + node.setOpacity = function (opacity) { + this.getElementsByTagName('fill')[0].opacity = parseInt(opacity * 100, 10) + '%'; + }; + } + return node; + }, + + createGroup: function (isRoot) { + var node; + if (this.mode == 'svg') { + node = this.createSvgNode('g'); + } else { + node = this.createVmlNode('group'); + node.style.width = this.width + 'px'; + node.style.height = this.height + 'px'; + node.style.left = '0px'; + node.style.top = '0px'; + node.coordorigin = "0 0"; + node.coordsize = this.width + ' ' + this.height; + } + + if (isRoot) { + this.rootGroup = node; + } + return node; + }, + + applyTransformParams: function (scale, transX, transY) { + if (this.mode == 'svg') { + this.rootGroup.setAttribute('transform', 'scale(' + scale + ') translate(' + transX + ', ' + transY + ')'); + } else { + this.rootGroup.coordorigin = (this.width - transX) + ',' + (this.height - transY); + this.rootGroup.coordsize = this.width / scale + ',' + this.height / scale; + } + } + }; + + VectorCanvas.pathSvgToVml = function (path) { + var result = ''; + var cx = 0, cy = 0, ctrlx, ctrly; + + return path.replace(/([MmLlHhVvCcSs])((?:-?(?:\d+)?(?:\.\d+)?,?\s?)+)/g, function (segment, letter, coords, index) { + coords = coords.replace(/(\d)-/g, '$1,-').replace(/\s+/g, ',').split(','); + if (!coords[0]) { + coords.shift(); + } + + for (var i = 0, l = coords.length; i < l; i++) { + coords[i] = Math.round(100 * coords[i]); + } + + switch (letter) { + case 'm': + cx += coords[0]; + cy += coords[1]; + return 't' + coords.join(','); + break; + + case 'M': + cx = coords[0]; + cy = coords[1]; + return 'm' + coords.join(','); + break; + + case 'l': + cx += coords[0]; + cy += coords[1]; + return 'r' + coords.join(','); + break; + + case 'L': + cx = coords[0]; + cy = coords[1]; + return 'l' + coords.join(','); + break; + + case 'h': + cx += coords[0]; + return 'r' + coords[0] + ',0'; + break; + + case 'H': + cx = coords[0]; + return 'l' + cx + ',' + cy; + break; + + case 'v': + cy += coords[0]; + return 'r0,' + coords[0]; + break; + + case 'V': + cy = coords[0]; + return 'l' + cx + ',' + cy; + break; + + case 'c': + ctrlx = cx + coords[coords.length - 4]; + ctrly = cy + coords[coords.length - 3]; + cx += coords[coords.length - 2]; + cy += coords[coords.length - 1]; + return 'v' + coords.join(','); + break; + + case 'C': + ctrlx = coords[coords.length - 4]; + ctrly = coords[coords.length - 3]; + cx = coords[coords.length - 2]; + cy = coords[coords.length - 1]; + return 'c' + coords.join(','); + break; + + case 's': + coords.unshift(cy - ctrly); + coords.unshift(cx - ctrlx); + ctrlx = cx + coords[coords.length - 4]; + ctrly = cy + coords[coords.length - 3]; + cx += coords[coords.length - 2]; + cy += coords[coords.length - 1]; + return 'v' + coords.join(','); + break; + + case 'S': + coords.unshift(cy + cy - ctrly); + coords.unshift(cx + cx - ctrlx); + ctrlx = coords[coords.length - 4]; + ctrly = coords[coords.length - 3]; + cx = coords[coords.length - 2]; + cy = coords[coords.length - 1]; + return 'c' + coords.join(','); + break; + + default: + return false; + break; + } + + return ''; + + }).replace(/z/g, ''); + }; + + var WorldMap = function (params) { + params = params || {}; + var map = this; + var mapData = WorldMap.maps[params.map]; + + this.selectedRegions = []; + this.multiSelectRegion = params.multiSelectRegion; + + this.container = params.container; + + this.defaultWidth = mapData.width; + this.defaultHeight = mapData.height; + + this.color = params.color; + this.selectedColor = params.selectedColor; + this.hoverColor = params.hoverColor; + this.hoverOpacity = params.hoverOpacity; + this.setBackgroundColor(params.backgroundColor); + + this.width = params.container.width(); + this.height = params.container.height(); + + this.resize(); + + jQuery(window).resize(function () { + map.width = params.container.width(); + map.height = params.container.height(); + map.resize(); + map.canvas.setSize(map.width, map.height); + map.applyTransform(); + }); + + this.canvas = new VectorCanvas(this.width, this.height, params); + params.container.append(this.canvas.canvas); + + this.makeDraggable(); + + this.rootGroup = this.canvas.createGroup(true); + + this.index = WorldMap.mapIndex; + this.label = jQuery('<div/>').addClass('jqvmap-label').appendTo(jQuery('body')).hide(); + + if (params.enableZoom) { + jQuery('<div/>').addClass('jqvmap-zoomin').text('+').appendTo(params.container); + jQuery('<div/>').addClass('jqvmap-zoomout').html('−').appendTo(params.container); + } + + map.countries = []; + + for (var key in mapData.pathes) { + var path = this.canvas.createPath({ + path: mapData.pathes[key].path + }); + + path.setFill(this.color); + path.id = map.getCountryId(key); + map.countries[key] = path; + + if (this.canvas.mode == 'svg') { + path.setAttribute('class', 'jvectormap-region'); + } else { + jQuery(path).addClass('jvectormap-region'); + } + + jQuery(this.rootGroup).append(path); + } + + jQuery(params.container).delegate(this.canvas.mode == 'svg' ? 'path' : 'shape', 'mouseover mouseout', function (e) { + var path = e.target, + code = e.target.id.split('_').pop(), + labelShowEvent = $.Event('labelShow.jqvmap'), + regionMouseOverEvent = $.Event('regionMouseOver.jqvmap'); + + if (e.type == 'mouseover') { + jQuery(params.container).trigger(regionMouseOverEvent, [code, mapData.pathes[code].name]); + if (!regionMouseOverEvent.isDefaultPrevented()) { + map.highlight(code, path); + } + if (params.showTooltip) { + map.label.text(mapData.pathes[code].name); + jQuery(params.container).trigger(labelShowEvent, [map.label, code]); + + if (!labelShowEvent.isDefaultPrevented()) { + map.label.show(); + map.labelWidth = map.label.width(); + map.labelHeight = map.label.height(); + } + } + } else { + map.unhighlight(code, path); + + map.label.hide(); + jQuery(params.container).trigger('regionMouseOut.jqvmap', [code, mapData.pathes[code].name]); + } + }); + + jQuery(params.container).delegate(this.canvas.mode == 'svg' ? 'path' : 'shape', 'click', function (e) { + if (!params.multiSelectRegion) { + for (var key in mapData.pathes) { + map.countries[key].currentFillColor = map.countries[key].getOriginalFill(); + map.countries[key].setFill(map.countries[key].getOriginalFill()); + } + } + + var path = e.target; + var code = e.target.id.split('_').pop(); + + jQuery(params.container).trigger('regionClick.jqvmap', [code, mapData.pathes[code].name]); + if (!regionClickEvent.isDefaultPrevented()) { + if (map.selectedRegions.indexOf(code) !== -1) { + map.deselect(code, path); + } else { + map.select(code, path); + } + } + + //console.log(selectedRegions); + + }); + + if (params.showTooltip) { + params.container.mousemove(function (e) { + if (map.label.is(':visible')) { + var left = e.pageX - 15 - map.labelWidth; + var top = e.pageY - 15 - map.labelHeight; + + if(left < 0) + left = e.pageX + 15; + if(top < 0) + top = e.pageY + 15; + + map.label.css({ + left: left, + top: top + }); + } + }); + } + + this.setColors(params.colors); + + this.canvas.canvas.appendChild(this.rootGroup); + + this.applyTransform(); + + this.colorScale = new ColorScale(params.scaleColors, params.normalizeFunction, params.valueMin, params.valueMax); + + if (params.values) { + this.values = params.values; + this.setValues(params.values); + } + + if (params.selectedRegions) { + if (params.selectedRegions instanceof Array) { + for(var k in params.selectedRegions) { + this.select(params.selectedRegions[k].toLowerCase()); + } + } else { + this.select(params.selectedRegions.toLowerCase()); + } + } + + this.bindZoomButtons(); + + if(params.pins) { + /*if(params.pinMode) { + if(params.pinMode != "id" && params.pinMode != "content") { + params.pinMode = "content"; + } + } else { + params.pinMode = "content"; + }*/ + this.pinHandlers = false; + this.placePins(params.pins, params.pinMode); + } + + WorldMap.mapIndex++; + }; + + WorldMap.prototype = { + transX: 0, + transY: 0, + scale: 1, + baseTransX: 0, + baseTransY: 0, + baseScale: 1, + width: 0, + height: 0, + countries: {}, + countriesColors: {}, + countriesData: {}, + zoomStep: 1.4, + zoomMaxStep: 4, + zoomCurStep: 1, + + setColors: function (key, color) { + if (typeof key == 'string') { + this.countries[key].setFill(color); + this.countries[key].setAttribute("original", color); + } else { + var colors = key; + + for (var code in colors) { + if (this.countries[code]) { + this.countries[code].setFill(colors[code]); + this.countries[code].setAttribute("original", colors[code]); + } + } + } + }, + + setValues: function (values) { + var max = 0, + min = Number.MAX_VALUE, + val; + + for (var cc in values) { + val = parseFloat(values[cc]); + if (val > max) { + max = values[cc]; + } + if (val && val < min) { + min = val; + } + } + + this.colorScale.setMin(min); + this.colorScale.setMax(max); + + var colors = {}; + for (cc in values) { + val = parseFloat(values[cc]); + if (val) { + colors[cc] = this.colorScale.getColor(val); + } else { + colors[cc] = this.color; + } + } + this.setColors(colors); + this.values = values; + }, + + setBackgroundColor: function (backgroundColor) { + this.container.css('background-color', backgroundColor); + }, + + setScaleColors: function (colors) { + this.colorScale.setColors(colors); + + if (this.values) { + this.setValues(this.values); + } + }, + + setNormalizeFunction: function (f) { + this.colorScale.setNormalizeFunction(f); + + if (this.values) { + this.setValues(this.values); + } + }, + + highlight: function (cc, path) { + path = path || $('#' + this.getCountryId(cc))[0]; + if (this.hoverOpacity) { + path.setOpacity(this.hoverOpacity); + } else if (this.hoverColor) { + path.currentFillColor = path.getFill() + ''; + path.setFill(this.hoverColor); + } + }, + + unhighlight: function (cc, path) { + path = path || $('#' + this.getCountryId(cc))[0]; + path.setOpacity(1); + if (path.currentFillColor) { + path.setFill(path.currentFillColor); + } + }, + + select: function (cc, path) { + path = path || $('#' + this.getCountryId(cc))[0]; + if(this.selectedRegions.indexOf(cc) < 0) { + if (this.multiSelectRegion) { + this.selectedRegions.push(cc); + } else { + this.selectedRegions = [cc]; + } + // MUST BE after the change of selectedRegions + // Otherwise, we might loop + $(this.container).trigger('regionSelect.jqvmap', [cc]); + if (this.selectedColor) { + path.currentFillColor = this.selectedColor; + path.setFill(this.selectedColor); + } + } + }, + + deselect: function (cc, path) { + path = path || $('#' + this.getCountryId(cc))[0]; + if(this.selectedRegions.indexOf(cc) >= 0) { + this.selectedRegions.splice(this.selectedRegions.indexOf(cc), 1); + // MUST BE after the change of selectedRegions + // Otherwise, we might loop + $(this.container).trigger('regionDeselect.jqvmap', [cc]); + path.currentFillColor = path.getOriginalFill(); + path.setFill(path.getOriginalFill()); + } + }, + + isSelected: function(cc) { + return this.selectedRegions.indexOf(cc) >= 0; + }, + + resize: function () { + var curBaseScale = this.baseScale; + if (this.width / this.height > this.defaultWidth / this.defaultHeight) { + this.baseScale = this.height / this.defaultHeight; + this.baseTransX = Math.abs(this.width - this.defaultWidth * this.baseScale) / (2 * this.baseScale); + } else { + this.baseScale = this.width / this.defaultWidth; + this.baseTransY = Math.abs(this.height - this.defaultHeight * this.baseScale) / (2 * this.baseScale); + } + this.scale *= this.baseScale / curBaseScale; + this.transX *= this.baseScale / curBaseScale; + this.transY *= this.baseScale / curBaseScale; + }, + + reset: function () { + this.countryTitle.reset(); + for (var key in this.countries) { + this.countries[key].setFill(WorldMap.defaultColor); + } + this.scale = this.baseScale; + this.transX = this.baseTransX; + this.transY = this.baseTransY; + this.applyTransform(); + }, + + applyTransform: function () { + var maxTransX, maxTransY, minTransX, minTransY; + if (this.defaultWidth * this.scale <= this.width) { + maxTransX = (this.width - this.defaultWidth * this.scale) / (2 * this.scale); + minTransX = (this.width - this.defaultWidth * this.scale) / (2 * this.scale); + } else { + maxTransX = 0; + minTransX = (this.width - this.defaultWidth * this.scale) / this.scale; + } + + if (this.defaultHeight * this.scale <= this.height) { + maxTransY = (this.height - this.defaultHeight * this.scale) / (2 * this.scale); + minTransY = (this.height - this.defaultHeight * this.scale) / (2 * this.scale); + } else { + maxTransY = 0; + minTransY = (this.height - this.defaultHeight * this.scale) / this.scale; + } + + if (this.transY > maxTransY) { + this.transY = maxTransY; + } + else if (this.transY < minTransY) { + this.transY = minTransY; + } + if (this.transX > maxTransX) { + this.transX = maxTransX; + } + else if (this.transX < minTransX) { + this.transX = minTransX; + } + + this.canvas.applyTransformParams(this.scale, this.transX, this.transY); + }, + + makeDraggable: function () { + var mouseDown = false; + var oldPageX, oldPageY; + var self = this; + + self.isMoving = false; + self.isMovingTimeout = false; + + this.container.mousemove(function (e) { + + if (mouseDown) { + var curTransX = self.transX; + var curTransY = self.transY; + + self.transX -= (oldPageX - e.pageX) / self.scale; + self.transY -= (oldPageY - e.pageY) / self.scale; + + self.applyTransform(); + + oldPageX = e.pageX; + oldPageY = e.pageY; + + self.isMoving = true; + if (self.isMovingTimeout) { + clearTimeout(self.isMovingTimeout); + } + + self.container.trigger('drag'); + } + + return false; + + }).mousedown(function (e) { + + mouseDown = true; + oldPageX = e.pageX; + oldPageY = e.pageY; + + return false; + + }).mouseup(function () { + + mouseDown = false; + + self.isMovingTimeout = setTimeout(function () { + self.isMoving = false; + }, 100); + + return false; + + }); + }, + + bindZoomButtons: function () { + var map = this; + this.container.find('.jqvmap-zoomin').click(function(){ + map.zoomIn(); + }); + this.container.find('.jqvmap-zoomout').click(function(){ + map.zoomOut(); + }); + }, + + zoomIn: function () { + var map = this; + var sliderDelta = (jQuery('#zoom').innerHeight() - 6 * 2 - 15 * 2 - 3 * 2 - 7 - 6) / (this.zoomMaxStep - this.zoomCurStep); + + if (map.zoomCurStep < map.zoomMaxStep) { + var curTransX = map.transX; + var curTransY = map.transY; + var curScale = map.scale; + + map.transX -= (map.width / map.scale - map.width / (map.scale * map.zoomStep)) / 2; + map.transY -= (map.height / map.scale - map.height / (map.scale * map.zoomStep)) / 2; + map.setScale(map.scale * map.zoomStep); + map.zoomCurStep++; + + jQuery('#zoomSlider').css('top', parseInt(jQuery('#zoomSlider').css('top'), 10) - sliderDelta); + + map.container.trigger("zoomIn"); + } + }, + + zoomOut: function () { + var map = this; + var sliderDelta = (jQuery('#zoom').innerHeight() - 6 * 2 - 15 * 2 - 3 * 2 - 7 - 6) / (this.zoomMaxStep - this.zoomCurStep); + + if (map.zoomCurStep > 1) { + var curTransX = map.transX; + var curTransY = map.transY; + var curScale = map.scale; + + map.transX += (map.width / (map.scale / map.zoomStep) - map.width / map.scale) / 2; + map.transY += (map.height / (map.scale / map.zoomStep) - map.height / map.scale) / 2; + map.setScale(map.scale / map.zoomStep); + map.zoomCurStep--; + + jQuery('#zoomSlider').css('top', parseInt(jQuery('#zoomSlider').css('top'), 10) + sliderDelta); + + map.container.trigger("zoomOut"); + } + }, + + setScale: function (scale) { + this.scale = scale; + this.applyTransform(); + }, + + getCountryId: function (cc) { + return 'jqvmap' + this.index + '_' + cc; + }, + + getPinId: function (cc) { + return this.getCountryId(cc)+'_pin'; + }, + + placePins: function(pins, pinMode){ + var map = this; + + if(!pinMode || (pinMode != "content" && pinMode != "id")) { + pinMode = "content"; + } + + if(pinMode == "content") {//treat pin as content + jQuery.each(pins, function(index, pin){ + if(jQuery('#'+map.getCountryId(index)).length == 0){ + return; + } + //mapData.pathes[code].name + var pinIndex = map.getPinId(index); + if(jQuery('#'+pinIndex).length > 0){ + jQuery('#'+pinIndex).remove(); + } + map.container.append('<div id="' + pinIndex + '" for="'+index+'" class="jqvmap_pin" style="position:absolute">' + pin + '</div>'); + }); + } else { //treat pin as id of an html content + jQuery.each(pins, function(index, pin){ + if(jQuery('#'+map.getCountryId(index)).length == 0){ + return; + } + var pinIndex = map.getPinId(index); + if(jQuery('#'+pinIndex).length > 0){ + jQuery('#'+pinIndex).remove(); + } + map.container.append('<div id="' + pinIndex + '" for="'+index+'" class="jqvmap_pin" style="position:absolute"></div>'); + jQuery('#'+pinIndex).append(jQuery('#'+pin)); + }); + } + + this.positionPins(); + if(!this.pinHandlers){ + this.pinHandlers = true;//do only once + var positionFix = function(){ + map.positionPins(); + }; + this.container.bind('zoomIn', positionFix) + .bind('zoomOut', positionFix) + .bind('drag', positionFix); + } + }, + + positionPins: function(){ + var map = this; + var pins = this.container.find('.jqvmap_pin'); + jQuery.each(pins, function(index, pinObj){ + pinObj = jQuery(pinObj); + var countryId = map.getCountryId(pinObj.attr('for')); + var countryObj = jQuery('#' + countryId); + + var bbox = document.getElementById(countryId).getBBox(); + var position = countryObj.position(); + + var scale = map.scale; + + var left = position.left + (bbox.width / 2) * scale - pinObj.width() / 2, + top = position.top + (bbox.height / 2) * scale - pinObj.height() / 2; + + pinObj.css('left',left).css('top',top); + }); + }, + + getPin: function(cc){ + var pinObj = jQuery('#'+this.getPinId(cc)); + return pinObj.html(); + }, + + getPins: function(){ + var pins = this.container.find('.jqvmap_pin'); + var ret = new Object(); + jQuery.each(pins, function(index, pinObj){ + pinObj = jQuery(pinObj); + var cc = pinObj.attr('for'); + var pinContent = pinObj.html(); + eval("ret." + cc + "=pinContent"); + }); + return JSON.stringify(ret); + }, + + removePin: function(cc) { + jQuery('#'+this.getPinId(cc)).remove(); + }, + + removePins: function(){ + this.container.find('.jqvmap_pin').remove(); + } + }; + + WorldMap.xlink = "http://www.w3.org/1999/xlink"; + WorldMap.mapIndex = 1; + WorldMap.maps = {}; + + var ColorScale = function (colors, normalizeFunction, minValue, maxValue) { + if (colors) { + this.setColors(colors); + } + if (normalizeFunction) { + this.setNormalizeFunction(normalizeFunction); + } + if (minValue) { + this.setMin(minValue); + } + if (minValue) { + this.setMax(maxValue); + } + }; + + ColorScale.prototype = { + colors: [], + + setMin: function (min) { + this.clearMinValue = min; + + if (typeof this.normalize === 'function') { + this.minValue = this.normalize(min); + } else { + this.minValue = min; + } + }, + + setMax: function (max) { + this.clearMaxValue = max; + if (typeof this.normalize === 'function') { + this.maxValue = this.normalize(max); + } else { + this.maxValue = max; + } + }, + + setColors: function (colors) { + for (var i = 0; i < colors.length; i++) { + colors[i] = ColorScale.rgbToArray(colors[i]); + } + this.colors = colors; + }, + + setNormalizeFunction: function (f) { + if (f === 'polynomial') { + this.normalize = function (value) { + return Math.pow(value, 0.2); + }; + } + else if (f === 'linear') { + delete this.normalize; + } else { + this.normalize = f; + } + this.setMin(this.clearMinValue); + this.setMax(this.clearMaxValue); + }, + + getColor: function (value) { + if (typeof this.normalize === 'function') { + value = this.normalize(value); + } + + var lengthes = []; + var fullLength = 0; + var l; + + for (var i = 0; i < this.colors.length - 1; i++) { + l = this.vectorLength(this.vectorSubtract(this.colors[i + 1], this.colors[i])); + lengthes.push(l); + fullLength += l; + } + + var c = (this.maxValue - this.minValue) / fullLength; + + for (i = 0; i < lengthes.length; i++) { + lengthes[i] *= c; + } + + i = 0; + value -= this.minValue; + + while (value - lengthes[i] >= 0) { + value -= lengthes[i]; + i++; + } + + var color; + if (i == this.colors.length - 1) { + color = this.vectorToNum(this.colors[i]).toString(16); + } else { + color = (this.vectorToNum(this.vectorAdd(this.colors[i], this.vectorMult(this.vectorSubtract(this.colors[i + 1], this.colors[i]), (value) / (lengthes[i]))))).toString(16); + } + + while (color.length < 6) { + color = '0' + color; + } + return '#' + color; + }, + + vectorToNum: function (vector) { + var num = 0; + for (var i = 0; i < vector.length; i++) { + num += Math.round(vector[i]) * Math.pow(256, vector.length - i - 1); + } + return num; + }, + + vectorSubtract: function (vector1, vector2) { + var vector = []; + for (var i = 0; i < vector1.length; i++) { + vector[i] = vector1[i] - vector2[i]; + } + return vector; + }, + + vectorAdd: function (vector1, vector2) { + var vector = []; + for (var i = 0; i < vector1.length; i++) { + vector[i] = vector1[i] + vector2[i]; + } + return vector; + }, + + vectorMult: function (vector, num) { + var result = []; + for (var i = 0; i < vector.length; i++) { + result[i] = vector[i] * num; + } + return result; + }, + + vectorLength: function (vector) { + var result = 0; + for (var i = 0; i < vector.length; i++) { + result += vector[i] * vector[i]; + } + return Math.sqrt(result); + } + }; + + ColorScale.arrayToRgb = function (ar) { + var rgb = '#'; + var d; + for (var i = 0; i < ar.length; i++) { + d = ar[i].toString(16); + rgb += d.length == 1 ? '0' + d : d; + } + return rgb; + }; + + ColorScale.rgbToArray = function (rgb) { + rgb = rgb.substr(1); + return [parseInt(rgb.substr(0, 2), 16), parseInt(rgb.substr(2, 2), 16), parseInt(rgb.substr(4, 2), 16)]; + }; + +})(jQuery); diff --git a/public/admin/view/javascript/jquery/jqvmap/jquery.vmap.min.js b/public/admin/view/javascript/jquery/jqvmap/jquery.vmap.min.js new file mode 100644 index 0000000..8b6d881 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/jquery.vmap.min.js @@ -0,0 +1,12 @@ +/*! + * jQVMap Version 1.0 + * + * http://jqvmap.com + * + * Copyright 2012, Peter Schmalfeldt <manifestinteractive@gmail.com> + * Copyright 2011-2012, Kirill Lebedev + * Licensed under the MIT license. + * + * Fork Me @ https://github.com/manifestinteractive/jqvmap + */ +(function($){var apiParams={colors:1,values:1,backgroundColor:1,scaleColors:1,normalizeFunction:1,enableZoom:1,showTooltip:1,borderColor:1,borderWidth:1,borderOpacity:1,selectedRegion:1};var apiEvents={onLabelShow:'labelShow',onRegionOver:'regionMouseOver',onRegionOut:'regionMouseOut',onRegionClick:'regionClick'};$.fn.vectorMap=function(options){var defaultParams={map:'world_en',backgroundColor:'#a5bfdd',color:'#f4f3f0',hoverColor:'#c9dfaf',selectedColor:'#c9dfaf',scaleColors:['#b6d6ff','#005ace'],normalizeFunction:'linear',enableZoom:true,showTooltip:true,borderColor:'#818181',borderWidth:1,borderOpacity:0.25,selectedRegion:null},map;if(options==='addMap'){WorldMap.maps[arguments[1]]=arguments[2]}else if(options==='set'&&apiParams[arguments[1]]){this.data('mapObject')['set'+arguments[1].charAt(0).toUpperCase()+arguments[1].substr(1)].apply(this.data('mapObject'),Array.prototype.slice.call(arguments,2))}else{$.extend(defaultParams,options);defaultParams.container=this;this.css({position:'relative',overflow:'hidden'});map=new WorldMap(defaultParams);this.data('mapObject',map);for(var e in apiEvents){if(defaultParams[e]){this.bind(apiEvents[e]+'.jqvmap',defaultParams[e])}}}};var VectorCanvas=function(width,height,params){this.mode=window.SVGAngle?'svg':'vml';this.params=params;if(this.mode=='svg'){this.createSvgNode=function(nodeName){return document.createElementNS(this.svgns,nodeName)}}else{try{if(!document.namespaces.rvml){document.namespaces.add("rvml","urn:schemas-microsoft-com:vml")}this.createVmlNode=function(tagName){return document.createElement('<rvml:'+tagName+' class="rvml">')}}catch(e){this.createVmlNode=function(tagName){return document.createElement('<'+tagName+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}document.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)")}if(this.mode=='svg'){this.canvas=this.createSvgNode('svg')}else{this.canvas=this.createVmlNode('group');this.canvas.style.position='absolute'}this.setSize(width,height)};VectorCanvas.prototype={svgns:"http://www.w3.org/2000/svg",mode:'svg',width:0,height:0,canvas:null,setSize:function(width,height){if(this.mode=='svg'){this.canvas.setAttribute('width',width);this.canvas.setAttribute('height',height)}else{this.canvas.style.width=width+"px";this.canvas.style.height=height+"px";this.canvas.coordsize=width+' '+height;this.canvas.coordorigin="0 0";if(this.rootGroup){var pathes=this.rootGroup.getElementsByTagName('shape');for(var i=0,l=pathes.length;i<l;i++){pathes[i].coordsize=width+' '+height;pathes[i].style.width=width+'px';pathes[i].style.height=height+'px'}this.rootGroup.coordsize=width+' '+height;this.rootGroup.style.width=width+'px';this.rootGroup.style.height=height+'px'}}this.width=width;this.height=height},createPath:function(config){var node;if(this.mode=='svg'){node=this.createSvgNode('path');node.setAttribute('d',config.path);if(this.params.borderColor!==null){node.setAttribute('stroke',this.params.borderColor)}if(this.params.borderWidth>0){node.setAttribute('stroke-width',this.params.borderWidth);node.setAttribute('stroke-linecap','round');node.setAttribute('stroke-linejoin','round')}if(this.params.borderOpacity>0){node.setAttribute('stroke-opacity',this.params.borderOpacity)}node.setFill=function(color){this.setAttribute("fill",color);if(this.getAttribute("original")===null){this.setAttribute("original",color)}};node.getFill=function(color){return this.getAttribute("fill")};node.getOriginalFill=function(){return this.getAttribute("original")};node.setOpacity=function(opacity){this.setAttribute('fill-opacity',opacity)}}else{node=this.createVmlNode('shape');node.coordorigin="0 0";node.coordsize=this.width+' '+this.height;node.style.width=this.width+'px';node.style.height=this.height+'px';node.fillcolor=WorldMap.defaultFillColor;node.stroked=false;node.path=VectorCanvas.pathSvgToVml(config.path);var scale=this.createVmlNode('skew');scale.on=true;scale.matrix='0.01,0,0,0.01,0,0';scale.offset='0,0';node.appendChild(scale);var fill=this.createVmlNode('fill');node.appendChild(fill);node.setFill=function(color){this.getElementsByTagName('fill')[0].color=color};node.getFill=function(color){return this.getElementsByTagName('fill')[0].color};node.setOpacity=function(opacity){this.getElementsByTagName('fill')[0].opacity=parseInt(opacity*100,10)+'%'}}return node},createGroup:function(isRoot){var node;if(this.mode=='svg'){node=this.createSvgNode('g')}else{node=this.createVmlNode('group');node.style.width=this.width+'px';node.style.height=this.height+'px';node.style.left='0px';node.style.top='0px';node.coordorigin="0 0";node.coordsize=this.width+' '+this.height}if(isRoot){this.rootGroup=node}return node},applyTransformParams:function(scale,transX,transY){if(this.mode=='svg'){this.rootGroup.setAttribute('transform','scale('+scale+') translate('+transX+', '+transY+')')}else{this.rootGroup.coordorigin=(this.width-transX)+','+(this.height-transY);this.rootGroup.coordsize=this.width/scale+','+this.height/scale}}};VectorCanvas.pathSvgToVml=function(path){var result='';var cx=0,cy=0,ctrlx,ctrly;return path.replace(/([MmLlHhVvCcSs])((?:-?(?:\d+)?(?:\.\d+)?,?\s?)+)/g,function(segment,letter,coords,index){coords=coords.replace(/(\d)-/g,'$1,-').replace(/\s+/g,',').split(',');if(!coords[0]){coords.shift()}for(var i=0,l=coords.length;i<l;i++){coords[i]=Math.round(100*coords[i])}switch(letter){case'm':cx+=coords[0];cy+=coords[1];return't'+coords.join(',');break;case'M':cx=coords[0];cy=coords[1];return'm'+coords.join(',');break;case'l':cx+=coords[0];cy+=coords[1];return'r'+coords.join(',');break;case'L':cx=coords[0];cy=coords[1];return'l'+coords.join(',');break;case'h':cx+=coords[0];return'r'+coords[0]+',0';break;case'H':cx=coords[0];return'l'+cx+','+cy;break;case'v':cy+=coords[0];return'r0,'+coords[0];break;case'V':cy=coords[0];return'l'+cx+','+cy;break;case'c':ctrlx=cx+coords[coords.length-4];ctrly=cy+coords[coords.length-3];cx+=coords[coords.length-2];cy+=coords[coords.length-1];return'v'+coords.join(',');break;case'C':ctrlx=coords[coords.length-4];ctrly=coords[coords.length-3];cx=coords[coords.length-2];cy=coords[coords.length-1];return'c'+coords.join(',');break;case's':coords.unshift(cy-ctrly);coords.unshift(cx-ctrlx);ctrlx=cx+coords[coords.length-4];ctrly=cy+coords[coords.length-3];cx+=coords[coords.length-2];cy+=coords[coords.length-1];return'v'+coords.join(',');break;case'S':coords.unshift(cy+cy-ctrly);coords.unshift(cx+cx-ctrlx);ctrlx=coords[coords.length-4];ctrly=coords[coords.length-3];cx=coords[coords.length-2];cy=coords[coords.length-1];return'c'+coords.join(',');break;default:return false;break}return''}).replace(/z/g,'')};var WorldMap=function(params){params=params||{};var map=this;var mapData=WorldMap.maps[params.map];this.container=params.container;this.defaultWidth=mapData.width;this.defaultHeight=mapData.height;this.color=params.color;this.hoverColor=params.hoverColor;this.setBackgroundColor(params.backgroundColor);this.width=params.container.width();this.height=params.container.height();this.resize();jQuery(window).resize(function(){map.width=params.container.width();map.height=params.container.height();map.resize();map.canvas.setSize(map.width,map.height);map.applyTransform()});this.canvas=new VectorCanvas(this.width,this.height,params);params.container.append(this.canvas.canvas);this.makeDraggable();this.rootGroup=this.canvas.createGroup(true);this.index=WorldMap.mapIndex;this.label=jQuery('<div/>').addClass('jqvmap-label').appendTo(jQuery('body'));if(params.enableZoom){jQuery('<div/>').addClass('jqvmap-zoomin').text('+').appendTo(params.container);jQuery('<div/>').addClass('jqvmap-zoomout').html('−').appendTo(params.container)}map.countries=[];for(var key in mapData.pathes){var path=this.canvas.createPath({path:mapData.pathes[key].path});path.setFill(this.color);path.id='jqvmap'+map.index+'_'+key;map.countries[key]=path;jQuery(this.rootGroup).append(path);path.setAttribute('class','jqvmap-region');if(params.selectedRegion!==null){if(key.toLowerCase()==params.selectedRegion.toLowerCase()){path.setFill(params.selectedColor)}}}jQuery(params.container).delegate(this.canvas.mode=='svg'?'path':'shape','mouseover mouseout',function(e){var path=e.target,code=e.target.id.split('_').pop(),labelShowEvent=$.Event('labelShow.jqvmap'),regionMouseOverEvent=$.Event('regionMouseOver.jqvmap');if(e.type=='mouseover'){jQuery(params.container).trigger(regionMouseOverEvent,[code,mapData.pathes[code].name]);if(!regionMouseOverEvent.isDefaultPrevented()){if(params.hoverOpacity){path.setOpacity(params.hoverOpacity)}else if(params.hoverColor){path.currentFillColor=path.getFill()+'';path.setFill(params.hoverColor)}}if(params.showTooltip){map.label.text(mapData.pathes[code].name);jQuery(params.container).trigger(labelShowEvent,[map.label,code]);if(!labelShowEvent.isDefaultPrevented()){map.label.show();map.labelWidth=map.label.width();map.labelHeight=map.label.height()}}}else{path.setOpacity(1);if(path.currentFillColor){path.setFill(path.currentFillColor)}map.label.hide();jQuery(params.container).trigger('regionMouseOut.jqvmap',[code,mapData.pathes[code].name])}});jQuery(params.container).delegate(this.canvas.mode=='svg'?'path':'shape','click',function(e){for(var key in mapData.pathes){map.countries[key].currentFillColor=map.countries[key].getOriginalFill();map.countries[key].setFill(map.countries[key].getOriginalFill())}var path=e.target;var code=e.target.id.split('_').pop();jQuery(params.container).trigger('regionClick.jqvmap',[code,mapData.pathes[code].name]);path.currentFillColor=params.selectedColor;path.setFill(params.selectedColor)});if(params.showTooltip){params.container.mousemove(function(e){if(map.label.is(':visible')){map.label.css({left:e.pageX-15-map.labelWidth,top:e.pageY-15-map.labelHeight})}})}this.setColors(params.colors);this.canvas.canvas.appendChild(this.rootGroup);this.applyTransform();this.colorScale=new ColorScale(params.scaleColors,params.normalizeFunction,params.valueMin,params.valueMax);if(params.values){this.values=params.values;this.setValues(params.values)}this.bindZoomButtons();WorldMap.mapIndex++};WorldMap.prototype={transX:0,transY:0,scale:1,baseTransX:0,baseTransY:0,baseScale:1,width:0,height:0,countries:{},countriesColors:{},countriesData:{},zoomStep:1.4,zoomMaxStep:4,zoomCurStep:1,setColors:function(key,color){if(typeof key=='string'){this.countries[key].setFill(color);this.countries[key].setAttribute("original",color)}else{var colors=key;for(var code in colors){if(this.countries[code]){this.countries[code].setFill(colors[code]);this.countries[code].setAttribute("original",colors[code])}}}},setValues:function(values){var max=0,min=Number.MAX_VALUE,val;for(var cc in values){val=parseFloat(values[cc]);if(val>max){max=values[cc]}if(val&&val<min){min=val}}this.colorScale.setMin(min);this.colorScale.setMax(max);var colors={};for(cc in values){val=parseFloat(values[cc]);if(val){colors[cc]=this.colorScale.getColor(val)}else{colors[cc]=this.color}}this.setColors(colors);this.values=values},setBackgroundColor:function(backgroundColor){this.container.css('background-color',backgroundColor)},setScaleColors:function(colors){this.colorScale.setColors(colors);if(this.values){this.setValues(this.values)}},setNormalizeFunction:function(f){this.colorScale.setNormalizeFunction(f);if(this.values){this.setValues(this.values)}},resize:function(){var curBaseScale=this.baseScale;if(this.width/this.height>this.defaultWidth/this.defaultHeight){this.baseScale=this.height/this.defaultHeight;this.baseTransX=Math.abs(this.width-this.defaultWidth*this.baseScale)/(2*this.baseScale)}else{this.baseScale=this.width/this.defaultWidth;this.baseTransY=Math.abs(this.height-this.defaultHeight*this.baseScale)/(2*this.baseScale)}this.scale*=this.baseScale/curBaseScale;this.transX*=this.baseScale/curBaseScale;this.transY*=this.baseScale/curBaseScale},reset:function(){this.countryTitle.reset();for(var key in this.countries){this.countries[key].setFill(WorldMap.defaultColor)}this.scale=this.baseScale;this.transX=this.baseTransX;this.transY=this.baseTransY;this.applyTransform()},applyTransform:function(){var maxTransX,maxTransY,minTransX,minTransY;if(this.defaultWidth*this.scale<=this.width){maxTransX=(this.width-this.defaultWidth*this.scale)/(2*this.scale);minTransX=(this.width-this.defaultWidth*this.scale)/(2*this.scale)}else{maxTransX=0;minTransX=(this.width-this.defaultWidth*this.scale)/this.scale}if(this.defaultHeight*this.scale<=this.height){maxTransY=(this.height-this.defaultHeight*this.scale)/(2*this.scale);minTransY=(this.height-this.defaultHeight*this.scale)/(2*this.scale)}else{maxTransY=0;minTransY=(this.height-this.defaultHeight*this.scale)/this.scale}if(this.transY>maxTransY){this.transY=maxTransY}else if(this.transY<minTransY){this.transY=minTransY}if(this.transX>maxTransX){this.transX=maxTransX}else if(this.transX<minTransX){this.transX=minTransX}this.canvas.applyTransformParams(this.scale,this.transX,this.transY)},makeDraggable:function(){var mouseDown=false;var oldPageX,oldPageY;var self=this;this.container.mousemove(function(e){if(mouseDown){var curTransX=self.transX;var curTransY=self.transY;self.transX-=(oldPageX-e.pageX)/self.scale;self.transY-=(oldPageY-e.pageY)/self.scale;self.applyTransform();oldPageX=e.pageX;oldPageY=e.pageY}return false}).mousedown(function(e){mouseDown=true;oldPageX=e.pageX;oldPageY=e.pageY;return false}).mouseup(function(){mouseDown=false;return false})},bindZoomButtons:function(){var map=this;var sliderDelta=(jQuery('#zoom').innerHeight()-6*2-15*2-3*2-7-6)/(this.zoomMaxStep-this.zoomCurStep);this.container.find('.jqvmap-zoomin').click(function(){if(map.zoomCurStep<map.zoomMaxStep){var curTransX=map.transX;var curTransY=map.transY;var curScale=map.scale;map.transX-=(map.width/map.scale-map.width/ (map.scale * map.zoomStep)) /2;map.transY-=(map.height/map.scale-map.height/ (map.scale * map.zoomStep)) /2;map.setScale(map.scale*map.zoomStep);map.zoomCurStep++;jQuery('#zoomSlider').css('top',parseInt(jQuery('#zoomSlider').css('top'),10)-sliderDelta)}});this.container.find('.jqvmap-zoomout').click(function(){if(map.zoomCurStep>1){var curTransX=map.transX;var curTransY=map.transY;var curScale=map.scale;map.transX+=(map.width/(map.scale/ map.zoomStep) - map.width/map.scale)/2;map.transY+=(map.height/(map.scale/ map.zoomStep) - map.height/map.scale)/2;map.setScale(map.scale/map.zoomStep);map.zoomCurStep--;jQuery('#zoomSlider').css('top',parseInt(jQuery('#zoomSlider').css('top'),10)+sliderDelta)}})},setScale:function(scale){this.scale=scale;this.applyTransform()},getCountryPath:function(cc){return jQuery('#'+cc)[0]}};WorldMap.xlink="http://www.w3.org/1999/xlink";WorldMap.mapIndex=1;WorldMap.maps={};var ColorScale=function(colors,normalizeFunction,minValue,maxValue){if(colors){this.setColors(colors)}if(normalizeFunction){this.setNormalizeFunction(normalizeFunction)}if(minValue){this.setMin(minValue)}if(minValue){this.setMax(maxValue)}};ColorScale.prototype={colors:[],setMin:function(min){this.clearMinValue=min;if(typeof this.normalize==='function'){this.minValue=this.normalize(min)}else{this.minValue=min}},setMax:function(max){this.clearMaxValue=max;if(typeof this.normalize==='function'){this.maxValue=this.normalize(max)}else{this.maxValue=max}},setColors:function(colors){for(var i=0;i<colors.length;i++){colors[i]=ColorScale.rgbToArray(colors[i])}this.colors=colors},setNormalizeFunction:function(f){if(f==='polynomial'){this.normalize=function(value){return Math.pow(value,0.2)}}else if(f==='linear'){delete this.normalize}else{this.normalize=f}this.setMin(this.clearMinValue);this.setMax(this.clearMaxValue)},getColor:function(value){if(typeof this.normalize==='function'){value=this.normalize(value)}var lengthes=[];var fullLength=0;var l;for(var i=0;i<this.colors.length-1;i++){l=this.vectorLength(this.vectorSubtract(this.colors[i+1],this.colors[i]));lengthes.push(l);fullLength+=l}var c=(this.maxValue-this.minValue)/fullLength;for(i=0;i<lengthes.length;i++){lengthes[i]*=c}i=0;value-=this.minValue;while(value-lengthes[i]>=0){value-=lengthes[i];i++}var color;if(i==this.colors.length-1){color=this.vectorToNum(this.colors[i]).toString(16)}else{color=(this.vectorToNum(this.vectorAdd(this.colors[i],this.vectorMult(this.vectorSubtract(this.colors[i+1],this.colors[i]),(value)/(lengthes[i]))))).toString(16)}while(color.length<6){color='0'+color}return'#'+color},vectorToNum:function(vector){var num=0;for(var i=0;i<vector.length;i++){num+=Math.round(vector[i])*Math.pow(256,vector.length-i-1)}return num},vectorSubtract:function(vector1,vector2){var vector=[];for(var i=0;i<vector1.length;i++){vector[i]=vector1[i]-vector2[i]}return vector},vectorAdd:function(vector1,vector2){var vector=[];for(var i=0;i<vector1.length;i++){vector[i]=vector1[i]+vector2[i]}return vector},vectorMult:function(vector,num){var result=[];for(var i=0;i<vector.length;i++){result[i]=vector[i]*num}return result},vectorLength:function(vector){var result=0;for(var i=0;i<vector.length;i++){result+=vector[i]*vector[i]}return Math.sqrt(result)}};ColorScale.arrayToRgb=function(ar){var rgb='#';var d;for(var i=0;i<ar.length;i++){d=ar[i].toString(16);rgb+=d.length==1?'0'+d:d}return rgb};ColorScale.rgbToArray=function(rgb){rgb=rgb.substr(1);return[parseInt(rgb.substr(0,2),16),parseInt(rgb.substr(2,2),16),parseInt(rgb.substr(4,2),16)]}})(jQuery); diff --git a/public/admin/view/javascript/jquery/jqvmap/jquery.vmap.packed.js b/public/admin/view/javascript/jquery/jqvmap/jquery.vmap.packed.js new file mode 100644 index 0000000..e82c485 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/jquery.vmap.packed.js @@ -0,0 +1,12 @@ +/*! + * jQVMap Version 1.0 + * + * http://jqvmap.com + * + * Copyright 2012, Peter Schmalfeldt <manifestinteractive@gmail.com> + * Copyright 2011-2012, Kirill Lebedev + * Licensed under the MIT license. + * + * Fork Me @ https://github.com/manifestinteractive/jqvmap + */ + eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(b($){a 3g={x:1,O:1,1P:1,2G:1,1M:1,2U:1,24:1,2m:1,2t:1,2u:1,26:1};a 2V={4u:\'3D\',4t:\'3r\',4w:\'4d\',4A:\'4e\'};$.4r.4z=b(2A){a 1K={8:\'4p\',1P:\'#54\',A:\'#4V\',1X:\'#3q\',2f:\'#3q\',2G:[\'#4T\',\'#52\'],1M:\'45\',2U:1U,24:1U,2m:\'#50\',2t:1,2u:0.25,26:1S},8;j(2A===\'4I\'){11.3b[1G[1]]=1G[2]}B j(2A===\'3f\'&&3g[1G[1]]){5.2X(\'2W\')[\'3f\'+1G[1].4G(0).4F()+1G[1].23(1)].4K(5.2X(\'2W\'),4P.2s.4M.4L(1G,2))}B{$.4O(1K,2A);1K.D=5;5.1A({3C:\'4J\',4E:\'4Q\'});8=2H 11(1K);5.2X(\'2W\',8);J(a e 1z 2V){j(1K[e]){5.4Z(2V[e]+\'.17\',1K[e])}}}};a 1W=b(n,p,k){5.19=3F.53?\'13\':\'3d\';5.k=k;j(5.19==\'13\'){5.2x=b(3w){u 1D.4Y(5.3A,3w)}}B{4X{j(!1D.3x.1H){1D.3x.4S("1H","3B:3H-3i-3u:3d")}5.1t=b(2p){u 1D.3y(\'<1H:\'+2p+\' 2E="1H">\')}}4U(e){5.1t=b(2p){u 1D.3y(\'<\'+2p+\' 4W="3B:3H-3i.3u:3d" 2E="1H">\')}}1D.4n().4o(".1H","4m:4q(#3z#4j)")}j(5.19==\'13\'){5.E=5.2x(\'13\')}B{5.E=5.1t(\'3h\');5.E.X.3C=\'4l\'}5.3e(n,p)};1W.2s={3A:"3Y://42.41.40/4C/13",19:\'13\',n:0,p:0,E:1S,3e:b(n,p){j(5.19==\'13\'){5.E.T(\'n\',n);5.E.T(\'p\',p)}B{5.E.X.n=n+"1b";5.E.X.p=p+"1b";5.E.1I=n+\' \'+p;5.E.2l="0 0";j(5.Z){a 12=5.Z.2q(\'2a\');J(a i=0,l=12.w;i<l;i++){12[i].1I=n+\' \'+p;12[i].X.n=n+\'1b\';12[i].X.p=p+\'1b\'}5.Z.1I=n+\' \'+p;5.Z.X.n=n+\'1b\';5.Z.X.p=p+\'1b\'}}5.n=n;5.p=p},3E:b(3c){a q;j(5.19==\'13\'){q=5.2x(\'y\');q.T(\'d\',3c.y);j(5.k.2m!==1S){q.T(\'1T\',5.k.2m)}j(5.k.2t>0){q.T(\'1T-n\',5.k.2t);q.T(\'1T-4B\',\'2v\');q.T(\'1T-4x\',\'2v\')}j(5.k.2u>0){q.T(\'1T-1r\',5.k.2u)}q.18=b(A){5.T("1f",A);j(5.33("21")===1S){5.T("21",A)}};q.2Q=b(A){u 5.33("1f")};q.2M=b(){u 5.33("21")};q.27=b(1r){5.T(\'1f-1r\',1r)}}B{q=5.1t(\'2a\');q.2l="0 0";q.1I=5.n+\' \'+5.p;q.X.n=5.n+\'1b\';q.X.p=5.p+\'1b\';q.4v=11.4R;q.5s=1v;q.y=1W.3n(3c.y);a o=5.1t(\'5C\');o.5D=1U;o.5E=\'0.3G,0,0,0.3G,0,0\';o.5G=\'0,0\';q.2I(o);a 1f=5.1t(\'1f\');q.2I(1f);q.18=b(A){5.2q(\'1f\')[0].A=A};q.2Q=b(A){u 5.2q(\'1f\')[0].A};q.27=b(1r){5.2q(\'1f\')[0].1r=1B(1r*3o,10)+\'%\'}}u q},3t:b(3p){a q;j(5.19==\'13\'){q=5.2x(\'g\')}B{q=5.1t(\'3h\');q.X.n=5.n+\'1b\';q.X.p=5.p+\'1b\';q.X.4c=\'3j\';q.X.1E=\'3j\';q.2l="0 0";q.1I=5.n+\' \'+5.p}j(3p){5.Z=q}u q},3U:b(o,K,N){j(5.19==\'13\'){5.Z.T(\'5y\',\'o(\'+o+\') 5A(\'+K+\', \'+N+\')\')}B{5.Z.2l=(5.n-K)+\',\'+(5.p-N);5.Z.1I=5.n/o+\',\'+5.p/o}}};1W.3n=b(y){a 1w=\'\';a G=0,I=0,1x,1u;u y.28(/([5x])((?:-?(?:\\d+)?(?:\\.\\d+)?,?\\s?)+)/g,b(5F,3k,9,2J){9=9.28(/(\\d)-/g,\'$1,-\').28(/\\s+/g,\',\').2S(\',\');j(!9[0]){9.5v()}J(a i=0,l=9.w;i<l;i++){9[i]=1y.2v(3o*9[i])}5w(3k){14\'m\':G+=9[0];I+=9[1];u\'t\'+9.1n(\',\');W;14\'M\':G=9[0];I=9[1];u\'m\'+9.1n(\',\');W;14\'l\':G+=9[0];I+=9[1];u\'r\'+9.1n(\',\');W;14\'L\':G=9[0];I=9[1];u\'l\'+9.1n(\',\');W;14\'h\':G+=9[0];u\'r\'+9[0]+\',0\';W;14\'H\':G=9[0];u\'l\'+G+\',\'+I;W;14\'v\':I+=9[0];u\'5t,\'+9[0];W;14\'V\':I=9[0];u\'l\'+G+\',\'+I;W;14\'c\':1x=G+9[9.w-4];1u=I+9[9.w-3];G+=9[9.w-2];I+=9[9.w-1];u\'v\'+9.1n(\',\');W;14\'C\':1x=9[9.w-4];1u=9[9.w-3];G=9[9.w-2];I=9[9.w-1];u\'c\'+9.1n(\',\');W;14\'s\':9.2k(I-1u);9.2k(G-1x);1x=G+9[9.w-4];1u=I+9[9.w-3];G+=9[9.w-2];I+=9[9.w-1];u\'v\'+9.1n(\',\');W;14\'S\':9.2k(I+I-1u);9.2k(G+G-1x);1x=9[9.w-4];1u=9[9.w-3];G=9[9.w-2];I=9[9.w-1];u\'c\'+9.1n(\',\');W;3z:u 1v;W}u\'\'}).28(/z/g,\'\')};a 11=b(k){k=k||{};a 8=5;a 1a=11.3b[k.8];5.D=k.D;5.1m=1a.n;5.1l=1a.p;5.A=k.A;5.1X=k.1X;5.49(k.1P);5.n=k.D.n();5.p=k.D.p();5.2g();F(3F).2g(b(){8.n=k.D.n();8.p=k.D.p();8.2g();8.E.3e(8.n,8.p);8.1O()});5.E=2H 1W(5.n,5.p,k);k.D.3I(5.E.E);5.3V();5.Z=5.E.3t(1U);5.2J=11.34;5.1c=F(\'<2D/>\').2K(\'17-1c\').2F(F(\'57\'));j(k.2U){F(\'<2D/>\').2K(\'17-46\').3Z(\'+\').2F(k.D);F(\'<2D/>\').2K(\'17-48\').5h(\'o;\').2F(k.D)}8.U=[];J(a P 1z 1a.12){a y=5.E.3E({y:1a.12[P].y});y.18(5.A);y.2N=\'17\'+8.2J+\'2T\'+P;8.U[P]=y;F(5.Z).3I(y);y.T(\'2E\',\'17-5r\');j(k.26!==1S){j(P.3v()==k.26.3v()){y.18(k.2f)}}}F(k.D).4f(5.E.19==\'13\'?\'y\':\'2a\',\'3s 5i\',b(e){a y=e.2d,R=e.2d.2N.2S(\'2T\').3J(),2R=$.3l(\'3D.17\'),2P=$.3l(\'3r.17\');j(e.5j==\'3s\'){F(k.D).2i(2P,[R,1a.12[R].2e]);j(!2P.4h()){j(k.3m){y.27(k.3m)}B j(k.1X){y.22=y.2Q()+\'\';y.18(k.1X)}}j(k.24){8.1c.3Z(1a.12[R].2e);F(k.D).2i(2R,[8.1c,R]);j(!2R.4h()){8.1c.5l();8.4i=8.1c.n();8.4b=8.1c.p()}}}B{y.27(1);j(y.22){y.18(y.22)}8.1c.5k();F(k.D).2i(\'4d.17\',[R,1a.12[R].2e])}});F(k.D).4f(5.E.19==\'13\'?\'y\':\'2a\',\'38\',b(e){J(a P 1z 1a.12){8.U[P].22=8.U[P].2M();8.U[P].18(8.U[P].2M())}a y=e.2d;a R=e.2d.2N.2S(\'2T\').3J();F(k.D).2i(\'4e.17\',[R,1a.12[R].2e]);y.22=k.2f;y.18(k.2f)});j(k.24){k.D.3Q(b(e){j(8.1c.5m(\':5n\')){8.1c.1A({4c:e.2b-15-8.4i,1E:e.2C-15-8.4b})}})}5.1F(k.x);5.E.E.2I(5.Z);5.1O();5.1J=2H 1N(k.2G,k.1M,k.5q,k.5p);j(k.O){5.O=k.O;5.2j(k.O)}5.3X();11.34++};11.2s={K:0,N:0,o:1,32:0,31:0,Y:1,n:0,p:0,U:{},5g:{},59:{},1q:1.4,37:4,1C:1,1F:b(P,A){j(2y P==\'58\'){5.U[P].18(A);5.U[P].T("21",A)}B{a x=P;J(a R 1z x){j(5.U[R]){5.U[R].18(x[R]);5.U[R].T("21",x[R])}}}},2j:b(O){a 1o=0,1j=56.5a,1d;J(a 1i 1z O){1d=4g(O[1i]);j(1d>1o){1o=O[1i]}j(1d&&1d<1j){1j=1d}}5.1J.2w(1j);5.1J.2z(1o);a x={};J(1i 1z O){1d=4g(O[1i]);j(1d){x[1i]=5.1J.3N(1d)}B{x[1i]=5.A}}5.1F(x);5.O=O},49:b(1P){5.D.1A(\'5b-A\',1P)},5f:b(x){5.1J.1F(x);j(5.O){5.2j(5.O)}},2r:b(f){5.1J.2r(f);j(5.O){5.2j(5.O)}},2g:b(){a 2c=5.Y;j(5.n/5.p>5.1m/5.1l){5.Y=5.p/5.1l;5.32=1y.3S(5.n-5.1m*5.Y)/(2*5.Y)}B{5.Y=5.n/5.1m;5.31=1y.3S(5.p-5.1l*5.Y)/(2*5.Y)}5.o*=5.Y/2c;5.K*=5.Y/2c;5.N*=5.Y/2c},3T:b(){5.5e.3T();J(a P 1z 5.U){5.U[P].18(11.5d)}5.o=5.Y;5.K=5.32;5.N=5.31;5.1O()},1O:b(){a 1R,20,1Z,1Y;j(5.1m*5.o<=5.n){1R=(5.n-5.1m*5.o)/(2*5.o);1Z=(5.n-5.1m*5.o)/(2*5.o)}B{1R=0;1Z=(5.n-5.1m*5.o)/5.o}j(5.1l*5.o<=5.p){20=(5.p-5.1l*5.o)/(2*5.o);1Y=(5.p-5.1l*5.o)/(2*5.o)}B{20=0;1Y=(5.p-5.1l*5.o)/5.o}j(5.N>20){5.N=20}B j(5.N<1Y){5.N=1Y}j(5.K>1R){5.K=1R}B j(5.K<1Z){5.K=1Z}5.E.3U(5.o,5.K,5.N)},3V:b(){a 2B=1v;a 29,2h;a 1k=5;5.D.3Q(b(e){j(2B){a 39=1k.K;a 3a=1k.N;1k.K-=(29-e.2b)/1k.o;1k.N-=(2h-e.2C)/1k.o;1k.1O();29=e.2b;2h=e.2C}u 1v}).5c(b(e){2B=1U;29=e.2b;2h=e.2C;u 1v}).5u(b(){2B=1v;u 1v})},3X:b(){a 8=5;a 36=(F(\'#5B\').5z()-6*2-15*2-3*2-7-6)/(5.37-5.1C);5.D.47(\'.17-46\').38(b(){j(8.1C<8.37){a 39=8.K;a 3a=8.N;a 44=8.o;8.K-=(8.n/8.o-8.n/ (8.o * 8.1q)) /2;8.N-=(8.p/8.o-8.p/ (8.o * 8.1q)) /2;8.35(8.o*8.1q);8.1C++;F(\'#2o\').1A(\'1E\',1B(F(\'#2o\').1A(\'1E\'),10)-36)}});5.D.47(\'.17-48\').38(b(){j(8.1C>1){a 39=8.K;a 3a=8.N;a 44=8.o;8.K+=(8.n/(8.o/ 8.1q) - 8.n/8.o)/2;8.N+=(8.p/(8.o/ 8.1q) - 8.p/8.o)/2;8.35(8.o/8.1q);8.1C--;F(\'#2o\').1A(\'1E\',1B(F(\'#2o\').1A(\'1E\'),10)+36)}})},35:b(o){5.o=o;5.1O()},55:b(1i){u F(\'#\'+1i)[0]}};11.43="3Y://42.41.40/4s/43";11.34=1;11.3b={};a 1N=b(x,1M,1p,1V){j(x){5.1F(x)}j(1M){5.2r(1M)}j(1p){5.2w(1p)}j(1p){5.2z(1V)}};1N.2s={x:[],2w:b(1j){5.3W=1j;j(2y 5.1e===\'b\'){5.1p=5.1e(1j)}B{5.1p=1j}},2z:b(1o){5.3O=1o;j(2y 5.1e===\'b\'){5.1V=5.1e(1o)}B{5.1V=1o}},1F:b(x){J(a i=0;i<x.w;i++){x[i]=1N.3M(x[i])}5.x=x},2r:b(f){j(f===\'4y\'){5.1e=b(1g){u 1y.3L(1g,0.2)}}B j(f===\'45\'){4k 5.1e}B{5.1e=f}5.2w(5.3W);5.2z(5.3O)},3N:b(1g){j(2y 5.1e===\'b\'){1g=5.1e(1g)}a 1s=[];a 30=0;a l;J(a i=0;i<5.x.w-1;i++){l=5.3R(5.2L(5.x[i+1],5.x[i]));1s.4D(l);30+=l}a c=(5.1V-5.1p)/30;J(i=0;i<1s.w;i++){1s[i]*=c}i=0;1g-=5.1p;3K(1g-1s[i]>=0){1g-=1s[i];i++}a A;j(i==5.x.w-1){A=5.2Z(5.x[i]).2Y(16)}B{A=(5.2Z(5.3P(5.x[i],5.4a(5.2L(5.x[i+1],5.x[i]),(1g)/(1s[i]))))).2Y(16)}3K(A.w<6){A=\'0\'+A}u\'#\'+A},2Z:b(Q){a 1Q=0;J(a i=0;i<Q.w;i++){1Q+=1y.2v(Q[i])*1y.3L(51,Q.w-i-1)}u 1Q},2L:b(1L,2n){a Q=[];J(a i=0;i<1L.w;i++){Q[i]=1L[i]-2n[i]}u Q},3P:b(1L,2n){a Q=[];J(a i=0;i<1L.w;i++){Q[i]=1L[i]+2n[i]}u Q},4a:b(Q,1Q){a 1w=[];J(a i=0;i<Q.w;i++){1w[i]=Q[i]*1Q}u 1w},3R:b(Q){a 1w=0;J(a i=0;i<Q.w;i++){1w+=Q[i]*Q[i]}u 1y.4N(1w)}};1N.4H=b(2O){a 1h=\'#\';a d;J(a i=0;i<2O.w;i++){d=2O[i].2Y(16);1h+=d.w==1?\'0\'+d:d}u 1h};1N.3M=b(1h){1h=1h.23(1);u[1B(1h.23(0,2),16),1B(1h.23(2,2),16),1B(1h.23(4,2),16)]}})(F);',62,353,'|||||this|||map|coords|var|function||||||||if|params|||width|scale|height|node||||return||length|colors|path||color|else||container|canvas|jQuery|cx||cy|for|transX|||transY|values|key|vector|code||setAttribute|countries||break|style|baseScale|rootGroup||WorldMap|pathes|svg|case|||jqvmap|setFill|mode|mapData|px|label|val|normalize|fill|value|rgb|cc|min|self|defaultHeight|defaultWidth|join|max|minValue|zoomStep|opacity|lengthes|createVmlNode|ctrly|false|result|ctrlx|Math|in|css|parseInt|zoomCurStep|document|top|setColors|arguments|rvml|coordsize|colorScale|defaultParams|vector1|normalizeFunction|ColorScale|applyTransform|backgroundColor|num|maxTransX|null|stroke|true|maxValue|VectorCanvas|hoverColor|minTransY|minTransX|maxTransY|original|currentFillColor|substr|showTooltip||selectedRegion|setOpacity|replace|oldPageX|shape|pageX|curBaseScale|target|name|selectedColor|resize|oldPageY|trigger|setValues|unshift|coordorigin|borderColor|vector2|zoomSlider|tagName|getElementsByTagName|setNormalizeFunction|prototype|borderWidth|borderOpacity|round|setMin|createSvgNode|typeof|setMax|options|mouseDown|pageY|div|class|appendTo|scaleColors|new|appendChild|index|addClass|vectorSubtract|getOriginalFill|id|ar|regionMouseOverEvent|getFill|labelShowEvent|split|_|enableZoom|apiEvents|mapObject|data|toString|vectorToNum|fullLength|baseTransY|baseTransX|getAttribute|mapIndex|setScale|sliderDelta|zoomMaxStep|click|curTransX|curTransY|maps|config|vml|setSize|set|apiParams|group|microsoft|0px|letter|Event|hoverOpacity|pathSvgToVml|100|isRoot|c9dfaf|regionMouseOver|mouseover|createGroup|com|toLowerCase|nodeName|namespaces|createElement|default|svgns|urn|position|labelShow|createPath|window|01|schemas|append|pop|while|pow|rgbToArray|getColor|clearMaxValue|vectorAdd|mousemove|vectorLength|abs|reset|applyTransformParams|makeDraggable|clearMinValue|bindZoomButtons|http|text|org|w3|www|xlink|curScale|linear|zoomin|find|zoomout|setBackgroundColor|vectorMult|labelHeight|left|regionMouseOut|regionClick|delegate|parseFloat|isDefaultPrevented|labelWidth|VML|delete|absolute|behavior|createStyleSheet|addRule|world_en|url|fn|1999|onRegionOver|onLabelShow|fillcolor|onRegionOut|linejoin|polynomial|vectorMap|onRegionClick|linecap|2000|push|overflow|toUpperCase|charAt|arrayToRgb|addMap|relative|apply|call|slice|sqrt|extend|Array|hidden|defaultFillColor|add|b6d6ff|catch|f4f3f0|xmlns|try|createElementNS|bind|818181|256|005ace|SVGAngle|a5bfdd|getCountryPath|Number|body|string|countriesData|MAX_VALUE|background|mousedown|defaultColor|countryTitle|setScaleColors|countriesColors|html|mouseout|type|hide|show|is|visible|x2212|valueMax|valueMin|region|stroked|r0|mouseup|shift|switch|MmLlHhVvCcSs|transform|innerHeight|translate|zoom|skew|on|matrix|segment|offset'.split('|'),0,{})); diff --git a/public/admin/view/javascript/jquery/jqvmap/jqvmap.css b/public/admin/view/javascript/jquery/jqvmap/jqvmap.css new file mode 100644 index 0000000..efd2a48 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/jqvmap.css @@ -0,0 +1,48 @@ +/*! + * jQVMap Version 1.0 + * + * http://jqvmap.com + * + * Copyright 2012, Peter Schmalfeldt <manifestinteractive@gmail.com> + * Licensed under the MIT license. + * + * Fork Me @ https://github.com/manifestinteractive/jqvmap + */ +.jqvmap-label { + position: absolute; + display: none; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background: #292929; + color: white; + font-family: sans-serif, Verdana; + font-size: smaller; + padding: 3px; +} +.jqvmap-zoomin, .jqvmap-zoomout { + position: absolute; + left: 10px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background: #000000; + padding: 0px 7px; + color: white; + cursor: pointer; + line-height: 20px; + text-align: center; +} +.jqvmap-zoomin { + top: 10px; +} +.jqvmap-zoomout { + top: 40px; +} +.jqvmap-region { + cursor: pointer; +} +.jqvmap-ajax_response { + width: 100%; + height: 500px; +} diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.africa.js b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.africa.js new file mode 100644 index 0000000..0f4d044 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.africa.js @@ -0,0 +1,2 @@ +/** Add World Map Data Points */ +jQuery.fn.vectorMap('addMap', 'africa_en', {"width":950,"height":550,"pathes":{"dz":{"path":"m 419.83634,8.1546547 -9.8215,-3.2979062 -40.87478,7.6790665 -8.90675,6.764318 5.44034,28.092384 -16.24881,0.649952 -9.77336,15.719217 -23.27792,5.584776 0.0722,11.434346 76.6703,58.616072 13.07126,1.10732 43.59495,-34.06231 -4.35709,-5.48849 -8.18458,-1.107324 -4.91075,-8.232729 V 57.551031 l -3.27383,-3.297906 0.55366,-8.786393 -8.71418,-8.786392 -1.08325,-9.340056 3.80342,-2.744243 -1.63691,-9.893719 -2.14244,-6.5476673 0,0 z","name":"Algeria"},"ma":{"path":"m 358.23531,19.68529 h -27.80352 l -5.44034,12.084299 -12.54167,6.042149 -10.3511,28.020167 -20.17259,12.084298 -28.33311,46.676207 27.80352,-0.55366 1.08325,-13.72122 h 7.07726 V 91.637419 h 24.52968 l 0.55367,-24.168597 23.44642,-5.488487 9.82151,-15.935868 15.26184,-0.553663 -4.93482,-25.805514 0,0 z","name":"Morocco"},"mr":{"path":"m 253.78556,126.51819 5.24776,6.86061 -1.08325,29.65708 7.63092,-5.48848 5.44034,-1.10733 7.63093,2.74425 8.71417,12.08429 8.18459,-5.48848 39.79152,-0.55367 -9.8215,-66.463638 10.54367,-0.04815 -19.643,-15.045192 0.0241,9.773357 -24.8667,0.02407 -0.12036,18.656033 -7.14947,-0.0241 -0.91475,13.76936 -29.60894,0.64995 0,0 z","name":"Mauritania"},"sn":{"path":"m 270.94912,158.2455 -4.59781,1.13139 -9.48449,6.90876 -2.16651,3.85157 -0.67403,3.82749 3.44234,2.47945 11.67507,-0.14443 7.51056,-2.02208 0.84253,3.68307 -0.69809,4.88667 0.1685,0.0722 -18.65604,0.28887 3.00904,7.22169 1.63692,-4.4293 22.36317,1.87764 0.14444,0.14443 2.33501,0.0963 7.14948,0.28887 0.28887,-4.21266 -8.64196,-10.37516 -9.62893,-13.09534 -6.01807,-2.47944 z","name":"Senegal"},"gm":{"path":"m 258.57595,178.70696 -0.31294,2.67202 16.65804,-0.24072 0.84253,-2.47945 -0.36109,-2.50352 -4.79039,1.94986 -12.03615,0.60181 0,0 z","name":"Gambia"},"gw":{"path":"m 262.69231,193.60772 3.37013,6.66802 9.46042,-8.13644 0.0963,-2.50352 -11.14547,-1.61284 -1.78136,5.58478 0,0 z","name":"Guinea-Bissau"},"gn":{"path":"m 267.07347,201.81637 7.31799,11.26584 9.53263,-8.28087 9.77336,-0.4333 8.13644,10.80846 6.90875,4.54967 2.59981,-5.05518 2.31094,-1.29991 -0.16851,-11.12141 -4.59781,-13.19162 -14.10637,1.5647 -17.45242,-1.39619 -0.0963,4.47744 -10.15852,8.11237 0,0 z","name":"Guinea"},"sl":{"path":"m 275.52286,214.3099 13.60085,13.14348 9.70114,-11.77136 -6.06622,-9.50856 -8.35309,0.84253 -8.88268,7.29391 0,0 z","name":"Sierra Leone"},"lr":{"path":"m 290.54398,228.89772 26.43139,17.66907 -0.62588,-13.3842 -7.99201,-9.41227 -7.79942,-6.90875 -10.01408,12.03615 0,0 z","name":"Liberia"},"ci":{"path":"m 319.19002,247.09638 10.30295,-7.29391 12.80647,-2.23872 13.07126,2.81646 -6.66803,-10.0863 -1.94986,-6.16251 1.94986,-18.22274 -11.67507,0.55367 -5.29591,-5.05519 -11.1214,0.28887 -5.29591,0.84253 0.55366,12.32502 -2.79238,1.1314 -3.34606,6.16251 8.61789,10.0863 0.84253,14.85261 0,0 z","name":"Cote d'Ivoire"},"ml":{"path":"m 288.83484,172.68888 7.41427,-5.07926 41.21179,-0.24072 -9.53263,-66.29514 10.88068,-0.31294 52.64614,40.17669 7.07726,1.01103 -2.67203,22.3391 -33.09942,3.00904 -25.54072,19.06527 -4.64595,13.04719 -17.7413,0.74624 -4.52559,-13.02312 -13.60085,0.9629 0.52959,-4.2608 -8.40124,-11.14548 0,0 z","name":"Mali"},"bf":{"path":"m 363.77194,168.9336 8.76232,-0.6981 14.37116,20.31703 -13.33605,10.06223 -9.653,-2.47945 -12.97497,0.1685 -2.09429,7.60685 -10.88069,0.52959 -2.98496,-4.06822 3.85157,-12.37316 24.93891,-19.06527 0,0 z","name":"Burkina Faso"},"ne":{"path":"m 388.56641,187.51742 6.13844,-0.14443 5.53663,-8.30495 9.29191,-1.66099 9.89372,6.04215 21.11142,0.60181 16.32102,-6.64396 6.13844,-5.27183 0.45737,-6.93283 11.38621,-11.48249 3.00903,-25.34814 -7.48648,-15.69514 -19.16156,-4.67003 -44.34119,34.56783 -6.28287,-0.60181 -2.6961,24.0001 -22.62797,2.26279 13.31198,19.28192 0,0 z","name":"Niger"},"gh":{"path":"m 348.72674,223.74625 2.6961,6.33101 7.02912,11.02512 3.89971,-0.14443 10.63996,-6.04215 -0.74624,-34.39933 -8.23273,-2.40723 -11.53064,0.31294 -3.75528,25.32407 0,0 z","name":"Ghana"},"tg":{"path":"m 374.91741,233.85661 6.45138,-3.77935 -0.14443,-24.91484 -4.18858,-6.78839 -2.6961,2.2628 0.57773,33.21978 0,0 z","name":"Togo"},"bj":{"path":"m 383.31865,229.61989 h 5.10333 l 0.28887,-14.49153 6.45138,-9.36413 -0.28887,-16.29695 -5.84957,-0.14444 -10.03816,7.84758 4.18859,7.992 0.14443,24.45747 0,0 z","name":"Benin"},"ng":{"path":"m 390.20333,229.33102 9.43635,0.45737 11.3862,12.68611 5.53663,1.51656 4.33301,-2.11837 6.59582,-0.91474 2.23872,-9.19563 8.97897,-5.89771 9.72521,-0.45738 17.81351,-32.76241 -0.28887,-7.3902 -8.23273,-6.33101 -16.46545,7.24576 -22.02617,-0.31294 -10.49552,-6.64395 -7.48649,1.66098 -3.89971,6.7884 -0.28887,19.16155 -6.28287,8.90676 -0.57774,13.60085 0,0 z","name":"Nigeria"},"tn":{"path":"m 422.31579,7.7694978 13.31199,-5.3681247 4.38116,2.8405323 0.1685,3.4664124 -2.04614,2.6720262 0.31294,4.742245 2.04614,1.107326 v 8.521597 l -2.35908,3.947858 0.31294,2.527593 8.93082,3.153472 -7.19762,11.193623 -2.81646,-0.168506 -0.48144,9.003043 -3.1294,0.481446 -2.67203,-2.359086 0.62588,-9.147477 -8.76232,-8.521597 -1.10733,-7.414271 4.23673,-3.321978 -3.75528,-17.3561342 0,0 z","name":"Tunisia"},"ly":{"path":"m 434.68896,57.599175 3.75528,-0.62588 1.10732,-8.666031 h 1.87764 l 7.67907,-12.613889 18.9449,5.512559 5.17555,8.04015 18.63197,8.521597 9.70114,-4.092292 -0.93882,-4.092292 -4.23673,-4.092293 0.48145,-2.840532 6.88468,-5.825498 h 13.62492 l 5.17555,6.932824 10.9529,1.588773 1.42027,88.802739 -8.13644,-0.31294 -49.15566,-25.56479 -5.31998,3.00904 -20.19666,-5.05518 -5.48849,-7.245767 -7.99201,-1.107326 -4.06822,-7.245765 0.12037,-33.027207 0,0 z","name":"Libya"},"eg":{"path":"m 535.50378,45.635238 6.42731,0.168506 12.5176,3.466413 5.94586,0.168506 7.36612,-6.162511 h 3.44234 l 6.2588,3.466412 h 7.91979 l 1.42027,-0.09629 5.00704,14.39524 1.42027,4.645956 1.32397,6.956897 -2.35908,1.733206 -4.06822,-2.046146 -4.6941,-15.309988 -4.23673,-0.31294 -0.31294,5.199618 2.81646,9.003044 22.55575,27.923877 0.48145,11.988012 -6.57174,7.58278 -61.7214,-0.6981 -0.93882,-72.072493 0,0 z","name":"Egypt"},"td":{"path":"m 465.35708,173.07404 0.31294,-7.10133 11.41027,-11.09734 3.05718,-27.24985 -7.60685,-14.53967 5.31998,-2.72018 51.51474,26.84063 -0.31294,26.3351 -9.07526,7.72721 v 13.57679 l 5.94586,11.50656 h -10.49552 l -17.38021,17.18763 -0.45737,5.19962 -12.83054,-0.16851 -0.16851,2.35909 -7.31798,-0.9629 -5.00704,-9.46041 -3.75528,-1.85357 0.48144,-2.88868 4.71818,-3.61085 v -16.89876 l -6.5236,-1.01103 -7.87164,-5.84957 6.04215,-5.31998 0,0 0,0 z","name":"Chad"},"sd":{"path":"m 531.21891,164.48022 0.4333,-28.47754 5.92179,0.16851 -0.67402,-15.81551 62.10655,0.55367 8.88268,-8.9549 19.16156,30.64404 -10.49553,12.37317 v 18.89676 l -16.5136,35.50666 -5.68107,2.50352 1.80543,9.89372 h 7.07726 l 9.60485,13.93786 -7.70314,0.98697 -1.97393,3.58677 -0.19258,5.17555 -23.10941,-0.40923 -2.35909,-3.58678 -16.15252,-0.91474 -29.65708,-30.52369 2.96089,-1.78135 0.79439,-7.17355 -7.10133,-4.18858 -6.47545,-12.7824 0.36108,-11.89172 8.97897,-7.72721 0,0 z","name":"Sudan"},"cm":{"path":"m 429.32083,241.15052 7.75128,7.12541 -0.55366,11.02511 42.5117,-0.98696 3.46641,-3.89971 -12.18059,-13.11941 -1.80542,-4.74225 7.75128,-14.5156 -5.27183,-9.62892 -4.42931,-2.38316 v -4.88668 l 5.1274,-3.34605 0.28887,-15.2137 -4.06822,-0.45737 -0.0722,7.992 -17.86165,33.34015 -10.92883,0.55366 -7.48648,5.15148 -2.23873,7.992 0,0 z","name":"Cameroon"},"er":{"path":"m 619.22727,169.94464 -0.60181,-14.17859 9.53263,-11.12141 2.57574,1.97393 4.6941,15.69515 22.53168,16.77839 -4.09229,5.03112 -16.48953,-14.17859 h -18.15052 l 0,0 z","name":"Eritrea"},"dj":{"path":"m 654.78207,186.4101 -1.37212,8.08829 9.53263,-0.14443 0.14443,-11.89172 -3.49048,-2.14244 -4.81446,6.0903 0,0 z","name":"Djibouti"},"et":{"path":"m 601.84706,211.01199 17.52464,-38.99713 17.40428,0.0963 15.43035,13.40828 -1.08325,11.04919 h 11.96393 l 1.22769,6.64396 19.35414,11.57878 11.93986,0.6018 -22.70018,24.38525 -31.17364,9.60485 h -7.72721 l -13.76936,-11.74728 -5.44035,-2.28687 -10.54367,-15.52664 -6.95689,0.0963 -0.81846,-7.1254 5.36812,-1.78136 0,0 z","name":"Ethiopia"},"so":{"path":"m 665.03687,194.8354 9.8215,6.6921 2.91275,-0.14443 24.38525,-8.37716 2.76832,8.93082 -1.94986,7.53464 -5.27184,4.18858 -13.16755,-0.84253 -18.84862,-11.57878 -0.64995,-6.40324 0,0 m 39.06936,-2.38316 10.5196,-4.04414 3.7312,2.23872 -0.40923,9.34006 -9.70114,27.63501 -52.5017,56.23291 -6.09029,-4.18858 -0.40923,-23.7353 7.89571,-9.07526 16.75433,-5.17555 24.57783,-25.94994 6.4273,-5.72921 1.80543,-8.37717 -2.59981,-9.17155 0,0 z","name":"Somalia"},"cf":{"path":"m 472.26583,240.59686 11.21769,12.13244 4.42931,-5.72921 7.05318,0.28887 1.51656,-5.58477 6.93282,-4.33302 14.39525,9.91779 8.30494,-8.23273 32.23282,1.42027 -29.8978,-30.8607 4.02007,-2.50352 0.55366,-5.44034 -6.78839,-3.20162 h -9.96593 l -16.05623,15.9118 -0.55367,6.54767 -12.73425,-0.40923 -0.40923,2.79238 -8.30494,-0.84253 -7.48649,14.22674 1.54063,3.89971 0,0 z","name":"Central African Republic"},"gq":{"path":"m 426.96174,248.68516 -1.10732,4.74224 3.32198,1.80542 3.17754,-2.38315 -1.10732,-4.88668 -4.28488,0.72217 0,0 m 9.99001,12.71017 -0.14443,3.34606 10.92883,0.55366 -0.14444,-3.77935 -10.63996,-0.12037 0,0 z","name":"Equatorial Guinea"},"ga":{"path":"m 449.9508,261.2509 -0.28887,5.99401 -13.57678,-0.28887 -8.30495,16.05623 19.52264,21.35213 4.83854,-4.04414 -0.14444,-4.18858 -3.32197,-1.54063 v -2.93682 l 7.48648,-4.74225 6.64396,5.03111 7.34206,0.14444 -0.14444,-25.25185 -11.62692,-0.55367 -0.14444,-5.2959 -8.28087,0.26479 0,0 z","name":"Gabon"},"cg":{"path":"m 461.04813,260.98611 -0.14443,3.49048 11.50656,0.28887 0.40923,29.87373 -10.5196,-0.28887 -6.09029,-4.74224 -4.71817,2.64795 -0.21665,1.32398 2.4313,1.17954 0.6981,6.13844 -6.49953,5.58478 1.3962,2.93682 7.19762,-5.58478 h 3.46641 l 1.10733,3.34605 4.57373,1.94986 14.68411,-12.42131 -0.28887,-9.07526 3.05719,-7.3902 9.41227,-6.98097 2.52759,-23.61493 -6.6921,0.0241 -7.75128,10.61589 -19.54672,0.6981 0,0 z","name":"Congo"},"ao":{"path":"m 450.33596,310.83986 4.18858,5.44034 5.41627,-5.1274 -1.58878,-5.31998 -1.34804,-0.0963 -6.66803,5.10333 0,0 m 4.98296,8.37716 8.20866,30.64405 -0.19258,9.67706 -12.01208,12.90276 -1.80542,20.96698 46.21883,0.40923 15.02112,5.44034 12.39724,-1.61284 -7.22169,-9.05119 0.0241,-25.85366 14.20266,-0.60181 v -10.08629 l -11.53064,-0.48145 -2.31094,-23.87973 -4.8626,0.0722 -2.62389,-2.35909 -2.8646,0.14444 -3.80343,7.36612 H 487.5277 l -3.39419,-3.41827 1.01103,-4.83853 -3.996,-5.84957 -25.82959,0.40923 0,0 z","name":"Angola"},"cd":{"path":"m 457.14842,316.80979 24.81855,-0.4333 5.03111,7.14947 -0.19258,5.27184 1.85357,1.68506 h 12.32502 l 3.53863,-6.9569 h 5.03111 l 2.04615,2.07022 6.90875,-0.19258 2.04615,24.26489 11.93986,0.38516 v 1.87764 l 32.08839,14.46745 1.49248,2.81646 h 6.71618 l -0.74625,-10.15851 -12.13244,-5.8255 0.74624,-7.70314 5.22369,-12.22873 11.93987,-0.38516 -10.2548,-34.03824 0.19257,-14.46746 16.22474,-25.37221 0.19258,-3.5627 -2.4313,-1.32398 0.0963,-6.88468 -2.96089,-0.2648 -2.98497,-3.80342 -48.98714,-2.21465 -8.97897,8.73825 -14.70818,-9.67707 -5.17555,3.17754 -3.75528,31.60694 -9.29191,7.17355 -2.79239,6.35509 0.50552,9.41227 -16.75433,13.69715 -4.45337,-2.02208 0.6018,2.62388 -4.95889,4.74225 0,0 z","name":"Congo"},"rw":{"path":"m 573.75468,278.75147 6.76432,6.23473 -0.28887,6.66803 -10.49553,0.21665 v -7.36613 l 4.02008,-5.75328 0,0 z","name":"Rwanda"},"bi":{"path":"m 569.87904,293.9411 10.27887,-0.21666 -2.67202,9.00305 -2.59981,2.26279 h -3.17755 l -2.26279,-6.09029 0.4333,-4.95889 0,0 z","name":"Burundi"},"ug":{"path":"m 574.91015,276.80161 7.29391,6.83654 4.57374,-2.91275 12.37316,-2.02208 2.11837,0.21666 0.79438,-4.6941 6.98097,-14.68411 -5.87364,-12.22874 -19.0412,0.12037 -0.12036,5.03111 2.55167,2.45537 -0.38516,5.03112 -11.26584,16.85061 0,0 z","name":"Uganda"},"ke":{"path":"m 605.07275,246.54272 6.40324,12.49353 -7.67907,16.10437 -1.01104,4.88668 38.34719,23.71122 11.89172,-18.68011 -6.01808,-4.88667 -0.12036,-24.6019 7.53463,-8.23273 -12.01208,3.996 -9.07526,0.12036 -14.20266,-11.98801 -4.47745,-1.92578 -8.30495,0.77031 -1.46841,2.45538 0.19258,5.77735 0,0 z","name":"Kenya"},"tz":{"path":"m 604.44687,354.62738 42.05432,-5.15147 -9.46041,-18.29495 -0.50552,-17.52464 3.05718,-8.37717 -40.00817,-25.13149 -12.54168,2.07022 -4.35708,3.22569 -0.38516,7.34205 -2.81646,10.18259 -2.93682,3.49049 -4.21266,0.38515 8.06423,27.94795 13.16755,6.18659 9.07526,0.26479 1.80542,13.3842 0,0 z","name":"Tanzania"},"zm":{"path":"m 517.73842,386.59541 7.63092,10.59181 11.8195,0.72217 4.18858,2.31095 12.37317,0.14443 10.66403,-14.9489 29.80152,-13.33606 2.59981,-11.74729 -3.46641,-16.82654 -15.55071,-8.85861 -10.37517,0.72217 -5.17554,11.45842 0.14443,5.22369 12.22873,5.94586 0.72217,12.92683 -10.5196,0.57773 -2.59981,-4.35709 -29.22378,-12.46945 -0.8666,9.58078 -13.81751,0.4333 -0.57773,21.9058 0,0 z","name":"Zambia"},"mw":{"path":"m 596.23821,373.83709 7.48649,7.8235 -0.14443,10.01408 1.44434,4.21265 9.94186,-10.73625 -1.15547,-13.649 -5.31998,-4.06822 -4.74225,-23.95194 -8.20865,-0.28887 3.73121,17.25984 -3.03312,13.38421 0,0 z","name":"Malawi"},"mz":{"path":"m 581.8189,455.39407 6.47545,5.36812 15.26185,-9.29191 2.45537,-13.79343 v -22.77241 l 24.48154,-20.02816 4.18858,0.14444 14.82854,-14.22674 -2.31094,-29.32007 -39.31008,4.9589 1.15547,8.85861 6.76432,5.22369 1.58877,15.95994 -13.23977,12.92683 -3.17754,-7.24577 0.57773,-9.58078 -7.63092,-8.28087 -18.72825,8.71417 17.42835,8.85861 0.57773,25.82959 -11.53063,17.11541 0.14443,20.58183 0,0 z","name":"Mozambique"},"zw":{"path":"m 542.07552,404.89036 21.59286,24.38525 16.56175,4.21265 11.09733,-17.40427 -0.8666,-23.06128 -18.00609,-9.29191 -6.76431,3.05719 -10.0863,15.3822 -13.96194,-0.14443 0.4333,2.8646 0,0 z","name":"Zimbabwe"},"na":{"path":"m 474.40826,476.28883 8.06423,0.57773 4.74224,4.79039 11.24177,0.14444 2.74424,-31.91988 v -20.89477 l 7.19762,-1.44434 2.74425,-21.9058 18.29495,-0.57773 6.47545,-5.36813 -10.9529,-0.4333 -14.82854,2.02208 -15.98401,-5.80143 h -44.91893 l 1.15547,12.75832 14.97298,22.05024 -2.59981,11.31398 0.14443,5.94586 11.50656,28.74234 0,0 z","name":"Namibia"},"bw":{"path":"m 503.19874,450.45924 5.17555,1.58877 -0.72217,14.80447 5.31998,0.72217 12.22873,-11.02511 14.68411,1.58877 3.89972,-9.86965 18.58382,-16.97098 -22.31503,-25.68515 -0.28887,-4.21265 -2.45538,-0.72217 -6.76431,6.23473 -17.57279,0.4333 -2.45537,21.9058 -6.90876,1.58877 -0.40923,19.61893 0,0 z","name":"Botswana"},"sz":{"path":"m 581.09673,457.12727 -6.04215,1.01104 -2.59981,7.10133 4.62189,4.21265 h 5.60885 l 4.74224,-6.81246 -6.33102,-5.51256 0,0 z","name":"Swaziland"},"ls":{"path":"m 548.69541,484.54563 7.34205,-5.65699 3.46641,0.14443 4.18858,5.22369 -0.4333,5.22369 -7.05318,2.59981 v 2.02208 l -7.77536,-0.43331 -1.87764,-5.65699 2.14244,-3.46641 0,0 z","name":"Lesotho"},"za":{"path":"m 564.94421,432.16429 -19.01712,17.57278 -4.52559,10.85661 -15.06927,-1.87764 -12.54167,11.14548 -8.32902,-0.81846 0.67403,-15.40627 -2.9609,-1.03511 -2.07022,31.51065 -14.78039,-0.14444 -4.45338,-5.24776 -6.5236,-0.0722 5.94586,17.06727 10.61589,10.03815 -7.58278,8.83454 4.91076,11.07326 11.36212,4.33302 9.05119,-7.70314 25.92588,0.14443 1.85357,-2.31094 11.50656,-2.02207 38.92492,-38.75642 -0.14443,-12.20466 -4.16451,5.3922 h -6.23473 l -7.58278,-6.35509 3.85157,-9.58078 6.61989,-1.34805 -0.60181,-19.69115 -14.66004,-3.39419 0,0 z m -9.1234,44.53377 3.63492,-0.14444 5.89771,6.40324 -0.1685,7.41427 -6.90876,3.49048 -0.4333,2.45538 -10.54367,0.12036 -3.2979,-7.94386 3.00903,-5.8255 8.81047,-5.96993 0,0 z","name":"South Africa"},"mg":{"path":"m 704.90061,358.23823 -5.1274,12.18059 -8.78639,15.50256 -15.38221,1.10733 -6.59581,7.75128 1.10733,23.63901 -9.53264,11.07326 1.10733,18.82455 8.06422,9.21969 9.53264,-1.10733 9.53263,-7.02911 -2.19058,-11.07326 21.97802,-38.03425 -4.40523,-4.79039 4.40523,-9.21969 4.76632,1.46841 1.46841,-3.68306 -4.40524,-18.82455 -2.57573,-7.75128 -2.9609,0.74624 0,0 z","name":"Madagascar"}}}); diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.asia.js b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.asia.js new file mode 100644 index 0000000..e339202 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.asia.js @@ -0,0 +1,2 @@ +/** Add World Map Data Points */ +jQuery.fn.vectorMap('addMap', 'asia_en', {"width":950,"height":550,"pathes":{"id":{"path":"m 615.27242,460.80117 -3.29462,12.37981 -17.87084,6.03301 -5.34842,-6.27548 -2.59577,0.71313 4.84924,18.71232 7.25958,0.81296 9.6842,3.66545 v 3.66545 l 4.43562,-0.81296 6.46089,-8.94255 v -7.31664 l 3.63692,-7.31663 4.03627,0.81296 -4.84923,-10.16912 -0.74165,-6.54647 -5.66219,0.58476 0,0 m -84.43367,-9.74124 -0.39934,3.25183 9.6842,16.27345 h 2.82396 l 20.18136,33.75921 8.07254,0.81296 4.03627,-11.79505 -6.46088,-4.06479 -1.21231,-6.50368 -36.7258,-31.73393 0,0 m 95.62969,44.98374 3.22331,3.9507 -2.09658,5.93318 v 1.12673 h 4.76366 l 1.68297,-14.83294 1.54034,0.42787 2.79544,13.54932 2.66708,0.71313 2.52445,-5.79056 -2.52445,-8.75714 -2.09658,-3.80807 6.58925,-4.80644 -1.54035,-2.12511 -6.304,4.09332 h -1.68296 l -3.08069,-4.52119 0.98411,-1.98248 5.19153,-2.53872 7.84434,2.3961 2.38183,-0.14263 5.89039,-5.5053 -2.38183,-2.39609 -5.46252,4.23594 h -3.50856 l -5.31989,-2.53871 -3.77955,0.14262 -4.20742,6.77466 -2.66707,11.72373 -1.42625,4.67808 0,0 m 35.17119,-26.5424 -2.66708,6.48941 4.20742,5.5053 h 1.39772 l 1.82559,-3.66545 0.98411,-1.26935 -1.82559,-1.98248 -2.66708,-0.98411 -1.25509,-4.09332 0,0 m 8.27222,21.32235 -5.74777,1.26936 -1.68297,1.83985 1.39772,2.39609 3.77955,-1.41198 2.38183,-1.41198 3.50856,2.82396 1.54034,-1.26935 -2.79544,-3.39447 -2.38182,-0.84148 0,0 m -95.30166,18.35576 -3.92217,2.68134 0.84149,2.25347 12.47964,2.82396 6.304,1.12674 2.66707,2.82396 7.14549,0.5705 3.36593,2.82396 3.08069,-0.71312 2.8097,-2.53871 -5.19153,-2.39609 -4.4784,-3.80808 -11.63816,-2.82396 -13.46375,-2.82397 0,0 m 40.79059,12.27997 -3.08068,1.69723 1.82559,1.98248 4.47841,-1.69723 -3.22332,-1.98248 0,0 m 5.3199,-1.26936 0.55623,2.68134 3.22331,0.84149 1.2551,-1.55461 -1.39772,-2.12511 -3.63692,0.15689 0,0 m 7.71598,7.05991 -3.92217,0.5705 3.50856,2.96659 h 2.79544 l -2.38183,-3.53709 0,0 m 1.11247,-4.66382 -0.84149,1.69723 6.30401,0.98411 4.90628,-2.82396 -2.79544,-0.84149 -4.47841,1.26936 -1.68297,-1.41198 -1.41198,1.12673 0,0 m 57.39207,-40.47681 -5.94744,0.67033 -3.82233,2.79544 1.58313,3.19479 6.47515,1.19804 v 1.19805 l -4.09332,3.32315 1.98248,6.91728 1.98248,0.12836 1.71149,-6.78892 h 3.16626 l 1.32641,6.6463 15.44623,12.77915 0.39935,9.98371 5.2771,5.71924 2.38183,-0.12836 0.52771,-35.25676 -8.97108,-6.24695 -8.45763,5.71924 -3.0379,1.86838 -5.02038,-3.19479 -0.12836,-10.11207 -2.78118,-0.41361 0,0 z","name":"Indonesia"},"ye":{"path":"m 355.61037,425.50163 3.0379,3.39446 4.10758,-2.48167 1.4833,-0.49918 -1.88265,-1.8256 -3.6084,1.06969 -3.13773,0.3423 0,0 m -39.40714,-14.86147 2.0538,6.10433 v 5.9617 l 4.9348,4.4784 34.77184,-14.1626 0.32804,-3.89365 -5.57662,-10.01224 -13.99146,4.46415 -8.02975,7.90139 -9.31338,-5.5053 -5.17727,4.66382 0,0 z","name":"Yemen"},"my":{"path":"m 590.2561,472.95278 4.30725,4.97759 16.51591,-5.71924 3.2661,-12.608 7.35942,-0.52771 6.73188,-4.87776 -8.72862,-6.36105 -1.99674,-3.4943 -4.30726,7.94419 1.58313,4.56398 -2.62429,3.80807 -4.94906,-1.26936 -11.99472,8.79993 0.31377,5.09169 -5.47677,-0.32803 0,0 m -44.82687,-24.91649 2.86676,6.43236 0.64181,8.35779 3.83659,5.94744 9.25633,5.6194 3.50856,0.32804 -0.64181,-5.79055 -3.0379,-7.38795 -4.44988,-9.456 -0.37083,1.65444 -5.36268,-0.24246 -3.85086,-5.53382 -2.39609,0.0713 0,0 z","name":"Malaysia"},"bn":{"path":"m 612.5483,453.45602 -4.10759,4.97759 3.36594,1.05542 1.8969,-2.65281 -1.15525,-3.3802 0,0 z","name":"Brunei Darussalam"},"tl":{"path":"m 650.15836,523.58445 -7.28811,6.0758 0.69886,1.55461 3.08069,-0.5705 3.63692,-3.39446 7.14549,-0.98411 -1.39772,-2.39609 -5.87613,-0.28525 0,0 z","name":"Timor-Leste"},"ph":{"path":"m 626.24024,422.47799 -1.22657,2.33904 -0.6846,2.88101 -6.81744,8.65731 0.41361,1.7828 2.86675,-0.41361 8.85698,-9.89814 -3.40873,-5.34841 0,0 m 11.03913,-3.29463 -0.14262,7.14549 2.59576,2.61002 0.95559,5.07743 2.59576,0.55624 1.22657,-3.16626 -2.03953,-1.51182 -0.54197,-8.92829 -4.64956,-1.78281 0,0 m 7.37369,2.75265 -0.14263,6.31827 1.49756,2.4674 2.59576,-3.02364 -0.68459,-5.49104 -3.2661,-0.27099 0,0 m 1.62592,-5.5053 2.59576,3.43725 1.22657,3.29463 h 2.32478 l -0.41361,-5.63367 -2.59577,-1.78281 -3.13773,0.6846 0,0 m 5.0489,12.92178 0.54197,4.12184 -4.77791,3.85086 -3.9507,0.41361 -4.22169,4.53546 0.14263,2.06805 3.9507,-1.24083 2.72412,-1.7828 2.32478,5.90465 4.09332,2.88101 1.64018,-0.55623 1.49756,-1.78281 -3.2661,-3.29462 1.91117,-1.51182 2.18215,1.7828 1.49756,-2.4674 -1.49756,-3.02364 -0.27098,-6.73187 -4.5212,-3.16626 0,0 m -22.22089,-41.90306 -3.67971,2.61002 -0.41361,8.2437 5.7335,11.1247 1.91117,1.51182 2.45314,-1.65444 4.22169,0.68459 0.81295,3.70824 3.13774,0.27099 1.49756,-2.0538 -1.91117,-2.61002 -2.32478,-2.19642 -4.90628,-0.54197 -2.59576,-4.26447 2.99511,-4.53546 0.27099,-3.97922 -2.03953,-5.07743 -5.16301,-1.24083 0,0 m 1.91117,24.58845 1.08395,3.85086 1.91116,1.24083 1.3692,-1.7828 -2.18216,-3.02364 -2.18215,-0.28525 0,0 z","name":"Philippines"},"cn":{"path":"m 584.10898,383.45594 -3.40872,0.95558 -2.45314,3.02364 2.03953,3.97922 2.99511,0.27099 3.40872,-3.02364 0.81296,-3.97922 -3.39446,-1.22657 0,0 m -127.54903,-142.76706 -4.93481,12.40832 -6.80319,-0.35656 -7.174,15.70295 6.09006,7.75877 -12.55095,17.32887 -6.44663,-1.08394 -4.30725,5.41972 1.06968,3.25184 5.02038,0.35656 2.51019,5.77629 5.02038,1.08395 15.4177,19.86758 v 10.11208 l 7.53057,4.69234 8.24369,-1.44051 10.39733,6.13285 12.55095,3.6084 6.09006,-0.72738 6.81745,-0.72739 14.33375,-9.38469 4.66382,0.72739 1.78281,4.23595 3.9507,1.18378 5.37694,7.94418 -3.57988,7.94418 2.15363,5.41973 6.09007,2.16789 1.06968,6.50368 7.17401,0.72738 1.06968,-3.25184 10.39732,-5.41973 6.44663,0.35657 7.53057,8.30074 5.02038,-2.16789 3.22331,0.35656 1.44051,3.97922 2.51019,0.35656 3.57987,-5.04891 14.33376,-5.41972 12.90751,-15.53181 4.30726,-14.80441 -0.35656,-9.75551 -5.37694,-1.08395 3.22331,-3.6084 -0.71312,-5.77629 -13.62064,-13.72047 v -6.86023 l 3.93644,-5.04891 3.93643,-1.81133 0.35656,-3.97922 H 598.2288 l -1.79707,5.41973 -4.66382,-1.08395 -5.7335,-6.13285 3.57988,-9.38469 5.02038,-5.41973 4.66382,0.35656 -0.71313,8.30075 2.51019,2.16789 6.09007,-6.13285 2.15363,-0.35656 -0.71313,-4.69235 5.73351,-6.86023 4.30725,0.35656 2.51019,-7.94418 2.93807,-1.55461 0.29951,-4.94907 -2.85249,-2.99511 -0.24246,-7.81582 5.49104,-0.35656 -0.35656,-20.15284 -3.85086,2.31052 -1.44051,5.16301 -6.43236,-0.0143 -18.64101,-10.48289 -13.46375,-16.23066 -13.66342,-0.14263 -3.48004,3.02364 4.42136,10.12633 -1.54035,9.49879 -5.5053,2.28199 -3.09495,-0.24246 -0.2282,9.39895 3.22331,0.72739 5.73351,-2.52446 7.53057,3.6084 v 3.6084 l -5.37694,0.35656 -4.30726,9.38469 -3.93644,0.35656 -13.97719,18.41282 -14.69032,6.50367 -10.04076,0.72739 -6.80319,-4.69235 -9.6842,5.06317 -10.39732,-3.25184 -2.51019,-6.86023 -17.55707,-1.08395 -9.31337,-15.16098 h -3.93644 l -3.16626,-7.03138 -3.76528,-0.29951 z","name":"China"},"tw":{"path":"m 623.51612,352.27824 -5.04891,3.85086 -0.27099,7.41647 4.36431,5.07743 1.08395,-0.95558 -0.12836,-15.38918 0,0 z","name":"Taiwan"},"jp":{"path":"m 646.00799,306.7953 -2.32478,2.33905 0.95558,3.29462 2.03953,0.14262 1.3692,7.14549 1.64018,1.7828 2.86675,-2.61002 1.22657,-4.67808 -3.55135,-5.07743 -4.22168,-2.33905 0,0 m 12.55095,-4.66381 -3.9507,3.70823 -0.14262,4.26447 0.95558,1.24083 5.31989,-4.53545 -0.41361,-4.53546 -1.76854,-0.14262 0,0 m -5.46252,-8.79993 -6.96007,7.9727 1.22657,1.92543 3.40873,0.41361 6.40383,-4.94906 4.50694,-0.82723 4.09332,4.80645 3.13773,-1.09821 1.22657,-4.67808 5.86187,-0.14263 5.7335,-6.87449 -2.99511,-11.40996 -1.3692,-6.04728 2.99512,-2.4674 -6.81745,-10.29748 -1.76854,0.14262 -3.67971,4.12185 v 3.43725 l 1.64018,1.92543 0.54197,9.07091 -4.22168,5.22006 -2.45314,-1.51182 -1.91117,4.26447 -0.41361,3.97922 1.49755,2.33904 -0.95558,1.78281 -3.13774,-2.61003 h -2.18215 l -1.91117,1.09821 -1.49756,0.41361 0,0 m 11.738,-62.09868 -2.18216,1.92543 1.09821,4.12184 1.91117,1.92543 -0.14263,6.31827 -2.45314,0.95558 -1.91117,4.26447 5.59088,7.68746 3.67971,-1.24084 0.6846,-1.92543 -3.9507,-3.56561 2.45314,-3.16626 2.59577,0.41361 2.03953,2.19642 0.14262,-4.53546 5.59088,-4.53546 3.13774,-0.82722 -2.59577,-4.39283 -1.22657,-1.92543 -2.03953,1.36919 -1.76854,2.19642 -3.82233,-0.82722 -3.9507,-2.61003 -2.88101,-3.82233 0,0 z","name":"Japan"},"ru":{"path":"m 222.95538,214.51729 -2.13937,-0.21393 -3.85086,4.60676 v 2.15363 l 1.28362,0.49919 2.49593,0.0713 4.13611,-3.3802 0.57049,-1.15526 -2.49592,-2.5815 0,0 m 462.45974,12.45112 -3.82233,5.36267 0.27098,2.61003 1.91117,-0.82722 4.49267,-5.63367 -2.85249,-1.51181 0,0 m 5.04891,-7.83009 -1.3692,3.70824 0.14263,2.4674 2.32478,-1.51182 2.18215,-4.39283 v -1.64018 l -3.28036,1.36919 0,0 m 8.04402,-32.70378 -1.76855,2.19642 0.14263,3.43724 1.64018,-0.14262 2.72413,-4.80644 -2.73839,-0.6846 0,0 m -3.2661,8.38632 v 6.04727 l 1.91116,0.6846 1.3692,-2.19642 v -4.66382 l -3.28036,0.12837 0,0 m -55.78042,-21.85007 -0.12836,8.79993 11.03913,17.04362 3.95069,14.83294 6.96008,13.19276 2.72412,0.95559 2.32478,-1.92543 1.08395,-3.16627 -9.95519,-10.85372 0.27099,-5.63366 2.18215,-0.95558 0.54198,-3.29463 -19.49677,-27.61209 -1.49755,-1.38346 0,0 m 76.91736,-27.3411 -2.72413,0.27098 1.64018,2.33904 3.40873,2.33905 0.95558,-1.09821 -3.28036,-3.85086 0,0 m 5.30563,1.65444 0.41361,2.33904 4.22168,1.24083 0.41361,-1.65444 -5.0489,-1.92543 0,0 m -439.95361,-93.832618 2.45314,0.984108 -1.72576,2.966589 v 4.207421 l -3.67971,2.224941 h -3.92217 l -2.21068,-2.724127 0.24246,-2.966588 1.72576,-2.224942 h 3.43725 l 3.67971,-2.467402 0,0 m 9.32764,-2.724127 v 2.966588 l 2.45314,1.98248 3.43724,-0.242462 2.95233,-2.724126 v -1.98248 h -2.6956 l -2.21068,0.741647 -1.72576,-1.98248 -2.21067,1.240833 0,0 m 14.00572,0.256724 1.72575,3.708235 3.43725,0.242462 2.45314,-0.984109 -1.22657,-3.465774 -3.19479,-0.741647 -3.19478,1.240833 0,0 m 13.99145,-4.949068 -2.6956,-0.499186 -2.45314,2.481666 1.22657,2.224941 0.74165,3.465774 3.19479,-2.467403 0.74164,-2.724127 -0.75591,-2.481665 0,0 m 14.97557,26.228634 -0.74165,3.465774 -5.64793,4.949068 -12.0375,2.724127 -9.82682,16.330498 -1.72576,4.706608 9.82683,2.48166 1.46903,-5.93317 2.95232,-9.156492 7.61615,-3.964959 6.38957,-4.949068 4.66382,-1.98248 h 2.45314 v -6.674824 l -5.3912,-1.996742 0,0 m -31.67689,36.126775 6.63204,0.74164 2.21068,7.6732 5.64792,5.93317 -1.96821,3.96496 h -3.43725 l -3.19479,-3.70823 -7.11696,-0.24246 -2.95232,-3.96496 v -2.72413 l 4.42135,-1.24083 -0.24246,-6.43236 0,0 m 103.64518,-84.376623 -3.19479,-1.982479 h -3.67971 l -0.74164,2.224941 -3.92218,2.224941 -2.95232,0.984109 -0.48492,2.966588 6.87449,0.499186 8.10107,-6.917286 0,0 m 7.60188,0.741647 -1.72575,3.708236 -3.43725,-0.242462 -5.40547,3.96496 -1.46903,4.949068 h 3.43725 l 1.96822,-3.223313 4.66382,3.465774 4.42135,-1.982479 3.19479,-2.724127 -1.22657,-4.207421 -1.72575,-2.966589 -2.69561,-0.741647 0,0 m 7.13123,2.724127 1.72575,6.931548 2.6956,6.432362 2.95233,-5.191529 5.64793,-1.240833 v -3.708236 l -3.67971,-2.724126 -9.3419,-0.499186 0,0 m 134.75157,-11.096181 3.83659,3.223312 2.72413,-1.126733 0.7987,-4.521195 -5.59088,-3.865122 -3.67971,2.424615 -8.95681,0.81296 v 4.036271 l -9.44174,0.156887 v 6.603512 l 11.03913,8.215168 2.88101,-2.09658 -0.64181,-5.804814 7.04565,-1.768543 -1.44051,-2.73839 -2.55297,-2.581502 3.97922,-0.969846 0,0 m 10.24043,-3.865123 2.55298,4.834969 9.92666,-1.126733 2.72413,-3.551349 -0.64181,-3.0664252 -2.72413,-1.1267331 -2.55298,1.9396923 -7.35942,1.611656 -1.92543,0.484923 0,0 m -0.64181,18.854951 -4.96333,-1.28362 -2.86675,3.066426 -1.28362,4.193158 6.71761,-0.64181 5.12022,-2.581502 -2.72413,-2.752652 0,0 m 128.63298,-27.8830777 -4.16463,-1.2836199 -4.79218,1.768543 -2.39609,3.5513486 3.0379,4.036272 8.00123,-3.5513489 1.59739,-1.7685431 -1.28362,-2.7526517 0,0 m -26.68503,98.6533297 2.51019,8.67156 5.02038,1.44051 5.02038,-7.94418 -2.86675,-5.419732 1.06968,-4.692344 h 7.53058 l -1.79707,3.608399 0.71312,13.007347 -10.75388,26.72782 1.06968,5.77629 -0.35656,9.75551 20.06726,29.25228 3.93643,1.08394 0.35656,-23.83254 3.93644,-3.6084 -4.30726,-9.38469 3.57987,-3.97922 -7.88713,-10.46863 -4.30726,0.35656 -1.42624,-17.32887 11.11044,-2.89528 0.71313,-5.06317 5.7335,-1.4405 3.22331,2.89527 3.93643,-15.88836 6.80319,-11.55258 5.37694,-2.895276 4.66382,0.356561 v -5.419729 l -7.53057,-1.440506 -10.39732,-8.671566 5.02038,-5.77629 -4.30726,-9.755512 3.57987,-3.608398 4.30726,5.77629 10.75389,3.979221 11.82356,1.083946 1.44051,-5.048905 -6.09007,-6.132851 6.80319,-9.384688 -15.4177,-5.419729 -3.93644,7.944182 -5.02038,-6.503675 -28.31095,-9.755512 -26.8847,4.692344 -3.93644,2.167892 v 2.167891 l 5.7335,2.895277 -0.71312,6.860235 -10.39732,-4.335783 -22.93401,9.028127 -3.93644,-8.300742 h -15.77426 l -7.17401,7.58762 -25.4442,-5.77629 -23.29057,4.692344 -2.86675,7.216797 3.57987,1.083946 -0.35656,5.419728 -22.57745,2.524453 1.44051,7.216797 -20.79464,-3.608399 5.02038,-9.384688 -21.15121,-1.083946 1.79707,9.755512 -6.80318,3.251837 -5.73351,-5.419728 -23.29057,3.979221 -8.95681,8.300743 -0.35656,5.048905 -5.73351,0.356561 -0.71312,-5.77629 18.28445,-15.888362 V 44.380597 l -11.82356,-3.251837 -15.4177,5.048905 -6.44663,-6.503674 h -2.86675 l -3.57987,7.216796 2.86675,3.251838 -20.43808,11.196018 -17.55707,13.36391 -10.75389,14.804417 v 6.132851 l 11.46701,4.692349 -5.7335,4.33578 -12.18013,-4.33578 -5.02038,4.33578 -7.53057,-8.671568 -1.44051,3.251837 8.24369,26.000431 2.15363,0.72739 5.73351,-2.89528 2.86675,2.16789 v 4.69235 l -5.37694,-2.16789 -3.22332,2.52445 2.15363,4.69234 -1.79707,12.27997 -11.11044,1.08394 -0.71312,-3.97922 6.44662,-3.97922 1.44051,-10.83946 -7.17401,-9.38469 -2.51019,-16.24492 -11.467,-1.81133 -1.06969,5.77629 2.15363,2.89528 -4.66382,3.97922 1.79707,10.83946 6.80319,2.89527 1.4405,7.94418 -6.81745,-4.33578 -17.55706,-3.25184 -2.15363,5.77629 -13.9772,5.04891 -2.15363,-3.6084 -18.28445,10.11207 -0.35656,6.86024 -7.17401,1.08394 2.15363,-5.0489 v -5.04891 l -7.17401,-2.52445 -4.66382,1.81133 3.93643,7.58762 2.86676,5.04891 v 3.97922 l -5.37695,-1.08395 -1.06968,-1.08394 -5.37694,5.77629 2.86675,5.0489 -12.18013,-0.35656 3.93644,5.06317 -1.06969,2.16789 h -6.44662 l -4.66382,-3.25184 -1.06968,-9.02812 -7.53057,-2.89528 v -3.6084 l 15.77426,3.25184 8.60025,0.72738 3.57988,-5.41973 -3.22331,-5.77629 -22.93401,-9.02812 -7.91566,1.96821 -2.70987,2.32478 0.84149,5.34842 3.36594,0.58476 -0.78444,8.41484 10.38306,24.38878 -7.50205,11.89488 -0.51344,2.68134 3.80807,2.68134 -3.43725,2.26773 -2.28199,0.0428 0.42787,10.4829 3.152,4.46415 0.0428,4.33578 4.03627,0.37082 6.17564,2.35331 6.5322,8.98534 0.0713,2.36756 -2.1251,3.63692 4.87775,-0.27098 4.7494,1.36919 6.4181,9.08518 15.80278,1.44051 -0.68459,10.81093 -5.44826,4.66382 1.12674,1.82559 -5.37694,5.77629 -1.42625,5.41973 3.22331,4.69234 10.39733,3.6084 4.30725,-2.52445 27.59783,10.46863 1.06969,-2.89527 -5.73351,-5.41973 v -6.86024 l -3.57987,-1.08394 0.71312,-5.77629 5.7335,-6.86024 -10.28322,-7.70172 0.71312,-10.71109 10.99635,-7.23106 12.90751,0.72738 2.15363,3.97922 13.26407,0.72739 9.6842,-5.41973 -5.02038,-5.41973 1.06969,-10.11207 25.08763,-12.27997 19.29709,8.70009 6.44663,-5.77629 18.99757,18.05626 14.33376,-1.44051 5.02038,5.04891 13.62063,1.4405 8.95682,-12.27996 11.467,5.06317 6.09006,1.08394 6.09007,-5.41973 -5.37694,-3.60839 4.66382,-7.2168 13.26407,4.33578 2.86675,5.77629 5.7335,0.35656 3.57988,-2.52445 9.6842,-0.35656 1.06968,2.52445 11.11044,0.72739 7.53057,-7.94418 15.41771,1.81133 4.66381,-1.81133 1.42625,-8.67157 -4.66382,-10.46863 4.66382,-3.97923 h 14.69032 l 13.97719,16.61575 17.91363,10.11207 h 5.37694 l 0.71312,-4.33578 6.44663,-3.97922 0.71312,23.47598 -5.7335,0.35656 v 5.77629 l 3.22331,3.97922 -0.59902,5.16301 2.38183,0.98411 1.4405,-3.6084 2.15363,0.72738 1.42625,1.44051 6.44662,-1.44051 6.44663,-18.78363 0.71312,-23.47599 -8.24369,-18.78364 -10.39733,-12.63652 -5.02038,0.72738 v 3.97922 l -12.18012,-4.69234 4.66382,-10.11207 3.93643,-26.72782 16.48739,-5.04891 7.88713,-5.0489 h 8.60025 l -2.15363,2.89527 2.15363,3.6084 7.53057,-7.94418 4.30726,0.35656 -0.71312,-4.69234 -6.81745,-1.44051 4.66382,-16.97231 6.14711,-5.81907 0,0 z","name":"Russian Federation"},"mv":{"path":"m 436.59252,455.60965 0.42788,3.72249 2.38183,0.87001 0.42787,-3.28036 -3.23758,-1.31214 0,0 m 3.0379,7.87286 -0.21393,4.59251 1.74002,0.87001 1.52608,-3.06643 -3.05217,-2.39609 0,0 m 0.44214,8.97108 -1.52608,1.52608 1.74002,1.52608 2.16789,-1.52608 -2.38183,-1.52608 0,0 z","name":"Maldives"},"lk":{"path":"m 471.02206,437.48208 0.35657,3.87938 0.35656,2.82397 -2.09658,0.35656 1.05542,6.34679 3.152,1.76854 4.89202,-2.82396 -1.39772,-6.68909 0.35656,-2.4674 -4.54972,-4.22169 -2.12511,1.0269 0,0 z","name":"Sri Lanka"},"mn":{"path":"m 461.40918,240.8315 8.30074,-11.01061 9.96945,4.60677 6.77466,1.81133 8.30074,-7.61614 -5.63366,-4.15037 3.70823,-5.23432 11.06766,3.90791 3.83659,6.28974 6.93155,0.18541 3.62266,-2.6956 7.45926,-0.29951 1.62592,2.76691 12.39406,0.62755 7.84435,-8.00123 10.85372,1.14099 -0.62755,10.89651 4.74939,1.08395 5.83334,-2.65282 6.17564,3.05216 -0.14262,1.54035 -4.47841,0.12836 -4.66382,9.78404 -3.62266,0.35656 -14.09129,18.41281 -14.39081,6.34679 -8.9996,0.69886 -7.47352,-4.82071 -9.55584,5.10596 -9.41321,-2.9238 -2.66708,-6.83171 -17.82806,-1.2551 -9.12796,-15.47475 -4.43562,-0.28525 -2.29625,-5.49104 0,0 z","name":"Mongolia"},"kp":{"path":"m 610.42319,275.20399 2.62429,1.09821 0.7987,9.18501 5.20579,0.29951 4.90628,-5.74776 -1.69723,-1.51182 0.19967,-6.16138 4.50694,-5.44825 -2.29626,-4.13611 1.49756,-1.71149 0.82722,-4.27873 -2.61003,-1.18379 -2.22494,1.12674 -2.75265,8.35779 -4.44988,-0.38509 -5.14874,6.0758 0.61328,4.42136 0,0 z","name":"North Korea"},"kr":{"path":"m 624.77121,280.80913 8.81419,7.18827 1.49756,6.96008 -0.29951,3.73676 -4.30726,4.84923 -3.70824,0.19967 -4.20742,-9.08518 -1.59739,-4.33578 1.69723,-1.31214 -0.39935,-1.81133 -2.09658,-0.94132 4.60677,-5.44826 0,0 z","name":"South Korea"},"kz":{"path":"m 322.90658,267.14571 5.84761,-2.49593 6.53219,-0.2282 0.4564,9.98371 h -3.82233 l -2.9238,4.76366 3.82233,6.34679 5.63367,3.18052 0.51344,3.63693 2.06806,-0.6846 1.91117,-2.26773 3.152,0.6846 1.58313,3.18052 h 4.05053 v -4.07906 l -2.48166,-7.25958 -1.12674,-5.89039 7.20254,-3.18052 9.6842,1.58313 6.0758,6.11859 13.73473,-1.35494 7.65893,10.88225 8.99961,0.4564 2.48166,-4.07906 3.152,-0.6846 0.4564,-4.53546 4.72087,-0.2282 2.48166,2.95233 2.48167,-5.89039 21.3794,2.95233 3.59414,-4.76366 -6.0758,-7.48778 8.10107,-17.68543 6.5322,0.45639 4.50693,-10.88224 -8.9996,-0.9128 -5.17727,-4.99185 -14.26245,1.65444 -18.37002,-17.75674 -6.47515,5.74776 -19.63939,-8.91402 -24.08927,11.79504 -0.67033,8.38631 5.63366,6.57499 -10.98208,6.20416 -14.24818,-0.31377 -2.98085,-4.37857 -11.16749,-0.61329 -10.58274,6.80319 -0.2282,9.29911 9.85535,7.91566 0,0 z","name":"Kazakhstan"},"tm":{"path":"m 347.38094,294.20157 -0.88427,3.75102 h -5.91892 v 5.07743 l 6.36105,4.19316 -1.96822,5.74776 v 2.65282 l 2.63856,0.44213 3.50856,-4.63529 7.90139,-1.76854 16.88673,6.40383 0.21394,4.6353 9.42748,0.88427 10.52568,-11.0534 -1.31214,-3.53708 -7.01713,-1.54035 -19.73922,-12.82193 -0.88427,-4.6353 h -7.45926 l -3.29462,6.1899 h -3.29463 l -5.69071,0.0143 0,0 z","name":"Turkmenistan"},"uz":{"path":"m 397.39933,310.56059 4.39283,0.2282 v -7.51631 l -4.16463,-2.42461 7.01712,-8.84272 h 2.85249 l 2.85249,3.32315 7.45926,-2.86675 -10.31175,-3.53709 -0.39935,-2.13936 -2.45314,0.59902 -2.41035,4.19316 -10.39733,-0.3423 -7.6304,-10.79667 -13.4067,1.32641 -6.38957,-6.33253 -8.84272,-1.49756 -6.4181,2.61003 3.7225,12.3798 0.0428,4.16464 2.70986,0.0571 3.32315,-6.33253 8.84271,0.1141 1.31215,4.86349 18.95479,12.57948 7.33089,1.68297 2.01101,4.50693 0,0 z","name":"Uzbekistan"},"tj":{"path":"m 399.21066,300.26311 5.86186,-7.27385 h 2.21068 l 0.77017,1.62592 -2.70986,1.96821 v 1.62592 l 1.7828,1.28362 8.57173,0.51345 2.79544,-1.19804 1.26936,0.25672 0.85575,2.73839 5.09169,0.51345 2.55298,5.3912 -0.77018,1.62592 -1.01263,0.0856 -1.01263,-2.05379 -2.21068,-0.17115 -3.82234,0.51345 -0.25672,3.59414 -3.82233,-0.25673 0.17114,-4.53545 -2.79543,-2.73839 -4.25021,3.50856 0.0856,2.31051 -3.73676,1.28362 h -2.21068 l 0.17115,-7.95844 -3.57987,-2.65281 0,0 z","name":"Tajikistan"},"kg":{"path":"m 408.6524,282.24964 -0.44214,3.6084 0.35656,2.22494 12.40833,4.16463 -10.89651,4.39283 -1.24083,-1.02689 -2.35331,1.51182 0.1141,0.82722 1.2551,0.5705 7.64467,0.19967 3.87938,-1.16952 4.9776,-6.27547 6.23269,1.08394 7.5163,-10.41158 -20.11004,-2.73839 -2.78118,6.74613 -3.50856,-3.76528 -3.05216,0.0571 0,0 z","name":"Kyrgyz Republic"},"af":{"path":"m 376.29091,321.95628 2.26773,17.77101 5.64793,1.24083 0.52771,3.19479 -4.05054,3.3802 7.54484,6.09006 14.66179,-5.2771 1.16952,-6.24695 9.2278,-5.76203 3.53709,-13.34965 2.63855,-2.83823 -2.73839,-4.76365 8.92829,-5.51957 -1.141,-1.59739 -4.12184,0.25672 -0.37083,3.79381 -5.53382,-0.0571 -0.0998,-5.06316 -1.78281,-2.12511 -2.99511,2.72413 0.0856,2.49593 -4.52119,1.71149 -8.34353,-0.52771 -10.83946,11.3529 -9.69846,-0.88427 0,0 z","name":"Afghanistan"},"pk":{"path":"m 389.14137,354.46039 3.70824,5.50531 -0.35656,2.83822 -4.93481,1.95396 -0.35656,4.62103 h 5.64793 l 1.93969,-1.5974 h 10.75388 l 9.69847,8.52895 1.24083,-4.09332 h 7.23106 l 0.17115,-5.14875 -7.40221,-7.10269 1.58313,-3.90791 7.58762,-0.52771 10.22617,-21.32236 -5.64793,-4.43562 -2.11084,-7.45926 13.749,-1.24083 -8.11533,-11.55258 -4.32152,-1.16952 -1.76855,2.13937 -1.3264,0.0998 -8.11533,5.14875 2.65281,4.44988 -2.99511,3.19479 -3.70824,13.67768 -9.17075,5.86187 -1.24083,6.40383 -14.61901,5.13448 0,0 z","name":"Pakistan"},"in":{"path":"m 457.38717,444.55625 6.5322,-3.19479 3.87938,-14.03424 -0.17115,-17.22903 22.22089,-23.98943 v -5.69072 l 4.57824,-1.78281 -0.17114,-6.57498 -4.93481,-9.59863 2.82396,-5.14874 6.17564,5.69072 7.92992,0.35656 v 3.19478 l -2.4674,2.66708 0.52771,1.42625 4.23594,0.17115 0.88428,4.79218 h 1.24083 l 3.18052,-5.69072 1.58313,-14.91851 5.29137,-3.73677 0.17115,-5.14874 -2.11084,-4.09332 -3.35168,-0.17115 -13.12144,8.67157 0.82722,5.57661 -9.21354,-0.0285 -3.25184,-3.97922 -1.76854,0.2282 0.59902,5.53382 -19.92463,-1.42624 -12.35128,-5.5053 -0.65607,-6.77466 -8.22943,-5.10596 -0.0998,-10.51142 -5.64793,-6.46089 -12.97882,1.24083 1.41198,5.64793 6.36105,5.14874 -10.99634,22.50614 -7.35942,0.55624 -1.21231,2.70986 7.24532,6.70335 -0.35656,6.77466 -7.40221,-0.1141 -0.7987,3.36594 6.14712,-0.27099 0.17115,2.66708 -4.4071,2.31051 2.82396,5.33416 5.46252,1.7828 3.35167,-2.48166 1.58314,-4.43562 1.93969,-0.88427 2.29625,2.31051 -0.69886,5.69072 -1.58313,2.66708 0.35656,4.62103 23.4332,48.63493 0,0 z","name":"India"},"np":{"path":"m 457.68668,344.07733 0.65607,6.09007 11.52406,5.22005 18.46986,1.3692 -0.69886,-4.46415 -12.33701,-3.39446 -10.46864,-6.23269 -7.14548,1.41198 0,0 z","name":"Nepal"},"bt":{"path":"m 492.21606,351.9502 2.21067,3.02364 7.47353,0.0571 -0.75591,-4.13611 -8.92829,1.05542 0,0 z","name":"Bhutan"},"bd":{"path":"m 492.45852,359.12421 -1.86838,3.3802 4.84923,9.21354 0.14262,7.18827 0.88427,1.92543 5.69072,0.0998 3.22331,-3.09495 2.33904,1.41198 0.47066,4.37857 1.86838,-1.16952 0.1141,-5.59088 -1.56887,-0.18541 -0.9841,-4.74939 -3.96496,-0.14263 -0.98411,-2.63855 2.42461,-3.23758 0.0428,-1.59739 h -7.04565 l -5.63366,-5.19153 0,0 z","name":"Bangladesh"},"mm":{"path":"m 540.76542,431.2066 -3.9507,-6.33252 2.86675,-4.02201 -2.70986,-4.97759 -2.55298,-0.48493 -0.48493,-8.35779 -3.82233,-7.40221 -1.11247,1.76855 -2.55298,4.33578 -3.19479,0.48492 -1.59739,-2.09658 -0.7987,-5.63366 -2.39609,-4.50694 -9.75551,-9.19927 2.39609,-1.58313 0.44214,-6.66056 3.56561,-5.99023 1.54034,-14.90425 5.16301,-3.52283 0.17115,-5.43399 3.09495,1.0269 4.87775,7.05991 -3.62266,7.75877 2.43888,6.09006 6.03301,2.36756 1.09821,6.63204 8.10107,1.2551 -2.2392,3.86512 -10.21191,4.02201 -1.11247,6.58925 7.50204,9.64141 0.31377,5.14874 -1.75428,1.76854 0.15689,1.61166 5.59088,8.20091 0.15689,8.51468 -1.64018,2.96658 0,0 z","name":"Myanmar"},"th":{"path":"m 541.6069,383.88381 4.62103,5.94744 v 7.23106 l 1.59739,0.7987 7.34516,-3.53709 1.44051,0.48493 8.7714,10.12633 -0.31377,6.91729 -2.86675,-0.48493 -2.55298,-1.61165 -1.91117,0.15688 -3.35167,5.61941 0.64181,3.05216 2.70986,1.44051 -0.15688,3.3802 -1.91117,0.96984 -6.54646,-4.50693 v -4.02201 l -2.70987,-0.15689 -1.11247,1.76855 -0.5705,17.9992 4.23595,7.73025 7.50205,7.23106 -0.31378,2.09657 -3.99348,-0.15688 -3.66545,-5.46252 h -3.8366 l -4.79218,-3.86512 -1.44051,-4.02201 2.06806,-3.3802 0.71312,-3.05216 2.25347,-3.99349 -0.0998,-9.18501 -5.5053,-7.95844 -0.2282,-0.96985 1.7828,-1.79707 -0.41361,-6.31826 -7.33089,-9.28485 0.85574,-5.34842 9.08518,-3.8366 0,0 z","name":"Thailand"},"kh":{"path":"m 556.51115,425.2449 5.83334,6.23269 10.85372,-8.04402 0.95559,-12.69357 -5.60514,3.86512 -2.90954,-1.62592 -3.9507,-0.52771 -2.21068,-1.55461 -1.06968,0.0571 -2.89528,4.7494 0.47066,2.19641 2.93807,1.64018 -0.35656,4.46415 -2.0538,1.24083 0,0 z","name":"Cambodia"},"la":{"path":"m 549.36567,373.12993 -3.45151,1.75428 -2.86675,8.35779 4.79218,6.10433 -0.7987,6.74614 0.7987,0.32803 7.9727,-3.86512 10.69684,11.95193 -0.25673,7.53057 2.32478,1.25509 5.74777,-4.66382 -0.47066,-3.69397 -16.58723,-15.76 0.15689,-2.41035 2.06805,-1.44051 -1.4405,-4.02201 -6.86024,-1.12673 -1.82559,-7.04565 0,0 z","name":"Lao People's Democratic Republic"},"vn":{"path":"m 563.04335,432.3476 1.69723,2.66708 0.31378,3.05216 4.46414,0.48492 5.41973,-7.23106 5.10596,-1.4405 2.70986,-7.38795 -1.26936,-11.89488 -5.26284,-7.23106 -5.54809,-4.43562 -7.05991,-12.12307 5.06317,-8.4719 -7.24532,-8.315 -5.80482,-0.25673 -5.22005,2.80971 1.5546,6.71761 6.96008,1.22657 1.86838,5.17726 -2.45314,1.5974 0.15688,1.28362 16.3305,15.97394 0.64181,4.69234 -0.98411,14.83294 -11.43848,8.27222 0,0 z","name":"Vietnam"},"ir":{"path":"m 312.86582,308.97746 -1.74002,1.81133 0.17115,2.86675 2.1679,3.0379 7.68745,8.41484 -1.16952,3.36594 h -1.34067 l -0.67033,3.36594 4.35004,5.56235 4.00775,0.3423 8.02976,11.11044 4.50693,0.3423 3.50856,2.52445 0.17115,5.04891 13.87736,8.0868 h 5.17726 l 3.18053,-2.6956 4.00775,-0.17115 2.33904,5.39121 14.98982,2.08231 0.44214,-5.5053 4.96333,-1.79707 0.2282,-1.96822 -3.9507,-5.3912 -8.79992,-7.07417 4.62103,-4.20742 -0.32804,-1.85412 -5.79055,-0.89853 -2.45314,-19.53955 -0.28525,-4.49267 -15.70295,-6.00449 -6.96007,1.56887 -3.89365,4.77792 -3.45151,-0.2282 -0.99837,0.84148 -7.68746,-0.49918 -9.69846,-7.07418 -3.6084,-3.95069 -1.65444,0.39935 -2.98086,3.40872 -5.26284,-0.99837 0,0 z","name":"Iran"},"tr":{"path":"m 297.24845,296.48356 -3.18053,3.36593 -11.6952,-0.34229 -7.01713,-4.20743 -6.84597,-0.17114 -7.85861,5.56235 -7.35942,0.3423 -0.67033,4.20742 h -8.35779 l -3.33742,3.0379 v 1.68297 l 2.01101,1.68297 v 1.85411 l -0.84148,2.19642 0.84148,1.85412 2.68134,-1.34067 2.68134,2.86675 -0.67034,2.02527 -0.99837,1.35493 1.49756,1.68297 7.35942,1.51182 5.17727,-2.19642 v -3.19479 l 2.51019,0.49919 6.01875,3.53708 6.51794,-1.01263 2.83822,-2.6956 1.83986,0.67033 v 3.0379 h 2.51019 l 2.16789,-4.20742 19.05462,-2.02526 8.31501,-1.01264 -2.19642,-2.88101 -0.0428,-3.89365 1.6687,-1.99674 -6.0758,-4.87776 0.32804,-4.20742 h -3.33742 l -5.53382,-2.70986 0,0 m -50.8884,0.72738 -0.2282,5.06317 4.42135,-1.35493 2.02527,-1.35493 -0.59902,-2.19642 -2.09658,-1.66871 -3.52282,1.51182 0,0 z","name":"Turkey"},"om":{"path":"m 353.84182,398.67397 10.53995,-6.0758 1.86838,-8.91403 -2.31052,-1.32641 0.95559,-9.55583 2.011,-1.16953 2.15363,3.3802 12.82194,6.70335 v 3.7225 l -15.5318,22.8627 -7.14549,0.24246 -5.36268,-9.86961 0,0 z","name":"Oman"},"ae":{"path":"m 347.60914,375.99668 1.24083,4.96333 14.06277,1.24084 0.98411,-10.18339 2.70986,-1.48329 0.74165,-3.7225 -4.43562,1.24083 -4.93481,7.45926 -10.36879,0.48492 0,0 z","name":"United Arab Emirates"},"qa":{"path":"m 345.64092,367.55332 -0.74165,5.71924 2.19642,1.6687 1.99674,-0.18541 0.74165,-7.20253 -1.72576,-1.24084 -2.4674,1.24084 0,0 z","name":"Qatar"},"kw":{"path":"m 332.3198,350.65232 -3.20905,-1.74002 -2.22495,2.23921 0.24247,4.4784 5.17726,1.98248 0.0143,-6.96007 0,0 z","name":"Kuwait"},"sa":{"path":"m 333.33243,359.30962 9.99797,13.93441 3.22332,2.56724 1.4405,6.24695 15.38918,1.21231 1.74002,0.9128 -1.72576,7.70172 -10.11207,5.9617 -14.79016,4.4784 -7.88713,7.70172 -9.37042,-5.46251 -5.67646,4.96333 -7.90139,-12.90751 -5.41973,-2.48167 -1.96822,-2.98085 v -6.46089 l -19.72496,-23.8468 -0.74164,-4.22169 h 5.67645 l 6.90302,-5.9617 0.24246,-2.98085 -1.96821,-1.98248 3.95069,-3.22331 8.38632,0.49918 14.30523,11.92341 8.44337,-0.38509 0.54197,2.08232 7.04565,2.70986 0,0 z","name":"Saudi Arabia"},"sy":{"path":"m 280.09073,324.92287 -0.49919,3.62266 4.02201,1.68297 -0.17115,10.04076 4.02201,-0.0856 4.02201,-3.0379 1.51182,-0.25673 9.12796,-7.25958 1.83986,-10.53995 -18.24167,1.85412 -1.92543,4.22168 -3.70823,-0.24246 0,0 z","name":"Syrian Arab Republic"},"iq":{"path":"m 305.24968,319.07527 -2.22494,10.99634 -9.21354,7.6732 0.58476,3.62266 8.9996,0.61328 14.33376,11.66668 8.01549,-0.2282 0.21394,-2.6956 2.93806,-3.152 4.10758,2.32478 0.54198,-0.51345 -7.94419,-10.56847 -3.76528,-0.2282 -5.00612,-6.43236 0.99837,-4.73513 1.52608,-0.19968 0.52771,-2.09658 -6.81744,-7.174 -7.81582,1.12673 0,0 z","name":"Iraq"},"jo":{"path":"m 283.27125,341.53862 -3.50856,12.23717 -0.15689,1.86839 h 5.51957 l 6.17564,-5.44826 0.15688,-2.06805 -2.52445,-2.58151 4.5212,-3.75102 -0.65608,-3.48003 -1.24083,0.28524 -3.76528,2.69561 -4.5212,0.24246 0,0 z","name":"Jordan"},"lb":{"path":"m 279.42039,329.64374 0.0856,2.78118 -1.16952,4.22168 4.022,0.3423 0.25673,-5.99023 -3.19479,-1.35493 0,0 z","name":"Lebanon"},"il":{"path":"m 278.1653,337.65923 -2.25347,7.17401 2.9238,8.60026 3.35168,-12.56522 v -2.6956 l -4.02201,-0.51345 0,0 z","name":"Israel"}}}); diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.australia.js b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.australia.js new file mode 100644 index 0000000..d8ff26a --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.australia.js @@ -0,0 +1,2 @@ +/** Add World Map Data Points */ +jQuery.fn.vectorMap('addMap', 'australia_en', {"width":950,"height":550,"pathes":{"pg":{"path":"m 484.34788,3.4935749 -1.05721,69.8328711 10.05776,-0.54289 13.22939,-15.458095 11.11497,0.542891 7.1433,6.400394 2.37157,19.715499 22.74426,12.000739 5.82893,-2.142989 v -7.200443 l -18.25827,-15.200936 -9.00055,-20.801281 7.1433,-3.457356 -5.28604,-11.457848 -10.57208,-0.257159 -2.65731,-12.257897 -28.0303,-18.9154509 -4.77172,-0.8000492 0,0 m 79.20488,2.0286963 -2.51444,3.5716485 13.7437,12.1721783 1.88583,7.143297 3.74309,-0.428598 0.4286,-7.343309 -4.17169,-3.771661 -13.11509,-11.3435558 0,0 m 6.88614,17.2296328 -2.71446,0.62861 -1.65724,7.343309 -5.20032,3.371636 -15.62954,2.743026 0.62861,5.886077 16.45816,-0.828622 10.42921,-6.514687 -0.62861,-11.343556 -1.68581,-1.285793 0,0 m 18.54399,12.800788 3.54308,9.85775 6.25753,6.086089 1.88583,-1.685818 -0.62861,-6.514687 -7.08615,-8.60053 -3.97168,0.857196 0,0 z","name":"Papua New Guinea"},"au":{"path":"m 222.64605,231.19331 -1.00006,72.51875 -11.14354,8.17193 -1.00007,7.1433 15.20094,10.20063 37.5166,-7.1433 h 19.25833 l 7.08615,-10.2292 42.57405,-8.17193 30.40187,9.20056 -2.0287,12.2579 4.05739,12.2579 23.31573,-4.08597 1.00006,6.11467 -15.20094,11.22926 5.05746,4.08596 11.14354,-4.08596 -3.02876,33.71636 21.28703,16.34386 12.17217,-4.08596 6.08609,6.11466 35.4879,-5.1146 33.45921,-54.14619 12.17217,-3.05733 24.31579,-44.94563 6.08609,-38.80239 -15.20094,-19.40119 6.08609,-4.08597 -12.17218,-37.80232 -13.17224,-9.20057 2.0287,-51.06029 -12.17218,-9.20056 -3.02876,-28.601766 h -6.08609 l -20.28696,67.404146 -11.14354,1.02864 -25.34442,-25.54443 14.20087,-37.80233 -26.34448,-5.114599 -29.40181,8.171929 -8.11478,23.48716 -13.17224,3.05733 -1.00006,-16.34386 -53.7176,32.68773 1.00006,12.2579 -8.11478,11.22926 h -20.28696 l -43.60269,18.37256 -15.22951,40.97395 0,0 m 184.49708,195.09773 -5.05746,20.42983 1.00006,14.28659 15.20094,-1.02863 17.22963,-26.5445 -28.37317,-7.14329 0,0 z","name":"Australia"},"nz":{"path":"m 656.52991,385.43138 3.02876,33.71636 -4.05739,15.31523 -15.20094,11.22926 1.00006,13.28653 v 14.2866 l 4.05739,5.1146 41.57399,-35.74506 v -8.17193 H 676.7883 l -14.20087,-48.00296 -6.05752,-1.02863 0,0 m -30.40187,73.54738 8.11478,15.31523 -22.31566,21.45847 -2.02869,11.22926 -15.20094,2.0287 -25.34442,23.48716 -23.31572,-11.22927 -2.02869,-8.17193 42.57405,-18.37256 39.54529,-35.74506 0,0 z","name":"New Zealand"},"nc":{"path":"m 638.30022,209.73485 -1.00006,5.1146 13.17223,18.37256 7.08616,3.05733 1.00006,-7.1433 -20.25839,-19.40119 0,0 z","name":"New Caledonia"},"sb":{"path":"m 606.26967,50.23931 0.4286,6.514687 3.97167,3.771661 3.74309,-2.314428 -3.34306,-6.943285 -4.8003,-1.028635 0,0 m 5.00031,16.172425 -3.34306,3.571648 3.54307,6.514687 4.17169,1.25722 -0.20001,-4.40027 -4.17169,-6.943285 0,0 m 8.14336,-3.771661 2.91446,7.143297 5.62892,6.714699 3.11448,-5.028881 -4.17169,-7.143297 -7.48617,-1.685818 0,0 m 14.6009,10.714946 1.65724,8.829115 3.97168,5.457479 3.34306,-6.914712 -8.97198,-7.371882 0,0 m 4.57171,19.744072 -1.45723,2.514441 4.80029,6.314677 3.34306,0.20001 -2.08584,-8.200505 -4.60028,-0.828623 0,0 m -10.62923,12.572208 -5.00031,2.31442 4.3717,6.08609 3.74309,-2.11441 -3.11448,-6.2861 0,0 z","name":"Solomon Islands"},"vu":{"path":"m 678.95986,143.30218 -3.54307,4.74315 1.4858,5.34319 1.77154,1.20007 3.22877,-4.17168 -2.94304,-7.11473 0,0 m 1.77154,14.54376 0.28573,3.85738 3.82881,1.20007 2.65731,-1.48581 -2.65731,-4.17168 -4.11454,0.60004 0,0 m 5.60035,34.45926 -1.77154,2.68588 2.6573,2.97161 4.42885,-1.4858 -5.31461,-4.17169 0,0 z","name":"Vanuatu"},"fj":{"path":"m 758.25046,186.36198 -3.54308,4.74315 -0.28573,5.34318 4.11454,4.17169 -0.28573,-14.25802 0,0 z","name":"Fiji"}}}); diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.europe.js b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.europe.js new file mode 100644 index 0000000..f87c6a1 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.europe.js @@ -0,0 +1,2 @@ +/** Add World Map Data Points */ +jQuery.fn.vectorMap('addMap', 'europe_en', {"width":950,"height":550,"pathes":{"ee":{"path":"m 579.52752,247.70418 -14.10713,-0.50382 -8.94292,5.46651 -0.12596,4.0558 5.79401,5.46652 18.01178,3.04815 -0.62978,-17.53316 0,0 m -27.73563,10.02615 -3.90466,-0.12596 -2.26721,2.29241 1.63743,2.41836 3.90465,0.25192 2.01531,-2.92219 -1.38552,-1.91454 0,0 z","name":"Estonia"},"pt":{"path":"m 213.92602,432.50764 -3.42602,3.45121 6.14668,3.45121 0.68017,-4.81154 -3.40083,-2.09088 0,0 m 18.46523,-2.06569 -4.10618,2.74586 3.42602,2.74585 5.46651,-1.38552 -4.78635,-4.10619 0,0 m 2.72067,9.64828 -2.0405,5.51689 2.72066,3.45121 3.42602,-2.74585 -4.10618,-6.22225 0,0 m 16.39954,11.0086 -1.36033,3.45121 2.04049,2.06569 5.46652,-3.45121 -6.14668,-2.06569 0,0 m 51.94448,30.27995 -2.72066,3.45121 2.72066,3.45121 4.10619,-2.06568 -4.10619,-4.83674 0,0 m 57.31023,-63.43172 -1.56186,21.79049 -4.45886,4.03061 0.45345,2.46875 3.12372,5.16421 -2.01531,6.29783 3.35045,1.13361 7.8093,-0.90689 -0.45344,-6.29782 5.11384,-29.19673 -1.10842,-4.03061 -10.25287,-0.45345 0,0 z","name":"Portugal"},"es":{"path":"m 322.19828,524.98494 -4.40848,2.54433 2.04049,2.06568 2.36799,-4.61001 0,0 m -15.31632,0.47864 -5.46651,1.38552 2.72066,4.13138 h 4.10618 l -1.36033,-5.5169 0,0 m -12.99872,-4.13138 -3.42601,3.45121 4.78635,4.13138 2.72066,-6.19706 -4.081,-1.38553 0,0 M 404.67463,402.22769 H 372.5809 l -6.47417,-2.9222 -3.12372,0.22673 -3.7787,7.85968 1.33514,8.08642 12.26817,1.1336 1.56186,5.16422 -5.34056,30.10362 0.22673,5.39094 8.691,4.71078 10.02614,0.68016 20.05228,-4.9375 9.79942,-12.34374 0.22673,-12.57046 17.382,-15.71938 0.8817,-6.9528 -15.82015,-0.22672 -15.82014,-7.68335 0,0 m 32.09373,30.75859 -4.00542,1.36033 0.8817,3.60235 h 5.794 l 2.44356,-2.69547 -5.11384,-2.26721 0,0 z","name":"Spain"},"is":{"path":"m 298.87112,181.32508 -4.93749,-2.79624 -6.65051,4.20695 -5.71843,5.29018 0.15115,2.94738 7.40625,0.93208 -0.45345,5.29018 -2.61989,2.64508 0.62978,1.71301 7.40624,0.47864 v 8.56504 l 10.65593,1.86416 6.32302,3.57717 7.10395,0.30229 12.19259,-6.0711 9.42155,-12.44451 0.15115,-8.4139 -5.71843,-4.83673 -4.78635,-4.0558 -2.16645,1.56186 -3.24968,4.20695 -3.70312,-0.47864 -3.70312,-4.0558 -4.78635,0.45345 -6.9528,5.76881 -4.18176,4.50924 -2.3176,-2.0153 -0.15115,-4.98788 2.3176,-1.56187 -1.66263,-2.5947 0,0 z","name":"Iceland"},"no":{"path":"m 505.18796,21.738124 -4.15657,-4.181757 -9.22002,4.484053 h -16.92856 l -2.67028,9.874994 9.49713,8.388706 4.15657,-0.604591 5.94514,-10.17729 5.03827,3.602358 -3.57717,7.179523 -1.78858,10.479586 4.15656,6.574932 8.91773,-14.963639 11.588,-14.081943 -4.45886,-3.879462 -6.49936,-2.69547 0,0 m 5.03826,-17.9614046 -7.43143,6.8772276 4.45886,6.877228 h 8.01084 l 3.27487,4.484054 9.79942,5.088644 11.2857,-6.574932 7.73374,-6.574932 -2.67028,-5.3909405 -7.73374,-4.4840534 -5.64285,5.0886449 -3.85427,-4.7863491 -2.97257,0.3022957 -3.85428,8.3887064 -5.64285,-5.6932361 -0.60459,-3.8794619 -4.15657,0.2771044 0,0 m 16.92856,30.8341646 -5.94515,5.390941 -5.03826,3.879462 2.36799,4.181757 4.76115,1.486288 7.73374,-3.602358 3.57716,-4.484053 -3.27487,-5.390941 -4.18176,-1.461096 0,0 m 46.55355,108.498976 5.08864,-3.72831 -0.45344,-4.18176 -3.22449,-1.86416 0.45344,-5.11383 h 2.77105 v -2.79624 l -12.01626,-3.24968 -18.01178,1.86416 -1.83897,7.91007 -4.15657,-1.38552 -2.77104,-4.66039 -8.79177,0.45344 -0.93208,8.84215 -4.15656,1.86416 -2.3176,-4.6604 -18.49043,14.88807 3.70313,4.18176 -6.92761,3.24967 -15.71938,31.18685 -5.54209,3.72831 0.45344,2.79624 5.54209,2.79623 -1.38552,6.04592 -9.24521,-0.47864 -2.77105,-3.24968 -5.99553,6.978 -3.70312,2.79623 -0.93208,6.52455 -3.22449,1.86416 -8.31313,1.86416 -4.15657,13.04909 2.77105,21.41262 3.22449,9.77423 3.70312,3.72831 8.31313,-0.45344 12.01626,-11.63839 4.61001,-7.91007 1.38552,11.63839 7.85969,-13.95599 0.45344,-39.12211 6.39859,-4.03061 1.91454,-21.58895 19.39731,-27.93716 9.24521,-3.24968 4.15657,-5.11384 13.85522,3.24968 6.92761,4.18176 2.3176,-11.63839 11.56281,-6.97799 6.95281,12.11702 0,0 z","name":"Norway"},"ge":{"path":"m 674.47357,400.11162 8.23756,10.75669 10.27805,4.73596 6.32302,-0.0252 10.85746,-2.94738 2.72066,-4.25733 -32.11892,-12.01626 -6.29783,3.75351 0,0 z","name":"Georgia"},"am":{"path":"m 710.39638,414.54624 12.09183,15.76976 -3.55198,4.15656 -8.56504,-1.48628 -10.63073,-9.52232 0.5794,-6.24744 10.07652,-2.67028 0,0 z","name":"Armenia"},"az":{"path":"m 714.65371,409.07972 -2.54432,4.33291 11.86511,15.56823 4.13137,-1.33514 6.80166,7.12914 2.94738,-12.49489 7.38105,1.18399 -0.30229,-3.57717 -12.14221,-10.63073 -2.3176,6.24745 -15.82015,-6.42379 0,0 z","name":"Azerbaijan"},"cy":{"path":"m 643.61421,464.8029 3.09854,2.24203 -9.59789,9.09406 -4.58482,-0.15115 -3.40083,-2.39317 0.45344,-4.45886 6.95281,-0.45345 7.07875,-3.87946 0,0 z","name":"Cyprus"},"gb":{"path":"m 399.03178,261.35787 -4.61001,6.978 1.83896,2.79623 h 10.63074 v 4.6604 l -2.77105,3.72831 1.83897,9.77423 5.99553,11.63838 4.61001,10.70631 7.38105,2.79624 3.22449,5.59247 -0.45344,5.11383 -4.61001,2.79624 -0.45345,2.3176 3.22449,1.86416 -2.77104,3.72831 -6.47417,2.79624 -12.4697,-1.38553 -19.4225,8.84215 -6.47417,-3.24967 18.49043,-10.70631 -2.3176,-1.38552 -9.69866,-0.93208 5.99553,-8.84215 0.93208,-7.45663 7.85969,-0.93208 -1.38552,-14.43462 -9.24521,-0.45344 -2.77105,-3.24968 0.45345,-10.70631 -5.54209,0.45344 5.54209,-18.61638 10.17729,-7.45662 3.27487,3.22448 0,0 m -19.39731,31.21204 -8.31314,0.93208 -0.45344,7.45663 5.54209,3.72831 5.99553,-1.38552 2.3176,-4.18176 -5.08864,-6.54974 0,0 z","name":"United Kingdom"},"ie":{"path":"m 382.38032,305.36709 -2.29241,15.11479 -20.32939,7.45663 h -6.47416 l -4.61001,-3.24968 v -2.79624 l 10.17729,-6.52454 -2.77105,-5.59248 0.45344,-7.91007 8.79177,0.45345 4.03061,-9.47194 -0.52902,8.4139 6.82685,5.41613 6.72608,-1.30995 0,0 z","name":"Ireland"},"se":{"path":"m 529.01894,149.25654 4.9375,4.55963 h 9.24521 l 5.08864,9.77423 1.38553,16.75222 -12.4697,8.84215 v 8.84215 l -8.79177,12.11702 -5.08865,0.45344 -6.92761,11.63839 0.45345,11.18494 12.01625,8.84215 -0.93208,5.11384 -4.61001,6.97799 -6.92761,6.04591 0.45345,20.0271 -10.63074,3.72831 -3.70312,7.91007 h -5.08864 l -2.77105,-13.95598 -11.56281,-17.73469 9.49713,-15.89571 0.65497,-39.27326 6.54974,-3.60236 1.58705,-22.47064 18.66676,-26.72799 8.96811,-3.14891 0,0 m 1.93973,114.84719 -5.31536,4.20695 2.67027,6.17187 4.71078,-4.58482 -2.06569,-5.794 0,0 z","name":"Sweden"},"fi":{"path":"m 551.86746,180.393 5.2146,2.29241 3.22449,6.04591 -3.22449,4.18176 -16.17282,17.6843 -2.77104,9.32079 3.70312,13.50254 12.4697,9.32079 16.62626,-7.91008 13.40178,-1.86415 12.4697,-20.0271 -9.24521,-21.89124 -8.79177,-20.95918 1.38552,-13.50254 -5.54209,-0.93208 -1.4359,-9.8498 -7.45663,-12.1674 -8.26275,5.71843 -3.24968,13.27582 -8.76657,-5.26499 -12.1926,-2.97257 -2.72066,3.1741 4.68558,4.23214 8.53986,-0.15115 6.87723,11.10937 1.23437,17.63392 0,0 z","name":"Finland"},"lv":{"path":"m 580.28326,267.12668 -17.25605,-2.79623 0.37787,9.64827 15.99648,9.77423 6.54974,-1.91454 -0.37787,-7.35586 -5.29017,-7.35587 0,0 z","name":"Latvia"},"lt":{"path":"m 561.99437,275.51539 -5.41613,-0.12596 -7.43144,7.10395 h -6.29783 l 0.37787,8.89254 -3.7787,6.97799 13.60331,0.12596 3.90465,-0.50383 3.90466,4.71078 8.94291,-0.37787 8.56505,-10.90784 -0.50383,-6.47417 -15.87052,-9.42155 0,0 z","name":"Lithuania"},"by":{"path":"m 561.6165,304.71212 3.77869,6.22225 -1.51147,4.96269 0.25191,3.92985 1.38552,4.71077 7.80931,-4.43367 9.69865,0.25191 6.80166,2.79624 h 17.25604 l 5.03827,-12.06664 3.02295,-4.55962 v -3.04815 l -10.83226,-15.24075 -9.5727,-3.80388 -7.8093,-0.8817 -6.80166,2.16645 0.25191,6.85204 -9.44674,11.94068 -9.32078,0.20153 0,0 z","name":"Belarus"},"pl":{"path":"m 563.6318,326.04916 2.14126,3.92985 0.50383,4.18175 -1.76339,4.0558 -4.03061,7.75893 -3.40083,1.53667 -4.40848,-1.91454 -2.64509,0.12595 -6.42378,2.41837 -7.30548,-2.16645 -11.83992,-8.38871 -11.588,-6.22225 -4.66039,-7.10395 -0.8817,-16.75222 9.06887,-7.88488 11.83992,-3.92985 4.40848,-0.50382 -1.76339,3.55197 1.13361,1.38552 19.92632,0.37787 4.28253,-0.12595 7.05356,10.80707 -1.76339,4.43367 0.75574,5.2146 1.36033,5.2146 0,0 z","name":"Poland"},"it":{"path":"m 478.23326,423.338 -6.6757,3.37564 0.8817,13.02391 5.34055,0.90688 4.00542,-3.82907 v -12.34375 l -3.55197,-1.13361 0,0 m -13.32621,-41.31375 -1.56186,3.95504 0.42826,4.30771 6.02072,7.02838 9.47193,-0.32749 20.90879,24.28443 13.0491,3.77869 7.70854,7.28029 1.83897,16.60108 4.13137,-2.41837 3.57717,-9.04368 -0.8817,-6.49936 6.12149,-0.55421 0.8817,-3.67793 -17.25605,-8.26275 -16.37435,-16.09725 -6.52455,-9.62308 -1.58706,-9.14444 8.33833,-1.99012 -2.14126,-6.02072 -5.11384,-4.30771 -4.40848,-0.20153 -6.14668,1.68781 -5.794,8.11161 -3.50159,2.3176 -5.41614,-3.32526 -5.76881,2.14126 0,0 m 50.81088,65.59818 -3.65274,-1.96492 -12.4697,1.96492 0.42825,3.37563 11.21014,5.64286 1.68781,1.83896 2.94739,0.42826 -0.15115,-11.28571 0,0 z","name":"Italy"},"fr":{"path":"m 478.91342,407.16518 -4.9123,4.9375 -0.45345,4.48405 4.00542,2.46875 1.56186,-0.22672 0.8817,-6.52455 -1.08323,-5.13903 0,0 m -43.90845,-71.19064 -5.56728,1.36033 -11.13456,12.11702 -3.35045,0.22672 -4.45886,-3.14891 -2.897,0.68016 -2.21683,6.9528 -16.27359,0.45345 0.45344,3.60236 11.13456,7.40624 12.92315,10.32844 -0.22673,12.34374 -6.90242,12.11702 14.93845,7.17952 15.16517,0.45345 4.68558,-5.39094 9.5727,0.22672 2.67028,2.46875 9.5727,-0.68017 4.91231,-6.29783 -6.24745,-7.40624 -0.45344,-4.71078 1.33514,-5.16421 -3.12373,-4.48406 -5.34055,1.56186 -0.68017,-4.03061 11.81473,-13.0239 v -7.85969 l -7.80931,-4.48406 -4.00542,-0.68016 -18.49042,-12.11702 0,0 z","name":"France"},"nl":{"path":"m 459.41535,309.7 -11.41167,5.61766 2.41837,2.19165 0.25191,5.61766 -2.41836,-0.47864 -2.67028,-4.15656 -6.3734,10.10171 9.79942,2.0405 3.65274,3.85427 1.93973,0.0504 1.28476,-8.71619 6.17187,-2.59471 -2.64509,-13.52773 0,0 z","name":"Netherlands"},"be":{"path":"m 438.05312,330.48283 -1.61225,4.03061 17.33163,11.43686 4.98787,1.18399 0.17634,-5.41613 -4.35809,-4.88712 h -2.67028 l -3.65274,-4.15656 -10.20248,-2.19165 0,0 z","name":"Belgium"},"de":{"path":"m 462.06044,308.71754 8.99329,-1.4611 v -6.34821 l 7.53221,-1.23437 4.13137,4.15656 4.3581,0.47864 6.80165,-2.94738 6.07111,1.71301 5.34056,4.6352 0.73054,17.35681 5.34056,7.10395 -7.02837,0.98246 -11.66358,7.33067 0.98246,2.44356 10.4292,9.77423 -0.73054,4.88711 -9.69866,4.88712 -8.9933,0.25191 -2.19164,4.6352 h -4.61001 l -2.19165,-4.88711 -8.01083,-1.96493 -0.25192,-8.06122 -6.80165,-4.6352 0.73055,-5.86957 -4.61001,-6.34821 1.20918,-8.31313 6.29783,-2.94739 -2.16645,-15.61861 0,0 z","name":"Germany"},"dk":{"path":"m 476.24314,267.45417 -10.45439,11.56281 -0.37787,7.53221 4.76116,12.41931 7.45663,-1.41071 -0.93208,-10.1521 5.13903,-5.74362 -0.10077,-4.50924 -3.62755,-9.39636 -1.86416,-0.3023 0,0 m 11.76435,20.50573 -2.3428,-0.10077 -3.07334,2.82143 0.37787,4.40848 7.28029,0.20153 0.37787,-4.98788 -2.61989,-2.34279 0,0 z","name":"Denmark"},"ch":{"path":"m 466.5193,362.87886 -10.98341,11.68877 0.22672,1.18399 4.50924,-1.41072 4.0558,5.64286 6.85204,-2.41837 4.73597,3.67793 1.93973,-1.10841 5.84438,-9.16964 -1.48628,-1.41071 -5.76881,-0.15115 -2.79624,-5.71843 -7.12914,-0.80612 0,0 z","name":"Switzerland"},"cz":{"path":"m 505.61621,351.51758 h 7.48182 3.67793 l 5.97034,4.25733 11.05899,-9.19483 -10.7315,-7.65816 -10.63073,-5.13903 -7.28029,1.30995 -9.87499,6.34821 10.32843,10.07653 0,0 z","name":"Czech Republic"},"sk":{"path":"m 524.28297,357.21081 1.73821,1.53667 0.22672,2.6199 19.22097,-0.42825 14.2079,-6.12149 -0.22673,-6.22226 -2.72066,1.20919 -3.90465,-2.09088 -2.39317,-0.10077 -6.29783,2.51913 -8.56505,-2.06568 -11.28571,9.14444 0,0 z","name":"Slovakia"},"at":{"path":"m 485.96699,364.74301 -1.63743,3.40083 1.41071,2.41837 5.86957,-1.20919 h 4.98788 l 5.41614,4.58482 11.51242,-2.09088 8.46429,-5.03826 2.16645,-3.40082 -0.32749,-4.38329 -7.60777,-5.69324 -10.20249,0.10077 -0.8565,5.794 -10.7315,5.23979 -8.46428,0.2771 0,0 z","name":"Austria"},"hu":{"path":"m 526.55019,363.43307 -2.92219,4.58482 0.22672,7.00318 4.66039,2.39317 14.33386,0.42826 19.97671,-16.8278 0.10077,-3.72831 -2.16646,-1.08323 -14.43462,6.54974 -19.77518,0.68017 0,0 z","name":"Hungary"},"si":{"path":"m 521.66308,369.45379 -6.39859,3.82908 -11.94069,2.6199 2.39318,6.90241 8.36351,0.10077 7.70854,-6.44898 -0.12595,-7.00318 0,0 z","name":"Slovenia"},"hr":{"path":"m 523.72877,377.43944 -8.89254,7.33067 h -9.01849 l -1.08322,6.34821 4.13137,1.08322 2.06569,-3.07334 3.24968,2.84662 2.5947,9.06887 17.81026,8.31314 1.76339,-2.01531 -18.06217,-18.64157 1.83897,-3.40083 17.15528,-0.65497 1.7382,-5.46651 -11.18494,0.32748 -4.10618,-2.06568 0,0 z","name":"Croatia"},"ba":{"path":"m 521.66308,386.96175 -0.93208,1.53667 16.90337,17.43239 6.19706,-9.11926 -0.22672,-3.60235 -5.41613,-6.57494 -16.5255,0.32749 0,0 z","name":"Bosnia and Herzegovina"},"mt":{"path":"m 516.14618,466.38995 -4.20695,0.85651 0.15115,4.66039 3.7787,1.25957 1.68781,-1.41072 -1.41071,-5.36575 0,0 z","name":"Malta"},"ua":{"path":"m 573.98543,321.99336 -7.30548,4.10618 1.81378,7.75893 -6.75128,14.23309 0.0504,6.27263 3.1741,2.01531 20.35458,1.00765 5.69324,-4.71077 6.09629,2.04049 8.74139,11.66358 -6.39859,11.48724 7.60777,2.21683 9.95057,-11.46204 5.69324,1.03284 5.29017,3.67793 -4.66039,6.14668 6.29783,9.82461 h 6.70089 l 3.45121,-6.54974 7.10395,-1.4359 0.20153,-5.31537 -13.20025,-2.0405 0.40306,-5.71842 h 12.79719 l 13.80483,-11.05899 6.0963,-5.31537 1.00765,-16.77741 -27.20661,-2.44356 -11.15975,-15.74456 -7.70854,-2.64509 -9.34598,0.40306 -4.20695,10.40401 -19.1454,0.25191 -6.22225,-2.87181 -9.01849,-0.45344 0,0 z","name":"Ukraine"},"md":{"path":"m 587.03453,358.67191 7.80931,12.01625 -0.65498,6.80166 2.79624,0.12595 6.62531,-11.21013 -7.96045,-9.87499 -4.50925,-1.86416 -4.10618,4.00542 0,0 z","name":"Moldova"},"ro":{"path":"m 565.44558,358.3948 -0.65498,3.72832 -14.58577,12.14221 12.1926,17.88583 7.8093,5.46652 h 14.05676 l 4.6352,-3.87947 6.22225,-0.80612 4.6352,2.79624 8.21237,-9.34598 -1.58705,-4.68558 -8.33833,-2.14126 -5.69323,-0.27711 0.2771,-8.01084 -7.55739,-11.89029 -19.62403,-0.98247 0,0 z","name":"Romania"},"rs":{"path":"m 548.74374,375.87757 -5.16422,3.87947 h -2.51913 l -1.71301,5.34055 6.0963,7.07876 0.40306,5.61766 -7.5574,10.68112 1.05804,3.1993 4.38329,0.80612 3.45121,-4.68558 1.86415,-0.12596 3.17411,3.07334 9.67346,-2.94738 -0.80612,-13.75446 -12.34374,-18.16294 0,0 z","name":"Serbia"},"bg":{"path":"m 563.58142,395.65275 0.40306,12.54528 4.23214,8.81696 15.89572,0.2771 7.15433,-5.06345 7.02838,-2.79624 -1.71301,-8.01084 1.58705,-4.28252 -3.57717,-1.86416 -4.9123,0.40306 -3.85427,3.87947 -16.17282,0.12595 -6.07111,-4.03061 0,0 z","name":"Bulgaria"},"al":{"path":"m 544.88947,414.21875 v 11.61319 l 3.32525,6.27264 2.39317,-0.2771 4.10619,-7.48182 -2.39318,-3.35045 -0.93207,-8.28794 -3.17411,-2.94738 -3.32525,4.45886 0,0 z","name":"Albania"},"mk":{"path":"m 562.27147,409.81027 -8.48947,2.79624 0.40306,7.20471 1.99011,2.54432 10.07653,-4.68558 -3.98023,-7.85969 0,0 z","name":"Macedonia"},"gr":{"path":"m 551.66593,433.96874 -0.2771,3.35044 11.66357,5.86958 5.56728,2.14126 -2.92219,3.07334 -6.49936,0.65497 -0.93208,2.94739 2.24203,5.06345 7.28029,3.87946 3.1741,0.27711 0.40306,-8.69101 4.76116,-5.74362 -12.99871,-15.3667 1.71301,-5.2146 3.04814,-0.12595 4.63521,3.72831 2.92219,-1.46109 0.93208,-5.21461 13.65369,0.12596 0.52901,-8.01084 -5.69323,4.00542 -16.70184,-0.40306 -10.85746,5.61766 -5.64285,9.49713 0,0 m 25.31727,32.72351 4.10618,0.12596 1.71301,2.54432 h 5.97034 l 3.98023,-1.4611 1.33514,1.61225 -2.64509,3.4764 -11.66358,0.40306 -2.11607,-2.79624 -2.24202,-1.33514 1.56186,-2.56951 0,0 z","name":"Greece"}}}); diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.north-america.js b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.north-america.js new file mode 100644 index 0000000..7f05001 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.north-america.js @@ -0,0 +1,2 @@ +/** Add World Map Data Points */ +jQuery.fn.vectorMap('addMap', 'north-america_en', {"width":950,"height":550,"pathes":{"mx":{"path":"m 330.70592,371.79351 8.52959,26.86025 -3.97341,2.22511 0.44149,5.3332 7.50533,5.77469 v 10.68406 l 9.27129,8.90044 -3.97341,-26.24217 -5.29788,-17.35939 1.32447,-12.00853 4.4149,0.44149 1.76596,4.00873 -1.76596,10.22491 22.95748,44.92603 v 16.01726 l 18.54259,21.79195 20.30854,9.34193 8.38831,-4.89171 11.92023,9.78342 7.06384,-7.11682 -3.09043,-8.01745 10.15428,-3.10809 3.09043,1.78361 3.09043,-3.10809 h 4.85639 l 8.8298,-15.57577 -4.4149,-4.00872 -17.21811,4.00872 -3.97342,11.56704 -10.15427,1.78362 -11.92023,-4.89171 -5.29788,-16.90024 4.00873,-21.31514 -8.19406,-5.10362 -3.90277,-20.46748 -3.26702,-1.39511 -5.96895,6.05724 -6.85193,-3.65553 -2.68426,-13.65088 -27.14281,-2.84319 -14.02172,-10.54279 -13.35066,0.68873 0,0 z","name":"Mexico"},"gl":{"path":"m 655.00687,62.11471 -2.40171,3.832134 4.32661,4.326603 -1.9249,4.326603 6.2515,8.158736 7.68193,-2.401706 10.08363,-0.953618 11.53172,12.485339 7.68193,20.644079 -6.23384,12.96215 8.63554,-1.44809 4.80342,2.87851 0.4768,6.2515 -10.56044,0.47681 5.75703,5.75703 7.20512,1.44809 -15.84066,21.12089 -1.9249,12.96214 3.35532,10.56045 -2.4017,6.2515 4.3266,13.43895 8.15874,9.13002 2.4017,-0.47681 5.28023,-1.44809 0.4768,7.68193 3.35533,4.80341 6.23384,-0.47681 4.80341,-17.76556 14.41024,-17.76556 21.61535,-8.63555 13.43896,-16.81194 6.23384,2.87852 h 12.96215 l 10.56044,-10.56044 12.96215,-5.28023 1.44809,-8.15873 -8.15874,-7.20512 -7.20512,-2.40171 -3.84979,-10.08363 9.13001,-5.28022 14.41024,7.68193 4.80341,-5.28023 -7.68193,-4.3266 16.33514,-22.092161 -2.87852,-9.606824 -7.68193,-0.47681 2.87852,-8.635545 9.60682,-4.326603 19.69046,-17.288752 -5.75703,-6.233839 -22.09216,1.924896 -11.53172,11.531721 6.7283,-14.887045 -7.68192,-1.924897 -4.32661,7.681927 -6.23384,-5.280221 -17.28875,1.924897 4.80342,-7.681928 28.326,-0.953618 -7.20512,-9.606824 -30.72771,-5.757031 -12.48534,1.924897 0.47681,6.251499 -12.96215,-4.326602 0.47681,-4.326603 -9.13001,1.924897 -1.9249,4.803412 9.60682,3.355324 -10.08363,7.205118 -7.20512,-8.158736 -10.08363,-2.878516 -1.44809,7.681928 h -10.08363 l -3.84979,-8.158737 -15.84067,-2.401706 -8.63554,4.326603 -0.47681,5.757031 -11.03726,-1.448088 -6.7283,2.878515 0.47681,6.728309 v 3.355325 l -12.48534,2.401706 -5.75703,-3.832134 -3.8498,6.23384 5.75703,6.251499 12.00853,-1.448087 0.95362,3.849793 -9.13001,4.326603 -8.14108,-3.885113 0,0 m 38.4273,74.91204 2.87851,4.3266 -1.44809,5.28022 h -2.87851 l -3.8498,-4.3266 0.95362,-3.35533 4.34427,-1.92489 0,0 m 120.04998,-12.00853 8.15873,2.4017 -0.47681,6.72831 -8.63554,-4.3266 -1.9249,-2.40171 2.87852,-2.4017 0,0 z","name":"Greenland"},"us":{"path":"m 210.05551,67.90706 6.11022,11.425763 3.92044,-0.88298 v -3.955751 l -10.03066,-6.587032 0,0 m -34.45388,100.5008 -0.30022,5.31554 3.81448,-0.88298 v -2.36639 l -3.51426,-2.06617 0,0 m -5.86299,2.36639 -7.62895,3.84979 1.18319,4.13235 2.9315,-2.36639 5.86299,-2.6666 -2.34873,-2.94915 0,0 m -31.69899,5.01532 -5.28022,-1.18319 -0.88298,2.36639 0.58277,4.43256 5.58043,-5.61576 0,0 m -11.16087,-0.28255 -4.99767,-2.06617 -1.76596,3.24936 3.23171,3.24937 3.53192,-4.43256 0,0 m -17.30641,-4.73277 -2.34873,-3.24937 -2.34872,0.88298 v 4.43256 l 2.64894,1.76596 2.04851,-3.83213 0,0 M 90.5,149.77698 l 2.931494,2.06617 -0.88298,2.36639 H 90.5 v -4.43256 l 0,0 m 15.06364,263.11042 -0.24723,4.11469 3.60256,2.41937 2.15447,-1.9249 -5.5098,-4.60916 0,0 m 9.34193,6.05725 -3.35532,2.41936 2.87851,3.62022 3.35533,-2.89617 -2.87852,-3.14341 0,0 m 6.72831,5.79235 -2.87852,3.86745 0.95362,2.41937 4.07937,-1.9249 -2.15447,-4.36192 0,0 m 4.78575,7.48767 -1.67766,9.6598 1.67766,3.62022 5.5098,-1.69532 2.87851,-4.83873 -6.00426,-5.56278 -2.38405,-1.18319 0,0 m 440.14795,37.80921 -4.66214,-1.5717 -3.74383,2.34872 1.87191,2.18979 6.37512,0.93596 0.15894,-3.90277 0,0 M 252.3326,52.967036 l -14.81641,3.514261 3.05512,16.688325 16.12321,4.397241 0.86532,3.514261 -23.96408,7.470012 -13.50959,22.392374 4.78575,23.71685 7.84086,5.26256 6.11023,-5.70405 1.7483,3.51426 -7.41704,8.77682 -28.76749,13.17407 -18.31301,4.39724 -0.44149,6.58703 42.27709,-12.29108 17.43003,-4.83874 16.12322,-19.76109 17.87151,-11.84959 -9.14767,15.36385 10.03065,1.32447 17.0062,-7.47001 3.05511,12.29108 11.7613,2.63128 12.20278,11.8496 0.86533,8.77682 -1.74831,2.18979 2.17214,8.33533 h 3.05511 l 0.44149,-14.05704 h 3.47894 l 0.86532,34.68346 8.72384,-7.47001 -6.11022,-36.00793 h -9.14767 L 316.80781,141.6359 366.06044,58.194278 317.2493,19.996557 262.76943,30.53934 l -2.17213,16.688325 11.76129,7.028522 -4.36192,11.425763 -15.66407,-12.714914 0,0 m 98.27569,200.348194 -1.76596,7.09916 -6.1632,-3.99107 h -3.07277 l -1.76596,7.54065 -21.56238,48.31668 5.72172,42.10049 7.04618,3.54958 1.32447,11.53172 h 14.51619 l 14.0747,10.63108 27.70792,2.6666 3.07277,14.18066 4.39724,3.10809 6.16321,-6.19852 4.83873,2.20745 4.39724,20.37918 7.47001,4.87406 6.1632,-11.53173 18.91344,-13.73917 12.30874,5.75703 10.56044,0.88298 0.44149,-6.64001 21.98621,0.44149 4.39724,4.87405 0.88298,11.07257 -2.63128,6.19853 3.07277,10.63108 h 6.60469 l 6.60469,-10.18959 -2.63128,-4.87405 -2.63128,-10.63109 3.95575,-11.97321 18.03046,-15.50513 13.63321,-3.99107 -1.76596,-12.85619 18.91343,-20.39684 18.91344,-3.10809 -3.07277,-10.61342 18.47194,-10.63108 v -14.18066 l -1.76596,-0.88298 -6.60469,2.20745 -0.88298,8.68852 -21.95089,0.26489 -17.20045,11.42577 -27.00153,8.8298 -4.30895,-5.28022 12.25577,-18.54259 -6.05724,-5.77469 -4.11469,-7.84086 -8.52959,-6.85193 -9.27129,-0.77702 -17.51833,-11.95555 -124.57084,-20.5028 0,0 z","name":"United States of America"},"bb":{"path":"m 586.02846,499.68435 -2.17213,1.57171 1.71298,3.14341 2.80788,-1.57171 -2.34873,-3.14341 0,0 z","name":"Barbados"},"tt":{"path":"m 586.32867,511.92246 -1.87191,1.73064 -2.03086,0.31787 v 2.50767 l 3.74384,3.44362 1.55404,-2.50767 0.93596,-2.82553 -0.31787,-2.34873 -2.0132,-0.31787 0,0 z","name":"Trinidad and Tobago"},"do":{"path":"m 552.54585,468.93898 -9.34193,-6.11022 -4.4149,-1.50106 -1.4834,10.59576 1.55404,2.98447 2.03085,-2.34873 5.91597,-1.5717 5.13895,1.09489 0.60042,-3.14341 0,0 z","name":"Dominican Republic"},"ht":{"path":"m 530.91284,460.00323 6.0749,0.63574 -0.72404,7.45235 -0.60043,3.92044 -7.0815,-0.38852 -1.25383,1.88958 -2.17213,-0.15893 -0.77702,-4.07937 7.47001,-0.61809 -0.45915,-4.2383 -3.42596,-1.41277 2.94915,-3.00213 0,0 z","name":"Haiti"},"cu":{"path":"m 477.91637,445.0632 v 2.24277 l 9.39491,0.1766 4.43256,-2.57831 0.68872,1.88958 9.21832,2.24277 8.19405,7.39938 -1.87192,2.5783 0.33554,2.93149 6.83426,1.71298 6.83427,-3.09043 3.07277,-3.09043 -4.43256,-2.24277 -22.86919,-13.4213 -8.01746,-0.86532 -11.81427,4.11469 0,0 z","name":"Cuba"},"bs":{"path":"m 511.04579,431.30637 -2.22511,-0.68872 -0.1766,4.29128 2.73724,2.7549 1.87192,-2.7549 -2.20745,-3.60256 0,0 m 4.43256,6.71065 -3.07278,1.71298 2.89618,4.13235 1.53639,-2.06618 -1.35979,-3.77915 0,0 m 9.90703,3.09043 -3.24936,-0.1766 0.33553,2.06618 2.38405,3.44362 2.04851,-2.24277 -1.51873,-3.09043 0,0 m -1.53638,-4.11469 -5.29788,-2.24277 -1.02426,-5.3332 2.04851,-0.86532 2.04852,4.13235 2.04851,1.55404 0.1766,2.7549 0,0 m -5.12129,-10.84299 -2.73724,-0.68873 -0.51212,-3.44362 -2.89618,-1.02426 1.87192,-1.88958 3.4083,1.20086 2.56064,1.55404 -1.69532,4.29129 0,0 z","name":"Bahamas"},"jm":{"path":"m 509.84493,467.43792 -6.14554,1.55404 v 1.71298 l 3.5849,2.06618 h 3.7615 l 2.38404,-2.7549 -3.5849,-2.5783 0,0 z","name":"Jamaica"},"ca":{"path":"m 447.68313,37.073393 0.38851,7.099161 -14.09236,14.604491 3.53192,11.831934 10.17193,-2.754898 5.88065,-8.688524 14.86938,-5.527456 12.13215,-0.794682 -9.39491,-10.26023 -4.69745,3.549581 -3.53192,-1.183194 -1.96022,-4.344262 -4.30894,-4.344263 -8.98874,0.812342 0,0 m 18.40131,-20.90897 -3.12575,5.527456 15.27555,5.527456 5.47448,-8.282354 2.34873,5.527456 h 3.92043 l 7.43469,-8.282354 -9.0064,-2.366387 -3.53192,-2.754898 -4.69745,4.732774 -14.09236,0.370851 0,0 m 26.63068,11.054912 -12.13215,5.121285 v 3.938091 l 15.66407,5.915967 -3.53192,3.938092 2.34872,5.121284 9.78342,-4.344262 h 8.22938 l 3.92043,6.304478 6.65767,-6.710649 -1.5717,-6.322138 -5.47448,1.977876 -0.77702,-7.893843 2.73724,-4.732773 h -2.73724 l -4.30895,2.754898 -1.96021,1.571704 1.18319,5.527456 -3.12575,2.366387 -4.69745,-0.388511 -1.1832,-7.099161 -9.02405,-7.046181 0,0 m 16.05258,-12.238105 -1.1832,3.938091 7.4347,3.54958 5.47447,-3.161068 -0.38851,-2.366387 -11.33746,-1.960216 0,0 m 5.86298,-6.7106493 -5.47447,1.9778753 0.38851,2.754898 12.13215,-0.794682 -0.38851,-2.7548979 -6.65768,-1.1831934 0,0 m 26.24217,6.7106493 -0.77702,2.754898 -1.96021,2.754898 v 3.938091 l 7.43469,-1.183193 7.8232,6.710649 h 2.73724 v -6.710649 l -7.8232,-8.688525 -7.4347,0.423831 0,0 m 19.97302,7.893842 3.12575,3.549581 -2.73724,4.732773 1.96021,5.121285 8.61789,-4.732774 v -3.54958 l -5.08597,-5.915967 -5.88064,0.794682 0,0 m 11.35512,-9.077036 0.38851,6.304479 h 10.5781 l 2.73724,2.366386 -0.38851,2.754899 -9.39491,1.183193 6.65767,9.077036 9.0064,1.571705 12.52066,-5.527456 -18.0128,-27.231108 -5.47447,3.5495802 0.38851,4.7327738 -6.26916,-2.366387 -2.73724,3.584899 0,0 m -91.22951,44.590498 -14.86938,3.938091 -8.61789,7.505332 0.77702,8.282354 15.66407,4.732773 -3.53192,7.893843 -11.35513,-7.099161 -3.12575,5.915967 7.4347,5.121285 -0.38851,8.282352 11.35512,3.16107 13.70385,-0.79468 2.34873,-4.34426 10.17193,11.44342 7.04618,-2.36639 1.1832,-7.89384 5.08596,3.54958 0.77702,-7.893843 -6.26915,-3.938091 0.38851,-24.847061 -5.47448,-4.344263 -5.86299,7.893843 -16.44109,-14.198321 0,0 m 47.76923,17.35939 -5.08597,-2.366387 -2.73724,3.54958 5.47448,8.688525 0.38851,8.282354 11.74364,-7.099161 V 76.542606 l 4.30894,-4.344262 -4.30894,-3.161069 h -7.04618 l -2.73724,6.710649 0,0 m 25.05897,-3.54958 -8.22937,6.710649 1.96022,8.282353 h 5.08596 l 2.34873,-4.344262 3.53192,3.54958 3.53192,-0.388511 9.39491,-7.893842 -17.62429,-5.915967 0,0 m -0.79468,-13.032787 -1.96021,3.938091 8.61788,3.161069 2.34873,-3.54958 -9.0064,-3.54958 0,0 m -5.08596,-14.993003 -8.61789,1.183193 -5.08597,4.732774 9.39491,0.388511 -2.73724,7.09916 1.96022,3.161069 2.73724,-0.388511 6.65767,-10.648741 -4.30894,-5.527455 0,0 m 14.88704,-2.754898 -4.69745,1.571704 0.77702,6.304478 7.8232,5.121285 0.38852,3.938092 -2.34873,2.366387 1.18319,7.893842 30.14494,9.854059 8.22938,2.754898 8.22937,-7.099161 -9.78342,-7.893842 -9.00639,2.366387 -12.52066,-1.183194 -4.69746,-4.732773 -1.18319,-13.015128 -7.8232,-3.938091 -4.71512,-4.308943 0,0 m 24.65281,41.040917 -8.61789,-0.794682 -10.17193,3.938091 -5.47448,7.487672 1.57171,20.520456 16.8296,0.79468 16.05258,7.89385 11.35512,13.01512 8.61789,-0.38851 -2.34873,12.22045 -7.8232,13.01513 -8.61789,3.93809 -6.26916,-1.1832 -3.12575,-2.75489 -4.69745,6.30447 1.96021,6.30448 6.65768,0.38851 8.22937,-3.93809 7.04618,18.15407 17.62429,11.44343 12.13214,-15.38152 -10.17193,-16.5647 5.88065,-6.71065 8.22937,13.80981 14.86939,-13.01513 -2.73724,-5.91597 -10.17193,3.16107 -7.04618,-19.33727 6.65767,-11.03725 -13.31534,-14.19832 -7.43469,5.12129 -7.04619,-15.38152 -14.86938,1.97788 -3.92043,-18.542585 -12.13215,8.282354 -1.18319,10.260231 h -6.65767 l 0.77702,-9.077038 9.34193,-13.809809 0,0 m 17.62428,7.09916 -3.12575,3.161069 2.73724,4.344263 12.92683,1.571704 -8.22938,-8.688524 -4.30894,-0.388512 0,0 M 592.56251,44.967236 v 3.54958 l -8.61788,1.977875 2.34872,3.938092 9.78342,3.938091 10.96662,1.183194 7.8232,5.527456 7.82321,-4.344263 -5.47448,-5.527456 h 7.04618 l 4.30894,-4.732773 10.57811,-1.571705 V 46.53894 l -5.88065,-3.938091 0.77702,-4.344262 16.44109,2.754898 24.28195,-9.465548 -9.00639,-2.754898 2.34872,-3.161069 h 18.78982 l 3.12575,-3.161069 -37.9858,-13.4212978 -9.0064,-3.1610689 -9.78342,7.0991607 -10.96662,-9.0770363 -5.88064,-0.3885112 -1.1832,7.5053315 -7.43469,-6.7106494 -8.61789,2.7548981 1.57171,4.3442623 12.92683,2.754898 -0.77702,6.304478 7.04618,4.344263 17.23577,-4.344263 0.38851,5.915967 -14.09236,6.710649 -8.61789,-6.710649 -7.8232,0.794682 7.8232,11.054912 -3.92043,1.977876 -5.88065,-5.121285 -4.30894,2.754898 3.92043,7.487671 h 6.65767 l -1.5717,7.099161 -5.47448,-0.794682 -7.04618,-7.505332 -4.66214,0.830002 0,0 m -34.89537,108.588894 -7.47001,9.39491 -0.45915,10.34853 6.53405,-3.76149 h 7.92916 l 5.59809,5.17426 5.13895,-4.23831 -17.27109,-16.9179 0,0 m 90.96461,122.20446 -18.6662,17.87152 1.87192,4.2383 22.85153,8.45895 3.26702,-5.63341 -1.87192,-9.39491 -7.47001,0.93596 -4.20298,-4.69746 6.9932,-7.04618 -2.77256,-4.73277 0,0 M 367.31428,59.624706 l 3.51426,5.315541 1.76596,7.09916 8.79448,2.20745 6.1632,-6.64001 5.28022,2.6666 14.95769,1.32447 10.56044,-4.43256 1.76596,14.622151 h 6.1632 v -6.198521 l 6.1632,0.44149 15.39918,18.171732 10.11895,6.198521 -5.28022,8.42363 2.20745,2.20745 19.76109,3.99107 0.44149,8.86512 5.28023,0.88298 1.32447,-13.29768 8.35299,-2.20745 6.1632,9.30661 13.19172,6.19852 6.60469,1.32447 4.39725,-5.31554 0.44149,-8.42363 7.9115,-4.87405 2.63128,7.09916 -7.04618,12.4147 0.88298,6.19852 3.95575,-6.19852 7.9115,-7.09916 0.44149,-9.30661 -4.39724,-7.09916 1.32447,-5.757031 10.56044,-5.31554 4.83873,3.54958 0.88298,31.027921 7.47002,-6.64001 4.39724,2.6666 -6.16321,10.63108 7.91151,1.76596 11.44342,-17.73024 9.67746,10.18959 -3.95575,18.17173 -9.67746,5.31554 -9.23597,-4.43256 -16.70599,3.54958 1.76596,5.75703 -4.39724,7.09916 -13.63321,3.10809 -15.39918,11.97322 -13.63321,18.17173 -1.76596,5.75703 9.23597,3.54958 3.51426,8.86512 12.75024,12.85619 20.2379,8.86512 -4.39724,20.37918 -0.44149,5.75703 5.28022,3.54958 7.04618,-9.30661 0.88298,-17.73024 11.00194,-0.44149 5.28022,-10.18959 0.88298,-15.50513 14.0747,-27.47834 17.58897,6.19852 9.23597,12.85619 -3.95575,12.85619 7.04618,3.99107 17.14747,-11.53172 4.83873,31.46941 15.84067,19.05471 0.44149,9.7481 -17.58897,4.43256 -8.35299,8.86512 -17.58896,-3.99107 -8.79449,-0.44149 -15.39917,11.97321 9.23597,-2.20745 11.44343,-2.20745 2.20745,2.6666 -3.07277,9.7481 0.44149,8.86513 5.28022,3.54958 5.28022,-1.32447 2.64894,-3.99107 h 3.51426 l -5.72171,10.63108 -11.00193,0.44149 -4.83874,7.09916 h -6.1632 l -1.76596,-5.31554 8.79448,-8.86512 -10.56044,3.54958 -0.47681,-15.06365 -3.03745,-1.76596 -9.23597,3.99107 -0.88298,7.54065 h -21.12089 l -18.03045,12.41471 -24.19366,7.98214 -2.63128,-3.54958 12.18513,-18.18939 -6.92257,-6.65768 -4.39724,-8.44129 -8.95342,-6.83426 -9.60682,-0.79468 -17.21811,-12.06151 -124.87106,-20.52046 -2.06617,-8.45895 -11.44342,-10.63108 v -8.86512 l 1.76596,-7.98214 -0.88298,-4.43256 -4.39724,-4.43256 -0.88298,-7.09916 11.44342,-7.98215 -7.04618,-38.10942 -9.67746,-0.44149 -8.79449,-11.53172 48.31668,-82.099494 0,0 m -43.07178,140.835334 -3.00213,5.75703 1.04192,4.07937 1.96021,1.21851 -0.45914,1.66 -2.1015,0.60043 0.60043,6.05724 2.26043,2.27809 1.80128,-1.96021 -2.26043,-5.89831 1.34213,-4.69745 3.30234,-4.39725 -2.4017,-4.07936 -2.08384,-0.61809 0,0 m 9.9247,34.50686 -2.70192,1.05958 4.96235,5.75703 1.20085,6.81661 4.96235,5.29788 4.20299,-0.75936 v -6.95789 l -5.10363,-3.17873 -7.52299,-8.03512 0,0 z","name":"Canada"},"gt":{"path":"m 432.05438,488.50582 10.47215,7.66427 10.56044,-13.12108 -1.80128,-2.71958 -3.60256,-0.12362 v -7.68193 l -2.70192,-1.64234 -8.1764,2.43703 3.12575,7.20511 -7.87618,7.98214 0,0 z","name":"Guatemala"},"hn":{"path":"m 454.4291,483.66709 16.31747,-0.61808 4.83873,5.75703 -3.01979,-0.68873 -5.81001,0.24724 -7.59363,7.13448 -3.24937,7.22278 -2.13681,-1.13022 -0.0177,-7.9115 -4.69745,-3.14341 5.36852,-6.86959 0,0 z","name":"Honduras"},"sv":{"path":"m 444.00993,496.89414 8.30002,4.13234 -0.12362,-6.55171 -4.25597,-2.59596 -3.92043,5.01533 0,0 z","name":"El Salvador"},"ni":{"path":"m 472.42423,489.54774 3.86746,0.77702 0.12361,7.92917 -4.50319,12.85619 -12.13215,-1.20086 -2.70192,-6.19852 3.60256,-7.52299 6.83426,-6.35746 4.90937,-0.28255 0,0 z","name":"Nicaragua"},"cr":{"path":"m 471.78849,512.27565 2.45468,4.80341 1.99554,2.64894 -2.68426,7.96448 -5.12129,-3.60256 -8.37065,-7.66426 v -5.06831 l 11.72598,0.9183 0,0 z","name":"Costa Rica"},"pa":{"path":"m 477.45722,520.45205 -2.5783,8.05278 8.51193,2.20745 5.28022,1.04191 0.90064,-6.23384 5.66873,-2.86085 5.03299,2.59596 1.97787,3.16107 2.40171,-0.28256 1.88958,-5.73937 -6.28682,-2.59596 -4.76809,-2.59596 -4.7681,3.24937 -5.66873,2.86085 -5.79235,-2.33107 -1.80128,-0.52978 0,0 z","name":"Panama"},"bz":{"path":"m 449.14888,472.40027 -0.0883,6.44575 h 1.48341 l 5.05064,-9.43023 h -3.42596 l -3.01979,2.98448 0,0 z","name":"Belize"}}}); diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.south-america.js b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.south-america.js new file mode 100644 index 0000000..bf27865 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/continents/jquery.vmap.south-america.js @@ -0,0 +1,2 @@ +/** Add World Map Data Points */ +jQuery.fn.vectorMap('addMap', 'south-america_en', {"width":950,"height":550,"pathes":{"fk":{"path":"m 534.552,493.51923 -6.16906,-0.68024 -6.14561,4.12835 4.45674,4.83204 7.85793,-8.28015 0,0 m 6.14561,-3.09626 -2.04072,6.54437 -5.81721,5.16043 0.35184,1.71233 9.92211,-3.79996 4.10489,-5.16043 -6.52091,-4.45674 0,0 z","name":"Falkland Islands"},"ec":{"path":"m 352.17758,89.293073 -11.09493,6.896216 -0.79752,10.227041 -2.22837,3.35428 6.99004,6.70857 -3.02589,3.30737 0.70369,8.44434 12.50233,2.97898 18.92941,-22.40097 -0.0469,-7.81102 -9.07767,-0.58642 -12.85417,-11.118387 0,0 z","name":"Ecuador"},"co":{"path":"m 407.37077,4.6854166 -4.83205,-0.4925868 -31.94777,26.3416682 -3.37774,9.265325 -4.36291,0.492586 1.94689,20.47754 -11.14185,27.326842 12.10356,10.250498 15.50476,0.985174 10.64926,15.622037 15.4813,0.49259 -0.49258,11.7048 h 5.79376 l 6.28634,-21.46271 -5.81721,-7.318434 1.4543,-13.651693 12.10356,-0.985174 -1.4543,-31.713211 -27.11574,-8.772737 -6.28634,-17.076345 15.50476,-21.4861694 0,0 z","name":"Colombia"},"ve":{"path":"m 399.70048,19.087718 1.03209,6.075238 7.62337,2.416021 1.73578,-11.188758 8.04559,-8.3270639 8.04558,9.4295199 18.50719,5.043151 15.66896,-3.283912 10.67271,13.159106 8.04559,5.043151 -8.81965,13.440584 2.95552,10.180128 -5.04315,6.239434 -5.23081,4.386369 -11.32949,-5.699934 -2.60368,2.62713 v 8.115955 l 8.28015,3.940695 -6.09869,6.591281 -6.09869,6.591281 -8.04559,-0.656782 -8.0925,-8.89002 -1.71232,-33.448993 -27.63178,-9.42952 -5.0197,-14.707236 5.11352,-7.646825 0,0 z","name":"Venezuela"},"gy":{"path":"m 480.83658,38.345519 16.9356,15.340562 -6.73202,7.787563 -0.5395,4.620934 8.84311,9.124585 -0.21111,8.772738 -15.38747,5.864129 -9.21842,-12.455411 1.97035,-14.965258 -3.94069,-11.141845 8.28015,-12.947997 0,0 z","name":"Guyana"},"sr":{"path":"m 499.78944,54.788537 4.78513,4.386369 7.41226,-4.597478 6.75548,0.211109 -0.86789,2.62713 -2.83824,5.911042 -0.44567,14.707236 -13.4875,5.488825 0.65678,-9.42952 -8.70237,-8.115954 0.44568,-4.17526 6.28634,-7.013499 0,0 z","name":"Suriname"},"gf":{"path":"m 520.90031,56.336667 13.72206,8.561629 -7.17769,14.261562 -2.60368,3.283912 -7.62337,-4.386368 0.21111,-15.364019 3.47157,-6.356716 0,0 z","name":"French Guiana"},"pe":{"path":"m 340.05056,121.35813 -4.55056,4.59748 0.30493,7.34189 39.73534,72.43372 41.26002,26.59969 6.38017,-10.69617 1.52467,-23.52688 -3.33082,-14.66033 -11.23568,-18.95286 -6.6851,2.13454 -3.02589,3.35428 -13.34676,-15.29365 3.33082,-18.03806 15.48131,-10.0863 -1.21974,-9.47643 -15.76278,-0.60987 -8.18633,-13.74552 -4.55056,-1.52468 0.30493,8.2567 -20.31334,24.13675 -15.17637,-3.65921 -0.93826,-8.58509 0,0 z","name":"Peru"},"bo":{"path":"m 419.05211,175.94145 19.30471,-8.42089 6.38018,0.60987 4.24563,17.73312 29.41447,9.78137 4.8555,14.98872 12.12702,1.52467 5.16043,12.83071 -3.63576,11.61098 -19.72693,1.52467 -7.27152,18.64793 -15.4813,-0.30493 -4.8555,-0.9148 -8.93693,8.67891 -4.40983,-0.42222 -15.17636,-35.16132 4.19871,-6.28635 1.47776,-24.8639 -3.75304,-14.80107 -3.91724,-6.75547 0,0 z","name":"Bolivia"},"py":{"path":"m 496.5759,238.61726 5.16043,5.62956 -0.60987,11.91592 14.87144,-0.91481 11.23567,14.37885 -0.91481,12.83071 -7.27152,11.00111 -14.87143,0.60987 -0.60987,-6.12215 4.24563,-10.08631 -14.5665,-9.17149 h -12.12701 l -9.10113,-9.78137 6.61473,-18.90595 17.94424,-1.38394 0,0 z","name":"Paraguay"},"uy":{"path":"m 516.7485,314.66329 -4.80858,5.13698 1.9938,27.63177 15.106,4.38637 19.21089,-19.2578 -31.50211,-17.89732 0,0 z","name":"Uruguay"},"ar":{"path":"m 528.73478,282.45749 4.55057,4.26909 -17.28745,25.68488 -6.07524,6.73202 2.11108,29.34411 13.34676,16.20845 -11.21221,19.56273 -8.49126,3.65922 h -9.711 l 2.72096,15.27019 -15.17637,5.20735 3.63576,12.83072 -9.10113,29.03916 11.23567,9.1715 -6.07523,14.96526 -10.32087,16.20845 5.46537,11.30604 -13.34676,2.13455 -10.93074,-13.44059 -1.82961,-41.86988 -16.98252,-71.12016 5.13698,-24.86391 -10.93074,-31.78358 7.27153,-41.26001 6.6851,-7.95176 -1.64195,-6.02833 8.58508,-7.83447 19.14052,1.31356 10.69617,11.42333 12.36159,0.21111 12.66651,7.74065 -3.72958,8.72582 0.89135,8.81965 17.94423,-0.84443 8.39743,-12.83072 0,0 m -38.82053,235.94911 0.60987,13.44058 10.32087,-0.9148 8.79619,-5.81722 -14.87143,-3.04935 -4.8555,-3.65921 0,0 z","name":"Argentina"},"cl":{"path":"m 480.81312,507.40549 -10.01593,22.00221 17.28745,1.82961 0.30494,-14.66032 -7.57646,-9.1715 0,0 m -3.40119,-3.44811 -7.52955,8.32706 -0.9148,9.78137 -14.5665,-8.25669 -15.4813,-22.30715 -4.55056,-7.95176 6.38017,-8.25669 -0.60987,-10.39124 -7.27152,-3.04935 -5.7703,-4.26908 1.21974,-5.81722 7.57645,-2.13454 1.52467,-33.61319 -11.82208,-6.73202 -7.71719,-174.96216 1.9938,-3.47157 15.106,34.83293 4.83204,0.0938 1.57159,5.55919 -6.42709,7.78757 -7.3888,41.91679 10.50852,32.27617 -4.8555,24.44169 17.12325,71.87077 1.80616,42.03408 12.26776,14.19119 12.99491,-1.89998 0,0 m -49.98584,-87.93848 -3.02589,4.57402 1.52467,7.95176 3.02589,0.30493 1.52468,-10.0863 -3.04935,-2.74441 0,0 z","name":"Chile"},"br":{"path":"m 549.30615,330.8952 14.66032,-28.19473 0.5395,-23.69109 27.3503,-17.6393 h 15.31711 l 12.03319,-20.38371 2.18146,-39.12547 -4.92587,-10.46161 28.99225,-26.45895 1.10246,-29.20336 -39.38349,-19.28126 -47.56982,-14.87143 -22.42443,-2.204914 6.02833,-12.666519 -1.64196,-19.281257 -4.90241,-1.6185 -7.24807,14.402301 -3.79995,4.761673 -9.75791,-4.315999 -32.81567,11.564063 -10.93074,-13.768975 1.75924,-14.378845 -10.32087,10.508519 -11.39986,-6.145607 -1.14937,1.6185 0.0235,4.996238 9.82828,5.277716 -14.75414,15.551671 -9.31224,-0.09383 -9.42952,-9.593716 -10.67272,0.328391 -1.31356,11.399868 6.12215,7.435722 -7.22461,23.15158 -8.44434,0.65678 -13.44059,8.49126 -3.28391,16.67759 11.65789,12.47886 2.13454,-2.41602 8.18633,-2.20491 6.99004,11.77517 20.00841,-8.58509 7.7641,0.44568 5.34809,18.92941 28.54658,9.05421 4.92587,15.106 12.15048,1.4543 5.79375,14.42576 -3.91723,12.83072 5.11352,6.70856 -0.75061,9.99248 13.6986,-1.29011 12.54924,15.8566 -0.98517,11.14185 7.43571,6.28635 -17.82695,26.99845 31.38482,17.56893 0,0 z","name":"Brazil"}}}); diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/continents/readme.txt b/public/admin/view/javascript/jquery/jqvmap/maps/continents/readme.txt new file mode 100644 index 0000000..2a62d60 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/continents/readme.txt @@ -0,0 +1 @@ +These maps are just extracted from the world map and re-sized to same level as the world map. No extra details, or polygons added.
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.algeria.js b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.algeria.js new file mode 100644 index 0000000..fd6c8b6 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.algeria.js @@ -0,0 +1,2 @@ +/** Add Algeria Map Data Points */ +jQuery.fn.vectorMap('addMap', 'dz_fr', {"pathes": {"1": {"path":"M 268.306 457.87 c 0 0 2.249 -0.725 2.249 -0.725 c 0 0 -0.496 -2.893 -0.496 -2.893 c 0 0 -3.133 -7.454 -3.133 -7.454 c 0 0 -2.249 -3.262 -2.249 -3.262 c 0 0 0.031 -6.131 0.031 -6.131 c 0 0 -1.682 -5.848 -1.682 -5.848 c 0 0 -2.49 -5.061 -2.49 -5.061 c 0 0 -6.095 -6.187 -6.095 -6.187 c 0 0 -1.521 -7.254 -1.521 -7.254 c 0 0 -4.417 -0.47 -4.417 -0.47 c 0 0 -4.163 0.675 -4.163 0.675 c 0 0 0.63 -56.826 0.63 -56.826 c 0 0 -0.259 -38.388 -0.259 -38.388 c 0 0 -8.571 -12.135 -8.571 -12.135 c 0 0 -2.714 -6.038 -2.714 -6.038 c 0 0 7.482 -7.683 7.482 -7.683 c 0 0 1.19 -2.448 1.19 -2.448 c 0 0 2.635 -0.807 2.635 -0.807 c 0 0 0.883 0.813 0.883 0.813 c 0 0 1.749 -0.209 1.749 -0.209 c 0 0 0.138 0.823 0.138 0.823 c 0 0 2.35 -1.681 2.35 -1.681 c 0 0 0.465 -8.884 0.465 -8.884 c 0 0 2.565 -6.436 2.565 -6.436 c 0 0 -1.848 -2.78 -1.848 -2.78 c 0 0 -0.051 -6.214 -0.051 -6.214 c 0 0 1.856 -3.176 1.856 -3.176 c 0 0 0.81 -10.075 0.81 -10.075 c 0 0 3.164 -5.032 3.164 -5.032 c 0 0 1.104 -3.51 1.104 -3.51 c 0 0 0.784 -10.595 0.784 -10.595 c 0 0 1.118 -4.885 1.118 -4.885 c 0 0 -4.273 -23.743 -4.273 -23.743 c 0 0 2.643 -13.284 2.643 -13.284 c 0 0 0.684 -28.618 0.684 -28.618 c 0 0 -21.085 13.188 -21.085 13.188 c 0 0 -15.816 11.178 -15.816 11.178 c 0 0 -8.624 9.693 -8.624 9.693 c 0 0 -3.966 6.909 -3.966 6.909 c 0 0 -10.189 7.171 -10.189 7.171 c 0 0 -1.53 5.245 -1.53 5.245 c 0 0 1.021 6.805 1.021 6.805 c 0 0 -0.608 2.721 -0.608 2.721 c 0 0 -5.818 4.933 -5.818 4.933 c 0 0 -11.195 0.456 -11.195 0.456 c 0 0 -13.243 3.621 -13.243 3.621 c 0 0 -6.827 9.299 -6.827 9.299 c 0 0 -6.535 4.925 -6.535 4.925 c 0 0 -1.732 3.77 -1.732 3.77 c 0 0 -6.146 7.528 -6.146 7.528 c 0 0 -3.367 10.625 -3.367 10.625 c 0 0 1.165 1.254 1.165 1.254 c 0 0 -3.322 10.957 -3.322 10.957 c 0 0 -1.78 1.059 -1.78 1.059 c 0 0 -7.687 -0.561 -7.687 -0.561 c 0 0 -3.857 1.585 -3.857 1.585 c 0 0 -2.317 1.98 -2.317 1.98 c 0 0 -7.18 9.722 -7.18 9.722 c 0 0 -3.038 6.72 -3.038 6.72 c 0 0 -14.179 -0.237 -14.179 -0.237 c 0 0 -7.204 6.951 -7.204 6.951 c -0.001 0 -12.962 4.238 -12.962 4.238 c 0 0 37.868 29.441 37.868 29.441 c 0 0 91.412 67.584 91.412 67.584 c 0 0 0.398 1.977 0.398 1.977 c 0 0 27.738 18.602 27.738 18.602 c 0 0 0.568 2.959 0.568 2.959 c 0 0 -0.822 5.766 -0.822 5.766 c 0 0 0.463 1.174 0.463 1.174 c 0 0 3.119 -0.263 3.119 -0.263 c 0 0 1.575 2.019 1.575 2.019 c 0 0 6.354 2.238 6.354 2.238 c 0 0 0.896 4.331 0.896 4.331 c 0 0 3.206 2.918 3.206 2.918 c 0 0 1.768 -0.039 1.768 -0.039 c 0 0 0.994 1.532 0.994 1.532 c 0 0 1.018 -0.565 1.018 -0.565 c 0 0 1.242 0.478 1.242 0.478 c 0 0 0.795 -0.395 0.795 -0.395 c 0 0 1.279 1.151 1.279 1.151 c 0 0 1.88 -1.958 1.88 -1.958 c 0 0 1.563 0.354 1.563 0.354 c 0 0 2.465 2.305 2.465 2.305 c 0 0 1.674 3.077 1.674 3.077 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Adrar"},"2":{"path":"M 251.147 52.1578 c 0 0 0.255 -1.759 0.255 -1.759 c 0 0 -1.269 -0.908 -1.269 -0.908 c 0 0 -0.683 -1.607 -0.683 -1.607 c 0 0 0.258 -1.099 0.258 -1.099 c 0 0 -0.801 0.179 -0.801 0.179 c 0 0 -0.68 -0.703 -0.68 -0.703 c 0 0 -0.004 -1.019 -0.004 -1.019 c 0 0 1.33 -0.886 1.33 -0.886 c 0 0 -1.829 -0.536 -1.829 -0.536 c 0 0 1.196 -1.169 1.196 -1.169 c 0 0 -1.496 -1.623 -1.496 -1.623 c 0 0 0.13 -1.172 0.13 -1.172 c 0 0 2.229 -1.641 2.229 -1.641 c 0 0 1.099 -2.467 1.099 -2.467 c 0 0 -4.333 0.653 -4.333 0.653 c 0 0 -2.668 -0.688 -2.668 -0.688 c 0 0 -1.591 1.201 -1.591 1.201 c 0 0 -4.207 0.314 -4.207 0.314 c 0 0 -3.056 1.182 -3.056 1.182 c 0 0 -0.989 1.688 -0.989 1.688 c 0 0 -3.115 1.248 -3.115 1.248 c 0 0 -1 3.282 -1 3.282 c 0 0 2.055 0.32 2.055 0.32 c 0 0 2.173 -0.8 2.173 -0.8 c 0 0 0.468 1.895 0.468 1.895 c 0 0 0.537 0.021 0.537 0.021 c 0 0 -0.826 1.687 -0.826 1.687 c 0 0 0.509 -0.155 0.509 -0.155 c 0 0 0.519 1.997 0.519 1.997 c 0 0 1.774 -0.663 1.774 -0.663 c 0 0 -0.347 0.243 -0.347 0.243 c 0 0 0.593 0.041 0.593 0.041 c 0 0 0.541 1.18 0.541 1.18 c 0 0 1.563 0.984 1.563 0.984 c 0 0 2.838 -0.813 2.838 -0.813 c 0 0 2.173 3.286 2.173 3.286 c 0 0 0.06 -1.414 0.06 -1.414 c 0 0 0.518 -0.333 0.518 -0.333 c 0 0 -0.384 -0.349 -0.384 -0.349 c 0 0 2.264 -0.619 2.264 -0.619 c 0 0 0.035 -0.865 0.035 -0.865 c 0 0 1.22 -1.163 1.22 -1.163 c 0 0 1.035 1.876 1.035 1.876 c 0 0 1.906 1.174 1.906 1.174 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Chlef"},"3":{"path":"M 311.039 126.689 c 0 0 -3.193 -5.374 -3.193 -5.374 c 0 0 -4.008 -3.915 -4.008 -3.915 c 0 0 -1.49 -1.064 -1.49 -1.064 c 0 0 -8.125 -3.061 -8.125 -3.061 c 0 0 -1.408 -2.328 -1.408 -2.328 c 0 0 -3.983 -3.588 -3.983 -3.588 c 0 0 -5.242 -1.505 -5.242 -1.505 c 0 0 -1.604 -3.201 -1.604 -3.201 c 0 0 0.146 -1.212 0.146 -1.212 c 0 0 -2.38 -6.709 -2.38 -6.709 c 0 0 -1.252 0.433 -1.252 0.433 c 0 0 0.124 -0.432 0.124 -0.432 c 0 0 -1.456 -0.758 -1.456 -0.758 c 0 0 -2.267 2.288 -2.267 2.288 c 0 0 0.026 1.448 0.026 1.448 c 0 0 -0.695 -0.262 -0.695 -0.262 c 0 0 -2.258 1.064 -2.258 1.064 c 0 0 -1.209 -0.324 -1.209 -0.324 c 0 0 -3.377 -4.766 -3.377 -4.766 c 0 0 -0.441 0.087 -0.441 0.087 c 0 0 -1.244 -3.591 -1.244 -3.591 c 0 0 -0.566 -6.331 -0.566 -6.331 c 0 0 -3.015 0.373 -3.015 0.373 c 0 0 -0.437 1.043 -0.437 1.043 c 0 0 -1.978 0.888 -1.978 0.888 c 0 0 -2.349 2.563 -2.349 2.563 c 0 0 -4.876 1.753 -4.876 1.753 c 0 0 -1.839 2.088 -1.839 2.088 c 0 0 -0.366 2.438 -0.366 2.438 c 0 0 -1.644 0.977 -1.644 0.977 c 0 0 -0.273 -1.14 -0.273 -1.14 c 0 0 -3.773 2.229 -3.773 2.229 c 0 0 0.808 1.346 0.808 1.346 c 0 0 -2.194 1.46 -2.194 1.46 c 0 0 0.863 1.461 0.863 1.461 c 0 0 -0.165 0.989 -0.165 0.989 c 0 0 2.206 0.969 2.206 0.969 c 0 0 1.613 1.795 1.613 1.795 c 0 0 3.495 -0.817 3.495 -0.817 c 0 0 1.828 1.584 1.828 1.584 c 0 0 0.565 1.551 0.565 1.551 c 0 0 -0.247 2.655 -0.247 2.655 c 0 0 1.457 0.411 1.457 0.411 c 0 0 0.124 0.991 0.124 0.991 c 0 0 1.142 1.009 1.142 1.009 c 0 0 -0.82 1.435 -0.82 1.435 c 0 0 -0.285 2.856 -0.285 2.856 c 0 0 3.122 0.287 3.122 0.287 c 0 0 -0.206 1.673 -0.206 1.673 c 0 0 3.521 1.138 3.521 1.138 c 0 0 2.073 -0.452 2.073 -0.452 c 0 0 -0.203 3.901 -0.203 3.901 c 0 0 -3.998 0.134 -3.998 0.134 c 0 0 0.641 0.886 0.641 0.886 c 0 0 -0.146 1.528 -0.146 1.528 c 0 0 3.112 6.564 3.112 6.564 c 0 0 10.825 -0.946 10.825 -0.946 c 0 0 5.37 -1.604 5.37 -1.604 c 0 0 8.55 2.039 8.55 2.039 c 0 0 -0.331 -2.903 -0.331 -2.903 c 0 0 -3.66 -2.23 -3.66 -2.23 c 0 0 7.853 -0.362 7.853 -0.362 c 0 0 0.945 -0.734 0.945 -0.734 c 0 0 0.439 0.318 0.439 0.318 c 0 0 0.417 -0.754 0.417 -0.754 c 0 0 0.305 0.512 0.305 0.512 c 0 0 0.903 -0.387 0.903 -0.387 c 0 0 2.684 1.107 2.684 1.107 c 0 0 0.77 -0.422 0.77 -0.422 c 0 0 13.076 0.901 13.076 0.901 c 0 0 0 0 0 0","name":"Laghouat"},"4":{"path":"M 377.235 49.5529 c 0 0 0.701 0.387 0.701 0.387 c 0 0 0.531 2.116 0.531 2.116 c 0 0 1.615 0.739 1.615 0.739 c 0 0 -0.772 0.688 -0.772 0.688 c 0 0 0.142 1.093 0.142 1.093 c 0 0 1.311 2.659 1.311 2.659 c 0 0 -4.046 1.621 -4.046 1.621 c 0 0 -1.879 2.798 -1.879 2.798 c 0 0 -0.624 0.112 -0.624 0.112 c 0 0 -0.659 -1.052 -0.659 -1.052 c 0 0 -0.692 -0.06 -0.692 -0.06 c 0 0 -0.333 -1.191 -0.333 -1.191 c 0 0 -0.393 -0.313 -0.393 -0.313 c 0 0 -0.6 0.601 -0.6 0.601 c 0 0 0.179 -0.579 0.179 -0.579 c 0 0 -1.313 -0.926 -1.313 -0.926 c 0 0 -0.409 1.399 -0.409 1.399 c 0 0 -1.049 0.308 -1.049 0.308 c 0 0 0.063 -2.163 0.063 -2.163 c 0 0 -1.771 -0.877 -1.771 -0.877 c 0 0 -0.118 0.548 -0.118 0.548 c 0 0 -1.816 -0.27 -1.816 -0.27 c 0 0 -0.957 2.009 -0.957 2.009 c 0 0 -1.647 -0.482 -1.647 -0.482 c 0 0 0.408 -1.016 0.408 -1.016 c 0 0 -0.614 -0.53 -0.614 -0.53 c 0 0 -4.031 0.608 -4.031 0.608 c 0 0 -0.774 -1.596 -0.774 -1.596 c 0 0 -2.106 -2.413 -2.106 -2.413 c 0 0 -1.569 -0.717 -1.569 -0.717 c 0 0 -2.67 1.215 -2.67 1.215 c 0 0 -0.353 -0.517 -0.353 -0.517 c 0 0 0.464 -0.385 0.464 -0.385 c 0 0 -0.535 -0.365 -0.535 -0.365 c 0 0 0.359 -0.917 0.359 -0.917 c 0 0 -2.605 -0.267 -2.605 -0.267 c 0 0 -0.109 -0.587 -0.109 -0.587 c 0 0 -1.551 1.313 -1.551 1.313 c 0 0 -2.433 -1.298 -2.433 -1.298 c 0 0 0.803 -2.113 0.803 -2.113 c 0 0 1.65 -0.227 1.65 -0.227 c 0 0 0.715 0.51 0.715 0.51 c 0 0 -0.213 -0.771 -0.213 -0.771 c 0 0 0.78 0.116 0.78 0.116 c 0 0 1.221 -1.532 1.221 -1.532 c 0 0 0.161 -2.791 0.161 -2.791 c 0 0 2.365 -0.863 2.365 -0.863 c 0 0 -0.381 0.438 -0.381 0.438 c 0 0 0.595 1.16 0.595 1.16 c 0 0 1.011 0.369 1.011 0.369 c 0 0 -0.465 -0.805 -0.465 -0.805 c 0 0 1.122 0.603 1.122 0.603 c 0 0 0.375 -1.067 0.375 -1.067 c 0 0 2.243 -0.16 2.243 -0.16 c 0 0 0.264 -1.443 0.264 -1.443 c 0 0 1.445 1.166 1.445 1.166 c 0 0 3.62 0.066 3.62 0.066 c 0 0 -0.201 1.256 -0.201 1.256 c 0 0 1.267 0.551 1.267 0.551 c 0 0 -0.196 0.957 -0.196 0.957 c 0 0 0.998 0.166 0.998 0.166 c 0 0 2.784 -1.372 2.784 -1.372 c 0 0 0.683 -1.773 0.683 -1.773 c 0 0 1.257 -0.076 1.257 -0.076 c 0 0 0.424 2.263 0.424 2.263 c 0 0 0.736 0.045 0.736 0.045 c 0 0 0.649 2.12 0.649 2.12 c 0 0 1.024 1.332 1.024 1.332 c 0 0 2.675 0.939 2.675 0.939 c 0 0 -0.031 1.478 -0.031 1.478 c 0 0 2.814 -0.213 2.814 -0.213 c 0 0 -0.354 -1.537 -0.354 -1.537 c 0 0 0.815 -0.485 0.815 -0.485 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Oum El-Bouaghi"},"5":{"path":"M 354.598 79.5648 c 0 0 -0.634 -2.146 -0.634 -2.146 c 0 0 0.812 -0.795 0.812 -0.795 c 0 0 -0.611 -0.482 -0.611 -0.482 c 0 0 0.499 -0.58 0.499 -0.58 c 0 0 -1.347 -2.257 -1.347 -2.257 c 0 0 -0.802 -0.146 -0.802 -0.146 c 0 0 0.401 -0.844 0.401 -0.844 c 0 0 -0.438 -1.353 -0.438 -1.353 c 0 0 1.308 -1.429 1.308 -1.429 c 0 0 -0.23 -2.636 -0.23 -2.636 c 0 0 1.644 -1.396 1.644 -1.396 c 0 0 -1.052 -0.219 -1.052 -0.219 c 0 0 0.178 -1.438 0.178 -1.438 c 0 0 -0.634 -1.333 -0.634 -1.333 c 0 0 1.491 -1.386 1.491 -1.386 c 0 0 2.418 -0.599 2.418 -0.599 c 0 0 0.612 -1.514 0.612 -1.514 c 0 0 -0.74 -1.491 -0.74 -1.491 c 0 0 0.214 -1.337 0.214 -1.337 c 0 0 -2.106 -2.414 -2.106 -2.414 c 0 0 -1.569 -0.716 -1.569 -0.716 c 0 0 -2.67 1.214 -2.67 1.214 c 0 0 -0.353 -0.518 -0.353 -0.518 c 0 0 0.464 -0.385 0.464 -0.385 c 0 0 -0.535 -0.365 -0.535 -0.365 c 0 0 0.36 -0.917 0.36 -0.917 c 0 0 -2.606 -0.267 -2.606 -0.267 c 0 0 -0.11 -0.587 -0.11 -0.587 c 0 0 -1.55 1.313 -1.55 1.313 c 0 0 -2.433 -1.298 -2.433 -1.298 c 0 0 -3.583 -0.418 -3.583 -0.418 c 0 0 -0.49 0.384 -0.49 0.384 c 0 0 -0.965 0.569 -0.965 0.569 c 0 0 0.445 1.163 0.445 1.163 c 0 0 -2.807 -2.418 -2.807 -2.418 c 0 0 -1.214 0.316 -1.214 0.316 c 0 0 -1.424 1.56 -1.424 1.56 c 0 0 0.121 0.773 0.121 0.773 c 0 0 1.212 0.402 1.212 0.402 c 0 0 -0.792 1.303 -0.792 1.303 c 0 0 -0.682 -0.238 -0.682 -0.238 c 0 0 -0.502 0.541 -0.502 0.541 c 0 0 -2.294 -0.948 -2.294 -0.948 c 0 0 -0.241 0.685 -0.241 0.685 c 0 0 -0.797 -0.078 -0.797 -0.078 c 0 0 -1.382 1.093 -1.382 1.093 c 0 0 0.234 1.001 0.234 1.001 c 0 0 -0.78 1.759 -0.78 1.759 c 0 0 -1.127 -0.332 -1.127 -0.332 c 0 0 -2.661 2.963 -2.661 2.963 c 0 0 -1.817 0.906 -1.817 0.906 c 0 0 -0.723 -1.068 -0.723 -1.068 c 0 0 -1.061 -0.012 -1.061 -0.012 c 0 0 -0.828 0.921 -0.828 0.921 c 0 0 -0.075 -0.786 -0.075 -0.786 c 0 0 -0.958 1.506 -0.958 1.506 c 0 0 -1.945 -1.698 -1.945 -1.698 c 0 0 0.822 4.4 0.822 4.4 c 0 0 -0.38 2.546 -0.38 2.546 c 0 0 -0.915 1.547 -0.915 1.547 c 0 0 -0.525 -0.186 -0.525 -0.186 c 0 0 -1.186 1.173 -1.186 1.173 c 0 0 0.194 0.605 0.194 0.605 c 0 0 2.929 0.061 2.929 0.061 c 0 0 2.126 1.396 2.126 1.396 c 0 0 0.583 -0.342 0.583 -0.342 c 0 0 2.02 0.968 2.02 0.968 c 0 0 0.73 1.103 0.73 1.103 c 0 0 1.017 -0.474 1.017 -0.474 c 0 0 1.503 0.709 1.503 0.709 c 0 0 0.559 -0.079 0.559 -0.079 c 0 0 0.341 -1.11 0.341 -1.11 c 0 0 3.911 -0.103 3.911 -0.103 c 0 0 1.787 -0.953 1.787 -0.953 c 0 0 0.162 -0.935 0.162 -0.935 c 0 0 -0.656 -0.975 -0.656 -0.975 c 0 0 -1.454 -0.28 -1.454 -0.28 c 0 0 -0.321 -0.952 -0.321 -0.952 c 0 0 2.216 0.152 2.216 0.152 c 0 0 3.561 -2.397 3.561 -2.397 c 0 0 2.817 1.882 2.817 1.882 c 0 0 1.857 -0.219 1.857 -0.219 c 0 0 -2.247 2.121 -2.247 2.121 c 0 0 0.993 1.373 0.993 1.373 c 0 0 -0.826 1.425 -0.826 1.425 c 0 0 0.764 -0.211 0.764 -0.211 c 0 0 0.976 1.769 0.976 1.769 c 0 0 2.263 -2.836 2.263 -2.836 c 0 0 1.025 0.388 1.025 0.388 c 0 0 -0.085 1.186 -0.085 1.186 c 0 0 2.13 0.699 2.13 0.699 c 0 0 0.685 -1.448 0.685 -1.448 c 0 0 2.061 -0.262 2.061 -0.262 c 0 0 1.65 -1.111 1.65 -1.111 c 0 0 1.29 1.626 1.29 1.626 c 0 0 -0.779 1.125 -0.779 1.125 c 0 0 0.506 0.944 0.506 0.944 c 0 0 -0.438 2.539 -0.438 2.539 c 0 0 2.456 1.971 2.456 1.971 c 0 0 1.033 -0.363 1.033 -0.363 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Batna"},"6":{"path":"M 314.203 38.1218 c 0 0 -0.336 1.124 -0.336 1.124 c 0 0 -2.016 0.919 -2.016 0.919 c 0 0 -0.034 2.49 -0.034 2.49 c 0 0 -4.18 1.099 -4.18 1.099 c 0 0 -0.776 -1.701 -0.776 -1.701 c 0 0 0.222 -0.601 0.222 -0.601 c 0 0 -0.75 -0.99 -0.75 -0.99 c 0 0 0.743 -0.487 0.743 -0.487 c 0 0 0.148 -1.306 0.148 -1.306 c 0 0 -0.678 -1.324 -0.678 -1.324 c 0 0 1.795 -0.83 1.795 -0.83 c 0 0 2.18 -2.443 2.18 -2.443 c 0 0 -0.406 -0.66 -0.406 -0.66 c 0 0 1.259 -1.582 1.259 -1.582 c 0 0 -1.778 -0.942 -1.778 -0.942 c 0 0 0.148 -0.646 0.148 -0.646 c 0 0 1.229 -0.36 1.229 -0.36 c 0 0 0.704 0.539 0.704 0.539 c 0 0 0.672 -0.653 0.672 -0.653 c 0 0 -0.069 -1.338 -0.069 -1.338 c 0 0 -1.397 -1.952 -1.397 -1.952 c 0 0 3.611 -0.405 3.611 -0.405 c 0 0 3.398 1.061 3.398 1.061 c 0 0 2.038 1.439 2.038 1.439 c 0 0 1.871 0.364 1.871 0.364 c 0 0 -0.442 1.715 -0.442 1.715 c 0 0 2.887 1.563 2.887 1.563 c 0 0 4.324 -0.311 4.324 -0.311 c 0 0 0.029 1.315 0.029 1.315 c 0 0 0.916 0.194 0.916 0.194 c 0 0 -0.184 1.479 -0.184 1.479 c 0 0 -2.389 1.071 -2.389 1.071 c 0 0 0.252 0.685 0.252 0.685 c 0 0 -1.314 1.474 -1.314 1.474 c 0 0 0.471 0.919 0.471 0.919 c 0 0 -0.748 0.375 -0.748 0.375 c 0 0 -1.656 0.241 -1.656 0.241 c 0 0 0.025 -0.935 0.025 -0.935 c 0 0 -0.569 0.197 -0.569 0.197 c 0 0 0.023 -2.689 0.023 -2.689 c 0 0 0.535 -0.694 0.535 -0.694 c 0 0 -2.159 -1.465 -2.159 -1.465 c 0 0 -0.039 0.448 -0.039 0.448 c 0 0 -0.928 -0.088 -0.928 -0.088 c 0 0 -0.447 1.378 -0.447 1.378 c 0 0 -3.62 -0.479 -3.62 -0.479 c 0 0 -0.048 1.35 -0.048 1.35 c 0 0 -2.517 1.442 -2.517 1.442 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Béjaïa"},"7":{"path":"M 354.598 79.5648 c 0 0 -1.037 0.363 -1.037 0.363 c 0 0 -2.456 -1.971 -2.456 -1.971 c 0 0 0.438 -2.539 0.438 -2.539 c 0 0 -0.506 -0.943 -0.506 -0.943 c 0 0 0.779 -1.125 0.779 -1.125 c 0 0 -1.289 -1.626 -1.289 -1.626 c 0 0 -1.651 1.111 -1.651 1.111 c 0 0 -2.061 0.261 -2.061 0.261 c 0 0 -0.685 1.448 -0.685 1.448 c 0 0 -2.13 -0.699 -2.13 -0.699 c 0 0 0.085 -1.186 0.085 -1.186 c 0 0 -1.025 -0.387 -1.025 -0.387 c 0 0 -2.263 2.835 -2.263 2.835 c 0 0 -0.975 -1.768 -0.975 -1.768 c 0 0 -0.765 0.21 -0.765 0.21 c 0 0 0.826 -1.425 0.826 -1.425 c 0 0 -0.993 -1.373 -0.993 -1.373 c 0 0 2.247 -2.121 2.247 -2.121 c 0 0 -1.857 0.22 -1.857 0.22 c 0 0 -2.817 -1.883 -2.817 -1.883 c 0 0 -3.56 2.397 -3.56 2.397 c 0 0 -2.217 -0.152 -2.217 -0.152 c 0 0 0.321 0.952 0.321 0.952 c 0 0 1.454 0.28 1.454 0.28 c 0 0 0.656 0.975 0.656 0.975 c 0 0 -0.162 0.935 -0.162 0.935 c 0 0 -1.787 0.954 -1.787 0.954 c 0 0 -3.911 0.102 -3.911 0.102 c 0 0 -0.341 1.11 -0.341 1.11 c 0 0 -0.558 0.08 -0.558 0.08 c 0 0 -1.503 -0.709 -1.503 -0.709 c 0 0 -1.018 0.473 -1.018 0.473 c 0 0 -0.729 -1.102 -0.729 -1.102 c 0 0 -2.02 -0.969 -2.02 -0.969 c 0 0 -0.584 0.343 -0.584 0.343 c 0 0 0.446 3.492 0.446 3.492 c 0 0 0.547 0.305 0.547 0.305 c 0 0 -0.537 0.065 -0.537 0.065 c 0 0 -0.684 1.586 -0.684 1.586 c 0 0 -5.437 1.63 -5.437 1.63 c 0 0 -0.941 1.502 -0.941 1.502 c 0 0 -1.002 0.173 -1.002 0.173 c 0 0 1.299 1.086 1.299 1.086 c 0 0 -1.021 0.547 -1.021 0.547 c 0 0 -0.658 -0.445 -0.658 -0.445 c 0 0 -1.831 1.14 -1.831 1.14 c 0 0 -4.807 0.046 -4.807 0.046 c 0 0 -0.876 1.823 -0.876 1.823 c 0 0 -2.192 1.835 -2.192 1.835 c 0 0 0.522 0.302 0.522 0.302 c 0 0 0.418 3.083 0.418 3.083 c 0 0 1.216 1.271 1.216 1.271 c 0 0 -0.307 0.725 -0.307 0.725 c 0 0 1.814 0.933 1.814 0.933 c 0 0 -0.773 1.006 -0.773 1.006 c 0 0 -1.99 0.525 -1.99 0.525 c 0 0 -0.442 0.687 -0.442 0.687 c 0 0 0.935 1.143 0.935 1.143 c 0 0 1.888 0.264 1.888 0.264 c 0 0 0.385 1.491 0.385 1.491 c 0 0 2.354 0.396 2.354 0.396 c 0 0 0.57 0.73 0.57 0.73 c 0 0 -1.197 -0.003 -1.197 -0.003 c 0 0 -1.375 1.475 -1.375 1.475 c 0 0 -1.342 0.124 -1.342 0.124 c 0 0 -0.397 0.525 -0.397 0.525 c 0 0 0.45 0.688 0.45 0.688 c 0 0 6.57 2.831 6.57 2.831 c 0 0 1.081 1.471 1.081 1.471 c 0 0 3.26 0.627 3.26 0.627 c 0 0 0.39 0.95 0.39 0.95 c 0 0 1.965 -0.327 1.965 -0.327 c 0 0 0.724 1.225 0.724 1.225 c 0 0 4.001 0.998 4.001 0.998 c 0 0 -0.522 0.879 -0.522 0.879 c 0 0 0.117 1.904 0.117 1.904 c 0 0 3.919 3.499 3.919 3.499 c 0 0 0.91 -1.858 0.91 -1.858 c 0 0 0.663 -1.724 0.663 -1.724 c 0 0 -0.688 -1.585 -0.688 -1.585 c 0 0 -0.35 -4.63 -0.35 -4.63 c 0 0 -1.083 -2.091 -1.083 -2.091 c 0 0 0.858 -4.001 0.858 -4.001 c 0 0 1.969 -4.693 1.969 -4.693 c 0 0 -3.667 -3.257 -3.667 -3.257 c 0 0 0.702 -1.852 0.702 -1.852 c 0 0 -1.199 -1.354 -1.199 -1.354 c 0 0 1.889 -1.327 1.889 -1.327 c 0 0 -0.72 -0.627 -0.72 -0.627 c 0 0 1.104 -0.631 1.104 -0.631 c 0 0 2.287 1.521 2.287 1.521 c 0 0 11.929 1.271 11.929 1.271 c 0 0 5.31 -1.304 5.31 -1.304 c 0 0 5.733 2.047 5.733 2.047 c 0 0 1.45 1.393 1.45 1.393 c 0 0 1.654 -0.581 1.654 -0.581 c 0 0 1.726 -2.196 1.726 -2.196 c 0 0 -0.517 -1.926 -0.517 -1.926 c 0 0 1.047 -2.039 1.047 -2.039 c 0 0 -0.163 -3.493 -0.163 -3.493 c 0 0 0.727 -2.389 0.727 -2.389 c 0 0 -0.822 0.197 -0.822 0.197 c 0 0 0.415 -0.997 0.415 -0.997 c 0 0 -1.047 -1.056 -1.047 -1.056 c 0 0 0.4 -0.473 0.4 -0.473 c 0 0 -1.139 0.062 -1.139 0.062 c 0 0 -0.737 1.719 -0.737 1.719 c 0 0 -1.087 0.596 -1.087 0.596 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Biskra"},"8":{"path":"M 189.561 141.431 c 0 0 0.163 2.393 0.163 2.393 c 0 0 1.428 0.123 1.428 0.123 c 0 0 -0.542 2.863 -0.542 2.863 c 0 0 1.384 0.042 1.384 0.042 c 0 0 0.298 1.563 0.298 1.563 c 0 0 5.834 -3.103 5.834 -3.103 c 0 0 6.79 1.902 6.79 1.902 c 0 0 1.803 -1.33 1.803 -1.33 c 0 0 2.417 0.518 2.417 0.518 c 0 0 1.629 -2.4 1.629 -2.4 c 0 0 -0.953 4.385 -0.953 4.385 c 0 0 -2.081 -0.471 -2.081 -0.471 c 0 0 -1.103 0.817 -1.103 0.817 c 0 0 -1.05 2.219 -1.05 2.219 c 0 0 -0.139 4.177 -0.139 4.177 c 0 0 0.68 2.281 0.68 2.281 c 0 0 -0.686 0.065 -0.686 0.065 c 0 0 0.179 0.967 0.179 0.967 c 0 0 -0.602 0.846 -0.602 0.846 c 0 0 0.955 1.182 0.955 1.182 c 0 0 -1.242 1.209 -1.242 1.209 c 0 0 1.247 2.015 1.247 2.015 c 0 0 -1.014 1.204 -1.014 1.204 c 0 0 0.036 1.863 0.036 1.863 c 0 0 0.853 1.823 0.853 1.823 c 0 0 2.917 2.352 2.917 2.352 c 0 0 -0.818 2.98 -0.818 2.98 c 0 0 14.029 11.903 14.029 11.903 c 0 0 -8.624 9.693 -8.624 9.693 c 0 0 -3.966 6.909 -3.966 6.909 c 0 0 -10.189 7.171 -10.189 7.171 c 0 0 -1.53 5.245 -1.53 5.245 c 0 0 1.021 6.804 1.021 6.804 c 0 0 -0.608 2.722 -0.608 2.722 c 0 0 -5.818 4.933 -5.818 4.933 c 0 0 -11.195 0.456 -11.195 0.456 c 0 0 -13.243 3.621 -13.243 3.621 c 0 0 -6.827 9.299 -6.827 9.299 c 0 0 -6.535 4.925 -6.535 4.925 c 0 0 -1.732 3.771 -1.732 3.771 c 0 0 -6.146 7.526 -6.146 7.526 c 0 0 -3.367 10.625 -3.367 10.625 c 0 0 1.165 1.256 1.165 1.256 c 0 0 -13.244 -1.684 -13.244 -1.684 c 0 0 -3.001 -2.418 -3.001 -2.418 c 0 0 -5.835 -7.1 -5.835 -7.1 c 0 0 -0.084 -7.644 -0.084 -7.644 c 0 0 -6.775 -12.676 -6.775 -12.676 c 0 0 -5.777 -21.184 -5.777 -21.184 c 0 0 -5.817 -3.173 -5.817 -3.173 c 0 0 -8.409 -0.352 -8.409 -0.352 c 0 0 -4.977 -4.181 -4.977 -4.181 c 0 0 4.214 -5.384 4.214 -5.384 c 0 0 0.024 -1.372 0.024 -1.372 c 0 0 1.014 -1.498 1.014 -1.498 c 0 0 8.097 -5.763 8.097 -5.763 c 0 0 7.482 -3.241 7.482 -3.241 c 0 0 6.645 -5.965 6.645 -5.965 c 0 0 3.927 -1.254 3.927 -1.254 c 0 0 6.729 -0.776 6.729 -0.776 c 0 0 4.574 -1.715 4.574 -1.715 c 0 0 0.583 -0.765 0.583 -0.765 c 0 0 -1.006 -1.718 -1.006 -1.718 c 0 0 0.712 -1.927 0.712 -1.927 c 0 0 0.439 0.271 0.439 0.271 c 0 0 1.753 -2.209 1.753 -2.209 c 0 0 0.06 -2.135 0.06 -2.135 c 0 0 -0.201 -0.656 -0.201 -0.656 c 0 0 -0.495 0.514 -0.495 0.514 c 0 0 -0.386 -0.407 -0.386 -0.407 c 0 0 -0.456 -1.584 -0.456 -1.584 c 0 0 -0.47 0.188 -0.47 0.188 c 0 0 0.021 -1.495 0.021 -1.495 c 0 0 -0.024 1.793 -0.024 1.793 c 0 0 -0.667 0.211 -0.667 0.211 c 0 0 0.487 0.234 0.487 0.234 c 0 0 -0.779 -0.15 -0.779 -0.15 c 0 0 0.248 -1.646 0.248 -1.646 c 0 0 -0.643 -0.663 -0.643 -0.663 c 0 0 -0.118 0.998 -0.118 0.998 c 0 0 -0.614 -0.265 -0.614 -0.265 c 0 0 0.041 0.743 0.041 0.743 c 0 0 -0.644 -0.249 -0.644 -0.249 c 0 0 -0.354 0.62 -0.354 0.62 c 0 0 0.437 -2.005 0.437 -2.005 c 0 0 -0.625 -1.467 -0.625 -1.467 c 0 0 0.73 -0.664 0.73 -0.664 c 0 0 -0.554 -0.775 -0.554 -0.775 c 0 0 0.872 -1.707 0.872 -1.707 c 0 0 0.565 0.509 0.565 0.509 c 0 0 1.714 -1.251 1.714 -1.251 c 0 0 -0.12 -6.14 -0.12 -6.14 c 0 0 18.347 -3.483 18.347 -3.483 c 0 0 -2.126 -6.029 -2.126 -6.029 c 0 0 0.609 -2.241 0.609 -2.241 c 0 0 6.877 0.41 6.877 0.41 c 0 0 3.008 -1.097 3.008 -1.097 c 0 0 4.058 -0.094 4.058 -0.094 c 0 0 2.286 0.737 2.286 0.737 c 0 0 3.44 -0.906 3.44 -0.906 c 0 0 9.396 2.568 9.396 2.568 c 0 0 7.359 0.568 7.359 0.568 c 0 0 1.897 -1.269 1.897 -1.269 c 0 0 -1.222 -1.218 -1.222 -1.218 c 0 0 -1.895 0.225 -1.895 0.225 c 0 0 1.267 -1.027 1.267 -1.027 c 0 0 -0.083 -3.115 -0.083 -3.115 c 0 0 1.147 -1.937 1.147 -1.937 c 0 0 1.524 -0.259 1.524 -0.259 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Béchar"},"9":{"path":"M 284.26 36.7689 c 0 0 0.247 -1.279 0.247 -1.279 c 0 0 -0.585 -0.271 -0.585 -0.271 c 0 0 0.385 -0.414 0.385 -0.414 c 0 0 -0.471 -0.855 -0.471 -0.855 c 0 0 0.536 -0.479 0.536 -0.479 c 0 0 -0.888 0.351 -0.888 0.351 c 0 0 -0.756 -1.312 -0.756 -1.312 c 0 0 -1.009 0.771 -1.009 0.771 c 0 0 -0.61 -0.303 -0.61 -0.303 c 0 0 -0.7 1.808 -0.7 1.808 c 0 0 -1.118 0.075 -1.118 0.075 c 0 0 0.107 -1.082 0.107 -1.082 c 0 0 -1.49 1.068 -1.49 1.068 c 0 0 -3.771 -1.583 -3.771 -1.583 c 0 0 0.339 1.023 0.339 1.023 c 0 0 -2.109 0.599 -2.109 0.599 c 0 0 -1.479 1.646 -1.479 1.646 c 0 0 -1.06 0.141 -1.06 0.141 c 0 0 0.442 0.803 0.442 0.803 c 0 0 -0.447 0.64 -0.447 0.64 c 0 0 -1.568 -0.302 -1.568 -0.302 c 0 0 -1.037 1.464 -1.037 1.464 c 0 0 2.993 2.104 2.993 2.104 c 0 0 1.509 -1.087 1.509 -1.087 c 0 0 2.894 0.205 2.894 0.205 c 0 0 1.567 -1.178 1.567 -1.178 c 0 0 0.671 1.507 0.671 1.507 c 0 0 1.48 0.008 1.48 0.008 c 0 0 0.866 -0.967 0.866 -0.967 c 0 0 -0.188 -1.356 -0.188 -1.356 c 0 0 0.474 0.955 0.474 0.955 c 0 0 0.732 -0.597 0.732 -0.597 c 0 0 0.693 0.698 0.693 0.698 c 0 0 1.156 -1.154 1.156 -1.154 c 0 0 0.085 -1.381 0.085 -1.381 c 0 0 1.631 0.27 1.631 0.27 c 0 0 0.479 -0.536 0.479 -0.536 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Blida"},"10":{"path":"M 300.562 48.4998 c 0 0 1.468 -1.134 1.468 -1.134 c 0 0 0.186 -2.385 0.186 -2.385 c 0 0 1.708 -0.861 1.708 -0.861 c 0 0 0.796 -1.241 0.796 -1.241 c 0 0 1.361 0.091 1.361 0.091 c 0 0 0.781 -0.917 0.781 -0.917 c 0 0 0.224 -0.601 0.224 -0.601 c 0 0 -0.75 -0.99 -0.75 -0.99 c 0 0 0.742 -0.488 0.742 -0.488 c 0 0 0.148 -1.305 0.148 -1.305 c 0 0 -0.679 -1.324 -0.679 -1.324 c 0 0 -2.513 0.268 -2.513 0.268 c 0 0 -0.274 -0.535 -0.274 -0.535 c 0 0 -1.008 0.543 -1.008 0.543 c 0 0 -5.654 0.163 -5.654 0.163 c 0 0 -1.333 -0.33 -1.333 -0.33 c 0 0 -0.937 -1.637 -0.937 -1.637 c 0 0 -0.781 0.04 -0.781 0.04 c 0 0 -0.892 -1.236 -0.892 -1.236 c 0 0 -4.715 -0.709 -4.715 -0.709 c 0 0 -0.479 0.983 -0.479 0.983 c 0 0 -1.366 0.715 -1.366 0.715 c 0 0 -2.088 -0.118 -2.088 -0.118 c 0 0 -0.247 1.278 -0.247 1.278 c 0 0 2.723 2.63 2.723 2.63 c 0 0 1.561 -1.479 1.561 -1.479 c 0 0 1.357 0.704 1.357 0.704 c 0 0 -0.438 0.687 -0.438 0.687 c 0 0 0.997 1.391 0.997 1.391 c 0 0 -1.07 0.599 -1.07 0.599 c 0 0 -0.442 1.267 -0.442 1.267 c 0 0 1.07 0.978 1.07 0.978 c 0 0 -0.182 0.811 -0.182 0.811 c 0 0 -1.427 0.413 -1.427 0.413 c 0 0 -0.228 0.854 -0.228 0.854 c 0 0 0.655 1.041 0.655 1.041 c 0 0 -0.407 0.485 -0.407 0.485 c 0 0 -0.899 0.935 -0.899 0.935 c 0 0 -1.014 -0.015 -1.014 -0.015 c 0 0 0.479 0.781 0.479 0.781 c 0 0 2.788 0.435 2.788 0.435 c 0 0 1.405 2.648 1.405 2.648 c 0 0 0.532 -0.81 0.532 -0.81 c 0 0 1.537 0.153 1.537 0.153 c 0 0 0.654 0.925 0.654 0.925 c 0 0 1.071 0.222 1.071 0.222 c 0 0 0.351 1.005 0.351 1.005 c 0 0 0.802 0.049 0.802 0.049 c 0 0 1.27 -1.216 1.27 -1.216 c 0 0 2.542 0.892 2.542 0.892 c 0 0 -0.443 -1.387 -0.443 -1.387 c 0 0 1.058 -3.268 1.058 -3.268 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Bouira"},"11":{"path":"M 340.615 208.544 c 0 0 -43.124 33.261 -43.124 33.261 c 0 0 0.146 -0.413 0.146 -0.413 c 0 0 -17.526 -14.179 -17.526 -14.179 c 0 0 -11.145 0.971 -11.145 0.971 c 0 0 -10.264 3.806 -10.264 3.806 c 0 0 -0.784 10.595 -0.784 10.595 c 0 0 -1.104 3.51 -1.104 3.51 c 0 0 -3.164 5.032 -3.164 5.032 c 0 0 -0.81 10.075 -0.81 10.075 c 0 0 -1.856 3.177 -1.856 3.177 c 0 0 0.051 6.213 0.051 6.213 c 0 0 1.848 2.781 1.848 2.781 c 0 0 -2.565 6.435 -2.565 6.435 c 0 0 -0.465 8.885 -0.465 8.885 c 0 0 -2.35 1.68 -2.35 1.68 c 0 0 -0.139 -0.823 -0.139 -0.823 c 0 0 -1.748 0.209 -1.748 0.209 c 0 0 -0.883 -0.813 -0.883 -0.813 c 0 0 -2.635 0.807 -2.635 0.807 c 0 0 -1.19 2.448 -1.19 2.448 c 0 0 -7.482 7.684 -7.482 7.684 c 0 0 2.714 6.037 2.714 6.037 c 0 0 8.571 12.137 8.571 12.137 c 0 0 0.259 38.387 0.259 38.387 c 0 0 -0.63 56.825 -0.63 56.825 c 0 0 4.163 -0.675 4.163 -0.675 c 0 0 4.417 0.47 4.417 0.47 c 0 0 1.521 7.254 1.521 7.254 c 0 0 6.095 6.187 6.095 6.187 c 0 0 2.49 5.061 2.49 5.061 c 0 0 1.682 5.848 1.682 5.848 c 0 0 -0.031 6.131 -0.031 6.131 c 0 0 2.249 3.263 2.249 3.263 c 0 0 3.133 7.454 3.133 7.454 c 0 0 0.496 2.892 0.496 2.892 c 0 0 -2.249 0.725 -2.249 0.725 c 0 0 1.485 0.058 1.485 0.058 c 0 0 2.693 1.431 2.693 1.431 c 0 0 3.086 -0.021 3.086 -0.021 c 0 0 6.312 1.33 6.312 1.33 c 0 0 6.54 3.166 6.54 3.166 c 0 0 -0.412 3.706 -0.412 3.706 c 0 0 0.537 0.907 0.537 0.907 c 0 0 -0.542 1.742 -0.542 1.742 c 0 0 0.979 1.557 0.979 1.557 c 0 0 -0.357 0.987 -0.357 0.987 c 0 0 0.917 2.147 0.917 2.147 c 0 0 -1.474 1.56 -1.474 1.56 c 0 0 -0.373 1.711 -0.373 1.711 c 0 0 -2.086 2.864 -2.086 2.864 c 0 0 0.506 1.159 0.506 1.159 c 0 0 5.114 3.9 5.114 3.9 c 0 0 60.512 -13.771 60.512 -13.771 c 0 0 38.057 -37.723 38.057 -37.723 c 0 0 64.331 -46.843 64.331 -46.843 c 0 0 -0.719 -20.563 -0.719 -20.563 c 0 0 -7.48 -4.23 -7.48 -4.23 c 0 0 -2.209 0.049 -2.209 0.049 c 0 0 -1.657 -1.011 -1.657 -1.011 c 0 0 -13.903 0.818 -13.903 0.818 c 0 0 -12.891 9.613 -12.891 9.613 c 0 0 -17.177 4.161 -17.177 4.161 c 0 0 -6.243 -4.392 -6.243 -4.392 c 0 0 1.974 -2.233 1.974 -2.233 c 0 0 -5.578 -12.361 -5.578 -12.361 c 0 0 -1.04 -10.938 -1.04 -10.938 c 0 0 0.237 -3.784 0.237 -3.784 c 0 0 -5.594 -8.032 -5.594 -8.032 c 0 0 -4.477 -0.141 -4.477 -0.141 c 0 0 -2.836 -2.179 -2.836 -2.179 c 0 0 -3.687 -6.237 -3.687 -6.237 c 0 0 -1.628 -4.169 -1.628 -4.169 c 0 0 -5.061 -6.142 -5.061 -6.142 c 0 0 -5.932 -16.141 -5.932 -16.141 c 0 0 -1.532 -1.132 -1.532 -1.132 c 0 0 -0.138 -1.005 -0.138 -1.005 c 0 0 -2.248 -0.6 -2.248 -0.6 c 0 0 -1.181 -1.556 -1.181 -1.556 c 0 0 1.06 -3.062 1.06 -3.062 c 0 0 2.819 -2.351 2.819 -2.351 c 0 0 -0.418 -1.914 -0.418 -1.914 c 0 0 -12.688 -11.21 -12.688 -11.21 c 0 0 -0.039 -8.717 -0.039 -8.717 c 0 0 -3.73 -17.581 -3.73 -17.581 c 0 0 1.772 -8.354 1.772 -8.354 c 0 0 -1.292 -33.81 -1.292 -33.81 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Tamanrasset"},"12":{"path":"M 377.235 49.5529 c 0 0 0.397 -1.363 0.397 -1.363 c 0 0 1.877 1.4 1.877 1.4 c 0 0 1.622 -0.03 1.622 -0.03 c 0 0 2.103 -2.353 2.103 -2.353 c 0 0 1.256 0.156 1.256 0.156 c 0 0 2.499 -1.112 2.499 -1.112 c 0 0 2.176 1.081 2.176 1.081 c 0 0 -0.663 1.284 -0.663 1.284 c 0 0 0.469 0.414 0.469 0.414 c 0 0 -0.029 4.161 -0.029 4.161 c 0 0 1.961 1.389 1.961 1.389 c 0 0 0.321 3.785 0.321 3.785 c 0 0 0.61 0.972 0.61 0.972 c 0 0 -1.389 1.917 -1.389 1.917 c 0 0 0.063 2.599 0.063 2.599 c 0 0 2.079 1.616 2.079 1.616 c 0 0 1.524 0.072 1.524 0.072 c 0 0 -2.348 3.782 -2.348 3.782 c 0 0 -0.661 3.932 -0.661 3.932 c 0 0 -1.401 0.803 -1.401 0.803 c 0 0 0.931 3.721 0.931 3.721 c 0 0 0.876 0.981 0.876 0.981 c 0 0 -1.63 1.313 -1.63 1.313 c 0 0 0.909 0.787 0.909 0.787 c 0 0 -1.388 1.372 -1.388 1.372 c 0 0 0.229 0.686 0.229 0.686 c 0 0 -1.096 0.116 -1.096 0.116 c 0 0 -1.104 1.673 -1.104 1.673 c 0 0 -5.352 2.981 -5.352 2.981 c 0 0 -0.735 4.246 -0.735 4.246 c 0 0 -8.26 -0.416 -8.26 -0.416 c 0 0 -4.263 -1.484 -4.263 -1.484 c 0 0 0.773 -5.083 0.773 -5.083 c 0 0 2.108 -3.938 2.108 -3.938 c 0 0 0.024 -1.697 0.024 -1.697 c 0 0 -0.637 -0.956 -0.637 -0.956 c 0 0 0.749 -2.004 0.749 -2.004 c 0 0 -0.869 -2.387 -0.869 -2.387 c 0 0 -1.271 -0.098 -1.271 -0.098 c 0 0 -0.661 0.97 -0.661 0.97 c 0 0 -0.441 1.352 -0.441 1.352 c 0 0 0.5 -0.146 0.5 -0.146 c 0 0 -0.088 1.582 -0.088 1.582 c 0 0 -0.908 -2.111 -0.908 -2.111 c 0 0 1.39 -3.602 1.39 -3.602 c 0 0 1.306 -0.817 1.306 -0.817 c 0 0 1.429 -2.436 1.429 -2.436 c 0 0 -1.051 -1.558 -1.051 -1.558 c 0 0 0.787 -1.188 0.787 -1.188 c 0 0 -0.763 -0.573 -0.763 -0.573 c 0 0 -0.117 -2.443 -0.117 -2.443 c 0 0 3.133 -1.132 3.133 -1.132 c 0 0 0.624 -0.112 0.624 -0.112 c 0 0 1.879 -2.798 1.879 -2.798 c 0 0 4.046 -1.621 4.046 -1.621 c 0 0 -1.311 -2.658 -1.311 -2.658 c 0 0 -0.142 -1.094 -0.142 -1.094 c 0 0 0.772 -0.688 0.772 -0.688 c 0 0 -1.615 -0.739 -1.615 -0.739 c 0 0 -0.531 -2.116 -0.531 -2.116 c 0 0 -0.698 -0.39 -0.698 -0.39 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Tébessa"},"13":{"path":"M 193.764 72.7758 c 0 0 -0.686 0.069 -0.686 0.069 c 0 0 -0.264 -0.909 -0.264 -0.909 c 0 0 -3.488 -1.748 -3.488 -1.748 c 0 0 -0.331 0.33 -0.331 0.33 c 0 0 -0.372 -0.771 -0.372 -0.771 c 0 0 -1.081 0.455 -1.081 0.455 c 0 0 -2.338 -0.793 -2.338 -0.793 c 0 0 -0.918 1.336 -0.918 1.336 c 0 0 -1.082 0.265 -1.082 0.265 c 0 0 -1.053 -0.668 -1.053 -0.668 c 0 0 0.202 -0.954 0.202 -0.954 c 0 0 -0.848 -0.622 -0.848 -0.622 c 0 0 -3.998 2.927 -3.998 2.927 c 0 0 -0.671 -0.354 -0.671 -0.354 c 0 0 -2.174 1.167 -2.174 1.167 c 0 0 -3.447 0.248 -3.447 0.248 c 0 0 -1.838 -0.844 -1.838 -0.844 c 0 0 -1.167 0.414 -1.167 0.414 c 0 0 -0.104 0.95 -0.104 0.95 c 0 0 2.603 2.448 2.603 2.448 c 0 0 1.057 0.802 1.057 0.802 c 0 0 1.388 -0.219 1.388 -0.219 c 0 0 0.027 1.49 0.027 1.49 c 0 0 1.617 0.96 1.617 0.96 c 0 0 0.088 0.883 0.088 0.883 c 0 0 3.129 1.718 3.129 1.718 c 0 0 -2.502 3.209 -2.502 3.209 c 0 0 0.771 0.313 0.771 0.313 c 0 0 1.368 2.382 1.368 2.382 c 0 0 1.285 0.582 1.285 0.582 c 0 0 -2.119 2.566 -2.119 2.566 c 0 0 1.582 2.156 1.582 2.156 c 0 0 -0.213 1.807 -0.213 1.807 c 0 0 1.198 3.756 1.198 3.756 c 0 0 3.61 -2.621 3.61 -2.621 c 0 0 4.992 0.022 4.992 0.022 c 0 0 1.227 -1.408 1.227 -1.408 c 0 0 1.529 -0.482 1.529 -0.482 c 0 0 6.093 -5.633 6.093 -5.633 c 0 0 -0.362 -0.793 -0.362 -0.793 c 0 0 -0.956 -0.198 -0.956 -0.198 c 0 0 1.609 -0.95 1.609 -0.95 c 0 0 1.285 -2.754 1.285 -2.754 c 0 0 -0.23 -0.686 -0.23 -0.686 c 0 0 0.496 0.037 0.496 0.037 c 0 0 -0.273 -1.005 -0.273 -1.005 c 0 0 -2.376 0.271 -2.376 0.271 c 0 0 0.434 -3.193 0.434 -3.193 c 0 0 -1.177 0.239 -1.177 0.239 c 0 0 0.804 -1.134 0.804 -1.134 c 0 0 -1.191 -0.046 -1.191 -0.046 c 0 0 -0.506 -1.828 -0.506 -1.828 c 0 0 1.313 -2.126 1.313 -2.126 c 0 0 -1.942 -1.063 -1.942 -1.063 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Tlemcen"},"14":{"path":"M 258.955 61.8178 c 0 0 -1.327 0.262 -1.327 0.262 c 0 0 0.221 1.396 0.221 1.396 c 0 0 6.776 4.105 6.776 4.105 c 0 0 1.052 1.839 1.052 1.839 c 0 0 2.688 -2.3 2.688 -2.3 c 0 0 1.052 0.797 1.052 0.797 c 0 0 0.327 1.125 0.327 1.125 c 0 0 1.748 0.418 1.748 0.418 c 0 0 -0.01 1.521 -0.01 1.521 c 0 0 -0.677 0.26 -0.677 0.26 c 0 0 -1.121 2.251 -1.121 2.251 c 0 0 1.432 1.277 1.432 1.277 c 0 0 -3.229 1.273 -3.229 1.273 c 0 0 -1.447 4.661 -1.447 4.661 c 0 0 -1.47 0.458 -1.47 0.458 c 0 0 0.167 2.428 0.167 2.428 c 0 0 -3.015 0.372 -3.015 0.372 c 0 0 -0.437 1.044 -0.437 1.044 c 0 0 -1.978 0.888 -1.978 0.888 c 0 0 -2.348 2.563 -2.348 2.563 c 0 0 -4.877 1.753 -4.877 1.753 c 0 0 -1.839 2.088 -1.839 2.088 c 0 0 -0.365 2.438 -0.365 2.438 c 0 0 -1.645 0.978 -1.645 0.978 c 0 0 -0.272 -1.14 -0.272 -1.14 c 0 0 -3.774 2.229 -3.774 2.229 c 0 0 0.808 1.346 0.808 1.346 c 0 0 -2.194 1.46 -2.194 1.46 c 0 0 -1.118 -1.577 -1.118 -1.577 c 0 0 -0.216 -1.843 -0.216 -1.843 c 0 0 -5.541 0.295 -5.541 0.295 c 0 0 0.672 -4.883 0.672 -4.883 c 0 0 -3.973 -0.827 -3.973 -0.827 c 0 0 1.657 -2.906 1.657 -2.906 c 0 0 -2.975 -1.225 -2.975 -1.225 c 0 0 -0.316 -0.531 -0.316 -0.531 c 0 0 0.755 -0.53 0.755 -0.53 c 0 0 -0.449 -1.181 -0.449 -1.181 c 0 0 -1.062 0.458 -1.062 0.458 c 0 0 -1.729 -3.065 -1.729 -3.065 c 0 0 0.385 -1.708 0.385 -1.708 c 0 0 -0.557 -0.922 -0.557 -0.922 c 0 0 3.161 -2.329 3.161 -2.329 c 0 0 -1.595 -2.433 -1.595 -2.433 c 0 0 -1.402 -0.632 -1.402 -0.632 c 0 0 -0.281 -0.991 -0.281 -0.991 c 0 0 -3.297 0.388 -3.297 0.388 c 0 0 1.071 -1.77 1.071 -1.77 c 0 0 1.552 -1.101 1.552 -1.101 c 0 0 -0.245 -0.949 -0.245 -0.949 c 0 0 1.176 -1.409 1.176 -1.409 c 0 0 1.083 -0.161 1.083 -0.161 c 0 0 1.521 0.789 1.521 0.789 c 0 0 1.112 -0.354 1.112 -0.354 c 0 0 0.873 -2.104 0.873 -2.104 c 0 0 0.688 -0.28 0.688 -0.28 c 0 0 -1.49 -1.555 -1.49 -1.555 c 0 0 0.9 -0.182 0.9 -0.182 c 0 0 1.728 -2.878 1.728 -2.878 c 0 0 1.215 -0.098 1.215 -0.098 c 0 0 0.112 -0.867 0.112 -0.867 c 0 0 0.812 0.11 0.812 0.11 c 0 0 0.164 -0.913 0.164 -0.913 c 0 0 2.058 0.206 2.058 0.206 c 0 0 0.567 -0.985 0.567 -0.985 c 0 0 1.449 -0.572 1.449 -0.572 c 0 0 1.345 1.67 1.345 1.67 c 0 0 0.589 -2.298 0.589 -2.298 c 0 0 1.271 0.93 1.271 0.93 c 0 0 0.538 -0.303 0.538 -0.303 c 0 0 1.353 0.765 1.353 0.765 c 0 0 0.063 1.414 0.063 1.414 c 0 0 1.952 -0.174 1.952 -0.174 c 0 0 1.046 1.72 1.046 1.72 c 0 0 0.813 0.153 0.813 0.153 c 0 0 0.172 -1.047 0.172 -1.047 c 0 0 0.958 0.973 0.958 0.973 c 0 0 3.798 -0.432 3.798 -0.432 c 0 0 2.435 -1.337 2.435 -1.337 c 0 0 -0.56 0.67 -0.56 0.67 c 0 0 1.55 0.067 1.55 0.067 c 0 0 -0.034 0.954 -0.034 0.954 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Tiaret"},"15":{"path":"M 310.88 26.4728 c 0 0 1.398 1.952 1.398 1.952 c 0 0 0.068 1.338 0.068 1.338 c 0 0 -0.67 0.654 -0.67 0.654 c 0 0 -0.705 -0.539 -0.705 -0.539 c 0 0 -1.229 0.36 -1.229 0.36 c 0 0 -0.147 0.646 -0.147 0.646 c 0 0 1.777 0.943 1.777 0.943 c 0 0 -1.26 1.581 -1.26 1.581 c 0 0 0.406 0.661 0.406 0.661 c 0 0 -2.179 2.442 -2.179 2.442 c 0 0 -1.795 0.831 -1.795 0.831 c 0 0 -2.514 0.268 -2.514 0.268 c 0 0 -0.273 -0.535 -0.273 -0.535 c 0 0 -1.01 0.543 -1.01 0.543 c 0 0 -5.653 0.163 -5.653 0.163 c 0 0 -1.334 -0.33 -1.334 -0.33 c 0 0 -0.935 -1.637 -0.935 -1.637 c 0 0 -0.782 0.04 -0.782 0.04 c 0 0 -0.892 -1.236 -0.892 -1.236 c 0 0 -0.219 -1.694 -0.219 -1.694 c 0 0 1.417 -0.319 1.417 -0.319 c 0 0 0.845 0.592 0.845 0.592 c 0 0 -0.163 -1.288 -0.163 -1.288 c 0 0 1.354 0.313 1.354 0.313 c 0 0 -0.771 -0.862 -0.771 -0.862 c 0 0 0.386 -1.441 0.386 -1.441 c 0 0 1.042 0.231 1.042 0.231 c 0 0 0.179 -0.604 0.179 -0.604 c 0 0 0.945 -0.077 0.945 -0.077 c 0 0 0.045 -0.779 0.045 -0.779 c 0 0 1.354 -1.163 1.354 -1.163 c 0 0 -0.135 -1.239 -0.135 -1.239 c 0 0 5.439 -0.32 5.439 -0.32 c 0 0 1.851 0.426 1.851 0.426 c 0 0 0.986 -0.547 0.986 -0.547 c 0 0 3.174 0.626 3.174 0.626 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Tizi-Ouzou"},"16":{"path":"M 285.549 29.5858 c 0 0 -0.27 0.609 -0.27 0.609 c 0 0 0.656 -0.216 0.656 -0.216 c 0 0 0.031 1.021 0.031 1.021 c 0 0 -2.278 0.745 -2.278 0.745 c 0 0 -0.66 -0.482 -0.66 -0.482 c 0 0 0.391 0.701 0.391 0.701 c 0 0 -0.688 0.546 -0.688 0.546 c 0 0 -1.01 0.771 -1.01 0.771 c 0 0 -0.609 -0.302 -0.609 -0.302 c 0 0 -0.701 1.807 -0.701 1.807 c 0 0 -1.117 0.075 -1.117 0.075 c 0 0 0.107 -1.082 0.107 -1.082 c 0 0 -1.49 1.068 -1.49 1.068 c 0 0 -3.771 -1.583 -3.771 -1.583 c 0 0 -0.135 -1.446 -0.135 -1.446 c 0 0 0.607 -1.614 0.607 -1.614 c 0 0 0.9 -0.174 0.9 -0.174 c 0 0 0.272 -0.944 0.272 -0.944 c 0 0 1.205 -0.234 1.205 -0.234 c 0 0 1.831 0.088 1.831 0.088 c 0 0 0.494 1.2 0.494 1.2 c 0 0 1.162 0.524 1.162 0.524 c 0 0 2.119 -0.622 2.119 -0.622 c 0 0 0.155 -1.295 0.155 -1.295 c 0 0 2.799 0.839 2.799 0.839 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Alger"},"17":{"path":"M 303.711 95.2648 c 0 0 -4.303 -3.584 -4.303 -3.584 c 0 0 0.313 -2.084 0.313 -2.084 c 0 0 -1.836 -1.982 -1.836 -1.982 c 0 0 0.299 -2.041 0.299 -2.041 c 0 0 -0.719 -4.249 -0.719 -4.249 c 0 0 -3.906 -0.974 -3.906 -0.974 c 0 0 -1.411 0.479 -1.411 0.479 c 0 0 -0.14 -1.652 -0.14 -1.652 c 0 0 -1.402 -0.321 -1.402 -0.321 c 0 0 0.209 -2.972 0.209 -2.972 c 0 0 -0.698 -0.953 -0.698 -0.953 c 0 0 0.551 -0.067 0.551 -0.067 c 0 0 0.504 -1.54 0.504 -1.54 c 0 0 -1.839 0.736 -1.839 0.736 c 0 0 -1.138 -3.13 -1.138 -3.13 c 0 0 4.281 -3.605 4.281 -3.605 c 0 0 -0.424 -1.941 -0.424 -1.941 c 0 0 0.865 -0.632 0.865 -0.632 c 0 0 0.075 -1.772 0.075 -1.772 c 0 0 -4.719 -3.806 -4.719 -3.806 c 0 0 -1.903 -1.954 -1.903 -1.954 c 0 0 -0.313 -1.257 -0.313 -1.257 c 0 0 -1.091 0.049 -1.091 0.049 c 0 0 -0.854 -1.716 -0.854 -1.716 c 0 0 -1.031 1.021 -1.031 1.021 c 0 0 0.104 1.206 0.104 1.206 c 0 0 -0.753 1.37 -0.753 1.37 c 0 0 -2.786 0.7 -2.786 0.7 c 0 0 -0.185 -2.199 -0.185 -2.199 c 0 0 -0.699 0.144 -0.699 0.144 c 0 0 -0.693 -2.337 -0.693 -2.337 c 0 0 -2.585 0.707 -2.585 0.707 c 0 0 0.677 5.005 0.677 5.005 c 0 0 -0.578 -0.259 -0.578 -0.259 c 0 0 -1.83 1.359 -1.83 1.359 c 0 0 -1.605 2.564 -1.605 2.564 c 0 0 -1.292 0.661 -1.292 0.661 c 0 0 -2.698 -1.908 -2.698 -1.908 c 0 0 -0.229 0.56 -0.229 0.56 c 0 0 -2.476 0.813 -2.476 0.813 c 0 0 -2.139 0.167 -2.139 0.167 c 0 0 -0.658 -2.362 -0.658 -2.362 c 0 0 -3.699 0.315 -3.699 0.315 c 0 0 -1.327 0.263 -1.327 0.263 c 0 0 0.221 1.396 0.221 1.396 c 0 0 6.777 4.106 6.777 4.106 c 0 0 1.051 1.838 1.051 1.838 c 0 0 2.688 -2.299 2.688 -2.299 c 0 0 1.052 0.796 1.052 0.796 c 0 0 0.327 1.125 0.327 1.125 c 0 0 1.748 0.418 1.748 0.418 c 0 0 -0.01 1.521 -0.01 1.521 c 0 0 -0.677 0.259 -0.677 0.259 c 0 0 -1.122 2.251 -1.122 2.251 c 0 0 1.432 1.277 1.432 1.277 c 0 0 -3.229 1.273 -3.229 1.273 c 0 0 -1.446 4.661 -1.446 4.661 c 0 0 -1.471 0.458 -1.471 0.458 c 0 0 0.169 2.428 0.169 2.428 c 0 0 0.566 6.331 0.566 6.331 c 0 0 1.244 3.59 1.244 3.59 c 0 0 0.441 -0.086 0.441 -0.086 c 0 0 3.376 4.766 3.376 4.766 c 0 0 1.209 0.325 1.209 0.325 c 0 0 2.258 -1.065 2.258 -1.065 c 0 0 0.695 0.262 0.695 0.262 c 0 0 -0.026 -1.447 -0.026 -1.447 c 0 0 2.266 -2.289 2.266 -2.289 c 0 0 1.456 0.758 1.456 0.758 c 0 0 -0.123 0.432 -0.123 0.432 c 0 0 1.253 -0.433 1.253 -0.433 c 0 0 2.38 6.709 2.38 6.709 c 0 0 -0.146 1.212 -0.146 1.212 c 0 0 1.604 3.201 1.604 3.201 c 0 0 5.243 1.505 5.243 1.505 c 0 0 3.983 3.588 3.983 3.588 c 0 0 1.407 2.328 1.407 2.328 c 0 0 8.125 3.061 8.125 3.061 c 0 0 1.49 1.064 1.49 1.064 c 0 0 4.01 3.915 4.01 3.915 c 0 0 3.191 5.374 3.191 5.374 c 0 0 11.872 3.224 11.872 3.224 c 0 0 -2.209 -11.442 -2.209 -11.442 c 0 0 2.42 -5.131 2.42 -5.131 c 0 0 -0.116 -1.902 -0.116 -1.902 c 0 0 0.521 -0.88 0.521 -0.88 c 0 0 -4 -0.997 -4 -0.997 c 0 0 -0.725 -1.226 -0.725 -1.226 c 0 0 -1.964 0.328 -1.964 0.328 c 0 0 -0.39 -0.95 -0.39 -0.95 c 0 0 -3.261 -0.627 -3.261 -0.627 c 0 0 -1.081 -1.472 -1.081 -1.472 c 0 0 -6.57 -2.83 -6.57 -2.83 c 0 0 -0.45 -0.689 -0.45 -0.689 c 0 0 0.395 -0.524 0.395 -0.524 c 0 0 1.344 -0.124 1.344 -0.124 c 0 0 1.375 -1.476 1.375 -1.476 c 0 0 1.195 0.003 1.195 0.003 c 0 0 -0.568 -0.73 -0.568 -0.73 c 0 0 -2.354 -0.395 -2.354 -0.395 c 0 0 -0.386 -1.492 -0.386 -1.492 c 0 0 -1.887 -0.264 -1.887 -0.264 c 0 0 -0.935 -1.142 -0.935 -1.142 c 0 0 0.443 -0.693 0.443 -0.693 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Djelfa"},"18":{"path":"M 335.112 34.2048 c 0 0 1.112 -0.339 1.112 -0.339 c 0 0 1.367 0.723 1.367 0.723 c 0 0 1.504 -0.446 1.504 -0.446 c 0 0 1.242 -1.671 1.242 -1.671 c 0 0 4.855 0.813 4.855 0.813 c 0 0 1.86 -1.232 1.86 -1.232 c 0 0 0.435 0.64 0.435 0.64 c 0 0 2.741 0.479 2.741 0.479 c 0 0 -0.254 -1.387 -0.254 -1.387 c 0 0 0.828 -0.194 0.828 -0.194 c 0 0 0.3 -0.784 0.3 -0.784 c 0 0 -2.966 -1.426 -2.966 -1.426 c 0 0 -0.699 -3.309 -0.699 -3.309 c 0 0 -1.636 -0.354 -1.636 -0.354 c 0 0 0.278 -1.183 0.278 -1.183 c 0 0 -0.458 -0.661 -0.458 -0.661 c 0 0 -5.771 2.994 -5.771 2.994 c 0 0 -3.482 0.854 -3.482 0.854 c 0 0 -0.857 -0.566 -0.857 -0.566 c 0 0 -1.676 0.329 -1.676 0.329 c 0 0 -2.381 1.442 -2.381 1.442 c 0 0 -1.033 2.037 -1.033 2.037 c 0 0 -1.852 0.936 -1.852 0.936 c 0 0 0.027 1.315 0.027 1.315 c 0 0 0.917 0.194 0.917 0.194 c 0 0 0.751 -0.023 0.751 -0.023 c 0 0 0.402 1.854 0.402 1.854 c 0 0 0.979 0.076 0.979 0.076 c 0 0 0.992 -0.957 0.992 -0.957 c 0 0 1.248 0.676 1.248 0.676 c 0 0 1.227 -0.83 1.227 -0.83 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Jijel"},"19":{"path":"M 335.112 34.2048 c 0 0 0.558 0.717 0.558 0.717 c 0 0 -0.125 2.048 -0.125 2.048 c 0 0 1.244 0.953 1.244 0.953 c 0 0 -0.114 1.348 -0.114 1.348 c 0 0 1.395 0.426 1.395 0.426 c 0 0 -0.097 1.172 -0.097 1.172 c 0 0 2.188 2.367 2.188 2.367 c 0 0 -0.978 0.521 -0.978 0.521 c 0 0 0.049 1.868 0.049 1.868 c 0 0 1.715 0.399 1.715 0.399 c 0 0 0.284 2.085 0.284 2.085 c 0 0 -0.688 0.604 -0.688 0.604 c 0 0 1.162 1.212 1.162 1.212 c 0 0 -1.2 1.294 -1.2 1.294 c 0 0 -0.965 0.569 -0.965 0.569 c 0 0 0.444 1.163 0.444 1.163 c 0 0 -2.806 -2.418 -2.806 -2.418 c 0 0 -1.214 0.316 -1.214 0.316 c 0 0 -1.424 1.56 -1.424 1.56 c 0 0 0.121 0.773 0.121 0.773 c 0 0 1.212 0.402 1.212 0.402 c 0 0 -0.792 1.303 -0.792 1.303 c 0 0 -0.682 -0.238 -0.682 -0.238 c 0 0 -0.502 0.541 -0.502 0.541 c 0 0 -2.294 -0.948 -2.294 -0.948 c 0 0 -0.241 0.685 -0.241 0.685 c 0 0 -0.797 -0.078 -0.797 -0.078 c 0 0 -1.382 1.093 -1.382 1.093 c 0 0 0.234 1.001 0.234 1.001 c 0 0 -0.78 1.759 -0.78 1.759 c 0 0 -1.127 -0.334 -1.127 -0.334 c 0 0 -3.493 -0.469 -3.493 -0.469 c 0 0 -0.547 -0.806 -0.547 -0.806 c 0 0 0.417 -0.537 0.417 -0.537 c 0 0 -0.486 -0.518 -0.486 -0.518 c 0 0 -1.107 0.239 -1.107 0.239 c 0 0 -1.474 -1.041 -1.474 -1.041 c 0 0 0.169 -0.628 0.169 -0.628 c 0 0 -0.018 -1.602 -0.018 -1.602 c 0 0 2.088 -0.288 2.088 -0.288 c 0 0 -0.484 -2.927 -0.484 -2.927 c 0 0 1.669 -2.858 1.669 -2.858 c 0 0 -0.97 -0.972 -0.97 -0.972 c 0 0 0.127 -2.078 0.127 -2.078 c 0 0 -0.963 -0.273 -0.963 -0.273 c 0 0 -1.48 -2.546 -1.48 -2.546 c 0 0 -1.203 -0.362 -1.203 -0.362 c 0 0 -0.961 0.653 -0.961 0.653 c 0 0 -2.854 0.298 -2.854 0.298 c 0 0 -0.779 -0.983 -0.779 -0.983 c 0 0 0.302 -1.874 0.302 -1.874 c 0 0 -1.26 -0.672 -1.26 -0.672 c 0 0 2.517 -1.449 2.517 -1.449 c 0 0 0.048 -1.349 0.048 -1.349 c 0 0 3.62 0.479 3.62 0.479 c 0 0 0.447 -1.378 0.447 -1.378 c 0 0 0.928 0.088 0.928 0.088 c 0 0 0.039 -0.447 0.039 -0.447 c 0 0 2.159 1.465 2.159 1.465 c 0 0 -0.535 0.692 -0.535 0.692 c 0 0 -0.024 2.691 -0.024 2.691 c 0 0 0.57 -0.199 0.57 -0.199 c 0 0 -0.025 0.937 -0.025 0.937 c 0 0 1.656 -0.241 1.656 -0.241 c 0 0 0.748 -0.375 0.748 -0.375 c 0 0 -0.471 -0.92 -0.471 -0.92 c 0 0 1.314 -1.474 1.314 -1.474 c 0 0 -0.252 -0.684 -0.252 -0.684 c 0 0 2.389 -1.072 2.389 -1.072 c 0 0 0.184 -1.478 0.184 -1.478 c 0 0 0.751 -0.023 0.751 -0.023 c 0 0 0.403 1.854 0.403 1.854 c 0 0 0.979 0.077 0.979 0.077 c 0 0 0.992 -0.958 0.992 -0.958 c 0 0 1.248 0.676 1.248 0.676 c 0 0 1.224 -0.831 1.224 -0.831 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Sétif"},"20":{"path":"M 233.026 90.7739 c 0 0 -2.853 -0.734 -2.853 -0.734 c 0 0 -4.583 3.134 -4.583 3.134 c 0 0 -1.732 -2.296 -1.732 -2.296 c 0 0 -2.898 2.009 -2.898 2.009 c 0 0 -2.172 -0.253 -2.172 -0.253 c 0 0 -2.096 -2.128 -2.096 -2.128 c 0 0 -2.331 -0.763 -2.331 -0.763 c 0 0 -1.5 -1.498 -1.5 -1.498 c 0 0 -2.199 1.248 -2.199 1.248 c 0 0 -0.138 -2.153 -0.138 -2.153 c 0 0 -0.979 -1.096 -0.979 -1.096 c 0 0 0.256 -1.511 0.256 -1.511 c 0 0 2.491 1.248 2.491 1.248 c 0 0 0.646 1.884 0.646 1.884 c 0 0 1.12 -1.667 1.12 -1.667 c 0 0 -1.379 -2.84 -1.379 -2.84 c 0 0 -2.113 -1.373 -2.113 -1.373 c 0 0 -0.294 -1.104 -0.294 -1.104 c 0 0 -1.77 -0.163 -1.77 -0.163 c 0 0 0.403 -1.189 0.403 -1.189 c 0 0 -1.328 -0.901 -1.328 -0.901 c 0 0 1.163 -0.801 1.163 -0.801 c 0 0 -0.396 -2.087 -0.396 -2.087 c 0 0 1.813 -0.197 1.813 -0.197 c 0 0 -0.485 -1.763 -0.485 -1.763 c 0 0 0.353 -0.945 0.353 -0.945 c 0 0 1.317 -0.403 1.317 -0.403 c 0 0 0.982 0.007 0.982 0.007 c 0 0 0.665 -1.239 0.665 -1.239 c 0 0 0.345 1.976 0.345 1.976 c 0 0 2.583 -0.188 2.583 -0.188 c 0 0 1.301 0.867 1.301 0.867 c 0 0 1.081 -0.098 1.081 -0.098 c 0 0 0.205 0.906 0.205 0.906 c 0 0 1.011 0.663 1.011 0.663 c 0 0 2.493 -1.648 2.493 -1.648 c 0 0 0.773 0.891 0.773 0.891 c 0 0 0.999 0.119 0.999 0.119 c 0 0 1.539 -1.518 1.539 -1.518 c 0 0 3.298 -0.388 3.298 -0.388 c 0 0 0.28 0.989 0.28 0.989 c 0 0 1.403 0.633 1.403 0.633 c 0 0 1.595 2.433 1.595 2.433 c 0 0 -3.162 2.329 -3.162 2.329 c 0 0 0.558 0.923 0.558 0.923 c 0 0 -0.385 1.708 -0.385 1.708 c 0 0 1.729 3.064 1.729 3.064 c 0 0 1.062 -0.458 1.062 -0.458 c 0 0 0.449 1.181 0.449 1.181 c 0 0 -0.755 0.531 -0.755 0.531 c 0 0 0.315 0.529 0.315 0.529 c 0 0 2.975 1.226 2.975 1.226 c 0 0 -1.655 2.904 -1.655 2.904 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Saida"},"21":{"path":"M 368.508 30.2198 c 0 0 -0.538 0.351 -0.538 0.351 c 0 0 -0.418 -0.446 -0.418 -0.446 c 0 0 -0.55 1.052 -0.55 1.052 c 0 0 -3.584 1.265 -3.584 1.265 c 0 0 -0.653 0.873 -0.653 0.873 c 0 0 0.42 1.242 0.42 1.242 c 0 0 -2.629 0.698 -2.629 0.698 c 0 0 -0.062 1.543 -0.062 1.543 c 0 0 -1.254 -0.13 -1.254 -0.13 c 0 0 -0.397 -0.7 -0.397 -0.7 c 0 0 -1.124 0.208 -1.124 0.208 c 0 0 0.207 -2.014 0.207 -2.014 c 0 0 0.97 -1.018 0.97 -1.018 c 0 0 -1.8 0.36 -1.8 0.36 c 0 0 -2.274 -0.424 -2.274 -0.424 c 0 0 -0.369 -1.324 -0.369 -1.324 c 0 0 -1.066 1.389 -1.066 1.389 c 0 0 -2.188 -0.147 -2.188 -0.147 c 0 0 -0.967 0.174 -0.967 0.174 c 0 0 -0.254 -1.387 -0.254 -1.387 c 0 0 0.828 -0.194 0.828 -0.194 c 0 0 0.3 -0.783 0.3 -0.783 c 0 0 -2.966 -1.427 -2.966 -1.427 c 0 0 -0.699 -3.309 -0.699 -3.309 c 0 0 -1.635 -0.354 -1.635 -0.354 c 0 0 0.277 -1.183 0.277 -1.183 c 0 0 -0.458 -0.661 -0.458 -0.661 c 0 0 -0.486 -1.046 -0.486 -1.046 c 0 0 0.477 -1.133 0.477 -1.133 c 0 0 1.46 -1.163 1.46 -1.163 c 0 0 2.801 -0.643 2.801 -0.643 c 0 0 1.617 0.827 1.617 0.827 c 0 0 0.77 2.041 0.77 2.041 c 0 0 2.885 0.665 2.885 0.665 c 0 0 0.642 -0.521 0.642 -0.521 c 0 0 0.391 0.479 0.391 0.479 c 0 0 1.646 -0.394 1.646 -0.394 c 0 0 0.779 1.6 0.779 1.6 c 0 0 1.483 0.237 1.483 0.237 c 0 0 2.637 -1.094 2.637 -1.094 c 0 0 1.659 0.04 1.659 0.04 c 0 0 2.043 -1.929 2.043 -1.929 c 0 0 -0.279 -1.044 -0.279 -1.044 c 0 0 -1.836 -1.298 -1.836 -1.298 c 0 0 2.469 0.061 2.469 0.061 c 0 0 0.865 0.703 0.865 0.703 c 0 0 -0.27 0.649 -0.27 0.649 c 0 0 0.934 1.558 0.934 1.558 c 0 0 -0.102 0.528 -0.102 0.528 c 0 0 -0.618 -0.109 -0.618 -0.109 c 0 0 1.345 1.255 1.345 1.255 c 0 0 0.646 3.424 0.646 3.424 c 0 0 -0.074 0.896 -0.074 0.896 c 0 0 -1.197 0.49 -1.197 0.49 c 0 0 0.196 1.267 0.196 1.267 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Skikda"},"22":{"path":"M 204.15 64.0609 c 0 0 -0.642 0.992 -0.642 0.992 c 0 0 0.241 0.965 0.241 0.965 c 0 0 -1.503 0.747 -1.503 0.747 c 0 0 -0.184 -0.672 -0.184 -0.672 c 0 0 -2.838 0.497 -2.838 0.497 c 0 0 -0.066 0.729 -0.066 0.729 c 0 0 -0.969 0.457 -0.969 0.457 c 0 0 -0.813 -0.548 -0.813 -0.548 c 0 0 -0.78 1.395 -0.78 1.395 c 0 0 -0.673 -0.18 -0.673 -0.18 c 0 0 0.286 1.945 0.286 1.945 c 0 0 -1.38 0.462 -1.38 0.462 c 0 0 -0.248 1.449 -0.248 1.449 c 0 0 -0.818 0.477 -0.818 0.477 c 0 0 1.942 1.063 1.942 1.063 c 0 0 -1.313 2.126 -1.313 2.126 c 0 0 0.506 1.828 0.506 1.828 c 0 0 1.191 0.045 1.191 0.045 c 0 0 -0.804 1.135 -0.804 1.135 c 0 0 1.177 -0.239 1.177 -0.239 c 0 0 -0.433 3.193 -0.433 3.193 c 0 0 2.376 -0.271 2.376 -0.271 c 0 0 0.272 1.004 0.272 1.004 c 0 0 -0.496 -0.036 -0.496 -0.036 c 0 0 0.23 0.687 0.23 0.687 c 0 0 -1.285 2.753 -1.285 2.753 c 0 0 -1.609 0.95 -1.609 0.95 c 0 0 0.956 0.198 0.956 0.198 c 0 0 0.362 0.793 0.362 0.793 c 0 0 -6.093 5.633 -6.093 5.633 c 0 0 1.08 1.632 1.08 1.632 c 0 0 2.133 -1.567 2.133 -1.567 c 0 0 0.589 1.018 0.589 1.018 c 0 0 0.342 -0.416 0.342 -0.416 c 0 0 2.966 0.896 2.966 0.896 c 0 0 4.055 -2.511 4.055 -2.511 c 0 0 1.843 1.041 1.843 1.041 c 0 0 3.133 9.769 3.133 9.769 c 0 0 0.314 -1.128 0.314 -1.128 c 0 0 0.854 0.04 0.854 0.04 c 0 0 2.091 -2.885 2.091 -2.885 c 0 0 1.632 -0.712 1.632 -0.712 c 0 0 1.374 0.198 1.374 0.198 c 0 0 1.501 -3.065 1.501 -3.065 c 0 0 0.941 -0.691 0.941 -0.691 c 0 0 -1.231 -5.509 -1.231 -5.509 c 0 0 -1.5 -1.498 -1.5 -1.498 c 0 0 -2.199 1.248 -2.199 1.248 c 0 0 -0.138 -2.153 -0.138 -2.153 c 0 0 -0.979 -1.096 -0.979 -1.096 c 0 0 0.256 -1.511 0.256 -1.511 c 0 0 2.491 1.248 2.491 1.248 c 0 0 0.646 1.884 0.646 1.884 c 0 0 1.12 -1.667 1.12 -1.667 c 0 0 -1.379 -2.84 -1.379 -2.84 c 0 0 -2.113 -1.373 -2.113 -1.373 c 0 0 -0.294 -1.104 -0.294 -1.104 c 0 0 -1.77 -0.163 -1.77 -0.163 c 0 0 0.403 -1.189 0.403 -1.189 c 0 0 -1.328 -0.901 -1.328 -0.901 c 0 0 1.163 -0.801 1.163 -0.801 c 0 0 -0.396 -2.087 -0.396 -2.087 c 0 0 1.813 -0.197 1.813 -0.197 c 0 0 -0.485 -1.763 -0.485 -1.763 c 0 0 0.353 -0.945 0.353 -0.945 c 0 0 1.317 -0.403 1.317 -0.403 c 0 0 -0.804 -2.202 -0.804 -2.202 c 0 0 0.376 -0.966 0.376 -0.966 c 0 0 1.477 -0.712 1.477 -0.712 c 0 0 -0.955 -0.354 -0.955 -0.354 c 0 0 -1.221 1.019 -1.221 1.019 c 0 0 -0.218 -0.549 -0.218 -0.549 c 0 0 1.312 -0.857 1.312 -0.857 c 0 0 0.38 -0.986 0.38 -0.986 c 0 0 -2.728 -0.854 -2.728 -0.854 c 0 0 -0.353 -0.632 -0.353 -0.632 c 0 0 -0.752 0.882 -0.752 0.882 c 0 0 -1.563 -0.12 -1.563 -0.12 c 0 0 0.231 -2.255 0.231 -2.255 c 0 0 -1.589 0.603 -1.589 0.603 c 0 0 -0.783 -0.393 -0.783 -0.393 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Sidi Bel Abbes"},"23":{"path":"M 375.158 30.0759 c 0 0 0.57 -1.447 0.57 -1.447 c 0 0 -0.427 -0.747 -0.427 -0.747 c 0 0 0.969 -1.14 0.969 -1.14 c 0 0 0.939 0.143 0.939 0.143 c 0 0 0.031 -1.328 0.031 -1.328 c 0 0 1.139 -0.009 1.139 -0.009 c 0 0 -0.366 -0.685 -0.366 -0.685 c 0 0 -1.192 -0.868 -1.192 -0.868 c 0 0 0.534 -2.257 0.534 -2.257 c 0 0 -1.771 0.605 -1.771 0.605 c 0 0 -1.04 -0.711 -1.04 -0.711 c 0 0 -0.714 0.503 -0.714 0.503 c 0 0 -2.358 -1.985 -2.358 -1.985 c 0 0 -2.144 0.188 -2.144 0.188 c 0 0 -0.479 -1.129 -0.479 -1.129 c 0 0 -2.073 0.349 -2.073 0.349 c 0 0 0.865 0.705 0.865 0.705 c 0 0 -0.27 0.648 -0.27 0.648 c 0 0 0.934 1.558 0.934 1.558 c 0 0 -0.102 0.529 -0.102 0.529 c 0 0 -0.618 -0.109 -0.618 -0.109 c 0 0 1.345 1.253 1.345 1.253 c 0 0 0.647 3.425 0.647 3.425 c 0 0 -0.075 0.896 -0.075 0.896 c 0 0 -1.196 0.49 -1.196 0.49 c 0 0 0.201 1.266 0.201 1.266 c 0 0 1.15 -0.122 1.15 -0.122 c 0 0 0.438 0.876 0.438 0.876 c 0 0 0.199 -0.74 0.199 -0.74 c 0 0 1.104 -0.509 1.104 -0.509 c 0 0 0.176 1.188 0.176 1.188 c 0 0 2.713 0.503 2.713 0.503 c 0 0 0.871 -1.339 0.871 -1.339 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Annaba"},"24":{"path":"M 375.158 30.0759 c 0 0 0.936 -0.309 0.936 -0.309 c 0 0 0.688 0.501 0.688 0.501 c 0 0 1.188 2.609 1.188 2.609 c 0 0 1.169 -0.383 1.169 -0.383 c 0 0 0.201 0.543 0.201 0.543 c 0 0 -0.047 -0.771 -0.047 -0.771 c 0 0 1.299 0.584 1.299 0.584 c 0 0 0.92 1.851 0.92 1.851 c 0 0 -1.832 1.544 -1.832 1.544 c 0 0 -1.021 -0.411 -1.021 -0.411 c 0 0 -0.195 1.316 -0.195 1.316 c 0 0 1.08 1.383 1.08 1.383 c 0 0 -0.374 0.437 -0.374 0.437 c 0 0 -2.218 0.173 -2.218 0.173 c 0 0 -2.16 2.08 -2.16 2.08 c 0 0 -1.194 -0.271 -1.194 -0.271 c 0 0 -2.52 0.934 -2.52 0.934 c 0 0 -2.854 -0.539 -2.854 -0.539 c 0 0 -0.494 1.348 -0.494 1.348 c 0 0 0.75 0.918 0.75 0.918 c 0 0 -1.257 0.076 -1.257 0.076 c 0 0 -0.683 1.774 -0.683 1.774 c 0 0 -2.784 1.371 -2.784 1.371 c 0 0 -0.998 -0.165 -0.998 -0.165 c 0 0 0.196 -0.958 0.196 -0.958 c 0 0 -1.267 -0.551 -1.267 -0.551 c 0 0 0.201 -1.256 0.201 -1.256 c 0 0 -0.077 -0.57 -0.077 -0.57 c 0 0 0.855 -0.474 0.855 -0.474 c 0 0 0.104 -1.688 0.104 -1.688 c 0 0 -0.561 -1.442 -0.561 -1.442 c 0 0 -1.225 -0.221 -1.225 -0.221 c 0 0 0.6 -0.717 0.6 -0.717 c 0 0 -1.052 -0.557 -1.052 -0.557 c 0 0 0.532 -0.551 0.532 -0.551 c 0 0 -0.572 -0.892 -0.572 -0.892 c 0 0 0.062 -1.543 0.062 -1.543 c 0 0 2.629 -0.698 2.629 -0.698 c 0 0 -0.42 -1.242 -0.42 -1.242 c 0 0 0.653 -0.873 0.653 -0.873 c 0 0 3.583 -1.265 3.583 -1.265 c 0 0 0.55 -1.052 0.55 -1.052 c 0 0 0.419 0.446 0.419 0.446 c 0 0 0.538 -0.351 0.538 -0.351 c 0 0 1.15 -0.122 1.15 -0.122 c 0 0 0.438 0.876 0.438 0.876 c 0 0 0.199 -0.741 0.199 -0.741 c 0 0 1.104 -0.509 1.104 -0.509 c 0 0 0.176 1.188 0.176 1.188 c 0 0 2.713 0.503 2.713 0.503 c 0 0 0.872 -1.333 0.872 -1.333 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Guelma"},"25":{"path":"M 361.888 43.9039 c 0 0 -0.077 -0.57 -0.077 -0.57 c 0 0 0.855 -0.474 0.855 -0.474 c 0 0 0.104 -1.688 0.104 -1.688 c 0 0 -0.561 -1.442 -0.561 -1.442 c 0 0 -1.224 -0.221 -1.224 -0.221 c 0 0 0.599 -0.717 0.599 -0.717 c 0 0 -1.052 -0.557 -1.052 -0.557 c 0 0 0.532 -0.551 0.532 -0.551 c 0 0 -0.572 -0.892 -0.572 -0.892 c 0 0 -1.253 -0.13 -1.253 -0.13 c 0 0 -0.398 -0.7 -0.398 -0.7 c 0 0 -1.124 0.208 -1.124 0.208 c 0 0 0.207 -2.014 0.207 -2.014 c 0 0 0.969 -1.018 0.969 -1.018 c 0 0 -1.799 0.36 -1.799 0.36 c 0 0 -2.274 -0.424 -2.274 -0.424 c 0 0 -0.368 -1.324 -0.368 -1.324 c 0 0 -1.067 1.389 -1.067 1.389 c 0 0 -2.188 -0.147 -2.188 -0.147 c 0 0 -0.02 1.6 -0.02 1.6 c 0 0 -3.298 0.766 -3.298 0.766 c 0 0 0.284 2.021 0.284 2.021 c 0 0 -0.922 1.877 -0.922 1.877 c 0 0 1.319 -0.403 1.319 -0.403 c 0 0 1.126 0.879 1.126 0.879 c 0 0 -0.265 1.487 -0.265 1.487 c 0 0 0.788 0.495 0.788 0.495 c 0 0 1.019 -0.295 1.019 -0.295 c 0 0 0.938 0.805 0.938 0.805 c 0 0 -0.108 1.354 -0.108 1.354 c 0 0 -0.381 0.438 -0.381 0.438 c 0 0 0.595 1.159 0.595 1.159 c 0 0 1.01 0.369 1.01 0.369 c 0 0 -0.464 -0.804 -0.464 -0.804 c 0 0 1.122 0.604 1.122 0.604 c 0 0 0.375 -1.069 0.375 -1.069 c 0 0 2.243 -0.159 2.243 -0.159 c 0 0 0.263 -1.444 0.263 -1.444 c 0 0 1.446 1.166 1.446 1.166 c 0 0 3.621 0.066 3.621 0.066 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Constantine"},"26":{"path":"M 291.189 51.9288 c 0 0 0.272 0.795 0.272 0.795 c 0 0 -1.143 0.688 -1.143 0.688 c 0 0 0.551 0.367 0.551 0.367 c 0 0 -2.021 0.685 -2.021 0.685 c 0 0 0.86 1.28 0.86 1.28 c 0 0 0.034 2.966 0.034 2.966 c 0 0 -2.708 -4.154 -2.708 -4.154 c 0 0 -0.896 0.141 -0.896 0.141 c 0 0 0.406 0.771 0.406 0.771 c 0 0 -0.488 0.495 -0.488 0.495 c 0 0 -1.09 0.049 -1.09 0.049 c 0 0 -0.854 -1.716 -0.854 -1.716 c 0 0 -1.031 1.021 -1.031 1.021 c 0 0 0.104 1.206 0.104 1.206 c 0 0 -0.753 1.37 -0.753 1.37 c 0 0 -2.786 0.7 -2.786 0.7 c 0 0 -0.185 -2.199 -0.185 -2.199 c 0 0 -0.699 0.144 -0.699 0.144 c 0 0 -0.693 -2.337 -0.693 -2.337 c 0 0 -2.585 0.707 -2.585 0.707 c 0 0 0.677 5.005 0.677 5.005 c 0 0 -0.578 -0.259 -0.578 -0.259 c 0 0 -1.83 1.359 -1.83 1.359 c 0 0 -1.605 2.564 -1.605 2.564 c 0 0 -1.292 0.661 -1.292 0.661 c 0 0 -2.698 -1.908 -2.698 -1.908 c 0 0 -0.229 0.56 -0.229 0.56 c 0 0 -2.476 0.813 -2.476 0.813 c 0 0 -2.139 0.167 -2.139 0.167 c 0 0 -0.658 -2.362 -0.658 -2.362 c 0 0 0.71 -1.968 0.71 -1.968 c 0 0 -2.811 -0.738 -2.811 -0.738 c 0 0 -0.347 -1.359 -0.347 -1.359 c 0 0 0.503 -0.62 0.503 -0.62 c 0 0 2.227 0.229 2.227 0.229 c 0 0 0.902 -3.906 0.902 -3.906 c 0 0 1.051 -1.104 1.051 -1.104 c 0 0 -0.339 -0.876 -0.339 -0.876 c 0 0 1.986 0.073 1.986 0.073 c 0 0 0.315 -2.775 0.315 -2.775 c 0 0 0.86 0.234 0.86 0.234 c 0 0 1.842 -1.11 1.842 -1.11 c 0 0 0.062 -1.843 0.062 -1.843 c 0 0 -1.344 -0.306 -1.344 -0.306 c 0 0 -0.085 -1.369 -0.085 -1.369 c 0 0 -0.709 -0.199 -0.709 -0.199 c 0 0 0.625 -1.909 0.625 -1.909 c 0 0 1.348 0.043 1.348 0.043 c 0 0 0.756 -0.614 0.756 -0.614 c 0 0 1.51 -1.087 1.51 -1.087 c 0 0 2.893 0.205 2.893 0.205 c 0 0 1.568 -1.178 1.568 -1.178 c 0 0 0.67 1.507 0.67 1.507 c 0 0 1.481 0.008 1.481 0.008 c 0 0 0.867 -0.967 0.867 -0.967 c 0 0 -0.189 -1.356 -0.189 -1.356 c 0 0 0.474 0.956 0.474 0.956 c 0 0 0.732 -0.598 0.732 -0.598 c 0 0 0.692 0.698 0.692 0.698 c 0 0 1.158 -1.154 1.158 -1.154 c 0 0 0.084 -1.381 0.084 -1.381 c 0 0 1.63 0.271 1.63 0.271 c 0 0 0.479 -0.537 0.479 -0.537 c 0 0 2.722 2.629 2.722 2.629 c 0 0 1.562 -1.479 1.562 -1.479 c 0 0 1.356 0.703 1.356 0.703 c 0 0 -0.439 0.687 -0.439 0.687 c 0 0 0.998 1.392 0.998 1.392 c 0 0 -1.071 0.599 -1.071 0.599 c 0 0 -0.441 1.267 -0.441 1.267 c 0 0 1.069 0.979 1.069 0.979 c 0 0 -0.181 0.809 -0.181 0.809 c 0 0 -1.426 0.414 -1.426 0.414 c 0 0 -0.229 0.854 -0.229 0.854 c 0 0 0.656 1.042 0.656 1.042 c 0 0 -0.409 0.485 -0.409 0.485 c 0 0 -0.898 0.936 -0.898 0.936 c 0 0 -1.014 -0.016 -1.014 -0.016 c 0 0 0.479 0.781 0.479 0.781 c 0 0 2.788 0.434 2.788 0.434 c 0 0 1.41 2.635 1.41 2.635 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Médéa"},"27":{"path":"M 212.85 55.2648 c 0 0 2.964 -1.85 2.964 -1.85 c 0 0 2.338 -4.67 2.338 -4.67 c 0 0 1.846 -1.942 1.846 -1.942 c 0 0 9.188 -5.395 9.188 -5.395 c 0 0 1.74 -0.06 1.74 -0.06 c 0 0 -1.001 3.283 -1.001 3.283 c 0 0 -1.979 2.472 -1.979 2.472 c 0 0 1.289 1.351 1.289 1.351 c 0 0 -0.634 0.698 -0.634 0.698 c 0 0 0.359 0.87 0.359 0.87 c 0 0 -2.126 0.093 -2.126 0.093 c 0 0 -0.555 0.604 -0.555 0.604 c 0 0 -1.226 -0.57 -1.226 -0.57 c 0 0 -0.846 1.017 -0.846 1.017 c 0 0 0.313 0.769 0.313 0.769 c 0 0 0.674 -0.036 0.674 -0.036 c 0 0 -0.59 0.992 -0.59 0.992 c 0 0 0.229 0.908 0.229 0.908 c 0 0 -1.332 1.438 -1.332 1.438 c 0 0 -0.877 -0.373 -0.877 -0.373 c 0 0 -0.867 0.539 -0.867 0.539 c 0 0 -1.744 2.073 -1.744 2.073 c 0 0 -0.903 -0.138 -0.903 -0.138 c 0 0 -0.604 0.964 -0.604 0.964 c 0 0 -0.03 -0.763 -0.03 -0.763 c 0 0 -1.07 0.18 -1.07 0.18 c 0 0 -1.028 -1.427 -1.028 -1.427 c 0 0 -2.252 0.6 -2.252 0.6 c 0 0 -1.276 -1.627 -1.276 -1.627 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Mostaganem"},"28":{"path":"M 320.989 54.6068 c 0 0 -0.17 0.627 -0.17 0.627 c 0 0 1.475 1.042 1.475 1.042 c 0 0 1.106 -0.24 1.106 -0.24 c 0 0 0.486 0.518 0.486 0.518 c 0 0 -0.417 0.537 -0.417 0.537 c 0 0 0.547 0.807 0.547 0.807 c 0 0 3.493 0.469 3.493 0.469 c 0 0 -2.661 2.962 -2.661 2.962 c 0 0 -1.817 0.906 -1.817 0.906 c 0 0 -0.722 -1.068 -0.722 -1.068 c 0 0 -1.062 -0.011 -1.062 -0.011 c 0 0 -0.828 0.921 -0.828 0.921 c 0 0 -0.074 -0.787 -0.074 -0.787 c 0 0 -0.96 1.506 -0.96 1.506 c 0 0 -1.945 -1.698 -1.945 -1.698 c 0 0 0.823 4.4 0.823 4.4 c 0 0 -0.379 2.546 -0.379 2.546 c 0 0 -0.916 1.548 -0.916 1.548 c 0 0 -0.524 -0.186 -0.524 -0.186 c 0 0 -1.187 1.172 -1.187 1.172 c 0 0 0.194 0.606 0.194 0.606 c 0 0 2.929 0.06 2.929 0.06 c 0 0 2.125 1.396 2.125 1.396 c 0 0 0.447 3.492 0.447 3.492 c 0 0 0.547 0.305 0.547 0.305 c 0 0 -0.538 0.065 -0.538 0.065 c 0 0 -0.683 1.586 -0.683 1.586 c 0 0 -5.438 1.63 -5.438 1.63 c 0 0 -0.942 1.502 -0.942 1.502 c 0 0 -1.001 0.173 -1.001 0.173 c 0 0 1.298 1.086 1.298 1.086 c 0 0 -1.021 0.547 -1.021 0.547 c 0 0 -0.657 -0.445 -0.657 -0.445 c 0 0 -1.832 1.14 -1.832 1.14 c 0 0 -4.806 0.046 -4.806 0.046 c 0 0 -0.876 1.823 -0.876 1.823 c 0 0 -2.191 1.835 -2.191 1.835 c 0 0 0.521 0.302 0.521 0.302 c 0 0 0.417 3.083 0.417 3.083 c 0 0 1.218 1.271 1.218 1.271 c 0 0 -0.307 0.725 -0.307 0.725 c 0 0 1.813 0.933 1.813 0.933 c 0 0 -0.773 1.007 -0.773 1.007 c 0 0 -1.99 0.525 -1.99 0.525 c 0 0 -4.303 -3.585 -4.303 -3.585 c 0 0 0.313 -2.084 0.313 -2.084 c 0 0 -1.836 -1.982 -1.836 -1.982 c 0 0 0.299 -2.042 0.299 -2.042 c 0 0 -0.719 -4.248 -0.719 -4.248 c 0 0 -3.906 -0.975 -3.906 -0.975 c 0 0 -1.411 0.479 -1.411 0.479 c 0 0 -0.14 -1.65 -0.14 -1.65 c 0 0 -1.402 -0.322 -1.402 -0.322 c 0 0 0.209 -2.972 0.209 -2.972 c 0 0 -0.698 -0.953 -0.698 -0.953 c 0 0 0.551 -0.068 0.551 -0.068 c 0 0 0.504 -1.539 0.504 -1.539 c 0 0 -1.839 0.736 -1.839 0.736 c 0 0 -1.138 -3.13 -1.138 -3.13 c 0 0 4.282 -3.606 4.282 -3.606 c 0 0 -0.425 -1.94 -0.425 -1.94 c 0 0 0.865 -0.633 0.865 -0.633 c 0 0 0.075 -1.772 0.075 -1.772 c 0 0 -4.719 -3.806 -4.719 -3.806 c 0 0 -1.903 -1.953 -1.903 -1.953 c 0 0 -0.313 -1.258 -0.313 -1.258 c 0 0 0.489 -0.494 0.489 -0.494 c 0 0 -0.405 -0.771 -0.405 -0.771 c 0 0 0.895 -0.14 0.895 -0.14 c 0 0 2.709 4.154 2.709 4.154 c 0 0 -0.037 -2.966 -0.037 -2.966 c 0 0 -0.859 -1.281 -0.859 -1.281 c 0 0 2.022 -0.685 2.022 -0.685 c 0 0 -0.551 -0.367 -0.551 -0.367 c 0 0 1.144 -0.686 1.144 -0.686 c 0 0 -0.274 -0.796 -0.274 -0.796 c 0 0 0.533 -0.809 0.533 -0.809 c 0 0 1.537 0.153 1.537 0.153 c 0 0 0.654 0.924 0.654 0.924 c 0 0 1.07 0.224 1.07 0.224 c 0 0 0.352 1.004 0.352 1.004 c 0 0 0.802 0.048 0.802 0.048 c 0 0 1.271 -1.214 1.271 -1.214 c 0 0 2.542 0.89 2.542 0.89 c 0 0 -0.444 -1.385 -0.444 -1.385 c 0 0 1.058 -3.265 1.058 -3.265 c 0 0 0.57 1.104 0.57 1.104 c 0 0 2.211 -0.769 2.211 -0.769 c 0 0 2.755 0.986 2.755 0.986 c 0 0 3.391 -1.461 3.391 -1.461 c 0 0 0.865 2.774 0.865 2.774 c 0 0 -1.615 0.625 -1.615 0.625 c 0 0 -0.69 2.095 -0.69 2.095 c 0 0 2.823 0.292 2.823 0.292 c 0 0 -0.36 -0.99 -0.36 -0.99 c 0 0 1.328 -0.64 1.328 -0.64 c 0 0 -0.386 1.092 -0.386 1.092 c 0 0 0.663 0.766 0.663 0.766 c 0 0 2.07 -1.562 2.07 -1.562 c 0 0 2.721 -0.533 2.721 -0.533 c 0 0 1.33 1.67 1.33 1.67 c 0 0 1.165 -0.05 1.165 -0.05 c 0 0 0.184 1.218 0.184 1.218 c 0 0 1.399 -0.516 1.399 -0.516 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"M'Sila"},"29":{"path":"M 220.012 57.4758 c 0 0 0.578 0.193 0.578 0.193 c 0 0 1.217 3.61 1.217 3.61 c 0 0 1.717 -0.492 1.717 -0.492 c 0 0 0.125 0.523 0.125 0.523 c 0 0 0.858 -0.611 0.858 -0.611 c 0 0 1.282 1.803 1.282 1.803 c 0 0 1.891 -0.041 1.891 -0.041 c 0 0 0.918 0.917 0.918 0.917 c 0 0 1.721 -0.085 1.721 -0.085 c 0 0 0.296 0.662 0.296 0.662 c 0 0 2.047 0.317 2.047 0.317 c 0 0 1.49 1.555 1.49 1.555 c 0 0 -0.688 0.28 -0.688 0.28 c 0 0 -0.874 2.105 -0.874 2.105 c 0 0 -1.111 0.353 -1.111 0.353 c 0 0 -1.521 -0.788 -1.521 -0.788 c 0 0 -1.084 0.159 -1.084 0.159 c 0 0 -1.175 1.41 -1.175 1.41 c 0 0 0.246 0.949 0.246 0.949 c 0 0 -1.553 1.1 -1.553 1.1 c 0 0 -1.071 1.771 -1.071 1.771 c 0 0 -1.54 1.518 -1.54 1.518 c 0 0 -0.999 -0.12 -0.999 -0.12 c 0 0 -0.773 -0.89 -0.773 -0.89 c 0 0 -2.493 1.648 -2.493 1.648 c 0 0 -1.011 -0.662 -1.011 -0.662 c 0 0 -0.205 -0.907 -0.205 -0.907 c 0 0 -1.081 0.098 -1.081 0.098 c 0 0 -1.301 -0.867 -1.301 -0.867 c 0 0 -2.583 0.188 -2.583 0.188 c 0 0 -0.345 -1.976 -0.345 -1.976 c 0 0 -0.665 1.238 -0.665 1.238 c 0 0 -0.982 -0.007 -0.982 -0.007 c 0 0 -0.804 -2.203 -0.804 -2.203 c 0 0 0.376 -0.965 0.376 -0.965 c 0 0 1.477 -0.712 1.477 -0.712 c 0 0 -0.955 -0.354 -0.955 -0.354 c 0 0 -1.222 1.019 -1.222 1.019 c 0 0 -0.217 -0.549 -0.217 -0.549 c 0 0 1.312 -0.856 1.312 -0.856 c 0 0 0.38 -0.987 0.38 -0.987 c 0 0 -2.728 -0.854 -2.728 -0.854 c 0 0 -0.352 -0.632 -0.352 -0.632 c 0 0 -0.753 0.882 -0.753 0.882 c 0 0 -1.563 -0.12 -1.563 -0.12 c 0 0 0.231 -2.254 0.231 -2.254 c 0 0 -1.59 0.602 -1.59 0.602 c 0 0 -0.786 -0.382 -0.786 -0.382 c 0 0 0.318 -0.749 0.318 -0.749 c 0 0 1.029 -0.085 1.029 -0.085 c 0 0 -0.37 -0.949 -0.37 -0.949 c 0 0 1.582 -0.382 1.582 -0.382 c 0 0 0.264 -1.739 0.264 -1.739 c 0 0 2.625 -2.104 2.625 -2.104 c 0 0 -0.667 -0.006 -0.667 -0.006 c 0 0 0.89 -1.532 0.89 -1.532 c 0 0 1.433 1.089 1.433 1.089 c 0 0 1.581 -2.289 1.581 -2.289 c 0 0 1.287 1.577 1.287 1.577 c 0 0 2.252 -0.6 2.252 -0.6 c 0 0 1.029 1.428 1.029 1.428 c 0 0 1.069 -0.181 1.069 -0.181 c 0 0 0.03 0.763 0.03 0.763 c 0 0 0.605 -0.963 0.605 -0.963 c 0 0 0.906 0.136 0.906 0.136 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Mascara"},"30":{"path":"M 327.951 114.981 c 0 0 -0.91 1.857 -0.91 1.857 c 0 0 -3.919 -3.5 -3.919 -3.5 c 0 0 -2.42 5.13 -2.42 5.13 c 0 0 2.209 11.443 2.209 11.443 c 0 0 -5.039 9.304 -5.039 9.304 c 0 0 -6.763 7.312 -6.763 7.312 c 0 0 -0.766 17.01 -0.766 17.01 c 0 0 -3.171 8.157 -3.171 8.157 c 0 0 -10.495 36.704 -10.495 36.704 c 0 0 -1.579 1.093 -1.579 1.093 c 0 0 -6.763 14.091 -6.763 14.091 c 0 0 -8.226 3.631 -8.226 3.631 c 0 0 17.526 14.179 17.526 14.179 c 0 0 -0.146 0.413 -0.146 0.413 c 0 0 43.124 -33.261 43.124 -33.261 c 0 0 15.876 -8.912 15.876 -8.912 c 0 0 2.795 0.889 2.795 0.889 c 0 0 63.493 -16.461 63.493 -16.461 c 0 0 -11.392 -38.443 -11.392 -38.443 c 0 0 -39.729 4.259 -39.729 4.259 c 0 0 -5.501 -6.366 -5.501 -6.366 c 0 0 -7.777 -11.58 -7.777 -11.58 c 0 0 -8.097 -22.969 -8.097 -22.969 c 0 0 -1.219 -7.663 -1.219 -7.663 c 0 0 -0.319 0.807 -0.319 0.807 c 0 0 -0.521 -1.04 -0.521 -1.04 c 0 0 -0.762 0.111 -0.762 0.111 c 0 0 -2.721 2.136 -2.721 2.136 c 0 0 -0.552 -1.05 -0.552 -1.05 c 0 0 -0.665 0.606 -0.665 0.606 c 0 0 -0.047 1.4 -0.047 1.4 c 0 0 1.138 2.602 1.138 2.602 c 0 0 0.039 2.557 0.039 2.557 c 0 0 -0.953 1.07 -0.953 1.07 c 0 0 1.171 1.467 1.171 1.467 c 0 0 0.374 2.7 0.374 2.7 c 0 0 -17.293 0.317 -17.293 0.317 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Ouargla"},"31":{"path":"M 204.15 64.0609 c 0 0 0.319 -0.749 0.319 -0.749 c 0 0 1.029 -0.085 1.029 -0.085 c 0 0 -0.37 -0.95 -0.37 -0.95 c 0 0 1.582 -0.381 1.582 -0.381 c 0 0 0.264 -1.74 0.264 -1.74 c 0 0 2.625 -2.104 2.625 -2.104 c 0 0 -0.667 -0.006 -0.667 -0.006 c 0 0 0.89 -1.532 0.89 -1.532 c 0 0 1.433 1.09 1.433 1.09 c 0 0 1.597 -2.34 1.597 -2.34 c 0 0 -3.432 -0.925 -3.432 -0.925 c 0 0 -0.636 -0.732 -0.636 -0.732 c 0 0 0.279 -0.764 0.279 -0.764 c 0 0 -0.896 -0.845 -0.896 -0.845 c 0 0 -0.981 0.025 -0.981 0.025 c 0 0 -0.675 0.67 -0.675 0.67 c 0 0 -1.5 0.109 -1.5 0.109 c 0 0 -0.331 2.201 -0.331 2.201 c 0 0 -2.492 1.917 -2.492 1.917 c 0 0 -1.325 0.012 -1.325 0.012 c 0 0 -0.406 -0.761 -0.406 -0.761 c 0 0 -2.549 -0.737 -2.549 -0.737 c 0 0 -0.751 1.339 -0.751 1.339 c 0 0 -0.854 0.255 -0.854 0.255 c 0 0 -0.794 -0.59 -0.794 -0.59 c 0 0 -2.608 2.264 -2.608 2.264 c 0 0 1.342 1.429 1.342 1.429 c 0 0 -0.223 0.719 -0.223 0.719 c 0 0 1.009 0.007 1.009 0.007 c 0 0 -0.384 1.019 -0.384 1.019 c 0 0 -0.893 0.252 -0.893 0.252 c 0 0 0.174 1.591 0.174 1.591 c 0 0 0.012 -0.62 0.012 -0.62 c 0 0 0.895 -0.047 0.895 -0.047 c 0 0 -0.201 -0.596 -0.201 -0.596 c 0 0 0.82 0.656 0.82 0.656 c 0 0 1.569 0.021 1.569 0.021 c 0 0 5.066 -1.624 5.066 -1.624 c 0 0 0.775 2.922 0.775 2.922 c 0 0 -0.772 0.564 -0.772 0.564 c 0 0 -0.026 1.101 -0.026 1.101 c 0 0 0.184 0.673 0.184 0.673 c 0 0 1.502 -0.747 1.502 -0.747 c 0 0 -0.24 -0.964 -0.24 -0.964 c 0 0 0.64 -0.997 0.64 -0.997 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Oran"},"32":{"path":"M 233.026 90.7739 c 0 0 -2.853 -0.734 -2.853 -0.734 c 0 0 -4.583 3.134 -4.583 3.134 c 0 0 -1.732 -2.296 -1.732 -2.296 c 0 0 -2.898 2.009 -2.898 2.009 c 0 0 -2.172 -0.253 -2.172 -0.253 c 0 0 -2.096 -2.128 -2.096 -2.128 c 0 0 -2.331 -0.763 -2.331 -0.763 c 0 0 1.232 5.509 1.232 5.509 c 0 0 -0.942 0.691 -0.942 0.691 c 0 0 -1.501 3.065 -1.501 3.065 c 0 0 0.176 2.472 0.176 2.472 c 0 0 1.795 -0.807 1.795 -0.807 c 0 0 1.055 0.748 1.055 0.748 c 0 0 -0.204 2.644 -0.204 2.644 c 0 0 0.751 0.279 0.751 0.279 c 0 0 0.729 1.792 0.729 1.792 c 0 0 0.76 0.113 0.76 0.113 c 0 0 -2.122 1.127 -2.122 1.127 c 0 0 0.828 2.979 0.828 2.979 c 0 0 -2.93 13.106 -2.93 13.106 c 0 0 0.842 2.448 0.842 2.448 c 0 0 -0.887 0.991 -0.887 0.991 c 0 0 0.673 0.434 0.673 0.434 c 0 0 -0.593 1.588 -0.593 1.588 c 0 0 -1.563 0.854 -1.563 0.854 c 0 0 -0.278 1.842 -0.278 1.842 c 0 0 0.827 0.472 0.827 0.472 c 0 0 -0.269 1.131 -0.269 1.131 c 0 0 0.979 1.097 0.979 1.097 c 0 0 -0.397 1.534 -0.397 1.534 c 0 0 0.431 2.391 0.431 2.391 c 0 0 -2.988 5.758 -2.988 5.758 c 0 0 -0.953 4.385 -0.953 4.385 c 0 0 -2.081 -0.471 -2.081 -0.471 c 0 0 -1.103 0.817 -1.103 0.817 c 0 0 -1.05 2.219 -1.05 2.219 c 0 0 -0.139 4.177 -0.139 4.177 c 0 0 0.68 2.281 0.68 2.281 c 0 0 -0.686 0.065 -0.686 0.065 c 0 0 0.179 0.967 0.179 0.967 c 0 0 -0.602 0.846 -0.602 0.846 c 0 0 0.955 1.181 0.955 1.181 c 0 0 -1.242 1.21 -1.242 1.21 c 0 0 1.247 2.015 1.247 2.015 c 0 0 -1.014 1.203 -1.014 1.203 c 0 0 0.036 1.864 0.036 1.864 c 0 0 0.852 1.823 0.852 1.823 c 0 0 2.918 2.352 2.918 2.352 c 0 0 -0.818 2.98 -0.818 2.98 c 0 0 14.029 11.903 14.029 11.903 c 0 0 15.816 -11.179 15.816 -11.179 c 0 0 21.085 -13.183 21.085 -13.183 c 0 0 4.648 -5.149 4.648 -5.149 c 0 0 -0.721 -8.611 -0.721 -8.611 c 0 0 2.573 -1.672 2.573 -1.672 c 0 0 -1.918 -7.688 -1.918 -7.688 c 0 0 -0.564 -6.182 -0.564 -6.182 c 0 0 -3.111 -6.564 -3.111 -6.564 c 0 0 0.146 -1.528 0.146 -1.528 c 0 0 -0.641 -0.886 -0.641 -0.886 c 0 0 3.997 -0.134 3.997 -0.134 c 0 0 0.203 -3.901 0.203 -3.901 c 0 0 -2.073 0.452 -2.073 0.452 c 0 0 -3.52 -1.138 -3.52 -1.138 c 0 0 0.205 -1.673 0.205 -1.673 c 0 0 -3.122 -0.287 -3.122 -0.287 c 0 0 0.285 -2.856 0.285 -2.856 c 0 0 0.82 -1.435 0.82 -1.435 c 0 0 -1.142 -1.009 -1.142 -1.009 c 0 0 -0.124 -0.991 -0.124 -0.991 c 0 0 -1.457 -0.411 -1.457 -0.411 c 0 0 0.247 -2.655 0.247 -2.655 c 0 0 -0.565 -1.551 -0.565 -1.551 c 0 0 -1.828 -1.584 -1.828 -1.584 c 0 0 -3.495 0.817 -3.495 0.817 c 0 0 -1.613 -1.795 -1.613 -1.795 c 0 0 -2.206 -0.969 -2.206 -0.969 c 0 0 0.165 -0.989 0.165 -0.989 c 0 0 -0.863 -1.461 -0.863 -1.461 c 0 0 -1.119 -1.576 -1.119 -1.576 c 0 0 -0.215 -1.844 -0.215 -1.844 c 0 0 -5.541 0.295 -5.541 0.295 c 0 0 0.672 -4.884 0.672 -4.884 c 0 0 -3.971 -0.823 -3.971 -0.823 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"El-Bayadh"},"33":{"path":"M 454.129 387.74 c 0 0 -0.719 -20.563 -0.719 -20.563 c 0 0 -7.48 -4.23 -7.48 -4.23 c 0 0 -2.209 0.049 -2.209 0.049 c 0 0 -1.657 -1.011 -1.657 -1.011 c 0 0 -13.903 0.818 -13.903 0.818 c 0 0 -12.891 9.613 -12.891 9.613 c 0 0 -17.177 4.161 -17.177 4.161 c 0 0 -6.243 -4.393 -6.243 -4.393 c 0 0 1.974 -2.232 1.974 -2.232 c 0 0 -5.578 -12.361 -5.578 -12.361 c 0 0 -1.04 -10.938 -1.04 -10.938 c 0 0 0.237 -3.784 0.237 -3.784 c 0 0 -5.594 -8.033 -5.594 -8.033 c 0 0 -4.477 -0.14 -4.477 -0.14 c 0 0 -2.836 -2.179 -2.836 -2.179 c 0 0 -3.687 -6.237 -3.687 -6.237 c 0 0 -1.628 -4.169 -1.628 -4.169 c 0 0 -5.061 -6.142 -5.061 -6.142 c 0 0 -5.932 -16.141 -5.932 -16.141 c 0 0 -1.532 -1.133 -1.532 -1.133 c 0 0 -0.138 -1.004 -0.138 -1.004 c 0 0 -2.248 -0.6 -2.248 -0.6 c 0 0 -1.181 -1.556 -1.181 -1.556 c 0 0 1.06 -3.063 1.06 -3.063 c 0 0 2.819 -2.35 2.819 -2.35 c 0 0 -0.418 -1.914 -0.418 -1.914 c 0 0 -12.688 -11.211 -12.688 -11.211 c 0 0 -0.038 -8.717 -0.038 -8.717 c 0 0 -3.731 -17.58 -3.731 -17.58 c 0 0 1.773 -8.354 1.773 -8.354 c 0 0 -1.295 -33.809 -1.295 -33.809 c 0 0 15.876 -8.912 15.876 -8.912 c 0 0 2.796 0.888 2.796 0.888 c 0 0 63.493 -16.461 63.493 -16.461 c 0 0 2.411 8.262 2.411 8.262 c 0 0 -3.099 1.292 -3.099 1.292 c 0 0 -0.465 1.084 -0.465 1.084 c 0 0 0.689 2.608 0.689 2.608 c 0 0 2.979 3.429 2.979 3.429 c 0 0 6.166 11.784 6.166 11.784 c 0 0 2.729 9.976 2.729 9.976 c 0 0 1.149 6.791 1.149 6.791 c 0 0 -0.747 12.151 -0.747 12.151 c 0 0 3.65 10.479 3.65 10.479 c 0 0 -0.548 4.821 -0.548 4.821 c 0 0 -1.157 2.46 -1.157 2.46 c 0 0 -1.083 0.37 -1.083 0.37 c 0 0 1.397 0.222 1.397 0.222 c 0 0 -0.245 1.499 -0.245 1.499 c 0 0 -1.049 1.133 -1.049 1.133 c 0 0 -0.483 2.826 -0.483 2.826 c 0 0 0.133 2.473 0.133 2.473 c 0 0 2.239 7.597 2.239 7.597 c 0 0 1.692 2.23 1.692 2.23 c 0 0 0.099 5.493 0.099 5.493 c 0 0 -0.928 3.311 -0.928 3.311 c 0 0 -7.815 3.964 -7.815 3.964 c 0 0 -1.079 3.438 -1.079 3.438 c 0 0 -1.214 1.554 -1.214 1.554 c 0 0 16.01 20.327 16.01 20.327 c 0 0 0.78 10.061 0.78 10.061 c 0 0 4.756 7.704 4.756 7.704 c 0 0 3.475 2.664 3.475 2.664 c 0 0 4.406 -0.238 4.406 -0.238 c 0 0 1.539 -1.13 1.539 -1.13 c 0 0 2.129 -0.146 2.129 -0.146 c 0 0 1.531 1.491 1.531 1.491 c 0 0 1.29 -1.619 1.29 -1.619 c 0 0 1.709 0.246 1.709 0.246 c 0 0 1.289 0.52 1.289 0.52 c 0 0 2.539 2.53 2.539 2.53 c 0 0 2.012 0.66 2.012 0.66 c 0 0 7.08 4.37 7.08 4.37 c 0 0 4.112 -1.98 4.112 -1.98 c 0 0 10.551 17.862 10.551 17.862 c 0 0 -39.276 29.119 -39.276 29.119 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Illizi"},"34":{"path":"M 320.989 54.6068 c 0 0 -0.019 -1.603 -0.019 -1.603 c 0 0 2.087 -0.288 2.087 -0.288 c 0 0 -0.482 -2.927 -0.482 -2.927 c 0 0 1.669 -2.858 1.669 -2.858 c 0 0 -0.971 -0.972 -0.971 -0.972 c 0 0 0.127 -2.078 0.127 -2.078 c 0 0 -0.963 -0.272 -0.963 -0.272 c 0 0 -1.479 -2.545 -1.479 -2.545 c 0 0 -1.203 -0.363 -1.203 -0.363 c 0 0 -0.962 0.653 -0.962 0.653 c 0 0 -2.853 0.298 -2.853 0.298 c 0 0 -0.779 -0.983 -0.779 -0.983 c 0 0 0.3 -1.875 0.3 -1.875 c 0 0 -1.258 -0.672 -1.258 -0.672 c 0 0 -0.336 1.124 -0.336 1.124 c 0 0 -2.018 0.919 -2.018 0.919 c 0 0 -0.034 2.49 -0.034 2.49 c 0 0 -4.18 1.099 -4.18 1.099 c 0 0 -0.774 -1.701 -0.774 -1.701 c 0 0 -0.783 0.919 -0.783 0.919 c 0 0 -1.362 -0.093 -1.362 -0.093 c 0 0 -0.794 1.241 -0.794 1.241 c 0 0 -1.708 0.861 -1.708 0.861 c 0 0 -0.186 2.385 -0.186 2.385 c 0 0 -1.469 1.134 -1.469 1.134 c 0 0 0.569 1.104 0.569 1.104 c 0 0 2.211 -0.77 2.211 -0.77 c 0 0 2.755 0.987 2.755 0.987 c 0 0 3.392 -1.461 3.392 -1.461 c 0 0 0.863 2.774 0.863 2.774 c 0 0 -1.616 0.625 -1.616 0.625 c 0 0 -0.689 2.095 -0.689 2.095 c 0 0 2.823 0.292 2.823 0.292 c 0 0 -0.36 -0.99 -0.36 -0.99 c 0 0 1.328 -0.64 1.328 -0.64 c 0 0 -0.387 1.092 -0.387 1.092 c 0 0 0.664 0.766 0.664 0.766 c 0 0 2.07 -1.562 2.07 -1.562 c 0 0 2.722 -0.532 2.722 -0.532 c 0 0 1.327 1.669 1.327 1.669 c 0 0 1.167 -0.05 1.167 -0.05 c 0 0 0.184 1.218 0.184 1.218 c 0 0 1.407 -0.51 1.407 -0.51 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Bord-Bou-Arréridj"},"35":{"path":"M 284.507 35.4899 c 0 0 2.089 0.118 2.089 0.118 c 0 0 1.365 -0.714 1.365 -0.714 c 0 0 0.479 -0.984 0.479 -0.984 c 0 0 4.716 0.709 4.716 0.709 c 0 0 -0.218 -1.694 -0.218 -1.694 c 0 0 1.416 -0.319 1.416 -0.319 c 0 0 0.847 0.593 0.847 0.593 c 0 0 -0.165 -1.289 -0.165 -1.289 c 0 0 1.354 0.313 1.354 0.313 c 0 0 -0.771 -0.862 -0.771 -0.862 c 0 0 0.386 -1.441 0.386 -1.441 c 0 0 1.042 0.231 1.042 0.231 c 0 0 0.18 -0.604 0.18 -0.604 c 0 0 0.944 -0.077 0.944 -0.077 c 0 0 0.045 -0.779 0.045 -0.779 c 0 0 1.354 -1.163 1.354 -1.163 c 0 0 -0.135 -1.239 -0.135 -1.239 c 0 0 -3.063 -0.523 -3.063 -0.523 c 0 0 -3.242 1.034 -3.242 1.034 c 0 0 -0.906 1.079 -0.906 1.079 c 0 0 -3.85 1.986 -3.85 1.986 c 0 0 -2.822 -0.274 -2.822 -0.274 c 0 0 -0.271 0.609 -0.271 0.609 c 0 0 0.658 -0.216 0.658 -0.216 c 0 0 0.03 1.021 0.03 1.021 c 0 0 -2.279 0.745 -2.279 0.745 c 0 0 -0.66 -0.482 -0.66 -0.482 c 0 0 0.392 0.701 0.392 0.701 c 0 0 -0.689 0.547 -0.689 0.547 c 0 0 0.756 1.311 0.756 1.311 c 0 0 0.888 -0.351 0.888 -0.351 c 0 0 -0.536 0.479 -0.536 0.479 c 0 0 0.471 0.856 0.471 0.856 c 0 0 -0.385 0.413 -0.385 0.413 c 0 0 0.58 0.266 0.58 0.266 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Boumerdès"},"36":{"path":"M 378.015 24.8629 c 0 0 0.366 0.686 0.366 0.686 c 0 0 -1.139 0.009 -1.139 0.009 c 0 0 -0.031 1.328 -0.031 1.328 c 0 0 -0.939 -0.144 -0.939 -0.144 c 0 0 -0.969 1.141 -0.969 1.141 c 0 0 0.427 0.747 0.427 0.747 c 0 0 -0.57 1.447 -0.57 1.447 c 0 0 0.937 -0.31 0.937 -0.31 c 0 0 0.687 0.501 0.687 0.501 c 0 0 1.188 2.609 1.188 2.609 c 0 0 1.168 -0.382 1.168 -0.382 c 0 0 0.201 0.542 0.201 0.542 c 0 0 -0.047 -0.771 -0.047 -0.771 c 0 0 1.299 0.586 1.299 0.586 c 0 0 0.92 1.85 0.92 1.85 c 0 0 1.383 -0.02 1.383 -0.02 c 0 0 0.272 1.761 0.272 1.761 c 0 0 0.823 -1.258 0.823 -1.258 c 0 0 1.821 -0.823 1.821 -0.823 c 0 0 -0.327 -0.753 -0.327 -0.753 c 0 0 0.471 -0.48 0.471 -0.48 c 0 0 2.326 -0.796 2.326 -0.796 c 0 0 2.308 -2.13 2.308 -2.13 c 0 0 0.916 -0.119 0.916 -0.119 c 0 0 0.696 -2.05 0.696 -2.05 c 0 0 -0.425 -1.147 -0.425 -1.147 c 0 0 -0.861 -0.401 -0.861 -0.401 c 0 0 2.97 -0.532 2.97 -0.532 c 0 0 1.982 -1.323 1.982 -1.323 c 0 0 0.178 -0.521 0.178 -0.521 c 0 0 -1.188 -0.337 -1.188 -0.337 c 0 0 0.199 -2.228 0.199 -2.228 c 0 0 -4.452 1.441 -4.452 1.441 c 0 0 -1.429 -0.654 -1.429 -0.654 c 0 0 -1.822 0.272 -1.822 0.272 c 0 0 -0.981 -0.861 -0.981 -0.861 c 0 0 -4.735 2.676 -4.735 2.676 c 0 0 -3.623 0.444 -3.623 0.444 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"El-Taref"},"37":{"path":"M 144.372 270.771 c 0 0 -13.244 -1.683 -13.244 -1.683 c 0 0 -3.001 -2.419 -3.001 -2.419 c 0 0 -5.835 -7.099 -5.835 -7.099 c 0 0 -0.084 -7.644 -0.084 -7.644 c 0 0 -6.775 -12.676 -6.775 -12.676 c 0 0 -5.777 -21.184 -5.777 -21.184 c 0 0 -5.817 -3.172 -5.817 -3.172 c 0 0 -8.409 -0.353 -8.409 -0.353 c 0 0 -4.977 -4.181 -4.977 -4.181 c 0 0 -1.59 2.116 -1.59 2.116 c 0 0 -2.652 -1.77 -2.652 -1.77 c 0 0 -1.38 0.46 -1.38 0.46 c 0 0 0.685 -1.695 0.685 -1.695 c 0 0 -1.662 -0.829 -1.662 -0.829 c 0 0 -5.937 0.964 -5.937 0.964 c 0 0 -2.253 -0.648 -2.253 -0.648 c 0 0 -5.062 0.498 -5.062 0.498 c 0 0 -1.257 -0.472 -1.257 -0.472 c 0 0 -1.854 1.008 -1.854 1.008 c 0 0 -3.731 -0.108 -3.731 -0.108 c 0 0 -1.934 1.228 -1.934 1.228 c 0 0 -8.19 -2.131 -8.19 -2.131 c 0 0 -5.64 3.248 -5.64 3.248 c 0 0 -4.957 -0.147 -4.957 -0.147 c 0 0 -1.001 1.766 -1.001 1.766 c 0 0 -3.104 0.861 -3.104 0.861 c 0 0 -4.236 3.001 -4.236 3.001 c 0 0 -5.013 2.403 -5.013 2.403 c 0 0 -6.767 5.049 -6.767 5.049 c 0 0 -4.839 1.729 -4.839 1.729 c 0 0 -3.193 35.971 -3.193 35.971 c 0 0 65.958 50.321 65.958 50.321 c 0 0 12.962 -4.238 12.962 -4.238 c -0.001 0 7.204 -6.951 7.204 -6.951 c 0 0 14.179 0.237 14.179 0.237 c 0 0 3.038 -6.721 3.038 -6.721 c 0 0 7.18 -9.721 7.18 -9.721 c 0 0 2.317 -1.98 2.317 -1.98 c 0 0 3.858 -1.585 3.858 -1.585 c 0 0 7.686 0.562 7.686 0.562 c 0 0 1.78 -1.06 1.78 -1.06 c 0 0 3.324 -10.955 3.324 -10.955 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Tindouf"},"38":{"path":"M 244.49 53.8549 c 0 0 0.771 0.672 0.771 0.672 c 0 0 -1.122 1.335 -1.122 1.335 c 0 0 -0.706 -0.143 -0.706 -0.143 c 0 0 -0.332 -0.894 -0.332 -0.894 c 0 0 -0.993 0.542 -0.993 0.542 c 0 0 0.206 1.651 0.206 1.651 c 0 0 -0.649 1.073 -0.649 1.073 c 0 0 1.344 1.67 1.344 1.67 c 0 0 0.59 -2.298 0.59 -2.298 c 0 0 1.271 0.932 1.271 0.932 c 0 0 0.538 -0.305 0.538 -0.305 c 0 0 1.353 0.765 1.353 0.765 c 0 0 0.062 1.415 0.062 1.415 c 0 0 1.953 -0.175 1.953 -0.175 c 0 0 1.045 1.72 1.045 1.72 c 0 0 0.813 0.154 0.813 0.154 c 0 0 0.172 -1.047 0.172 -1.047 c 0 0 0.958 0.974 0.958 0.974 c 0 0 3.797 -0.434 3.797 -0.434 c 0 0 2.436 -1.337 2.436 -1.337 c 0 0 -0.56 0.671 -0.56 0.671 c 0 0 1.55 0.067 1.55 0.067 c 0 0 -0.029 0.951 -0.029 0.951 c 0 0 3.701 -0.316 3.701 -0.316 c 0 0 0.708 -1.967 0.708 -1.967 c 0 0 -2.81 -0.739 -2.81 -0.739 c 0 0 -0.347 -1.359 -0.347 -1.359 c 0 0 0.504 -0.619 0.504 -0.619 c 0 0 2.226 0.229 2.226 0.229 c 0 0 0.901 -3.905 0.901 -3.905 c 0 0 -1.561 -0.133 -1.561 -0.133 c 0 0 -0.842 -1.107 -0.842 -1.107 c 0 0 -1.228 -0.057 -1.228 -0.057 c 0 0 -0.44 -0.937 -0.44 -0.937 c 0 0 -2.687 0.709 -2.687 0.709 c 0 0 0.006 -1.004 0.006 -1.004 c 0 0 -2.634 2.928 -2.634 2.928 c 0 0 -0.774 0.021 -0.774 0.021 c 0 0 -0.399 -1.149 -0.399 -1.149 c 0 0 -2.134 -0.251 -2.134 -0.251 c 0 0 -1.909 -1.17 -1.909 -1.17 c 0 0 -1.035 -1.876 -1.035 -1.876 c 0 0 -1.22 1.163 -1.22 1.163 c 0 0 -0.035 0.865 -0.035 0.865 c 0 0 -2.264 0.618 -2.264 0.618 c 0 0 0.384 0.35 0.384 0.35 c 0 0 -0.518 0.333 -0.518 0.333 c 0 0 -0.061 1.414 -0.061 1.414 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Tissemsilt"},"39":{"path":"M 381.341 91.9338 c 0 0 -8.26 -0.416 -8.26 -0.416 c 0 0 -4.264 -1.485 -4.264 -1.485 c 0 0 -4.422 0.397 -4.422 0.397 c 0 0 -0.09 4.578 -0.09 4.578 c 0 0 -1.543 -0.353 -1.543 -0.353 c 0 0 -5.193 -3.142 -5.193 -3.142 c 0 0 -0.05 -2.156 -0.05 -2.156 c 0 0 -1.726 2.196 -1.726 2.196 c 0 0 -1.654 0.581 -1.654 0.581 c 0 0 -1.451 -1.393 -1.451 -1.393 c 0 0 -5.732 -2.047 -5.732 -2.047 c 0 0 -5.311 1.305 -5.311 1.305 c 0 0 -11.927 -1.27 -11.927 -1.27 c 0 0 -2.287 -1.521 -2.287 -1.521 c 0 0 -1.104 0.629 -1.104 0.629 c 0 0 0.72 0.627 0.72 0.627 c 0 0 -1.889 1.328 -1.889 1.328 c 0 0 1.198 1.354 1.198 1.354 c 0 0 -0.702 1.853 -0.702 1.853 c 0 0 3.667 3.255 3.667 3.255 c 0 0 -1.968 4.695 -1.968 4.695 c 0 0 -0.858 4.001 -0.858 4.001 c 0 0 1.083 2.091 1.083 2.091 c 0 0 0.35 4.628 0.35 4.628 c 0 0 0.688 1.585 0.688 1.585 c 0 0 -0.662 1.726 -0.662 1.726 c 0 0 17.299 -0.319 17.299 -0.319 c 0 0 -0.374 -2.7 -0.374 -2.7 c 0 0 -1.172 -1.467 -1.172 -1.467 c 0 0 0.955 -1.07 0.955 -1.07 c 0 0 -0.04 -2.557 -0.04 -2.557 c 0 0 -1.138 -2.602 -1.138 -2.602 c 0 0 0.047 -1.4 0.047 -1.4 c 0 0 0.665 -0.606 0.665 -0.606 c 0 0 0.552 1.049 0.552 1.049 c 0 0 2.721 -2.135 2.721 -2.135 c 0 0 0.762 -0.112 0.762 -0.112 c 0 0 0.521 1.041 0.521 1.041 c 0 0 0.319 -0.807 0.319 -0.807 c 0 0 1.219 7.663 1.219 7.663 c 0 0 8.097 22.969 8.097 22.969 c 0 0 7.777 11.58 7.777 11.58 c 0 0 5.501 6.366 5.501 6.366 c 0 0 39.729 -4.259 39.729 -4.259 c 0 0 -15.994 -9.721 -15.994 -9.721 c 0 0 -1.19 -8.167 -1.19 -8.167 c 0 0 -4.769 -5.554 -4.769 -5.554 c 0 0 -0.044 -1.279 -0.044 -1.279 c 0 0 -4.671 -1.931 -4.671 -1.931 c 0 0 -1.588 -0.012 -1.588 -0.012 c 0 0 -1.992 -6.096 -1.992 -6.096 c 0 0 -3.565 -5.578 -3.565 -5.578 c 0 0 -0.276 -2.739 -0.276 -2.739 c 0 0 -1.411 -1.059 -1.411 -1.059 c 0 0 0.465 -1.005 0.465 -1.005 c 0 0 -0.633 -1.784 -0.633 -1.784 c 0 0 0.574 -2.841 0.574 -2.841 c 0 0 -0.731 -1.183 -0.731 -1.183 c 0 0 1.695 -1.198 1.695 -1.198 c 0 0 0.905 -2.192 0.905 -2.192 c 0 0 1.676 0.677 1.676 0.677 c 0 0 1.6 -1.261 1.6 -1.261 c 0 0 -0.104 -0.757 -0.104 -0.757 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"El Oued"},"40":{"path":"M 368.82 90.0319 c 0 0 0.773 -5.083 0.773 -5.083 c 0 0 2.108 -3.938 2.108 -3.938 c 0 0 0.024 -1.697 0.024 -1.697 c 0 0 -0.637 -0.956 -0.637 -0.956 c 0 0 0.749 -2.004 0.749 -2.004 c 0 0 -0.868 -2.387 -0.868 -2.387 c 0 0 -1.271 -0.098 -1.271 -0.098 c 0 0 -0.661 0.97 -0.661 0.97 c 0 0 -0.441 1.352 -0.441 1.352 c 0 0 0.5 -0.146 0.5 -0.146 c 0 0 -0.088 1.582 -0.088 1.582 c 0 0 -0.908 -2.111 -0.908 -2.111 c 0 0 1.39 -3.602 1.39 -3.602 c 0 0 1.306 -0.817 1.306 -0.817 c 0 0 1.429 -2.436 1.429 -2.436 c 0 0 -1.051 -1.557 -1.051 -1.557 c 0 0 0.787 -1.188 0.787 -1.188 c 0 0 -0.763 -0.573 -0.763 -0.573 c 0 0 -0.117 -2.443 -0.117 -2.443 c 0 0 3.133 -1.131 3.133 -1.131 c 0 0 -0.659 -1.052 -0.659 -1.052 c 0 0 -0.692 -0.061 -0.692 -0.061 c 0 0 -0.333 -1.191 -0.333 -1.191 c 0 0 -0.393 -0.313 -0.393 -0.313 c 0 0 -0.6 0.601 -0.6 0.601 c 0 0 0.179 -0.579 0.179 -0.579 c 0 0 -1.313 -0.926 -1.313 -0.926 c 0 0 -0.409 1.4 -0.409 1.4 c 0 0 -1.048 0.308 -1.048 0.308 c 0 0 0.063 -2.164 0.063 -2.164 c 0 0 -1.77 -0.877 -1.77 -0.877 c 0 0 -0.119 0.549 -0.119 0.549 c 0 0 -1.815 -0.27 -1.815 -0.27 c 0 0 -0.957 2.009 -0.957 2.009 c 0 0 -1.648 -0.483 -1.648 -0.483 c 0 0 0.408 -1.016 0.408 -1.016 c 0 0 -0.614 -0.53 -0.614 -0.53 c 0 0 -4.031 0.609 -4.031 0.609 c 0 0 -0.774 -1.595 -0.774 -1.595 c 0 0 -0.214 1.337 -0.214 1.337 c 0 0 0.74 1.491 0.74 1.491 c 0 0 -0.612 1.515 -0.612 1.515 c 0 0 -2.418 0.598 -2.418 0.598 c 0 0 -1.491 1.387 -1.491 1.387 c 0 0 0.634 1.334 0.634 1.334 c 0 0 -0.178 1.438 -0.178 1.438 c 0 0 1.052 0.219 1.052 0.219 c 0 0 -1.644 1.396 -1.644 1.396 c 0 0 0.23 2.636 0.23 2.636 c 0 0 -1.308 1.429 -1.308 1.429 c 0 0 0.438 1.353 0.438 1.353 c 0 0 -0.401 0.844 -0.401 0.844 c 0 0 0.802 0.146 0.802 0.146 c 0 0 1.347 2.256 1.347 2.256 c 0 0 -0.499 0.58 -0.499 0.58 c 0 0 0.611 0.482 0.611 0.482 c 0 0 -0.812 0.796 -0.812 0.796 c 0 0 0.634 2.146 0.634 2.146 c 0 0 1.087 -0.603 1.087 -0.603 c 0 0 0.737 -1.717 0.737 -1.717 c 0 0 1.138 -0.063 1.138 -0.063 c 0 0 -0.399 0.473 -0.399 0.473 c 0 0 1.047 1.056 1.047 1.056 c 0 0 -0.415 0.997 -0.415 0.997 c 0 0 0.821 -0.196 0.821 -0.196 c 0 0 -0.726 2.389 -0.726 2.389 c 0 0 0.163 3.493 0.163 3.493 c 0 0 -1.047 2.038 -1.047 2.038 c 0 0 0.517 1.927 0.517 1.927 c 0 0 0.05 2.157 0.05 2.157 c 0 0 5.193 3.14 5.193 3.14 c 0 0 1.543 0.354 1.543 0.354 c 0 0 0.09 -4.578 0.09 -4.578 c 0 0 4.421 -0.406 4.421 -0.406 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Khenchela"},"41":{"path":"M 389.163 47.3318 c 0 0 -2.177 -1.081 -2.177 -1.081 c 0 0 -2.499 1.112 -2.499 1.112 c 0 0 -1.255 -0.156 -1.255 -0.156 c 0 0 -2.103 2.353 -2.103 2.353 c 0 0 -1.622 0.03 -1.622 0.03 c 0 0 -1.877 -1.4 -1.877 -1.4 c 0 0 -0.397 1.363 -0.397 1.363 c 0 0 -0.817 0.485 -0.817 0.485 c 0 0 0.354 1.537 0.354 1.537 c 0 0 -2.814 0.214 -2.814 0.214 c 0 0 0.03 -1.478 0.03 -1.478 c 0 0 -2.674 -0.94 -2.674 -0.94 c 0 0 -1.024 -1.331 -1.024 -1.331 c 0 0 -0.649 -2.12 -0.649 -2.12 c 0 0 -0.736 -0.046 -0.736 -0.046 c 0 0 -0.424 -2.263 -0.424 -2.263 c 0 0 -0.75 -0.918 -0.75 -0.918 c 0 0 0.494 -1.348 0.494 -1.348 c 0 0 2.854 0.539 2.854 0.539 c 0 0 2.52 -0.934 2.52 -0.934 c 0 0 1.194 0.271 1.194 0.271 c 0 0 2.159 -2.081 2.159 -2.081 c 0 0 2.218 -0.172 2.218 -0.172 c 0 0 0.375 -0.438 0.375 -0.438 c 0 0 -1.08 -1.382 -1.08 -1.382 c 0 0 0.194 -1.316 0.194 -1.316 c 0 0 1.022 0.411 1.022 0.411 c 0 0 1.832 -1.544 1.832 -1.544 c 0 0 1.383 -0.021 1.383 -0.021 c 0 0 0.272 1.761 0.272 1.761 c 0 0 0.821 -1.258 0.821 -1.258 c 0 0 1.822 -0.823 1.822 -0.823 c 0 0 3.195 0.846 3.195 0.846 c 0 0 0.745 -0.53 0.745 -0.53 c 0 0 1.177 0.636 1.177 0.636 c 0 0 -0.594 1.719 -0.594 1.719 c 0 0 0.381 1.252 0.381 1.252 c 0 0 -1.052 1.066 -1.052 1.066 c 0 0 0.396 0.812 0.396 0.812 c 0 0 -0.868 1.572 -0.868 1.572 c 0 0 0.833 1.825 0.833 1.825 c 0 0 -0.868 1.552 -0.868 1.552 c 0 0 0.009 2.224 0.009 2.224 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Souk Ahras"},"42":{"path":"M 250.882 35.7498 c 0 0 -1.098 2.467 -1.098 2.467 c 0 0 1.42 2.608 1.42 2.608 c 0 0 1.47 -1.099 1.47 -1.099 c 0 0 0.288 -1.11 0.288 -1.11 c 0 0 3.892 0.806 3.892 0.806 c 0 0 2.96 -0.969 2.96 -0.969 c 0 0 2.729 0.814 2.729 0.814 c 0 0 4.677 0.011 4.677 0.011 c 0 0 1.037 -1.463 1.037 -1.463 c 0 0 1.568 0.302 1.568 0.302 c 0 0 0.447 -0.642 0.447 -0.642 c 0 0 -0.442 -0.802 -0.442 -0.802 c 0 0 1.06 -0.14 1.06 -0.14 c 0 0 1.479 -1.647 1.479 -1.647 c 0 0 2.109 -0.599 2.109 -0.599 c 0 0 -0.34 -1.022 -0.34 -1.022 c 0 0 -0.134 -1.446 -0.134 -1.446 c 0 0 -5.189 2.836 -5.189 2.836 c 0 0 -2.726 -0.038 -2.726 -0.038 c 0 0 -0.48 -1.023 -0.48 -1.023 c 0 0 -1.177 -0.279 -1.177 -0.279 c 0 0 -6.739 2.031 -6.739 2.031 c 0 0 -2.311 -0.272 -2.311 -0.272 c 0 0 -4.5 0.676 -4.5 0.676 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Tipaza"},"43":{"path":"M 344.575 51.2509 c 0 0 -3.583 -0.418 -3.583 -0.418 c 0 0 -0.49 0.384 -0.49 0.384 c 0 0 1.2 -1.293 1.2 -1.293 c 0 0 -1.162 -1.213 -1.162 -1.213 c 0 0 0.688 -0.604 0.688 -0.604 c 0 0 -0.284 -2.085 -0.284 -2.085 c 0 0 -1.715 -0.398 -1.715 -0.398 c 0 0 -0.049 -1.869 -0.049 -1.869 c 0 0 0.978 -0.521 0.978 -0.521 c 0 0 -2.188 -2.367 -2.188 -2.367 c 0 0 0.097 -1.172 0.097 -1.172 c 0 0 -1.395 -0.427 -1.395 -0.427 c 0 0 0.114 -1.347 0.114 -1.347 c 0 0 -1.244 -0.953 -1.244 -0.953 c 0 0 0.125 -2.048 0.125 -2.048 c 0 0 -0.558 -0.717 -0.558 -0.717 c 0 0 1.112 -0.339 1.112 -0.339 c 0 0 1.367 0.723 1.367 0.723 c 0 0 1.504 -0.447 1.504 -0.447 c 0 0 1.242 -1.67 1.242 -1.67 c 0 0 4.855 0.813 4.855 0.813 c 0 0 1.86 -1.232 1.86 -1.232 c 0 0 0.435 0.64 0.435 0.64 c 0 0 2.741 0.48 2.741 0.48 c 0 0 0.968 -0.175 0.968 -0.175 c 0 0 -0.021 1.6 -0.021 1.6 c 0 0 -3.296 0.765 -3.296 0.765 c 0 0 0.284 2.021 0.284 2.021 c 0 0 -0.921 1.877 -0.921 1.877 c 0 0 1.318 -0.403 1.318 -0.403 c 0 0 1.126 0.879 1.126 0.879 c 0 0 -0.265 1.486 -0.265 1.486 c 0 0 0.788 0.496 0.788 0.496 c 0 0 1.019 -0.295 1.019 -0.295 c 0 0 0.938 0.805 0.938 0.805 c 0 0 -0.108 1.354 -0.108 1.354 c 0 0 -2.365 0.863 -2.365 0.863 c 0 0 -0.161 2.791 -0.161 2.791 c 0 0 -1.221 1.531 -1.221 1.531 c 0 0 -0.78 -0.115 -0.78 -0.115 c 0 0 0.213 0.771 0.213 0.771 c 0 0 -0.716 -0.51 -0.716 -0.51 c 0 0 -1.649 0.227 -1.649 0.227 c 0 0 -0.801 2.112 -0.801 2.112 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Mila"},"44":{"path":"M 270.211 41.3839 c 0 0 -2.993 -2.104 -2.993 -2.104 c 0 0 -4.677 -0.01 -4.677 -0.01 c 0 0 -2.729 -0.815 -2.729 -0.815 c 0 0 -2.959 0.969 -2.959 0.969 c 0 0 -3.893 -0.807 -3.893 -0.807 c 0 0 -0.288 1.111 -0.288 1.111 c 0 0 -1.47 1.098 -1.47 1.098 c 0 0 -1.42 -2.607 -1.42 -2.607 c 0 0 -2.229 1.641 -2.229 1.641 c 0 0 -0.129 1.172 -0.129 1.172 c 0 0 1.495 1.622 1.495 1.622 c 0 0 -1.196 1.17 -1.196 1.17 c 0 0 1.829 0.536 1.829 0.536 c 0 0 -1.33 0.886 -1.33 0.886 c 0 0 0.004 1.019 0.004 1.019 c 0 0 0.681 0.703 0.681 0.703 c 0 0 0.8 -0.179 0.8 -0.179 c 0 0 -0.257 1.099 -0.257 1.099 c 0 0 0.683 1.606 0.683 1.606 c 0 0 1.268 0.909 1.268 0.909 c 0 0 -0.254 1.759 -0.254 1.759 c 0 0 2.133 0.25 2.133 0.25 c 0 0 0.4 1.149 0.4 1.149 c 0 0 0.774 -0.02 0.774 -0.02 c 0 0 2.635 -2.928 2.635 -2.928 c 0 0 -0.007 1.003 -0.007 1.003 c 0 0 2.686 -0.708 2.686 -0.708 c 0 0 0.44 0.937 0.44 0.937 c 0 0 1.229 0.056 1.229 0.056 c 0 0 0.841 1.108 0.841 1.108 c 0 0 1.563 0.131 1.563 0.131 c 0 0 1.051 -1.104 1.051 -1.104 c 0 0 -0.338 -0.876 -0.338 -0.876 c 0 0 1.985 0.074 1.985 0.074 c 0 0 0.315 -2.776 0.315 -2.776 c 0 0 0.861 0.234 0.861 0.234 c 0 0 1.841 -1.11 1.841 -1.11 c 0 0 0.063 -1.843 0.063 -1.843 c 0 0 -1.346 -0.305 -1.346 -0.305 c 0 0 -0.084 -1.369 -0.084 -1.369 c 0 0 -0.708 -0.199 -0.708 -0.199 c 0 0 0.625 -1.91 0.625 -1.91 c 0 0 1.347 0.043 1.347 0.043 c 0 0 0.758 -0.615 0.758 -0.615 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Aïn Defla"},"45":{"path":"M 190.745 93.6368 c 0 0 1.08 1.632 1.08 1.632 c 0 0 2.133 -1.567 2.133 -1.567 c 0 0 0.589 1.018 0.589 1.018 c 0 0 0.342 -0.416 0.342 -0.416 c 0 0 2.966 0.896 2.966 0.896 c 0 0 4.055 -2.511 4.055 -2.511 c 0 0 1.843 1.041 1.843 1.041 c 0 0 3.133 9.769 3.133 9.769 c 0 0 0.314 -1.128 0.314 -1.128 c 0 0 0.854 0.04 0.854 0.04 c 0 0 2.091 -2.885 2.091 -2.885 c 0 0 1.632 -0.712 1.632 -0.712 c 0 0 1.374 0.198 1.374 0.198 c 0 0 0.176 2.472 0.176 2.472 c 0 0 1.795 -0.807 1.795 -0.807 c 0 0 1.055 0.748 1.055 0.748 c 0 0 -0.204 2.644 -0.204 2.644 c 0 0 0.751 0.279 0.751 0.279 c 0 0 0.729 1.792 0.729 1.792 c 0 0 0.76 0.113 0.76 0.113 c 0 0 -2.123 1.127 -2.123 1.127 c 0 0 0.829 2.979 0.829 2.979 c 0 0 -2.931 13.106 -2.931 13.106 c 0 0 0.843 2.448 0.843 2.448 c 0 0 -0.887 0.991 -0.887 0.991 c 0 0 0.673 0.434 0.673 0.434 c 0 0 -0.593 1.588 -0.593 1.588 c 0 0 -1.563 0.854 -1.563 0.854 c 0 0 -0.278 1.842 -0.278 1.842 c 0 0 0.827 0.472 0.827 0.472 c 0 0 -0.27 1.131 -0.27 1.131 c 0 0 0.979 1.097 0.979 1.097 c 0 0 -0.398 1.535 -0.398 1.535 c 0 0 0.432 2.39 0.432 2.39 c 0 0 -2.988 5.758 -2.988 5.758 c 0 0 -1.629 2.4 -1.629 2.4 c 0 0 -2.417 -0.518 -2.417 -0.518 c 0 0 -1.803 1.33 -1.803 1.33 c 0 0 -6.79 -1.902 -6.79 -1.902 c 0 0 -5.834 3.103 -5.834 3.103 c 0 0 -0.298 -1.563 -0.298 -1.563 c 0 0 -1.384 -0.042 -1.384 -0.042 c 0 0 0.542 -2.863 0.542 -2.863 c 0 0 -1.428 -0.123 -1.428 -0.123 c 0 0 -0.163 -2.392 -0.163 -2.392 c 0 0 2.868 -2.595 2.868 -2.595 c 0 0 -5.768 -4.648 -5.768 -4.648 c 0 0 -2.38 -1.182 -2.38 -1.182 c 0 0 -3.35 -5.675 -3.35 -5.675 c 0 0 1.262 -0.418 1.262 -0.418 c 0 0 0.377 -2.404 0.377 -2.404 c 0 0 -2.205 -2.094 -2.205 -2.094 c 0 0 -1.938 -3.413 -1.938 -3.413 c 0 0 0.196 -2.568 0.196 -2.568 c 0 0 1.717 -3.813 1.717 -3.813 c 0 0 -0.095 -1.926 -0.095 -1.926 c 0 0 -1.187 -2.013 -1.187 -2.013 c 0 0 -1.795 -0.51 -1.795 -0.51 c 0 0 0.209 -0.893 0.209 -0.893 c 0 0 1.274 -0.928 1.274 -0.928 c 0 0 -0.546 -2.521 -0.546 -2.521 c 0 0 1.185 -5.71 1.185 -5.71 c 0 0 3.61 -2.62 3.61 -2.62 c 0 0 4.992 0.022 4.992 0.022 c 0 0 1.227 -1.408 1.227 -1.408 c 0 0 1.531 -0.481 1.531 -0.481 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Naâma"},"46":{"path":"M 193.764 72.7758 c 0 0 -0.686 0.069 -0.686 0.069 c 0 0 -0.264 -0.909 -0.264 -0.909 c 0 0 -3.488 -1.748 -3.488 -1.748 c 0 0 -0.331 0.33 -0.331 0.33 c 0 0 -0.372 -0.771 -0.372 -0.771 c 0 0 -1.081 0.455 -1.081 0.455 c 0 0 -2.338 -0.793 -2.338 -0.793 c 0 0 -0.918 1.336 -0.918 1.336 c 0 0 -1.082 0.265 -1.082 0.265 c 0 0 -1.053 -0.668 -1.053 -0.668 c 0 0 0.202 -0.954 0.202 -0.954 c 0 0 -0.848 -0.622 -0.848 -0.622 c 0 0 2.669 -1.768 2.669 -1.768 c 0 0 1.627 0.143 1.627 0.143 c 0 0 2.119 -1.243 2.119 -1.243 c 0 0 2.023 -5.607 2.023 -5.607 c 0 0 0.896 0.035 0.896 0.035 c 0 0 2.06 -1.622 2.06 -1.622 c 0 0 1.342 1.43 1.342 1.43 c 0 0 -0.223 0.718 -0.223 0.718 c 0 0 1.008 0.007 1.008 0.007 c 0 0 -0.383 1.02 -0.383 1.02 c 0 0 -0.893 0.251 -0.893 0.251 c 0 0 0.174 1.591 0.174 1.591 c 0 0 0.012 -0.62 0.012 -0.62 c 0 0 0.895 -0.046 0.895 -0.046 c 0 0 -0.201 -0.597 -0.201 -0.597 c 0 0 0.82 0.657 0.82 0.657 c 0 0 1.569 0.021 1.569 0.021 c 0 0 5.065 -1.624 5.065 -1.624 c 0 0 0.775 2.923 0.775 2.923 c 0 0 -0.771 0.563 -0.771 0.563 c 0 0 -0.027 1.102 -0.027 1.102 c 0 0 -2.838 0.497 -2.838 0.497 c 0 0 -0.066 0.729 -0.066 0.729 c 0 0 -0.97 0.456 -0.97 0.456 c 0 0 -0.813 -0.548 -0.813 -0.548 c 0 0 -0.781 1.395 -0.781 1.395 c 0 0 -0.672 -0.18 -0.672 -0.18 c 0 0 0.286 1.946 0.286 1.946 c 0 0 -1.38 0.461 -1.38 0.461 c 0 0 -0.248 1.451 -0.248 1.451 c 0 0 -0.815 0.469 -0.815 0.469 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Aïn Témouchent"},"47":{"path":"M 280.112 227.213 c 0 0 8.227 -3.631 8.227 -3.631 c 0 0 6.762 -14.091 6.762 -14.091 c 0 0 1.58 -1.093 1.58 -1.093 c 0 0 10.495 -36.704 10.495 -36.704 c 0 0 3.17 -8.157 3.17 -8.157 c 0 0 0.768 -17.01 0.768 -17.01 c 0 0 6.761 -7.312 6.761 -7.312 c 0 0 5.039 -9.304 5.039 -9.304 c 0 0 -11.871 -3.224 -11.871 -3.224 c 0 0 -13.08 -0.901 -13.08 -0.901 c 0 0 -0.77 0.422 -0.77 0.422 c 0 0 -2.684 -1.107 -2.684 -1.107 c 0 0 -0.903 0.387 -0.903 0.387 c 0 0 -0.305 -0.512 -0.305 -0.512 c 0 0 -0.417 0.754 -0.417 0.754 c 0 0 -0.439 -0.318 -0.439 -0.318 c 0 0 -0.945 0.734 -0.945 0.734 c 0 0 -7.853 0.362 -7.853 0.362 c 0 0 3.66 2.229 3.66 2.229 c 0 0 0.331 2.904 0.331 2.904 c 0 0 -8.55 -2.039 -8.55 -2.039 c 0 0 -5.37 1.604 -5.37 1.604 c 0 0 -10.825 0.946 -10.825 0.946 c 0 0 0.565 6.182 0.565 6.182 c 0 0 1.917 7.688 1.917 7.688 c 0 0 -2.573 1.672 -2.573 1.672 c 0 0 0.721 8.612 0.721 8.612 c 0 0 -4.648 5.148 -4.648 5.148 c 0 0 -0.682 28.618 -0.682 28.618 c 0 0 -2.644 13.284 -2.644 13.284 c 0 0 4.271 23.744 4.271 23.744 c 0 0 -1.117 4.883 -1.117 4.883 c 0 0 10.266 -3.805 10.266 -3.805 c 0 0 11.143 -0.965 11.143 -0.965 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Ghardaïa"},"48":{"path":"M 232.66 64.2719 c 0 0 -2.048 -0.317 -2.048 -0.317 c 0 0 -0.295 -0.662 -0.295 -0.662 c 0 0 -1.721 0.085 -1.721 0.085 c 0 0 -0.918 -0.917 -0.918 -0.917 c 0 0 -1.891 0.041 -1.891 0.041 c 0 0 -1.282 -1.803 -1.282 -1.803 c 0 0 -0.858 0.611 -0.858 0.611 c 0 0 -0.125 -0.523 -0.125 -0.523 c 0 0 -1.717 0.492 -1.717 0.492 c 0 0 -1.217 -3.61 -1.217 -3.61 c 0 0 -0.578 -0.193 -0.578 -0.193 c 0 0 1.744 -2.074 1.744 -2.074 c 0 0 0.867 -0.538 0.867 -0.538 c 0 0 0.877 0.373 0.877 0.373 c 0 0 1.332 -1.438 1.332 -1.438 c 0 0 -0.229 -0.909 -0.229 -0.909 c 0 0 0.59 -0.991 0.59 -0.991 c 0 0 -0.674 0.036 -0.674 0.036 c 0 0 -0.313 -0.769 -0.313 -0.769 c 0 0 0.846 -1.018 0.846 -1.018 c 0 0 1.226 0.572 1.226 0.572 c 0 0 0.555 -0.605 0.555 -0.605 c 0 0 2.126 -0.093 2.126 -0.093 c 0 0 -0.359 -0.87 -0.359 -0.87 c 0 0 0.634 -0.699 0.634 -0.699 c 0 0 -1.289 -1.35 -1.289 -1.35 c 0 0 1.979 -2.472 1.979 -2.472 c 0 0 2.056 0.32 2.056 0.32 c 0 0 2.173 -0.8 2.173 -0.8 c 0 0 0.468 1.894 0.468 1.894 c 0 0 0.536 0.021 0.536 0.021 c 0 0 -0.826 1.687 -0.826 1.687 c 0 0 0.509 -0.155 0.509 -0.155 c 0 0 0.519 1.997 0.519 1.997 c 0 0 1.775 -0.663 1.775 -0.663 c 0 0 -0.347 0.244 -0.347 0.244 c 0 0 0.593 0.041 0.593 0.041 c 0 0 0.541 1.179 0.541 1.179 c 0 0 1.563 0.984 1.563 0.984 c 0 0 2.838 -0.813 2.838 -0.813 c 0 0 2.173 3.286 2.173 3.286 c 0 0 0.771 0.672 0.771 0.672 c 0 0 -1.122 1.335 -1.122 1.335 c 0 0 -0.706 -0.142 -0.706 -0.142 c 0 0 -0.332 -0.895 -0.332 -0.895 c 0 0 -0.993 0.542 -0.993 0.542 c 0 0 0.206 1.651 0.206 1.651 c 0 0 -0.649 1.074 -0.649 1.074 c 0 0 -1.449 0.571 -1.449 0.571 c 0 0 -0.567 0.986 -0.567 0.986 c 0 0 -2.058 -0.207 -2.058 -0.207 c 0 0 -0.165 0.913 -0.165 0.913 c 0 0 -0.811 -0.11 -0.811 -0.11 c 0 0 -0.112 0.868 -0.112 0.868 c 0 0 -1.215 0.097 -1.215 0.097 c 0 0 -1.728 2.879 -1.728 2.879 c 0 0 -0.903 0.185 -0.903 0.185 c 0 0 0 0 0 0 c 0 0 0 0 0 0","name":"Relizane"}}, "height": 500, "width": 508});
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.brazil.js b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.brazil.js new file mode 100644 index 0000000..9dbf928 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.brazil.js @@ -0,0 +1,2 @@ +/** Add Brazil Map Data Points */ +jQuery.fn.vectorMap('addMap', 'brazil_br', {"width":220000,"height":194010,"pathes":{"br-22":{"name":"Rondônia","path":"M39760.00 75303.00C39803.00 75270.67 39846.00 75238.33 39889.00 75206.00C39889.00 75163.00 39889.00 75120.00 39889.00 75077.00C39878.33 75066.33 39867.67 75055.67 39857.00 75045.00C39867.67 75034.33 39878.33 75023.67 39889.00 75013.00C39910.33 75023.67 39931.67 75034.33 39953.00 75045.00C40017.33 75045.00 40081.67 75045.00 40146.00 75045.00C40178.33 75023.67 40210.67 75002.33 40243.00 74981.00C40264.33 74959.67 40285.67 74938.33 40307.00 74917.00C40317.67 74884.67 40328.33 74852.33 40339.00 74820.00C40435.33 74766.33 40531.67 74712.67 40628.00 74659.00C40649.67 74637.67 40671.33 74616.33 40693.00 74595.00C40725.00 74605.67 40757.00 74616.33 40789.00 74627.00C40799.67 74616.33 40810.33 74605.67 40821.00 74595.00C40864.00 74584.33 40907.00 74573.67 40950.00 74563.00C40971.33 74531.00 40992.67 74499.00 41014.00 74467.00C41078.33 74456.00 41142.67 74445.00 41207.00 74434.00C41207.00 74402.00 41207.00 74370.00 41207.00 74338.00C41217.67 74316.67 41228.33 74295.33 41239.00 74274.00C41282.06 74241.58 41325.20 74209.25 41368.22 74176.78C41411.15 74134.19 41454.07 74091.59 41497.00 74049.00C41518.33 74006.00 41539.67 73963.00 41561.00 73920.00C41614.67 73877.00 41668.33 73834.00 41722.00 73791.00C41722.00 73716.00 41722.00 73641.00 41722.00 73566.00C41711.00 73534.00 41700.00 73502.00 41689.00 73470.00C41657.00 73448.33 41625.00 73426.67 41593.00 73405.00C41593.00 73394.33 41593.00 73383.67 41593.00 73373.00C41603.67 73362.33 41614.33 73351.67 41625.00 73341.00C41678.67 73362.33 41732.33 73383.67 41786.00 73405.00C41796.67 73405.00 41807.33 73405.00 41818.00 73405.00C41839.33 73394.33 41860.67 73383.67 41882.00 73373.00C41914.33 73394.67 41946.67 73416.33 41979.00 73438.00C42000.33 73416.33 42021.67 73394.67 42043.00 73373.00C42053.67 73383.67 42064.33 73394.33 42075.00 73405.00C42075.00 73426.67 42075.00 73448.33 42075.00 73470.00C42118.00 73470.00 42161.00 73470.00 42204.00 73470.00C42214.67 73459.33 42225.33 73448.67 42236.00 73438.00C42225.33 73405.67 42214.67 73373.33 42204.00 73341.00C42246.67 73341.00 42289.33 73341.00 42332.00 73341.00C42364.33 73373.33 42396.67 73405.67 42429.00 73438.00C42439.67 73438.00 42450.33 73438.00 42461.00 73438.00C42482.33 73427.00 42503.67 73416.00 42525.00 73405.00C42546.67 73405.00 42568.33 73405.00 42590.00 73405.00C42643.67 73426.67 42697.33 73448.33 42751.00 73470.00C42772.33 73448.33 42793.67 73426.67 42815.00 73405.00C42825.67 73405.00 42836.33 73405.00 42847.00 73405.00C42879.00 73383.67 42911.00 73362.33 42943.00 73341.00C42964.67 73341.00 42986.33 73341.00 43008.00 73341.00C43040.00 73351.67 43072.00 73362.33 43104.00 73373.00C43168.33 73373.00 43232.67 73373.00 43297.00 73373.00C43318.33 73362.33 43339.67 73351.67 43361.00 73341.00C43361.00 73330.33 43361.00 73319.67 43361.00 73309.00C43425.33 73309.00 43489.67 73309.00 43554.00 73309.00C43575.67 73319.67 43597.33 73330.33 43619.00 73341.00C43651.00 73341.00 43683.00 73341.00 43715.00 73341.00C43715.00 73362.33 43715.00 73383.67 43715.00 73405.00C43736.33 73416.00 43757.67 73427.00 43779.00 73438.00C43790.10 73448.71 43801.10 73459.54 43812.26 73470.17C43844.17 73491.45 43876.09 73512.72 43908.00 73534.00C43918.73 73566.42 43929.34 73598.89 43940.14 73631.28C43950.76 73652.52 43961.38 73673.76 43972.00 73695.00C44004.33 73705.67 44036.67 73716.33 44069.00 73727.00C44090.33 73727.00 44111.67 73727.00 44133.00 73727.00C44165.33 73759.00 44197.67 73791.00 44230.00 73823.00C44240.67 73823.00 44251.33 73823.00 44262.00 73823.00C44272.67 73834.00 44283.33 73845.00 44294.00 73856.00C44294.00 73888.00 44294.00 73920.00 44294.00 73952.00C44304.67 73952.00 44315.33 73952.00 44326.00 73952.00C44347.33 73941.33 44368.67 73930.67 44390.00 73920.00C44401.00 73973.67 44412.00 74027.33 44423.00 74081.00C44433.67 74081.00 44444.33 74081.00 44455.00 74081.00C44465.67 74091.67 44476.33 74102.33 44487.00 74113.00C44497.67 74145.00 44508.33 74177.00 44519.00 74209.00C44529.67 74209.00 44540.33 74209.00 44551.00 74209.00C44573.84 74186.24 44596.51 74163.31 44619.47 74140.67C44628.98 74131.45 44638.49 74122.22 44648.00 74113.00C44669.33 74113.00 44690.67 74113.00 44712.00 74113.00C44722.67 74091.67 44733.33 74070.33 44744.00 74049.00C44754.67 74049.00 44765.33 74049.00 44776.00 74049.00C44797.33 74059.67 44818.67 74070.33 44840.00 74081.00C44851.00 74081.00 44862.00 74081.00 44873.00 74081.00C44915.67 73995.00 44958.33 73909.00 45001.00 73823.00C45022.33 73812.33 45043.67 73801.67 45065.00 73791.00C45076.00 73705.33 45087.00 73619.67 45098.00 73534.00C45140.67 73534.00 45183.33 73534.00 45226.00 73534.00C45237.00 73512.67 45248.00 73491.33 45259.00 73470.00C45269.67 73459.33 45280.33 73448.67 45291.00 73438.00C45325.37 73426.25 45359.67 73414.27 45394.09 73402.66C45424.06 73392.77 45454.03 73382.89 45484.00 73373.00C45526.67 73373.00 45569.33 73373.00 45612.00 73373.00C45633.40 73383.75 45654.90 73394.35 45676.24 73405.20C45729.83 73448.13 45783.41 73491.07 45837.00 73534.00C45858.33 73534.00 45879.67 73534.00 45901.00 73534.00C45912.00 73544.67 45923.00 73555.33 45934.00 73566.00C45934.00 73587.67 45934.00 73609.33 45934.00 73631.00C45944.67 73641.67 45955.33 73652.33 45966.00 73663.00C45998.00 73652.33 46030.00 73641.67 46062.00 73631.00C46072.67 73609.33 46083.33 73587.67 46094.00 73566.00C46115.67 73587.67 46137.33 73609.33 46159.00 73631.00C46180.33 73620.00 46201.67 73609.00 46223.00 73598.00C46233.67 73609.00 46244.33 73620.00 46255.00 73631.00C46255.00 73609.33 46255.00 73587.67 46255.00 73566.00C46233.61 73512.24 46212.29 73458.46 46190.86 73404.72C46180.24 73383.48 46169.62 73362.24 46159.00 73341.00C46159.08 73330.13 46158.84 73319.24 46159.12 73308.39C46169.75 73254.93 46180.37 73201.46 46191.00 73148.00C46191.00 73062.33 46191.00 72976.67 46191.00 72891.00C46201.67 72880.33 46212.33 72869.67 46223.00 72859.00C46266.08 72880.40 46309.21 72901.71 46352.26 72923.17C46384.17 72944.45 46416.09 72965.72 46448.00 72987.00C46458.67 72987.00 46469.33 72987.00 46480.00 72987.00C46490.67 72976.33 46501.33 72965.67 46512.00 72955.00C46512.00 72944.33 46512.00 72933.67 46512.00 72923.00C46555.00 72923.00 46598.00 72923.00 46641.00 72923.00C46651.67 72901.67 46662.33 72880.33 46673.00 72859.00C46748.00 72816.00 46823.00 72773.00 46898.00 72730.00C46919.67 72708.67 46941.33 72687.33 46963.00 72666.00C47016.33 72644.67 47069.67 72623.33 47123.00 72602.00C47134.00 72602.00 47145.00 72602.00 47156.00 72602.00C47209.33 72634.00 47262.67 72666.00 47316.00 72698.00C47316.00 72751.67 47316.00 72805.33 47316.00 72859.00C47348.33 72912.67 47380.67 72966.33 47413.00 73020.00C47402.33 73062.67 47391.67 73105.33 47381.00 73148.00C47381.00 73158.67 47381.00 73169.33 47381.00 73180.00C47413.00 73191.00 47445.00 73202.00 47477.00 73213.00C47477.00 73234.33 47477.00 73255.67 47477.00 73277.00C47455.67 73309.00 47434.33 73341.00 47413.00 73373.00C47413.00 73394.67 47413.00 73416.33 47413.00 73438.00C47434.33 73438.00 47455.67 73438.00 47477.00 73438.00C47509.00 73448.67 47541.00 73459.33 47573.00 73470.00C47594.67 73491.33 47616.33 73512.67 47638.00 73534.00C47680.67 73502.00 47723.33 73470.00 47766.00 73438.00C47787.67 73438.00 47809.33 73438.00 47831.00 73438.00C47852.33 73427.00 47873.67 73416.00 47895.00 73405.00C47884.33 73383.67 47873.67 73362.33 47863.00 73341.00C47873.67 73330.33 47884.33 73319.67 47895.00 73309.00C47948.67 73309.00 48002.33 73309.00 48056.00 73309.00C48066.67 73298.33 48077.33 73287.67 48088.00 73277.00C48088.00 73266.33 48088.00 73255.67 48088.00 73245.00C48109.33 73223.33 48130.67 73201.67 48152.00 73180.00C48141.33 73148.00 48130.67 73116.00 48120.00 73084.00C48130.67 73084.00 48141.33 73084.00 48152.00 73084.00C48169.26 73066.73 48186.45 73049.39 48204.10 73032.51C48208.40 73028.34 48212.70 73024.17 48217.00 73020.00C48238.33 73020.00 48259.67 73020.00 48281.00 73020.00C48270.33 72998.33 48259.67 72976.67 48249.00 72955.00C48270.33 72933.67 48291.67 72912.33 48313.00 72891.00C48313.00 72869.67 48313.00 72848.33 48313.00 72827.00C48334.33 72805.33 48355.67 72783.67 48377.00 72762.00C48409.33 72762.00 48441.67 72762.00 48474.00 72762.00C48495.33 72740.67 48516.67 72719.33 48538.00 72698.00C48538.00 72687.33 48538.00 72676.67 48538.00 72666.00C48559.33 72655.33 48580.67 72644.67 48602.00 72634.00C48602.07 72623.24 48601.87 72612.44 48602.10 72601.71C48613.13 72569.38 48624.05 72537.02 48635.14 72504.72C48645.76 72483.48 48656.38 72462.24 48667.00 72441.00C48677.67 72430.33 48688.33 72419.67 48699.00 72409.00C48688.33 72387.33 48677.67 72365.67 48667.00 72344.00C48667.00 72333.33 48667.00 72322.67 48667.00 72312.00C48656.33 72290.67 48645.67 72269.33 48635.00 72248.00C48635.00 72194.33 48635.00 72140.67 48635.00 72087.00C48624.00 72076.33 48613.00 72065.67 48602.00 72055.00C48602.00 72023.00 48602.00 71991.00 48602.00 71959.00C48613.00 71948.00 48624.00 71937.00 48635.00 71926.00C48656.33 71851.00 48677.67 71776.00 48699.00 71701.00C48699.00 71647.67 48699.00 71594.33 48699.00 71541.00C48720.33 71551.67 48741.67 71562.33 48763.00 71573.00C48773.67 71562.33 48784.33 71551.67 48795.00 71541.00C48805.67 71519.33 48816.33 71497.67 48827.00 71476.00C48859.57 71454.46 48892.23 71433.05 48924.75 71411.44C48967.50 71379.29 49010.25 71347.15 49053.00 71315.00C49095.67 71304.33 49138.33 71293.67 49181.00 71283.00C49224.00 71283.00 49267.00 71283.00 49310.00 71283.00C49320.77 71293.85 49331.72 71304.55 49342.37 71315.50C49374.25 71358.33 49406.12 71401.17 49438.00 71444.00C49449.09 71443.93 49460.23 71444.13 49471.29 71443.90C49503.20 71433.27 49535.10 71422.63 49567.00 71412.00C49610.00 71379.67 49653.00 71347.33 49696.00 71315.00C49696.00 71304.33 49696.00 71293.67 49696.00 71283.00C49717.33 71283.00 49738.67 71283.00 49760.00 71283.00C49770.71 71293.77 49781.54 71304.43 49792.17 71315.26C49813.45 71347.51 49834.72 71379.75 49856.00 71412.00C49877.67 71401.33 49899.33 71390.67 49921.00 71380.00C49953.00 71380.00 49985.00 71380.00 50017.00 71380.00C50060.00 71390.67 50103.00 71401.33 50146.00 71412.00C50167.33 71412.00 50188.67 71412.00 50210.00 71412.00C50220.67 71401.33 50231.33 71390.67 50242.00 71380.00C50263.67 71369.33 50285.33 71358.67 50307.00 71348.00C50307.00 71326.33 50307.00 71304.67 50307.00 71283.00C50317.67 71283.00 50328.33 71283.00 50339.00 71283.00C50360.33 71272.33 50381.67 71261.67 50403.00 71251.00C50413.67 71240.33 50424.33 71229.67 50435.00 71219.00C50456.43 71219.03 50477.88 71218.93 50499.31 71219.05C50563.54 71229.70 50627.77 71240.35 50692.00 71251.00C50735.00 71240.33 50778.00 71229.67 50821.00 71219.00C50853.00 71219.00 50885.00 71219.00 50917.00 71219.00C50938.78 71208.33 50960.49 71197.49 50982.30 71186.93C51024.87 71176.28 51067.43 71165.64 51110.00 71155.00C51153.10 71133.31 51196.17 71111.53 51239.29 71089.89C51324.86 71057.93 51410.43 71025.96 51496.00 70994.00C51517.33 70994.00 51538.67 70994.00 51560.00 70994.00C51560.00 71026.00 51560.00 71058.00 51560.00 71090.00C51538.67 71143.67 51517.33 71197.33 51496.00 71251.00C51496.00 71261.67 51496.00 71272.33 51496.00 71283.00C51517.33 71293.67 51538.67 71304.33 51560.00 71315.00C51581.77 71314.96 51603.55 71315.08 51625.31 71314.94C51678.87 71304.29 51732.43 71293.65 51786.00 71283.00C51839.33 71293.67 51892.67 71304.33 51946.00 71315.00C52032.00 71261.67 52118.00 71208.33 52204.00 71155.00C52246.67 71155.00 52289.33 71155.00 52332.00 71155.00C52342.67 71144.33 52353.33 71133.67 52364.00 71123.00C52363.97 71101.23 52364.06 71079.46 52363.96 71057.69C52353.32 70982.69 52342.56 70907.70 52332.00 70832.69C52332.00 70790.13 52332.00 70747.56 52332.00 70705.00C52321.33 70672.67 52310.67 70640.33 52300.00 70608.00C52300.00 70586.67 52300.00 70565.33 52300.00 70544.00C52332.00 70511.67 52364.00 70479.33 52396.00 70447.00C52407.00 70425.67 52418.00 70404.33 52429.00 70383.00C52407.33 70340.00 52385.67 70297.00 52364.00 70254.00C52364.00 70200.67 52364.00 70147.33 52364.00 70094.00C52385.76 70061.61 52407.39 70029.11 52429.22 69996.78C52439.81 69986.19 52450.41 69975.59 52461.00 69965.00C52482.33 69975.67 52503.67 69986.33 52525.00 69997.00C52546.33 69997.00 52567.67 69997.00 52589.00 69997.00C52621.33 69975.67 52653.67 69954.33 52686.00 69933.00C52696.87 69933.07 52707.76 69932.87 52718.61 69933.10C52782.74 69943.74 52846.87 69954.37 52911.00 69965.00C52900.33 69922.00 52889.67 69879.00 52879.00 69836.00C52911.00 69793.33 52943.00 69750.67 52975.00 69708.00C52964.33 69697.33 52953.67 69686.67 52943.00 69676.00C52953.69 69664.89 52964.58 69653.92 52975.14 69642.72C52985.76 69621.48 52996.38 69600.24 53007.00 69579.00C53007.00 69557.67 53007.00 69536.33 53007.00 69515.00C53028.67 69504.33 53050.33 69493.67 53072.00 69483.00C53082.67 69429.33 53093.33 69375.67 53104.00 69322.00C53114.67 69311.33 53125.33 69300.67 53136.00 69290.00C53146.67 69290.00 53157.33 69290.00 53168.00 69290.00C53178.67 69300.67 53189.33 69311.33 53200.00 69322.00C53200.00 69332.67 53200.00 69343.33 53200.00 69354.00C53221.67 69375.33 53243.33 69396.67 53265.00 69418.00C53275.67 69418.00 53286.33 69418.00 53297.00 69418.00C53329.00 69364.67 53361.00 69311.33 53393.00 69258.00C53393.00 69236.33 53393.00 69214.67 53393.00 69193.00C53382.33 69193.00 53371.67 69193.00 53361.00 69193.00C53339.67 69171.67 53318.33 69150.33 53297.00 69129.00C53297.00 69097.00 53297.00 69065.00 53297.00 69033.00C53264.67 69000.67 53232.33 68968.33 53200.00 68936.00C53189.33 68904.00 53178.67 68872.00 53168.00 68840.00C53168.00 68829.33 53168.00 68818.67 53168.00 68808.00C53221.67 68765.00 53275.33 68722.00 53329.00 68679.00C53329.00 68657.67 53329.00 68636.33 53329.00 68615.00C53307.67 68593.33 53286.33 68571.67 53265.00 68550.00C53222.00 68539.33 53179.00 68528.67 53136.00 68518.00C53136.00 68496.67 53136.00 68475.33 53136.00 68454.00C53189.67 68421.67 53243.33 68389.33 53297.00 68357.00C53297.00 68260.67 53297.00 68164.33 53297.00 68068.00C53318.33 68057.33 53339.67 68046.67 53361.00 68036.00C53393.33 68046.67 53425.67 68057.33 53458.00 68068.00C53468.71 68057.23 53479.54 68046.57 53490.17 68035.74C53511.48 68003.40 53532.88 67971.10 53554.14 67938.72C53564.76 67917.48 53575.38 67896.24 53586.00 67875.00C53618.33 67875.00 53650.67 67875.00 53683.00 67875.00C53742.53 67894.88 53802.09 67914.69 53861.71 67934.29C53866.54 67935.96 53871.51 67937.36 53876.24 67939.20C53929.50 67982.13 53982.75 68025.07 54036.00 68068.00C54046.67 68068.00 54057.33 68068.00 54068.00 68068.00C54079.04 68057.23 54090.22 68046.58 54101.17 68035.74C54122.45 68003.49 54143.72 67971.25 54165.00 67939.00C54165.00 67917.67 54165.00 67896.33 54165.00 67875.00C54186.33 67843.00 54207.67 67811.00 54229.00 67779.00C54272.00 67746.67 54315.00 67714.33 54358.00 67682.00C54315.00 67607.00 54272.00 67532.00 54229.00 67457.00C54229.00 67446.33 54229.00 67435.67 54229.00 67425.00C54261.33 67393.00 54293.67 67361.00 54326.00 67329.00C54379.67 67296.67 54433.33 67264.33 54487.00 67232.00C54519.00 67178.33 54551.00 67124.67 54583.00 67071.00C54593.67 67060.33 54604.33 67049.67 54615.00 67039.00C54625.67 67007.00 54636.33 66975.00 54647.00 66943.00C54636.33 66932.00 54625.67 66921.00 54615.00 66910.00C54615.00 66888.67 54615.00 66867.33 54615.00 66846.00C54647.33 66824.67 54679.67 66803.33 54712.00 66782.00C54722.67 66749.67 54733.33 66717.33 54744.00 66685.00C54765.33 66674.33 54786.67 66663.67 54808.00 66653.00C54818.67 66631.67 54829.33 66610.33 54840.00 66589.00C54829.33 66567.67 54818.67 66546.33 54808.00 66525.00C54818.67 66450.00 54829.33 66375.00 54840.00 66300.00C54979.44 66310.66 55118.87 66321.38 55258.31 66332.00C56308.54 66332.00 57358.77 66332.00 58409.00 66332.00C58430.33 66353.33 58451.67 66374.67 58473.00 66396.00C58484.00 66396.00 58495.00 66396.00 58506.00 66396.00C58516.67 66406.67 58527.33 66417.33 58538.00 66428.00C58548.67 66428.00 58559.33 66428.00 58570.00 66428.00C58591.37 66460.43 58612.82 66492.82 58634.14 66525.28C58644.76 66546.52 58655.38 66567.76 58666.00 66589.00C58709.00 66589.00 58752.00 66589.00 58795.00 66589.00C58859.33 66621.00 58923.67 66653.00 58988.00 66685.00C59021.27 66718.55 59054.42 66752.24 59087.77 66785.71C59108.28 66805.85 59128.69 66826.11 59149.26 66846.17C59181.17 66867.45 59213.09 66888.72 59245.00 66910.00C59245.00 66921.00 59245.00 66932.00 59245.00 66943.00C59266.33 66964.33 59287.67 66985.67 59309.00 67007.00C59298.33 67017.67 59287.67 67028.33 59277.00 67039.00C59287.67 67071.33 59298.33 67103.67 59309.00 67136.00C59320.00 67146.67 59331.00 67157.33 59342.00 67168.00C59331.00 67189.33 59320.00 67210.67 59309.00 67232.00C59298.33 67242.67 59287.67 67253.33 59277.00 67264.00C59277.00 67285.67 59277.00 67307.33 59277.00 67329.00C59287.67 67350.33 59298.33 67371.67 59309.00 67393.00C59330.67 67403.67 59352.33 67414.33 59374.00 67425.00C59395.33 67468.00 59416.67 67511.00 59438.00 67554.00C59427.33 67564.67 59416.67 67575.33 59406.00 67586.00C59416.67 67596.67 59427.33 67607.33 59438.00 67618.00C59502.33 67650.00 59566.67 67682.00 59631.00 67714.00C59641.67 67735.67 59652.33 67757.33 59663.00 67779.00C59673.67 67789.67 59684.33 67800.33 59695.00 67811.00C59705.67 67800.33 59716.33 67789.67 59727.00 67779.00C59738.00 67789.67 59749.00 67800.33 59760.00 67811.00C59770.67 67811.00 59781.33 67811.00 59792.00 67811.00C59802.67 67821.67 59813.33 67832.33 59824.00 67843.00C59834.67 67843.00 59845.33 67843.00 59856.00 67843.00C59866.67 67875.00 59877.33 67907.00 59888.00 67939.00C59877.33 67960.67 59866.67 67982.33 59856.00 68004.00C59866.67 68004.00 59877.33 68004.00 59888.00 68004.00C59888.00 68025.33 59888.00 68046.67 59888.00 68068.00C59898.67 68089.33 59909.33 68110.67 59920.00 68132.00C59909.33 68153.67 59898.67 68175.33 59888.00 68197.00C59909.67 68197.00 59931.33 68197.00 59953.00 68197.00C59963.67 68218.33 59974.33 68239.67 59985.00 68261.00C59995.67 68271.67 60006.33 68282.33 60017.00 68293.00C60017.00 68303.67 60017.00 68314.33 60017.00 68325.00C60027.67 68325.00 60038.33 68325.00 60049.00 68325.00C60081.00 68293.00 60113.00 68261.00 60145.00 68229.00C60166.67 68218.33 60188.33 68207.67 60210.00 68197.00C60220.67 68175.33 60231.33 68153.67 60242.00 68132.00C60252.67 68132.00 60263.33 68132.00 60274.00 68132.00C60284.67 68121.33 60295.33 68110.67 60306.00 68100.00C60327.67 68121.67 60349.33 68143.33 60371.00 68165.00C60381.67 68186.33 60392.33 68207.67 60403.00 68229.00C60424.44 68239.67 60445.82 68250.51 60467.30 68261.07C60510.20 68271.72 60553.10 68282.36 60596.00 68293.00C60617.33 68293.00 60638.67 68293.00 60660.00 68293.00C60702.67 68314.33 60745.33 68335.67 60788.00 68357.00C60799.00 68368.00 60810.00 68379.00 60821.00 68390.00C60821.00 68411.33 60821.00 68432.67 60821.00 68454.00C60810.00 68475.44 60798.82 68496.82 60787.93 68518.30C60777.28 68561.20 60766.64 68604.10 60756.00 68647.00C60766.67 68689.67 60777.33 68732.33 60788.00 68775.00C60788.00 68807.33 60788.00 68839.67 60788.00 68872.00C60799.00 68893.33 60810.00 68914.67 60821.00 68936.00C60831.67 68946.67 60842.33 68957.33 60853.00 68968.00C60874.33 68968.00 60895.67 68968.00 60917.00 68968.00C60927.67 68989.67 60938.33 69011.33 60949.00 69033.00C60938.33 69065.00 60927.67 69097.00 60917.00 69129.00C60938.33 69150.33 60959.67 69171.67 60981.00 69193.00C60970.19 69214.83 60959.58 69236.76 60948.65 69258.52C60927.44 69290.35 60906.22 69322.17 60885.00 69354.00C60885.00 69364.67 60885.00 69375.33 60885.00 69386.00C60895.86 69396.76 60906.54 69407.73 60917.51 69418.36C60992.34 69471.91 61067.17 69525.45 61142.00 69579.00C61152.67 69579.00 61163.33 69579.00 61174.00 69579.00C61185.00 69557.67 61196.00 69536.33 61207.00 69515.00C61174.67 69482.67 61142.33 69450.33 61110.00 69418.00C61110.00 69396.67 61110.00 69375.33 61110.00 69354.00C61120.67 69343.33 61131.33 69332.67 61142.00 69322.00C61163.67 69311.33 61185.33 69300.67 61207.00 69290.00C61217.67 69279.33 61228.33 69268.67 61239.00 69258.00C61281.67 69268.67 61324.33 69279.33 61367.00 69290.00C61388.67 69311.33 61410.33 69332.67 61432.00 69354.00C61496.00 69354.00 61560.00 69354.00 61624.00 69354.00C61635.06 69386.42 61646.01 69418.88 61657.14 69451.28C61667.76 69472.52 61678.38 69493.76 61689.00 69515.00C61689.00 69536.33 61689.00 69557.67 61689.00 69579.00C61656.67 69579.00 61624.33 69579.00 61592.00 69579.00C61581.33 69589.67 61570.67 69600.33 61560.00 69611.00C61592.33 69632.67 61624.67 69654.33 61657.00 69676.00C61678.33 69708.00 61699.67 69740.00 61721.00 69772.00C61710.33 69793.33 61699.67 69814.67 61689.00 69836.00C61699.67 69857.67 61710.33 69879.33 61721.00 69901.00C61742.33 69911.67 61763.67 69922.33 61785.00 69933.00C61795.67 69943.67 61806.33 69954.33 61817.00 69965.00C61806.33 69986.33 61795.67 70007.67 61785.00 70029.00C61785.00 70040.00 61785.00 70051.00 61785.00 70062.00C61828.00 70169.00 61871.00 70276.00 61914.00 70383.00C61957.00 70393.67 62000.00 70404.33 62043.00 70415.00C62085.67 70393.67 62128.33 70372.33 62171.00 70351.00C62235.33 70351.00 62299.67 70351.00 62364.00 70351.00C62385.33 70393.67 62406.67 70436.33 62428.00 70479.00C62449.67 70490.00 62471.33 70501.00 62493.00 70512.00C62514.33 70544.00 62535.67 70576.00 62557.00 70608.00C62557.00 70640.33 62557.00 70672.67 62557.00 70705.00C62567.67 70715.67 62578.33 70726.33 62589.00 70737.00C62599.67 70726.33 62610.33 70715.67 62621.00 70705.00C62685.33 70726.33 62749.67 70747.67 62814.00 70769.00C62835.67 70758.33 62857.33 70747.67 62879.00 70737.00C62911.00 70737.00 62943.00 70737.00 62975.00 70737.00C62975.00 70715.33 62975.00 70693.67 62975.00 70672.00C63007.00 70672.00 63039.00 70672.00 63071.00 70672.00C63103.33 70650.67 63135.67 70629.33 63168.00 70608.00C63168.00 70565.00 63168.00 70522.00 63168.00 70479.00C63178.67 70468.33 63189.33 70457.67 63200.00 70447.00C63189.33 70425.67 63178.67 70404.33 63168.00 70383.00C63178.67 70361.67 63189.33 70340.33 63200.00 70319.00C63221.33 70297.33 63242.67 70275.67 63264.00 70254.00C63264.00 70200.67 63264.00 70147.33 63264.00 70094.00C63274.67 70072.33 63285.33 70050.67 63296.00 70029.00C63307.00 70029.00 63318.00 70029.00 63329.00 70029.00C63361.00 70050.67 63393.00 70072.33 63425.00 70094.00C63457.00 70094.00 63489.00 70094.00 63521.00 70094.00C63542.67 70104.67 63564.33 70115.33 63586.00 70126.00C63607.33 70104.67 63628.67 70083.33 63650.00 70062.00C63650.00 70051.00 63650.00 70040.00 63650.00 70029.00C63671.33 70018.33 63692.67 70007.67 63714.00 69997.00C63714.00 69986.33 63714.00 69975.67 63714.00 69965.00C63725.00 69954.33 63736.00 69943.67 63747.00 69933.00C63736.00 69922.33 63725.00 69911.67 63714.00 69901.00C63725.00 69879.33 63736.00 69857.67 63747.00 69836.00C63768.33 69836.00 63789.67 69836.00 63811.00 69836.00C63832.33 69825.33 63853.67 69814.67 63875.00 69804.00C63885.67 69836.33 63896.33 69868.67 63907.00 69901.00C63918.00 69911.67 63929.00 69922.33 63940.00 69933.00C63982.67 69922.33 64025.33 69911.67 64068.00 69901.00C64100.33 69911.67 64132.67 69922.33 64165.00 69933.00C64175.78 69943.69 64186.40 69954.59 64197.28 69965.14C64218.52 69975.76 64239.76 69986.38 64261.00 69997.00C64271.67 70007.67 64282.33 70018.33 64293.00 70029.00C64282.33 70061.33 64271.67 70093.67 64261.00 70126.00C64271.69 70136.78 64282.59 70147.40 64293.14 70158.28C64325.43 70222.52 64357.71 70286.76 64390.00 70351.00C64422.00 70351.00 64454.00 70351.00 64486.00 70351.00C64496.67 70361.67 64507.33 70372.33 64518.00 70383.00C64528.67 70383.00 64539.33 70383.00 64550.00 70383.00C64593.00 70404.33 64636.00 70425.67 64679.00 70447.00C64711.33 70447.00 64743.67 70447.00 64776.00 70447.00C64776.00 70468.67 64776.00 70490.33 64776.00 70512.00C64786.67 70522.67 64797.33 70533.33 64808.00 70544.00C64818.67 70586.67 64829.33 70629.33 64840.00 70672.00C64872.00 70704.33 64904.00 70736.67 64936.00 70769.00C64946.67 70801.00 64957.33 70833.00 64968.00 70865.00C64989.67 70886.67 65011.33 70908.33 65033.00 70930.00C65000.58 70972.73 64968.25 71015.54 64935.78 71058.22C64925.19 71068.81 64914.59 71079.41 64904.00 71090.00C64861.33 71176.00 64818.67 71262.00 64776.00 71348.00C64765.00 71380.00 64754.00 71412.00 64743.00 71444.00C64743.00 71476.33 64743.00 71508.67 64743.00 71541.00C64721.67 71562.33 64700.33 71583.67 64679.00 71605.00C64679.00 71626.33 64679.00 71647.67 64679.00 71669.00C64668.33 71669.00 64657.67 71669.00 64647.00 71669.00C64636.33 71701.33 64625.67 71733.67 64615.00 71766.00C64615.00 71830.33 64615.00 71894.67 64615.00 71959.00C64636.42 71991.06 64657.72 72023.22 64679.22 72055.22C64689.81 72065.81 64700.41 72076.41 64711.00 72087.00C64721.67 72119.33 64732.33 72151.67 64743.00 72184.00C64754.00 72194.67 64765.00 72205.33 64776.00 72216.00C64775.96 72248.10 64776.08 72280.22 64775.94 72312.30C64764.96 72365.87 64753.98 72419.43 64743.00 72473.00C64754.00 72494.33 64765.00 72515.67 64776.00 72537.00C64765.00 72548.00 64754.00 72559.00 64743.00 72570.00C64732.33 72559.00 64721.67 72548.00 64711.00 72537.00C64679.00 72526.33 64647.00 72515.67 64615.00 72505.00C64582.67 72505.00 64550.33 72505.00 64518.00 72505.00C64496.67 72515.67 64475.33 72526.33 64454.00 72537.00C64443.33 72558.67 64432.67 72580.33 64422.00 72602.00C64368.33 72602.00 64314.67 72602.00 64261.00 72602.00C64261.00 72634.00 64261.00 72666.00 64261.00 72698.00C64271.67 72708.67 64282.33 72719.33 64293.00 72730.00C64314.33 72719.33 64335.67 72708.67 64357.00 72698.00C64356.93 72708.76 64357.13 72719.56 64356.90 72730.29C64346.27 72762.53 64335.63 72794.76 64325.00 72827.00C64335.67 72848.33 64346.33 72869.67 64357.00 72891.00C64346.31 72901.78 64335.41 72912.40 64324.86 72923.28C64314.24 72944.52 64303.62 72965.76 64293.00 72987.00C64293.00 73030.00 64293.00 73073.00 64293.00 73116.00C64314.33 73105.33 64335.67 73094.67 64357.00 73084.00C64357.00 73094.67 64357.00 73105.33 64357.00 73116.00C64378.67 73126.67 64400.33 73137.33 64422.00 73148.00C64454.00 73148.00 64486.00 73148.00 64518.00 73148.00C64539.67 73169.67 64561.33 73191.33 64583.00 73213.00C64604.33 73223.67 64625.67 73234.33 64647.00 73245.00C64625.67 73255.67 64604.33 73266.33 64583.00 73277.00C64604.33 73309.00 64625.67 73341.00 64647.00 73373.00C64636.33 73383.67 64625.67 73394.33 64615.00 73405.00C64615.00 73426.67 64615.00 73448.33 64615.00 73470.00C64604.33 73470.00 64593.67 73470.00 64583.00 73470.00C64550.67 73502.00 64518.33 73534.00 64486.00 73566.00C64496.67 73576.67 64507.33 73587.33 64518.00 73598.00C64518.00 73609.00 64518.00 73620.00 64518.00 73631.00C64535.26 73648.27 64552.45 73665.61 64570.10 73682.49C64574.51 73686.68 64578.77 73691.08 64583.28 73695.14C64647.52 73727.09 64711.76 73759.05 64776.00 73791.00C64733.00 73801.67 64690.00 73812.33 64647.00 73823.00C64647.00 73834.00 64647.00 73845.00 64647.00 73856.00C64679.00 73888.00 64711.00 73920.00 64743.00 73952.00C64764.67 73941.33 64786.33 73930.67 64808.00 73920.00C64808.00 73941.33 64808.00 73962.67 64808.00 73984.00C64818.67 73984.00 64829.33 73984.00 64840.00 73984.00C64840.00 74027.00 64840.00 74070.00 64840.00 74113.00C64850.67 74113.00 64861.33 74113.00 64872.00 74113.00C64872.00 74123.67 64872.00 74134.33 64872.00 74145.00C64882.67 74145.00 64893.33 74145.00 64904.00 74145.00C64903.92 74155.87 64904.16 74166.76 64903.88 74177.61C64893.25 74231.07 64882.63 74284.54 64872.00 74338.00C64882.67 74359.33 64893.33 74380.67 64904.00 74402.00C64914.67 74402.00 64925.33 74402.00 64936.00 74402.00C64946.67 74391.33 64957.33 74380.67 64968.00 74370.00C64968.00 74380.67 64968.00 74391.33 64968.00 74402.00C64979.00 74402.00 64990.00 74402.00 65001.00 74402.00C64990.00 74412.67 64979.00 74423.33 64968.00 74434.00C64946.67 74477.00 64925.33 74520.00 64904.00 74563.00C64882.67 74563.00 64861.33 74563.00 64840.00 74563.00C64850.67 74595.00 64861.33 74627.00 64872.00 74659.00C64872.00 74680.67 64872.00 74702.33 64872.00 74724.00C64840.00 74734.67 64808.00 74745.33 64776.00 74756.00C64765.00 74777.33 64754.00 74798.67 64743.00 74820.00C64721.67 74820.00 64700.33 74820.00 64679.00 74820.00C64668.33 74809.33 64657.67 74798.67 64647.00 74788.00C64604.00 74809.33 64561.00 74830.67 64518.00 74852.00C64528.67 74863.00 64539.33 74874.00 64550.00 74885.00C64571.67 74885.00 64593.33 74885.00 64615.00 74885.00C64657.67 74906.33 64700.33 74927.67 64743.00 74949.00C64743.00 74981.00 64743.00 75013.00 64743.00 75045.00C64711.00 75088.00 64679.00 75131.00 64647.00 75174.00C64683.99 75192.53 64721.00 75211.04 64758.16 75229.22C64764.11 75232.15 64770.05 75235.07 64776.00 75238.00C64776.00 75248.67 64776.00 75259.33 64776.00 75270.00C64765.00 75291.67 64754.00 75313.33 64743.00 75335.00C64764.67 75345.67 64786.33 75356.33 64808.00 75367.00C64808.00 75399.00 64808.00 75431.00 64808.00 75463.00C64818.67 75495.33 64829.33 75527.67 64840.00 75560.00C64840.00 75602.67 64840.00 75645.33 64840.00 75688.00C64818.67 75709.67 64797.33 75731.33 64776.00 75753.00C64776.00 75795.67 64776.00 75838.33 64776.00 75881.00C64765.00 75891.67 64754.00 75902.33 64743.00 75913.00C64754.00 75924.00 64765.00 75935.00 64776.00 75946.00C64776.00 75956.67 64776.00 75967.33 64776.00 75978.00C64765.00 75978.00 64754.00 75978.00 64743.00 75978.00C64732.33 75999.33 64721.67 76020.67 64711.00 76042.00C64721.67 76052.67 64732.33 76063.33 64743.00 76074.00C64743.00 76106.33 64743.00 76138.67 64743.00 76171.00C64721.67 76181.67 64700.33 76192.33 64679.00 76203.00C64678.92 76213.76 64679.15 76224.57 64678.89 76235.29C64657.59 76288.86 64636.29 76342.43 64615.00 76396.00C64582.67 76417.33 64550.33 76438.67 64518.00 76460.00C64518.00 76470.67 64518.00 76481.33 64518.00 76492.00C64507.33 76502.67 64496.67 76513.33 64486.00 76524.00C64496.67 76556.33 64507.33 76588.67 64518.00 76621.00C64507.33 76621.00 64496.67 76621.00 64486.00 76621.00C64486.00 76642.33 64486.00 76663.67 64486.00 76685.00C64475.33 76706.33 64464.67 76727.67 64454.00 76749.00C64453.96 76770.77 64454.08 76792.55 64453.94 76814.30C64443.29 76867.54 64432.65 76920.77 64422.00 76974.00C64422.00 76985.00 64422.00 76996.00 64422.00 77007.00C64454.00 77007.00 64486.00 77007.00 64518.00 77007.00C64518.00 77017.67 64518.00 77028.33 64518.00 77039.00C64550.33 77049.67 64582.67 77060.33 64615.00 77071.00C64615.00 77103.00 64615.00 77135.00 64615.00 77167.00C64625.67 77178.00 64636.33 77189.00 64647.00 77200.00C64604.00 77210.67 64561.00 77221.33 64518.00 77232.00C64518.00 77296.33 64518.00 77360.67 64518.00 77425.00C64528.74 77446.41 64539.38 77467.88 64550.17 77489.26C64573.02 77523.09 64596.04 77556.80 64618.77 77590.71C64638.85 77621.14 64658.92 77651.57 64679.00 77682.00C64657.67 77692.67 64636.33 77703.33 64615.00 77714.00C64625.67 77735.33 64636.33 77756.67 64647.00 77778.00C64657.67 77778.00 64668.33 77778.00 64679.00 77778.00C64689.67 77799.67 64700.33 77821.33 64711.00 77843.00C64743.33 77843.00 64775.67 77843.00 64808.00 77843.00C64818.67 77875.00 64829.33 77907.00 64840.00 77939.00C64850.67 77939.00 64861.33 77939.00 64872.00 77939.00C64872.00 77982.00 64872.00 78025.00 64872.00 78068.00C64882.67 78089.33 64893.33 78110.67 64904.00 78132.00C64914.67 78132.00 64925.33 78132.00 64936.00 78132.00C64946.67 78142.67 64957.33 78153.33 64968.00 78164.00C64989.67 78174.67 65011.33 78185.33 65033.00 78196.00C65022.33 78206.67 65011.67 78217.33 65001.00 78228.00C65001.00 78239.00 65001.00 78250.00 65001.00 78261.00C65022.33 78261.00 65043.67 78261.00 65065.00 78261.00C65054.33 78314.33 65043.67 78367.67 65033.00 78421.00C65022.33 78432.00 65011.67 78443.00 65001.00 78454.00C65011.67 78464.67 65022.33 78475.33 65033.00 78486.00C65011.33 78528.67 64989.67 78571.33 64968.00 78614.00C64968.00 78678.33 64968.00 78742.67 64968.00 78807.00C64989.67 78828.33 65011.33 78849.67 65033.00 78871.00C65033.00 78892.67 65033.00 78914.33 65033.00 78936.00C65011.33 78957.33 64989.67 78978.67 64968.00 79000.00C64979.00 79032.33 64990.00 79064.67 65001.00 79097.00C64990.00 79107.67 64979.00 79118.33 64968.00 79129.00C64979.00 79150.33 64990.00 79171.67 65001.00 79193.00C64979.33 79225.33 64957.67 79257.67 64936.00 79290.00C64946.67 79300.67 64957.33 79311.33 64968.00 79322.00C64968.00 79386.33 64968.00 79450.67 64968.00 79515.00C64957.33 79515.00 64946.67 79515.00 64936.00 79515.00C64925.33 79525.67 64914.67 79536.33 64904.00 79547.00C64904.00 79579.00 64904.00 79611.00 64904.00 79643.00C64925.33 79664.33 64946.67 79685.67 64968.00 79707.00C64979.00 79707.00 64990.00 79707.00 65001.00 79707.00C65001.00 79718.00 65001.00 79729.00 65001.00 79740.00C64979.33 79750.67 64957.67 79761.33 64936.00 79772.00C64936.00 79782.67 64936.00 79793.33 64936.00 79804.00C64946.67 79825.33 64957.33 79846.67 64968.00 79868.00C64968.00 79889.67 64968.00 79911.33 64968.00 79933.00C64979.00 79943.67 64990.00 79954.33 65001.00 79965.00C64990.00 79997.00 64979.00 80029.00 64968.00 80061.00C64979.00 80082.67 64990.00 80104.33 65001.00 80126.00C64979.33 80126.00 64957.67 80126.00 64936.00 80126.00C64936.00 80115.00 64936.00 80104.00 64936.00 80093.00C64925.33 80082.33 64914.67 80071.67 64904.00 80061.00C64904.00 80050.33 64904.00 80039.67 64904.00 80029.00C64882.67 80050.33 64861.33 80071.67 64840.00 80093.00C64850.67 80114.67 64861.33 80136.33 64872.00 80158.00C64861.33 80179.33 64850.67 80200.67 64840.00 80222.00C64840.00 80254.00 64840.00 80286.00 64840.00 80318.00C64818.67 80329.00 64797.33 80340.00 64776.00 80351.00C64776.00 80415.00 64776.00 80479.00 64776.00 80543.00C64765.00 80543.00 64754.00 80543.00 64743.00 80543.00C64754.00 80554.00 64765.00 80565.00 64776.00 80576.00C64776.00 80597.33 64776.00 80618.67 64776.00 80640.00C64786.67 80640.00 64797.33 80640.00 64808.00 80640.00C64808.00 80661.33 64808.00 80682.67 64808.00 80704.00C64797.33 80736.33 64786.67 80768.67 64776.00 80801.00C64776.00 80822.33 64776.00 80843.67 64776.00 80865.00C64765.00 80875.67 64754.00 80886.33 64743.00 80897.00C64743.00 80929.33 64743.00 80961.67 64743.00 80994.00C64711.00 80994.00 64679.00 80994.00 64647.00 80994.00C64647.00 81004.67 64647.00 81015.33 64647.00 81026.00C64840.10 81036.66 65033.21 81047.37 65226.31 81058.00C66769.54 81058.00 68312.77 81058.00 69856.00 81058.00C69856.00 81090.00 69856.00 81122.00 69856.00 81154.00C69866.67 81165.00 69877.33 81176.00 69888.00 81187.00C69898.67 81187.00 69909.33 81187.00 69920.00 81187.00C69909.33 81229.67 69898.67 81272.33 69888.00 81315.00C69898.67 81315.00 69909.33 81315.00 69920.00 81315.00C69930.67 81304.33 69941.33 81293.67 69952.00 81283.00C69973.33 81293.67 69994.67 81304.33 70016.00 81315.00C70027.00 81325.67 70038.00 81336.33 70049.00 81347.00C70038.00 81379.33 70027.00 81411.67 70016.00 81444.00C70037.67 81444.00 70059.33 81444.00 70081.00 81444.00C70081.00 81454.67 70081.00 81465.33 70081.00 81476.00C70091.67 81486.67 70102.33 81497.33 70113.00 81508.00C70113.00 81518.67 70113.00 81529.33 70113.00 81540.00C70123.67 81550.67 70134.33 81561.33 70145.00 81572.00C70177.33 81572.00 70209.67 81572.00 70242.00 81572.00C70274.00 81593.67 70306.00 81615.33 70338.00 81637.00C70348.67 81626.33 70359.33 81615.67 70370.00 81605.00C70359.33 81605.00 70348.67 81605.00 70338.00 81605.00C70348.67 81572.67 70359.33 81540.33 70370.00 81508.00C70359.33 81497.33 70348.67 81486.67 70338.00 81476.00C70359.33 81486.67 70380.67 81497.33 70402.00 81508.00C70434.33 81476.00 70466.67 81444.00 70499.00 81412.00C70509.67 81412.00 70520.33 81412.00 70531.00 81412.00C70541.67 81401.00 70552.33 81390.00 70563.00 81379.00C70573.67 81390.00 70584.33 81401.00 70595.00 81412.00C70616.67 81412.00 70638.33 81412.00 70660.00 81412.00C70660.00 81454.67 70660.00 81497.33 70660.00 81540.00C70670.67 81550.67 70681.33 81561.33 70692.00 81572.00C70745.33 81572.00 70798.67 81572.00 70852.00 81572.00C70889.37 81591.00 70926.75 81609.99 70964.30 81628.65C70969.98 81631.38 70975.57 81634.50 70981.31 81637.00C70991.87 81637.00 71002.44 81637.00 71013.00 81637.00C71034.67 81647.67 71056.33 81658.33 71078.00 81669.00C71088.67 81647.67 71099.33 81626.33 71110.00 81605.00C71120.76 81604.93 71131.56 81605.13 71142.29 81604.90C71174.20 81593.93 71206.10 81582.97 71238.00 81572.00C71259.67 81593.67 71281.33 81615.33 71303.00 81637.00C71324.33 81626.33 71345.67 81615.67 71367.00 81605.00C71388.33 81615.67 71409.67 81626.33 71431.00 81637.00C71441.67 81626.33 71452.33 81615.67 71463.00 81605.00C71474.00 81615.67 71485.00 81626.33 71496.00 81637.00C71517.33 81637.00 71538.67 81637.00 71560.00 81637.00C71560.00 81626.33 71560.00 81615.67 71560.00 81605.00C71570.67 81594.00 71581.33 81583.00 71592.00 81572.00C71602.67 81583.00 71613.33 81594.00 71624.00 81605.00C71634.67 81647.67 71645.33 81690.33 71656.00 81733.00C71699.00 81722.33 71742.00 81711.67 71785.00 81701.00C71795.67 81690.33 71806.33 81679.67 71817.00 81669.00C71827.67 81690.33 71838.33 81711.67 71849.00 81733.00C71859.67 81733.00 71870.33 81733.00 71881.00 81733.00C71892.00 81711.67 71903.00 81690.33 71914.00 81669.00C71914.00 81679.67 71914.00 81690.33 71914.00 81701.00C71956.67 81701.00 71999.33 81701.00 72042.00 81701.00C72042.00 81690.33 72042.00 81679.67 72042.00 81669.00C72063.67 81679.67 72085.33 81690.33 72107.00 81701.00C72096.00 81733.33 72085.00 81765.67 72074.00 81798.00C72063.33 81787.00 72052.67 81776.00 72042.00 81765.00C72052.67 81786.67 72063.33 81808.33 72074.00 81830.00C72052.67 81830.00 72031.33 81830.00 72010.00 81830.00C72010.00 81840.67 72010.00 81851.33 72010.00 81862.00C72020.67 81872.67 72031.33 81883.33 72042.00 81894.00C72042.00 81904.67 72042.00 81915.33 72042.00 81926.00C72052.67 81947.33 72063.33 81968.67 72074.00 81990.00C72095.67 81990.00 72117.33 81990.00 72139.00 81990.00C72139.00 82001.00 72139.00 82012.00 72139.00 82023.00C72149.67 82023.00 72160.33 82023.00 72171.00 82023.00C72149.67 82044.33 72128.33 82065.67 72107.00 82087.00C72096.00 82087.00 72085.00 82087.00 72074.00 82087.00C72074.00 82140.67 72074.00 82194.33 72074.00 82248.00C72095.67 82280.00 72117.33 82312.00 72139.00 82344.00C72139.00 82365.33 72139.00 82386.67 72139.00 82408.00C72149.67 82429.67 72160.33 82451.33 72171.00 82473.00C72171.00 82494.33 72171.00 82515.67 72171.00 82537.00C72192.33 82558.33 72213.67 82579.67 72235.00 82601.00C72267.33 82611.67 72299.67 82622.33 72332.00 82633.00C72342.67 82665.33 72353.33 82697.67 72364.00 82730.00C72364.00 82751.33 72364.00 82772.67 72364.00 82794.00C72353.33 82804.67 72342.67 82815.33 72332.00 82826.00C72342.67 82826.00 72353.33 82826.00 72364.00 82826.00C72353.33 82837.00 72342.67 82848.00 72332.00 82859.00C72342.67 82891.00 72353.33 82923.00 72364.00 82955.00C72364.00 82987.00 72364.00 83019.00 72364.00 83051.00C72353.33 83072.67 72342.67 83094.33 72332.00 83116.00C72332.00 83126.67 72332.00 83137.33 72332.00 83148.00C72321.00 83158.67 72310.00 83169.33 72299.00 83180.00C72288.33 83180.00 72277.67 83180.00 72267.00 83180.00C72245.67 83201.33 72224.33 83222.67 72203.00 83244.00C72171.00 83244.00 72139.00 83244.00 72107.00 83244.00C72085.33 83297.67 72063.67 83351.33 72042.00 83405.00C72020.67 83415.67 71999.33 83426.33 71978.00 83437.00C71960.73 83454.26 71943.39 83471.45 71926.51 83489.10C71916.55 83499.63 71906.12 83509.69 71895.69 83519.76C71890.79 83524.50 71885.90 83529.25 71881.00 83534.00C71870.33 83523.33 71859.67 83512.67 71849.00 83502.00C71849.00 83523.33 71849.00 83544.67 71849.00 83566.00C71827.63 83587.43 71806.12 83608.76 71784.83 83630.26C71763.55 83662.51 71742.28 83694.75 71721.00 83727.00C71721.00 83737.67 71721.00 83748.33 71721.00 83759.00C71688.67 83769.67 71656.33 83780.33 71624.00 83791.00C71624.00 83801.67 71624.00 83812.33 71624.00 83823.00C71613.33 83823.00 71602.67 83823.00 71592.00 83823.00C71581.33 83833.67 71570.67 83844.33 71560.00 83855.00C71560.00 83844.33 71560.00 83833.67 71560.00 83823.00C71549.33 83833.67 71538.67 83844.33 71528.00 83855.00C71538.67 83865.67 71549.33 83876.33 71560.00 83887.00C71549.33 83887.00 71538.67 83887.00 71528.00 83887.00C71538.67 83898.00 71549.33 83909.00 71560.00 83920.00C71538.67 83920.00 71517.33 83920.00 71496.00 83920.00C71506.67 83930.67 71517.33 83941.33 71528.00 83952.00C71506.33 83952.00 71484.67 83952.00 71463.00 83952.00C71452.33 83962.67 71441.67 83973.33 71431.00 83984.00C71441.67 83994.67 71452.33 84005.33 71463.00 84016.00C71452.33 84026.67 71441.67 84037.33 71431.00 84048.00C71441.67 84069.67 71452.33 84091.33 71463.00 84113.00C71452.33 84123.67 71441.67 84134.33 71431.00 84145.00C71441.67 84145.00 71452.33 84145.00 71463.00 84145.00C71452.33 84166.33 71441.67 84187.67 71431.00 84209.00C71441.67 84219.67 71452.33 84230.33 71463.00 84241.00C71452.33 84241.00 71441.67 84241.00 71431.00 84241.00C71431.00 84305.33 71431.00 84369.67 71431.00 84434.00C71420.33 84434.00 71409.67 84434.00 71399.00 84434.00C71409.67 84444.67 71420.33 84455.33 71431.00 84466.00C71431.00 84498.33 71431.00 84530.67 71431.00 84563.00C71420.33 84573.67 71409.67 84584.33 71399.00 84595.00C71420.33 84605.67 71441.67 84616.33 71463.00 84627.00C71452.33 84637.67 71441.67 84648.33 71431.00 84659.00C71441.67 84691.33 71452.33 84723.67 71463.00 84756.00C71463.00 84777.33 71463.00 84798.67 71463.00 84820.00C71474.00 84820.00 71485.00 84820.00 71496.00 84820.00C71496.00 84841.33 71496.00 84862.67 71496.00 84884.00C71485.00 84884.00 71474.00 84884.00 71463.00 84884.00C71463.00 84894.67 71463.00 84905.33 71463.00 84916.00C71474.00 84916.00 71485.00 84916.00 71496.00 84916.00C71496.00 84927.00 71496.00 84938.00 71496.00 84949.00C71485.00 84959.67 71474.00 84970.33 71463.00 84981.00C71484.67 84981.00 71506.33 84981.00 71528.00 84981.00C71528.00 84991.67 71528.00 85002.33 71528.00 85013.00C71517.33 85013.00 71506.67 85013.00 71496.00 85013.00C71506.67 85023.67 71517.33 85034.33 71528.00 85045.00C71517.33 85055.67 71506.67 85066.33 71496.00 85077.00C71506.67 85087.67 71517.33 85098.33 71528.00 85109.00C71517.33 85109.00 71506.67 85109.00 71496.00 85109.00C71506.67 85130.67 71517.33 85152.33 71528.00 85174.00C71506.33 85184.67 71484.67 85195.33 71463.00 85206.00C71474.00 85195.33 71485.00 85184.67 71496.00 85174.00C71506.67 85184.67 71517.33 85195.33 71528.00 85206.00C71528.00 85238.00 71528.00 85270.00 71528.00 85302.00C71528.00 85291.33 71528.00 85280.67 71528.00 85270.00C71538.67 85270.00 71549.33 85270.00 71560.00 85270.00C71560.00 85280.67 71560.00 85291.33 71560.00 85302.00C71570.67 85302.00 71581.33 85302.00 71592.00 85302.00C71592.00 85312.67 71592.00 85323.33 71592.00 85334.00C71602.67 85344.67 71613.33 85355.33 71624.00 85366.00C71624.00 85387.67 71624.00 85409.33 71624.00 85431.00C71660.99 85449.53 71698.00 85468.04 71735.16 85486.22C71741.11 85489.15 71747.05 85492.07 71753.00 85495.00C71763.67 85484.33 71774.33 85473.67 71785.00 85463.00C71795.67 85473.67 71806.33 85484.33 71817.00 85495.00C71827.67 85484.33 71838.33 85473.67 71849.00 85463.00C71859.67 85473.67 71870.33 85484.33 71881.00 85495.00C71902.67 85484.33 71924.33 85473.67 71946.00 85463.00C71967.33 85495.00 71988.67 85527.00 72010.00 85559.00C72020.67 85559.00 72031.33 85559.00 72042.00 85559.00C72052.67 85570.00 72063.33 85581.00 72074.00 85592.00C72063.33 85613.33 72052.67 85634.67 72042.00 85656.00C72052.67 85677.33 72063.33 85698.67 72074.00 85720.00C72074.00 85741.33 72074.00 85762.67 72074.00 85784.00C72063.33 85784.00 72052.67 85784.00 72042.00 85784.00C72074.33 85805.67 72106.67 85827.33 72139.00 85849.00C72128.33 85859.67 72117.67 85870.33 72107.00 85881.00C72117.67 85891.67 72128.33 85902.33 72139.00 85913.00C72139.00 85923.67 72139.00 85934.33 72139.00 85945.00C72117.33 85945.00 72095.67 85945.00 72074.00 85945.00C72095.67 85955.67 72117.33 85966.33 72139.00 85977.00C72139.00 85988.00 72139.00 85999.00 72139.00 86010.00C72123.46 86040.95 72108.21 86072.05 72092.17 86102.75C72086.12 86114.50 72080.06 86126.25 72074.00 86138.00C72095.67 86138.00 72117.33 86138.00 72139.00 86138.00C72139.00 86159.33 72139.00 86180.67 72139.00 86202.00C72149.67 86213.00 72160.33 86224.00 72171.00 86235.00C72171.00 86245.67 72171.00 86256.33 72171.00 86267.00C72181.67 86267.00 72192.33 86267.00 72203.00 86267.00C72203.00 86277.67 72203.00 86288.33 72203.00 86299.00C72213.67 86299.00 72224.33 86299.00 72235.00 86299.00C72267.33 86320.33 72299.67 86341.67 72332.00 86363.00C72342.67 86395.33 72353.33 86427.67 72364.00 86460.00C72374.67 86460.00 72385.33 86460.00 72396.00 86460.00C72417.33 86492.00 72438.67 86524.00 72460.00 86556.00C72460.00 86652.67 72460.00 86749.33 72460.00 86846.00C72449.33 86856.67 72438.67 86867.33 72428.00 86878.00C72428.00 86899.33 72428.00 86920.67 72428.00 86942.00C72438.67 86974.00 72449.33 87006.00 72460.00 87038.00C72460.00 87049.00 72460.00 87060.00 72460.00 87071.00C72470.67 87092.33 72481.33 87113.67 72492.00 87135.00C72492.00 87156.33 72492.00 87177.67 72492.00 87199.00C72502.67 87199.00 72513.33 87199.00 72524.00 87199.00C72706.33 87349.00 72888.67 87499.00 73071.00 87649.00C73039.00 87660.00 73007.00 87671.00 72975.00 87682.00C72953.33 87703.33 72931.67 87724.67 72910.00 87746.00C72910.00 87756.67 72910.00 87767.33 72910.00 87778.00C72888.67 87799.33 72867.33 87820.67 72846.00 87842.00C72846.00 87863.67 72846.00 87885.33 72846.00 87907.00C72835.33 87907.00 72824.67 87907.00 72814.00 87907.00C72803.33 87917.67 72792.67 87928.33 72782.00 87939.00C72782.00 87960.33 72782.00 87981.67 72782.00 88003.00C72760.33 88024.33 72738.67 88045.67 72717.00 88067.00C72727.67 88120.67 72738.33 88174.33 72749.00 88228.00C72738.33 88249.33 72727.67 88270.67 72717.00 88292.00C72706.33 88303.00 72695.67 88314.00 72685.00 88325.00C72663.67 88335.67 72642.33 88346.33 72621.00 88357.00C72599.67 88346.33 72578.33 88335.67 72557.00 88325.00C72546.00 88314.00 72535.00 88303.00 72524.00 88292.00C72502.67 88303.00 72481.33 88314.00 72460.00 88325.00C72460.00 88314.00 72460.00 88303.00 72460.00 88292.00C72449.33 88303.00 72438.67 88314.00 72428.00 88325.00C72396.00 88325.00 72364.00 88325.00 72332.00 88325.00C72332.00 88335.67 72332.00 88346.33 72332.00 88357.00C72321.00 88357.00 72310.00 88357.00 72299.00 88357.00C72299.00 88378.33 72299.00 88399.67 72299.00 88421.00C72267.00 88431.67 72235.00 88442.33 72203.00 88453.00C72171.00 88496.00 72139.00 88539.00 72107.00 88582.00C72064.00 88592.67 72021.00 88603.33 71978.00 88614.00C71952.60 88639.56 71926.92 88664.82 71901.23 88690.08C71889.28 88701.78 71877.37 88713.52 71865.84 88725.63C71860.23 88731.42 71854.61 88737.21 71849.00 88743.00C71849.00 88764.33 71849.00 88785.67 71849.00 88807.00C71838.33 88839.00 71827.67 88871.00 71817.00 88903.00C71806.33 88903.00 71795.67 88903.00 71785.00 88903.00C71763.67 88913.67 71742.33 88924.33 71721.00 88935.00C71699.33 88956.67 71677.67 88978.33 71656.00 89000.00C71666.67 89021.33 71677.33 89042.67 71688.00 89064.00C71688.00 89085.33 71688.00 89106.67 71688.00 89128.00C71666.67 89160.33 71645.33 89192.67 71624.00 89225.00C71624.00 89268.00 71624.00 89311.00 71624.00 89354.00C71602.67 89407.33 71581.33 89460.67 71560.00 89514.00C71560.00 89546.33 71560.00 89578.67 71560.00 89611.00C71581.33 89664.33 71602.67 89717.67 71624.00 89771.00C71624.00 89814.00 71624.00 89857.00 71624.00 89900.00C71613.33 89953.67 71602.67 90007.33 71592.00 90061.00C71602.67 90136.00 71613.33 90211.00 71624.00 90286.00C71613.33 90318.00 71602.67 90350.00 71592.00 90382.00C71560.00 90414.33 71528.00 90446.67 71496.00 90479.00C71474.33 90543.33 71452.67 90607.67 71431.00 90672.00C71409.67 90672.00 71388.33 90672.00 71367.00 90672.00C71356.33 90693.33 71345.67 90714.67 71335.00 90736.00C71324.33 90725.33 71313.67 90714.67 71303.00 90704.00C71281.33 90704.00 71259.67 90704.00 71238.00 90704.00C71227.33 90714.67 71216.67 90725.33 71206.00 90736.00C71174.00 90725.33 71142.00 90714.67 71110.00 90704.00C71099.33 90714.67 71088.67 90725.33 71078.00 90736.00C71078.00 90746.67 71078.00 90757.33 71078.00 90768.00C71067.00 90778.67 71056.00 90789.33 71045.00 90800.00C71034.33 90821.67 71023.67 90843.33 71013.00 90865.00C71002.33 90875.67 70991.67 90886.33 70981.00 90897.00C70981.00 90929.00 70981.00 90961.00 70981.00 90993.00C70970.33 90993.00 70959.67 90993.00 70949.00 90993.00C70938.33 91003.67 70927.67 91014.33 70917.00 91025.00C70895.33 91025.00 70873.67 91025.00 70852.00 91025.00C70852.00 91046.67 70852.00 91068.33 70852.00 91090.00C70841.33 91111.33 70830.67 91132.67 70820.00 91154.00C70809.33 91154.00 70798.67 91154.00 70788.00 91154.00C70766.67 91186.33 70745.33 91218.67 70724.00 91251.00C70702.67 91251.00 70681.33 91251.00 70660.00 91251.00C70660.00 91272.33 70660.00 91293.67 70660.00 91315.00C70649.00 91325.67 70638.00 91336.33 70627.00 91347.00C70638.00 91357.67 70649.00 91368.33 70660.00 91379.00C70660.00 91400.33 70660.00 91421.67 70660.00 91443.00C70670.67 91454.00 70681.33 91465.00 70692.00 91476.00C70681.33 91497.33 70670.67 91518.67 70660.00 91540.00C70681.33 91550.67 70702.67 91561.33 70724.00 91572.00C70681.00 91625.67 70638.00 91679.33 70595.00 91733.00C70573.67 91733.00 70552.33 91733.00 70531.00 91733.00C70531.00 91765.00 70531.00 91797.00 70531.00 91829.00C70509.67 91861.33 70488.33 91893.67 70467.00 91926.00C70467.00 91947.33 70467.00 91968.67 70467.00 91990.00C70456.33 91990.00 70445.67 91990.00 70435.00 91990.00C70435.00 92033.00 70435.00 92076.00 70435.00 92119.00C70424.00 92119.00 70413.00 92119.00 70402.00 92119.00C70391.33 92151.00 70380.67 92183.00 70370.00 92215.00C70348.67 92215.00 70327.33 92215.00 70306.00 92215.00C70306.00 92247.33 70306.00 92279.67 70306.00 92312.00C70295.33 92322.67 70284.67 92333.33 70274.00 92344.00C70274.00 92333.33 70274.00 92322.67 70274.00 92312.00C70274.00 92333.33 70274.00 92354.67 70274.00 92376.00C70263.33 92397.33 70252.67 92418.67 70242.00 92440.00C70231.00 92440.00 70220.00 92440.00 70209.00 92440.00C70220.00 92461.67 70231.00 92483.33 70242.00 92505.00C70242.00 92558.33 70242.00 92611.67 70242.00 92665.00C70231.00 92665.00 70220.00 92665.00 70209.00 92665.00C70209.00 92675.67 70209.00 92686.33 70209.00 92697.00C70198.33 92697.00 70187.67 92697.00 70177.00 92697.00C70177.00 92729.33 70177.00 92761.67 70177.00 92794.00C70198.67 92815.33 70220.33 92836.67 70242.00 92858.00C70220.33 92868.67 70198.67 92879.33 70177.00 92890.00C70177.00 92933.00 70177.00 92976.00 70177.00 93019.00C70166.33 93040.33 70155.67 93061.67 70145.00 93083.00C70123.67 93083.00 70102.33 93083.00 70081.00 93083.00C70081.00 93093.67 70081.00 93104.33 70081.00 93115.00C70070.33 93115.00 70059.67 93115.00 70049.00 93115.00C70016.67 93147.33 69984.33 93179.67 69952.00 93212.00C69952.00 93222.67 69952.00 93233.33 69952.00 93244.00C69909.33 93254.67 69866.67 93265.33 69824.00 93276.00C69813.00 93265.33 69802.00 93254.67 69791.00 93244.00C69769.67 93254.67 69748.33 93265.33 69727.00 93276.00C69716.33 93286.67 69705.67 93297.33 69695.00 93308.00C69695.00 93297.33 69695.00 93286.67 69695.00 93276.00C69663.00 93286.67 69631.00 93297.33 69599.00 93308.00C69556.00 93340.33 69513.00 93372.67 69470.00 93405.00C69470.00 93437.00 69470.00 93469.00 69470.00 93501.00C69448.67 93501.00 69427.33 93501.00 69406.00 93501.00C69406.00 93511.67 69406.00 93522.33 69406.00 93533.00C69395.00 93533.00 69384.00 93533.00 69373.00 93533.00C69362.23 93544.04 69351.58 93555.22 69340.74 93566.17C69308.83 93587.45 69276.91 93608.72 69245.00 93630.00C69234.33 93630.00 69223.67 93630.00 69213.00 93630.00C69202.33 93640.67 69191.67 93651.33 69181.00 93662.00C69170.00 93662.00 69159.00 93662.00 69148.00 93662.00C69126.67 93651.33 69105.33 93640.67 69084.00 93630.00C69052.00 93640.67 69020.00 93651.33 68988.00 93662.00C68988.00 93672.67 68988.00 93683.33 68988.00 93694.00C68977.00 93704.67 68966.00 93715.33 68955.00 93726.00C68955.00 93747.67 68955.00 93769.33 68955.00 93791.00C68944.33 93780.00 68933.67 93769.00 68923.00 93758.00C68912.33 93779.67 68901.67 93801.33 68891.00 93823.00C68869.67 93823.00 68848.33 93823.00 68827.00 93823.00C68827.00 93833.67 68827.00 93844.33 68827.00 93855.00C68816.33 93855.00 68805.67 93855.00 68795.00 93855.00C68795.00 93865.67 68795.00 93876.33 68795.00 93887.00C68773.33 93897.67 68751.67 93908.33 68730.00 93919.00C68730.00 93940.67 68730.00 93962.33 68730.00 93984.00C68719.33 93994.67 68708.67 94005.33 68698.00 94016.00C68708.67 94026.67 68719.33 94037.33 68730.00 94048.00C68719.33 94048.00 68708.67 94048.00 68698.00 94048.00C68687.33 94058.67 68676.67 94069.33 68666.00 94080.00C68676.67 94080.00 68687.33 94080.00 68698.00 94080.00C68687.33 94080.00 68676.67 94080.00 68666.00 94080.00C68676.67 94090.67 68687.33 94101.33 68698.00 94112.00C68687.33 94122.67 68676.67 94133.33 68666.00 94144.00C68655.33 94144.00 68644.67 94144.00 68634.00 94144.00C68634.00 94155.00 68634.00 94166.00 68634.00 94177.00C68623.33 94177.00 68612.67 94177.00 68602.00 94177.00C68602.00 94187.67 68602.00 94198.33 68602.00 94209.00C68612.67 94219.67 68623.33 94230.33 68634.00 94241.00C68623.33 94251.67 68612.67 94262.33 68602.00 94273.00C68559.00 94251.67 68516.00 94230.33 68473.00 94209.00C68451.67 94219.67 68430.33 94230.33 68409.00 94241.00C68387.67 94230.33 68366.33 94219.67 68345.00 94209.00C68345.00 94176.67 68345.00 94144.33 68345.00 94112.00C68334.00 94112.00 68323.00 94112.00 68312.00 94112.00C68290.56 94101.31 68269.17 94090.52 68247.71 94079.90C68215.80 94069.27 68183.90 94058.63 68152.00 94048.00C68141.00 94026.67 68130.00 94005.33 68119.00 93984.00C68097.67 93973.00 68076.33 93962.00 68055.00 93951.00C68033.67 93951.00 68012.33 93951.00 67991.00 93951.00C67937.33 93929.67 67883.67 93908.33 67830.00 93887.00C67819.33 93865.67 67808.67 93844.33 67798.00 93823.00C67755.00 93790.67 67712.00 93758.33 67669.00 93726.00C67647.67 93683.33 67626.33 93640.67 67605.00 93598.00C67615.67 93576.33 67626.33 93554.67 67637.00 93533.00C67626.33 93522.33 67615.67 93511.67 67605.00 93501.00C67594.33 93501.00 67583.67 93501.00 67573.00 93501.00C67540.67 93522.67 67508.33 93544.33 67476.00 93566.00C67465.33 93566.00 67454.67 93566.00 67444.00 93566.00C67433.33 93544.33 67422.67 93522.67 67412.00 93501.00C67380.00 93501.00 67348.00 93501.00 67316.00 93501.00C67316.00 93511.67 67316.00 93522.33 67316.00 93533.00C67283.67 93544.00 67251.33 93555.00 67219.00 93566.00C67208.33 93523.00 67197.67 93480.00 67187.00 93437.00C67197.67 93437.00 67208.33 93437.00 67219.00 93437.00C67229.67 93447.67 67240.33 93458.33 67251.00 93469.00C67251.00 93458.33 67251.00 93447.67 67251.00 93437.00C67240.33 93426.33 67229.67 93415.67 67219.00 93405.00C67219.00 93383.67 67219.00 93362.33 67219.00 93341.00C67229.67 93330.00 67240.33 93319.00 67251.00 93308.00C67261.67 93319.00 67272.33 93330.00 67283.00 93341.00C67294.00 93330.00 67305.00 93319.00 67316.00 93308.00C67273.00 93286.67 67230.00 93265.33 67187.00 93244.00C67165.67 93254.67 67144.33 93265.33 67123.00 93276.00C67101.33 93265.33 67079.67 93254.67 67058.00 93244.00C67036.67 93244.00 67015.33 93244.00 66994.00 93244.00C66994.00 93254.67 66994.00 93265.33 66994.00 93276.00C67026.33 93286.67 67058.67 93297.33 67091.00 93308.00C67080.00 93319.00 67069.00 93330.00 67058.00 93341.00C67036.67 93351.67 67015.33 93362.33 66994.00 93373.00C66983.33 93373.00 66972.67 93373.00 66962.00 93373.00C66951.33 93351.33 66940.67 93329.67 66930.00 93308.00C66919.33 93308.00 66908.67 93308.00 66898.00 93308.00C66876.33 93297.33 66854.67 93286.67 66833.00 93276.00C66822.33 93276.00 66811.67 93276.00 66801.00 93276.00C66801.00 93297.67 66801.00 93319.33 66801.00 93341.00C66790.33 93362.33 66779.67 93383.67 66769.00 93405.00C66769.00 93415.67 66769.00 93426.33 66769.00 93437.00C66758.33 93447.67 66747.67 93458.33 66737.00 93469.00C66704.67 93447.67 66672.33 93426.33 66640.00 93405.00C66618.67 93426.33 66597.33 93447.67 66576.00 93469.00C66586.67 93437.00 66597.33 93405.00 66608.00 93373.00C66597.33 93373.00 66586.67 93373.00 66576.00 93373.00C66565.33 93383.67 66554.67 93394.33 66544.00 93405.00C66554.67 93415.67 66565.33 93426.33 66576.00 93437.00C66565.33 93447.67 66554.67 93458.33 66544.00 93469.00C66533.33 93458.33 66522.67 93447.67 66512.00 93437.00C66512.00 93426.33 66512.00 93415.67 66512.00 93405.00C66490.67 93394.33 66469.33 93383.67 66448.00 93373.00C66426.33 93373.00 66404.67 93373.00 66383.00 93373.00C66383.00 93362.33 66383.00 93351.67 66383.00 93341.00C66372.33 93362.33 66361.67 93383.67 66351.00 93405.00C66361.67 93415.67 66372.33 93426.33 66383.00 93437.00C66361.67 93458.33 66340.33 93479.67 66319.00 93501.00C66297.67 93479.67 66276.33 93458.33 66255.00 93437.00C66233.33 93447.67 66211.67 93458.33 66190.00 93469.00C66158.00 93437.00 66126.00 93405.00 66094.00 93373.00C66094.00 93351.33 66094.00 93329.67 66094.00 93308.00C66061.67 93308.00 66029.33 93308.00 65997.00 93308.00C65975.67 93319.00 65954.33 93330.00 65933.00 93341.00C65922.33 93330.00 65911.67 93319.00 65901.00 93308.00C65901.00 93286.67 65901.00 93265.33 65901.00 93244.00C65879.67 93233.33 65858.33 93222.67 65837.00 93212.00C65826.00 93212.00 65815.00 93212.00 65804.00 93212.00C65815.00 93244.00 65826.00 93276.00 65837.00 93308.00C65815.33 93319.00 65793.67 93330.00 65772.00 93341.00C65729.33 93341.00 65686.67 93341.00 65644.00 93341.00C65644.00 93362.33 65644.00 93383.67 65644.00 93405.00C65569.00 93405.00 65494.00 93405.00 65419.00 93405.00C65386.67 93415.67 65354.33 93426.33 65322.00 93437.00C65332.67 93458.33 65343.33 93479.67 65354.00 93501.00C65332.67 93501.00 65311.33 93501.00 65290.00 93501.00C65268.56 93511.69 65247.17 93522.48 65225.71 93533.10C65161.47 93554.73 65097.24 93576.37 65033.00 93598.00C65000.67 93576.33 64968.33 93554.67 64936.00 93533.00C64904.00 93533.00 64872.00 93533.00 64840.00 93533.00C64803.01 93514.47 64766.00 93495.96 64728.84 93477.78C64722.89 93474.85 64716.95 93471.93 64711.00 93469.00C64711.00 93458.33 64711.00 93447.67 64711.00 93437.00C64679.00 93426.33 64647.00 93415.67 64615.00 93405.00C64593.33 93405.00 64571.67 93405.00 64550.00 93405.00C64539.33 93394.33 64528.67 93383.67 64518.00 93373.00C64528.67 93340.67 64539.33 93308.33 64550.00 93276.00C64539.33 93265.33 64528.67 93254.67 64518.00 93244.00C64507.33 93254.67 64496.67 93265.33 64486.00 93276.00C64486.00 93286.67 64486.00 93297.33 64486.00 93308.00C64464.67 93308.00 64443.33 93308.00 64422.00 93308.00C64400.33 93329.67 64378.67 93351.33 64357.00 93373.00C64346.33 93373.00 64335.67 93373.00 64325.00 93373.00C64325.00 93351.33 64325.00 93329.67 64325.00 93308.00C64314.33 93308.00 64303.67 93308.00 64293.00 93308.00C64293.00 93329.67 64293.00 93351.33 64293.00 93373.00C64282.33 93373.00 64271.67 93373.00 64261.00 93373.00C64239.67 93362.33 64218.33 93351.67 64197.00 93341.00C64197.00 93362.33 64197.00 93383.67 64197.00 93405.00C64186.24 93404.93 64175.44 93405.13 64164.71 93404.90C64132.47 93394.27 64100.24 93383.63 64068.00 93373.00C64068.00 93362.33 64068.00 93351.67 64068.00 93341.00C64046.67 93351.67 64025.33 93362.33 64004.00 93373.00C63982.67 93351.33 63961.33 93329.67 63940.00 93308.00C63950.67 93319.00 63961.33 93330.00 63972.00 93341.00C63950.17 93351.80 63928.24 93362.42 63906.48 93373.35C63874.65 93394.56 63842.83 93415.78 63811.00 93437.00C63800.33 93426.33 63789.67 93415.67 63779.00 93405.00C63779.00 93415.67 63779.00 93426.33 63779.00 93437.00C63757.33 93437.00 63735.67 93437.00 63714.00 93437.00C63703.33 93426.33 63692.67 93415.67 63682.00 93405.00C63671.33 93415.67 63660.67 93426.33 63650.00 93437.00C63660.67 93447.67 63671.33 93458.33 63682.00 93469.00C63671.33 93479.67 63660.67 93490.33 63650.00 93501.00C63639.33 93501.00 63628.67 93501.00 63618.00 93501.00C63618.00 93469.00 63618.00 93437.00 63618.00 93405.00C63607.33 93405.00 63596.67 93405.00 63586.00 93405.00C63575.33 93426.33 63564.67 93447.67 63554.00 93469.00C63543.00 93479.67 63532.00 93490.33 63521.00 93501.00C63489.00 93490.33 63457.00 93479.67 63425.00 93469.00C63414.33 93458.33 63403.67 93447.67 63393.00 93437.00C63393.00 93458.33 63393.00 93479.67 63393.00 93501.00C63382.33 93501.00 63371.67 93501.00 63361.00 93501.00C63361.00 93490.33 63361.00 93479.67 63361.00 93469.00C63339.33 93479.67 63317.67 93490.33 63296.00 93501.00C63285.33 93522.67 63274.67 93544.33 63264.00 93566.00C63264.00 93523.00 63264.00 93480.00 63264.00 93437.00C63253.33 93437.00 63242.67 93437.00 63232.00 93437.00C63221.33 93458.33 63210.67 93479.67 63200.00 93501.00C63178.67 93490.33 63157.33 93479.67 63136.00 93469.00C63136.00 93437.00 63136.00 93405.00 63136.00 93373.00C63114.33 93351.33 63092.67 93329.67 63071.00 93308.00C63071.00 93243.67 63071.00 93179.33 63071.00 93115.00C63049.67 93072.33 63028.33 93029.67 63007.00 92987.00C63007.00 92976.33 63007.00 92965.67 63007.00 92955.00C62985.67 92965.67 62964.33 92976.33 62943.00 92987.00C62932.33 92987.00 62921.67 92987.00 62911.00 92987.00C62889.33 92976.33 62867.67 92965.67 62846.00 92955.00C62846.00 92944.33 62846.00 92933.67 62846.00 92923.00C62824.67 92901.33 62803.33 92879.67 62782.00 92858.00C62771.33 92868.67 62760.67 92879.33 62750.00 92890.00C62739.33 92879.33 62728.67 92868.67 62718.00 92858.00C62696.33 92858.00 62674.67 92858.00 62653.00 92858.00C62664.00 92836.67 62675.00 92815.33 62686.00 92794.00C62675.00 92783.33 62664.00 92772.67 62653.00 92762.00C62642.33 92762.00 62631.67 92762.00 62621.00 92762.00C62631.67 92740.33 62642.33 92718.67 62653.00 92697.00C62642.33 92686.33 62631.67 92675.67 62621.00 92665.00C62589.00 92654.33 62557.00 92643.67 62525.00 92633.00C62525.00 92643.67 62525.00 92654.33 62525.00 92665.00C62535.67 92665.00 62546.33 92665.00 62557.00 92665.00C62546.33 92675.67 62535.67 92686.33 62525.00 92697.00C62503.33 92665.00 62481.67 92633.00 62460.00 92601.00C62460.00 92558.00 62460.00 92515.00 62460.00 92472.00C62438.67 92472.00 62417.33 92472.00 62396.00 92472.00C62385.33 92483.00 62374.67 92494.00 62364.00 92505.00C62342.67 92472.67 62321.33 92440.33 62300.00 92408.00C62278.33 92408.00 62256.67 92408.00 62235.00 92408.00C62235.00 92365.00 62235.00 92322.00 62235.00 92279.00C62213.67 92290.00 62192.33 92301.00 62171.00 92312.00C62149.67 92301.00 62128.33 92290.00 62107.00 92279.00C62107.00 92268.33 62107.00 92257.67 62107.00 92247.00C62096.33 92247.00 62085.67 92247.00 62075.00 92247.00C62064.33 92225.67 62053.67 92204.33 62043.00 92183.00C62021.33 92161.67 61999.67 92140.33 61978.00 92119.00C61978.00 92108.33 61978.00 92097.67 61978.00 92087.00C61988.67 92065.33 61999.33 92043.67 62010.00 92022.00C62010.00 91990.00 62010.00 91958.00 62010.00 91926.00C61999.33 91915.33 61988.67 91904.67 61978.00 91894.00C61967.33 91840.33 61956.67 91786.67 61946.00 91733.00C61956.67 91711.67 61967.33 91690.33 61978.00 91669.00C61960.77 91651.22 61943.61 91633.37 61925.98 91615.98C61921.99 91611.99 61918.00 91607.99 61914.00 91604.00C61903.33 91604.00 61892.67 91604.00 61882.00 91604.00C61871.33 91625.67 61860.67 91647.33 61850.00 91669.00C61839.00 91669.00 61828.00 91669.00 61817.00 91669.00C61806.33 91647.33 61795.67 91625.67 61785.00 91604.00C61763.67 91582.67 61742.33 91561.33 61721.00 91540.00C61721.00 91507.67 61721.00 91475.33 61721.00 91443.00C61699.67 91443.00 61678.33 91443.00 61657.00 91443.00C61657.00 91486.00 61657.00 91529.00 61657.00 91572.00C61646.00 91593.33 61635.00 91614.67 61624.00 91636.00C61602.67 91625.33 61581.33 91614.67 61560.00 91604.00C61560.00 91561.33 61560.00 91518.67 61560.00 91476.00C61538.67 91454.33 61517.33 91432.67 61496.00 91411.00C61485.33 91411.00 61474.67 91411.00 61464.00 91411.00C61453.33 91432.67 61442.67 91454.33 61432.00 91476.00C61421.00 91465.00 61410.00 91454.00 61399.00 91443.00C61388.33 91443.00 61377.67 91443.00 61367.00 91443.00C61356.33 91486.00 61345.67 91529.00 61335.00 91572.00C61313.67 91572.00 61292.33 91572.00 61271.00 91572.00C61271.00 91582.67 61271.00 91593.33 61271.00 91604.00C61249.67 91593.33 61228.33 91582.67 61207.00 91572.00C61217.67 91593.33 61228.33 91614.67 61239.00 91636.00C61228.33 91636.00 61217.67 91636.00 61207.00 91636.00C61185.33 91614.67 61163.67 91593.33 61142.00 91572.00C61131.33 91582.67 61120.67 91593.33 61110.00 91604.00C61099.33 91582.67 61088.67 91561.33 61078.00 91540.00C61056.67 91540.00 61035.33 91540.00 61014.00 91540.00C61003.00 91561.33 60992.00 91582.67 60981.00 91604.00C60970.33 91582.67 60959.67 91561.33 60949.00 91540.00C60927.67 91561.33 60906.33 91582.67 60885.00 91604.00C60885.00 91593.33 60885.00 91582.67 60885.00 91572.00C60895.67 91572.00 60906.33 91572.00 60917.00 91572.00C60906.33 91561.33 60895.67 91550.67 60885.00 91540.00C60874.33 91550.67 60863.67 91561.33 60853.00 91572.00C60831.33 91561.33 60809.67 91550.67 60788.00 91540.00C60777.33 91550.67 60766.67 91561.33 60756.00 91572.00C60734.67 91550.67 60713.33 91529.33 60692.00 91508.00C60681.33 91518.67 60670.67 91529.33 60660.00 91540.00C60649.33 91529.33 60638.67 91518.67 60628.00 91508.00C60628.00 91475.67 60628.00 91443.33 60628.00 91411.00C60606.33 91443.33 60584.67 91475.67 60563.00 91508.00C60552.33 91486.33 60541.67 91464.67 60531.00 91443.00C60509.67 91421.67 60488.33 91400.33 60467.00 91379.00C60467.00 91347.00 60467.00 91315.00 60467.00 91283.00C60456.33 91272.33 60445.67 91261.67 60435.00 91251.00C60424.33 91251.00 60413.67 91251.00 60403.00 91251.00C60392.33 91272.33 60381.67 91293.67 60371.00 91315.00C60360.00 91304.33 60349.00 91293.67 60338.00 91283.00C60349.00 91261.33 60360.00 91239.67 60371.00 91218.00C60371.00 91207.33 60371.00 91196.67 60371.00 91186.00C60360.00 91186.00 60349.00 91186.00 60338.00 91186.00C60327.33 91207.67 60316.67 91229.33 60306.00 91251.00C60295.33 91251.00 60284.67 91251.00 60274.00 91251.00C60274.00 91218.67 60274.00 91186.33 60274.00 91154.00C60263.33 91154.00 60252.67 91154.00 60242.00 91154.00C60231.33 91164.67 60220.67 91175.33 60210.00 91186.00C60220.67 91207.67 60231.33 91229.33 60242.00 91251.00C60209.67 91261.67 60177.33 91272.33 60145.00 91283.00C60113.00 91250.67 60081.00 91218.33 60049.00 91186.00C60027.67 91196.67 60006.33 91207.33 59985.00 91218.00C59963.33 91218.00 59941.67 91218.00 59920.00 91218.00C59813.08 91164.51 59706.00 91111.34 59599.00 91058.00C59599.00 91036.33 59599.00 91014.67 59599.00 90993.00C59620.33 90982.33 59641.67 90971.67 59663.00 90961.00C59652.33 90950.33 59641.67 90939.67 59631.00 90929.00C59609.67 90939.67 59588.33 90950.33 59567.00 90961.00C59556.33 90961.00 59545.67 90961.00 59535.00 90961.00C59524.00 90950.33 59513.00 90939.67 59502.00 90929.00C59513.00 90907.67 59524.00 90886.33 59535.00 90865.00C59535.00 90854.33 59535.00 90843.67 59535.00 90833.00C59502.67 90833.00 59470.33 90833.00 59438.00 90833.00C59448.67 90800.67 59459.33 90768.33 59470.00 90736.00C59470.00 90725.33 59470.00 90714.67 59470.00 90704.00C59459.33 90704.00 59448.67 90704.00 59438.00 90704.00C59416.67 90714.67 59395.33 90725.33 59374.00 90736.00C59374.00 90746.67 59374.00 90757.33 59374.00 90768.00C59352.33 90789.67 59330.67 90811.33 59309.00 90833.00C59277.00 90833.00 59245.00 90833.00 59213.00 90833.00C59213.00 90854.33 59213.00 90875.67 59213.00 90897.00C59202.33 90886.33 59191.67 90875.67 59181.00 90865.00C59170.33 90875.67 59159.67 90886.33 59149.00 90897.00C59127.33 90886.33 59105.67 90875.67 59084.00 90865.00C59073.33 90886.33 59062.67 90907.67 59052.00 90929.00C59052.00 90950.33 59052.00 90971.67 59052.00 90993.00C59030.67 90971.67 59009.33 90950.33 58988.00 90929.00C58988.00 90907.67 58988.00 90886.33 58988.00 90865.00C58977.33 90865.00 58966.67 90865.00 58956.00 90865.00C58945.33 90897.00 58934.67 90929.00 58924.00 90961.00C58891.67 90950.33 58859.33 90939.67 58827.00 90929.00C58805.63 90896.90 58784.17 90864.85 58762.86 90832.72C58741.57 90789.81 58720.29 90746.91 58699.00 90704.00C58699.00 90661.00 58699.00 90618.00 58699.00 90575.00C58666.67 90564.33 58634.33 90553.67 58602.00 90543.00C58580.67 90564.33 58559.33 90585.67 58538.00 90607.00C58527.33 90607.00 58516.67 90607.00 58506.00 90607.00C58495.00 90596.33 58484.00 90585.67 58473.00 90575.00C58484.00 90553.67 58495.00 90532.33 58506.00 90511.00C58484.33 90489.67 58462.67 90468.33 58441.00 90447.00C58430.33 90447.00 58419.67 90447.00 58409.00 90447.00C58387.67 90404.00 58366.33 90361.00 58345.00 90318.00C58323.67 90307.33 58302.33 90296.67 58281.00 90286.00C58281.00 90254.00 58281.00 90222.00 58281.00 90190.00C58259.33 90179.00 58237.67 90168.00 58216.00 90157.00C58194.67 90135.67 58173.33 90114.33 58152.00 90093.00C58130.67 90093.00 58109.33 90093.00 58088.00 90093.00C58077.00 90103.67 58066.00 90114.33 58055.00 90125.00C58055.00 90135.67 58055.00 90146.33 58055.00 90157.00C58044.33 90168.00 58033.67 90179.00 58023.00 90190.00C58023.00 90168.33 58023.00 90146.67 58023.00 90125.00C58001.67 90125.00 57980.33 90125.00 57959.00 90125.00C57948.33 90146.67 57937.67 90168.33 57927.00 90190.00C57916.33 90190.00 57905.67 90190.00 57895.00 90190.00C57884.33 90179.00 57873.67 90168.00 57863.00 90157.00C57863.00 90146.33 57863.00 90135.67 57863.00 90125.00C57820.00 90114.33 57777.00 90103.67 57734.00 90093.00C57723.33 90071.67 57712.67 90050.33 57702.00 90029.00C57712.67 89996.67 57723.33 89964.33 57734.00 89932.00C57712.67 89932.00 57691.33 89932.00 57670.00 89932.00C57670.00 89900.00 57670.00 89868.00 57670.00 89836.00C57648.33 89825.33 57626.67 89814.67 57605.00 89804.00C57583.61 89739.58 57562.32 89675.12 57540.86 89610.72C57530.24 89589.15 57519.62 89567.57 57509.00 89546.00C57487.67 89546.00 57466.33 89546.00 57445.00 89546.00C57423.33 89535.33 57401.67 89524.67 57380.00 89514.00C57390.67 89482.00 57401.33 89450.00 57412.00 89418.00C57433.67 89407.33 57455.33 89396.67 57477.00 89386.00C57477.00 89375.33 57477.00 89364.67 57477.00 89354.00C57466.33 89343.00 57455.67 89332.00 57445.00 89321.00C57402.00 89321.00 57359.00 89321.00 57316.00 89321.00C57316.00 89310.33 57316.00 89299.67 57316.00 89289.00C57326.67 89278.33 57337.33 89267.67 57348.00 89257.00C57348.00 89235.67 57348.00 89214.33 57348.00 89193.00C57294.33 89193.00 57240.67 89193.00 57187.00 89193.00C57187.00 89171.33 57187.00 89149.67 57187.00 89128.00C57165.67 89139.00 57144.33 89150.00 57123.00 89161.00C57123.00 89139.33 57123.00 89117.67 57123.00 89096.00C57101.67 89096.00 57080.33 89096.00 57059.00 89096.00C57059.00 89064.00 57059.00 89032.00 57059.00 89000.00C57048.33 89000.00 57037.67 89000.00 57027.00 89000.00C57016.00 89010.67 57005.00 89021.33 56994.00 89032.00C57005.00 89053.33 57016.00 89074.67 57027.00 89096.00C57005.33 89106.67 56983.67 89117.33 56962.00 89128.00C56930.00 89096.00 56898.00 89064.00 56866.00 89032.00C56855.33 89042.67 56844.67 89053.33 56834.00 89064.00C56844.67 89085.33 56855.33 89106.67 56866.00 89128.00C56866.00 89139.00 56866.00 89150.00 56866.00 89161.00C56855.33 89171.67 56844.67 89182.33 56834.00 89193.00C56801.67 89193.00 56769.33 89193.00 56737.00 89193.00C56726.33 89203.67 56715.67 89214.33 56705.00 89225.00C56673.00 89225.00 56641.00 89225.00 56609.00 89225.00C56609.00 89235.67 56609.00 89246.33 56609.00 89257.00C56619.67 89257.00 56630.33 89257.00 56641.00 89257.00C56641.00 89267.67 56641.00 89278.33 56641.00 89289.00C56651.67 89299.67 56662.33 89310.33 56673.00 89321.00C56673.00 89332.00 56673.00 89343.00 56673.00 89354.00C56651.67 89354.00 56630.33 89354.00 56609.00 89354.00C56598.00 89343.00 56587.00 89332.00 56576.00 89321.00C56512.00 89321.00 56448.00 89321.00 56384.00 89321.00C56330.33 89299.67 56276.67 89278.33 56223.00 89257.00C56190.67 89235.67 56158.33 89214.33 56126.00 89193.00C56094.00 89203.67 56062.00 89214.33 56030.00 89225.00C56019.15 89214.23 56008.45 89203.29 55997.50 89192.63C55954.67 89160.42 55911.83 89128.21 55869.00 89096.00C55858.33 89053.33 55847.67 89010.67 55837.00 88968.00C55815.67 88957.00 55794.33 88946.00 55773.00 88935.00C55762.00 88946.00 55751.00 88957.00 55740.00 88968.00C55722.77 88950.22 55705.61 88932.37 55687.98 88914.98C55683.99 88910.99 55680.00 88906.99 55676.00 88903.00C55708.33 88903.00 55740.67 88903.00 55773.00 88903.00C55751.33 88881.67 55729.67 88860.33 55708.00 88839.00C55708.00 88807.00 55708.00 88775.00 55708.00 88743.00C55601.00 88743.00 55494.00 88743.00 55387.00 88743.00C55344.00 88710.67 55301.00 88678.33 55258.00 88646.00C55226.00 88581.67 55194.00 88517.33 55162.00 88453.00C55102.18 88433.31 55042.39 88413.54 54982.67 88393.56C54945.81 88381.29 54908.89 88369.19 54872.00 88357.00C54861.33 88335.33 54850.67 88313.67 54840.00 88292.00C54786.33 88270.67 54732.67 88249.33 54679.00 88228.00C54647.00 88238.67 54615.00 88249.33 54583.00 88260.00C54561.67 88238.67 54540.33 88217.33 54519.00 88196.00C54443.67 88174.67 54368.33 88153.33 54293.00 88132.00C54250.33 88132.00 54207.67 88132.00 54165.00 88132.00C54132.67 88110.33 54100.33 88088.67 54068.00 88067.00C54042.44 88092.40 54017.18 88118.08 53991.92 88143.77C53974.75 88161.32 53957.36 88178.65 53940.00 88196.00C53929.33 88185.33 53918.67 88174.67 53908.00 88164.00C53886.33 88196.00 53864.67 88228.00 53843.00 88260.00C53811.00 88249.33 53779.00 88238.67 53747.00 88228.00C53715.00 88206.67 53683.00 88185.33 53651.00 88164.00C53629.33 88164.00 53607.67 88164.00 53586.00 88164.00C53575.33 88174.67 53564.67 88185.33 53554.00 88196.00C53554.00 88217.33 53554.00 88238.67 53554.00 88260.00C53543.33 88292.33 53532.67 88324.67 53522.00 88357.00C53522.00 88389.00 53522.00 88421.00 53522.00 88453.00C53511.33 88463.67 53500.67 88474.33 53490.00 88485.00C53468.33 88485.00 53446.67 88485.00 53425.00 88485.00C53393.00 88506.67 53361.00 88528.33 53329.00 88550.00C53296.67 88560.67 53264.33 88571.33 53232.00 88582.00C53221.15 88571.23 53210.45 88560.29 53199.50 88549.62C53157.00 88517.42 53114.50 88485.21 53072.00 88453.00C53061.33 88453.00 53050.67 88453.00 53040.00 88453.00C53040.00 88463.67 53040.00 88474.33 53040.00 88485.00C53029.00 88496.00 53018.00 88507.00 53007.00 88518.00C52985.67 88496.33 52964.33 88474.67 52943.00 88453.00C52921.67 88474.67 52900.33 88496.33 52879.00 88518.00C52868.33 88518.00 52857.67 88518.00 52847.00 88518.00C52836.33 88485.67 52825.67 88453.33 52815.00 88421.00C52793.33 88410.33 52771.67 88399.67 52750.00 88389.00C52739.33 88389.00 52728.67 88389.00 52718.00 88389.00C52707.33 88399.67 52696.67 88410.33 52686.00 88421.00C52664.67 88421.00 52643.33 88421.00 52622.00 88421.00C52622.00 88399.67 52622.00 88378.33 52622.00 88357.00C52611.00 88357.00 52600.00 88357.00 52589.00 88357.00C52557.00 88389.00 52525.00 88421.00 52493.00 88453.00C52482.33 88453.00 52471.67 88453.00 52461.00 88453.00C52461.00 88421.00 52461.00 88389.00 52461.00 88357.00C52450.33 88346.33 52439.67 88335.67 52429.00 88325.00C52407.33 88325.00 52385.67 88325.00 52364.00 88325.00C52353.33 88367.67 52342.67 88410.33 52332.00 88453.00C52332.00 88463.67 52332.00 88474.33 52332.00 88485.00C52300.00 88485.00 52268.00 88485.00 52236.00 88485.00C52225.33 88474.33 52214.67 88463.67 52204.00 88453.00C52214.67 88431.67 52225.33 88410.33 52236.00 88389.00C52236.00 88346.00 52236.00 88303.00 52236.00 88260.00C52214.33 88260.00 52192.67 88260.00 52171.00 88260.00C52160.33 88270.67 52149.67 88281.33 52139.00 88292.00C52128.33 88292.00 52117.67 88292.00 52107.00 88292.00C52085.67 88281.33 52064.33 88270.67 52043.00 88260.00C52032.33 88260.00 52021.67 88260.00 52011.00 88260.00C51989.33 88238.67 51967.67 88217.33 51946.00 88196.00C51914.00 88239.00 51882.00 88282.00 51850.00 88325.00C51817.67 88335.67 51785.33 88346.33 51753.00 88357.00C51742.33 88378.33 51731.67 88399.67 51721.00 88421.00C51710.33 88431.67 51699.67 88442.33 51689.00 88453.00C51667.67 88431.67 51646.33 88410.33 51625.00 88389.00C51635.67 88356.67 51646.33 88324.33 51657.00 88292.00C51657.00 88270.67 51657.00 88249.33 51657.00 88228.00C51571.23 88227.97 51485.46 88228.05 51399.69 88227.96C51314.13 88217.31 51228.56 88206.65 51143.00 88196.00C51120.56 88173.83 51097.97 88151.81 51075.62 88129.54C51060.11 88113.56 51044.72 88097.46 51028.78 88081.91C50991.52 88044.94 50954.26 88007.97 50917.00 87971.00C50895.67 87938.67 50874.33 87906.33 50853.00 87874.00C50788.78 87841.78 50724.36 87809.95 50660.00 87778.00C50649.33 87746.00 50638.67 87714.00 50628.00 87682.00C50628.00 87671.00 50628.00 87660.00 50628.00 87649.00C50638.67 87627.67 50649.33 87606.33 50660.00 87585.00C50670.67 87531.33 50681.33 87477.67 50692.00 87424.00C50692.00 87370.33 50692.00 87316.67 50692.00 87263.00C50681.33 87209.67 50670.67 87156.33 50660.00 87103.00C50649.33 87092.33 50638.67 87081.67 50628.00 87071.00C50563.78 87103.22 50499.36 87135.05 50435.00 87167.00C50424.33 87167.00 50413.67 87167.00 50403.00 87167.00C50381.58 87134.94 50360.28 87102.78 50338.78 87070.78C50328.19 87059.85 50317.59 87048.93 50307.00 87038.00C50242.67 87038.00 50178.33 87038.00 50114.00 87038.00C50027.90 87005.99 49941.82 86973.88 49855.70 86941.93C49813.13 86931.28 49770.57 86920.64 49728.00 86910.00C49706.33 86888.67 49684.67 86867.33 49663.00 86846.00C49652.33 86792.33 49641.67 86738.67 49631.00 86685.00C49641.67 86652.67 49652.33 86620.33 49663.00 86588.00C49684.67 86556.00 49706.33 86524.00 49728.00 86492.00C49728.00 86481.33 49728.00 86470.67 49728.00 86460.00C49706.33 86438.33 49684.67 86416.67 49663.00 86395.00C49652.33 86406.00 49641.67 86417.00 49631.00 86428.00C49599.00 86438.67 49567.00 86449.33 49535.00 86460.00C49545.67 86492.00 49556.33 86524.00 49567.00 86556.00C49567.00 86588.33 49567.00 86620.67 49567.00 86653.00C49556.33 86685.00 49545.67 86717.00 49535.00 86749.00C49502.67 86749.00 49470.33 86749.00 49438.00 86749.00C49427.33 86727.67 49416.67 86706.33 49406.00 86685.00C49427.67 86631.33 49449.33 86577.67 49471.00 86524.00C49453.22 86506.77 49435.37 86489.61 49417.98 86471.98C49413.69 86467.86 49409.70 86463.37 49405.23 86459.48C49373.49 86437.99 49341.74 86416.49 49310.00 86395.00C49288.33 86395.00 49266.67 86395.00 49245.00 86395.00C49234.25 86416.74 49223.64 86438.56 49212.81 86460.25C49180.88 86502.83 49148.94 86545.42 49117.00 86588.00C49106.33 86588.00 49095.67 86588.00 49085.00 86588.00C49074.33 86566.67 49063.67 86545.33 49053.00 86524.00C49053.00 86502.67 49053.00 86481.33 49053.00 86460.00C49074.33 86427.67 49095.67 86395.33 49117.00 86363.00C49138.33 86352.33 49159.67 86341.67 49181.00 86331.00C49191.67 86309.67 49202.33 86288.33 49213.00 86267.00C49194.57 86229.51 49176.13 86192.02 49157.35 86154.70C49143.90 86127.80 49130.45 86100.90 49117.00 86074.00C49106.33 86063.33 49095.67 86052.67 49085.00 86042.00C49010.00 86042.00 48935.00 86042.00 48860.00 86042.00C48806.33 86074.00 48752.67 86106.00 48699.00 86138.00C48677.63 86116.57 48656.12 86095.24 48634.83 86073.74C48613.13 86041.43 48591.56 86009.02 48569.78 85976.78C48559.19 85966.19 48548.59 85955.59 48538.00 85945.00C48516.67 85955.67 48495.33 85966.33 48474.00 85977.00C48463.33 86009.33 48452.67 86041.67 48442.00 86074.00C48420.33 86074.00 48398.67 86074.00 48377.00 86074.00C48355.67 86031.00 48334.33 85988.00 48313.00 85945.00C48302.24 85945.07 48291.44 85944.87 48280.71 85945.10C48248.47 85955.73 48216.24 85966.37 48184.00 85977.00C48173.33 85977.00 48162.67 85977.00 48152.00 85977.00C48152.00 85955.67 48152.00 85934.33 48152.00 85913.00C48162.67 85891.67 48173.33 85870.33 48184.00 85849.00C48173.33 85838.33 48162.67 85827.67 48152.00 85817.00C48141.33 85827.67 48130.67 85838.33 48120.00 85849.00C48120.00 85838.33 48120.00 85827.67 48120.00 85817.00C48141.33 85784.67 48162.67 85752.33 48184.00 85720.00C48205.67 85645.00 48227.33 85570.00 48249.00 85495.00C48238.33 85484.33 48227.67 85473.67 48217.00 85463.00C48195.33 85452.33 48173.67 85441.67 48152.00 85431.00C48109.33 85431.00 48066.67 85431.00 48024.00 85431.00C48002.33 85398.67 47980.67 85366.33 47959.00 85334.00C47959.08 85323.24 47958.85 85312.43 47959.12 85301.71C47980.74 85248.14 48002.37 85194.57 48024.00 85141.00C48024.00 85087.67 48024.00 85034.33 48024.00 84981.00C47991.67 84884.33 47959.33 84787.67 47927.00 84691.00C47927.00 84669.67 47927.00 84648.33 47927.00 84627.00C47916.33 84605.67 47905.67 84584.33 47895.00 84563.00C47873.67 84563.00 47852.33 84563.00 47831.00 84563.00C47788.00 84584.33 47745.00 84605.67 47702.00 84627.00C47616.33 84627.00 47530.67 84627.00 47445.00 84627.00C47434.33 84637.67 47423.67 84648.33 47413.00 84659.00C47434.33 84680.33 47455.67 84701.67 47477.00 84723.00C47477.00 84744.67 47477.00 84766.33 47477.00 84788.00C47455.67 84788.00 47434.33 84788.00 47413.00 84788.00C47348.67 84755.67 47284.33 84723.33 47220.00 84691.00C47176.94 84658.91 47133.79 84626.92 47090.78 84594.78C47080.19 84584.19 47069.59 84573.59 47059.00 84563.00C47112.67 84509.33 47166.33 84455.67 47220.00 84402.00C47241.33 84359.00 47262.67 84316.00 47284.00 84273.00C47284.00 84262.33 47284.00 84251.67 47284.00 84241.00C47262.67 84198.33 47241.33 84155.67 47220.00 84113.00C47220.00 84102.00 47220.00 84091.00 47220.00 84080.00C47230.67 84058.67 47241.33 84037.33 47252.00 84016.00C47230.67 83994.67 47209.33 83973.33 47188.00 83952.00C47188.00 83930.33 47188.00 83908.67 47188.00 83887.00C47220.00 83855.00 47252.00 83823.00 47284.00 83791.00C47294.67 83759.00 47305.33 83727.00 47316.00 83695.00C47298.77 83677.22 47281.61 83659.37 47263.98 83641.98C47259.99 83637.99 47256.00 83633.99 47252.00 83630.00C47198.33 83630.00 47144.67 83630.00 47091.00 83630.00C47026.67 83608.67 46962.33 83587.33 46898.00 83566.00C46887.33 83566.00 46876.67 83566.00 46866.00 83566.00C46855.33 83544.67 46844.67 83523.33 46834.00 83502.00C46812.67 83384.00 46791.33 83266.00 46770.00 83148.00C46770.00 83094.33 46770.00 83040.67 46770.00 82987.00C46748.33 82933.33 46726.67 82879.67 46705.00 82826.00C46715.67 82804.67 46726.33 82783.33 46737.00 82762.00C46790.67 82751.33 46844.33 82740.67 46898.00 82730.00C46908.67 82719.33 46919.33 82708.67 46930.00 82698.00C46919.33 82676.33 46908.67 82654.67 46898.00 82633.00C46833.67 82633.00 46769.33 82633.00 46705.00 82633.00C46694.33 82622.33 46683.67 82611.67 46673.00 82601.00C46651.67 82515.33 46630.33 82429.67 46609.00 82344.00C46609.00 82290.33 46609.00 82236.67 46609.00 82183.00C46619.67 82172.33 46630.33 82161.67 46641.00 82151.00C46684.00 82140.33 46727.00 82129.67 46770.00 82119.00C46780.67 82108.33 46791.33 82097.67 46802.00 82087.00C46791.33 82065.67 46780.67 82044.33 46770.00 82023.00C46727.00 82023.00 46684.00 82023.00 46641.00 82023.00C46619.67 81958.67 46598.33 81894.33 46577.00 81830.00C46577.00 81808.33 46577.00 81786.67 46577.00 81765.00C46630.33 81711.67 46683.67 81658.33 46737.00 81605.00C46812.33 81583.33 46887.67 81561.67 46963.00 81540.00C46973.67 81518.67 46984.33 81497.33 46995.00 81476.00C46962.89 81411.55 46930.38 81347.31 46898.00 81283.00C46887.33 81272.33 46876.67 81261.67 46866.00 81251.00C46919.76 81207.95 46973.47 81164.84 47027.26 81121.83C47059.17 81100.55 47091.09 81079.28 47123.00 81058.00C47123.00 81047.33 47123.00 81036.67 47123.00 81026.00C47091.00 80993.67 47059.00 80961.33 47027.00 80929.00C47007.12 80869.47 46987.31 80809.91 46967.71 80750.29C46966.18 80745.42 46964.38 80740.59 46963.00 80735.69C46963.00 80725.13 46963.00 80714.56 46963.00 80704.00C46995.00 80714.67 47027.00 80725.33 47059.00 80736.00C47037.67 80650.33 47016.33 80564.67 46995.00 80479.00C46930.67 80393.33 46866.33 80307.67 46802.00 80222.00C46769.67 80200.67 46737.33 80179.33 46705.00 80158.00C46683.67 80158.00 46662.33 80158.00 46641.00 80158.00C46619.67 80147.33 46598.33 80136.67 46577.00 80126.00C46577.00 80093.67 46577.00 80061.33 46577.00 80029.00C46598.33 80029.00 46619.67 80029.00 46641.00 80029.00C46651.67 79997.00 46662.33 79965.00 46673.00 79933.00C46662.33 79900.67 46651.67 79868.33 46641.00 79836.00C46651.67 79793.00 46662.33 79750.00 46673.00 79707.00C46673.00 79675.00 46673.00 79643.00 46673.00 79611.00C46653.12 79551.47 46633.31 79491.91 46613.71 79432.29C46612.14 79427.53 46610.57 79422.76 46609.00 79418.00C46576.67 79407.33 46544.33 79396.67 46512.00 79386.00C46480.00 79386.00 46448.00 79386.00 46416.00 79386.00C46405.33 79375.33 46394.67 79364.67 46384.00 79354.00C46384.00 79343.33 46384.00 79332.67 46384.00 79322.00C46366.73 79304.74 46349.39 79287.55 46332.51 79269.90C46328.34 79265.60 46324.17 79261.30 46320.00 79257.00C46330.67 79246.33 46341.33 79235.67 46352.00 79225.00C46352.00 79203.67 46352.00 79182.33 46352.00 79161.00C46373.33 79150.33 46394.67 79139.67 46416.00 79129.00C46415.95 79107.24 46416.10 79085.45 46415.93 79063.70C46405.28 79021.13 46394.64 78978.57 46384.00 78936.00C46362.67 78903.67 46341.33 78871.33 46320.00 78839.00C46330.67 78796.33 46341.33 78753.67 46352.00 78711.00C46330.33 78689.33 46308.67 78667.67 46287.00 78646.00C46276.33 78624.67 46265.67 78603.33 46255.00 78582.00C46265.67 78550.00 46276.33 78518.00 46287.00 78486.00C46319.33 78486.00 46351.67 78486.00 46384.00 78486.00C46405.38 78464.24 46426.87 78442.57 46448.17 78420.74C46469.45 78388.83 46490.72 78356.91 46512.00 78325.00C46512.00 78271.33 46512.00 78217.67 46512.00 78164.00C46490.67 78121.33 46469.33 78078.67 46448.00 78036.00C46469.33 78003.67 46490.67 77971.33 46512.00 77939.00C46533.67 77928.33 46555.33 77917.67 46577.00 77907.00C46609.08 77863.94 46641.08 77820.79 46673.22 77777.78C46705.48 77745.85 46737.74 77713.93 46770.00 77682.00C46791.33 77617.67 46812.67 77553.33 46834.00 77489.00C46844.67 77478.33 46855.33 77467.67 46866.00 77457.00C46884.43 77419.51 46902.87 77382.02 46921.65 77344.70C46924.38 77339.02 46927.50 77333.43 46930.00 77327.69C46930.00 77306.46 46930.00 77285.23 46930.00 77264.00C46908.67 77221.00 46887.33 77178.00 46866.00 77135.00C46866.00 77103.00 46866.00 77071.00 46866.00 77039.00C46876.67 76996.00 46887.33 76953.00 46898.00 76910.00C46887.33 76845.67 46876.67 76781.33 46866.00 76717.00C46844.67 76695.67 46823.33 76674.33 46802.00 76653.00C46791.33 76610.00 46780.67 76567.00 46770.00 76524.00C46759.00 76502.67 46748.00 76481.33 46737.00 76460.00C46758.67 76385.00 46780.33 76310.00 46802.00 76235.00C46791.33 76192.00 46780.67 76149.00 46770.00 76106.00C46759.00 76084.67 46748.00 76063.33 46737.00 76042.00C46737.00 75988.33 46737.00 75934.67 46737.00 75881.00C46748.00 75838.33 46759.00 75795.67 46770.00 75753.00C46823.33 75699.33 46876.67 75645.67 46930.00 75592.00C46941.00 75549.00 46952.00 75506.00 46963.00 75463.00C46952.00 75441.67 46941.00 75420.33 46930.00 75399.00C46887.33 75367.00 46844.67 75335.00 46802.00 75303.00C46780.23 75249.15 46758.57 75195.26 46736.72 75141.44C46715.48 75098.63 46694.24 75055.81 46673.00 75013.00C46662.33 74970.33 46651.67 74927.67 46641.00 74885.00C46617.29 74861.02 46593.78 74836.84 46569.93 74812.99C46529.29 74772.66 46488.64 74732.33 46448.00 74692.00C46362.33 74659.67 46276.67 74627.33 46191.00 74595.00C46191.00 74605.67 46191.00 74616.33 46191.00 74627.00C46201.67 74637.67 46212.33 74648.33 46223.00 74659.00C46223.00 74670.00 46223.00 74681.00 46223.00 74692.00C46212.33 74713.33 46201.67 74734.67 46191.00 74756.00C46148.00 74777.33 46105.00 74798.67 46062.00 74820.00C46051.33 74820.00 46040.67 74820.00 46030.00 74820.00C46019.33 74809.33 46008.67 74798.67 45998.00 74788.00C45998.00 74798.67 45998.00 74809.33 45998.00 74820.00C46008.67 74841.67 46019.33 74863.33 46030.00 74885.00C45998.00 74895.67 45966.00 74906.33 45934.00 74917.00C45934.00 75002.67 45934.00 75088.33 45934.00 75174.00C45912.33 75184.67 45890.67 75195.33 45869.00 75206.00C45837.00 75184.67 45805.00 75163.33 45773.00 75142.00C45762.33 75184.67 45751.67 75227.33 45741.00 75270.00C45719.33 75270.00 45697.67 75270.00 45676.00 75270.00C45665.33 75281.00 45654.67 75292.00 45644.00 75303.00C45644.07 75313.76 45643.87 75324.56 45644.10 75335.29C45654.73 75367.20 45665.37 75399.10 45676.00 75431.00C45676.00 75441.67 45676.00 75452.33 45676.00 75463.00C45665.33 75463.00 45654.67 75463.00 45644.00 75463.00C45633.33 75452.33 45622.67 75441.67 45612.00 75431.00C45569.33 75441.67 45526.67 75452.33 45484.00 75463.00C45484.00 75431.00 45484.00 75399.00 45484.00 75367.00C45473.00 75367.00 45462.00 75367.00 45451.00 75367.00C45429.67 75377.67 45408.33 75388.33 45387.00 75399.00C45376.33 75409.67 45365.67 75420.33 45355.00 75431.00C45344.33 75420.33 45333.67 75409.67 45323.00 75399.00C45312.33 75356.00 45301.67 75313.00 45291.00 75270.00C45280.33 75270.00 45269.67 75270.00 45259.00 75270.00C45248.00 75291.67 45237.00 75313.33 45226.00 75335.00C45226.00 75324.33 45226.00 75313.67 45226.00 75303.00C45215.33 75292.00 45204.67 75281.00 45194.00 75270.00C45215.67 75248.67 45237.33 75227.33 45259.00 75206.00C45237.33 75206.00 45215.67 75206.00 45194.00 75206.00C45172.67 75184.67 45151.33 75163.33 45130.00 75142.00C45097.67 75174.00 45065.33 75206.00 45033.00 75238.00C45033.00 75259.67 45033.00 75281.33 45033.00 75303.00C45001.00 75292.00 44969.00 75281.00 44937.00 75270.00C44958.33 75238.00 44979.67 75206.00 45001.00 75174.00C44979.67 75152.67 44958.33 75131.33 44937.00 75110.00C44937.00 75099.00 44937.00 75088.00 44937.00 75077.00C44979.67 75077.00 45022.33 75077.00 45065.00 75077.00C45076.00 75066.33 45087.00 75055.67 45098.00 75045.00C45087.00 75045.00 45076.00 75045.00 45065.00 75045.00C45065.00 75023.67 45065.00 75002.33 45065.00 74981.00C45043.67 74991.67 45022.33 75002.33 45001.00 75013.00C44990.33 75023.67 44979.67 75034.33 44969.00 75045.00C44926.00 75045.00 44883.00 75045.00 44840.00 75045.00C44829.33 75055.67 44818.67 75066.33 44808.00 75077.00C44808.00 75098.67 44808.00 75120.33 44808.00 75142.00C44797.33 75142.00 44786.67 75142.00 44776.00 75142.00C44754.67 75120.33 44733.33 75098.67 44712.00 75077.00C44690.67 75066.33 44669.33 75055.67 44648.00 75045.00C44658.67 75023.67 44669.33 75002.33 44680.00 74981.00C44680.00 74959.67 44680.00 74938.33 44680.00 74917.00C44658.33 74927.67 44636.67 74938.33 44615.00 74949.00C44615.07 74959.76 44614.86 74970.56 44615.10 74981.29C44626.07 75013.20 44637.03 75045.10 44648.00 75077.00C44637.00 75088.00 44626.00 75099.00 44615.00 75110.00C44604.33 75131.33 44593.67 75152.67 44583.00 75174.00C44572.33 75184.67 44561.67 75195.33 44551.00 75206.00C44540.33 75195.33 44529.67 75184.67 44519.00 75174.00C44519.00 75184.67 44519.00 75195.33 44519.00 75206.00C44508.31 75195.22 44497.41 75184.60 44486.86 75173.72C44476.24 75152.48 44465.62 75131.24 44455.00 75110.00C44476.33 75099.00 44497.67 75088.00 44519.00 75077.00C44519.00 75066.33 44519.00 75055.67 44519.00 75045.00C44508.33 75045.00 44497.67 75045.00 44487.00 75045.00C44476.33 75034.33 44465.67 75023.67 44455.00 75013.00C44444.33 75013.00 44433.67 75013.00 44423.00 75013.00C44423.00 75034.33 44423.00 75055.67 44423.00 75077.00C44401.33 75077.00 44379.67 75077.00 44358.00 75077.00C44358.00 75098.67 44358.00 75120.33 44358.00 75142.00C44347.33 75152.67 44336.67 75163.33 44326.00 75174.00C44326.00 75184.67 44326.00 75195.33 44326.00 75206.00C44272.33 75206.00 44218.67 75206.00 44165.00 75206.00C44175.67 75184.67 44186.33 75163.33 44197.00 75142.00C44197.00 75131.33 44197.00 75120.67 44197.00 75110.00C44208.00 75099.00 44219.00 75088.00 44230.00 75077.00C44212.22 75059.77 44194.37 75042.61 44176.98 75024.98C44172.99 75020.99 44169.00 75016.99 44165.00 75013.00C44143.67 75013.00 44122.33 75013.00 44101.00 75013.00C44079.67 75023.67 44058.33 75034.33 44037.00 75045.00C44037.00 75055.67 44037.00 75066.33 44037.00 75077.00C44015.33 75077.00 43993.67 75077.00 43972.00 75077.00C43972.00 75055.67 43972.00 75034.33 43972.00 75013.00C43961.33 75013.00 43950.67 75013.00 43940.00 75013.00C43929.33 75023.67 43918.67 75034.33 43908.00 75045.00C43918.67 75055.67 43929.33 75066.33 43940.00 75077.00C43929.33 75077.00 43918.67 75077.00 43908.00 75077.00C43897.33 75088.00 43886.67 75099.00 43876.00 75110.00C43876.00 75099.00 43876.00 75088.00 43876.00 75077.00C43865.33 75066.33 43854.67 75055.67 43844.00 75045.00C43820.50 75056.65 43796.88 75068.04 43773.47 75079.85C43753.98 75089.90 43734.49 75099.95 43715.00 75110.00C43704.33 75152.67 43693.67 75195.33 43683.00 75238.00C43704.33 75248.67 43725.67 75259.33 43747.00 75270.00C43736.33 75270.00 43725.67 75270.00 43715.00 75270.00C43693.67 75259.33 43672.33 75248.67 43651.00 75238.00C43651.00 75259.67 43651.00 75281.33 43651.00 75303.00C43640.33 75292.00 43629.67 75281.00 43619.00 75270.00C43608.33 75270.00 43597.67 75270.00 43587.00 75270.00C43587.00 75248.67 43587.00 75227.33 43587.00 75206.00C43554.67 75238.33 43522.33 75270.67 43490.00 75303.00C43479.33 75303.00 43468.67 75303.00 43458.00 75303.00C43436.67 75260.00 43415.33 75217.00 43394.00 75174.00C43340.33 75174.00 43286.67 75174.00 43233.00 75174.00C43211.33 75184.67 43189.67 75195.33 43168.00 75206.00C43179.00 75216.67 43190.00 75227.33 43201.00 75238.00C43190.00 75238.00 43179.00 75238.00 43168.00 75238.00C43157.33 75259.67 43146.67 75281.33 43136.00 75303.00C43125.33 75292.00 43114.67 75281.00 43104.00 75270.00C43104.00 75238.00 43104.00 75206.00 43104.00 75174.00C43082.67 75174.00 43061.33 75174.00 43040.00 75174.00C43040.00 75184.67 43040.00 75195.33 43040.00 75206.00C43018.67 75206.00 42997.33 75206.00 42976.00 75206.00C42976.00 75195.33 42976.00 75184.67 42976.00 75174.00C42965.00 75184.67 42954.00 75195.33 42943.00 75206.00C42932.33 75195.33 42921.67 75184.67 42911.00 75174.00C42900.33 75184.67 42889.67 75195.33 42879.00 75206.00C42868.33 75195.33 42857.67 75184.67 42847.00 75174.00C42815.00 75184.67 42783.00 75195.33 42751.00 75206.00C42751.00 75227.33 42751.00 75248.67 42751.00 75270.00C42718.67 75270.00 42686.33 75270.00 42654.00 75270.00C42654.00 75281.00 42654.00 75292.00 42654.00 75303.00C42664.67 75324.33 42675.33 75345.67 42686.00 75367.00C42675.33 75356.33 42664.67 75345.67 42654.00 75335.00C42643.33 75345.67 42632.67 75356.33 42622.00 75367.00C42632.67 75367.00 42643.33 75367.00 42654.00 75367.00C42632.67 75377.67 42611.33 75388.33 42590.00 75399.00C42579.33 75399.00 42568.67 75399.00 42558.00 75399.00C42546.90 75388.29 42535.90 75377.46 42524.74 75366.83C42492.83 75345.55 42460.91 75324.28 42429.00 75303.00C42429.00 75324.33 42429.00 75345.67 42429.00 75367.00C42418.33 75356.33 42407.67 75345.67 42397.00 75335.00C42397.00 75345.67 42397.00 75356.33 42397.00 75367.00C42386.33 75377.67 42375.67 75388.33 42365.00 75399.00C42354.00 75399.00 42343.00 75399.00 42332.00 75399.00C42310.67 75409.67 42289.33 75420.33 42268.00 75431.00C42268.00 75409.67 42268.00 75388.33 42268.00 75367.00C42257.33 75377.67 42246.67 75388.33 42236.00 75399.00C42236.00 75420.33 42236.00 75441.67 42236.00 75463.00C42225.33 75463.00 42214.67 75463.00 42204.00 75463.00C42182.67 75452.33 42161.33 75441.67 42140.00 75431.00C42129.00 75431.00 42118.00 75431.00 42107.00 75431.00C42096.33 75420.33 42085.67 75409.67 42075.00 75399.00C42064.33 75409.67 42053.67 75420.33 42043.00 75431.00C42000.33 75431.00 41957.67 75431.00 41915.00 75431.00C41904.00 75441.67 41893.00 75452.33 41882.00 75463.00C41882.00 75495.33 41882.00 75527.67 41882.00 75560.00C41839.33 75570.67 41796.67 75581.33 41754.00 75592.00C41721.67 75581.33 41689.33 75570.67 41657.00 75560.00C41657.00 75570.67 41657.00 75581.33 41657.00 75592.00C41646.33 75602.67 41635.67 75613.33 41625.00 75624.00C41625.00 75634.67 41625.00 75645.33 41625.00 75656.00C41614.33 75656.00 41603.67 75656.00 41593.00 75656.00C41582.33 75666.67 41571.67 75677.33 41561.00 75688.00C41561.00 75699.00 41561.00 75710.00 41561.00 75721.00C41582.33 75721.00 41603.67 75721.00 41625.00 75721.00C41603.67 75721.00 41582.33 75721.00 41561.00 75721.00C41550.33 75710.00 41539.67 75699.00 41529.00 75688.00C41539.67 75656.00 41550.33 75624.00 41561.00 75592.00C41539.67 75581.33 41518.33 75570.67 41497.00 75560.00C41486.00 75570.67 41475.00 75581.33 41464.00 75592.00C41442.67 75592.00 41421.33 75592.00 41400.00 75592.00C41410.67 75602.67 41421.33 75613.33 41432.00 75624.00C41421.33 75624.00 41410.67 75624.00 41400.00 75624.00C41378.67 75613.33 41357.33 75602.67 41336.00 75592.00C41303.67 75592.00 41271.33 75592.00 41239.00 75592.00C41239.00 75613.33 41239.00 75634.67 41239.00 75656.00C41228.33 75656.00 41217.67 75656.00 41207.00 75656.00C41207.00 75645.33 41207.00 75634.67 41207.00 75624.00C41185.67 75624.00 41164.33 75624.00 41143.00 75624.00C41132.33 75634.67 41121.67 75645.33 41111.00 75656.00C41100.24 75655.93 41089.44 75656.13 41078.71 75655.90C41046.47 75645.27 41014.24 75634.63 40982.00 75624.00C40982.00 75645.33 40982.00 75666.67 40982.00 75688.00C40960.67 75677.33 40939.33 75666.67 40918.00 75656.00C40907.33 75656.00 40896.67 75656.00 40886.00 75656.00C40896.67 75666.67 40907.33 75677.33 40918.00 75688.00C40907.33 75699.00 40896.67 75710.00 40886.00 75721.00C40875.00 75710.00 40864.00 75699.00 40853.00 75688.00C40842.33 75699.00 40831.67 75710.00 40821.00 75721.00C40821.00 75731.67 40821.00 75742.33 40821.00 75753.00C40810.33 75742.33 40799.67 75731.67 40789.00 75721.00C40735.33 75710.00 40681.67 75699.00 40628.00 75688.00C40338.67 75559.67 40049.33 75431.33 39760.00 75303.00z"},"br-23":{"name":"Roraima","path":"M52171.00 10353.00C52171.00 10235.00 52171.00 10117.00 52171.00 9999.00C52138.92 9956.27 52106.92 9913.46 52074.78 9870.78C52010.52 9806.52 51946.26 9742.26 51882.00 9678.00C51860.67 9645.67 51839.33 9613.33 51818.00 9581.00C51785.67 9559.67 51753.33 9538.33 51721.00 9517.00C51720.92 9506.24 51721.15 9495.43 51720.89 9484.71C51699.59 9431.14 51678.29 9377.57 51657.00 9324.00C51603.33 9291.67 51549.67 9259.33 51496.00 9227.00C51474.67 9205.67 51453.33 9184.33 51432.00 9163.00C51357.00 9120.33 51282.00 9077.67 51207.00 9035.00C51174.67 9024.00 51142.33 9013.00 51110.00 9002.00C51078.00 8980.67 51046.00 8959.33 51014.00 8938.00C50981.67 8927.33 50949.33 8916.67 50917.00 8906.00C50874.33 8916.67 50831.67 8927.33 50789.00 8938.00C50778.23 8927.15 50767.28 8916.45 50756.62 8905.50C50724.37 8862.57 50692.05 8819.69 50659.84 8776.73C50627.89 8723.49 50595.95 8670.24 50564.00 8617.00C50520.94 8584.58 50477.79 8552.25 50434.78 8519.78C50402.85 8487.85 50370.93 8455.93 50339.00 8424.00C50328.33 8349.00 50317.67 8274.00 50307.00 8199.00C50274.67 8188.00 50242.33 8177.00 50210.00 8166.00C50178.00 8144.67 50146.00 8123.33 50114.00 8102.00C50092.33 8059.33 50070.67 8016.67 50049.00 7974.00C50015.07 7951.09 49981.26 7928.01 49947.26 7905.21C49916.84 7885.14 49886.42 7865.07 49856.00 7845.00C49856.00 7834.33 49856.00 7823.67 49856.00 7813.00C49845.33 7802.33 49834.67 7791.67 49824.00 7781.00C49813.33 7738.00 49802.67 7695.00 49792.00 7652.00C49760.00 7609.00 49728.00 7566.00 49696.00 7523.00C49674.33 7458.67 49652.67 7394.33 49631.00 7330.00C49609.57 7308.62 49588.24 7287.12 49566.74 7265.83C49534.59 7244.35 49502.35 7222.99 49470.25 7201.44C49422.56 7165.64 49374.99 7129.67 49327.21 7093.99C49289.14 7065.66 49251.07 7037.33 49213.00 7009.00C49191.67 6944.67 49170.33 6880.33 49149.00 6816.00C49149.00 6762.33 49149.00 6708.67 49149.00 6655.00C49159.67 6623.00 49170.33 6591.00 49181.00 6559.00C49213.33 6526.67 49245.67 6494.33 49278.00 6462.00C49299.33 6462.00 49320.67 6462.00 49342.00 6462.00C49481.33 6526.33 49620.67 6590.67 49760.00 6655.00C49813.67 6708.67 49867.33 6762.33 49921.00 6816.00C49974.33 6934.00 50027.67 7052.00 50081.00 7170.00C50134.67 7212.67 50188.33 7255.33 50242.00 7298.00C50295.67 7319.67 50349.33 7341.33 50403.00 7363.00C50424.33 7341.33 50445.67 7319.67 50467.00 7298.00C50499.33 7298.00 50531.67 7298.00 50564.00 7298.00C50596.00 7308.67 50628.00 7319.33 50660.00 7330.00C50660.00 7319.33 50660.00 7308.67 50660.00 7298.00C50735.00 7287.33 50810.00 7276.67 50885.00 7266.00C50928.00 7244.67 50971.00 7223.33 51014.00 7202.00C51078.44 7202.03 51142.88 7201.95 51207.31 7202.04C51292.87 7212.69 51378.44 7223.35 51464.00 7234.00C51507.00 7223.33 51550.00 7212.67 51593.00 7202.00C51614.33 7191.33 51635.67 7180.67 51657.00 7170.00C51689.00 7170.00 51721.00 7170.00 51753.00 7170.00C51753.00 7191.33 51753.00 7212.67 51753.00 7234.00C51785.33 7234.00 51817.67 7234.00 51850.00 7234.00C51882.09 7244.73 51914.22 7255.35 51946.28 7266.14C51967.85 7276.76 51989.43 7287.38 52011.00 7298.00C52053.67 7298.00 52096.33 7298.00 52139.00 7298.00C52171.33 7276.67 52203.67 7255.33 52236.00 7234.00C52246.67 7234.00 52257.33 7234.00 52268.00 7234.00C52289.33 7266.00 52310.67 7298.00 52332.00 7330.00C52353.33 7330.00 52374.67 7330.00 52396.00 7330.00C52428.33 7362.33 52460.67 7394.67 52493.00 7427.00C52525.00 7480.67 52557.00 7534.33 52589.00 7588.00C52589.00 7609.33 52589.00 7630.67 52589.00 7652.00C52578.33 7662.67 52567.67 7673.33 52557.00 7684.00C52567.67 7705.33 52578.33 7726.67 52589.00 7748.00C52621.33 7780.33 52653.67 7812.67 52686.00 7845.00C52729.00 7930.67 52772.00 8016.33 52815.00 8102.00C52836.33 8112.67 52857.67 8123.33 52879.00 8134.00C52879.00 8144.67 52879.00 8155.33 52879.00 8166.00C52932.67 8177.00 52986.33 8188.00 53040.00 8199.00C53040.00 8241.67 53040.00 8284.33 53040.00 8327.00C53061.33 8337.67 53082.67 8348.33 53104.00 8359.00C53114.67 8359.00 53125.33 8359.00 53136.00 8359.00C53157.33 8402.00 53178.67 8445.00 53200.00 8488.00C53210.67 8488.00 53221.33 8488.00 53232.00 8488.00C53232.00 8455.67 53232.00 8423.33 53232.00 8391.00C53243.00 8402.00 53254.00 8413.00 53265.00 8424.00C53275.67 8402.33 53286.33 8380.67 53297.00 8359.00C53307.69 8348.22 53318.59 8337.60 53329.14 8326.72C53339.76 8305.48 53350.38 8284.24 53361.00 8263.00C53371.67 8252.33 53382.33 8241.67 53393.00 8231.00C53414.67 8231.00 53436.33 8231.00 53458.00 8231.00C53475.38 8213.64 53492.82 8196.34 53509.80 8178.58C53513.86 8174.39 53517.93 8170.19 53522.00 8166.00C53532.67 8177.00 53543.33 8188.00 53554.00 8199.00C53597.00 8177.33 53640.00 8155.67 53683.00 8134.00C53693.67 8123.33 53704.33 8112.67 53715.00 8102.00C53725.67 8112.67 53736.33 8123.33 53747.00 8134.00C53747.00 8123.33 53747.00 8112.67 53747.00 8102.00C53757.67 8102.00 53768.33 8102.00 53779.00 8102.00C53789.67 8112.67 53800.33 8123.33 53811.00 8134.00C53811.00 8144.67 53811.00 8155.33 53811.00 8166.00C53843.33 8166.00 53875.67 8166.00 53908.00 8166.00C53940.00 8177.00 53972.00 8188.00 54004.00 8199.00C54047.00 8188.00 54090.00 8177.00 54133.00 8166.00C54154.33 8166.00 54175.67 8166.00 54197.00 8166.00C54229.00 8177.00 54261.00 8188.00 54293.00 8199.00C54282.33 8209.67 54271.67 8220.33 54261.00 8231.00C54271.67 8241.67 54282.33 8252.33 54293.00 8263.00C54314.67 8273.67 54336.33 8284.33 54358.00 8295.00C54368.67 8305.67 54379.33 8316.33 54390.00 8327.00C54400.67 8327.00 54411.33 8327.00 54422.00 8327.00C54422.00 8316.33 54422.00 8305.67 54422.00 8295.00C54443.67 8295.00 54465.33 8295.00 54487.00 8295.00C54508.33 8305.67 54529.67 8316.33 54551.00 8327.00C54583.00 8295.00 54615.00 8263.00 54647.00 8231.00C54625.67 8231.00 54604.33 8231.00 54583.00 8231.00C54572.33 8220.33 54561.67 8209.67 54551.00 8199.00C54551.00 8188.00 54551.00 8177.00 54551.00 8166.00C54529.67 8166.00 54508.33 8166.00 54487.00 8166.00C54476.00 8155.33 54465.00 8144.67 54454.00 8134.00C54454.00 8123.33 54454.00 8112.67 54454.00 8102.00C54465.00 8091.33 54476.00 8080.67 54487.00 8070.00C54487.07 8059.24 54486.87 8048.44 54487.10 8037.70C54497.73 8005.47 54508.37 7973.23 54519.00 7941.00C54519.00 7887.67 54519.00 7834.33 54519.00 7781.00C54540.33 7781.00 54561.67 7781.00 54583.00 7781.00C54604.33 7791.67 54625.67 7802.33 54647.00 7813.00C54657.69 7823.78 54668.59 7834.40 54679.14 7845.28C54700.76 7888.19 54722.38 7931.09 54744.00 7974.00C54765.33 7984.67 54786.67 7995.33 54808.00 8006.00C54829.42 8038.06 54850.72 8070.23 54872.22 8102.22C54904.48 8134.48 54936.74 8166.74 54969.00 8199.00C54979.67 8220.33 54990.33 8241.67 55001.00 8263.00C54990.33 8284.33 54979.67 8305.67 54969.00 8327.00C54979.67 8337.67 54990.33 8348.33 55001.00 8359.00C54990.33 8369.67 54979.67 8380.33 54969.00 8391.00C54969.00 8402.00 54969.00 8413.00 54969.00 8424.00C55001.00 8424.00 55033.00 8424.00 55065.00 8424.00C55097.33 8413.00 55129.67 8402.00 55162.00 8391.00C55162.00 8434.00 55162.00 8477.00 55162.00 8520.00C55183.33 8520.00 55204.67 8520.00 55226.00 8520.00C55236.67 8530.67 55247.33 8541.33 55258.00 8552.00C55268.67 8552.00 55279.33 8552.00 55290.00 8552.00C55311.67 8573.67 55333.33 8595.33 55355.00 8617.00C55365.67 8606.00 55376.33 8595.00 55387.00 8584.00C55397.67 8605.67 55408.33 8627.33 55419.00 8649.00C55419.00 8627.33 55419.00 8605.67 55419.00 8584.00C55408.33 8552.00 55397.67 8520.00 55387.00 8488.00C55397.67 8488.00 55408.33 8488.00 55419.00 8488.00C55429.67 8498.67 55440.33 8509.33 55451.00 8520.00C55451.00 8509.33 55451.00 8498.67 55451.00 8488.00C55461.67 8488.00 55472.33 8488.00 55483.00 8488.00C55504.67 8498.67 55526.33 8509.33 55548.00 8520.00C55558.67 8520.00 55569.33 8520.00 55580.00 8520.00C55601.33 8530.67 55622.67 8541.33 55644.00 8552.00C55665.33 8541.33 55686.67 8530.67 55708.00 8520.00C55708.00 8488.00 55708.00 8456.00 55708.00 8424.00C55751.00 8381.00 55794.00 8338.00 55837.00 8295.00C55815.67 8273.67 55794.33 8252.33 55773.00 8231.00C55783.67 8220.33 55794.33 8209.67 55805.00 8199.00C55805.00 8188.00 55805.00 8177.00 55805.00 8166.00C55762.00 8166.00 55719.00 8166.00 55676.00 8166.00C55686.67 8144.67 55697.33 8123.33 55708.00 8102.00C55686.67 8102.00 55665.33 8102.00 55644.00 8102.00C55644.00 8091.33 55644.00 8080.67 55644.00 8070.00C55676.00 8038.00 55708.00 8006.00 55740.00 7974.00C55761.67 7974.00 55783.33 7974.00 55805.00 7974.00C55837.00 7963.00 55869.00 7952.00 55901.00 7941.00C55965.33 7984.00 56029.67 8027.00 56094.00 8070.00C56126.33 8070.00 56158.67 8070.00 56191.00 8070.00C56212.33 8059.33 56233.67 8048.67 56255.00 8038.00C56265.67 8038.00 56276.33 8038.00 56287.00 8038.00C56287.00 8027.33 56287.00 8016.67 56287.00 8006.00C56297.67 7984.33 56308.33 7962.67 56319.00 7941.00C56331.04 7953.28 56342.80 7965.84 56355.04 7977.92C56364.69 7987.28 56374.35 7996.64 56384.00 8006.00C56394.67 8006.00 56405.33 8006.00 56416.00 8006.00C56426.67 8027.33 56437.33 8048.67 56448.00 8070.00C56490.67 8059.33 56533.33 8048.67 56576.00 8038.00C56587.00 8048.67 56598.00 8059.33 56609.00 8070.00C56651.67 8080.67 56694.33 8091.33 56737.00 8102.00C56758.33 8102.00 56779.67 8102.00 56801.00 8102.00C56779.67 8187.67 56758.33 8273.33 56737.00 8359.00C56715.67 8380.67 56694.33 8402.33 56673.00 8424.00C56673.00 8477.33 56673.00 8530.67 56673.00 8584.00C56683.67 8595.00 56694.33 8606.00 56705.00 8617.00C56705.00 8627.67 56705.00 8638.33 56705.00 8649.00C56737.00 8691.67 56769.00 8734.33 56801.00 8777.00C56844.00 8777.00 56887.00 8777.00 56930.00 8777.00C56951.33 8788.00 56972.67 8799.00 56994.00 8810.00C57058.33 8810.00 57122.67 8810.00 57187.00 8810.00C57236.63 8842.76 57286.34 8875.40 57335.75 8908.50C57350.50 8918.33 57365.25 8928.17 57380.00 8938.00C57380.00 8959.33 57380.00 8980.67 57380.00 9002.00C57401.67 9023.67 57423.33 9045.33 57445.00 9067.00C57455.67 9067.00 57466.33 9067.00 57477.00 9067.00C57487.67 9077.67 57498.33 9088.33 57509.00 9099.00C57509.00 9109.67 57509.00 9120.33 57509.00 9131.00C57498.33 9141.67 57487.67 9152.33 57477.00 9163.00C57477.00 9206.00 57477.00 9249.00 57477.00 9292.00C57466.33 9313.33 57455.67 9334.67 57445.00 9356.00C57423.33 9356.00 57401.67 9356.00 57380.00 9356.00C57412.78 9372.17 57445.65 9388.14 57478.19 9404.77C57531.13 9431.51 57584.07 9458.26 57637.00 9485.00C57637.00 9517.00 57637.00 9549.00 57637.00 9581.00C57658.67 9581.00 57680.33 9581.00 57702.00 9581.00C57723.42 9613.39 57744.72 9645.89 57766.22 9678.22C57789.00 9700.91 57811.60 9723.77 57834.49 9746.35C57843.99 9755.57 57853.50 9764.78 57863.00 9774.00C57895.00 9774.00 57927.00 9774.00 57959.00 9774.00C58012.67 9720.33 58066.33 9666.67 58120.00 9613.00C58130.67 9591.67 58141.33 9570.33 58152.00 9549.00C58152.00 9517.00 58152.00 9485.00 58152.00 9453.00C58173.33 9453.00 58194.67 9453.00 58216.00 9453.00C58248.39 9431.24 58280.89 9409.61 58313.22 9387.78C58334.58 9366.48 58355.84 9345.05 58377.26 9323.83C58409.17 9302.55 58441.09 9281.28 58473.00 9260.00C58505.33 9217.00 58537.67 9174.00 58570.00 9131.00C58591.33 9141.67 58612.67 9152.33 58634.00 9163.00C58655.67 9163.00 58677.33 9163.00 58699.00 9163.00C58709.67 9184.33 58720.33 9205.67 58731.00 9227.00C58741.67 9227.00 58752.33 9227.00 58763.00 9227.00C58773.67 9259.33 58784.33 9291.67 58795.00 9324.00C58805.67 9324.00 58816.33 9324.00 58827.00 9324.00C58837.67 9345.33 58848.33 9366.67 58859.00 9388.00C58891.33 9409.67 58923.67 9431.33 58956.00 9453.00C58966.67 9453.00 58977.33 9453.00 58988.00 9453.00C58988.00 9431.33 58988.00 9409.67 58988.00 9388.00C58998.67 9388.00 59009.33 9388.00 59020.00 9388.00C59020.00 9366.67 59020.00 9345.33 59020.00 9324.00C59030.67 9313.33 59041.33 9302.67 59052.00 9292.00C59041.33 9270.33 59030.67 9248.67 59020.00 9227.00C59030.67 9195.00 59041.33 9163.00 59052.00 9131.00C59041.33 9099.00 59030.67 9067.00 59020.00 9035.00C59020.00 9002.67 59020.00 8970.33 59020.00 8938.00C59009.33 8927.33 58998.67 8916.67 58988.00 8906.00C59009.33 8884.67 59030.67 8863.33 59052.00 8842.00C59052.00 8831.33 59052.00 8820.67 59052.00 8810.00C59030.67 8810.00 59009.33 8810.00 58988.00 8810.00C58977.33 8788.33 58966.67 8766.67 58956.00 8745.00C58923.67 8723.67 58891.33 8702.33 58859.00 8681.00C58859.00 8670.33 58859.00 8659.67 58859.00 8649.00C58891.33 8627.33 58923.67 8605.67 58956.00 8584.00C58945.33 8584.00 58934.67 8584.00 58924.00 8584.00C58924.00 8573.33 58924.00 8562.67 58924.00 8552.00C58902.33 8541.33 58880.67 8530.67 58859.00 8520.00C58848.33 8498.67 58837.67 8477.33 58827.00 8456.00C58827.00 8445.33 58827.00 8434.67 58827.00 8424.00C58805.67 8413.00 58784.33 8402.00 58763.00 8391.00C58773.67 8348.33 58784.33 8305.67 58795.00 8263.00C58795.00 8230.67 58795.00 8198.33 58795.00 8166.00C58827.00 8155.33 58859.00 8144.67 58891.00 8134.00C58912.67 8112.67 58934.33 8091.33 58956.00 8070.00C58966.67 8038.00 58977.33 8006.00 58988.00 7974.00C58955.67 7963.00 58923.33 7952.00 58891.00 7941.00C58880.33 7898.33 58869.67 7855.67 58859.00 7813.00C58869.67 7813.00 58880.33 7813.00 58891.00 7813.00C58912.67 7791.33 58934.33 7769.67 58956.00 7748.00C58956.00 7726.67 58956.00 7705.33 58956.00 7684.00C58977.33 7673.33 58998.67 7662.67 59020.00 7652.00C59073.67 7673.33 59127.33 7694.67 59181.00 7716.00C59202.33 7705.33 59223.67 7694.67 59245.00 7684.00C59298.67 7684.00 59352.33 7684.00 59406.00 7684.00C59406.00 7673.33 59406.00 7662.67 59406.00 7652.00C59416.67 7641.33 59427.33 7630.67 59438.00 7620.00C59470.33 7630.67 59502.67 7641.33 59535.00 7652.00C59567.00 7652.00 59599.00 7652.00 59631.00 7652.00C59641.67 7662.67 59652.33 7673.33 59663.00 7684.00C59684.33 7684.00 59705.67 7684.00 59727.00 7684.00C59738.00 7705.33 59749.00 7726.67 59760.00 7748.00C59760.00 7759.00 59760.00 7770.00 59760.00 7781.00C59802.67 7781.00 59845.33 7781.00 59888.00 7781.00C59877.33 7770.00 59866.67 7759.00 59856.00 7748.00C59856.00 7726.67 59856.00 7705.33 59856.00 7684.00C59877.33 7673.33 59898.67 7662.67 59920.00 7652.00C59931.00 7652.00 59942.00 7652.00 59953.00 7652.00C59963.67 7641.33 59974.33 7630.67 59985.00 7620.00C59974.33 7598.33 59963.67 7576.67 59953.00 7555.00C59953.00 7523.00 59953.00 7491.00 59953.00 7459.00C59942.00 7469.67 59931.00 7480.33 59920.00 7491.00C59898.67 7480.33 59877.33 7469.67 59856.00 7459.00C59866.67 7459.00 59877.33 7459.00 59888.00 7459.00C59898.67 7437.67 59909.33 7416.33 59920.00 7395.00C59909.33 7373.33 59898.67 7351.67 59888.00 7330.00C59909.67 7330.00 59931.33 7330.00 59953.00 7330.00C59985.00 7319.33 60017.00 7308.67 60049.00 7298.00C60049.00 7287.33 60049.00 7276.67 60049.00 7266.00C60027.67 7244.67 60006.33 7223.33 59985.00 7202.00C60027.67 7212.67 60070.33 7223.33 60113.00 7234.00C60113.00 7223.33 60113.00 7212.67 60113.00 7202.00C60123.67 7191.33 60134.33 7180.67 60145.00 7170.00C60156.00 7170.00 60167.00 7170.00 60178.00 7170.00C60199.33 7191.33 60220.67 7212.67 60242.00 7234.00C60252.67 7212.67 60263.33 7191.33 60274.00 7170.00C60295.33 7170.00 60316.67 7170.00 60338.00 7170.00C60338.00 7148.33 60338.00 7126.67 60338.00 7105.00C60349.00 7105.00 60360.00 7105.00 60371.00 7105.00C60360.00 7094.33 60349.00 7083.67 60338.00 7073.00C60316.67 7073.00 60295.33 7073.00 60274.00 7073.00C60284.67 7051.67 60295.33 7030.33 60306.00 7009.00C60316.67 6998.33 60327.33 6987.67 60338.00 6977.00C60349.00 6987.67 60360.00 6998.33 60371.00 7009.00C60381.67 7009.00 60392.33 7009.00 60403.00 7009.00C60403.00 6998.33 60403.00 6987.67 60403.00 6977.00C60445.67 6977.00 60488.33 6977.00 60531.00 6977.00C60531.00 6966.33 60531.00 6955.67 60531.00 6945.00C60541.67 6955.67 60552.33 6966.33 60563.00 6977.00C60574.00 6977.00 60585.00 6977.00 60596.00 6977.00C60606.67 6987.67 60617.33 6998.33 60628.00 7009.00C60638.67 7009.00 60649.33 7009.00 60660.00 7009.00C60660.00 6998.33 60660.00 6987.67 60660.00 6977.00C60692.00 7009.00 60724.00 7041.00 60756.00 7073.00C60766.67 7073.00 60777.33 7073.00 60788.00 7073.00C60788.00 7062.33 60788.00 7051.67 60788.00 7041.00C60809.67 7041.00 60831.33 7041.00 60853.00 7041.00C60853.00 7073.33 60853.00 7105.67 60853.00 7138.00C60863.67 7138.00 60874.33 7138.00 60885.00 7138.00C60906.33 7159.33 60927.67 7180.67 60949.00 7202.00C60959.67 7191.33 60970.33 7180.67 60981.00 7170.00C60992.00 7170.00 61003.00 7170.00 61014.00 7170.00C61014.00 7180.67 61014.00 7191.33 61014.00 7202.00C61035.33 7202.00 61056.67 7202.00 61078.00 7202.00C61099.33 7191.33 61120.67 7180.67 61142.00 7170.00C61152.67 7191.33 61163.33 7212.67 61174.00 7234.00C61217.00 7234.00 61260.00 7234.00 61303.00 7234.00C61324.33 7255.33 61345.67 7276.67 61367.00 7298.00C61377.67 7287.33 61388.33 7276.67 61399.00 7266.00C61410.11 7276.69 61421.08 7287.58 61432.28 7298.14C61453.52 7308.76 61474.76 7319.38 61496.00 7330.00C61528.00 7319.33 61560.00 7308.67 61592.00 7298.00C61592.00 7330.33 61592.00 7362.67 61592.00 7395.00C61624.33 7405.67 61656.67 7416.33 61689.00 7427.00C61710.33 7427.00 61731.67 7427.00 61753.00 7427.00C61774.33 7437.67 61795.67 7448.33 61817.00 7459.00C61817.00 7469.67 61817.00 7480.33 61817.00 7491.00C61834.73 7473.81 61852.54 7456.70 61869.89 7439.11C61873.93 7435.07 61877.96 7431.04 61882.00 7427.00C61914.00 7427.00 61946.00 7427.00 61978.00 7427.00C61978.00 7405.67 61978.00 7384.33 61978.00 7363.00C61967.33 7363.00 61956.67 7363.00 61946.00 7363.00C61946.00 7341.33 61946.00 7319.67 61946.00 7298.00C61967.33 7298.00 61988.67 7298.00 62010.00 7298.00C62021.00 7287.33 62032.00 7276.67 62043.00 7266.00C62043.00 7255.33 62043.00 7244.67 62043.00 7234.00C62053.67 7234.00 62064.33 7234.00 62075.00 7234.00C62085.67 7244.67 62096.33 7255.33 62107.00 7266.00C62117.67 7266.00 62128.33 7266.00 62139.00 7266.00C62149.67 7255.33 62160.33 7244.67 62171.00 7234.00C62160.33 7223.33 62149.67 7212.67 62139.00 7202.00C62139.00 7169.67 62139.00 7137.33 62139.00 7105.00C62160.33 7094.33 62181.67 7083.67 62203.00 7073.00C62235.33 7094.67 62267.67 7116.33 62300.00 7138.00C62317.19 7120.27 62334.30 7102.46 62351.89 7085.11C62355.93 7081.07 62359.96 7077.04 62364.00 7073.00C62364.00 7094.67 62364.00 7116.33 62364.00 7138.00C62374.67 7127.00 62385.33 7116.00 62396.00 7105.00C62417.33 7105.00 62438.67 7105.00 62460.00 7105.00C62471.00 7083.67 62482.00 7062.33 62493.00 7041.00C62503.67 7051.67 62514.33 7062.33 62525.00 7073.00C62535.67 7051.67 62546.33 7030.33 62557.00 7009.00C62567.67 6998.33 62578.33 6987.67 62589.00 6977.00C62599.67 6977.00 62610.33 6977.00 62621.00 6977.00C62610.33 6987.67 62599.67 6998.33 62589.00 7009.00C62589.00 7030.33 62589.00 7051.67 62589.00 7073.00C62642.67 7126.67 62696.33 7180.33 62750.00 7234.00C62760.67 7266.00 62771.33 7298.00 62782.00 7330.00C62803.33 7341.00 62824.67 7352.00 62846.00 7363.00C62846.00 7330.67 62846.00 7298.33 62846.00 7266.00C62857.00 7223.33 62868.00 7180.67 62879.00 7138.00C62879.00 7127.00 62879.00 7116.00 62879.00 7105.00C62900.33 7105.00 62921.67 7105.00 62943.00 7105.00C62953.67 7094.33 62964.33 7083.67 62975.00 7073.00C62996.33 7083.67 63017.67 7094.33 63039.00 7105.00C63060.67 7105.00 63082.33 7105.00 63104.00 7105.00C63114.67 7094.33 63125.33 7083.67 63136.00 7073.00C63125.33 7062.33 63114.67 7051.67 63104.00 7041.00C63114.67 7030.33 63125.33 7019.67 63136.00 7009.00C63168.00 7009.00 63200.00 7009.00 63232.00 7009.00C63232.00 7019.67 63232.00 7030.33 63232.00 7041.00C63253.33 7051.67 63274.67 7062.33 63296.00 7073.00C63317.67 7073.00 63339.33 7073.00 63361.00 7073.00C63361.07 7062.24 63360.87 7051.44 63361.10 7040.70C63371.73 7008.80 63382.37 6976.90 63393.00 6945.00C63382.33 6923.33 63371.67 6901.67 63361.00 6880.00C63382.33 6880.00 63403.67 6880.00 63425.00 6880.00C63425.00 6858.67 63425.00 6837.33 63425.00 6816.00C63435.67 6805.33 63446.33 6794.67 63457.00 6784.00C63457.00 6773.33 63457.00 6762.67 63457.00 6752.00C63478.33 6741.00 63499.67 6730.00 63521.00 6719.00C63521.00 6730.00 63521.00 6741.00 63521.00 6752.00C63553.33 6752.00 63585.67 6752.00 63618.00 6752.00C63618.00 6741.00 63618.00 6730.00 63618.00 6719.00C63607.33 6708.33 63596.67 6697.67 63586.00 6687.00C63586.00 6676.33 63586.00 6665.67 63586.00 6655.00C63596.76 6654.95 63607.55 6655.10 63618.30 6654.92C63661.20 6644.28 63704.10 6633.64 63747.00 6623.00C63757.67 6601.67 63768.33 6580.33 63779.00 6559.00C63789.67 6559.00 63800.33 6559.00 63811.00 6559.00C63811.00 6569.67 63811.00 6580.33 63811.00 6591.00C63800.33 6601.67 63789.67 6612.33 63779.00 6623.00C63789.67 6633.67 63800.33 6644.33 63811.00 6655.00C63843.00 6644.33 63875.00 6633.67 63907.00 6623.00C63950.00 6623.00 63993.00 6623.00 64036.00 6623.00C64046.67 6612.33 64057.33 6601.67 64068.00 6591.00C64089.33 6591.00 64110.67 6591.00 64132.00 6591.00C64132.00 6601.67 64132.00 6612.33 64132.00 6623.00C64153.67 6623.00 64175.33 6623.00 64197.00 6623.00C64197.00 6644.33 64197.00 6665.67 64197.00 6687.00C64218.33 6687.00 64239.67 6687.00 64261.00 6687.00C64271.67 6665.67 64282.33 6644.33 64293.00 6623.00C64314.33 6612.33 64335.67 6601.67 64357.00 6591.00C64368.00 6612.33 64379.00 6633.67 64390.00 6655.00C64411.33 6655.00 64432.67 6655.00 64454.00 6655.00C64486.00 6644.33 64518.00 6633.67 64550.00 6623.00C64561.00 6623.00 64572.00 6623.00 64583.00 6623.00C64593.67 6612.33 64604.33 6601.67 64615.00 6591.00C64615.00 6580.33 64615.00 6569.67 64615.00 6559.00C64636.33 6548.33 64657.67 6537.67 64679.00 6527.00C64700.33 6505.33 64721.67 6483.67 64743.00 6462.00C64754.00 6462.00 64765.00 6462.00 64776.00 6462.00C64776.07 6451.24 64775.87 6440.44 64776.10 6429.70C64786.73 6397.80 64797.37 6365.90 64808.00 6334.00C64818.67 6323.33 64829.33 6312.67 64840.00 6302.00C64818.67 6291.00 64797.33 6280.00 64776.00 6269.00C64776.00 6258.33 64776.00 6247.67 64776.00 6237.00C64765.00 6215.67 64754.00 6194.33 64743.00 6173.00C64754.00 6173.00 64765.00 6173.00 64776.00 6173.00C64786.67 6162.33 64797.33 6151.67 64808.00 6141.00C64797.33 6108.67 64786.67 6076.33 64776.00 6044.00C64776.00 6022.67 64776.00 6001.33 64776.00 5980.00C64786.67 5969.33 64797.33 5958.67 64808.00 5948.00C64808.00 5926.67 64808.00 5905.33 64808.00 5884.00C64850.67 5873.00 64893.33 5862.00 64936.00 5851.00C64957.67 5829.67 64979.33 5808.33 65001.00 5787.00C65011.67 5787.00 65022.33 5787.00 65033.00 5787.00C65043.67 5765.67 65054.33 5744.33 65065.00 5723.00C65097.00 5723.00 65129.00 5723.00 65161.00 5723.00C65171.67 5733.67 65182.33 5744.33 65193.00 5755.00C65182.33 5765.67 65171.67 5776.33 65161.00 5787.00C65182.67 5787.00 65204.33 5787.00 65226.00 5787.00C65226.00 5776.33 65226.00 5765.67 65226.00 5755.00C65258.00 5755.00 65290.00 5755.00 65322.00 5755.00C65322.00 5765.67 65322.00 5776.33 65322.00 5787.00C65375.67 5787.00 65429.33 5787.00 65483.00 5787.00C65515.00 5797.67 65547.00 5808.33 65579.00 5819.00C65600.67 5819.00 65622.33 5819.00 65644.00 5819.00C65644.00 5797.67 65644.00 5776.33 65644.00 5755.00C65676.00 5755.00 65708.00 5755.00 65740.00 5755.00C65729.33 5733.67 65718.67 5712.33 65708.00 5691.00C65729.33 5680.00 65750.67 5669.00 65772.00 5658.00C65772.00 5647.33 65772.00 5636.67 65772.00 5626.00C65815.00 5626.00 65858.00 5626.00 65901.00 5626.00C65890.33 5615.33 65879.67 5604.67 65869.00 5594.00C65890.33 5583.33 65911.67 5572.67 65933.00 5562.00C65933.00 5551.33 65933.00 5540.67 65933.00 5530.00C65901.00 5519.33 65869.00 5508.67 65837.00 5498.00C65837.00 5476.33 65837.00 5454.67 65837.00 5433.00C65826.00 5433.00 65815.00 5433.00 65804.00 5433.00C65793.33 5422.33 65782.67 5411.67 65772.00 5401.00C65761.33 5401.00 65750.67 5401.00 65740.00 5401.00C65740.00 5390.33 65740.00 5379.67 65740.00 5369.00C65718.67 5358.33 65697.33 5347.67 65676.00 5337.00C65686.67 5305.00 65697.33 5273.00 65708.00 5241.00C65740.00 5241.00 65772.00 5241.00 65804.00 5241.00C65804.00 5230.00 65804.00 5219.00 65804.00 5208.00C65815.00 5219.00 65826.00 5230.00 65837.00 5241.00C65858.33 5241.00 65879.67 5241.00 65901.00 5241.00C65911.67 5251.67 65922.33 5262.33 65933.00 5273.00C65943.67 5273.00 65954.33 5273.00 65965.00 5273.00C65965.00 5251.33 65965.00 5229.67 65965.00 5208.00C65986.33 5219.00 66007.67 5230.00 66029.00 5241.00C66040.00 5262.33 66051.00 5283.67 66062.00 5305.00C66072.67 5283.67 66083.33 5262.33 66094.00 5241.00C66136.67 5262.33 66179.33 5283.67 66222.00 5305.00C66222.00 5283.67 66222.00 5262.33 66222.00 5241.00C66243.67 5273.00 66265.33 5305.00 66287.00 5337.00C66297.67 5326.33 66308.33 5315.67 66319.00 5305.00C66329.67 5305.00 66340.33 5305.00 66351.00 5305.00C66373.85 5327.76 66396.53 5350.70 66419.49 5373.35C66428.99 5382.57 66438.50 5391.78 66448.00 5401.00C66458.67 5401.00 66469.33 5401.00 66480.00 5401.00C66480.00 5411.67 66480.00 5422.33 66480.00 5433.00C66501.33 5433.00 66522.67 5433.00 66544.00 5433.00C66544.00 5454.67 66544.00 5476.33 66544.00 5498.00C66565.33 5476.33 66586.67 5454.67 66608.00 5433.00C66618.67 5433.00 66629.33 5433.00 66640.00 5433.00C66640.00 5422.33 66640.00 5411.67 66640.00 5401.00C66672.33 5390.33 66704.67 5379.67 66737.00 5369.00C66758.33 5347.67 66779.67 5326.33 66801.00 5305.00C66822.33 5315.67 66843.67 5326.33 66865.00 5337.00C66876.00 5337.00 66887.00 5337.00 66898.00 5337.00C66908.67 5326.33 66919.33 5315.67 66930.00 5305.00C67005.00 5305.00 67080.00 5305.00 67155.00 5305.00C67155.00 5315.67 67155.00 5326.33 67155.00 5337.00C67197.67 5337.00 67240.33 5337.00 67283.00 5337.00C67283.07 5326.24 67282.87 5315.44 67283.10 5304.70C67294.07 5272.47 67305.03 5240.23 67316.00 5208.00C67348.00 5208.00 67380.00 5208.00 67412.00 5208.00C67422.69 5197.22 67433.59 5186.60 67444.14 5175.72C67454.76 5154.48 67465.38 5133.24 67476.00 5112.00C67465.33 5079.67 67454.67 5047.33 67444.00 5015.00C67476.33 5015.00 67508.67 5015.00 67541.00 5015.00C67551.67 5004.33 67562.33 4993.67 67573.00 4983.00C67551.67 4961.67 67530.33 4940.33 67509.00 4919.00C67530.33 4897.67 67551.67 4876.33 67573.00 4855.00C67562.33 4844.00 67551.67 4833.00 67541.00 4822.00C67541.00 4800.67 67541.00 4779.33 67541.00 4758.00C67519.33 4747.33 67497.67 4736.67 67476.00 4726.00C67476.00 4704.67 67476.00 4683.33 67476.00 4662.00C67508.33 4662.00 67540.67 4662.00 67573.00 4662.00C67573.00 4651.33 67573.00 4640.67 67573.00 4630.00C67594.33 4619.00 67615.67 4608.00 67637.00 4597.00C67647.67 4575.67 67658.33 4554.33 67669.00 4533.00C67669.00 4501.00 67669.00 4469.00 67669.00 4437.00C67690.67 4415.33 67712.33 4393.67 67734.00 4372.00C67766.00 4372.00 67798.00 4372.00 67830.00 4372.00C67840.67 4383.00 67851.33 4394.00 67862.00 4405.00C67894.33 4415.67 67926.67 4426.33 67959.00 4437.00C67991.00 4394.00 68023.00 4351.00 68055.00 4308.00C68065.67 4308.00 68076.33 4308.00 68087.00 4308.00C68108.67 4297.33 68130.33 4286.67 68152.00 4276.00C68141.00 4265.33 68130.00 4254.67 68119.00 4244.00C68130.00 4233.33 68141.00 4222.67 68152.00 4212.00C68184.00 4212.00 68216.00 4212.00 68248.00 4212.00C68248.00 4201.00 68248.00 4190.00 68248.00 4179.00C68291.00 4168.33 68334.00 4157.67 68377.00 4147.00C68398.33 4157.67 68419.67 4168.33 68441.00 4179.00C68451.69 4168.22 68462.59 4157.60 68473.14 4146.72C68483.76 4125.48 68494.38 4104.24 68505.00 4083.00C68515.67 4083.00 68526.33 4083.00 68537.00 4083.00C68548.00 4072.33 68559.00 4061.67 68570.00 4051.00C68559.00 4051.00 68548.00 4051.00 68537.00 4051.00C68548.00 4040.33 68559.00 4029.67 68570.00 4019.00C68559.00 4008.00 68548.00 3997.00 68537.00 3986.00C68554.73 3968.81 68572.54 3951.70 68589.89 3934.11C68604.59 3919.41 68619.30 3904.70 68634.00 3890.00C68655.33 3890.00 68676.67 3890.00 68698.00 3890.00C68708.67 3879.33 68719.33 3868.67 68730.00 3858.00C68730.00 3847.33 68730.00 3836.67 68730.00 3826.00C68751.67 3815.33 68773.33 3804.67 68795.00 3794.00C68795.00 3783.00 68795.00 3772.00 68795.00 3761.00C68816.33 3739.67 68837.67 3718.33 68859.00 3697.00C68869.67 3675.67 68880.33 3654.33 68891.00 3633.00C68901.67 3622.33 68912.33 3611.67 68923.00 3601.00C68912.33 3590.33 68901.67 3579.67 68891.00 3569.00C68891.00 3558.00 68891.00 3547.00 68891.00 3536.00C68934.00 3525.33 68977.00 3514.67 69020.00 3504.00C69020.00 3482.67 69020.00 3461.33 69020.00 3440.00C69042.76 3417.15 69065.70 3394.47 69088.35 3371.51C69097.57 3362.01 69106.78 3352.50 69116.00 3343.00C69137.67 3343.00 69159.33 3343.00 69181.00 3343.00C69191.67 3289.67 69202.33 3236.33 69213.00 3183.00C69202.33 3161.22 69191.49 3139.51 69180.92 3117.70C69169.95 3075.13 69158.97 3032.57 69148.00 2990.00C69126.67 2979.33 69105.33 2968.67 69084.00 2958.00C69084.00 2936.33 69084.00 2914.67 69084.00 2893.00C69062.67 2871.67 69041.33 2850.33 69020.00 2829.00C69009.33 2797.00 68998.67 2765.00 68988.00 2733.00C68966.33 2722.00 68944.67 2711.00 68923.00 2700.00C68933.67 2657.33 68944.33 2614.67 68955.00 2572.00C68944.33 2550.33 68933.67 2528.67 68923.00 2507.00C68933.67 2485.67 68944.33 2464.33 68955.00 2443.00C68955.00 2432.33 68955.00 2421.67 68955.00 2411.00C68944.33 2400.33 68933.67 2389.67 68923.00 2379.00C68912.33 2400.33 68901.67 2421.67 68891.00 2443.00C68890.93 2432.24 68891.13 2421.44 68890.90 2410.70C68880.27 2378.80 68869.63 2346.90 68859.00 2315.00C68869.67 2293.33 68880.33 2271.67 68891.00 2250.00C68880.33 2228.67 68869.67 2207.33 68859.00 2186.00C68827.00 2164.67 68795.00 2143.33 68763.00 2122.00C68763.00 2100.33 68763.00 2078.67 68763.00 2057.00C68752.00 2046.33 68741.00 2035.67 68730.00 2025.00C68676.67 2025.00 68623.33 2025.00 68570.00 2025.00C68548.33 2014.33 68526.67 2003.67 68505.00 1993.00C68526.67 1961.00 68548.33 1929.00 68570.00 1897.00C68591.33 1897.00 68612.67 1897.00 68634.00 1897.00C68657.22 1885.11 68680.30 1872.96 68703.61 1861.24C68723.40 1851.49 68743.20 1841.75 68763.00 1832.00C68795.00 1842.67 68827.00 1853.33 68859.00 1864.00C68869.67 1864.00 68880.33 1864.00 68891.00 1864.00C68914.22 1875.89 68937.30 1888.04 68960.61 1899.76C68980.40 1909.51 69000.20 1919.25 69020.00 1929.00C69041.33 1918.33 69062.67 1907.67 69084.00 1897.00C69094.67 1907.67 69105.33 1918.33 69116.00 1929.00C69126.67 1918.33 69137.33 1907.67 69148.00 1897.00C69159.00 1897.00 69170.00 1897.00 69181.00 1897.00C69181.00 1918.33 69181.00 1939.67 69181.00 1961.00C69213.00 1982.33 69245.00 2003.67 69277.00 2025.00C69320.00 2025.00 69363.00 2025.00 69406.00 2025.00C69416.78 2014.31 69427.40 2003.41 69438.28 1992.86C69459.52 1982.24 69480.76 1971.62 69502.00 1961.00C69545.00 1971.67 69588.00 1982.33 69631.00 1993.00C69706.00 1993.00 69781.00 1993.00 69856.00 1993.00C69866.67 2025.00 69877.33 2057.00 69888.00 2089.00C69898.67 2089.00 69909.33 2089.00 69920.00 2089.00C69952.00 2067.67 69984.00 2046.33 70016.00 2025.00C70016.00 1993.00 70016.00 1961.00 70016.00 1929.00C70037.67 1939.67 70059.33 1950.33 70081.00 1961.00C70113.00 1939.67 70145.00 1918.33 70177.00 1897.00C70198.67 1907.67 70220.33 1918.33 70242.00 1929.00C70242.00 1950.33 70242.00 1971.67 70242.00 1993.00C70263.33 1982.33 70284.67 1971.67 70306.00 1961.00C70370.33 1961.00 70434.67 1961.00 70499.00 1961.00C70509.67 1928.67 70520.33 1896.33 70531.00 1864.00C70574.00 1864.00 70617.00 1864.00 70660.00 1864.00C70660.00 1853.33 70660.00 1842.67 70660.00 1832.00C70670.67 1832.00 70681.33 1832.00 70692.00 1832.00C70702.67 1821.33 70713.33 1810.67 70724.00 1800.00C70724.00 1778.67 70724.00 1757.33 70724.00 1736.00C70756.00 1736.00 70788.00 1736.00 70820.00 1736.00C70841.67 1725.33 70863.33 1714.67 70885.00 1704.00C70895.67 1693.00 70906.33 1682.00 70917.00 1671.00C70938.33 1660.33 70959.67 1649.67 70981.00 1639.00C71002.33 1649.67 71023.67 1660.33 71045.00 1671.00C71056.00 1692.67 71067.00 1714.33 71078.00 1736.00C71078.00 1757.33 71078.00 1778.67 71078.00 1800.00C71110.00 1821.33 71142.00 1842.67 71174.00 1864.00C71195.49 1853.20 71217.09 1842.57 71238.52 1831.66C71270.68 1810.44 71302.84 1789.22 71335.00 1768.00C71345.67 1800.00 71356.33 1832.00 71367.00 1864.00C71410.00 1917.67 71453.00 1971.33 71496.00 2025.00C71506.65 2100.11 71517.42 2175.20 71528.00 2250.31C71528.00 2260.88 71528.00 2271.44 71528.00 2282.00C71560.00 2282.00 71592.00 2282.00 71624.00 2282.00C71641.19 2299.73 71658.30 2317.54 71675.89 2334.89C71679.93 2338.93 71683.96 2342.96 71688.00 2347.00C71688.00 2357.67 71688.00 2368.33 71688.00 2379.00C71699.00 2400.33 71710.00 2421.67 71721.00 2443.00C71731.67 2443.00 71742.33 2443.00 71753.00 2443.00C71785.00 2464.33 71817.00 2485.67 71849.00 2507.00C71849.00 2518.00 71849.00 2529.00 71849.00 2540.00C71859.67 2529.00 71870.33 2518.00 71881.00 2507.00C71902.67 2518.00 71924.33 2529.00 71946.00 2540.00C71956.67 2540.00 71967.33 2540.00 71978.00 2540.00C71988.67 2550.67 71999.33 2561.33 72010.00 2572.00C71999.33 2582.67 71988.67 2593.33 71978.00 2604.00C71988.67 2614.67 71999.33 2625.33 72010.00 2636.00C71988.67 2657.33 71967.33 2678.67 71946.00 2700.00C71967.33 2711.00 71988.67 2722.00 72010.00 2733.00C72010.00 2743.67 72010.00 2754.33 72010.00 2765.00C71999.33 2775.67 71988.67 2786.33 71978.00 2797.00C71978.00 2839.67 71978.00 2882.33 71978.00 2925.00C71999.33 2968.00 72020.67 3011.00 72042.00 3054.00C72031.33 3064.67 72020.67 3075.33 72010.00 3086.00C72020.67 3096.67 72031.33 3107.33 72042.00 3118.00C72031.33 3139.67 72020.67 3161.33 72010.00 3183.00C72020.67 3204.33 72031.33 3225.67 72042.00 3247.00C72031.33 3247.00 72020.67 3247.00 72010.00 3247.00C72010.00 3268.33 72010.00 3289.67 72010.00 3311.00C71991.54 3348.57 71973.05 3386.13 71954.24 3423.52C71951.52 3429.13 71948.51 3434.65 71945.97 3440.31C71935.31 3547.21 71924.66 3654.10 71914.00 3761.00C71892.33 3782.67 71870.67 3804.33 71849.00 3826.00C71838.33 3847.33 71827.67 3868.67 71817.00 3890.00C71827.67 3900.67 71838.33 3911.33 71849.00 3922.00C71838.33 3943.33 71827.67 3964.67 71817.00 3986.00C71806.33 3997.00 71795.67 4008.00 71785.00 4019.00C71806.33 4040.33 71827.67 4061.67 71849.00 4083.00C71849.00 4136.67 71849.00 4190.33 71849.00 4244.00C71827.67 4286.67 71806.33 4329.33 71785.00 4372.00C71806.33 4383.00 71827.67 4394.00 71849.00 4405.00C71849.00 4415.67 71849.00 4426.33 71849.00 4437.00C71795.33 4490.33 71741.67 4543.67 71688.00 4597.00C71666.58 4629.39 71645.28 4661.89 71623.78 4694.22C71613.19 4704.81 71602.59 4715.41 71592.00 4726.00C71602.67 4736.67 71613.33 4747.33 71624.00 4758.00C71624.00 4801.00 71624.00 4844.00 71624.00 4887.00C71581.33 4908.33 71538.67 4929.67 71496.00 4951.00C71485.00 4940.33 71474.00 4929.67 71463.00 4919.00C71452.33 4929.67 71441.67 4940.33 71431.00 4951.00C71420.33 4951.00 71409.67 4951.00 71399.00 4951.00C71377.67 4961.67 71356.33 4972.33 71335.00 4983.00C71345.67 5015.33 71356.33 5047.67 71367.00 5080.00C71345.67 5080.00 71324.33 5080.00 71303.00 5080.00C71313.67 5101.33 71324.33 5122.67 71335.00 5144.00C71313.67 5144.00 71292.33 5144.00 71271.00 5144.00C71271.00 5133.33 71271.00 5122.67 71271.00 5112.00C71260.00 5112.00 71249.00 5112.00 71238.00 5112.00C71227.33 5122.67 71216.67 5133.33 71206.00 5144.00C71206.00 5165.33 71206.00 5186.67 71206.00 5208.00C71216.67 5219.00 71227.33 5230.00 71238.00 5241.00C71227.33 5283.67 71216.67 5326.33 71206.00 5369.00C71216.67 5379.67 71227.33 5390.33 71238.00 5401.00C71324.00 5401.00 71410.00 5401.00 71496.00 5401.00C71485.00 5379.67 71474.00 5358.33 71463.00 5337.00C71495.33 5326.33 71527.67 5315.67 71560.00 5305.00C71560.00 5326.33 71560.00 5347.67 71560.00 5369.00C71581.33 5358.33 71602.67 5347.67 71624.00 5337.00C71634.67 5347.67 71645.33 5358.33 71656.00 5369.00C71656.00 5390.33 71656.00 5411.67 71656.00 5433.00C71699.00 5433.00 71742.00 5433.00 71785.00 5433.00C71795.67 5444.00 71806.33 5455.00 71817.00 5466.00C71838.33 5455.00 71859.67 5444.00 71881.00 5433.00C71892.00 5444.00 71903.00 5455.00 71914.00 5466.00C71924.67 5455.00 71935.33 5444.00 71946.00 5433.00C71956.67 5433.00 71967.33 5433.00 71978.00 5433.00C71988.67 5454.67 71999.33 5476.33 72010.00 5498.00C72031.33 5508.67 72052.67 5519.33 72074.00 5530.00C72085.00 5519.33 72096.00 5508.67 72107.00 5498.00C72107.00 5508.67 72107.00 5519.33 72107.00 5530.00C72117.67 5530.00 72128.33 5530.00 72139.00 5530.00C72128.33 5519.33 72117.67 5508.67 72107.00 5498.00C72117.67 5465.67 72128.33 5433.33 72139.00 5401.00C72149.67 5401.00 72160.33 5401.00 72171.00 5401.00C72171.00 5411.67 72171.00 5422.33 72171.00 5433.00C72203.00 5444.00 72235.00 5455.00 72267.00 5466.00C72277.67 5455.00 72288.33 5444.00 72299.00 5433.00C72299.00 5444.00 72299.00 5455.00 72299.00 5466.00C72320.67 5476.67 72342.33 5487.33 72364.00 5498.00C72353.33 5508.67 72342.67 5519.33 72332.00 5530.00C72364.00 5540.67 72396.00 5551.33 72428.00 5562.00C72417.33 5572.67 72406.67 5583.33 72396.00 5594.00C72406.67 5604.67 72417.33 5615.33 72428.00 5626.00C72449.33 5604.67 72470.67 5583.33 72492.00 5562.00C72513.67 5562.00 72535.33 5562.00 72557.00 5562.00C72567.67 5540.67 72578.33 5519.33 72589.00 5498.00C72589.00 5508.67 72589.00 5519.33 72589.00 5530.00C72610.33 5540.67 72631.67 5551.33 72653.00 5562.00C72642.33 5583.33 72631.67 5604.67 72621.00 5626.00C72631.67 5636.67 72642.33 5647.33 72653.00 5658.00C72674.33 5658.00 72695.67 5658.00 72717.00 5658.00C72738.67 5647.33 72760.33 5636.67 72782.00 5626.00C72792.78 5636.69 72803.40 5647.58 72814.28 5658.14C72835.52 5669.10 72856.76 5680.05 72878.00 5691.00C72888.67 5680.00 72899.33 5669.00 72910.00 5658.00C72910.00 5636.67 72910.00 5615.33 72910.00 5594.00C72920.67 5594.00 72931.33 5594.00 72942.00 5594.00C72953.00 5626.33 72964.00 5658.67 72975.00 5691.00C72996.33 5691.00 73017.67 5691.00 73039.00 5691.00C73039.00 5701.67 73039.00 5712.33 73039.00 5723.00C73060.33 5723.00 73081.67 5723.00 73103.00 5723.00C73124.67 5755.00 73146.33 5787.00 73168.00 5819.00C73189.33 5819.00 73210.67 5819.00 73232.00 5819.00C73267.52 5855.03 73302.86 5891.24 73338.88 5926.77C73367.59 5955.18 73396.29 5983.59 73425.00 6012.00C73446.33 6001.33 73467.67 5990.67 73489.00 5980.00C73510.33 6001.33 73531.67 6022.67 73553.00 6044.00C73531.67 6055.00 73510.33 6066.00 73489.00 6077.00C73499.67 6109.00 73510.33 6141.00 73521.00 6173.00C73521.00 6183.67 73521.00 6194.33 73521.00 6205.00C73499.67 6215.67 73478.33 6226.33 73457.00 6237.00C73435.67 6258.67 73414.33 6280.33 73393.00 6302.00C73393.00 6323.33 73393.00 6344.67 73393.00 6366.00C73371.33 6366.00 73349.67 6366.00 73328.00 6366.00C73317.33 6387.33 73306.67 6408.67 73296.00 6430.00C73285.33 6440.67 73274.67 6451.33 73264.00 6462.00C73264.00 6483.67 73264.00 6505.33 73264.00 6527.00C73285.33 6527.00 73306.67 6527.00 73328.00 6527.00C73338.67 6537.67 73349.33 6548.33 73360.00 6559.00C73317.33 6612.33 73274.67 6665.67 73232.00 6719.00C73242.67 6730.00 73253.33 6741.00 73264.00 6752.00C73264.00 6784.00 73264.00 6816.00 73264.00 6848.00C73274.67 6880.33 73285.33 6912.67 73296.00 6945.00C73296.00 6955.67 73296.00 6966.33 73296.00 6977.00C73318.85 6999.76 73341.53 7022.70 73364.49 7045.35C73374.19 7054.66 73383.70 7064.19 73393.52 7073.35C73425.35 7094.90 73457.17 7116.45 73489.00 7138.00C73553.33 7138.00 73617.67 7138.00 73682.00 7138.00C73725.00 7159.33 73768.00 7180.67 73811.00 7202.00C73800.00 7234.00 73789.00 7266.00 73778.00 7298.00C73767.31 7308.78 73756.41 7319.40 73745.86 7330.28C73713.91 7394.52 73681.95 7458.76 73650.00 7523.00C73660.67 7523.00 73671.33 7523.00 73682.00 7523.00C73703.33 7544.67 73724.67 7566.33 73746.00 7588.00C73767.67 7588.00 73789.33 7588.00 73811.00 7588.00C73811.00 7620.00 73811.00 7652.00 73811.00 7684.00C73843.00 7694.67 73875.00 7705.33 73907.00 7716.00C73907.00 7737.67 73907.00 7759.33 73907.00 7781.00C73896.33 7781.00 73885.67 7781.00 73875.00 7781.00C73864.33 7770.00 73853.67 7759.00 73843.00 7748.00C73843.00 7759.00 73843.00 7770.00 73843.00 7781.00C73853.67 7791.67 73864.33 7802.33 73875.00 7813.00C73896.33 7791.33 73917.67 7769.67 73939.00 7748.00C73939.00 7769.67 73939.00 7791.33 73939.00 7813.00C73928.33 7823.67 73917.67 7834.33 73907.00 7845.00C73917.67 7855.67 73928.33 7866.33 73939.00 7877.00C73949.67 7866.33 73960.33 7855.67 73971.00 7845.00C73982.00 7845.00 73993.00 7845.00 74004.00 7845.00C73993.00 7855.67 73982.00 7866.33 73971.00 7877.00C73982.00 7887.67 73993.00 7898.33 74004.00 7909.00C73982.33 7930.67 73960.67 7952.33 73939.00 7974.00C73939.00 7984.67 73939.00 7995.33 73939.00 8006.00C73960.67 8006.00 73982.33 8006.00 74004.00 8006.00C74014.67 8016.67 74025.33 8027.33 74036.00 8038.00C74046.67 8016.67 74057.33 7995.33 74068.00 7974.00C74089.33 7974.00 74110.67 7974.00 74132.00 7974.00C74132.00 7984.67 74132.00 7995.33 74132.00 8006.00C74164.33 8006.00 74196.67 8006.00 74229.00 8006.00C74239.67 8027.33 74250.33 8048.67 74261.00 8070.00C74261.00 8080.67 74261.00 8091.33 74261.00 8102.00C74271.67 8112.67 74282.33 8123.33 74293.00 8134.00C74271.67 8144.67 74250.33 8155.33 74229.00 8166.00C74229.00 8187.67 74229.00 8209.33 74229.00 8231.00C74218.00 8231.00 74207.00 8231.00 74196.00 8231.00C74185.33 8220.33 74174.67 8209.67 74164.00 8199.00C74153.33 8199.00 74142.67 8199.00 74132.00 8199.00C74142.67 8209.67 74153.33 8220.33 74164.00 8231.00C74153.33 8241.67 74142.67 8252.33 74132.00 8263.00C74100.00 8263.00 74068.00 8263.00 74036.00 8263.00C74036.00 8305.67 74036.00 8348.33 74036.00 8391.00C74014.33 8369.67 73992.67 8348.33 73971.00 8327.00C73982.00 8348.33 73993.00 8369.67 74004.00 8391.00C73982.33 8391.00 73960.67 8391.00 73939.00 8391.00C73928.33 8402.00 73917.67 8413.00 73907.00 8424.00C73907.00 8466.67 73907.00 8509.33 73907.00 8552.00C73917.67 8552.00 73928.33 8552.00 73939.00 8552.00C73939.00 8584.33 73939.00 8616.67 73939.00 8649.00C73949.67 8659.67 73960.33 8670.33 73971.00 8681.00C73971.00 8702.33 73971.00 8723.67 73971.00 8745.00C73960.33 8734.33 73949.67 8723.67 73939.00 8713.00C73917.67 8734.33 73896.33 8755.67 73875.00 8777.00C73885.67 8788.00 73896.33 8799.00 73907.00 8810.00C73907.00 8820.67 73907.00 8831.33 73907.00 8842.00C73896.33 8852.67 73885.67 8863.33 73875.00 8874.00C73864.33 8852.67 73853.67 8831.33 73843.00 8810.00C73832.33 8831.33 73821.67 8852.67 73811.00 8874.00C73789.33 8884.67 73767.67 8895.33 73746.00 8906.00C73735.33 8906.00 73724.67 8906.00 73714.00 8906.00C73724.67 8895.33 73735.33 8884.67 73746.00 8874.00C73746.00 8863.33 73746.00 8852.67 73746.00 8842.00C73735.33 8842.00 73724.67 8842.00 73714.00 8842.00C73703.33 8863.33 73692.67 8884.67 73682.00 8906.00C73671.33 8906.00 73660.67 8906.00 73650.00 8906.00C73628.33 8916.67 73606.67 8927.33 73585.00 8938.00C73574.33 8959.33 73563.67 8980.67 73553.00 9002.00C73531.67 9013.00 73510.33 9024.00 73489.00 9035.00C73489.00 9045.67 73489.00 9056.33 73489.00 9067.00C73499.67 9067.00 73510.33 9067.00 73521.00 9067.00C73521.00 9077.67 73521.00 9088.33 73521.00 9099.00C73542.33 9120.33 73563.67 9141.67 73585.00 9163.00C73574.33 9173.67 73563.67 9184.33 73553.00 9195.00C73563.67 9216.67 73574.33 9238.33 73585.00 9260.00C73574.33 9281.33 73563.67 9302.67 73553.00 9324.00C73531.67 9334.67 73510.33 9345.33 73489.00 9356.00C73478.33 9345.33 73467.67 9334.67 73457.00 9324.00C73446.33 9345.33 73435.67 9366.67 73425.00 9388.00C73414.33 9388.00 73403.67 9388.00 73393.00 9388.00C73380.73 9400.04 73368.16 9411.80 73356.08 9424.04C73340.15 9440.52 73324.21 9457.00 73307.89 9473.11C73303.93 9477.07 73299.96 9481.04 73296.00 9485.00C73296.00 9495.67 73296.00 9506.33 73296.00 9517.00C73264.00 9517.00 73232.00 9517.00 73200.00 9517.00C73189.33 9527.67 73178.67 9538.33 73168.00 9549.00C73157.00 9581.33 73146.00 9613.67 73135.00 9646.00C73113.67 9646.00 73092.33 9646.00 73071.00 9646.00C73081.67 9656.67 73092.33 9667.33 73103.00 9678.00C73081.67 9678.00 73060.33 9678.00 73039.00 9678.00C73017.67 9699.33 72996.33 9720.67 72975.00 9742.00C72964.00 9731.33 72953.00 9720.67 72942.00 9710.00C72931.33 9720.67 72920.67 9731.33 72910.00 9742.00C72888.67 9731.33 72867.33 9720.67 72846.00 9710.00C72846.00 9731.33 72846.00 9752.67 72846.00 9774.00C72835.33 9763.33 72824.67 9752.67 72814.00 9742.00C72792.33 9752.67 72770.67 9763.33 72749.00 9774.00C72727.67 9774.00 72706.33 9774.00 72685.00 9774.00C72685.00 9795.33 72685.00 9816.67 72685.00 9838.00C72674.33 9859.67 72663.67 9881.33 72653.00 9903.00C72642.33 9913.67 72631.67 9924.33 72621.00 9935.00C72631.67 9935.00 72642.33 9935.00 72653.00 9935.00C72653.00 9945.67 72653.00 9956.33 72653.00 9967.00C72631.67 9977.67 72610.33 9988.33 72589.00 9999.00C72599.67 10009.67 72610.33 10020.33 72621.00 10031.00C72653.00 10031.00 72685.00 10031.00 72717.00 10031.00C72717.00 10052.67 72717.00 10074.33 72717.00 10096.00C72727.67 10117.33 72738.33 10138.67 72749.00 10160.00C72781.33 10170.67 72813.67 10181.33 72846.00 10192.00C72867.33 10213.33 72888.67 10234.67 72910.00 10256.00C72910.00 10288.33 72910.00 10320.67 72910.00 10353.00C72878.00 10363.67 72846.00 10374.33 72814.00 10385.00C72814.00 10395.67 72814.00 10406.33 72814.00 10417.00C72835.33 10417.00 72856.67 10417.00 72878.00 10417.00C72878.00 10427.67 72878.00 10438.33 72878.00 10449.00C72856.67 10449.00 72835.33 10449.00 72814.00 10449.00C72802.35 10472.50 72790.96 10496.14 72779.14 10519.56C72769.09 10539.04 72759.04 10558.52 72749.00 10578.00C72749.00 10610.00 72749.00 10642.00 72749.00 10674.00C72760.00 10674.00 72771.00 10674.00 72782.00 10674.00C72803.33 10663.33 72824.67 10652.67 72846.00 10642.00C72856.67 10642.00 72867.33 10642.00 72878.00 10642.00C72867.33 10674.33 72856.67 10706.67 72846.00 10739.00C72856.67 10792.33 72867.33 10845.67 72878.00 10899.00C72888.67 10910.00 72899.33 10921.00 72910.00 10932.00C72910.00 10953.33 72910.00 10974.67 72910.00 10996.00C72899.33 11006.67 72888.67 11017.33 72878.00 11028.00C72856.67 11017.33 72835.33 11006.67 72814.00 10996.00C72803.33 11006.67 72792.67 11017.33 72782.00 11028.00C72792.67 11060.33 72803.33 11092.67 72814.00 11125.00C72796.64 11142.38 72779.34 11159.82 72761.58 11176.80C72740.38 11197.26 72719.79 11218.36 72698.88 11239.12C72694.25 11243.75 72689.63 11248.37 72685.00 11253.00C72674.33 11296.00 72663.67 11339.00 72653.00 11382.00C72631.67 11382.00 72610.33 11382.00 72589.00 11382.00C72578.33 11414.00 72567.67 11446.00 72557.00 11478.00C72557.00 11499.67 72557.00 11521.33 72557.00 11543.00C72546.00 11553.67 72535.00 11564.33 72524.00 11575.00C72545.67 11596.33 72567.33 11617.67 72589.00 11639.00C72567.33 11649.67 72545.67 11660.33 72524.00 11671.00C72492.00 11671.00 72460.00 11671.00 72428.00 11671.00C72427.95 11681.76 72428.10 11692.55 72427.93 11703.30C72417.28 11746.20 72406.64 11789.10 72396.00 11832.00C72417.33 11885.67 72438.67 11939.33 72460.00 11993.00C72449.33 12003.67 72438.67 12014.33 72428.00 12025.00C72406.67 12025.00 72385.33 12025.00 72364.00 12025.00C72385.33 12025.00 72406.67 12025.00 72428.00 12025.00C72428.00 12035.67 72428.00 12046.33 72428.00 12057.00C72417.33 12057.00 72406.67 12057.00 72396.00 12057.00C72385.33 12067.67 72374.67 12078.33 72364.00 12089.00C72364.00 12099.67 72364.00 12110.33 72364.00 12121.00C72385.33 12121.00 72406.67 12121.00 72428.00 12121.00C72428.00 12142.67 72428.00 12164.33 72428.00 12186.00C72417.33 12186.00 72406.67 12186.00 72396.00 12186.00C72385.33 12175.00 72374.67 12164.00 72364.00 12153.00C72353.33 12174.67 72342.67 12196.33 72332.00 12218.00C72310.33 12228.67 72288.67 12239.33 72267.00 12250.00C72267.00 12271.33 72267.00 12292.67 72267.00 12314.00C72245.67 12324.67 72224.33 12335.33 72203.00 12346.00C72203.07 12357.09 72202.87 12368.23 72203.10 12379.30C72213.73 12411.20 72224.37 12443.10 72235.00 12475.00C72216.39 12512.16 72197.80 12549.33 72179.53 12586.67C72176.74 12592.56 72173.57 12598.37 72171.00 12604.31C72171.00 12625.54 72171.00 12646.77 72171.00 12668.00C72192.33 12689.33 72213.67 12710.67 72235.00 12732.00C72224.33 12742.67 72213.67 12753.33 72203.00 12764.00C72192.33 12817.67 72181.67 12871.33 72171.00 12925.00C72171.00 12935.67 72171.00 12946.33 72171.00 12957.00C72138.67 13000.00 72106.33 13043.00 72074.00 13086.00C72063.33 13118.00 72052.67 13150.00 72042.00 13182.00C72063.67 13192.67 72085.33 13203.33 72107.00 13214.00C72107.00 13225.00 72107.00 13236.00 72107.00 13247.00C72085.33 13268.33 72063.67 13289.67 72042.00 13311.00C72052.67 13332.33 72063.33 13353.67 72074.00 13375.00C72063.33 13385.67 72052.67 13396.33 72042.00 13407.00C72052.67 13428.67 72063.33 13450.33 72074.00 13472.00C72063.33 13482.67 72052.67 13493.33 72042.00 13504.00C72042.00 13568.33 72042.00 13632.67 72042.00 13697.00C72031.33 13729.00 72020.67 13761.00 72010.00 13793.00C72020.67 13857.33 72031.33 13921.67 72042.00 13986.00C72031.33 14007.33 72020.67 14028.67 72010.00 14050.00C72020.67 14114.33 72031.33 14178.67 72042.00 14243.00C72042.00 14254.00 72042.00 14265.00 72042.00 14276.00C72063.76 14308.06 72085.39 14340.22 72107.22 14372.22C72117.81 14382.81 72128.41 14393.41 72139.00 14404.00C72128.33 14425.67 72117.67 14447.33 72107.00 14469.00C72107.00 14479.67 72107.00 14490.33 72107.00 14501.00C72128.33 14522.33 72149.67 14543.67 72171.00 14565.00C72171.00 14586.33 72171.00 14607.67 72171.00 14629.00C72181.67 14639.67 72192.33 14650.33 72203.00 14661.00C72181.67 14661.00 72160.33 14661.00 72139.00 14661.00C72139.00 14682.67 72139.00 14704.33 72139.00 14726.00C72149.67 14726.00 72160.33 14726.00 72171.00 14726.00C72203.06 14747.42 72235.22 14768.72 72267.22 14790.22C72288.82 14811.48 72310.41 14832.74 72332.00 14854.00C72321.00 14875.67 72310.00 14897.33 72299.00 14919.00C72331.33 14961.67 72363.67 15004.33 72396.00 15047.00C72385.33 15057.67 72374.67 15068.33 72364.00 15079.00C72364.00 15100.67 72364.00 15122.33 72364.00 15144.00C72374.67 15154.67 72385.33 15165.33 72396.00 15176.00C72396.00 15186.67 72396.00 15197.33 72396.00 15208.00C72428.00 15229.33 72460.00 15250.67 72492.00 15272.00C72481.33 15293.67 72470.67 15315.33 72460.00 15337.00C72470.67 15347.67 72481.33 15358.33 72492.00 15369.00C72491.93 15379.76 72492.13 15390.56 72491.90 15401.30C72481.27 15433.20 72470.63 15465.10 72460.00 15497.00C72481.33 15518.67 72502.67 15540.33 72524.00 15562.00C72513.33 15562.00 72502.67 15562.00 72492.00 15562.00C72492.00 15583.33 72492.00 15604.67 72492.00 15626.00C72470.67 15647.33 72449.33 15668.67 72428.00 15690.00C72428.00 15700.67 72428.00 15711.33 72428.00 15722.00C72449.33 15765.00 72470.67 15808.00 72492.00 15851.00C72513.67 15872.33 72535.33 15893.67 72557.00 15915.00C72567.67 15893.67 72578.33 15872.33 72589.00 15851.00C72599.67 15872.33 72610.33 15893.67 72621.00 15915.00C72642.33 15936.67 72663.67 15958.33 72685.00 15980.00C72685.00 15990.67 72685.00 16001.33 72685.00 16012.00C72695.67 16012.00 72706.33 16012.00 72717.00 16012.00C72727.67 16033.33 72738.33 16054.67 72749.00 16076.00C72766.73 16058.81 72784.54 16041.70 72801.89 16024.11C72805.93 16020.07 72809.96 16016.04 72814.00 16012.00C72814.00 16033.33 72814.00 16054.67 72814.00 16076.00C72846.00 16086.67 72878.00 16097.33 72910.00 16108.00C72920.67 16129.67 72931.33 16151.33 72942.00 16173.00C72963.67 16194.33 72985.33 16215.67 73007.00 16237.00C73017.67 16237.00 73028.33 16237.00 73039.00 16237.00C73049.67 16226.33 73060.33 16215.67 73071.00 16205.00C73124.67 16205.00 73178.33 16205.00 73232.00 16205.00C73232.00 16215.67 73232.00 16226.33 73232.00 16237.00C73253.33 16247.67 73274.67 16258.33 73296.00 16269.00C73285.33 16290.33 73274.67 16311.67 73264.00 16333.00C73285.33 16354.67 73306.67 16376.33 73328.00 16398.00C73328.00 16419.33 73328.00 16440.67 73328.00 16462.00C73306.67 16472.67 73285.33 16483.33 73264.00 16494.00C73274.67 16537.00 73285.33 16580.00 73296.00 16623.00C73285.33 16623.00 73274.67 16623.00 73264.00 16623.00C73274.67 16633.67 73285.33 16644.33 73296.00 16655.00C73285.33 16676.33 73274.67 16697.67 73264.00 16719.00C73253.33 16729.67 73242.67 16740.33 73232.00 16751.00C73232.00 16804.67 73232.00 16858.33 73232.00 16912.00C73253.33 16933.33 73274.67 16954.67 73296.00 16976.00C73285.33 16987.00 73274.67 16998.00 73264.00 17009.00C73274.67 17019.67 73285.33 17030.33 73296.00 17041.00C73296.00 17073.00 73296.00 17105.00 73296.00 17137.00C73274.67 17147.67 73253.33 17158.33 73232.00 17169.00C73221.33 17201.33 73210.67 17233.67 73200.00 17266.00C73210.67 17308.67 73221.33 17351.33 73232.00 17394.00C73242.67 17394.00 73253.33 17394.00 73264.00 17394.00C73264.00 17405.00 73264.00 17416.00 73264.00 17427.00C73274.67 17437.67 73285.33 17448.33 73296.00 17459.00C73285.33 17469.67 73274.67 17480.33 73264.00 17491.00C73285.33 17491.00 73306.67 17491.00 73328.00 17491.00C73317.33 17501.67 73306.67 17512.33 73296.00 17523.00C73285.33 17523.00 73274.67 17523.00 73264.00 17523.00C73253.33 17533.67 73242.67 17544.33 73232.00 17555.00C73242.67 17555.00 73253.33 17555.00 73264.00 17555.00C73264.00 17608.67 73264.00 17662.33 73264.00 17716.00C73253.33 17716.00 73242.67 17716.00 73232.00 17716.00C73221.33 17726.67 73210.67 17737.33 73200.00 17748.00C73210.67 17758.67 73221.33 17769.33 73232.00 17780.00C73221.33 17812.33 73210.67 17844.67 73200.00 17877.00C73200.00 17909.00 73200.00 17941.00 73200.00 17973.00C73178.33 17983.67 73156.67 17994.33 73135.00 18005.00C73146.00 18026.67 73157.00 18048.33 73168.00 18070.00C73157.00 18080.67 73146.00 18091.33 73135.00 18102.00C73156.67 18134.00 73178.33 18166.00 73200.00 18198.00C73189.33 18230.33 73178.67 18262.67 73168.00 18295.00C73178.67 18316.33 73189.33 18337.67 73200.00 18359.00C73232.00 18359.00 73264.00 18359.00 73296.00 18359.00C73317.33 18348.33 73338.67 18337.67 73360.00 18327.00C73392.33 18327.00 73424.67 18327.00 73457.00 18327.00C73467.67 18348.33 73478.33 18369.67 73489.00 18391.00C73499.67 18401.67 73510.33 18412.33 73521.00 18423.00C73542.33 18401.67 73563.67 18380.33 73585.00 18359.00C73574.33 18337.67 73563.67 18316.33 73553.00 18295.00C73563.67 18284.33 73574.33 18273.67 73585.00 18263.00C73585.00 18273.67 73585.00 18284.33 73585.00 18295.00C73606.67 18327.00 73628.33 18359.00 73650.00 18391.00C73639.33 18423.33 73628.67 18455.67 73618.00 18488.00C73618.00 18498.67 73618.00 18509.33 73618.00 18520.00C73607.00 18530.67 73596.00 18541.33 73585.00 18552.00C73585.00 18541.33 73585.00 18530.67 73585.00 18520.00C73563.67 18530.67 73542.33 18541.33 73521.00 18552.00C73510.33 18573.33 73499.67 18594.67 73489.00 18616.00C73499.67 18626.67 73510.33 18637.33 73521.00 18648.00C73510.33 18648.00 73499.67 18648.00 73489.00 18648.00C73478.33 18669.67 73467.67 18691.33 73457.00 18713.00C73467.67 18723.67 73478.33 18734.33 73489.00 18745.00C73478.33 18755.67 73467.67 18766.33 73457.00 18777.00C73457.00 18787.67 73457.00 18798.33 73457.00 18809.00C73489.00 18809.00 73521.00 18809.00 73553.00 18809.00C73563.67 18830.67 73574.33 18852.33 73585.00 18874.00C73585.00 18884.67 73585.00 18895.33 73585.00 18906.00C73596.00 18895.33 73607.00 18884.67 73618.00 18874.00C73650.00 18884.67 73682.00 18895.33 73714.00 18906.00C73740.27 18932.44 73766.86 18958.57 73793.43 18984.70C73799.29 18990.47 73805.14 18996.24 73811.00 19002.00C73821.67 18991.33 73832.33 18980.67 73843.00 18970.00C73875.00 18970.00 73907.00 18970.00 73939.00 18970.00C73949.67 18959.33 73960.33 18948.67 73971.00 18938.00C73992.67 18927.33 74014.33 18916.67 74036.00 18906.00C74057.33 18927.33 74078.67 18948.67 74100.00 18970.00C74110.67 18959.33 74121.33 18948.67 74132.00 18938.00C74132.00 18948.67 74132.00 18959.33 74132.00 18970.00C74142.67 18970.00 74153.33 18970.00 74164.00 18970.00C74174.67 18980.67 74185.33 18991.33 74196.00 19002.00C74196.00 19012.67 74196.00 19023.33 74196.00 19034.00C74207.00 19044.67 74218.00 19055.33 74229.00 19066.00C74229.00 19087.67 74229.00 19109.33 74229.00 19131.00C74250.33 19152.33 74271.67 19173.67 74293.00 19195.00C74293.00 19216.33 74293.00 19237.67 74293.00 19259.00C74303.67 19259.00 74314.33 19259.00 74325.00 19259.00C74325.00 19248.33 74325.00 19237.67 74325.00 19227.00C74335.67 19216.33 74346.33 19205.67 74357.00 19195.00C74367.67 19205.67 74378.33 19216.33 74389.00 19227.00C74389.00 19280.67 74389.00 19334.33 74389.00 19388.00C74399.67 19409.33 74410.33 19430.67 74421.00 19452.00C74453.33 19462.67 74485.67 19473.33 74518.00 19484.00C74550.00 19484.00 74582.00 19484.00 74614.00 19484.00C74625.00 19527.00 74636.00 19570.00 74647.00 19613.00C74668.33 19623.67 74689.67 19634.33 74711.00 19645.00C74700.33 19677.33 74689.67 19709.67 74679.00 19742.00C74689.67 19763.33 74700.33 19784.67 74711.00 19806.00C74732.33 19806.00 74753.67 19806.00 74775.00 19806.00C74796.67 19795.33 74818.33 19784.67 74840.00 19774.00C74840.00 19806.00 74840.00 19838.00 74840.00 19870.00C74861.33 19891.67 74882.67 19913.33 74904.00 19935.00C74904.00 19945.67 74904.00 19956.33 74904.00 19967.00C74914.67 19967.00 74925.33 19967.00 74936.00 19967.00C74925.33 19988.33 74914.67 20009.67 74904.00 20031.00C74936.00 20031.00 74968.00 20031.00 75000.00 20031.00C75000.00 20041.67 75000.00 20052.33 75000.00 20063.00C75010.67 20052.33 75021.33 20041.67 75032.00 20031.00C75032.00 20009.67 75032.00 19988.33 75032.00 19967.00C75064.33 19967.00 75096.67 19967.00 75129.00 19967.00C75139.67 19977.67 75150.33 19988.33 75161.00 19999.00C75161.05 20009.76 75160.90 20020.55 75161.07 20031.30C75171.72 20074.20 75182.36 20117.10 75193.00 20160.00C75182.33 20170.67 75171.67 20181.33 75161.00 20192.00C75161.00 20213.33 75161.00 20234.67 75161.00 20256.00C75182.33 20256.00 75203.67 20256.00 75225.00 20256.00C75235.67 20245.33 75246.33 20234.67 75257.00 20224.00C75268.00 20224.00 75279.00 20224.00 75290.00 20224.00C75322.00 20256.00 75354.00 20288.00 75386.00 20320.00C75375.33 20331.00 75364.67 20342.00 75354.00 20353.00C75364.67 20363.67 75375.33 20374.33 75386.00 20385.00C75396.67 20417.00 75407.33 20449.00 75418.00 20481.00C75407.33 20491.67 75396.67 20502.33 75386.00 20513.00C75396.67 20513.00 75407.33 20513.00 75418.00 20513.00C75450.33 20545.33 75482.67 20577.67 75515.00 20610.00C75547.00 20610.00 75579.00 20610.00 75611.00 20610.00C75621.67 20631.33 75632.33 20652.67 75643.00 20674.00C75675.33 20684.67 75707.67 20695.33 75740.00 20706.00C75740.00 20695.33 75740.00 20684.67 75740.00 20674.00C75772.00 20674.00 75804.00 20674.00 75836.00 20674.00C75858.45 20696.17 75881.04 20718.20 75903.39 20740.47C75913.26 20750.65 75923.13 20760.82 75933.00 20771.00C75943.67 20771.00 75954.33 20771.00 75965.00 20771.00C75975.67 20781.67 75986.33 20792.33 75997.00 20803.00C76029.00 20803.00 76061.00 20803.00 76093.00 20803.00C76114.67 20813.67 76136.33 20824.33 76158.00 20835.00C76179.33 20824.33 76200.67 20813.67 76222.00 20803.00C76232.67 20813.67 76243.33 20824.33 76254.00 20835.00C76264.67 20824.33 76275.33 20813.67 76286.00 20803.00C76297.00 20824.33 76308.00 20845.67 76319.00 20867.00C76329.67 20877.67 76340.33 20888.33 76351.00 20899.00C76361.67 20899.00 76372.33 20899.00 76383.00 20899.00C76393.67 20888.33 76404.33 20877.67 76415.00 20867.00C76425.67 20867.00 76436.33 20867.00 76447.00 20867.00C76457.67 20888.33 76468.33 20909.67 76479.00 20931.00C76522.00 20920.33 76565.00 20909.67 76608.00 20899.00C76629.33 20909.67 76650.67 20920.33 76672.00 20931.00C76693.67 20931.00 76715.33 20931.00 76737.00 20931.00C76737.00 20920.33 76737.00 20909.67 76737.00 20899.00C76747.67 20909.67 76758.33 20920.33 76769.00 20931.00C76779.67 20952.67 76790.33 20974.33 76801.00 20996.00C76811.67 21006.67 76822.33 21017.33 76833.00 21028.00C76843.67 21017.33 76854.33 21006.67 76865.00 20996.00C76875.87 20995.94 76886.76 20996.12 76897.62 20995.91C76972.41 20984.94 77047.21 20973.97 77122.00 20963.00C77122.00 20984.67 77122.00 21006.33 77122.00 21028.00C77111.33 21038.67 77100.67 21049.33 77090.00 21060.00C77090.00 21070.67 77090.00 21081.33 77090.00 21092.00C77100.67 21102.67 77111.33 21113.33 77122.00 21124.00C77143.67 21134.67 77165.33 21145.33 77187.00 21156.00C77208.33 21188.33 77229.67 21220.67 77251.00 21253.00C77229.67 21263.67 77208.33 21274.33 77187.00 21285.00C77187.00 21295.67 77187.00 21306.33 77187.00 21317.00C77176.33 21327.67 77165.67 21338.33 77155.00 21349.00C77176.33 21359.67 77197.67 21370.33 77219.00 21381.00C77219.00 22956.67 77219.00 24532.33 77219.00 26108.00C75418.33 26108.00 73617.67 26108.00 71817.00 26108.00C71795.67 26161.67 71774.33 26215.33 71753.00 26269.00C71742.33 26376.00 71731.67 26483.00 71721.00 26590.00C71699.33 26611.67 71677.67 26633.33 71656.00 26655.00C71634.37 26665.76 71612.82 26676.71 71591.13 26687.35C71537.75 26708.56 71484.38 26729.78 71431.00 26751.00C71431.00 26761.67 71431.00 26772.33 71431.00 26783.00C71399.00 26815.33 71367.00 26847.67 71335.00 26880.00C71335.00 26901.33 71335.00 26922.67 71335.00 26944.00C71356.33 26965.33 71377.67 26986.67 71399.00 27008.00C71377.67 27029.67 71356.33 27051.33 71335.00 27073.00C71335.00 27105.00 71335.00 27137.00 71335.00 27169.00C71324.33 27179.67 71313.67 27190.33 71303.00 27201.00C71313.67 27222.67 71324.33 27244.33 71335.00 27266.00C71302.67 27276.67 71270.33 27287.33 71238.00 27298.00C71216.67 27330.00 71195.33 27362.00 71174.00 27394.00C71152.67 27394.00 71131.33 27394.00 71110.00 27394.00C71120.67 27404.67 71131.33 27415.33 71142.00 27426.00C71099.00 27469.00 71056.00 27512.00 71013.00 27555.00C71013.00 27597.67 71013.00 27640.33 71013.00 27683.00C70980.78 27747.92 70948.65 27812.89 70916.17 27877.68C70905.78 27898.79 70895.39 27919.89 70885.00 27941.00C70895.67 27951.67 70906.33 27962.33 70917.00 27973.00C70917.00 27983.67 70917.00 27994.33 70917.00 28005.00C70927.67 28015.67 70938.33 28026.33 70949.00 28037.00C70938.33 28058.33 70927.67 28079.67 70917.00 28101.00C70906.33 28101.00 70895.67 28101.00 70885.00 28101.00C70852.67 28133.33 70820.33 28165.67 70788.00 28198.00C70798.67 28219.33 70809.33 28240.67 70820.00 28262.00C70798.67 28251.33 70777.33 28240.67 70756.00 28230.00C70745.33 28240.67 70734.67 28251.33 70724.00 28262.00C70724.00 28283.67 70724.00 28305.33 70724.00 28327.00C70713.33 28348.33 70702.67 28369.67 70692.00 28391.00C70670.33 28401.67 70648.67 28412.33 70627.00 28423.00C70616.33 28412.33 70605.67 28401.67 70595.00 28391.00C70584.33 28401.67 70573.67 28412.33 70563.00 28423.00C70573.67 28455.00 70584.33 28487.00 70595.00 28519.00C70584.33 28562.00 70573.67 28605.00 70563.00 28648.00C70552.33 28658.67 70541.67 28669.33 70531.00 28680.00C70563.00 28723.00 70595.00 28766.00 70627.00 28809.00C70605.67 28830.33 70584.33 28851.67 70563.00 28873.00C70563.00 28916.00 70563.00 28959.00 70563.00 29002.00C70531.00 29002.00 70499.00 29002.00 70467.00 29002.00C70467.07 29012.76 70466.87 29023.56 70467.10 29034.30C70477.73 29066.20 70488.37 29098.10 70499.00 29130.00C70488.33 29151.67 70477.67 29173.33 70467.00 29195.00C70467.00 29205.67 70467.00 29216.33 70467.00 29227.00C70445.33 29237.67 70423.67 29248.33 70402.00 29259.00C70391.33 29291.00 70380.67 29323.00 70370.00 29355.00C70359.33 29366.00 70348.67 29377.00 70338.00 29388.00C70348.67 29398.67 70359.33 29409.33 70370.00 29420.00C70359.33 29430.67 70348.67 29441.33 70338.00 29452.00C70348.67 29462.67 70359.33 29473.33 70370.00 29484.00C70370.00 29505.33 70370.00 29526.67 70370.00 29548.00C70305.67 29591.00 70241.33 29634.00 70177.00 29677.00C70177.00 29698.33 70177.00 29719.67 70177.00 29741.00C70166.33 29762.67 70155.67 29784.33 70145.00 29806.00C70145.00 29816.67 70145.00 29827.33 70145.00 29838.00C70123.67 29848.67 70102.33 29859.33 70081.00 29870.00C70091.67 29934.33 70102.33 29998.67 70113.00 30063.00C70113.00 30073.67 70113.00 30084.33 70113.00 30095.00C70134.33 30105.67 70155.67 30116.33 70177.00 30127.00C70177.00 30148.33 70177.00 30169.67 70177.00 30191.00C70166.33 30202.00 70155.67 30213.00 70145.00 30224.00C70155.67 30245.33 70166.33 30266.67 70177.00 30288.00C70198.67 30277.33 70220.33 30266.67 70242.00 30256.00C70242.00 30277.33 70242.00 30298.67 70242.00 30320.00C70263.33 30330.67 70284.67 30341.33 70306.00 30352.00C70316.67 30373.67 70327.33 30395.33 70338.00 30417.00C70364.27 30443.44 70390.86 30469.57 70417.43 30495.70C70423.29 30501.47 70429.14 30507.24 70435.00 30513.00C70456.33 30513.00 70477.67 30513.00 70499.00 30513.00C70499.00 30545.00 70499.00 30577.00 70499.00 30609.00C70520.33 30630.67 70541.67 30652.33 70563.00 30674.00C70552.33 30706.00 70541.67 30738.00 70531.00 30770.00C70541.67 30770.00 70552.33 30770.00 70563.00 30770.00C70563.00 30802.33 70563.00 30834.67 70563.00 30867.00C70552.33 30888.33 70541.67 30909.67 70531.00 30931.00C70520.33 30931.00 70509.67 30931.00 70499.00 30931.00C70456.00 30952.33 70413.00 30973.67 70370.00 30995.00C70359.33 31005.67 70348.67 31016.33 70338.00 31027.00C70295.00 31027.00 70252.00 31027.00 70209.00 31027.00C70198.33 31048.67 70187.67 31070.33 70177.00 31092.00C70145.00 31092.00 70113.00 31092.00 70081.00 31092.00C70059.33 31102.67 70037.67 31113.33 70016.00 31124.00C69994.67 31145.33 69973.33 31166.67 69952.00 31188.00C69941.33 31177.33 69930.67 31166.67 69920.00 31156.00C69855.67 31156.00 69791.33 31156.00 69727.00 31156.00C69704.24 31178.85 69681.30 31201.53 69658.65 31224.49C69649.43 31233.99 69640.22 31243.50 69631.00 31253.00C69641.67 31263.67 69652.33 31274.33 69663.00 31285.00C69652.33 31295.67 69641.67 31306.33 69631.00 31317.00C69641.67 31327.67 69652.33 31338.33 69663.00 31349.00C69652.33 31370.33 69641.67 31391.67 69631.00 31413.00C69620.33 31413.00 69609.67 31413.00 69599.00 31413.00C69577.33 31434.67 69555.67 31456.33 69534.00 31478.00C69555.67 31488.67 69577.33 31499.33 69599.00 31510.00C69599.00 31520.67 69599.00 31531.33 69599.00 31542.00C69556.00 31584.67 69513.00 31627.33 69470.00 31670.00C69459.33 31670.00 69448.67 31670.00 69438.00 31670.00C69427.33 31659.33 69416.67 31648.67 69406.00 31638.00C69384.33 31638.00 69362.67 31638.00 69341.00 31638.00C69341.00 31627.33 69341.00 31616.67 69341.00 31606.00C69287.67 31584.67 69234.33 31563.33 69181.00 31542.00C69181.00 31574.00 69181.00 31606.00 69181.00 31638.00C69148.67 31627.33 69116.33 31616.67 69084.00 31606.00C69073.33 31606.00 69062.67 31606.00 69052.00 31606.00C69041.33 31616.67 69030.67 31627.33 69020.00 31638.00C69009.33 31638.00 68998.67 31638.00 68988.00 31638.00C68988.00 31648.67 68988.00 31659.33 68988.00 31670.00C68955.67 31681.00 68923.33 31692.00 68891.00 31703.00C68869.67 31724.33 68848.33 31745.67 68827.00 31767.00C68816.33 31756.33 68805.67 31745.67 68795.00 31735.00C68805.67 31713.33 68816.33 31691.67 68827.00 31670.00C68816.24 31669.92 68805.43 31670.15 68794.71 31669.88C68741.14 31648.59 68687.57 31627.29 68634.00 31606.00C68623.33 31616.67 68612.67 31627.33 68602.00 31638.00C68569.67 31616.67 68537.33 31595.33 68505.00 31574.00C68473.00 31584.67 68441.00 31595.33 68409.00 31606.00C68419.67 31584.67 68430.33 31563.33 68441.00 31542.00C68430.33 31531.33 68419.67 31520.67 68409.00 31510.00C68398.33 31488.33 68387.67 31466.67 68377.00 31445.00C68387.67 31423.67 68398.33 31402.33 68409.00 31381.00C68398.33 31370.33 68387.67 31359.67 68377.00 31349.00C68387.67 31327.67 68398.33 31306.33 68409.00 31285.00C68376.67 31274.33 68344.33 31263.67 68312.00 31253.00C68312.00 31242.00 68312.00 31231.00 68312.00 31220.00C68323.00 31209.33 68334.00 31198.67 68345.00 31188.00C68355.67 31166.67 68366.33 31145.33 68377.00 31124.00C68366.33 31102.67 68355.67 31081.33 68345.00 31060.00C68334.00 31070.67 68323.00 31081.33 68312.00 31092.00C68294.62 31074.64 68277.18 31057.34 68260.20 31039.58C68256.13 31035.39 68252.07 31031.19 68248.00 31027.00C68237.33 31027.00 68226.67 31027.00 68216.00 31027.00C68216.00 30952.00 68216.00 30877.00 68216.00 30802.00C68194.67 30791.33 68173.33 30780.67 68152.00 30770.00C68098.33 30770.00 68044.67 30770.00 67991.00 30770.00C67980.33 30738.00 67969.67 30706.00 67959.00 30674.00C67959.00 30641.67 67959.00 30609.33 67959.00 30577.00C67941.64 30559.62 67924.34 30542.18 67906.58 30525.20C67902.39 30521.13 67898.19 30517.07 67894.00 30513.00C67862.00 30534.33 67830.00 30555.67 67798.00 30577.00C67755.00 30534.33 67712.00 30491.67 67669.00 30449.00C67669.00 30427.33 67669.00 30405.67 67669.00 30384.00C67658.33 30384.00 67647.67 30384.00 67637.00 30384.00C67637.00 30341.33 67637.00 30298.67 67637.00 30256.00C67647.67 30245.33 67658.33 30234.67 67669.00 30224.00C67658.33 30181.00 67647.67 30138.00 67637.00 30095.00C67615.67 30095.00 67594.33 30095.00 67573.00 30095.00C67562.33 30105.67 67551.67 30116.33 67541.00 30127.00C67530.33 30127.00 67519.67 30127.00 67509.00 30127.00C67498.00 30116.33 67487.00 30105.67 67476.00 30095.00C67465.33 30105.67 67454.67 30116.33 67444.00 30127.00C67379.67 30127.00 67315.33 30127.00 67251.00 30127.00C67208.33 30105.67 67165.67 30084.33 67123.00 30063.00C67090.67 30063.00 67058.33 30063.00 67026.00 30063.00C67015.33 30052.33 67004.67 30041.67 66994.00 30031.00C66983.33 29988.00 66972.67 29945.00 66962.00 29902.00C66919.00 29880.67 66876.00 29859.33 66833.00 29838.00C66822.24 29838.07 66811.44 29837.87 66800.70 29838.10C66768.80 29848.73 66736.90 29859.37 66705.00 29870.00C66687.64 29852.62 66670.34 29835.18 66652.58 29818.20C66648.39 29814.13 66644.19 29810.07 66640.00 29806.00C66608.00 29816.67 66576.00 29827.33 66544.00 29838.00C66533.33 29848.67 66522.67 29859.33 66512.00 29870.00C66512.00 29880.67 66512.00 29891.33 66512.00 29902.00C66479.67 29891.33 66447.33 29880.67 66415.00 29870.00C66383.00 29870.00 66351.00 29870.00 66319.00 29870.00C66297.67 29859.33 66276.33 29848.67 66255.00 29838.00C66244.00 29838.00 66233.00 29838.00 66222.00 29838.00C66211.33 29848.67 66200.67 29859.33 66190.00 29870.00C66190.00 29891.33 66190.00 29912.67 66190.00 29934.00C66200.67 29955.67 66211.33 29977.33 66222.00 29999.00C66211.33 30009.67 66200.67 30020.33 66190.00 30031.00C66190.00 30063.00 66190.00 30095.00 66190.00 30127.00C66179.33 30137.67 66168.67 30148.33 66158.00 30159.00C66082.90 30169.65 66007.80 30180.42 65932.69 30191.00C65900.79 30191.00 65868.90 30191.00 65837.00 30191.00C65794.00 30234.00 65751.00 30277.00 65708.00 30320.00C65676.00 30309.33 65644.00 30298.67 65612.00 30288.00C65590.33 30298.67 65568.67 30309.33 65547.00 30320.00C65536.22 30330.69 65525.60 30341.59 65514.72 30352.14C65471.81 30373.76 65428.91 30395.38 65386.00 30417.00C65364.67 30438.33 65343.33 30459.67 65322.00 30481.00C65290.00 30481.00 65258.00 30481.00 65226.00 30481.00C65226.00 30513.00 65226.00 30545.00 65226.00 30577.00C65215.00 30587.67 65204.00 30598.33 65193.00 30609.00C65161.00 30609.00 65129.00 30609.00 65097.00 30609.00C65086.29 30620.10 65075.46 30631.10 65064.83 30642.26C65043.55 30674.17 65022.28 30706.09 65001.00 30738.00C65001.00 30770.00 65001.00 30802.00 65001.00 30834.00C64990.00 30855.67 64979.00 30877.33 64968.00 30899.00C64914.57 30941.72 64861.19 30984.49 64807.74 31027.17C64775.49 31048.78 64743.25 31070.39 64711.00 31092.00C64689.67 31145.67 64668.33 31199.33 64647.00 31253.00C64647.00 31328.00 64647.00 31403.00 64647.00 31478.00C64657.67 31488.67 64668.33 31499.33 64679.00 31510.00C64679.00 31520.67 64679.00 31531.33 64679.00 31542.00C64657.67 31563.33 64636.33 31584.67 64615.00 31606.00C64615.00 31659.67 64615.00 31713.33 64615.00 31767.00C64582.67 31788.33 64550.33 31809.67 64518.00 31831.00C64518.00 31863.33 64518.00 31895.67 64518.00 31928.00C64507.33 31938.67 64496.67 31949.33 64486.00 31960.00C64496.67 31992.00 64507.33 32024.00 64518.00 32056.00C64507.33 32099.00 64496.67 32142.00 64486.00 32185.00C64496.67 32195.67 64507.33 32206.33 64518.00 32217.00C64539.67 32217.00 64561.33 32217.00 64583.00 32217.00C64583.00 32249.33 64583.00 32281.67 64583.00 32314.00C64604.33 32335.33 64625.67 32356.67 64647.00 32378.00C64657.67 32399.33 64668.33 32420.67 64679.00 32442.00C64679.00 32485.00 64679.00 32528.00 64679.00 32571.00C64668.33 32592.33 64657.67 32613.67 64647.00 32635.00C64614.67 32635.00 64582.33 32635.00 64550.00 32635.00C64539.33 32645.67 64528.67 32656.33 64518.00 32667.00C64518.00 32677.67 64518.00 32688.33 64518.00 32699.00C64539.67 32720.67 64561.33 32742.33 64583.00 32764.00C64561.33 32774.67 64539.67 32785.33 64518.00 32796.00C64518.00 32806.67 64518.00 32817.33 64518.00 32828.00C64528.69 32838.78 64539.59 32849.40 64550.14 32860.28C64561.09 32881.85 64572.05 32903.43 64583.00 32925.00C64572.00 32935.67 64561.00 32946.33 64550.00 32957.00C64528.67 32999.67 64507.33 33042.33 64486.00 33085.00C64496.67 33117.33 64507.33 33149.67 64518.00 33182.00C64496.67 33203.33 64475.33 33224.67 64454.00 33246.00C64443.25 33289.19 64432.63 33332.42 64421.80 33375.59C64411.19 33407.50 64400.49 33439.38 64389.94 33471.31C64378.96 33524.87 64367.98 33578.43 64357.00 33632.00C64335.67 33653.33 64314.33 33674.67 64293.00 33696.00C64282.33 33717.33 64271.67 33738.67 64261.00 33760.00C64293.00 33771.00 64325.00 33782.00 64357.00 33793.00C64400.00 33835.67 64443.00 33878.33 64486.00 33921.00C64486.00 33942.67 64486.00 33964.33 64486.00 33986.00C64475.33 34007.33 64464.67 34028.67 64454.00 34050.00C64443.23 34060.85 64432.28 34071.55 64421.62 34082.50C64389.42 34125.33 64357.21 34168.17 64325.00 34211.00C64325.00 34221.67 64325.00 34232.33 64325.00 34243.00C64335.76 34243.05 64346.55 34242.90 64357.30 34243.07C64400.20 34253.72 64443.10 34264.36 64486.00 34275.00C64496.67 34307.00 64507.33 34339.00 64518.00 34371.00C64561.00 34371.00 64604.00 34371.00 64647.00 34371.00C64668.33 34381.67 64689.67 34392.33 64711.00 34403.00C64711.00 34446.00 64711.00 34489.00 64711.00 34532.00C64743.33 34596.33 64775.67 34660.67 64808.00 34725.00C64861.33 34746.33 64914.67 34767.67 64968.00 34789.00C64979.00 34810.67 64990.00 34832.33 65001.00 34854.00C65011.67 34864.67 65022.33 34875.33 65033.00 34886.00C65033.00 34907.33 65033.00 34928.67 65033.00 34950.00C65022.33 34960.67 65011.67 34971.33 65001.00 34982.00C65001.00 35025.00 65001.00 35068.00 65001.00 35111.00C64990.00 35111.00 64979.00 35111.00 64968.00 35111.00C64956.92 35100.01 64946.02 35088.83 64934.82 35077.97C64849.55 35003.31 64764.28 34928.66 64679.00 34854.00C64657.67 34800.33 64636.33 34746.67 64615.00 34693.00C64593.33 34660.67 64571.67 34628.33 64550.00 34596.00C64496.67 34553.33 64443.33 34510.67 64390.00 34468.00C64336.13 34446.28 64282.30 34424.46 64228.41 34402.80C64109.88 34363.80 63991.52 34324.28 63873.08 34284.99C63863.05 34281.66 63853.03 34278.33 63843.00 34275.00C63811.00 34242.67 63779.00 34210.33 63747.00 34178.00C63703.81 34167.25 63660.58 34156.63 63617.41 34145.80C63585.27 34135.20 63553.14 34124.60 63521.00 34114.00C63499.67 34124.67 63478.33 34135.33 63457.00 34146.00C63435.67 34167.67 63414.33 34189.33 63393.00 34211.00C63371.67 34221.67 63350.33 34232.33 63329.00 34243.00C63264.67 34243.00 63200.33 34243.00 63136.00 34243.00C63093.00 34232.33 63050.00 34221.67 63007.00 34211.00C62996.28 34178.36 62985.38 34145.76 62974.77 34113.09C62964.18 34070.73 62953.59 34028.36 62943.00 33986.00C62921.52 33953.51 62900.17 33920.94 62878.61 33888.51C62835.74 33835.01 62792.87 33781.50 62750.00 33728.00C62739.29 33674.24 62728.68 33620.45 62717.90 33566.70C62707.27 33534.80 62696.63 33502.90 62686.00 33471.00C62643.00 33428.00 62600.00 33385.00 62557.00 33342.00C62557.00 33310.00 62557.00 33278.00 62557.00 33246.00C62524.56 33170.82 62492.21 33095.60 62459.72 33020.44C62449.15 32999.29 62438.57 32978.15 62428.00 32957.00C62394.36 32923.07 62360.84 32889.01 62327.11 32855.16C62296.41 32824.78 62265.70 32794.39 62235.00 32764.00C62192.33 32764.00 62149.67 32764.00 62107.00 32764.00C62085.67 32753.33 62064.33 32742.67 62043.00 32732.00C62010.67 32699.67 61978.33 32667.33 61946.00 32635.00C61956.67 32613.67 61967.33 32592.33 61978.00 32571.00C61956.67 32528.00 61935.33 32485.00 61914.00 32442.00C61892.67 32442.00 61871.33 32442.00 61850.00 32442.00C61839.00 32431.33 61828.00 32420.67 61817.00 32410.00C61806.33 32410.00 61795.67 32410.00 61785.00 32410.00C61753.00 32378.00 61721.00 32346.00 61689.00 32314.00C61646.00 32303.00 61603.00 32292.00 61560.00 32281.00C61560.00 32249.00 61560.00 32217.00 61560.00 32185.00C61538.67 32185.00 61517.33 32185.00 61496.00 32185.00C61474.67 32174.33 61453.33 32163.67 61432.00 32153.00C61389.00 32153.00 61346.00 32153.00 61303.00 32153.00C61281.67 32120.67 61260.33 32088.33 61239.00 32056.00C61217.33 32034.67 61195.67 32013.33 61174.00 31992.00C61152.67 32002.67 61131.33 32013.33 61110.00 32024.00C61110.00 32013.33 61110.00 32002.67 61110.00 31992.00C61088.67 31970.67 61067.33 31949.33 61046.00 31928.00C61035.33 31906.33 61024.67 31884.67 61014.00 31863.00C60992.33 31863.00 60970.67 31863.00 60949.00 31863.00C60938.26 31841.59 60927.64 31820.11 60916.81 31798.75C60884.88 31755.83 60852.94 31712.92 60821.00 31670.00C60810.00 31670.00 60799.00 31670.00 60788.00 31670.00C60788.00 31659.33 60788.00 31648.67 60788.00 31638.00C60766.67 31627.33 60745.33 31616.67 60724.00 31606.00C60734.67 31595.33 60745.33 31584.67 60756.00 31574.00C60756.00 31563.33 60756.00 31552.67 60756.00 31542.00C60745.33 31531.33 60734.67 31520.67 60724.00 31510.00C60724.00 31499.33 60724.00 31488.67 60724.00 31478.00C60702.67 31467.00 60681.33 31456.00 60660.00 31445.00C60649.33 31423.67 60638.67 31402.33 60628.00 31381.00C60585.00 31370.33 60542.00 31359.67 60499.00 31349.00C60488.33 31338.33 60477.67 31327.67 60467.00 31317.00C60445.67 31317.00 60424.33 31317.00 60403.00 31317.00C60403.00 31327.67 60403.00 31338.33 60403.00 31349.00C60392.33 31338.33 60381.67 31327.67 60371.00 31317.00C60360.00 31317.00 60349.00 31317.00 60338.00 31317.00C60327.33 31295.67 60316.67 31274.33 60306.00 31253.00C60284.67 31263.67 60263.33 31274.33 60242.00 31285.00C60209.67 31263.33 60177.33 31241.67 60145.00 31220.00C60134.33 31188.00 60123.67 31156.00 60113.00 31124.00C60113.00 31113.33 60113.00 31102.67 60113.00 31092.00C60134.67 31081.33 60156.33 31070.67 60178.00 31060.00C60167.00 31027.67 60156.00 30995.33 60145.00 30963.00C60134.33 30963.00 60123.67 30963.00 60113.00 30963.00C60113.00 30931.00 60113.00 30899.00 60113.00 30867.00C60134.67 30856.00 60156.33 30845.00 60178.00 30834.00C60178.00 30802.00 60178.00 30770.00 60178.00 30738.00C60188.67 30727.33 60199.33 30716.67 60210.00 30706.00C60242.00 30727.33 60274.00 30748.67 60306.00 30770.00C60306.00 30759.33 60306.00 30748.67 60306.00 30738.00C60327.67 30748.67 60349.33 30759.33 60371.00 30770.00C60413.67 30770.00 60456.33 30770.00 60499.00 30770.00C60499.00 30780.67 60499.00 30791.33 60499.00 30802.00C60516.38 30819.36 60533.82 30836.66 60550.80 30854.42C60554.89 30858.72 60559.18 30862.88 60563.14 30867.28C60574.10 30888.52 60585.05 30909.76 60596.00 30931.00C60617.33 30920.33 60638.67 30909.67 60660.00 30899.00C60660.00 30888.33 60660.00 30877.67 60660.00 30867.00C60670.67 30856.00 60681.33 30845.00 60692.00 30834.00C60724.00 30845.00 60756.00 30856.00 60788.00 30867.00C60799.00 30856.00 60810.00 30845.00 60821.00 30834.00C60810.00 30823.33 60799.00 30812.67 60788.00 30802.00C60777.33 30802.00 60766.67 30802.00 60756.00 30802.00C60756.00 30770.00 60756.00 30738.00 60756.00 30706.00C60788.33 30706.00 60820.67 30706.00 60853.00 30706.00C60853.00 30695.33 60853.00 30684.67 60853.00 30674.00C60863.67 30684.67 60874.33 30695.33 60885.00 30706.00C60906.33 30695.33 60927.67 30684.67 60949.00 30674.00C60949.00 30652.33 60949.00 30630.67 60949.00 30609.00C60981.33 30609.00 61013.67 30609.00 61046.00 30609.00C61056.67 30598.33 61067.33 30587.67 61078.00 30577.00C61088.67 30577.00 61099.33 30577.00 61110.00 30577.00C61120.67 30566.33 61131.33 30555.67 61142.00 30545.00C61142.00 30534.33 61142.00 30523.67 61142.00 30513.00C61131.33 30491.67 61120.67 30470.33 61110.00 30449.00C61099.33 30438.33 61088.67 30427.67 61078.00 30417.00C61078.00 30406.00 61078.00 30395.00 61078.00 30384.00C61099.33 30384.00 61120.67 30384.00 61142.00 30384.00C61142.00 30362.67 61142.00 30341.33 61142.00 30320.00C61110.00 30288.00 61078.00 30256.00 61046.00 30224.00C61046.00 30202.33 61046.00 30180.67 61046.00 30159.00C61035.33 30137.67 61024.67 30116.33 61014.00 30095.00C61024.67 30084.33 61035.33 30073.67 61046.00 30063.00C61046.00 30052.33 61046.00 30041.67 61046.00 30031.00C61056.67 30020.33 61067.33 30009.67 61078.00 29999.00C61067.33 29966.67 61056.67 29934.33 61046.00 29902.00C61056.67 29891.33 61067.33 29880.67 61078.00 29870.00C61088.67 29870.00 61099.33 29870.00 61110.00 29870.00C61120.67 29848.67 61131.33 29827.33 61142.00 29806.00C61142.00 29784.33 61142.00 29762.67 61142.00 29741.00C61152.67 29730.33 61163.33 29719.67 61174.00 29709.00C61185.00 29719.67 61196.00 29730.33 61207.00 29741.00C61217.67 29719.67 61228.33 29698.33 61239.00 29677.00C61228.33 29677.00 61217.67 29677.00 61207.00 29677.00C61207.00 29655.67 61207.00 29634.33 61207.00 29613.00C61249.67 29591.33 61292.33 29569.67 61335.00 29548.00C61345.67 29537.33 61356.33 29526.67 61367.00 29516.00C61388.67 29505.33 61410.33 29494.67 61432.00 29484.00C61442.67 29452.00 61453.33 29420.00 61464.00 29388.00C61474.67 29388.00 61485.33 29388.00 61496.00 29388.00C61496.00 29377.00 61496.00 29366.00 61496.00 29355.00C61517.33 29344.33 61538.67 29333.67 61560.00 29323.00C61549.33 29291.00 61538.67 29259.00 61528.00 29227.00C61549.33 29205.67 61570.67 29184.33 61592.00 29163.00C61592.00 29120.00 61592.00 29077.00 61592.00 29034.00C61602.67 29023.33 61613.33 29012.67 61624.00 29002.00C61570.67 28969.67 61517.33 28937.33 61464.00 28905.00C61453.33 28915.67 61442.67 28926.33 61432.00 28937.00C61421.00 28937.00 61410.00 28937.00 61399.00 28937.00C61377.67 28915.67 61356.33 28894.33 61335.00 28873.00C61345.67 28862.33 61356.33 28851.67 61367.00 28841.00C61345.67 28809.00 61324.33 28777.00 61303.00 28745.00C61303.00 28734.00 61303.00 28723.00 61303.00 28712.00C61324.33 28701.33 61345.67 28690.67 61367.00 28680.00C61377.67 28658.67 61388.33 28637.33 61399.00 28616.00C61377.67 28616.00 61356.33 28616.00 61335.00 28616.00C61324.33 28594.67 61313.67 28573.33 61303.00 28552.00C61303.00 28519.67 61303.00 28487.33 61303.00 28455.00C61324.33 28444.33 61345.67 28433.67 61367.00 28423.00C61356.33 28391.00 61345.67 28359.00 61335.00 28327.00C61345.67 28305.33 61356.33 28283.67 61367.00 28262.00C61367.00 28251.33 61367.00 28240.67 61367.00 28230.00C61345.67 28219.33 61324.33 28208.67 61303.00 28198.00C61281.67 28198.00 61260.33 28198.00 61239.00 28198.00C61217.33 28176.67 61195.67 28155.33 61174.00 28134.00C61155.54 28096.43 61137.06 28058.87 61118.24 28021.48C61115.26 28015.76 61112.65 28009.82 61109.44 28004.25C61077.63 27961.50 61045.81 27918.75 61014.00 27876.00C61014.00 27854.67 61014.00 27833.33 61014.00 27812.00C61003.00 27790.67 60992.00 27769.33 60981.00 27748.00C60970.33 27737.33 60959.67 27726.67 60949.00 27716.00C60949.00 27705.00 60949.00 27694.00 60949.00 27683.00C60959.67 27683.00 60970.33 27683.00 60981.00 27683.00C60981.00 27629.67 60981.00 27576.33 60981.00 27523.00C60949.00 27426.33 60917.00 27329.67 60885.00 27233.00C60852.67 27222.33 60820.33 27211.67 60788.00 27201.00C60777.33 27179.67 60766.67 27158.33 60756.00 27137.00C60724.00 27126.33 60692.00 27115.67 60660.00 27105.00C60627.67 27083.33 60595.33 27061.67 60563.00 27040.00C60541.67 27008.00 60520.33 26976.00 60499.00 26944.00C60499.00 26815.33 60499.00 26686.67 60499.00 26558.00C60477.67 26515.33 60456.33 26472.67 60435.00 26430.00C60413.67 26408.33 60392.33 26386.67 60371.00 26365.00C60371.00 26311.33 60371.00 26257.67 60371.00 26204.00C60349.33 26150.67 60327.67 26097.33 60306.00 26044.00C60316.67 25979.67 60327.33 25915.33 60338.00 25851.00C60327.33 25818.67 60316.67 25786.33 60306.00 25754.00C60316.73 25721.91 60327.34 25689.78 60338.14 25657.72C60349.10 25636.48 60360.05 25615.24 60371.00 25594.00C60371.00 25583.00 60371.00 25572.00 60371.00 25561.00C60381.67 25550.33 60392.33 25539.67 60403.00 25529.00C60392.33 25507.56 60381.49 25486.18 60370.92 25464.70C60359.95 25421.80 60348.97 25378.90 60338.00 25336.00C60327.23 25325.15 60316.28 25314.45 60305.63 25303.50C60273.75 25260.67 60241.88 25217.83 60210.00 25175.00C60177.67 25196.67 60145.33 25218.33 60113.00 25240.00C60091.67 25240.00 60070.33 25240.00 60049.00 25240.00C60049.00 25165.00 60049.00 25090.00 60049.00 25015.00C60027.67 24982.67 60006.33 24950.33 59985.00 24918.00C60006.25 24789.65 60027.58 24661.32 60049.00 24533.00C60017.00 24382.67 59985.00 24232.33 59953.00 24082.00C59963.69 24060.56 59974.48 24039.17 59985.10 24017.70C59995.73 23985.80 60006.37 23953.90 60017.00 23922.00C60059.67 23857.67 60102.33 23793.33 60145.00 23729.00C60198.73 23685.92 60252.53 23642.90 60306.22 23599.78C60316.81 23589.19 60327.41 23578.59 60338.00 23568.00C60338.00 23503.67 60338.00 23439.33 60338.00 23375.00C60311.56 23348.73 60285.43 23322.14 60259.30 23295.57C60253.53 23289.71 60247.76 23283.86 60242.00 23278.00C60231.33 23235.33 60220.67 23192.67 60210.00 23150.00C60231.33 23075.00 60252.67 23000.00 60274.00 22925.00C60306.33 22892.67 60338.67 22860.33 60371.00 22828.00C60381.67 22785.33 60392.33 22742.67 60403.00 22700.00C60403.00 22678.33 60403.00 22656.67 60403.00 22635.00C60380.09 22601.07 60357.01 22567.26 60334.21 22533.26C60314.11 22502.74 60293.91 22472.27 60273.86 22441.72C60263.24 22420.48 60252.62 22399.24 60242.00 22378.00C60252.67 22356.67 60263.33 22335.33 60274.00 22314.00C60263.33 22303.33 60252.67 22292.67 60242.00 22282.00C60242.00 22260.33 60242.00 22238.67 60242.00 22217.00C60252.67 22185.00 60263.33 22153.00 60274.00 22121.00C60274.00 22110.33 60274.00 22099.67 60274.00 22089.00C60188.33 22089.00 60102.67 22089.00 60017.00 22089.00C59984.67 22024.67 59952.33 21960.33 59920.00 21896.00C59909.33 21810.33 59898.67 21724.67 59888.00 21639.00C59834.33 21510.33 59780.67 21381.67 59727.00 21253.00C59695.00 21092.33 59663.00 20931.67 59631.00 20771.00C59609.67 20760.00 59588.33 20749.00 59567.00 20738.00C59556.33 20706.00 59545.67 20674.00 59535.00 20642.00C59545.67 20620.67 59556.33 20599.33 59567.00 20578.00C59567.00 20567.00 59567.00 20556.00 59567.00 20545.00C59545.33 20491.67 59523.67 20438.33 59502.00 20385.00C59491.33 20374.33 59480.67 20363.67 59470.00 20353.00C59459.33 20353.00 59448.67 20353.00 59438.00 20353.00C59395.00 20331.33 59352.00 20309.67 59309.00 20288.00C59277.00 20256.00 59245.00 20224.00 59213.00 20192.00C59180.94 20170.25 59148.78 20148.61 59116.78 20126.78C59095.18 20105.52 59073.59 20084.26 59052.00 20063.00C59041.33 20020.33 59030.67 19977.67 59020.00 19935.00C58998.67 19924.00 58977.33 19913.00 58956.00 19902.00C58945.25 19880.59 58934.64 19859.11 58923.81 19837.75C58891.54 19794.83 58859.27 19751.92 58827.00 19709.00C58784.33 19687.67 58741.67 19666.33 58699.00 19645.00C58699.00 19613.00 58699.00 19581.00 58699.00 19549.00C58709.67 19506.00 58720.33 19463.00 58731.00 19420.00C58773.67 19377.00 58816.33 19334.00 58859.00 19291.00C58869.67 19269.67 58880.33 19248.33 58891.00 19227.00C58902.18 19216.23 58913.23 19205.30 58924.50 19194.63C58967.00 19162.75 59009.50 19130.88 59052.00 19099.00C59062.67 19077.33 59073.33 19055.67 59084.00 19034.00C59073.33 18862.67 59062.67 18691.33 59052.00 18520.00C59095.00 18423.33 59138.00 18326.67 59181.00 18230.00C59191.67 18176.67 59202.33 18123.33 59213.00 18070.00C59202.33 18016.33 59191.67 17962.67 59181.00 17909.00C59159.67 17887.67 59138.33 17866.33 59117.00 17845.00C59106.00 17845.00 59095.00 17845.00 59084.00 17845.00C59052.00 17823.33 59020.00 17801.67 58988.00 17780.00C58880.67 17748.00 58773.33 17716.00 58666.00 17684.00C58666.00 17673.33 58666.00 17662.67 58666.00 17652.00C58644.67 17619.67 58623.33 17587.33 58602.00 17555.00C58580.57 17554.97 58559.12 17555.07 58537.69 17554.95C58409.03 17533.60 58280.35 17512.31 58151.70 17490.92C58108.80 17480.28 58065.90 17469.64 58023.00 17459.00C57969.67 17480.33 57916.33 17501.67 57863.00 17523.00C57798.67 17533.67 57734.33 17544.33 57670.00 17555.00C57595.00 17512.33 57520.00 17469.67 57445.00 17427.00C57423.24 17394.61 57401.61 17362.11 57379.78 17329.78C57345.39 17295.31 57310.84 17260.99 57276.54 17226.43C57257.70 17207.29 57238.85 17188.14 57220.00 17169.00C57198.32 17126.23 57176.51 17083.51 57154.90 17040.70C57144.27 17008.47 57133.63 16976.23 57123.00 16944.00C57123.00 16890.33 57123.00 16836.67 57123.00 16783.00C57091.00 16783.00 57059.00 16783.00 57027.00 16783.00C57016.00 16772.33 57005.00 16761.67 56994.00 16751.00C56951.33 16751.00 56908.67 16751.00 56866.00 16751.00C56758.28 16783.48 56650.52 16815.86 56542.81 16848.40C56511.21 16858.93 56479.61 16869.47 56448.00 16880.00C56404.92 16858.60 56361.79 16837.28 56318.74 16815.83C56233.16 16762.22 56147.58 16708.61 56062.00 16655.00C56051.33 16633.67 56040.67 16612.33 56030.00 16591.00C55976.33 16537.33 55922.67 16483.67 55869.00 16430.00C55869.07 16419.24 55868.87 16408.44 55869.10 16397.70C55879.73 16365.47 55890.37 16333.23 55901.00 16301.00C55890.20 16257.94 55879.54 16214.84 55868.64 16171.80C55836.76 16064.87 55804.88 15957.93 55773.00 15851.00C55773.00 15829.67 55773.00 15808.33 55773.00 15787.00C55815.67 15733.33 55858.33 15679.67 55901.00 15626.00C55901.00 15594.00 55901.00 15562.00 55901.00 15530.00C55879.67 15519.00 55858.33 15508.00 55837.00 15497.00C55783.33 15486.33 55729.67 15475.67 55676.00 15465.00C55590.23 15475.70 55504.45 15486.32 55418.69 15497.07C55268.80 15529.38 55118.90 15561.69 54969.00 15594.00C54872.23 15626.01 54775.48 15658.11 54678.69 15690.06C54625.46 15700.71 54572.23 15711.35 54519.00 15722.00C54368.67 15722.00 54218.33 15722.00 54068.00 15722.00C53992.41 15689.78 53916.87 15657.46 53841.26 15625.30C53788.40 15604.19 53735.58 15582.97 53682.70 15561.92C53639.71 15551.23 53596.68 15540.65 53553.71 15529.88C53446.47 15486.92 53339.24 15443.96 53232.00 15401.00C53200.00 15379.67 53168.00 15358.33 53136.00 15337.00C53125.33 15347.67 53114.67 15358.33 53104.00 15369.00C53082.67 15347.67 53061.33 15326.33 53040.00 15305.00C53029.00 15305.00 53018.00 15305.00 53007.00 15305.00C52996.33 15315.67 52985.67 15326.33 52975.00 15337.00C52953.67 15337.00 52932.33 15337.00 52911.00 15337.00C52900.33 15326.33 52889.67 15315.67 52879.00 15305.00C52889.67 15294.00 52900.33 15283.00 52911.00 15272.00C52889.67 15261.33 52868.33 15250.67 52847.00 15240.00C52847.00 15229.33 52847.00 15218.67 52847.00 15208.00C52825.33 15208.00 52803.67 15208.00 52782.00 15208.00C52771.33 15197.33 52760.67 15186.67 52750.00 15176.00C52760.69 15154.56 52771.48 15133.17 52782.10 15111.70C52793.07 15079.47 52804.03 15047.24 52815.00 15015.00C52815.00 14993.67 52815.00 14972.33 52815.00 14951.00C52825.67 14929.33 52836.33 14907.67 52847.00 14886.00C52847.00 14854.00 52847.00 14822.00 52847.00 14790.00C52857.67 14800.67 52868.33 14811.33 52879.00 14822.00C52889.67 14822.00 52900.33 14822.00 52911.00 14822.00C52911.00 14790.00 52911.00 14758.00 52911.00 14726.00C52943.00 14704.33 52975.00 14682.67 53007.00 14661.00C53007.00 14639.67 53007.00 14618.33 53007.00 14597.00C53028.67 14575.67 53050.33 14554.33 53072.00 14533.00C53082.67 14511.67 53093.33 14490.33 53104.00 14469.00C53104.00 14447.33 53104.00 14425.67 53104.00 14404.00C53093.33 14382.67 53082.67 14361.33 53072.00 14340.00C53082.67 14340.00 53093.33 14340.00 53104.00 14340.00C53104.00 14318.67 53104.00 14297.33 53104.00 14276.00C53082.67 14254.33 53061.33 14232.67 53040.00 14211.00C53040.00 14200.33 53040.00 14189.67 53040.00 14179.00C53061.33 14157.67 53082.67 14136.33 53104.00 14115.00C53114.67 14115.00 53125.33 14115.00 53136.00 14115.00C53125.33 14093.33 53114.67 14071.67 53104.00 14050.00C53082.67 14039.33 53061.33 14028.67 53040.00 14018.00C53040.00 13986.00 53040.00 13954.00 53040.00 13922.00C53050.67 13911.33 53061.33 13900.67 53072.00 13890.00C53072.00 13879.33 53072.00 13868.67 53072.00 13858.00C53050.33 13858.00 53028.67 13858.00 53007.00 13858.00C53007.00 13836.33 53007.00 13814.67 53007.00 13793.00C52996.33 13771.67 52985.67 13750.33 52975.00 13729.00C52975.00 13718.33 52975.00 13707.67 52975.00 13697.00C52985.67 13686.33 52996.33 13675.67 53007.00 13665.00C52996.23 13654.30 52985.58 13643.44 52974.73 13632.84C52921.49 13600.56 52868.24 13568.28 52815.00 13536.00C52802.60 13511.76 52789.88 13487.67 52777.69 13463.32C52757.80 13423.21 52737.90 13383.11 52718.00 13343.00C52718.00 13246.67 52718.00 13150.33 52718.00 13054.00C52664.33 13032.33 52610.67 13010.67 52557.00 12989.00C52546.19 12967.51 52535.57 12945.91 52524.65 12924.48C52503.44 12892.65 52482.22 12860.83 52461.00 12829.00C52450.33 12796.67 52439.67 12764.33 52429.00 12732.00C52375.33 12678.33 52321.67 12624.67 52268.00 12571.00C52246.67 12528.33 52225.33 12485.67 52204.00 12443.00C52139.60 12389.25 52075.15 12335.56 52010.78 12281.78C51978.52 12249.85 51946.26 12217.93 51914.00 12186.00C51929.55 12154.54 51944.80 12122.94 51960.86 12091.74C51977.59 12058.72 51994.44 12025.75 52011.10 11992.70C52021.73 11960.47 52032.37 11928.23 52043.00 11896.00C52043.00 11778.33 52043.00 11660.67 52043.00 11543.00C52000.00 11425.00 51957.00 11307.00 51914.00 11189.00C51924.67 11081.67 51935.33 10974.33 51946.00 10867.00C51914.00 10845.67 51882.00 10824.33 51850.00 10803.00C51839.33 10781.67 51828.67 10760.33 51818.00 10739.00C51828.67 10706.67 51839.33 10674.33 51850.00 10642.00C51925.00 10567.00 52000.00 10492.00 52075.00 10417.00C52096.33 10385.00 52117.67 10353.00 52139.00 10321.00C52149.67 10331.67 52160.33 10342.33 52171.00 10353.00z"},"br-01":{"name":"Acre","path":"M6610.00 62120.00C6706.76 62173.36 6803.49 62226.79 6900.26 62280.12C7554.19 62569.91 8208.13 62859.67 8862.04 63149.48C9590.45 63481.36 10318.86 63813.22 11047.26 64145.13C11325.84 64284.42 11604.42 64423.71 11883.00 64563.00C11936.67 64584.67 11990.33 64606.33 12044.00 64628.00C12783.67 64778.00 13523.33 64928.00 14263.00 65078.00C14284.43 65088.68 14305.82 65099.47 14327.27 65110.09C14563.48 65185.27 14799.71 65260.41 15035.91 65335.63C15067.60 65346.09 15099.30 65356.54 15131.00 65367.00C15163.00 65367.00 15195.00 65367.00 15227.00 65367.00C15881.19 65527.71 16535.37 65688.44 17189.56 65849.13C17288.03 65871.30 17386.53 65893.38 17484.99 65915.61C17901.03 66011.50 18317.08 66107.35 18733.12 66203.27C19215.17 66321.20 19697.22 66439.15 20179.28 66557.06C20757.95 66674.73 21336.62 66792.37 21915.28 66910.07C22087.04 66953.08 22258.79 66996.14 22430.56 67039.12C22580.37 67071.41 22730.19 67103.71 22880.00 67136.00C22997.75 67211.04 23115.48 67286.13 23233.25 67361.14C23492.76 67501.67 23752.31 67642.15 24011.80 67782.71C24599.37 68102.90 25186.94 68423.07 25774.50 68743.28C26095.84 68925.61 26417.15 69107.97 26738.51 69290.27C26925.33 69388.95 27112.12 69487.70 27298.96 69586.35C27701.81 69798.31 28104.65 70010.31 28507.51 70222.26C28807.42 70372.22 29107.35 70522.15 29407.25 70672.14C29728.83 70854.43 30050.42 71036.71 30372.00 71219.00C30425.42 71240.38 30478.86 71261.71 30532.26 71283.13C30575.44 71304.85 30618.57 71326.69 30661.79 71348.35C30931.14 71466.25 31200.48 71584.19 31469.89 71701.96C32058.29 71959.29 32646.71 72216.59 33235.10 72473.93C33620.93 72645.18 34006.74 72816.46 34392.58 72987.68C35356.56 73405.53 36320.54 73823.39 37284.53 74241.22C37541.69 74348.48 37798.84 74455.74 38056.00 74563.00C38099.00 74595.00 38142.00 74627.00 38185.00 74659.00C38238.33 74670.00 38291.67 74681.00 38345.00 74692.00C38409.51 74724.06 38473.99 74756.21 38538.53 74788.22C38945.95 74959.94 39353.38 75131.61 39760.79 75303.35C40049.86 75431.57 40338.93 75559.78 40628.00 75688.00C40617.33 75699.00 40606.67 75710.00 40596.00 75721.00C40596.00 75742.33 40596.00 75763.67 40596.00 75785.00C40585.33 75785.00 40574.67 75785.00 40564.00 75785.00C40574.67 75806.33 40585.33 75827.67 40596.00 75849.00C40585.33 75849.00 40574.67 75849.00 40564.00 75849.00C40564.00 75859.67 40564.00 75870.33 40564.00 75881.00C40574.67 75881.00 40585.33 75881.00 40596.00 75881.00C40596.00 75891.67 40596.00 75902.33 40596.00 75913.00C40585.33 75913.00 40574.67 75913.00 40564.00 75913.00C40553.33 75934.67 40542.67 75956.33 40532.00 75978.00C40515.19 75961.18 40498.27 75944.45 40481.83 75927.26C40477.22 75922.51 40472.61 75917.75 40468.00 75913.00C40468.00 75924.00 40468.00 75935.00 40468.00 75946.00C40468.00 75935.00 40468.00 75924.00 40468.00 75913.00C40446.33 75924.00 40424.67 75935.00 40403.00 75946.00C40413.67 75956.67 40424.33 75967.33 40435.00 75978.00C40424.33 75999.33 40413.67 76020.67 40403.00 76042.00C40392.33 76031.33 40381.67 76020.67 40371.00 76010.00C40371.00 76031.33 40371.00 76052.67 40371.00 76074.00C40339.00 76074.00 40307.00 76074.00 40275.00 76074.00C40242.67 76084.67 40210.33 76095.33 40178.00 76106.00C40167.33 76116.67 40156.67 76127.33 40146.00 76138.00C40124.67 76138.00 40103.33 76138.00 40082.00 76138.00C40082.00 76149.00 40082.00 76160.00 40082.00 76171.00C40071.33 76181.67 40060.67 76192.33 40050.00 76203.00C40039.00 76203.00 40028.00 76203.00 40017.00 76203.00C40006.33 76213.67 39995.67 76224.33 39985.00 76235.00C39974.33 76235.00 39963.67 76235.00 39953.00 76235.00C39953.00 76245.67 39953.00 76256.33 39953.00 76267.00C39942.33 76267.00 39931.67 76267.00 39921.00 76267.00C39921.00 76288.33 39921.00 76309.67 39921.00 76331.00C39910.33 76320.33 39899.67 76309.67 39889.00 76299.00C39867.67 76309.67 39846.33 76320.33 39825.00 76331.00C39825.00 76342.00 39825.00 76353.00 39825.00 76364.00C39803.33 76374.67 39781.67 76385.33 39760.00 76396.00C39760.00 76417.33 39760.00 76438.67 39760.00 76460.00C39738.67 76460.00 39717.33 76460.00 39696.00 76460.00C39685.33 76481.33 39674.67 76502.67 39664.00 76524.00C39642.67 76524.00 39621.33 76524.00 39600.00 76524.00C39600.00 76556.33 39600.00 76588.67 39600.00 76621.00C39578.33 76631.67 39556.67 76642.33 39535.00 76653.00C39535.00 76642.33 39535.00 76631.67 39535.00 76621.00C39492.33 76621.00 39449.67 76621.00 39407.00 76621.00C39417.67 76642.33 39428.33 76663.67 39439.00 76685.00C39439.00 76695.67 39439.00 76706.33 39439.00 76717.00C39428.33 76706.33 39417.67 76695.67 39407.00 76685.00C39396.00 76706.33 39385.00 76727.67 39374.00 76749.00C39374.00 76738.33 39374.00 76727.67 39374.00 76717.00C39374.00 76738.67 39374.00 76760.33 39374.00 76782.00C39363.33 76771.00 39352.67 76760.00 39342.00 76749.00C39331.33 76760.00 39320.67 76771.00 39310.00 76782.00C39310.00 76803.33 39310.00 76824.67 39310.00 76846.00C39288.67 76846.00 39267.33 76846.00 39246.00 76846.00C39246.00 76856.67 39246.00 76867.33 39246.00 76878.00C39246.00 76867.33 39246.00 76856.67 39246.00 76846.00C39235.33 76856.67 39224.67 76867.33 39214.00 76878.00C39224.67 76888.67 39235.33 76899.33 39246.00 76910.00C39246.00 76920.67 39246.00 76931.33 39246.00 76942.00C39224.33 76931.33 39202.67 76920.67 39181.00 76910.00C39170.33 76920.67 39159.67 76931.33 39149.00 76942.00C39149.00 76952.67 39149.00 76963.33 39149.00 76974.00C39138.33 76974.00 39127.67 76974.00 39117.00 76974.00C39106.33 76985.00 39095.67 76996.00 39085.00 77007.00C39074.33 77049.67 39063.67 77092.33 39053.00 77135.00C39042.33 77145.67 39031.67 77156.33 39021.00 77167.00C39021.00 77145.67 39021.00 77124.33 39021.00 77103.00C39010.33 77124.33 38999.67 77145.67 38989.00 77167.00C38978.00 77167.00 38967.00 77167.00 38956.00 77167.00C38956.00 77156.33 38956.00 77145.67 38956.00 77135.00C38945.33 77145.67 38934.67 77156.33 38924.00 77167.00C38934.67 77167.00 38945.33 77167.00 38956.00 77167.00C38945.33 77167.00 38934.67 77167.00 38924.00 77167.00C38902.67 77188.67 38881.33 77210.33 38860.00 77232.00C38860.00 77221.33 38860.00 77210.67 38860.00 77200.00C38860.00 77221.33 38860.00 77242.67 38860.00 77264.00C38849.33 77274.67 38838.67 77285.33 38828.00 77296.00C38849.33 77296.00 38870.67 77296.00 38892.00 77296.00C38870.67 77317.33 38849.33 77338.67 38828.00 77360.00C38828.00 77349.33 38828.00 77338.67 38828.00 77328.00C38817.33 77338.67 38806.67 77349.33 38796.00 77360.00C38796.00 77381.67 38796.00 77403.33 38796.00 77425.00C38785.33 77435.67 38774.67 77446.33 38764.00 77457.00C38764.00 77467.67 38764.00 77478.33 38764.00 77489.00C38753.00 77478.33 38742.00 77467.67 38731.00 77457.00C38731.00 77467.67 38731.00 77478.33 38731.00 77489.00C38720.33 77489.00 38709.67 77489.00 38699.00 77489.00C38688.33 77499.67 38677.67 77510.33 38667.00 77521.00C38656.33 77510.33 38645.67 77499.67 38635.00 77489.00C38635.00 77499.67 38635.00 77510.33 38635.00 77521.00C38624.33 77521.00 38613.67 77521.00 38603.00 77521.00C38592.33 77531.67 38581.67 77542.33 38571.00 77553.00C38581.67 77553.00 38592.33 77553.00 38603.00 77553.00C38560.00 77574.67 38517.00 77596.33 38474.00 77618.00C38463.33 77628.67 38452.67 77639.33 38442.00 77650.00C38431.33 77650.00 38420.67 77650.00 38410.00 77650.00C38410.00 77639.33 38410.00 77628.67 38410.00 77618.00C38388.33 77618.00 38366.67 77618.00 38345.00 77618.00C38323.67 77628.67 38302.33 77639.33 38281.00 77650.00C38259.67 77650.00 38238.33 77650.00 38217.00 77650.00C38206.33 77660.67 38195.67 77671.33 38185.00 77682.00C38185.00 77703.33 38185.00 77724.67 38185.00 77746.00C38195.67 77756.67 38206.33 77767.33 38217.00 77778.00C38206.33 77778.00 38195.67 77778.00 38185.00 77778.00C38174.33 77788.67 38163.67 77799.33 38153.00 77810.00C38142.00 77810.00 38131.00 77810.00 38120.00 77810.00C38098.67 77821.00 38077.33 77832.00 38056.00 77843.00C38045.33 77853.67 38034.67 77864.33 38024.00 77875.00C38002.67 77875.00 37981.33 77875.00 37960.00 77875.00C37938.33 77853.33 37916.67 77831.67 37895.00 77810.00C37863.00 77810.00 37831.00 77810.00 37799.00 77810.00C37788.33 77799.33 37777.67 77788.67 37767.00 77778.00C37745.33 77778.00 37723.67 77778.00 37702.00 77778.00C37691.33 77788.67 37680.67 77799.33 37670.00 77810.00C37638.00 77821.00 37606.00 77832.00 37574.00 77843.00C37563.33 77832.00 37552.67 77821.00 37542.00 77810.00C37520.33 77799.33 37498.67 77788.67 37477.00 77778.00C37466.33 77788.67 37455.67 77799.33 37445.00 77810.00C37434.33 77799.33 37423.67 77788.67 37413.00 77778.00C37413.00 77788.67 37413.00 77799.33 37413.00 77810.00C37391.67 77799.33 37370.33 77788.67 37349.00 77778.00C37327.33 77799.67 37305.67 77821.33 37284.00 77843.00C37305.67 77864.33 37327.33 77885.67 37349.00 77907.00C37338.33 77928.33 37327.67 77949.67 37317.00 77971.00C37327.67 77992.67 37338.33 78014.33 37349.00 78036.00C37349.00 78046.67 37349.00 78057.33 37349.00 78068.00C37338.33 78068.00 37327.67 78068.00 37317.00 78068.00C37306.00 78078.67 37295.00 78089.33 37284.00 78100.00C37262.67 78089.33 37241.33 78078.67 37220.00 78068.00C37198.67 78068.00 37177.33 78068.00 37156.00 78068.00C37156.00 78089.33 37156.00 78110.67 37156.00 78132.00C37134.67 78110.67 37113.33 78089.33 37092.00 78068.00C37070.33 78078.67 37048.67 78089.33 37027.00 78100.00C37005.67 78089.33 36984.33 78078.67 36963.00 78068.00C36952.33 78057.33 36941.67 78046.67 36931.00 78036.00C36920.33 78036.00 36909.67 78036.00 36899.00 78036.00C36877.33 78068.00 36855.67 78100.00 36834.00 78132.00C36845.00 78153.33 36856.00 78174.67 36867.00 78196.00C36867.00 78239.00 36867.00 78282.00 36867.00 78325.00C36845.33 78325.00 36823.67 78325.00 36802.00 78325.00C36791.33 78335.67 36780.67 78346.33 36770.00 78357.00C36770.00 78378.33 36770.00 78399.67 36770.00 78421.00C36759.33 78432.00 36748.67 78443.00 36738.00 78454.00C36695.00 78464.67 36652.00 78475.33 36609.00 78486.00C36598.33 78496.67 36587.67 78507.33 36577.00 78518.00C36555.67 78528.67 36534.33 78539.33 36513.00 78550.00C36491.33 78539.33 36469.67 78528.67 36448.00 78518.00C36426.67 78528.67 36405.33 78539.33 36384.00 78550.00C36384.00 78571.33 36384.00 78592.67 36384.00 78614.00C36341.33 78614.00 36298.67 78614.00 36256.00 78614.00C36234.24 78624.69 36212.51 78635.46 36190.73 78646.09C36158.82 78657.06 36126.91 78668.03 36095.00 78679.00C36084.30 78689.76 36073.46 78700.41 36062.85 78711.24C36030.57 78764.50 35998.28 78817.75 35966.00 78871.00C35955.33 78903.33 35944.67 78935.67 35934.00 78968.00C35902.00 79000.00 35870.00 79032.00 35838.00 79064.00C35827.00 79085.67 35816.00 79107.33 35805.00 79129.00C35773.00 79161.00 35741.00 79193.00 35709.00 79225.00C35676.67 79203.67 35644.33 79182.33 35612.00 79161.00C35569.33 79343.00 35526.67 79525.00 35484.00 79707.00C35473.33 79696.33 35462.67 79685.67 35452.00 79675.00C35441.33 79685.67 35430.67 79696.33 35420.00 79707.00C35409.00 79696.33 35398.00 79685.67 35387.00 79675.00C35387.00 79685.67 35387.00 79696.33 35387.00 79707.00C35376.33 79707.00 35365.67 79707.00 35355.00 79707.00C35355.00 79696.33 35355.00 79685.67 35355.00 79675.00C35344.33 79685.67 35333.67 79696.33 35323.00 79707.00C35323.00 79696.33 35323.00 79685.67 35323.00 79675.00C35312.33 79653.67 35301.67 79632.33 35291.00 79611.00C35280.33 79611.00 35269.67 79611.00 35259.00 79611.00C35248.33 79600.33 35237.67 79589.67 35227.00 79579.00C35205.33 79579.00 35183.67 79579.00 35162.00 79579.00C35162.00 79568.33 35162.00 79557.67 35162.00 79547.00C35140.67 79547.00 35119.33 79547.00 35098.00 79547.00C35098.00 79536.33 35098.00 79525.67 35098.00 79515.00C35087.33 79525.67 35076.67 79536.33 35066.00 79547.00C35066.00 79525.33 35066.00 79503.67 35066.00 79482.00C35044.67 79482.00 35023.33 79482.00 35002.00 79482.00C35002.00 79471.33 35002.00 79460.67 35002.00 79450.00C34991.00 79460.67 34980.00 79471.33 34969.00 79482.00C34969.00 79471.33 34969.00 79460.67 34969.00 79450.00C34958.33 79439.33 34947.67 79428.67 34937.00 79418.00C34915.67 79407.33 34894.33 79396.67 34873.00 79386.00C34862.33 79396.67 34851.67 79407.33 34841.00 79418.00C34830.33 79407.33 34819.67 79396.67 34809.00 79386.00C34798.00 79386.00 34787.00 79386.00 34776.00 79386.00C34765.33 79375.33 34754.67 79364.67 34744.00 79354.00C34701.33 79354.00 34658.67 79354.00 34616.00 79354.00C34605.33 79364.67 34594.67 79375.33 34584.00 79386.00C34584.00 79375.33 34584.00 79364.67 34584.00 79354.00C34562.33 79354.00 34540.67 79354.00 34519.00 79354.00C34508.33 79375.33 34497.67 79396.67 34487.00 79418.00C34476.33 79407.33 34465.67 79396.67 34455.00 79386.00C34444.33 79396.67 34433.67 79407.33 34423.00 79418.00C34401.67 79418.00 34380.33 79418.00 34359.00 79418.00C34359.00 79407.33 34359.00 79396.67 34359.00 79386.00C34359.00 79396.67 34359.00 79407.33 34359.00 79418.00C34337.33 79407.33 34315.67 79396.67 34294.00 79386.00C34262.00 79407.33 34230.00 79428.67 34198.00 79450.00C34161.92 79432.25 34125.82 79414.53 34089.89 79396.45C34082.93 79392.96 34075.96 79389.48 34069.00 79386.00C34069.00 79396.67 34069.00 79407.33 34069.00 79418.00C34058.33 79407.33 34047.67 79396.67 34037.00 79386.00C34037.00 79396.67 34037.00 79407.33 34037.00 79418.00C34026.33 79407.33 34015.67 79396.67 34005.00 79386.00C33994.33 79396.67 33983.67 79407.33 33973.00 79418.00C33962.00 79418.00 33951.00 79418.00 33940.00 79418.00C33940.00 79439.33 33940.00 79460.67 33940.00 79482.00C33908.00 79482.00 33876.00 79482.00 33844.00 79482.00C33822.67 79493.00 33801.33 79504.00 33780.00 79515.00C33780.00 79536.33 33780.00 79557.67 33780.00 79579.00C33769.33 79568.33 33758.67 79557.67 33748.00 79547.00C33737.00 79568.33 33726.00 79589.67 33715.00 79611.00C33693.67 79632.33 33672.33 79653.67 33651.00 79675.00C33640.33 79675.00 33629.67 79675.00 33619.00 79675.00C33608.33 79696.67 33597.67 79718.33 33587.00 79740.00C33587.00 79772.00 33587.00 79804.00 33587.00 79836.00C33597.67 79836.00 33608.33 79836.00 33619.00 79836.00C33629.67 79846.67 33640.33 79857.33 33651.00 79868.00C33640.33 79878.67 33629.67 79889.33 33619.00 79900.00C33619.00 79911.00 33619.00 79922.00 33619.00 79933.00C33608.33 79943.67 33597.67 79954.33 33587.00 79965.00C33597.67 79975.67 33608.33 79986.33 33619.00 79997.00C33608.33 80007.67 33597.67 80018.33 33587.00 80029.00C33565.67 80039.67 33544.33 80050.33 33523.00 80061.00C33512.00 80082.67 33501.00 80104.33 33490.00 80126.00C33468.67 80136.67 33447.33 80147.33 33426.00 80158.00C33426.00 80168.67 33426.00 80179.33 33426.00 80190.00C33404.67 80200.67 33383.33 80211.33 33362.00 80222.00C33340.33 80254.00 33318.67 80286.00 33297.00 80318.00C33286.33 80318.00 33275.67 80318.00 33265.00 80318.00C33254.33 80350.33 33243.67 80382.67 33233.00 80415.00C33211.67 80415.00 33190.33 80415.00 33169.00 80415.00C33158.33 80447.00 33147.67 80479.00 33137.00 80511.00C33126.33 80511.00 33115.67 80511.00 33105.00 80511.00C33115.67 80521.67 33126.33 80532.33 33137.00 80543.00C33126.33 80575.33 33115.67 80607.67 33105.00 80640.00C33083.33 80650.67 33061.67 80661.33 33040.00 80672.00C33029.33 80693.33 33018.67 80714.67 33008.00 80736.00C33008.00 80768.33 33008.00 80800.67 33008.00 80833.00C32997.33 80854.33 32986.67 80875.67 32976.00 80897.00C32954.67 80907.67 32933.33 80918.33 32912.00 80929.00C32901.00 80940.00 32890.00 80951.00 32879.00 80962.00C32857.67 80972.67 32836.33 80983.33 32815.00 80994.00C32804.33 81015.33 32793.67 81036.67 32783.00 81058.00C32729.33 81058.00 32675.67 81058.00 32622.00 81058.00C32611.33 81068.67 32600.67 81079.33 32590.00 81090.00C32579.33 81111.33 32568.67 81132.67 32558.00 81154.00C32547.33 81165.00 32536.67 81176.00 32526.00 81187.00C32504.33 81165.33 32482.67 81143.67 32461.00 81122.00C32450.33 81122.00 32439.67 81122.00 32429.00 81122.00C32375.67 81143.67 32322.33 81165.33 32269.00 81187.00C32258.00 81208.33 32247.00 81229.67 32236.00 81251.00C32247.00 81261.67 32258.00 81272.33 32269.00 81283.00C32251.83 81299.67 32234.55 81316.22 32217.74 81333.26C32213.16 81337.84 32208.58 81342.42 32204.00 81347.00C32204.00 81357.67 32204.00 81368.33 32204.00 81379.00C32182.67 81357.67 32161.33 81336.33 32140.00 81315.00C32129.33 81315.00 32118.67 81315.00 32108.00 81315.00C32086.33 81293.67 32064.67 81272.33 32043.00 81251.00C32021.67 81272.33 32000.33 81293.67 31979.00 81315.00C31914.67 81325.67 31850.33 81336.33 31786.00 81347.00C31754.00 81368.67 31722.00 81390.33 31690.00 81412.00C31690.00 81433.33 31690.00 81454.67 31690.00 81476.00C31668.24 81497.37 31646.58 81518.85 31624.76 81540.16C31592.84 81561.77 31560.92 81583.39 31529.00 81605.00C31529.00 81615.67 31529.00 81626.33 31529.00 81637.00C31421.48 81658.39 31313.95 81679.70 31206.44 81701.14C31035.30 81744.09 30864.15 81787.05 30693.00 81830.00C30703.67 81797.67 30714.33 81765.33 30725.00 81733.00C30703.67 81711.67 30682.33 81690.33 30661.00 81669.00C30671.67 81647.67 30682.33 81626.33 30693.00 81605.00C30671.67 81594.00 30650.33 81583.00 30629.00 81572.00C30607.33 81572.00 30585.67 81572.00 30564.00 81572.00C30542.67 81550.67 30521.33 81529.33 30500.00 81508.00C30500.00 81497.33 30500.00 81486.67 30500.00 81476.00C30489.33 81465.33 30478.67 81454.67 30468.00 81444.00C30478.67 81422.33 30489.33 81400.67 30500.00 81379.00C30489.33 81368.33 30478.67 81357.67 30468.00 81347.00C30478.67 81325.67 30489.33 81304.33 30500.00 81283.00C30510.67 81283.00 30521.33 81283.00 30532.00 81283.00C30532.00 81261.67 30532.00 81240.33 30532.00 81219.00C30542.67 81197.33 30553.33 81175.67 30564.00 81154.00C30553.33 81154.00 30542.67 81154.00 30532.00 81154.00C30521.33 81165.00 30510.67 81176.00 30500.00 81187.00C30489.33 81176.00 30478.67 81165.00 30468.00 81154.00C30478.67 81154.00 30489.33 81154.00 30500.00 81154.00C30500.00 81143.33 30500.00 81132.67 30500.00 81122.00C30478.67 81132.67 30457.33 81143.33 30436.00 81154.00C30425.33 81143.33 30414.67 81132.67 30404.00 81122.00C30404.00 81111.33 30404.00 81100.67 30404.00 81090.00C30393.33 81100.67 30382.67 81111.33 30372.00 81122.00C30372.00 81143.67 30372.00 81165.33 30372.00 81187.00C30372.00 81165.33 30372.00 81143.67 30372.00 81122.00C30350.33 81111.33 30328.67 81100.67 30307.00 81090.00C30317.67 81079.33 30328.33 81068.67 30339.00 81058.00C30328.33 81058.00 30317.67 81058.00 30307.00 81058.00C30307.00 81068.67 30307.00 81079.33 30307.00 81090.00C30285.67 81090.00 30264.33 81090.00 30243.00 81090.00C30253.67 81100.67 30264.33 81111.33 30275.00 81122.00C30253.67 81122.00 30232.33 81122.00 30211.00 81122.00C30200.33 81132.67 30189.67 81143.33 30179.00 81154.00C30168.00 81143.33 30157.00 81132.67 30146.00 81122.00C30157.00 81111.33 30168.00 81100.67 30179.00 81090.00C30168.00 81090.00 30157.00 81090.00 30146.00 81090.00C30135.33 81100.67 30124.67 81111.33 30114.00 81122.00C30103.33 81111.33 30092.67 81100.67 30082.00 81090.00C30092.67 81090.00 30103.33 81090.00 30114.00 81090.00C30103.33 81090.00 30092.67 81090.00 30082.00 81090.00C30060.67 81100.67 30039.33 81111.33 30018.00 81122.00C30018.00 81143.67 30018.00 81165.33 30018.00 81187.00C30007.33 81187.00 29996.67 81187.00 29986.00 81187.00C29975.00 81176.00 29964.00 81165.00 29953.00 81154.00C29942.33 81154.00 29931.67 81154.00 29921.00 81154.00C29910.33 81165.00 29899.67 81176.00 29889.00 81187.00C29899.67 81187.00 29910.33 81187.00 29921.00 81187.00C29921.00 81176.00 29921.00 81165.00 29921.00 81154.00C29931.67 81175.67 29942.33 81197.33 29953.00 81219.00C29942.33 81219.00 29931.67 81219.00 29921.00 81219.00C29910.33 81208.33 29899.67 81197.67 29889.00 81187.00C29889.00 81176.00 29889.00 81165.00 29889.00 81154.00C29878.33 81154.00 29867.67 81154.00 29857.00 81154.00C29835.67 81175.67 29814.33 81197.33 29793.00 81219.00C29771.33 81208.33 29749.67 81197.67 29728.00 81187.00C29706.67 81165.33 29685.33 81143.67 29664.00 81122.00C29642.67 81132.67 29621.33 81143.33 29600.00 81154.00C29600.00 81143.33 29600.00 81132.67 29600.00 81122.00C29589.33 81122.00 29578.67 81122.00 29568.00 81122.00C29578.67 81100.67 29589.33 81079.33 29600.00 81058.00C29567.67 81058.00 29535.33 81058.00 29503.00 81058.00C29481.67 81068.67 29460.33 81079.33 29439.00 81090.00C29428.33 81090.00 29417.67 81090.00 29407.00 81090.00C29417.67 81111.33 29428.33 81132.67 29439.00 81154.00C29417.67 81154.00 29396.33 81154.00 29375.00 81154.00C29375.00 81143.33 29375.00 81132.67 29375.00 81122.00C29364.33 81132.67 29353.67 81143.33 29343.00 81154.00C29332.00 81143.33 29321.00 81132.67 29310.00 81122.00C29299.33 81122.00 29288.67 81122.00 29278.00 81122.00C29288.67 81111.33 29299.33 81100.67 29310.00 81090.00C29310.00 81079.33 29310.00 81068.67 29310.00 81058.00C29288.67 81058.00 29267.33 81058.00 29246.00 81058.00C29246.00 81047.33 29246.00 81036.67 29246.00 81026.00C29235.33 81026.00 29224.67 81026.00 29214.00 81026.00C29203.33 81015.33 29192.67 81004.67 29182.00 80994.00C29171.33 81004.67 29160.67 81015.33 29150.00 81026.00C29139.00 81015.33 29128.00 81004.67 29117.00 80994.00C29095.67 81004.67 29074.33 81015.33 29053.00 81026.00C29042.33 80993.67 29031.67 80961.33 29021.00 80929.00C29010.33 80950.67 28999.67 80972.33 28989.00 80994.00C28978.33 80983.33 28967.67 80972.67 28957.00 80962.00C28935.33 80972.67 28913.67 80983.33 28892.00 80994.00C28870.67 80983.33 28849.33 80972.67 28828.00 80962.00C28817.33 80983.33 28806.67 81004.67 28796.00 81026.00C28785.33 81004.67 28774.67 80983.33 28764.00 80962.00C28742.67 80962.00 28721.33 80962.00 28700.00 80962.00C28700.00 80951.00 28700.00 80940.00 28700.00 80929.00C28689.00 80940.00 28678.00 80951.00 28667.00 80962.00C28656.33 80962.00 28645.67 80962.00 28635.00 80962.00C28645.67 80951.00 28656.33 80940.00 28667.00 80929.00C28656.33 80929.00 28645.67 80929.00 28635.00 80929.00C28635.00 80918.33 28635.00 80907.67 28635.00 80897.00C28613.67 80907.67 28592.33 80918.33 28571.00 80929.00C28549.67 80918.33 28528.33 80907.67 28507.00 80897.00C28496.00 80886.33 28485.00 80875.67 28474.00 80865.00C28452.67 80865.00 28431.33 80865.00 28410.00 80865.00C28388.67 80875.67 28367.33 80886.33 28346.00 80897.00C28324.16 80875.06 28302.17 80853.27 28280.07 80831.59C28269.71 80821.39 28259.36 80811.20 28249.00 80801.00C28238.33 80822.33 28227.67 80843.67 28217.00 80865.00C28195.67 80854.33 28174.33 80843.67 28153.00 80833.00C28163.67 80833.00 28174.33 80833.00 28185.00 80833.00C28185.00 80822.33 28185.00 80811.67 28185.00 80801.00C28153.00 80811.67 28121.00 80822.33 28089.00 80833.00C28078.00 80843.67 28067.00 80854.33 28056.00 80865.00C28067.00 80865.00 28078.00 80865.00 28089.00 80865.00C28078.00 80875.67 28067.00 80886.33 28056.00 80897.00C28045.33 80875.67 28034.67 80854.33 28024.00 80833.00C28013.33 80833.00 28002.67 80833.00 27992.00 80833.00C27992.00 80843.67 27992.00 80854.33 27992.00 80865.00C27981.33 80854.33 27970.67 80843.67 27960.00 80833.00C27949.33 80843.67 27938.67 80854.33 27928.00 80865.00C27895.67 80854.33 27863.33 80843.67 27831.00 80833.00C27831.00 80822.33 27831.00 80811.67 27831.00 80801.00C27820.33 80822.33 27809.67 80843.67 27799.00 80865.00C27788.33 80865.00 27777.67 80865.00 27767.00 80865.00C27767.00 80854.33 27767.00 80843.67 27767.00 80833.00C27756.33 80843.67 27745.67 80854.33 27735.00 80865.00C27724.33 80865.00 27713.67 80865.00 27703.00 80865.00C27713.67 80843.67 27724.33 80822.33 27735.00 80801.00C27713.67 80801.00 27692.33 80801.00 27671.00 80801.00C27671.00 80811.67 27671.00 80822.33 27671.00 80833.00C27649.33 80822.33 27627.67 80811.67 27606.00 80801.00C27595.33 80822.33 27584.67 80843.67 27574.00 80865.00C27574.00 80854.33 27574.00 80843.67 27574.00 80833.00C27563.33 80833.00 27552.67 80833.00 27542.00 80833.00C27531.33 80811.67 27520.67 80790.33 27510.00 80769.00C27499.33 80779.67 27488.67 80790.33 27478.00 80801.00C27488.67 80811.67 27499.33 80822.33 27510.00 80833.00C27499.33 80833.00 27488.67 80833.00 27478.00 80833.00C27467.00 80811.67 27456.00 80790.33 27445.00 80769.00C27434.33 80779.67 27423.67 80790.33 27413.00 80801.00C27402.33 80779.33 27391.67 80757.67 27381.00 80736.00C27370.33 80736.00 27359.67 80736.00 27349.00 80736.00C27338.33 80757.67 27327.67 80779.33 27317.00 80801.00C27284.67 80801.00 27252.33 80801.00 27220.00 80801.00C27220.00 80822.33 27220.00 80843.67 27220.00 80865.00C27209.33 80854.33 27198.67 80843.67 27188.00 80833.00C27188.00 80843.67 27188.00 80854.33 27188.00 80865.00C27177.33 80865.00 27166.67 80865.00 27156.00 80865.00C27145.33 80854.33 27134.67 80843.67 27124.00 80833.00C27113.33 80843.67 27102.67 80854.33 27092.00 80865.00C27092.00 80875.67 27092.00 80886.33 27092.00 80897.00C27081.33 80886.33 27070.67 80875.67 27060.00 80865.00C27038.33 80865.00 27016.67 80865.00 26995.00 80865.00C26995.00 80843.67 26995.00 80822.33 26995.00 80801.00C26984.33 80811.67 26973.67 80822.33 26963.00 80833.00C26941.67 80822.33 26920.33 80811.67 26899.00 80801.00C26867.00 80801.00 26835.00 80801.00 26803.00 80801.00C26803.00 80822.33 26803.00 80843.67 26803.00 80865.00C26781.33 80865.00 26759.67 80865.00 26738.00 80865.00C26738.00 80854.33 26738.00 80843.67 26738.00 80833.00C26684.33 80822.33 26630.67 80811.67 26577.00 80801.00C26577.00 80822.33 26577.00 80843.67 26577.00 80865.00C26555.67 80854.33 26534.33 80843.67 26513.00 80833.00C26491.67 80833.00 26470.33 80833.00 26449.00 80833.00C26449.00 80854.33 26449.00 80875.67 26449.00 80897.00C26438.33 80886.33 26427.67 80875.67 26417.00 80865.00C26395.33 80875.67 26373.67 80886.33 26352.00 80897.00C26309.33 80886.33 26266.67 80875.67 26224.00 80865.00C26213.33 80886.33 26202.67 80907.67 26192.00 80929.00C26181.00 80918.33 26170.00 80907.67 26159.00 80897.00C26137.67 80907.67 26116.33 80918.33 26095.00 80929.00C26084.33 80940.00 26073.67 80951.00 26063.00 80962.00C26052.33 80951.00 26041.67 80940.00 26031.00 80929.00C26009.67 80950.67 25988.33 80972.33 25967.00 80994.00C25956.00 80972.33 25945.00 80950.67 25934.00 80929.00C25912.67 80950.67 25891.33 80972.33 25870.00 80994.00C25859.33 80983.33 25848.67 80972.67 25838.00 80962.00C25848.67 80951.00 25859.33 80940.00 25870.00 80929.00C25859.33 80929.00 25848.67 80929.00 25838.00 80929.00C25816.67 80886.33 25795.33 80843.67 25774.00 80801.00C25763.00 80801.00 25752.00 80801.00 25741.00 80801.00C25741.00 80811.67 25741.00 80822.33 25741.00 80833.00C25730.33 80822.33 25719.67 80811.67 25709.00 80801.00C25709.00 80790.33 25709.00 80779.67 25709.00 80769.00C25687.67 80779.67 25666.33 80790.33 25645.00 80801.00C25634.33 80790.33 25623.67 80779.67 25613.00 80769.00C25602.33 80769.00 25591.67 80769.00 25581.00 80769.00C25581.00 80758.00 25581.00 80747.00 25581.00 80736.00C25559.33 80736.00 25537.67 80736.00 25516.00 80736.00C25516.00 80747.00 25516.00 80758.00 25516.00 80769.00C25473.33 80769.00 25430.67 80769.00 25388.00 80769.00C25366.33 80758.00 25344.67 80747.00 25323.00 80736.00C25312.33 80747.00 25301.67 80758.00 25291.00 80769.00C25280.33 80758.00 25269.67 80747.00 25259.00 80736.00C25248.33 80747.00 25237.67 80758.00 25227.00 80769.00C25216.33 80758.00 25205.67 80747.00 25195.00 80736.00C25162.67 80725.33 25130.33 80714.67 25098.00 80704.00C25076.67 80714.67 25055.33 80725.33 25034.00 80736.00C25023.33 80747.00 25012.67 80758.00 25002.00 80769.00C24991.33 80758.00 24980.67 80747.00 24970.00 80736.00C24927.00 80736.00 24884.00 80736.00 24841.00 80736.00C24841.00 80757.67 24841.00 80779.33 24841.00 80801.00C24819.67 80801.00 24798.33 80801.00 24777.00 80801.00C24766.33 80822.33 24755.67 80843.67 24745.00 80865.00C24734.00 80854.33 24723.00 80843.67 24712.00 80833.00C24701.33 80854.33 24690.67 80875.67 24680.00 80897.00C24669.33 80886.33 24658.67 80875.67 24648.00 80865.00C24637.33 80886.33 24626.67 80907.67 24616.00 80929.00C24616.00 80918.33 24616.00 80907.67 24616.00 80897.00C24599.19 80913.82 24582.27 80930.55 24565.83 80947.74C24561.22 80952.49 24556.61 80957.25 24552.00 80962.00C24530.33 80962.00 24508.67 80962.00 24487.00 80962.00C24487.00 80972.67 24487.00 80983.33 24487.00 80994.00C24476.33 80983.33 24465.67 80972.67 24455.00 80962.00C24455.00 80972.67 24455.00 80983.33 24455.00 80994.00C24433.67 80994.00 24412.33 80994.00 24391.00 80994.00C24401.67 81004.67 24412.33 81015.33 24423.00 81026.00C24412.33 81015.33 24401.67 81004.67 24391.00 80994.00C24380.33 81004.67 24369.67 81015.33 24359.00 81026.00C24348.33 81026.00 24337.67 81026.00 24327.00 81026.00C24327.00 81036.67 24327.00 81047.33 24327.00 81058.00C24294.67 81058.00 24262.33 81058.00 24230.00 81058.00C24230.00 81047.33 24230.00 81036.67 24230.00 81026.00C24219.33 81036.67 24208.67 81047.33 24198.00 81058.00C24198.00 81047.33 24198.00 81036.67 24198.00 81026.00C24187.33 81047.33 24176.67 81068.67 24166.00 81090.00C24155.33 81090.00 24144.67 81090.00 24134.00 81090.00C24144.67 81079.33 24155.33 81068.67 24166.00 81058.00C24144.67 81068.67 24123.33 81079.33 24102.00 81090.00C24102.00 81111.33 24102.00 81132.67 24102.00 81154.00C24102.00 81143.33 24102.00 81132.67 24102.00 81122.00C24091.00 81122.00 24080.00 81122.00 24069.00 81122.00C24069.00 81132.67 24069.00 81143.33 24069.00 81154.00C24058.33 81154.00 24047.67 81154.00 24037.00 81154.00C24026.33 81175.67 24015.67 81197.33 24005.00 81219.00C23994.33 81219.00 23983.67 81219.00 23973.00 81219.00C23962.33 81229.67 23951.67 81240.33 23941.00 81251.00C23919.67 81261.67 23898.33 81272.33 23877.00 81283.00C23877.00 81293.67 23877.00 81304.33 23877.00 81315.00C23866.00 81304.33 23855.00 81293.67 23844.00 81283.00C23844.00 81293.67 23844.00 81304.33 23844.00 81315.00C23833.33 81315.00 23822.67 81315.00 23812.00 81315.00C23801.33 81304.33 23790.67 81293.67 23780.00 81283.00C23780.00 81293.67 23780.00 81304.33 23780.00 81315.00C23758.67 81315.00 23737.33 81315.00 23716.00 81315.00C23716.00 81325.67 23716.00 81336.33 23716.00 81347.00C23705.33 81357.67 23694.67 81368.33 23684.00 81379.00C23662.33 81368.33 23640.67 81357.67 23619.00 81347.00C23587.00 81347.00 23555.00 81347.00 23523.00 81347.00C23512.33 81336.33 23501.67 81325.67 23491.00 81315.00C23458.67 81325.67 23426.33 81336.33 23394.00 81347.00C23383.33 81347.00 23372.67 81347.00 23362.00 81347.00C23351.33 81368.67 23340.67 81390.33 23330.00 81412.00C23319.33 81401.00 23308.67 81390.00 23298.00 81379.00C23287.33 81379.00 23276.67 81379.00 23266.00 81379.00C23255.00 81390.00 23244.00 81401.00 23233.00 81412.00C23201.00 81422.67 23169.00 81433.33 23137.00 81444.00C23115.67 81433.33 23094.33 81422.67 23073.00 81412.00C23051.33 81422.67 23029.67 81433.33 23008.00 81444.00C22991.19 81427.18 22974.27 81410.45 22957.83 81393.26C22953.22 81388.51 22948.61 81383.75 22944.00 81379.00C22912.00 81390.00 22880.00 81401.00 22848.00 81412.00C22837.00 81401.00 22826.00 81390.00 22815.00 81379.00C22815.00 81368.33 22815.00 81357.67 22815.00 81347.00C22804.33 81347.00 22793.67 81347.00 22783.00 81347.00C22761.67 81336.33 22740.33 81325.67 22719.00 81315.00C22708.33 81325.67 22697.67 81336.33 22687.00 81347.00C22687.00 81336.33 22687.00 81325.67 22687.00 81315.00C22665.67 81304.33 22644.33 81293.67 22623.00 81283.00C22612.00 81293.67 22601.00 81304.33 22590.00 81315.00C22579.33 81304.33 22568.67 81293.67 22558.00 81283.00C22547.33 81283.00 22536.67 81283.00 22526.00 81283.00C22536.67 81272.33 22547.33 81261.67 22558.00 81251.00C22536.67 81208.00 22515.33 81165.00 22494.00 81122.00C22461.67 81100.67 22429.33 81079.33 22397.00 81058.00C22386.33 81026.00 22375.67 80994.00 22365.00 80962.00C22343.67 80951.00 22322.33 80940.00 22301.00 80929.00C22290.33 80929.00 22279.67 80929.00 22269.00 80929.00C22258.33 80907.67 22247.67 80886.33 22237.00 80865.00C22215.33 80865.00 22193.67 80865.00 22172.00 80865.00C22172.00 80854.33 22172.00 80843.67 22172.00 80833.00C22150.67 80822.33 22129.33 80811.67 22108.00 80801.00C21968.67 80897.33 21829.33 80993.67 21690.00 81090.00C21679.34 80628.81 21668.64 80167.62 21658.00 79706.43C21658.00 78667.28 21658.00 77628.14 21658.00 76589.00C21668.66 76406.57 21679.37 76224.14 21690.00 76041.71C21690.00 75806.14 21690.00 75570.57 21690.00 75335.00C21700.67 75302.67 21711.33 75270.33 21722.00 75238.00C21743.67 75238.00 21765.33 75238.00 21787.00 75238.00C21797.67 75248.67 21808.33 75259.33 21819.00 75270.00C21829.67 75238.00 21840.33 75206.00 21851.00 75174.00C21861.67 75163.33 21872.33 75152.67 21883.00 75142.00C21915.00 75152.67 21947.00 75163.33 21979.00 75174.00C22000.67 75163.33 22022.33 75152.67 22044.00 75142.00C22054.67 75120.33 22065.33 75098.67 22076.00 75077.00C22076.00 75045.00 22076.00 75013.00 22076.00 74981.00C22086.67 74981.00 22097.33 74981.00 22108.00 74981.00C22108.00 74959.67 22108.00 74938.33 22108.00 74917.00C22118.67 74906.33 22129.33 74895.67 22140.00 74885.00C22129.33 74874.00 22118.67 74863.00 22108.00 74852.00C22118.67 74841.33 22129.33 74830.67 22140.00 74820.00C22129.33 74820.00 22118.67 74820.00 22108.00 74820.00C22086.67 74766.33 22065.33 74712.67 22044.00 74659.00C22033.33 74659.00 22022.67 74659.00 22012.00 74659.00C22012.00 74637.67 22012.00 74616.33 22012.00 74595.00C21990.33 74595.00 21968.67 74595.00 21947.00 74595.00C21925.67 74573.67 21904.33 74552.33 21883.00 74531.00C21893.67 74520.33 21904.33 74509.67 21915.00 74499.00C21893.67 74488.33 21872.33 74477.67 21851.00 74467.00C21829.67 74413.33 21808.33 74359.67 21787.00 74306.00C21797.67 74295.33 21808.33 74284.67 21819.00 74274.00C21829.67 74252.33 21840.33 74230.67 21851.00 74209.00C21840.33 74209.00 21829.67 74209.00 21819.00 74209.00C21829.67 74198.33 21840.33 74187.67 21851.00 74177.00C21851.00 74155.67 21851.00 74134.33 21851.00 74113.00C21829.67 74102.33 21808.33 74091.67 21787.00 74081.00C21787.00 74070.33 21787.00 74059.67 21787.00 74049.00C21808.33 74038.00 21829.67 74027.00 21851.00 74016.00C21840.33 74048.33 21829.67 74080.67 21819.00 74113.00C21829.67 74113.00 21840.33 74113.00 21851.00 74113.00C21861.67 74102.33 21872.33 74091.67 21883.00 74081.00C21904.33 74102.33 21925.67 74123.67 21947.00 74145.00C21957.67 74145.00 21968.33 74145.00 21979.00 74145.00C21990.00 74134.33 22001.00 74123.67 22012.00 74113.00C22001.00 74091.67 21990.00 74070.33 21979.00 74049.00C21957.67 74049.00 21936.33 74049.00 21915.00 74049.00C21915.00 74038.00 21915.00 74027.00 21915.00 74016.00C21925.67 74005.33 21936.33 73994.67 21947.00 73984.00C21936.33 73962.67 21925.67 73941.33 21915.00 73920.00C21925.67 73920.00 21936.33 73920.00 21947.00 73920.00C21957.67 73930.67 21968.33 73941.33 21979.00 73952.00C22011.33 73952.00 22043.67 73952.00 22076.00 73952.00C22076.00 73941.33 22076.00 73930.67 22076.00 73920.00C22065.33 73920.00 22054.67 73920.00 22044.00 73920.00C22044.00 73887.67 22044.00 73855.33 22044.00 73823.00C22065.33 73834.00 22086.67 73845.00 22108.00 73856.00C22108.00 73834.33 22108.00 73812.67 22108.00 73791.00C22118.67 73791.00 22129.33 73791.00 22140.00 73791.00C22161.67 73769.67 22183.33 73748.33 22205.00 73727.00C22215.67 73748.33 22226.33 73769.67 22237.00 73791.00C22237.00 73780.33 22237.00 73769.67 22237.00 73759.00C22215.30 73726.91 22193.51 73694.87 22171.87 73662.74C22161.25 73641.16 22150.62 73619.58 22140.00 73598.00C22150.67 73587.33 22161.33 73576.67 22172.00 73566.00C22183.00 73576.67 22194.00 73587.33 22205.00 73598.00C22215.67 73598.00 22226.33 73598.00 22237.00 73598.00C22226.33 73566.00 22215.67 73534.00 22205.00 73502.00C22226.33 73502.00 22247.67 73502.00 22269.00 73502.00C22279.67 73469.67 22290.33 73437.33 22301.00 73405.00C22290.33 73416.00 22279.67 73427.00 22269.00 73438.00C22258.33 73427.00 22247.67 73416.00 22237.00 73405.00C22215.33 73416.00 22193.67 73427.00 22172.00 73438.00C22172.00 73448.67 22172.00 73459.33 22172.00 73470.00C22161.33 73470.00 22150.67 73470.00 22140.00 73470.00C22140.00 73459.33 22140.00 73448.67 22140.00 73438.00C22118.67 73448.67 22097.33 73459.33 22076.00 73470.00C22076.00 73459.33 22076.00 73448.67 22076.00 73438.00C22065.33 73427.00 22054.67 73416.00 22044.00 73405.00C22033.33 73426.67 22022.67 73448.33 22012.00 73470.00C22001.00 73470.00 21990.00 73470.00 21979.00 73470.00C21979.00 73459.33 21979.00 73448.67 21979.00 73438.00C21957.67 73438.00 21936.33 73438.00 21915.00 73438.00C21915.00 73448.67 21915.00 73459.33 21915.00 73470.00C21893.67 73480.67 21872.33 73491.33 21851.00 73502.00C21840.33 73502.00 21829.67 73502.00 21819.00 73502.00C21808.33 73523.33 21797.67 73544.67 21787.00 73566.00C21765.33 73566.00 21743.67 73566.00 21722.00 73566.00C21722.00 73598.33 21722.00 73630.67 21722.00 73663.00C21711.33 73652.33 21700.67 73641.67 21690.00 73631.00C21668.67 73652.33 21647.33 73673.67 21626.00 73695.00C21626.00 73727.00 21626.00 73759.00 21626.00 73791.00C21604.33 73780.33 21582.67 73769.67 21561.00 73759.00C21572.00 73769.67 21583.00 73780.33 21594.00 73791.00C21572.33 73791.00 21550.67 73791.00 21529.00 73791.00C21529.00 73812.67 21529.00 73834.33 21529.00 73856.00C21529.00 73845.00 21529.00 73834.00 21529.00 73823.00C21518.33 73834.00 21507.67 73845.00 21497.00 73856.00C21507.67 73856.00 21518.33 73856.00 21529.00 73856.00C21518.33 73856.00 21507.67 73856.00 21497.00 73856.00C21497.00 73866.67 21497.00 73877.33 21497.00 73888.00C21486.33 73877.33 21475.67 73866.67 21465.00 73856.00C21454.33 73877.33 21443.67 73898.67 21433.00 73920.00C21422.33 73920.00 21411.67 73920.00 21401.00 73920.00C21401.00 73930.67 21401.00 73941.33 21401.00 73952.00C21390.33 73941.33 21379.67 73930.67 21369.00 73920.00C21347.33 73941.33 21325.67 73962.67 21304.00 73984.00C21293.33 73984.00 21282.67 73984.00 21272.00 73984.00C21255.19 74000.82 21238.27 74017.55 21221.83 74034.74C21217.22 74039.49 21212.61 74044.25 21208.00 74049.00C21197.33 74049.00 21186.67 74049.00 21176.00 74049.00C21186.67 74049.00 21197.33 74049.00 21208.00 74049.00C21208.00 74059.67 21208.00 74070.33 21208.00 74081.00C21197.33 74091.67 21186.67 74102.33 21176.00 74113.00C21154.33 74091.67 21132.67 74070.33 21111.00 74049.00C21089.67 74070.33 21068.33 74091.67 21047.00 74113.00C21057.67 74113.00 21068.33 74113.00 21079.00 74113.00C21068.33 74123.67 21057.67 74134.33 21047.00 74145.00C21047.00 74155.67 21047.00 74166.33 21047.00 74177.00C21036.33 74166.33 21025.67 74155.67 21015.00 74145.00C21025.67 74155.67 21036.33 74166.33 21047.00 74177.00C21036.33 74177.00 21025.67 74177.00 21015.00 74177.00C21025.67 74187.67 21036.33 74198.33 21047.00 74209.00C21047.00 74230.67 21047.00 74252.33 21047.00 74274.00C21025.67 74274.00 21004.33 74274.00 20983.00 74274.00C20983.00 74284.67 20983.00 74295.33 20983.00 74306.00C20950.67 74316.67 20918.33 74327.33 20886.00 74338.00C20886.00 74348.67 20886.00 74359.33 20886.00 74370.00C20896.67 74370.00 20907.33 74370.00 20918.00 74370.00C20895.49 74392.59 20872.83 74415.03 20850.40 74437.71C20840.94 74447.47 20831.47 74457.24 20822.00 74467.00C20800.67 74467.00 20779.33 74467.00 20758.00 74467.00C20747.00 74477.67 20736.00 74488.33 20725.00 74499.00C20714.33 74488.33 20703.67 74477.67 20693.00 74467.00C20693.00 74477.67 20693.00 74488.33 20693.00 74499.00C20682.33 74488.33 20671.67 74477.67 20661.00 74467.00C20661.00 74488.33 20661.00 74509.67 20661.00 74531.00C20639.67 74541.67 20618.33 74552.33 20597.00 74563.00C20597.00 74552.33 20597.00 74541.67 20597.00 74531.00C20564.67 74552.33 20532.33 74573.67 20500.00 74595.00C20478.67 74616.33 20457.33 74637.67 20436.00 74659.00C20436.00 74670.00 20436.00 74681.00 20436.00 74692.00C20425.33 74692.00 20414.67 74692.00 20404.00 74692.00C20393.33 74734.67 20382.67 74777.33 20372.00 74820.00C20361.33 74820.00 20350.67 74820.00 20340.00 74820.00C20329.33 74841.67 20318.67 74863.33 20308.00 74885.00C20297.00 74885.00 20286.00 74885.00 20275.00 74885.00C20264.33 74906.33 20253.67 74927.67 20243.00 74949.00C20200.33 74949.00 20157.67 74949.00 20115.00 74949.00C20115.00 74959.67 20115.00 74970.33 20115.00 74981.00C20115.00 74970.33 20115.00 74959.67 20115.00 74949.00C20104.00 74970.33 20093.00 74991.67 20082.00 75013.00C20071.33 75002.33 20060.67 74991.67 20050.00 74981.00C20050.00 74991.67 20050.00 75002.33 20050.00 75013.00C20039.33 75023.67 20028.67 75034.33 20018.00 75045.00C19996.67 75098.67 19975.33 75152.33 19954.00 75206.00C19943.33 75195.33 19932.67 75184.67 19922.00 75174.00C19922.00 75227.67 19922.00 75281.33 19922.00 75335.00C19879.00 75335.00 19836.00 75335.00 19793.00 75335.00C19771.67 75324.33 19750.33 75313.67 19729.00 75303.00C19718.33 75313.67 19707.67 75324.33 19697.00 75335.00C19675.33 75335.00 19653.67 75335.00 19632.00 75335.00C19621.33 75345.67 19610.67 75356.33 19600.00 75367.00C19578.67 75367.00 19557.33 75367.00 19536.00 75367.00C19514.58 75388.37 19493.25 75409.86 19471.76 75431.16C19439.51 75452.44 19407.25 75473.72 19375.00 75495.00C19321.33 75516.67 19267.67 75538.33 19214.00 75560.00C19182.00 75581.33 19150.00 75602.67 19118.00 75624.00C19101.17 75640.81 19084.45 75657.73 19067.26 75674.17C19062.51 75678.78 19057.75 75683.39 19053.00 75688.00C19042.33 75731.00 19031.67 75774.00 19021.00 75817.00C19010.33 75827.67 18999.67 75838.33 18989.00 75849.00C18978.33 75870.33 18967.67 75891.67 18957.00 75913.00C18935.67 75934.67 18914.33 75956.33 18893.00 75978.00C18893.00 76010.00 18893.00 76042.00 18893.00 76074.00C18860.67 76074.00 18828.33 76074.00 18796.00 76074.00C18764.00 76063.33 18732.00 76052.67 18700.00 76042.00C18689.33 76042.00 18678.67 76042.00 18668.00 76042.00C18668.00 76063.33 18668.00 76084.67 18668.00 76106.00C18646.33 76106.00 18624.67 76106.00 18603.00 76106.00C18539.00 76127.67 18475.00 76149.33 18411.00 76171.00C18400.00 76171.00 18389.00 76171.00 18378.00 76171.00C18346.00 76138.67 18314.00 76106.33 18282.00 76074.00C18260.33 76084.67 18238.67 76095.33 18217.00 76106.00C18217.00 76127.67 18217.00 76149.33 18217.00 76171.00C18206.33 76171.00 18195.67 76171.00 18185.00 76171.00C18174.33 76160.00 18163.67 76149.00 18153.00 76138.00C18131.67 76170.33 18110.33 76202.67 18089.00 76235.00C16792.00 76235.00 15495.00 76235.00 14198.00 76235.00C14198.00 76213.67 14198.00 76192.33 14198.00 76171.00C14230.33 76160.00 14262.67 76149.00 14295.00 76138.00C14305.67 76116.67 14316.33 76095.33 14327.00 76074.00C14327.00 76031.33 14327.00 75988.67 14327.00 75946.00C14305.67 75935.00 14284.33 75924.00 14263.00 75913.00C14252.33 75902.33 14241.67 75891.67 14231.00 75881.00C14241.67 75859.67 14252.33 75838.33 14263.00 75817.00C14284.33 75806.33 14305.67 75795.67 14327.00 75785.00C14337.67 75752.67 14348.33 75720.33 14359.00 75688.00C14380.33 75677.33 14401.67 75666.67 14423.00 75656.00C14391.00 75624.00 14359.00 75592.00 14327.00 75560.00C14327.00 75517.00 14327.00 75474.00 14327.00 75431.00C14316.33 75420.33 14305.67 75409.67 14295.00 75399.00C14295.00 75388.33 14295.00 75377.67 14295.00 75367.00C14327.00 75334.67 14359.00 75302.33 14391.00 75270.00C14412.67 75259.33 14434.33 75248.67 14456.00 75238.00C14370.00 75195.33 14284.00 75152.67 14198.00 75110.00C14176.67 75110.00 14155.33 75110.00 14134.00 75110.00C14112.67 75099.00 14091.33 75088.00 14070.00 75077.00C14059.33 75066.33 14048.67 75055.67 14038.00 75045.00C14027.00 75055.67 14016.00 75066.33 14005.00 75077.00C13983.67 75055.67 13962.33 75034.33 13941.00 75013.00C13919.67 75013.00 13898.33 75013.00 13877.00 75013.00C13877.06 75002.25 13876.88 74991.46 13877.09 74980.73C13887.73 74948.82 13898.36 74916.91 13909.00 74885.00C13909.00 74863.33 13909.00 74841.67 13909.00 74820.00C13919.67 74788.00 13930.33 74756.00 13941.00 74724.00C13941.00 74691.67 13941.00 74659.33 13941.00 74627.00C13951.67 74605.67 13962.33 74584.33 13973.00 74563.00C13951.67 74531.00 13930.33 74499.00 13909.00 74467.00C13919.67 74424.00 13930.33 74381.00 13941.00 74338.00C13919.67 74338.00 13898.33 74338.00 13877.00 74338.00C13844.67 74316.67 13812.33 74295.33 13780.00 74274.00C13791.00 74177.33 13802.00 74080.67 13813.00 73984.00C13791.33 73973.33 13769.67 73962.67 13748.00 73952.00C13716.00 73962.67 13684.00 73973.33 13652.00 73984.00C13630.33 73973.33 13608.67 73962.67 13587.00 73952.00C13565.67 73962.67 13544.33 73973.33 13523.00 73984.00C13512.33 73984.00 13501.67 73984.00 13491.00 73984.00C13469.67 73962.67 13448.33 73941.33 13427.00 73920.00C13427.00 73909.33 13427.00 73898.67 13427.00 73888.00C13416.33 73888.00 13405.67 73888.00 13395.00 73888.00C13395.00 73855.67 13395.00 73823.33 13395.00 73791.00C13384.00 73791.00 13373.00 73791.00 13362.00 73791.00C13351.33 73780.33 13340.67 73769.67 13330.00 73759.00C13319.33 73759.00 13308.67 73759.00 13298.00 73759.00C13287.33 73748.33 13276.67 73737.67 13266.00 73727.00C13255.33 73737.67 13244.67 73748.33 13234.00 73759.00C13223.33 73759.00 13212.67 73759.00 13202.00 73759.00C13191.00 73748.33 13180.00 73737.67 13169.00 73727.00C13158.33 73727.00 13147.67 73727.00 13137.00 73727.00C13115.67 73705.67 13094.33 73684.33 13073.00 73663.00C13062.33 73673.67 13051.67 73684.33 13041.00 73695.00C12998.00 73695.00 12955.00 73695.00 12912.00 73695.00C12912.00 73684.33 12912.00 73673.67 12912.00 73663.00C12912.00 73673.67 12912.00 73684.33 12912.00 73695.00C12901.33 73695.00 12890.67 73695.00 12880.00 73695.00C12869.33 73705.67 12858.67 73716.33 12848.00 73727.00C12815.67 73716.33 12783.33 73705.67 12751.00 73695.00C12751.00 73705.67 12751.00 73716.33 12751.00 73727.00C12740.33 73716.33 12729.67 73705.67 12719.00 73695.00C12708.24 73695.05 12697.46 73694.91 12686.72 73695.07C12644.15 73705.71 12601.57 73716.36 12559.00 73727.00C12548.00 73727.00 12537.00 73727.00 12526.00 73727.00C12515.33 73716.33 12504.67 73705.67 12494.00 73695.00C12504.67 73695.00 12515.33 73695.00 12526.00 73695.00C12515.33 73695.00 12504.67 73695.00 12494.00 73695.00C12494.00 73684.33 12494.00 73673.67 12494.00 73663.00C12483.33 73663.00 12472.67 73663.00 12462.00 73663.00C12462.00 73652.33 12462.00 73641.67 12462.00 73631.00C12462.00 73641.67 12462.00 73652.33 12462.00 73663.00C12451.33 73652.33 12440.67 73641.67 12430.00 73631.00C12408.67 73631.00 12387.33 73631.00 12366.00 73631.00C12366.00 73641.67 12366.00 73652.33 12366.00 73663.00C12366.00 73641.33 12366.00 73619.67 12366.00 73598.00C12355.00 73609.00 12344.00 73620.00 12333.00 73631.00C12333.00 73620.00 12333.00 73609.00 12333.00 73598.00C12322.33 73598.00 12311.67 73598.00 12301.00 73598.00C12290.33 73587.33 12279.67 73576.67 12269.00 73566.00C12269.00 73576.67 12269.00 73587.33 12269.00 73598.00C12247.67 73587.33 12226.33 73576.67 12205.00 73566.00C12183.67 73566.00 12162.33 73566.00 12141.00 73566.00C12130.00 73555.33 12119.00 73544.67 12108.00 73534.00C12097.33 73544.67 12086.67 73555.33 12076.00 73566.00C12076.00 73555.33 12076.00 73544.67 12076.00 73534.00C12065.33 73534.00 12054.67 73534.00 12044.00 73534.00C12044.00 73523.33 12044.00 73512.67 12044.00 73502.00C12033.33 73512.67 12022.67 73523.33 12012.00 73534.00C12001.33 73523.33 11990.67 73512.67 11980.00 73502.00C11969.33 73512.67 11958.67 73523.33 11948.00 73534.00C11926.33 73534.00 11904.67 73534.00 11883.00 73534.00C11872.33 73523.33 11861.67 73512.67 11851.00 73502.00C11851.00 73491.33 11851.00 73480.67 11851.00 73470.00C11829.67 73480.67 11808.33 73491.33 11787.00 73502.00C11787.00 73491.33 11787.00 73480.67 11787.00 73470.00C11776.33 73470.00 11765.67 73470.00 11755.00 73470.00C11744.33 73480.67 11733.67 73491.33 11723.00 73502.00C11723.00 73491.33 11723.00 73480.67 11723.00 73470.00C11712.00 73470.00 11701.00 73470.00 11690.00 73470.00C11690.00 73459.33 11690.00 73448.67 11690.00 73438.00C11690.00 73448.67 11690.00 73459.33 11690.00 73470.00C11668.67 73459.33 11647.33 73448.67 11626.00 73438.00C11615.33 73427.00 11604.67 73416.00 11594.00 73405.00C11604.67 73394.33 11615.33 73383.67 11626.00 73373.00C11626.00 73362.33 11626.00 73351.67 11626.00 73341.00C10886.67 73341.00 10147.33 73341.00 9408.00 73341.00C9429.33 73319.67 9450.67 73298.33 9472.00 73277.00C9482.67 73234.00 9493.33 73191.00 9504.00 73148.00C9504.00 73137.33 9504.00 73126.67 9504.00 73116.00C9525.43 73105.32 9546.82 73094.53 9568.27 73083.91C9600.51 73073.27 9632.76 73062.64 9665.00 73052.00C9675.67 73030.33 9686.33 73008.67 9697.00 72987.00C9718.33 72976.33 9739.67 72965.67 9761.00 72955.00C9771.67 72923.00 9782.33 72891.00 9793.00 72859.00C9836.00 72848.33 9879.00 72837.67 9922.00 72827.00C9922.00 72816.33 9922.00 72805.67 9922.00 72795.00C9911.33 72773.33 9900.67 72751.67 9890.00 72730.00C9879.33 72719.33 9868.67 72708.67 9858.00 72698.00C9890.00 72687.33 9922.00 72676.67 9954.00 72666.00C9986.33 72612.33 10018.67 72558.67 10051.00 72505.00C10083.00 72483.67 10115.00 72462.33 10147.00 72441.00C10157.67 72462.33 10168.33 72483.67 10179.00 72505.00C10189.67 72505.00 10200.33 72505.00 10211.00 72505.00C10243.33 72483.67 10275.67 72462.33 10308.00 72441.00C10308.00 72430.33 10308.00 72419.67 10308.00 72409.00C10329.33 72398.33 10350.67 72387.67 10372.00 72377.00C10388.67 72359.83 10405.22 72342.55 10422.26 72325.74C10426.84 72321.16 10431.42 72316.58 10436.00 72312.00C10436.00 72301.33 10436.00 72290.67 10436.00 72280.00C10404.00 72269.33 10372.00 72258.67 10340.00 72248.00C10329.33 72237.33 10318.67 72226.67 10308.00 72216.00C10340.09 72194.30 10372.13 72172.51 10404.26 72150.87C10447.17 72129.58 10490.09 72108.29 10533.00 72087.00C10554.33 72065.67 10575.67 72044.33 10597.00 72023.00C10618.33 71969.33 10639.67 71915.67 10661.00 71862.00C10661.00 71819.33 10661.00 71776.67 10661.00 71734.00C10672.00 71712.33 10683.00 71690.67 10694.00 71669.00C10683.00 71647.67 10672.00 71626.33 10661.00 71605.00C10661.00 71562.00 10661.00 71519.00 10661.00 71476.00C10650.33 71454.67 10639.67 71433.33 10629.00 71412.00C10629.00 71401.33 10629.00 71390.67 10629.00 71380.00C10639.67 71369.33 10650.33 71358.67 10661.00 71348.00C10672.00 71326.33 10683.00 71304.67 10694.00 71283.00C10651.00 71272.33 10608.00 71261.67 10565.00 71251.00C10533.00 71154.67 10501.00 71058.33 10469.00 70962.00C10436.67 70951.33 10404.33 70940.67 10372.00 70930.00C10350.67 70930.00 10329.33 70930.00 10308.00 70930.00C10308.00 70887.00 10308.00 70844.00 10308.00 70801.00C10297.33 70833.33 10286.67 70865.67 10276.00 70898.00C10265.33 70908.67 10254.67 70919.33 10244.00 70930.00C10222.33 70908.33 10200.67 70886.67 10179.00 70865.00C10168.33 70822.33 10157.67 70779.67 10147.00 70737.00C10147.00 70715.33 10147.00 70693.67 10147.00 70672.00C10136.33 70661.33 10125.67 70650.67 10115.00 70640.00C10115.00 70608.00 10115.00 70576.00 10115.00 70544.00C10093.67 70544.00 10072.33 70544.00 10051.00 70544.00C10029.33 70511.67 10007.67 70479.33 9986.00 70447.00C9986.00 70404.33 9986.00 70361.67 9986.00 70319.00C9954.00 70286.67 9922.00 70254.33 9890.00 70222.00C9879.33 70157.67 9868.67 70093.33 9858.00 70029.00C9847.00 69997.00 9836.00 69965.00 9825.00 69933.00C9803.67 69922.33 9782.33 69911.67 9761.00 69901.00C9739.67 69868.67 9718.33 69836.33 9697.00 69804.00C9675.67 69804.00 9654.33 69804.00 9633.00 69804.00C9600.67 69793.33 9568.33 69782.67 9536.00 69772.00C9514.67 69782.67 9493.33 69793.33 9472.00 69804.00C9450.67 69804.00 9429.33 69804.00 9408.00 69804.00C9397.00 69793.33 9386.00 69782.67 9375.00 69772.00C9364.33 69772.00 9353.67 69772.00 9343.00 69772.00C9332.33 69750.67 9321.67 69729.33 9311.00 69708.00C9300.33 69708.00 9289.67 69708.00 9279.00 69708.00C9257.67 69686.33 9236.33 69664.67 9215.00 69643.00C9215.00 69611.00 9215.00 69579.00 9215.00 69547.00C9204.33 69536.33 9193.67 69525.67 9183.00 69515.00C9172.00 69525.67 9161.00 69536.33 9150.00 69547.00C9150.00 69525.67 9150.00 69504.33 9150.00 69483.00C9139.33 69472.33 9128.67 69461.67 9118.00 69451.00C9096.67 69461.67 9075.33 69472.33 9054.00 69483.00C9043.33 69440.00 9032.67 69397.00 9022.00 69354.00C9032.67 69343.33 9043.33 69332.67 9054.00 69322.00C9064.67 69279.00 9075.33 69236.00 9086.00 69193.00C9064.67 69107.33 9043.33 69021.67 9022.00 68936.00C9000.33 68882.33 8978.67 68828.67 8957.00 68775.00C8925.00 68775.00 8893.00 68775.00 8861.00 68775.00C8850.33 68764.33 8839.67 68753.67 8829.00 68743.00C8807.33 68743.00 8785.67 68743.00 8764.00 68743.00C8732.00 68732.33 8700.00 68721.67 8668.00 68711.00C8657.33 68721.67 8646.67 68732.33 8636.00 68743.00C8636.00 68732.33 8636.00 68721.67 8636.00 68711.00C8614.67 68721.67 8593.33 68732.33 8572.00 68743.00C8550.33 68711.00 8528.67 68679.00 8507.00 68647.00C8496.33 68604.00 8485.67 68561.00 8475.00 68518.00C8464.33 68496.67 8453.67 68475.33 8443.00 68454.00C8400.00 68454.00 8357.00 68454.00 8314.00 68454.00C8292.67 68432.67 8271.33 68411.33 8250.00 68390.00C8207.00 68379.00 8164.00 68368.00 8121.00 68357.00C8110.33 68357.00 8099.67 68357.00 8089.00 68357.00C8089.00 68335.67 8089.00 68314.33 8089.00 68293.00C8067.67 68293.00 8046.33 68293.00 8025.00 68293.00C8003.67 68282.33 7982.33 68271.67 7961.00 68261.00C7928.67 68218.00 7896.33 68175.00 7864.00 68132.00C7874.67 68078.67 7885.33 68025.33 7896.00 67972.00C7874.67 67950.33 7853.33 67928.67 7832.00 67907.00C7842.67 67864.33 7853.33 67821.67 7864.00 67779.00C7842.67 67746.67 7821.33 67714.33 7800.00 67682.00C7789.33 67671.33 7778.67 67660.67 7768.00 67650.00C7768.00 67639.33 7768.00 67628.67 7768.00 67618.00C7746.33 67607.33 7724.67 67596.67 7703.00 67586.00C7692.33 67553.67 7681.67 67521.33 7671.00 67489.00C7649.67 67478.33 7628.33 67467.67 7607.00 67457.00C7617.67 67425.00 7628.33 67393.00 7639.00 67361.00C7638.95 67339.24 7639.09 67317.46 7638.93 67295.72C7628.29 67253.15 7617.64 67210.57 7607.00 67168.00C7617.67 67135.67 7628.33 67103.33 7639.00 67071.00C7628.33 67028.33 7617.67 66985.67 7607.00 66943.00C7585.63 66921.24 7564.15 66899.57 7542.84 66877.76C7521.23 66845.84 7499.61 66813.92 7478.00 66782.00C7456.67 66771.33 7435.33 66760.67 7414.00 66750.00C7424.67 66717.67 7435.33 66685.33 7446.00 66653.00C7446.00 66621.00 7446.00 66589.00 7446.00 66557.00C7414.00 66524.67 7382.00 66492.33 7350.00 66460.00C7317.67 66471.00 7285.33 66482.00 7253.00 66493.00C7231.67 66493.00 7210.33 66493.00 7189.00 66493.00C7178.33 66439.33 7167.67 66385.67 7157.00 66332.00C7135.33 66310.33 7113.67 66288.67 7092.00 66267.00C7060.00 66267.00 7028.00 66267.00 6996.00 66267.00C6985.33 66278.00 6974.67 66289.00 6964.00 66300.00C6953.33 66300.00 6942.67 66300.00 6932.00 66300.00C6920.28 66288.03 6908.79 66275.82 6896.91 66264.01C6886.94 66254.34 6876.97 66244.67 6867.00 66235.00C6867.00 66203.00 6867.00 66171.00 6867.00 66139.00C6856.33 66117.67 6845.67 66096.33 6835.00 66075.00C6803.00 66042.67 6771.00 66010.33 6739.00 65978.00C6749.67 65967.33 6760.33 65956.67 6771.00 65946.00C6792.33 65946.00 6813.67 65946.00 6835.00 65946.00C6813.67 65903.00 6792.33 65860.00 6771.00 65817.00C6781.67 65795.67 6792.33 65774.33 6803.00 65753.00C6813.67 65753.00 6824.33 65753.00 6835.00 65753.00C6856.67 65785.00 6878.33 65817.00 6900.00 65849.00C6953.33 65849.00 7006.67 65849.00 7060.00 65849.00C7081.70 65816.91 7103.48 65784.87 7125.13 65752.74C7135.75 65731.50 7146.38 65710.25 7157.00 65689.00C7157.04 65656.57 7156.93 65624.13 7157.06 65591.72C7167.70 65538.15 7178.35 65484.57 7189.00 65431.00C7178.33 65399.00 7167.67 65367.00 7157.00 65335.00C7135.18 65324.22 7113.29 65313.56 7091.51 65302.70C7038.34 65270.47 6985.17 65238.23 6932.00 65206.00C6921.33 65195.33 6910.67 65184.67 6900.00 65174.00C6825.00 65152.67 6750.00 65131.33 6675.00 65110.00C6632.00 65110.00 6589.00 65110.00 6546.00 65110.00C6535.29 65099.24 6524.47 65088.58 6513.84 65077.76C6492.23 65045.51 6470.61 65013.25 6449.00 64981.00C6438.33 64949.00 6427.67 64917.00 6417.00 64885.00C6385.00 64885.00 6353.00 64885.00 6321.00 64885.00C6288.67 64852.67 6256.33 64820.33 6224.00 64788.00C6213.33 64745.33 6202.67 64702.67 6192.00 64660.00C6160.00 64649.33 6128.00 64638.67 6096.00 64628.00C5999.33 64531.33 5902.67 64434.67 5806.00 64338.00C5784.67 64338.00 5763.33 64338.00 5742.00 64338.00C5731.33 64284.33 5720.67 64230.67 5710.00 64177.00C5742.00 64177.00 5774.00 64177.00 5806.00 64177.00C5838.33 64166.33 5870.67 64155.67 5903.00 64145.00C5935.00 64091.67 5967.00 64038.33 5999.00 63985.00C5999.00 63963.33 5999.00 63941.67 5999.00 63920.00C6020.67 63898.67 6042.33 63877.33 6064.00 63856.00C6042.33 63834.67 6020.67 63813.33 5999.00 63792.00C5999.00 63738.33 5999.00 63684.67 5999.00 63631.00C5977.67 63609.67 5956.33 63588.33 5935.00 63567.00C5903.00 63492.00 5871.00 63417.00 5839.00 63342.00C5839.00 63320.33 5839.00 63298.67 5839.00 63277.00C5849.67 63266.33 5860.33 63255.67 5871.00 63245.00C5881.67 63255.67 5892.33 63266.33 5903.00 63277.00C5913.67 63298.67 5924.33 63320.33 5935.00 63342.00C5945.67 63331.00 5956.33 63320.00 5967.00 63309.00C5977.67 63309.00 5988.33 63309.00 5999.00 63309.00C6031.33 63341.33 6063.67 63373.67 6096.00 63406.00C6160.33 63416.67 6224.67 63427.33 6289.00 63438.00C6299.68 63416.57 6310.47 63395.18 6321.09 63373.73C6331.73 63341.49 6342.36 63309.24 6353.00 63277.00C6396.00 63255.67 6439.00 63234.33 6482.00 63213.00C6503.33 63213.00 6524.67 63213.00 6546.00 63213.00C6578.00 63223.67 6610.00 63234.33 6642.00 63245.00C6685.00 63223.67 6728.00 63202.33 6771.00 63181.00C6781.67 63181.00 6792.33 63181.00 6803.00 63181.00C6803.00 63213.00 6803.00 63245.00 6803.00 63277.00C6813.67 63277.00 6824.33 63277.00 6835.00 63277.00C6888.67 63245.00 6942.33 63213.00 6996.00 63181.00C7028.00 63138.00 7060.00 63095.00 7092.00 63052.00C7092.00 63041.33 7092.00 63030.67 7092.00 63020.00C7070.67 62977.00 7049.33 62934.00 7028.00 62891.00C7028.00 62837.67 7028.00 62784.33 7028.00 62731.00C7006.57 62709.30 6985.25 62687.47 6963.76 62665.84C6931.51 62644.56 6899.25 62623.28 6867.00 62602.00C6856.33 62591.33 6845.67 62580.67 6835.00 62570.00C6824.33 62516.33 6813.67 62462.67 6803.00 62409.00C6781.67 62387.67 6760.33 62366.33 6739.00 62345.00C6728.33 62323.33 6717.67 62301.67 6707.00 62280.00C6685.33 62258.67 6663.67 62237.33 6642.00 62216.00C6642.00 62205.33 6642.00 62194.67 6642.00 62184.00C6631.33 62162.67 6620.67 62141.33 6610.00 62120.00z"},"br-04":{"name":"Amazonas","path":"M6610.00 62120.00C6652.32 62075.64 6696.79 62033.40 6739.93 61989.88C6793.29 61925.92 6846.64 61861.96 6900.00 61798.00C6921.33 61755.33 6942.67 61712.67 6964.00 61670.00C6964.00 61648.33 6964.00 61626.67 6964.00 61605.00C6942.67 61594.33 6921.33 61583.67 6900.00 61573.00C6900.00 61519.33 6900.00 61465.67 6900.00 61412.00C6878.33 61369.33 6856.67 61326.67 6835.00 61284.00C6835.23 61272.81 6834.55 61261.41 6835.33 61250.35C6856.89 61207.90 6878.44 61165.45 6900.00 61123.00C6932.00 61090.67 6964.00 61058.33 6996.00 61026.00C7006.59 60993.75 7017.79 60961.59 7028.00 60929.27C7028.30 60918.41 7027.40 60907.36 7028.46 60896.62C7038.97 60864.74 7049.49 60832.87 7060.00 60801.00C7070.67 60801.00 7081.33 60801.00 7092.00 60801.00C7103.19 60789.86 7115.02 60779.26 7125.81 60767.79C7146.87 60736.19 7167.94 60704.60 7189.00 60673.00C7210.33 60662.33 7231.67 60651.67 7253.00 60641.00C7285.51 60586.88 7318.31 60532.91 7350.64 60478.69C7361.10 60457.46 7371.55 60436.23 7382.00 60415.00C7425.15 60382.80 7468.48 60350.82 7511.52 60318.49C7522.48 60307.80 7532.95 60296.51 7544.21 60286.19C7575.81 60265.13 7607.40 60244.06 7639.00 60223.00C7682.00 60223.00 7725.00 60223.00 7768.00 60223.00C7778.67 60190.67 7789.33 60158.33 7800.00 60126.00C7853.67 60083.33 7907.33 60040.67 7961.00 59998.00C7993.00 59987.00 8025.00 59976.00 8057.00 59965.00C8078.33 59965.00 8099.67 59965.00 8121.00 59965.00C8132.00 59954.33 8143.00 59943.67 8154.00 59933.00C8186.00 59933.00 8218.00 59933.00 8250.00 59933.00C8282.33 59911.67 8314.67 59890.33 8347.00 59869.00C8357.86 59868.78 8368.92 59869.43 8379.65 59868.67C8400.77 59858.12 8421.88 59847.56 8443.00 59837.00C8464.55 59836.85 8486.20 59837.31 8507.69 59836.77C8539.79 59826.18 8571.90 59815.59 8604.00 59805.00C8604.00 59772.67 8604.00 59740.33 8604.00 59708.00C8614.93 59697.29 8625.49 59686.07 8636.65 59675.67C8657.77 59665.12 8678.88 59654.56 8700.00 59644.00C8710.67 59622.67 8721.33 59601.33 8732.00 59580.00C8753.67 59580.00 8775.33 59580.00 8797.00 59580.00C8807.67 59590.67 8818.33 59601.33 8829.00 59612.00C8839.67 59601.33 8850.33 59590.67 8861.00 59580.00C8904.00 59580.00 8947.00 59580.00 8990.00 59580.00C9022.00 59569.00 9054.00 59558.00 9086.00 59547.00C9139.67 59547.00 9193.33 59547.00 9247.00 59547.00C9268.33 59536.33 9289.67 59525.67 9311.00 59515.00C9311.00 59504.33 9311.00 59493.67 9311.00 59483.00C9332.33 59472.33 9353.67 59461.67 9375.00 59451.00C9375.00 59461.67 9375.00 59472.33 9375.00 59483.00C9386.00 59493.67 9397.00 59504.33 9408.00 59515.00C9429.33 59493.67 9450.67 59472.33 9472.00 59451.00C9461.33 59440.33 9450.67 59429.67 9440.00 59419.00C9450.67 59408.33 9461.33 59397.67 9472.00 59387.00C9472.00 59376.00 9472.00 59365.00 9472.00 59354.00C9482.67 59354.00 9493.33 59354.00 9504.00 59354.00C9514.67 59343.33 9525.33 59332.67 9536.00 59322.00C9536.00 59300.67 9536.00 59279.33 9536.00 59258.00C9557.33 59247.33 9578.67 59236.67 9600.00 59226.00C9611.00 59236.67 9622.00 59247.33 9633.00 59258.00C9643.67 59258.00 9654.33 59258.00 9665.00 59258.00C9686.54 59225.85 9707.80 59193.49 9729.51 59161.48C9740.00 59150.65 9750.50 59139.83 9761.00 59129.00C9750.33 59118.33 9739.67 59107.67 9729.00 59097.00C9739.65 59086.04 9751.06 59075.56 9761.23 59064.31C9771.82 59032.54 9782.41 59000.77 9793.00 58969.00C9803.67 58958.33 9814.33 58947.67 9825.00 58937.00C9825.00 58926.00 9825.00 58915.00 9825.00 58904.00C9836.00 58893.33 9847.00 58882.67 9858.00 58872.00C9847.00 58840.00 9836.00 58808.00 9825.00 58776.00C9836.00 58765.33 9847.00 58754.67 9858.00 58744.00C9868.67 58744.00 9879.33 58744.00 9890.00 58744.00C9890.00 58722.33 9890.00 58700.67 9890.00 58679.00C9879.33 58657.67 9868.67 58636.33 9858.00 58615.00C9836.33 58604.33 9814.67 58593.67 9793.00 58583.00C9782.33 58540.00 9771.67 58497.00 9761.00 58454.00C9750.33 58443.33 9739.67 58432.67 9729.00 58422.00C9718.33 58368.33 9707.67 58314.67 9697.00 58261.00C9686.33 58271.67 9675.67 58282.33 9665.00 58293.00C9665.00 58271.67 9665.00 58250.33 9665.00 58229.00C9654.33 58207.67 9643.67 58186.33 9633.00 58165.00C9633.00 58122.00 9633.00 58079.00 9633.00 58036.00C9600.67 58004.00 9568.33 57972.00 9536.00 57940.00C9525.33 57940.00 9514.67 57940.00 9504.00 57940.00C9493.33 57907.67 9482.67 57875.33 9472.00 57843.00C9450.54 57832.10 9428.73 57821.69 9407.48 57810.49C9396.65 57800.00 9385.83 57789.50 9375.00 57779.00C9375.00 57704.00 9375.00 57629.00 9375.00 57554.00C9321.67 57500.33 9268.33 57446.67 9215.00 57393.00C9215.00 57328.67 9215.00 57264.33 9215.00 57200.00C9247.00 57168.00 9279.00 57136.00 9311.00 57104.00C9300.33 57093.33 9289.67 57082.67 9279.00 57072.00C9289.67 57061.00 9300.33 57050.00 9311.00 57039.00C9300.33 56975.00 9289.67 56911.00 9279.00 56847.00C9289.67 56847.00 9300.33 56847.00 9311.00 56847.00C9332.33 56825.33 9353.67 56803.67 9375.00 56782.00C9375.00 56771.33 9375.00 56760.67 9375.00 56750.00C9386.00 56739.33 9397.00 56728.67 9408.00 56718.00C9418.86 56717.78 9429.92 56718.43 9440.65 56717.67C9461.77 56707.12 9482.88 56696.56 9504.00 56686.00C9504.12 56664.11 9503.76 56642.15 9504.18 56620.29C9514.73 56577.61 9525.75 56534.99 9536.00 56492.27C9536.00 56449.51 9536.00 56406.76 9536.00 56364.00C9546.67 56342.67 9557.33 56321.33 9568.00 56300.00C9578.67 56310.67 9589.33 56321.33 9600.00 56332.00C9600.00 56278.33 9600.00 56224.67 9600.00 56171.00C9621.67 56149.67 9643.33 56128.33 9665.00 56107.00C9665.00 56085.67 9665.00 56064.33 9665.00 56043.00C9675.67 56032.33 9686.33 56021.67 9697.00 56011.00C9718.55 56010.84 9740.20 56011.31 9761.69 56010.76C9793.79 55999.84 9825.90 55988.92 9858.00 55978.00C9858.00 55935.33 9858.00 55892.67 9858.00 55850.00C9868.67 55839.33 9879.33 55828.67 9890.00 55818.00C9911.33 55818.00 9932.67 55818.00 9954.00 55818.00C9954.00 55807.00 9954.00 55796.00 9954.00 55785.00C9986.33 55774.33 10018.67 55763.67 10051.00 55753.00C10072.33 55721.00 10093.67 55689.00 10115.00 55657.00C10125.67 55657.00 10136.33 55657.00 10147.00 55657.00C10147.00 55624.67 10147.00 55592.33 10147.00 55560.00C10157.67 55560.00 10168.33 55560.00 10179.00 55560.00C10189.67 55528.00 10200.33 55496.00 10211.00 55464.00C10222.19 55463.78 10233.59 55464.44 10244.65 55463.67C10265.77 55453.12 10286.88 55442.56 10308.00 55432.00C10308.00 55410.33 10308.00 55388.67 10308.00 55367.00C10340.00 55356.33 10372.00 55345.67 10404.00 55335.00C10404.00 55313.67 10404.00 55292.33 10404.00 55271.00C10414.67 55260.33 10425.33 55249.67 10436.00 55239.00C10436.00 55228.33 10436.00 55217.67 10436.00 55207.00C10447.00 55207.00 10458.00 55207.00 10469.00 55207.00C10469.00 55153.33 10469.00 55099.67 10469.00 55046.00C10490.33 55035.33 10511.67 55024.67 10533.00 55014.00C10543.67 55024.67 10554.33 55035.33 10565.00 55046.00C10575.67 55035.33 10586.33 55024.67 10597.00 55014.00C10586.33 54992.67 10575.67 54971.33 10565.00 54950.00C10565.00 54928.33 10565.00 54906.67 10565.00 54885.00C10554.33 54874.33 10543.67 54863.67 10533.00 54853.00C10533.15 54831.45 10532.69 54809.80 10533.23 54788.31C10543.82 54756.21 10554.41 54724.10 10565.00 54692.00C10586.33 54681.33 10607.67 54670.67 10629.00 54660.00C10618.33 54638.67 10607.67 54617.33 10597.00 54596.00C10607.67 54585.33 10618.33 54574.67 10629.00 54564.00C10629.00 54521.00 10629.00 54478.00 10629.00 54435.00C10618.33 54413.67 10607.67 54392.33 10597.00 54371.00C10597.12 54317.11 10596.77 54263.15 10597.17 54209.29C10607.94 54166.33 10618.31 54123.22 10629.33 54080.35C10639.88 54059.23 10650.44 54038.12 10661.00 54017.00C10650.33 54006.33 10639.67 53995.67 10629.00 53985.00C10650.67 53974.33 10672.33 53963.67 10694.00 53953.00C10704.67 53920.67 10715.33 53888.33 10726.00 53856.00C10736.67 53845.33 10747.33 53834.67 10758.00 53824.00C10758.22 53813.14 10757.57 53802.08 10758.33 53791.35C10768.88 53770.23 10779.44 53749.12 10790.00 53728.00C10790.00 53706.33 10790.00 53684.67 10790.00 53663.00C10811.33 53652.33 10832.67 53641.67 10854.00 53631.00C10854.31 53619.90 10853.38 53608.59 10854.47 53597.62C10865.32 53566.08 10876.16 53534.54 10887.00 53503.00C10887.00 53481.33 10887.00 53459.67 10887.00 53438.00C10908.33 53416.67 10929.67 53395.33 10951.00 53374.00C10951.00 53363.33 10951.00 53352.67 10951.00 53342.00C10972.33 53320.67 10993.67 53299.33 11015.00 53278.00C11015.00 53267.00 11015.00 53256.00 11015.00 53245.00C11025.67 53234.33 11036.33 53223.67 11047.00 53213.00C11047.00 53181.00 11047.00 53149.00 11047.00 53117.00C11036.33 53095.33 11025.67 53073.67 11015.00 53052.00C11025.67 53030.67 11036.33 53009.33 11047.00 52988.00C11047.00 52934.33 11047.00 52880.67 11047.00 52827.00C11036.33 52827.00 11025.67 52827.00 11015.00 52827.00C11025.67 52816.33 11036.33 52805.67 11047.00 52795.00C11025.67 52763.00 11004.33 52731.00 10983.00 52699.00C10983.00 52688.33 10983.00 52677.67 10983.00 52667.00C10972.33 52667.00 10961.67 52667.00 10951.00 52667.00C10951.00 52656.00 10951.00 52645.00 10951.00 52634.00C10972.33 52612.67 10993.67 52591.33 11015.00 52570.00C11025.67 52570.00 11036.33 52570.00 11047.00 52570.00C11058.00 52548.67 11069.00 52527.33 11080.00 52506.00C11101.33 52506.00 11122.67 52506.00 11144.00 52506.00C11144.00 52516.67 11144.00 52527.33 11144.00 52538.00C11176.00 52527.33 11208.00 52516.67 11240.00 52506.00C11250.67 52495.33 11261.33 52484.67 11272.00 52474.00C11283.00 52431.00 11294.00 52388.00 11305.00 52345.00C11326.33 52355.67 11347.67 52366.33 11369.00 52377.00C11390.46 52366.10 11412.28 52355.70 11433.51 52344.49C11454.68 52323.32 11475.84 52302.16 11497.00 52281.00C11508.00 52291.67 11519.00 52302.33 11530.00 52313.00C11540.71 52302.07 11551.94 52291.51 11562.32 52280.35C11572.88 52258.90 11583.44 52237.45 11594.00 52216.00C11615.33 52227.00 11636.67 52238.00 11658.00 52249.00C11658.00 52238.00 11658.00 52227.00 11658.00 52216.00C11668.67 52205.33 11679.33 52194.67 11690.00 52184.00C11679.33 52173.33 11668.67 52162.67 11658.00 52152.00C11658.00 52141.33 11658.00 52130.67 11658.00 52120.00C11679.67 52120.00 11701.33 52120.00 11723.00 52120.00C11723.00 52109.33 11723.00 52098.67 11723.00 52088.00C11744.33 52088.00 11765.67 52088.00 11787.00 52088.00C11787.00 52077.33 11787.00 52066.67 11787.00 52056.00C11819.00 52077.33 11851.00 52098.67 11883.00 52120.00C11904.67 52109.33 11926.33 52098.67 11948.00 52088.00C11958.86 52088.22 11969.92 52087.57 11980.65 52088.33C12001.77 52098.88 12022.88 52109.44 12044.00 52120.00C12054.67 52098.67 12065.33 52077.33 12076.00 52056.00C12086.67 52056.00 12097.33 52056.00 12108.00 52056.00C12108.00 52066.67 12108.00 52077.33 12108.00 52088.00C12130.22 52076.84 12152.84 52066.37 12174.81 52054.77C12206.21 52033.52 12237.60 52012.26 12269.00 51991.00C12269.00 51959.00 12269.00 51927.00 12269.00 51895.00C12279.67 51884.33 12290.33 51873.67 12301.00 51863.00C12301.00 51852.33 12301.00 51841.67 12301.00 51831.00C12290.33 51820.00 12279.67 51809.00 12269.00 51798.00C12290.46 51787.10 12312.27 51776.69 12333.52 51765.49C12344.35 51755.00 12355.17 51744.50 12366.00 51734.00C12387.33 51734.00 12408.67 51734.00 12430.00 51734.00C12472.76 51691.10 12515.99 51648.66 12559.00 51606.00C12591.00 51606.00 12623.00 51606.00 12655.00 51606.00C12665.67 51573.67 12676.33 51541.33 12687.00 51509.00C12708.33 51509.00 12729.67 51509.00 12751.00 51509.00C12751.00 51530.33 12751.00 51551.67 12751.00 51573.00C12762.00 51573.00 12773.00 51573.00 12784.00 51573.00C12794.67 51551.67 12805.33 51530.33 12816.00 51509.00C12826.67 51519.67 12837.33 51530.33 12848.00 51541.00C12848.00 51551.67 12848.00 51562.33 12848.00 51573.00C12858.67 51573.00 12869.33 51573.00 12880.00 51573.00C12880.00 51541.00 12880.00 51509.00 12880.00 51477.00C12912.33 51466.33 12944.67 51455.67 12977.00 51445.00C12977.00 51423.33 12977.00 51401.67 12977.00 51380.00C12966.00 51369.33 12955.00 51358.67 12944.00 51348.00C12944.00 51337.33 12944.00 51326.67 12944.00 51316.00C12965.67 51305.33 12987.33 51294.67 13009.00 51284.00C13009.00 51305.33 13009.00 51326.67 13009.00 51348.00C13019.67 51337.33 13030.33 51326.67 13041.00 51316.00C13051.67 51337.33 13062.33 51358.67 13073.00 51380.00C13083.67 51380.00 13094.33 51380.00 13105.00 51380.00C13105.00 51358.67 13105.00 51337.33 13105.00 51316.00C13126.33 51316.00 13147.67 51316.00 13169.00 51316.00C13169.00 51294.67 13169.00 51273.33 13169.00 51252.00C13158.33 51241.33 13147.67 51230.67 13137.00 51220.00C13147.67 51220.00 13158.33 51220.00 13169.00 51220.00C13180.00 51230.67 13191.00 51241.33 13202.00 51252.00C13223.33 51230.67 13244.67 51209.33 13266.00 51188.00C13287.33 51188.00 13308.67 51188.00 13330.00 51188.00C13330.00 51123.67 13330.00 51059.33 13330.00 50995.00C13340.65 50983.71 13352.04 50972.88 13362.24 50961.31C13373.16 50929.54 13384.08 50897.77 13395.00 50866.00C13427.00 50866.00 13459.00 50866.00 13491.00 50866.00C13512.33 50844.67 13533.67 50823.33 13555.00 50802.00C13576.67 50802.00 13598.33 50802.00 13620.00 50802.00C13620.00 50791.33 13620.00 50780.67 13620.00 50770.00C13609.00 50759.00 13598.00 50748.00 13587.00 50737.00C13619.33 50737.00 13651.67 50737.00 13684.00 50737.00C13694.67 50726.33 13705.33 50715.67 13716.00 50705.00C13759.00 50715.67 13802.00 50726.33 13845.00 50737.00C13834.33 50748.00 13823.67 50759.00 13813.00 50770.00C13813.00 50791.33 13813.00 50812.67 13813.00 50834.00C13834.33 50823.33 13855.67 50812.67 13877.00 50802.00C13898.33 50759.00 13919.67 50716.00 13941.00 50673.00C13951.67 50694.33 13962.33 50715.67 13973.00 50737.00C13995.40 50726.19 14017.49 50714.66 14040.07 50704.31C14071.38 50693.87 14102.69 50683.44 14134.00 50673.00C14134.00 50651.67 14134.00 50630.33 14134.00 50609.00C14144.67 50598.33 14155.33 50587.67 14166.00 50577.00C14187.67 50598.33 14209.33 50619.67 14231.00 50641.00C14241.67 50630.33 14252.33 50619.67 14263.00 50609.00C14252.33 50598.33 14241.67 50587.67 14231.00 50577.00C14273.67 50555.33 14316.33 50533.67 14359.00 50512.00C14369.67 50512.00 14380.33 50512.00 14391.00 50512.00C14391.00 50501.33 14391.00 50490.67 14391.00 50480.00C14412.79 50469.10 14434.95 50458.71 14456.51 50447.49C14467.01 50436.99 14477.50 50426.50 14488.00 50416.00C14509.33 50426.67 14530.67 50437.33 14552.00 50448.00C14595.00 50416.00 14638.00 50384.00 14681.00 50352.00C14691.67 50330.33 14702.33 50308.67 14713.00 50287.00C14734.33 50276.33 14755.67 50265.67 14777.00 50255.00C14766.33 50244.33 14755.67 50233.67 14745.00 50223.00C14777.00 50190.67 14809.00 50158.33 14841.00 50126.00C14873.33 50115.33 14905.67 50104.67 14938.00 50094.00C14948.67 50072.67 14959.33 50051.33 14970.00 50030.00C14970.00 50008.67 14970.00 49987.33 14970.00 49966.00C15002.33 49976.67 15034.67 49987.33 15067.00 49998.00C15088.33 50019.33 15109.67 50040.67 15131.00 50062.00C15131.00 50030.00 15131.00 49998.00 15131.00 49966.00C15163.00 49966.00 15195.00 49966.00 15227.00 49966.00C15237.91 49944.21 15248.28 49922.04 15259.52 49900.49C15270.35 49890.00 15281.17 49879.50 15292.00 49869.00C15302.67 49879.67 15313.33 49890.33 15324.00 49901.00C15356.00 49890.33 15388.00 49879.67 15420.00 49869.00C15409.33 49858.33 15398.67 49847.67 15388.00 49837.00C15398.67 49826.33 15409.33 49815.67 15420.00 49805.00C15409.33 49794.33 15398.67 49783.67 15388.00 49773.00C15398.67 49762.33 15409.33 49751.67 15420.00 49741.00C15430.67 49741.00 15441.33 49741.00 15452.00 49741.00C15462.67 49730.33 15473.33 49719.67 15484.00 49709.00C15484.00 49698.00 15484.00 49687.00 15484.00 49676.00C15495.00 49676.00 15506.00 49676.00 15517.00 49676.00C15516.78 49665.14 15517.45 49654.07 15516.67 49643.35C15505.78 49622.24 15494.89 49601.12 15484.00 49580.00C15516.33 49569.33 15548.67 49558.67 15581.00 49548.00C15581.00 49569.33 15581.00 49590.67 15581.00 49612.00C15591.67 49601.33 15602.33 49590.67 15613.00 49580.00C15613.00 49558.67 15613.00 49537.33 15613.00 49516.00C15623.67 49526.67 15634.33 49537.33 15645.00 49548.00C15655.67 49537.33 15666.33 49526.67 15677.00 49516.00C15677.00 49505.00 15677.00 49494.00 15677.00 49483.00C15688.00 49472.33 15699.00 49461.67 15710.00 49451.00C15731.33 49461.67 15752.67 49472.33 15774.00 49483.00C15795.60 49461.62 15816.83 49439.73 15838.65 49418.68C15860.36 49408.11 15881.92 49397.15 15903.71 49386.82C15946.34 49376.06 15989.11 49365.69 16031.65 49354.67C16052.77 49344.12 16073.88 49333.56 16095.00 49323.00C16116.67 49323.00 16138.33 49323.00 16160.00 49323.00C16170.67 49312.00 16181.33 49301.00 16192.00 49290.00C16202.67 49311.67 16213.33 49333.33 16224.00 49355.00C16224.00 49365.67 16224.00 49376.33 16224.00 49387.00C16245.33 49387.00 16266.67 49387.00 16288.00 49387.00C16298.67 49376.33 16309.33 49365.67 16320.00 49355.00C16320.00 49322.67 16320.00 49290.33 16320.00 49258.00C16331.00 49247.33 16342.00 49236.67 16353.00 49226.00C16363.67 49247.33 16374.33 49268.67 16385.00 49290.00C16385.00 49311.67 16385.00 49333.33 16385.00 49355.00C16406.33 49355.00 16427.67 49355.00 16449.00 49355.00C16470.33 49376.33 16491.67 49397.67 16513.00 49419.00C16524.19 49418.78 16535.59 49419.44 16546.65 49418.67C16567.77 49408.12 16588.88 49397.56 16610.00 49387.00C16642.00 49397.67 16674.00 49408.33 16706.00 49419.00C16727.67 49397.67 16749.33 49376.33 16771.00 49355.00C16781.67 49376.33 16792.33 49397.67 16803.00 49419.00C16845.67 49387.00 16888.33 49355.00 16931.00 49323.00C16920.33 49312.00 16909.67 49301.00 16899.00 49290.00C16920.40 49268.40 16942.08 49247.08 16964.00 49226.00C16963.84 49247.55 16964.31 49269.20 16963.76 49290.69C16952.84 49322.79 16941.92 49354.90 16931.00 49387.00C16909.67 49397.67 16888.33 49408.33 16867.00 49419.00C16867.00 49429.67 16867.00 49440.33 16867.00 49451.00C16888.46 49461.90 16910.28 49472.30 16931.51 49483.51C16942.34 49494.34 16953.17 49505.17 16964.00 49516.00C16985.33 49516.00 17006.67 49516.00 17028.00 49516.00C17060.15 49494.13 17092.51 49472.53 17124.52 49450.49C17146.06 49429.06 17168.11 49408.01 17189.32 49386.35C17210.55 49343.57 17231.78 49300.78 17253.00 49258.00C17274.33 49268.67 17295.67 49279.33 17317.00 49290.00C17317.00 49268.67 17317.00 49247.33 17317.00 49226.00C17327.67 49215.33 17338.33 49204.67 17349.00 49194.00C17371.23 49205.15 17393.83 49215.65 17415.82 49227.21C17447.21 49248.14 17478.61 49269.07 17510.00 49290.00C17520.67 49290.00 17531.33 49290.00 17542.00 49290.00C17542.00 49279.33 17542.00 49268.67 17542.00 49258.00C17520.67 49236.67 17499.33 49215.33 17478.00 49194.00C17478.00 49162.00 17478.00 49130.00 17478.00 49098.00C17499.46 49108.90 17521.27 49119.31 17542.52 49130.51C17553.35 49141.00 17564.17 49151.50 17575.00 49162.00C17585.67 49151.33 17596.33 49140.67 17607.00 49130.00C17607.00 49119.33 17607.00 49108.67 17607.00 49098.00C17617.67 49087.00 17628.33 49076.00 17639.00 49065.00C17660.33 49065.00 17681.67 49065.00 17703.00 49065.00C17724.33 49086.67 17745.67 49108.33 17767.00 49130.00C17778.00 49130.00 17789.00 49130.00 17800.00 49130.00C17810.67 49140.67 17821.33 49151.33 17832.00 49162.00C17832.00 49172.67 17832.00 49183.33 17832.00 49194.00C17853.33 49194.00 17874.67 49194.00 17896.00 49194.00C17928.20 49150.85 17960.18 49107.51 17992.52 49064.49C18014.01 49043.33 18035.51 49022.16 18057.00 49001.00C18078.33 49022.33 18099.67 49043.67 18121.00 49065.00C18142.46 49054.10 18164.28 49043.70 18185.51 49032.49C18196.01 49021.99 18206.51 49011.50 18217.00 49001.00C18228.00 49011.67 18239.00 49022.33 18250.00 49033.00C18250.00 49054.67 18250.00 49076.33 18250.00 49098.00C18292.67 49098.00 18335.33 49098.00 18378.00 49098.00C18389.00 49108.67 18400.00 49119.33 18411.00 49130.00C18411.00 49140.67 18411.00 49151.33 18411.00 49162.00C18421.67 49151.33 18432.33 49140.67 18443.00 49130.00C18443.00 49108.33 18443.00 49086.67 18443.00 49065.00C18421.33 49054.33 18399.67 49043.67 18378.00 49033.00C18367.33 49011.67 18356.67 48990.33 18346.00 48969.00C18367.67 48969.00 18389.33 48969.00 18411.00 48969.00C18432.33 49001.00 18453.67 49033.00 18475.00 49065.00C18496.33 49076.00 18517.67 49087.00 18539.00 49098.00C18571.15 49065.48 18602.84 49032.50 18636.00 49001.00C18624.85 48958.13 18614.07 48915.13 18602.68 48872.35C18592.12 48850.90 18581.56 48829.45 18571.00 48808.00C18582.10 48808.30 18593.40 48807.40 18604.38 48808.46C18636.26 48818.97 18668.13 48829.49 18700.00 48840.00C18721.33 48829.33 18742.67 48818.67 18764.00 48808.00C18774.67 48808.00 18785.33 48808.00 18796.00 48808.00C18796.00 48840.33 18796.00 48872.67 18796.00 48905.00C18806.67 48905.00 18817.33 48905.00 18828.00 48905.00C18839.00 48862.00 18850.00 48819.00 18861.00 48776.00C18871.67 48776.00 18882.33 48776.00 18893.00 48776.00C18903.67 48786.67 18914.33 48797.33 18925.00 48808.00C18914.33 48829.67 18903.67 48851.33 18893.00 48873.00C18903.67 48915.67 18914.33 48958.33 18925.00 49001.00C18946.33 48979.67 18967.67 48958.33 18989.00 48937.00C18989.00 48915.67 18989.00 48894.33 18989.00 48873.00C18999.67 48862.00 19010.33 48851.00 19021.00 48840.00C19053.33 48840.00 19085.67 48840.00 19118.00 48840.00C19118.00 48861.67 19118.00 48883.33 19118.00 48905.00C19139.33 48894.33 19160.67 48883.67 19182.00 48873.00C19171.33 48851.33 19160.67 48829.67 19150.00 48808.00C19182.00 48808.00 19214.00 48808.00 19246.00 48808.00C19278.33 48851.00 19310.67 48894.00 19343.00 48937.00C19353.67 48915.67 19364.33 48894.33 19375.00 48873.00C19375.00 48851.33 19375.00 48829.67 19375.00 48808.00C19385.93 48797.29 19396.49 48786.06 19407.65 48775.68C19429.10 48765.12 19450.55 48754.56 19472.00 48744.00C19482.67 48754.67 19493.33 48765.33 19504.00 48776.00C19493.33 48797.33 19482.67 48818.67 19472.00 48840.00C19482.67 48851.00 19493.33 48862.00 19504.00 48873.00C19536.00 48851.33 19568.00 48829.67 19600.00 48808.00C19600.00 48786.67 19600.00 48765.33 19600.00 48744.00C19621.33 48744.00 19642.67 48744.00 19664.00 48744.00C19653.33 48776.00 19642.67 48808.00 19632.00 48840.00C19653.67 48851.00 19675.33 48862.00 19697.00 48873.00C19707.67 48873.00 19718.33 48873.00 19729.00 48873.00C19739.67 48851.33 19750.33 48829.67 19761.00 48808.00C19814.67 48808.00 19868.33 48808.00 19922.00 48808.00C19932.67 48786.67 19943.33 48765.33 19954.00 48744.00C19943.10 48722.54 19932.70 48700.72 19921.49 48679.49C19910.66 48668.66 19899.83 48657.83 19889.00 48647.00C19889.00 48636.33 19889.00 48625.67 19889.00 48615.00C19910.79 48625.91 19932.97 48636.28 19954.51 48647.52C19965.05 48658.61 19976.08 48669.35 19986.33 48680.65C19996.88 48701.77 20007.44 48722.88 20018.00 48744.00C20050.33 48754.67 20082.67 48765.33 20115.00 48776.00C20125.67 48786.67 20136.33 48797.33 20147.00 48808.00C20157.67 48786.67 20168.33 48765.33 20179.00 48744.00C20179.00 48733.33 20179.00 48722.67 20179.00 48712.00C20189.67 48701.33 20200.33 48690.67 20211.00 48680.00C20221.67 48680.00 20232.33 48680.00 20243.00 48680.00C20253.65 48668.71 20265.04 48657.88 20275.24 48646.31C20286.16 48614.54 20297.08 48582.77 20308.00 48551.00C20330.06 48540.20 20351.81 48528.63 20374.07 48518.31C20405.38 48507.87 20436.69 48497.44 20468.00 48487.00C20457.33 48454.67 20446.67 48422.33 20436.00 48390.00C20446.93 48379.29 20457.49 48368.07 20468.65 48357.68C20511.44 48336.45 20554.22 48315.22 20597.00 48294.00C20575.40 48260.98 20553.26 48228.27 20532.00 48195.06C20521.33 48174.37 20510.67 48153.69 20500.00 48133.00C20521.67 48133.00 20543.33 48133.00 20565.00 48133.00C20586.33 48143.67 20607.67 48154.33 20629.00 48165.00C20650.33 48154.33 20671.67 48143.67 20693.00 48133.00C20693.00 48122.33 20693.00 48111.67 20693.00 48101.00C20703.67 48090.33 20714.33 48079.67 20725.00 48069.00C20714.33 48047.33 20703.67 48025.67 20693.00 48004.00C20703.67 47972.00 20714.33 47940.00 20725.00 47908.00C20736.04 47897.07 20747.62 47886.53 20758.32 47875.35C20768.88 47853.90 20779.44 47832.45 20790.00 47811.00C20822.00 47822.00 20854.00 47833.00 20886.00 47844.00C20907.88 47811.53 20929.46 47778.81 20951.51 47746.49C20962.01 47735.99 20972.51 47725.50 20983.00 47715.00C21015.00 47715.00 21047.00 47715.00 21079.00 47715.00C21111.33 47747.00 21143.67 47779.00 21176.00 47811.00C21208.00 47822.00 21240.00 47833.00 21272.00 47844.00C21282.67 47844.00 21293.33 47844.00 21304.00 47844.00C21314.67 47865.33 21325.33 47886.67 21336.00 47908.00C21357.67 47908.00 21379.33 47908.00 21401.00 47908.00C21411.67 47886.67 21422.33 47865.33 21433.00 47844.00C21433.00 47769.00 21433.00 47694.00 21433.00 47619.00C21454.38 47640.60 21476.26 47661.83 21497.33 47683.65C21507.88 47704.77 21518.44 47725.88 21529.00 47747.00C21529.00 47682.67 21529.00 47618.33 21529.00 47554.00C21572.00 47554.00 21615.00 47554.00 21658.00 47554.00C21658.00 47575.67 21658.00 47597.33 21658.00 47619.00C21636.67 47661.67 21615.33 47704.33 21594.00 47747.00C21594.00 47768.33 21594.00 47789.67 21594.00 47811.00C21615.08 47832.92 21636.40 47854.60 21658.00 47876.00C21680.06 47865.19 21701.82 47853.65 21724.07 47843.30C21756.12 47832.25 21788.38 47821.70 21820.30 47810.35C21862.54 47789.23 21904.77 47768.12 21947.00 47747.00C21979.06 47714.72 22011.61 47682.94 22044.00 47651.00C22033.33 47629.33 22022.67 47607.67 22012.00 47586.00C22065.33 47597.00 22118.67 47608.00 22172.00 47619.00C22183.00 47651.00 22194.00 47683.00 22205.00 47715.00C22183.33 47758.00 22161.67 47801.00 22140.00 47844.00C22150.67 47854.67 22161.33 47865.33 22172.00 47876.00C22193.67 47876.00 22215.33 47876.00 22237.00 47876.00C22247.67 47833.00 22258.33 47790.00 22269.00 47747.00C22279.67 47736.33 22290.33 47725.67 22301.00 47715.00C22333.00 47736.33 22365.00 47757.67 22397.00 47779.00C22408.00 47779.00 22419.00 47779.00 22430.00 47779.00C22430.00 47757.67 22430.00 47736.33 22430.00 47715.00C22462.00 47715.00 22494.00 47715.00 22526.00 47715.00C22536.67 47704.33 22547.33 47693.67 22558.00 47683.00C22536.67 47661.67 22515.33 47640.33 22494.00 47619.00C22515.33 47608.00 22536.67 47597.00 22558.00 47586.00C22579.67 47597.00 22601.33 47608.00 22623.00 47619.00C22665.67 47619.00 22708.33 47619.00 22751.00 47619.00C22761.67 47608.00 22772.33 47597.00 22783.00 47586.00C22804.67 47597.00 22826.33 47608.00 22848.00 47619.00C22880.00 47683.00 22912.00 47747.00 22944.00 47811.00C22965.33 47822.00 22986.67 47833.00 23008.00 47844.00C23019.23 47822.21 23029.97 47800.05 23041.51 47778.49C23052.01 47767.99 23062.51 47757.50 23073.00 47747.00C23062.33 47725.67 23051.67 47704.33 23041.00 47683.00C23051.67 47672.33 23062.33 47661.67 23073.00 47651.00C23094.60 47672.38 23115.83 47694.26 23137.65 47715.33C23158.89 47726.12 23180.50 47736.41 23201.51 47747.51C23212.01 47758.01 23222.51 47768.50 23233.00 47779.00C23233.10 47822.23 23232.81 47865.51 23233.15 47908.71C23244.10 47962.14 23255.05 48015.57 23266.00 48069.00C23254.71 48079.65 23243.88 48091.04 23232.31 48101.23C23200.54 48111.82 23168.77 48122.41 23137.00 48133.00C23137.00 48154.33 23137.00 48175.67 23137.00 48197.00C23180.00 48229.33 23223.00 48261.67 23266.00 48294.00C23244.33 48315.33 23222.67 48336.67 23201.00 48358.00C23222.88 48357.82 23244.89 48358.36 23266.68 48357.73C23319.78 48336.49 23372.89 48315.24 23426.00 48294.00C23426.00 48304.67 23426.00 48315.33 23426.00 48326.00C23415.07 48336.71 23404.51 48347.93 23393.35 48358.33C23372.23 48368.88 23351.12 48379.44 23330.00 48390.00C23340.67 48411.67 23351.33 48433.33 23362.00 48455.00C23383.33 48465.67 23404.67 48476.33 23426.00 48487.00C23458.33 48487.00 23490.67 48487.00 23523.00 48487.00C23533.67 48497.67 23544.33 48508.33 23555.00 48519.00C23565.67 48508.33 23576.33 48497.67 23587.00 48487.00C23597.67 48497.67 23608.33 48508.33 23619.00 48519.00C23629.67 48572.67 23640.33 48626.33 23651.00 48680.00C23662.00 48690.67 23673.00 48701.33 23684.00 48712.00C23694.86 48711.78 23705.92 48712.43 23716.65 48711.67C23737.77 48701.12 23758.88 48690.56 23780.00 48680.00C23780.00 48658.33 23780.00 48636.67 23780.00 48615.00C23790.96 48604.36 23801.44 48592.94 23812.69 48582.77C23844.79 48572.18 23876.90 48561.59 23909.00 48551.00C23909.00 48540.33 23909.00 48529.67 23909.00 48519.00C23876.67 48497.67 23844.33 48476.33 23812.00 48455.00C23833.67 48412.00 23855.33 48369.00 23877.00 48326.00C23887.67 48315.33 23898.33 48304.67 23909.00 48294.00C23930.46 48304.90 23952.28 48315.30 23973.51 48326.51C23984.01 48337.01 23994.51 48347.50 24005.00 48358.00C24026.46 48347.10 24048.27 48336.69 24069.52 48325.49C24080.35 48315.00 24091.17 48304.50 24102.00 48294.00C24102.00 48272.33 24102.00 48250.67 24102.00 48229.00C24112.67 48261.33 24123.33 48293.67 24134.00 48326.00C24144.67 48336.67 24155.33 48347.33 24166.00 48358.00C24209.00 48358.00 24252.00 48358.00 24295.00 48358.00C24273.33 48379.33 24251.67 48400.67 24230.00 48422.00C24240.67 48454.33 24251.33 48486.67 24262.00 48519.00C24273.44 48519.31 24285.07 48518.38 24296.38 48519.46C24327.92 48529.97 24359.46 48540.49 24391.00 48551.00C24401.67 48561.67 24412.33 48572.33 24423.00 48583.00C24423.00 48604.33 24423.00 48625.67 24423.00 48647.00C24433.86 48646.78 24444.92 48647.43 24455.65 48646.68C24541.21 48604.32 24626.65 48561.77 24712.00 48519.00C24744.33 48476.00 24776.67 48433.00 24809.00 48390.00C24819.62 48336.09 24830.62 48282.21 24841.00 48228.27C24841.00 48164.51 24841.00 48100.76 24841.00 48037.00C24862.33 48015.33 24883.67 47993.67 24905.00 47972.00C24916.00 47972.00 24927.00 47972.00 24938.00 47972.00C25013.45 47530.28 25088.74 47088.53 25164.29 46646.83C25241.04 46218.77 25317.99 45790.76 25394.62 45362.68C25628.31 44044.68 25862.09 42726.70 26095.73 41408.69C26218.07 40686.14 26340.58 39963.63 26462.81 39241.07C26608.48 38377.28 26754.03 37513.47 26899.77 36649.69C27006.51 36051.13 27113.26 35452.57 27220.00 34854.00C27209.33 34800.33 27198.67 34746.67 27188.00 34693.00C27198.90 34671.54 27209.30 34649.72 27220.51 34628.49C27242.01 34606.99 27263.51 34585.50 27285.00 34564.00C27285.00 34478.33 27285.00 34392.67 27285.00 34307.00C27295.59 34274.75 27306.79 34242.59 27317.00 34210.27C27317.00 34188.85 27317.00 34167.42 27317.00 34146.00C27338.82 34135.25 27360.43 34123.97 27382.38 34113.54C27414.26 34103.03 27446.13 34092.51 27478.00 34082.00C27478.00 34060.67 27478.00 34039.33 27478.00 34018.00C27456.33 33975.00 27434.67 33932.00 27413.00 33889.00C27413.00 33814.00 27413.00 33739.00 27413.00 33664.00C27391.66 33620.75 27369.92 33577.64 27348.82 33534.29C27338.22 33491.86 27327.61 33449.43 27317.00 33407.00C27327.95 33374.26 27338.38 33341.30 27349.65 33308.70C27370.77 33266.46 27391.88 33224.23 27413.00 33182.00C27413.00 33139.00 27413.00 33096.00 27413.00 33053.00C27434.67 33031.67 27456.33 33010.33 27478.00 32989.00C27478.00 32935.33 27478.00 32881.67 27478.00 32828.00C27434.62 32774.03 27391.55 32719.77 27347.97 32665.97C27337.65 32655.65 27327.32 32645.32 27317.00 32635.00C27327.67 32592.00 27338.33 32549.00 27349.00 32506.00C27338.07 32495.29 27327.51 32484.07 27316.35 32473.67C27295.23 32463.12 27274.12 32452.56 27253.00 32442.00C27253.00 32431.33 27253.00 32420.67 27253.00 32410.00C27263.67 32410.00 27274.33 32410.00 27285.00 32410.00C27295.67 32388.67 27306.33 32367.33 27317.00 32346.00C27338.33 32346.00 27359.67 32346.00 27381.00 32346.00C27370.33 32324.33 27359.67 32302.67 27349.00 32281.00C27327.67 32270.33 27306.33 32259.67 27285.00 32249.00C27263.33 32259.67 27241.67 32270.33 27220.00 32281.00C27198.67 32249.00 27177.33 32217.00 27156.00 32185.00C27156.00 32163.67 27156.00 32142.33 27156.00 32121.00C27124.00 32088.67 27092.00 32056.33 27060.00 32024.00C27038.21 32013.10 27016.04 32002.71 26994.49 31991.49C26983.99 31980.99 26973.49 31970.49 26963.00 31960.00C26941.67 31960.00 26920.33 31960.00 26899.00 31960.00C26888.33 31949.33 26877.67 31938.67 26867.00 31928.00C26867.00 31842.00 26867.00 31756.00 26867.00 31670.00C26845.67 31648.67 26824.33 31627.33 26803.00 31606.00C26792.00 31606.00 26781.00 31606.00 26770.00 31606.00C26727.33 31574.00 26684.67 31542.00 26642.00 31510.00C26663.33 31477.67 26684.67 31445.33 26706.00 31413.00C26706.00 31391.67 26706.00 31370.33 26706.00 31349.00C26684.67 31338.33 26663.33 31327.67 26642.00 31317.00C26631.33 31317.00 26620.67 31317.00 26610.00 31317.00C26599.00 31295.67 26588.00 31274.33 26577.00 31253.00C26534.33 31220.67 26491.67 31188.33 26449.00 31156.00C26459.67 31145.33 26470.33 31134.67 26481.00 31124.00C26459.67 31113.33 26438.33 31102.67 26417.00 31092.00C26427.67 31081.33 26438.33 31070.67 26449.00 31060.00C26427.33 31060.00 26405.67 31060.00 26384.00 31060.00C26395.00 31038.33 26406.00 31016.67 26417.00 30995.00C26417.00 30984.33 26417.00 30973.67 26417.00 30963.00C26427.67 30952.33 26438.33 30941.67 26449.00 30931.00C26470.33 30931.00 26491.67 30931.00 26513.00 30931.00C26502.33 30909.67 26491.67 30888.33 26481.00 30867.00C26491.97 30855.31 26503.76 30844.29 26514.21 30832.18C26535.17 30800.53 26556.56 30769.10 26577.24 30737.31C26588.43 30705.13 26599.17 30672.76 26610.64 30640.69C26631.56 30598.03 26652.68 30555.46 26674.00 30513.00C26663.33 30513.00 26652.67 30513.00 26642.00 30513.00C26642.00 30491.67 26642.00 30470.33 26642.00 30449.00C26631.33 30438.33 26620.67 30427.67 26610.00 30417.00C26599.00 30417.00 26588.00 30417.00 26577.00 30417.00C26566.33 30395.33 26555.67 30373.67 26545.00 30352.00C26523.67 30341.33 26502.33 30330.67 26481.00 30320.00C26491.75 30298.18 26503.03 30276.57 26513.46 30254.62C26523.97 30222.74 26534.49 30190.87 26545.00 30159.00C26523.46 30126.86 26502.21 30094.47 26480.49 30062.49C26469.99 30051.99 26459.49 30041.49 26449.00 30031.00C26459.67 29988.00 26470.33 29945.00 26481.00 29902.00C26459.67 29880.67 26438.33 29859.33 26417.00 29838.00C26384.67 29838.00 26352.33 29838.00 26320.00 29838.00C26320.00 29805.67 26320.00 29773.33 26320.00 29741.00C26276.43 29729.96 26232.70 29719.47 26189.23 29708.09C26157.82 29697.72 26126.41 29687.36 26095.00 29677.00C26095.00 29666.33 26095.00 29655.67 26095.00 29645.00C26052.13 29634.18 26009.12 29623.74 25966.35 29612.68C25944.78 29601.88 25922.82 29591.61 25901.49 29580.48C25890.95 29569.39 25879.92 29558.65 25869.67 29547.35C25859.12 29526.23 25848.56 29505.12 25838.00 29484.00C25827.33 29484.00 25816.67 29484.00 25806.00 29484.00C25784.33 29452.00 25762.67 29420.00 25741.00 29388.00C25719.67 29377.00 25698.33 29366.00 25677.00 29355.00C25655.67 29355.00 25634.33 29355.00 25613.00 29355.00C25613.00 29333.67 25613.00 29312.33 25613.00 29291.00C25580.41 29280.41 25547.92 29269.21 25515.27 29259.00C25494.18 29259.00 25473.09 29259.00 25452.00 29259.00C25420.00 29194.67 25388.00 29130.33 25356.00 29066.00C25334.33 29076.67 25312.67 29087.33 25291.00 29098.00C25248.33 29087.33 25205.67 29076.67 25163.00 29066.00C25152.33 29076.67 25141.67 29087.33 25131.00 29098.00C25087.85 29065.80 25044.51 29033.82 25001.49 29001.48C24980.27 28979.73 24958.58 28958.32 24937.67 28936.35C24926.78 28915.24 24915.89 28894.12 24905.00 28873.00C24894.33 28873.00 24883.67 28873.00 24873.00 28873.00C24862.10 28851.54 24851.70 28829.72 24840.49 28808.49C24829.51 28797.13 24817.71 28786.48 24807.25 28774.67C24775.30 28732.30 24743.56 28689.74 24711.49 28647.49C24700.95 28636.72 24689.90 28626.33 24679.67 28615.35C24669.12 28594.23 24658.56 28573.12 24648.00 28552.00C24562.02 28476.62 24475.83 28401.47 24389.99 28325.95C24379.66 28315.30 24369.33 28304.65 24359.00 28294.00C24359.00 28251.33 24359.00 28208.67 24359.00 28166.00C24369.81 28143.60 24381.34 28121.51 24391.69 28098.93C24402.13 28067.62 24412.56 28036.31 24423.00 28005.00C24412.36 27822.18 24401.50 27639.37 24391.00 27456.54C24391.07 27327.72 24390.86 27198.90 24391.10 27070.09C24401.71 26769.99 24412.52 26469.91 24423.00 26169.81C24423.00 25666.88 24423.00 25163.94 24423.00 24661.00C24444.33 24661.00 24465.67 24661.00 24487.00 24661.00C24498.23 24682.47 24508.99 24704.26 24520.51 24725.52C24531.01 24736.35 24541.50 24747.17 24552.00 24758.00C24573.33 24758.00 24594.67 24758.00 24616.00 24758.00C24626.71 24746.74 24637.92 24735.83 24648.33 24724.35C24658.88 24703.23 24669.44 24682.12 24680.00 24661.00C24658.67 24639.67 24637.33 24618.33 24616.00 24597.00C24659.00 24597.00 24702.00 24597.00 24745.00 24597.00C24755.67 24618.33 24766.33 24639.67 24777.00 24661.00C24819.67 24671.67 24862.33 24682.33 24905.00 24693.00C24926.76 24671.43 24948.83 24650.12 24970.40 24628.39C24991.60 24596.60 25012.80 24564.80 25034.00 24533.00C25044.67 24543.67 25055.33 24554.33 25066.00 24565.00C25087.67 24554.33 25109.33 24543.67 25131.00 24533.00C25141.67 24554.33 25152.33 24575.67 25163.00 24597.00C25205.87 24586.18 25248.88 24575.74 25291.65 24564.68C25313.10 24554.12 25334.55 24543.56 25356.00 24533.00C25366.67 24533.00 25377.33 24533.00 25388.00 24533.00C25398.67 24522.00 25409.33 24511.00 25420.00 24500.00C25441.33 24511.00 25462.67 24522.00 25484.00 24533.00C25494.67 24533.00 25505.33 24533.00 25516.00 24533.00C25516.00 24554.33 25516.00 24575.67 25516.00 24597.00C25548.33 24575.67 25580.67 24554.33 25613.00 24533.00C25623.67 24511.33 25634.33 24489.67 25645.00 24468.00C25677.00 24457.33 25709.00 24446.67 25741.00 24436.00C25762.67 24403.67 25784.33 24371.33 25806.00 24339.00C25827.33 24360.67 25848.67 24382.33 25870.00 24404.00C25891.33 24393.33 25912.67 24382.67 25934.00 24372.00C25945.00 24329.00 25956.00 24286.00 25967.00 24243.00C25988.33 24232.33 26009.67 24221.67 26031.00 24211.00C26052.33 24211.00 26073.67 24211.00 26095.00 24211.00C26095.00 24189.67 26095.00 24168.33 26095.00 24147.00C26105.67 24136.00 26116.33 24125.00 26127.00 24114.00C26170.00 24125.00 26213.00 24136.00 26256.00 24147.00C26266.86 24158.13 26278.32 24168.78 26288.81 24180.21C26309.87 24211.81 26330.94 24243.40 26352.00 24275.00C26362.67 24275.00 26373.33 24275.00 26384.00 24275.00C26395.00 24285.67 26406.00 24296.33 26417.00 24307.00C26438.33 24307.00 26459.67 24307.00 26481.00 24307.00C26481.00 24296.33 26481.00 24285.67 26481.00 24275.00C26502.33 24275.00 26523.67 24275.00 26545.00 24275.00C26545.00 24243.00 26545.00 24211.00 26545.00 24179.00C26588.00 24157.33 26631.00 24135.67 26674.00 24114.00C26674.00 24092.67 26674.00 24071.33 26674.00 24050.00C26727.67 24050.00 26781.33 24050.00 26835.00 24050.00C26835.00 24028.67 26835.00 24007.33 26835.00 23986.00C26845.67 23964.67 26856.33 23943.33 26867.00 23922.00C26888.33 23922.00 26909.67 23922.00 26931.00 23922.00C26941.90 23900.21 26952.29 23878.04 26963.51 23856.49C26974.30 23846.01 26984.61 23834.76 26995.69 23824.77C27028.05 23814.26 27060.31 23803.13 27092.73 23793.00C27103.15 23793.00 27113.58 23793.00 27124.00 23793.00C27134.71 23803.93 27145.93 23814.49 27156.33 23825.65C27166.88 23846.77 27177.44 23867.88 27188.00 23889.00C27209.67 23889.00 27231.33 23889.00 27253.00 23889.00C27263.67 23900.00 27274.33 23911.00 27285.00 23922.00C27285.00 23943.33 27285.00 23964.67 27285.00 23986.00C27296.13 23996.86 27306.78 24008.32 27318.21 24018.81C27349.81 24039.87 27381.40 24060.94 27413.00 24082.00C27413.00 24103.67 27413.00 24125.33 27413.00 24147.00C27499.01 24232.66 27585.24 24318.09 27671.00 24404.00C27692.60 24382.60 27713.92 24360.92 27735.00 24339.00C27735.00 24317.67 27735.00 24296.33 27735.00 24275.00C27767.00 24285.67 27799.00 24296.33 27831.00 24307.00C27852.67 24296.33 27874.33 24285.67 27896.00 24275.00C27906.67 24253.67 27917.33 24232.33 27928.00 24211.00C27949.33 24221.67 27970.67 24232.33 27992.00 24243.00C27981.33 24253.67 27970.67 24264.33 27960.00 24275.00C27970.67 24307.33 27981.33 24339.67 27992.00 24372.00C27981.33 24393.33 27970.67 24414.67 27960.00 24436.00C28024.33 24436.00 28088.67 24436.00 28153.00 24436.00C28174.33 24425.33 28195.67 24414.67 28217.00 24404.00C28217.00 24414.67 28217.00 24425.33 28217.00 24436.00C28260.00 24425.33 28303.00 24414.67 28346.00 24404.00C28367.33 24414.67 28388.67 24425.33 28410.00 24436.00C28410.00 24393.00 28410.00 24350.00 28410.00 24307.00C28420.67 24296.33 28431.33 24285.67 28442.00 24275.00C28442.00 24253.67 28442.00 24232.33 28442.00 24211.00C28463.67 24200.33 28485.33 24189.67 28507.00 24179.00C28517.67 24189.67 28528.33 24200.33 28539.00 24211.00C28560.33 24211.00 28581.67 24211.00 28603.00 24211.00C28624.33 24221.67 28645.67 24232.33 28667.00 24243.00C28688.67 24243.00 28710.33 24243.00 28732.00 24243.00C28742.67 24253.67 28753.33 24264.33 28764.00 24275.00C28774.67 24275.00 28785.33 24275.00 28796.00 24275.00C28806.67 24253.67 28817.33 24232.33 28828.00 24211.00C28774.33 24125.33 28720.67 24039.67 28667.00 23954.00C28634.53 23932.17 28602.33 23909.90 28569.70 23888.35C28548.67 23877.67 28527.29 23867.47 28506.48 23856.49C28495.65 23845.99 28484.83 23835.50 28474.00 23825.00C28474.00 23793.00 28474.00 23761.00 28474.00 23729.00C28495.67 23707.33 28517.33 23685.67 28539.00 23664.00C28571.00 23664.00 28603.00 23664.00 28635.00 23664.00C28645.67 23632.00 28656.33 23600.00 28667.00 23568.00C28656.33 23525.00 28645.67 23482.00 28635.00 23439.00C28624.29 23428.07 28613.07 23417.51 28602.67 23406.35C28592.12 23385.23 28581.56 23364.12 28571.00 23343.00C28571.00 23310.67 28571.00 23278.33 28571.00 23246.00C28592.33 23235.33 28613.67 23224.67 28635.00 23214.00C28656.67 23214.00 28678.33 23214.00 28700.00 23214.00C28700.22 23203.14 28699.56 23192.08 28700.33 23181.35C28710.88 23160.23 28721.44 23139.12 28732.00 23118.00C28710.33 23096.33 28688.67 23074.67 28667.00 23053.00C28656.17 23052.73 28645.02 23053.54 28634.39 23052.60C28602.60 23031.40 28570.80 23010.20 28539.00 22989.00C28517.33 22989.00 28495.67 22989.00 28474.00 22989.00C28474.00 22957.00 28474.00 22925.00 28474.00 22893.00C28463.33 22871.33 28452.67 22849.67 28442.00 22828.00C28452.96 22817.36 28463.44 22805.94 28474.69 22795.77C28506.79 22785.18 28538.90 22774.59 28571.00 22764.00C28560.33 22742.67 28549.67 22721.33 28539.00 22700.00C28485.33 22678.33 28431.67 22656.67 28378.00 22635.00C28356.67 22613.67 28335.33 22592.33 28314.00 22571.00C28346.00 22549.67 28378.00 22528.33 28410.00 22507.00C28399.10 22485.21 28388.71 22463.04 28377.49 22441.49C28361.26 22425.38 28345.58 22408.71 28327.90 22394.16C28248.27 22324.44 28168.63 22254.72 28089.00 22185.00C28077.81 22185.22 28066.41 22184.56 28055.35 22185.33C28034.23 22195.88 28013.12 22206.44 27992.00 22217.00C27981.33 22195.67 27970.67 22174.33 27960.00 22153.00C27938.67 22153.00 27917.33 22153.00 27896.00 22153.00C27896.00 22142.33 27896.00 22131.67 27896.00 22121.00C27874.33 22099.67 27852.67 22078.33 27831.00 22057.00C27788.33 22057.00 27745.67 22057.00 27703.00 22057.00C27681.67 22067.67 27660.33 22078.33 27639.00 22089.00C27617.33 22078.33 27595.67 22067.67 27574.00 22057.00C27509.67 22121.33 27445.33 22185.67 27381.00 22250.00C27349.00 22239.00 27317.00 22228.00 27285.00 22217.00C27285.00 22185.00 27285.00 22153.00 27285.00 22121.00C27274.33 22110.33 27263.67 22099.67 27253.00 22089.00C27231.33 22099.67 27209.67 22110.33 27188.00 22121.00C27134.67 22110.33 27081.33 22099.67 27028.00 22089.00C26984.75 22099.61 26941.56 22110.69 26898.27 22121.00C26823.51 22121.00 26748.76 22121.00 26674.00 22121.00C26641.67 22110.33 26609.33 22099.67 26577.00 22089.00C26545.00 22056.67 26513.00 22024.33 26481.00 21992.00C26459.67 21992.00 26438.33 21992.00 26417.00 21992.00C26406.00 22013.67 26395.00 22035.33 26384.00 22057.00C26351.78 22057.15 26319.46 22056.69 26287.31 22057.23C26255.13 22068.10 26222.75 22078.47 26190.69 22089.64C26169.46 22100.10 26148.23 22110.55 26127.00 22121.00C26105.67 22110.33 26084.33 22099.67 26063.00 22089.00C26052.33 22099.67 26041.67 22110.33 26031.00 22121.00C26020.33 22099.67 26009.67 22078.33 25999.00 22057.00C25999.00 22003.33 25999.00 21949.67 25999.00 21896.00C25966.41 21906.59 25933.92 21917.79 25901.27 21928.00C25858.85 21928.00 25816.42 21928.00 25774.00 21928.00C25730.76 21960.40 25687.70 21993.11 25644.35 22025.33C25623.23 22035.88 25602.12 22046.44 25581.00 22057.00C25570.00 22089.00 25559.00 22121.00 25548.00 22153.00C25537.33 22163.67 25526.67 22174.33 25516.00 22185.00C25484.00 22174.33 25452.00 22163.67 25420.00 22153.00C25398.67 22131.67 25377.33 22110.33 25356.00 22089.00C25356.00 21060.00 25356.00 20031.00 25356.00 19002.00C25388.00 19002.00 25420.00 19002.00 25452.00 19002.00C25441.33 19012.67 25430.67 19023.33 25420.00 19034.00C25430.67 19044.67 25441.33 19055.33 25452.00 19066.00C25495.00 19055.33 25538.00 19044.67 25581.00 19034.00C25602.33 19044.67 25623.67 19055.33 25645.00 19066.00C25645.22 19055.14 25644.56 19044.08 25645.33 19033.35C25655.88 19012.23 25666.44 18991.12 25677.00 18970.00C25687.67 18970.00 25698.33 18970.00 25709.00 18970.00C25752.00 18938.00 25795.00 18906.00 25838.00 18874.00C25881.00 18874.00 25924.00 18874.00 25967.00 18874.00C25977.67 18863.00 25988.33 18852.00 25999.00 18841.00C26009.67 18852.00 26020.33 18863.00 26031.00 18874.00C26063.00 18874.00 26095.00 18874.00 26127.00 18874.00C26127.00 18884.67 26127.00 18895.33 26127.00 18906.00C26170.00 18906.00 26213.00 18906.00 26256.00 18906.00C26266.67 18895.33 26277.33 18884.67 26288.00 18874.00C26309.33 18884.67 26330.67 18895.33 26352.00 18906.00C26362.67 18884.33 26373.33 18862.67 26384.00 18841.00C26395.00 18841.00 26406.00 18841.00 26417.00 18841.00C26449.25 18819.62 26481.31 18797.88 26513.68 18776.73C26567.12 18755.49 26620.56 18734.24 26674.00 18713.00C26695.33 18691.33 26716.67 18669.67 26738.00 18648.00C26834.67 18691.00 26931.33 18734.00 27028.00 18777.00C27038.67 18766.33 27049.33 18755.67 27060.00 18745.00C27060.00 18755.67 27060.00 18766.33 27060.00 18777.00C27070.67 18787.67 27081.33 18798.33 27092.00 18809.00C27102.67 18787.67 27113.33 18766.33 27124.00 18745.00C27145.33 18766.33 27166.67 18787.67 27188.00 18809.00C27198.67 18798.33 27209.33 18787.67 27220.00 18777.00C27263.00 18787.67 27306.00 18798.33 27349.00 18809.00C27402.67 18841.33 27456.33 18873.67 27510.00 18906.00C27510.00 18927.33 27510.00 18948.67 27510.00 18970.00C27520.67 18959.33 27531.33 18948.67 27542.00 18938.00C29482.00 18938.00 31422.00 18938.00 33362.00 18938.00C33362.00 18916.67 33362.00 18895.33 33362.00 18874.00C33351.33 18863.00 33340.67 18852.00 33330.00 18841.00C33297.67 18841.00 33265.33 18841.00 33233.00 18841.00C33254.33 18809.00 33275.67 18777.00 33297.00 18745.00C33265.00 18723.67 33233.00 18702.33 33201.00 18681.00C33179.67 18681.00 33158.33 18681.00 33137.00 18681.00C33126.07 18691.71 33115.51 18702.94 33104.35 18713.32C33082.90 18723.88 33061.45 18734.44 33040.00 18745.00C33018.67 18745.00 32997.33 18745.00 32976.00 18745.00C32965.33 18702.00 32954.67 18659.00 32944.00 18616.00C32954.67 18562.33 32965.33 18508.67 32976.00 18455.00C32933.00 18455.00 32890.00 18455.00 32847.00 18455.00C32847.00 18401.67 32847.00 18348.33 32847.00 18295.00C32868.67 18273.33 32890.33 18251.67 32912.00 18230.00C32922.67 18144.33 32933.33 18058.67 32944.00 17973.00C32997.67 17919.33 33051.33 17865.67 33105.00 17812.00C33126.33 17812.00 33147.67 17812.00 33169.00 17812.00C33190.33 17780.00 33211.67 17748.00 33233.00 17716.00C33254.33 17705.33 33275.67 17694.67 33297.00 17684.00C33318.67 17705.33 33340.33 17726.67 33362.00 17748.00C33383.33 17737.33 33404.67 17726.67 33426.00 17716.00C33436.67 17716.00 33447.33 17716.00 33458.00 17716.00C33479.67 17737.33 33501.33 17758.67 33523.00 17780.00C33533.67 17823.00 33544.33 17866.00 33555.00 17909.00C33576.33 17919.67 33597.67 17930.33 33619.00 17941.00C33629.67 17984.00 33640.33 18027.00 33651.00 18070.00C33661.67 18080.67 33672.33 18091.33 33683.00 18102.00C33693.86 18102.22 33704.92 18101.57 33715.65 18102.32C33737.10 18112.88 33758.55 18123.44 33780.00 18134.00C33812.00 18123.33 33844.00 18112.67 33876.00 18102.00C33928.72 18154.15 33981.57 18206.18 34033.50 18259.13C34098.50 18324.91 34164.53 18389.68 34230.00 18455.00C34283.67 18455.00 34337.33 18455.00 34391.00 18455.00C34401.71 18444.07 34412.93 18433.51 34423.33 18422.35C34433.88 18401.23 34444.44 18380.12 34455.00 18359.00C34476.33 18348.33 34497.67 18337.67 34519.00 18327.00C34529.67 18305.67 34540.33 18284.33 34551.00 18263.00C34540.33 18220.00 34529.67 18177.00 34519.00 18134.00C34562.00 18123.33 34605.00 18112.67 34648.00 18102.00C34690.67 18069.67 34733.33 18037.33 34776.00 18005.00C34808.53 17962.18 34840.86 17919.19 34873.51 17876.49C34905.62 17844.60 34937.23 17812.22 34969.00 17780.00C35022.67 17673.00 35076.33 17566.00 35130.00 17459.00C35151.67 17448.33 35173.33 17437.67 35195.00 17427.00C35227.00 17427.00 35259.00 17427.00 35291.00 17427.00C35366.00 17459.00 35441.00 17491.00 35516.00 17523.00C35644.67 17523.00 35773.33 17523.00 35902.00 17523.00C35923.33 17501.67 35944.67 17480.33 35966.00 17459.00C35998.33 17373.33 36030.67 17287.67 36063.00 17202.00C36105.67 17169.67 36148.33 17137.33 36191.00 17105.00C36201.67 17051.33 36212.33 16997.67 36223.00 16944.00C36244.87 16911.85 36266.47 16879.49 36288.51 16847.48C36309.67 16825.99 36330.84 16804.49 36352.00 16783.00C36470.00 16729.67 36588.00 16676.33 36706.00 16623.00C36737.95 16558.64 36769.78 16494.22 36802.00 16430.00C36866.33 16430.00 36930.67 16430.00 36995.00 16430.00C37027.47 16451.54 37060.20 16472.78 37092.51 16494.52C37135.01 16537.35 37177.50 16580.17 37220.00 16623.00C37230.67 16794.33 37241.33 16965.67 37252.00 17137.00C37262.59 17169.59 37273.79 17202.08 37284.00 17234.73C37284.00 17320.15 37284.00 17405.58 37284.00 17491.00C37327.18 17652.12 37370.14 17813.31 37413.46 17974.38C37434.78 18038.46 37455.84 18102.64 37477.33 18166.65C37487.88 18187.77 37498.44 18208.88 37509.00 18230.00C37562.67 18262.33 37616.33 18294.67 37670.00 18327.00C37691.67 18316.33 37713.33 18305.67 37735.00 18295.00C37820.89 18305.79 37906.86 18316.21 37992.69 18327.23C38024.46 18337.82 38056.23 18348.41 38088.00 18359.00C38120.40 18402.24 38153.11 18445.30 38185.33 18488.65C38206.56 18531.36 38228.19 18573.91 38249.18 18616.71C38259.94 18659.67 38270.31 18702.78 38281.33 18745.65C38313.55 18809.77 38345.78 18873.88 38378.00 18938.00C38367.00 18980.67 38356.00 19023.33 38345.00 19066.00C38356.37 19109.90 38367.22 19153.96 38378.92 19197.77C38400.11 19261.12 38421.12 19324.54 38442.00 19388.00C38452.64 19613.49 38463.47 19838.97 38474.00 20064.46C38474.10 20107.21 38473.81 20149.99 38474.14 20192.72C38484.76 20246.14 38495.38 20299.57 38506.00 20353.00C38484.67 20417.00 38463.33 20481.00 38442.00 20545.00C38431.37 20674.15 38420.43 20803.29 38410.00 20932.46C38410.00 21081.97 38410.00 21231.49 38410.00 21381.00C38420.67 21424.00 38431.33 21467.00 38442.00 21510.00C38431.33 21574.33 38420.67 21638.67 38410.00 21703.00C38774.33 21595.67 39138.67 21488.33 39503.00 21381.00C39910.89 21756.80 40318.70 22132.70 40726.64 22508.45C41176.09 22904.63 41625.55 23300.81 42075.00 23697.00C42236.00 23654.00 42397.00 23611.00 42558.00 23568.00C42600.67 23578.67 42643.33 23589.33 42686.00 23600.00C42718.33 23632.33 42750.67 23664.67 42783.00 23697.00C42793.67 23718.33 42804.33 23739.67 42815.00 23761.00C42826.84 23760.58 42838.85 23761.87 42850.57 23760.29C42903.05 23749.86 42955.53 23739.43 43008.00 23729.00C43018.67 23707.33 43029.33 23685.67 43040.00 23664.00C43050.86 23664.22 43061.93 23663.55 43072.65 23664.33C43093.76 23675.22 43114.88 23686.11 43136.00 23697.00C43157.67 23675.33 43179.33 23653.67 43201.00 23632.00C43201.30 23620.90 43200.39 23609.60 43201.46 23598.62C43211.90 23566.82 43222.95 23535.13 43233.00 23503.27C43233.00 23492.51 43233.00 23481.76 43233.00 23471.00C43254.55 23470.85 43276.20 23471.31 43297.69 23470.77C43329.79 23460.18 43361.90 23449.59 43394.00 23439.00C43426.25 23449.59 43458.41 23460.79 43490.73 23471.00C43511.82 23471.00 43532.91 23471.00 43554.00 23471.00C43575.67 23460.33 43597.33 23449.67 43619.00 23439.00C43661.67 23439.00 43704.33 23439.00 43747.00 23439.00C43747.00 23417.67 43747.00 23396.33 43747.00 23375.00C43768.67 23353.67 43790.33 23332.33 43812.00 23311.00C43812.00 23278.67 43812.00 23246.33 43812.00 23214.00C43833.33 23203.33 43854.67 23192.67 43876.00 23182.00C43876.00 23150.00 43876.00 23118.00 43876.00 23086.00C43886.67 23075.00 43897.33 23064.00 43908.00 23053.00C43940.00 23053.00 43972.00 23053.00 44004.00 23053.00C44015.00 23064.00 44026.00 23075.00 44037.00 23086.00C44047.67 23064.33 44058.33 23042.67 44069.00 23021.00C44090.33 23010.33 44111.67 22999.67 44133.00 22989.00C44143.67 22957.00 44154.33 22925.00 44165.00 22893.00C44154.33 22871.33 44143.67 22849.67 44133.00 22828.00C44165.33 22839.00 44197.67 22850.00 44230.00 22861.00C44273.04 22839.02 44316.31 22817.42 44359.22 22795.20C44391.14 22774.13 44423.07 22753.07 44455.00 22732.00C44465.67 22742.67 44476.33 22753.33 44487.00 22764.00C44508.46 22753.10 44530.28 22742.70 44551.51 22731.49C44572.68 22710.32 44593.84 22689.16 44615.00 22668.00C44626.00 22678.67 44637.00 22689.33 44648.00 22700.00C44658.71 22689.07 44669.94 22678.51 44680.32 22667.35C44690.88 22645.90 44701.44 22624.45 44712.00 22603.00C44722.67 22603.00 44733.33 22603.00 44744.00 22603.00C44765.33 22571.00 44786.67 22539.00 44808.00 22507.00C44861.67 22507.00 44915.33 22507.00 44969.00 22507.00C44979.67 22496.33 44990.33 22485.67 45001.00 22475.00C45033.21 22507.13 45065.12 22539.56 45098.00 22571.00C45108.67 22549.67 45119.33 22528.33 45130.00 22507.00C45162.00 22485.33 45194.00 22463.67 45226.00 22442.00C45269.00 22485.00 45312.00 22528.00 45355.00 22571.00C45344.33 22539.00 45333.67 22507.00 45323.00 22475.00C45344.33 22475.00 45365.67 22475.00 45387.00 22475.00C45397.67 22464.00 45408.33 22453.00 45419.00 22442.00C45419.00 22453.00 45419.00 22464.00 45419.00 22475.00C45451.33 22485.67 45483.67 22496.33 45516.00 22507.00C45526.67 22496.33 45537.33 22485.67 45548.00 22475.00C45558.67 22507.00 45569.33 22539.00 45580.00 22571.00C45590.67 22560.33 45601.33 22549.67 45612.00 22539.00C45633.33 22539.00 45654.67 22539.00 45676.00 22539.00C45665.33 22549.67 45654.67 22560.33 45644.00 22571.00C45654.67 22592.33 45665.33 22613.67 45676.00 22635.00C45697.67 22635.00 45719.33 22635.00 45741.00 22635.00C45751.90 22656.79 45762.29 22678.96 45773.51 22700.51C45784.01 22711.01 45794.50 22721.51 45805.00 22732.00C45794.33 22742.67 45783.67 22753.33 45773.00 22764.00C45794.33 22785.33 45815.67 22806.67 45837.00 22828.00C45837.00 22839.00 45837.00 22850.00 45837.00 22861.00C45858.33 22882.33 45879.67 22903.67 45901.00 22925.00C45890.41 22957.26 45879.21 22989.41 45869.00 23021.73C45869.00 23032.15 45869.00 23042.58 45869.00 23053.00C45901.33 23053.00 45933.67 23053.00 45966.00 23053.00C45966.00 23064.00 45966.00 23075.00 45966.00 23086.00C45944.33 23107.33 45922.67 23128.67 45901.00 23150.00C45912.00 23192.67 45923.00 23235.33 45934.00 23278.00C45923.00 23278.00 45912.00 23278.00 45901.00 23278.00C45890.33 23289.00 45879.67 23300.00 45869.00 23311.00C45858.33 23300.00 45847.67 23289.00 45837.00 23278.00C45826.33 23289.00 45815.67 23300.00 45805.00 23311.00C45815.67 23332.33 45826.33 23353.67 45837.00 23375.00C45826.33 23407.00 45815.67 23439.00 45805.00 23471.00C45783.67 23471.00 45762.33 23471.00 45741.00 23471.00C45740.69 23482.44 45741.62 23494.07 45740.54 23505.38C45730.03 23536.92 45719.51 23568.46 45709.00 23600.00C45698.00 23600.00 45687.00 23600.00 45676.00 23600.00C45644.00 23621.33 45612.00 23642.67 45580.00 23664.00C45580.00 23696.33 45580.00 23728.67 45580.00 23761.00C45558.67 23793.00 45537.33 23825.00 45516.00 23857.00C45537.60 23878.40 45558.92 23900.08 45580.00 23922.00C45601.33 23975.33 45622.67 24028.67 45644.00 24082.00C45654.67 24092.67 45665.33 24103.33 45676.00 24114.00C45676.00 24135.67 45676.00 24157.33 45676.00 24179.00C45687.00 24179.00 45698.00 24179.00 45709.00 24179.00C45719.67 24189.67 45730.33 24200.33 45741.00 24211.00C45762.33 24178.67 45783.67 24146.33 45805.00 24114.00C45848.00 24114.00 45891.00 24114.00 45934.00 24114.00C45944.67 24103.33 45955.33 24092.67 45966.00 24082.00C45976.67 24082.00 45987.33 24082.00 45998.00 24082.00C46008.67 24071.33 46019.33 24060.67 46030.00 24050.00C46073.00 24050.00 46116.00 24050.00 46159.00 24050.00C46180.33 24039.33 46201.67 24028.67 46223.00 24018.00C46223.00 24007.33 46223.00 23996.67 46223.00 23986.00C46244.33 23964.67 46265.67 23943.33 46287.00 23922.00C46298.00 23889.67 46309.00 23857.33 46320.00 23825.00C46330.67 23814.33 46341.33 23803.67 46352.00 23793.00C46352.00 23761.00 46352.00 23729.00 46352.00 23697.00C46373.33 23707.67 46394.67 23718.33 46416.00 23729.00C46426.67 23718.33 46437.33 23707.67 46448.00 23697.00C46437.33 23675.33 46426.67 23653.67 46416.00 23632.00C46426.67 23621.33 46437.33 23610.67 46448.00 23600.00C46437.33 23589.33 46426.67 23578.67 46416.00 23568.00C46415.78 23557.14 46416.43 23546.08 46415.68 23535.35C46394.45 23492.56 46373.22 23449.78 46352.00 23407.00C46373.33 23396.33 46394.67 23385.67 46416.00 23375.00C46426.67 23342.67 46437.33 23310.33 46448.00 23278.00C46458.67 23267.33 46469.33 23256.67 46480.00 23246.00C46490.67 23246.00 46501.33 23246.00 46512.00 23246.00C46523.00 23224.67 46534.00 23203.33 46545.00 23182.00C46577.00 23160.67 46609.00 23139.33 46641.00 23118.00C46630.33 23107.33 46619.67 23096.67 46609.00 23086.00C46630.33 23064.33 46651.67 23042.67 46673.00 23021.00C46694.33 22956.67 46715.67 22892.33 46737.00 22828.00C46748.00 22839.00 46759.00 22850.00 46770.00 22861.00C46802.00 22839.33 46834.00 22817.67 46866.00 22796.00C46919.67 22796.00 46973.33 22796.00 47027.00 22796.00C47037.67 22806.67 47048.33 22817.33 47059.00 22828.00C47048.33 22839.00 47037.67 22850.00 47027.00 22861.00C47037.67 22871.67 47048.33 22882.33 47059.00 22893.00C47069.67 22882.33 47080.33 22871.67 47091.00 22861.00C47112.67 22871.67 47134.33 22882.33 47156.00 22893.00C47188.25 22882.41 47220.41 22871.21 47252.73 22861.00C47273.82 22861.00 47294.91 22861.00 47316.00 22861.00C47326.67 22882.33 47337.33 22903.67 47348.00 22925.00C47337.33 22935.67 47326.67 22946.33 47316.00 22957.00C47337.67 22957.00 47359.33 22957.00 47381.00 22957.00C47402.38 22935.40 47424.27 22914.17 47445.32 22892.35C47466.54 22849.31 47488.23 22806.43 47509.14 22763.28C47519.76 22709.86 47530.38 22656.43 47541.00 22603.00C47551.65 22592.04 47563.05 22581.56 47573.24 22570.31C47584.16 22538.54 47595.08 22506.77 47606.00 22475.00C47573.67 22464.00 47541.33 22453.00 47509.00 22442.00C47509.00 22420.67 47509.00 22399.33 47509.00 22378.00C47519.67 22367.33 47530.33 22356.67 47541.00 22346.00C47551.61 22302.75 47562.68 22259.56 47573.00 22216.27C47573.00 22173.85 47573.00 22131.42 47573.00 22089.00C47584.00 22056.67 47595.00 22024.33 47606.00 21992.00C47595.00 21960.00 47584.00 21928.00 47573.00 21896.00C47594.88 21895.85 47616.87 21896.31 47638.69 21895.77C47670.46 21885.18 47702.23 21874.59 47734.00 21864.00C47734.00 21842.33 47734.00 21820.67 47734.00 21799.00C47766.33 21777.67 47798.67 21756.33 47831.00 21735.00C47852.33 21756.33 47873.67 21777.67 47895.00 21799.00C47905.67 21799.00 47916.33 21799.00 47927.00 21799.00C47937.67 21788.33 47948.33 21777.67 47959.00 21767.00C47980.67 21788.67 48002.33 21810.33 48024.00 21832.00C48013.33 21864.00 48002.67 21896.00 47992.00 21928.00C48002.67 21938.67 48013.33 21949.33 48024.00 21960.00C48045.33 21949.33 48066.67 21938.67 48088.00 21928.00C48131.00 21938.67 48174.00 21949.33 48217.00 21960.00C48217.00 21938.67 48217.00 21917.33 48217.00 21896.00C48238.33 21885.33 48259.67 21874.67 48281.00 21864.00C48302.54 21831.53 48323.78 21798.80 48345.52 21766.49C48377.77 21734.42 48410.34 21702.62 48442.40 21670.39C48463.60 21638.26 48484.80 21606.13 48506.00 21574.00C48495.36 21563.04 48483.94 21552.56 48473.77 21541.31C48463.18 21509.54 48452.59 21477.77 48442.00 21446.00C48463.33 21424.33 48484.67 21402.67 48506.00 21381.00C48516.67 21381.00 48527.33 21381.00 48538.00 21381.00C48548.67 21392.00 48559.33 21403.00 48570.00 21414.00C48570.00 21424.67 48570.00 21435.33 48570.00 21446.00C48580.67 21456.67 48591.33 21467.33 48602.00 21478.00C48623.67 21467.33 48645.33 21456.67 48667.00 21446.00C48677.90 21424.21 48688.29 21402.04 48699.51 21380.49C48720.68 21359.32 48741.84 21338.16 48763.00 21317.00C48752.33 21306.33 48741.67 21295.67 48731.00 21285.00C48763.00 21285.00 48795.00 21285.00 48827.00 21285.00C48827.00 21317.00 48827.00 21349.00 48827.00 21381.00C48859.33 21381.00 48891.67 21381.00 48924.00 21381.00C48924.00 21359.67 48924.00 21338.33 48924.00 21317.00C48945.33 21285.00 48966.67 21253.00 48988.00 21221.00C48977.33 21210.33 48966.67 21199.67 48956.00 21189.00C49020.33 21146.00 49084.67 21103.00 49149.00 21060.00C49170.33 21027.67 49191.67 20995.33 49213.00 20963.00C49223.72 20974.26 49234.91 20985.18 49245.33 20996.65C49266.89 21039.10 49288.44 21081.55 49310.00 21124.00C49299.33 21134.67 49288.67 21145.33 49278.00 21156.00C49278.00 21167.00 49278.00 21178.00 49278.00 21189.00C49299.57 21210.77 49321.56 21232.17 49342.88 21254.17C49374.78 21296.59 49406.48 21339.20 49438.51 21381.51C49449.34 21392.34 49460.17 21403.17 49471.00 21414.00C49481.86 21413.78 49492.93 21414.44 49503.65 21413.67C49546.10 21392.11 49588.55 21370.56 49631.00 21349.00C49631.00 21327.67 49631.00 21306.33 49631.00 21285.00C49641.67 21285.00 49652.33 21285.00 49663.00 21285.00C49674.00 21253.00 49685.00 21221.00 49696.00 21189.00C49696.00 21167.33 49696.00 21145.67 49696.00 21124.00C49706.67 21113.33 49717.33 21102.67 49728.00 21092.00C49749.33 21102.67 49770.67 21113.33 49792.00 21124.00C49802.86 21123.78 49813.92 21124.43 49824.65 21123.68C49846.10 21113.12 49867.55 21102.56 49889.00 21092.00C49899.67 21092.00 49910.33 21092.00 49921.00 21092.00C49942.43 21070.43 49964.16 21049.11 49985.40 21027.39C50006.60 20995.26 50027.80 20963.13 50049.00 20931.00C50059.67 20931.00 50070.33 20931.00 50081.00 20931.00C50102.67 20909.67 50124.33 20888.33 50146.00 20867.00C50178.00 20867.00 50210.00 20867.00 50242.00 20867.00C50263.67 20835.00 50285.33 20803.00 50307.00 20771.00C50296.00 20771.00 50285.00 20771.00 50274.00 20771.00C50285.00 20749.33 50296.00 20727.67 50307.00 20706.00C50296.00 20695.33 50285.00 20684.67 50274.00 20674.00C50295.67 20663.33 50317.33 20652.67 50339.00 20642.00C50371.00 20588.33 50403.00 20534.67 50435.00 20481.00C50467.33 20459.67 50499.67 20438.33 50532.00 20417.00C50532.00 20395.67 50532.00 20374.33 50532.00 20353.00C50542.67 20363.67 50553.33 20374.33 50564.00 20385.00C50596.00 20374.33 50628.00 20363.67 50660.00 20353.00C50703.23 20309.90 50746.22 20266.51 50789.61 20223.60C50821.40 20202.40 50853.20 20181.20 50885.00 20160.00C50895.67 20170.67 50906.33 20181.33 50917.00 20192.00C50928.00 20192.00 50939.00 20192.00 50950.00 20192.00C50982.00 20170.33 51014.00 20148.67 51046.00 20127.00C51046.00 20116.33 51046.00 20105.67 51046.00 20095.00C51067.33 20073.67 51088.67 20052.33 51110.00 20031.00C51110.00 20020.33 51110.00 20009.67 51110.00 19999.00C51131.67 19977.67 51153.33 19956.33 51175.00 19935.00C51196.33 19945.67 51217.67 19956.33 51239.00 19967.00C51282.00 19967.00 51325.00 19967.00 51368.00 19967.00C51378.67 19999.00 51389.33 20031.00 51400.00 20063.00C51378.13 20095.47 51356.54 20128.19 51334.49 20160.51C51302.66 20192.34 51270.83 20224.17 51239.00 20256.00C51249.67 20266.67 51260.33 20277.33 51271.00 20288.00C51260.29 20298.93 51249.07 20309.49 51238.68 20320.65C51217.45 20363.44 51196.22 20406.22 51175.00 20449.00C51174.70 20460.10 51175.60 20471.40 51174.54 20482.38C51164.03 20514.26 51153.51 20546.13 51143.00 20578.00C51153.67 20588.67 51164.33 20599.33 51175.00 20610.00C51228.33 20610.00 51281.67 20610.00 51335.00 20610.00C51346.04 20620.93 51357.61 20631.48 51368.33 20642.65C51379.12 20663.89 51389.41 20685.50 51400.51 20706.51C51411.01 20717.01 51421.50 20727.51 51432.00 20738.00C51442.67 20727.33 51453.33 20716.67 51464.00 20706.00C51453.33 20695.33 51442.67 20684.67 51432.00 20674.00C51432.00 20652.67 51432.00 20631.33 51432.00 20610.00C51453.33 20599.33 51474.67 20588.67 51496.00 20578.00C51496.00 20513.67 51496.00 20449.33 51496.00 20385.00C51517.60 20363.60 51538.92 20341.92 51560.00 20320.00C51560.00 20309.33 51560.00 20298.67 51560.00 20288.00C51582.16 20266.83 51603.82 20245.10 51625.61 20223.60C51657.40 20202.40 51689.20 20181.20 51721.00 20160.00C51721.00 20149.00 51721.00 20138.00 51721.00 20127.00C51742.67 20127.00 51764.33 20127.00 51786.00 20127.00C51796.67 20105.67 51807.33 20084.33 51818.00 20063.00C51839.46 20052.10 51861.28 20041.70 51882.51 20030.49C51893.01 20019.99 51903.50 20009.49 51914.00 19999.00C51935.67 20009.67 51957.33 20020.33 51979.00 20031.00C51989.67 20031.00 52000.33 20031.00 52011.00 20031.00C52043.00 19999.00 52075.00 19967.00 52107.00 19935.00C52118.16 19912.78 52128.63 19890.16 52140.23 19868.19C52161.48 19836.79 52182.74 19805.40 52204.00 19774.00C52204.00 19752.33 52204.00 19730.67 52204.00 19709.00C52236.00 19709.00 52268.00 19709.00 52300.00 19709.00C52321.33 19698.33 52342.67 19687.67 52364.00 19677.00C52396.33 19677.00 52428.67 19677.00 52461.00 19677.00C52482.33 19666.33 52503.67 19655.67 52525.00 19645.00C52525.00 19613.00 52525.00 19581.00 52525.00 19549.00C52546.33 19527.33 52567.67 19505.67 52589.00 19484.00C52600.00 19452.00 52611.00 19420.00 52622.00 19388.00C52643.33 19366.67 52664.67 19345.33 52686.00 19324.00C52696.61 19280.75 52707.68 19237.56 52718.00 19194.27C52718.30 19183.41 52717.40 19172.35 52718.46 19161.62C52728.97 19129.74 52739.49 19097.87 52750.00 19066.00C52739.33 19066.00 52728.67 19066.00 52718.00 19066.00C52707.33 19034.00 52696.67 19002.00 52686.00 18970.00C52696.67 18959.33 52707.33 18948.67 52718.00 18938.00C52718.00 18905.67 52718.00 18873.33 52718.00 18841.00C52707.33 18841.00 52696.67 18841.00 52686.00 18841.00C52686.18 18830.13 52685.64 18819.11 52686.27 18808.32C52707.51 18754.88 52728.76 18701.44 52750.00 18648.00C52750.00 18626.67 52750.00 18605.33 52750.00 18584.00C52760.67 18573.33 52771.33 18562.67 52782.00 18552.00C52771.33 18530.67 52760.67 18509.33 52750.00 18488.00C52760.67 18488.00 52771.33 18488.00 52782.00 18488.00C52782.00 18455.67 52782.00 18423.33 52782.00 18391.00C52760.67 18391.00 52739.33 18391.00 52718.00 18391.00C52718.42 18379.16 52717.13 18367.15 52718.71 18355.43C52729.09 18302.70 52739.85 18250.02 52750.00 18197.27C52750.00 18122.51 52750.00 18047.76 52750.00 17973.00C52771.79 17962.10 52793.96 17951.71 52815.51 17940.49C52826.30 17930.01 52836.61 17918.77 52847.69 17908.77C52879.46 17898.18 52911.23 17887.59 52943.00 17877.00C52943.00 17855.33 52943.00 17833.67 52943.00 17812.00C52953.67 17812.00 52964.33 17812.00 52975.00 17812.00C53007.39 17780.06 53039.94 17748.28 53072.00 17716.00C53082.67 17716.00 53093.33 17716.00 53104.00 17716.00C53125.33 17694.67 53146.67 17673.33 53168.00 17652.00C53178.67 17662.67 53189.33 17673.33 53200.00 17684.00C53210.67 17673.33 53221.33 17662.67 53232.00 17652.00C53243.00 17662.67 53254.00 17673.33 53265.00 17684.00C53286.33 17684.00 53307.67 17684.00 53329.00 17684.00C53350.33 17694.67 53371.67 17705.33 53393.00 17716.00C53425.33 17694.67 53457.67 17673.33 53490.00 17652.00C53500.67 17652.00 53511.33 17652.00 53522.00 17652.00C53543.33 17673.33 53564.67 17694.67 53586.00 17716.00C53639.67 17716.00 53693.33 17716.00 53747.00 17716.00C53757.67 17748.00 53768.33 17780.00 53779.00 17812.00C53800.33 17801.33 53821.67 17790.67 53843.00 17780.00C53854.00 17748.00 53865.00 17716.00 53876.00 17684.00C53918.67 17684.00 53961.33 17684.00 54004.00 17684.00C54025.33 17694.67 54046.67 17705.33 54068.00 17716.00C54079.04 17705.06 54090.62 17694.53 54101.32 17683.35C54111.88 17661.90 54122.44 17640.45 54133.00 17619.00C54143.86 17619.22 54154.93 17618.55 54165.65 17619.33C54186.76 17630.22 54207.88 17641.11 54229.00 17652.00C54239.67 17641.00 54250.33 17630.00 54261.00 17619.00C54261.00 17608.33 54261.00 17597.67 54261.00 17587.00C54282.40 17565.40 54304.08 17544.08 54326.00 17523.00C54326.00 17512.33 54326.00 17501.67 54326.00 17491.00C54368.67 17458.67 54411.33 17426.33 54454.00 17394.00C54475.67 17415.67 54497.33 17437.33 54519.00 17459.00C54508.33 17480.33 54497.67 17501.67 54487.00 17523.00C54519.00 17523.00 54551.00 17523.00 54583.00 17523.00C54593.67 17533.67 54604.33 17544.33 54615.00 17555.00C54625.67 17544.33 54636.33 17533.67 54647.00 17523.00C54646.88 17501.44 54647.23 17479.82 54646.82 17458.29C54636.22 17415.53 54625.61 17372.76 54615.00 17330.00C54625.67 17319.33 54636.33 17308.67 54647.00 17298.00C54679.33 17298.00 54711.67 17298.00 54744.00 17298.00C54765.33 17266.00 54786.67 17234.00 54808.00 17202.00C54818.67 17202.00 54829.33 17202.00 54840.00 17202.00C54840.00 17169.67 54840.00 17137.33 54840.00 17105.00C54861.33 17105.00 54882.67 17105.00 54904.00 17105.00C54925.67 17083.67 54947.33 17062.33 54969.00 17041.00C54980.10 17040.70 54991.40 17041.61 55002.38 17040.54C55033.92 17030.03 55065.46 17019.51 55097.00 17009.00C55107.67 16998.00 55118.33 16987.00 55129.00 16976.00C55161.33 16976.00 55193.67 16976.00 55226.00 16976.00C55269.00 16997.67 55312.00 17019.33 55355.00 17041.00C55355.00 17051.67 55355.00 17062.33 55355.00 17073.00C55387.00 17073.00 55419.00 17073.00 55451.00 17073.00C55472.38 17051.40 55494.26 17030.17 55515.33 17008.35C55526.22 16986.90 55537.11 16965.45 55548.00 16944.00C55558.83 16944.27 55569.99 16943.46 55580.60 16944.41C55612.40 16965.94 55644.20 16987.47 55676.00 17009.00C55686.67 17009.00 55697.33 17009.00 55708.00 17009.00C55718.67 16998.00 55729.33 16987.00 55740.00 16976.00C55751.00 16976.00 55762.00 16976.00 55773.00 16976.00C55805.00 16954.67 55837.00 16933.33 55869.00 16912.00C55879.67 16912.00 55890.33 16912.00 55901.00 16912.00C55901.15 16879.78 55900.70 16847.47 55901.23 16815.31C55911.82 16783.21 55922.41 16751.10 55933.00 16719.00C55922.33 16719.00 55911.67 16719.00 55901.00 16719.00C55901.00 16697.67 55901.00 16676.33 55901.00 16655.00C55944.00 16633.67 55987.00 16612.33 56030.00 16591.00C56040.67 16612.33 56051.33 16633.67 56062.00 16655.00C56147.90 16708.75 56233.70 16762.67 56319.65 16816.32C56362.43 16837.55 56405.22 16858.78 56448.00 16880.00C56493.43 16865.08 56538.51 16849.06 56584.48 16835.81C56678.32 16807.54 56772.16 16779.27 56866.00 16751.00C56908.67 16751.00 56951.33 16751.00 56994.00 16751.00C57005.00 16761.67 57016.00 16772.33 57027.00 16783.00C57059.00 16783.00 57091.00 16783.00 57123.00 16783.00C57123.00 16836.67 57123.00 16890.33 57123.00 16944.00C57133.96 16976.74 57144.37 17009.70 57155.66 17042.30C57177.11 17084.53 57198.55 17126.77 57220.00 17169.00C57272.90 17223.09 57326.47 17276.52 57380.00 17330.00C57401.67 17362.33 57423.33 17394.67 57445.00 17427.00C57520.00 17469.67 57595.00 17512.33 57670.00 17555.00C57734.54 17544.19 57799.20 17533.79 57863.68 17522.73C57916.78 17501.49 57969.89 17480.24 58023.00 17459.00C58066.73 17469.73 58110.37 17480.91 58154.16 17491.36C58282.35 17512.53 58410.52 17534.02 58538.73 17555.00C58559.82 17555.00 58580.91 17555.00 58602.00 17555.00C58623.33 17587.33 58644.67 17619.67 58666.00 17652.00C58666.00 17662.67 58666.00 17673.33 58666.00 17684.00C58773.33 17716.00 58880.67 17748.00 58988.00 17780.00C59020.00 17801.67 59052.00 17823.33 59084.00 17845.00C59095.00 17845.00 59106.00 17845.00 59117.00 17845.00C59138.33 17866.33 59159.67 17887.67 59181.00 17909.00C59191.67 17962.67 59202.33 18016.33 59213.00 18070.00C59202.18 18123.54 59191.78 18177.21 59180.70 18230.67C59137.80 18327.11 59094.90 18423.56 59052.00 18520.00C59062.67 18691.33 59073.33 18862.67 59084.00 19034.00C59073.33 19055.67 59062.67 19077.33 59052.00 19099.00C59009.02 19131.38 58965.73 19163.40 58922.95 19196.01C58912.26 19206.61 58901.04 19216.81 58890.67 19227.65C58879.88 19248.90 58869.59 19270.50 58858.49 19291.52C58815.99 19334.35 58773.50 19377.17 58731.00 19420.00C58720.39 19463.25 58709.32 19506.44 58699.00 19549.73C58699.00 19581.49 58699.00 19613.24 58699.00 19645.00C58741.67 19666.33 58784.33 19687.67 58827.00 19709.00C58859.40 19752.24 58892.11 19795.30 58924.33 19838.65C58934.88 19859.77 58945.44 19880.88 58956.00 19902.00C58977.33 19913.00 58998.67 19924.00 59020.00 19935.00C59030.67 19977.67 59041.33 20020.33 59052.00 20063.00C59073.90 20084.44 59095.57 20106.15 59117.60 20127.41C59149.54 20149.15 59181.72 20170.60 59213.51 20192.51C59245.34 20224.34 59277.17 20256.17 59309.00 20288.00C59352.00 20309.67 59395.00 20331.33 59438.00 20353.00C59448.67 20353.00 59459.33 20353.00 59470.00 20353.00C59480.68 20363.95 59492.00 20374.46 59502.27 20385.67C59523.85 20438.78 59545.43 20491.89 59567.00 20545.00C59566.78 20556.19 59567.44 20567.59 59566.67 20578.65C59556.12 20599.77 59545.56 20620.88 59535.00 20642.00C59545.67 20674.00 59556.33 20706.00 59567.00 20738.00C59588.33 20749.00 59609.67 20760.00 59631.00 20771.00C59663.00 20931.67 59695.00 21092.33 59727.00 21253.00C59780.67 21381.67 59834.33 21510.33 59888.00 21639.00C59898.67 21724.67 59909.33 21810.33 59920.00 21896.00C59952.33 21960.33 59984.67 22024.67 60017.00 22089.00C60102.67 22089.00 60188.33 22089.00 60274.00 22089.00C60273.70 22100.10 60274.61 22111.40 60273.54 22122.38C60263.10 22154.18 60252.05 22185.87 60242.00 22217.73C60242.00 22239.15 60242.00 22260.58 60242.00 22282.00C60252.67 22292.67 60263.33 22303.33 60274.00 22314.00C60263.33 22335.33 60252.67 22356.67 60242.00 22378.00C60253.14 22399.90 60263.68 22422.15 60275.20 22443.83C60310.54 22497.48 60345.84 22551.16 60382.13 22604.18C60389.09 22614.45 60396.04 22624.73 60403.00 22635.00C60402.88 22656.90 60403.24 22678.85 60402.82 22700.71C60392.21 22743.14 60381.61 22785.57 60371.00 22828.00C60338.67 22860.33 60306.33 22892.67 60274.00 22925.00C60252.67 23000.00 60231.33 23075.00 60210.00 23150.00C60220.67 23192.67 60231.33 23235.33 60242.00 23278.00C60273.94 23310.39 60305.72 23342.94 60338.00 23375.00C60338.00 23439.33 60338.00 23503.67 60338.00 23568.00C60325.90 23579.62 60314.73 23592.26 60302.02 23603.19C60249.68 23645.13 60197.34 23687.06 60145.00 23729.00C60102.33 23793.33 60059.67 23857.67 60017.00 23922.00C60006.05 23954.41 59995.61 23987.03 59984.35 24019.30C59973.90 24040.20 59963.45 24061.10 59953.00 24082.00C59985.00 24232.33 60017.00 24382.67 60049.00 24533.00C60027.58 24661.32 60006.25 24789.65 59985.00 24918.00C60006.33 24950.33 60027.67 24982.67 60049.00 25015.00C60049.00 25090.00 60049.00 25165.00 60049.00 25240.00C60070.33 25240.00 60091.67 25240.00 60113.00 25240.00C60145.33 25218.33 60177.67 25196.67 60210.00 25175.00C60242.20 25218.15 60274.18 25261.48 60306.51 25304.51C60317.01 25315.01 60327.50 25325.51 60338.00 25336.00C60349.16 25379.20 60359.93 25422.54 60371.33 25465.65C60381.88 25486.77 60392.44 25507.88 60403.00 25529.00C60392.33 25539.67 60381.67 25550.33 60371.00 25561.00C60370.77 25572.19 60371.45 25583.60 60370.67 25594.65C60359.69 25616.26 60348.17 25637.63 60337.54 25659.38C60327.03 25690.92 60316.51 25722.46 60306.00 25754.00C60316.67 25786.33 60327.33 25818.67 60338.00 25851.00C60327.33 25915.33 60316.67 25979.67 60306.00 26044.00C60327.67 26097.33 60349.33 26150.67 60371.00 26204.00C60371.00 26257.67 60371.00 26311.33 60371.00 26365.00C60392.38 26386.93 60414.25 26408.50 60435.33 26430.65C60456.55 26473.10 60477.78 26515.55 60499.00 26558.00C60499.00 26686.67 60499.00 26815.33 60499.00 26944.00C60520.33 26976.00 60541.67 27008.00 60563.00 27040.00C60595.59 27061.69 60627.96 27083.84 60660.69 27105.23C60692.46 27115.82 60724.23 27126.41 60756.00 27137.00C60766.67 27158.33 60777.33 27179.67 60788.00 27201.00C60820.33 27211.67 60852.67 27222.33 60885.00 27233.00C60917.00 27329.67 60949.00 27426.33 60981.00 27523.00C60981.00 27576.33 60981.00 27629.67 60981.00 27683.00C60970.33 27683.00 60959.67 27683.00 60949.00 27683.00C60949.00 27694.00 60949.00 27705.00 60949.00 27716.00C60959.72 27726.93 60970.92 27737.50 60981.33 27748.65C60992.22 27769.76 61003.11 27790.88 61014.00 27812.00C61014.00 27833.33 61014.00 27854.67 61014.00 27876.00C61046.07 27919.24 61078.44 27962.30 61110.33 28005.65C61131.76 28048.33 61152.98 28091.12 61174.00 28134.00C61195.67 28155.33 61217.33 28176.67 61239.00 28198.00C61260.33 28198.00 61281.67 28198.00 61303.00 28198.00C61324.33 28208.67 61345.67 28219.33 61367.00 28230.00C61366.79 28240.86 61367.43 28251.92 61366.68 28262.65C61356.12 28284.10 61345.56 28305.55 61335.00 28327.00C61345.67 28359.00 61356.33 28391.00 61367.00 28423.00C61345.67 28433.67 61324.33 28444.33 61303.00 28455.00C61303.00 28487.33 61303.00 28519.67 61303.00 28552.00C61313.67 28573.33 61324.33 28594.67 61335.00 28616.00C61356.33 28616.00 61377.67 28616.00 61399.00 28616.00C61388.33 28637.33 61377.67 28658.67 61367.00 28680.00C61345.67 28690.67 61324.33 28701.33 61303.00 28712.00C61303.00 28723.00 61303.00 28734.00 61303.00 28745.00C61324.33 28777.00 61345.67 28809.00 61367.00 28841.00C61356.33 28851.67 61345.67 28862.33 61335.00 28873.00C61356.33 28894.33 61377.67 28915.67 61399.00 28937.00C61410.00 28937.00 61421.00 28937.00 61432.00 28937.00C61442.67 28926.33 61453.33 28915.67 61464.00 28905.00C61517.33 28937.33 61570.67 28969.67 61624.00 29002.00C61613.33 29012.67 61602.67 29023.33 61592.00 29034.00C61592.00 29077.00 61592.00 29120.00 61592.00 29163.00C61570.67 29184.33 61549.33 29205.67 61528.00 29227.00C61538.67 29259.00 61549.33 29291.00 61560.00 29323.00C61538.67 29333.67 61517.33 29344.33 61496.00 29355.00C61496.00 29366.00 61496.00 29377.00 61496.00 29388.00C61485.33 29388.00 61474.67 29388.00 61464.00 29388.00C61453.33 29420.00 61442.67 29452.00 61432.00 29484.00C61410.21 29494.90 61388.04 29505.29 61366.49 29516.51C61355.73 29527.06 61345.33 29538.10 61334.35 29548.33C61291.90 29569.89 61249.45 29591.44 61207.00 29613.00C61207.00 29634.33 61207.00 29655.67 61207.00 29677.00C61217.67 29677.00 61228.33 29677.00 61239.00 29677.00C61228.33 29698.33 61217.67 29719.67 61207.00 29741.00C61196.00 29730.33 61185.00 29719.67 61174.00 29709.00C61163.33 29719.67 61152.67 29730.33 61142.00 29741.00C61142.00 29762.67 61142.00 29784.33 61142.00 29806.00C61131.33 29827.33 61120.67 29848.67 61110.00 29870.00C61099.33 29870.00 61088.67 29870.00 61078.00 29870.00C61067.33 29880.67 61056.67 29891.33 61046.00 29902.00C61056.67 29934.33 61067.33 29966.67 61078.00 29999.00C61067.33 30009.67 61056.67 30020.33 61046.00 30031.00C61046.00 30041.67 61046.00 30052.33 61046.00 30063.00C61035.33 30073.67 61024.67 30084.33 61014.00 30095.00C61024.67 30116.33 61035.33 30137.67 61046.00 30159.00C61046.00 30180.67 61046.00 30202.33 61046.00 30224.00C61078.00 30256.00 61110.00 30288.00 61142.00 30320.00C61142.00 30341.33 61142.00 30362.67 61142.00 30384.00C61120.67 30384.00 61099.33 30384.00 61078.00 30384.00C61078.00 30395.00 61078.00 30406.00 61078.00 30417.00C61088.71 30427.93 61099.93 30438.49 61110.33 30449.65C61120.88 30470.77 61131.44 30491.88 61142.00 30513.00C61142.00 30523.67 61142.00 30534.33 61142.00 30545.00C61131.33 30555.67 61120.67 30566.33 61110.00 30577.00C61099.33 30577.00 61088.67 30577.00 61078.00 30577.00C61067.33 30587.67 61056.67 30598.33 61046.00 30609.00C61013.67 30609.00 60981.33 30609.00 60949.00 30609.00C60949.00 30630.67 60949.00 30652.33 60949.00 30674.00C60927.67 30684.67 60906.33 30695.33 60885.00 30706.00C60874.33 30695.33 60863.67 30684.67 60853.00 30674.00C60853.00 30684.67 60853.00 30695.33 60853.00 30706.00C60820.67 30706.00 60788.33 30706.00 60756.00 30706.00C60756.00 30738.00 60756.00 30770.00 60756.00 30802.00C60766.67 30802.00 60777.33 30802.00 60788.00 30802.00C60799.00 30812.67 60810.00 30823.33 60821.00 30834.00C60810.00 30845.00 60799.00 30856.00 60788.00 30867.00C60756.00 30856.00 60724.00 30845.00 60692.00 30834.00C60681.33 30845.00 60670.67 30856.00 60660.00 30867.00C60660.00 30877.67 60660.00 30888.33 60660.00 30899.00C60638.67 30909.67 60617.33 30920.33 60596.00 30931.00C60584.77 30909.53 60574.01 30887.74 60562.49 30866.48C60541.59 30844.73 60520.42 30823.24 60499.00 30802.00C60499.00 30791.33 60499.00 30780.67 60499.00 30770.00C60456.33 30770.00 60413.67 30770.00 60371.00 30770.00C60349.33 30759.33 60327.67 30748.67 60306.00 30738.00C60306.00 30748.67 60306.00 30759.33 60306.00 30770.00C60274.00 30748.67 60242.00 30727.33 60210.00 30706.00C60199.33 30716.67 60188.67 30727.33 60178.00 30738.00C60178.00 30770.00 60178.00 30802.00 60178.00 30834.00C60156.33 30845.00 60134.67 30856.00 60113.00 30867.00C60113.00 30899.00 60113.00 30931.00 60113.00 30963.00C60123.67 30963.00 60134.33 30963.00 60145.00 30963.00C60156.00 30995.33 60167.00 31027.67 60178.00 31060.00C60156.33 31070.67 60134.67 31081.33 60113.00 31092.00C60113.30 31103.10 60112.39 31114.40 60113.46 31125.38C60123.97 31156.92 60134.49 31188.46 60145.00 31220.00C60177.33 31241.67 60209.67 31263.33 60242.00 31285.00C60263.33 31274.33 60284.67 31263.67 60306.00 31253.00C60316.67 31274.33 60327.33 31295.67 60338.00 31317.00C60349.00 31317.00 60360.00 31317.00 60371.00 31317.00C60381.67 31327.67 60392.33 31338.33 60403.00 31349.00C60403.00 31338.33 60403.00 31327.67 60403.00 31317.00C60424.33 31317.00 60445.67 31317.00 60467.00 31317.00C60477.67 31327.67 60488.33 31338.33 60499.00 31349.00C60542.00 31359.67 60585.00 31370.33 60628.00 31381.00C60638.67 31402.33 60649.33 31423.67 60660.00 31445.00C60681.33 31456.00 60702.67 31467.00 60724.00 31478.00C60724.00 31488.67 60724.00 31499.33 60724.00 31510.00C60734.67 31520.67 60745.33 31531.33 60756.00 31542.00C60756.00 31552.67 60756.00 31563.33 60756.00 31574.00C60745.33 31584.67 60734.67 31595.33 60724.00 31606.00C60745.33 31616.67 60766.67 31627.33 60788.00 31638.00C60788.00 31648.67 60788.00 31659.33 60788.00 31670.00C60799.00 31670.00 60810.00 31670.00 60821.00 31670.00C60853.07 31713.24 60885.44 31756.30 60917.33 31799.65C60927.88 31820.77 60938.44 31841.88 60949.00 31863.00C60970.67 31863.00 60992.33 31863.00 61014.00 31863.00C61024.90 31884.79 61035.29 31906.96 61046.51 31928.51C61067.68 31949.68 61088.84 31970.84 61110.00 31992.00C61110.00 32002.67 61110.00 32013.33 61110.00 32024.00C61131.33 32013.33 61152.67 32002.67 61174.00 31992.00C61195.76 32013.57 61217.84 32034.88 61239.40 32056.61C61260.60 32088.74 61281.80 32120.87 61303.00 32153.00C61346.00 32153.00 61389.00 32153.00 61432.00 32153.00C61453.33 32163.67 61474.67 32174.33 61496.00 32185.00C61517.33 32185.00 61538.67 32185.00 61560.00 32185.00C61560.00 32217.00 61560.00 32249.00 61560.00 32281.00C61603.00 32292.00 61646.00 32303.00 61689.00 32314.00C61721.00 32346.00 61753.00 32378.00 61785.00 32410.00C61795.67 32410.00 61806.33 32410.00 61817.00 32410.00C61828.00 32420.67 61839.00 32431.33 61850.00 32442.00C61871.33 32442.00 61892.67 32442.00 61914.00 32442.00C61935.33 32485.00 61956.67 32528.00 61978.00 32571.00C61967.33 32592.33 61956.67 32613.67 61946.00 32635.00C61978.33 32667.33 62010.67 32699.67 62043.00 32732.00C62064.33 32742.67 62085.67 32753.33 62107.00 32764.00C62149.67 32764.00 62192.33 32764.00 62235.00 32764.00C62287.72 32816.15 62340.57 32868.18 62392.50 32921.13C62404.38 32933.35 62416.76 32945.21 62428.33 32957.65C62439.93 32981.50 62452.60 33004.85 62463.46 33029.03C62494.64 33101.35 62525.82 33173.68 62557.00 33246.00C62557.00 33278.00 62557.00 33310.00 62557.00 33342.00C62600.00 33385.00 62643.00 33428.00 62686.00 33471.00C62696.70 33503.49 62707.88 33535.86 62718.28 33568.43C62728.86 33621.62 62739.43 33674.81 62750.00 33728.00C62793.23 33782.10 62836.75 33835.99 62879.80 33890.22C62900.87 33922.14 62921.93 33954.07 62943.00 33986.00C62954.04 34029.57 62964.53 34073.30 62975.91 34116.77C62986.28 34148.18 62996.64 34179.59 63007.00 34211.00C63050.25 34221.61 63093.44 34232.68 63136.73 34243.00C63200.82 34243.00 63264.91 34243.00 63329.00 34243.00C63350.46 34232.10 63372.29 34221.71 63393.51 34210.48C63414.94 34188.94 63435.99 34166.89 63457.65 34145.67C63478.77 34135.12 63499.88 34124.56 63521.00 34114.00C63554.30 34124.83 63587.43 34136.22 63620.83 34146.70C63662.89 34157.14 63704.94 34167.57 63747.00 34178.00C63779.00 34210.33 63811.00 34242.67 63843.00 34275.00C63972.10 34317.89 64101.21 34360.81 64230.35 34403.55C64283.57 34425.03 64336.78 34446.51 64390.00 34468.00C64443.33 34510.67 64496.67 34553.33 64550.00 34596.00C64571.71 34628.58 64593.79 34660.97 64615.27 34693.68C64636.51 34747.12 64657.76 34800.56 64679.00 34854.00C64764.99 34929.37 64851.15 35004.55 64937.03 35080.03C64947.35 35090.35 64957.68 35100.68 64968.00 35111.00C64979.00 35111.00 64990.00 35111.00 65001.00 35111.00C65001.00 35068.00 65001.00 35025.00 65001.00 34982.00C65011.67 34971.33 65022.33 34960.67 65033.00 34950.00C65033.00 34928.67 65033.00 34907.33 65033.00 34886.00C65022.29 34875.07 65011.07 34864.50 65000.67 34853.35C64989.78 34831.90 64978.89 34810.45 64968.00 34789.00C64914.67 34767.67 64861.33 34746.33 64808.00 34725.00C64775.67 34660.67 64743.33 34596.33 64711.00 34532.00C64711.00 34489.00 64711.00 34446.00 64711.00 34403.00C64689.67 34392.33 64668.33 34381.67 64647.00 34371.00C64604.00 34371.00 64561.00 34371.00 64518.00 34371.00C64507.33 34339.00 64496.67 34307.00 64486.00 34275.00C64442.75 34264.39 64399.56 34253.32 64356.27 34243.00C64345.85 34243.00 64335.42 34243.00 64325.00 34243.00C64325.00 34232.33 64325.00 34221.67 64325.00 34211.00C64357.53 34167.85 64389.86 34124.52 64422.51 34081.49C64433.05 34070.72 64444.10 34060.33 64454.33 34049.35C64464.88 34028.23 64475.44 34007.12 64486.00 33986.00C64486.00 33964.33 64486.00 33942.67 64486.00 33921.00C64443.00 33878.33 64400.00 33835.67 64357.00 33793.00C64325.00 33782.00 64293.00 33771.00 64261.00 33760.00C64271.90 33738.54 64282.30 33716.72 64293.51 33695.49C64314.68 33674.32 64335.84 33653.16 64357.00 33632.00C64368.21 33577.89 64378.97 33523.65 64390.46 33469.62C64401.14 33437.11 64412.39 33404.78 64422.70 33372.17C64433.14 33330.11 64443.57 33288.06 64454.00 33246.00C64475.33 33224.67 64496.67 33203.33 64518.00 33182.00C64507.33 33149.67 64496.67 33117.33 64486.00 33085.00C64507.33 33042.33 64528.67 32999.67 64550.00 32957.00C64561.00 32946.33 64572.00 32935.67 64583.00 32925.00C64571.77 32903.21 64561.03 32881.05 64549.49 32859.49C64538.99 32848.99 64528.50 32838.50 64518.00 32828.00C64518.00 32817.33 64518.00 32806.67 64518.00 32796.00C64539.67 32785.33 64561.33 32774.67 64583.00 32764.00C64561.33 32742.33 64539.67 32720.67 64518.00 32699.00C64518.00 32688.33 64518.00 32677.67 64518.00 32667.00C64528.67 32656.33 64539.33 32645.67 64550.00 32635.00C64582.33 32635.00 64614.67 32635.00 64647.00 32635.00C64657.67 32613.67 64668.33 32592.33 64679.00 32571.00C64679.00 32528.00 64679.00 32485.00 64679.00 32442.00C64668.10 32420.54 64657.70 32398.72 64646.49 32377.49C64625.32 32356.32 64604.16 32335.16 64583.00 32314.00C64583.00 32281.67 64583.00 32249.33 64583.00 32217.00C64561.33 32217.00 64539.67 32217.00 64518.00 32217.00C64507.33 32206.33 64496.67 32195.67 64486.00 32185.00C64496.67 32142.00 64507.33 32099.00 64518.00 32056.00C64507.33 32024.00 64496.67 31992.00 64486.00 31960.00C64496.67 31949.33 64507.33 31938.67 64518.00 31928.00C64518.00 31895.67 64518.00 31863.33 64518.00 31831.00C64550.33 31809.67 64582.67 31788.33 64615.00 31767.00C64615.00 31713.33 64615.00 31659.67 64615.00 31606.00C64636.33 31584.67 64657.67 31563.33 64679.00 31542.00C64679.00 31531.33 64679.00 31520.67 64679.00 31510.00C64668.33 31499.33 64657.67 31488.67 64647.00 31478.00C64647.00 31403.00 64647.00 31328.00 64647.00 31253.00C64668.33 31199.33 64689.67 31145.67 64711.00 31092.00C64743.87 31069.83 64777.02 31048.05 64809.71 31025.63C64862.47 30983.42 64915.24 30941.21 64968.00 30899.00C64979.00 30877.33 64990.00 30855.67 65001.00 30834.00C65001.00 30802.00 65001.00 30770.00 65001.00 30738.00C65022.54 30705.85 65043.80 30673.49 65065.51 30641.48C65076.00 30630.65 65086.50 30619.83 65097.00 30609.00C65129.00 30609.00 65161.00 30609.00 65193.00 30609.00C65204.00 30598.33 65215.00 30587.67 65226.00 30577.00C65226.00 30545.00 65226.00 30513.00 65226.00 30481.00C65258.00 30481.00 65290.00 30481.00 65322.00 30481.00C65343.60 30459.62 65364.83 30437.74 65386.65 30416.67C65429.43 30395.12 65472.22 30373.56 65515.00 30352.00C65525.93 30341.29 65536.49 30330.06 65547.65 30319.68C65569.10 30309.12 65590.55 30298.56 65612.00 30288.00C65644.00 30298.67 65676.00 30309.33 65708.00 30320.00C65751.00 30277.00 65794.00 30234.00 65837.00 30191.00C65869.48 30190.86 65901.99 30191.27 65934.44 30190.79C66008.96 30180.20 66083.48 30169.60 66158.00 30159.00C66168.67 30148.33 66179.33 30137.67 66190.00 30127.00C66190.00 30095.00 66190.00 30063.00 66190.00 30031.00C66200.67 30020.33 66211.33 30009.67 66222.00 29999.00C66211.33 29977.33 66200.67 29955.67 66190.00 29934.00C66190.00 29912.67 66190.00 29891.33 66190.00 29870.00C66200.67 29859.33 66211.33 29848.67 66222.00 29838.00C66233.19 29838.22 66244.59 29837.56 66255.65 29838.33C66276.77 29848.88 66297.88 29859.44 66319.00 29870.00C66351.22 29870.15 66383.54 29869.69 66415.69 29870.23C66447.79 29880.82 66479.90 29891.41 66512.00 29902.00C66512.00 29891.33 66512.00 29880.67 66512.00 29870.00C66522.96 29859.35 66533.44 29847.94 66544.69 29837.77C66576.46 29827.18 66608.23 29816.59 66640.00 29806.00C66661.92 29827.08 66683.60 29848.40 66705.00 29870.00C66737.26 29859.41 66769.41 29848.21 66801.73 29838.00C66812.35 29838.22 66823.16 29837.57 66833.65 29838.32C66876.43 29859.55 66919.22 29880.78 66962.00 29902.00C66972.67 29945.00 66983.33 29988.00 66994.00 30031.00C67004.67 30041.67 67015.33 30052.33 67026.00 30063.00C67058.33 30063.00 67090.67 30063.00 67123.00 30063.00C67165.67 30084.33 67208.33 30105.67 67251.00 30127.00C67315.33 30127.00 67379.67 30127.00 67444.00 30127.00C67454.67 30116.33 67465.33 30105.67 67476.00 30095.00C67487.00 30105.67 67498.00 30116.33 67509.00 30127.00C67519.67 30127.00 67530.33 30127.00 67541.00 30127.00C67551.67 30116.33 67562.33 30105.67 67573.00 30095.00C67594.33 30095.00 67615.67 30095.00 67637.00 30095.00C67647.67 30138.00 67658.33 30181.00 67669.00 30224.00C67658.33 30234.67 67647.67 30245.33 67637.00 30256.00C67637.00 30298.67 67637.00 30341.33 67637.00 30384.00C67647.67 30384.00 67658.33 30384.00 67669.00 30384.00C67669.00 30405.67 67669.00 30427.33 67669.00 30449.00C67712.00 30491.67 67755.00 30534.33 67798.00 30577.00C67830.00 30555.67 67862.00 30534.33 67894.00 30513.00C67915.92 30534.08 67937.60 30555.40 67959.00 30577.00C67959.15 30609.55 67958.69 30642.20 67959.23 30674.69C67969.82 30706.46 67980.41 30738.23 67991.00 30770.00C68044.67 30770.00 68098.33 30770.00 68152.00 30770.00C68173.33 30780.67 68194.67 30791.33 68216.00 30802.00C68216.00 30877.00 68216.00 30952.00 68216.00 31027.00C68226.67 31027.00 68237.33 31027.00 68248.00 31027.00C68269.08 31048.92 68290.40 31070.60 68312.00 31092.00C68323.00 31081.33 68334.00 31070.67 68345.00 31060.00C68355.67 31081.33 68366.33 31102.67 68377.00 31124.00C68366.09 31145.45 68355.71 31167.29 68344.48 31188.51C68333.65 31199.01 68322.83 31209.50 68312.00 31220.00C68312.00 31231.00 68312.00 31242.00 68312.00 31253.00C68344.33 31263.67 68376.67 31274.33 68409.00 31285.00C68398.33 31306.33 68387.67 31327.67 68377.00 31349.00C68387.67 31359.67 68398.33 31370.33 68409.00 31381.00C68398.33 31402.33 68387.67 31423.67 68377.00 31445.00C68387.90 31466.79 68398.29 31488.96 68409.51 31510.51C68420.01 31521.01 68430.51 31531.51 68441.00 31542.00C68430.33 31563.33 68419.67 31584.67 68409.00 31606.00C68441.00 31595.33 68473.00 31584.67 68505.00 31574.00C68537.33 31595.33 68569.67 31616.67 68602.00 31638.00C68612.67 31627.33 68623.33 31616.67 68634.00 31606.00C68687.67 31627.33 68741.33 31648.67 68795.00 31670.00C68805.67 31670.00 68816.33 31670.00 68827.00 31670.00C68816.33 31691.67 68805.67 31713.33 68795.00 31735.00C68805.67 31745.67 68816.33 31756.33 68827.00 31767.00C68848.33 31745.67 68869.67 31724.33 68891.00 31703.00C68923.33 31692.00 68955.67 31681.00 68988.00 31670.00C68988.00 31659.33 68988.00 31648.67 68988.00 31638.00C68998.67 31638.00 69009.33 31638.00 69020.00 31638.00C69030.67 31627.33 69041.33 31616.67 69052.00 31606.00C69063.10 31606.30 69074.40 31605.40 69085.38 31606.46C69117.26 31616.97 69149.13 31627.49 69181.00 31638.00C69181.00 31606.00 69181.00 31574.00 69181.00 31542.00C69234.33 31563.33 69287.67 31584.67 69341.00 31606.00C69341.00 31616.67 69341.00 31627.33 69341.00 31638.00C69362.67 31638.00 69384.33 31638.00 69406.00 31638.00C69416.67 31648.67 69427.33 31659.33 69438.00 31670.00C69448.67 31670.00 69459.33 31670.00 69470.00 31670.00C69513.00 31627.33 69556.00 31584.67 69599.00 31542.00C69599.00 31531.33 69599.00 31520.67 69599.00 31510.00C69577.33 31499.33 69555.67 31488.67 69534.00 31478.00C69555.67 31456.33 69577.33 31434.67 69599.00 31413.00C69609.67 31413.00 69620.33 31413.00 69631.00 31413.00C69641.67 31391.67 69652.33 31370.33 69663.00 31349.00C69652.33 31338.33 69641.67 31327.67 69631.00 31317.00C69641.67 31306.33 69652.33 31295.67 69663.00 31285.00C69652.33 31274.33 69641.67 31263.67 69631.00 31253.00C69662.45 31220.12 69694.87 31188.21 69727.00 31156.00C69791.33 31156.00 69855.67 31156.00 69920.00 31156.00C69930.67 31166.67 69941.33 31177.33 69952.00 31188.00C69973.60 31166.63 69994.82 31144.73 70016.65 31123.68C70038.10 31113.12 70059.55 31102.56 70081.00 31092.00C70113.00 31092.00 70145.00 31092.00 70177.00 31092.00C70187.67 31070.33 70198.33 31048.67 70209.00 31027.00C70252.00 31027.00 70295.00 31027.00 70338.00 31027.00C70348.93 31016.29 70359.49 31005.06 70370.65 30994.68C70413.43 30973.45 70456.22 30952.22 70499.00 30931.00C70509.67 30931.00 70520.33 30931.00 70531.00 30931.00C70541.67 30909.67 70552.33 30888.33 70563.00 30867.00C70563.00 30834.67 70563.00 30802.33 70563.00 30770.00C70552.33 30770.00 70541.67 30770.00 70531.00 30770.00C70541.67 30738.00 70552.33 30706.00 70563.00 30674.00C70541.67 30652.33 70520.33 30630.67 70499.00 30609.00C70499.00 30577.00 70499.00 30545.00 70499.00 30513.00C70477.67 30513.00 70456.33 30513.00 70435.00 30513.00C70402.61 30481.06 70370.06 30449.28 70338.00 30417.00C70327.33 30395.33 70316.67 30373.67 70306.00 30352.00C70284.67 30341.33 70263.33 30330.67 70242.00 30320.00C70242.00 30298.67 70242.00 30277.33 70242.00 30256.00C70220.33 30266.67 70198.67 30277.33 70177.00 30288.00C70166.33 30266.67 70155.67 30245.33 70145.00 30224.00C70155.67 30213.00 70166.33 30202.00 70177.00 30191.00C70177.00 30169.67 70177.00 30148.33 70177.00 30127.00C70155.67 30116.33 70134.33 30105.67 70113.00 30095.00C70112.61 30079.99 70114.31 30064.81 70110.85 30050.06C70100.90 29990.04 70090.95 29930.02 70081.00 29870.00C70102.33 29859.33 70123.67 29848.67 70145.00 29838.00C70145.21 29827.14 70144.57 29816.08 70145.32 29805.35C70155.88 29783.90 70166.44 29762.45 70177.00 29741.00C70177.00 29719.67 70177.00 29698.33 70177.00 29677.00C70241.33 29634.00 70305.67 29591.00 70370.00 29548.00C70370.00 29526.67 70370.00 29505.33 70370.00 29484.00C70359.33 29473.33 70348.67 29462.67 70338.00 29452.00C70348.67 29441.33 70359.33 29430.67 70370.00 29420.00C70359.33 29409.33 70348.67 29398.67 70338.00 29388.00C70348.65 29376.71 70360.04 29365.88 70370.23 29354.31C70380.82 29322.54 70391.41 29290.77 70402.00 29259.00C70423.67 29248.33 70445.33 29237.67 70467.00 29227.00C70467.21 29216.14 70466.57 29205.08 70467.32 29194.35C70477.88 29172.90 70488.44 29151.45 70499.00 29130.00C70488.41 29097.74 70477.21 29065.59 70467.00 29033.27C70467.00 29022.85 70467.00 29012.42 70467.00 29002.00C70499.00 29002.00 70531.00 29002.00 70563.00 29002.00C70563.00 28959.00 70563.00 28916.00 70563.00 28873.00C70584.33 28851.67 70605.67 28830.33 70627.00 28809.00C70595.00 28766.00 70563.00 28723.00 70531.00 28680.00C70541.67 28669.33 70552.33 28658.67 70563.00 28648.00C70573.67 28605.00 70584.33 28562.00 70595.00 28519.00C70584.33 28487.00 70573.67 28455.00 70563.00 28423.00C70573.67 28412.33 70584.33 28401.67 70595.00 28391.00C70605.67 28401.67 70616.33 28412.33 70627.00 28423.00C70648.67 28412.33 70670.33 28401.67 70692.00 28391.00C70702.67 28369.67 70713.33 28348.33 70724.00 28327.00C70724.00 28305.33 70724.00 28283.67 70724.00 28262.00C70734.67 28251.33 70745.33 28240.67 70756.00 28230.00C70777.33 28240.67 70798.67 28251.33 70820.00 28262.00C70809.33 28240.67 70798.67 28219.33 70788.00 28198.00C70820.33 28165.67 70852.67 28133.33 70885.00 28101.00C70895.67 28101.00 70906.33 28101.00 70917.00 28101.00C70927.67 28079.67 70938.33 28058.33 70949.00 28037.00C70938.33 28026.33 70927.67 28015.67 70917.00 28005.00C70917.00 27994.33 70917.00 27983.67 70917.00 27973.00C70906.33 27962.33 70895.67 27951.67 70885.00 27941.00C70926.92 27855.60 70969.74 27770.65 71011.84 27685.34C71014.34 27679.71 71012.38 27673.03 71013.00 27666.97C71013.00 27629.64 71013.00 27592.32 71013.00 27555.00C71056.00 27512.00 71099.00 27469.00 71142.00 27426.00C71131.33 27415.33 71120.67 27404.67 71110.00 27394.00C71131.33 27394.00 71152.67 27394.00 71174.00 27394.00C71195.33 27362.00 71216.67 27330.00 71238.00 27298.00C71270.33 27287.33 71302.67 27276.67 71335.00 27266.00C71324.33 27244.33 71313.67 27222.67 71303.00 27201.00C71313.67 27190.33 71324.33 27179.67 71335.00 27169.00C71335.00 27137.00 71335.00 27105.00 71335.00 27073.00C71356.33 27051.33 71377.67 27029.67 71399.00 27008.00C71377.67 26986.67 71356.33 26965.33 71335.00 26944.00C71335.00 26922.67 71335.00 26901.33 71335.00 26880.00C71367.00 26847.67 71399.00 26815.33 71431.00 26783.00C71431.00 26772.33 71431.00 26761.67 71431.00 26751.00C71485.29 26729.28 71539.79 26708.02 71593.96 26686.02C71614.76 26675.45 71635.94 26665.38 71656.51 26654.49C71678.01 26632.99 71699.51 26611.49 71721.00 26590.00C71731.67 26483.00 71742.33 26376.00 71753.00 26269.00C71774.33 26215.33 71795.67 26161.67 71817.00 26108.00C73617.67 26108.00 75418.33 26108.00 77219.00 26108.00C77219.00 26569.00 77219.00 27030.00 77219.00 27491.00C77229.67 27512.33 77240.33 27533.67 77251.00 27555.00C77251.00 27597.67 77251.00 27640.33 77251.00 27683.00C77261.67 27694.00 77272.33 27705.00 77283.00 27716.00C77293.67 27716.00 77304.33 27716.00 77315.00 27716.00C77336.67 27737.33 77358.33 27758.67 77380.00 27780.00C77369.00 27876.33 77358.00 27972.67 77347.00 28069.00C77358.00 28079.67 77369.00 28090.33 77380.00 28101.00C77380.00 28122.67 77380.00 28144.33 77380.00 28166.00C77347.67 28230.33 77315.33 28294.67 77283.00 28359.00C77283.10 28412.57 77282.81 28466.17 77283.14 28519.72C77293.76 28573.14 77304.38 28626.57 77315.00 28680.00C77325.67 28680.00 77336.33 28680.00 77347.00 28680.00C77347.00 28712.33 77347.00 28744.67 77347.00 28777.00C77336.33 28798.33 77325.67 28819.67 77315.00 28841.00C77315.00 28916.00 77315.00 28991.00 77315.00 29066.00C77358.24 29098.40 77401.29 29131.11 77444.65 29163.32C77487.43 29184.55 77530.22 29205.78 77573.00 29227.00C77573.00 29237.67 77573.00 29248.33 77573.00 29259.00C77605.00 29259.00 77637.00 29259.00 77669.00 29259.00C77669.00 29269.67 77669.00 29280.33 77669.00 29291.00C77679.67 29280.33 77690.33 29269.67 77701.00 29259.00C77722.33 29269.67 77743.67 29280.33 77765.00 29291.00C77786.67 29323.33 77808.33 29355.67 77830.00 29388.00C77862.00 29398.67 77894.00 29409.33 77926.00 29420.00C77936.67 29452.00 77947.33 29484.00 77958.00 29516.00C77969.00 29516.00 77980.00 29516.00 77991.00 29516.00C78001.67 29526.67 78012.33 29537.33 78023.00 29548.00C78012.33 29601.67 78001.67 29655.33 77991.00 29709.00C78001.67 29752.00 78012.33 29795.00 78023.00 29838.00C78033.71 29848.93 78044.93 29859.49 78055.33 29870.65C78065.88 29891.77 78076.44 29912.88 78087.00 29934.00C78087.00 29977.00 78087.00 30020.00 78087.00 30063.00C78076.33 30084.33 78065.67 30105.67 78055.00 30127.00C78033.67 30127.00 78012.33 30127.00 77991.00 30127.00C77991.00 30159.33 77991.00 30191.67 77991.00 30224.00C78001.67 30234.67 78012.33 30245.33 78023.00 30256.00C78023.00 30288.00 78023.00 30320.00 78023.00 30352.00C78012.33 30362.67 78001.67 30373.33 77991.00 30384.00C77991.00 30405.67 77991.00 30427.33 77991.00 30449.00C78012.33 30470.33 78033.67 30491.67 78055.00 30513.00C78055.00 30523.67 78055.00 30534.33 78055.00 30545.00C78065.67 30545.00 78076.33 30545.00 78087.00 30545.00C78097.61 30588.25 78108.68 30631.44 78119.00 30674.73C78119.00 30685.15 78119.00 30695.58 78119.00 30706.00C78151.33 30716.67 78183.67 30727.33 78216.00 30738.00C78248.00 30770.00 78280.00 30802.00 78312.00 30834.00C78312.00 30845.00 78312.00 30856.00 78312.00 30867.00C78322.67 30877.67 78333.33 30888.33 78344.00 30899.00C78354.67 30888.33 78365.33 30877.67 78376.00 30867.00C78397.67 30877.67 78419.33 30888.33 78441.00 30899.00C78473.00 30963.33 78505.00 31027.67 78537.00 31092.00C78558.33 31102.67 78579.67 31113.33 78601.00 31124.00C78622.67 31124.00 78644.33 31124.00 78666.00 31124.00C78666.00 31134.67 78666.00 31145.33 78666.00 31156.00C78687.33 31177.33 78708.67 31198.67 78730.00 31220.00C78740.67 31220.00 78751.33 31220.00 78762.00 31220.00C78762.00 31231.00 78762.00 31242.00 78762.00 31253.00C78772.67 31263.67 78783.33 31274.33 78794.00 31285.00C78794.00 31295.67 78794.00 31306.33 78794.00 31317.00C78858.33 31359.67 78922.67 31402.33 78987.00 31445.00C78987.00 31456.00 78987.00 31467.00 78987.00 31478.00C78997.67 31478.00 79008.33 31478.00 79019.00 31478.00C79030.00 31467.00 79041.00 31456.00 79052.00 31445.00C79062.67 31456.00 79073.33 31467.00 79084.00 31478.00C79094.67 31467.00 79105.33 31456.00 79116.00 31445.00C79116.00 31466.67 79116.00 31488.33 79116.00 31510.00C79126.67 31531.33 79137.33 31552.67 79148.00 31574.00C79158.67 31574.00 79169.33 31574.00 79180.00 31574.00C79190.67 31595.33 79201.33 31616.67 79212.00 31638.00C79222.67 31638.00 79233.33 31638.00 79244.00 31638.00C79244.00 31627.33 79244.00 31616.67 79244.00 31606.00C79255.00 31606.00 79266.00 31606.00 79277.00 31606.00C79319.67 31638.33 79362.33 31670.67 79405.00 31703.00C79405.00 31713.67 79405.00 31724.33 79405.00 31735.00C79373.00 31745.67 79341.00 31756.33 79309.00 31767.00C79319.67 31788.33 79330.33 31809.67 79341.00 31831.00C79330.33 31863.33 79319.67 31895.67 79309.00 31928.00C79351.67 31960.00 79394.33 31992.00 79437.00 32024.00C79437.00 32045.67 79437.00 32067.33 79437.00 32089.00C79458.67 32099.67 79480.33 32110.33 79502.00 32121.00C79502.00 32142.33 79502.00 32163.67 79502.00 32185.00C79491.28 32195.93 79480.08 32206.50 79469.67 32217.65C79458.78 32238.76 79447.89 32259.88 79437.00 32281.00C79448.00 32292.00 79459.00 32303.00 79470.00 32314.00C79459.00 32346.00 79448.00 32378.00 79437.00 32410.00C79458.67 32431.33 79480.33 32452.67 79502.00 32474.00C79534.00 32474.00 79566.00 32474.00 79598.00 32474.00C79641.00 32517.00 79684.00 32560.00 79727.00 32603.00C79727.00 32646.00 79727.00 32689.00 79727.00 32732.00C79737.67 32742.67 79748.33 32753.33 79759.00 32764.00C79759.00 32774.67 79759.00 32785.33 79759.00 32796.00C79769.67 32806.67 79780.33 32817.33 79791.00 32828.00C79801.67 32817.33 79812.33 32806.67 79823.00 32796.00C79833.67 32828.00 79844.33 32860.00 79855.00 32892.00C79887.33 32903.00 79919.67 32914.00 79952.00 32925.00C79941.33 32946.33 79930.67 32967.67 79920.00 32989.00C80005.67 32978.33 80091.33 32967.67 80177.00 32957.00C80177.00 32946.33 80177.00 32935.67 80177.00 32925.00C80198.33 32925.00 80219.67 32925.00 80241.00 32925.00C80262.67 32967.67 80284.33 33010.33 80306.00 33053.00C80348.67 33063.67 80391.33 33074.33 80434.00 33085.00C80466.33 33138.67 80498.67 33192.33 80531.00 33246.00C80552.33 33256.67 80573.67 33267.33 80595.00 33278.00C80627.00 33321.00 80659.00 33364.00 80691.00 33407.00C80702.65 33395.28 80715.20 33384.39 80726.27 33372.15C80768.56 33319.13 80810.53 33265.81 80853.03 33212.97C80863.35 33202.65 80873.68 33192.32 80884.00 33182.00C80884.00 33149.67 80884.00 33117.33 80884.00 33085.00C80927.00 33074.33 80970.00 33063.67 81013.00 33053.00C81034.33 33031.67 81055.67 33010.33 81077.00 32989.00C81066.33 32978.33 81055.67 32967.67 81045.00 32957.00C81055.67 32935.33 81066.33 32913.67 81077.00 32892.00C81141.33 32849.33 81205.67 32806.67 81270.00 32764.00C81280.86 32764.22 81291.92 32763.57 81302.65 32764.32C81324.10 32774.88 81345.55 32785.44 81367.00 32796.00C81377.67 32817.33 81388.33 32838.67 81399.00 32860.00C81399.30 32871.11 81398.40 32882.40 81399.46 32893.38C81409.97 32925.26 81420.49 32957.13 81431.00 32989.00C81474.00 32999.67 81517.00 33010.33 81560.00 33021.00C81570.67 33031.67 81581.33 33042.33 81592.00 33053.00C81591.85 33074.55 81592.30 33096.20 81591.77 33117.69C81581.18 33149.79 81570.59 33181.90 81560.00 33214.00C81581.33 33235.33 81602.67 33256.67 81624.00 33278.00C81624.00 33310.33 81624.00 33342.67 81624.00 33375.00C81613.35 33385.96 81601.94 33396.44 81591.77 33407.69C81559.51 33503.79 81527.26 33599.90 81495.00 33696.00C81495.00 33728.33 81495.00 33760.67 81495.00 33793.00C81484.33 33803.67 81473.67 33814.33 81463.00 33825.00C81463.00 33867.67 81463.00 33910.33 81463.00 33953.00C81484.33 33974.67 81505.67 33996.33 81527.00 34018.00C81548.67 34018.00 81570.33 34018.00 81592.00 34018.00C81581.33 34028.67 81570.67 34039.33 81560.00 34050.00C81560.00 34071.33 81560.00 34092.67 81560.00 34114.00C81592.00 34124.67 81624.00 34135.33 81656.00 34146.00C81656.00 34178.33 81656.00 34210.67 81656.00 34243.00C81666.86 34242.78 81677.92 34243.43 81688.65 34242.67C81709.77 34232.12 81730.88 34221.56 81752.00 34211.00C81784.33 34221.67 81816.67 34232.33 81849.00 34243.00C81859.67 34253.67 81870.33 34264.33 81881.00 34275.00C81870.33 34296.33 81859.67 34317.67 81849.00 34339.00C81859.67 34349.67 81870.33 34360.33 81881.00 34371.00C81891.67 34360.33 81902.33 34349.67 81913.00 34339.00C81923.67 34360.33 81934.33 34381.67 81945.00 34403.00C81977.33 34381.67 82009.67 34360.33 82042.00 34339.00C82063.55 34339.15 82085.20 34338.69 82106.69 34339.23C82138.79 34349.82 82170.90 34360.41 82203.00 34371.00C82203.00 34381.67 82203.00 34392.33 82203.00 34403.00C82235.00 34414.00 82267.00 34425.00 82299.00 34436.00C82299.00 34446.67 82299.00 34457.33 82299.00 34468.00C82309.67 34468.00 82320.33 34468.00 82331.00 34468.00C82341.67 34500.00 82352.33 34532.00 82363.00 34564.00C82374.04 34574.93 82385.62 34585.47 82396.32 34596.65C82406.88 34618.10 82417.44 34639.55 82428.00 34661.00C82449.33 34661.00 82470.67 34661.00 82492.00 34661.00C82492.00 34693.00 82492.00 34725.00 82492.00 34757.00C82502.86 34756.78 82513.92 34757.43 82524.65 34756.67C82545.77 34746.12 82566.88 34735.56 82588.00 34725.00C82609.67 34735.67 82631.33 34746.33 82653.00 34757.00C82653.00 34746.33 82653.00 34735.67 82653.00 34725.00C82685.00 34735.67 82717.00 34746.33 82749.00 34757.00C82770.33 34746.33 82791.67 34735.67 82813.00 34725.00C82813.00 34778.67 82813.00 34832.33 82813.00 34886.00C82835.08 34928.46 82856.75 34971.12 82878.00 35014.00C82867.33 35035.67 82856.67 35057.33 82846.00 35079.00C82867.33 35079.00 82888.67 35079.00 82910.00 35079.00C82931.33 35111.00 82952.67 35143.00 82974.00 35175.00C83006.33 35153.67 83038.67 35132.33 83071.00 35111.00C83081.67 35121.67 83092.33 35132.33 83103.00 35143.00C83167.33 35132.33 83231.67 35121.67 83296.00 35111.00C83296.00 35100.33 83296.00 35089.67 83296.00 35079.00C83306.67 35068.33 83317.33 35057.67 83328.00 35047.00C83349.33 35068.33 83370.67 35089.67 83392.00 35111.00C83381.33 35121.67 83370.67 35132.33 83360.00 35143.00C83370.67 35164.33 83381.33 35185.67 83392.00 35207.00C83402.67 35196.33 83413.33 35185.67 83424.00 35175.00C83456.33 35196.33 83488.67 35217.67 83521.00 35239.00C83553.00 35239.00 83585.00 35239.00 83617.00 35239.00C83627.67 35271.33 83638.33 35303.67 83649.00 35336.00C83670.67 35336.00 83692.33 35336.00 83714.00 35336.00C83703.33 35379.00 83692.67 35422.00 83682.00 35465.00C83714.00 35443.33 83746.00 35421.67 83778.00 35400.00C83788.90 35421.79 83799.29 35443.96 83810.51 35465.51C83821.01 35476.01 83831.51 35486.50 83842.00 35497.00C83863.67 35486.33 83885.33 35475.67 83907.00 35465.00C83907.00 35486.33 83907.00 35507.67 83907.00 35529.00C83917.67 35550.33 83928.33 35571.67 83939.00 35593.00C84003.33 35571.67 84067.67 35550.33 84132.00 35529.00C84131.78 35539.86 84132.43 35550.92 84131.67 35561.65C84121.12 35582.77 84110.56 35603.88 84100.00 35625.00C84121.33 35636.00 84142.67 35647.00 84164.00 35658.00C84185.33 35625.67 84206.67 35593.33 84228.00 35561.00C84249.67 35561.00 84271.33 35561.00 84293.00 35561.00C84293.00 35582.33 84293.00 35603.67 84293.00 35625.00C84303.67 35636.00 84314.33 35647.00 84325.00 35658.00C84335.67 35658.00 84346.33 35658.00 84357.00 35658.00C84357.00 35679.33 84357.00 35700.67 84357.00 35722.00C84335.67 35732.67 84314.33 35743.33 84293.00 35754.00C84303.67 35775.33 84314.33 35796.67 84325.00 35818.00C84357.00 35796.67 84389.00 35775.33 84421.00 35754.00C84453.33 35786.00 84485.67 35818.00 84518.00 35850.00C84539.33 35839.33 84560.67 35828.67 84582.00 35818.00C84571.33 35796.67 84560.67 35775.33 84550.00 35754.00C84582.18 35764.86 84614.57 35775.26 84646.61 35786.40C84678.74 35807.60 84710.87 35828.80 84743.00 35850.00C84753.67 35818.00 84764.33 35786.00 84775.00 35754.00C84817.67 35754.00 84860.33 35754.00 84903.00 35754.00C84903.00 35764.67 84903.00 35775.33 84903.00 35786.00C84914.00 35786.00 84925.00 35786.00 84936.00 35786.00C84946.67 35764.67 84957.33 35743.33 84968.00 35722.00C84968.00 35711.33 84968.00 35700.67 84968.00 35690.00C84978.67 35690.00 84989.33 35690.00 85000.00 35690.00C85010.67 35700.67 85021.33 35711.33 85032.00 35722.00C85021.33 35732.67 85010.67 35743.33 85000.00 35754.00C85010.93 35764.71 85021.49 35775.93 85032.65 35786.33C85053.77 35796.88 85074.88 35807.44 85096.00 35818.00C85107.00 35818.00 85118.00 35818.00 85129.00 35818.00C85139.93 35807.29 85150.49 35796.07 85161.65 35785.67C85182.77 35775.12 85203.88 35764.56 85225.00 35754.00C85235.67 35775.33 85246.33 35796.67 85257.00 35818.00C85267.67 35818.00 85278.33 35818.00 85289.00 35818.00C85299.67 35807.33 85310.33 35796.67 85321.00 35786.00C85332.00 35807.33 85343.00 35828.67 85354.00 35850.00C85375.33 35828.67 85396.67 35807.33 85418.00 35786.00C85417.66 35797.36 85418.68 35808.87 85417.47 35820.12C85406.98 35862.42 85396.49 35904.71 85386.00 35947.00C85396.67 35957.67 85407.33 35968.33 85418.00 35979.00C85418.00 35989.67 85418.00 36000.33 85418.00 36011.00C85471.67 36011.00 85525.33 36011.00 85579.00 36011.00C85600.33 36054.00 85621.67 36097.00 85643.00 36140.00C85675.00 36107.67 85707.00 36075.33 85739.00 36043.00C85760.67 36064.67 85782.33 36086.33 85804.00 36108.00C85804.00 36129.33 85804.00 36150.67 85804.00 36172.00C85825.46 36182.90 85847.28 36193.30 85868.51 36204.51C85879.01 36215.01 85889.51 36225.50 85900.00 36236.00C85900.00 36246.67 85900.00 36257.33 85900.00 36268.00C85878.67 36289.67 85857.33 36311.33 85836.00 36333.00C85846.67 36365.00 85857.33 36397.00 85868.00 36429.00C85889.33 36450.67 85910.67 36472.33 85932.00 36494.00C85964.33 36569.00 85996.67 36644.00 86029.00 36719.00C86039.67 36729.67 86050.33 36740.33 86061.00 36751.00C86125.33 36740.33 86189.67 36729.67 86254.00 36719.00C86264.90 36740.46 86275.30 36762.28 86286.51 36783.51C86307.68 36804.68 86328.84 36825.84 86350.00 36847.00C86361.00 36879.33 86372.00 36911.67 86383.00 36944.00C86393.67 36954.67 86404.33 36965.33 86415.00 36976.00C86479.58 36986.63 86544.13 36997.57 86608.73 37008.00C86619.15 37008.00 86629.58 37008.00 86640.00 37008.00C86651.13 37018.86 86661.77 37030.32 86673.21 37040.81C86704.81 37061.87 86736.40 37082.94 86768.00 37104.00C86800.33 37147.00 86832.67 37190.00 86865.00 37233.00C86886.33 37243.67 86907.67 37254.33 86929.00 37265.00C87014.67 37265.00 87100.33 37265.00 87186.00 37265.00C87229.00 37243.67 87272.00 37222.33 87315.00 37201.00C87336.33 37201.00 87357.67 37201.00 87379.00 37201.00C87411.39 37232.94 87443.94 37264.72 87476.00 37297.00C87486.59 37329.59 87497.79 37362.08 87508.00 37394.73C87508.00 37437.15 87508.00 37479.58 87508.00 37522.00C87497.33 37554.33 87486.67 37586.67 87476.00 37619.00C87443.55 37651.22 87410.88 37683.25 87378.57 37715.58C87346.71 37758.39 87314.85 37801.19 87283.00 37844.00C87283.00 37887.00 87283.00 37930.00 87283.00 37973.00C87293.67 37983.67 87304.33 37994.33 87315.00 38005.00C87336.55 38005.15 87358.20 38004.69 87379.69 38005.23C87443.85 38026.33 87507.95 38047.59 87572.00 38069.00C87582.67 38090.33 87593.33 38111.67 87604.00 38133.00C87636.33 38154.67 87668.67 38176.33 87701.00 38198.00C87743.67 38198.00 87786.33 38198.00 87829.00 38198.00C87861.59 38187.08 87894.07 38175.53 87926.73 38165.00C87947.82 38165.00 87968.91 38165.00 87990.00 38165.00C88000.67 38176.00 88011.33 38187.00 88022.00 38198.00C88033.00 38187.00 88044.00 38176.00 88055.00 38165.00C88065.61 38122.08 88076.69 38079.22 88087.00 38036.27C88087.00 38025.85 88087.00 38015.42 88087.00 38005.00C88108.33 38005.00 88129.67 38005.00 88151.00 38005.00C88161.67 38015.67 88172.33 38026.33 88183.00 38037.00C88204.33 38026.33 88225.67 38015.67 88247.00 38005.00C88258.00 37983.33 88269.00 37961.67 88280.00 37940.00C88312.00 37929.33 88344.00 37918.67 88376.00 37908.00C88397.33 37886.67 88418.67 37865.33 88440.00 37844.00C88472.33 37844.00 88504.67 37844.00 88537.00 37844.00C88579.67 37897.67 88622.33 37951.33 88665.00 38005.00C88676.26 37994.28 88687.18 37983.10 88698.65 37972.67C88740.89 37950.70 88783.34 37929.14 88826.00 37908.00C88858.33 37940.33 88890.67 37972.67 88923.00 38005.00C88944.33 38005.00 88965.67 38005.00 88987.00 38005.00C89019.00 37983.33 89051.00 37961.67 89083.00 37940.00C89094.00 37918.67 89105.00 37897.33 89116.00 37876.00C89137.33 37865.33 89158.67 37854.67 89180.00 37844.00C89212.26 37854.59 89244.41 37865.79 89276.73 37876.00C89308.82 37876.00 89340.91 37876.00 89373.00 37876.00C89394.33 37865.33 89415.67 37854.67 89437.00 37844.00C89447.67 37811.67 89458.33 37779.33 89469.00 37747.00C89479.67 37747.00 89490.33 37747.00 89501.00 37747.00C89501.00 37725.67 89501.00 37704.33 89501.00 37683.00C89512.26 37672.29 89523.18 37661.08 89534.65 37650.67C89556.02 37640.11 89577.24 37629.14 89598.71 37618.82C89641.47 37608.22 89684.24 37597.61 89727.00 37587.00C89769.67 37533.33 89812.33 37479.67 89855.00 37426.00C89887.33 37436.67 89919.67 37447.33 89952.00 37458.00C89984.00 37426.00 90016.00 37394.00 90048.00 37362.00C90112.33 37362.00 90176.67 37362.00 90241.00 37362.00C90316.00 37340.33 90391.00 37318.67 90466.00 37297.00C90465.79 37307.86 90466.43 37318.92 90465.68 37329.65C90454.52 37351.88 90444.05 37374.49 90432.45 37396.47C90378.74 37482.39 90324.70 37568.12 90271.19 37654.16C90228.79 37728.11 90186.40 37802.05 90144.00 37876.00C90101.12 37919.12 90058.42 37962.46 90015.41 38005.43C89971.57 38037.92 89928.00 38070.80 89883.97 38103.03C89820.41 38145.43 89756.98 38188.05 89693.35 38230.33C89586.57 38283.89 89479.78 38337.44 89373.00 38391.00C89319.33 38401.67 89265.67 38412.33 89212.00 38423.00C89179.85 38444.54 89147.49 38465.80 89115.48 38487.51C89104.64 38498.28 89093.16 38508.62 89082.71 38519.67C89050.33 38595.30 89018.33 38671.10 88985.71 38746.62C88975.48 38767.41 88965.24 38788.21 88955.00 38809.00C88955.00 38841.00 88955.00 38873.00 88955.00 38905.00C88943.97 38926.68 88933.53 38948.72 88922.13 38970.17C88858.09 39055.78 88794.04 39141.39 88730.00 39227.00C88730.00 39237.67 88730.00 39248.33 88730.00 39259.00C88740.96 39269.64 88751.44 39281.06 88762.69 39291.23C88794.87 39302.10 88827.25 39312.47 88859.31 39323.64C88880.54 39334.10 88901.77 39344.55 88923.00 39355.00C88944.33 39355.00 88965.67 39355.00 88987.00 39355.00C88997.67 39365.67 89008.33 39376.33 89019.00 39387.00C88954.90 39532.10 88891.16 39677.36 88826.24 39822.09C88761.47 39967.03 88696.93 40112.08 88632.02 40256.96C88546.62 40428.21 88461.04 40599.38 88375.74 40770.68C88321.93 40910.22 88268.34 41049.85 88214.39 41189.33C88095.46 41449.55 87976.33 41709.69 87857.53 41969.98C87676.69 42373.65 87495.84 42777.33 87315.00 43181.00C87304.31 43192.27 87293.03 43203.15 87282.71 43214.67C87216.87 43367.99 87151.32 43521.43 87085.30 43674.67C86968.62 43939.47 86851.74 44204.18 86735.19 44469.03C86692.08 44577.23 86649.31 44685.57 86605.99 44793.69C86541.59 44943.66 86477.46 45093.75 86412.89 45243.64C86302.58 45486.03 86192.51 45728.53 86082.05 45970.84C85713.08 46774.01 85343.99 47577.12 84975.10 48380.33C84511.65 49391.45 84048.13 50402.54 83584.72 51413.67C83477.59 51670.88 83370.60 51928.15 83263.39 52185.32C83123.69 52486.56 82983.81 52787.71 82844.23 53089.00C82596.94 53647.65 82349.79 54206.36 82102.41 54764.97C81471.15 56166.53 80839.97 57568.12 80208.67 58969.65C80198.12 58990.77 80187.56 59011.88 80177.00 59033.00C80155.67 59043.67 80134.33 59054.33 80113.00 59065.00C80113.00 59075.67 80113.00 59086.33 80113.00 59097.00C80059.33 59097.00 80005.67 59097.00 79952.00 59097.00C79941.33 59107.67 79930.67 59118.33 79920.00 59129.00C79909.33 59182.67 79898.67 59236.33 79888.00 59290.00C79876.38 59312.09 79865.46 59334.60 79853.39 59356.43C79832.60 59387.96 79811.80 59419.48 79791.00 59451.00C79759.00 59461.67 79727.00 59472.33 79695.00 59483.00C79609.00 59558.00 79523.00 59633.00 79437.00 59708.00C79405.00 59761.67 79373.00 59815.33 79341.00 59869.00C79308.67 59901.00 79276.33 59933.00 79244.00 59965.00C79222.67 60008.00 79201.33 60051.00 79180.00 60094.00C79180.00 60233.33 79180.00 60372.67 79180.00 60512.00C79201.33 60544.00 79222.67 60576.00 79244.00 60608.00C79255.12 60661.89 79265.96 60715.85 79277.25 60769.68C79319.83 60887.46 79362.42 61005.23 79405.00 61123.00C79448.00 61176.67 79491.00 61230.33 79534.00 61284.00C79555.33 61294.67 79576.67 61305.33 79598.00 61316.00C79608.67 61348.00 79619.33 61380.00 79630.00 61412.00C79641.46 61412.24 79653.03 61411.52 79664.41 61412.35C79706.61 61422.90 79748.80 61433.45 79791.00 61444.00C79827.79 61481.48 79864.60 61518.93 79902.26 61555.53C79908.37 61562.11 79915.78 61567.70 79921.06 61574.91C79974.04 61670.61 80027.02 61766.30 80080.00 61862.00C80112.33 61894.33 80144.67 61926.67 80177.00 61959.00C80209.26 61969.59 80241.41 61980.79 80273.73 61991.00C80284.49 61991.00 80295.24 61991.00 80306.00 61991.00C80337.95 62055.36 80369.78 62119.78 80402.00 62184.00C80423.33 62194.67 80444.67 62205.33 80466.00 62216.00C80477.00 62259.00 80488.00 62302.00 80499.00 62345.00C80531.00 62377.00 80563.00 62409.00 80595.00 62441.00C80616.33 62526.67 80637.67 62612.33 80659.00 62698.00C80648.33 62762.33 80637.67 62826.67 80627.00 62891.00C80637.62 62944.91 80648.62 62998.79 80659.00 63052.73C80659.00 63073.82 80659.00 63094.91 80659.00 63116.00C80691.53 63159.15 80723.85 63202.48 80756.51 63245.51C80777.68 63266.68 80798.84 63287.84 80820.00 63309.00C80774.90 63355.99 80728.03 63401.23 80682.02 63447.32C80663.64 63465.81 80644.74 63483.93 80626.67 63502.65C80573.12 63609.77 80519.56 63716.88 80466.00 63824.00C80444.77 63931.02 80423.43 64038.02 80402.00 64145.00C80412.92 64189.68 80424.46 64234.23 80434.99 64279.00C80445.33 64331.00 80455.66 64383.00 80466.00 64435.00C80477.00 64456.33 80488.00 64477.67 80499.00 64499.00C80499.00 64531.00 80499.00 64563.00 80499.00 64595.00C80445.33 64648.67 80391.67 64702.33 80338.00 64756.00C80316.33 64799.00 80294.67 64842.00 80273.00 64885.00C80225.99 64932.25 80178.48 64979.01 80131.81 65026.60C80125.54 65033.07 80119.27 65039.54 80113.00 65046.00C80113.00 65110.33 80113.00 65174.67 80113.00 65239.00C80091.13 65271.14 80069.54 65303.52 80047.49 65335.52C79994.32 65389.01 79941.16 65442.51 79888.00 65496.00C79823.67 65528.00 79759.33 65560.00 79695.00 65592.00C79684.33 65613.67 79673.67 65635.33 79663.00 65657.00C79652.00 65657.00 79641.00 65657.00 79630.00 65657.00C79630.00 65678.33 79630.00 65699.67 79630.00 65721.00C79651.67 65742.33 79673.33 65763.67 79695.00 65785.00C79695.00 65860.00 79695.00 65935.00 79695.00 66010.00C79727.34 66064.03 79759.32 66118.28 79791.88 66172.16C79823.92 66214.78 79855.96 66257.39 79888.00 66300.00C79898.61 66342.92 79909.69 66385.78 79920.00 66428.73C79920.15 66450.37 79919.69 66472.11 79920.23 66493.69C79930.98 66525.65 79941.39 66557.77 79952.36 66589.63C79995.42 66665.53 80038.83 66741.23 80081.67 66817.24C80092.11 66837.49 80102.56 66857.75 80113.00 66878.00C80102.00 66910.33 80091.00 66942.67 80080.00 66975.00C80091.00 67007.00 80102.00 67039.00 80113.00 67071.00C80102.00 67092.67 80091.00 67114.33 80080.00 67136.00C80037.33 67157.33 79994.67 67178.67 79952.00 67200.00C79941.33 67232.00 79930.67 67264.00 79920.00 67296.00C79941.33 67360.33 79962.67 67424.67 79984.00 67489.00C79962.67 67521.33 79941.33 67553.67 79920.00 67586.00C79930.67 67650.33 79941.33 67714.67 79952.00 67779.00C79941.33 67800.33 79930.67 67821.67 79920.00 67843.00C79920.00 67864.33 79920.00 67885.67 79920.00 67907.00C79930.64 67917.96 79942.06 67928.44 79952.23 67939.69C79962.82 67971.79 79973.41 68003.90 79984.00 68036.00C79973.07 68046.71 79962.51 68057.93 79951.35 68068.32C79908.57 68089.55 79865.78 68110.77 79823.00 68132.00C79812.33 68153.67 79801.67 68175.33 79791.00 68197.00C79801.67 68218.33 79812.33 68239.67 79823.00 68261.00C79812.33 68282.33 79801.67 68303.67 79791.00 68325.00C79791.00 68346.67 79791.00 68368.33 79791.00 68390.00C79748.26 68443.58 79705.20 68496.94 79662.67 68550.65C79651.30 68572.66 79640.53 68595.02 79628.79 68616.82C79607.65 68648.35 79586.81 68680.13 79565.49 68711.51C79554.95 68722.27 79543.89 68732.66 79533.68 68743.65C79512.45 68786.43 79491.23 68829.22 79470.00 68872.00C79480.94 68904.41 79491.40 68937.02 79502.64 68969.31C79513.10 68990.54 79523.55 69011.77 79534.00 69033.00C79533.88 69054.56 79534.23 69076.18 79533.82 69097.71C79523.22 69140.47 79512.61 69183.24 79502.00 69226.00C79523.38 69247.60 79545.26 69268.83 79566.33 69290.65C79576.88 69311.77 79587.44 69332.88 79598.00 69354.00C79598.00 69375.33 79598.00 69396.67 79598.00 69418.00C79587.35 69429.29 79575.96 69440.12 79565.77 69451.69C79554.90 69483.87 79544.54 69516.26 79533.35 69548.30C79518.41 69578.63 79502.41 69608.46 79489.26 69639.63C79450.51 69726.76 79411.75 69813.88 79373.00 69901.00C79383.96 69911.64 79394.44 69923.06 79405.69 69933.23C79437.79 69943.82 79469.90 69954.41 79502.00 69965.00C79544.67 69943.67 79587.33 69922.33 79630.00 69901.00C79641.46 69900.76 79653.03 69901.48 79664.41 69900.65C79706.61 69890.10 79748.80 69879.55 79791.00 69869.00C79834.00 69890.33 79877.00 69911.67 79920.00 69933.00C79920.00 69943.67 79920.00 69954.33 79920.00 69965.00C79908.87 69975.86 79898.22 69987.32 79886.79 69997.81C79854.72 70019.41 79822.41 70040.73 79790.48 70062.51C79721.76 70131.06 79652.68 70199.24 79584.19 70268.02C79567.46 70285.01 79550.73 70302.01 79534.00 70319.00C79501.67 70319.00 79469.33 70319.00 79437.00 70319.00C79415.40 70329.61 79394.00 70340.88 79372.28 70351.08C79275.94 70361.69 79179.62 70372.52 79083.27 70383.00C76939.12 70382.98 74794.97 70383.04 72650.81 70382.97C71760.66 70372.33 70870.51 70361.57 69980.36 70351.00C68116.90 70351.00 66253.45 70351.00 64390.00 70351.00C64357.67 70286.67 64325.33 70222.33 64293.00 70158.00C64282.33 70147.33 64271.67 70136.67 64261.00 70126.00C64271.67 70093.67 64282.33 70061.33 64293.00 70029.00C64282.07 70018.29 64271.51 70007.07 64260.35 69996.67C64239.11 69985.88 64217.50 69975.59 64196.49 69964.49C64185.70 69954.01 64175.39 69942.76 64164.31 69932.77C64132.21 69922.18 64100.10 69911.59 64068.00 69901.00C64025.33 69911.67 63982.67 69922.33 63940.00 69933.00C63929.00 69922.33 63918.00 69911.67 63907.00 69901.00C63896.33 69868.67 63885.67 69836.33 63875.00 69804.00C63853.67 69814.67 63832.33 69825.33 63811.00 69836.00C63789.67 69836.00 63768.33 69836.00 63747.00 69836.00C63736.00 69857.67 63725.00 69879.33 63714.00 69901.00C63725.00 69911.67 63736.00 69922.33 63747.00 69933.00C63736.00 69943.67 63725.00 69954.33 63714.00 69965.00C63714.00 69975.67 63714.00 69986.33 63714.00 69997.00C63692.67 70007.67 63671.33 70018.33 63650.00 70029.00C63650.00 70040.00 63650.00 70051.00 63650.00 70062.00C63628.67 70083.33 63607.33 70104.67 63586.00 70126.00C63564.33 70115.33 63542.67 70104.67 63521.00 70094.00C63489.00 70094.00 63457.00 70094.00 63425.00 70094.00C63393.00 70072.33 63361.00 70050.67 63329.00 70029.00C63318.00 70029.00 63307.00 70029.00 63296.00 70029.00C63285.33 70050.67 63274.67 70072.33 63264.00 70094.00C63264.00 70147.33 63264.00 70200.67 63264.00 70254.00C63242.62 70275.93 63220.75 70297.50 63199.67 70319.65C63189.12 70340.77 63178.56 70361.88 63168.00 70383.00C63178.67 70404.33 63189.33 70425.67 63200.00 70447.00C63189.33 70457.67 63178.67 70468.33 63168.00 70479.00C63168.00 70522.00 63168.00 70565.00 63168.00 70608.00C63135.67 70629.33 63103.33 70650.67 63071.00 70672.00C63039.00 70672.00 63007.00 70672.00 62975.00 70672.00C62975.00 70693.67 62975.00 70715.33 62975.00 70737.00C62943.00 70737.00 62911.00 70737.00 62879.00 70737.00C62857.33 70747.67 62835.67 70758.33 62814.00 70769.00C62749.67 70747.67 62685.33 70726.33 62621.00 70705.00C62610.33 70715.67 62599.67 70726.33 62589.00 70737.00C62578.33 70726.33 62567.67 70715.67 62557.00 70705.00C62557.00 70672.67 62557.00 70640.33 62557.00 70608.00C62535.67 70576.00 62514.33 70544.00 62493.00 70512.00C62471.33 70501.00 62449.67 70490.00 62428.00 70479.00C62406.67 70436.33 62385.33 70393.67 62364.00 70351.00C62299.67 70351.00 62235.33 70351.00 62171.00 70351.00C62128.33 70372.33 62085.67 70393.67 62043.00 70415.00C62000.00 70404.33 61957.00 70393.67 61914.00 70383.00C61871.00 70276.00 61828.00 70169.00 61785.00 70062.00C61785.22 70050.81 61784.56 70039.41 61785.33 70028.35C61795.88 70007.23 61806.44 69986.12 61817.00 69965.00C61806.07 69954.29 61795.51 69943.07 61784.35 69932.67C61763.23 69922.12 61742.12 69911.56 61721.00 69901.00C61710.33 69879.33 61699.67 69857.67 61689.00 69836.00C61699.67 69814.67 61710.33 69793.33 61721.00 69772.00C61699.67 69740.00 61678.33 69708.00 61657.00 69676.00C61624.67 69654.33 61592.33 69632.67 61560.00 69611.00C61570.67 69600.33 61581.33 69589.67 61592.00 69579.00C61624.33 69579.00 61656.67 69579.00 61689.00 69579.00C61689.00 69557.67 61689.00 69536.33 61689.00 69515.00C61678.19 69492.94 61666.65 69471.18 61656.30 69448.93C61645.53 69417.29 61634.76 69385.64 61624.00 69354.00C61560.00 69354.00 61496.00 69354.00 61432.00 69354.00C61410.33 69332.67 61388.67 69311.33 61367.00 69290.00C61324.33 69279.33 61281.67 69268.67 61239.00 69258.00C61228.07 69268.71 61217.51 69279.94 61206.35 69290.32C61184.77 69301.12 61162.83 69311.40 61141.49 69322.51C61130.99 69333.01 61120.50 69343.51 61110.00 69354.00C61110.00 69375.33 61110.00 69396.67 61110.00 69418.00C61142.33 69450.33 61174.67 69482.67 61207.00 69515.00C61196.00 69536.33 61185.00 69557.67 61174.00 69579.00C61163.18 69578.72 61152.00 69579.57 61141.41 69578.58C61066.46 69524.85 60991.30 69471.36 60916.49 69417.49C60905.99 69406.99 60895.50 69396.49 60885.00 69386.00C60885.27 69375.17 60884.46 69364.02 60885.40 69353.39C60906.76 69321.13 60928.56 69289.12 60949.64 69256.69C60960.10 69235.46 60970.55 69214.23 60981.00 69193.00C60959.67 69171.67 60938.33 69150.33 60917.00 69129.00C60927.67 69097.00 60938.33 69065.00 60949.00 69033.00C60938.33 69011.33 60927.67 68989.67 60917.00 68968.00C60895.67 68968.00 60874.33 68968.00 60853.00 68968.00C60842.28 68957.07 60831.08 68946.50 60820.67 68935.35C60809.78 68914.24 60798.89 68893.12 60788.00 68872.00C60787.88 68839.44 60788.24 68806.82 60787.82 68774.29C60777.21 68731.86 60766.61 68689.43 60756.00 68647.00C60766.83 68603.80 60777.24 68560.45 60788.33 68517.35C60799.22 68496.24 60810.11 68475.12 60821.00 68454.00C60821.00 68432.67 60821.00 68411.33 60821.00 68390.00C60809.74 68378.96 60798.84 68367.40 60787.35 68356.67C60744.90 68335.45 60702.45 68314.23 60660.00 68293.00C60638.44 68292.88 60616.82 68293.23 60595.29 68292.82C60552.33 68282.06 60509.22 68271.69 60466.35 68260.67C60445.23 68250.12 60424.12 68239.56 60403.00 68229.00C60392.10 68207.54 60381.70 68185.72 60370.49 68164.49C60348.99 68142.99 60327.50 68121.49 60306.00 68100.00C60295.33 68110.67 60284.67 68121.33 60274.00 68132.00C60263.33 68132.00 60252.67 68132.00 60242.00 68132.00C60231.33 68153.67 60220.67 68175.33 60210.00 68197.00C60188.21 68207.90 60166.04 68218.29 60144.49 68229.51C60112.66 68261.34 60080.83 68293.17 60049.00 68325.00C60038.33 68325.00 60027.67 68325.00 60017.00 68325.00C60017.00 68314.33 60017.00 68303.67 60017.00 68293.00C60006.29 68282.07 59995.07 68271.51 59984.67 68260.35C59974.12 68239.23 59963.56 68218.12 59953.00 68197.00C59931.33 68197.00 59909.67 68197.00 59888.00 68197.00C59898.67 68175.33 59909.33 68153.67 59920.00 68132.00C59909.33 68110.67 59898.67 68089.33 59888.00 68068.00C59888.00 68046.67 59888.00 68025.33 59888.00 68004.00C59877.33 68004.00 59866.67 68004.00 59856.00 68004.00C59866.67 67982.33 59877.33 67960.67 59888.00 67939.00C59877.33 67907.00 59866.67 67875.00 59856.00 67843.00C59845.33 67843.00 59834.67 67843.00 59824.00 67843.00C59813.33 67832.33 59802.67 67821.67 59792.00 67811.00C59781.33 67811.00 59770.67 67811.00 59760.00 67811.00C59749.00 67800.33 59738.00 67789.67 59727.00 67779.00C59716.33 67789.67 59705.67 67800.33 59695.00 67811.00C59684.29 67800.07 59673.06 67789.51 59662.68 67778.35C59652.12 67756.90 59641.56 67735.45 59631.00 67714.00C59566.67 67682.00 59502.33 67650.00 59438.00 67618.00C59427.33 67607.33 59416.67 67596.67 59406.00 67586.00C59416.67 67575.33 59427.33 67564.67 59438.00 67554.00C59416.67 67511.00 59395.33 67468.00 59374.00 67425.00C59352.33 67414.33 59330.67 67403.67 59309.00 67393.00C59298.33 67371.67 59287.67 67350.33 59277.00 67329.00C59277.00 67307.33 59277.00 67285.67 59277.00 67264.00C59287.72 67253.07 59298.92 67242.50 59309.33 67231.35C59320.22 67210.24 59331.11 67189.12 59342.00 67168.00C59331.00 67157.33 59320.00 67146.67 59309.00 67136.00C59298.33 67103.67 59287.67 67071.33 59277.00 67039.00C59287.67 67028.33 59298.33 67017.67 59309.00 67007.00C59287.67 66985.67 59266.33 66964.33 59245.00 66943.00C59245.00 66932.00 59245.00 66921.00 59245.00 66910.00C59212.86 66888.46 59180.48 66867.21 59148.48 66845.49C59108.36 66806.19 59068.46 66766.67 59029.14 66726.57C59015.16 66712.67 59001.56 66698.25 58987.35 66684.68C58923.23 66652.78 58859.12 66620.89 58795.00 66589.00C58752.00 66589.00 58709.00 66589.00 58666.00 66589.00C58654.86 66567.10 58644.32 66544.85 58632.80 66523.18C58611.86 66491.45 58590.93 66459.73 58570.00 66428.00C58559.33 66428.00 58548.67 66428.00 58538.00 66428.00C58527.33 66417.33 58516.67 66406.67 58506.00 66396.00C58495.00 66396.00 58484.00 66396.00 58473.00 66396.00C58451.67 66374.67 58430.33 66353.33 58409.00 66332.00C57358.67 66332.00 56308.33 66332.00 55258.00 66332.00C55118.67 66321.33 54979.33 66310.67 54840.00 66300.00C54829.33 66375.00 54818.67 66450.00 54808.00 66525.00C54818.67 66546.33 54829.33 66567.67 54840.00 66589.00C54829.33 66610.33 54818.67 66631.67 54808.00 66653.00C54786.67 66663.67 54765.33 66674.33 54744.00 66685.00C54733.33 66717.33 54722.67 66749.67 54712.00 66782.00C54679.67 66803.33 54647.33 66824.67 54615.00 66846.00C54615.00 66867.33 54615.00 66888.67 54615.00 66910.00C54625.67 66921.00 54636.33 66932.00 54647.00 66943.00C54636.33 66975.00 54625.67 67007.00 54615.00 67039.00C54604.18 67050.16 54592.60 67060.72 54582.25 67072.25C54550.50 67125.50 54518.75 67178.75 54487.00 67232.00C54433.20 67264.55 54379.11 67296.74 54325.48 67329.51C54293.32 67361.34 54261.16 67393.17 54229.00 67425.00C54229.24 67435.85 54228.52 67446.95 54229.36 67457.63C54272.24 67532.42 54315.12 67607.21 54358.00 67682.00C54315.00 67714.33 54272.00 67746.67 54229.00 67779.00C54207.67 67811.00 54186.33 67843.00 54165.00 67875.00C54165.00 67896.33 54165.00 67917.67 54165.00 67939.00C54143.45 67971.47 54122.23 68004.21 54100.48 68036.51C54089.65 68047.01 54078.83 68057.50 54068.00 68068.00C54057.33 68068.00 54046.67 68068.00 54036.00 68068.00C53982.67 68025.00 53929.33 67982.00 53876.00 67939.00C53811.61 67917.82 53747.28 67896.49 53683.00 67875.00C53650.67 67875.00 53618.33 67875.00 53586.00 67875.00C53574.86 67896.90 53564.32 67919.15 53552.80 67940.82C53531.65 67972.69 53510.82 68004.80 53489.49 68036.51C53478.99 68047.01 53468.50 68057.51 53458.00 68068.00C53425.67 68057.33 53393.33 68046.67 53361.00 68036.00C53339.67 68046.67 53318.33 68057.33 53297.00 68068.00C53297.00 68164.33 53297.00 68260.67 53297.00 68357.00C53243.33 68389.33 53189.67 68421.67 53136.00 68454.00C53136.00 68475.33 53136.00 68496.67 53136.00 68518.00C53179.00 68528.67 53222.00 68539.33 53265.00 68550.00C53286.33 68571.67 53307.67 68593.33 53329.00 68615.00C53329.00 68636.33 53329.00 68657.67 53329.00 68679.00C53275.33 68722.00 53221.67 68765.00 53168.00 68808.00C53168.30 68819.10 53167.39 68830.40 53168.46 68841.38C53178.97 68872.92 53189.49 68904.46 53200.00 68936.00C53232.33 68968.33 53264.67 69000.67 53297.00 69033.00C53297.00 69065.00 53297.00 69097.00 53297.00 69129.00C53318.33 69150.33 53339.67 69171.67 53361.00 69193.00C53371.67 69193.00 53382.33 69193.00 53393.00 69193.00C53393.00 69214.67 53393.00 69236.33 53393.00 69258.00C53361.00 69311.33 53329.00 69364.67 53297.00 69418.00C53286.33 69418.00 53275.67 69418.00 53265.00 69418.00C53243.33 69396.67 53221.67 69375.33 53200.00 69354.00C53200.00 69343.33 53200.00 69332.67 53200.00 69322.00C53189.33 69311.33 53178.67 69300.67 53168.00 69290.00C53157.33 69290.00 53146.67 69290.00 53136.00 69290.00C53125.33 69300.67 53114.67 69311.33 53104.00 69322.00C53093.33 69375.67 53082.67 69429.33 53072.00 69483.00C53050.33 69493.67 53028.67 69504.33 53007.00 69515.00C53007.00 69536.33 53007.00 69557.67 53007.00 69579.00C52996.10 69600.46 52985.69 69622.27 52974.49 69643.52C52964.00 69654.35 52953.50 69665.17 52943.00 69676.00C52953.67 69686.67 52964.33 69697.33 52975.00 69708.00C52943.00 69750.67 52911.00 69793.33 52879.00 69836.00C52889.67 69879.00 52900.33 69922.00 52911.00 69965.00C52846.42 69954.37 52781.87 69943.43 52717.27 69933.00C52706.68 69933.27 52695.78 69932.46 52685.39 69933.40C52653.26 69954.60 52621.13 69975.80 52589.00 69997.00C52567.67 69997.00 52546.33 69997.00 52525.00 69997.00C52503.67 69986.33 52482.33 69975.67 52461.00 69965.00C52450.14 69976.13 52438.68 69986.78 52428.19 69998.21C52406.79 70030.14 52385.40 70062.07 52364.00 70094.00C52364.00 70147.33 52364.00 70200.67 52364.00 70254.00C52385.67 70297.00 52407.33 70340.00 52429.00 70383.00C52417.77 70404.46 52407.02 70426.27 52395.49 70447.52C52363.66 70479.68 52331.83 70511.84 52300.00 70544.00C52300.15 70565.55 52299.70 70587.20 52300.23 70608.69C52310.74 70641.05 52321.87 70673.31 52332.00 70705.73C52332.14 70748.63 52331.73 70791.57 52332.21 70834.44C52342.77 70909.21 52353.61 70983.95 52364.00 71058.73C52364.00 71080.15 52364.00 71101.58 52364.00 71123.00C52353.33 71133.67 52342.67 71144.33 52332.00 71155.00C52289.33 71155.00 52246.67 71155.00 52204.00 71155.00C52118.00 71208.33 52032.00 71261.67 51946.00 71315.00C51892.67 71304.33 51839.33 71293.67 51786.00 71283.00C51732.09 71293.62 51678.21 71304.62 51624.27 71315.00C51602.85 71315.00 51581.42 71315.00 51560.00 71315.00C51538.67 71304.33 51517.33 71293.67 51496.00 71283.00C51496.18 71272.13 51495.64 71261.11 51496.27 71250.32C51517.51 71196.88 51538.76 71143.44 51560.00 71090.00C51560.00 71058.00 51560.00 71026.00 51560.00 70994.00C51538.45 70994.17 51516.79 70993.66 51495.32 70994.26C51409.67 71026.30 51323.94 71058.16 51238.35 71090.33C51195.31 71111.89 51152.42 71133.86 51109.29 71155.18C51066.66 71165.94 51023.89 71176.32 50981.35 71187.32C50959.90 71197.88 50938.45 71208.44 50917.00 71219.00C50884.77 71219.12 50852.49 71218.77 50820.29 71219.18C50777.53 71229.78 50734.76 71240.39 50692.00 71251.00C50627.42 71240.37 50562.87 71229.43 50498.27 71219.00C50477.18 71219.00 50456.09 71219.00 50435.00 71219.00C50424.07 71229.71 50413.51 71240.93 50402.35 71251.33C50381.23 71261.88 50360.12 71272.44 50339.00 71283.00C50328.33 71283.00 50317.67 71283.00 50307.00 71283.00C50307.00 71304.67 50307.00 71326.33 50307.00 71348.00C50285.21 71358.90 50263.04 71369.29 50241.49 71380.51C50230.99 71391.01 50220.50 71401.51 50210.00 71412.00C50188.44 71411.88 50166.82 71412.23 50145.29 71411.82C50102.28 71401.27 50059.32 71390.26 50016.27 71380.00C49984.51 71380.00 49952.76 71380.00 49921.00 71380.00C49899.33 71390.67 49877.67 71401.33 49856.00 71412.00C49834.46 71379.53 49813.22 71346.80 49791.49 71314.49C49780.99 71303.99 49770.50 71293.49 49760.00 71283.00C49738.67 71283.00 49717.33 71283.00 49696.00 71283.00C49696.00 71293.67 49696.00 71304.33 49696.00 71315.00C49653.00 71347.33 49610.00 71379.67 49567.00 71412.00C49534.75 71422.59 49502.59 71433.79 49470.27 71444.00C49459.51 71444.00 49448.76 71444.00 49438.00 71444.00C49405.80 71400.85 49373.82 71357.52 49341.49 71314.49C49330.99 71303.99 49320.50 71293.49 49310.00 71283.00C49266.77 71283.12 49223.49 71282.76 49180.29 71283.18C49137.86 71293.79 49095.43 71304.39 49053.00 71315.00C49009.15 71347.82 48965.58 71381.03 48921.57 71413.61C48890.04 71434.40 48858.52 71455.20 48827.00 71476.00C48816.10 71497.79 48805.71 71519.96 48794.49 71541.51C48783.99 71552.01 48773.50 71562.51 48763.00 71573.00C48741.67 71562.33 48720.33 71551.67 48699.00 71541.00C48699.00 71594.33 48699.00 71647.67 48699.00 71701.00C48677.67 71776.00 48656.33 71851.00 48635.00 71926.00C48624.00 71937.00 48613.00 71948.00 48602.00 71959.00C48602.00 71991.00 48602.00 72023.00 48602.00 72055.00C48613.00 72065.67 48624.00 72076.33 48635.00 72087.00C48635.00 72140.67 48635.00 72194.33 48635.00 72248.00C48645.67 72269.33 48656.33 72290.67 48667.00 72312.00C48667.21 72322.86 48666.57 72333.92 48667.32 72344.65C48677.88 72366.10 48688.44 72387.55 48699.00 72409.00C48688.29 72419.93 48677.07 72430.49 48666.67 72441.65C48655.97 72463.50 48644.54 72485.04 48634.30 72507.07C48623.61 72538.97 48612.29 72570.76 48602.00 72602.73C48602.00 72613.15 48602.00 72623.58 48602.00 72634.00C48580.67 72644.67 48559.33 72655.33 48538.00 72666.00C48538.00 72676.67 48538.00 72687.33 48538.00 72698.00C48516.67 72719.33 48495.33 72740.67 48474.00 72762.00C48441.67 72762.00 48409.33 72762.00 48377.00 72762.00C48355.67 72783.67 48334.33 72805.33 48313.00 72827.00C48313.00 72848.33 48313.00 72869.67 48313.00 72891.00C48291.67 72912.33 48270.33 72933.67 48249.00 72955.00C48259.67 72976.67 48270.33 72998.33 48281.00 73020.00C48259.67 73020.00 48238.33 73020.00 48217.00 73020.00C48195.08 73041.08 48173.40 73062.40 48152.00 73084.00C48141.33 73084.00 48130.67 73084.00 48120.00 73084.00C48130.67 73116.00 48141.33 73148.00 48152.00 73180.00C48130.67 73201.67 48109.33 73223.33 48088.00 73245.00C48088.00 73255.67 48088.00 73266.33 48088.00 73277.00C48077.33 73287.67 48066.67 73298.33 48056.00 73309.00C48002.33 73309.00 47948.67 73309.00 47895.00 73309.00C47884.33 73319.67 47873.67 73330.33 47863.00 73341.00C47873.67 73362.33 47884.33 73383.67 47895.00 73405.00C47873.67 73416.00 47852.33 73427.00 47831.00 73438.00C47809.33 73438.00 47787.67 73438.00 47766.00 73438.00C47723.33 73470.00 47680.67 73502.00 47638.00 73534.00C47616.33 73512.67 47594.67 73491.33 47573.00 73470.00C47540.75 73459.41 47508.59 73448.21 47476.27 73438.00C47455.18 73438.00 47434.09 73438.00 47413.00 73438.00C47413.00 73416.33 47413.00 73394.67 47413.00 73373.00C47434.33 73341.00 47455.67 73309.00 47477.00 73277.00C47477.00 73255.67 47477.00 73234.33 47477.00 73213.00C47445.00 73202.00 47413.00 73191.00 47381.00 73180.00C47381.34 73168.65 47380.32 73157.13 47381.53 73145.88C47392.02 73103.92 47402.51 73061.96 47413.00 73020.00C47380.67 72966.33 47348.33 72912.67 47316.00 72859.00C47316.00 72805.33 47316.00 72751.67 47316.00 72698.00C47262.67 72666.00 47209.33 72634.00 47156.00 72602.00C47144.79 72602.18 47133.44 72601.63 47122.32 72602.27C47069.22 72623.51 47016.11 72644.76 46963.00 72666.00C46941.08 72687.40 46919.47 72709.21 46897.37 72730.36C46822.58 72773.24 46747.79 72816.12 46673.00 72859.00C46662.33 72880.33 46651.67 72901.67 46641.00 72923.00C46598.00 72923.00 46555.00 72923.00 46512.00 72923.00C46512.00 72933.67 46512.00 72944.33 46512.00 72955.00C46501.33 72965.67 46490.67 72976.33 46480.00 72987.00C46469.17 72986.73 46458.02 72987.54 46447.39 72986.60C46415.13 72965.24 46383.11 72943.45 46350.69 72922.35C46308.13 72901.24 46265.57 72880.12 46223.00 72859.00C46212.33 72869.67 46201.67 72880.33 46191.00 72891.00C46190.90 72976.90 46191.19 73062.84 46190.86 73148.71C46180.29 73202.39 46169.33 73256.03 46159.00 73309.73C46159.22 73320.34 46158.57 73331.16 46159.33 73341.65C46170.24 73363.94 46181.90 73385.89 46192.35 73408.39C46213.23 73460.92 46234.11 73513.46 46255.00 73566.00C46255.00 73587.67 46255.00 73609.33 46255.00 73631.00C46244.33 73620.00 46233.67 73609.00 46223.00 73598.00C46201.67 73609.00 46180.33 73620.00 46159.00 73631.00C46137.33 73609.33 46115.67 73587.67 46094.00 73566.00C46083.33 73587.67 46072.67 73609.33 46062.00 73631.00C46030.00 73641.67 45998.00 73652.33 45966.00 73663.00C45955.33 73652.33 45944.67 73641.67 45934.00 73631.00C45934.00 73609.33 45934.00 73587.67 45934.00 73566.00C45923.00 73555.33 45912.00 73544.67 45901.00 73534.00C45879.67 73534.00 45858.33 73534.00 45837.00 73534.00C45783.09 73490.93 45729.40 73447.52 45675.35 73404.67C45654.23 73394.12 45633.12 73383.56 45612.00 73373.00C45569.33 73373.00 45526.67 73373.00 45484.00 73373.00C45427.18 73391.65 45370.39 73410.39 45313.94 73430.12C45306.18 73433.01 45297.95 73435.15 45290.49 73438.51C45279.94 73449.27 45268.91 73459.67 45258.67 73470.65C45247.78 73491.76 45236.89 73512.88 45226.00 73534.00C45183.33 73534.00 45140.67 73534.00 45098.00 73534.00C45087.00 73619.67 45076.00 73705.33 45065.00 73791.00C45043.67 73801.67 45022.33 73812.33 45001.00 73823.00C44958.33 73909.00 44915.67 73995.00 44873.00 74081.00C44861.81 74080.78 44850.41 74081.44 44839.35 74080.67C44818.23 74070.12 44797.12 74059.56 44776.00 74049.00C44765.33 74049.00 44754.67 74049.00 44744.00 74049.00C44733.33 74070.33 44722.67 74091.67 44712.00 74113.00C44690.67 74113.00 44669.33 74113.00 44648.00 74113.00C44615.12 74144.45 44583.21 74176.87 44551.00 74209.00C44540.33 74209.00 44529.67 74209.00 44519.00 74209.00C44508.33 74177.00 44497.67 74145.00 44487.00 74113.00C44476.33 74102.33 44465.67 74091.67 44455.00 74081.00C44444.33 74081.00 44433.67 74081.00 44423.00 74081.00C44412.00 74027.33 44401.00 73973.67 44390.00 73920.00C44368.67 73930.67 44347.33 73941.33 44326.00 73952.00C44315.33 73952.00 44304.67 73952.00 44294.00 73952.00C44294.00 73920.00 44294.00 73888.00 44294.00 73856.00C44283.33 73845.00 44272.67 73834.00 44262.00 73823.00C44251.33 73823.00 44240.67 73823.00 44230.00 73823.00C44197.67 73791.00 44165.33 73759.00 44133.00 73727.00C44111.45 73726.85 44089.80 73727.30 44068.31 73726.77C44036.21 73716.18 44004.10 73705.59 43972.00 73695.00C43961.25 73673.18 43949.97 73651.57 43939.54 73629.62C43929.03 73597.74 43918.51 73565.87 43908.00 73534.00C43875.85 73512.46 43843.49 73491.20 43811.48 73469.49C43800.39 73458.94 43789.64 73447.93 43778.35 73437.67C43757.24 73426.78 43736.12 73415.89 43715.00 73405.00C43715.00 73383.67 43715.00 73362.33 43715.00 73341.00C43683.00 73341.00 43651.00 73341.00 43619.00 73341.00C43597.33 73330.33 43575.67 73319.67 43554.00 73309.00C43489.67 73309.00 43425.33 73309.00 43361.00 73309.00C43361.00 73319.67 43361.00 73330.33 43361.00 73341.00C43339.67 73351.67 43318.33 73362.33 43297.00 73373.00C43232.67 73373.00 43168.33 73373.00 43104.00 73373.00C43071.75 73362.41 43039.59 73351.21 43007.27 73341.00C42985.85 73341.00 42964.42 73341.00 42943.00 73341.00C42911.00 73362.33 42879.00 73383.67 42847.00 73405.00C42836.33 73405.00 42825.67 73405.00 42815.00 73405.00C42793.67 73426.67 42772.33 73448.33 42751.00 73470.00C42697.33 73448.33 42643.67 73426.67 42590.00 73405.00C42568.33 73405.00 42546.67 73405.00 42525.00 73405.00C42503.67 73416.00 42482.33 73427.00 42461.00 73438.00C42450.33 73438.00 42439.67 73438.00 42429.00 73438.00C42396.67 73405.67 42364.33 73373.33 42332.00 73341.00C42289.33 73341.00 42246.67 73341.00 42204.00 73341.00C42214.67 73373.33 42225.33 73405.67 42236.00 73438.00C42225.33 73448.67 42214.67 73459.33 42204.00 73470.00C42161.00 73470.00 42118.00 73470.00 42075.00 73470.00C42075.00 73448.33 42075.00 73426.67 42075.00 73405.00C42064.33 73394.33 42053.67 73383.67 42043.00 73373.00C42021.67 73394.67 42000.33 73416.33 41979.00 73438.00C41946.67 73416.33 41914.33 73394.67 41882.00 73373.00C41860.67 73383.67 41839.33 73394.33 41818.00 73405.00C41807.13 73404.82 41796.11 73405.36 41785.32 73404.73C41731.88 73383.49 41678.44 73362.24 41625.00 73341.00C41614.33 73351.67 41603.67 73362.33 41593.00 73373.00C41593.00 73383.67 41593.00 73394.33 41593.00 73405.00C41625.00 73426.67 41657.00 73448.33 41689.00 73470.00C41700.00 73502.00 41711.00 73534.00 41722.00 73566.00C41722.00 73641.00 41722.00 73716.00 41722.00 73791.00C41668.33 73834.00 41614.67 73877.00 41561.00 73920.00C41539.67 73963.00 41518.33 74006.00 41497.00 74049.00C41453.78 74091.79 41410.74 74134.78 41367.42 74177.44C41324.61 74209.63 41281.81 74241.81 41239.00 74274.00C41228.33 74295.33 41217.67 74316.67 41207.00 74338.00C41207.00 74370.00 41207.00 74402.00 41207.00 74434.00C41142.67 74445.00 41078.33 74456.00 41014.00 74467.00C40992.67 74499.00 40971.33 74531.00 40950.00 74563.00C40907.00 74573.67 40864.00 74584.33 40821.00 74595.00C40810.33 74605.67 40799.67 74616.33 40789.00 74627.00C40757.00 74616.33 40725.00 74605.67 40693.00 74595.00C40671.08 74616.40 40649.48 74638.22 40627.36 74659.35C40531.24 74712.90 40435.12 74766.45 40339.00 74820.00C40328.33 74852.33 40317.67 74884.67 40307.00 74917.00C40285.43 74938.43 40264.11 74960.16 40242.39 74981.40C40210.26 75002.60 40178.13 75023.80 40146.00 75045.00C40081.67 75045.00 40017.33 75045.00 39953.00 75045.00C39931.67 75034.33 39910.33 75023.67 39889.00 75013.00C39878.33 75023.67 39867.67 75034.33 39857.00 75045.00C39867.67 75055.67 39878.33 75066.33 39889.00 75077.00C39889.00 75120.00 39889.00 75163.00 39889.00 75206.00C39846.00 75238.33 39803.00 75270.67 39760.00 75303.00C39352.46 75131.21 38944.86 74959.53 38537.35 74787.68C38473.23 74755.78 38409.12 74723.89 38345.00 74692.00C38291.67 74681.00 38238.33 74670.00 38185.00 74659.00C38141.75 74626.96 38098.73 74594.50 38055.33 74562.72C37796.45 74454.68 37537.48 74346.84 37278.65 74238.68C36314.77 73820.85 35350.86 73403.11 34387.00 72985.23C33998.54 72812.85 33610.15 72640.31 33221.65 72468.04C32467.33 72138.11 31712.94 71808.36 30958.67 71478.30C30858.82 71434.51 30758.82 71390.99 30659.05 71347.02C30616.00 71325.46 30573.15 71303.45 30529.97 71282.19C30477.12 71260.98 30424.15 71240.00 30371.37 71218.64C30049.69 71036.33 29728.06 70853.93 29406.35 70671.67C29105.50 70521.20 28804.56 70370.89 28503.78 70220.30C28084.42 69999.59 27664.98 69779.05 27245.69 69558.23C27075.63 69468.32 26905.46 69378.60 26735.46 69288.56C26413.90 69106.14 26092.42 68923.58 25770.80 68741.26C25176.21 68417.28 24581.69 68093.18 23987.05 67769.28C23735.51 67633.04 23483.89 67496.92 23232.38 67360.61C23114.92 67285.74 22997.46 67210.87 22880.00 67136.00C22729.06 67103.40 22578.07 67071.05 22427.17 67038.29C22255.73 66995.41 22084.34 66952.28 21912.86 66909.56C21334.44 66791.91 20755.98 66674.40 20177.58 66556.65C19694.30 66438.46 19211.05 66320.12 18727.74 66202.02C18306.89 66105.07 17886.08 66007.95 17465.20 65911.12C17370.55 65889.73 17275.80 65868.74 17181.21 65847.09C16529.81 65687.06 15878.41 65527.03 15227.00 65367.00C15194.78 65366.85 15162.47 65367.31 15130.31 65366.77C15069.41 65346.52 15008.41 65326.62 14947.19 65307.37C14740.46 65241.58 14533.73 65175.79 14327.00 65110.00C14305.41 65099.35 14283.98 65088.21 14262.29 65077.86C13522.86 64927.90 12783.43 64777.95 12044.00 64628.00C11989.70 64605.95 11935.22 64584.33 11881.04 64562.02C11602.35 64422.74 11323.76 64283.26 11045.01 64144.09C10315.67 63811.82 9586.38 63479.43 8857.00 63147.23C8204.67 62858.15 7552.33 62569.08 6900.00 62280.00C6803.33 62226.67 6706.67 62173.33 6610.00 62120.00z"},"br-03":{"name":"Amapá","path":"M96286.00 15497.00C96403.67 15486.33 96521.33 15475.67 96639.00 15465.00C96714.00 15422.33 96789.00 15379.67 96864.00 15337.00C96960.67 15369.00 97057.33 15401.00 97154.00 15433.00C97143.33 15572.33 97132.67 15711.67 97122.00 15851.00C97175.67 15915.33 97229.33 15979.67 97283.00 16044.00C97368.67 16022.67 97454.33 16001.33 97540.00 15980.00C97808.00 16183.67 98076.00 16387.33 98344.00 16591.00C98729.67 16644.33 99115.33 16697.67 99501.00 16751.00C99801.00 16665.33 100101.00 16579.67 100401.00 16494.00C100422.67 16483.33 100444.33 16472.67 100466.00 16462.00C100487.33 16472.67 100508.67 16483.33 100530.00 16494.00C100540.67 16472.67 100551.33 16451.33 100562.00 16430.00C100583.33 16430.00 100604.67 16430.00 100626.00 16430.00C100637.00 16440.67 100648.00 16451.33 100659.00 16462.00C100669.67 16451.33 100680.33 16440.67 100691.00 16430.00C100691.00 16419.33 100691.00 16408.67 100691.00 16398.00C100701.67 16387.33 100712.33 16376.67 100723.00 16366.00C100712.33 16333.67 100701.67 16301.33 100691.00 16269.00C100691.00 16247.67 100691.00 16226.33 100691.00 16205.00C100701.67 16194.33 100712.33 16183.67 100723.00 16173.00C100723.00 16183.67 100723.00 16194.33 100723.00 16205.00C100744.33 16205.00 100765.67 16205.00 100787.00 16205.00C100787.00 16226.33 100787.00 16247.67 100787.00 16269.00C100808.67 16279.67 100830.33 16290.33 100852.00 16301.00C100862.67 16269.00 100873.33 16237.00 100884.00 16205.00C100894.67 16215.67 100905.33 16226.33 100916.00 16237.00C100916.00 16226.33 100916.00 16215.67 100916.00 16205.00C100926.67 16194.33 100937.33 16183.67 100948.00 16173.00C100937.33 16162.00 100926.67 16151.00 100916.00 16140.00C100926.67 16118.67 100937.33 16097.33 100948.00 16076.00C100969.33 16076.00 100990.67 16076.00 101012.00 16076.00C101022.67 16086.67 101033.33 16097.33 101044.00 16108.00C101055.00 16097.33 101066.00 16086.67 101077.00 16076.00C101087.67 16086.67 101098.33 16097.33 101109.00 16108.00C101119.74 16107.94 101130.53 16108.11 101141.25 16107.92C101173.17 16097.28 101205.08 16086.64 101237.00 16076.00C101247.67 16076.00 101258.33 16076.00 101269.00 16076.00C101258.33 16054.67 101247.67 16033.33 101237.00 16012.00C101226.33 16012.00 101215.67 16012.00 101205.00 16012.00C101194.33 16001.33 101183.67 15990.67 101173.00 15980.00C101205.00 15969.00 101237.00 15958.00 101269.00 15947.00C101280.00 15925.67 101291.00 15904.33 101302.00 15883.00C101312.67 15883.00 101323.33 15883.00 101334.00 15883.00C101344.67 15872.33 101355.33 15861.67 101366.00 15851.00C101376.67 15851.00 101387.33 15851.00 101398.00 15851.00C101419.33 15829.67 101440.67 15808.33 101462.00 15787.00C101515.67 15787.00 101569.33 15787.00 101623.00 15787.00C101633.67 15797.67 101644.33 15808.33 101655.00 15819.00C101644.33 15819.00 101633.67 15819.00 101623.00 15819.00C101601.67 15829.67 101580.33 15840.33 101559.00 15851.00C101580.33 15861.67 101601.67 15872.33 101623.00 15883.00C101633.67 15872.33 101644.33 15861.67 101655.00 15851.00C101666.00 15872.33 101677.00 15893.67 101688.00 15915.00C101698.67 15904.33 101709.33 15893.67 101720.00 15883.00C101709.33 15904.33 101698.67 15925.67 101688.00 15947.00C101666.33 15958.00 101644.67 15969.00 101623.00 15980.00C101633.67 16001.33 101644.33 16022.67 101655.00 16044.00C101644.33 16044.00 101633.67 16044.00 101623.00 16044.00C101612.33 16054.67 101601.67 16065.33 101591.00 16076.00C101591.00 16086.67 101591.00 16097.33 101591.00 16108.00C101612.33 16108.00 101633.67 16108.00 101655.00 16108.00C101666.00 16097.33 101677.00 16086.67 101688.00 16076.00C101720.00 16086.67 101752.00 16097.33 101784.00 16108.00C101805.33 16108.00 101826.67 16108.00 101848.00 16108.00C101858.67 16129.67 101869.33 16151.33 101880.00 16173.00C101891.00 16173.00 101902.00 16173.00 101913.00 16173.00C101913.00 16162.00 101913.00 16151.00 101913.00 16140.00C101945.00 16140.00 101977.00 16140.00 102009.00 16140.00C102009.00 16151.00 102009.00 16162.00 102009.00 16173.00C102019.67 16162.00 102030.33 16151.00 102041.00 16140.00C102041.00 16172.33 102041.00 16204.67 102041.00 16237.00C102084.00 16237.00 102127.00 16237.00 102170.00 16237.00C102180.67 16247.67 102191.33 16258.33 102202.00 16269.00C102212.67 16269.00 102223.33 16269.00 102234.00 16269.00C102234.00 16258.33 102234.00 16247.67 102234.00 16237.00C102255.33 16237.00 102276.67 16237.00 102298.00 16237.00C102319.67 16258.33 102341.33 16279.67 102363.00 16301.00C102395.00 16301.00 102427.00 16301.00 102459.00 16301.00C102480.67 16322.67 102502.33 16344.33 102524.00 16366.00C102556.00 16366.00 102588.00 16366.00 102620.00 16366.00C102641.33 16355.00 102662.67 16344.00 102684.00 16333.00C102694.67 16333.00 102705.33 16333.00 102716.00 16333.00C102737.67 16344.00 102759.33 16355.00 102781.00 16366.00C102802.33 16355.00 102823.67 16344.00 102845.00 16333.00C102866.33 16344.00 102887.67 16355.00 102909.00 16366.00C102930.67 16355.00 102952.33 16344.00 102974.00 16333.00C102974.00 16322.33 102974.00 16311.67 102974.00 16301.00C102963.00 16290.33 102952.00 16279.67 102941.00 16269.00C102930.33 16247.67 102919.67 16226.33 102909.00 16205.00C102919.67 16205.00 102930.33 16205.00 102941.00 16205.00C102984.00 16226.33 103027.00 16247.67 103070.00 16269.00C103080.67 16247.67 103091.33 16226.33 103102.00 16205.00C103112.67 16205.00 103123.33 16205.00 103134.00 16205.00C103145.00 16194.33 103156.00 16183.67 103167.00 16173.00C103188.33 16173.00 103209.67 16173.00 103231.00 16173.00C103241.67 16151.33 103252.33 16129.67 103263.00 16108.00C103284.33 16108.00 103305.67 16108.00 103327.00 16108.00C103343.28 16091.75 103359.43 16075.36 103376.06 16059.46C103381.39 16054.21 103386.90 16049.10 103392.12 16043.77C103402.74 16022.51 103413.37 16001.25 103424.00 15980.00C103424.00 15958.33 103424.00 15936.67 103424.00 15915.00C103445.33 15904.33 103466.67 15893.67 103488.00 15883.00C103509.33 15883.00 103530.67 15883.00 103552.00 15883.00C103563.00 15904.33 103574.00 15925.67 103585.00 15947.00C103595.67 15936.33 103606.33 15925.67 103617.00 15915.00C103627.67 15936.67 103638.33 15958.33 103649.00 15980.00C103649.00 16001.33 103649.00 16022.67 103649.00 16044.00C103659.67 16054.67 103670.33 16065.33 103681.00 16076.00C103702.33 16086.67 103723.67 16097.33 103745.00 16108.00C103766.67 16108.00 103788.33 16108.00 103810.00 16108.00C103810.00 16129.67 103810.00 16151.33 103810.00 16173.00C103842.00 16183.67 103874.00 16194.33 103906.00 16205.00C103906.00 16226.33 103906.00 16247.67 103906.00 16269.00C103927.33 16279.67 103948.67 16290.33 103970.00 16301.00C103991.67 16290.33 104013.33 16279.67 104035.00 16269.00C104045.67 16290.33 104056.33 16311.67 104067.00 16333.00C104024.00 16365.33 103981.00 16397.67 103938.00 16430.00C103927.33 16419.33 103916.67 16408.67 103906.00 16398.00C103906.00 16430.00 103906.00 16462.00 103906.00 16494.00C103895.33 16504.67 103884.67 16515.33 103874.00 16526.00C103852.67 16526.00 103831.33 16526.00 103810.00 16526.00C103820.67 16536.67 103831.33 16547.33 103842.00 16558.00C103831.33 16579.67 103820.67 16601.33 103810.00 16623.00C103799.00 16633.67 103788.00 16644.33 103777.00 16655.00C103777.00 16665.67 103777.00 16676.33 103777.00 16687.00C103788.00 16697.67 103799.00 16708.33 103810.00 16719.00C103820.67 16719.00 103831.33 16719.00 103842.00 16719.00C103831.33 16708.33 103820.67 16697.67 103810.00 16687.00C103820.67 16687.00 103831.33 16687.00 103842.00 16687.00C103852.67 16697.67 103863.33 16708.33 103874.00 16719.00C103895.33 16697.67 103916.67 16676.33 103938.00 16655.00C103948.67 16655.00 103959.33 16655.00 103970.00 16655.00C103981.00 16644.33 103992.00 16633.67 104003.00 16623.00C104013.67 16623.00 104024.33 16623.00 104035.00 16623.00C104056.33 16644.33 104077.67 16665.67 104099.00 16687.00C104099.00 16676.33 104099.00 16665.67 104099.00 16655.00C104109.67 16665.67 104120.33 16676.33 104131.00 16687.00C104141.67 16676.33 104152.33 16665.67 104163.00 16655.00C104195.33 16655.00 104227.67 16655.00 104260.00 16655.00C104281.33 16644.33 104302.67 16633.67 104324.00 16623.00C104377.67 16612.33 104431.33 16601.67 104485.00 16591.00C104581.33 16591.00 104677.67 16591.00 104774.00 16591.00C104795.67 16612.33 104817.33 16633.67 104839.00 16655.00C104839.00 16665.67 104839.00 16676.33 104839.00 16687.00C104871.00 16719.00 104903.00 16751.00 104935.00 16783.00C104988.67 16783.00 105042.33 16783.00 105096.00 16783.00C105138.67 16804.67 105181.33 16826.33 105224.00 16848.00C105288.33 16837.33 105352.67 16826.67 105417.00 16816.00C105427.67 16783.67 105438.33 16751.33 105449.00 16719.00C105438.33 16708.33 105427.67 16697.67 105417.00 16687.00C105427.67 16687.00 105438.33 16687.00 105449.00 16687.00C105460.00 16697.67 105471.00 16708.33 105482.00 16719.00C105482.00 16708.33 105482.00 16697.67 105482.00 16687.00C105503.33 16687.00 105524.67 16687.00 105546.00 16687.00C105556.67 16697.67 105567.33 16708.33 105578.00 16719.00C105588.67 16708.33 105599.33 16697.67 105610.00 16687.00C105620.67 16655.00 105631.33 16623.00 105642.00 16591.00C105653.00 16580.00 105664.00 16569.00 105675.00 16558.00C105675.00 16536.67 105675.00 16515.33 105675.00 16494.00C105696.33 16483.33 105717.67 16472.67 105739.00 16462.00C105739.00 16430.00 105739.00 16398.00 105739.00 16366.00C105771.00 16366.00 105803.00 16366.00 105835.00 16366.00C105835.00 16355.00 105835.00 16344.00 105835.00 16333.00C105824.33 16311.67 105813.67 16290.33 105803.00 16269.00C105835.33 16269.00 105867.67 16269.00 105900.00 16269.00C105900.00 16258.33 105900.00 16247.67 105900.00 16237.00C105910.67 16237.00 105921.33 16237.00 105932.00 16237.00C105985.33 16215.67 106038.67 16194.33 106092.00 16173.00C106113.67 16151.33 106135.33 16129.67 106157.00 16108.00C106167.67 16118.67 106178.33 16129.33 106189.00 16140.00C106189.00 16118.67 106189.00 16097.33 106189.00 16076.00C106199.67 16086.67 106210.33 16097.33 106221.00 16108.00C106231.67 16097.33 106242.33 16086.67 106253.00 16076.00C106285.33 16065.33 106317.67 16054.67 106350.00 16044.00C106360.67 16033.33 106371.33 16022.67 106382.00 16012.00C106392.67 16012.00 106403.33 16012.00 106414.00 16012.00C106435.33 16001.33 106456.67 15990.67 106478.00 15980.00C106478.00 15969.00 106478.00 15958.00 106478.00 15947.00C106564.00 15883.00 106650.00 15819.00 106736.00 15755.00C106746.67 15733.33 106757.33 15711.67 106768.00 15690.00C106757.33 15679.33 106746.67 15668.67 106736.00 15658.00C106768.00 15626.00 106800.00 15594.00 106832.00 15562.00C106832.00 15540.33 106832.00 15518.67 106832.00 15497.00C106853.33 15475.67 106874.67 15454.33 106896.00 15433.00C106917.67 15433.00 106939.33 15433.00 106961.00 15433.00C106971.67 15422.33 106982.33 15411.67 106993.00 15401.00C106982.33 15390.33 106971.67 15379.67 106961.00 15369.00C106971.67 15347.67 106982.33 15326.33 106993.00 15305.00C107025.00 15305.00 107057.00 15305.00 107089.00 15305.00C107089.00 15272.67 107089.00 15240.33 107089.00 15208.00C107121.33 15176.00 107153.67 15144.00 107186.00 15112.00C107207.33 15112.00 107228.67 15112.00 107250.00 15112.00C107250.00 15090.33 107250.00 15068.67 107250.00 15047.00C107239.33 15015.00 107228.67 14983.00 107218.00 14951.00C107239.33 14940.33 107260.67 14929.67 107282.00 14919.00C107292.67 14919.00 107303.33 14919.00 107314.00 14919.00C107314.00 14908.00 107314.00 14897.00 107314.00 14886.00C107324.67 14864.67 107335.33 14843.33 107346.00 14822.00C107357.00 14822.00 107368.00 14822.00 107379.00 14822.00C107368.00 14790.00 107357.00 14758.00 107346.00 14726.00C107314.00 14704.33 107282.00 14682.67 107250.00 14661.00C107260.67 14639.67 107271.33 14618.33 107282.00 14597.00C107260.67 14575.67 107239.33 14554.33 107218.00 14533.00C107240.29 14510.65 107262.70 14488.42 107284.91 14466.00C107294.61 14456.00 107304.30 14446.00 107314.00 14436.00C107324.67 14447.00 107335.33 14458.00 107346.00 14469.00C107367.76 14415.18 107389.42 14361.32 107411.23 14307.53C107428.24 14272.98 107445.18 14238.40 107462.50 14204.00C107487.71 14153.55 107512.92 14103.09 107538.37 14052.75C107549.58 14030.50 107560.79 14008.25 107572.00 13986.00C107572.00 13975.33 107572.00 13964.67 107572.00 13954.00C107582.67 13932.67 107593.33 13911.33 107604.00 13890.00C107593.33 13868.33 107582.67 13846.67 107572.00 13825.00C107582.82 13803.45 107593.50 13781.83 107604.40 13760.33C107636.27 13706.89 107668.13 13653.44 107700.00 13600.00C107710.67 13568.00 107721.33 13536.00 107732.00 13504.00C107775.00 13439.67 107818.00 13375.33 107861.00 13311.00C107882.33 13289.67 107903.67 13268.33 107925.00 13247.00C107935.67 13257.67 107946.33 13268.33 107957.00 13279.00C107967.67 13279.00 107978.33 13279.00 107989.00 13279.00C108010.67 13246.67 108032.33 13214.33 108054.00 13182.00C108054.00 13171.33 108054.00 13160.67 108054.00 13150.00C108043.33 13150.00 108032.67 13150.00 108022.00 13150.00C108011.00 13139.33 108000.00 13128.67 107989.00 13118.00C107989.00 13086.00 107989.00 13054.00 107989.00 13022.00C108000.00 13022.00 108011.00 13022.00 108022.00 13022.00C108039.09 12987.30 108056.10 12952.56 108073.50 12918.00C108088.33 12888.34 108103.17 12858.67 108118.00 12829.00C108118.00 12796.67 108118.00 12764.33 108118.00 12732.00C108128.67 12700.00 108139.33 12668.00 108150.00 12636.00C108160.67 12625.33 108171.33 12614.67 108182.00 12604.00C108205.00 12558.26 108228.14 12512.59 108251.06 12466.82C108271.04 12426.54 108291.02 12386.27 108311.00 12346.00C108279.00 12314.00 108247.00 12282.00 108215.00 12250.00C108225.67 12228.67 108236.33 12207.33 108247.00 12186.00C108257.67 12175.00 108268.33 12164.00 108279.00 12153.00C108268.33 12142.33 108257.67 12131.67 108247.00 12121.00C108236.33 12131.67 108225.67 12142.33 108215.00 12153.00C108204.00 12142.33 108193.00 12131.67 108182.00 12121.00C108193.00 12099.67 108204.00 12078.33 108215.00 12057.00C108225.67 12067.67 108236.33 12078.33 108247.00 12089.00C108257.67 12078.33 108268.33 12067.67 108279.00 12057.00C108268.33 12046.33 108257.67 12035.67 108247.00 12025.00C108264.17 11990.67 108281.40 11956.37 108298.26 11921.88C108302.50 11913.26 108306.75 11904.63 108311.00 11896.00C108332.33 11885.33 108353.67 11874.67 108375.00 11864.00C108396.67 11874.67 108418.33 11885.33 108440.00 11896.00C108429.33 11842.33 108418.67 11788.67 108408.00 11735.00C108429.33 11713.67 108450.67 11692.33 108472.00 11671.00C108472.00 11649.67 108472.00 11628.33 108472.00 11607.00C108514.67 11585.67 108557.33 11564.33 108600.00 11543.00C108600.00 11532.00 108600.00 11521.00 108600.00 11510.00C108611.00 11499.33 108622.00 11488.67 108633.00 11478.00C108643.67 11488.67 108654.33 11499.33 108665.00 11510.00C108675.67 11531.67 108686.33 11553.33 108697.00 11575.00C108718.33 11564.33 108739.67 11553.67 108761.00 11543.00C108771.70 11531.92 108782.50 11520.92 108793.15 11509.78C108836.10 11445.52 108879.05 11381.26 108922.00 11317.00C108932.67 11306.33 108943.33 11295.67 108954.00 11285.00C108954.00 11263.67 108954.00 11242.33 108954.00 11221.00C109007.67 11156.67 109061.33 11092.33 109115.00 11028.00C109125.72 10995.93 109136.34 10963.82 109147.12 10931.77C109211.41 10803.18 109275.71 10674.59 109340.00 10546.00C109361.33 10524.33 109382.67 10502.67 109404.00 10481.00C109414.67 10438.33 109425.33 10395.67 109436.00 10353.00C109448.38 10340.88 109460.99 10329.00 109473.21 10316.72C109493.14 10296.48 109513.07 10276.24 109533.00 10256.00C109522.33 10245.33 109511.67 10234.67 109501.00 10224.00C109533.00 10213.33 109565.00 10202.67 109597.00 10192.00C109650.67 10074.00 109704.33 9956.00 109758.00 9838.00C109790.00 9806.00 109822.00 9774.00 109854.00 9742.00C109865.00 9720.67 109876.00 9699.33 109887.00 9678.00C109897.67 9603.00 109908.33 9528.00 109919.00 9453.00C109935.14 9436.40 109951.13 9419.65 109967.61 9403.39C109972.74 9398.26 109977.87 9393.13 109983.00 9388.00C109993.67 9334.33 110004.33 9280.67 110015.00 9227.00C110036.67 9205.67 110058.33 9184.33 110080.00 9163.00C110122.67 9173.67 110165.33 9184.33 110208.00 9195.00C110218.67 9163.00 110229.33 9131.00 110240.00 9099.00C110229.33 9056.00 110218.67 9013.00 110208.00 8970.00C110218.67 8948.67 110229.33 8927.33 110240.00 8906.00C110261.67 8895.33 110283.33 8884.67 110305.00 8874.00C110315.67 8863.33 110326.33 8852.67 110337.00 8842.00C110358.33 8842.00 110379.67 8842.00 110401.00 8842.00C110422.33 8831.33 110443.67 8820.67 110465.00 8810.00C110486.67 8777.67 110508.33 8745.33 110530.00 8713.00C110530.00 8702.33 110530.00 8691.67 110530.00 8681.00C110551.33 8659.67 110572.67 8638.33 110594.00 8617.00C110626.00 8606.00 110658.00 8595.00 110690.00 8584.00C110701.00 8562.67 110712.00 8541.33 110723.00 8520.00C110723.00 8509.33 110723.00 8498.67 110723.00 8488.00C110755.00 8466.67 110787.00 8445.33 110819.00 8424.00C110840.33 8391.67 110861.67 8359.33 110883.00 8327.00C110894.00 8295.00 110905.00 8263.00 110916.00 8231.00C110916.00 8177.33 110916.00 8123.67 110916.00 8070.00C110926.67 8048.67 110937.33 8027.33 110948.00 8006.00C110983.21 7970.48 111018.30 7934.84 111053.60 7899.40C111061.07 7891.93 111068.53 7884.47 111076.00 7877.00C111129.67 7866.33 111183.33 7855.67 111237.00 7845.00C111258.33 7834.33 111279.67 7823.67 111301.00 7813.00C111322.67 7791.33 111344.33 7769.67 111366.00 7748.00C111398.00 7737.33 111430.00 7726.67 111462.00 7716.00C111494.33 7694.67 111526.67 7673.33 111559.00 7652.00C111559.00 7598.33 111559.00 7544.67 111559.00 7491.00C111569.71 7469.50 111580.56 7448.05 111591.18 7426.51C111623.17 7340.93 111655.09 7255.33 111687.12 7169.77C111708.41 7126.84 111729.71 7083.92 111751.00 7041.00C111762.00 6998.33 111773.00 6955.67 111784.00 6913.00C111784.00 6859.33 111784.00 6805.67 111784.00 6752.00C111794.67 6741.00 111805.33 6730.00 111816.00 6719.00C111826.66 6676.24 111837.43 6633.51 111848.02 6590.74C111858.68 6451.49 111869.34 6312.25 111880.00 6173.00C111912.33 6055.00 111944.67 5937.00 111977.00 5819.00C111998.33 5797.67 112019.67 5776.33 112041.00 5755.00C112083.67 5744.33 112126.33 5733.67 112169.00 5723.00C112190.67 5744.33 112212.33 5765.67 112234.00 5787.00C112255.33 5787.00 112276.67 5787.00 112298.00 5787.00C112351.67 5840.67 112405.33 5894.33 112459.00 5948.00C112501.72 5980.07 112544.50 6012.07 112587.18 6044.18C112715.90 6172.92 112844.66 6301.62 112973.36 6430.38C113123.24 6591.25 113273.12 6752.13 113423.00 6913.00C113423.00 6923.67 113423.00 6934.33 113423.00 6945.00C113455.33 6987.67 113487.67 7030.33 113520.00 7073.00C113530.67 7105.33 113541.33 7137.67 113552.00 7170.00C113573.33 7202.00 113594.67 7234.00 113616.00 7266.00C113648.33 7362.33 113680.67 7458.67 113713.00 7555.00C113713.00 7566.00 113713.00 7577.00 113713.00 7588.00C113723.67 7598.67 113734.33 7609.33 113745.00 7620.00C113745.00 7684.33 113745.00 7748.67 113745.00 7813.00C113755.67 7845.00 113766.33 7877.00 113777.00 7909.00C113777.00 7984.00 113777.00 8059.00 113777.00 8134.00C113787.76 8144.69 113798.40 8155.53 113809.23 8166.13C113884.15 8209.09 113959.08 8252.04 114034.00 8295.00C114077.00 8295.00 114120.00 8295.00 114163.00 8295.00C114184.33 8316.33 114205.67 8337.67 114227.00 8359.00C114227.00 8369.67 114227.00 8380.33 114227.00 8391.00C114237.67 8391.00 114248.33 8391.00 114259.00 8391.00C114259.00 8455.33 114259.00 8519.67 114259.00 8584.00C114248.33 8616.33 114237.67 8648.67 114227.00 8681.00C114227.00 8799.00 114227.00 8917.00 114227.00 9035.00C114216.33 9045.67 114205.67 9056.33 114195.00 9067.00C114205.67 9099.00 114216.33 9131.00 114227.00 9163.00C114216.33 9184.33 114205.67 9205.67 114195.00 9227.00C114195.02 9291.42 114194.95 9355.84 114195.04 9420.26C114205.70 9495.68 114216.43 9571.09 114227.05 9646.52C114248.70 9882.01 114270.35 10117.51 114292.00 10353.00C114270.33 10406.67 114248.67 10460.33 114227.00 10514.00C114227.00 10503.00 114227.00 10492.00 114227.00 10481.00C114216.33 10492.00 114205.67 10503.00 114195.00 10514.00C114195.00 10621.00 114195.00 10728.00 114195.00 10835.00C114205.89 10867.90 114216.65 10900.85 114227.62 10933.72C114324.08 11200.81 114420.54 11467.91 114517.00 11735.00C114505.95 11767.41 114494.99 11799.85 114483.88 11832.23C114473.26 11853.49 114462.63 11874.75 114452.00 11896.00C114452.00 11949.67 114452.00 12003.33 114452.00 12057.00C114462.67 12100.00 114473.33 12143.00 114484.00 12186.00C114516.33 12218.00 114548.67 12250.00 114581.00 12282.00C114581.00 12303.33 114581.00 12324.67 114581.00 12346.00C114570.33 12367.67 114559.67 12389.33 114549.00 12411.00C114549.00 12443.00 114549.00 12475.00 114549.00 12507.00C114559.68 12528.42 114570.46 12549.80 114581.08 12571.25C114591.72 12603.50 114602.36 12635.75 114613.00 12668.00C114634.33 12689.33 114655.67 12710.67 114677.00 12732.00C114677.00 12796.33 114677.00 12860.67 114677.00 12925.00C114688.00 12968.00 114699.00 13011.00 114710.00 13054.00C114720.68 13075.42 114731.46 13096.80 114742.08 13118.25C114752.72 13150.17 114763.36 13182.08 114774.00 13214.00C114806.00 13246.33 114838.00 13278.67 114870.00 13311.00C114870.00 13386.00 114870.00 13461.00 114870.00 13536.00C114881.00 13568.33 114892.00 13600.67 114903.00 13633.00C114892.00 13654.33 114881.00 13675.67 114870.00 13697.00C114902.33 13686.33 114934.67 13675.67 114967.00 13665.00C114988.33 13686.33 115009.67 13707.67 115031.00 13729.00C115041.67 13729.00 115052.33 13729.00 115063.00 13729.00C115073.67 13750.33 115084.33 13771.67 115095.00 13793.00C115084.33 13814.67 115073.67 13836.33 115063.00 13858.00C115063.00 13879.33 115063.00 13900.67 115063.00 13922.00C115084.67 13932.67 115106.33 13943.33 115128.00 13954.00C115138.67 13975.33 115149.33 13996.67 115160.00 14018.00C115160.00 14104.00 115160.00 14190.00 115160.00 14276.00C115181.33 14286.67 115202.67 14297.33 115224.00 14308.00C115256.00 14340.00 115288.00 14372.00 115320.00 14404.00C115320.00 14425.67 115320.00 14447.33 115320.00 14469.00C115331.00 14479.67 115342.00 14490.33 115353.00 14501.00C115353.00 14586.67 115353.00 14672.33 115353.00 14758.00C115363.67 14779.33 115374.33 14800.67 115385.00 14822.00C115395.67 14886.33 115406.33 14950.67 115417.00 15015.00C115406.33 15058.00 115395.67 15101.00 115385.00 15144.00C115363.33 15154.67 115341.67 15165.33 115320.00 15176.00C115309.33 15197.33 115298.67 15218.67 115288.00 15240.00C115298.67 15240.00 115309.33 15240.00 115320.00 15240.00C115320.00 15229.33 115320.00 15218.67 115320.00 15208.00C115341.67 15208.00 115363.33 15208.00 115385.00 15208.00C115417.00 15186.67 115449.00 15165.33 115481.00 15144.00C115502.67 15144.00 115524.33 15144.00 115546.00 15144.00C115567.33 15154.67 115588.67 15165.33 115610.00 15176.00C115620.67 15197.33 115631.33 15218.67 115642.00 15240.00C115642.00 15261.67 115642.00 15283.33 115642.00 15305.00C115663.33 15337.00 115684.67 15369.00 115706.00 15401.00C115717.00 15411.67 115728.00 15422.33 115739.00 15433.00C115739.00 15465.33 115739.00 15497.67 115739.00 15530.00C115728.00 15562.00 115717.00 15594.00 115706.00 15626.00C115717.59 15648.59 115729.37 15671.10 115740.84 15693.75C115750.90 15714.17 115760.95 15734.58 115771.00 15755.00C115760.33 15787.00 115749.67 15819.00 115739.00 15851.00C115760.33 15861.67 115781.67 15872.33 115803.00 15883.00C115813.67 15904.33 115824.33 15925.67 115835.00 15947.00C115835.00 16000.67 115835.00 16054.33 115835.00 16108.00C115845.72 16129.73 115856.37 16151.51 115867.14 16173.22C115888.43 16205.15 115909.71 16237.07 115931.00 16269.00C115931.00 16333.33 115931.00 16397.67 115931.00 16462.00C115942.00 16462.00 115953.00 16462.00 115964.00 16462.00C115974.67 16472.67 115985.33 16483.33 115996.00 16494.00C116027.60 16557.65 116059.07 16621.36 116090.94 16684.88C116093.19 16689.40 116094.29 16694.41 116096.05 16699.14C116105.36 16727.09 116114.68 16755.04 116124.00 16783.00C116124.00 16815.33 116124.00 16847.67 116124.00 16880.00C116113.33 16890.67 116102.67 16901.33 116092.00 16912.00C116070.67 16912.00 116049.33 16912.00 116028.00 16912.00C116028.00 16922.67 116028.00 16933.33 116028.00 16944.00C116086.67 16920.64 116145.39 16897.42 116204.02 16873.96C116306.10 16832.95 116408.16 16791.90 116510.25 16750.92C116542.90 16740.11 116575.60 16729.43 116608.22 16718.54C116693.48 16686.69 116778.74 16654.85 116864.00 16623.00C116971.00 16623.00 117078.00 16623.00 117185.00 16623.00C117206.67 16633.67 117228.33 16644.33 117250.00 16655.00C117250.00 16665.67 117250.00 16676.33 117250.00 16687.00C117260.67 16687.00 117271.33 16687.00 117282.00 16687.00C117303.33 16708.33 117324.67 16729.67 117346.00 16751.00C117356.67 16783.33 117367.33 16815.67 117378.00 16848.00C117421.00 16901.67 117464.00 16955.33 117507.00 17009.00C117507.00 17019.67 117507.00 17030.33 117507.00 17041.00C117517.67 17051.67 117528.33 17062.33 117539.00 17073.00C117549.67 17094.33 117560.33 17115.67 117571.00 17137.00C117581.67 17137.00 117592.33 17137.00 117603.00 17137.00C117635.33 17169.33 117667.67 17201.67 117700.00 17234.00C117689.33 17255.33 117678.67 17276.67 117668.00 17298.00C117678.67 17308.67 117689.33 17319.33 117700.00 17330.00C117700.00 17340.67 117700.00 17351.33 117700.00 17362.00C117721.33 17394.33 117742.67 17426.67 117764.00 17459.00C117764.00 17480.33 117764.00 17501.67 117764.00 17523.00C117796.33 17544.33 117828.67 17565.67 117861.00 17587.00C117861.00 17640.67 117861.00 17694.33 117861.00 17748.00C117871.67 17758.67 117882.33 17769.33 117893.00 17780.00C117903.74 17801.92 117914.64 17823.77 117925.29 17845.73C117968.13 17953.22 118011.04 18060.68 118053.84 18168.19C118107.23 18306.79 118160.61 18445.40 118214.00 18584.00C118321.33 18562.67 118428.67 18541.33 118536.00 18520.00C118643.00 18562.67 118750.00 18605.33 118857.00 18648.00C118878.67 18648.00 118900.33 18648.00 118922.00 18648.00C118975.50 18669.71 119028.97 18691.51 119082.50 18713.16C119114.66 18723.78 119146.83 18734.39 119179.00 18745.00C119234.03 18777.78 119289.00 18810.65 119344.06 18843.37C119471.04 18917.58 119598.02 18991.79 119725.00 19066.00C119736.00 19077.00 119747.00 19088.00 119758.00 19099.00C119758.00 19120.33 119758.00 19141.67 119758.00 19163.00C119747.00 19173.67 119736.00 19184.33 119725.00 19195.00C119725.00 19205.67 119725.00 19216.33 119725.00 19227.00C119746.67 19227.00 119768.33 19227.00 119790.00 19227.00C119800.73 19291.85 119811.55 19356.69 119822.22 19421.55C119843.49 19571.21 119864.81 19720.86 119886.06 19870.52C119896.70 19967.10 119907.41 20063.68 119918.00 20160.26C119917.98 20213.59 119918.05 20266.93 119917.96 20320.26C119907.31 20395.17 119896.65 20470.09 119886.00 20545.00C119896.67 20566.67 119907.33 20588.33 119918.00 20610.00C119896.67 20706.33 119875.33 20802.67 119854.00 20899.00C119822.00 20952.67 119790.00 21006.33 119758.00 21060.00C119768.66 21092.09 119779.45 21124.15 119790.04 21156.26C119800.69 21231.17 119811.35 21306.09 119822.00 21381.00C119832.67 21402.67 119843.33 21424.33 119854.00 21446.00C119854.00 21488.67 119854.00 21531.33 119854.00 21574.00C119822.00 21627.67 119790.00 21681.33 119758.00 21735.00C119746.95 21767.41 119735.99 21799.85 119724.88 21832.23C119703.59 21874.82 119682.29 21917.41 119661.00 21960.00C119650.33 21960.00 119639.67 21960.00 119629.00 21960.00C119618.33 21970.67 119607.67 21981.33 119597.00 21992.00C119607.67 21992.00 119618.33 21992.00 119629.00 21992.00C119618.33 22099.33 119607.67 22206.67 119597.00 22314.00C119607.67 22324.67 119618.33 22335.33 119629.00 22346.00C119629.00 22410.33 119629.00 22474.67 119629.00 22539.00C119618.33 22560.33 119607.67 22581.67 119597.00 22603.00C119564.67 22635.33 119532.33 22667.67 119500.00 22700.00C119489.33 22700.00 119478.67 22700.00 119468.00 22700.00C119436.00 22753.67 119404.00 22807.33 119372.00 22861.00C119361.28 22893.07 119350.66 22925.18 119339.88 22957.23C119307.59 23021.49 119275.29 23085.74 119243.00 23150.00C119211.00 23171.33 119179.00 23192.67 119147.00 23214.00C119147.00 23224.67 119147.00 23235.33 119147.00 23246.00C119136.33 23246.00 119125.67 23246.00 119115.00 23246.00C119104.00 23235.33 119093.00 23224.67 119082.00 23214.00C119082.00 23246.33 119082.00 23278.67 119082.00 23311.00C119071.33 23332.33 119060.67 23353.67 119050.00 23375.00C119060.67 23375.00 119071.33 23375.00 119082.00 23375.00C119082.00 23407.00 119082.00 23439.00 119082.00 23471.00C119071.33 23460.33 119060.67 23449.67 119050.00 23439.00C119039.33 23449.67 119028.67 23460.33 119018.00 23471.00C119018.00 23492.67 119018.00 23514.33 119018.00 23536.00C118996.67 23536.00 118975.33 23536.00 118954.00 23536.00C118954.00 23546.67 118954.00 23557.33 118954.00 23568.00C118943.33 23568.00 118932.67 23568.00 118922.00 23568.00C118911.00 23696.67 118900.00 23825.33 118889.00 23954.00C118728.33 23954.00 118567.67 23954.00 118407.00 23954.00C118353.33 23964.67 118299.67 23975.33 118246.00 23986.00C118224.67 23996.67 118203.33 24007.33 118182.00 24018.00C118075.00 24039.33 117968.00 24060.67 117861.00 24082.00C117807.33 24103.67 117753.67 24125.33 117700.00 24147.00C117625.00 24200.33 117550.00 24253.67 117475.00 24307.00C117464.33 24317.67 117453.67 24328.33 117443.00 24339.00C117432.00 24339.00 117421.00 24339.00 117410.00 24339.00C117367.33 24382.00 117324.67 24425.00 117282.00 24468.00C117258.53 24514.67 117234.91 24561.27 117211.54 24607.99C117181.36 24668.66 117151.18 24729.33 117121.00 24790.00C117110.33 24875.67 117099.67 24961.33 117089.00 25047.00C117078.33 25079.00 117067.67 25111.00 117057.00 25143.00C117024.67 25186.00 116992.33 25229.00 116960.00 25272.00C116928.00 25368.33 116896.00 25464.67 116864.00 25561.00C116840.81 25607.65 116817.77 25654.36 116794.49 25700.96C116762.34 25765.00 116730.08 25828.98 116698.00 25893.05C116667.67 25954.03 116637.33 26015.02 116607.00 26076.00C116574.59 26108.04 116542.24 26140.16 116509.79 26172.16C116467.14 26204.51 116424.43 26236.79 116381.81 26269.18C116349.50 26301.20 116317.11 26333.15 116284.84 26365.21C116252.90 26408.14 116220.95 26451.07 116189.00 26494.00C116071.00 26579.67 115953.00 26665.33 115835.00 26751.00C115770.67 26783.00 115706.33 26815.00 115642.00 26847.00C115588.25 26858.03 115534.49 26869.00 115480.75 26880.08C115341.50 26922.72 115202.25 26965.36 115063.00 27008.00C115041.67 27008.00 115020.33 27008.00 114999.00 27008.00C114977.61 27018.74 114956.13 27029.34 114934.80 27040.17C114870.48 27093.85 114806.11 27147.48 114741.82 27201.19C114731.12 27211.94 114720.29 27222.58 114709.69 27233.42C114677.46 27276.28 114645.23 27319.14 114613.00 27362.00C114613.00 27372.67 114613.00 27383.33 114613.00 27394.00C114602.33 27394.00 114591.67 27394.00 114581.00 27394.00C114548.60 27437.05 114516.27 27480.17 114483.82 27523.19C114473.18 27533.87 114462.43 27544.47 114451.86 27555.22C114430.57 27587.15 114409.29 27619.07 114388.00 27651.00C114356.00 27683.33 114324.00 27715.67 114292.00 27748.00C114259.67 27769.33 114227.33 27790.67 114195.00 27812.00C114184.33 27812.00 114173.67 27812.00 114163.00 27812.00C114131.00 27833.33 114099.00 27854.67 114067.00 27876.00C113970.33 27887.00 113873.67 27898.00 113777.00 27909.00C113712.67 27930.33 113648.33 27951.67 113584.00 27973.00C113530.30 28058.75 113476.54 28144.46 113422.88 28230.23C113401.59 28273.16 113380.29 28316.08 113359.00 28359.00C113316.29 28412.41 113273.53 28465.78 113230.85 28519.22C113209.24 28551.48 113187.62 28583.74 113166.00 28616.00C113133.28 28648.76 113100.48 28681.43 113067.82 28714.25C113057.84 28724.58 113047.77 28734.84 113037.85 28745.22C113016.21 28777.23 112994.48 28809.19 112972.88 28841.23C112962.26 28862.49 112951.63 28883.74 112941.00 28905.00C112940.94 28915.92 112941.13 28926.86 112940.90 28937.78C112930.27 29023.52 112919.63 29109.26 112909.00 29195.00C112812.67 29291.33 112716.33 29387.67 112620.00 29484.00C112598.33 29559.00 112576.67 29634.00 112555.00 29709.00C112523.00 29773.33 112491.00 29837.67 112459.00 29902.00C112405.33 29955.67 112351.67 30009.33 112298.00 30063.00C112254.95 30095.07 112211.83 30127.06 112168.82 30159.19C112147.39 30181.00 112125.85 30202.72 112104.49 30224.59C112040.26 30299.45 111976.07 30374.35 111911.82 30449.19C111869.21 30491.79 111826.61 30534.40 111784.00 30577.00C111676.67 30759.33 111569.33 30941.67 111462.00 31124.00C111451.33 31134.67 111440.67 31145.33 111430.00 31156.00C111419.33 31177.33 111408.67 31198.67 111398.00 31220.00C111387.33 31231.00 111376.67 31242.00 111366.00 31253.00C111365.98 31306.42 111366.04 31359.84 111365.97 31413.26C111354.99 31520.59 111343.94 31627.92 111333.00 31735.26C111333.00 31788.84 111333.00 31842.42 111333.00 31896.00C111322.33 31896.00 111311.67 31896.00 111301.00 31896.00C111311.67 32013.67 111322.33 32131.33 111333.00 32249.00C111344.00 32281.33 111355.00 32313.67 111366.00 32346.00C111366.00 32378.00 111366.00 32410.00 111366.00 32442.00C111354.89 32463.47 111343.90 32485.01 111332.71 32506.44C111311.47 32538.62 111290.24 32570.81 111269.00 32603.00C111151.33 32721.00 111033.67 32839.00 110916.00 32957.00C110873.00 32989.00 110830.00 33021.00 110787.00 33053.00C110658.33 33063.67 110529.67 33074.33 110401.00 33085.00C110354.51 33038.41 110307.64 32992.19 110260.96 32945.79C110253.97 32938.86 110246.99 32931.93 110240.00 32925.00C110218.67 32935.67 110197.33 32946.33 110176.00 32957.00C110154.67 32999.67 110133.33 33042.33 110112.00 33085.00C110112.00 33095.67 110112.00 33106.33 110112.00 33117.00C110101.33 33106.33 110090.67 33095.67 110080.00 33085.00C110069.00 33085.00 110058.00 33085.00 110047.00 33085.00C110047.00 33020.67 110047.00 32956.33 110047.00 32892.00C110025.67 32881.33 110004.33 32870.67 109983.00 32860.00C109972.33 32860.00 109961.67 32860.00 109951.00 32860.00C109940.33 32870.67 109929.67 32881.33 109919.00 32892.00C109929.67 32945.67 109940.33 32999.33 109951.00 33053.00C109940.33 33063.67 109929.67 33074.33 109919.00 33085.00C109919.00 33095.67 109919.00 33106.33 109919.00 33117.00C109886.67 33106.33 109854.33 33095.67 109822.00 33085.00C109779.33 33095.67 109736.67 33106.33 109694.00 33117.00C109659.37 33134.58 109624.78 33152.23 109590.00 33169.50C109581.67 33173.67 109573.33 33177.83 109565.00 33182.00C109565.00 33192.67 109565.00 33203.33 109565.00 33214.00C109597.00 33246.00 109629.00 33278.00 109661.00 33310.00C109661.00 33320.67 109661.00 33331.33 109661.00 33342.00C109650.33 33363.67 109639.67 33385.33 109629.00 33407.00C109597.00 33417.67 109565.00 33428.33 109533.00 33439.00C109490.00 33417.67 109447.00 33396.33 109404.00 33375.00C109393.33 33375.00 109382.67 33375.00 109372.00 33375.00C109361.33 33364.00 109350.67 33353.00 109340.00 33342.00C109340.00 33320.67 109340.00 33299.33 109340.00 33278.00C109350.67 33246.00 109361.33 33214.00 109372.00 33182.00C109350.67 33128.33 109329.33 33074.67 109308.00 33021.00C109308.00 33010.33 109308.00 32999.67 109308.00 32989.00C109265.00 32989.00 109222.00 32989.00 109179.00 32989.00C109157.67 32967.67 109136.33 32946.33 109115.00 32925.00C109018.33 32925.00 108921.67 32925.00 108825.00 32925.00C108803.67 32914.00 108782.33 32903.00 108761.00 32892.00C108696.67 32892.00 108632.33 32892.00 108568.00 32892.00C108525.33 32870.67 108482.67 32849.33 108440.00 32828.00C108397.00 32828.00 108354.00 32828.00 108311.00 32828.00C108279.00 32753.00 108247.00 32678.00 108215.00 32603.00C108204.00 32592.33 108193.00 32581.67 108182.00 32571.00C108139.33 32560.33 108096.67 32549.67 108054.00 32539.00C108032.33 32517.33 108010.67 32495.67 107989.00 32474.00C107957.00 32495.67 107925.00 32517.33 107893.00 32539.00C107876.86 32522.40 107860.87 32505.65 107844.39 32489.39C107839.26 32484.26 107834.13 32479.13 107829.00 32474.00C107850.33 32452.67 107871.67 32431.33 107893.00 32410.00C107903.67 32378.00 107914.33 32346.00 107925.00 32314.00C107914.33 32303.00 107903.67 32292.00 107893.00 32281.00C107893.00 32227.67 107893.00 32174.33 107893.00 32121.00C107861.00 32088.67 107829.00 32056.33 107797.00 32024.00C107797.00 31992.00 107797.00 31960.00 107797.00 31928.00C107813.25 31911.72 107829.64 31895.57 107845.54 31878.94C107850.69 31873.63 107855.85 31868.31 107861.00 31863.00C107893.00 31863.00 107925.00 31863.00 107957.00 31863.00C107967.67 31820.33 107978.33 31777.67 107989.00 31735.00C107978.28 31713.27 107967.63 31691.49 107956.86 31669.78C107935.57 31637.85 107914.29 31605.93 107893.00 31574.00C107871.67 31563.33 107850.33 31552.67 107829.00 31542.00C107806.74 31520.03 107784.37 31498.17 107762.18 31476.13C107752.12 31465.75 107742.06 31455.38 107732.00 31445.00C107710.67 31466.67 107689.33 31488.33 107668.00 31510.00C107657.26 31510.06 107646.48 31509.89 107635.75 31510.08C107581.51 31527.96 107527.27 31545.83 107473.12 31563.96C107462.99 31567.28 107452.89 31570.82 107442.74 31574.00C107399.83 31574.00 107356.91 31574.00 107314.00 31574.00C107324.74 31552.61 107335.35 31531.14 107346.16 31509.80C107389.11 31456.20 107432.05 31402.60 107475.00 31349.00C107453.67 31338.33 107432.33 31327.67 107411.00 31317.00C107411.00 31274.00 107411.00 31231.00 107411.00 31188.00C107443.00 31134.33 107475.00 31080.67 107507.00 31027.00C107507.00 30941.33 107507.00 30855.67 107507.00 30770.00C107485.67 30727.33 107464.33 30684.67 107443.00 30642.00C107443.00 30567.00 107443.00 30492.00 107443.00 30417.00C107432.33 30363.33 107421.67 30309.67 107411.00 30256.00C107389.33 30234.33 107367.67 30212.67 107346.00 30191.00C107292.67 30191.00 107239.33 30191.00 107186.00 30191.00C107143.00 30202.00 107100.00 30213.00 107057.00 30224.00C107025.00 30245.33 106993.00 30266.67 106961.00 30288.00C106939.33 30288.00 106917.67 30288.00 106896.00 30288.00C106874.67 30277.33 106853.33 30266.67 106832.00 30256.00C106789.00 30191.67 106746.00 30127.33 106703.00 30063.00C106703.00 30030.67 106703.00 29998.33 106703.00 29966.00C106681.63 29944.58 106660.16 29923.25 106638.86 29901.78C106617.57 29869.85 106596.29 29837.93 106575.00 29806.00C106585.67 29773.67 106596.33 29741.33 106607.00 29709.00C106585.67 29687.67 106564.33 29666.33 106543.00 29645.00C106585.67 29580.67 106628.33 29516.33 106671.00 29452.00C106660.33 29441.33 106649.67 29430.67 106639.00 29420.00C106617.67 29377.00 106596.33 29334.00 106575.00 29291.00C106575.00 29259.00 106575.00 29227.00 106575.00 29195.00C106596.33 29152.00 106617.67 29109.00 106639.00 29066.00C106639.00 29023.00 106639.00 28980.00 106639.00 28937.00C106628.33 28915.67 106617.67 28894.33 106607.00 28873.00C106585.67 28851.67 106564.33 28830.33 106543.00 28809.00C106521.33 28809.00 106499.67 28809.00 106478.00 28809.00C106446.00 28787.67 106414.00 28766.33 106382.00 28745.00C106360.67 28723.33 106339.33 28701.67 106318.00 28680.00C106307.00 28637.33 106296.00 28594.67 106285.00 28552.00C106167.33 28466.00 106049.67 28380.00 105932.00 28294.00C105919.99 28270.13 105908.21 28246.14 105896.05 28222.34C105886.37 28203.56 105876.68 28184.78 105867.00 28166.00C105856.33 28155.33 105845.67 28144.67 105835.00 28134.00C105803.00 28123.00 105771.00 28112.00 105739.00 28101.00C105696.00 28112.00 105653.00 28123.00 105610.00 28134.00C105567.33 28123.00 105524.67 28112.00 105482.00 28101.00C105471.00 28090.33 105460.00 28079.67 105449.00 28069.00C105406.33 27951.33 105363.67 27833.67 105321.00 27716.00C105310.29 27672.74 105299.49 27629.50 105288.85 27586.23C105278.23 27532.82 105267.62 27479.41 105257.00 27426.00C105257.00 27372.67 105257.00 27319.33 105257.00 27266.00C105245.92 27254.97 105234.92 27243.82 105223.78 27232.85C105191.86 27211.57 105159.93 27190.28 105128.00 27169.00C105106.67 27147.67 105085.33 27126.33 105064.00 27105.00C105074.67 27040.67 105085.33 26976.33 105096.00 26912.00C105063.67 26901.33 105031.33 26890.67 104999.00 26880.00C104988.33 26858.33 104977.67 26836.67 104967.00 26815.00C104967.00 26783.00 104967.00 26751.00 104967.00 26719.00C104956.33 26708.33 104945.67 26697.67 104935.00 26687.00C104924.33 26665.33 104913.67 26643.67 104903.00 26622.00C104870.67 26600.67 104838.33 26579.33 104806.00 26558.00C104784.67 26526.00 104763.33 26494.00 104742.00 26462.00C104720.67 26451.33 104699.33 26440.67 104678.00 26430.00C104667.33 26376.33 104656.67 26322.67 104646.00 26269.00C104656.67 26236.67 104667.33 26204.33 104678.00 26172.00C104688.67 26161.33 104699.33 26150.67 104710.00 26140.00C104677.67 26086.33 104645.33 26032.67 104613.00 25979.00C104581.00 25957.67 104549.00 25936.33 104517.00 25915.00C104506.27 25871.84 104495.64 25828.65 104484.83 25785.51C104474.22 25753.67 104463.61 25721.83 104453.00 25690.00C104420.67 25668.67 104388.33 25647.33 104356.00 25626.00C104345.33 25593.67 104334.67 25561.33 104324.00 25529.00C104345.33 25497.00 104366.67 25465.00 104388.00 25433.00C104388.00 25400.67 104388.00 25368.33 104388.00 25336.00C104377.33 25293.33 104366.67 25250.67 104356.00 25208.00C104377.67 25154.33 104399.33 25100.67 104421.00 25047.00C104410.00 25036.33 104399.00 25025.67 104388.00 25015.00C104366.67 25004.33 104345.33 24993.67 104324.00 24983.00C104345.33 24950.67 104366.67 24918.33 104388.00 24886.00C104377.33 24875.33 104366.67 24864.67 104356.00 24854.00C104386.18 24824.20 104416.57 24794.61 104446.48 24764.53C104448.65 24762.35 104450.83 24760.17 104453.00 24758.00C104453.00 24736.33 104453.00 24714.67 104453.00 24693.00C104442.33 24671.67 104431.67 24650.33 104421.00 24629.00C104421.00 24607.67 104421.00 24586.33 104421.00 24565.00C104431.67 24532.67 104442.33 24500.33 104453.00 24468.00C104495.67 24414.33 104538.33 24360.67 104581.00 24307.00C104591.67 24242.67 104602.33 24178.33 104613.00 24114.00C104624.00 24103.33 104635.00 24092.67 104646.00 24082.00C104646.00 24071.33 104646.00 24060.67 104646.00 24050.00C104613.67 24028.67 104581.33 24007.33 104549.00 23986.00C104527.67 23996.67 104506.33 24007.33 104485.00 24018.00C104474.33 24007.33 104463.67 23996.67 104453.00 23986.00C104442.28 23953.60 104431.66 23921.15 104420.88 23888.77C104409.92 23867.51 104398.96 23846.26 104388.00 23825.00C104345.33 23793.00 104302.67 23761.00 104260.00 23729.00C104249.33 23696.67 104238.67 23664.33 104228.00 23632.00C104217.00 23621.33 104206.00 23610.67 104195.00 23600.00C104184.33 23600.00 104173.67 23600.00 104163.00 23600.00C104152.25 23589.30 104141.59 23578.49 104130.78 23567.85C104034.54 23503.54 103938.35 23439.16 103842.00 23375.00C103820.33 23332.00 103798.67 23289.00 103777.00 23246.00C103755.67 23224.67 103734.33 23203.33 103713.00 23182.00C103627.33 23139.00 103541.67 23096.00 103456.00 23053.00C103445.25 23042.29 103434.58 23031.50 103423.79 23020.85C103348.86 22967.57 103273.93 22914.28 103199.00 22861.00C103188.33 22828.67 103177.67 22796.33 103167.00 22764.00C103177.67 22753.33 103188.33 22742.67 103199.00 22732.00C103199.00 22689.00 103199.00 22646.00 103199.00 22603.00C103182.72 22586.75 103166.57 22570.36 103149.94 22554.46C103144.63 22549.31 103139.31 22544.15 103134.00 22539.00C103123.33 22506.67 103112.67 22474.33 103102.00 22442.00C103102.00 22431.33 103102.00 22420.67 103102.00 22410.00C103112.67 22399.33 103123.33 22388.67 103134.00 22378.00C103134.00 22367.33 103134.00 22356.67 103134.00 22346.00C103123.33 22324.67 103112.67 22303.33 103102.00 22282.00C103091.33 22282.00 103080.67 22282.00 103070.00 22282.00C103070.00 22260.33 103070.00 22238.67 103070.00 22217.00C103038.00 22185.00 103006.00 22153.00 102974.00 22121.00C102974.00 22024.67 102974.00 21928.33 102974.00 21832.00C102995.33 21810.33 103016.67 21788.67 103038.00 21767.00C103048.67 21767.00 103059.33 21767.00 103070.00 21767.00C103091.33 21777.67 103112.67 21788.33 103134.00 21799.00C103155.67 21799.00 103177.33 21799.00 103199.00 21799.00C103209.67 21788.33 103220.33 21777.67 103231.00 21767.00C103231.06 21756.26 103230.89 21745.47 103231.08 21734.75C103241.72 21702.83 103252.36 21670.92 103263.00 21639.00C103252.33 21617.33 103241.67 21595.67 103231.00 21574.00C103209.67 21552.67 103188.33 21531.33 103167.00 21510.00C103156.00 21478.00 103145.00 21446.00 103134.00 21414.00C103134.00 21381.67 103134.00 21349.33 103134.00 21317.00C103123.33 21317.00 103112.67 21317.00 103102.00 21317.00C103091.33 21327.67 103080.67 21338.33 103070.00 21349.00C103070.00 21359.67 103070.00 21370.33 103070.00 21381.00C103016.33 21370.33 102962.67 21359.67 102909.00 21349.00C102823.33 21392.00 102737.67 21435.00 102652.00 21478.00C102630.67 21478.00 102609.33 21478.00 102588.00 21478.00C102577.33 21456.67 102566.67 21435.33 102556.00 21414.00C102556.00 21403.00 102556.00 21392.00 102556.00 21381.00C102577.33 21359.67 102598.67 21338.33 102620.00 21317.00C102630.67 21285.00 102641.33 21253.00 102652.00 21221.00C102641.33 21199.33 102630.67 21177.67 102620.00 21156.00C102588.00 21145.33 102556.00 21134.67 102524.00 21124.00C102513.00 21124.00 102502.00 21124.00 102491.00 21124.00C102491.00 21081.33 102491.00 21038.67 102491.00 20996.00C102525.63 20978.42 102560.22 20960.77 102595.00 20943.50C102603.33 20939.33 102611.67 20935.17 102620.00 20931.00C102609.33 20899.00 102598.67 20867.00 102588.00 20835.00C102577.33 20824.33 102566.67 20813.67 102556.00 20803.00C102523.67 20803.00 102491.33 20803.00 102459.00 20803.00C102459.00 20813.67 102459.00 20824.33 102459.00 20835.00C102448.33 20845.67 102437.67 20856.33 102427.00 20867.00C102395.00 20835.00 102363.00 20803.00 102331.00 20771.00C102266.67 20781.67 102202.33 20792.33 102138.00 20803.00C102127.00 20824.33 102116.00 20845.67 102105.00 20867.00C102083.67 20867.00 102062.33 20867.00 102041.00 20867.00C102030.33 20845.67 102019.67 20824.33 102009.00 20803.00C102030.33 20792.33 102051.67 20781.67 102073.00 20771.00C102083.67 20760.00 102094.33 20749.00 102105.00 20738.00C102094.33 20706.00 102083.67 20674.00 102073.00 20642.00C102083.67 20620.67 102094.33 20599.33 102105.00 20578.00C102094.33 20556.33 102083.67 20534.67 102073.00 20513.00C102051.67 20523.67 102030.33 20534.33 102009.00 20545.00C101998.33 20588.00 101987.67 20631.00 101977.00 20674.00C101955.67 20674.00 101934.33 20674.00 101913.00 20674.00C101913.00 20663.33 101913.00 20652.67 101913.00 20642.00C101902.00 20631.33 101891.00 20620.67 101880.00 20610.00C101858.67 20631.33 101837.33 20652.67 101816.00 20674.00C101805.33 20663.33 101794.67 20652.67 101784.00 20642.00C101773.33 20620.67 101762.67 20599.33 101752.00 20578.00C101784.00 20545.67 101816.00 20513.33 101848.00 20481.00C101848.00 20470.33 101848.00 20459.67 101848.00 20449.00C101816.00 20427.67 101784.00 20406.33 101752.00 20385.00C101741.33 20395.67 101730.67 20406.33 101720.00 20417.00C101730.67 20438.33 101741.33 20459.67 101752.00 20481.00C101752.00 20491.67 101752.00 20502.33 101752.00 20513.00C101730.67 20534.67 101709.33 20556.33 101688.00 20578.00C101688.00 20588.67 101688.00 20599.33 101688.00 20610.00C101645.00 20599.33 101602.00 20588.67 101559.00 20578.00C101548.33 20556.33 101537.67 20534.67 101527.00 20513.00C101516.33 20534.67 101505.67 20556.33 101495.00 20578.00C101484.00 20578.00 101473.00 20578.00 101462.00 20578.00C101451.33 20567.00 101440.67 20556.00 101430.00 20545.00C101419.33 20523.67 101408.67 20502.33 101398.00 20481.00C101376.67 20470.33 101355.33 20459.67 101334.00 20449.00C101312.33 20449.00 101290.67 20449.00 101269.00 20449.00C101258.33 20459.67 101247.67 20470.33 101237.00 20481.00C101259.26 20502.97 101281.63 20524.83 101303.82 20546.87C101313.88 20557.25 101323.94 20567.63 101334.00 20578.00C101323.33 20588.67 101312.67 20599.33 101302.00 20610.00C101280.33 20610.00 101258.67 20610.00 101237.00 20610.00C101226.33 20599.33 101215.67 20588.67 101205.00 20578.00C101173.00 20588.67 101141.00 20599.33 101109.00 20610.00C101109.00 20599.33 101109.00 20588.67 101109.00 20578.00C101119.67 20567.00 101130.33 20556.00 101141.00 20545.00C101141.00 20534.33 101141.00 20523.67 101141.00 20513.00C101119.67 20523.67 101098.33 20534.33 101077.00 20545.00C101044.67 20534.33 101012.33 20523.67 100980.00 20513.00C100969.33 20523.67 100958.67 20534.33 100948.00 20545.00C100948.04 20534.25 100947.92 20523.48 100948.06 20512.75C100958.71 20470.16 100969.35 20427.58 100980.00 20385.00C100980.00 20374.33 100980.00 20363.67 100980.00 20353.00C100958.67 20353.00 100937.33 20353.00 100916.00 20353.00C100905.33 20331.33 100894.67 20309.67 100884.00 20288.00C100851.67 20288.00 100819.33 20288.00 100787.00 20288.00C100787.00 20309.67 100787.00 20331.33 100787.00 20353.00C100765.67 20363.67 100744.33 20374.33 100723.00 20385.00C100712.33 20385.00 100701.67 20385.00 100691.00 20385.00C100691.00 20374.33 100691.00 20363.67 100691.00 20353.00C100701.67 20342.00 100712.33 20331.00 100723.00 20320.00C100723.00 20309.33 100723.00 20298.67 100723.00 20288.00C100733.67 20266.67 100744.33 20245.33 100755.00 20224.00C100744.33 20224.00 100733.67 20224.00 100723.00 20224.00C100701.67 20213.33 100680.33 20202.67 100659.00 20192.00C100648.00 20202.67 100637.00 20213.33 100626.00 20224.00C100626.00 20202.67 100626.00 20181.33 100626.00 20160.00C100604.67 20149.00 100583.33 20138.00 100562.00 20127.00C100551.33 20148.67 100540.67 20170.33 100530.00 20192.00C100508.67 20181.33 100487.33 20170.67 100466.00 20160.00C100444.33 20170.67 100422.67 20181.33 100401.00 20192.00C100401.00 20138.33 100401.00 20084.67 100401.00 20031.00C100390.33 20009.67 100379.67 19988.33 100369.00 19967.00C100347.67 19977.67 100326.33 19988.33 100305.00 19999.00C100294.33 19999.00 100283.67 19999.00 100273.00 19999.00C100283.67 20009.67 100294.33 20020.33 100305.00 20031.00C100294.33 20041.67 100283.67 20052.33 100273.00 20063.00C100251.33 20052.33 100229.67 20041.67 100208.00 20031.00C100186.67 20052.33 100165.33 20073.67 100144.00 20095.00C100133.33 20095.00 100122.67 20095.00 100112.00 20095.00C100101.33 20084.33 100090.67 20073.67 100080.00 20063.00C100058.67 20073.67 100037.33 20084.33 100016.00 20095.00C100026.67 20105.67 100037.33 20116.33 100048.00 20127.00C100026.33 20127.00 100004.67 20127.00 99983.00 20127.00C99983.00 20116.33 99983.00 20105.67 99983.00 20095.00C99994.00 20073.67 100005.00 20052.33 100016.00 20031.00C100005.00 20020.33 99994.00 20009.67 99983.00 19999.00C99994.00 19977.67 100005.00 19956.33 100016.00 19935.00C99994.33 19892.00 99972.67 19849.00 99951.00 19806.00C99919.00 19806.00 99887.00 19806.00 99855.00 19806.00C99855.00 19795.33 99855.00 19784.67 99855.00 19774.00C99872.09 19739.29 99889.10 19704.56 99906.50 19670.00C99910.66 19661.67 99914.83 19653.33 99919.00 19645.00C99919.00 19634.33 99919.00 19623.67 99919.00 19613.00C99897.67 19634.33 99876.33 19655.67 99855.00 19677.00C99844.33 19655.67 99833.67 19634.33 99823.00 19613.00C99812.00 19613.00 99801.00 19613.00 99790.00 19613.00C99790.00 19602.33 99790.00 19591.67 99790.00 19581.00C99801.00 19581.00 99812.00 19581.00 99823.00 19581.00C99823.00 19570.33 99823.00 19559.67 99823.00 19549.00C99801.33 19527.33 99779.67 19505.67 99758.00 19484.00C99768.67 19473.33 99779.33 19462.67 99790.00 19452.00C99768.67 19452.00 99747.33 19452.00 99726.00 19452.00C99726.00 19430.67 99726.00 19409.33 99726.00 19388.00C99715.33 19377.33 99704.67 19366.67 99694.00 19356.00C99694.00 19366.67 99694.00 19377.33 99694.00 19388.00C99683.33 19377.33 99672.67 19366.67 99662.00 19356.00C99629.67 19356.00 99597.33 19356.00 99565.00 19356.00C99565.00 19334.33 99565.00 19312.67 99565.00 19291.00C99554.33 19291.00 99543.67 19291.00 99533.00 19291.00C99522.33 19312.67 99511.67 19334.33 99501.00 19356.00C99501.00 19388.00 99501.00 19420.00 99501.00 19452.00C99490.33 19441.33 99479.67 19430.67 99469.00 19420.00C99458.33 19388.00 99447.67 19356.00 99437.00 19324.00C99402.37 19306.42 99367.79 19288.77 99333.00 19271.50C99324.67 19267.33 99316.34 19263.17 99308.00 19259.00C99308.00 19237.67 99308.00 19216.33 99308.00 19195.00C99286.67 19195.00 99265.33 19195.00 99244.00 19195.00C99233.33 19184.33 99222.67 19173.67 99212.00 19163.00C99190.33 19173.67 99168.67 19184.33 99147.00 19195.00C99147.00 19184.33 99147.00 19173.67 99147.00 19163.00C99136.33 19152.33 99125.67 19141.67 99115.00 19131.00C99125.67 19120.33 99136.33 19109.67 99147.00 19099.00C99136.33 19088.00 99125.67 19077.00 99115.00 19066.00C99125.67 19066.00 99136.33 19066.00 99147.00 19066.00C99136.33 19055.33 99125.67 19044.67 99115.00 19034.00C99104.33 19044.67 99093.67 19055.33 99083.00 19066.00C99061.67 19055.33 99040.33 19044.67 99019.00 19034.00C99040.33 19012.67 99061.67 18991.33 99083.00 18970.00C99061.67 18980.67 99040.33 18991.33 99019.00 19002.00C99019.00 18991.33 99019.00 18980.67 99019.00 18970.00C99008.33 18970.00 98997.67 18970.00 98987.00 18970.00C98976.00 18959.33 98965.00 18948.67 98954.00 18938.00C98943.33 18938.00 98932.67 18938.00 98922.00 18938.00C98932.67 18927.33 98943.33 18916.67 98954.00 18906.00C98922.00 18906.00 98890.00 18906.00 98858.00 18906.00C98858.00 18895.33 98858.00 18884.67 98858.00 18874.00C98847.33 18884.67 98836.67 18895.33 98826.00 18906.00C98804.67 18906.00 98783.33 18906.00 98762.00 18906.00C98762.00 18895.33 98762.00 18884.67 98762.00 18874.00C98751.00 18874.00 98740.00 18874.00 98729.00 18874.00C98729.00 18863.00 98729.00 18852.00 98729.00 18841.00C98686.33 18819.67 98643.67 18798.33 98601.00 18777.00C98590.33 18809.33 98579.67 18841.67 98569.00 18874.00C98547.33 18852.33 98525.67 18830.67 98504.00 18809.00C98472.00 18809.00 98440.00 18809.00 98408.00 18809.00C98386.67 18819.67 98365.33 18830.33 98344.00 18841.00C98301.00 18830.33 98258.00 18819.67 98215.00 18809.00C98204.33 18809.00 98193.67 18809.00 98183.00 18809.00C98183.00 18819.67 98183.00 18830.33 98183.00 18841.00C98161.67 18830.33 98140.33 18819.67 98119.00 18809.00C98119.00 18819.67 98119.00 18830.33 98119.00 18841.00C98097.33 18852.00 98075.67 18863.00 98054.00 18874.00C98043.33 18863.00 98032.67 18852.00 98022.00 18841.00C98011.33 18841.00 98000.67 18841.00 97990.00 18841.00C97968.67 18830.33 97947.33 18819.67 97926.00 18809.00C97909.40 18792.86 97892.65 18776.87 97876.39 18760.39C97871.26 18755.26 97866.13 18750.13 97861.00 18745.00C97807.33 18734.33 97753.67 18723.67 97700.00 18713.00C97700.00 18702.33 97700.00 18691.67 97700.00 18681.00C97678.67 18691.67 97657.33 18702.33 97636.00 18713.00C97604.00 18702.33 97572.00 18691.67 97540.00 18681.00C97529.33 18691.67 97518.67 18702.33 97508.00 18713.00C97486.33 18702.33 97464.67 18691.67 97443.00 18681.00C97411.00 18702.33 97379.00 18723.67 97347.00 18745.00C97336.26 18745.06 97325.48 18744.89 97314.75 18745.08C97282.50 18755.72 97250.25 18766.36 97218.00 18777.00C97207.33 18766.33 97196.67 18755.67 97186.00 18745.00C97164.67 18745.00 97143.33 18745.00 97122.00 18745.00C97111.33 18734.33 97100.67 18723.67 97090.00 18713.00C97090.00 18723.67 97090.00 18734.33 97090.00 18745.00C97057.67 18745.00 97025.33 18745.00 96993.00 18745.00C96950.00 18734.33 96907.00 18723.67 96864.00 18713.00C96864.00 18702.33 96864.00 18691.67 96864.00 18681.00C96853.33 18670.00 96842.67 18659.00 96832.00 18648.00C96832.00 18637.33 96832.00 18626.67 96832.00 18616.00C96842.67 18605.33 96853.33 18594.67 96864.00 18584.00C96853.33 18562.67 96842.67 18541.33 96832.00 18520.00C96864.33 18498.33 96896.67 18476.67 96929.00 18455.00C96918.33 18455.00 96907.67 18455.00 96897.00 18455.00C96897.00 18444.33 96897.00 18433.67 96897.00 18423.00C96880.40 18406.86 96863.65 18390.87 96847.39 18374.39C96842.26 18369.26 96837.13 18364.13 96832.00 18359.00C96832.00 18316.00 96832.00 18273.00 96832.00 18230.00C96821.33 18208.67 96810.67 18187.33 96800.00 18166.00C96800.00 18144.67 96800.00 18123.33 96800.00 18102.00C96789.33 18091.33 96778.67 18080.67 96768.00 18070.00C96757.33 18016.33 96746.67 17962.67 96736.00 17909.00C96746.67 17909.00 96757.33 17909.00 96768.00 17909.00C96778.67 17887.67 96789.33 17866.33 96800.00 17845.00C96800.00 17834.00 96800.00 17823.00 96800.00 17812.00C96810.67 17812.00 96821.33 17812.00 96832.00 17812.00C96832.00 17790.67 96832.00 17769.33 96832.00 17748.00C96821.33 17737.33 96810.67 17726.67 96800.00 17716.00C96778.67 17716.00 96757.33 17716.00 96736.00 17716.00C96746.67 17694.67 96757.33 17673.33 96768.00 17652.00C96746.67 17641.00 96725.33 17630.00 96704.00 17619.00C96687.72 17602.75 96671.57 17586.36 96654.95 17570.46C96649.62 17565.21 96644.10 17560.10 96638.88 17554.77C96617.59 17512.18 96596.29 17469.59 96575.00 17427.00C96575.00 17405.33 96575.00 17383.67 96575.00 17362.00C96564.33 17351.33 96553.67 17340.67 96543.00 17330.00C96543.00 17308.67 96543.00 17287.33 96543.00 17266.00C96553.67 17266.00 96564.33 17266.00 96575.00 17266.00C96564.33 17223.00 96553.67 17180.00 96543.00 17137.00C96564.33 17126.33 96585.67 17115.67 96607.00 17105.00C96596.33 17083.67 96585.67 17062.33 96575.00 17041.00C96585.67 17019.33 96596.33 16997.67 96607.00 16976.00C96596.33 16965.33 96585.67 16954.67 96575.00 16944.00C96585.67 16944.00 96596.33 16944.00 96607.00 16944.00C96607.00 16922.67 96607.00 16901.33 96607.00 16880.00C96628.67 16869.33 96650.33 16858.67 96672.00 16848.00C96682.67 16837.33 96693.33 16826.67 96704.00 16816.00C96704.00 16805.00 96704.00 16794.00 96704.00 16783.00C96725.33 16772.33 96746.67 16761.67 96768.00 16751.00C96768.00 16740.33 96768.00 16729.67 96768.00 16719.00C96778.67 16708.33 96789.33 16697.67 96800.00 16687.00C96800.00 16665.67 96800.00 16644.33 96800.00 16623.00C96789.33 16623.00 96778.67 16623.00 96768.00 16623.00C96757.33 16601.33 96746.67 16579.67 96736.00 16558.00C96696.30 16518.15 96656.17 16478.74 96616.23 16439.13C96613.16 16435.99 96609.81 16433.01 96606.92 16429.75C96596.28 16397.50 96585.64 16365.25 96575.00 16333.00C96575.00 16301.00 96575.00 16269.00 96575.00 16237.00C96585.67 16226.33 96596.33 16215.67 96607.00 16205.00C96596.33 16194.33 96585.67 16183.67 96575.00 16173.00C96585.67 16151.33 96596.33 16129.67 96607.00 16108.00C96617.67 16108.00 96628.33 16108.00 96639.00 16108.00C96628.28 16075.93 96617.65 16043.82 96606.88 16011.77C96596.26 15990.18 96585.63 15968.59 96575.00 15947.00C96489.27 15850.61 96403.57 15754.19 96317.82 15657.82C96296.54 15636.54 96275.27 15615.27 96254.00 15594.00C96254.00 15572.67 96254.00 15551.33 96254.00 15530.00C96264.67 15519.00 96275.33 15508.00 96286.00 15497.00z"},"br-27":{"name":"Tocantins","path":"M115835.00 83244.00C115856.33 83201.33 115877.67 83158.67 115899.00 83116.00C115899.00 83073.00 115899.00 83030.00 115899.00 82987.00C115920.69 82944.22 115942.50 82901.50 115964.11 82858.68C115974.74 82826.45 115985.37 82794.23 115996.00 82762.00C115996.00 82740.67 115996.00 82719.33 115996.00 82698.00C116006.67 82676.34 116017.33 82654.66 116028.00 82633.00C116060.00 82601.00 116092.00 82569.00 116124.00 82537.00C116145.67 82526.33 116167.33 82515.67 116189.00 82505.00C116199.85 82440.12 116210.35 82375.18 116221.41 82310.35C116231.94 82267.90 116242.47 82225.45 116253.00 82183.00C116242.33 82151.00 116231.67 82119.00 116221.00 82087.00C116220.95 82065.56 116221.11 82044.12 116220.92 82022.67C116210.28 81979.78 116199.64 81936.89 116189.00 81894.00C116199.67 81862.00 116210.33 81830.00 116221.00 81798.00C116221.00 81776.33 116221.00 81754.67 116221.00 81733.00C116242.33 81722.33 116263.67 81711.67 116285.00 81701.00C116295.67 81669.00 116306.33 81637.00 116317.00 81605.00C116349.33 81583.33 116381.67 81561.67 116414.00 81540.00C116414.00 81529.33 116414.00 81518.67 116414.00 81508.00C116424.67 81486.67 116435.33 81465.33 116446.00 81444.00C116446.00 81401.00 116446.00 81358.00 116446.00 81315.00C116435.33 81293.67 116424.67 81272.33 116414.00 81251.00C116414.00 81208.00 116414.00 81165.00 116414.00 81122.00C116403.33 81090.00 116392.67 81058.00 116382.00 81026.00C116392.67 81004.67 116403.33 80983.33 116414.00 80962.00C116392.33 80908.33 116370.67 80854.67 116349.00 80801.00C116370.76 80768.60 116392.38 80736.10 116414.24 80703.76C116446.16 80671.84 116478.08 80639.92 116510.00 80608.00C116510.00 80586.33 116510.00 80564.67 116510.00 80543.00C116499.33 80521.67 116488.67 80500.33 116478.00 80479.00C116456.67 80468.33 116435.33 80457.67 116414.00 80447.00C116414.00 80393.33 116414.00 80339.67 116414.00 80286.00C116424.67 80264.67 116435.33 80243.33 116446.00 80222.00C116446.00 80211.33 116446.00 80200.67 116446.00 80190.00C116456.67 80179.34 116467.33 80168.66 116478.00 80158.00C116499.33 80158.00 116520.67 80158.00 116542.00 80158.00C116542.00 80125.67 116542.00 80093.33 116542.00 80061.00C116574.33 80007.33 116606.67 79953.67 116639.00 79900.00C116628.33 79868.00 116617.67 79836.00 116607.00 79804.00C116607.00 79782.67 116607.00 79761.33 116607.00 79740.00C116596.00 79718.33 116585.00 79696.67 116574.00 79675.00C116574.00 79643.00 116574.00 79611.00 116574.00 79579.00C116542.00 79557.67 116510.00 79536.33 116478.00 79515.00C116478.00 79493.33 116478.00 79471.67 116478.00 79450.00C116510.00 79418.00 116542.00 79386.00 116574.00 79354.00C116595.70 79321.56 116617.51 79289.18 116639.15 79256.70C116649.77 79235.47 116660.38 79214.23 116671.00 79193.00C116703.00 79193.00 116735.00 79193.00 116767.00 79193.00C116778.00 79182.33 116789.00 79171.67 116800.00 79161.00C116810.67 79128.67 116821.33 79096.33 116832.00 79064.00C116853.33 79032.00 116874.67 79000.00 116896.00 78968.00C116885.33 78935.67 116874.67 78903.33 116864.00 78871.00C116874.67 78839.00 116885.33 78807.00 116896.00 78775.00C116896.00 78743.00 116896.00 78711.00 116896.00 78679.00C116928.00 78668.00 116960.00 78657.00 116992.00 78646.00C117003.00 78646.00 117014.00 78646.00 117025.00 78646.00C117035.67 78635.34 117046.33 78624.66 117057.00 78614.00C117046.33 78582.00 117035.67 78550.00 117025.00 78518.00C117046.33 78410.67 117067.67 78303.33 117089.00 78196.00C117131.67 78174.67 117174.33 78153.33 117217.00 78132.00C117228.00 78110.67 117239.00 78089.33 117250.00 78068.00C117282.07 78046.24 117314.23 78024.61 117346.24 78002.76C117356.83 77992.17 117367.41 77981.59 117378.00 77971.00C117367.33 77939.00 117356.67 77907.00 117346.00 77875.00C117346.00 77864.33 117346.00 77853.67 117346.00 77843.00C117378.33 77768.00 117410.67 77693.00 117443.00 77618.00C117453.67 77564.33 117464.33 77510.67 117475.00 77457.00C117496.33 77403.33 117517.67 77349.67 117539.00 77296.00C117528.33 77221.00 117517.67 77146.00 117507.00 77071.00C117496.33 77071.00 117485.67 77071.00 117475.00 77071.00C117475.23 77059.70 117474.52 77048.34 117475.38 77037.09C117485.91 76984.06 117496.46 76931.03 117507.00 76878.00C117528.33 76835.00 117549.67 76792.00 117571.00 76749.00C117592.67 76727.67 117614.33 76706.33 117636.00 76685.00C117646.67 76653.00 117657.33 76621.00 117668.00 76589.00C117689.33 76567.33 117710.67 76545.67 117732.00 76524.00C117775.00 76502.67 117818.00 76481.33 117861.00 76460.00C117882.33 76438.66 117903.67 76417.34 117925.00 76396.00C117935.67 76363.67 117946.33 76331.33 117957.00 76299.00C117957.00 76256.33 117957.00 76213.67 117957.00 76171.00C117978.33 76138.66 117999.67 76106.34 118021.00 76074.00C118021.00 76052.67 118021.00 76031.33 118021.00 76010.00C118042.67 75977.67 118064.33 75945.33 118086.00 75913.00C118086.00 75870.33 118086.00 75827.67 118086.00 75785.00C118118.00 75720.67 118150.00 75656.33 118182.00 75592.00C118214.33 75559.66 118246.67 75527.34 118279.00 75495.00C118279.00 75473.67 118279.00 75452.33 118279.00 75431.00C118289.67 75420.34 118300.33 75409.66 118311.00 75399.00C118332.35 75335.00 118353.71 75271.01 118374.64 75206.87C118377.85 75193.00 118380.21 75178.93 118383.15 75164.99C118391.11 75125.00 118399.05 75085.00 118407.00 75045.00C118471.33 74970.00 118535.67 74895.00 118600.00 74820.00C118600.00 74798.67 118600.00 74777.33 118600.00 74756.00C118610.67 74745.34 118621.33 74734.66 118632.00 74724.00C118632.00 74691.67 118632.00 74659.33 118632.00 74627.00C118653.67 74595.00 118675.33 74563.00 118697.00 74531.00C118697.00 74488.00 118697.00 74445.00 118697.00 74402.00C118718.33 74391.33 118739.67 74380.67 118761.00 74370.00C118782.39 74327.25 118803.82 74284.50 118824.66 74241.48C118825.44 74236.11 118824.78 74230.45 118825.00 74224.97C118825.00 74198.31 118825.00 74171.66 118825.00 74145.00C118835.67 74123.67 118846.33 74102.33 118857.00 74081.00C118878.67 74059.34 118900.33 74037.66 118922.00 74016.00C118911.00 73984.00 118900.00 73952.00 118889.00 73920.00C118867.67 73887.66 118846.33 73855.34 118825.00 73823.00C118825.00 73812.33 118825.00 73801.67 118825.00 73791.00C118835.67 73791.00 118846.33 73791.00 118857.00 73791.00C118857.00 73748.33 118857.00 73705.67 118857.00 73663.00C118878.67 73588.00 118900.33 73513.00 118922.00 73438.00C118964.67 73395.00 119007.33 73352.00 119050.00 73309.00C119060.67 73266.00 119071.33 73223.00 119082.00 73180.00C119082.00 73115.67 119082.00 73051.33 119082.00 72987.00C119093.00 72944.33 119104.00 72901.67 119115.00 72859.00C119115.00 72848.33 119115.00 72837.67 119115.00 72827.00C119157.42 72783.76 119200.05 72740.72 119243.00 72698.00C119275.33 72687.33 119307.67 72676.67 119340.00 72666.00C119350.67 72601.67 119361.33 72537.33 119372.00 72473.00C119414.67 72473.00 119457.33 72473.00 119500.00 72473.00C119543.00 72419.33 119586.00 72365.67 119629.00 72312.00C119682.67 72269.34 119736.33 72226.66 119790.00 72184.00C119790.00 72151.67 119790.00 72119.33 119790.00 72087.00C119800.84 72075.94 119812.16 72065.29 119822.69 72053.97C119865.50 71989.87 119908.40 71925.84 119951.15 71861.70C119972.50 71818.75 119994.25 71775.98 120015.36 71732.93C120025.91 71700.95 120036.45 71668.98 120047.00 71637.00C120047.00 71615.67 120047.00 71594.33 120047.00 71573.00C120057.67 71540.67 120068.33 71508.33 120079.00 71476.00C120164.67 71401.00 120250.33 71326.00 120336.00 71251.00C120347.06 71218.90 120358.02 71186.77 120369.15 71154.70C120390.43 71111.80 120411.72 71068.90 120433.00 71026.00C120454.38 71004.56 120475.89 70983.24 120497.19 70961.72C120518.46 70929.48 120539.73 70897.24 120561.00 70865.00C120582.74 70854.24 120604.58 70843.67 120626.26 70832.78C120701.17 70768.52 120776.09 70704.26 120851.00 70640.00C120915.33 70618.67 120979.67 70597.33 121044.00 70576.00C121086.67 70576.00 121129.33 70576.00 121172.00 70576.00C121204.33 70565.33 121236.67 70554.67 121269.00 70544.00C121279.75 70522.25 121290.36 70500.43 121301.20 70478.73C121333.62 70435.34 121366.36 70392.18 121398.57 70348.65C121442.41 70283.22 121485.94 70217.59 121529.98 70152.30C121604.59 70045.40 121679.45 69938.66 121753.90 69831.65C121774.27 69801.10 121794.64 69770.55 121815.00 69740.00C121826.00 69697.00 121837.00 69654.00 121848.00 69611.00C121869.33 69589.66 121890.67 69568.34 121912.00 69547.00C121922.67 69515.00 121933.33 69483.00 121944.00 69451.00C122008.33 69397.33 122072.67 69343.67 122137.00 69290.00C122158.33 69257.66 122179.67 69225.34 122201.00 69193.00C122201.13 69171.07 122200.74 69149.12 122201.19 69127.21C122211.80 69031.47 122222.40 68935.74 122233.00 68840.00C122244.07 68817.96 122255.54 68796.09 122266.36 68773.93C122276.91 68742.29 122287.45 68710.65 122298.00 68679.00C122340.67 68614.67 122383.33 68550.33 122426.00 68486.00C122437.00 68486.00 122448.00 68486.00 122459.00 68486.00C122501.99 68464.39 122545.18 68443.14 122588.04 68421.30C122620.09 68399.77 122652.24 68378.38 122684.24 68356.76C122705.49 68335.50 122726.75 68314.26 122748.00 68293.00C122769.49 68238.75 122791.24 68184.61 122812.57 68130.30C122823.04 68098.75 122833.68 68067.25 122844.04 68035.67C122855.03 67950.11 122866.01 67864.55 122877.00 67779.00C122935.25 67662.07 122993.25 67545.02 123051.46 67428.08C123057.54 67415.67 123064.11 67403.46 123069.73 67390.85C123080.50 67359.12 123091.37 67327.42 123102.07 67295.67C123112.71 67242.45 123123.36 67189.22 123134.00 67136.00C123123.33 67103.67 123112.67 67071.33 123102.00 67039.00C123112.67 67017.67 123123.33 66996.33 123134.00 66975.00C123134.00 66942.67 123134.00 66910.33 123134.00 66878.00C123144.67 66867.34 123155.33 66856.66 123166.00 66846.00C123166.00 66835.33 123166.00 66824.67 123166.00 66814.00C123187.33 66803.33 123208.67 66792.67 123230.00 66782.00C123240.67 66760.67 123251.33 66739.33 123262.00 66718.00C123262.00 66643.00 123262.00 66568.00 123262.00 66493.00C123251.33 66439.33 123240.67 66385.67 123230.00 66332.00C123251.67 66299.67 123273.33 66267.33 123295.00 66235.00C123295.00 66192.33 123295.00 66149.67 123295.00 66107.00C123305.67 66064.00 123316.33 66021.00 123327.00 65978.00C123316.35 65902.89 123305.57 65827.79 123295.00 65752.66C123295.00 65709.78 123295.00 65666.89 123295.00 65624.00C123305.69 65613.21 123316.59 65602.62 123327.15 65591.70C123337.77 65570.47 123348.38 65549.23 123359.00 65528.00C123359.00 65517.33 123359.00 65506.67 123359.00 65496.00C123348.33 65474.33 123337.67 65452.67 123327.00 65431.00C123305.21 65420.33 123283.51 65409.48 123261.67 65398.92C123219.11 65388.28 123176.56 65377.64 123134.00 65367.00C123101.67 65345.67 123069.33 65324.33 123037.00 65303.00C123005.00 65260.00 122973.00 65217.00 122941.00 65174.00C122908.31 65152.32 122875.41 65130.95 122842.86 65109.08C122789.91 65066.38 122736.95 65023.69 122684.00 64981.00C122641.00 64959.67 122598.00 64938.33 122555.00 64917.00C122533.67 64895.67 122512.33 64874.33 122491.00 64853.00C122479.56 64829.33 122467.42 64805.99 122456.45 64782.09C122424.97 64709.06 122393.48 64636.03 122362.00 64563.00C122362.00 64552.33 122362.00 64541.67 122362.00 64531.00C122330.00 64466.67 122298.00 64402.33 122266.00 64338.00C122266.03 64305.89 122265.94 64273.78 122266.04 64241.67C122276.69 64156.11 122287.35 64070.56 122298.00 63985.00C122319.33 63974.00 122340.67 63963.00 122362.00 63952.00C122383.33 63909.33 122404.67 63866.67 122426.00 63824.00C122469.09 63770.26 122512.10 63716.46 122555.24 63662.76C122640.83 63577.18 122726.41 63491.58 122812.00 63406.00C122812.00 63395.33 122812.00 63384.67 122812.00 63374.00C122834.35 63340.84 122856.34 63307.44 122878.92 63274.44C122938.90 63194.58 122998.76 63114.63 123058.27 63034.42C123062.26 63027.92 123069.07 63022.78 123070.29 63014.96C123080.86 62973.64 123091.43 62932.32 123102.00 62891.00C123134.00 62837.67 123166.00 62784.33 123198.00 62731.00C123208.67 62698.67 123219.33 62666.33 123230.00 62634.00C123219.34 62591.22 123208.55 62548.47 123197.96 62505.67C123187.32 62409.00 123176.58 62312.34 123166.00 62215.66C123166.00 62044.44 123166.00 61873.22 123166.00 61702.00C123144.67 61627.00 123123.33 61552.00 123102.00 61477.00C123091.00 61466.00 123080.00 61455.00 123069.00 61444.00C123069.00 61390.67 123069.00 61337.33 123069.00 61284.00C123080.00 61262.33 123091.00 61240.67 123102.00 61219.00C123134.00 61187.00 123166.00 61155.00 123198.00 61123.00C123208.67 61101.67 123219.33 61080.33 123230.00 61059.00C123241.01 61058.77 123252.14 61059.47 123263.08 61058.63C123295.38 61047.54 123327.84 61036.82 123360.05 61025.48C123424.03 60993.65 123488.02 60961.83 123552.00 60930.00C123594.67 60887.00 123637.33 60844.00 123680.00 60801.00C123744.33 60758.33 123808.67 60715.67 123873.00 60673.00C123894.71 60651.22 123916.55 60629.57 123938.19 60607.72C123959.46 60575.82 123980.73 60543.91 124002.00 60512.00C124077.00 60512.00 124152.00 60512.00 124227.00 60512.00C124275.79 60487.61 124324.89 60463.82 124373.46 60439.00C124410.21 60419.90 124447.15 60401.19 124484.33 60382.94C124548.55 60372.30 124612.78 60361.65 124677.00 60351.00C124773.33 60351.00 124869.67 60351.00 124966.00 60351.00C125019.67 60329.67 125073.33 60308.33 125127.00 60287.00C125137.67 60287.00 125148.33 60287.00 125159.00 60287.00C125180.67 60265.67 125202.33 60244.33 125224.00 60223.00C125256.00 60169.33 125288.00 60115.67 125320.00 60062.00C125405.67 60040.67 125491.33 60019.33 125577.00 59998.00C125609.33 59976.33 125641.67 59954.67 125674.00 59933.00C125695.33 59890.33 125716.67 59847.67 125738.00 59805.00C125738.00 59762.00 125738.00 59719.00 125738.00 59676.00C125716.67 59611.67 125695.33 59547.33 125674.00 59483.00C125674.00 59461.67 125674.00 59440.33 125674.00 59419.00C125684.67 59386.67 125695.33 59354.33 125706.00 59322.00C125727.33 59300.67 125748.67 59279.33 125770.00 59258.00C125770.00 59226.00 125770.00 59194.00 125770.00 59162.00C125791.76 59129.60 125813.38 59097.10 125835.24 59064.76C125845.85 59054.05 125856.67 59043.54 125867.15 59032.70C125888.43 58989.80 125909.72 58946.90 125931.00 58904.00C126006.00 58839.67 126081.00 58775.33 126156.00 58711.00C126177.33 58700.33 126198.67 58689.67 126220.00 58679.00C126252.33 58647.00 126284.67 58615.00 126317.00 58583.00C126328.02 58560.93 126338.56 58538.60 126349.87 58516.69C126371.01 58485.06 126392.01 58453.33 126413.24 58421.76C126423.83 58411.18 126434.41 58400.58 126445.00 58390.00C126531.00 58390.00 126617.00 58390.00 126703.00 58390.00C126735.00 58400.67 126767.00 58411.33 126799.00 58422.00C126842.11 58454.04 126885.13 58486.19 126928.30 58518.15C126949.53 58529.10 126970.77 58540.05 126992.00 58551.00C127002.67 58540.00 127013.33 58529.00 127024.00 58518.00C127034.67 58475.33 127045.33 58432.67 127056.00 58390.00C127045.33 58357.67 127034.67 58325.33 127024.00 58293.00C127013.21 58282.31 127002.62 58271.42 126991.70 58260.85C126949.13 58239.57 126906.57 58218.28 126864.00 58197.00C126853.00 58175.67 126842.00 58154.33 126831.00 58133.00C126831.00 58122.33 126831.00 58111.67 126831.00 58101.00C126842.00 58090.00 126853.00 58079.00 126864.00 58068.00C126853.00 58046.67 126842.00 58025.33 126831.00 58004.00C126820.17 57949.99 126809.70 57895.89 126798.64 57841.93C126788.09 57810.29 126777.55 57778.64 126767.00 57747.00C126767.00 57682.67 126767.00 57618.33 126767.00 57554.00C126810.00 57511.00 126853.00 57468.00 126896.00 57425.00C126917.33 57414.33 126938.67 57403.67 126960.00 57393.00C127003.00 57403.67 127046.00 57414.33 127089.00 57425.00C127142.33 57403.67 127195.67 57382.33 127249.00 57361.00C127292.21 57328.71 127335.69 57296.75 127378.74 57264.25C127399.82 57242.83 127420.91 57221.42 127442.00 57200.00C127452.67 57168.00 127463.33 57136.00 127474.00 57104.00C127474.00 57082.33 127474.00 57060.67 127474.00 57039.00C127442.00 56996.33 127410.00 56953.67 127378.00 56911.00C127335.00 56900.33 127292.00 56889.67 127249.00 56879.00C127238.33 56868.33 127227.67 56857.67 127217.00 56847.00C127217.00 56825.33 127217.00 56803.67 127217.00 56782.00C127228.02 56760.26 127238.58 56738.27 127249.88 56716.69C127271.35 56684.72 127292.68 56652.67 127314.24 56620.76C127335.49 56599.50 127356.75 56578.26 127378.00 56557.00C127399.33 56546.33 127420.67 56535.67 127442.00 56525.00C127506.33 56514.33 127570.67 56503.67 127635.00 56493.00C127667.33 56471.67 127699.67 56450.33 127732.00 56429.00C127732.00 56386.00 127732.00 56343.00 127732.00 56300.00C127710.33 56267.67 127688.67 56235.33 127667.00 56203.00C127667.00 56192.33 127667.00 56181.67 127667.00 56171.00C127624.33 56128.33 127581.67 56085.67 127539.00 56043.00C127517.24 56010.60 127495.62 55978.10 127473.76 55945.76C127463.17 55935.18 127452.59 55924.58 127442.00 55914.00C127441.68 55901.84 127442.71 55889.60 127441.36 55877.50C127430.92 55803.89 127420.36 55730.29 127410.00 55656.66C127410.00 55603.11 127410.00 55549.56 127410.00 55496.00C127431.54 55453.10 127452.87 55410.10 127474.00 55367.00C127495.67 55356.33 127517.33 55345.67 127539.00 55335.00C127614.00 55345.67 127689.00 55356.33 127764.00 55367.00C127796.00 55356.33 127828.00 55345.67 127860.00 55335.00C127870.67 55335.00 127881.33 55335.00 127892.00 55335.00C127903.12 55324.31 127914.06 55313.42 127925.30 55302.85C127946.53 55292.23 127967.77 55281.62 127989.00 55271.00C128010.47 55238.61 128032.28 55206.43 128053.54 55173.92C128089.71 55101.71 128126.31 55029.71 128162.14 54957.33C128168.76 54943.89 128175.38 54930.44 128182.00 54917.00C128182.00 54863.67 128182.00 54810.33 128182.00 54757.00C128117.56 54713.96 128053.18 54670.83 127988.70 54627.85C127967.47 54617.23 127946.23 54606.62 127925.00 54596.00C127903.77 54575.62 127882.78 54554.99 127862.31 54533.84C127850.87 54522.23 127839.44 54510.61 127828.00 54499.00C127795.89 54498.96 127763.78 54499.09 127731.67 54498.93C127678.11 54488.29 127624.56 54477.64 127571.00 54467.00C127528.47 54445.60 127485.76 54424.54 127443.08 54403.46C127438.22 54399.96 127434.46 54395.07 127430.02 54391.03C127422.96 54383.85 127415.57 54376.94 127408.85 54369.46C127376.94 54326.76 127345.37 54283.78 127313.25 54241.27C127302.50 54230.85 127291.75 54220.42 127281.00 54210.00C127281.00 54220.67 127281.00 54231.33 127281.00 54242.00C127281.00 54220.67 127281.00 54199.33 127281.00 54178.00C127259.63 54145.56 127238.16 54113.18 127216.85 54080.70C127206.23 54059.47 127195.62 54038.23 127185.00 54017.00C127185.00 53985.00 127185.00 53953.00 127185.00 53921.00C127153.06 53888.61 127121.28 53856.06 127089.00 53824.00C127078.00 53802.67 127067.00 53781.33 127056.00 53760.00C127034.67 53749.33 127013.33 53738.67 126992.00 53728.00C126981.33 53728.00 126970.67 53728.00 126960.00 53728.00C126949.33 53749.33 126938.67 53770.67 126928.00 53792.00C126895.67 53781.33 126863.33 53770.67 126831.00 53760.00C126799.00 53770.67 126767.00 53781.33 126735.00 53792.00C126724.33 53792.00 126713.67 53792.00 126703.00 53792.00C126692.33 53802.67 126681.67 53813.33 126671.00 53824.00C126649.33 53824.00 126627.67 53824.00 126606.00 53824.00C126595.33 53834.67 126584.67 53845.33 126574.00 53856.00C126542.00 53866.67 126510.00 53877.33 126478.00 53888.00C126455.82 53887.86 126433.62 53888.29 126411.45 53887.78C126336.85 53877.20 126262.27 53866.50 126187.66 53856.00C126112.77 53856.00 126037.89 53856.00 125963.00 53856.00C125920.33 53845.33 125877.67 53834.67 125835.00 53824.00C125813.33 53781.00 125791.67 53738.00 125770.00 53695.00C125758.90 53694.79 125747.72 53695.43 125736.67 53694.67C125694.45 53684.11 125652.22 53673.56 125610.00 53663.00C125545.67 53663.00 125481.33 53663.00 125417.00 53663.00C125417.00 53652.33 125417.00 53641.67 125417.00 53631.00C125395.33 53631.00 125373.67 53631.00 125352.00 53631.00C125330.67 53620.33 125309.33 53609.67 125288.00 53599.00C125277.33 53588.33 125266.67 53577.67 125256.00 53567.00C125256.00 53545.67 125256.00 53524.33 125256.00 53503.00C125277.33 53513.67 125298.67 53524.33 125320.00 53535.00C125330.67 53524.33 125341.33 53513.67 125352.00 53503.00C125384.33 53513.67 125416.67 53524.33 125449.00 53535.00C125459.67 53524.33 125470.33 53513.67 125481.00 53503.00C125491.67 53460.00 125502.33 53417.00 125513.00 53374.00C125523.79 53363.31 125534.38 53352.42 125545.30 53341.85C125566.87 53331.24 125588.43 53320.62 125610.00 53310.00C125652.67 53320.67 125695.33 53331.33 125738.00 53342.00C125759.33 53352.67 125780.67 53363.33 125802.00 53374.00C125813.00 53395.33 125824.00 53416.67 125835.00 53438.00C125867.00 53448.67 125899.00 53459.33 125931.00 53470.00C125973.76 53427.09 126016.99 53384.66 126060.00 53342.00C126081.33 53288.33 126102.67 53234.67 126124.00 53181.00C126124.00 53149.00 126124.00 53117.00 126124.00 53085.00C126134.67 53052.67 126145.33 53020.33 126156.00 52988.00C126156.00 52966.67 126156.00 52945.33 126156.00 52924.00C126188.33 52881.00 126220.67 52838.00 126253.00 52795.00C126285.00 52773.67 126317.00 52752.33 126349.00 52731.00C126402.67 52741.67 126456.33 52752.33 126510.00 52763.00C126542.00 52741.67 126574.00 52720.33 126606.00 52699.00C126767.00 52677.33 126928.00 52655.67 127089.00 52634.00C127110.59 52645.30 127132.49 52656.10 127153.89 52667.71C127207.26 52710.14 127260.63 52752.57 127314.00 52795.00C127356.67 52795.00 127399.33 52795.00 127442.00 52795.00C127474.44 52816.37 127506.83 52837.83 127539.30 52859.15C127600.67 52890.20 127661.77 52921.80 127723.62 52951.88C127729.19 52955.64 127735.39 52956.69 127742.00 52956.00C127749.33 52956.00 127756.67 52956.00 127764.00 52956.00C127785.33 52977.33 127806.67 52998.67 127828.00 53020.00C127860.43 53030.73 127892.90 53041.34 127925.30 53052.15C127946.53 53063.10 127967.77 53074.05 127989.00 53085.00C128096.00 53095.67 128203.00 53106.33 128310.00 53117.00C128353.00 53127.67 128396.00 53138.33 128439.00 53149.00C128492.67 53138.33 128546.33 53127.67 128600.00 53117.00C128653.67 53063.33 128707.33 53009.67 128761.00 52956.00C128793.11 52956.04 128825.22 52955.91 128857.33 52956.07C128910.89 52966.71 128964.44 52977.36 129018.00 52988.00C129060.67 52988.00 129103.33 52988.00 129146.00 52988.00C129221.33 53020.33 129296.67 53052.67 129372.00 53085.00C129382.74 53106.71 129393.86 53128.25 129404.36 53150.07C129414.91 53181.71 129425.45 53213.36 129436.00 53245.00C129436.00 53320.00 129436.00 53395.00 129436.00 53470.00C129478.76 53523.74 129521.43 53577.54 129564.24 53631.24C129585.83 53652.49 129607.41 53673.75 129629.00 53695.00C129682.33 53695.00 129735.67 53695.00 129789.00 53695.00C129832.00 53684.33 129875.00 53673.67 129918.00 53663.00C129961.00 53663.00 130004.00 53663.00 130047.00 53663.00C130132.67 53716.67 130218.33 53770.33 130304.00 53824.00C130336.00 53834.67 130368.00 53845.33 130400.00 53856.00C130475.00 53920.33 130550.00 53984.67 130625.00 54049.00C130689.33 54070.67 130753.67 54092.33 130818.00 54114.00C130839.67 54103.00 130861.33 54092.00 130883.00 54081.00C130893.67 54081.00 130904.33 54081.00 130915.00 54081.00C131011.33 54177.67 131107.67 54274.33 131204.00 54371.00C131225.67 54435.33 131247.33 54499.67 131269.00 54564.00C131269.00 54617.33 131269.00 54670.67 131269.00 54724.00C131279.67 54767.00 131290.33 54810.00 131301.00 54853.00C131301.00 54917.33 131301.00 54981.67 131301.00 55046.00C131279.03 55121.80 131257.32 55197.69 131235.18 55273.44C131224.78 55304.63 131214.40 55335.81 131204.00 55367.00C131225.67 55410.00 131247.33 55453.00 131269.00 55496.00C131290.33 55517.33 131311.67 55538.67 131333.00 55560.00C131375.67 55656.67 131418.33 55753.33 131461.00 55850.00C131472.00 55903.67 131483.00 55957.33 131494.00 56011.00C131504.67 56021.67 131515.33 56032.33 131526.00 56043.00C131526.00 56150.00 131526.00 56257.00 131526.00 56364.00C131493.67 56460.67 131461.33 56557.33 131429.00 56654.00C131450.67 56686.00 131472.33 56718.00 131494.00 56750.00C131504.67 56793.00 131515.33 56836.00 131526.00 56879.00C131526.00 56921.67 131526.00 56964.33 131526.00 57007.00C131515.33 57050.00 131504.67 57093.00 131494.00 57136.00C131505.22 57181.75 131516.94 57227.39 131527.82 57273.22C131548.55 57366.81 131569.27 57460.41 131590.00 57554.00C131611.33 57607.67 131632.67 57661.33 131654.00 57715.00C131675.67 57747.00 131697.33 57779.00 131719.00 57811.00C131729.67 57843.33 131740.33 57875.67 131751.00 57908.00C131751.00 57961.33 131751.00 58014.67 131751.00 58068.00C131708.00 58154.00 131665.00 58240.00 131622.00 58326.00C131621.77 58337.30 131622.48 58348.66 131621.62 58359.91C131610.78 58413.59 131600.32 58467.35 131589.26 58520.99C131568.16 58605.99 131547.08 58691.00 131526.00 58776.00C131515.33 58786.67 131504.67 58797.33 131494.00 58808.00C131526.00 58893.67 131558.00 58979.33 131590.00 59065.00C131579.33 59086.33 131568.67 59107.67 131558.00 59129.00C131547.33 59129.00 131536.67 59129.00 131526.00 59129.00C131483.00 59193.33 131440.00 59257.67 131397.00 59322.00C131397.00 59343.67 131397.00 59365.33 131397.00 59387.00C131386.33 59397.67 131375.67 59408.33 131365.00 59419.00C131365.00 59504.67 131365.00 59590.33 131365.00 59676.00C131343.53 59708.38 131321.73 59740.55 131300.47 59773.05C131268.32 59837.04 131236.15 59901.02 131204.00 59965.00C131214.67 59997.33 131225.33 60029.67 131236.00 60062.00C131225.33 60072.67 131214.67 60083.33 131204.00 60094.00C131204.00 60190.33 131204.00 60286.67 131204.00 60383.00C131172.00 60436.67 131140.00 60490.33 131108.00 60544.00C131086.33 60608.33 131064.67 60672.67 131043.00 60737.00C131043.00 60747.67 131043.00 60758.33 131043.00 60769.00C131054.00 60769.00 131065.00 60769.00 131076.00 60769.00C131076.24 60779.96 131075.51 60791.06 131076.37 60801.94C131097.70 60855.77 131119.26 60909.51 131140.46 60963.39C131150.98 60995.26 131161.48 61027.13 131172.00 61059.00C131129.19 61144.76 131086.01 61230.34 131043.00 61316.00C131043.00 61358.67 131043.00 61401.33 131043.00 61444.00C131032.26 61466.04 131021.15 61487.93 131010.64 61510.07C131000.09 61541.71 130989.55 61573.36 130979.00 61605.00C130979.00 61615.67 130979.00 61626.33 130979.00 61637.00C130968.33 61658.67 130957.67 61680.33 130947.00 61702.00C130904.00 61744.67 130861.00 61787.33 130818.00 61830.00C130796.67 61840.67 130775.33 61851.33 130754.00 61862.00C130711.00 61915.67 130668.00 61969.33 130625.00 62023.00C130614.33 62066.00 130603.67 62109.00 130593.00 62152.00C130561.00 62194.67 130529.00 62237.33 130497.00 62280.00C130475.67 62291.00 130454.33 62302.00 130433.00 62313.00C130410.96 62301.93 130389.09 62290.46 130366.93 62279.64C130335.29 62269.09 130303.64 62258.55 130272.00 62248.00C130250.33 62248.00 130228.67 62248.00 130207.00 62248.00C130195.98 62258.79 130185.38 62270.08 130174.09 62280.55C130121.06 62312.70 130068.03 62344.85 130015.00 62377.00C130015.00 62441.33 130015.00 62505.67 130015.00 62570.00C130036.33 62591.33 130057.67 62612.67 130079.00 62634.00C130143.33 62666.33 130207.67 62698.67 130272.00 62731.00C130304.00 62763.00 130336.00 62795.00 130368.00 62827.00C130400.33 62902.00 130432.67 62977.00 130465.00 63052.00C130507.67 63052.00 130550.33 63052.00 130593.00 63052.00C130625.33 62998.33 130657.67 62944.67 130690.00 62891.00C130711.33 62880.33 130732.67 62869.67 130754.00 62859.00C130829.00 62859.00 130904.00 62859.00 130979.00 62859.00C130990.06 62869.84 131000.71 62881.15 131012.03 62891.69C131076.02 62934.46 131140.01 62977.23 131204.00 63020.00C131236.38 63084.31 131268.89 63148.56 131301.00 63213.00C131290.33 63266.67 131279.67 63320.33 131269.00 63374.00C131226.00 63395.33 131183.00 63416.67 131140.00 63438.00C131140.00 63448.67 131140.00 63459.33 131140.00 63470.00C131054.24 63502.39 130968.44 63534.71 130882.70 63567.15C130861.13 63577.76 130839.57 63588.38 130818.00 63599.00C130796.67 63641.67 130775.33 63684.33 130754.00 63727.00C130797.00 63737.67 130840.00 63748.33 130883.00 63759.00C130904.71 63748.26 130926.25 63737.14 130948.07 63726.64C130979.71 63716.09 131011.36 63705.55 131043.00 63695.00C131086.00 63695.00 131129.00 63695.00 131172.00 63695.00C131172.04 63716.44 131171.91 63737.89 131172.07 63759.33C131182.72 63812.89 131193.36 63866.44 131204.00 63920.00C131225.67 63941.67 131247.33 63963.33 131269.00 63985.00C131269.00 64038.33 131269.00 64091.67 131269.00 64145.00C131279.67 64155.67 131290.33 64166.33 131301.00 64177.00C131311.67 64177.00 131322.33 64177.00 131333.00 64177.00C131343.67 64155.67 131354.33 64134.33 131365.00 64113.00C131408.00 64113.00 131451.00 64113.00 131494.00 64113.00C131515.33 64134.33 131536.67 64155.67 131558.00 64177.00C131558.00 64188.00 131558.00 64199.00 131558.00 64210.00C131536.67 64231.33 131515.33 64252.67 131494.00 64274.00C131494.00 64284.67 131494.00 64295.33 131494.00 64306.00C131515.33 64306.00 131536.67 64306.00 131558.00 64306.00C131579.33 64316.67 131600.67 64327.33 131622.00 64338.00C131632.67 64338.00 131643.33 64338.00 131654.00 64338.00C131665.00 64348.67 131676.00 64359.33 131687.00 64370.00C131676.00 64391.67 131665.00 64413.33 131654.00 64435.00C131686.33 64456.33 131718.67 64477.67 131751.00 64499.00C131751.00 64531.00 131751.00 64563.00 131751.00 64595.00C131740.33 64616.67 131729.67 64638.33 131719.00 64660.00C131719.00 64670.67 131719.00 64681.33 131719.00 64692.00C131729.67 64713.33 131740.33 64734.67 131751.00 64756.00C131772.33 64766.67 131793.67 64777.33 131815.00 64788.00C131836.33 64766.67 131857.67 64745.33 131879.00 64724.00C131879.00 64713.33 131879.00 64702.67 131879.00 64692.00C131857.67 64692.00 131836.33 64692.00 131815.00 64692.00C131804.33 64670.67 131793.67 64649.33 131783.00 64628.00C131783.00 64617.00 131783.00 64606.00 131783.00 64595.00C131815.00 64595.00 131847.00 64595.00 131879.00 64595.00C131890.00 64616.67 131901.00 64638.33 131912.00 64660.00C131933.33 64670.67 131954.67 64681.33 131976.00 64692.00C132008.00 64724.00 132040.00 64756.00 132072.00 64788.00C132061.33 64799.00 132050.67 64810.00 132040.00 64821.00C132008.00 64821.00 131976.00 64821.00 131944.00 64821.00C131954.67 64831.67 131965.33 64842.33 131976.00 64853.00C131976.00 64874.33 131976.00 64895.67 131976.00 64917.00C132029.67 64927.67 132083.33 64938.33 132137.00 64949.00C132137.00 64970.33 132137.00 64991.67 132137.00 65013.00C132126.33 65013.00 132115.67 65013.00 132105.00 65013.00C132094.00 65002.33 132083.00 64991.67 132072.00 64981.00C132072.00 64991.67 132072.00 65002.33 132072.00 65013.00C132083.00 65024.00 132094.00 65035.00 132105.00 65046.00C132094.00 65056.67 132083.00 65067.33 132072.00 65078.00C132072.00 65099.33 132072.00 65120.67 132072.00 65142.00C132083.00 65142.00 132094.00 65142.00 132105.00 65142.00C132115.67 65152.67 132126.33 65163.33 132137.00 65174.00C132147.67 65163.33 132158.33 65152.67 132169.00 65142.00C132190.33 65152.67 132211.67 65163.33 132233.00 65174.00C132243.67 65163.33 132254.33 65152.67 132265.00 65142.00C132265.00 65163.33 132265.00 65184.67 132265.00 65206.00C132286.67 65206.00 132308.33 65206.00 132330.00 65206.00C132330.00 65217.00 132330.00 65228.00 132330.00 65239.00C132319.00 65260.33 132308.00 65281.67 132297.00 65303.00C132308.00 65292.33 132319.00 65281.67 132330.00 65271.00C132351.33 65271.00 132372.67 65271.00 132394.00 65271.00C132383.33 65281.67 132372.67 65292.33 132362.00 65303.00C132372.73 65335.10 132383.35 65367.23 132394.15 65399.30C132404.76 65420.87 132415.38 65442.43 132426.00 65464.00C132415.33 65474.67 132404.67 65485.33 132394.00 65496.00C132415.33 65496.00 132436.67 65496.00 132458.00 65496.00C132436.67 65506.67 132415.33 65517.33 132394.00 65528.00C132394.00 65538.67 132394.00 65549.33 132394.00 65560.00C132415.33 65560.00 132436.67 65560.00 132458.00 65560.00C132458.00 65570.67 132458.00 65581.33 132458.00 65592.00C132479.67 65613.66 132501.33 65635.34 132523.00 65657.00C132544.33 65657.00 132565.67 65657.00 132587.00 65657.00C132587.00 65667.67 132587.00 65678.33 132587.00 65689.00C132597.67 65689.00 132608.33 65689.00 132619.00 65689.00C132619.00 65699.67 132619.00 65710.33 132619.00 65721.00C132640.33 65710.33 132661.67 65699.67 132683.00 65689.00C132683.00 65710.33 132683.00 65731.67 132683.00 65753.00C132693.67 65753.00 132704.33 65753.00 132715.00 65753.00C132715.00 65774.33 132715.00 65795.67 132715.00 65817.00C132747.33 65849.34 132779.67 65881.66 132812.00 65914.00C132812.00 65924.67 132812.00 65935.33 132812.00 65946.00C132833.33 65946.00 132854.67 65946.00 132876.00 65946.00C132876.00 65999.67 132876.00 66053.33 132876.00 66107.00C132897.33 66096.33 132918.67 66085.67 132940.00 66075.00C132951.00 66075.00 132962.00 66075.00 132973.00 66075.00C132983.67 66107.00 132994.33 66139.00 133005.00 66171.00C133015.67 66160.34 133026.33 66149.66 133037.00 66139.00C133026.33 66171.00 133015.67 66203.00 133005.00 66235.00C133015.67 66245.66 133026.33 66256.34 133037.00 66267.00C133047.67 66256.34 133058.33 66245.66 133069.00 66235.00C133069.00 66256.67 133069.00 66278.33 133069.00 66300.00C133058.33 66300.00 133047.67 66300.00 133037.00 66300.00C133058.33 66321.34 133079.67 66342.66 133101.00 66364.00C133079.67 66374.67 133058.33 66385.33 133037.00 66396.00C133080.00 66396.00 133123.00 66396.00 133166.00 66396.00C133198.00 66428.33 133230.00 66460.67 133262.00 66493.00C133262.00 66525.00 133262.00 66557.00 133262.00 66589.00C133283.33 66599.67 133304.67 66610.33 133326.00 66621.00C133315.33 66631.66 133304.67 66642.34 133294.00 66653.00C133315.67 66663.67 133337.33 66674.33 133359.00 66685.00C133359.00 66696.00 133359.00 66707.00 133359.00 66718.00C133391.00 66718.00 133423.00 66718.00 133455.00 66718.00C133455.00 66728.67 133455.00 66739.33 133455.00 66750.00C133487.00 66750.00 133519.00 66750.00 133551.00 66750.00C133551.00 66760.67 133551.00 66771.33 133551.00 66782.00C133562.00 66782.00 133573.00 66782.00 133584.00 66782.00C133594.67 66749.67 133605.33 66717.33 133616.00 66685.00C133626.67 66696.00 133637.33 66707.00 133648.00 66718.00C133648.00 66707.00 133648.00 66696.00 133648.00 66685.00C133680.00 66674.33 133712.00 66663.67 133744.00 66653.00C133733.33 66642.34 133722.67 66631.66 133712.00 66621.00C133733.33 66610.33 133754.67 66599.67 133776.00 66589.00C133776.00 66557.00 133776.00 66525.00 133776.00 66493.00C133787.00 66493.00 133798.00 66493.00 133809.00 66493.00C133819.67 66471.34 133830.33 66449.66 133841.00 66428.00C133873.00 66428.00 133905.00 66428.00 133937.00 66428.00C133937.00 66406.67 133937.00 66385.33 133937.00 66364.00C133947.67 66364.00 133958.33 66364.00 133969.00 66364.00C133980.00 66374.67 133991.00 66385.33 134002.00 66396.00C134012.67 66396.00 134023.33 66396.00 134034.00 66396.00C134044.67 66374.67 134055.33 66353.33 134066.00 66332.00C134076.67 66332.00 134087.33 66332.00 134098.00 66332.00C134098.00 66310.33 134098.00 66288.67 134098.00 66267.00C134119.33 66256.33 134140.67 66245.67 134162.00 66235.00C134162.00 66245.67 134162.00 66256.33 134162.00 66267.00C134172.67 66278.00 134183.33 66289.00 134194.00 66300.00C134215.67 66278.34 134237.33 66256.66 134259.00 66235.00C134269.67 66256.66 134280.33 66278.34 134291.00 66300.00C134301.67 66300.00 134312.33 66300.00 134323.00 66300.00C134323.00 66289.00 134323.00 66278.00 134323.00 66267.00C134334.01 66266.77 134345.13 66267.46 134356.08 66266.65C134388.05 66256.10 134420.02 66245.55 134452.00 66235.00C134462.67 66224.34 134473.33 66213.66 134484.00 66203.00C134494.67 66213.66 134505.33 66224.34 134516.00 66235.00C134526.67 66235.00 134537.33 66235.00 134548.00 66235.00C134548.00 66224.33 134548.00 66213.67 134548.00 66203.00C134558.67 66213.66 134569.33 66224.34 134580.00 66235.00C134580.00 66224.33 134580.00 66213.67 134580.00 66203.00C134601.42 66181.41 134623.07 66160.06 134645.00 66139.00C134645.00 66149.67 134645.00 66160.33 134645.00 66171.00C134655.67 66171.00 134666.33 66171.00 134677.00 66171.00C134687.67 66139.00 134698.33 66107.00 134709.00 66075.00C134719.67 66085.66 134730.33 66096.34 134741.00 66107.00C134751.67 66096.34 134762.33 66085.66 134773.00 66075.00C134794.67 66075.00 134816.33 66075.00 134838.00 66075.00C134848.67 66064.00 134859.33 66053.00 134870.00 66042.00C134880.67 66042.00 134891.33 66042.00 134902.00 66042.00C134912.67 66031.34 134923.33 66020.66 134934.00 66010.00C134955.33 66020.67 134976.67 66031.33 134998.00 66042.00C135030.33 66042.00 135062.67 66042.00 135095.00 66042.00C135105.67 66020.67 135116.33 65999.33 135127.00 65978.00C135137.67 65978.00 135148.33 65978.00 135159.00 65978.00C135180.33 65988.67 135201.67 65999.33 135223.00 66010.00C135234.00 66010.00 135245.00 66010.00 135256.00 66010.00C135277.33 65988.66 135298.67 65967.34 135320.00 65946.00C135352.00 65946.00 135384.00 65946.00 135416.00 65946.00C135437.67 65956.67 135459.33 65967.33 135481.00 65978.00C135481.00 65988.67 135481.00 65999.33 135481.00 66010.00C135502.33 66010.00 135523.67 66010.00 135545.00 66010.00C135555.79 66020.69 135566.39 66031.58 135577.30 66042.15C135598.53 66053.10 135619.77 66064.05 135641.00 66075.00C135641.00 66107.00 135641.00 66139.00 135641.00 66171.00C135705.63 66202.64 135769.96 66234.92 135834.27 66267.20C135877.18 66299.46 135920.09 66331.73 135963.00 66364.00C135973.67 66385.33 135984.33 66406.67 135995.00 66428.00C135995.00 66438.67 135995.00 66449.33 135995.00 66460.00C136005.67 66471.00 136016.33 66482.00 136027.00 66493.00C136027.00 66568.00 136027.00 66643.00 136027.00 66718.00C136048.67 66739.33 136070.33 66760.67 136092.00 66782.00C136092.00 66803.33 136092.00 66824.67 136092.00 66846.00C136081.00 66856.67 136070.00 66867.33 136059.00 66878.00C136037.67 66878.00 136016.33 66878.00 135995.00 66878.00C135984.33 66899.66 135973.67 66921.34 135963.00 66943.00C135963.00 66964.33 135963.00 66985.67 135963.00 67007.00C135930.67 67092.67 135898.33 67178.33 135866.00 67264.00C135866.00 67285.67 135866.00 67307.33 135866.00 67329.00C135887.67 67339.67 135909.33 67350.33 135931.00 67361.00C135952.33 67382.34 135973.67 67403.66 135995.00 67425.00C135963.00 67457.00 135931.00 67489.00 135899.00 67521.00C135888.00 67553.33 135877.00 67585.67 135866.00 67618.00C135877.00 67671.67 135888.00 67725.33 135899.00 67779.00C135877.24 67811.07 135855.62 67843.23 135833.76 67875.24C135793.08 67915.77 135752.58 67956.49 135712.39 67997.51C135708.82 68001.03 135705.60 68005.06 135700.64 68006.64C135680.76 68016.42 135660.88 68026.21 135641.00 68036.00C135609.00 68036.00 135577.00 68036.00 135545.00 68036.00C135523.67 68046.67 135502.33 68057.33 135481.00 68068.00C135459.33 68068.00 135437.67 68068.00 135416.00 68068.00C135373.33 68046.67 135330.67 68025.33 135288.00 68004.00C135218.86 68038.23 135149.80 68072.63 135080.73 68107.01C135063.10 68115.56 135045.70 68124.63 135027.87 68132.73C134996.58 68143.49 134965.29 68154.24 134934.00 68165.00C134923.33 68186.33 134912.67 68207.67 134902.00 68229.00C134891.31 68239.79 134880.41 68250.38 134869.85 68261.30C134859.23 68282.53 134848.62 68303.77 134838.00 68325.00C134827.00 68314.33 134816.00 68303.67 134805.00 68293.00C134762.33 68293.00 134719.67 68293.00 134677.00 68293.00C134644.67 68282.33 134612.33 68271.67 134580.00 68261.00C134580.00 68282.33 134580.00 68303.67 134580.00 68325.00C134569.33 68325.00 134558.67 68325.00 134548.00 68325.00C134558.67 68346.66 134569.33 68368.34 134580.00 68390.00C134558.67 68400.67 134537.33 68411.33 134516.00 68422.00C134505.33 68411.34 134494.67 68400.66 134484.00 68390.00C134494.67 68422.00 134505.33 68454.00 134516.00 68486.00C134516.00 68507.33 134516.00 68528.67 134516.00 68550.00C134505.33 68571.66 134494.67 68593.34 134484.00 68615.00C134494.67 68625.66 134505.33 68636.34 134516.00 68647.00C134473.05 68689.71 134430.68 68733.03 134387.00 68775.00C134376.33 68753.67 134365.67 68732.33 134355.00 68711.00C134344.33 68721.66 134333.67 68732.34 134323.00 68743.00C134323.00 68753.67 134323.00 68764.33 134323.00 68775.00C134301.67 68775.00 134280.33 68775.00 134259.00 68775.00C134259.00 68796.67 134259.00 68818.33 134259.00 68840.00C134269.67 68861.33 134280.33 68882.67 134291.00 68904.00C134280.33 68904.00 134269.67 68904.00 134259.00 68904.00C134269.67 68914.66 134280.33 68925.34 134291.00 68936.00C134280.33 68946.66 134269.67 68957.34 134259.00 68968.00C134269.67 68978.66 134280.33 68989.34 134291.00 69000.00C134280.33 69011.00 134269.67 69022.00 134259.00 69033.00C134269.67 69043.66 134280.33 69054.34 134291.00 69065.00C134280.33 69065.00 134269.67 69065.00 134259.00 69065.00C134259.00 69075.67 134259.00 69086.33 134259.00 69097.00C134248.33 69107.66 134237.67 69118.34 134227.00 69129.00C134227.00 69139.67 134227.00 69150.33 134227.00 69161.00C134216.00 69171.67 134205.00 69182.33 134194.00 69193.00C134183.33 69182.34 134172.67 69171.66 134162.00 69161.00C134162.00 69171.67 134162.00 69182.33 134162.00 69193.00C134151.33 69193.00 134140.67 69193.00 134130.00 69193.00C134140.67 69204.00 134151.33 69215.00 134162.00 69226.00C134151.33 69226.00 134140.67 69226.00 134130.00 69226.00C134130.00 69236.67 134130.00 69247.33 134130.00 69258.00C134119.33 69247.34 134108.67 69236.66 134098.00 69226.00C134098.00 69236.67 134098.00 69247.33 134098.00 69258.00C134087.33 69258.00 134076.67 69258.00 134066.00 69258.00C134066.00 69247.33 134066.00 69236.67 134066.00 69226.00C134066.00 69247.33 134066.00 69268.67 134066.00 69290.00C134055.33 69279.34 134044.67 69268.66 134034.00 69258.00C134034.00 69290.00 134034.00 69322.00 134034.00 69354.00C134023.33 69354.00 134012.67 69354.00 134002.00 69354.00C133991.00 69343.33 133980.00 69332.67 133969.00 69322.00C133969.00 69332.67 133969.00 69343.33 133969.00 69354.00C133958.33 69354.00 133947.67 69354.00 133937.00 69354.00C133947.67 69354.00 133958.33 69354.00 133969.00 69354.00C133969.00 69364.67 133969.00 69375.33 133969.00 69386.00C133980.00 69375.33 133991.00 69364.67 134002.00 69354.00C134012.67 69364.66 134023.33 69375.34 134034.00 69386.00C134034.00 69396.67 134034.00 69407.33 134034.00 69418.00C134023.33 69418.00 134012.67 69418.00 134002.00 69418.00C134012.67 69429.00 134023.33 69440.00 134034.00 69451.00C134023.33 69451.00 134012.67 69451.00 134002.00 69451.00C134002.00 69461.67 134002.00 69472.33 134002.00 69483.00C133991.00 69483.00 133980.00 69483.00 133969.00 69483.00C133969.00 69493.67 133969.00 69504.33 133969.00 69515.00C133958.33 69525.66 133947.67 69536.34 133937.00 69547.00C133947.67 69557.66 133958.33 69568.34 133969.00 69579.00C133958.33 69589.66 133947.67 69600.34 133937.00 69611.00C133958.67 69621.67 133980.33 69632.33 134002.00 69643.00C134012.67 69643.00 134023.33 69643.00 134034.00 69643.00C134023.33 69654.00 134012.67 69665.00 134002.00 69676.00C134023.33 69676.00 134044.67 69676.00 134066.00 69676.00C134055.33 69686.66 134044.67 69697.34 134034.00 69708.00C134044.69 69718.79 134055.59 69729.38 134066.15 69740.30C134076.77 69761.53 134087.38 69782.77 134098.00 69804.00C134087.33 69814.66 134076.67 69825.34 134066.00 69836.00C134055.33 69836.00 134044.67 69836.00 134034.00 69836.00C134012.33 69857.66 133990.67 69879.34 133969.00 69901.00C133969.00 69933.00 133969.00 69965.00 133969.00 69997.00C133937.00 69997.00 133905.00 69997.00 133873.00 69997.00C133883.67 70029.33 133894.33 70061.67 133905.00 70094.00C133915.67 70104.66 133926.33 70115.34 133937.00 70126.00C133937.00 70147.33 133937.00 70168.67 133937.00 70190.00C133947.67 70190.00 133958.33 70190.00 133969.00 70190.00C133969.00 70200.67 133969.00 70211.33 133969.00 70222.00C133980.00 70222.00 133991.00 70222.00 134002.00 70222.00C134012.67 70254.33 134023.33 70286.67 134034.00 70319.00C134023.33 70329.66 134012.67 70340.34 134002.00 70351.00C134002.00 70383.00 134002.00 70415.00 134002.00 70447.00C133991.00 70457.67 133980.00 70468.33 133969.00 70479.00C133980.00 70490.00 133991.00 70501.00 134002.00 70512.00C133991.00 70522.67 133980.00 70533.33 133969.00 70544.00C133958.33 70544.00 133947.67 70544.00 133937.00 70544.00C133937.00 70554.67 133937.00 70565.33 133937.00 70576.00C133947.67 70586.66 133958.33 70597.34 133969.00 70608.00C133958.33 70618.66 133947.67 70629.34 133937.00 70640.00C133905.00 70640.00 133873.00 70640.00 133841.00 70640.00C133808.67 70672.34 133776.33 70704.66 133744.00 70737.00C133733.33 70726.34 133722.67 70715.66 133712.00 70705.00C133690.67 70705.00 133669.33 70705.00 133648.00 70705.00C133626.67 70715.67 133605.33 70726.33 133584.00 70737.00C133594.67 70758.33 133605.33 70779.67 133616.00 70801.00C133616.00 70811.67 133616.00 70822.33 133616.00 70833.00C133626.67 70843.66 133637.33 70854.34 133648.00 70865.00C133658.67 70865.00 133669.33 70865.00 133680.00 70865.00C133690.67 70886.66 133701.33 70908.34 133712.00 70930.00C133690.67 70940.67 133669.33 70951.33 133648.00 70962.00C133648.00 70972.67 133648.00 70983.33 133648.00 70994.00C133626.67 71004.67 133605.33 71015.33 133584.00 71026.00C133584.00 71036.67 133584.00 71047.33 133584.00 71058.00C133562.33 71068.67 133540.67 71079.33 133519.00 71090.00C133508.33 71090.00 133497.67 71090.00 133487.00 71090.00C133476.33 71101.00 133465.67 71112.00 133455.00 71123.00C133465.67 71144.33 133476.33 71165.67 133487.00 71187.00C133487.00 71197.67 133487.00 71208.33 133487.00 71219.00C133476.33 71229.66 133465.67 71240.34 133455.00 71251.00C133455.00 71261.67 133455.00 71272.33 133455.00 71283.00C133433.67 71283.00 133412.33 71283.00 133391.00 71283.00C133391.00 71272.33 133391.00 71261.67 133391.00 71251.00C133391.00 71261.67 133391.00 71272.33 133391.00 71283.00C133380.33 71304.66 133369.67 71326.34 133359.00 71348.00C133359.00 71358.67 133359.00 71369.33 133359.00 71380.00C133326.67 71380.00 133294.33 71380.00 133262.00 71380.00C133251.33 71390.66 133240.67 71401.34 133230.00 71412.00C133251.33 71422.67 133272.67 71433.33 133294.00 71444.00C133304.67 71433.34 133315.33 71422.66 133326.00 71412.00C133326.00 71422.67 133326.00 71433.33 133326.00 71444.00C133337.00 71444.00 133348.00 71444.00 133359.00 71444.00C133359.00 71454.67 133359.00 71465.33 133359.00 71476.00C133337.33 71486.67 133315.67 71497.33 133294.00 71508.00C133294.00 71529.67 133294.00 71551.33 133294.00 71573.00C133283.33 71573.00 133272.67 71573.00 133262.00 71573.00C133272.67 71583.66 133283.33 71594.34 133294.00 71605.00C133272.67 71605.00 133251.33 71605.00 133230.00 71605.00C133230.00 71615.67 133230.00 71626.33 133230.00 71637.00C133262.00 71658.33 133294.00 71679.67 133326.00 71701.00C133326.00 71690.33 133326.00 71679.67 133326.00 71669.00C133347.67 71669.00 133369.33 71669.00 133391.00 71669.00C133412.33 71679.67 133433.67 71690.33 133455.00 71701.00C133476.33 71690.33 133497.67 71679.67 133519.00 71669.00C133508.33 71690.66 133497.67 71712.34 133487.00 71734.00C133508.33 71734.00 133529.67 71734.00 133551.00 71734.00C133551.00 71723.00 133551.00 71712.00 133551.00 71701.00C133572.67 71701.00 133594.33 71701.00 133616.00 71701.00C133637.33 71712.00 133658.67 71723.00 133680.00 71734.00C133733.67 71712.33 133787.33 71690.67 133841.00 71669.00C133873.00 71669.00 133905.00 71669.00 133937.00 71669.00C133947.67 71690.66 133958.33 71712.34 133969.00 71734.00C133958.33 71744.66 133947.67 71755.34 133937.00 71766.00C133915.67 71766.00 133894.33 71766.00 133873.00 71766.00C133883.67 71776.66 133894.33 71787.34 133905.00 71798.00C133894.33 71798.00 133883.67 71798.00 133873.00 71798.00C133883.67 71808.66 133894.33 71819.34 133905.00 71830.00C133894.33 71840.66 133883.67 71851.34 133873.00 71862.00C133883.67 71883.33 133894.33 71904.67 133905.00 71926.00C133894.33 71926.00 133883.67 71926.00 133873.00 71926.00C133883.67 71947.66 133894.33 71969.34 133905.00 71991.00C133937.33 71991.00 133969.67 71991.00 134002.00 71991.00C134023.59 71969.59 134044.94 71947.93 134066.00 71926.00C134066.00 71958.33 134066.00 71990.67 134066.00 72023.00C134077.10 72023.21 134088.29 72022.58 134099.34 72023.33C134141.89 72033.89 134184.45 72044.44 134227.00 72055.00C134237.69 72065.79 134248.59 72076.38 134259.15 72087.30C134269.77 72108.53 134280.38 72129.77 134291.00 72151.00C134280.33 72183.33 134269.67 72215.67 134259.00 72248.00C134259.00 72258.67 134259.00 72269.33 134259.00 72280.00C134280.33 72290.67 134301.67 72301.33 134323.00 72312.00C134344.33 72301.33 134365.67 72290.67 134387.00 72280.00C134387.00 72290.67 134387.00 72301.33 134387.00 72312.00C134398.00 72333.67 134409.00 72355.33 134420.00 72377.00C134399.55 72416.47 134379.24 72456.01 134359.56 72495.88C134356.90 72500.83 134353.08 72505.86 134358.56 72510.30C134379.04 72540.87 134399.52 72571.44 134420.00 72602.00C134398.09 72623.08 134376.40 72644.40 134355.00 72666.00C134355.00 72676.67 134355.00 72687.33 134355.00 72698.00C134333.67 72708.67 134312.33 72719.33 134291.00 72730.00C134291.00 72751.67 134291.00 72773.33 134291.00 72795.00C134301.67 72816.33 134312.33 72837.67 134323.00 72859.00C134355.33 72848.33 134387.67 72837.67 134420.00 72827.00C134430.67 72827.00 134441.33 72827.00 134452.00 72827.00C134452.00 72848.33 134452.00 72869.67 134452.00 72891.00C134473.43 72923.07 134494.72 72955.23 134516.24 72987.24C134558.10 73029.68 134599.62 73072.49 134642.65 73113.76C134647.79 73118.84 134650.92 73125.57 134655.16 73131.39C134673.11 73158.59 134691.05 73185.80 134709.00 73213.00C134698.33 73245.00 134687.67 73277.00 134677.00 73309.00C134677.00 73319.67 134677.00 73330.33 134677.00 73341.00C134709.00 73351.67 134741.00 73362.33 134773.00 73373.00C134773.00 73362.33 134773.00 73351.67 134773.00 73341.00C134783.79 73330.31 134794.38 73319.42 134805.30 73308.85C134826.87 73298.24 134848.43 73287.62 134870.00 73277.00C134912.67 73277.00 134955.33 73277.00 134998.00 73277.00C135030.33 73266.33 135062.67 73255.67 135095.00 73245.00C135105.67 73245.00 135116.33 73245.00 135127.00 73245.00C135148.33 73266.34 135169.67 73287.66 135191.00 73309.00C135223.33 73319.67 135255.67 73330.33 135288.00 73341.00C135277.31 73351.79 135266.42 73362.38 135255.85 73373.30C135244.91 73394.87 135233.95 73416.43 135223.00 73438.00C135223.00 73459.33 135223.00 73480.67 135223.00 73502.00C135255.88 73533.45 135287.79 73565.87 135320.00 73598.00C135341.33 73598.00 135362.67 73598.00 135384.00 73598.00C135405.33 73609.00 135426.67 73620.00 135448.00 73631.00C135459.00 73652.33 135470.00 73673.67 135481.00 73695.00C135513.00 73684.33 135545.00 73673.67 135577.00 73663.00C135598.33 73673.67 135619.67 73684.33 135641.00 73695.00C135641.00 73716.33 135641.00 73737.67 135641.00 73759.00C135619.67 73780.34 135598.33 73801.66 135577.00 73823.00C135577.00 73834.00 135577.00 73845.00 135577.00 73856.00C135598.33 73888.00 135619.67 73920.00 135641.00 73952.00C135641.00 73962.67 135641.00 73973.33 135641.00 73984.00C135673.33 73994.67 135705.67 74005.33 135738.00 74016.00C135738.00 74027.00 135738.00 74038.00 135738.00 74049.00C135673.56 74091.71 135609.18 74134.50 135544.70 74177.15C135523.47 74187.77 135502.23 74198.38 135481.00 74209.00C135481.00 74241.33 135481.00 74273.67 135481.00 74306.00C135459.33 74338.00 135437.67 74370.00 135416.00 74402.00C135416.00 74445.00 135416.00 74488.00 135416.00 74531.00C135405.33 74552.33 135394.67 74573.67 135384.00 74595.00C135319.67 74638.00 135255.33 74681.00 135191.00 74724.00C135201.67 74766.67 135212.33 74809.33 135223.00 74852.00C135223.00 74873.67 135223.00 74895.33 135223.00 74917.00C135234.00 74927.67 135245.00 74938.33 135256.00 74949.00C135256.00 74959.67 135256.00 74970.33 135256.00 74981.00C135331.00 74981.00 135406.00 74981.00 135481.00 74981.00C135513.00 75002.33 135545.00 75023.67 135577.00 75045.00C135587.67 75066.66 135598.33 75088.34 135609.00 75110.00C135598.33 75120.66 135587.67 75131.34 135577.00 75142.00C135566.33 75174.00 135555.67 75206.00 135545.00 75238.00C135545.00 75248.67 135545.00 75259.33 135545.00 75270.00C135577.00 75281.00 135609.00 75292.00 135641.00 75303.00C135673.33 75303.00 135705.67 75303.00 135738.00 75303.00C135780.67 75281.33 135823.33 75259.67 135866.00 75238.00C135877.00 75259.67 135888.00 75281.33 135899.00 75303.00C135920.33 75324.34 135941.67 75345.66 135963.00 75367.00C135952.33 75399.00 135941.67 75431.00 135931.00 75463.00C135941.67 75463.00 135952.33 75463.00 135963.00 75463.00C135984.33 75484.67 136005.67 75506.33 136027.00 75528.00C136005.67 75538.67 135984.33 75549.33 135963.00 75560.00C135963.00 75570.67 135963.00 75581.33 135963.00 75592.00C135995.00 75602.67 136027.00 75613.33 136059.00 75624.00C136059.00 75656.33 136059.00 75688.67 136059.00 75721.00C136048.33 75731.66 136037.67 75742.34 136027.00 75753.00C136027.00 75785.00 136027.00 75817.00 136027.00 75849.00C136048.67 75870.33 136070.33 75891.67 136092.00 75913.00C136070.33 75934.66 136048.67 75956.34 136027.00 75978.00C136037.67 76020.67 136048.33 76063.33 136059.00 76106.00C136048.33 76127.66 136037.67 76149.34 136027.00 76171.00C136059.33 76213.67 136091.67 76256.33 136124.00 76299.00C136124.00 76352.67 136124.00 76406.33 136124.00 76460.00C136134.67 76470.66 136145.33 76481.34 136156.00 76492.00C136166.67 76524.33 136177.33 76556.67 136188.00 76589.00C136220.00 76599.67 136252.00 76610.33 136284.00 76621.00C136295.00 76621.00 136306.00 76621.00 136317.00 76621.00C136370.33 76685.34 136423.67 76749.66 136477.00 76814.00C136498.67 76889.00 136520.33 76964.00 136542.00 77039.00C136574.00 77049.67 136606.00 77060.33 136638.00 77071.00C136670.33 77092.34 136702.67 77113.66 136735.00 77135.00C136756.33 77113.66 136777.67 77092.34 136799.00 77071.00C136820.33 77081.67 136841.67 77092.33 136863.00 77103.00C136906.11 77102.96 136949.22 77103.09 136992.33 77102.93C137046.86 77091.99 137101.48 77081.44 137155.96 77070.26C137197.64 77059.84 137239.32 77049.42 137281.00 77039.00C137302.33 77049.67 137323.67 77060.33 137345.00 77071.00C137367.14 77092.49 137389.45 77113.84 137410.81 77136.11C137442.55 77178.72 137474.27 77221.37 137506.00 77264.00C137549.00 77253.33 137592.00 77242.67 137635.00 77232.00C137699.33 77242.67 137763.67 77253.33 137828.00 77264.00C137903.00 77210.33 137978.00 77156.67 138053.00 77103.00C138074.33 77092.33 138095.67 77081.67 138117.00 77071.00C138127.67 77071.00 138138.33 77071.00 138149.00 77071.00C138159.67 77081.66 138170.33 77092.34 138181.00 77103.00C138192.00 77199.33 138203.00 77295.67 138214.00 77392.00C138235.33 77424.34 138256.67 77456.66 138278.00 77489.00C138288.67 77478.34 138299.33 77467.66 138310.00 77457.00C138342.33 77446.33 138374.67 77435.67 138407.00 77425.00C138449.67 77446.33 138492.33 77467.67 138535.00 77489.00C138569.16 77477.87 138603.16 77466.24 138637.43 77455.43C138710.62 77434.29 138783.81 77413.15 138857.00 77392.00C138921.33 77424.33 138985.67 77456.67 139050.00 77489.00C139125.00 77499.67 139200.00 77510.33 139275.00 77521.00C139350.00 77478.00 139425.00 77435.00 139500.00 77392.00C139521.33 77370.66 139542.67 77349.34 139564.00 77328.00C139574.67 77296.00 139585.33 77264.00 139596.00 77232.00C139585.27 77199.57 139574.66 77167.10 139563.85 77134.70C139553.23 77113.47 139542.62 77092.23 139532.00 77071.00C139553.33 77038.66 139574.67 77006.34 139596.00 76974.00C139606.67 76995.66 139617.33 77017.34 139628.00 77039.00C139660.33 77039.00 139692.67 77039.00 139725.00 77039.00C139725.00 77060.33 139725.00 77081.67 139725.00 77103.00C139714.33 77113.66 139703.67 77124.34 139693.00 77135.00C139703.67 77178.00 139714.33 77221.00 139725.00 77264.00C139725.00 77349.67 139725.00 77435.33 139725.00 77521.00C139714.31 77531.79 139703.41 77542.38 139692.85 77553.30C139681.84 77576.04 139670.22 77598.51 139659.61 77621.43C139638.10 77674.14 139616.91 77726.98 139595.20 77779.60C139574.14 77822.07 139553.06 77864.53 139532.00 77907.00C139510.67 77917.67 139489.33 77928.33 139468.00 77939.00C139403.67 77939.00 139339.33 77939.00 139275.00 77939.00C139232.31 77959.91 139189.75 77981.09 139147.22 78002.33C139141.36 78003.84 139134.93 78002.59 139128.84 78003.00C139124.21 78003.65 139116.95 78001.68 139114.00 78004.02C139114.00 78025.34 139114.00 78046.67 139114.00 78068.00C139103.33 78089.33 139092.67 78110.67 139082.00 78132.00C139103.33 78164.00 139124.67 78196.00 139146.00 78228.00C139135.33 78271.00 139124.67 78314.00 139114.00 78357.00C139049.67 78357.00 138985.33 78357.00 138921.00 78357.00C138888.93 78378.43 138856.77 78399.72 138824.76 78421.24C138803.17 78442.82 138781.59 78464.41 138760.00 78486.00C138749.33 78507.33 138738.67 78528.67 138728.00 78550.00C138663.56 78593.04 138599.18 78636.17 138534.70 78679.15C138513.47 78689.77 138492.23 78700.38 138471.00 78711.00C138460.33 78743.00 138449.67 78775.00 138439.00 78807.00C138417.33 78807.00 138395.67 78807.00 138374.00 78807.00C138352.67 78817.67 138331.33 78828.33 138310.00 78839.00C138278.00 78839.00 138246.00 78839.00 138214.00 78839.00C138203.00 78849.67 138192.00 78860.33 138181.00 78871.00C138170.33 78914.00 138159.67 78957.00 138149.00 79000.00C138106.33 79010.67 138063.67 79021.33 138021.00 79032.00C138021.00 79064.33 138021.00 79096.67 138021.00 79129.00C138010.21 79139.69 137999.62 79150.58 137988.70 79161.15C137967.13 79171.76 137945.57 79182.38 137924.00 79193.00C137892.00 79182.33 137860.00 79171.67 137828.00 79161.00C137795.67 79193.00 137763.33 79225.00 137731.00 79257.00C137699.00 79257.00 137667.00 79257.00 137635.00 79257.00C137602.67 79268.00 137570.33 79279.00 137538.00 79290.00C137527.33 79279.00 137516.67 79268.00 137506.00 79257.00C137474.00 79268.00 137442.00 79279.00 137410.00 79290.00C137410.00 79300.67 137410.00 79311.33 137410.00 79322.00C137366.90 79343.14 137323.89 79364.44 137281.00 79386.00C137281.00 79396.67 137281.00 79407.33 137281.00 79418.00C137291.84 79429.06 137303.16 79439.71 137313.70 79451.04C137335.23 79483.09 137356.62 79515.24 137378.24 79547.24C137388.83 79557.82 137399.41 79568.41 137410.00 79579.00C137409.80 79590.10 137410.43 79601.28 137409.67 79612.33C137399.11 79654.89 137388.56 79697.44 137378.00 79740.00C137319.89 79778.27 137261.83 79816.61 137204.07 79855.42C137165.38 79881.28 137126.69 79907.14 137088.00 79933.00C137099.01 79933.23 137110.13 79932.54 137121.08 79933.35C137153.05 79943.90 137185.02 79954.45 137217.00 79965.00C137217.00 80007.67 137217.00 80050.33 137217.00 80093.00C137206.33 80114.66 137195.67 80136.34 137185.00 80158.00C137120.45 80189.56 137056.28 80221.88 136992.00 80254.00C136981.31 80264.79 136970.41 80275.38 136959.85 80286.30C136949.13 80308.35 136937.96 80330.20 136927.52 80352.38C136916.68 80383.92 136905.84 80415.46 136895.00 80447.00C136895.00 80457.67 136895.00 80468.33 136895.00 80479.00C136916.67 80522.00 136938.33 80565.00 136960.00 80608.00C136960.00 80618.67 136960.00 80629.33 136960.00 80640.00C136906.33 80672.00 136852.67 80704.00 136799.00 80736.00C136777.67 80768.34 136756.33 80800.66 136735.00 80833.00C136681.33 80865.00 136627.67 80897.00 136574.00 80929.00C136563.31 80940.12 136552.42 80951.06 136541.85 80962.30C136530.91 80983.54 136519.95 81004.77 136509.00 81026.00C136477.00 81047.33 136445.00 81068.67 136413.00 81090.00C136402.33 81090.00 136391.67 81090.00 136381.00 81090.00C136381.00 81122.33 136381.00 81154.67 136381.00 81187.00C136348.67 81219.00 136316.33 81251.00 136284.00 81283.00C136252.00 81368.67 136220.00 81454.33 136188.00 81540.00C136177.33 81647.33 136166.67 81754.67 136156.00 81862.00C136123.12 81916.42 136090.52 81971.02 136057.45 82025.33C136036.63 82056.55 136015.82 82087.78 135995.00 82119.00C135973.67 82119.00 135952.33 82119.00 135931.00 82119.00C135802.33 82183.33 135673.67 82247.67 135545.00 82312.00C135502.00 82322.67 135459.00 82333.33 135416.00 82344.00C135426.67 82365.33 135437.33 82386.67 135448.00 82408.00C135437.33 82440.33 135426.67 82472.67 135416.00 82505.00C135405.33 82505.00 135394.67 82505.00 135384.00 82505.00C135384.00 82526.33 135384.00 82547.67 135384.00 82569.00C135394.67 82579.66 135405.33 82590.34 135416.00 82601.00C135416.05 82622.77 135415.89 82644.55 135416.08 82666.33C135426.72 82708.88 135437.36 82751.44 135448.00 82794.00C135469.67 82826.33 135491.33 82858.67 135513.00 82891.00C135545.00 82901.67 135577.00 82912.33 135609.00 82923.00C135619.67 82923.00 135630.33 82923.00 135641.00 82923.00C135662.67 82933.67 135684.33 82944.33 135706.00 82955.00C135706.00 83008.67 135706.00 83062.33 135706.00 83116.00C135738.00 83137.33 135770.00 83158.67 135802.00 83180.00C135802.00 83244.33 135802.00 83308.67 135802.00 83373.00C135812.67 83405.00 135823.33 83437.00 135834.00 83469.00C135851.91 83487.54 135869.77 83506.14 135888.52 83523.84C135892.61 83527.23 135895.81 83532.09 135900.50 83534.50C135932.00 83545.00 135963.50 83555.50 135995.00 83566.00C136005.67 83587.33 136016.33 83608.67 136027.00 83630.00C136080.67 83630.00 136134.33 83630.00 136188.00 83630.00C136220.00 83640.67 136252.00 83651.33 136284.00 83662.00C136295.00 83683.67 136306.00 83705.33 136317.00 83727.00C136327.67 83737.66 136338.33 83748.34 136349.00 83759.00C136359.67 83759.00 136370.33 83759.00 136381.00 83759.00C136402.33 83748.33 136423.67 83737.67 136445.00 83727.00C136488.00 83727.00 136531.00 83727.00 136574.00 83727.00C136595.33 83737.67 136616.67 83748.33 136638.00 83759.00C136691.67 83748.33 136745.33 83737.67 136799.00 83727.00C136842.38 83748.41 136885.59 83770.19 136929.07 83791.35C136960.71 83801.90 136992.36 83812.45 137024.00 83823.00C137034.67 83823.00 137045.33 83823.00 137056.00 83823.00C137077.33 83833.67 137098.67 83844.33 137120.00 83855.00C137141.67 83855.00 137163.33 83855.00 137185.00 83855.00C137206.33 83876.67 137227.67 83898.33 137249.00 83920.00C137249.00 83930.67 137249.00 83941.33 137249.00 83952.00C137259.67 83973.33 137270.33 83994.67 137281.00 84016.00C137323.90 84037.53 137366.89 84058.88 137410.00 84080.00C137420.79 84069.31 137431.38 84058.42 137442.30 84047.85C137463.53 84037.23 137484.77 84026.62 137506.00 84016.00C137516.67 84037.33 137527.33 84058.67 137538.00 84080.00C137570.33 84080.00 137602.67 84080.00 137635.00 84080.00C137656.33 84069.33 137677.67 84058.67 137699.00 84048.00C137709.67 84058.66 137720.33 84069.34 137731.00 84080.00C137763.33 84091.00 137795.67 84102.00 137828.00 84113.00C137838.67 84113.00 137849.33 84113.00 137860.00 84113.00C137870.67 84123.66 137881.33 84134.34 137892.00 84145.00C137892.00 84177.00 137892.00 84209.00 137892.00 84241.00C137817.00 84251.67 137742.00 84262.33 137667.00 84273.00C137635.00 84283.67 137603.00 84294.33 137571.00 84305.00C137538.67 84294.33 137506.33 84283.67 137474.00 84273.00C137452.67 84283.67 137431.33 84294.33 137410.00 84305.00C137356.24 84283.59 137302.43 84262.32 137248.71 84240.83C137195.14 84208.88 137141.57 84176.94 137088.00 84145.00C137056.00 84145.00 137024.00 84145.00 136992.00 84145.00C136970.67 84155.67 136949.33 84166.33 136928.00 84177.00C136906.33 84166.33 136884.67 84155.67 136863.00 84145.00C136841.67 84155.67 136820.33 84166.33 136799.00 84177.00C136799.00 84198.33 136799.00 84219.67 136799.00 84241.00C136809.67 84262.33 136820.33 84283.67 136831.00 84305.00C136841.67 84316.00 136852.33 84327.00 136863.00 84338.00C136873.67 84370.00 136884.33 84402.00 136895.00 84434.00C136895.00 84455.33 136895.00 84476.67 136895.00 84498.00C136873.67 84509.00 136852.33 84520.00 136831.00 84531.00C136799.00 84584.33 136767.00 84637.67 136735.00 84691.00C136680.81 84712.97 136626.49 84734.62 136572.39 84756.79C136551.26 84767.19 136530.13 84777.60 136509.00 84788.00C136520.00 84798.67 136531.00 84809.33 136542.00 84820.00C136574.00 84809.33 136606.00 84798.67 136638.00 84788.00C136659.33 84809.34 136680.67 84830.66 136702.00 84852.00C136723.67 84862.67 136745.33 84873.33 136767.00 84884.00C136767.00 84894.67 136767.00 84905.33 136767.00 84916.00C136745.33 84927.00 136723.67 84938.00 136702.00 84949.00C136702.00 84959.67 136702.00 84970.33 136702.00 84981.00C136713.00 84991.67 136724.00 85002.33 136735.00 85013.00C136724.00 85034.33 136713.00 85055.67 136702.00 85077.00C136680.67 85087.67 136659.33 85098.33 136638.00 85109.00C136638.00 85130.67 136638.00 85152.33 136638.00 85174.00C136627.33 85184.66 136616.67 85195.34 136606.00 85206.00C136584.67 85195.33 136563.33 85184.67 136542.00 85174.00C136531.00 85184.67 136520.00 85195.33 136509.00 85206.00C136520.00 85227.33 136531.00 85248.67 136542.00 85270.00C136531.00 85291.33 136520.00 85312.67 136509.00 85334.00C136530.67 85366.33 136552.33 85398.67 136574.00 85431.00C136595.33 85420.33 136616.67 85409.67 136638.00 85399.00C136670.06 85431.28 136702.61 85463.06 136735.00 85495.00C136756.33 85495.00 136777.67 85495.00 136799.00 85495.00C136842.00 85473.67 136885.00 85452.33 136928.00 85431.00C136960.09 85441.73 136992.23 85452.34 137024.30 85463.15C137067.10 85484.63 137110.00 85505.93 137153.00 85527.00C137195.67 85516.33 137238.33 85505.67 137281.00 85495.00C137302.33 85473.66 137323.67 85452.34 137345.00 85431.00C137377.33 85431.00 137409.67 85431.00 137442.00 85431.00C137452.67 85452.33 137463.33 85473.67 137474.00 85495.00C137474.00 85516.33 137474.00 85537.67 137474.00 85559.00C137442.00 85591.33 137410.00 85623.67 137378.00 85656.00C137345.67 85656.00 137313.33 85656.00 137281.00 85656.00C137227.33 85677.33 137173.67 85698.67 137120.00 85720.00C137056.00 85730.67 136992.00 85741.33 136928.00 85752.00C136906.22 85752.05 136884.45 85751.89 136862.67 85752.08C136820.11 85762.73 136777.56 85773.36 136735.00 85784.00C136724.00 85805.67 136713.00 85827.33 136702.00 85849.00C136691.21 85859.69 136680.62 85870.58 136669.70 85881.15C136648.47 85891.77 136627.23 85902.38 136606.00 85913.00C136573.67 85945.34 136541.33 85977.66 136509.00 86010.00C136509.00 86031.33 136509.00 86052.67 136509.00 86074.00C136498.33 86074.00 136487.67 86074.00 136477.00 86074.00C136455.67 86084.67 136434.33 86095.33 136413.00 86106.00C136413.00 86127.33 136413.00 86148.67 136413.00 86170.00C136434.33 86191.67 136455.67 86213.33 136477.00 86235.00C136477.00 86245.67 136477.00 86256.33 136477.00 86267.00C136487.67 86277.66 136498.33 86288.34 136509.00 86299.00C136487.67 86309.67 136466.33 86320.33 136445.00 86331.00C136455.67 86352.33 136466.33 86373.67 136477.00 86395.00C136477.00 86406.00 136477.00 86417.00 136477.00 86428.00C136498.67 86438.67 136520.33 86449.33 136542.00 86460.00C136552.67 86481.33 136563.33 86502.67 136574.00 86524.00C136563.33 86545.33 136552.67 86566.67 136542.00 86588.00C136542.00 86609.67 136542.00 86631.33 136542.00 86653.00C136531.00 86685.00 136520.00 86717.00 136509.00 86749.00C136509.00 86759.67 136509.00 86770.33 136509.00 86781.00C136487.67 86791.67 136466.33 86802.33 136445.00 86813.00C136455.67 86824.00 136466.33 86835.00 136477.00 86846.00C136477.00 86867.33 136477.00 86888.67 136477.00 86910.00C136466.33 86920.66 136455.67 86931.34 136445.00 86942.00C136477.33 86952.67 136509.67 86963.33 136542.00 86974.00C136542.00 86995.33 136542.00 87016.67 136542.00 87038.00C136552.67 87049.00 136563.33 87060.00 136574.00 87071.00C136563.33 87103.00 136552.67 87135.00 136542.00 87167.00C136520.33 87177.67 136498.67 87188.33 136477.00 87199.00C136487.67 87199.00 136498.33 87199.00 136509.00 87199.00C136530.67 87231.33 136552.33 87263.67 136574.00 87296.00C136563.31 87306.79 136552.42 87317.39 136541.85 87328.30C136530.91 87349.54 136519.95 87370.77 136509.00 87392.00C136541.33 87402.67 136573.67 87413.33 136606.00 87424.00C136617.01 87424.23 136628.13 87423.54 136639.08 87424.35C136671.05 87434.90 136703.02 87445.45 136735.00 87456.00C136745.67 87456.00 136756.33 87456.00 136767.00 87456.00C136767.00 87467.00 136767.00 87478.00 136767.00 87489.00C136724.00 87499.67 136681.00 87510.33 136638.00 87521.00C136638.00 87542.33 136638.00 87563.67 136638.00 87585.00C136627.33 87595.66 136616.67 87606.34 136606.00 87617.00C136616.67 87627.66 136627.33 87638.34 136638.00 87649.00C136648.67 87638.34 136659.33 87627.66 136670.00 87617.00C136680.67 87638.66 136691.33 87660.34 136702.00 87682.00C136723.67 87692.67 136745.33 87703.33 136767.00 87714.00C136777.67 87714.00 136788.33 87714.00 136799.00 87714.00C136831.00 87735.33 136863.00 87756.67 136895.00 87778.00C136906.00 87799.33 136917.00 87820.67 136928.00 87842.00C136917.00 87852.67 136906.00 87863.33 136895.00 87874.00C136895.00 87895.67 136895.00 87917.33 136895.00 87939.00C136884.33 87949.66 136873.67 87960.34 136863.00 87971.00C136863.00 87981.67 136863.00 87992.33 136863.00 88003.00C136873.67 88013.66 136884.33 88024.34 136895.00 88035.00C136906.00 88024.33 136917.00 88013.67 136928.00 88003.00C136960.00 88003.00 136992.00 88003.00 137024.00 88003.00C137045.33 88024.34 137066.67 88045.66 137088.00 88067.00C137098.67 88088.66 137109.33 88110.34 137120.00 88132.00C137120.00 88142.67 137120.00 88153.33 137120.00 88164.00C137109.33 88185.33 137098.67 88206.67 137088.00 88228.00C137088.00 88281.67 137088.00 88335.33 137088.00 88389.00C137131.00 88399.67 137174.00 88410.33 137217.00 88421.00C137292.47 88388.87 137367.84 88356.49 137443.38 88324.53C137474.92 88313.68 137506.46 88302.84 137538.00 88292.00C137549.00 88313.67 137560.00 88335.33 137571.00 88357.00C137560.00 88378.33 137549.00 88399.67 137538.00 88421.00C137549.00 88442.33 137560.00 88463.67 137571.00 88485.00C137560.00 88517.33 137549.00 88549.67 137538.00 88582.00C137473.67 88582.00 137409.33 88582.00 137345.00 88582.00C137301.63 88592.96 137258.15 88603.49 137214.85 88614.71C137183.24 88625.14 137151.62 88635.57 137120.00 88646.00C137109.33 88646.00 137098.67 88646.00 137088.00 88646.00C137077.33 88656.66 137066.67 88667.34 137056.00 88678.00C137045.33 88710.33 137034.67 88742.67 137024.00 88775.00C137002.67 88796.34 136981.33 88817.66 136960.00 88839.00C136970.67 88860.33 136981.33 88881.67 136992.00 88903.00C136970.67 88956.67 136949.33 89010.33 136928.00 89064.00C136949.33 89074.67 136970.67 89085.33 136992.00 89096.00C136992.00 89106.67 136992.00 89117.33 136992.00 89128.00C137013.33 89128.00 137034.67 89128.00 137056.00 89128.00C137066.67 89149.66 137077.33 89171.34 137088.00 89193.00C137066.67 89214.34 137045.33 89235.66 137024.00 89257.00C137002.67 89267.67 136981.33 89278.33 136960.00 89289.00C136938.33 89321.33 136916.67 89353.67 136895.00 89386.00C136906.00 89386.00 136917.00 89386.00 136928.00 89386.00C136928.00 89396.67 136928.00 89407.33 136928.00 89418.00C136949.33 89428.67 136970.67 89439.33 136992.00 89450.00C137002.67 89460.66 137013.33 89471.34 137024.00 89482.00C137024.00 89525.00 137024.00 89568.00 137024.00 89611.00C137002.67 89621.67 136981.33 89632.33 136960.00 89643.00C136970.67 89664.33 136981.33 89685.67 136992.00 89707.00C136992.00 89728.33 136992.00 89749.67 136992.00 89771.00C136981.33 89782.00 136970.67 89793.00 136960.00 89804.00C136960.00 89846.67 136960.00 89889.33 136960.00 89932.00C136981.44 89953.39 137002.90 89974.79 137023.67 89996.83C137030.53 90009.39 137036.58 90022.48 137043.12 90035.24C137047.41 90043.83 137051.71 90052.41 137056.00 90061.00C137034.56 90082.38 137013.24 90103.88 136991.72 90125.19C136959.48 90146.79 136927.24 90168.40 136895.00 90190.00C136916.67 90222.00 136938.33 90254.00 136960.00 90286.00C136938.78 90328.67 136917.27 90371.20 136895.71 90413.70C136894.10 90419.63 136895.42 90426.16 136895.00 90432.34C136895.01 90448.00 136895.05 90463.66 136894.93 90479.33C136884.28 90532.89 136873.64 90586.44 136863.00 90640.00C136895.33 90629.00 136927.67 90618.00 136960.00 90607.00C136970.67 90585.67 136981.33 90564.33 136992.00 90543.00C137004.16 90543.33 137016.40 90542.29 137028.50 90543.64C137102.00 90554.09 137175.50 90564.55 137249.00 90575.00C137281.00 90553.67 137313.00 90532.33 137345.00 90511.00C137366.67 90511.00 137388.33 90511.00 137410.00 90511.00C137485.00 90479.00 137560.00 90447.00 137635.00 90415.00C137677.90 90436.53 137720.89 90457.88 137764.00 90479.00C137752.88 90489.69 137741.94 90500.58 137730.70 90511.15C137688.13 90532.43 137645.57 90553.72 137603.00 90575.00C137581.33 90564.33 137559.67 90553.67 137538.00 90543.00C137506.00 90553.67 137474.00 90564.33 137442.00 90575.00C137442.00 90585.67 137442.00 90596.33 137442.00 90607.00C137420.91 90628.91 137399.61 90650.61 137378.00 90672.00C137335.00 90672.00 137292.00 90672.00 137249.00 90672.00C137217.00 90682.67 137185.00 90693.33 137153.00 90704.00C137153.00 90693.33 137153.00 90682.67 137153.00 90672.00C137099.33 90693.33 137045.67 90714.67 136992.00 90736.00C136981.33 90725.34 136970.67 90714.66 136960.00 90704.00C136949.33 90714.66 136938.67 90725.34 136928.00 90736.00C136895.67 90746.67 136863.33 90757.33 136831.00 90768.00C136788.00 90768.00 136745.00 90768.00 136702.00 90768.00C136702.00 90778.67 136702.00 90789.33 136702.00 90800.00C136659.33 90811.00 136616.67 90822.00 136574.00 90833.00C136552.33 90822.00 136530.67 90811.00 136509.00 90800.00C136520.00 90778.67 136531.00 90757.33 136542.00 90736.00C136531.00 90725.33 136520.00 90714.67 136509.00 90704.00C136520.00 90693.33 136531.00 90682.67 136542.00 90672.00C136542.00 90639.67 136542.00 90607.33 136542.00 90575.00C136552.67 90564.34 136563.33 90553.66 136574.00 90543.00C136574.00 90500.33 136574.00 90457.67 136574.00 90415.00C136563.33 90404.00 136552.67 90393.00 136542.00 90382.00C136552.67 90371.34 136563.33 90360.66 136574.00 90350.00C136563.33 90339.34 136552.67 90328.66 136542.00 90318.00C136552.67 90307.34 136563.33 90296.66 136574.00 90286.00C136563.33 90286.00 136552.67 90286.00 136542.00 90286.00C136552.67 90264.67 136563.33 90243.33 136574.00 90222.00C136552.33 90211.33 136530.67 90200.67 136509.00 90190.00C136509.00 90168.33 136509.00 90146.67 136509.00 90125.00C136509.00 90135.67 136509.00 90146.33 136509.00 90157.00C136498.33 90146.34 136487.67 90135.66 136477.00 90125.00C136455.67 90135.67 136434.33 90146.33 136413.00 90157.00C136402.33 90146.34 136391.67 90135.66 136381.00 90125.00C136370.33 90125.00 136359.67 90125.00 136349.00 90125.00C136349.00 90093.00 136349.00 90061.00 136349.00 90029.00C136338.33 90018.34 136327.67 90007.66 136317.00 89997.00C136295.33 90179.00 136273.67 90361.00 136252.00 90543.00C136241.33 90543.00 136230.67 90543.00 136220.00 90543.00C136198.67 90564.34 136177.33 90585.66 136156.00 90607.00C136156.00 90650.00 136156.00 90693.00 136156.00 90736.00C135866.55 90735.99 135577.11 90736.03 135287.66 90735.98C135105.44 90725.32 134923.22 90714.66 134741.00 90704.00C134634.00 90768.33 134527.00 90832.67 134420.00 90897.00C134409.00 90897.00 134398.00 90897.00 134387.00 90897.00C134398.00 90907.67 134409.00 90918.33 134420.00 90929.00C134398.33 90939.67 134376.67 90950.33 134355.00 90961.00C134355.00 90982.33 134355.00 91003.67 134355.00 91025.00C134344.33 91025.00 134333.67 91025.00 134323.00 91025.00C134312.33 91046.66 134301.67 91068.34 134291.00 91090.00C134291.00 91100.67 134291.00 91111.33 134291.00 91122.00C134280.33 91122.00 134269.67 91122.00 134259.00 91122.00C134259.00 91143.33 134259.00 91164.67 134259.00 91186.00C134226.67 91196.67 134194.33 91207.33 134162.00 91218.00C134162.00 91196.67 134162.00 91175.33 134162.00 91154.00C134151.33 91164.66 134140.67 91175.34 134130.00 91186.00C134130.00 91164.67 134130.00 91143.33 134130.00 91122.00C134108.67 91122.00 134087.33 91122.00 134066.00 91122.00C134055.33 91143.33 134044.67 91164.67 134034.00 91186.00C134012.33 91196.67 133990.67 91207.33 133969.00 91218.00C133947.67 91239.67 133926.33 91261.33 133905.00 91283.00C133905.00 91293.67 133905.00 91304.33 133905.00 91315.00C133873.00 91325.67 133841.00 91336.33 133809.00 91347.00C133798.00 91368.33 133787.00 91389.67 133776.00 91411.00C133754.67 91411.00 133733.33 91411.00 133712.00 91411.00C133690.67 91432.67 133669.33 91454.33 133648.00 91476.00C133648.00 91486.67 133648.00 91497.33 133648.00 91508.00C133637.33 91508.00 133626.67 91508.00 133616.00 91508.00C133616.00 91497.33 133616.00 91486.67 133616.00 91476.00C133583.67 91476.00 133551.33 91476.00 133519.00 91476.00C133519.00 91508.00 133519.00 91540.00 133519.00 91572.00C133497.67 91572.00 133476.33 91572.00 133455.00 91572.00C133433.67 91582.67 133412.33 91593.33 133391.00 91604.00C133380.33 91604.00 133369.67 91604.00 133359.00 91604.00C133347.88 91614.69 133336.94 91625.58 133325.70 91636.15C133304.47 91647.10 133283.23 91658.05 133262.00 91669.00C133251.33 91658.00 133240.67 91647.00 133230.00 91636.00C133230.00 91647.00 133230.00 91658.00 133230.00 91669.00C133208.67 91669.00 133187.33 91669.00 133166.00 91669.00C133166.00 91690.33 133166.00 91711.67 133166.00 91733.00C133155.00 91743.67 133144.00 91754.33 133133.00 91765.00C133133.00 91754.33 133133.00 91743.67 133133.00 91733.00C133122.33 91722.34 133111.67 91711.66 133101.00 91701.00C133090.33 91711.66 133079.67 91722.34 133069.00 91733.00C133069.00 91743.67 133069.00 91754.33 133069.00 91765.00C133058.33 91765.00 133047.67 91765.00 133037.00 91765.00C133037.00 91743.67 133037.00 91722.33 133037.00 91701.00C133026.33 91711.66 133015.67 91722.34 133005.00 91733.00C132983.33 91733.00 132961.67 91733.00 132940.00 91733.00C132918.67 91754.34 132897.33 91775.66 132876.00 91797.00C132886.67 91797.00 132897.33 91797.00 132908.00 91797.00C132908.00 91818.33 132908.00 91839.67 132908.00 91861.00C132886.67 91872.00 132865.33 91883.00 132844.00 91894.00C132822.67 91883.00 132801.33 91872.00 132780.00 91861.00C132769.33 91872.00 132758.67 91883.00 132748.00 91894.00C132726.33 91883.00 132704.67 91872.00 132683.00 91861.00C132693.67 91850.34 132704.33 91839.66 132715.00 91829.00C132704.33 91818.34 132693.67 91807.66 132683.00 91797.00C132661.67 91807.67 132640.33 91818.33 132619.00 91829.00C132597.67 91818.33 132576.33 91807.67 132555.00 91797.00C132544.33 91807.66 132533.67 91818.34 132523.00 91829.00C132501.33 91829.00 132479.67 91829.00 132458.00 91829.00C132458.00 91839.67 132458.00 91850.33 132458.00 91861.00C132426.00 91872.00 132394.00 91883.00 132362.00 91894.00C132372.67 91926.00 132383.33 91958.00 132394.00 91990.00C132383.33 92000.66 132372.67 92011.34 132362.00 92022.00C132340.33 92022.00 132318.67 92022.00 132297.00 92022.00C132297.00 92043.67 132297.00 92065.33 132297.00 92087.00C132286.33 92087.00 132275.67 92087.00 132265.00 92087.00C132254.33 92108.33 132243.67 92129.67 132233.00 92151.00C132211.67 92151.00 132190.33 92151.00 132169.00 92151.00C132179.67 92140.34 132190.33 92129.66 132201.00 92119.00C132190.33 92119.00 132179.67 92119.00 132169.00 92119.00C132169.00 92108.33 132169.00 92097.67 132169.00 92087.00C132136.67 92087.00 132104.33 92087.00 132072.00 92087.00C132061.33 92097.66 132050.67 92108.34 132040.00 92119.00C132008.00 92108.33 131976.00 92097.67 131944.00 92087.00C131922.33 92087.00 131900.67 92087.00 131879.00 92087.00C131847.06 92054.61 131815.28 92022.06 131783.00 91990.00C131772.33 92011.33 131761.67 92032.67 131751.00 92054.00C131740.33 92054.00 131729.67 92054.00 131719.00 92054.00C131708.33 92065.00 131697.67 92076.00 131687.00 92087.00C131687.00 92108.33 131687.00 92129.67 131687.00 92151.00C131654.67 92161.67 131622.33 92172.33 131590.00 92183.00C131579.33 92215.00 131568.67 92247.00 131558.00 92279.00C131547.33 92279.00 131536.67 92279.00 131526.00 92279.00C131515.33 92268.34 131504.67 92257.66 131494.00 92247.00C131494.00 92225.67 131494.00 92204.33 131494.00 92183.00C131461.67 92151.00 131429.33 92119.00 131397.00 92087.00C131407.67 92076.00 131418.33 92065.00 131429.00 92054.00C131461.33 92043.33 131493.67 92032.67 131526.00 92022.00C131515.21 92011.31 131504.62 92000.42 131493.70 91989.85C131472.13 91979.24 131450.57 91968.62 131429.00 91958.00C131407.67 91968.67 131386.33 91979.33 131365.00 91990.00C131322.00 91979.33 131279.00 91968.67 131236.00 91958.00C131236.00 91936.67 131236.00 91915.33 131236.00 91894.00C131257.67 91851.00 131279.33 91808.00 131301.00 91765.00C131279.33 91765.00 131257.67 91765.00 131236.00 91765.00C131214.67 91775.67 131193.33 91786.33 131172.00 91797.00C131161.33 91797.00 131150.67 91797.00 131140.00 91797.00C131118.67 91786.33 131097.33 91775.67 131076.00 91765.00C131065.00 91765.00 131054.00 91765.00 131043.00 91765.00C131021.67 91775.67 131000.33 91786.33 130979.00 91797.00C130947.00 91786.33 130915.00 91775.67 130883.00 91765.00C130872.33 91711.33 130861.67 91657.67 130851.00 91604.00C130861.67 91561.33 130872.33 91518.67 130883.00 91476.00C130872.33 91465.00 130861.67 91454.00 130851.00 91443.00C130818.67 91443.00 130786.33 91443.00 130754.00 91443.00C130711.00 91421.67 130668.00 91400.33 130625.00 91379.00C130614.33 91389.66 130603.67 91400.34 130593.00 91411.00C130582.33 91400.34 130571.67 91389.66 130561.00 91379.00C130550.33 91400.33 130539.67 91421.67 130529.00 91443.00C130518.33 91454.00 130507.67 91465.00 130497.00 91476.00C130497.00 91486.67 130497.00 91497.33 130497.00 91508.00C130486.33 91508.00 130475.67 91508.00 130465.00 91508.00C130475.67 91518.66 130486.33 91529.34 130497.00 91540.00C130497.00 91561.33 130497.00 91582.67 130497.00 91604.00C130486.33 91604.00 130475.67 91604.00 130465.00 91604.00C130465.00 91614.67 130465.00 91625.33 130465.00 91636.00C130454.33 91647.00 130443.67 91658.00 130433.00 91669.00C130411.33 91679.67 130389.67 91690.33 130368.00 91701.00C130400.33 91711.67 130432.67 91722.33 130465.00 91733.00C130454.33 91754.33 130443.67 91775.67 130433.00 91797.00C130422.00 91807.67 130411.00 91818.33 130400.00 91829.00C130411.00 91829.00 130422.00 91829.00 130433.00 91829.00C130422.00 91839.67 130411.00 91850.33 130400.00 91861.00C130411.00 91872.00 130422.00 91883.00 130433.00 91894.00C130422.00 91894.00 130411.00 91894.00 130400.00 91894.00C130400.00 91904.67 130400.00 91915.33 130400.00 91926.00C130421.67 91936.67 130443.33 91947.33 130465.00 91958.00C130465.00 91968.67 130465.00 91979.33 130465.00 91990.00C130454.33 92000.66 130443.67 92011.34 130433.00 92022.00C130454.33 92032.67 130475.67 92043.33 130497.00 92054.00C130497.00 92065.00 130497.00 92076.00 130497.00 92087.00C130507.67 92108.33 130518.33 92129.67 130529.00 92151.00C130507.67 92172.34 130486.33 92193.66 130465.00 92215.00C130454.33 92215.00 130443.67 92215.00 130433.00 92215.00C130433.00 92258.00 130433.00 92301.00 130433.00 92344.00C130443.67 92365.33 130454.33 92386.67 130465.00 92408.00C130454.33 92418.66 130443.67 92429.34 130433.00 92440.00C130443.67 92472.33 130454.33 92504.67 130465.00 92537.00C130465.00 92558.33 130465.00 92579.67 130465.00 92601.00C130486.33 92622.34 130507.67 92643.66 130529.00 92665.00C130550.33 92665.00 130571.67 92665.00 130593.00 92665.00C130593.00 92697.33 130593.00 92729.67 130593.00 92762.00C130582.33 92772.66 130571.67 92783.34 130561.00 92794.00C130550.33 92794.00 130539.67 92794.00 130529.00 92794.00C130518.33 92815.33 130507.67 92836.67 130497.00 92858.00C130486.31 92868.79 130475.41 92879.38 130464.85 92890.30C130454.23 92911.87 130443.62 92933.43 130433.00 92955.00C130421.98 92965.79 130410.74 92976.38 130399.85 92987.30C130389.16 93008.91 130378.08 93030.36 130367.64 93052.07C130357.09 93084.05 130346.55 93116.02 130336.00 93148.00C130143.00 92933.67 129950.00 92719.33 129757.00 92505.00C129757.00 92494.00 129757.00 92483.00 129757.00 92472.00C129725.00 92450.67 129693.00 92429.33 129661.00 92408.00C129628.67 92418.67 129596.33 92429.33 129564.00 92440.00C129532.00 92429.33 129500.00 92418.67 129468.00 92408.00C129457.33 92418.66 129446.67 92429.34 129436.00 92440.00C129414.67 92440.00 129393.33 92440.00 129372.00 92440.00C129361.00 92429.33 129350.00 92418.67 129339.00 92408.00C129339.00 92397.33 129339.00 92386.67 129339.00 92376.00C129328.33 92386.66 129317.67 92397.34 129307.00 92408.00C129296.33 92408.00 129285.67 92408.00 129275.00 92408.00C129275.00 92386.67 129275.00 92365.33 129275.00 92344.00C129264.33 92333.34 129253.67 92322.66 129243.00 92312.00C129232.33 92312.00 129221.67 92312.00 129211.00 92312.00C129211.00 92322.67 129211.00 92333.33 129211.00 92344.00C129211.00 92333.33 129211.00 92322.67 129211.00 92312.00C129189.33 92312.00 129167.67 92312.00 129146.00 92312.00C129135.33 92301.00 129124.67 92290.00 129114.00 92279.00C129103.33 92311.33 129092.67 92343.67 129082.00 92376.00C129060.67 92376.00 129039.33 92376.00 129018.00 92376.00C129007.33 92386.66 128996.67 92397.34 128986.00 92408.00C128975.00 92397.33 128964.00 92386.67 128953.00 92376.00C128953.00 92365.33 128953.00 92354.67 128953.00 92344.00C128942.33 92333.34 128931.67 92322.66 128921.00 92312.00C128910.33 92279.67 128899.67 92247.33 128889.00 92215.00C128867.67 92215.00 128846.33 92215.00 128825.00 92215.00C128792.67 92225.67 128760.33 92236.33 128728.00 92247.00C128717.33 92225.67 128706.67 92204.33 128696.00 92183.00C128685.33 92193.66 128674.67 92204.34 128664.00 92215.00C128664.00 92204.33 128664.00 92193.67 128664.00 92183.00C128674.67 92172.34 128685.33 92161.66 128696.00 92151.00C128685.33 92140.34 128674.67 92129.66 128664.00 92119.00C128632.00 92119.00 128600.00 92119.00 128568.00 92119.00C128568.00 92086.67 128568.00 92054.33 128568.00 92022.00C128557.33 92032.66 128546.67 92043.34 128536.00 92054.00C128536.00 92043.33 128536.00 92032.67 128536.00 92022.00C128514.33 92032.67 128492.67 92043.33 128471.00 92054.00C128471.00 92043.33 128471.00 92032.67 128471.00 92022.00C128460.33 92032.66 128449.67 92043.34 128439.00 92054.00C128449.67 92097.00 128460.33 92140.00 128471.00 92183.00C128460.33 92183.00 128449.67 92183.00 128439.00 92183.00C128439.00 92215.00 128439.00 92247.00 128439.00 92279.00C128417.67 92279.00 128396.33 92279.00 128375.00 92279.00C128364.33 92290.00 128353.67 92301.00 128343.00 92312.00C128332.00 92301.00 128321.00 92290.00 128310.00 92279.00C128299.33 92290.00 128288.67 92301.00 128278.00 92312.00C128267.33 92301.00 128256.67 92290.00 128246.00 92279.00C128246.00 92290.00 128246.00 92301.00 128246.00 92312.00C128214.00 92322.67 128182.00 92333.33 128150.00 92344.00C128139.00 92354.67 128128.00 92365.33 128117.00 92376.00C128106.33 92365.34 128095.67 92354.66 128085.00 92344.00C128085.00 92354.67 128085.00 92365.33 128085.00 92376.00C128074.33 92365.34 128063.67 92354.66 128053.00 92344.00C128042.33 92354.66 128031.67 92365.34 128021.00 92376.00C128021.00 92365.33 128021.00 92354.67 128021.00 92344.00C128042.33 92311.66 128063.67 92279.34 128085.00 92247.00C128085.00 92193.67 128085.00 92140.33 128085.00 92087.00C128074.33 92087.00 128063.67 92087.00 128053.00 92087.00C128042.33 92076.00 128031.67 92065.00 128021.00 92054.00C128021.00 92043.33 128021.00 92032.67 128021.00 92022.00C128042.33 92000.66 128063.67 91979.34 128085.00 91958.00C128074.33 91936.67 128063.67 91915.33 128053.00 91894.00C128053.00 91851.00 128053.00 91808.00 128053.00 91765.00C128063.67 91754.34 128074.33 91743.66 128085.00 91733.00C128085.00 91711.67 128085.00 91690.33 128085.00 91669.00C128095.67 91658.00 128106.33 91647.00 128117.00 91636.00C128117.00 91625.33 128117.00 91614.67 128117.00 91604.00C128106.33 91614.66 128095.67 91625.34 128085.00 91636.00C128074.33 91636.00 128063.67 91636.00 128053.00 91636.00C128031.67 91625.33 128010.33 91614.67 127989.00 91604.00C127978.33 91614.66 127967.67 91625.34 127957.00 91636.00C127946.33 91636.00 127935.67 91636.00 127925.00 91636.00C127914.00 91647.00 127903.00 91658.00 127892.00 91669.00C127892.00 91679.67 127892.00 91690.33 127892.00 91701.00C127870.67 91711.67 127849.33 91722.33 127828.00 91733.00C127817.33 91722.34 127806.67 91711.66 127796.00 91701.00C127785.33 91711.66 127774.67 91722.34 127764.00 91733.00C127753.33 91722.34 127742.67 91711.66 127732.00 91701.00C127721.33 91722.33 127710.67 91743.67 127700.00 91765.00C127689.00 91765.00 127678.00 91765.00 127667.00 91765.00C127667.00 91775.67 127667.00 91786.33 127667.00 91797.00C127656.33 91807.66 127645.67 91818.34 127635.00 91829.00C127613.67 91829.00 127592.33 91829.00 127571.00 91829.00C127571.00 91839.67 127571.00 91850.33 127571.00 91861.00C127560.33 91861.00 127549.67 91861.00 127539.00 91861.00C127528.33 91872.00 127517.67 91883.00 127507.00 91894.00C127507.00 91872.33 127507.00 91850.67 127507.00 91829.00C127507.00 91839.67 127507.00 91850.33 127507.00 91861.00C127485.33 91861.00 127463.67 91861.00 127442.00 91861.00C127442.00 91893.33 127442.00 91925.67 127442.00 91958.00C127410.00 91968.67 127378.00 91979.33 127346.00 91990.00C127356.67 91990.00 127367.33 91990.00 127378.00 91990.00C127367.33 91990.00 127356.67 91990.00 127346.00 91990.00C127356.67 91990.00 127367.33 91990.00 127378.00 91990.00C127378.00 92000.67 127378.00 92011.33 127378.00 92022.00C127356.67 92022.00 127335.33 92022.00 127314.00 92022.00C127314.00 92011.33 127314.00 92000.67 127314.00 91990.00C127271.00 91990.00 127228.00 91990.00 127185.00 91990.00C127195.67 92000.66 127206.33 92011.34 127217.00 92022.00C127206.33 92032.66 127195.67 92043.34 127185.00 92054.00C127195.67 92065.00 127206.33 92076.00 127217.00 92087.00C127206.33 92087.00 127195.67 92087.00 127185.00 92087.00C127174.33 92076.00 127163.67 92065.00 127153.00 92054.00C127142.33 92054.00 127131.67 92054.00 127121.00 92054.00C127110.33 92065.00 127099.67 92076.00 127089.00 92087.00C127078.00 92087.00 127067.00 92087.00 127056.00 92087.00C127056.00 92097.67 127056.00 92108.33 127056.00 92119.00C127045.33 92119.00 127034.67 92119.00 127024.00 92119.00C127013.33 92140.33 127002.67 92161.67 126992.00 92183.00C126992.00 92172.33 126992.00 92161.67 126992.00 92151.00C126981.33 92161.66 126970.67 92172.34 126960.00 92183.00C126938.67 92183.00 126917.33 92183.00 126896.00 92183.00C126874.33 92193.67 126852.67 92204.33 126831.00 92215.00C126820.33 92204.34 126809.67 92193.66 126799.00 92183.00C126788.33 92193.66 126777.67 92204.34 126767.00 92215.00C126767.00 92236.33 126767.00 92257.67 126767.00 92279.00C126756.33 92290.00 126745.67 92301.00 126735.00 92312.00C126724.33 92290.34 126713.67 92268.66 126703.00 92247.00C126681.33 92247.00 126659.67 92247.00 126638.00 92247.00C126638.00 92215.00 126638.00 92183.00 126638.00 92151.00C126649.00 92151.00 126660.00 92151.00 126671.00 92151.00C126660.00 92140.33 126649.00 92129.67 126638.00 92119.00C126638.00 92108.33 126638.00 92097.67 126638.00 92087.00C126649.00 92087.00 126660.00 92087.00 126671.00 92087.00C126649.33 92076.00 126627.67 92065.00 126606.00 92054.00C126606.00 92043.33 126606.00 92032.67 126606.00 92022.00C126595.33 92022.00 126584.67 92022.00 126574.00 92022.00C126574.00 91968.33 126574.00 91914.67 126574.00 91861.00C126563.33 91850.34 126552.67 91839.66 126542.00 91829.00C126552.67 91818.34 126563.33 91807.66 126574.00 91797.00C126574.00 91754.33 126574.00 91711.67 126574.00 91669.00C126584.67 91669.00 126595.33 91669.00 126606.00 91669.00C126595.33 91636.67 126584.67 91604.33 126574.00 91572.00C126574.00 91561.33 126574.00 91550.67 126574.00 91540.00C126563.33 91529.34 126552.67 91518.66 126542.00 91508.00C126542.00 91529.33 126542.00 91550.67 126542.00 91572.00C126531.33 91572.00 126520.67 91572.00 126510.00 91572.00C126499.21 91561.31 126488.62 91550.42 126477.70 91539.85C126456.13 91529.24 126434.57 91518.62 126413.00 91508.00C126391.67 91529.34 126370.33 91550.66 126349.00 91572.00C126349.00 91615.00 126349.00 91658.00 126349.00 91701.00C126338.33 91722.33 126327.67 91743.67 126317.00 91765.00C126317.00 91775.67 126317.00 91786.33 126317.00 91797.00C126274.10 91818.53 126231.11 91839.88 126188.00 91861.00C126188.00 91893.33 126188.00 91925.67 126188.00 91958.00C126198.67 91968.66 126209.33 91979.34 126220.00 91990.00C126209.33 92000.66 126198.67 92011.34 126188.00 92022.00C126188.00 92054.33 126188.00 92086.67 126188.00 92119.00C126177.33 92151.00 126166.67 92183.00 126156.00 92215.00C126166.67 92225.66 126177.33 92236.34 126188.00 92247.00C126188.00 92279.33 126188.00 92311.67 126188.00 92344.00C126166.67 92365.34 126145.33 92386.66 126124.00 92408.00C126102.67 92408.00 126081.33 92408.00 126060.00 92408.00C126027.67 92376.00 125995.33 92344.00 125963.00 92312.00C125973.77 92289.85 125984.98 92267.90 125995.48 92245.62C126006.32 92214.08 126017.16 92182.54 126028.00 92151.00C126028.00 92140.33 126028.00 92129.67 126028.00 92119.00C126017.00 92108.33 126006.00 92097.67 125995.00 92087.00C125984.33 92065.34 125973.67 92043.66 125963.00 92022.00C125973.67 92022.00 125984.33 92022.00 125995.00 92022.00C126016.67 92000.67 126038.33 91979.33 126060.00 91958.00C126060.00 91904.33 126060.00 91850.67 126060.00 91797.00C126070.67 91797.00 126081.33 91797.00 126092.00 91797.00C126081.33 91786.34 126070.67 91775.66 126060.00 91765.00C126070.67 91754.34 126081.33 91743.66 126092.00 91733.00C126070.67 91722.33 126049.33 91711.67 126028.00 91701.00C126028.00 91679.33 126028.00 91657.67 126028.00 91636.00C126017.00 91625.33 126006.00 91614.67 125995.00 91604.00C126006.00 91604.00 126017.00 91604.00 126028.00 91604.00C126028.00 91593.33 126028.00 91582.67 126028.00 91572.00C126038.67 91572.00 126049.33 91572.00 126060.00 91572.00C126060.00 91550.67 126060.00 91529.33 126060.00 91508.00C126070.67 91497.34 126081.33 91486.66 126092.00 91476.00C126081.33 91443.67 126070.67 91411.33 126060.00 91379.00C126038.33 91379.00 126016.67 91379.00 125995.00 91379.00C126006.00 91368.33 126017.00 91357.67 126028.00 91347.00C126017.00 91325.67 126006.00 91304.33 125995.00 91283.00C125995.00 91272.33 125995.00 91261.67 125995.00 91251.00C125984.33 91251.00 125973.67 91251.00 125963.00 91251.00C125963.00 91218.67 125963.00 91186.33 125963.00 91154.00C125952.33 91154.00 125941.67 91154.00 125931.00 91154.00C125920.33 91143.34 125909.67 91132.66 125899.00 91122.00C125877.67 91122.00 125856.33 91122.00 125835.00 91122.00C125824.00 91089.67 125813.00 91057.33 125802.00 91025.00C125802.00 90993.00 125802.00 90961.00 125802.00 90929.00C125770.00 90929.00 125738.00 90929.00 125706.00 90929.00C125706.00 90918.33 125706.00 90907.67 125706.00 90897.00C125695.33 90886.34 125684.67 90875.66 125674.00 90865.00C125663.33 90875.66 125652.67 90886.34 125642.00 90897.00C125631.33 90875.67 125620.67 90854.33 125610.00 90833.00C125599.00 90833.00 125588.00 90833.00 125577.00 90833.00C125577.00 90854.33 125577.00 90875.67 125577.00 90897.00C125566.33 90897.00 125555.67 90897.00 125545.00 90897.00C125545.00 90886.33 125545.00 90875.67 125545.00 90865.00C125523.67 90865.00 125502.33 90865.00 125481.00 90865.00C125481.00 90875.67 125481.00 90886.33 125481.00 90897.00C125470.33 90886.34 125459.67 90875.66 125449.00 90865.00C125438.33 90875.66 125427.67 90886.34 125417.00 90897.00C125406.00 90875.67 125395.00 90854.33 125384.00 90833.00C125373.33 90833.00 125362.67 90833.00 125352.00 90833.00C125352.00 90779.33 125352.00 90725.67 125352.00 90672.00C125341.33 90650.34 125330.67 90628.66 125320.00 90607.00C125330.67 90585.67 125341.33 90564.33 125352.00 90543.00C125341.33 90521.67 125330.67 90500.33 125320.00 90479.00C125309.33 90479.00 125298.67 90479.00 125288.00 90479.00C125277.33 90457.67 125266.67 90436.33 125256.00 90415.00C125245.33 90415.00 125234.67 90415.00 125224.00 90415.00C125202.38 90392.43 125180.36 90370.23 125158.02 90348.37C125137.01 90327.58 125116.01 90306.79 125095.00 90286.00C125095.00 90296.67 125095.00 90307.33 125095.00 90318.00C125084.33 90318.00 125073.67 90318.00 125063.00 90318.00C125063.00 90296.67 125063.00 90275.33 125063.00 90254.00C125052.33 90254.00 125041.67 90254.00 125031.00 90254.00C125020.33 90243.34 125009.67 90232.66 124999.00 90222.00C124988.00 90222.00 124977.00 90222.00 124966.00 90222.00C124966.00 90211.33 124966.00 90200.67 124966.00 90190.00C124955.33 90179.00 124944.67 90168.00 124934.00 90157.00C124934.00 90146.33 124934.00 90135.67 124934.00 90125.00C124923.33 90125.00 124912.67 90125.00 124902.00 90125.00C124891.33 90114.34 124880.67 90103.66 124870.00 90093.00C124870.00 90103.67 124870.00 90114.33 124870.00 90125.00C124859.33 90125.00 124848.67 90125.00 124838.00 90125.00C124827.33 90114.34 124816.67 90103.66 124806.00 90093.00C124816.67 90071.67 124827.33 90050.33 124838.00 90029.00C124827.33 90018.34 124816.67 90007.66 124806.00 89997.00C124806.00 89975.33 124806.00 89953.67 124806.00 89932.00C124784.33 89932.00 124762.67 89932.00 124741.00 89932.00C124730.33 89921.34 124719.67 89910.66 124709.00 89900.00C124698.33 89910.66 124687.67 89921.34 124677.00 89932.00C124687.67 89942.66 124698.33 89953.34 124709.00 89964.00C124698.33 89964.00 124687.67 89964.00 124677.00 89964.00C124666.29 89975.11 124655.46 89986.10 124644.81 89997.28C124494.88 90222.19 124344.94 90447.10 124195.00 90672.00C124184.33 90650.34 124173.67 90628.66 124163.00 90607.00C124130.67 90585.66 124098.33 90564.34 124066.00 90543.00C124055.33 90521.67 124044.67 90500.33 124034.00 90479.00C124012.67 90457.66 123991.33 90436.34 123970.00 90415.00C123959.33 90415.00 123948.67 90415.00 123938.00 90415.00C123916.33 90425.67 123894.67 90436.33 123873.00 90447.00C123862.33 90447.00 123851.67 90447.00 123841.00 90447.00C123841.00 90436.33 123841.00 90425.67 123841.00 90415.00C123798.00 90415.00 123755.00 90415.00 123712.00 90415.00C123701.33 90393.34 123690.67 90371.66 123680.00 90350.00C123680.00 90339.33 123680.00 90328.67 123680.00 90318.00C123690.67 90318.00 123701.33 90318.00 123712.00 90318.00C123701.33 90307.34 123690.67 90296.66 123680.00 90286.00C123701.67 90264.67 123723.33 90243.33 123745.00 90222.00C123745.00 90200.33 123745.00 90178.67 123745.00 90157.00C123755.67 90146.34 123766.33 90135.66 123777.00 90125.00C123744.67 90125.00 123712.33 90125.00 123680.00 90125.00C123658.67 90103.66 123637.33 90082.34 123616.00 90061.00C123605.33 90061.00 123594.67 90061.00 123584.00 90061.00C123562.67 89986.00 123541.33 89911.00 123520.00 89836.00C123487.67 89857.34 123455.33 89878.66 123423.00 89900.00C123412.33 89932.33 123401.67 89964.67 123391.00 89997.00C123380.33 89997.00 123369.67 89997.00 123359.00 89997.00C123337.56 90018.38 123316.24 90039.88 123294.72 90061.18C123262.41 90082.55 123230.01 90103.78 123197.76 90125.24C123187.17 90135.83 123176.59 90146.41 123166.00 90157.00C123166.00 90178.67 123166.00 90200.33 123166.00 90222.00C123144.67 90232.67 123123.33 90243.33 123102.00 90254.00C123091.00 90264.67 123080.00 90275.33 123069.00 90286.00C123058.33 90275.34 123047.67 90264.66 123037.00 90254.00C123015.67 90275.34 122994.33 90296.66 122973.00 90318.00C122973.00 90328.67 122973.00 90339.33 122973.00 90350.00C122951.67 90360.67 122930.33 90371.33 122909.00 90382.00C122909.00 90414.33 122909.00 90446.67 122909.00 90479.00C122898.33 90500.33 122887.67 90521.67 122877.00 90543.00C122877.00 90553.67 122877.00 90564.33 122877.00 90575.00C122866.00 90575.00 122855.00 90575.00 122844.00 90575.00C122833.31 90585.79 122822.41 90596.38 122811.85 90607.30C122790.57 90650.20 122769.28 90693.10 122748.00 90736.00C122748.00 90746.67 122748.00 90757.33 122748.00 90768.00C122758.67 90768.00 122769.33 90768.00 122780.00 90768.00C122780.00 90789.67 122780.00 90811.33 122780.00 90833.00C122769.33 90833.00 122758.67 90833.00 122748.00 90833.00C122715.59 90886.42 122683.25 90939.88 122650.80 90993.27C122618.58 91036.39 122586.67 91079.77 122554.26 91122.74C122533.18 91143.83 122512.09 91164.91 122491.00 91186.00C122458.67 91250.34 122426.33 91314.66 122394.00 91379.00C122394.00 91389.67 122394.00 91400.33 122394.00 91411.00C122415.67 91421.67 122437.33 91432.33 122459.00 91443.00C122459.00 91464.67 122459.00 91486.33 122459.00 91508.00C122438.55 91547.47 122418.24 91587.01 122398.56 91626.88C122395.90 91631.83 122392.08 91636.86 122397.56 91641.30C122418.04 91671.87 122438.52 91702.44 122459.00 91733.00C122448.00 91754.33 122437.00 91775.67 122426.00 91797.00C122437.00 91818.33 122448.00 91839.67 122459.00 91861.00C122448.00 91882.67 122437.00 91904.33 122426.00 91926.00C122437.00 91958.00 122448.00 91990.00 122459.00 92022.00C122459.00 92054.33 122459.00 92086.67 122459.00 92119.00C122416.00 92151.00 122373.00 92183.00 122330.00 92215.00C121954.21 92000.47 121578.56 91785.69 121202.97 91570.80C120731.98 91292.54 120260.99 91014.27 119790.00 90736.00C119779.33 90725.34 119768.67 90714.66 119758.00 90704.00C119746.66 90703.77 119735.21 90704.46 119723.93 90703.65C119692.29 90693.10 119660.64 90682.55 119629.00 90672.00C119607.67 90672.00 119586.33 90672.00 119565.00 90672.00C119522.00 90639.67 119479.00 90607.33 119436.00 90575.00C119425.33 90585.66 119414.67 90596.34 119404.00 90607.00C119382.67 90585.66 119361.33 90564.34 119340.00 90543.00C119318.33 90532.33 119296.67 90521.67 119275.00 90511.00C119243.00 90521.67 119211.00 90532.33 119179.00 90543.00C119168.33 90543.00 119157.67 90543.00 119147.00 90543.00C119136.33 90521.67 119125.67 90500.33 119115.00 90479.00C119082.67 90479.00 119050.33 90479.00 119018.00 90479.00C119007.33 90457.67 118996.67 90436.33 118986.00 90415.00C118943.00 90415.00 118900.00 90415.00 118857.00 90415.00C118846.33 90425.66 118835.67 90436.34 118825.00 90447.00C118803.55 90436.33 118782.18 90425.48 118760.67 90414.92C118717.78 90403.95 118674.89 90392.97 118632.00 90382.00C118621.33 90371.34 118610.67 90360.66 118600.00 90350.00C118578.67 90360.67 118557.33 90371.33 118536.00 90382.00C118525.33 90371.34 118514.67 90360.66 118504.00 90350.00C118493.33 90350.00 118482.67 90350.00 118472.00 90350.00C118472.00 90360.67 118472.00 90371.33 118472.00 90382.00C118450.33 90371.33 118428.67 90360.67 118407.00 90350.00C118407.00 90339.33 118407.00 90328.67 118407.00 90318.00C118396.33 90318.00 118385.67 90318.00 118375.00 90318.00C118364.33 90296.67 118353.67 90275.33 118343.00 90254.00C118343.00 90264.67 118343.00 90275.33 118343.00 90286.00C118321.67 90275.33 118300.33 90264.67 118279.00 90254.00C118279.00 90232.67 118279.00 90211.33 118279.00 90190.00C118268.00 90190.00 118257.00 90190.00 118246.00 90190.00C118246.00 90179.00 118246.00 90168.00 118246.00 90157.00C118235.33 90168.00 118224.67 90179.00 118214.00 90190.00C118214.00 90179.00 118214.00 90168.00 118214.00 90157.00C118192.67 90157.00 118171.33 90157.00 118150.00 90157.00C118150.00 90146.33 118150.00 90135.67 118150.00 90125.00C118128.67 90125.00 118107.33 90125.00 118086.00 90125.00C118096.67 90125.00 118107.33 90125.00 118118.00 90125.00C118096.33 90114.33 118074.67 90103.67 118053.00 90093.00C118053.00 90103.67 118053.00 90114.33 118053.00 90125.00C118042.33 90114.34 118031.67 90103.66 118021.00 90093.00C118010.33 90093.00 117999.67 90093.00 117989.00 90093.00C117989.00 90082.33 117989.00 90071.67 117989.00 90061.00C117978.33 90071.66 117967.67 90082.34 117957.00 90093.00C117957.00 90071.67 117957.00 90050.33 117957.00 90029.00C117946.33 90029.00 117935.67 90029.00 117925.00 90029.00C117925.00 90018.33 117925.00 90007.67 117925.00 89997.00C117914.33 89997.00 117903.67 89997.00 117893.00 89997.00C117893.00 89975.33 117893.00 89953.67 117893.00 89932.00C117882.33 89921.34 117871.67 89910.66 117861.00 89900.00C117871.67 89878.67 117882.33 89857.33 117893.00 89836.00C117903.67 89825.34 117914.33 89814.66 117925.00 89804.00C117914.33 89782.34 117903.67 89760.66 117893.00 89739.00C117914.33 89717.66 117935.67 89696.34 117957.00 89675.00C117946.33 89664.34 117935.67 89653.66 117925.00 89643.00C117935.67 89632.34 117946.33 89621.66 117957.00 89611.00C117946.33 89611.00 117935.67 89611.00 117925.00 89611.00C117946.33 89600.33 117967.67 89589.67 117989.00 89579.00C117989.00 89546.67 117989.00 89514.33 117989.00 89482.00C117967.67 89471.33 117946.33 89460.67 117925.00 89450.00C117935.67 89439.34 117946.33 89428.66 117957.00 89418.00C117957.00 89407.33 117957.00 89396.67 117957.00 89386.00C117946.33 89364.34 117935.67 89342.66 117925.00 89321.00C117935.67 89310.34 117946.33 89299.66 117957.00 89289.00C117957.00 89310.67 117957.00 89332.33 117957.00 89354.00C117957.00 89343.00 117957.00 89332.00 117957.00 89321.00C117967.67 89321.00 117978.33 89321.00 117989.00 89321.00C117999.67 89332.00 118010.33 89343.00 118021.00 89354.00C118021.00 89332.33 118021.00 89310.67 118021.00 89289.00C118031.67 89299.66 118042.33 89310.34 118053.00 89321.00C118064.00 89321.00 118075.00 89321.00 118086.00 89321.00C118075.00 89310.33 118064.00 89299.67 118053.00 89289.00C118064.00 89267.67 118075.00 89246.33 118086.00 89225.00C118086.00 89214.33 118086.00 89203.67 118086.00 89193.00C118096.67 89171.34 118107.33 89149.66 118118.00 89128.00C118118.00 89117.33 118118.00 89106.67 118118.00 89096.00C118128.67 89074.67 118139.33 89053.33 118150.00 89032.00C118160.67 89042.66 118171.33 89053.34 118182.00 89064.00C118192.67 89053.34 118203.33 89042.66 118214.00 89032.00C118203.33 88989.00 118192.67 88946.00 118182.00 88903.00C118192.67 88871.00 118203.33 88839.00 118214.00 88807.00C118224.67 88807.00 118235.33 88807.00 118246.00 88807.00C118246.00 88817.67 118246.00 88828.33 118246.00 88839.00C118257.00 88839.00 118268.00 88839.00 118279.00 88839.00C118311.00 88817.67 118343.00 88796.33 118375.00 88775.00C118375.00 88764.33 118375.00 88753.67 118375.00 88743.00C118396.33 88743.00 118417.67 88743.00 118439.00 88743.00C118417.91 88721.09 118396.61 88699.39 118375.00 88678.00C118375.00 88688.67 118375.00 88699.33 118375.00 88710.00C118364.33 88721.00 118353.67 88732.00 118343.00 88743.00C118343.00 88721.33 118343.00 88699.67 118343.00 88678.00C118321.67 88667.33 118300.33 88656.67 118279.00 88646.00C118268.00 88624.67 118257.00 88603.33 118246.00 88582.00C118267.67 88560.67 118289.33 88539.33 118311.00 88518.00C118311.00 88464.33 118311.00 88410.67 118311.00 88357.00C118321.67 88357.00 118332.33 88357.00 118343.00 88357.00C118353.67 88346.34 118364.33 88335.66 118375.00 88325.00C118375.00 88303.33 118375.00 88281.67 118375.00 88260.00C118385.79 88249.31 118396.38 88238.42 118407.30 88227.85C118428.87 88217.24 118450.43 88206.62 118472.00 88196.00C118482.67 88185.34 118493.33 88174.66 118504.00 88164.00C118504.00 88153.33 118504.00 88142.67 118504.00 88132.00C118525.33 88132.00 118546.67 88132.00 118568.00 88132.00C118568.00 88121.00 118568.00 88110.00 118568.00 88099.00C118578.67 88099.00 118589.33 88099.00 118600.00 88099.00C118600.00 88067.00 118600.00 88035.00 118600.00 88003.00C118621.33 87971.00 118642.67 87939.00 118664.00 87907.00C118621.33 87928.33 118578.67 87949.67 118536.00 87971.00C118536.00 87992.33 118536.00 88013.67 118536.00 88035.00C118525.33 88045.66 118514.67 88056.34 118504.00 88067.00C118493.33 88067.00 118482.67 88067.00 118472.00 88067.00C118461.00 88056.33 118450.00 88045.67 118439.00 88035.00C118439.00 88024.33 118439.00 88013.67 118439.00 88003.00C118428.33 88003.00 118417.67 88003.00 118407.00 88003.00C118407.00 88013.67 118407.00 88024.33 118407.00 88035.00C118428.67 88045.67 118450.33 88056.33 118472.00 88067.00C118472.00 88077.67 118472.00 88088.33 118472.00 88099.00C118450.33 88099.00 118428.67 88099.00 118407.00 88099.00C118385.67 88110.00 118364.33 88121.00 118343.00 88132.00C118332.33 88132.00 118321.67 88132.00 118311.00 88132.00C118332.33 88142.67 118353.67 88153.33 118375.00 88164.00C118343.00 88164.00 118311.00 88164.00 118279.00 88164.00C118268.00 88185.33 118257.00 88206.67 118246.00 88228.00C118214.00 88228.00 118182.00 88228.00 118150.00 88228.00C118139.33 88260.33 118128.67 88292.67 118118.00 88325.00C118075.00 88325.00 118032.00 88325.00 117989.00 88325.00C117989.00 88335.67 117989.00 88346.33 117989.00 88357.00C117946.33 88378.33 117903.67 88399.67 117861.00 88421.00C117850.00 88431.67 117839.00 88442.33 117828.00 88453.00C117828.00 88463.67 117828.00 88474.33 117828.00 88485.00C117839.00 88496.00 117850.00 88507.00 117861.00 88518.00C117861.00 88528.67 117861.00 88539.33 117861.00 88550.00C117839.33 88539.33 117817.67 88528.67 117796.00 88518.00C117785.33 88518.00 117774.67 88518.00 117764.00 88518.00C117774.67 88539.33 117785.33 88560.67 117796.00 88582.00C117785.33 88592.66 117774.67 88603.34 117764.00 88614.00C117742.67 88603.33 117721.33 88592.67 117700.00 88582.00C117700.00 88603.33 117700.00 88624.67 117700.00 88646.00C117667.67 88646.00 117635.33 88646.00 117603.00 88646.00C117614.00 88656.67 117625.00 88667.33 117636.00 88678.00C117625.00 88688.67 117614.00 88699.33 117603.00 88710.00C117603.00 88742.33 117603.00 88774.67 117603.00 88807.00C117581.67 88807.00 117560.33 88807.00 117539.00 88807.00C117517.67 88849.67 117496.33 88892.33 117475.00 88935.00C117485.67 88935.00 117496.33 88935.00 117507.00 88935.00C117496.33 88946.00 117485.67 88957.00 117475.00 88968.00C117453.33 88978.67 117431.67 88989.33 117410.00 89000.00C117399.33 89010.66 117388.67 89021.34 117378.00 89032.00C117388.67 89064.00 117399.33 89096.00 117410.00 89128.00C117399.33 89139.00 117388.67 89150.00 117378.00 89161.00C117356.67 89150.00 117335.33 89139.00 117314.00 89128.00C117292.67 89149.67 117271.33 89171.33 117250.00 89193.00C117260.67 89193.00 117271.33 89193.00 117282.00 89193.00C117282.00 89182.33 117282.00 89171.67 117282.00 89161.00C117292.67 89161.00 117303.33 89161.00 117314.00 89161.00C117314.00 89171.67 117314.00 89182.33 117314.00 89193.00C117303.33 89203.66 117292.67 89214.34 117282.00 89225.00C117292.67 89235.66 117303.33 89246.34 117314.00 89257.00C117303.33 89267.66 117292.67 89278.34 117282.00 89289.00C117292.67 89310.66 117303.33 89332.34 117314.00 89354.00C117303.33 89364.66 117292.67 89375.34 117282.00 89386.00C117239.00 89386.00 117196.00 89386.00 117153.00 89386.00C117153.00 89396.67 117153.00 89407.33 117153.00 89418.00C117131.67 89428.67 117110.33 89439.33 117089.00 89450.00C117089.00 89460.67 117089.00 89471.33 117089.00 89482.00C117110.33 89503.34 117131.67 89524.66 117153.00 89546.00C117142.21 89557.02 117131.63 89568.26 117120.70 89579.15C117099.47 89589.77 117078.23 89600.38 117057.00 89611.00C117057.00 89632.33 117057.00 89653.67 117057.00 89675.00C117078.33 89675.00 117099.67 89675.00 117121.00 89675.00C117110.33 89685.66 117099.67 89696.34 117089.00 89707.00C117089.00 89728.33 117089.00 89749.67 117089.00 89771.00C117078.33 89771.00 117067.67 89771.00 117057.00 89771.00C117046.33 89792.66 117035.67 89814.34 117025.00 89836.00C117035.67 89878.67 117046.33 89921.33 117057.00 89964.00C117046.33 89964.00 117035.67 89964.00 117025.00 89964.00C117014.00 89975.00 117003.00 89986.00 116992.00 89997.00C117003.00 90007.67 117014.00 90018.33 117025.00 90029.00C117013.67 90050.75 117002.71 90072.71 116991.13 90094.31C116970.09 90126.21 116949.04 90158.10 116928.00 90190.00C116928.00 90168.33 116928.00 90146.67 116928.00 90125.00C116917.33 90103.67 116906.67 90082.33 116896.00 90061.00C116874.67 90071.67 116853.33 90082.33 116832.00 90093.00C116778.33 90093.00 116724.67 90093.00 116671.00 90093.00C116617.33 90071.67 116563.67 90050.33 116510.00 90029.00C116510.00 90018.33 116510.00 90007.67 116510.00 89997.00C116542.33 89975.33 116574.67 89953.67 116607.00 89932.00C116607.00 89921.33 116607.00 89910.67 116607.00 89900.00C116564.00 89900.00 116521.00 89900.00 116478.00 89900.00C116467.33 89932.33 116456.67 89964.67 116446.00 89997.00C116435.33 89997.00 116424.67 89997.00 116414.00 89997.00C116403.33 89986.00 116392.67 89975.00 116382.00 89964.00C116382.00 89942.67 116382.00 89921.33 116382.00 89900.00C116403.33 89857.00 116424.67 89814.00 116446.00 89771.00C116413.67 89771.00 116381.33 89771.00 116349.00 89771.00C116360.00 89749.67 116371.00 89728.33 116382.00 89707.00C116382.00 89664.33 116382.00 89621.67 116382.00 89579.00C116360.33 89557.34 116338.67 89535.66 116317.00 89514.00C116327.67 89482.00 116338.33 89450.00 116349.00 89418.00C116327.67 89418.00 116306.33 89418.00 116285.00 89418.00C116274.33 89375.00 116263.67 89332.00 116253.00 89289.00C116263.67 89267.67 116274.33 89246.33 116285.00 89225.00C116285.00 89203.67 116285.00 89182.33 116285.00 89161.00C116274.33 89150.00 116263.67 89139.00 116253.00 89128.00C116178.00 89139.00 116103.00 89150.00 116028.00 89161.00C116028.00 89118.00 116028.00 89075.00 116028.00 89032.00C116017.33 89010.67 116006.67 88989.33 115996.00 88968.00C116006.67 88946.34 116017.33 88924.66 116028.00 88903.00C116038.67 88892.34 116049.33 88881.66 116060.00 88871.00C116092.00 88881.67 116124.00 88892.33 116156.00 88903.00C116167.00 88903.00 116178.00 88903.00 116189.00 88903.00C116189.00 88881.67 116189.00 88860.33 116189.00 88839.00C116156.67 88817.66 116124.33 88796.34 116092.00 88775.00C116102.67 88742.67 116113.33 88710.33 116124.00 88678.00C116145.67 88656.67 116167.33 88635.33 116189.00 88614.00C116199.67 88560.33 116210.33 88506.67 116221.00 88453.00C116242.33 88421.00 116263.67 88389.00 116285.00 88357.00C116274.33 88314.00 116263.67 88271.00 116253.00 88228.00C116274.33 88217.33 116295.67 88206.67 116317.00 88196.00C116338.67 88206.67 116360.33 88217.33 116382.00 88228.00C116382.20 88216.90 116381.57 88205.72 116382.33 88194.67C116392.89 88152.11 116403.44 88109.56 116414.00 88067.00C116392.33 88056.33 116370.67 88045.67 116349.00 88035.00C116360.00 87981.33 116371.00 87927.67 116382.00 87874.00C116371.00 87842.00 116360.00 87810.00 116349.00 87778.00C116327.67 87746.00 116306.33 87714.00 116285.00 87682.00C116295.67 87649.67 116306.33 87617.33 116317.00 87585.00C116306.33 87574.34 116295.67 87563.66 116285.00 87553.00C116285.00 87510.00 116285.00 87467.00 116285.00 87424.00C116306.33 87402.66 116327.67 87381.34 116349.00 87360.00C116349.00 87338.67 116349.00 87317.33 116349.00 87296.00C116327.67 87263.66 116306.33 87231.34 116285.00 87199.00C116285.00 87156.33 116285.00 87113.67 116285.00 87071.00C116274.33 87060.00 116263.67 87049.00 116253.00 87038.00C116210.00 87049.00 116167.00 87060.00 116124.00 87071.00C116113.33 87038.67 116102.67 87006.33 116092.00 86974.00C116102.67 86952.67 116113.33 86931.33 116124.00 86910.00C116124.00 86856.33 116124.00 86802.67 116124.00 86749.00C116134.67 86727.67 116145.33 86706.33 116156.00 86685.00C116156.04 86652.56 116155.92 86620.11 116156.06 86587.67C116167.04 86523.45 116178.02 86459.22 116189.00 86395.00C116189.00 86363.00 116189.00 86331.00 116189.00 86299.00C116156.67 86266.66 116124.33 86234.34 116092.00 86202.00C116092.23 86190.99 116091.54 86179.87 116092.36 86168.93C116102.91 86137.29 116113.45 86105.65 116124.00 86074.00C116124.00 86063.33 116124.00 86052.67 116124.00 86042.00C116113.33 86031.34 116102.67 86020.66 116092.00 86010.00C116102.67 85988.34 116113.33 85966.66 116124.00 85945.00C116167.00 85902.33 116210.00 85859.67 116253.00 85817.00C116253.00 85784.67 116253.00 85752.33 116253.00 85720.00C116231.67 85688.00 116210.33 85656.00 116189.00 85624.00C116199.67 85602.34 116210.33 85580.66 116221.00 85559.00C116253.00 85548.33 116285.00 85537.67 116317.00 85527.00C116317.00 85495.00 116317.00 85463.00 116317.00 85431.00C116285.00 85398.67 116253.00 85366.33 116221.00 85334.00C116188.67 85334.00 116156.33 85334.00 116124.00 85334.00C116113.33 85323.34 116102.67 85312.66 116092.00 85302.00C116092.00 85248.33 116092.00 85194.67 116092.00 85141.00C116070.67 85098.33 116049.33 85055.67 116028.00 85013.00C116017.33 84959.33 116006.67 84905.67 115996.00 84852.00C115974.78 84809.33 115953.27 84766.80 115931.71 84724.30C115930.11 84718.43 115931.43 84711.95 115931.00 84705.84C115932.05 84700.15 115928.54 84692.56 115933.52 84688.50C115986.34 84636.00 116039.37 84583.70 116092.00 84531.00C116113.33 84520.00 116134.67 84509.00 116156.00 84498.00C116167.00 84476.67 116178.00 84455.33 116189.00 84434.00C116199.67 84423.34 116210.33 84412.66 116221.00 84402.00C116221.00 84359.00 116221.00 84316.00 116221.00 84273.00C116210.33 84241.00 116199.67 84209.00 116189.00 84177.00C116199.67 84155.67 116210.33 84134.33 116221.00 84113.00C116221.00 84070.00 116221.00 84027.00 116221.00 83984.00C116210.33 83973.34 116199.67 83962.66 116189.00 83952.00C116156.67 83952.00 116124.33 83952.00 116092.00 83952.00C116049.33 83941.33 116006.67 83930.67 115964.00 83920.00C115953.00 83920.00 115942.00 83920.00 115931.00 83920.00C115899.00 83855.67 115867.00 83791.33 115835.00 83727.00C115845.67 83684.00 115856.33 83641.00 115867.00 83598.00C115856.33 83576.67 115845.67 83555.33 115835.00 83534.00C115835.00 83437.33 115835.00 83340.67 115835.00 83244.00z"},"br-11":{"name":"Mato Grosso","path":"M64261.00 72698.00C64261.00 72666.00 64261.00 72634.00 64261.00 72602.00C64314.67 72602.00 64368.33 72602.00 64422.00 72602.00C64432.67 72580.33 64443.33 72558.67 64454.00 72537.00C64475.33 72526.33 64496.67 72515.67 64518.00 72505.00C64550.33 72505.00 64582.67 72505.00 64615.00 72505.00C64647.00 72515.67 64679.00 72526.33 64711.00 72537.00C64721.67 72548.00 64732.33 72559.00 64743.00 72570.00C64754.00 72559.00 64765.00 72548.00 64776.00 72537.00C64765.00 72515.67 64754.00 72494.33 64743.00 72473.00C64753.96 72419.15 64765.21 72365.35 64776.00 72311.46C64776.00 72279.64 64776.00 72247.82 64776.00 72216.00C64765.00 72205.33 64754.00 72194.67 64743.00 72184.00C64732.33 72151.67 64721.67 72119.33 64711.00 72087.00C64699.92 72075.44 64687.80 72064.79 64677.42 72052.62C64656.61 72021.41 64635.81 71990.21 64615.00 71959.00C64615.00 71894.67 64615.00 71830.33 64615.00 71766.00C64625.67 71733.67 64636.33 71701.33 64647.00 71669.00C64657.03 71667.70 64672.29 71671.62 64679.00 71667.00C64679.00 71646.33 64679.00 71625.67 64679.00 71605.00C64700.33 71583.67 64721.67 71562.33 64743.00 71541.00C64743.00 71508.67 64743.00 71476.33 64743.00 71444.00C64754.61 71411.06 64765.20 71377.71 64777.47 71345.03C64819.65 71260.02 64861.82 71175.01 64904.00 71090.00C64918.51 71074.86 64934.82 71061.27 64946.72 71043.85C64975.48 71005.90 65004.24 70967.95 65033.00 70930.00C65011.33 70908.33 64989.67 70886.67 64968.00 70865.00C64957.33 70833.00 64946.67 70801.00 64936.00 70769.00C64904.00 70736.67 64872.00 70704.33 64840.00 70672.00C64829.33 70629.33 64818.67 70586.67 64808.00 70544.00C64797.33 70533.33 64786.67 70522.67 64776.00 70512.00C64776.00 70490.33 64776.00 70468.67 64776.00 70447.00C64743.67 70447.00 64711.33 70447.00 64679.00 70447.00C64636.00 70425.67 64593.00 70404.33 64550.00 70383.00C64538.65 70381.23 64524.31 70386.69 64515.00 70380.00C64505.33 70370.33 64495.67 70360.67 64486.00 70351.00C66322.68 70351.10 68159.36 70350.81 69996.03 70351.14C70882.40 70361.76 71768.77 70372.43 72655.14 70383.00C74798.47 70382.92 76941.81 70383.17 79085.13 70382.88C79181.09 70372.25 79277.04 70361.63 79373.00 70351.00C79394.33 70340.33 79415.67 70329.67 79437.00 70319.00C79469.33 70319.00 79501.67 70319.00 79534.00 70319.00C79607.74 70243.49 79683.09 70169.58 79757.80 70095.03C79769.57 70083.65 79780.79 70071.59 79792.96 70060.68C79825.02 70038.91 79857.69 70017.90 79889.37 69995.63C79899.58 69985.42 79909.79 69975.21 79920.00 69965.00C79918.65 69954.42 79922.69 69940.50 79917.98 69932.00C79875.66 69911.00 79833.33 69890.00 79791.00 69869.00C79748.14 69879.62 79705.37 69890.59 79662.46 69901.00C79650.60 69902.02 79637.81 69898.88 79626.53 69902.73C79585.02 69923.49 79543.51 69944.24 79502.00 69965.00C79469.67 69954.33 79437.33 69943.67 79405.00 69933.00C79394.33 69922.33 79383.67 69911.67 79373.00 69901.00C79416.79 69802.89 79460.09 69704.55 79504.20 69606.58C79514.34 69585.86 79525.27 69565.48 79534.83 69544.50C79545.23 69513.33 79555.61 69482.17 79566.00 69451.00C79576.67 69440.00 79587.33 69429.00 79598.00 69418.00C79598.00 69396.67 79598.00 69375.33 79598.00 69354.00C79587.16 69332.57 79576.72 69310.93 79565.62 69289.62C79544.41 69268.41 79523.21 69247.21 79502.00 69226.00C79512.63 69182.81 79523.58 69139.71 79534.00 69096.46C79534.00 69075.31 79534.00 69054.15 79534.00 69033.00C79523.15 69010.46 79511.47 68988.28 79501.17 68965.50C79490.77 68934.33 79480.39 68903.17 79470.00 68872.00C79491.33 68829.00 79512.67 68786.00 79534.00 68743.00C79545.08 68731.44 79557.21 68720.78 79567.59 68708.61C79588.80 68676.36 79610.85 68644.62 79631.51 68612.03C79642.14 68591.23 79652.54 68570.30 79663.33 68549.58C79705.89 68496.39 79748.45 68443.19 79791.00 68390.00C79791.00 68368.33 79791.00 68346.67 79791.00 68325.00C79801.67 68303.67 79812.33 68282.33 79823.00 68261.00C79812.33 68239.67 79801.67 68218.33 79791.00 68197.00C79801.67 68175.33 79812.33 68153.67 79823.00 68132.00C79866.00 68110.67 79909.00 68089.33 79952.00 68068.00C79962.67 68057.33 79973.33 68046.67 79984.00 68036.00C79973.33 68003.67 79962.67 67971.33 79952.00 67939.00C79941.33 67928.33 79930.67 67917.67 79920.00 67907.00C79920.00 67885.67 79920.00 67864.33 79920.00 67843.00C79930.67 67821.67 79941.33 67800.33 79952.00 67779.00C79941.33 67714.67 79930.67 67650.33 79920.00 67586.00C79941.33 67553.67 79962.67 67521.33 79984.00 67489.00C79962.67 67424.67 79941.33 67360.33 79920.00 67296.00C79930.67 67264.00 79941.33 67232.00 79952.00 67200.00C79994.67 67178.67 80037.33 67157.33 80080.00 67136.00C80091.00 67114.33 80102.00 67092.67 80113.00 67071.00C80102.00 67039.00 80091.00 67007.00 80080.00 66975.00C80091.00 66942.67 80102.00 66910.33 80113.00 66878.00C80095.56 66844.27 80078.68 66810.23 80059.27 66777.56C80023.51 66714.71 79987.76 66651.85 79952.00 66589.00C79941.33 66557.00 79930.67 66525.00 79920.00 66493.00C79919.91 66471.16 79920.17 66449.32 79919.87 66427.48C79909.25 66384.99 79898.62 66342.49 79888.00 66300.00C79855.31 66256.23 79822.03 66212.86 79789.71 66168.83C79758.14 66115.89 79726.57 66062.94 79695.00 66010.00C79695.00 65935.00 79695.00 65860.00 79695.00 65785.00C79673.33 65763.67 79651.67 65742.33 79630.00 65721.00C79630.00 65699.67 79630.00 65678.33 79630.00 65657.00C79640.91 65655.64 79655.20 65659.72 79664.00 65654.97C79674.33 65633.98 79684.67 65612.99 79695.00 65592.00C79759.33 65560.00 79823.67 65528.00 79888.00 65496.00C79941.33 65442.33 79994.67 65388.67 80048.00 65335.00C80069.67 65303.00 80091.33 65271.00 80113.00 65239.00C80113.00 65174.67 80113.00 65110.33 80113.00 65046.00C80165.56 64991.34 80220.10 64938.62 80273.24 64884.52C80294.82 64841.68 80316.41 64798.84 80338.00 64756.00C80391.67 64702.33 80445.33 64648.67 80499.00 64595.00C80499.00 64563.00 80499.00 64531.00 80499.00 64499.00C80488.01 64477.47 80476.67 64456.12 80465.90 64434.47C80454.63 64378.82 80444.15 64323.00 80432.38 64267.45C80422.25 64226.64 80412.13 64185.82 80402.00 64145.00C80423.43 64038.02 80444.77 63931.02 80466.00 63824.00C80519.67 63716.67 80573.33 63609.33 80627.00 63502.00C80685.74 63443.29 80745.17 63385.26 80803.43 63326.08C80808.96 63320.39 80814.48 63314.69 80820.00 63309.00C80820.69 63299.07 80818.63 63284.68 80821.02 63277.51C80843.41 63289.02 80866.36 63299.51 80888.36 63311.73C80972.57 63364.49 81056.79 63417.24 81141.00 63470.00C81184.42 63553.12 81225.09 63637.63 81267.02 63721.50C81278.68 63745.00 81290.34 63768.50 81302.00 63792.00C81355.67 63845.33 81409.33 63898.67 81463.00 63952.00C81506.04 64027.18 81549.26 64102.26 81592.20 64177.50C81634.80 64284.66 81677.40 64391.83 81720.00 64499.00C81720.17 64515.21 81719.04 64531.54 81722.35 64547.55C81732.24 64617.03 81742.12 64686.51 81752.00 64756.00C81763.00 64766.67 81774.00 64777.33 81785.00 64788.00C81806.33 64788.00 81827.67 64788.00 81849.00 64788.00C81870.33 64799.00 81891.67 64810.00 81913.00 64821.00C81923.65 64842.53 81934.68 64863.88 81945.08 64885.53C81968.16 65032.94 81990.62 65180.45 82014.11 65327.79C82023.41 65383.86 82032.70 65439.93 82042.00 65496.00C82095.67 65592.33 82149.33 65688.67 82203.00 65785.00C82213.64 65817.52 82224.60 65849.95 82235.05 65882.53C82245.68 66000.20 82256.45 66117.86 82267.00 66235.54C82267.00 66267.69 82267.00 66299.85 82267.00 66332.00C82310.00 66374.67 82353.00 66417.33 82396.00 66460.00C82438.67 66546.00 82481.33 66632.00 82524.00 66718.00C82599.00 66782.00 82674.00 66846.00 82749.00 66910.00C82759.67 66996.00 82770.33 67082.00 82781.00 67168.00C82791.85 67189.43 82802.27 67211.07 82813.38 67232.37C82824.26 67242.91 82835.13 67253.46 82846.00 67264.00C82889.12 67275.03 82932.56 67285.13 82975.49 67296.75C82996.66 67307.50 83017.83 67318.25 83039.00 67329.00C83071.00 67382.33 83103.00 67435.67 83135.00 67489.00C83135.00 67521.33 83135.00 67553.67 83135.00 67586.00C83113.66 67639.52 83092.08 67692.94 83070.90 67746.52C83060.26 67800.02 83049.63 67853.51 83039.00 67907.00C83017.33 67939.33 82995.67 67971.67 82974.00 68004.00C82974.00 68036.00 82974.00 68068.00 82974.00 68100.00C82995.67 68143.00 83017.33 68186.00 83039.00 68229.00C83039.00 68250.33 83039.00 68271.67 83039.00 68293.00C83006.67 68346.67 82974.33 68400.33 82942.00 68454.00C82942.85 68466.27 82940.15 68479.11 82943.66 68490.98C82953.77 68521.32 82963.89 68551.66 82974.00 68582.00C83017.00 68635.67 83060.00 68689.33 83103.00 68743.00C83103.00 68764.67 83103.00 68786.33 83103.00 68808.00C83092.33 68829.33 83081.67 68850.67 83071.00 68872.00C83072.80 68882.91 83067.27 68897.74 83074.01 68906.01C83105.40 68927.21 83137.37 68947.66 83168.37 68969.37C83178.58 68979.58 83188.79 68989.79 83199.00 69000.00C83188.33 69032.33 83177.67 69064.67 83167.00 69097.00C83145.67 69118.33 83124.33 69139.67 83103.00 69161.00C83113.67 69193.33 83124.33 69225.67 83135.00 69258.00C83136.34 69268.59 83132.31 69282.49 83137.01 69291.01C83179.24 69312.21 83221.57 69333.20 83264.00 69354.00C83253.33 69429.00 83242.67 69504.00 83232.00 69579.00C83243.08 69590.57 83255.22 69601.21 83265.58 69613.40C83286.38 69644.93 83307.19 69676.46 83328.00 69708.00C83349.33 69772.33 83370.67 69836.67 83392.00 69901.00C83381.33 69954.67 83370.67 70008.33 83360.00 70062.00C83370.67 70094.00 83381.33 70126.00 83392.00 70158.00C83435.00 70158.00 83478.00 70158.00 83521.00 70158.00C83574.67 70136.67 83628.33 70115.33 83682.00 70094.00C83757.75 70137.26 83833.81 70180.02 83909.37 70223.61C83940.58 70244.74 83971.79 70265.87 84003.00 70287.00C84056.67 70287.00 84110.33 70287.00 84164.00 70287.00C84185.33 70308.33 84206.67 70329.67 84228.00 70351.00C84227.91 70393.84 84228.17 70436.68 84227.87 70479.52C84217.25 70522.35 84206.62 70565.17 84196.00 70608.00C84207.26 70618.79 84217.68 70630.65 84229.49 70640.74C84250.77 70651.33 84272.24 70661.52 84293.38 70672.38C84325.25 70704.59 84357.13 70736.79 84389.00 70769.00C84442.84 70769.07 84496.68 70768.86 84550.52 70769.10C84604.02 70779.74 84657.51 70790.37 84711.00 70801.00C84721.67 70833.33 84732.33 70865.67 84743.00 70898.00C84753.67 70908.67 84764.33 70919.33 84775.00 70930.00C84796.92 70929.77 84818.90 70930.46 84840.78 70929.65C84893.85 70919.10 84946.93 70908.55 85000.00 70898.00C85010.67 70887.00 85021.33 70876.00 85032.00 70865.00C85054.23 70876.17 85076.02 70888.29 85098.53 70898.84C85130.64 70909.63 85163.03 70919.68 85194.95 70930.98C85215.74 70941.48 85236.72 70951.61 85257.38 70962.38C85272.91 70978.20 85289.54 70993.07 85302.69 71011.04C85384.13 71112.36 85465.56 71213.68 85547.00 71315.00C85611.00 71347.33 85675.00 71379.67 85739.00 71412.00C85750.14 71444.13 85760.94 71476.39 85772.29 71508.45C85793.53 71540.63 85814.76 71572.82 85836.00 71605.00C85857.33 71615.67 85878.67 71626.33 85900.00 71637.00C85900.00 71669.33 85900.00 71701.67 85900.00 71734.00C85921.67 71744.67 85943.33 71755.33 85965.00 71766.00C85975.67 71787.33 85986.33 71808.67 85997.00 71830.00C85997.00 71851.33 85997.00 71872.67 85997.00 71894.00C85964.67 71937.00 85932.33 71980.00 85900.00 72023.00C85910.67 72055.00 85921.33 72087.00 85932.00 72119.00C85921.33 72140.67 85910.67 72162.33 85900.00 72184.00C85902.10 72195.93 85895.27 72211.55 85904.51 72220.54C85935.11 72251.26 85966.13 72281.56 85997.00 72312.00C86007.67 72333.67 86018.33 72355.33 86029.00 72377.00C86093.28 72409.10 86157.45 72441.44 86222.00 72473.00C86286.33 72462.33 86350.67 72451.67 86415.00 72441.00C86436.33 72451.67 86457.67 72462.33 86479.00 72473.00C86575.51 72483.65 86672.01 72494.45 86768.54 72505.00C86780.40 72503.99 86793.18 72507.11 86804.46 72503.27C86824.64 72493.18 86844.82 72483.09 86865.00 72473.00C86886.52 72483.68 86907.91 72494.63 86929.52 72505.13C86972.35 72515.75 87015.17 72526.38 87058.00 72537.00C87079.42 72569.89 87101.66 72602.33 87122.57 72635.50C87154.71 72720.67 87186.86 72805.83 87219.00 72891.00C87229.09 72892.16 87243.83 72888.67 87251.00 72892.76C87251.00 72967.17 87251.00 73041.59 87251.00 73116.00C87261.67 73137.33 87272.33 73158.67 87283.00 73180.00C87283.00 73201.67 87283.00 73223.33 87283.00 73245.00C87293.67 73266.33 87304.33 73287.67 87315.00 73309.00C87327.29 73308.15 87340.15 73310.86 87352.05 73307.32C87382.85 73297.10 87413.73 73287.17 87444.45 73276.70C87476.30 73255.47 87508.15 73234.23 87540.00 73213.00C87541.01 73202.50 87537.99 73187.99 87541.51 73180.00C87573.18 73179.92 87604.85 73180.17 87636.52 73179.87C87679.35 73169.25 87722.17 73158.62 87765.00 73148.00C88388.45 73201.72 89011.88 73255.84 89635.35 73309.31C89816.43 73319.94 89997.52 73330.43 90178.60 73341.15C90757.45 73394.81 91336.28 73448.56 91915.13 73502.16C93170.23 73598.68 94425.36 73694.81 95680.43 73791.56C96097.56 73834.38 96514.66 73877.55 96931.80 73920.16C97124.58 73930.84 97317.36 73941.39 97510.13 73952.17C98318.52 74017.65 99126.88 74083.54 99935.29 74148.76C100762.25 74213.11 101589.17 74277.90 102416.14 74341.97C103570.31 74428.27 104724.48 74514.63 105878.70 74600.15C106143.48 74619.72 106408.23 74639.68 106673.02 74659.00C106758.37 74659.05 106843.72 74658.90 106929.07 74659.08C107514.56 74702.48 108100.04 74746.20 108685.55 74789.40C109934.98 74874.85 111184.43 74959.94 112433.85 75045.60C112678.43 75067.08 112923.01 75088.70 113167.60 75110.09C113561.94 75132.01 113956.31 75153.43 114350.63 75175.66C114704.20 75197.78 115057.80 75219.37 115411.34 75241.85C116367.23 75304.90 117323.11 75367.95 118279.00 75431.00C118279.00 75452.33 118279.00 75473.67 118279.00 75495.00C118246.67 75527.34 118214.33 75559.66 118182.00 75592.00C118150.00 75656.33 118118.00 75720.67 118086.00 75785.00C118086.00 75827.67 118086.00 75870.33 118086.00 75913.00C118064.33 75945.33 118042.67 75977.67 118021.00 76010.00C118021.00 76031.33 118021.00 76052.67 118021.00 76074.00C117999.67 76106.34 117978.33 76138.66 117957.00 76171.00C117957.00 76213.67 117957.00 76256.33 117957.00 76299.00C117946.33 76331.33 117935.67 76363.67 117925.00 76396.00C117903.67 76417.34 117882.33 76438.66 117861.00 76460.00C117818.00 76481.33 117775.00 76502.67 117732.00 76524.00C117710.67 76545.67 117689.33 76567.33 117668.00 76589.00C117657.33 76621.00 117646.67 76653.00 117636.00 76685.00C117614.33 76706.33 117592.67 76727.67 117571.00 76749.00C117549.67 76792.00 117528.33 76835.00 117507.00 76878.00C117496.37 76931.85 117485.46 76985.65 117475.00 77039.54C117476.30 77049.39 117472.38 77064.46 117477.00 77071.00C117486.59 77072.15 117500.20 77068.68 117507.25 77072.76C117517.84 77147.17 117528.41 77221.59 117539.00 77296.00C117517.66 77349.85 117496.09 77403.61 117474.90 77457.52C117464.16 77511.17 117453.71 77564.88 117442.79 77618.49C117410.53 77693.33 117378.26 77768.16 117346.00 77843.00C117346.84 77855.27 117344.15 77868.11 117347.66 77879.98C117357.77 77910.32 117367.89 77940.66 117378.00 77971.00C117366.45 77982.09 117355.76 77994.18 117343.62 78004.61C117312.42 78025.74 117281.21 78046.87 117250.00 78068.00C117239.00 78089.33 117228.00 78110.67 117217.00 78132.00C117174.33 78153.33 117131.67 78174.67 117089.00 78196.00C117067.67 78303.33 117046.33 78410.67 117025.00 78518.00C117035.67 78550.00 117046.33 78582.00 117057.00 78614.00C117046.33 78624.66 117035.67 78635.34 117025.00 78646.00C117012.40 78646.89 116999.19 78644.07 116987.01 78647.71C116956.68 78658.14 116926.34 78668.57 116896.00 78679.00C116896.00 78711.00 116896.00 78743.00 116896.00 78775.00C116885.33 78807.00 116874.67 78839.00 116864.00 78871.00C116874.67 78903.33 116885.33 78935.67 116896.00 78968.00C116874.67 79000.00 116853.33 79032.00 116832.00 79064.00C116821.33 79096.33 116810.67 79128.67 116800.00 79161.00C116789.00 79171.67 116778.00 79182.33 116767.00 79193.00C116735.00 79193.00 116703.00 79193.00 116671.00 79193.00C116659.71 79215.08 116649.22 79237.61 116637.39 79259.40C116616.11 79291.04 116595.05 79322.83 116573.62 79354.38C116541.75 79386.26 116509.87 79418.12 116478.00 79450.00C116478.00 79471.67 116478.00 79493.33 116478.00 79515.00C116510.00 79536.33 116542.00 79557.67 116574.00 79579.00C116574.00 79611.00 116574.00 79643.00 116574.00 79675.00C116585.00 79696.67 116596.00 79718.33 116607.00 79740.00C116607.11 79761.50 116606.77 79783.01 116607.17 79804.51C116617.78 79836.34 116628.39 79868.17 116639.00 79900.00C116606.67 79953.67 116574.33 80007.33 116542.00 80061.00C116542.00 80093.33 116542.00 80125.67 116542.00 80158.00C116520.67 80158.00 116499.33 80158.00 116478.00 80158.00C116467.33 80168.66 116456.67 80179.34 116446.00 80190.00C116444.99 80201.71 116448.11 80214.34 116444.27 80225.46C116434.18 80245.64 116424.09 80265.82 116414.00 80286.00C116414.00 80339.67 116414.00 80393.33 116414.00 80447.00C116435.33 80457.67 116456.67 80468.33 116478.00 80479.00C116488.67 80500.33 116499.33 80521.67 116510.00 80543.00C116510.00 80564.67 116510.00 80586.33 116510.00 80608.00C116477.93 80640.17 116445.65 80672.15 116413.70 80704.45C116392.13 80736.63 116370.57 80768.82 116349.00 80801.00C116370.67 80854.67 116392.33 80908.33 116414.00 80962.00C116403.33 80983.33 116392.67 81004.67 116382.00 81026.00C116392.67 81058.00 116403.33 81090.00 116414.00 81122.00C116414.00 81165.00 116414.00 81208.00 116414.00 81251.00C116424.67 81272.33 116435.33 81293.67 116446.00 81315.00C116446.00 81358.00 116446.00 81401.00 116446.00 81444.00C116435.33 81465.33 116424.67 81486.67 116414.00 81508.00C116412.20 81518.92 116417.75 81533.76 116410.97 81542.03C116379.65 81563.02 116348.32 81584.01 116317.00 81605.00C116306.33 81637.00 116295.67 81669.00 116285.00 81701.00C116263.67 81711.67 116242.33 81722.33 116221.00 81733.00C116220.89 81754.84 116221.23 81776.67 116220.83 81798.51C116210.22 81830.34 116199.61 81862.17 116189.00 81894.00C116199.62 81937.19 116210.58 81980.29 116221.00 82023.54C116221.11 82044.86 116220.77 82066.19 116221.17 82087.51C116231.78 82119.34 116242.39 82151.17 116253.00 82183.00C116242.19 82227.55 116230.46 82271.90 116220.24 82316.57C116209.83 82379.38 116199.41 82442.19 116189.00 82505.00C116167.23 82515.84 116145.26 82526.28 116123.62 82537.38C116091.75 82569.26 116059.87 82601.12 116028.00 82633.00C116017.33 82654.66 116006.67 82676.34 115996.00 82698.00C115995.89 82719.50 115996.22 82741.01 115995.83 82762.51C115984.90 82795.14 115974.57 82828.00 115963.25 82860.47C115941.84 82902.65 115920.42 82944.83 115899.00 82987.00C115899.00 83030.00 115899.00 83073.00 115899.00 83116.00C115877.67 83158.67 115856.33 83201.33 115835.00 83244.00C115835.00 83340.67 115835.00 83437.33 115835.00 83534.00C115845.67 83555.33 115856.33 83576.67 115867.00 83598.00C115856.33 83641.00 115845.67 83684.00 115835.00 83727.00C115867.00 83791.33 115899.00 83855.67 115931.00 83920.00C115946.37 83920.56 115962.16 83918.09 115976.99 83923.23C116015.51 83932.83 116053.97 83942.64 116092.54 83952.00C116124.69 83952.00 116156.85 83952.00 116189.00 83952.00C116199.67 83962.66 116210.33 83973.34 116221.00 83984.00C116221.00 84027.00 116221.00 84070.00 116221.00 84113.00C116210.33 84134.33 116199.67 84155.67 116189.00 84177.00C116199.67 84209.00 116210.33 84241.00 116221.00 84273.00C116221.00 84316.00 116221.00 84359.00 116221.00 84402.00C116210.20 84413.25 116198.39 84423.70 116188.24 84435.47C116177.50 84456.32 116166.75 84477.16 116156.00 84498.00C116134.56 84509.17 116112.93 84519.96 116091.62 84531.38C116038.28 84584.79 115984.53 84637.78 115931.00 84691.00C115932.03 84702.71 115928.85 84715.39 115932.77 84726.48C115954.04 84768.22 115975.12 84810.06 115996.00 84852.00C116006.67 84905.67 116017.33 84959.33 116028.00 85013.00C116049.33 85055.67 116070.67 85098.33 116092.00 85141.00C116092.00 85194.67 116092.00 85248.33 116092.00 85302.00C116102.67 85312.66 116113.33 85323.34 116124.00 85334.00C116156.33 85334.00 116188.67 85334.00 116221.00 85334.00C116253.00 85366.33 116285.00 85398.67 116317.00 85431.00C116317.00 85463.00 116317.00 85495.00 116317.00 85527.00C116285.00 85537.67 116253.00 85548.33 116221.00 85559.00C116210.33 85580.66 116199.67 85602.34 116189.00 85624.00C116210.33 85656.00 116231.67 85688.00 116253.00 85720.00C116253.00 85752.33 116253.00 85784.67 116253.00 85817.00C116210.00 85859.67 116167.00 85902.33 116124.00 85945.00C116113.33 85966.66 116102.67 85988.34 116092.00 86010.00C116102.67 86020.66 116113.33 86031.34 116124.00 86042.00C116123.16 86054.27 116125.85 86067.11 116122.34 86078.98C116112.23 86109.32 116102.11 86139.66 116092.00 86170.00C116093.48 86181.12 116089.01 86194.71 116094.27 86204.27C116125.85 86235.85 116157.43 86267.42 116189.00 86299.00C116188.78 86331.67 116189.45 86364.40 116188.65 86397.04C116177.80 86460.87 116166.71 86524.67 116156.00 86588.54C116156.00 86620.69 116156.00 86652.85 116156.00 86685.00C116145.33 86706.33 116134.67 86727.67 116124.00 86749.00C116124.00 86802.67 116124.00 86856.33 116124.00 86910.00C116113.33 86931.33 116102.67 86952.67 116092.00 86974.00C116102.67 87006.33 116113.33 87038.67 116124.00 87071.00C116167.00 87060.00 116210.00 87049.00 116253.00 87038.00C116263.67 87049.00 116274.33 87060.00 116285.00 87071.00C116285.00 87113.67 116285.00 87156.33 116285.00 87199.00C116306.33 87231.34 116327.67 87263.66 116349.00 87296.00C116349.00 87317.33 116349.00 87338.67 116349.00 87360.00C116327.67 87381.34 116306.33 87402.66 116285.00 87424.00C116285.00 87467.00 116285.00 87510.00 116285.00 87553.00C116295.67 87563.66 116306.33 87574.34 116317.00 87585.00C116306.33 87617.33 116295.67 87649.67 116285.00 87682.00C116306.35 87714.19 116328.01 87746.18 116349.17 87778.51C116360.12 87810.34 116371.06 87842.17 116382.00 87874.00C116371.00 87927.67 116360.00 87981.33 116349.00 88035.00C116370.67 88045.67 116392.33 88056.33 116414.00 88067.00C116403.38 88110.19 116392.42 88153.29 116382.00 88196.54C116381.32 88206.30 116383.36 88220.46 116380.98 88227.50C116359.66 88217.00 116338.33 88206.50 116317.00 88196.00C116295.67 88206.67 116274.33 88217.33 116253.00 88228.00C116263.67 88271.00 116274.33 88314.00 116285.00 88357.00C116263.67 88389.00 116242.33 88421.00 116221.00 88453.00C116210.33 88506.67 116199.67 88560.33 116189.00 88614.00C116167.33 88635.33 116145.67 88656.67 116124.00 88678.00C116113.33 88710.33 116102.67 88742.67 116092.00 88775.00C116124.33 88796.34 116156.67 88817.66 116189.00 88839.00C116189.00 88860.33 116189.00 88881.67 116189.00 88903.00C116176.40 88902.14 116163.22 88904.87 116151.01 88901.34C116120.68 88891.23 116090.34 88881.11 116060.00 88871.00C116049.22 88882.26 116037.35 88892.67 116027.26 88904.49C116016.85 88925.66 116006.42 88946.83 115996.00 88968.00C116006.67 88989.33 116017.33 89010.67 116028.00 89032.00C116028.00 89075.00 116028.00 89118.00 116028.00 89161.00C116103.00 89150.00 116178.00 89139.00 116253.00 89128.00C116263.67 89139.00 116274.33 89150.00 116285.00 89161.00C116285.00 89182.33 116285.00 89203.67 116285.00 89225.00C116274.33 89246.33 116263.67 89267.67 116253.00 89289.00C116263.67 89332.00 116274.33 89375.00 116285.00 89418.00C116306.33 89418.00 116327.67 89418.00 116349.00 89418.00C116338.33 89450.00 116327.67 89482.00 116317.00 89514.00C116338.67 89535.66 116360.33 89557.34 116382.00 89579.00C116382.00 89621.67 116382.00 89664.33 116382.00 89707.00C116371.00 89728.33 116360.00 89749.67 116349.00 89771.00C116381.33 89771.00 116413.67 89771.00 116446.00 89771.00C116424.67 89814.00 116403.33 89857.00 116382.00 89900.00C116382.00 89921.33 116382.00 89942.67 116382.00 89964.00C116392.67 89975.00 116403.33 89986.00 116414.00 89997.00C116424.47 89995.99 116437.85 89999.02 116446.50 89995.48C116457.00 89963.66 116467.50 89931.83 116478.00 89900.00C116521.00 89900.00 116564.00 89900.00 116607.00 89900.00C116605.20 89910.92 116610.75 89925.76 116603.97 89934.03C116572.65 89955.02 116541.32 89976.01 116510.00 89997.00C116511.63 90007.46 116506.71 90022.37 116512.52 90030.00C116565.34 90051.00 116618.17 90072.00 116671.00 90093.00C116724.67 90093.00 116778.33 90093.00 116832.00 90093.00C116853.33 90082.33 116874.67 90071.67 116896.00 90061.00C116906.67 90082.33 116917.33 90103.67 116928.00 90125.00C116928.00 90146.67 116928.00 90168.33 116928.00 90190.00C116938.67 90211.33 116949.33 90232.67 116960.00 90254.00C116960.00 90275.33 116960.00 90296.67 116960.00 90318.00C116949.16 90340.22 116937.43 90362.04 116927.17 90384.52C116906.27 90448.07 116885.21 90511.56 116864.00 90575.00C116864.00 90639.33 116864.00 90703.67 116864.00 90768.00C116831.67 90778.67 116799.33 90789.33 116767.00 90800.00C116745.67 90832.34 116724.33 90864.66 116703.00 90897.00C116691.29 90895.99 116678.66 90899.11 116667.54 90895.27C116647.36 90885.18 116627.18 90875.09 116607.00 90865.00C116585.33 90875.67 116563.67 90886.33 116542.00 90897.00C116552.67 90929.00 116563.33 90961.00 116574.00 90993.00C116595.67 91003.67 116617.33 91014.33 116639.00 91025.00C116637.98 91037.04 116641.12 91050.01 116637.27 91061.46C116627.18 91081.64 116617.09 91101.82 116607.00 91122.00C116564.00 91132.67 116521.00 91143.33 116478.00 91154.00C116467.33 91164.66 116456.67 91175.34 116446.00 91186.00C116467.33 91229.00 116488.67 91272.00 116510.00 91315.00C116520.67 91325.66 116531.33 91336.34 116542.00 91347.00C116541.77 91368.92 116542.46 91390.90 116541.65 91412.78C116531.10 91465.85 116520.55 91518.93 116510.00 91572.00C116520.67 91615.00 116531.33 91658.00 116542.00 91701.00C116520.67 91743.67 116499.33 91786.33 116478.00 91829.00C116489.34 91830.79 116503.75 91825.26 116513.00 91832.05C116533.33 91852.70 116553.67 91873.35 116574.00 91894.00C116574.00 91958.33 116574.00 92022.67 116574.00 92087.00C116552.51 92119.10 116531.25 92151.37 116509.62 92183.38C116499.08 92193.92 116488.54 92204.46 116478.00 92215.00C116478.00 92268.67 116478.00 92322.33 116478.00 92376.00C116466.92 92387.57 116454.78 92398.21 116444.41 92410.40C116423.46 92442.05 116402.74 92473.84 116381.62 92505.38C116360.08 92526.59 116338.54 92547.79 116317.00 92569.00C116306.33 92590.33 116295.67 92611.67 116285.00 92633.00C116253.00 92654.33 116221.00 92675.67 116189.00 92697.00C116189.09 92740.17 116188.83 92783.35 116189.13 92826.52C116199.75 92869.35 116210.38 92912.17 116221.00 92955.00C116210.33 92976.33 116199.67 92997.67 116189.00 93019.00C116167.33 93029.67 116145.67 93040.33 116124.00 93051.00C116102.67 93094.00 116081.33 93137.00 116060.00 93180.00C116028.00 93212.00 115996.00 93244.00 115964.00 93276.00C115921.00 93297.67 115878.00 93319.33 115835.00 93341.00C115803.00 93383.67 115771.00 93426.33 115739.00 93469.00C115728.00 93576.33 115717.00 93683.67 115706.00 93791.00C115684.67 93823.00 115663.33 93855.00 115642.00 93887.00C115631.26 93940.83 115620.68 93994.70 115609.83 94048.51C115588.55 94112.67 115567.28 94176.84 115546.00 94241.00C115513.67 94283.67 115481.33 94326.33 115449.00 94369.00C115427.67 94358.33 115406.33 94347.67 115385.00 94337.00C115363.33 94347.67 115341.67 94358.33 115320.00 94369.00C115308.66 94370.83 115294.13 94365.17 115284.98 94372.14C115275.15 94382.63 115264.42 94392.45 115255.26 94403.47C115244.84 94424.31 115234.42 94445.16 115224.00 94466.00C115256.00 94508.67 115288.00 94551.33 115320.00 94594.00C115309.33 94647.67 115298.67 94701.33 115288.00 94755.00C115298.67 94776.66 115309.33 94798.34 115320.00 94820.00C115309.33 94852.00 115298.67 94884.00 115288.00 94916.00C115309.67 94959.00 115331.33 95002.00 115353.00 95045.00C115353.00 95184.33 115353.00 95323.67 115353.00 95463.00C115320.67 95495.00 115288.33 95527.00 115256.00 95559.00C115256.00 95591.33 115256.00 95623.67 115256.00 95656.00C115277.33 95688.00 115298.67 95720.00 115320.00 95752.00C115320.00 95795.00 115320.00 95838.00 115320.00 95881.00C115352.33 95956.00 115384.67 96031.00 115417.00 96106.00C115405.92 96138.62 115395.59 96171.51 115384.03 96203.94C115373.68 96224.63 115363.35 96245.32 115353.00 96266.00C115310.00 96298.33 115267.00 96330.67 115224.00 96363.00C115192.00 96363.00 115160.00 96363.00 115128.00 96363.00C115106.33 96341.67 115084.67 96320.33 115063.00 96299.00C115041.67 96299.00 115020.33 96299.00 114999.00 96299.00C114999.09 96320.51 114998.83 96342.01 114999.13 96363.52C115009.71 96406.20 115020.63 96448.80 115031.00 96491.54C115031.00 96523.69 115031.00 96555.85 115031.00 96588.00C115009.67 96609.34 114988.33 96630.66 114967.00 96652.00C114913.87 96759.80 114859.68 96867.07 114805.83 96974.51C114784.24 97039.13 114763.22 97103.99 114741.26 97168.47C114730.84 97189.31 114720.42 97210.16 114710.00 97231.00C114720.67 97284.67 114731.33 97338.33 114742.00 97392.00C114731.33 97424.00 114720.67 97456.00 114710.00 97488.00C114688.33 97498.67 114666.67 97509.33 114645.00 97520.00C114655.62 97563.19 114666.58 97606.29 114677.00 97649.54C114676.01 97661.08 114679.08 97673.53 114675.28 97684.50C114654.72 97726.43 114633.96 97768.26 114613.00 97810.00C114634.33 97842.00 114655.67 97874.00 114677.00 97906.00C114677.00 97927.67 114677.00 97949.33 114677.00 97971.00C114698.67 97992.33 114720.33 98013.67 114742.00 98035.00C114752.67 98056.33 114763.33 98077.67 114774.00 98099.00C114763.33 98131.33 114752.67 98163.67 114742.00 98196.00C114752.67 98238.67 114763.33 98281.33 114774.00 98324.00C114720.33 98410.00 114666.67 98496.00 114613.00 98582.00C114623.67 98635.33 114634.33 98688.67 114645.00 98742.00C114602.33 98827.66 114559.67 98913.34 114517.00 98999.00C114506.09 99000.36 114491.80 98996.28 114483.00 99001.03C114472.66 99022.02 114462.34 99043.01 114452.00 99064.00C114462.67 99096.00 114473.33 99128.00 114484.00 99160.00C114482.99 99171.73 114486.12 99184.38 114482.25 99195.52C114472.03 99216.13 114462.13 99236.91 114451.62 99257.38C114440.96 99268.51 114429.25 99278.81 114419.26 99290.48C114408.67 99311.43 114398.46 99332.56 114387.62 99353.38C114377.08 99363.92 114366.54 99374.46 114356.00 99385.00C114356.00 99417.33 114356.00 99449.67 114356.00 99482.00C114377.33 99514.00 114398.67 99546.00 114420.00 99578.00C114409.33 99599.66 114398.67 99621.34 114388.00 99643.00C114356.00 99664.33 114324.00 99685.67 114292.00 99707.00C114259.67 99760.67 114227.33 99814.33 114195.00 99868.00C114195.00 99921.33 114195.00 99974.67 114195.00 100028.00C114184.33 100060.33 114173.67 100092.67 114163.00 100125.00C114184.33 100146.33 114205.67 100167.67 114227.00 100189.00C114225.70 100199.03 114229.62 100214.29 114225.00 100221.00C114213.08 100222.66 114198.98 100217.09 114188.97 100225.03C114126.65 100266.69 114064.32 100308.34 114002.00 100350.00C113991.09 100351.79 113976.27 100346.28 113968.00 100353.00C113947.34 100384.00 113926.66 100415.00 113906.00 100446.00C113906.00 100478.33 113906.00 100510.67 113906.00 100543.00C113757.48 100627.33 113609.13 100711.97 113461.06 100797.10C113449.69 100803.39 113436.08 100804.11 113423.75 100808.00C113391.50 100816.00 113359.25 100824.00 113327.00 100832.00C113295.00 100821.33 113263.00 100810.67 113231.00 100800.00C113220.01 100778.47 113208.67 100757.12 113197.90 100735.48C113187.26 100681.99 113176.63 100628.49 113166.00 100575.00C113134.00 100553.67 113102.00 100532.33 113070.00 100511.00C113048.33 100511.00 113026.67 100511.00 113005.00 100511.00C112994.16 100532.44 112983.71 100554.07 112972.62 100575.38C112951.24 100596.66 112930.05 100618.14 112908.56 100639.30C112876.71 100660.87 112844.85 100682.43 112813.00 100704.00C112780.67 100682.33 112748.33 100660.67 112716.00 100639.00C112673.00 100649.67 112630.00 100660.33 112587.00 100671.00C112565.67 100714.00 112544.33 100757.00 112523.00 100800.00C112501.67 100800.00 112480.33 100800.00 112459.00 100800.00C112448.16 100821.44 112437.71 100843.07 112426.62 100864.38C112405.08 100885.92 112383.54 100907.46 112362.00 100929.00C112297.67 100918.33 112233.33 100907.67 112169.00 100897.00C112137.00 100929.00 112105.00 100961.00 112073.00 100993.00C112051.67 101046.67 112030.33 101100.33 112009.00 101154.00C111966.00 101164.67 111923.00 101175.33 111880.00 101186.00C111848.00 101261.00 111816.00 101336.00 111784.00 101411.00C111773.00 101421.67 111762.00 101432.33 111751.00 101443.00C111708.33 101443.00 111665.67 101443.00 111623.00 101443.00C111590.67 101464.33 111558.33 101485.67 111526.00 101507.00C111526.00 101550.00 111526.00 101593.00 111526.00 101636.00C111504.67 101668.33 111483.33 101700.67 111462.00 101733.00C111462.00 101765.00 111462.00 101797.00 111462.00 101829.00C111472.67 101850.33 111483.33 101871.67 111494.00 101893.00C111515.67 101903.67 111537.33 101914.33 111559.00 101925.00C111557.16 101936.23 111562.81 101951.50 111555.94 101960.01C111523.60 101981.08 111491.75 102002.97 111459.07 102023.47C111438.72 102033.65 111418.35 102043.82 111398.00 102054.00C111387.33 102086.33 111376.67 102118.67 111366.00 102151.00C111366.00 102204.33 111366.00 102257.67 111366.00 102311.00C111387.33 102332.67 111408.67 102354.33 111430.00 102376.00C111430.00 102397.33 111430.00 102418.67 111430.00 102440.00C111387.00 102504.33 111344.00 102568.67 111301.00 102633.00C111302.01 102644.71 111298.89 102657.34 111302.73 102668.46C111312.82 102688.64 111322.91 102708.82 111333.00 102729.00C111331.45 102741.02 111336.38 102754.98 111330.00 102765.55C111309.67 102796.36 111289.33 102827.18 111269.00 102858.00C111279.67 102890.00 111290.33 102922.00 111301.00 102954.00C111301.00 102975.67 111301.00 102997.33 111301.00 103019.00C111290.33 103029.67 111279.67 103040.33 111269.00 103051.00C111237.00 103061.67 111205.00 103072.33 111173.00 103083.00C111162.33 103104.33 111151.67 103125.67 111141.00 103147.00C111141.84 103159.29 111139.17 103172.14 111142.66 103184.03C111152.77 103214.69 111162.89 103245.34 111173.00 103276.00C111173.00 103297.33 111173.00 103318.67 111173.00 103340.00C111130.00 103340.00 111087.00 103340.00 111044.00 103340.00C111033.33 103308.00 111022.67 103276.00 111012.00 103244.00C110990.67 103244.00 110969.33 103244.00 110948.00 103244.00C110946.70 103254.03 110950.62 103269.29 110946.00 103276.00C110936.90 103277.04 110921.98 103273.91 110916.53 103277.58C110932.57 103325.38 110947.75 103373.49 110966.05 103420.50C110992.03 103490.33 111018.01 103560.17 111044.00 103630.00C111043.89 103651.50 111044.23 103673.01 111043.83 103694.51C111033.22 103726.34 111022.61 103758.17 111012.00 103790.00C111001.16 103801.29 110989.31 103811.78 110979.11 103823.60C110925.74 103919.73 110872.37 104015.87 110819.00 104112.00C110819.00 104133.33 110819.00 104154.67 110819.00 104176.00C110776.00 104197.33 110733.00 104218.67 110690.00 104240.00C110657.58 104294.70 110624.57 104349.06 110592.53 104403.97C110582.19 104424.76 110572.22 104445.73 110561.62 104466.38C110529.41 104498.25 110497.21 104530.13 110465.00 104562.00C110454.33 104594.00 110443.67 104626.00 110433.00 104658.00C110422.33 104669.00 110411.67 104680.00 110401.00 104691.00C110369.00 104658.67 110337.00 104626.33 110305.00 104594.00C110240.67 104594.00 110176.33 104594.00 110112.00 104594.00C110101.33 104615.33 110090.67 104636.67 110080.00 104658.00C110080.00 104690.33 110080.00 104722.67 110080.00 104755.00C110058.33 104744.33 110036.67 104733.67 110015.00 104723.00C109993.67 104733.67 109972.33 104744.33 109951.00 104755.00C109929.67 104808.67 109908.33 104862.33 109887.00 104916.00C109865.13 104926.64 109843.46 104937.69 109821.47 104948.08C109746.65 104958.72 109671.82 104969.36 109597.00 104980.00C109565.00 104969.33 109533.00 104958.67 109501.00 104948.00C109479.33 104948.00 109457.67 104948.00 109436.00 104948.00C109425.33 104958.67 109414.67 104969.33 109404.00 104980.00C109393.33 104969.33 109382.67 104958.67 109372.00 104948.00C109340.00 104969.33 109308.00 104990.67 109276.00 105012.00C109168.67 104990.67 109061.33 104969.33 108954.00 104948.00C108932.67 104958.67 108911.33 104969.33 108890.00 104980.00C108815.00 104980.00 108740.00 104980.00 108665.00 104980.00C108675.67 105012.00 108686.33 105044.00 108697.00 105076.00C108686.33 105119.00 108675.67 105162.00 108665.00 105205.00C108654.97 105206.30 108639.71 105202.38 108633.00 105207.00C108633.00 105227.67 108633.00 105248.33 108633.00 105269.00C108590.00 105301.33 108547.00 105333.67 108504.00 105366.00C108504.00 105398.00 108504.00 105430.00 108504.00 105462.00C108471.72 105494.06 108439.94 105526.61 108408.00 105559.00C108396.39 105591.93 108385.81 105625.27 108373.53 105657.93C108363.35 105678.28 108353.18 105698.65 108343.00 105719.00C108342.14 105731.60 108344.87 105744.78 108341.34 105756.99C108331.23 105787.32 108321.11 105817.66 108311.00 105848.00C108309.21 105858.92 108314.71 105873.72 108308.00 105882.03C108277.00 105903.02 108246.00 105924.01 108215.00 105945.00C108204.00 105934.00 108193.00 105923.00 108182.00 105912.00C108150.55 105944.88 108118.13 105976.79 108086.00 106009.00C108053.67 105998.33 108021.33 105987.67 107989.00 105977.00C107924.86 106009.12 107860.65 106041.08 107796.56 106073.30C107764.37 106094.87 107732.19 106116.43 107700.00 106138.00C107678.67 106138.00 107657.33 106138.00 107636.00 106138.00C107614.57 106148.84 107592.94 106159.30 107571.62 106170.37C107560.75 106180.92 107549.87 106191.46 107539.00 106202.00C107527.29 106200.99 107514.66 106204.11 107503.54 106200.27C107483.36 106190.18 107463.18 106180.09 107443.00 106170.00C107421.67 106180.67 107400.33 106191.33 107379.00 106202.00C107379.00 106234.00 107379.00 106266.00 107379.00 106298.00C107346.67 106308.67 107314.33 106319.33 107282.00 106330.00C107292.67 106351.67 107303.33 106373.33 107314.00 106395.00C107303.33 106416.33 107292.67 106437.67 107282.00 106459.00C107282.00 106512.67 107282.00 106566.33 107282.00 106620.00C107250.00 106620.00 107218.00 106620.00 107186.00 106620.00C107187.39 106631.46 107183.14 106644.79 107188.25 106655.02C107219.50 106697.02 107250.75 106739.01 107282.00 106781.00C107280.70 106791.03 107284.62 106806.29 107280.00 106813.00C107259.33 106813.00 107238.67 106813.00 107218.00 106813.00C107196.67 106791.33 107175.33 106769.67 107154.00 106748.00C107143.09 106749.36 107128.80 106745.28 107120.00 106750.03C107109.67 106771.02 107099.33 106792.01 107089.00 106813.00C107088.00 106823.17 107091.00 106837.33 107087.50 106845.00C107056.00 106845.00 107024.50 106845.00 106993.00 106845.00C106971.33 106866.33 106949.67 106887.67 106928.00 106909.00C106885.33 106909.00 106842.67 106909.00 106800.00 106909.00C106798.70 106898.97 106802.62 106883.71 106798.00 106877.00C106786.07 106878.64 106771.99 106873.12 106761.94 106881.00C106731.62 106901.00 106701.31 106921.00 106671.00 106941.00C106671.00 106962.67 106671.00 106984.33 106671.00 107006.00C106660.41 107007.93 106645.01 107002.09 106637.50 107009.00C106627.33 107029.33 106617.17 107049.67 106607.00 107070.00C106617.67 107080.67 106628.33 107091.33 106639.00 107102.00C106639.00 107134.33 106639.00 107166.67 106639.00 107199.00C106628.33 107209.67 106617.67 107220.33 106607.00 107231.00C106607.00 107263.00 106607.00 107295.00 106607.00 107327.00C106628.33 107348.33 106649.67 107369.67 106671.00 107391.00C106649.67 107402.00 106628.33 107413.00 106607.00 107424.00C106608.77 107435.35 106603.31 107449.69 106610.00 107459.00C106630.33 107479.33 106650.67 107499.67 106671.00 107520.00C106724.67 107520.00 106778.33 107520.00 106832.00 107520.00C106832.00 107552.33 106832.00 107584.67 106832.00 107617.00C106843.56 107628.08 106854.21 107640.21 106866.39 107650.58C106897.93 107671.39 106929.46 107692.19 106961.00 107713.00C106950.00 107723.67 106939.00 107734.33 106928.00 107745.00C106928.69 107754.52 106926.62 107770.55 106929.03 107776.00C106939.69 107765.67 106950.35 107755.33 106961.00 107745.00C106982.33 107755.67 107003.67 107766.33 107025.00 107777.00C107003.67 107788.00 106982.33 107799.00 106961.00 107810.00C106971.67 107820.67 106982.33 107831.33 106993.00 107842.00C106993.00 107863.33 106993.00 107884.67 106993.00 107906.00C106982.33 107927.33 106971.67 107948.67 106961.00 107970.00C106928.67 107970.00 106896.33 107970.00 106864.00 107970.00C106864.00 107991.67 106864.00 108013.33 106864.00 108035.00C106874.17 108036.00 106888.33 108033.00 106896.00 108036.50C106896.00 108068.00 106896.00 108099.50 106896.00 108131.00C106885.33 108141.67 106874.67 108152.33 106864.00 108163.00C106864.00 108184.33 106864.00 108205.67 106864.00 108227.00C106842.67 108216.33 106821.33 108205.67 106800.00 108195.00C106800.00 108216.67 106800.00 108238.33 106800.00 108260.00C106778.67 108238.33 106757.33 108216.67 106736.00 108195.00C106725.65 108196.32 106709.98 108192.33 106703.00 108197.03C106703.00 108218.02 106703.00 108239.01 106703.00 108260.00C106714.00 108270.67 106725.00 108281.33 106736.00 108292.00C106714.33 108292.00 106692.67 108292.00 106671.00 108292.00C106681.67 108313.33 106692.33 108334.67 106703.00 108356.00C106692.33 108366.67 106681.67 108377.33 106671.00 108388.00C106649.67 108388.00 106628.33 108388.00 106607.00 108388.00C106585.67 108366.67 106564.33 108345.33 106543.00 108324.00C106532.33 108324.00 106521.67 108324.00 106511.00 108324.00C106521.67 108367.00 106532.33 108410.00 106543.00 108453.00C106510.67 108431.33 106478.33 108409.67 106446.00 108388.00C106424.67 108388.00 106403.33 108388.00 106382.00 108388.00C106392.67 108409.67 106403.33 108431.33 106414.00 108453.00C106403.33 108463.67 106392.67 108474.33 106382.00 108485.00C106383.30 108495.03 106379.38 108510.29 106384.00 108517.00C106404.67 108517.00 106425.33 108517.00 106446.00 108517.00C106456.67 108560.00 106467.33 108603.00 106478.00 108646.00C106467.33 108656.67 106456.67 108667.33 106446.00 108678.00C106435.16 108656.23 106424.72 108634.26 106413.62 108612.62C106403.08 108602.08 106392.54 108591.54 106382.00 108581.00C106360.40 108602.41 106339.08 108624.08 106318.00 108646.00C106339.33 108678.00 106360.67 108710.00 106382.00 108742.00C106371.33 108731.33 106360.67 108720.67 106350.00 108710.00C106306.90 108731.13 106263.90 108752.46 106221.00 108774.00C106222.30 108784.03 106218.38 108799.29 106223.00 108806.00C106243.67 108806.00 106264.33 108806.00 106285.00 108806.00C106274.33 108816.67 106263.67 108827.33 106253.00 108838.00C106253.00 108881.00 106253.00 108924.00 106253.00 108967.00C106231.67 108967.00 106210.33 108967.00 106189.00 108967.00C106178.33 108988.33 106167.67 109009.67 106157.00 109031.00C106157.00 109063.33 106157.00 109095.67 106157.00 109128.00C106145.61 109129.76 106131.31 109124.33 106121.91 109131.00C106111.94 109140.67 106101.97 109150.33 106092.00 109160.00C106081.33 109149.33 106070.67 109138.67 106060.00 109128.00C106028.00 109160.00 105996.00 109192.00 105964.00 109224.00C105953.97 109225.32 105938.65 109221.34 105932.00 109226.03C105932.00 109247.02 105932.00 109268.01 105932.00 109289.00C105921.98 109287.67 105906.60 109291.70 105900.00 109286.94C105898.66 109277.27 105902.70 109262.24 105897.94 109256.00C105886.61 109258.12 105871.52 109251.37 105863.00 109260.12C105853.67 109269.75 105844.33 109279.38 105835.00 109289.00C105824.33 109278.00 105813.67 109267.00 105803.00 109256.00C105792.33 109277.67 105781.67 109299.33 105771.00 109321.00C105749.67 109321.00 105728.33 109321.00 105707.00 109321.00C105685.33 109331.67 105663.67 109342.33 105642.00 109353.00C105651.81 109353.67 105668.31 109351.66 105673.95 109354.00C105662.74 109364.48 105652.26 109375.92 105640.53 109385.74C105619.69 109396.16 105598.84 109406.57 105578.00 109417.00C105578.00 109438.33 105578.00 109459.67 105578.00 109481.00C105566.66 109482.81 105552.19 109477.22 105543.00 109484.09C105533.33 109494.06 105523.67 109504.03 105514.00 109514.00C105503.97 109512.68 105488.65 109516.66 105482.00 109511.97C105482.00 109490.98 105482.00 109469.99 105482.00 109449.00C105471.64 109450.30 105456.04 109446.37 105449.00 109451.00C105447.70 109460.37 105451.62 109474.95 105447.00 109481.00C105438.16 109481.68 105422.77 109479.64 105418.02 109482.02C105439.34 109503.34 105460.67 109524.67 105482.00 109546.00C105471.00 109567.33 105460.00 109588.67 105449.00 109610.00C105459.36 109611.30 105474.96 109607.37 105482.00 109612.00C105480.70 109621.37 105484.63 109635.98 105479.98 109642.00C105437.66 109642.00 105395.33 109642.00 105353.00 109642.00C105363.58 109643.36 105377.53 109639.29 105386.00 109644.03C105396.33 109665.02 105406.67 109686.01 105417.00 109707.00C105406.98 109705.67 105391.60 109709.70 105385.00 109704.94C105383.70 109695.26 105387.62 109680.36 105383.00 109674.00C105373.64 109675.31 105358.99 109671.35 105353.00 109676.03C105353.00 109697.02 105353.00 109718.01 105353.00 109739.00C105342.33 109728.33 105331.67 109717.67 105321.00 109707.00C105319.23 109718.35 105324.69 109732.69 105318.00 109742.00C105308.33 109751.67 105298.67 109761.33 105289.00 109771.00C105278.33 109760.33 105267.67 109749.67 105257.00 109739.00C105224.67 109739.00 105192.33 109739.00 105160.00 109739.00C105149.33 109728.33 105138.67 109717.67 105128.00 109707.00C105117.33 109717.67 105106.67 109728.33 105096.00 109739.00C105095.33 109729.48 105097.34 109713.50 105095.00 109708.00C105084.67 109718.33 105074.33 109728.67 105064.00 109739.00C105064.00 109760.33 105064.00 109781.67 105064.00 109803.00C105074.67 109813.67 105085.33 109824.33 105096.00 109835.00C105085.97 109836.30 105070.71 109832.38 105064.00 109837.00C105064.00 109857.67 105064.00 109878.33 105064.00 109899.00C105053.00 109910.00 105042.00 109921.00 105031.00 109932.00C105020.97 109933.30 105005.71 109929.38 104999.00 109934.00C104997.70 109943.37 105001.62 109957.95 104997.00 109964.00C104987.43 109964.85 104974.47 109962.31 104967.00 109965.26C104967.00 110018.51 104967.00 110071.75 104967.00 110125.00C104956.33 110135.67 104945.67 110146.33 104935.00 110157.00C104933.99 110168.71 104937.11 110181.34 104933.27 110192.46C104923.18 110212.64 104913.09 110232.82 104903.00 110253.00C104901.70 110242.97 104905.62 110227.71 104901.00 110221.00C104891.63 110222.30 104877.02 110218.37 104871.00 110223.02C104871.00 110265.34 104871.00 110307.67 104871.00 110350.00C104881.67 110360.67 104892.33 110371.33 104903.00 110382.00C104892.33 110392.67 104881.67 110403.33 104871.00 110414.00C104871.00 110435.33 104871.00 110456.67 104871.00 110478.00C104861.48 110478.67 104845.50 110476.66 104840.00 110479.00C104850.33 110489.33 104860.67 110499.67 104871.00 110510.00C104860.98 110511.33 104845.60 110507.30 104839.00 110512.06C104837.66 110521.73 104841.70 110536.76 104836.94 110543.00C104827.36 110543.68 104813.35 110541.65 104806.52 110544.00C104817.34 110565.00 104828.17 110586.00 104839.00 110607.00C104828.64 110608.30 104813.04 110604.37 104806.00 110609.00C104807.33 110618.36 104803.31 110633.06 104808.06 110639.00C104817.74 110640.30 104832.64 110636.38 104839.00 110641.00C104839.00 110661.67 104839.00 110682.33 104839.00 110703.00C104839.67 110693.48 104837.66 110677.50 104840.00 110672.00C104850.33 110682.33 104860.67 110692.67 104871.00 110703.00C104869.24 110714.39 104874.67 110728.69 104868.00 110738.09C104858.33 110748.06 104848.67 110758.03 104839.00 110768.00C104828.64 110769.30 104813.04 110765.37 104806.00 110770.00C104806.00 110780.00 104806.00 110790.00 104806.00 110800.00C104806.00 110791.27 104806.00 110772.09 104806.00 110770.00C104806.00 110790.67 104806.00 110811.33 104806.00 110832.00C104795.33 110821.33 104784.67 110810.67 104774.00 110800.00C104764.48 110800.67 104748.50 110798.66 104743.00 110801.00C104753.33 110811.33 104763.67 110821.67 104774.00 110832.00C104752.67 110832.00 104731.33 110832.00 104710.00 110832.00C104720.67 110842.67 104731.33 110853.33 104742.00 110864.00C104731.97 110865.30 104716.71 110861.38 104710.00 110866.00C104708.71 110875.37 104712.61 110889.95 104708.00 110896.00C104687.33 110896.00 104666.67 110896.00 104646.00 110896.00C104656.67 110906.67 104667.33 110917.33 104678.00 110928.00C104656.33 110928.00 104634.67 110928.00 104613.00 110928.00C104602.33 110939.00 104591.67 110950.00 104581.00 110961.00C104580.89 110982.50 104581.23 111004.01 104580.83 111025.51C104570.22 111057.34 104559.61 111089.17 104549.00 111121.00C104538.97 111122.30 104523.71 111118.38 104517.00 111123.00C104514.99 111134.13 104521.43 111148.66 104512.97 111157.19C104503.46 111167.31 104493.09 111176.81 104484.26 111187.47C104473.84 111208.31 104463.43 111229.16 104453.00 111250.00C104442.33 111239.33 104431.67 111228.67 104421.00 111218.00C104410.00 111228.67 104399.00 111239.33 104388.00 111250.00C104387.89 111271.50 104388.22 111293.01 104387.83 111314.51C104377.22 111346.67 104366.61 111378.84 104356.00 111411.00C104356.00 111432.33 104356.00 111453.67 104356.00 111475.00C104345.83 111476.00 104331.67 111473.00 104324.00 111476.50C104324.00 111508.00 104324.00 111539.50 104324.00 111571.00C104313.21 111582.58 104301.40 111593.38 104291.26 111605.47C104280.84 111626.31 104270.43 111647.16 104260.00 111668.00C104238.33 111668.00 104216.67 111668.00 104195.00 111668.00C104206.00 111700.00 104217.00 111732.00 104228.00 111764.00C104206.33 111775.00 104184.67 111786.00 104163.00 111797.00C104161.07 111807.59 104166.91 111822.99 104160.00 111830.50C104139.67 111840.67 104119.33 111850.83 104099.00 111861.00C104099.00 111882.33 104099.00 111903.67 104099.00 111925.00C104109.67 111914.33 104120.33 111903.67 104131.00 111893.00C104132.30 111903.03 104128.38 111918.29 104133.00 111925.00C104141.86 111925.67 104157.17 111923.66 104162.00 111926.00C104151.67 111936.33 104141.33 111946.67 104131.00 111957.00C104129.70 111967.03 104133.62 111982.29 104129.00 111989.00C104120.07 111989.35 104105.37 111988.30 104100.00 111989.52C104121.11 112000.51 104142.40 112011.15 104163.38 112022.38C104173.92 112032.92 104184.46 112043.46 104195.00 112054.00C104184.33 112064.67 104173.67 112075.33 104163.00 112086.00C104173.03 112087.30 104188.29 112083.38 104195.00 112088.00C104193.70 112097.37 104197.62 112111.95 104193.00 112118.00C104183.63 112119.29 104169.05 112115.39 104163.00 112120.00C104163.00 112140.67 104163.00 112161.33 104163.00 112182.00C104184.67 112182.00 104206.33 112182.00 104228.00 112182.00C104217.00 112192.67 104206.00 112203.33 104195.00 112214.00C104186.27 112214.00 104167.09 112214.00 104165.00 112214.00C104174.36 112215.31 104189.01 112211.35 104195.00 112216.03C104195.00 112237.02 104195.00 112258.01 104195.00 112279.00C104184.33 112289.67 104173.67 112300.33 104163.00 112311.00C104163.00 112302.27 104163.00 112283.09 104163.00 112281.00C104160.96 112292.04 104167.45 112306.62 104159.00 112315.00C104149.67 112324.33 104140.33 112333.67 104131.00 112343.00C104141.03 112344.30 104156.29 112340.38 104163.00 112345.00C104161.70 112354.37 104165.62 112368.95 104161.00 112375.00C104151.63 112376.30 104137.05 112372.38 104131.00 112377.00C104129.70 112386.37 104133.62 112400.95 104129.00 112407.00C104119.64 112408.33 104104.94 112404.31 104099.00 112409.06C104096.92 112420.40 104103.52 112435.33 104095.00 112444.00C104075.00 112464.00 104055.00 112484.00 104035.00 112504.00C104045.67 112514.67 104056.33 112525.33 104067.00 112536.00C104056.33 112546.67 104045.67 112557.33 104035.00 112568.00C104045.03 112569.31 104060.32 112565.36 104067.00 112570.02C104067.00 112612.34 104067.00 112654.67 104067.00 112697.00C104066.66 112687.39 104067.67 112672.08 104066.50 112666.00C104056.00 112687.00 104045.50 112708.00 104035.00 112729.00C104033.99 112740.71 104037.11 112753.34 104033.27 112764.46C104023.18 112784.64 104013.09 112804.82 104003.00 112825.00C104003.00 112857.33 104003.00 112889.67 104003.00 112922.00C104002.99 112913.29 104003.03 112894.00 104002.98 112892.03C104001.85 112903.37 104005.57 112915.93 104000.70 112926.45C103990.47 112946.30 103980.24 112966.15 103970.00 112986.00C103971.33 112996.02 103967.30 113011.40 103972.06 113018.00C103982.37 113018.00 103992.69 113018.00 104003.00 113018.00C103992.65 113019.32 103976.98 113015.33 103970.00 113020.03C103970.00 113041.02 103970.00 113062.01 103970.00 113083.00C103981.00 113093.67 103992.00 113104.33 104003.00 113115.00C103992.00 113125.67 103981.00 113136.33 103970.00 113147.00C103981.00 113157.67 103992.00 113168.33 104003.00 113179.00C104003.00 113232.67 104003.00 113286.33 104003.00 113340.00C103992.00 113350.67 103981.00 113361.33 103970.00 113372.00C103968.23 113383.35 103973.69 113397.69 103967.00 113407.00C103957.33 113416.67 103947.67 113426.33 103938.00 113436.00C103947.52 113436.67 103963.50 113434.66 103969.00 113437.00C103958.67 113447.33 103948.33 113457.67 103938.00 113468.00C103938.00 113489.67 103938.00 113511.33 103938.00 113533.00C103948.67 113554.33 103959.33 113575.67 103970.00 113597.00C103970.00 113618.33 103970.00 113639.67 103970.00 113661.00C103979.82 113661.69 103996.30 113659.62 104001.97 113662.03C103991.31 113672.69 103980.66 113683.34 103970.00 113694.00C103981.00 113704.67 103992.00 113715.33 104003.00 113726.00C104001.19 113737.34 104006.78 113751.81 103999.91 113761.00C103989.94 113770.67 103979.97 113780.33 103970.00 113790.00C103980.36 113791.30 103995.96 113787.37 104003.00 113792.00C104005.04 113803.04 103998.55 113817.62 104007.00 113826.00C104016.33 113835.33 104025.67 113844.67 104035.00 113854.00C104024.33 113864.67 104013.67 113875.33 104003.00 113886.00C104035.00 113907.67 104067.00 113929.33 104099.00 113951.00C104099.68 113941.48 104097.64 113925.46 104100.02 113920.00C104110.91 113930.48 104121.02 113941.95 104132.47 113951.74C104153.31 113962.16 104174.16 113972.57 104195.00 113983.00C104196.81 113994.32 104191.22 114008.79 104198.08 114017.97C104218.95 114038.08 104239.60 114058.42 104260.00 114079.00C104270.58 114080.36 104284.53 114076.29 104293.00 114081.03C104303.33 114102.02 104313.67 114123.01 104324.00 114144.00C104333.52 114144.67 104349.50 114142.66 104355.00 114145.00C104344.67 114155.33 104334.33 114165.67 104324.00 114176.00C104345.33 114197.33 104366.67 114218.67 104388.00 114240.00C104377.33 114250.67 104366.67 114261.33 104356.00 114272.00C104366.67 114293.67 104377.33 114315.33 104388.00 114337.00C104409.67 114358.33 104431.33 114379.67 104453.00 114401.00C104454.01 114412.71 104450.89 114425.34 104454.73 114436.46C104464.82 114456.64 104474.91 114476.82 104485.00 114497.00C104474.33 114550.67 104463.67 114604.33 104453.00 114658.00C104474.33 114679.33 104495.67 114700.67 104517.00 114722.00C104518.80 114733.67 104513.28 114748.37 104520.00 114758.00C104529.67 114767.67 104539.33 114777.33 104549.00 114787.00C104538.33 114819.00 104527.67 114851.00 104517.00 114883.00C104570.67 114915.33 104624.33 114947.67 104678.00 114980.00C104699.33 115022.67 104720.67 115065.33 104742.00 115108.00C104752.78 115119.26 104764.65 115129.67 104774.74 115141.49C104785.15 115162.66 104795.58 115183.83 104806.00 115205.00C104806.00 115301.33 104806.00 115397.67 104806.00 115494.00C104645.33 115494.00 104484.67 115494.00 104324.00 115494.00C104292.00 115483.33 104260.00 115472.67 104228.00 115462.00C104217.00 115440.67 104206.00 115419.33 104195.00 115398.00C104182.46 115396.71 104168.61 115400.97 104157.09 115395.06C104116.39 115374.98 104076.05 115354.12 104035.65 115333.51C104023.78 115331.66 104011.19 115334.73 103999.46 115331.83C103967.60 115321.53 103935.96 115310.45 103903.97 115300.66C103840.31 115290.11 103776.65 115279.56 103713.00 115269.00C103670.33 115279.67 103627.67 115290.33 103585.00 115301.00C103574.00 115311.67 103563.00 115322.33 103552.00 115333.00C103539.73 115332.16 103526.89 115334.85 103515.01 115331.34C103484.68 115321.23 103454.34 115311.11 103424.00 115301.00C103391.67 115311.67 103359.33 115322.33 103327.00 115333.00C103295.00 115311.67 103263.00 115290.33 103231.00 115269.00C103220.97 115267.70 103205.71 115271.62 103199.00 115267.00C103198.33 115258.14 103200.34 115242.83 103198.00 115238.00C103187.67 115248.33 103177.33 115258.67 103167.00 115269.00C103156.00 115247.67 103145.00 115226.33 103134.00 115205.00C103132.70 115215.03 103136.62 115230.29 103132.00 115237.00C103122.63 115235.70 103108.05 115239.62 103102.00 115235.00C103101.33 115226.14 103103.34 115210.83 103101.00 115206.00C103090.67 115216.33 103080.33 115226.67 103070.00 115237.00C103069.33 115227.48 103071.34 115211.50 103069.00 115206.00C103058.67 115216.33 103048.33 115226.67 103038.00 115237.00C103037.33 115246.52 103039.34 115262.50 103037.00 115268.00C103026.67 115257.67 103016.33 115247.33 103006.00 115237.00C103004.70 115247.03 103008.62 115262.29 103004.00 115269.00C102994.50 115270.01 102980.97 115266.98 102974.00 115270.52C102974.00 115302.34 102974.00 115334.17 102974.00 115366.00C102962.88 115377.26 102950.68 115387.64 102940.26 115399.47C102929.84 115420.31 102919.43 115441.16 102909.00 115462.00C102897.65 115463.77 102883.31 115458.31 102874.00 115465.00C102864.33 115474.67 102854.67 115484.33 102845.00 115494.00C102823.56 115483.16 102801.93 115472.71 102780.62 115461.62C102770.08 115451.08 102759.54 115440.54 102749.00 115430.00C102737.33 115428.20 102722.63 115433.72 102713.00 115427.00C102703.33 115417.33 102693.67 115407.67 102684.00 115398.00C102662.67 115398.00 102641.33 115398.00 102620.00 115398.00C102598.67 115387.33 102577.33 115376.67 102556.00 115366.00C102534.33 115366.00 102512.67 115366.00 102491.00 115366.00C102491.00 115344.33 102491.00 115322.67 102491.00 115301.00C102479.65 115302.77 102465.31 115297.31 102456.00 115304.00C102446.33 115313.67 102436.67 115323.33 102427.00 115333.00C102405.67 115333.00 102384.33 115333.00 102363.00 115333.00C102361.99 115322.53 102365.02 115309.15 102361.48 115300.50C102329.66 115290.00 102297.83 115279.50 102266.00 115269.00C102255.33 115247.67 102244.67 115226.33 102234.00 115205.00C102232.70 115194.97 102236.62 115179.71 102232.00 115173.00C102211.33 115173.00 102190.67 115173.00 102170.00 115173.00C102169.33 115182.52 102171.34 115198.50 102169.00 115204.00C102158.67 115193.67 102148.33 115183.33 102138.00 115173.00C102095.00 115173.00 102052.00 115173.00 102009.00 115173.00C102007.06 115183.60 102012.93 115199.00 102005.98 115206.52C101985.54 115216.82 101964.93 115226.81 101944.62 115237.38C101923.34 115258.85 101901.79 115280.04 101880.00 115301.00C101869.33 115322.67 101858.67 115344.33 101848.00 115366.00C101837.33 115344.33 101826.67 115322.67 101816.00 115301.00C101794.67 115301.00 101773.33 115301.00 101752.00 115301.00C101750.70 115290.97 101754.62 115275.71 101750.00 115269.00C101738.96 115271.04 101724.38 115264.55 101716.00 115273.00C101706.67 115282.33 101697.33 115291.67 101688.00 115301.00C101677.00 115290.33 101666.00 115279.67 101655.00 115269.00C101639.62 115269.30 101623.99 115267.64 101608.97 115271.79C101559.98 115281.53 101510.99 115291.26 101462.00 115301.00C101440.67 115279.67 101419.33 115258.33 101398.00 115237.00C101396.70 115226.97 101400.62 115211.71 101396.00 115205.00C101387.14 115204.33 101371.83 115206.34 101367.00 115204.00C101377.33 115193.67 101387.67 115183.33 101398.00 115173.00C101376.67 115173.00 101355.33 115173.00 101334.00 115173.00C101332.70 115162.64 101336.63 115147.04 101332.00 115140.00C101322.63 115138.71 101308.05 115142.61 101302.00 115138.00C101302.00 115117.33 101302.00 115096.67 101302.00 115076.00C101290.33 115077.80 101275.63 115072.28 101266.00 115079.00C101256.33 115088.67 101246.67 115098.33 101237.00 115108.00C101237.00 115086.67 101237.00 115065.33 101237.00 115044.00C101226.33 115033.33 101215.67 115022.67 101205.00 115012.00C101194.97 115010.70 101179.71 115014.62 101173.00 115010.00C101171.70 115000.63 101175.62 114986.05 101171.00 114980.00C101161.64 114978.67 101146.94 114982.69 101141.00 114977.94C101140.33 114968.80 101142.34 114953.05 101140.00 114948.03C101129.67 114958.69 101119.33 114969.35 101109.00 114980.00C101107.20 114968.33 101112.72 114953.63 101106.00 114944.00C101096.33 114934.33 101086.67 114924.67 101077.00 114915.00C101055.33 114925.67 101033.67 114936.33 101012.00 114947.00C101012.00 114925.67 101012.00 114904.33 101012.00 114883.00C101002.48 114883.67 100986.50 114881.66 100981.00 114884.00C100991.33 114894.33 101001.67 114904.67 101012.00 114915.00C101001.41 114913.07 100986.01 114918.91 100978.50 114912.00C100968.33 114891.67 100958.17 114871.33 100948.00 114851.00C100916.00 114851.00 100884.00 114851.00 100852.00 114851.00C100850.99 114861.16 100854.02 114875.36 100850.48 114883.00C100818.66 114883.00 100786.83 114883.00 100755.00 114883.00C100744.33 114872.33 100733.67 114861.67 100723.00 114851.00C100712.33 114861.67 100701.67 114872.33 100691.00 114883.00C100680.97 114884.30 100665.71 114880.38 100659.00 114885.00C100658.31 114893.85 100660.38 114909.21 100657.97 114914.00C100647.31 114903.67 100636.65 114893.33 100626.00 114883.00C100637.00 114861.67 100648.00 114840.33 100659.00 114819.00C100649.17 114818.33 100632.74 114820.34 100627.03 114818.00C100637.69 114807.67 100648.35 114797.33 100659.00 114787.00C100648.00 114765.33 100637.00 114743.67 100626.00 114722.00C100626.00 114700.67 100626.00 114679.33 100626.00 114658.00C100637.17 114636.56 100647.97 114614.93 100659.38 114593.62C100669.92 114583.08 100680.46 114572.54 100691.00 114562.00C100691.00 114540.33 100691.00 114518.67 100691.00 114497.00C100733.67 114443.67 100776.33 114390.33 100819.00 114337.00C100840.87 114294.10 100862.54 114251.10 100884.00 114208.00C100885.01 114196.28 100881.89 114183.64 100885.73 114172.51C100906.48 114130.67 100927.25 114088.84 100948.00 114047.00C100958.67 114036.33 100969.33 114025.67 100980.00 114015.00C100981.94 114004.40 100976.07 113989.00 100983.02 113981.48C101003.46 113971.18 101024.06 113961.18 101044.38 113950.63C101055.25 113940.08 101066.13 113929.54 101077.00 113919.00C101077.00 113886.67 101077.00 113854.33 101077.00 113822.00C101100.71 113810.53 101123.82 113797.76 101147.96 113787.23C101199.30 113766.82 101250.65 113746.41 101302.00 113726.00C101312.67 113715.33 101323.33 113704.67 101334.00 113694.00C101419.67 113694.00 101505.33 113694.00 101591.00 113694.00C101612.33 113672.33 101633.67 113650.67 101655.00 113629.00C101676.67 113639.67 101698.33 113650.33 101720.00 113661.00C101741.33 113650.33 101762.67 113639.67 101784.00 113629.00C101794.67 113629.00 101805.33 113629.00 101816.00 113629.00C101848.33 112964.67 101880.67 112300.33 101913.00 111636.00C101891.33 111625.33 101869.67 111614.67 101848.00 111604.00C101848.00 111582.33 101848.00 111560.67 101848.00 111539.00C101826.67 111528.33 101805.33 111517.67 101784.00 111507.00C101741.00 111517.67 101698.00 111528.33 101655.00 111539.00C101633.67 111560.67 101612.33 111582.33 101591.00 111604.00C101569.67 111604.00 101548.33 111604.00 101527.00 111604.00C101527.00 111625.33 101527.00 111646.67 101527.00 111668.00C101515.91 111679.56 101503.79 111690.23 101493.39 111702.39C101472.27 111733.93 101451.13 111765.46 101430.00 111797.00C101398.00 111797.00 101366.00 111797.00 101334.00 111797.00C101312.33 111807.67 101290.67 111818.33 101269.00 111829.00C101258.33 111861.00 101247.67 111893.00 101237.00 111925.00C101226.33 111935.67 101215.67 111946.33 101205.00 111957.00C101194.33 111989.33 101183.67 112021.67 101173.00 112054.00C101183.67 112086.00 101194.33 112118.00 101205.00 112150.00C101140.67 112171.33 101076.33 112192.67 101012.00 112214.00C101001.20 112225.58 100989.40 112236.39 100979.26 112248.48C100968.68 112269.43 100958.46 112290.56 100947.62 112311.38C100848.34 112410.46 100749.46 112509.95 100649.91 112608.76C100641.83 112616.62 100633.88 112624.63 100625.49 112632.17C100593.66 112643.12 100561.83 112654.06 100530.00 112665.00C100528.70 112675.03 100532.62 112690.29 100528.00 112697.00C100516.96 112699.04 100502.38 112692.55 100494.00 112701.00C100484.67 112710.33 100475.33 112719.67 100466.00 112729.00C100455.00 112718.33 100444.00 112707.67 100433.00 112697.00C100417.98 112697.52 100402.54 112695.15 100388.06 112700.24C100349.71 112709.83 100311.35 112719.41 100273.00 112729.00C100251.54 112772.10 100229.87 112815.10 100208.00 112858.00C100197.97 112859.30 100182.71 112855.38 100176.00 112860.00C100175.33 112868.86 100177.34 112884.17 100175.00 112889.00C100164.67 112878.67 100154.33 112868.33 100144.00 112858.00C100144.00 112900.67 100144.00 112943.33 100144.00 112986.00C100154.01 112987.32 100169.37 112983.34 100175.98 112988.03C100174.89 112999.40 100178.49 113011.90 100173.78 113022.51C100163.86 113042.68 100153.93 113062.84 100144.00 113083.00C100144.00 113115.00 100144.00 113147.00 100144.00 113179.00C100112.00 113211.33 100080.00 113243.67 100048.00 113276.00C100046.99 113287.71 100050.11 113300.34 100046.27 113311.46C100036.18 113331.64 100026.09 113351.82 100016.00 113372.00C100026.67 113382.67 100037.33 113393.33 100048.00 113404.00C100037.33 113414.67 100026.67 113425.33 100016.00 113436.00C99994.34 113425.33 99972.66 113414.67 99951.00 113404.00C99929.67 113404.00 99908.33 113404.00 99887.00 113404.00C99876.34 113414.67 99865.66 113425.33 99855.00 113436.00C99855.00 113427.27 99855.00 113408.09 99855.00 113406.00C99854.33 113414.86 99856.34 113430.17 99854.00 113435.00C99843.67 113424.67 99833.33 113414.33 99823.00 113404.00C99801.34 113414.67 99779.66 113425.33 99758.00 113436.00C99747.33 113414.67 99736.67 113393.33 99726.00 113372.00C99715.34 113382.67 99704.66 113393.33 99694.00 113404.00C99683.34 113393.33 99672.66 113382.67 99662.00 113372.00C99640.33 113372.00 99618.67 113372.00 99597.00 113372.00C99586.34 113361.33 99575.66 113350.67 99565.00 113340.00C99543.57 113350.84 99521.93 113361.29 99500.62 113372.38C99490.08 113382.92 99479.54 113393.46 99469.00 113404.00C99457.65 113405.77 99443.31 113400.31 99434.00 113407.00C99424.33 113416.67 99414.66 113426.33 99405.00 113436.00C99383.33 113436.00 99361.67 113436.00 99340.00 113436.00C99329.34 113446.67 99318.66 113457.33 99308.00 113468.00C99286.67 113468.00 99265.33 113468.00 99244.00 113468.00C99233.33 113489.67 99222.67 113511.33 99212.00 113533.00C99190.23 113543.84 99168.26 113554.28 99146.62 113565.38C99136.08 113575.92 99125.54 113586.46 99115.00 113597.00C99083.00 113597.00 99051.00 113597.00 99019.00 113597.00C99008.34 113607.67 98997.66 113618.33 98987.00 113629.00C98933.33 113629.00 98879.67 113629.00 98826.00 113629.00C98804.67 113618.33 98783.33 113607.67 98762.00 113597.00C98751.64 113595.70 98736.04 113599.63 98729.00 113595.00C98729.00 113585.00 98729.00 113575.00 98729.00 113565.00C98728.01 113574.42 98731.00 113591.27 98727.48 113595.99C98694.95 113574.61 98662.96 113552.34 98630.07 113531.53C98609.72 113521.35 98589.36 113511.18 98569.00 113501.00C98579.67 113490.00 98590.33 113479.00 98601.00 113468.00C98611.67 113436.00 98622.33 113404.00 98633.00 113372.00C98622.97 113370.70 98607.71 113374.62 98601.00 113370.00C98599.71 113360.63 98603.62 113346.05 98599.00 113340.00C98590.15 113339.33 98574.83 113341.34 98570.00 113339.00C98580.33 113328.67 98590.67 113318.33 98601.00 113308.00C98590.34 113297.33 98579.66 113286.67 98569.00 113276.00C98569.00 113254.33 98569.00 113232.67 98569.00 113211.00C98579.66 113221.67 98590.34 113232.33 98601.00 113243.00C98601.00 113221.67 98601.00 113200.33 98601.00 113179.00C98568.67 113168.33 98536.33 113157.67 98504.00 113147.00C98482.66 113125.67 98461.34 113104.33 98440.00 113083.00C98438.21 113071.33 98443.72 113056.63 98437.00 113047.00C98427.33 113037.33 98417.66 113027.67 98408.00 113018.00C98397.34 113028.67 98386.66 113039.33 98376.00 113050.00C98365.34 113039.33 98354.66 113028.67 98344.00 113018.00C98290.33 113007.33 98236.67 112996.67 98183.00 112986.00C98172.33 112964.67 98161.67 112943.33 98151.00 112922.00C98149.70 112911.97 98153.62 112896.71 98149.00 112890.00C98139.73 112889.31 98126.05 112891.37 98119.50 112888.98C98130.00 112867.66 98140.50 112846.33 98151.00 112825.00C98140.97 112823.70 98125.71 112827.62 98119.00 112823.00C98117.65 112813.63 98121.72 112798.91 98116.91 112792.98C98105.25 112791.85 98092.43 112795.54 98081.55 112790.77C98061.70 112780.85 98041.85 112770.93 98022.00 112761.00C97990.00 112761.00 97958.00 112761.00 97926.00 112761.00C97915.00 112750.33 97904.00 112739.67 97893.00 112729.00C97881.00 112730.56 97867.04 112725.61 97856.50 112732.00C97826.00 112752.33 97795.50 112772.67 97765.00 112793.00C97754.33 112771.67 97743.67 112750.33 97733.00 112729.00C97722.00 112739.67 97711.00 112750.33 97700.00 112761.00C97698.07 112750.41 97703.91 112735.01 97697.00 112727.50C97676.67 112717.33 97656.33 112707.17 97636.00 112697.00C97624.74 112707.79 97614.32 112719.64 97602.51 112729.74C97559.83 112750.86 97517.23 112772.16 97474.49 112793.17C97442.66 112803.78 97410.83 112814.39 97379.00 112825.00C97357.67 112814.33 97336.33 112803.67 97315.00 112793.00C97303.74 112803.79 97293.31 112815.63 97281.51 112825.75C97260.34 112836.50 97239.17 112847.25 97218.00 112858.00C97207.97 112859.30 97192.71 112855.38 97186.00 112860.00C97185.32 112869.27 97187.35 112882.95 97185.00 112889.49C97163.89 112878.83 97142.59 112868.55 97121.63 112857.62C97111.09 112846.74 97100.54 112835.87 97090.00 112825.00C97090.00 112846.67 97090.00 112868.33 97090.00 112890.00C97068.34 112900.67 97046.66 112911.33 97025.00 112922.00C97003.50 112922.11 96981.99 112921.78 96960.49 112922.17C96928.33 112932.78 96896.16 112943.39 96864.00 112954.00C96853.33 112975.33 96842.67 112996.67 96832.00 113018.00C96831.00 113029.73 96834.10 113042.36 96830.27 113053.51C96820.18 113074.00 96810.09 113094.50 96800.00 113115.00C96809.52 113115.67 96825.50 113113.66 96831.00 113116.00C96820.67 113126.33 96810.33 113136.67 96800.00 113147.00C96799.00 113157.17 96802.00 113171.33 96798.50 113179.00C96767.00 113179.00 96735.50 113179.00 96704.00 113179.00C96682.33 113200.33 96660.67 113221.67 96639.00 113243.00C96627.66 113244.79 96613.25 113239.26 96604.00 113246.05C96583.67 113266.70 96563.33 113287.35 96543.00 113308.00C96532.97 113309.30 96517.71 113305.38 96511.00 113310.00C96511.00 113330.67 96511.00 113351.33 96511.00 113372.00C96478.67 113382.67 96446.33 113393.33 96414.00 113404.00C96402.29 113405.01 96389.66 113401.89 96378.54 113405.73C96358.36 113415.82 96338.18 113425.91 96318.00 113436.00C96285.67 113425.33 96253.33 113414.67 96221.00 113404.00C96199.67 113414.67 96178.33 113425.33 96157.00 113436.00C96146.33 113414.67 96135.67 113393.33 96125.00 113372.00C96060.67 113372.00 95996.33 113372.00 95932.00 113372.00C95921.34 113382.67 95910.66 113393.33 95900.00 113404.00C95878.67 113404.00 95857.33 113404.00 95836.00 113404.00C95835.31 113413.52 95837.38 113429.55 95834.97 113435.00C95824.31 113424.67 95813.65 113414.33 95803.00 113404.00C95792.33 113425.33 95781.67 113446.67 95771.00 113468.00C95760.34 113457.33 95749.66 113446.67 95739.00 113436.00C95728.33 113457.67 95717.67 113479.33 95707.00 113501.00C95706.32 113510.52 95708.36 113526.54 95705.98 113532.00C95695.09 113521.51 95684.96 113510.06 95673.53 113500.24C95652.68 113489.50 95631.84 113478.75 95611.00 113468.00C95610.31 113477.82 95612.38 113494.30 95609.97 113499.97C95599.31 113489.31 95588.66 113478.66 95578.00 113468.00C95576.70 113478.36 95580.63 113493.96 95576.00 113501.00C95566.63 113502.30 95552.05 113498.38 95546.00 113503.00C95546.00 113513.00 95546.00 113523.00 95546.00 113533.00C95545.33 113523.48 95547.34 113507.50 95545.00 113502.00C95534.67 113512.33 95524.33 113522.67 95514.00 113533.00C95492.67 113533.00 95471.33 113533.00 95450.00 113533.00C95450.00 113524.27 95450.00 113505.09 95450.00 113503.00C95448.99 113512.50 95452.02 113526.03 95448.48 113533.00C95416.66 113533.00 95384.83 113533.00 95353.00 113533.00C95331.40 113511.59 95310.08 113489.92 95289.00 113468.00C95288.33 113477.83 95290.34 113494.26 95288.00 113499.97C95277.67 113489.31 95267.33 113478.66 95257.00 113468.00C95246.33 113479.00 95235.67 113490.00 95225.00 113501.00C95214.33 113490.00 95203.67 113479.00 95193.00 113468.00C95192.31 113477.82 95194.38 113494.30 95191.97 113499.97C95181.31 113489.31 95170.66 113478.66 95160.00 113468.00C95149.16 113489.77 95138.72 113511.74 95127.62 113533.38C95106.41 113554.59 95085.21 113575.79 95064.00 113597.00C95042.67 113586.33 95021.33 113575.67 95000.00 113565.00C94998.99 113554.84 95002.02 113540.64 94998.48 113533.00C94966.66 113533.00 94934.83 113533.00 94903.00 113533.00C94892.34 113522.33 94881.66 113511.67 94871.00 113501.00C94869.70 113511.03 94873.62 113526.29 94869.00 113533.00C94860.15 113532.33 94844.83 113534.34 94840.00 113532.00C94850.33 113521.67 94860.67 113511.33 94871.00 113501.00C94860.98 113499.67 94845.60 113503.70 94839.00 113498.94C94836.92 113487.60 94843.52 113472.67 94835.00 113464.00C94825.67 113454.67 94816.33 113445.33 94807.00 113436.00C94785.34 113446.67 94763.66 113457.33 94742.00 113468.00C94740.70 113457.97 94744.62 113442.71 94740.00 113436.00C94730.63 113434.70 94716.05 113438.62 94710.00 113434.00C94709.00 113424.50 94712.00 113411.00 94708.50 113404.00C94677.00 113404.00 94645.50 113404.00 94614.00 113404.00C94614.67 113394.48 94612.66 113378.50 94615.00 113373.00C94625.33 113383.33 94635.67 113393.67 94646.00 113404.00C94644.07 113393.41 94649.91 113378.01 94643.00 113370.50C94622.67 113360.33 94602.33 113350.17 94582.00 113340.00C94580.66 113329.98 94584.70 113314.60 94579.94 113308.00C94570.26 113309.30 94555.35 113305.38 94549.00 113310.00C94548.33 113318.86 94550.34 113334.17 94548.00 113339.00C94537.67 113328.67 94527.33 113318.33 94517.00 113308.00C94516.33 113317.52 94518.34 113333.50 94516.00 113339.00C94505.67 113328.67 94495.33 113318.33 94485.00 113308.00C94495.66 113297.33 94506.34 113286.67 94517.00 113276.00C94506.34 113286.67 94495.66 113297.33 94485.00 113308.00C94485.00 113286.33 94485.00 113264.67 94485.00 113243.00C94474.97 113241.70 94459.71 113245.62 94453.00 113241.00C94451.71 113231.63 94455.62 113217.05 94451.00 113211.00C94439.96 113208.96 94425.38 113215.45 94417.00 113207.00C94407.67 113197.67 94398.33 113188.33 94389.00 113179.00C94399.66 113168.33 94410.34 113157.67 94421.00 113147.00C94410.34 113136.33 94399.66 113125.67 94389.00 113115.00C94387.68 113125.03 94391.66 113140.35 94386.97 113147.00C94365.98 113147.00 94344.99 113147.00 94324.00 113147.00C94323.33 113137.48 94325.34 113121.50 94323.00 113116.00C94312.67 113126.33 94302.33 113136.67 94292.00 113147.00C94302.66 113136.33 94313.34 113125.67 94324.00 113115.00C94302.67 113104.33 94281.33 113093.67 94260.00 113083.00C94270.67 113072.00 94281.33 113061.00 94292.00 113050.00C94279.73 113050.88 94266.87 113048.10 94255.02 113051.71C94224.68 113062.14 94194.34 113072.57 94164.00 113083.00C94153.00 113072.00 94142.00 113061.00 94131.00 113050.00C94120.33 113061.00 94109.67 113072.00 94099.00 113083.00C94109.03 113084.30 94124.29 113080.38 94131.00 113085.00C94130.32 113094.28 94132.35 113107.92 94130.00 113114.50C94109.00 113104.00 94088.00 113093.50 94067.00 113083.00C94067.00 113072.00 94067.00 113061.00 94067.00 113050.00C94065.70 113060.36 94069.63 113075.96 94065.00 113083.00C94044.33 113083.00 94023.67 113083.00 94003.00 113083.00C94003.00 113050.67 94003.00 113018.33 94003.00 112986.00C93991.27 112984.99 93978.62 112988.12 93967.48 112984.25C93946.87 112974.03 93926.09 112964.13 93905.62 112953.62C93895.08 112943.08 93884.54 112932.54 93874.00 112922.00C93863.34 112932.67 93852.66 112943.33 93842.00 112954.00C93831.97 112952.70 93816.71 112956.62 93810.00 112952.00C93808.09 112942.07 93813.89 112927.36 93807.00 112920.50C93786.67 112910.33 93766.33 112900.17 93746.00 112890.00C93724.34 112900.67 93702.66 112911.33 93681.00 112922.00C93670.34 112911.33 93659.66 112900.67 93649.00 112890.00C93606.33 112890.00 93563.67 112890.00 93521.00 112890.00C93519.66 112879.98 93523.70 112864.60 93518.94 112858.00C93509.27 112856.66 93494.24 112860.70 93488.00 112855.94C93485.84 112843.69 93493.35 112827.44 93482.00 112819.00C93452.00 112789.00 93422.00 112759.00 93392.00 112729.00C93381.34 112739.67 93370.66 112750.33 93360.00 112761.00C93348.65 112762.77 93334.31 112757.31 93325.00 112764.00C93315.33 112773.67 93305.66 112783.33 93296.00 112793.00C93295.31 112783.48 93297.38 112767.45 93294.97 112762.00C93284.31 112772.33 93273.65 112782.67 93263.00 112793.00C93261.70 112782.97 93265.62 112767.71 93261.00 112761.00C93240.33 112761.00 93219.67 112761.00 93199.00 112761.00C93199.00 112739.67 93199.00 112718.33 93199.00 112697.00C93177.67 112697.00 93156.33 112697.00 93135.00 112697.00C93124.34 112686.33 93113.66 112675.67 93103.00 112665.00C93101.64 112654.09 93105.72 112639.80 93100.97 112631.00C93079.98 112620.66 93058.99 112610.34 93038.00 112600.00C93047.52 112599.33 93063.50 112601.34 93069.00 112599.00C93048.00 112578.00 93027.00 112557.00 93006.00 112536.00C93005.33 112545.52 93007.34 112561.50 93005.00 112567.00C92994.67 112556.67 92984.33 112546.33 92974.00 112536.00C92963.83 112535.00 92949.67 112538.00 92942.00 112534.50C92942.00 112503.00 92942.00 112471.50 92942.00 112440.00C92931.97 112441.30 92916.71 112437.38 92910.00 112442.00C92909.31 112450.85 92911.38 112466.21 92908.97 112471.00C92898.31 112460.67 92887.65 112450.33 92877.00 112440.00C92877.00 112418.33 92877.00 112396.67 92877.00 112375.00C92886.83 112374.33 92903.26 112376.34 92908.97 112374.00C92898.31 112363.67 92887.65 112353.33 92877.00 112343.00C92886.83 112342.33 92903.26 112344.34 92908.97 112342.00C92898.31 112331.67 92887.65 112321.33 92877.00 112311.00C92888.00 112289.67 92899.00 112268.33 92910.00 112247.00C92900.18 112246.31 92883.70 112248.38 92878.03 112245.97C92888.69 112235.31 92899.34 112224.66 92910.00 112214.00C92888.33 112225.00 92866.67 112236.00 92845.00 112247.00C92813.55 112214.12 92781.13 112182.21 92749.00 112150.00C92749.00 112171.33 92749.00 112192.67 92749.00 112214.00C92716.94 112181.72 92684.39 112149.94 92652.00 112118.00C92641.33 112096.67 92630.67 112075.33 92620.00 112054.00C92620.00 112086.00 92620.00 112118.00 92620.00 112150.00C92598.67 112139.33 92577.33 112128.67 92556.00 112118.00C92556.00 112096.67 92556.00 112075.33 92556.00 112054.00C92534.66 112075.33 92513.34 112096.67 92492.00 112118.00C92481.33 112096.67 92470.67 112075.33 92460.00 112054.00C92449.00 112075.33 92438.00 112096.67 92427.00 112118.00C92416.33 112096.67 92405.67 112075.33 92395.00 112054.00C92373.66 112075.33 92352.34 112096.67 92331.00 112118.00C92320.33 112096.67 92309.67 112075.33 92299.00 112054.00C92277.33 112075.33 92255.67 112096.67 92234.00 112118.00C92223.33 112096.67 92212.67 112075.33 92202.00 112054.00C92190.65 112052.23 92176.31 112057.69 92167.00 112051.00C92157.33 112041.33 92147.66 112031.67 92138.00 112022.00C92126.66 112020.19 92112.19 112025.78 92103.00 112018.91C92093.33 112008.94 92083.67 111998.97 92074.00 111989.00C92062.34 111990.84 92047.51 111985.18 92038.00 111992.09C92028.33 112002.06 92018.67 112012.03 92009.00 112022.00C91998.33 112000.33 91987.67 111978.67 91977.00 111957.00C91966.34 111967.67 91955.66 111978.33 91945.00 111989.00C91945.00 112000.00 91945.00 112011.00 91945.00 112022.00C91913.00 111989.67 91881.00 111957.33 91849.00 111925.00C91859.67 111903.67 91870.33 111882.33 91881.00 111861.00C91848.67 111861.00 91816.33 111861.00 91784.00 111861.00C91773.34 111871.67 91762.66 111882.33 91752.00 111893.00C91741.34 111882.33 91730.66 111871.67 91720.00 111861.00C91730.66 111850.33 91741.34 111839.67 91752.00 111829.00C91740.65 111830.77 91726.31 111825.31 91717.00 111832.00C91707.33 111841.67 91697.66 111851.33 91688.00 111861.00C91677.22 111849.74 91665.35 111839.33 91655.27 111827.51C91644.85 111806.34 91634.42 111785.17 91624.00 111764.00C91613.00 111775.00 91602.00 111786.00 91591.00 111797.00C91569.66 111764.67 91548.34 111732.33 91527.00 111700.00C91516.34 111710.67 91505.66 111721.33 91495.00 111732.00C91505.66 111742.67 91516.34 111753.33 91527.00 111764.00C91505.67 111775.00 91484.33 111786.00 91463.00 111797.00C91452.33 111786.00 91441.67 111775.00 91431.00 111764.00C91441.66 111753.33 91452.34 111742.67 91463.00 111732.00C91441.34 111742.67 91419.66 111753.33 91398.00 111764.00C91399.34 111753.98 91395.30 111738.60 91400.06 111732.00C91411.40 111729.92 91426.33 111736.52 91435.00 111728.00C91444.33 111718.67 91453.67 111709.33 91463.00 111700.00C91420.00 111700.00 91377.00 111700.00 91334.00 111700.00C91312.67 111689.33 91291.33 111678.67 91270.00 111668.00C91270.00 111689.33 91270.00 111710.67 91270.00 111732.00C91248.34 111742.67 91226.66 111753.33 91205.00 111764.00C91183.67 111732.00 91162.33 111700.00 91141.00 111668.00C91151.66 111657.33 91162.34 111646.67 91173.00 111636.00C91130.33 111636.00 91087.67 111636.00 91045.00 111636.00C91034.34 111625.33 91023.66 111614.67 91013.00 111604.00C91002.00 111625.33 90991.00 111646.67 90980.00 111668.00C90980.00 111635.67 90980.00 111603.33 90980.00 111571.00C90968.66 111572.81 90954.19 111567.22 90945.00 111574.09C90935.33 111584.06 90925.67 111594.03 90916.00 111604.00C90916.00 111582.33 90916.00 111560.67 90916.00 111539.00C90905.34 111549.67 90894.66 111560.33 90884.00 111571.00C90884.00 111528.33 90884.00 111485.67 90884.00 111443.00C90873.34 111453.67 90862.66 111464.33 90852.00 111475.00C90852.00 111453.67 90852.00 111432.33 90852.00 111411.00C90873.33 111411.00 90894.67 111411.00 90916.00 111411.00C90894.67 111389.33 90873.33 111367.67 90852.00 111346.00C90830.57 111335.16 90808.93 111324.71 90787.62 111313.62C90766.07 111292.42 90744.54 111271.21 90723.00 111250.00C90713.05 111250.67 90698.75 111248.66 90691.50 111251.00C90702.00 111272.00 90712.50 111293.00 90723.00 111314.00C90712.41 111312.07 90697.01 111317.91 90689.50 111311.00C90679.33 111290.67 90669.17 111270.33 90659.00 111250.00C90637.67 111250.00 90616.33 111250.00 90595.00 111250.00C90573.34 111260.67 90551.66 111271.33 90530.00 111282.00C90498.00 111271.33 90466.00 111260.67 90434.00 111250.00C90423.34 111239.33 90412.66 111228.67 90402.00 111218.00C90391.00 111228.67 90380.00 111239.33 90369.00 111250.00C90357.65 111251.77 90343.31 111246.31 90334.00 111253.00C90324.33 111262.67 90314.66 111272.33 90305.00 111282.00C90294.97 111283.30 90279.71 111279.38 90273.00 111284.00C90273.00 111304.67 90273.00 111325.33 90273.00 111346.00C90262.34 111335.33 90251.66 111324.67 90241.00 111314.00C90229.27 111315.00 90216.64 111311.90 90205.49 111315.73C90184.99 111325.81 90164.50 111335.91 90144.00 111346.00C90133.34 111335.33 90122.66 111324.67 90112.00 111314.00C90101.34 111324.67 90090.66 111335.33 90080.00 111346.00C90069.34 111335.33 90058.66 111324.67 90048.00 111314.00C90048.00 111357.00 90048.00 111400.00 90048.00 111443.00C90026.67 111432.33 90005.33 111421.67 89984.00 111411.00C89973.34 111421.67 89962.66 111432.33 89952.00 111443.00C89941.73 111443.67 89927.04 111441.66 89919.52 111444.00C89930.35 111465.00 89941.17 111486.00 89952.00 111507.00C89930.34 111496.33 89908.66 111485.67 89887.00 111475.00C89885.70 111485.03 89889.62 111500.29 89885.00 111507.00C89864.33 111507.00 89843.67 111507.00 89823.00 111507.00C89812.34 111496.33 89801.66 111485.67 89791.00 111475.00C89769.67 111475.00 89748.33 111475.00 89727.00 111475.00C89727.00 111496.33 89727.00 111517.67 89727.00 111539.00C89716.00 111528.33 89705.00 111517.67 89694.00 111507.00C89695.03 111518.72 89691.84 111531.40 89695.78 111542.50C89706.19 111563.00 89716.59 111583.50 89727.00 111604.00C89705.33 111593.00 89683.67 111582.00 89662.00 111571.00C89651.33 111582.00 89640.67 111593.00 89630.00 111604.00C89639.17 111604.00 89656.34 111604.00 89660.50 111604.00C89629.00 111604.00 89597.50 111604.00 89566.00 111604.00C89567.77 111615.35 89562.31 111629.69 89569.00 111639.00C89578.67 111648.67 89588.34 111658.33 89598.00 111668.00C89587.33 111689.33 89576.67 111710.67 89566.00 111732.00C89554.61 111733.76 89540.31 111728.33 89530.91 111735.00C89520.94 111744.67 89510.97 111754.33 89501.00 111764.00C89490.34 111753.33 89479.66 111742.67 89469.00 111732.00C89457.65 111733.77 89443.31 111728.31 89434.00 111735.00C89424.33 111744.67 89414.66 111754.33 89405.00 111764.00C89403.70 111774.36 89407.63 111789.96 89403.00 111797.00C89382.33 111797.00 89361.67 111797.00 89341.00 111797.00C89340.32 111806.51 89342.36 111822.57 89339.98 111827.98C89318.66 111806.65 89297.33 111785.33 89276.00 111764.00C89276.67 111754.48 89274.66 111738.50 89277.00 111733.00C89287.33 111743.33 89297.67 111753.67 89308.00 111764.00C89306.07 111753.41 89311.91 111738.01 89305.00 111730.50C89284.67 111720.33 89264.33 111710.17 89244.00 111700.00C89242.70 111710.03 89246.62 111725.29 89242.00 111732.00C89232.63 111733.30 89218.05 111729.38 89212.00 111734.00C89211.00 111743.82 89213.99 111756.48 89210.50 111764.52C89179.00 111775.34 89147.50 111786.17 89116.00 111797.00C89114.96 111808.70 89118.17 111821.38 89114.22 111832.46C89103.81 111852.64 89093.41 111872.82 89083.00 111893.00C89061.67 111893.00 89040.33 111893.00 89019.00 111893.00C89008.33 111914.33 88997.67 111935.67 88987.00 111957.00C88976.34 111946.33 88965.66 111935.67 88955.00 111925.00C88933.57 111935.84 88911.93 111946.29 88890.62 111957.38C88869.08 111978.92 88847.54 112000.46 88826.00 112022.00C88815.33 112011.00 88804.67 112000.00 88794.00 111989.00C88794.00 111967.67 88794.00 111946.33 88794.00 111925.00C88772.67 111935.67 88751.33 111946.33 88730.00 111957.00C88730.00 111935.67 88730.00 111914.33 88730.00 111893.00C88719.97 111894.30 88704.71 111890.38 88698.00 111895.00C88698.00 111905.00 88698.00 111915.00 88698.00 111925.00C88665.66 111903.67 88633.34 111882.33 88601.00 111861.00C88590.97 111859.70 88575.71 111863.62 88569.00 111859.00C88569.00 111838.33 88569.00 111817.67 88569.00 111797.00C88558.33 111818.33 88547.67 111839.67 88537.00 111861.00C88526.34 111850.33 88515.66 111839.67 88505.00 111829.00C88515.67 111850.33 88526.33 111871.67 88537.00 111893.00C88526.97 111894.30 88511.71 111890.38 88505.00 111895.00C88503.67 111904.36 88507.69 111919.06 88502.94 111925.00C88491.60 111927.08 88476.67 111920.48 88468.00 111929.00C88458.67 111938.33 88449.33 111947.67 88440.00 111957.00C88429.34 111946.33 88418.66 111935.67 88408.00 111925.00C88376.00 111946.33 88344.00 111967.67 88312.00 111989.00C88279.67 111978.33 88247.33 111967.67 88215.00 111957.00C88205.06 111957.69 88190.72 111955.64 88183.50 111958.02C88194.00 111979.34 88204.50 112000.67 88215.00 112022.00C88150.67 112022.00 88086.33 112022.00 88022.00 112022.00C88020.70 112011.64 88024.63 111996.04 88020.00 111989.00C87999.33 111989.00 87978.67 111989.00 87958.00 111989.00C87957.32 111999.26 87959.35 112013.98 87956.99 112021.48C87935.89 112010.49 87914.60 111999.86 87893.62 111988.62C87883.08 111978.08 87872.54 111967.54 87862.00 111957.00C87863.76 111968.39 87858.33 111982.69 87865.00 111992.09C87874.67 112002.06 87884.33 112012.03 87894.00 112022.00C87883.34 112032.67 87872.66 112043.33 87862.00 112054.00C87851.00 112032.33 87840.00 112010.67 87829.00 111989.00C87819.48 111989.69 87803.45 111987.62 87798.00 111990.03C87808.33 112000.69 87818.67 112011.34 87829.00 112022.00C87818.34 112032.67 87807.66 112043.33 87797.00 112054.00C87775.67 112043.33 87754.33 112032.67 87733.00 112022.00C87731.21 112010.33 87736.72 111995.63 87730.00 111986.00C87720.33 111976.33 87710.66 111966.67 87701.00 111957.00C87679.34 111967.67 87657.66 111978.33 87636.00 111989.00C87647.00 111978.33 87658.00 111967.67 87669.00 111957.00C87626.00 111957.00 87583.00 111957.00 87540.00 111957.00C87529.34 111946.33 87518.66 111935.67 87508.00 111925.00C87486.67 111925.00 87465.33 111925.00 87444.00 111925.00C87444.00 111946.33 87444.00 111967.67 87444.00 111989.00C87411.67 111989.00 87379.33 111989.00 87347.00 111989.00C87347.00 112010.67 87347.00 112032.33 87347.00 112054.00C87325.67 112064.67 87304.33 112075.33 87283.00 112086.00C87293.66 112096.67 87304.34 112107.33 87315.00 112118.00C87313.20 112128.91 87318.73 112143.74 87311.99 112152.01C87280.88 112172.82 87249.63 112193.42 87218.62 112214.38C87207.74 112225.25 87196.88 112236.13 87186.00 112247.00C87197.00 112268.33 87208.00 112289.67 87219.00 112311.00C87206.96 112309.98 87193.99 112313.12 87182.54 112309.27C87162.36 112299.18 87142.18 112289.09 87122.00 112279.00C87079.00 112289.67 87036.00 112300.33 86993.00 112311.00C86993.00 112343.00 86993.00 112375.00 86993.00 112407.00C86971.67 112418.00 86950.33 112429.00 86929.00 112440.00C86950.33 112450.67 86971.67 112461.33 86993.00 112472.00C87004.67 112473.80 87019.37 112468.28 87029.00 112475.00C87038.67 112484.67 87048.34 112494.33 87058.00 112504.00C87047.34 112514.67 87036.66 112525.33 87026.00 112536.00C87014.33 112537.80 86999.63 112532.28 86990.00 112539.00C86980.33 112548.67 86970.66 112558.33 86961.00 112568.00C86982.66 112578.67 87004.34 112589.33 87026.00 112600.00C87024.20 112611.38 87029.77 112625.81 87022.91 112635.09C87012.94 112645.06 87002.97 112655.03 86993.00 112665.00C86971.67 112665.00 86950.33 112665.00 86929.00 112665.00C86918.34 112675.67 86907.66 112686.33 86897.00 112697.00C86907.67 112718.33 86918.33 112739.67 86929.00 112761.00C86918.34 112771.67 86907.66 112782.33 86897.00 112793.00C86886.34 112782.33 86875.66 112771.67 86865.00 112761.00C86854.33 112782.33 86843.67 112803.67 86833.00 112825.00C86843.67 112836.00 86854.33 112847.00 86865.00 112858.00C86854.33 112879.33 86843.67 112900.67 86833.00 112922.00C86822.52 112923.00 86809.18 112920.00 86800.48 112923.50C86789.66 112955.00 86778.83 112986.50 86768.00 113018.00C86746.67 113028.67 86725.33 113039.33 86704.00 113050.00C86682.67 113039.33 86661.33 113028.67 86640.00 113018.00C86617.46 113028.86 86595.27 113040.50 86572.50 113050.86C86541.34 113061.57 86510.17 113072.29 86479.00 113083.00C86457.67 113115.00 86436.33 113147.00 86415.00 113179.00C86393.33 113179.00 86371.67 113179.00 86350.00 113179.00C86339.33 113200.33 86328.67 113221.67 86318.00 113243.00C86308.06 113243.69 86293.72 113241.64 86286.50 113244.02C86297.00 113265.34 86307.50 113286.67 86318.00 113308.00C86307.34 113318.67 86296.66 113329.33 86286.00 113340.00C86287.77 113351.35 86282.31 113365.69 86289.00 113375.00C86298.67 113384.67 86308.34 113394.33 86318.00 113404.00C86339.66 113393.33 86361.34 113382.67 86383.00 113372.00C86381.59 113383.46 86385.88 113396.82 86380.73 113407.02C86349.15 113449.02 86317.57 113491.01 86286.00 113533.00C86275.33 113565.00 86264.67 113597.00 86254.00 113629.00C86232.67 113650.67 86211.33 113672.33 86190.00 113694.00C86168.33 113694.00 86146.67 113694.00 86125.00 113694.00C86114.33 113715.33 86103.67 113736.67 86093.00 113758.00C86091.70 113768.03 86095.62 113783.29 86091.00 113790.00C86070.33 113790.00 86049.67 113790.00 86029.00 113790.00C86018.33 113854.33 86007.67 113918.67 85997.00 113983.00C85985.61 113981.24 85971.31 113986.67 85961.91 113980.00C85951.94 113970.33 85941.97 113960.67 85932.00 113951.00C85921.34 113961.67 85910.66 113972.33 85900.00 113983.00C85878.67 113983.00 85857.33 113983.00 85836.00 113983.00C85825.33 114004.33 85814.67 114025.67 85804.00 114047.00C85782.34 114057.67 85760.66 114068.33 85739.00 114079.00C85739.00 114111.33 85739.00 114143.67 85739.00 114176.00C85707.00 114176.00 85675.00 114176.00 85643.00 114176.00C85642.32 114185.95 85644.35 114200.27 85641.99 114207.50C85599.33 114186.34 85556.66 114165.16 85514.00 114144.00C85492.66 114165.33 85471.34 114186.67 85450.00 114208.00C85418.00 114208.00 85386.00 114208.00 85354.00 114208.00C85321.67 114218.67 85289.33 114229.33 85257.00 114240.00C85214.33 114240.00 85171.67 114240.00 85129.00 114240.00C85128.31 114249.52 85130.38 114265.55 85127.97 114271.00C85117.31 114260.67 85106.65 114250.33 85096.00 114240.00C85074.66 114261.33 85053.34 114282.67 85032.00 114304.00C85021.34 114293.33 85010.66 114282.67 85000.00 114272.00C85010.67 114293.67 85021.33 114315.33 85032.00 114337.00C85053.33 114337.00 85074.67 114337.00 85096.00 114337.00C85095.00 114347.17 85098.00 114361.33 85094.50 114369.00C85063.00 114369.00 85031.50 114369.00 85000.00 114369.00C84978.67 114379.67 84957.33 114390.33 84936.00 114401.00C84903.67 114390.33 84871.33 114379.67 84839.00 114369.00C84839.00 114390.33 84839.00 114411.67 84839.00 114433.00C84828.34 114422.33 84817.66 114411.67 84807.00 114401.00C84817.66 114390.33 84828.34 114379.67 84839.00 114369.00C84827.65 114370.77 84813.31 114365.31 84804.00 114372.00C84794.33 114381.67 84784.66 114391.33 84775.00 114401.00C84764.34 114390.33 84753.66 114379.67 84743.00 114369.00C84731.74 114379.78 84721.33 114391.65 84709.51 114401.74C84688.34 114412.15 84667.17 114422.58 84646.00 114433.00C84644.70 114443.03 84648.62 114458.29 84644.00 114465.00C84623.33 114465.00 84602.67 114465.00 84582.00 114465.00C84581.33 114474.52 84583.34 114490.50 84581.00 114496.00C84570.67 114485.67 84560.33 114475.33 84550.00 114465.00C84539.34 114475.67 84528.66 114486.33 84518.00 114497.00C84496.08 114475.92 84474.40 114454.60 84453.00 114433.00C84442.10 114434.81 84427.23 114429.25 84419.00 114436.03C84398.33 114467.35 84377.67 114498.68 84357.00 114530.00C84335.67 114519.00 84314.33 114508.00 84293.00 114497.00C84291.16 114508.66 84296.82 114523.49 84289.91 114533.00C84279.94 114542.67 84269.97 114552.33 84260.00 114562.00C84259.32 114571.95 84261.34 114586.25 84259.00 114593.50C84238.00 114583.00 84217.00 114572.50 84196.00 114562.00C84174.67 114594.00 84153.33 114626.00 84132.00 114658.00C84110.67 114658.00 84089.33 114658.00 84068.00 114658.00C84078.67 114690.33 84089.33 114722.67 84100.00 114755.00C84089.33 114776.33 84078.67 114797.67 84068.00 114819.00C84046.34 114808.33 84024.66 114797.67 84003.00 114787.00C83981.66 114754.67 83960.34 114722.33 83939.00 114690.00C83939.00 114658.00 83939.00 114626.00 83939.00 114594.00C83885.33 114604.67 83831.67 114615.33 83778.00 114626.00C83735.00 114604.67 83692.00 114583.33 83649.00 114562.00C83660.00 114540.33 83671.00 114518.67 83682.00 114497.00C83649.56 114475.51 83616.96 114454.26 83584.62 114432.62C83574.08 114422.08 83563.54 114411.54 83553.00 114401.00C83531.67 114401.00 83510.33 114401.00 83489.00 114401.00C83478.33 114368.67 83467.67 114336.33 83457.00 114304.00C83414.00 114315.00 83371.00 114326.00 83328.00 114337.00C83327.14 114324.40 83329.87 114311.22 83326.34 114299.01C83316.23 114268.68 83306.11 114238.34 83296.00 114208.00C83307.35 114206.23 83321.69 114211.69 83331.00 114205.00C83340.67 114195.33 83350.34 114185.67 83360.00 114176.00C83338.67 114165.33 83317.33 114154.67 83296.00 114144.00C83285.33 114122.33 83274.67 114100.67 83264.00 114079.00C83273.52 114078.32 83289.54 114080.36 83295.00 114077.98C83284.52 114067.09 83273.05 114056.97 83263.26 114045.52C83252.67 114024.57 83242.47 114003.43 83231.62 113982.62C83210.07 113961.42 83188.54 113940.21 83167.00 113919.00C83156.97 113920.30 83141.71 113916.38 83135.00 113921.00C83134.00 113930.81 83136.99 113943.49 83133.50 113951.50C83102.00 113962.00 83070.50 113972.50 83039.00 113983.00C83037.66 113972.98 83041.70 113957.60 83036.94 113951.00C83027.26 113949.70 83012.35 113953.62 83006.00 113949.00C83004.09 113939.04 83009.88 113924.38 83003.00 113917.45C82982.67 113906.97 82962.33 113896.48 82942.00 113886.00C82952.66 113875.33 82963.34 113864.67 82974.00 113854.00C82974.00 113822.00 82974.00 113790.00 82974.00 113758.00C82995.40 113736.40 83017.08 113715.08 83039.00 113694.00C83028.65 113692.66 83012.92 113696.70 83006.00 113691.94C83003.92 113680.60 83010.52 113665.67 83002.00 113657.00C82992.67 113647.67 82983.33 113638.33 82974.00 113629.00C82974.00 113597.00 82974.00 113565.00 82974.00 113533.00C82963.97 113531.68 82948.65 113535.66 82942.00 113530.97C82942.00 113509.98 82942.00 113488.99 82942.00 113468.00C82931.66 113466.70 82917.23 113470.62 82909.50 113465.99C82899.03 113423.81 82888.25 113381.70 82878.00 113339.46C82878.00 113296.64 82878.00 113253.82 82878.00 113211.00C82856.34 113200.33 82834.66 113189.67 82813.00 113179.00C82813.00 113136.00 82813.00 113093.00 82813.00 113050.00C82791.66 113028.67 82770.34 113007.33 82749.00 112986.00C82727.67 112996.67 82706.33 113007.33 82685.00 113018.00C82663.67 113061.00 82642.33 113104.00 82621.00 113147.00C82417.33 112964.67 82213.67 112782.33 82010.00 112600.00C81860.00 112696.67 81710.00 112793.33 81560.00 112890.00C81527.67 112900.67 81495.33 112911.33 81463.00 112922.00C81463.00 112900.67 81463.00 112879.33 81463.00 112858.00C81452.34 112868.67 81441.66 112879.33 81431.00 112890.00C81420.34 112879.33 81409.66 112868.67 81399.00 112858.00C81387.62 112856.20 81373.19 112861.77 81363.91 112854.91C81353.94 112844.94 81343.97 112834.97 81334.00 112825.00C81322.29 112823.99 81309.66 112827.11 81298.54 112823.27C81278.36 112813.18 81258.18 112803.09 81238.00 112793.00C81238.00 112750.33 81238.00 112707.67 81238.00 112665.00C81216.67 112643.33 81195.33 112621.67 81174.00 112600.00C81152.33 112600.00 81130.67 112600.00 81109.00 112600.00C81087.67 112621.67 81066.33 112643.33 81045.00 112665.00C80991.33 112643.33 80937.67 112621.67 80884.00 112600.00C80884.00 112546.67 80884.00 112493.33 80884.00 112440.00C80873.33 112429.00 80862.67 112418.00 80852.00 112407.00C80830.67 112418.00 80809.33 112429.00 80788.00 112440.00C80766.92 112418.08 80745.60 112396.41 80724.00 112375.00C80734.67 112343.00 80745.33 112311.00 80756.00 112279.00C80702.33 112289.67 80648.67 112300.33 80595.00 112311.00C80563.00 112300.33 80531.00 112289.67 80499.00 112279.00C80509.67 112257.33 80520.33 112235.67 80531.00 112214.00C80520.33 112192.67 80509.67 112171.33 80499.00 112150.00C80456.00 112150.00 80413.00 112150.00 80370.00 112150.00C80368.70 112139.97 80372.62 112124.71 80368.00 112118.00C80347.33 112118.00 80326.67 112118.00 80306.00 112118.00C80305.32 112127.94 80307.37 112142.28 80304.98 112149.50C80283.66 112139.00 80262.33 112128.50 80241.00 112118.00C80239.70 112107.97 80243.62 112092.71 80239.00 112086.00C80229.63 112084.71 80215.05 112088.62 80209.00 112084.00C80209.00 112063.33 80209.00 112042.67 80209.00 112022.00C80187.67 112011.00 80166.33 112000.00 80145.00 111989.00C80145.00 111946.33 80145.00 111903.67 80145.00 111861.00C80123.34 111871.67 80101.66 111882.33 80080.00 111893.00C80069.34 111882.33 80058.66 111871.67 80048.00 111861.00C80049.77 111849.65 80044.31 111835.31 80051.00 111826.00C80060.67 111816.33 80070.34 111806.67 80080.00 111797.00C80058.67 111786.00 80037.33 111775.00 80016.00 111764.00C80014.06 111753.40 80019.93 111738.00 80012.99 111730.48C79992.54 111720.18 79971.93 111710.19 79951.62 111699.62C79941.08 111689.08 79930.54 111678.54 79920.00 111668.00C79930.66 111657.33 79941.34 111646.67 79952.00 111636.00C79919.67 111614.33 79887.33 111592.67 79855.00 111571.00C79853.70 111560.97 79857.62 111545.71 79853.00 111539.00C79841.92 111536.52 79825.07 111544.84 79819.00 111533.00C79799.00 111503.00 79779.00 111473.00 79759.00 111443.00C79748.97 111441.70 79733.71 111445.62 79727.00 111441.00C79727.00 111420.33 79727.00 111399.67 79727.00 111379.00C79714.99 111377.43 79700.98 111382.42 79690.45 111375.95C79659.64 111355.30 79628.82 111334.65 79598.00 111314.00C79587.33 111228.33 79576.67 111142.67 79566.00 111057.00C79587.33 111025.00 79608.67 110993.00 79630.00 110961.00C79619.33 110950.00 79608.67 110939.00 79598.00 110928.00C79585.73 110928.88 79572.87 110926.10 79561.02 110929.71C79530.68 110940.14 79500.34 110950.57 79470.00 110961.00C79459.64 110959.69 79444.01 110963.65 79437.00 110958.98C79437.00 110916.66 79437.00 110874.33 79437.00 110832.00C79426.97 110830.69 79411.68 110834.64 79405.00 110829.98C79405.00 110787.66 79405.00 110745.33 79405.00 110703.00C79426.67 110681.67 79448.33 110660.33 79470.00 110639.00C79448.33 110639.00 79426.67 110639.00 79405.00 110639.00C79405.00 110617.67 79405.00 110596.33 79405.00 110575.00C79426.67 110575.00 79448.33 110575.00 79470.00 110575.00C79468.68 110564.97 79472.66 110549.65 79467.97 110543.00C79446.98 110543.00 79425.99 110543.00 79405.00 110543.00C79405.00 110510.67 79405.00 110478.33 79405.00 110446.00C79415.80 110434.75 79427.61 110424.30 79437.76 110412.53C79448.51 110391.69 79459.25 110370.84 79470.00 110350.00C79448.33 110350.00 79426.67 110350.00 79405.00 110350.00C79383.67 110328.33 79362.33 110306.67 79341.00 110285.00C79339.70 110274.97 79343.62 110259.71 79339.00 110253.00C79318.33 110253.00 79297.67 110253.00 79277.00 110253.00C79277.00 110231.67 79277.00 110210.33 79277.00 110189.00C79287.67 110167.67 79298.33 110146.33 79309.00 110125.00C79298.33 110114.00 79287.67 110103.00 79277.00 110092.00C79266.00 110103.00 79255.00 110114.00 79244.00 110125.00C79233.33 110114.00 79222.67 110103.00 79212.00 110092.00C79222.67 110070.67 79233.33 110049.33 79244.00 110028.00C79233.34 110017.33 79222.66 110006.67 79212.00 109996.00C79222.79 109984.74 79234.63 109974.31 79244.75 109962.51C79255.50 109941.34 79266.25 109920.17 79277.00 109899.00C79266.00 109899.00 79255.00 109899.00 79244.00 109899.00C79255.00 109856.33 79266.00 109813.67 79277.00 109771.00C79267.17 109770.33 79250.74 109772.34 79245.03 109770.00C79255.69 109759.67 79266.35 109749.33 79277.00 109739.00C79266.00 109728.33 79255.00 109717.67 79244.00 109707.00C79255.00 109696.00 79266.00 109685.00 79277.00 109674.00C79267.17 109673.33 79250.74 109675.34 79245.03 109673.00C79255.69 109662.67 79266.35 109652.33 79277.00 109642.00C79255.33 109610.00 79233.67 109578.00 79212.00 109546.00C79212.00 109492.33 79212.00 109438.67 79212.00 109385.00C79233.67 109385.00 79255.33 109385.00 79277.00 109385.00C79276.88 109363.50 79277.23 109341.99 79276.83 109320.49C79265.27 109287.40 79254.78 109253.89 79242.54 109221.07C79232.35 109200.72 79222.18 109180.36 79212.00 109160.00C79222.63 109116.81 79233.58 109073.70 79244.00 109030.46C79244.27 109008.46 79243.44 108986.40 79244.44 108964.44C79255.27 108900.77 79266.32 108837.15 79277.00 108773.46C79277.00 108752.31 79277.00 108731.15 79277.00 108710.00C79319.67 108613.33 79362.33 108516.67 79405.00 108420.00C79415.80 108408.75 79427.61 108398.30 79437.76 108386.53C79448.51 108365.69 79459.25 108344.84 79470.00 108324.00C79512.67 108302.67 79555.33 108281.33 79598.00 108260.00C79608.67 108227.67 79619.33 108195.33 79630.00 108163.00C79673.00 108141.67 79716.00 108120.33 79759.00 108099.00C79780.34 108077.67 79801.66 108056.33 79823.00 108035.00C79844.67 107992.00 79866.33 107949.00 79888.00 107906.00C79888.00 107884.67 79888.00 107863.33 79888.00 107842.00C79865.96 107808.62 79842.99 107775.80 79821.53 107742.06C79800.68 107700.37 79779.84 107658.69 79759.00 107617.00C79780.33 107563.33 79801.67 107509.67 79823.00 107456.00C79824.76 107444.61 79819.33 107430.31 79826.00 107420.91C79835.67 107410.94 79845.33 107400.97 79855.00 107391.00C79866.00 107402.00 79877.00 107413.00 79888.00 107424.00C79899.57 107412.59 79910.15 107400.09 79922.38 107389.42C79953.59 107368.61 79984.79 107347.81 80016.00 107327.00C80005.34 107316.33 79994.66 107305.67 79984.00 107295.00C79994.63 107241.15 80005.54 107187.35 80016.00 107133.46C80016.00 107101.64 80016.00 107069.82 80016.00 107038.00C79994.66 107005.67 79973.34 106973.33 79952.00 106941.00C79952.00 106898.33 79952.00 106855.67 79952.00 106813.00C79919.67 106823.67 79887.33 106834.33 79855.00 106845.00C79812.33 106845.00 79769.67 106845.00 79727.00 106845.00C79694.66 106823.67 79662.34 106802.33 79630.00 106781.00C79619.33 106845.33 79608.67 106909.67 79598.00 106974.00C79576.66 106995.33 79555.34 107016.67 79534.00 107038.00C79491.00 107059.33 79448.00 107080.67 79405.00 107102.00C78847.13 107069.99 78289.27 107037.90 77731.40 107005.94C76649.24 106962.96 75567.09 106919.92 74484.93 106876.98C73381.29 106855.65 72277.64 106834.33 71174.00 106813.00C71119.60 106181.61 71064.78 105550.25 71010.65 104918.83C70957.77 104263.89 70904.88 103608.94 70852.00 102954.00C70337.67 102354.00 69823.33 101754.00 69309.00 101154.00C69405.85 101143.35 69502.68 101132.55 69599.54 101122.00C70006.36 101122.00 70413.18 101122.00 70820.00 101122.00C70777.33 100339.33 70734.67 99556.67 70692.00 98774.00C70659.67 98785.00 70627.33 98796.00 70595.00 98807.00C70552.33 98785.33 70509.67 98763.67 70467.00 98742.00C70456.33 98688.67 70445.67 98635.33 70435.00 98582.00C70424.00 98560.33 70413.00 98538.67 70402.00 98517.00C70412.27 98516.32 70426.96 98518.34 70434.48 98516.00C70423.66 98495.00 70412.83 98474.00 70402.00 98453.00C70402.00 98431.67 70402.00 98410.33 70402.00 98389.00C70391.33 98378.00 70380.67 98367.00 70370.00 98356.00C70379.52 98355.33 70395.50 98357.34 70401.00 98355.00C70390.67 98344.67 70380.33 98334.33 70370.00 98324.00C70370.00 98302.67 70370.00 98281.33 70370.00 98260.00C70359.33 98249.33 70348.67 98238.67 70338.00 98228.00C70338.00 98206.33 70338.00 98184.67 70338.00 98163.00C70306.00 98152.33 70274.00 98141.67 70242.00 98131.00C70242.67 98121.48 70240.66 98105.50 70243.00 98100.00C70253.33 98110.33 70263.67 98120.67 70274.00 98131.00C70274.00 98109.67 70274.00 98088.33 70274.00 98067.00C70241.67 98045.67 70209.33 98024.33 70177.00 98003.00C70187.67 97992.33 70198.33 97981.67 70209.00 97971.00C70198.97 97969.68 70183.65 97973.66 70177.00 97968.97C70177.00 97947.98 70177.00 97926.99 70177.00 97906.00C70166.33 97895.33 70155.67 97884.67 70145.00 97874.00C70123.67 97874.00 70102.33 97874.00 70081.00 97874.00C70091.67 97863.33 70102.33 97852.67 70113.00 97842.00C70111.70 97831.97 70115.62 97816.71 70111.00 97810.00C70101.63 97808.71 70087.05 97812.62 70081.00 97808.00C70079.71 97798.63 70083.62 97784.05 70079.00 97778.00C70070.15 97777.33 70054.83 97779.34 70050.00 97777.00C70060.33 97766.67 70070.67 97756.33 70081.00 97746.00C70081.00 97703.00 70081.00 97660.00 70081.00 97617.00C70091.67 97627.67 70102.33 97638.33 70113.00 97649.00C70113.00 97606.00 70113.00 97563.00 70113.00 97520.00C70102.33 97531.00 70091.67 97542.00 70081.00 97553.00C70080.33 97543.17 70082.34 97526.74 70080.00 97521.03C70069.67 97531.69 70059.33 97542.34 70049.00 97553.00C70049.00 97531.33 70049.00 97509.67 70049.00 97488.00C70038.00 97498.67 70027.00 97509.33 70016.00 97520.00C70016.00 97498.67 70016.00 97477.33 70016.00 97456.00C70005.33 97466.67 69994.67 97477.33 69984.00 97488.00C69973.33 97477.33 69962.67 97466.67 69952.00 97456.00C69962.67 97445.33 69973.33 97434.67 69984.00 97424.00C69962.67 97413.33 69941.33 97402.67 69920.00 97392.00C69909.16 97370.23 69898.72 97348.26 69887.62 97326.62C69877.08 97316.08 69866.54 97305.54 69856.00 97295.00C69854.23 97283.65 69859.69 97269.31 69853.00 97260.00C69843.33 97250.33 69833.67 97240.67 69824.00 97231.00C69824.00 97209.67 69824.00 97188.33 69824.00 97167.00C69813.00 97156.33 69802.00 97145.67 69791.00 97135.00C69802.00 97124.00 69813.00 97113.00 69824.00 97102.00C69813.00 97080.67 69802.00 97059.33 69791.00 97038.00C69792.36 97027.42 69788.29 97013.47 69793.03 97005.00C69814.02 96994.67 69835.01 96984.33 69856.00 96974.00C69854.64 96963.42 69858.71 96949.47 69853.97 96941.00C69832.98 96930.67 69811.99 96920.33 69791.00 96910.00C69791.00 96888.33 69791.00 96866.67 69791.00 96845.00C69780.33 96834.33 69769.67 96823.67 69759.00 96813.00C69759.00 96770.00 69759.00 96727.00 69759.00 96684.00C69727.00 96684.00 69695.00 96684.00 69663.00 96684.00C69663.00 96652.00 69663.00 96620.00 69663.00 96588.00C69684.33 96566.67 69705.67 96545.33 69727.00 96524.00C69725.98 96511.96 69729.12 96498.99 69725.27 96487.54C69715.18 96467.36 69705.09 96447.18 69695.00 96427.00C69716.33 96416.33 69737.67 96405.67 69759.00 96395.00C69737.67 96373.67 69716.33 96352.33 69695.00 96331.00C69716.33 96320.33 69737.67 96309.67 69759.00 96299.00C69748.33 96288.00 69737.67 96277.00 69727.00 96266.00C69728.77 96254.65 69723.31 96240.31 69730.00 96231.00C69739.67 96221.33 69749.33 96211.67 69759.00 96202.00C69770.73 96200.99 69783.38 96204.12 69794.52 96200.25C69815.13 96190.03 69835.91 96180.13 69856.38 96169.62C69888.25 96137.75 69920.13 96105.87 69952.00 96074.00C69953.03 96061.96 69949.85 96048.97 69953.75 96037.53C69963.97 96017.23 69973.88 95996.78 69984.38 95976.62C70005.92 95955.41 70027.46 95934.21 70049.00 95913.00C70050.00 95901.27 70046.90 95888.64 70050.73 95877.49C70060.82 95857.00 70070.91 95836.50 70081.00 95816.00C70081.00 95794.67 70081.00 95773.33 70081.00 95752.00C70091.67 95741.33 70102.33 95730.67 70113.00 95720.00C70113.00 95728.74 70113.00 95747.91 70113.00 95750.00C70114.29 95740.63 70110.38 95726.05 70115.00 95720.00C70135.67 95720.00 70156.33 95720.00 70177.00 95720.00C70175.23 95708.65 70180.69 95694.31 70174.00 95685.00C70164.33 95675.33 70154.67 95665.67 70145.00 95656.00C70102.00 95656.00 70059.00 95656.00 70016.00 95656.00C69994.67 95623.67 69973.33 95591.33 69952.00 95559.00C69962.67 95569.67 69973.33 95580.33 69984.00 95591.00C69994.67 95569.67 70005.33 95548.33 70016.00 95527.00C70025.83 95526.33 70042.26 95528.34 70047.97 95526.00C70037.31 95515.67 70026.66 95505.33 70016.00 95495.00C70014.70 95484.97 70018.62 95469.71 70014.00 95463.00C69993.33 95463.00 69972.67 95463.00 69952.00 95463.00C69930.67 95452.00 69909.33 95441.00 69888.00 95430.00C69878.48 95430.69 69862.45 95428.62 69857.00 95431.03C69867.33 95441.69 69877.67 95452.34 69888.00 95463.00C69877.76 95462.15 69864.14 95464.69 69856.00 95461.74C69856.00 95408.49 69856.00 95355.25 69856.00 95302.00C69845.33 95280.67 69834.67 95259.33 69824.00 95238.00C69834.67 95227.00 69845.33 95216.00 69856.00 95205.00C69854.68 95194.97 69858.66 95179.65 69853.97 95173.00C69832.98 95173.00 69811.99 95173.00 69791.00 95173.00C69780.33 95183.67 69769.67 95194.33 69759.00 95205.00C69758.33 95214.83 69760.34 95231.26 69758.00 95236.97C69747.67 95226.31 69737.33 95215.66 69727.00 95205.00C69748.33 95183.67 69769.67 95162.33 69791.00 95141.00C69791.00 95119.67 69791.00 95098.33 69791.00 95077.00C69802.00 95066.33 69813.00 95055.67 69824.00 95045.00C69770.33 95045.00 69716.67 95045.00 69663.00 95045.00C69695.00 95012.67 69727.00 94980.33 69759.00 94948.00C69758.32 94938.05 69760.34 94923.75 69758.00 94916.50C69737.00 94927.00 69716.00 94937.50 69695.00 94948.00C69684.33 94937.33 69673.67 94926.67 69663.00 94916.00C69664.00 94905.83 69661.00 94891.67 69664.50 94884.00C69696.00 94884.00 69727.50 94884.00 69759.00 94884.00C69769.67 94873.33 69780.33 94862.67 69791.00 94852.00C69769.67 94841.33 69748.33 94830.67 69727.00 94820.00C69728.30 94809.64 69724.37 94794.04 69729.00 94787.00C69749.67 94787.00 69770.33 94787.00 69791.00 94787.00C69780.33 94776.33 69769.67 94765.67 69759.00 94755.00C69727.00 94755.00 69695.00 94755.00 69663.00 94755.00C69652.33 94744.33 69641.67 94733.67 69631.00 94723.00C69620.33 94733.67 69609.67 94744.33 69599.00 94755.00C69588.00 94744.33 69577.00 94733.67 69566.00 94723.00C69534.00 94723.00 69502.00 94723.00 69470.00 94723.00C69491.33 94701.67 69512.67 94680.33 69534.00 94659.00C69523.33 94648.33 69512.67 94637.67 69502.00 94627.00C69470.00 94627.00 69438.00 94627.00 69406.00 94627.00C69406.00 94648.33 69406.00 94669.67 69406.00 94691.00C69395.09 94689.66 69380.85 94693.68 69372.00 94689.00C69361.67 94668.33 69351.33 94647.67 69341.00 94627.00C69319.67 94627.00 69298.33 94627.00 69277.00 94627.00C69287.67 94605.33 69298.33 94583.67 69309.00 94562.00C69287.67 94562.00 69266.33 94562.00 69245.00 94562.00C69255.67 94551.33 69266.33 94540.67 69277.00 94530.00C69255.67 94530.00 69234.33 94530.00 69213.00 94530.00C69202.33 94519.33 69191.67 94508.67 69181.00 94498.00C69170.00 94508.67 69159.00 94519.33 69148.00 94530.00C69137.97 94528.70 69122.71 94532.62 69116.00 94528.00C69116.00 94507.33 69116.00 94486.67 69116.00 94466.00C69105.33 94476.67 69094.67 94487.33 69084.00 94498.00C69084.00 94476.67 69084.00 94455.33 69084.00 94434.00C69062.67 94412.33 69041.33 94390.67 69020.00 94369.00C69009.33 94390.67 68998.67 94412.33 68988.00 94434.00C68976.33 94435.79 68961.63 94430.28 68952.00 94437.00C68942.33 94446.67 68932.67 94456.33 68923.00 94466.00C68912.97 94464.70 68897.71 94468.62 68891.00 94464.00C68891.00 94454.00 68891.00 94444.00 68891.00 94434.00C68890.32 94443.94 68892.35 94458.28 68890.00 94465.49C68868.89 94454.83 68847.59 94444.55 68826.62 94433.62C68805.41 94412.08 68784.21 94390.54 68763.00 94369.00C68752.00 94337.00 68741.00 94305.00 68730.00 94273.00C68719.33 94283.67 68708.67 94294.33 68698.00 94305.00C68698.00 94326.33 68698.00 94347.67 68698.00 94369.00C68676.67 94347.67 68655.33 94326.33 68634.00 94305.00C68634.00 94283.67 68634.00 94262.33 68634.00 94241.00C68623.33 94230.33 68612.67 94219.67 68602.00 94209.00C68603.30 94198.97 68599.38 94183.71 68604.00 94177.00C68613.36 94175.67 68628.06 94179.69 68634.00 94174.94C68635.30 94165.26 68631.38 94150.36 68636.00 94144.00C68647.04 94141.96 68661.62 94148.45 68670.00 94140.00C68679.33 94130.67 68688.67 94121.33 68698.00 94112.00C68687.33 94101.33 68676.67 94090.67 68666.00 94080.00C68674.74 94080.00 68693.91 94080.00 68696.00 94080.00C68687.15 94079.33 68671.83 94081.34 68667.00 94079.00C68677.33 94068.67 68687.67 94058.33 68698.00 94048.00C68707.52 94047.33 68723.50 94049.34 68729.00 94047.00C68718.67 94036.67 68708.33 94026.33 68698.00 94016.00C68708.67 94005.33 68719.33 93994.67 68730.00 93984.00C68730.00 93962.33 68730.00 93940.67 68730.00 93919.00C68751.67 93908.33 68773.33 93897.67 68795.00 93887.00C68796.30 93876.97 68792.38 93861.71 68797.00 93855.00C68806.37 93853.71 68820.95 93857.62 68827.00 93853.00C68828.29 93843.63 68824.38 93829.05 68829.00 93823.00C68849.67 93823.00 68870.33 93823.00 68891.00 93823.00C68901.67 93801.33 68912.33 93779.67 68923.00 93758.00C68933.67 93769.00 68944.33 93780.00 68955.00 93791.00C68955.00 93769.33 68955.00 93747.67 68955.00 93726.00C68966.00 93715.33 68977.00 93704.67 68988.00 93694.00C68989.00 93683.52 68986.00 93670.17 68989.50 93661.50C69021.00 93651.00 69052.50 93640.50 69084.00 93630.00C69105.33 93640.67 69126.67 93651.33 69148.00 93662.00C69159.67 93660.21 69174.37 93665.72 69184.00 93659.00C69193.67 93649.33 69203.33 93639.67 69213.00 93630.00C69225.00 93628.43 69238.99 93633.40 69249.51 93626.98C69280.13 93606.51 69310.87 93586.25 69341.37 93565.62C69351.91 93554.74 69362.46 93543.87 69373.00 93533.00C69383.36 93531.70 69398.96 93535.63 69406.00 93531.00C69407.29 93521.63 69403.38 93507.05 69408.00 93501.00C69428.67 93501.00 69449.33 93501.00 69470.00 93501.00C69470.00 93469.00 69470.00 93437.00 69470.00 93405.00C69513.00 93372.67 69556.00 93340.33 69599.00 93308.00C69631.00 93297.33 69663.00 93286.67 69695.00 93276.00C69695.68 93285.52 69693.64 93301.54 69696.02 93307.00C69706.91 93296.52 69717.02 93285.05 69728.47 93275.26C69749.32 93264.85 69770.16 93254.42 69791.00 93244.00C69802.00 93254.67 69813.00 93265.33 69824.00 93276.00C69866.67 93265.33 69909.33 93254.67 69952.00 93244.00C69953.48 93232.88 69949.01 93219.29 69954.27 93209.73C69985.85 93178.15 70017.42 93146.58 70049.00 93115.00C70059.03 93113.70 70074.29 93117.62 70081.00 93113.00C70082.29 93103.63 70078.38 93089.05 70083.00 93083.00C70103.67 93083.00 70124.33 93083.00 70145.00 93083.00C70155.67 93061.67 70166.33 93040.33 70177.00 93019.00C70177.00 92976.00 70177.00 92933.00 70177.00 92890.00C70198.67 92879.33 70220.33 92868.67 70242.00 92858.00C70220.33 92836.67 70198.67 92815.33 70177.00 92794.00C70177.00 92761.67 70177.00 92729.33 70177.00 92697.00C70187.03 92695.70 70202.29 92699.62 70209.00 92695.00C70210.33 92685.64 70206.31 92670.94 70211.06 92665.00C70220.95 92664.16 70234.20 92666.68 70242.00 92663.75C70242.00 92610.83 70242.00 92557.92 70242.00 92505.00C70231.00 92483.33 70220.00 92461.67 70209.00 92440.00C70219.91 92438.66 70234.15 92442.68 70243.00 92438.00C70253.33 92417.33 70263.67 92396.67 70274.00 92376.00C70274.00 92354.67 70274.00 92333.33 70274.00 92312.00C70274.67 92321.52 70272.66 92337.50 70275.00 92343.00C70285.33 92332.67 70295.67 92322.33 70306.00 92312.00C70306.00 92279.67 70306.00 92247.33 70306.00 92215.00C70327.33 92215.00 70348.67 92215.00 70370.00 92215.00C70380.67 92183.00 70391.33 92151.00 70402.00 92119.00C70412.36 92117.69 70427.99 92121.65 70435.00 92116.98C70435.00 92074.66 70435.00 92032.33 70435.00 91990.00C70445.03 91988.70 70460.29 91992.62 70467.00 91988.00C70467.00 91967.33 70467.00 91946.67 70467.00 91926.00C70488.33 91893.67 70509.67 91861.33 70531.00 91829.00C70531.00 91797.00 70531.00 91765.00 70531.00 91733.00C70552.33 91733.00 70573.67 91733.00 70595.00 91733.00C70638.00 91679.33 70681.00 91625.67 70724.00 91572.00C70702.67 91561.33 70681.33 91550.67 70660.00 91540.00C70670.67 91518.67 70681.33 91497.33 70692.00 91476.00C70681.33 91465.00 70670.67 91454.00 70660.00 91443.00C70660.00 91421.67 70660.00 91400.33 70660.00 91379.00C70649.00 91368.33 70638.00 91357.67 70627.00 91347.00C70638.00 91336.33 70649.00 91325.67 70660.00 91315.00C70660.00 91293.67 70660.00 91272.33 70660.00 91251.00C70681.33 91251.00 70702.67 91251.00 70724.00 91251.00C70745.33 91218.67 70766.67 91186.33 70788.00 91154.00C70798.59 91152.07 70813.99 91157.91 70821.50 91151.00C70831.67 91130.67 70841.83 91110.33 70852.00 91090.00C70852.00 91068.33 70852.00 91046.67 70852.00 91025.00C70873.67 91025.00 70895.33 91025.00 70917.00 91025.00C70927.67 91014.33 70938.33 91003.67 70949.00 90993.00C70959.17 90992.00 70973.33 90995.00 70981.00 90991.50C70981.00 90960.00 70981.00 90928.50 70981.00 90897.00C70991.78 90885.74 71003.65 90875.33 71013.73 90863.51C71024.15 90842.34 71034.58 90821.17 71045.00 90800.00C71056.00 90789.33 71067.00 90778.67 71078.00 90768.00C71079.77 90756.65 71074.31 90742.31 71081.00 90733.00C71090.67 90723.33 71100.33 90713.67 71110.00 90704.00C71142.00 90714.67 71174.00 90725.33 71206.00 90736.00C71216.67 90725.33 71227.33 90714.67 71238.00 90704.00C71259.67 90704.00 71281.33 90704.00 71303.00 90704.00C71313.67 90714.67 71324.33 90725.33 71335.00 90736.00C71345.67 90714.67 71356.33 90693.33 71367.00 90672.00C71388.33 90672.00 71409.67 90672.00 71431.00 90672.00C71452.67 90607.67 71474.33 90543.33 71496.00 90479.00C71528.00 90446.67 71560.00 90414.33 71592.00 90382.00C71602.67 90350.00 71613.33 90318.00 71624.00 90286.00C71613.33 90211.00 71602.67 90136.00 71592.00 90061.00C71602.63 90007.15 71613.54 89953.35 71624.00 89899.46C71624.00 89856.64 71624.00 89813.82 71624.00 89771.00C71602.67 89717.67 71581.33 89664.33 71560.00 89611.00C71560.00 89578.67 71560.00 89546.33 71560.00 89514.00C71581.33 89460.67 71602.67 89407.33 71624.00 89354.00C71624.00 89311.00 71624.00 89268.00 71624.00 89225.00C71645.33 89192.67 71666.67 89160.33 71688.00 89128.00C71688.00 89106.67 71688.00 89085.33 71688.00 89064.00C71677.33 89042.67 71666.67 89021.33 71656.00 89000.00C71677.67 88978.33 71699.33 88956.67 71721.00 88935.00C71742.33 88924.33 71763.67 88913.67 71785.00 88903.00C71795.48 88902.00 71808.83 88905.00 71817.50 88901.50C71828.00 88870.00 71838.50 88838.50 71849.00 88807.00C71849.00 88785.67 71849.00 88764.33 71849.00 88743.00C71890.93 88698.94 71935.31 88657.31 71978.00 88614.00C72021.00 88603.33 72064.00 88592.67 72107.00 88582.00C72139.00 88539.00 72171.00 88496.00 72203.00 88453.00C72235.00 88442.33 72267.00 88431.67 72299.00 88421.00C72299.00 88399.67 72299.00 88378.33 72299.00 88357.00C72309.36 88355.70 72324.96 88359.63 72332.00 88355.00C72333.00 88345.50 72330.00 88332.00 72333.50 88325.00C72365.00 88325.00 72396.50 88325.00 72428.00 88325.00C72438.67 88314.00 72449.33 88303.00 72460.00 88292.00C72460.68 88302.27 72458.66 88316.96 72461.00 88324.48C72482.00 88313.66 72503.00 88302.83 72524.00 88292.00C72535.59 88303.12 72546.34 88315.29 72558.47 88325.74C72579.32 88336.15 72600.16 88346.58 72621.00 88357.00C72642.43 88346.15 72664.07 88335.73 72685.37 88324.62C72696.04 88313.16 72707.72 88302.49 72717.74 88290.53C72728.15 88269.68 72738.58 88248.84 72749.00 88228.00C72738.33 88174.33 72727.67 88120.67 72717.00 88067.00C72738.67 88045.67 72760.33 88024.33 72782.00 88003.00C72782.00 87981.67 72782.00 87960.33 72782.00 87939.00C72792.67 87928.33 72803.33 87917.67 72814.00 87907.00C72824.03 87905.68 72839.35 87909.66 72846.00 87904.97C72846.00 87883.98 72846.00 87862.99 72846.00 87842.00C72867.33 87820.67 72888.67 87799.33 72910.00 87778.00C72911.79 87766.66 72906.26 87752.25 72913.05 87743.00C72933.70 87722.67 72954.35 87702.33 72975.00 87682.00C73007.00 87671.00 73039.00 87660.00 73071.00 87649.00C72888.67 87499.00 72706.33 87349.00 72524.00 87199.00C72513.97 87197.70 72498.71 87201.62 72492.00 87197.00C72492.00 87176.33 72492.00 87155.67 72492.00 87135.00C72481.33 87113.67 72470.67 87092.33 72460.00 87071.00C72459.14 87058.40 72461.87 87045.22 72458.34 87033.02C72448.23 87002.68 72438.11 86972.34 72428.00 86942.00C72428.00 86920.67 72428.00 86899.33 72428.00 86878.00C72438.67 86867.33 72449.33 86856.67 72460.00 86846.00C72460.00 86749.33 72460.00 86652.67 72460.00 86556.00C72438.67 86524.00 72417.33 86492.00 72396.00 86460.00C72385.53 86458.99 72372.15 86462.02 72363.50 86458.48C72353.00 86426.66 72342.50 86394.83 72332.00 86363.00C72299.67 86341.67 72267.33 86320.33 72235.00 86299.00C72224.97 86297.70 72209.71 86301.62 72203.00 86297.00C72201.71 86287.63 72205.62 86273.05 72201.00 86267.00C72191.63 86265.71 72177.05 86269.62 72171.00 86265.00C72168.99 86253.90 72175.42 86239.38 72167.00 86230.88C72157.67 86221.25 72148.33 86211.63 72139.00 86202.00C72139.00 86180.67 72139.00 86159.33 72139.00 86138.00C72117.33 86138.00 72095.67 86138.00 72074.00 86138.00C72095.84 86095.73 72117.72 86053.45 72138.50 86010.66C72138.31 85999.67 72141.38 85985.00 72136.97 85976.00C72115.98 85965.67 72094.99 85955.33 72074.00 85945.00C72095.67 85945.00 72117.33 85945.00 72139.00 85945.00C72137.23 85933.65 72142.69 85919.31 72136.00 85910.00C72126.33 85900.33 72116.67 85890.67 72107.00 85881.00C72117.67 85870.33 72128.33 85859.67 72139.00 85849.00C72106.67 85827.33 72074.33 85805.67 72042.00 85784.00C72052.03 85782.70 72067.29 85786.62 72074.00 85782.00C72074.00 85761.33 72074.00 85740.67 72074.00 85720.00C72063.33 85698.67 72052.67 85677.33 72042.00 85656.00C72052.67 85634.67 72063.33 85613.33 72074.00 85592.00C72063.33 85581.00 72052.67 85570.00 72042.00 85559.00C72031.09 85557.21 72016.27 85562.72 72008.00 85556.00C71987.33 85525.00 71966.67 85494.00 71946.00 85463.00C71924.33 85473.67 71902.67 85484.33 71881.00 85495.00C71870.33 85484.33 71859.67 85473.67 71849.00 85463.00C71838.33 85473.67 71827.67 85484.33 71817.00 85495.00C71806.33 85484.33 71795.67 85473.67 71785.00 85463.00C71774.33 85473.67 71763.67 85484.33 71753.00 85495.00C71709.90 85473.87 71666.90 85452.54 71624.00 85431.00C71624.00 85409.33 71624.00 85387.67 71624.00 85366.00C71613.33 85355.33 71602.67 85344.67 71592.00 85334.00C71590.70 85323.97 71594.62 85308.71 71590.00 85302.00C71580.63 85300.71 71566.05 85304.62 71560.00 85300.00C71558.71 85290.63 71562.62 85276.05 71558.00 85270.00C71548.63 85271.29 71534.05 85267.38 71528.00 85272.00C71528.00 85282.00 71528.00 85292.00 71528.00 85302.00C71528.00 85270.00 71528.00 85238.00 71528.00 85206.00C71517.33 85195.33 71506.67 85184.67 71496.00 85174.00C71485.00 85184.67 71474.00 85195.33 71463.00 85206.00C71484.67 85195.33 71506.33 85184.67 71528.00 85174.00C71517.33 85152.33 71506.67 85130.67 71496.00 85109.00C71505.52 85108.33 71521.50 85110.34 71527.00 85108.00C71516.67 85097.67 71506.33 85087.33 71496.00 85077.00C71506.67 85066.33 71517.33 85055.67 71528.00 85045.00C71517.33 85034.33 71506.67 85023.67 71496.00 85013.00C71506.03 85011.70 71521.29 85015.62 71528.00 85011.00C71526.69 85001.63 71530.65 84986.99 71525.97 84981.00C71504.98 84981.00 71483.99 84981.00 71463.00 84981.00C71474.00 84970.33 71485.00 84959.67 71496.00 84949.00C71494.66 84938.65 71498.70 84922.92 71493.94 84916.00C71484.26 84914.70 71469.36 84918.62 71463.00 84914.00C71464.33 84904.64 71460.31 84889.94 71465.06 84884.00C71474.74 84882.70 71489.64 84886.62 71496.00 84882.00C71496.00 84861.33 71496.00 84840.67 71496.00 84820.00C71485.63 84818.69 71470.02 84822.65 71462.99 84817.99C71462.91 84797.15 71463.21 84776.32 71462.83 84755.49C71452.23 84723.33 71441.61 84691.16 71431.00 84659.00C71441.67 84648.33 71452.33 84637.67 71463.00 84627.00C71441.67 84616.33 71420.33 84605.67 71399.00 84595.00C71409.67 84584.33 71420.33 84573.67 71431.00 84563.00C71431.00 84530.67 71431.00 84498.33 71431.00 84466.00C71420.33 84455.33 71409.67 84444.67 71399.00 84434.00C71409.16 84432.99 71423.35 84436.01 71431.00 84432.49C71431.00 84368.66 71431.00 84304.83 71431.00 84241.00C71440.52 84240.33 71456.50 84242.34 71462.00 84240.00C71451.67 84229.67 71441.33 84219.33 71431.00 84209.00C71441.67 84187.67 71452.33 84166.33 71463.00 84145.00C71453.48 84144.33 71437.50 84146.34 71432.00 84144.00C71442.33 84133.67 71452.67 84123.33 71463.00 84113.00C71452.33 84091.33 71441.67 84069.67 71431.00 84048.00C71441.67 84037.33 71452.33 84026.67 71463.00 84016.00C71452.33 84005.33 71441.67 83994.67 71431.00 83984.00C71441.67 83973.33 71452.33 83962.67 71463.00 83952.00C71484.67 83952.00 71506.33 83952.00 71528.00 83952.00C71517.33 83941.33 71506.67 83930.67 71496.00 83920.00C71517.33 83920.00 71538.67 83920.00 71560.00 83920.00C71549.33 83909.00 71538.67 83898.00 71528.00 83887.00C71537.52 83886.33 71553.50 83888.34 71559.00 83886.00C71548.67 83875.67 71538.33 83865.33 71528.00 83855.00C71538.67 83844.33 71549.33 83833.67 71560.00 83823.00C71560.67 83832.52 71558.66 83848.50 71561.00 83854.00C71571.33 83843.67 71581.67 83833.33 71592.00 83823.00C71602.03 83821.70 71617.29 83825.62 71624.00 83821.00C71625.01 83811.20 71621.99 83798.48 71625.52 83790.50C71657.34 83780.00 71689.17 83769.50 71721.00 83759.00C71722.56 83746.98 71717.61 83733.00 71724.02 83722.44C71744.48 83691.51 71764.75 83660.45 71785.38 83629.62C71806.59 83608.41 71827.79 83587.21 71849.00 83566.00C71849.00 83544.67 71849.00 83523.33 71849.00 83502.00C71859.67 83512.67 71870.33 83523.33 71881.00 83534.00C71906.00 83510.33 71930.01 83485.65 71954.00 83460.96C71962.48 83452.74 71970.50 83443.85 71979.47 83436.26C72000.32 83425.85 72021.16 83415.42 72042.00 83405.00C72063.67 83351.33 72085.33 83297.67 72107.00 83244.00C72139.00 83244.00 72171.00 83244.00 72203.00 83244.00C72224.33 83222.67 72245.67 83201.33 72267.00 83180.00C72278.39 83178.24 72292.69 83183.67 72302.09 83177.00C72312.06 83167.33 72322.03 83157.67 72332.00 83148.00C72333.00 83136.27 72329.90 83123.64 72333.73 83112.49C72343.82 83092.00 72353.91 83071.50 72364.00 83051.00C72364.00 83019.00 72364.00 82987.00 72364.00 82955.00C72353.33 82923.00 72342.67 82891.00 72332.00 82859.00C72342.67 82848.00 72353.33 82837.00 72364.00 82826.00C72354.48 82825.33 72338.50 82827.34 72333.00 82825.00C72343.33 82814.67 72353.67 82804.33 72364.00 82794.00C72363.89 82772.50 72364.22 82750.99 72363.83 82729.49C72353.23 82697.33 72342.61 82665.16 72332.00 82633.00C72299.67 82622.33 72267.33 82611.67 72235.00 82601.00C72213.67 82579.67 72192.33 82558.33 72171.00 82537.00C72171.00 82515.67 72171.00 82494.33 72171.00 82473.00C72160.33 82451.33 72149.67 82429.67 72139.00 82408.00C72139.00 82386.67 72139.00 82365.33 72139.00 82344.00C72117.33 82312.00 72095.67 82280.00 72074.00 82248.00C72074.00 82194.33 72074.00 82140.67 72074.00 82087.00C72085.67 82085.21 72100.37 82090.72 72110.00 82084.00C72130.33 82063.67 72150.67 82043.33 72171.00 82023.00C72160.98 82021.66 72145.60 82025.70 72139.00 82020.94C72137.68 82011.27 72141.66 81996.30 72136.97 81990.00C72115.98 81990.00 72094.99 81990.00 72074.00 81990.00C72063.33 81968.67 72052.67 81947.33 72042.00 81926.00C72040.23 81914.65 72045.69 81900.31 72039.00 81891.00C72029.33 81881.33 72019.67 81871.67 72010.00 81862.00C72011.30 81851.97 72007.38 81836.71 72012.00 81830.00C72032.67 81830.00 72053.33 81830.00 72074.00 81830.00C72063.33 81808.33 72052.67 81786.67 72042.00 81765.00C72052.67 81776.00 72063.33 81787.00 72074.00 81798.00C72085.00 81765.67 72096.00 81733.33 72107.00 81701.00C72085.33 81690.33 72063.67 81679.67 72042.00 81669.00C72040.70 81679.03 72044.62 81694.29 72040.00 81701.00C71998.00 81701.00 71956.00 81701.00 71914.00 81701.00C71913.65 81691.39 71914.69 81676.06 71913.48 81670.00C71902.66 81691.00 71891.83 81712.00 71881.00 81733.00C71870.41 81731.07 71855.01 81736.91 71847.50 81730.00C71837.33 81709.67 71827.17 81689.33 71817.00 81669.00C71806.33 81679.67 71795.67 81690.33 71785.00 81701.00C71742.00 81711.67 71699.00 81722.33 71656.00 81733.00C71645.33 81690.33 71634.67 81647.67 71624.00 81605.00C71613.33 81594.00 71602.67 81583.00 71592.00 81572.00C71581.33 81583.00 71570.67 81594.00 71560.00 81605.00C71558.70 81615.03 71562.62 81630.29 71558.00 81637.00C71537.33 81637.00 71516.67 81637.00 71496.00 81637.00C71485.00 81626.33 71474.00 81615.67 71463.00 81605.00C71452.33 81615.67 71441.67 81626.33 71431.00 81637.00C71409.67 81626.33 71388.33 81615.67 71367.00 81605.00C71345.67 81615.67 71324.33 81626.33 71303.00 81637.00C71281.33 81615.33 71259.67 81593.67 71238.00 81572.00C71206.00 81583.00 71174.00 81594.00 71142.00 81605.00C71131.41 81606.93 71116.01 81601.09 71108.50 81608.00C71098.33 81628.33 71088.17 81648.67 71078.00 81669.00C71056.33 81658.33 71034.67 81647.67 71013.00 81637.00C71001.28 81635.99 70988.63 81639.12 70977.50 81635.26C70935.57 81614.38 70893.74 81593.28 70852.00 81572.00C70798.67 81572.00 70745.33 81572.00 70692.00 81572.00C70681.33 81561.33 70670.67 81550.67 70660.00 81540.00C70660.00 81497.33 70660.00 81454.67 70660.00 81412.00C70638.33 81412.00 70616.67 81412.00 70595.00 81412.00C70584.33 81401.00 70573.67 81390.00 70563.00 81379.00C70552.33 81390.00 70541.67 81401.00 70531.00 81412.00C70519.06 81414.09 70503.46 81407.28 70494.45 81416.50C70463.64 81447.00 70432.82 81477.50 70402.00 81508.00C70380.67 81497.33 70359.33 81486.67 70338.00 81476.00C70348.67 81486.67 70359.33 81497.33 70370.00 81508.00C70359.33 81540.33 70348.67 81572.67 70338.00 81605.00C70347.52 81605.67 70363.50 81603.66 70369.00 81606.00C70358.67 81616.33 70348.33 81626.67 70338.00 81637.00C70306.00 81615.33 70274.00 81593.67 70242.00 81572.00C70209.67 81572.00 70177.33 81572.00 70145.00 81572.00C70134.33 81561.33 70123.67 81550.67 70113.00 81540.00C70111.23 81528.65 70116.69 81514.31 70110.00 81505.00C70100.33 81495.33 70090.67 81485.67 70081.00 81476.00C70079.68 81465.97 70083.66 81450.65 70078.97 81444.00C70057.98 81444.00 70036.99 81444.00 70016.00 81444.00C70027.00 81411.67 70038.00 81379.33 70049.00 81347.00C70037.42 81336.21 70026.62 81324.41 70014.53 81314.26C69993.68 81303.85 69972.84 81293.42 69952.00 81283.00C69941.33 81293.67 69930.67 81304.33 69920.00 81315.00C69909.33 81315.00 69898.67 81315.00 69888.00 81315.00C69898.67 81272.33 69909.33 81229.67 69920.00 81187.00C69908.66 81185.19 69894.19 81190.79 69885.00 81183.91C69875.33 81173.94 69865.67 81163.97 69856.00 81154.00C69856.00 81122.00 69856.00 81090.00 69856.00 81058.00C68311.91 81057.92 66767.82 81058.17 65223.74 81057.88C65031.49 81047.25 64839.25 81036.63 64647.00 81026.00C64648.00 81015.83 64645.00 81001.67 64648.50 80994.00C64680.00 80994.00 64711.50 80994.00 64743.00 80994.00C64743.00 80961.67 64743.00 80929.33 64743.00 80897.00C64754.00 80886.33 64765.00 80875.67 64776.00 80865.00C64776.11 80843.50 64775.78 80821.99 64776.17 80800.49C64786.78 80768.33 64797.39 80736.16 64808.00 80704.00C64808.00 80682.67 64808.00 80661.33 64808.00 80640.00C64797.97 80638.70 64782.71 80642.62 64776.00 80638.00C64776.00 80617.33 64776.00 80596.67 64776.00 80576.00C64765.00 80565.00 64754.00 80554.00 64743.00 80543.00C64753.50 80542.00 64768.00 80545.00 64776.00 80541.50C64776.00 80478.00 64776.00 80414.50 64776.00 80351.00C64797.33 80340.00 64818.67 80329.00 64840.00 80318.00C64840.00 80286.00 64840.00 80254.00 64840.00 80222.00C64850.67 80200.67 64861.33 80179.33 64872.00 80158.00C64861.33 80136.33 64850.67 80114.67 64840.00 80093.00C64861.33 80071.67 64882.67 80050.33 64904.00 80029.00C64905.77 80040.35 64900.31 80054.69 64907.00 80064.00C64916.67 80073.67 64926.33 80083.33 64936.00 80093.00C64937.32 80103.35 64933.33 80119.02 64938.03 80126.00C64959.02 80126.00 64980.01 80126.00 65001.00 80126.00C64990.00 80104.33 64979.00 80082.67 64968.00 80061.00C64979.00 80029.00 64990.00 79997.00 65001.00 79965.00C64990.00 79954.33 64979.00 79943.67 64968.00 79933.00C64968.00 79911.33 64968.00 79889.67 64968.00 79868.00C64957.33 79846.67 64946.67 79825.33 64936.00 79804.00C64937.36 79793.42 64933.29 79779.47 64938.03 79771.00C64959.02 79760.67 64980.01 79750.33 65001.00 79740.00C64999.66 79729.65 65003.70 79713.92 64998.94 79707.00C64987.60 79704.92 64972.67 79711.52 64964.00 79703.00C64944.00 79683.00 64924.00 79663.00 64904.00 79643.00C64904.00 79611.00 64904.00 79579.00 64904.00 79547.00C64914.67 79536.33 64925.33 79525.67 64936.00 79515.00C64946.16 79513.99 64960.35 79517.01 64968.00 79513.49C64968.00 79449.66 64968.00 79385.83 64968.00 79322.00C64957.33 79311.33 64946.67 79300.67 64936.00 79290.00C64957.67 79257.67 64979.33 79225.33 65001.00 79193.00C64990.00 79171.67 64979.00 79150.33 64968.00 79129.00C64979.00 79118.33 64990.00 79107.67 65001.00 79097.00C64990.00 79064.67 64979.00 79032.33 64968.00 79000.00C64989.67 78978.67 65011.33 78957.33 65033.00 78936.00C65033.00 78914.33 65033.00 78892.67 65033.00 78871.00C65011.33 78849.67 64989.67 78828.33 64968.00 78807.00C64968.00 78742.67 64968.00 78678.33 64968.00 78614.00C64989.67 78571.33 65011.33 78528.67 65033.00 78486.00C65022.33 78475.33 65011.67 78464.67 65001.00 78454.00C65011.67 78443.00 65022.33 78432.00 65033.00 78421.00C65043.67 78367.67 65054.33 78314.33 65065.00 78261.00C65043.67 78261.00 65022.33 78261.00 65001.00 78261.00C65002.79 78249.33 64997.28 78234.63 65004.00 78225.00C65013.67 78215.33 65023.33 78205.67 65033.00 78196.00C65011.23 78185.16 64989.26 78174.72 64967.62 78163.62C64957.08 78153.08 64946.54 78142.54 64936.00 78132.00C64925.41 78130.07 64910.01 78135.91 64902.50 78129.00C64892.33 78108.67 64882.17 78088.33 64872.00 78068.00C64872.00 78025.00 64872.00 77982.00 64872.00 77939.00C64861.53 77938.00 64848.17 77941.00 64839.50 77937.50C64829.00 77906.00 64818.50 77874.50 64808.00 77843.00C64775.67 77843.00 64743.33 77843.00 64711.00 77843.00C64700.33 77821.33 64689.67 77799.67 64679.00 77778.00C64668.41 77776.07 64653.01 77781.91 64645.50 77775.00C64635.33 77754.67 64625.17 77734.33 64615.00 77714.00C64636.33 77703.33 64657.67 77692.67 64679.00 77682.00C64638.97 77621.08 64598.72 77560.30 64557.54 77500.15C64546.30 77484.48 64539.21 77466.41 64530.22 77449.44C64526.15 77441.29 64522.07 77433.15 64518.00 77425.00C64518.00 77360.67 64518.00 77296.33 64518.00 77232.00C64561.00 77221.33 64604.00 77210.67 64647.00 77200.00C64636.33 77189.00 64625.67 77178.00 64615.00 77167.00C64615.00 77135.00 64615.00 77103.00 64615.00 77071.00C64582.67 77060.33 64550.33 77049.67 64518.00 77039.00C64517.00 77028.83 64520.00 77014.67 64516.50 77007.00C64485.00 77007.00 64453.50 77007.00 64422.00 77007.00C64422.40 76991.31 64420.49 76975.34 64424.79 76960.01C64434.53 76911.16 64444.45 76862.35 64454.00 76813.46C64454.00 76791.98 64454.00 76770.49 64454.00 76749.00C64464.67 76727.67 64475.33 76706.33 64486.00 76685.00C64486.00 76663.67 64486.00 76642.33 64486.00 76621.00C64495.81 76619.99 64511.18 76623.02 64517.50 76619.48C64507.00 76587.66 64496.50 76555.83 64486.00 76524.00C64496.67 76513.33 64507.33 76502.67 64518.00 76492.00C64519.81 76481.10 64514.25 76466.23 64521.03 76458.00C64552.35 76437.33 64583.68 76416.67 64615.00 76396.00C64636.33 76342.33 64657.67 76288.67 64679.00 76235.00C64680.93 76224.41 64675.09 76209.01 64682.00 76201.50C64702.33 76191.33 64722.67 76181.17 64743.00 76171.00C64743.00 76138.67 64743.00 76106.33 64743.00 76074.00C64732.33 76063.33 64721.67 76052.67 64711.00 76042.00C64721.67 76020.67 64732.33 75999.33 64743.00 75978.00C64753.36 75976.70 64768.96 75980.63 64776.00 75976.00C64773.95 75964.90 64780.52 75950.24 64771.88 75941.88C64762.25 75932.25 64752.63 75922.63 64743.00 75913.00C64754.00 75902.33 64765.00 75891.67 64776.00 75881.00C64776.00 75838.33 64776.00 75795.67 64776.00 75753.00C64797.33 75731.33 64818.67 75709.67 64840.00 75688.00C64840.00 75645.33 64840.00 75602.67 64840.00 75560.00C64829.33 75527.67 64818.67 75495.33 64808.00 75463.00C64808.00 75431.00 64808.00 75399.00 64808.00 75367.00C64786.33 75356.33 64764.67 75345.67 64743.00 75335.00C64754.00 75313.33 64765.00 75291.67 64776.00 75270.00C64774.65 75259.43 64778.70 75245.48 64773.98 75237.01C64731.56 75216.21 64689.22 75195.21 64647.00 75174.00C64679.00 75131.00 64711.00 75088.00 64743.00 75045.00C64743.00 75013.00 64743.00 74981.00 64743.00 74949.00C64700.33 74927.67 64657.67 74906.33 64615.00 74885.00C64593.33 74885.00 64571.67 74885.00 64550.00 74885.00C64539.33 74874.00 64528.67 74863.00 64518.00 74852.00C64561.00 74830.67 64604.00 74809.33 64647.00 74788.00C64657.67 74798.67 64668.33 74809.33 64679.00 74820.00C64700.33 74820.00 64721.67 74820.00 64743.00 74820.00C64754.00 74798.67 64765.00 74777.33 64776.00 74756.00C64808.00 74745.33 64840.00 74734.67 64872.00 74724.00C64871.89 74702.16 64872.23 74680.33 64871.83 74658.49C64861.22 74626.66 64850.61 74594.83 64840.00 74563.00C64861.33 74563.00 64882.67 74563.00 64904.00 74563.00C64925.33 74520.00 64946.67 74477.00 64968.00 74434.00C64979.00 74423.33 64990.00 74412.67 65001.00 74402.00C64990.64 74400.70 64975.04 74404.63 64968.00 74400.00C64967.33 74391.15 64969.34 74375.83 64967.00 74371.00C64956.67 74381.33 64946.33 74391.67 64936.00 74402.00C64925.41 74400.07 64910.01 74405.91 64902.50 74399.00C64892.33 74378.67 64882.17 74358.33 64872.00 74338.00C64882.63 74284.15 64893.54 74230.35 64904.00 74176.46C64902.70 74166.61 64906.62 74151.54 64902.00 74145.00C64892.63 74143.71 64878.05 74147.62 64872.00 74143.00C64870.71 74133.63 64874.62 74119.05 64870.00 74113.00C64860.63 74111.70 64846.02 74115.63 64840.00 74110.98C64840.00 74068.66 64840.00 74026.33 64840.00 73984.00C64829.97 73982.70 64814.71 73986.62 64808.00 73982.00C64808.00 73961.33 64808.00 73940.67 64808.00 73920.00C64786.33 73930.67 64764.67 73941.33 64743.00 73952.00C64711.00 73920.00 64679.00 73888.00 64647.00 73856.00C64648.31 73845.33 64644.36 73830.55 64649.02 73822.50C64691.34 73812.00 64733.67 73801.50 64776.00 73791.00C64711.67 73759.00 64647.33 73727.00 64583.00 73695.00C64561.08 73673.92 64539.40 73652.60 64518.00 73631.00C64516.21 73619.33 64521.72 73604.63 64515.00 73595.00C64505.33 73585.33 64495.67 73575.67 64486.00 73566.00C64518.33 73534.00 64550.67 73502.00 64583.00 73470.00C64593.03 73468.68 64608.35 73472.66 64615.00 73467.97C64615.00 73446.98 64615.00 73425.99 64615.00 73405.00C64625.67 73394.33 64636.33 73383.67 64647.00 73373.00C64625.67 73341.00 64604.33 73309.00 64583.00 73277.00C64604.33 73266.33 64625.67 73255.67 64647.00 73245.00C64625.57 73234.16 64603.93 73223.72 64582.62 73212.62C64561.08 73191.08 64539.54 73169.54 64518.00 73148.00C64486.00 73148.00 64454.00 73148.00 64422.00 73148.00C64400.33 73137.33 64378.67 73126.67 64357.00 73116.00C64356.32 73106.05 64358.34 73091.75 64356.00 73084.50C64335.00 73095.00 64314.00 73105.50 64293.00 73116.00C64293.00 73073.00 64293.00 73030.00 64293.00 72987.00C64303.84 72965.57 64314.28 72943.93 64325.38 72922.62C64335.92 72912.08 64346.46 72901.54 64357.00 72891.00C64346.33 72869.67 64335.67 72848.33 64325.00 72827.00C64335.67 72794.67 64346.33 72762.33 64357.00 72730.00C64356.32 72720.05 64358.34 72705.75 64356.00 72698.50C64335.00 72709.00 64314.00 72719.50 64293.00 72730.00C64282.33 72719.33 64271.67 72708.67 64261.00 72698.00z"},"br-09":{"name":"Goiás","path":"M104003.00 112858.00C104003.00 112847.00 104003.00 112836.00 104003.00 112825.00C104013.67 112803.67 104024.33 112782.33 104035.00 112761.00C104035.00 112750.33 104035.00 112739.67 104035.00 112729.00C104045.67 112707.67 104056.33 112686.33 104067.00 112665.00C104067.00 112675.67 104067.00 112686.33 104067.00 112697.00C104067.00 112654.00 104067.00 112611.00 104067.00 112568.00C104056.33 112568.00 104045.67 112568.00 104035.00 112568.00C104045.67 112557.33 104056.33 112546.67 104067.00 112536.00C104056.33 112525.33 104045.67 112514.67 104035.00 112504.00C104056.33 112482.67 104077.67 112461.33 104099.00 112440.00C104099.00 112429.00 104099.00 112418.00 104099.00 112407.00C104109.67 112407.00 104120.33 112407.00 104131.00 112407.00C104131.00 112396.33 104131.00 112385.67 104131.00 112375.00C104141.67 112375.00 104152.33 112375.00 104163.00 112375.00C104163.00 112364.33 104163.00 112353.67 104163.00 112343.00C104152.33 112343.00 104141.67 112343.00 104131.00 112343.00C104141.67 112332.33 104152.33 112321.67 104163.00 112311.00C104163.00 112300.33 104163.00 112289.67 104163.00 112279.00C104163.00 112289.67 104163.00 112300.33 104163.00 112311.00C104173.67 112300.33 104184.33 112289.67 104195.00 112279.00C104195.00 112257.33 104195.00 112235.67 104195.00 112214.00C104184.33 112214.00 104173.67 112214.00 104163.00 112214.00C104173.67 112214.00 104184.33 112214.00 104195.00 112214.00C104206.00 112203.33 104217.00 112192.67 104228.00 112182.00C104206.33 112182.00 104184.67 112182.00 104163.00 112182.00C104163.00 112160.67 104163.00 112139.33 104163.00 112118.00C104173.67 112118.00 104184.33 112118.00 104195.00 112118.00C104195.00 112107.33 104195.00 112096.67 104195.00 112086.00C104184.33 112086.00 104173.67 112086.00 104163.00 112086.00C104173.67 112075.33 104184.33 112064.67 104195.00 112054.00C104184.21 112043.31 104173.59 112032.38 104162.69 112021.84C104141.46 112010.89 104120.23 111999.95 104099.00 111989.00C104109.67 111989.00 104120.33 111989.00 104131.00 111989.00C104131.00 111978.33 104131.00 111967.67 104131.00 111957.00C104141.67 111946.33 104152.33 111935.67 104163.00 111925.00C104152.33 111925.00 104141.67 111925.00 104131.00 111925.00C104131.00 111914.33 104131.00 111903.67 104131.00 111893.00C104120.33 111903.67 104109.67 111914.33 104099.00 111925.00C104099.00 111903.67 104099.00 111882.33 104099.00 111861.00C104120.33 111850.33 104141.67 111839.67 104163.00 111829.00C104163.00 111818.33 104163.00 111807.67 104163.00 111797.00C104184.67 111786.00 104206.33 111775.00 104228.00 111764.00C104217.00 111732.00 104206.00 111700.00 104195.00 111668.00C104216.67 111668.00 104238.33 111668.00 104260.00 111668.00C104270.67 111646.67 104281.33 111625.33 104292.00 111604.00C104302.67 111593.00 104313.33 111582.00 104324.00 111571.00C104324.00 111539.00 104324.00 111507.00 104324.00 111475.00C104334.67 111475.00 104345.33 111475.00 104356.00 111475.00C104356.00 111453.67 104356.00 111432.33 104356.00 111411.00C104366.67 111378.67 104377.33 111346.33 104388.00 111314.00C104388.00 111292.67 104388.00 111271.33 104388.00 111250.00C104399.00 111239.33 104410.00 111228.67 104421.00 111218.00C104431.67 111228.67 104442.33 111239.33 104453.00 111250.00C104463.67 111228.67 104474.33 111207.33 104485.00 111186.00C104495.67 111175.00 104506.33 111164.00 104517.00 111153.00C104517.00 111142.33 104517.00 111131.67 104517.00 111121.00C104527.67 111121.00 104538.33 111121.00 104549.00 111121.00C104559.67 111089.00 104570.33 111057.00 104581.00 111025.00C104581.00 111003.67 104581.00 110982.33 104581.00 110961.00C104591.67 110950.00 104602.33 110939.00 104613.00 110928.00C104634.67 110928.00 104656.33 110928.00 104678.00 110928.00C104667.33 110917.33 104656.67 110906.67 104646.00 110896.00C104667.33 110896.00 104688.67 110896.00 104710.00 110896.00C104710.00 110885.33 104710.00 110874.67 104710.00 110864.00C104720.67 110864.00 104731.33 110864.00 104742.00 110864.00C104731.33 110853.33 104720.67 110842.67 104710.00 110832.00C104731.33 110832.00 104752.67 110832.00 104774.00 110832.00C104763.33 110821.33 104752.67 110810.67 104742.00 110800.00C104752.67 110800.00 104763.33 110800.00 104774.00 110800.00C104784.67 110810.67 104795.33 110821.33 104806.00 110832.00C104806.00 110810.67 104806.00 110789.33 104806.00 110768.00C104806.00 110778.67 104806.00 110789.33 104806.00 110800.00C104806.00 110789.33 104806.00 110778.67 104806.00 110768.00C104817.00 110768.00 104828.00 110768.00 104839.00 110768.00C104849.67 110757.00 104860.33 110746.00 104871.00 110735.00C104871.00 110724.33 104871.00 110713.67 104871.00 110703.00C104860.33 110692.33 104849.67 110681.67 104839.00 110671.00C104839.00 110681.67 104839.00 110692.33 104839.00 110703.00C104839.00 110681.67 104839.00 110660.33 104839.00 110639.00C104828.00 110639.00 104817.00 110639.00 104806.00 110639.00C104806.00 110628.33 104806.00 110617.67 104806.00 110607.00C104817.00 110607.00 104828.00 110607.00 104839.00 110607.00C104828.00 110585.67 104817.00 110564.33 104806.00 110543.00C104817.00 110543.00 104828.00 110543.00 104839.00 110543.00C104839.00 110532.00 104839.00 110521.00 104839.00 110510.00C104849.67 110510.00 104860.33 110510.00 104871.00 110510.00C104860.33 110499.33 104849.67 110488.67 104839.00 110478.00C104849.67 110478.00 104860.33 110478.00 104871.00 110478.00C104871.00 110456.67 104871.00 110435.33 104871.00 110414.00C104881.67 110403.33 104892.33 110392.67 104903.00 110382.00C104892.33 110371.33 104881.67 110360.67 104871.00 110350.00C104871.00 110307.00 104871.00 110264.00 104871.00 110221.00C104881.67 110221.00 104892.33 110221.00 104903.00 110221.00C104903.00 110231.67 104903.00 110242.33 104903.00 110253.00C104913.67 110231.67 104924.33 110210.33 104935.00 110189.00C104935.00 110178.33 104935.00 110167.67 104935.00 110157.00C104945.67 110146.33 104956.33 110135.67 104967.00 110125.00C104967.00 110071.33 104967.00 110017.67 104967.00 109964.00C104977.67 109964.00 104988.33 109964.00 104999.00 109964.00C104999.00 109953.33 104999.00 109942.67 104999.00 109932.00C105009.67 109932.00 105020.33 109932.00 105031.00 109932.00C105042.00 109921.00 105053.00 109910.00 105064.00 109899.00C105064.00 109877.67 105064.00 109856.33 105064.00 109835.00C105074.67 109835.00 105085.33 109835.00 105096.00 109835.00C105085.33 109824.33 105074.67 109813.67 105064.00 109803.00C105064.00 109781.67 105064.00 109760.33 105064.00 109739.00C105074.67 109728.33 105085.33 109717.67 105096.00 109707.00C105096.00 109717.67 105096.00 109728.33 105096.00 109739.00C105106.67 109728.33 105117.33 109717.67 105128.00 109707.00C105138.67 109717.67 105149.33 109728.33 105160.00 109739.00C105192.33 109739.00 105224.67 109739.00 105257.00 109739.00C105267.67 109749.67 105278.33 109760.33 105289.00 109771.00C105299.67 109760.33 105310.33 109749.67 105321.00 109739.00C105321.00 109728.33 105321.00 109717.67 105321.00 109707.00C105331.67 109717.67 105342.33 109728.33 105353.00 109739.00C105353.00 109717.33 105353.00 109695.67 105353.00 109674.00C105363.67 109674.00 105374.33 109674.00 105385.00 109674.00C105385.00 109685.00 105385.00 109696.00 105385.00 109707.00C105395.67 109707.00 105406.33 109707.00 105417.00 109707.00C105406.33 109685.33 105395.67 109663.67 105385.00 109642.00C105374.33 109642.00 105363.67 109642.00 105353.00 109642.00C105396.00 109642.00 105439.00 109642.00 105482.00 109642.00C105482.00 109631.33 105482.00 109620.67 105482.00 109610.00C105471.00 109610.00 105460.00 109610.00 105449.00 109610.00C105460.00 109588.67 105471.00 109567.33 105482.00 109546.00C105460.33 109524.33 105438.67 109502.67 105417.00 109481.00C105427.67 109481.00 105438.33 109481.00 105449.00 109481.00C105449.00 109470.33 105449.00 109459.67 105449.00 109449.00C105460.00 109449.00 105471.00 109449.00 105482.00 109449.00C105482.00 109470.67 105482.00 109492.33 105482.00 109514.00C105492.67 109514.00 105503.33 109514.00 105514.00 109514.00C105524.67 109503.00 105535.33 109492.00 105546.00 109481.00C105556.67 109481.00 105567.33 109481.00 105578.00 109481.00C105578.00 109459.67 105578.00 109438.33 105578.00 109417.00C105599.33 109406.33 105620.67 109395.67 105642.00 109385.00C105653.00 109374.33 105664.00 109363.67 105675.00 109353.00C105664.00 109353.00 105653.00 109353.00 105642.00 109353.00C105663.67 109342.33 105685.33 109331.67 105707.00 109321.00C105728.33 109321.00 105749.67 109321.00 105771.00 109321.00C105781.67 109299.33 105792.33 109277.67 105803.00 109256.00C105813.67 109267.00 105824.33 109278.00 105835.00 109289.00C105845.67 109278.00 105856.33 109267.00 105867.00 109256.00C105878.00 109256.00 105889.00 109256.00 105900.00 109256.00C105900.00 109267.00 105900.00 109278.00 105900.00 109289.00C105910.67 109289.00 105921.33 109289.00 105932.00 109289.00C105932.00 109267.33 105932.00 109245.67 105932.00 109224.00C105942.67 109224.00 105953.33 109224.00 105964.00 109224.00C105996.00 109192.00 106028.00 109160.00 106060.00 109128.00C106070.67 109138.67 106081.33 109149.33 106092.00 109160.00C106103.00 109149.33 106114.00 109138.67 106125.00 109128.00C106135.67 109128.00 106146.33 109128.00 106157.00 109128.00C106157.00 109095.67 106157.00 109063.33 106157.00 109031.00C106167.67 109009.67 106178.33 108988.33 106189.00 108967.00C106210.33 108967.00 106231.67 108967.00 106253.00 108967.00C106253.00 108924.00 106253.00 108881.00 106253.00 108838.00C106263.67 108827.33 106274.33 108816.67 106285.00 108806.00C106263.67 108806.00 106242.33 108806.00 106221.00 108806.00C106221.00 108795.33 106221.00 108784.67 106221.00 108774.00C106260.93 108753.97 106300.93 108734.05 106341.05 108714.41C106344.03 108712.94 106347.02 108711.47 106350.00 108710.00C106360.67 108720.67 106371.33 108731.33 106382.00 108742.00C106360.67 108710.00 106339.33 108678.00 106318.00 108646.00C106336.14 108627.25 106354.27 108608.49 106372.83 108590.17C106375.89 108587.11 106378.94 108584.06 106382.00 108581.00C106392.69 108591.79 106403.62 108602.41 106414.16 108613.31C106424.77 108634.88 106435.39 108656.44 106446.00 108678.00C106456.67 108667.33 106467.33 108656.67 106478.00 108646.00C106467.33 108603.00 106456.67 108560.00 106446.00 108517.00C106424.67 108517.00 106403.33 108517.00 106382.00 108517.00C106382.00 108506.33 106382.00 108495.67 106382.00 108485.00C106392.67 108474.33 106403.33 108463.67 106414.00 108453.00C106403.33 108431.33 106392.67 108409.67 106382.00 108388.00C106403.33 108388.00 106424.67 108388.00 106446.00 108388.00C106478.33 108409.67 106510.67 108431.33 106543.00 108453.00C106532.33 108410.00 106521.67 108367.00 106511.00 108324.00C106521.67 108324.00 106532.33 108324.00 106543.00 108324.00C106564.33 108345.33 106585.67 108366.67 106607.00 108388.00C106628.33 108388.00 106649.67 108388.00 106671.00 108388.00C106681.67 108377.33 106692.33 108366.67 106703.00 108356.00C106692.33 108334.67 106681.67 108313.33 106671.00 108292.00C106692.67 108292.00 106714.33 108292.00 106736.00 108292.00C106725.00 108281.33 106714.00 108270.67 106703.00 108260.00C106703.00 108238.33 106703.00 108216.67 106703.00 108195.00C106714.00 108195.00 106725.00 108195.00 106736.00 108195.00C106757.33 108216.67 106778.67 108238.33 106800.00 108260.00C106800.00 108238.33 106800.00 108216.67 106800.00 108195.00C106821.33 108205.67 106842.67 108216.33 106864.00 108227.00C106864.00 108205.67 106864.00 108184.33 106864.00 108163.00C106874.67 108152.33 106885.33 108141.67 106896.00 108131.00C106896.00 108099.00 106896.00 108067.00 106896.00 108035.00C106885.33 108035.00 106874.67 108035.00 106864.00 108035.00C106864.00 108013.33 106864.00 107991.67 106864.00 107970.00C106896.33 107970.00 106928.67 107970.00 106961.00 107970.00C106971.67 107948.67 106982.33 107927.33 106993.00 107906.00C106993.00 107884.67 106993.00 107863.33 106993.00 107842.00C106982.33 107831.33 106971.67 107820.67 106961.00 107810.00C106982.33 107799.00 107003.67 107788.00 107025.00 107777.00C107003.67 107766.33 106982.33 107755.67 106961.00 107745.00C106950.00 107755.67 106939.00 107766.33 106928.00 107777.00C106928.00 107766.33 106928.00 107755.67 106928.00 107745.00C106939.00 107734.33 106950.00 107723.67 106961.00 107713.00C106928.60 107691.57 106896.08 107670.28 106863.75 107648.75C106853.17 107638.17 106842.58 107627.58 106832.00 107617.00C106832.00 107584.67 106832.00 107552.33 106832.00 107520.00C106778.33 107520.00 106724.67 107520.00 106671.00 107520.00C106649.67 107498.67 106628.33 107477.33 106607.00 107456.00C106607.00 107445.33 106607.00 107434.67 106607.00 107424.00C106628.33 107413.00 106649.67 107402.00 106671.00 107391.00C106649.67 107369.67 106628.33 107348.33 106607.00 107327.00C106607.00 107295.00 106607.00 107263.00 106607.00 107231.00C106617.67 107220.33 106628.33 107209.67 106639.00 107199.00C106639.00 107166.67 106639.00 107134.33 106639.00 107102.00C106628.33 107091.33 106617.67 107080.67 106607.00 107070.00C106617.67 107048.67 106628.33 107027.33 106639.00 107006.00C106649.67 107006.00 106660.33 107006.00 106671.00 107006.00C106671.00 106984.33 106671.00 106962.67 106671.00 106941.00C106703.33 106919.67 106735.67 106898.33 106768.00 106877.00C106778.67 106877.00 106789.33 106877.00 106800.00 106877.00C106800.00 106887.67 106800.00 106898.33 106800.00 106909.00C106842.67 106909.00 106885.33 106909.00 106928.00 106909.00C106949.67 106887.67 106971.33 106866.33 106993.00 106845.00C107025.00 106845.00 107057.00 106845.00 107089.00 106845.00C107089.00 106834.33 107089.00 106823.67 107089.00 106813.00C107099.67 106791.33 107110.33 106769.67 107121.00 106748.00C107132.00 106748.00 107143.00 106748.00 107154.00 106748.00C107175.33 106769.67 107196.67 106791.33 107218.00 106813.00C107239.33 106813.00 107260.67 106813.00 107282.00 106813.00C107282.00 106802.33 107282.00 106791.67 107282.00 106781.00C107250.00 106738.00 107218.00 106695.00 107186.00 106652.00C107186.00 106641.33 107186.00 106630.67 107186.00 106620.00C107218.00 106620.00 107250.00 106620.00 107282.00 106620.00C107282.00 106566.33 107282.00 106512.67 107282.00 106459.00C107292.67 106437.67 107303.33 106416.33 107314.00 106395.00C107303.33 106373.33 107292.67 106351.67 107282.00 106330.00C107314.33 106319.33 107346.67 106308.67 107379.00 106298.00C107379.00 106266.00 107379.00 106234.00 107379.00 106202.00C107400.33 106191.33 107421.67 106180.67 107443.00 106170.00C107464.33 106180.67 107485.67 106191.33 107507.00 106202.00C107517.67 106202.00 107528.33 106202.00 107539.00 106202.00C107550.13 106191.31 107561.09 106180.39 107572.31 106169.84C107593.54 106159.23 107614.77 106148.61 107636.00 106138.00C107657.33 106138.00 107678.67 106138.00 107700.00 106138.00C107732.45 106116.29 107764.83 106094.49 107797.31 106072.84C107861.21 106040.90 107925.10 106008.95 107989.00 105977.00C108021.33 105987.67 108053.67 105998.33 108086.00 106009.00C108109.26 105985.63 108132.75 105962.48 108155.86 105938.95C108164.58 105929.97 108173.29 105920.98 108182.00 105912.00C108193.00 105923.00 108204.00 105934.00 108215.00 105945.00C108247.00 105923.33 108279.00 105901.67 108311.00 105880.00C108311.07 105869.23 108310.85 105858.41 108311.11 105847.67C108321.74 105815.78 108332.37 105783.89 108343.00 105752.00C108343.00 105741.00 108343.00 105730.00 108343.00 105719.00C108353.71 105697.43 108364.66 105675.96 108375.23 105654.34C108386.15 105622.56 108397.08 105590.78 108408.00 105559.00C108439.94 105526.61 108471.72 105494.06 108504.00 105462.00C108504.00 105430.00 108504.00 105398.00 108504.00 105366.00C108547.00 105333.67 108590.00 105301.33 108633.00 105269.00C108633.00 105247.67 108633.00 105226.33 108633.00 105205.00C108643.67 105205.00 108654.33 105205.00 108665.00 105205.00C108675.67 105162.00 108686.33 105119.00 108697.00 105076.00C108686.33 105044.00 108675.67 105012.00 108665.00 104980.00C108740.00 104980.00 108815.00 104980.00 108890.00 104980.00C108911.33 104969.33 108932.67 104958.67 108954.00 104948.00C109061.33 104969.33 109168.67 104990.67 109276.00 105012.00C109308.00 104990.67 109340.00 104969.33 109372.00 104948.00C109382.67 104958.67 109393.33 104969.33 109404.00 104980.00C109414.67 104969.33 109425.33 104958.67 109436.00 104948.00C109457.67 104948.00 109479.33 104948.00 109501.00 104948.00C109533.00 104958.67 109565.00 104969.33 109597.00 104980.00C109672.00 104969.33 109747.00 104958.67 109822.00 104948.00C109843.67 104937.33 109865.33 104926.67 109887.00 104916.00C109908.33 104862.33 109929.67 104808.67 109951.00 104755.00C109972.33 104744.33 109993.67 104733.67 110015.00 104723.00C110036.67 104733.67 110058.33 104744.33 110080.00 104755.00C110080.00 104722.67 110080.00 104690.33 110080.00 104658.00C110090.67 104636.67 110101.33 104615.33 110112.00 104594.00C110176.33 104594.00 110240.67 104594.00 110305.00 104594.00C110337.00 104626.33 110369.00 104658.67 110401.00 104691.00C110411.67 104680.00 110422.33 104669.00 110433.00 104658.00C110443.67 104626.00 110454.33 104594.00 110465.00 104562.00C110497.33 104530.00 110529.67 104498.00 110562.00 104466.00C110572.87 104444.05 110583.54 104421.98 110594.54 104400.10C110626.36 104346.73 110658.18 104293.37 110690.00 104240.00C110733.00 104218.67 110776.00 104197.33 110819.00 104176.00C110819.00 104154.67 110819.00 104133.33 110819.00 104112.00C110872.67 104015.33 110926.33 103918.67 110980.00 103822.00C110990.67 103811.33 111001.33 103800.67 111012.00 103790.00C111022.67 103758.00 111033.33 103726.00 111044.00 103694.00C111044.00 103672.67 111044.00 103651.33 111044.00 103630.00C111011.87 103543.55 110979.61 103457.14 110947.56 103370.67C110937.04 103339.11 110926.52 103307.56 110916.00 103276.00C110926.67 103276.00 110937.33 103276.00 110948.00 103276.00C110948.00 103265.33 110948.00 103254.67 110948.00 103244.00C110969.33 103244.00 110990.67 103244.00 111012.00 103244.00C111022.67 103276.00 111033.33 103308.00 111044.00 103340.00C111087.00 103340.00 111130.00 103340.00 111173.00 103340.00C111173.00 103318.67 111173.00 103297.33 111173.00 103276.00C111162.33 103243.67 111151.67 103211.33 111141.00 103179.00C111141.00 103168.33 111141.00 103157.67 111141.00 103147.00C111151.67 103125.67 111162.33 103104.33 111173.00 103083.00C111205.00 103072.33 111237.00 103061.67 111269.00 103051.00C111279.67 103040.33 111290.33 103029.67 111301.00 103019.00C111301.00 102997.33 111301.00 102975.67 111301.00 102954.00C111290.33 102922.00 111279.67 102890.00 111269.00 102858.00C111290.33 102825.67 111311.67 102793.33 111333.00 102761.00C111333.00 102750.33 111333.00 102739.67 111333.00 102729.00C111322.33 102707.67 111311.67 102686.33 111301.00 102665.00C111301.00 102654.33 111301.00 102643.67 111301.00 102633.00C111344.00 102568.67 111387.00 102504.33 111430.00 102440.00C111430.00 102418.67 111430.00 102397.33 111430.00 102376.00C111408.67 102354.33 111387.33 102332.67 111366.00 102311.00C111366.00 102257.67 111366.00 102204.33 111366.00 102151.00C111376.67 102118.67 111387.33 102086.33 111398.00 102054.00C111419.51 102043.18 111441.14 102032.55 111462.59 102021.61C111494.72 102000.41 111526.86 101979.20 111559.00 101958.00C111559.00 101947.00 111559.00 101936.00 111559.00 101925.00C111537.33 101914.33 111515.67 101903.67 111494.00 101893.00C111483.33 101871.67 111472.67 101850.33 111462.00 101829.00C111462.00 101797.00 111462.00 101765.00 111462.00 101733.00C111483.33 101700.67 111504.67 101668.33 111526.00 101636.00C111526.00 101593.00 111526.00 101550.00 111526.00 101507.00C111558.33 101485.67 111590.67 101464.33 111623.00 101443.00C111665.67 101443.00 111708.33 101443.00 111751.00 101443.00C111762.00 101432.33 111773.00 101421.67 111784.00 101411.00C111816.00 101336.00 111848.00 101261.00 111880.00 101186.00C111923.00 101175.33 111966.00 101164.67 112009.00 101154.00C112030.33 101100.33 112051.67 101046.67 112073.00 100993.00C112105.00 100961.00 112137.00 100929.00 112169.00 100897.00C112233.33 100907.67 112297.67 100918.33 112362.00 100929.00C112383.67 100907.33 112405.33 100885.67 112427.00 100864.00C112437.67 100842.67 112448.33 100821.33 112459.00 100800.00C112480.33 100800.00 112501.67 100800.00 112523.00 100800.00C112544.33 100757.00 112565.67 100714.00 112587.00 100671.00C112630.00 100660.33 112673.00 100649.67 112716.00 100639.00C112748.33 100660.67 112780.67 100682.33 112813.00 100704.00C112845.07 100682.23 112877.25 100660.60 112909.25 100638.75C112930.50 100617.50 112951.75 100596.25 112973.00 100575.00C112983.67 100553.67 112994.33 100532.33 113005.00 100511.00C113026.67 100511.00 113048.33 100511.00 113070.00 100511.00C113102.00 100532.33 113134.00 100553.67 113166.00 100575.00C113176.67 100628.67 113187.33 100682.33 113198.00 100736.00C113209.00 100757.33 113220.00 100778.67 113231.00 100800.00C113263.00 100810.67 113295.00 100821.33 113327.00 100832.00C113370.00 100821.33 113413.00 100810.67 113456.00 100800.00C113537.42 100753.37 113618.74 100706.59 113700.22 100660.07C113768.81 100621.04 113837.41 100582.02 113906.00 100543.00C113906.00 100510.67 113906.00 100478.33 113906.00 100446.00C113927.33 100414.00 113948.67 100382.00 113970.00 100350.00C113980.67 100350.00 113991.33 100350.00 114002.00 100350.00C114066.33 100307.00 114130.67 100264.00 114195.00 100221.00C114205.67 100221.00 114216.33 100221.00 114227.00 100221.00C114227.00 100210.33 114227.00 100199.67 114227.00 100189.00C114205.67 100167.67 114184.33 100146.33 114163.00 100125.00C114173.67 100092.67 114184.33 100060.33 114195.00 100028.00C114195.00 99974.67 114195.00 99921.33 114195.00 99868.00C114227.33 99814.33 114259.67 99760.67 114292.00 99707.00C114324.00 99685.67 114356.00 99664.33 114388.00 99643.00C114398.67 99621.33 114409.33 99599.67 114420.00 99578.00C114398.67 99546.00 114377.33 99514.00 114356.00 99482.00C114356.00 99449.67 114356.00 99417.33 114356.00 99385.00C114366.69 99374.21 114377.62 99363.59 114388.16 99352.69C114398.77 99331.46 114409.39 99310.23 114420.00 99289.00C114430.69 99278.21 114441.62 99267.59 114452.16 99256.68C114462.77 99235.12 114473.39 99213.56 114484.00 99192.00C114483.93 99181.23 114484.15 99170.41 114483.89 99159.67C114473.26 99127.78 114462.63 99095.89 114452.00 99064.00C114462.67 99042.33 114473.33 99020.67 114484.00 98999.00C114495.00 98999.00 114506.00 98999.00 114517.00 98999.00C114559.67 98913.33 114602.33 98827.67 114645.00 98742.00C114634.33 98688.67 114623.67 98635.33 114613.00 98582.00C114666.67 98496.00 114720.33 98410.00 114774.00 98324.00C114763.33 98281.33 114752.67 98238.67 114742.00 98196.00C114752.67 98163.67 114763.33 98131.33 114774.00 98099.00C114763.33 98077.67 114752.67 98056.33 114742.00 98035.00C114720.33 98013.67 114698.67 97992.33 114677.00 97971.00C114677.00 97949.33 114677.00 97927.67 114677.00 97906.00C114655.67 97874.00 114634.33 97842.00 114613.00 97810.00C114633.03 97770.07 114652.95 97730.07 114672.59 97689.95C114673.96 97686.71 114676.15 97683.66 114677.00 97680.30C114676.94 97669.76 114677.11 97659.18 114676.92 97648.66C114666.28 97605.77 114655.64 97562.89 114645.00 97520.00C114666.67 97509.33 114688.33 97498.67 114710.00 97488.00C114720.67 97456.00 114731.33 97424.00 114742.00 97392.00C114731.33 97338.33 114720.67 97284.67 114710.00 97231.00C114720.69 97209.55 114731.50 97188.15 114742.11 97166.67C114763.48 97102.35 114784.71 97037.97 114806.16 96973.69C114840.55 96905.15 114875.11 96836.70 114909.40 96768.11C114928.60 96729.41 114947.80 96690.70 114967.00 96652.00C114988.33 96630.67 115009.67 96609.33 115031.00 96588.00C115031.00 96555.67 115031.00 96523.33 115031.00 96491.00C115020.33 96448.33 115009.67 96405.67 114999.00 96363.00C114999.00 96341.67 114999.00 96320.33 114999.00 96299.00C115020.33 96299.00 115041.67 96299.00 115063.00 96299.00C115084.67 96320.33 115106.33 96341.67 115128.00 96363.00C115160.00 96363.00 115192.00 96363.00 115224.00 96363.00C115267.00 96330.67 115310.00 96298.33 115353.00 96266.00C115363.69 96244.55 115374.50 96223.15 115385.11 96201.67C115395.74 96169.78 115406.37 96137.89 115417.00 96106.00C115384.67 96031.00 115352.33 95956.00 115320.00 95881.00C115320.00 95838.00 115320.00 95795.00 115320.00 95752.00C115298.67 95720.00 115277.33 95688.00 115256.00 95656.00C115256.00 95623.67 115256.00 95591.33 115256.00 95559.00C115288.33 95527.00 115320.67 95495.00 115353.00 95463.00C115353.00 95323.67 115353.00 95184.33 115353.00 95045.00C115331.33 95002.00 115309.67 94959.00 115288.00 94916.00C115298.67 94884.00 115309.33 94852.00 115320.00 94820.00C115309.33 94798.33 115298.67 94776.67 115288.00 94755.00C115298.67 94701.33 115309.33 94647.67 115320.00 94594.00C115288.00 94551.33 115256.00 94508.67 115224.00 94466.00C115234.67 94444.67 115245.33 94423.33 115256.00 94402.00C115266.67 94391.00 115277.33 94380.00 115288.00 94369.00C115298.67 94369.00 115309.33 94369.00 115320.00 94369.00C115341.67 94358.33 115363.33 94347.67 115385.00 94337.00C115406.33 94347.67 115427.67 94358.33 115449.00 94369.00C115481.33 94326.33 115513.67 94283.67 115546.00 94241.00C115567.34 94176.55 115588.80 94112.13 115610.07 94047.66C115620.71 93994.10 115631.36 93940.55 115642.00 93887.00C115663.33 93855.00 115684.67 93823.00 115706.00 93791.00C115717.00 93683.67 115728.00 93576.33 115739.00 93469.00C115771.00 93426.33 115803.00 93383.67 115835.00 93341.00C115878.00 93319.33 115921.00 93297.67 115964.00 93276.00C115996.00 93244.00 116028.00 93212.00 116060.00 93180.00C116081.33 93137.00 116102.67 93094.00 116124.00 93051.00C116145.67 93040.33 116167.33 93029.67 116189.00 93019.00C116199.67 92997.67 116210.33 92976.33 116221.00 92955.00C116210.33 92912.00 116199.67 92869.00 116189.00 92826.00C116189.00 92783.00 116189.00 92740.00 116189.00 92697.00C116221.00 92675.67 116253.00 92654.33 116285.00 92633.00C116295.67 92611.67 116306.33 92590.33 116317.00 92569.00C116338.71 92547.55 116360.58 92526.23 116382.19 92504.71C116403.56 92472.40 116424.79 92439.98 116446.25 92407.75C116456.83 92397.17 116467.42 92386.58 116478.00 92376.00C116478.00 92322.33 116478.00 92268.67 116478.00 92215.00C116488.71 92204.22 116499.57 92193.56 116510.19 92182.71C116531.46 92150.80 116552.73 92118.90 116574.00 92087.00C116574.00 92022.67 116574.00 91958.33 116574.00 91894.00C116552.67 91872.33 116531.33 91850.67 116510.00 91829.00C116499.33 91829.00 116488.67 91829.00 116478.00 91829.00C116499.33 91786.33 116520.67 91743.67 116542.00 91701.00C116531.33 91658.00 116520.67 91615.00 116510.00 91572.00C116520.67 91518.33 116531.33 91464.67 116542.00 91411.00C116542.00 91389.67 116542.00 91368.33 116542.00 91347.00C116531.31 91336.21 116520.38 91325.59 116509.84 91314.69C116488.56 91271.79 116467.28 91228.90 116446.00 91186.00C116456.67 91175.33 116467.33 91164.67 116478.00 91154.00C116521.00 91143.33 116564.00 91132.67 116607.00 91122.00C116617.67 91100.67 116628.33 91079.33 116639.00 91058.00C116639.00 91047.00 116639.00 91036.00 116639.00 91025.00C116617.33 91014.33 116595.67 91003.67 116574.00 90993.00C116563.33 90961.00 116552.67 90929.00 116542.00 90897.00C116563.67 90886.33 116585.33 90875.67 116607.00 90865.00C116628.33 90875.67 116649.67 90886.33 116671.00 90897.00C116681.67 90897.00 116692.33 90897.00 116703.00 90897.00C116724.33 90864.67 116745.67 90832.33 116767.00 90800.00C116799.33 90789.33 116831.67 90778.67 116864.00 90768.00C116864.00 90703.67 116864.00 90639.33 116864.00 90575.00C116885.49 90510.72 116906.82 90446.38 116928.00 90382.00C116938.67 90360.67 116949.33 90339.33 116960.00 90318.00C116960.00 90296.67 116960.00 90275.33 116960.00 90254.00C116949.33 90232.67 116938.67 90211.33 116928.00 90190.00C116949.38 90157.56 116970.84 90125.16 116992.16 90092.69C117003.11 90071.46 117014.05 90050.23 117025.00 90029.00C117014.00 90018.33 117003.00 90007.67 116992.00 89997.00C117003.00 89986.00 117014.00 89975.00 117025.00 89964.00C117035.67 89964.00 117046.33 89964.00 117057.00 89964.00C117046.33 89921.33 117035.67 89878.67 117025.00 89836.00C117035.67 89814.33 117046.33 89792.67 117057.00 89771.00C117067.67 89771.00 117078.33 89771.00 117089.00 89771.00C117089.00 89749.67 117089.00 89728.33 117089.00 89707.00C117099.67 89696.33 117110.33 89685.67 117121.00 89675.00C117099.67 89675.00 117078.33 89675.00 117057.00 89675.00C117057.00 89653.67 117057.00 89632.33 117057.00 89611.00C117078.33 89600.33 117099.67 89589.67 117121.00 89579.00C117131.67 89568.00 117142.33 89557.00 117153.00 89546.00C117131.67 89524.67 117110.33 89503.33 117089.00 89482.00C117089.00 89471.33 117089.00 89460.67 117089.00 89450.00C117110.33 89439.33 117131.67 89428.67 117153.00 89418.00C117153.00 89407.33 117153.00 89396.67 117153.00 89386.00C117196.00 89386.00 117239.00 89386.00 117282.00 89386.00C117292.67 89375.33 117303.33 89364.67 117314.00 89354.00C117303.33 89332.33 117292.67 89310.67 117282.00 89289.00C117292.67 89278.33 117303.33 89267.67 117314.00 89257.00C117303.33 89246.33 117292.67 89235.67 117282.00 89225.00C117292.67 89214.33 117303.33 89203.67 117314.00 89193.00C117314.00 89182.33 117314.00 89171.67 117314.00 89161.00C117303.33 89161.00 117292.67 89161.00 117282.00 89161.00C117282.00 89171.67 117282.00 89182.33 117282.00 89193.00C117271.33 89193.00 117260.67 89193.00 117250.00 89193.00C117271.33 89171.33 117292.67 89149.67 117314.00 89128.00C117335.33 89139.00 117356.67 89150.00 117378.00 89161.00C117388.67 89150.00 117399.33 89139.00 117410.00 89128.00C117399.33 89096.00 117388.67 89064.00 117378.00 89032.00C117388.79 89021.31 117399.41 89010.38 117410.31 88999.85C117431.88 88989.23 117453.44 88978.62 117475.00 88968.00C117485.67 88957.00 117496.33 88946.00 117507.00 88935.00C117496.33 88935.00 117485.67 88935.00 117475.00 88935.00C117496.33 88892.33 117517.67 88849.67 117539.00 88807.00C117560.33 88807.00 117581.67 88807.00 117603.00 88807.00C117603.00 88774.67 117603.00 88742.33 117603.00 88710.00C117614.00 88699.33 117625.00 88688.67 117636.00 88678.00C117625.00 88667.33 117614.00 88656.67 117603.00 88646.00C117635.33 88646.00 117667.67 88646.00 117700.00 88646.00C117700.00 88624.67 117700.00 88603.33 117700.00 88582.00C117721.33 88592.67 117742.67 88603.33 117764.00 88614.00C117774.67 88603.33 117785.33 88592.67 117796.00 88582.00C117785.33 88560.67 117774.67 88539.33 117764.00 88518.00C117774.67 88518.00 117785.33 88518.00 117796.00 88518.00C117817.67 88528.67 117839.33 88539.33 117861.00 88550.00C117861.00 88539.33 117861.00 88528.67 117861.00 88518.00C117850.00 88507.00 117839.00 88496.00 117828.00 88485.00C117828.00 88474.33 117828.00 88463.67 117828.00 88453.00C117839.13 88442.31 117850.09 88431.39 117861.31 88420.84C117903.88 88399.56 117946.44 88378.28 117989.00 88357.00C117989.00 88346.33 117989.00 88335.67 117989.00 88325.00C118032.00 88325.00 118075.00 88325.00 118118.00 88325.00C118128.67 88292.67 118139.33 88260.33 118150.00 88228.00C118182.00 88228.00 118214.00 88228.00 118246.00 88228.00C118257.00 88206.67 118268.00 88185.33 118279.00 88164.00C118311.00 88164.00 118343.00 88164.00 118375.00 88164.00C118353.67 88153.33 118332.33 88142.67 118311.00 88132.00C118321.67 88132.00 118332.33 88132.00 118343.00 88132.00C118364.33 88121.00 118385.67 88110.00 118407.00 88099.00C118428.67 88099.00 118450.33 88099.00 118472.00 88099.00C118472.00 88088.33 118472.00 88077.67 118472.00 88067.00C118450.33 88056.33 118428.67 88045.67 118407.00 88035.00C118407.00 88024.33 118407.00 88013.67 118407.00 88003.00C118417.67 88003.00 118428.33 88003.00 118439.00 88003.00C118439.00 88013.67 118439.00 88024.33 118439.00 88035.00C118450.00 88045.67 118461.00 88056.33 118472.00 88067.00C118482.67 88067.00 118493.33 88067.00 118504.00 88067.00C118514.67 88056.33 118525.33 88045.67 118536.00 88035.00C118536.00 88013.67 118536.00 87992.33 118536.00 87971.00C118578.67 87949.67 118621.33 87928.33 118664.00 87907.00C118642.67 87939.00 118621.33 87971.00 118600.00 88003.00C118600.00 88035.00 118600.00 88067.00 118600.00 88099.00C118589.33 88099.00 118578.67 88099.00 118568.00 88099.00C118568.00 88110.00 118568.00 88121.00 118568.00 88132.00C118546.67 88132.00 118525.33 88132.00 118504.00 88132.00C118504.00 88142.67 118504.00 88153.33 118504.00 88164.00C118493.21 88174.69 118482.59 88185.62 118471.69 88196.15C118450.12 88206.77 118428.56 88217.38 118407.00 88228.00C118396.33 88238.67 118385.67 88249.33 118375.00 88260.00C118375.00 88281.67 118375.00 88303.33 118375.00 88325.00C118364.33 88335.67 118353.67 88346.33 118343.00 88357.00C118332.33 88357.00 118321.67 88357.00 118311.00 88357.00C118311.00 88410.67 118311.00 88464.33 118311.00 88518.00C118289.33 88539.33 118267.67 88560.67 118246.00 88582.00C118257.00 88603.33 118268.00 88624.67 118279.00 88646.00C118300.33 88656.67 118321.67 88667.33 118343.00 88678.00C118343.00 88699.67 118343.00 88721.33 118343.00 88743.00C118353.67 88732.00 118364.33 88721.00 118375.00 88710.00C118375.00 88699.33 118375.00 88688.67 118375.00 88678.00C118393.30 88696.25 118411.60 88714.51 118429.48 88733.18C118432.65 88736.46 118435.83 88739.73 118439.00 88743.00C118417.67 88743.00 118396.33 88743.00 118375.00 88743.00C118375.00 88753.67 118375.00 88764.33 118375.00 88775.00C118343.00 88796.33 118311.00 88817.67 118279.00 88839.00C118268.00 88839.00 118257.00 88839.00 118246.00 88839.00C118246.00 88828.33 118246.00 88817.67 118246.00 88807.00C118235.33 88807.00 118224.67 88807.00 118214.00 88807.00C118203.33 88839.00 118192.67 88871.00 118182.00 88903.00C118192.67 88946.00 118203.33 88989.00 118214.00 89032.00C118203.33 89042.67 118192.67 89053.33 118182.00 89064.00C118171.33 89053.33 118160.67 89042.67 118150.00 89032.00C118139.33 89053.33 118128.67 89074.67 118118.00 89096.00C118118.00 89106.67 118118.00 89117.33 118118.00 89128.00C118107.33 89149.67 118096.67 89171.33 118086.00 89193.00C118086.00 89203.67 118086.00 89214.33 118086.00 89225.00C118075.00 89246.33 118064.00 89267.67 118053.00 89289.00C118064.00 89299.67 118075.00 89310.33 118086.00 89321.00C118075.00 89321.00 118064.00 89321.00 118053.00 89321.00C118042.33 89310.33 118031.67 89299.67 118021.00 89289.00C118021.00 89310.67 118021.00 89332.33 118021.00 89354.00C118010.33 89343.00 117999.67 89332.00 117989.00 89321.00C117978.33 89321.00 117967.67 89321.00 117957.00 89321.00C117957.00 89332.00 117957.00 89343.00 117957.00 89354.00C117957.00 89332.33 117957.00 89310.67 117957.00 89289.00C117946.33 89299.67 117935.67 89310.33 117925.00 89321.00C117935.67 89342.67 117946.33 89364.33 117957.00 89386.00C117957.00 89396.67 117957.00 89407.33 117957.00 89418.00C117946.33 89428.67 117935.67 89439.33 117925.00 89450.00C117946.33 89460.67 117967.67 89471.33 117989.00 89482.00C117989.00 89514.33 117989.00 89546.67 117989.00 89579.00C117967.67 89589.67 117946.33 89600.33 117925.00 89611.00C117935.67 89611.00 117946.33 89611.00 117957.00 89611.00C117946.33 89621.67 117935.67 89632.33 117925.00 89643.00C117935.67 89653.67 117946.33 89664.33 117957.00 89675.00C117935.67 89696.33 117914.33 89717.67 117893.00 89739.00C117903.67 89760.67 117914.33 89782.33 117925.00 89804.00C117914.31 89814.79 117903.38 89825.41 117892.84 89836.31C117882.23 89857.54 117871.61 89878.77 117861.00 89900.00C117871.67 89910.67 117882.33 89921.33 117893.00 89932.00C117893.00 89953.67 117893.00 89975.33 117893.00 89997.00C117903.67 89997.00 117914.33 89997.00 117925.00 89997.00C117925.00 90007.67 117925.00 90018.33 117925.00 90029.00C117935.67 90029.00 117946.33 90029.00 117957.00 90029.00C117957.00 90050.33 117957.00 90071.67 117957.00 90093.00C117967.67 90082.33 117978.33 90071.67 117989.00 90061.00C117989.00 90071.67 117989.00 90082.33 117989.00 90093.00C117999.67 90093.00 118010.33 90093.00 118021.00 90093.00C118031.67 90103.67 118042.33 90114.33 118053.00 90125.00C118053.00 90114.33 118053.00 90103.67 118053.00 90093.00C118074.67 90103.67 118096.33 90114.33 118118.00 90125.00C118107.33 90125.00 118096.67 90125.00 118086.00 90125.00C118107.33 90125.00 118128.67 90125.00 118150.00 90125.00C118150.00 90135.67 118150.00 90146.33 118150.00 90157.00C118171.33 90157.00 118192.67 90157.00 118214.00 90157.00C118214.00 90168.00 118214.00 90179.00 118214.00 90190.00C118224.67 90179.00 118235.33 90168.00 118246.00 90157.00C118246.00 90168.00 118246.00 90179.00 118246.00 90190.00C118257.00 90190.00 118268.00 90190.00 118279.00 90190.00C118279.00 90211.33 118279.00 90232.67 118279.00 90254.00C118300.33 90264.67 118321.67 90275.33 118343.00 90286.00C118343.00 90275.33 118343.00 90264.67 118343.00 90254.00C118353.67 90275.33 118364.33 90296.67 118375.00 90318.00C118385.67 90318.00 118396.33 90318.00 118407.00 90318.00C118407.00 90328.67 118407.00 90339.33 118407.00 90350.00C118428.67 90360.67 118450.33 90371.33 118472.00 90382.00C118472.00 90371.33 118472.00 90360.67 118472.00 90350.00C118482.67 90350.00 118493.33 90350.00 118504.00 90350.00C118514.67 90360.67 118525.33 90371.33 118536.00 90382.00C118557.33 90371.33 118578.67 90360.67 118600.00 90350.00C118610.67 90360.67 118621.33 90371.33 118632.00 90382.00C118675.00 90393.00 118718.00 90404.00 118761.00 90415.00C118782.33 90425.67 118803.67 90436.33 118825.00 90447.00C118835.67 90436.33 118846.33 90425.67 118857.00 90415.00C118900.00 90415.00 118943.00 90415.00 118986.00 90415.00C118996.67 90436.33 119007.33 90457.67 119018.00 90479.00C119050.33 90479.00 119082.67 90479.00 119115.00 90479.00C119125.67 90500.33 119136.33 90521.67 119147.00 90543.00C119157.77 90542.93 119168.59 90543.15 119179.33 90542.89C119211.22 90532.26 119243.11 90521.63 119275.00 90511.00C119296.67 90521.67 119318.33 90532.33 119340.00 90543.00C119361.33 90564.33 119382.67 90585.67 119404.00 90607.00C119414.67 90596.33 119425.33 90585.67 119436.00 90575.00C119479.00 90607.33 119522.00 90639.67 119565.00 90672.00C119586.33 90672.00 119607.67 90672.00 119629.00 90672.00C119661.00 90682.67 119693.00 90693.33 119725.00 90704.00C119736.00 90704.00 119747.00 90704.00 119758.00 90704.00C119768.79 90714.70 119779.43 90725.59 119790.30 90736.18C120262.28 91015.01 120734.23 91293.89 121206.22 91572.70C121456.93 91716.03 121707.58 91859.47 121958.33 92002.74C122082.22 92073.49 122206.11 92144.24 122330.00 92215.00C122373.00 92183.00 122416.00 92151.00 122459.00 92119.00C122459.00 92086.67 122459.00 92054.33 122459.00 92022.00C122448.00 91990.00 122437.00 91958.00 122426.00 91926.00C122437.00 91904.33 122448.00 91882.67 122459.00 91861.00C122448.00 91839.67 122437.00 91818.33 122426.00 91797.00C122437.00 91775.67 122448.00 91754.33 122459.00 91733.00C122437.33 91700.67 122415.67 91668.33 122394.00 91636.00C122410.19 91603.69 122426.15 91571.27 122442.89 91539.24C122448.26 91528.83 122453.63 91518.41 122459.00 91508.00C122459.00 91486.33 122459.00 91464.67 122459.00 91443.00C122437.33 91432.33 122415.67 91421.67 122394.00 91411.00C122394.00 91400.33 122394.00 91389.67 122394.00 91379.00C122426.33 91314.67 122458.67 91250.33 122491.00 91186.00C122512.39 91164.56 122533.88 91143.21 122555.21 91121.72C122587.19 91078.71 122619.25 91035.74 122651.18 90992.70C122683.45 90939.47 122715.73 90886.23 122748.00 90833.00C122758.67 90833.00 122769.33 90833.00 122780.00 90833.00C122780.00 90811.33 122780.00 90789.67 122780.00 90768.00C122769.33 90768.00 122758.67 90768.00 122748.00 90768.00C122748.00 90757.33 122748.00 90746.67 122748.00 90736.00C122769.33 90693.00 122790.67 90650.00 122812.00 90607.00C122822.67 90596.33 122833.33 90585.67 122844.00 90575.00C122855.00 90575.00 122866.00 90575.00 122877.00 90575.00C122877.00 90564.33 122877.00 90553.67 122877.00 90543.00C122887.67 90521.67 122898.33 90500.33 122909.00 90479.00C122909.00 90446.67 122909.00 90414.33 122909.00 90382.00C122930.33 90371.33 122951.67 90360.67 122973.00 90350.00C122973.00 90339.33 122973.00 90328.67 122973.00 90318.00C122994.33 90296.67 123015.67 90275.33 123037.00 90254.00C123047.67 90264.67 123058.33 90275.33 123069.00 90286.00C123080.13 90275.31 123091.09 90264.39 123102.31 90253.84C123123.54 90243.23 123144.77 90232.61 123166.00 90222.00C123166.00 90200.33 123166.00 90178.67 123166.00 90157.00C123176.78 90146.29 123187.44 90135.43 123198.29 90124.81C123230.60 90103.44 123263.02 90082.21 123295.25 90060.75C123316.50 90039.50 123337.75 90018.25 123359.00 89997.00C123369.67 89997.00 123380.33 89997.00 123391.00 89997.00C123401.67 89964.67 123412.33 89932.33 123423.00 89900.00C123455.33 89878.67 123487.67 89857.33 123520.00 89836.00C123541.33 89911.00 123562.67 89986.00 123584.00 90061.00C123594.67 90061.00 123605.33 90061.00 123616.00 90061.00C123637.33 90082.33 123658.67 90103.67 123680.00 90125.00C123712.33 90125.00 123744.67 90125.00 123777.00 90125.00C123766.33 90135.67 123755.67 90146.33 123745.00 90157.00C123745.00 90178.67 123745.00 90200.33 123745.00 90222.00C123723.33 90243.33 123701.67 90264.67 123680.00 90286.00C123690.67 90296.67 123701.33 90307.33 123712.00 90318.00C123701.33 90318.00 123690.67 90318.00 123680.00 90318.00C123680.00 90328.67 123680.00 90339.33 123680.00 90350.00C123690.67 90371.67 123701.33 90393.33 123712.00 90415.00C123755.00 90415.00 123798.00 90415.00 123841.00 90415.00C123841.00 90425.67 123841.00 90436.33 123841.00 90447.00C123851.67 90447.00 123862.33 90447.00 123873.00 90447.00C123894.67 90436.33 123916.33 90425.67 123938.00 90415.00C123948.67 90415.00 123959.33 90415.00 123970.00 90415.00C123991.33 90436.33 124012.67 90457.67 124034.00 90479.00C124044.67 90500.33 124055.33 90521.67 124066.00 90543.00C124098.33 90564.33 124130.67 90585.67 124163.00 90607.00C124173.67 90628.67 124184.33 90650.33 124195.00 90672.00C124345.00 90447.00 124495.00 90222.00 124645.00 89997.00C124655.67 89986.00 124666.33 89975.00 124677.00 89964.00C124687.67 89964.00 124698.33 89964.00 124709.00 89964.00C124698.33 89953.33 124687.67 89942.67 124677.00 89932.00C124687.67 89921.33 124698.33 89910.67 124709.00 89900.00C124719.67 89910.67 124730.33 89921.33 124741.00 89932.00C124762.67 89932.00 124784.33 89932.00 124806.00 89932.00C124806.00 89953.67 124806.00 89975.33 124806.00 89997.00C124816.67 90007.67 124827.33 90018.33 124838.00 90029.00C124827.33 90050.33 124816.67 90071.67 124806.00 90093.00C124816.67 90103.67 124827.33 90114.33 124838.00 90125.00C124848.67 90125.00 124859.33 90125.00 124870.00 90125.00C124870.00 90114.33 124870.00 90103.67 124870.00 90093.00C124880.67 90103.67 124891.33 90114.33 124902.00 90125.00C124912.67 90125.00 124923.33 90125.00 124934.00 90125.00C124934.00 90135.67 124934.00 90146.33 124934.00 90157.00C124944.67 90168.00 124955.33 90179.00 124966.00 90190.00C124966.00 90200.67 124966.00 90211.33 124966.00 90222.00C124977.00 90222.00 124988.00 90222.00 124999.00 90222.00C125009.67 90232.67 125020.33 90243.33 125031.00 90254.00C125041.67 90254.00 125052.33 90254.00 125063.00 90254.00C125063.00 90275.33 125063.00 90296.67 125063.00 90318.00C125073.67 90318.00 125084.33 90318.00 125095.00 90318.00C125095.00 90307.33 125095.00 90296.67 125095.00 90286.00C125128.13 90318.86 125161.40 90351.58 125194.44 90384.52C125204.30 90394.68 125214.15 90404.84 125224.00 90415.00C125234.67 90415.00 125245.33 90415.00 125256.00 90415.00C125266.67 90436.33 125277.33 90457.67 125288.00 90479.00C125298.67 90479.00 125309.33 90479.00 125320.00 90479.00C125330.67 90500.33 125341.33 90521.67 125352.00 90543.00C125341.33 90564.33 125330.67 90585.67 125320.00 90607.00C125330.67 90628.67 125341.33 90650.33 125352.00 90672.00C125352.00 90725.67 125352.00 90779.33 125352.00 90833.00C125362.67 90833.00 125373.33 90833.00 125384.00 90833.00C125395.00 90854.33 125406.00 90875.67 125417.00 90897.00C125427.67 90886.33 125438.33 90875.67 125449.00 90865.00C125459.67 90875.67 125470.33 90886.33 125481.00 90897.00C125481.00 90886.33 125481.00 90875.67 125481.00 90865.00C125502.33 90865.00 125523.67 90865.00 125545.00 90865.00C125545.00 90875.67 125545.00 90886.33 125545.00 90897.00C125555.67 90897.00 125566.33 90897.00 125577.00 90897.00C125577.00 90875.67 125577.00 90854.33 125577.00 90833.00C125588.00 90833.00 125599.00 90833.00 125610.00 90833.00C125620.67 90854.33 125631.33 90875.67 125642.00 90897.00C125652.67 90886.33 125663.33 90875.67 125674.00 90865.00C125684.67 90875.67 125695.33 90886.33 125706.00 90897.00C125706.00 90907.67 125706.00 90918.33 125706.00 90929.00C125738.00 90929.00 125770.00 90929.00 125802.00 90929.00C125802.00 90961.00 125802.00 90993.00 125802.00 91025.00C125813.00 91057.33 125824.00 91089.67 125835.00 91122.00C125856.33 91122.00 125877.67 91122.00 125899.00 91122.00C125909.67 91132.67 125920.33 91143.33 125931.00 91154.00C125941.67 91154.00 125952.33 91154.00 125963.00 91154.00C125963.00 91186.33 125963.00 91218.67 125963.00 91251.00C125973.67 91251.00 125984.33 91251.00 125995.00 91251.00C125995.00 91261.67 125995.00 91272.33 125995.00 91283.00C126006.00 91304.33 126017.00 91325.67 126028.00 91347.00C126017.00 91357.67 126006.00 91368.33 125995.00 91379.00C126016.67 91379.00 126038.33 91379.00 126060.00 91379.00C126070.67 91411.33 126081.33 91443.67 126092.00 91476.00C126081.33 91486.67 126070.67 91497.33 126060.00 91508.00C126060.00 91529.33 126060.00 91550.67 126060.00 91572.00C126049.33 91572.00 126038.67 91572.00 126028.00 91572.00C126028.00 91582.67 126028.00 91593.33 126028.00 91604.00C126017.00 91604.00 126006.00 91604.00 125995.00 91604.00C126006.00 91614.67 126017.00 91625.33 126028.00 91636.00C126028.00 91657.67 126028.00 91679.33 126028.00 91701.00C126049.33 91711.67 126070.67 91722.33 126092.00 91733.00C126081.33 91743.67 126070.67 91754.33 126060.00 91765.00C126070.67 91775.67 126081.33 91786.33 126092.00 91797.00C126081.33 91797.00 126070.67 91797.00 126060.00 91797.00C126060.00 91850.67 126060.00 91904.33 126060.00 91958.00C126038.33 91979.33 126016.67 92000.67 125995.00 92022.00C125984.33 92022.00 125973.67 92022.00 125963.00 92022.00C125973.67 92043.67 125984.33 92065.33 125995.00 92087.00C126006.00 92097.67 126017.00 92108.33 126028.00 92119.00C126027.92 92129.77 126028.15 92140.59 126027.89 92151.33C126016.86 92183.32 126005.94 92215.35 125994.84 92247.32C125984.23 92268.88 125973.61 92290.44 125963.00 92312.00C125995.33 92344.00 126027.67 92376.00 126060.00 92408.00C126081.33 92408.00 126102.67 92408.00 126124.00 92408.00C126145.33 92386.67 126166.67 92365.33 126188.00 92344.00C126188.00 92311.67 126188.00 92279.33 126188.00 92247.00C126177.33 92236.33 126166.67 92225.67 126156.00 92215.00C126166.67 92183.00 126177.33 92151.00 126188.00 92119.00C126188.00 92086.67 126188.00 92054.33 126188.00 92022.00C126198.67 92011.33 126209.33 92000.67 126220.00 91990.00C126209.33 91979.33 126198.67 91968.67 126188.00 91958.00C126188.00 91925.67 126188.00 91893.33 126188.00 91861.00C126228.16 91841.29 126268.28 91821.47 126308.25 91801.37C126311.17 91799.92 126314.08 91798.46 126317.00 91797.00C126317.00 91786.33 126317.00 91775.67 126317.00 91765.00C126327.67 91743.67 126338.33 91722.33 126349.00 91701.00C126349.00 91658.00 126349.00 91615.00 126349.00 91572.00C126370.33 91550.67 126391.67 91529.33 126413.00 91508.00C126434.67 91518.67 126456.33 91529.33 126478.00 91540.00C126488.67 91550.67 126499.33 91561.33 126510.00 91572.00C126520.67 91572.00 126531.33 91572.00 126542.00 91572.00C126542.00 91550.67 126542.00 91529.33 126542.00 91508.00C126552.67 91518.67 126563.33 91529.33 126574.00 91540.00C126574.07 91550.77 126573.85 91561.59 126574.11 91572.33C126584.74 91604.56 126595.37 91636.78 126606.00 91669.00C126595.33 91669.00 126584.67 91669.00 126574.00 91669.00C126574.00 91711.67 126574.00 91754.33 126574.00 91797.00C126563.33 91807.67 126552.67 91818.33 126542.00 91829.00C126552.67 91839.67 126563.33 91850.33 126574.00 91861.00C126574.00 91914.67 126574.00 91968.33 126574.00 92022.00C126584.67 92022.00 126595.33 92022.00 126606.00 92022.00C126606.00 92032.67 126606.00 92043.33 126606.00 92054.00C126627.67 92065.00 126649.33 92076.00 126671.00 92087.00C126660.00 92087.00 126649.00 92087.00 126638.00 92087.00C126638.00 92097.67 126638.00 92108.33 126638.00 92119.00C126649.00 92129.67 126660.00 92140.33 126671.00 92151.00C126660.00 92151.00 126649.00 92151.00 126638.00 92151.00C126638.00 92183.00 126638.00 92215.00 126638.00 92247.00C126659.67 92247.00 126681.33 92247.00 126703.00 92247.00C126713.67 92268.67 126724.33 92290.33 126735.00 92312.00C126745.67 92301.00 126756.33 92290.00 126767.00 92279.00C126767.00 92257.67 126767.00 92236.33 126767.00 92215.00C126777.67 92204.33 126788.33 92193.67 126799.00 92183.00C126809.67 92193.67 126820.33 92204.33 126831.00 92215.00C126852.67 92204.33 126874.33 92193.67 126896.00 92183.00C126917.33 92183.00 126938.67 92183.00 126960.00 92183.00C126970.67 92172.33 126981.33 92161.67 126992.00 92151.00C126992.00 92161.67 126992.00 92172.33 126992.00 92183.00C127002.67 92161.67 127013.33 92140.33 127024.00 92119.00C127034.67 92119.00 127045.33 92119.00 127056.00 92119.00C127056.00 92108.33 127056.00 92097.67 127056.00 92087.00C127067.00 92087.00 127078.00 92087.00 127089.00 92087.00C127099.67 92076.00 127110.33 92065.00 127121.00 92054.00C127131.67 92054.00 127142.33 92054.00 127153.00 92054.00C127163.67 92065.00 127174.33 92076.00 127185.00 92087.00C127195.67 92087.00 127206.33 92087.00 127217.00 92087.00C127206.33 92076.00 127195.67 92065.00 127185.00 92054.00C127195.67 92043.33 127206.33 92032.67 127217.00 92022.00C127206.33 92011.33 127195.67 92000.67 127185.00 91990.00C127228.00 91990.00 127271.00 91990.00 127314.00 91990.00C127314.00 92000.67 127314.00 92011.33 127314.00 92022.00C127335.33 92022.00 127356.67 92022.00 127378.00 92022.00C127378.00 92011.33 127378.00 92000.67 127378.00 91990.00C127367.33 91990.00 127356.67 91990.00 127346.00 91990.00C127356.67 91990.00 127367.33 91990.00 127378.00 91990.00C127367.33 91990.00 127356.67 91990.00 127346.00 91990.00C127378.00 91979.33 127410.00 91968.67 127442.00 91958.00C127442.00 91925.67 127442.00 91893.33 127442.00 91861.00C127463.67 91861.00 127485.33 91861.00 127507.00 91861.00C127507.00 91850.33 127507.00 91839.67 127507.00 91829.00C127507.00 91850.67 127507.00 91872.33 127507.00 91894.00C127517.67 91883.00 127528.33 91872.00 127539.00 91861.00C127549.67 91861.00 127560.33 91861.00 127571.00 91861.00C127571.00 91850.33 127571.00 91839.67 127571.00 91829.00C127592.33 91829.00 127613.67 91829.00 127635.00 91829.00C127645.67 91818.33 127656.33 91807.67 127667.00 91797.00C127667.00 91786.33 127667.00 91775.67 127667.00 91765.00C127678.00 91765.00 127689.00 91765.00 127700.00 91765.00C127710.67 91743.67 127721.33 91722.33 127732.00 91701.00C127742.67 91711.67 127753.33 91722.33 127764.00 91733.00C127774.67 91722.33 127785.33 91711.67 127796.00 91701.00C127806.67 91711.67 127817.33 91722.33 127828.00 91733.00C127849.33 91722.33 127870.67 91711.67 127892.00 91701.00C127892.00 91690.33 127892.00 91679.67 127892.00 91669.00C127903.00 91658.00 127914.00 91647.00 127925.00 91636.00C127935.67 91636.00 127946.33 91636.00 127957.00 91636.00C127967.67 91625.33 127978.33 91614.67 127989.00 91604.00C128010.33 91614.67 128031.67 91625.33 128053.00 91636.00C128063.67 91636.00 128074.33 91636.00 128085.00 91636.00C128095.67 91625.33 128106.33 91614.67 128117.00 91604.00C128117.00 91614.67 128117.00 91625.33 128117.00 91636.00C128106.33 91647.00 128095.67 91658.00 128085.00 91669.00C128085.00 91690.33 128085.00 91711.67 128085.00 91733.00C128074.33 91743.67 128063.67 91754.33 128053.00 91765.00C128053.00 91808.00 128053.00 91851.00 128053.00 91894.00C128063.67 91915.33 128074.33 91936.67 128085.00 91958.00C128063.67 91979.33 128042.33 92000.67 128021.00 92022.00C128021.00 92032.67 128021.00 92043.33 128021.00 92054.00C128031.67 92065.00 128042.33 92076.00 128053.00 92087.00C128063.67 92087.00 128074.33 92087.00 128085.00 92087.00C128085.00 92140.33 128085.00 92193.67 128085.00 92247.00C128063.67 92279.33 128042.33 92311.67 128021.00 92344.00C128021.00 92354.67 128021.00 92365.33 128021.00 92376.00C128031.67 92365.33 128042.33 92354.67 128053.00 92344.00C128063.67 92354.67 128074.33 92365.33 128085.00 92376.00C128085.00 92365.33 128085.00 92354.67 128085.00 92344.00C128095.67 92354.67 128106.33 92365.33 128117.00 92376.00C128128.00 92365.33 128139.00 92354.67 128150.00 92344.00C128182.00 92333.33 128214.00 92322.67 128246.00 92312.00C128246.00 92301.00 128246.00 92290.00 128246.00 92279.00C128256.67 92290.00 128267.33 92301.00 128278.00 92312.00C128288.67 92301.00 128299.33 92290.00 128310.00 92279.00C128321.00 92290.00 128332.00 92301.00 128343.00 92312.00C128353.67 92301.00 128364.33 92290.00 128375.00 92279.00C128396.33 92279.00 128417.67 92279.00 128439.00 92279.00C128439.00 92247.00 128439.00 92215.00 128439.00 92183.00C128449.67 92183.00 128460.33 92183.00 128471.00 92183.00C128460.33 92140.00 128449.67 92097.00 128439.00 92054.00C128449.67 92043.33 128460.33 92032.67 128471.00 92022.00C128471.00 92032.67 128471.00 92043.33 128471.00 92054.00C128492.67 92043.33 128514.33 92032.67 128536.00 92022.00C128536.00 92032.67 128536.00 92043.33 128536.00 92054.00C128546.67 92043.33 128557.33 92032.67 128568.00 92022.00C128568.00 92054.33 128568.00 92086.67 128568.00 92119.00C128600.00 92119.00 128632.00 92119.00 128664.00 92119.00C128674.67 92129.67 128685.33 92140.33 128696.00 92151.00C128685.33 92161.67 128674.67 92172.33 128664.00 92183.00C128664.00 92193.67 128664.00 92204.33 128664.00 92215.00C128674.67 92204.33 128685.33 92193.67 128696.00 92183.00C128706.67 92204.33 128717.33 92225.67 128728.00 92247.00C128760.33 92236.33 128792.67 92225.67 128825.00 92215.00C128846.33 92215.00 128867.67 92215.00 128889.00 92215.00C128899.67 92247.33 128910.33 92279.67 128921.00 92312.00C128931.67 92322.67 128942.33 92333.33 128953.00 92344.00C128953.00 92354.67 128953.00 92365.33 128953.00 92376.00C128964.00 92386.67 128975.00 92397.33 128986.00 92408.00C128996.67 92397.33 129007.33 92386.67 129018.00 92376.00C129039.33 92376.00 129060.67 92376.00 129082.00 92376.00C129092.67 92343.67 129103.33 92311.33 129114.00 92279.00C129124.67 92290.00 129135.33 92301.00 129146.00 92312.00C129167.67 92312.00 129189.33 92312.00 129211.00 92312.00C129211.00 92322.67 129211.00 92333.33 129211.00 92344.00C129211.00 92333.33 129211.00 92322.67 129211.00 92312.00C129221.67 92312.00 129232.33 92312.00 129243.00 92312.00C129253.67 92322.67 129264.33 92333.33 129275.00 92344.00C129275.00 92365.33 129275.00 92386.67 129275.00 92408.00C129285.67 92408.00 129296.33 92408.00 129307.00 92408.00C129317.67 92397.33 129328.33 92386.67 129339.00 92376.00C129339.00 92386.67 129339.00 92397.33 129339.00 92408.00C129350.00 92418.67 129361.00 92429.33 129372.00 92440.00C129393.33 92440.00 129414.67 92440.00 129436.00 92440.00C129446.67 92429.33 129457.33 92418.67 129468.00 92408.00C129500.00 92418.67 129532.00 92429.33 129564.00 92440.00C129596.33 92429.33 129628.67 92418.67 129661.00 92408.00C129693.00 92429.33 129725.00 92450.67 129757.00 92472.00C129757.00 92483.00 129757.00 92494.00 129757.00 92505.00C129950.00 92719.33 130143.00 92933.67 130336.00 93148.00C130346.73 93115.57 130357.34 93083.09 130368.16 93050.69C130378.77 93029.46 130389.39 93008.23 130400.00 92987.00C130411.02 92976.21 130422.30 92965.60 130433.16 92954.68C130443.77 92933.12 130454.39 92911.56 130465.00 92890.00C130475.69 92879.21 130486.62 92868.59 130497.16 92857.69C130507.77 92836.46 130518.39 92815.23 130529.00 92794.00C130539.67 92794.00 130550.33 92794.00 130561.00 92794.00C130571.67 92783.33 130582.33 92772.67 130593.00 92762.00C130593.00 92729.67 130593.00 92697.33 130593.00 92665.00C130571.67 92665.00 130550.33 92665.00 130529.00 92665.00C130507.67 92643.67 130486.33 92622.33 130465.00 92601.00C130465.00 92579.67 130465.00 92558.33 130465.00 92537.00C130454.33 92504.67 130443.67 92472.33 130433.00 92440.00C130443.67 92429.33 130454.33 92418.67 130465.00 92408.00C130454.33 92386.67 130443.67 92365.33 130433.00 92344.00C130433.00 92301.00 130433.00 92258.00 130433.00 92215.00C130443.67 92215.00 130454.33 92215.00 130465.00 92215.00C130486.33 92193.67 130507.67 92172.33 130529.00 92151.00C130518.33 92129.67 130507.67 92108.33 130497.00 92087.00C130497.00 92076.00 130497.00 92065.00 130497.00 92054.00C130475.67 92043.33 130454.33 92032.67 130433.00 92022.00C130443.67 92011.33 130454.33 92000.67 130465.00 91990.00C130465.00 91979.33 130465.00 91968.67 130465.00 91958.00C130443.33 91947.33 130421.67 91936.67 130400.00 91926.00C130400.00 91915.33 130400.00 91904.67 130400.00 91894.00C130411.00 91894.00 130422.00 91894.00 130433.00 91894.00C130422.00 91883.00 130411.00 91872.00 130400.00 91861.00C130411.00 91850.33 130422.00 91839.67 130433.00 91829.00C130422.00 91829.00 130411.00 91829.00 130400.00 91829.00C130411.02 91818.21 130422.29 91807.60 130433.16 91796.69C130443.77 91775.46 130454.39 91754.23 130465.00 91733.00C130432.67 91722.33 130400.33 91711.67 130368.00 91701.00C130389.67 91690.33 130411.33 91679.67 130433.00 91669.00C130443.67 91658.00 130454.33 91647.00 130465.00 91636.00C130465.00 91625.33 130465.00 91614.67 130465.00 91604.00C130475.67 91604.00 130486.33 91604.00 130497.00 91604.00C130497.00 91582.67 130497.00 91561.33 130497.00 91540.00C130486.33 91529.33 130475.67 91518.67 130465.00 91508.00C130475.67 91508.00 130486.33 91508.00 130497.00 91508.00C130497.00 91497.33 130497.00 91486.67 130497.00 91476.00C130507.69 91464.88 130518.61 91453.91 130529.16 91442.69C130539.77 91421.46 130550.39 91400.23 130561.00 91379.00C130571.67 91389.67 130582.33 91400.33 130593.00 91411.00C130603.67 91400.33 130614.33 91389.67 130625.00 91379.00C130668.00 91400.33 130711.00 91421.67 130754.00 91443.00C130786.33 91443.00 130818.67 91443.00 130851.00 91443.00C130861.67 91454.00 130872.33 91465.00 130883.00 91476.00C130872.33 91518.67 130861.67 91561.33 130851.00 91604.00C130861.67 91657.67 130872.33 91711.33 130883.00 91765.00C130915.00 91775.67 130947.00 91786.33 130979.00 91797.00C131000.33 91786.33 131021.67 91775.67 131043.00 91765.00C131054.00 91765.00 131065.00 91765.00 131076.00 91765.00C131097.33 91775.67 131118.67 91786.33 131140.00 91797.00C131150.67 91797.00 131161.33 91797.00 131172.00 91797.00C131193.33 91786.33 131214.67 91775.67 131236.00 91765.00C131257.67 91765.00 131279.33 91765.00 131301.00 91765.00C131279.33 91808.00 131257.67 91851.00 131236.00 91894.00C131236.00 91915.33 131236.00 91936.67 131236.00 91958.00C131279.00 91968.67 131322.00 91979.33 131365.00 91990.00C131386.33 91979.33 131407.67 91968.67 131429.00 91958.00C131450.67 91968.67 131472.33 91979.33 131494.00 91990.00C131504.67 92000.67 131515.33 92011.33 131526.00 92022.00C131493.67 92032.67 131461.33 92043.33 131429.00 92054.00C131418.33 92065.00 131407.67 92076.00 131397.00 92087.00C131429.33 92119.00 131461.67 92151.00 131494.00 92183.00C131494.00 92204.33 131494.00 92225.67 131494.00 92247.00C131504.67 92257.67 131515.33 92268.33 131526.00 92279.00C131536.67 92279.00 131547.33 92279.00 131558.00 92279.00C131568.67 92247.00 131579.33 92215.00 131590.00 92183.00C131622.33 92172.33 131654.67 92161.67 131687.00 92151.00C131687.00 92129.67 131687.00 92108.33 131687.00 92087.00C131697.67 92076.00 131708.33 92065.00 131719.00 92054.00C131729.67 92054.00 131740.33 92054.00 131751.00 92054.00C131761.67 92032.67 131772.33 92011.33 131783.00 91990.00C131815.28 92022.06 131847.06 92054.61 131879.00 92087.00C131900.67 92087.00 131922.33 92087.00 131944.00 92087.00C131976.00 92097.67 132008.00 92108.33 132040.00 92119.00C132050.67 92108.33 132061.33 92097.67 132072.00 92087.00C132104.33 92087.00 132136.67 92087.00 132169.00 92087.00C132169.00 92097.67 132169.00 92108.33 132169.00 92119.00C132179.67 92119.00 132190.33 92119.00 132201.00 92119.00C132190.33 92129.67 132179.67 92140.33 132169.00 92151.00C132190.33 92151.00 132211.67 92151.00 132233.00 92151.00C132243.67 92129.67 132254.33 92108.33 132265.00 92087.00C132275.67 92087.00 132286.33 92087.00 132297.00 92087.00C132297.00 92065.33 132297.00 92043.67 132297.00 92022.00C132318.67 92022.00 132340.33 92022.00 132362.00 92022.00C132372.67 92011.33 132383.33 92000.67 132394.00 91990.00C132383.33 91958.00 132372.67 91926.00 132362.00 91894.00C132394.00 91883.00 132426.00 91872.00 132458.00 91861.00C132458.00 91850.33 132458.00 91839.67 132458.00 91829.00C132479.67 91829.00 132501.33 91829.00 132523.00 91829.00C132533.67 91818.33 132544.33 91807.67 132555.00 91797.00C132576.33 91807.67 132597.67 91818.33 132619.00 91829.00C132640.33 91818.33 132661.67 91807.67 132683.00 91797.00C132693.67 91807.67 132704.33 91818.33 132715.00 91829.00C132704.33 91839.67 132693.67 91850.33 132683.00 91861.00C132704.67 91872.00 132726.33 91883.00 132748.00 91894.00C132758.67 91883.00 132769.33 91872.00 132780.00 91861.00C132801.33 91872.00 132822.67 91883.00 132844.00 91894.00C132865.33 91883.00 132886.67 91872.00 132908.00 91861.00C132908.00 91839.67 132908.00 91818.33 132908.00 91797.00C132897.33 91797.00 132886.67 91797.00 132876.00 91797.00C132897.33 91775.67 132918.67 91754.33 132940.00 91733.00C132961.67 91733.00 132983.33 91733.00 133005.00 91733.00C133015.67 91722.33 133026.33 91711.67 133037.00 91701.00C133037.00 91722.33 133037.00 91743.67 133037.00 91765.00C133047.67 91765.00 133058.33 91765.00 133069.00 91765.00C133069.00 91754.33 133069.00 91743.67 133069.00 91733.00C133079.67 91722.33 133090.33 91711.67 133101.00 91701.00C133111.67 91711.67 133122.33 91722.33 133133.00 91733.00C133133.00 91743.67 133133.00 91754.33 133133.00 91765.00C133144.00 91754.33 133155.00 91743.67 133166.00 91733.00C133166.00 91711.67 133166.00 91690.33 133166.00 91669.00C133187.33 91669.00 133208.67 91669.00 133230.00 91669.00C133230.00 91658.00 133230.00 91647.00 133230.00 91636.00C133240.67 91647.00 133251.33 91658.00 133262.00 91669.00C133283.33 91658.00 133304.67 91647.00 133326.00 91636.00C133337.00 91625.33 133348.00 91614.67 133359.00 91604.00C133369.67 91604.00 133380.33 91604.00 133391.00 91604.00C133412.33 91593.33 133433.67 91582.67 133455.00 91572.00C133476.33 91572.00 133497.67 91572.00 133519.00 91572.00C133519.00 91540.00 133519.00 91508.00 133519.00 91476.00C133551.33 91476.00 133583.67 91476.00 133616.00 91476.00C133616.00 91486.67 133616.00 91497.33 133616.00 91508.00C133626.67 91508.00 133637.33 91508.00 133648.00 91508.00C133648.00 91497.33 133648.00 91486.67 133648.00 91476.00C133669.33 91454.33 133690.67 91432.67 133712.00 91411.00C133733.33 91411.00 133754.67 91411.00 133776.00 91411.00C133787.00 91389.67 133798.00 91368.33 133809.00 91347.00C133841.00 91336.33 133873.00 91325.67 133905.00 91315.00C133905.00 91304.33 133905.00 91293.67 133905.00 91283.00C133926.33 91261.33 133947.67 91239.67 133969.00 91218.00C133990.67 91207.33 134012.33 91196.67 134034.00 91186.00C134044.67 91164.67 134055.33 91143.33 134066.00 91122.00C134087.33 91122.00 134108.67 91122.00 134130.00 91122.00C134130.00 91143.33 134130.00 91164.67 134130.00 91186.00C134140.67 91175.33 134151.33 91164.67 134162.00 91154.00C134162.00 91175.33 134162.00 91196.67 134162.00 91218.00C134194.33 91207.33 134226.67 91196.67 134259.00 91186.00C134259.00 91164.67 134259.00 91143.33 134259.00 91122.00C134269.67 91122.00 134280.33 91122.00 134291.00 91122.00C134291.00 91111.33 134291.00 91100.67 134291.00 91090.00C134301.67 91068.33 134312.33 91046.67 134323.00 91025.00C134333.67 91025.00 134344.33 91025.00 134355.00 91025.00C134355.00 91003.67 134355.00 90982.33 134355.00 90961.00C134376.67 90950.33 134398.33 90939.67 134420.00 90929.00C134409.00 90918.33 134398.00 90907.67 134387.00 90897.00C134398.00 90897.00 134409.00 90897.00 134420.00 90897.00C134527.00 90832.67 134634.00 90768.33 134741.00 90704.00C134923.45 90714.66 135105.90 90725.37 135288.35 90736.00C135577.57 90736.00 135866.78 90736.00 136156.00 90736.00C136156.00 90693.00 136156.00 90650.00 136156.00 90607.00C136177.33 90585.67 136198.67 90564.33 136220.00 90543.00C136230.67 90543.00 136241.33 90543.00 136252.00 90543.00C136273.67 90361.00 136295.33 90179.00 136317.00 89997.00C136327.67 90007.67 136338.33 90018.33 136349.00 90029.00C136349.00 90061.00 136349.00 90093.00 136349.00 90125.00C136359.67 90125.00 136370.33 90125.00 136381.00 90125.00C136391.67 90135.67 136402.33 90146.33 136413.00 90157.00C136434.33 90146.33 136455.67 90135.67 136477.00 90125.00C136487.67 90135.67 136498.33 90146.33 136509.00 90157.00C136509.00 90146.33 136509.00 90135.67 136509.00 90125.00C136509.00 90146.67 136509.00 90168.33 136509.00 90190.00C136530.67 90200.67 136552.33 90211.33 136574.00 90222.00C136563.33 90243.33 136552.67 90264.67 136542.00 90286.00C136552.67 90286.00 136563.33 90286.00 136574.00 90286.00C136563.33 90296.67 136552.67 90307.33 136542.00 90318.00C136552.67 90328.67 136563.33 90339.33 136574.00 90350.00C136563.33 90360.67 136552.67 90371.33 136542.00 90382.00C136552.67 90393.00 136563.33 90404.00 136574.00 90415.00C136574.00 90457.67 136574.00 90500.33 136574.00 90543.00C136563.33 90553.67 136552.67 90564.33 136542.00 90575.00C136542.00 90607.33 136542.00 90639.67 136542.00 90672.00C136531.00 90682.67 136520.00 90693.33 136509.00 90704.00C136520.00 90714.67 136531.00 90725.33 136542.00 90736.00C136531.00 90757.33 136520.00 90778.67 136509.00 90800.00C136530.67 90811.00 136552.33 90822.00 136574.00 90833.00C136616.67 90822.00 136659.33 90811.00 136702.00 90800.00C136702.00 90789.33 136702.00 90778.67 136702.00 90768.00C136745.00 90768.00 136788.00 90768.00 136831.00 90768.00C136863.33 90757.33 136895.67 90746.67 136928.00 90736.00C136938.67 90725.33 136949.33 90714.67 136960.00 90704.00C136970.67 90714.67 136981.33 90725.33 136992.00 90736.00C137045.67 90714.67 137099.33 90693.33 137153.00 90672.00C137153.00 90682.67 137153.00 90693.33 137153.00 90704.00C137185.00 90693.33 137217.00 90682.67 137249.00 90672.00C137292.00 90672.00 137335.00 90672.00 137378.00 90672.00C137396.30 90653.75 137414.60 90635.49 137432.48 90616.82C137435.65 90613.54 137438.83 90610.27 137442.00 90607.00C137442.00 90596.33 137442.00 90585.67 137442.00 90575.00C137474.00 90564.33 137506.00 90553.67 137538.00 90543.00C137559.67 90553.67 137581.33 90564.33 137603.00 90575.00C137645.67 90553.67 137688.33 90532.33 137731.00 90511.00C137742.00 90500.33 137753.00 90489.67 137764.00 90479.00C137764.00 90500.33 137764.00 90521.67 137764.00 90543.00C137742.33 90586.00 137720.67 90629.00 137699.00 90672.00C137677.67 90682.67 137656.33 90693.33 137635.00 90704.00C137613.67 90725.33 137592.33 90746.67 137571.00 90768.00C137549.33 90768.00 137527.67 90768.00 137506.00 90768.00C137495.33 90778.67 137484.67 90789.33 137474.00 90800.00C137442.00 90811.00 137410.00 90822.00 137378.00 90833.00C137367.00 90843.67 137356.00 90854.33 137345.00 90865.00C137334.33 90865.00 137323.67 90865.00 137313.00 90865.00C137302.33 90875.67 137291.67 90886.33 137281.00 90897.00C137270.33 90897.00 137259.67 90897.00 137249.00 90897.00C137227.67 90886.33 137206.33 90875.67 137185.00 90865.00C137163.33 90865.00 137141.67 90865.00 137120.00 90865.00C137109.33 90875.67 137098.67 90886.33 137088.00 90897.00C137056.00 90907.67 137024.00 90918.33 136992.00 90929.00C136992.00 90950.33 136992.00 90971.67 136992.00 90993.00C136981.33 91003.67 136970.67 91014.33 136960.00 91025.00C136960.00 91046.67 136960.00 91068.33 136960.00 91090.00C136949.31 91100.79 136938.38 91111.41 136927.84 91122.31C136915.53 91146.39 136902.86 91170.29 136890.81 91194.50C136881.54 91213.34 136872.27 91232.17 136863.00 91251.00C136831.00 91283.00 136799.00 91315.00 136767.00 91347.00C136787.03 91386.93 136806.95 91426.93 136826.59 91467.05C136828.06 91470.04 136829.53 91473.02 136831.00 91476.00C136841.67 91476.00 136852.33 91476.00 136863.00 91476.00C136873.67 91486.67 136884.33 91497.33 136895.00 91508.00C136895.00 91540.00 136895.00 91572.00 136895.00 91604.00C136873.67 91614.67 136852.33 91625.33 136831.00 91636.00C136841.67 91657.67 136852.33 91679.33 136863.00 91701.00C136841.67 91711.67 136820.33 91722.33 136799.00 91733.00C136809.67 91743.67 136820.33 91754.33 136831.00 91765.00C136841.67 91765.00 136852.33 91765.00 136863.00 91765.00C136863.00 91797.00 136863.00 91829.00 136863.00 91861.00C136841.67 91872.00 136820.33 91883.00 136799.00 91894.00C136799.00 91915.33 136799.00 91936.67 136799.00 91958.00C136788.33 91990.00 136777.67 92022.00 136767.00 92054.00C136756.33 92065.00 136745.67 92076.00 136735.00 92087.00C136735.00 92097.67 136735.00 92108.33 136735.00 92119.00C136777.67 92119.00 136820.33 92119.00 136863.00 92119.00C136863.00 92161.67 136863.00 92204.33 136863.00 92247.00C136841.67 92279.33 136820.33 92311.67 136799.00 92344.00C136831.00 92365.33 136863.00 92386.67 136895.00 92408.00C136906.00 92408.00 136917.00 92408.00 136928.00 92408.00C136928.00 92429.33 136928.00 92450.67 136928.00 92472.00C136938.67 92504.33 136949.33 92536.67 136960.00 92569.00C136981.33 92569.00 137002.67 92569.00 137024.00 92569.00C137067.00 92547.67 137110.00 92526.33 137153.00 92505.00C137185.00 92472.67 137217.00 92440.33 137249.00 92408.00C137270.33 92418.67 137291.67 92429.33 137313.00 92440.00C137366.67 92429.33 137420.33 92418.67 137474.00 92408.00C137538.33 92365.00 137602.67 92322.00 137667.00 92279.00C137677.67 92268.33 137688.33 92257.67 137699.00 92247.00C137720.67 92247.00 137742.33 92247.00 137764.00 92247.00C137785.67 92236.23 137807.25 92225.24 137828.98 92214.61C137882.32 92193.41 137935.66 92172.20 137989.00 92151.00C138010.33 92161.67 138031.67 92172.33 138053.00 92183.00C138063.67 92193.67 138074.33 92204.33 138085.00 92215.00C138084.94 92225.78 138085.11 92236.58 138084.92 92247.34C138074.28 92290.23 138063.64 92333.11 138053.00 92376.00C137999.12 92408.10 137945.29 92440.29 137891.38 92472.32C137870.25 92483.21 137849.13 92494.11 137828.00 92505.00C137806.67 92547.67 137785.33 92590.33 137764.00 92633.00C137742.33 92643.67 137720.67 92654.33 137699.00 92665.00C137688.33 92675.67 137677.67 92686.33 137667.00 92697.00C137631.77 92709.03 137596.63 92721.35 137561.33 92733.19C137498.94 92753.69 137436.63 92774.43 137374.33 92795.21C137343.22 92805.47 137312.11 92815.74 137281.00 92826.00C137270.33 92847.33 137259.67 92868.67 137249.00 92890.00C137217.00 92911.67 137185.00 92933.33 137153.00 92955.00C137153.00 92976.33 137153.00 92997.67 137153.00 93019.00C137174.33 93008.33 137195.67 92997.67 137217.00 92987.00C137227.82 93008.51 137238.45 93030.14 137249.39 93051.59C137270.59 93083.72 137291.80 93115.86 137313.00 93148.00C137313.00 93158.67 137313.00 93169.33 137313.00 93180.00C137281.00 93190.67 137249.00 93201.33 137217.00 93212.00C137217.00 93222.67 137217.00 93233.33 137217.00 93244.00C137227.67 93244.00 137238.33 93244.00 137249.00 93244.00C137249.00 93265.33 137249.00 93286.67 137249.00 93308.00C137238.33 93329.67 137227.67 93351.33 137217.00 93373.00C137195.67 93394.33 137174.33 93415.67 137153.00 93437.00C137163.67 93458.33 137174.33 93479.67 137185.00 93501.00C137174.33 93522.67 137163.67 93544.33 137153.00 93566.00C137163.67 93587.33 137174.33 93608.67 137185.00 93630.00C137195.67 93640.67 137206.33 93651.33 137217.00 93662.00C137227.67 93651.33 137238.33 93640.67 137249.00 93630.00C137259.67 93640.67 137270.33 93651.33 137281.00 93662.00C137324.00 93651.33 137367.00 93640.67 137410.00 93630.00C137452.67 93672.67 137495.33 93715.33 137538.00 93758.00C137495.33 93801.00 137452.67 93844.00 137410.00 93887.00C137367.00 93908.33 137324.00 93929.67 137281.00 93951.00C137270.33 93972.67 137259.67 93994.33 137249.00 94016.00C137238.33 94016.00 137227.67 94016.00 137217.00 94016.00C137195.67 94037.33 137174.33 94058.67 137153.00 94080.00C137131.33 94123.00 137109.67 94166.00 137088.00 94209.00C137077.33 94219.67 137066.67 94230.33 137056.00 94241.00C137066.79 94251.69 137077.41 94262.62 137088.31 94273.15C137109.88 94283.77 137131.44 94294.38 137153.00 94305.00C137163.67 94315.67 137174.33 94326.33 137185.00 94337.00C137185.00 94347.67 137185.00 94358.33 137185.00 94369.00C137174.33 94369.00 137163.67 94369.00 137153.00 94369.00C137110.00 94401.33 137067.00 94433.67 137024.00 94466.00C137024.00 94476.67 137024.00 94487.33 137024.00 94498.00C137045.33 94508.67 137066.67 94519.33 137088.00 94530.00C137120.33 94519.33 137152.67 94508.67 137185.00 94498.00C137206.33 94541.00 137227.67 94584.00 137249.00 94627.00C137238.33 94637.67 137227.67 94648.33 137217.00 94659.00C137142.00 94680.33 137067.00 94701.67 136992.00 94723.00C136981.33 94733.67 136970.67 94744.33 136960.00 94755.00C136992.00 94776.67 137024.00 94798.33 137056.00 94820.00C137045.33 94841.33 137034.67 94862.67 137024.00 94884.00C137024.00 94894.67 137024.00 94905.33 137024.00 94916.00C137056.00 94916.00 137088.00 94916.00 137120.00 94916.00C137141.67 94937.33 137163.33 94958.67 137185.00 94980.00C137185.00 95001.67 137185.00 95023.33 137185.00 95045.00C137142.00 95120.00 137099.00 95195.00 137056.00 95270.00C137056.00 95312.67 137056.00 95355.33 137056.00 95398.00C137045.33 95430.33 137034.67 95462.67 137024.00 95495.00C137077.88 95527.09 137131.70 95559.30 137185.63 95591.31C137206.75 95601.88 137227.88 95612.44 137249.00 95623.00C137259.67 95634.00 137270.33 95645.00 137281.00 95656.00C137270.33 95688.00 137259.67 95720.00 137249.00 95752.00C137270.33 95773.33 137291.67 95794.67 137313.00 95816.00C137302.31 95826.79 137291.38 95837.41 137280.84 95848.31C137259.56 95891.21 137238.28 95934.10 137217.00 95977.00C137184.67 95998.33 137152.33 96019.67 137120.00 96041.00C137141.67 96041.00 137163.33 96041.00 137185.00 96041.00C137195.67 96062.67 137206.33 96084.33 137217.00 96106.00C137195.67 96138.00 137174.33 96170.00 137153.00 96202.00C137142.00 96202.00 137131.00 96202.00 137120.00 96202.00C137109.33 96191.33 137098.67 96180.67 137088.00 96170.00C137066.67 96191.33 137045.33 96212.67 137024.00 96234.00C137045.33 96244.67 137066.67 96255.33 137088.00 96266.00C137120.33 96266.00 137152.67 96266.00 137185.00 96266.00C137217.00 96287.67 137249.00 96309.33 137281.00 96331.00C137302.33 96331.00 137323.67 96331.00 137345.00 96331.00C137345.00 96373.67 137345.00 96416.33 137345.00 96459.00C137366.79 96469.66 137388.50 96480.55 137410.34 96491.07C137463.90 96502.05 137517.45 96513.02 137571.00 96524.00C137603.00 96513.00 137635.00 96502.00 137667.00 96491.00C137688.33 96502.00 137709.67 96513.00 137731.00 96524.00C137742.00 96545.33 137753.00 96566.67 137764.00 96588.00C137753.00 96620.00 137742.00 96652.00 137731.00 96684.00C137763.33 96684.00 137795.67 96684.00 137828.00 96684.00C137828.00 96705.67 137828.00 96727.33 137828.00 96749.00C137838.67 96749.00 137849.33 96749.00 137860.00 96749.00C137900.09 96729.02 137940.12 96708.92 137980.02 96688.56C137983.01 96687.04 137986.01 96685.52 137989.00 96684.00C138010.33 96705.67 138031.67 96727.33 138053.00 96749.00C138031.67 96791.67 138010.33 96834.33 137989.00 96877.00C138021.00 96898.67 138053.00 96920.33 138085.00 96942.00C138106.33 96942.00 138127.67 96942.00 138149.00 96942.00C138159.67 96963.33 138170.33 96984.67 138181.00 97006.00C138181.00 97016.67 138181.00 97027.33 138181.00 97038.00C138192.00 97038.00 138203.00 97038.00 138214.00 97038.00C138224.67 97027.33 138235.33 97016.67 138246.00 97006.00C138267.33 97006.00 138288.67 97006.00 138310.00 97006.00C138320.67 97016.67 138331.33 97027.33 138342.00 97038.00C138331.33 97059.33 138320.67 97080.67 138310.00 97102.00C138342.33 97102.00 138374.67 97102.00 138407.00 97102.00C138428.33 97113.00 138449.67 97124.00 138471.00 97135.00C138481.67 97199.00 138492.33 97263.00 138503.00 97327.00C138513.69 97338.13 138524.61 97349.09 138535.16 97360.31C138545.77 97381.54 138556.39 97402.77 138567.00 97424.00C138588.67 97434.67 138610.33 97445.33 138632.00 97456.00C138653.33 97456.00 138674.67 97456.00 138696.00 97456.00C138706.67 97466.67 138717.33 97477.33 138728.00 97488.00C138717.33 97509.67 138706.67 97531.33 138696.00 97553.00C138696.00 97563.67 138696.00 97574.33 138696.00 97585.00C138674.67 97606.33 138653.33 97627.67 138632.00 97649.00C138632.00 97681.33 138632.00 97713.67 138632.00 97746.00C138621.33 97756.67 138610.67 97767.33 138600.00 97778.00C138578.33 97778.00 138556.67 97778.00 138535.00 97778.00C138513.67 97799.33 138492.33 97820.67 138471.00 97842.00C138460.33 97842.00 138449.67 97842.00 138439.00 97842.00C138428.33 97852.67 138417.67 97863.33 138407.00 97874.00C138374.67 97863.33 138342.33 97852.67 138310.00 97842.00C138288.67 97810.00 138267.33 97778.00 138246.00 97746.00C138235.33 97756.67 138224.67 97767.33 138214.00 97778.00C138214.00 97788.67 138214.00 97799.33 138214.00 97810.00C138224.67 97810.00 138235.33 97810.00 138246.00 97810.00C138246.00 97820.67 138246.00 97831.33 138246.00 97842.00C138256.67 97852.67 138267.33 97863.33 138278.00 97874.00C138278.00 97895.33 138278.00 97916.67 138278.00 97938.00C138267.31 97949.13 138256.39 97960.09 138245.84 97971.31C138235.23 97992.54 138224.61 98013.77 138214.00 98035.00C138246.00 98067.00 138278.00 98099.00 138310.00 98131.00C138310.00 98152.67 138310.00 98174.33 138310.00 98196.00C138299.33 98206.67 138288.67 98217.33 138278.00 98228.00C138288.67 98228.00 138299.33 98228.00 138310.00 98228.00C138299.33 98238.67 138288.67 98249.33 138278.00 98260.00C138321.00 98303.00 138364.00 98346.00 138407.00 98389.00C138396.00 98399.67 138385.00 98410.33 138374.00 98421.00C138352.67 98410.33 138331.33 98399.67 138310.00 98389.00C138320.67 98410.33 138331.33 98431.67 138342.00 98453.00C138331.33 98453.00 138320.67 98453.00 138310.00 98453.00C138320.67 98463.67 138331.33 98474.33 138342.00 98485.00C138342.00 98495.67 138342.00 98506.33 138342.00 98517.00C138331.33 98517.00 138320.67 98517.00 138310.00 98517.00C138320.67 98517.00 138331.33 98517.00 138342.00 98517.00C138352.67 98527.67 138363.33 98538.33 138374.00 98549.00C138363.33 98581.33 138352.67 98613.67 138342.00 98646.00C138320.67 98656.67 138299.33 98667.33 138278.00 98678.00C138310.00 98710.00 138342.00 98742.00 138374.00 98774.00C138374.00 98785.00 138374.00 98796.00 138374.00 98807.00C138352.67 98828.33 138331.33 98849.67 138310.00 98871.00C138320.67 98881.67 138331.33 98892.33 138342.00 98903.00C138342.00 98924.33 138342.00 98945.67 138342.00 98967.00C138320.67 98977.67 138299.33 98988.33 138278.00 98999.00C138267.33 98999.00 138256.67 98999.00 138246.00 98999.00C138246.00 98988.33 138246.00 98977.67 138246.00 98967.00C138246.00 98977.67 138246.00 98988.33 138246.00 98999.00C138224.33 98999.00 138202.67 98999.00 138181.00 98999.00C138181.00 99020.67 138181.00 99042.33 138181.00 99064.00C138170.33 99074.67 138159.67 99085.33 138149.00 99096.00C138181.06 99128.28 138213.61 99160.06 138246.00 99192.00C138256.67 99192.00 138267.33 99192.00 138278.00 99192.00C138278.00 99235.00 138278.00 99278.00 138278.00 99321.00C138267.33 99321.00 138256.67 99321.00 138246.00 99321.00C138246.00 99428.33 138246.00 99535.67 138246.00 99643.00C138227.75 99661.30 138209.49 99679.60 138190.82 99697.48C138187.55 99700.65 138184.27 99703.83 138181.00 99707.00C138181.00 99717.67 138181.00 99728.33 138181.00 99739.00C138138.33 99760.33 138095.67 99781.67 138053.00 99803.00C138053.00 99813.67 138053.00 99824.33 138053.00 99835.00C138063.67 99835.00 138074.33 99835.00 138085.00 99835.00C138106.33 99867.33 138127.67 99899.67 138149.00 99932.00C138138.33 99964.00 138127.67 99996.00 138117.00 100028.00C138106.33 100028.00 138095.67 100028.00 138085.00 100028.00C138074.18 100049.85 138063.57 100071.81 138052.61 100093.58C138031.41 100125.39 138010.20 100157.19 137989.00 100189.00C137967.33 100178.33 137945.67 100167.67 137924.00 100157.00C137913.33 100200.00 137902.67 100243.00 137892.00 100286.00C137881.33 100296.67 137870.67 100307.33 137860.00 100318.00C137828.00 100318.00 137796.00 100318.00 137764.00 100318.00C137753.00 100296.33 137742.00 100274.67 137731.00 100253.00C137709.67 100253.00 137688.33 100253.00 137667.00 100253.00C137656.33 100264.00 137645.67 100275.00 137635.00 100286.00C137624.33 100286.00 137613.67 100286.00 137603.00 100286.00C137581.33 100264.33 137559.67 100242.67 137538.00 100221.00C137538.00 100210.33 137538.00 100199.67 137538.00 100189.00C137527.33 100189.00 137516.67 100189.00 137506.00 100189.00C137516.67 100221.33 137527.33 100253.67 137538.00 100286.00C137506.00 100318.00 137474.00 100350.00 137442.00 100382.00C137399.00 100360.67 137356.00 100339.33 137313.00 100318.00C137302.33 100318.00 137291.67 100318.00 137281.00 100318.00C137281.00 100328.67 137281.00 100339.33 137281.00 100350.00C137259.67 100350.00 137238.33 100350.00 137217.00 100350.00C137206.33 100317.67 137195.67 100285.33 137185.00 100253.00C137163.33 100253.00 137141.67 100253.00 137120.00 100253.00C137098.67 100264.00 137077.33 100275.00 137056.00 100286.00C137013.33 100286.00 136970.67 100286.00 136928.00 100286.00C136917.00 100275.00 136906.00 100264.00 136895.00 100253.00C136895.00 100231.67 136895.00 100210.33 136895.00 100189.00C136873.67 100189.00 136852.33 100189.00 136831.00 100189.00C136820.33 100178.33 136809.67 100167.67 136799.00 100157.00C136788.33 100157.00 136777.67 100157.00 136767.00 100157.00C136777.67 100135.67 136788.33 100114.33 136799.00 100093.00C136799.00 100082.33 136799.00 100071.67 136799.00 100061.00C136809.67 100050.00 136820.33 100039.00 136831.00 100028.00C136841.67 99996.00 136852.33 99964.00 136863.00 99932.00C136841.67 99932.00 136820.33 99932.00 136799.00 99932.00C136788.33 99921.33 136777.67 99910.67 136767.00 99900.00C136767.00 99846.33 136767.00 99792.67 136767.00 99739.00C136745.33 99739.00 136723.67 99739.00 136702.00 99739.00C136702.00 99717.67 136702.00 99696.33 136702.00 99675.00C136670.00 99664.33 136638.00 99653.67 136606.00 99643.00C136595.33 99643.00 136584.67 99643.00 136574.00 99643.00C136563.33 99632.00 136552.67 99621.00 136542.00 99610.00C136531.00 99610.00 136520.00 99610.00 136509.00 99610.00C136466.33 99567.33 136423.67 99524.67 136381.00 99482.00C136338.00 99460.67 136295.00 99439.33 136252.00 99418.00C136230.67 99385.67 136209.33 99353.33 136188.00 99321.00C136156.00 99321.00 136124.00 99321.00 136092.00 99321.00C136081.00 99289.00 136070.00 99257.00 136059.00 99225.00C136059.00 99214.00 136059.00 99203.00 136059.00 99192.00C136027.00 99203.00 135995.00 99214.00 135963.00 99225.00C135941.67 99214.00 135920.33 99203.00 135899.00 99192.00C135888.00 99213.67 135877.00 99235.33 135866.00 99257.00C135877.00 99278.33 135888.00 99299.67 135899.00 99321.00C135880.25 99339.14 135861.49 99357.27 135843.17 99375.83C135839.97 99378.88 135837.00 99382.29 135833.67 99385.11C135801.78 99396.08 135769.89 99407.04 135738.00 99418.00C135727.33 99418.00 135716.67 99418.00 135706.00 99418.00C135706.00 99450.00 135706.00 99482.00 135706.00 99514.00C135673.67 99535.33 135641.33 99556.67 135609.00 99578.00C135609.00 99599.67 135609.00 99621.33 135609.00 99643.00C135619.67 99664.33 135630.33 99685.67 135641.00 99707.00C135641.00 99728.33 135641.00 99749.67 135641.00 99771.00C135673.33 99781.67 135705.67 99792.33 135738.00 99803.00C135748.67 99803.00 135759.33 99803.00 135770.00 99803.00C135791.33 99835.33 135812.67 99867.67 135834.00 99900.00C135812.54 99953.87 135791.23 100007.80 135769.69 100061.63C135759.13 100082.88 135748.34 100104.04 135737.93 100125.34C135727.29 100178.90 135716.64 100232.45 135706.00 100286.00C135716.67 100307.33 135727.33 100328.67 135738.00 100350.00C135738.00 100371.33 135738.00 100392.67 135738.00 100414.00C135748.79 100424.69 135759.41 100435.62 135770.31 100446.16C135791.54 100457.11 135812.77 100468.05 135834.00 100479.00C135834.00 100500.33 135834.00 100521.67 135834.00 100543.00C135823.33 100553.67 135812.67 100564.33 135802.00 100575.00C135791.33 100607.00 135780.67 100639.00 135770.00 100671.00C135791.33 100682.00 135812.67 100693.00 135834.00 100704.00C135834.00 100714.67 135834.00 100725.33 135834.00 100736.00C135844.67 100746.67 135855.33 100757.33 135866.00 100768.00C135877.00 100811.00 135888.00 100854.00 135899.00 100897.00C135888.00 100907.67 135877.00 100918.33 135866.00 100929.00C135844.67 100918.33 135823.33 100907.67 135802.00 100897.00C135791.33 100897.00 135780.67 100897.00 135770.00 100897.00C135748.67 100918.33 135727.33 100939.67 135706.00 100961.00C135695.00 100961.00 135684.00 100961.00 135673.00 100961.00C135641.00 100993.00 135609.00 101025.00 135577.00 101057.00C135555.67 101046.33 135534.33 101035.67 135513.00 101025.00C135491.33 101035.67 135469.67 101046.33 135448.00 101057.00C135437.23 101057.07 135426.41 101056.85 135415.67 101057.11C135383.78 101067.74 135351.89 101078.37 135320.00 101089.00C135280.07 101068.97 135240.07 101049.05 135199.95 101029.41C135195.30 101027.08 135190.43 101025.13 135186.51 101021.63C135145.34 100990.75 135104.17 100959.88 135063.00 100929.00C135030.57 100918.26 134998.08 100907.66 134965.69 100896.84C134923.12 100875.23 134880.56 100853.61 134838.00 100832.00C134795.00 100821.33 134752.00 100810.67 134709.00 100800.00C134666.00 100778.67 134623.00 100757.33 134580.00 100736.00C134515.21 100725.22 134450.40 100714.59 134385.62 100703.72C134332.75 100692.81 134279.87 100681.91 134227.00 100671.00C134216.00 100692.67 134205.00 100714.33 134194.00 100736.00C134108.33 100789.67 134022.67 100843.33 133937.00 100897.00C133926.33 100907.67 133915.67 100918.33 133905.00 100929.00C133905.00 100950.33 133905.00 100971.67 133905.00 100993.00C133926.33 101014.33 133947.67 101035.67 133969.00 101057.00C133990.67 101067.67 134012.33 101078.33 134034.00 101089.00C134034.00 101110.67 134034.00 101132.33 134034.00 101154.00C134055.33 101164.67 134076.67 101175.33 134098.00 101186.00C134087.31 101196.79 134076.38 101207.41 134065.84 101218.31C134033.78 101282.65 134001.33 101346.80 133969.00 101411.00C133958.33 101443.00 133947.67 101475.00 133937.00 101507.00C133905.00 101550.00 133873.00 101593.00 133841.00 101636.00C133851.67 101668.33 133862.33 101700.67 133873.00 101733.00C133862.33 101743.67 133851.67 101754.33 133841.00 101765.00C133862.33 101807.67 133883.67 101850.33 133905.00 101893.00C133928.37 101869.74 133951.52 101846.25 133975.05 101823.14C133984.03 101814.42 133993.02 101805.71 134002.00 101797.00C134023.33 101797.00 134044.67 101797.00 134066.00 101797.00C134066.00 101872.00 134066.00 101947.00 134066.00 102022.00C134098.00 102022.00 134130.00 102022.00 134162.00 102022.00C134215.67 102086.33 134269.33 102150.67 134323.00 102215.00C134312.33 102257.67 134301.67 102300.33 134291.00 102343.00C134269.67 102343.00 134248.33 102343.00 134227.00 102343.00C134205.33 102364.67 134183.67 102386.33 134162.00 102408.00C134194.33 102418.67 134226.67 102429.33 134259.00 102440.00C134259.00 102450.67 134259.00 102461.33 134259.00 102472.00C134237.33 102493.33 134215.67 102514.67 134194.00 102536.00C134161.90 102547.07 134129.75 102558.02 134097.69 102569.16C134076.46 102579.77 134055.23 102590.39 134034.00 102601.00C134012.28 102622.44 133990.45 102643.78 133968.79 102665.28C133936.86 102708.19 133904.93 102751.09 133873.00 102794.00C133873.00 102858.00 133873.00 102922.00 133873.00 102986.00C133851.67 103050.33 133830.33 103114.67 133809.00 103179.00C133809.00 103254.00 133809.00 103329.00 133809.00 103404.00C133851.67 103436.33 133894.33 103468.67 133937.00 103501.00C133969.33 103511.67 134001.67 103522.33 134034.00 103533.00C134055.33 103554.33 134076.67 103575.67 134098.00 103597.00C134108.67 103597.00 134119.33 103597.00 134130.00 103597.00C134130.00 103608.00 134130.00 103619.00 134130.00 103630.00C134173.00 103640.67 134216.00 103651.33 134259.00 103662.00C134259.00 103672.67 134259.00 103683.33 134259.00 103694.00C134248.33 103715.33 134237.67 103736.67 134227.00 103758.00C134237.67 103779.33 134248.33 103800.67 134259.00 103822.00C134248.33 103875.67 134237.67 103929.33 134227.00 103983.00C134248.33 104026.00 134269.67 104069.00 134291.00 104112.00C134323.00 104144.00 134355.00 104176.00 134387.00 104208.00C134387.00 104240.33 134387.00 104272.67 134387.00 104305.00C134408.67 104358.67 134430.33 104412.33 134452.00 104466.00C134430.33 104508.67 134408.67 104551.33 134387.00 104594.00C134398.00 104604.67 134409.00 104615.33 134420.00 104626.00C134409.00 104636.67 134398.00 104647.33 134387.00 104658.00C134419.33 104711.67 134451.67 104765.33 134484.00 104819.00C134484.00 104840.67 134484.00 104862.33 134484.00 104884.00C134473.33 104894.67 134462.67 104905.33 134452.00 104916.00C134452.00 104926.67 134452.00 104937.33 134452.00 104948.00C134430.22 104948.06 134408.42 104947.89 134386.66 104948.09C134172.21 105001.76 133957.77 105055.51 133743.31 105109.15C133593.54 105141.10 133443.77 105173.05 133294.00 105205.00C133251.26 105237.43 133208.44 105269.76 133165.75 105302.24C133154.83 105312.83 133143.92 105323.41 133133.00 105334.00C133122.33 105323.33 133111.67 105312.67 133101.00 105302.00C133090.33 105312.67 133079.67 105323.33 133069.00 105334.00C133036.72 105301.94 133004.94 105269.39 132973.00 105237.00C132951.33 105247.67 132929.67 105258.33 132908.00 105269.00C132918.67 105247.67 132929.33 105226.33 132940.00 105205.00C132929.33 105194.33 132918.67 105183.67 132908.00 105173.00C132897.33 105173.00 132886.67 105173.00 132876.00 105173.00C132886.67 105173.00 132897.33 105173.00 132908.00 105173.00C132897.33 105183.67 132886.67 105194.33 132876.00 105205.00C132865.33 105205.00 132854.67 105205.00 132844.00 105205.00C132844.00 105215.67 132844.00 105226.33 132844.00 105237.00C132833.33 105237.00 132822.67 105237.00 132812.00 105237.00C132812.00 105247.67 132812.00 105258.33 132812.00 105269.00C132801.33 105258.33 132790.67 105247.67 132780.00 105237.00C132769.33 105258.67 132758.67 105280.33 132748.00 105302.00C132758.67 105302.00 132769.33 105302.00 132780.00 105302.00C132769.33 105302.00 132758.67 105302.00 132748.00 105302.00C132748.00 105312.67 132748.00 105323.33 132748.00 105334.00C132758.67 105334.00 132769.33 105334.00 132780.00 105334.00C132769.33 105334.00 132758.67 105334.00 132748.00 105334.00C132758.67 105344.67 132769.33 105355.33 132780.00 105366.00C132769.33 105366.00 132758.67 105366.00 132748.00 105366.00C132758.67 105366.00 132769.33 105366.00 132780.00 105366.00C132769.33 105376.67 132758.67 105387.33 132748.00 105398.00C132737.00 105398.00 132726.00 105398.00 132715.00 105398.00C132704.33 105387.33 132693.67 105376.67 132683.00 105366.00C132683.00 105387.33 132683.00 105408.67 132683.00 105430.00C132661.67 105430.00 132640.33 105430.00 132619.00 105430.00C132619.00 105440.67 132619.00 105451.33 132619.00 105462.00C132608.33 105462.00 132597.67 105462.00 132587.00 105462.00C132587.00 105472.67 132587.00 105483.33 132587.00 105494.00C132568.86 105512.75 132550.73 105531.51 132532.17 105549.83C132529.11 105552.89 132526.06 105555.94 132523.00 105559.00C132523.00 105569.67 132523.00 105580.33 132523.00 105591.00C132490.67 105591.00 132458.33 105591.00 132426.00 105591.00C132404.67 105601.67 132383.33 105612.33 132362.00 105623.00C132351.33 105612.33 132340.67 105601.67 132330.00 105591.00C132297.67 105591.00 132265.33 105591.00 132233.00 105591.00C132233.00 105580.33 132233.00 105569.67 132233.00 105559.00C132233.00 105569.67 132233.00 105580.33 132233.00 105591.00C132222.33 105580.33 132211.67 105569.67 132201.00 105559.00C132201.00 105569.67 132201.00 105580.33 132201.00 105591.00C132179.67 105591.00 132158.33 105591.00 132137.00 105591.00C132137.00 105601.67 132137.00 105612.33 132137.00 105623.00C132137.00 105612.33 132137.00 105601.67 132137.00 105591.00C132137.00 105612.33 132137.00 105633.67 132137.00 105655.00C132115.33 105665.67 132093.67 105676.33 132072.00 105687.00C132083.00 105687.00 132094.00 105687.00 132105.00 105687.00C132083.33 105687.00 132061.67 105687.00 132040.00 105687.00C132040.00 105676.33 132040.00 105665.67 132040.00 105655.00C132029.33 105655.00 132018.67 105655.00 132008.00 105655.00C131997.33 105633.67 131986.67 105612.33 131976.00 105591.00C131965.33 105601.67 131954.67 105612.33 131944.00 105623.00C131944.00 105612.33 131944.00 105601.67 131944.00 105591.00C131933.33 105591.00 131922.67 105591.00 131912.00 105591.00C131912.00 105580.33 131912.00 105569.67 131912.00 105559.00C131890.33 105559.00 131868.67 105559.00 131847.00 105559.00C131847.00 105548.33 131847.00 105537.67 131847.00 105527.00C131836.33 105527.00 131825.67 105527.00 131815.00 105527.00C131815.00 105516.00 131815.00 105505.00 131815.00 105494.00C131804.33 105494.00 131793.67 105494.00 131783.00 105494.00C131783.00 105430.00 131783.00 105366.00 131783.00 105302.00C131793.67 105302.00 131804.33 105302.00 131815.00 105302.00C131815.00 105280.33 131815.00 105258.67 131815.00 105237.00C131804.33 105226.33 131793.67 105215.67 131783.00 105205.00C131804.33 105205.00 131825.67 105205.00 131847.00 105205.00C131847.00 105183.67 131847.00 105162.33 131847.00 105141.00C131836.33 105141.00 131825.67 105141.00 131815.00 105141.00C131815.00 105130.33 131815.00 105119.67 131815.00 105109.00C131825.67 105098.00 131836.33 105087.00 131847.00 105076.00C131825.67 105076.00 131804.33 105076.00 131783.00 105076.00C131793.67 105065.33 131804.33 105054.67 131815.00 105044.00C131804.33 105033.33 131793.67 105022.67 131783.00 105012.00C131783.00 104990.67 131783.00 104969.33 131783.00 104948.00C131772.33 104948.00 131761.67 104948.00 131751.00 104948.00C131761.67 104948.00 131772.33 104948.00 131783.00 104948.00C131793.67 104926.67 131804.33 104905.33 131815.00 104884.00C131815.00 104873.00 131815.00 104862.00 131815.00 104851.00C131804.33 104851.00 131793.67 104851.00 131783.00 104851.00C131793.67 104840.33 131804.33 104829.67 131815.00 104819.00C131815.00 104776.33 131815.00 104733.67 131815.00 104691.00C131825.67 104680.00 131836.33 104669.00 131847.00 104658.00C131857.67 104658.00 131868.33 104658.00 131879.00 104658.00C131879.00 104636.67 131879.00 104615.33 131879.00 104594.00C131890.00 104594.00 131901.00 104594.00 131912.00 104594.00C131912.00 104583.33 131912.00 104572.67 131912.00 104562.00C131922.67 104551.33 131933.33 104540.67 131944.00 104530.00C131954.67 104497.67 131965.33 104465.33 131976.00 104433.00C131986.67 104433.00 131997.33 104433.00 132008.00 104433.00C132008.00 104411.67 132008.00 104390.33 132008.00 104369.00C132018.67 104358.33 132029.33 104347.67 132040.00 104337.00C132040.00 104326.33 132040.00 104315.67 132040.00 104305.00C132040.00 104315.67 132040.00 104326.33 132040.00 104337.00C132040.00 104315.67 132040.00 104294.33 132040.00 104273.00C132050.67 104273.00 132061.33 104273.00 132072.00 104273.00C132072.00 104262.00 132072.00 104251.00 132072.00 104240.00C132061.33 104229.33 132050.67 104218.67 132040.00 104208.00C132040.00 104186.67 132040.00 104165.33 132040.00 104144.00C132050.67 104122.67 132061.33 104101.33 132072.00 104080.00C132072.00 104058.33 132072.00 104036.67 132072.00 104015.00C132061.33 104004.33 132050.67 103993.67 132040.00 103983.00C132029.33 103983.00 132018.67 103983.00 132008.00 103983.00C131997.33 103972.33 131986.67 103961.67 131976.00 103951.00C131986.67 103940.33 131997.33 103929.67 132008.00 103919.00C132008.00 103876.00 132008.00 103833.00 132008.00 103790.00C131997.33 103768.67 131986.67 103747.33 131976.00 103726.00C131997.33 103672.33 132018.67 103618.67 132040.00 103565.00C132050.67 103554.33 132061.33 103543.67 132072.00 103533.00C132061.33 103522.33 132050.67 103511.67 132040.00 103501.00C132029.23 103500.93 132018.41 103501.15 132007.67 103500.89C131975.78 103490.26 131943.89 103479.63 131912.00 103469.00C131869.00 103469.00 131826.00 103469.00 131783.00 103469.00C131772.33 103458.33 131761.67 103447.67 131751.00 103437.00C131751.00 103426.00 131751.00 103415.00 131751.00 103404.00C131740.33 103404.00 131729.67 103404.00 131719.00 103404.00C131697.33 103372.00 131675.67 103340.00 131654.00 103308.00C131632.67 103308.00 131611.33 103308.00 131590.00 103308.00C131590.00 103233.00 131590.00 103158.00 131590.00 103083.00C130346.67 103083.00 129103.33 103083.00 127860.00 103083.00C127860.00 103276.00 127860.00 103469.00 127860.00 103662.00C127838.67 103662.00 127817.33 103662.00 127796.00 103662.00C127774.67 103694.00 127753.33 103726.00 127732.00 103758.00C127721.27 103790.68 127710.36 103823.31 127699.74 103856.02C127688.82 103898.35 127677.91 103940.67 127667.00 103983.00C127667.00 104015.33 127667.00 104047.67 127667.00 104080.00C127688.67 104090.67 127710.33 104101.33 127732.00 104112.00C127753.33 104101.33 127774.67 104090.67 127796.00 104080.00C127806.67 104101.46 127817.53 104122.84 127828.08 104144.34C127838.72 104187.23 127849.36 104230.11 127860.00 104273.00C127849.33 104294.33 127838.67 104315.67 127828.00 104337.00C127817.33 104337.00 127806.67 104337.00 127796.00 104337.00C127763.96 104380.11 127731.80 104423.15 127699.84 104466.31C127688.89 104487.54 127677.95 104508.77 127667.00 104530.00C127624.33 104540.67 127581.67 104551.33 127539.00 104562.00C127517.33 104594.00 127495.67 104626.00 127474.00 104658.00C127474.05 104690.45 127473.91 104722.91 127474.07 104755.34C127485.05 104808.90 127496.02 104862.45 127507.00 104916.00C127517.67 104926.67 127528.33 104937.33 127539.00 104948.00C127528.33 104958.67 127517.67 104969.33 127507.00 104980.00C127507.00 105012.00 127507.00 105044.00 127507.00 105076.00C127517.67 105076.00 127528.33 105076.00 127539.00 105076.00C127539.00 105097.67 127539.00 105119.33 127539.00 105141.00C127528.33 105141.00 127517.67 105141.00 127507.00 105141.00C127507.00 105151.67 127507.00 105162.33 127507.00 105173.00C127517.67 105183.67 127528.33 105194.33 127539.00 105205.00C127549.67 105194.33 127560.33 105183.67 127571.00 105173.00C127592.33 105183.67 127613.67 105194.33 127635.00 105205.00C127635.00 105237.33 127635.00 105269.67 127635.00 105302.00C127613.67 105323.33 127592.33 105344.67 127571.00 105366.00C127581.67 105376.67 127592.33 105387.33 127603.00 105398.00C127592.27 105430.10 127581.65 105462.25 127570.84 105494.31C127560.23 105515.88 127549.61 105537.44 127539.00 105559.00C127539.00 105591.00 127539.00 105623.00 127539.00 105655.00C127528.33 105687.33 127517.67 105719.67 127507.00 105752.00C127507.00 105762.67 127507.00 105773.33 127507.00 105784.00C128235.67 105784.00 128964.33 105784.00 129693.00 105784.00C129907.45 105773.34 130121.90 105762.63 130336.35 105752.00C130925.90 105752.00 131515.45 105752.00 132105.00 105752.00C132105.00 105773.33 132105.00 105794.67 132105.00 105816.00C132094.00 105826.67 132083.00 105837.33 132072.00 105848.00C132083.00 105858.67 132094.00 105869.33 132105.00 105880.00C132105.00 105890.67 132105.00 105901.33 132105.00 105912.00C132094.00 105912.00 132083.00 105912.00 132072.00 105912.00C132072.00 105923.00 132072.00 105934.00 132072.00 105945.00C132061.33 105955.67 132050.67 105966.33 132040.00 105977.00C132040.00 105966.33 132040.00 105955.67 132040.00 105945.00C132029.33 105945.00 132018.67 105945.00 132008.00 105945.00C132008.00 105955.67 132008.00 105966.33 132008.00 105977.00C131997.33 105966.33 131986.67 105955.67 131976.00 105945.00C131976.00 105977.00 131976.00 106009.00 131976.00 106041.00C131965.33 106051.67 131954.67 106062.33 131944.00 106073.00C131954.67 106083.67 131965.33 106094.33 131976.00 106105.00C131965.33 106105.00 131954.67 106105.00 131944.00 106105.00C131944.00 106116.00 131944.00 106127.00 131944.00 106138.00C131922.33 106148.67 131900.67 106159.33 131879.00 106170.00C131890.00 106180.67 131901.00 106191.33 131912.00 106202.00C131912.00 106212.67 131912.00 106223.33 131912.00 106234.00C131922.67 106234.00 131933.33 106234.00 131944.00 106234.00C131933.33 106244.67 131922.67 106255.33 131912.00 106266.00C131922.67 106276.67 131933.33 106287.33 131944.00 106298.00C131933.33 106308.67 131922.67 106319.33 131912.00 106330.00C131922.67 106330.00 131933.33 106330.00 131944.00 106330.00C131954.67 106341.00 131965.33 106352.00 131976.00 106363.00C131976.00 106373.67 131976.00 106384.33 131976.00 106395.00C131965.33 106405.67 131954.67 106416.33 131944.00 106427.00C131954.67 106427.00 131965.33 106427.00 131976.00 106427.00C131986.67 106448.33 131997.33 106469.67 132008.00 106491.00C131997.33 106491.00 131986.67 106491.00 131976.00 106491.00C131997.33 106512.33 132018.67 106533.67 132040.00 106555.00C132029.33 106555.00 132018.67 106555.00 132008.00 106555.00C132018.67 106587.33 132029.33 106619.67 132040.00 106652.00C132029.33 106684.00 132018.67 106716.00 132008.00 106748.00C131997.33 106748.00 131986.67 106748.00 131976.00 106748.00C131976.00 106759.00 131976.00 106770.00 131976.00 106781.00C131954.67 106791.67 131933.33 106802.33 131912.00 106813.00C131901.00 106834.33 131890.00 106855.67 131879.00 106877.00C131890.00 106887.67 131901.00 106898.33 131912.00 106909.00C131901.00 106919.67 131890.00 106930.33 131879.00 106941.00C131879.00 106962.67 131879.00 106984.33 131879.00 107006.00C131868.33 107016.67 131857.67 107027.33 131847.00 107038.00C131836.33 107070.00 131825.67 107102.00 131815.00 107134.00C131804.33 107134.00 131793.67 107134.00 131783.00 107134.00C131772.12 107155.95 131761.46 107178.02 131750.45 107199.90C131718.30 107252.93 131686.15 107305.97 131654.00 107359.00C131632.67 107369.67 131611.33 107380.33 131590.00 107391.00C131571.86 107409.75 131553.73 107428.51 131535.17 107446.83C131532.11 107449.89 131529.06 107452.94 131526.00 107456.00C131536.67 107498.67 131547.33 107541.33 131558.00 107584.00C131547.33 107616.33 131536.67 107648.67 131526.00 107681.00C131504.33 107691.67 131482.67 107702.33 131461.00 107713.00C131450.33 107734.33 131439.67 107755.67 131429.00 107777.00C131418.33 107788.00 131407.67 107799.00 131397.00 107810.00C131397.00 107874.00 131397.00 107938.00 131397.00 108002.00C131407.69 108013.13 131418.61 108024.09 131429.16 108035.31C131439.77 108056.54 131450.39 108077.77 131461.00 108099.00C131461.00 108120.33 131461.00 108141.67 131461.00 108163.00C131482.67 108163.00 131504.33 108163.00 131526.00 108163.00C131515.33 108173.67 131504.67 108184.33 131494.00 108195.00C131504.67 108205.67 131515.33 108216.33 131526.00 108227.00C131526.00 108216.33 131526.00 108205.67 131526.00 108195.00C131536.67 108205.67 131547.33 108216.33 131558.00 108227.00C131568.67 108216.33 131579.33 108205.67 131590.00 108195.00C131600.67 108205.67 131611.33 108216.33 131622.00 108227.00C131611.33 108238.00 131600.67 108249.00 131590.00 108260.00C131600.67 108260.00 131611.33 108260.00 131622.00 108260.00C131611.33 108270.67 131600.67 108281.33 131590.00 108292.00C131600.67 108292.00 131611.33 108292.00 131622.00 108292.00C131611.33 108302.67 131600.67 108313.33 131590.00 108324.00C131622.33 108324.00 131654.67 108324.00 131687.00 108324.00C131687.00 108334.67 131687.00 108345.33 131687.00 108356.00C131697.67 108366.67 131708.33 108377.33 131719.00 108388.00C131719.00 108377.33 131719.00 108366.67 131719.00 108356.00C131740.33 108356.00 131761.67 108356.00 131783.00 108356.00C131783.00 108388.33 131783.00 108420.67 131783.00 108453.00C131793.67 108453.00 131804.33 108453.00 131815.00 108453.00C131815.00 108442.00 131815.00 108431.00 131815.00 108420.00C131836.33 108409.33 131857.67 108398.67 131879.00 108388.00C131879.00 108398.67 131879.00 108409.33 131879.00 108420.00C131900.67 108420.00 131922.33 108420.00 131944.00 108420.00C131944.00 108431.00 131944.00 108442.00 131944.00 108453.00C131954.67 108453.00 131965.33 108453.00 131976.00 108453.00C131965.33 108453.00 131954.67 108453.00 131944.00 108453.00C131954.67 108463.67 131965.33 108474.33 131976.00 108485.00C131965.33 108495.67 131954.67 108506.33 131944.00 108517.00C131954.67 108527.67 131965.33 108538.33 131976.00 108549.00C131997.33 108527.67 132018.67 108506.33 132040.00 108485.00C132040.00 108474.33 132040.00 108463.67 132040.00 108453.00C132050.67 108463.67 132061.33 108474.33 132072.00 108485.00C132061.33 108506.33 132050.67 108527.67 132040.00 108549.00C132050.67 108538.33 132061.33 108527.67 132072.00 108517.00C132083.00 108538.33 132094.00 108559.67 132105.00 108581.00C132105.00 108591.67 132105.00 108602.33 132105.00 108613.00C132115.67 108602.33 132126.33 108591.67 132137.00 108581.00C132147.67 108581.00 132158.33 108581.00 132169.00 108581.00C132169.00 108602.67 132169.00 108624.33 132169.00 108646.00C132179.67 108635.00 132190.33 108624.00 132201.00 108613.00C132201.00 108634.67 132201.00 108656.33 132201.00 108678.00C132211.67 108678.00 132222.33 108678.00 132233.00 108678.00C132233.00 108699.33 132233.00 108720.67 132233.00 108742.00C132243.67 108752.67 132254.33 108763.33 132265.00 108774.00C132283.25 108755.70 132301.51 108737.40 132320.18 108719.52C132323.45 108716.35 132326.73 108713.17 132330.00 108710.00C132340.67 108731.33 132351.33 108752.67 132362.00 108774.00C132351.33 108774.00 132340.67 108774.00 132330.00 108774.00C132340.67 108774.00 132351.33 108774.00 132362.00 108774.00C132372.67 108784.67 132383.33 108795.33 132394.00 108806.00C132372.67 108816.67 132351.33 108827.33 132330.00 108838.00C132340.67 108849.00 132351.33 108860.00 132362.00 108871.00C132372.67 108860.00 132383.33 108849.00 132394.00 108838.00C132394.00 108870.33 132394.00 108902.67 132394.00 108935.00C132383.33 108945.67 132372.67 108956.33 132362.00 108967.00C132383.33 108967.00 132404.67 108967.00 132426.00 108967.00C132447.33 108977.67 132468.67 108988.33 132490.00 108999.00C132490.00 109031.33 132490.00 109063.67 132490.00 109096.00C132479.33 109096.00 132468.67 109096.00 132458.00 109096.00C132468.67 109106.67 132479.33 109117.33 132490.00 109128.00C132479.31 109138.79 132468.38 109149.41 132457.84 109160.31C132447.23 109181.54 132436.61 109202.77 132426.00 109224.00C132436.67 109234.67 132447.33 109245.33 132458.00 109256.00C132468.67 109256.00 132479.33 109256.00 132490.00 109256.00C132479.33 109256.00 132468.67 109256.00 132458.00 109256.00C132458.00 109277.67 132458.00 109299.33 132458.00 109321.00C132479.67 109321.00 132501.33 109321.00 132523.00 109321.00C132523.00 109374.33 132523.00 109427.67 132523.00 109481.00C132544.33 109492.00 132565.67 109503.00 132587.00 109514.00C132576.33 109524.67 132565.67 109535.33 132555.00 109546.00C132555.00 109556.67 132555.00 109567.33 132555.00 109578.00C132587.00 109567.33 132619.00 109556.67 132651.00 109546.00C132629.67 109567.33 132608.33 109588.67 132587.00 109610.00C132597.67 109642.33 132608.33 109674.67 132619.00 109707.00C132619.00 109717.67 132619.00 109728.33 132619.00 109739.00C132597.67 109739.00 132576.33 109739.00 132555.00 109739.00C132565.67 109760.33 132576.33 109781.67 132587.00 109803.00C132597.67 109803.00 132608.33 109803.00 132619.00 109803.00C132619.00 109813.67 132619.00 109824.33 132619.00 109835.00C132629.67 109835.00 132640.33 109835.00 132651.00 109835.00C132640.33 109845.67 132629.67 109856.33 132619.00 109867.00C132608.33 109867.00 132597.67 109867.00 132587.00 109867.00C132597.67 109877.67 132608.33 109888.33 132619.00 109899.00C132629.67 109899.00 132640.33 109899.00 132651.00 109899.00C132640.33 109920.67 132629.67 109942.33 132619.00 109964.00C132640.33 109953.33 132661.67 109942.67 132683.00 109932.00C132693.67 109932.00 132704.33 109932.00 132715.00 109932.00C132726.00 109953.33 132737.00 109974.67 132748.00 109996.00C132758.67 109996.00 132769.33 109996.00 132780.00 109996.00C132790.67 110006.67 132801.33 110017.33 132812.00 110028.00C132779.67 110038.67 132747.33 110049.33 132715.00 110060.00C132726.00 110070.67 132737.00 110081.33 132748.00 110092.00C132748.00 110103.00 132748.00 110114.00 132748.00 110125.00C132758.67 110114.00 132769.33 110103.00 132780.00 110092.00C132790.67 110103.00 132801.33 110114.00 132812.00 110125.00C132801.33 110135.67 132790.67 110146.33 132780.00 110157.00C132801.33 110167.67 132822.67 110178.33 132844.00 110189.00C132833.33 110199.67 132822.67 110210.33 132812.00 110221.00C132822.67 110231.67 132833.33 110242.33 132844.00 110253.00C132854.67 110242.33 132865.33 110231.67 132876.00 110221.00C132876.00 110231.67 132876.00 110242.33 132876.00 110253.00C132897.33 110263.67 132918.67 110274.33 132940.00 110285.00C132951.00 110295.67 132962.00 110306.33 132973.00 110317.00C132962.00 110328.00 132951.00 110339.00 132940.00 110350.00C132908.00 110360.67 132876.00 110371.33 132844.00 110382.00C132865.33 110382.00 132886.67 110382.00 132908.00 110382.00C132908.00 110392.67 132908.00 110403.33 132908.00 110414.00C132897.33 110414.00 132886.67 110414.00 132876.00 110414.00C132876.00 110424.67 132876.00 110435.33 132876.00 110446.00C132897.33 110435.33 132918.67 110424.67 132940.00 110414.00C132940.00 110424.67 132940.00 110435.33 132940.00 110446.00C132918.67 110456.67 132897.33 110467.33 132876.00 110478.00C132886.67 110488.67 132897.33 110499.33 132908.00 110510.00C132886.67 110510.00 132865.33 110510.00 132844.00 110510.00C132854.67 110521.00 132865.33 110532.00 132876.00 110543.00C132865.33 110543.00 132854.67 110543.00 132844.00 110543.00C132844.00 110553.67 132844.00 110564.33 132844.00 110575.00C132833.33 110564.33 132822.67 110553.67 132812.00 110543.00C132812.00 110553.67 132812.00 110564.33 132812.00 110575.00C132812.00 110564.33 132812.00 110553.67 132812.00 110543.00C132801.33 110553.67 132790.67 110564.33 132780.00 110575.00C132780.00 110585.67 132780.00 110596.33 132780.00 110607.00C132769.33 110607.00 132758.67 110607.00 132748.00 110607.00C132758.67 110617.67 132769.33 110628.33 132780.00 110639.00C132758.33 110628.33 132736.67 110617.67 132715.00 110607.00C132715.00 110596.33 132715.00 110585.67 132715.00 110575.00C132704.33 110575.00 132693.67 110575.00 132683.00 110575.00C132683.00 110607.00 132683.00 110639.00 132683.00 110671.00C132693.67 110671.00 132704.33 110671.00 132715.00 110671.00C132704.33 110681.67 132693.67 110692.33 132683.00 110703.00C132683.00 110692.33 132683.00 110681.67 132683.00 110671.00C132672.33 110681.67 132661.67 110692.33 132651.00 110703.00C132640.33 110703.00 132629.67 110703.00 132619.00 110703.00C132619.00 110713.67 132619.00 110724.33 132619.00 110735.00C132629.67 110735.00 132640.33 110735.00 132651.00 110735.00C132640.33 110746.00 132629.67 110757.00 132619.00 110768.00C132608.33 110757.00 132597.67 110746.00 132587.00 110735.00C132576.33 110746.00 132565.67 110757.00 132555.00 110768.00C132565.67 110778.67 132576.33 110789.33 132587.00 110800.00C132554.67 110789.33 132522.33 110778.67 132490.00 110768.00C132490.00 110778.67 132490.00 110789.33 132490.00 110800.00C132479.33 110800.00 132468.67 110800.00 132458.00 110800.00C132458.00 110810.67 132458.00 110821.33 132458.00 110832.00C132468.67 110832.00 132479.33 110832.00 132490.00 110832.00C132479.33 110832.00 132468.67 110832.00 132458.00 110832.00C132447.33 110821.33 132436.67 110810.67 132426.00 110800.00C132415.33 110810.67 132404.67 110821.33 132394.00 110832.00C132394.00 110821.33 132394.00 110810.67 132394.00 110800.00C132394.00 110832.00 132394.00 110864.00 132394.00 110896.00C132383.33 110896.00 132372.67 110896.00 132362.00 110896.00C132351.33 110885.33 132340.67 110874.67 132330.00 110864.00C132330.00 110874.67 132330.00 110885.33 132330.00 110896.00C132319.00 110885.33 132308.00 110874.67 132297.00 110864.00C132297.00 110896.33 132297.00 110928.67 132297.00 110961.00C132286.33 110939.33 132275.67 110917.67 132265.00 110896.00C132254.33 110917.67 132243.67 110939.33 132233.00 110961.00C132243.67 110971.67 132254.33 110982.33 132265.00 110993.00C132254.33 110993.00 132243.67 110993.00 132233.00 110993.00C132233.00 111003.67 132233.00 111014.33 132233.00 111025.00C132222.33 111035.67 132211.67 111046.33 132201.00 111057.00C132211.67 111078.33 132222.33 111099.67 132233.00 111121.00C132211.67 111110.33 132190.33 111099.67 132169.00 111089.00C132147.67 111099.67 132126.33 111110.33 132105.00 111121.00C132115.67 111131.67 132126.33 111142.33 132137.00 111153.00C132126.33 111164.00 132115.67 111175.00 132105.00 111186.00C132094.00 111164.33 132083.00 111142.67 132072.00 111121.00C132050.67 111131.67 132029.33 111142.33 132008.00 111153.00C132008.00 111142.33 132008.00 111131.67 132008.00 111121.00C131997.33 111131.67 131986.67 111142.33 131976.00 111153.00C131986.67 111164.00 131997.33 111175.00 132008.00 111186.00C131997.33 111196.67 131986.67 111207.33 131976.00 111218.00C131943.67 111218.00 131911.33 111218.00 131879.00 111218.00C131890.00 111228.67 131901.00 111239.33 131912.00 111250.00C131901.00 111260.67 131890.00 111271.33 131879.00 111282.00C131900.67 111292.67 131922.33 111303.33 131944.00 111314.00C131911.67 111314.00 131879.33 111314.00 131847.00 111314.00C131868.67 111335.67 131890.33 111357.33 131912.00 111379.00C131912.00 111389.67 131912.00 111400.33 131912.00 111411.00C131901.00 111411.00 131890.00 111411.00 131879.00 111411.00C131879.00 111400.33 131879.00 111389.67 131879.00 111379.00C131868.33 111389.67 131857.67 111400.33 131847.00 111411.00C131847.00 111432.33 131847.00 111453.67 131847.00 111475.00C131815.00 111475.00 131783.00 111475.00 131751.00 111475.00C131740.33 111485.67 131729.67 111496.33 131719.00 111507.00C131729.67 111528.33 131740.33 111549.67 131751.00 111571.00C131740.33 111571.00 131729.67 111571.00 131719.00 111571.00C131729.67 111582.00 131740.33 111593.00 131751.00 111604.00C131740.33 111614.67 131729.67 111625.33 131719.00 111636.00C131708.33 111625.33 131697.67 111614.67 131687.00 111604.00C131665.33 111604.00 131643.67 111604.00 131622.00 111604.00C131622.00 111625.33 131622.00 111646.67 131622.00 111668.00C131600.67 111668.00 131579.33 111668.00 131558.00 111668.00C131568.67 111678.67 131579.33 111689.33 131590.00 111700.00C131590.00 111710.67 131590.00 111721.33 131590.00 111732.00C131558.00 111742.67 131526.00 111753.33 131494.00 111764.00C131494.00 111775.00 131494.00 111786.00 131494.00 111797.00C131504.67 111797.00 131515.33 111797.00 131526.00 111797.00C131536.67 111807.67 131547.33 111818.33 131558.00 111829.00C131558.00 111839.67 131558.00 111850.33 131558.00 111861.00C131547.33 111871.67 131536.67 111882.33 131526.00 111893.00C131536.67 111914.33 131547.33 111935.67 131558.00 111957.00C131558.00 111967.67 131558.00 111978.33 131558.00 111989.00C131536.67 111978.33 131515.33 111967.67 131494.00 111957.00C131483.00 111967.67 131472.00 111978.33 131461.00 111989.00C131450.33 111989.00 131439.67 111989.00 131429.00 111989.00C131429.00 112000.00 131429.00 112011.00 131429.00 112022.00C131418.33 112022.00 131407.67 112022.00 131397.00 112022.00C131418.33 112043.33 131439.67 112064.67 131461.00 112086.00C131450.33 112096.67 131439.67 112107.33 131429.00 112118.00C131429.00 112107.33 131429.00 112096.67 131429.00 112086.00C131407.67 112086.00 131386.33 112086.00 131365.00 112086.00C131375.67 112096.67 131386.33 112107.33 131397.00 112118.00C131386.33 112128.67 131375.67 112139.33 131365.00 112150.00C131354.33 112128.67 131343.67 112107.33 131333.00 112086.00C131300.67 112096.67 131268.33 112107.33 131236.00 112118.00C131236.00 112107.33 131236.00 112096.67 131236.00 112086.00C131225.33 112086.00 131214.67 112086.00 131204.00 112086.00C131204.00 112075.33 131204.00 112064.67 131204.00 112054.00C131182.67 112043.33 131161.33 112032.67 131140.00 112022.00C131140.00 112011.00 131140.00 112000.00 131140.00 111989.00C131140.00 112010.67 131140.00 112032.33 131140.00 112054.00C131150.67 112054.00 131161.33 112054.00 131172.00 112054.00C131140.00 112075.33 131108.00 112096.67 131076.00 112118.00C131086.67 112128.67 131097.33 112139.33 131108.00 112150.00C131108.00 112182.33 131108.00 112214.67 131108.00 112247.00C131097.33 112257.67 131086.67 112268.33 131076.00 112279.00C131065.00 112268.33 131054.00 112257.67 131043.00 112247.00C131043.00 112268.33 131043.00 112289.67 131043.00 112311.00C131032.33 112311.00 131021.67 112311.00 131011.00 112311.00C131021.67 112321.67 131032.33 112332.33 131043.00 112343.00C131043.00 112353.67 131043.00 112364.33 131043.00 112375.00C131054.00 112375.00 131065.00 112375.00 131076.00 112375.00C131076.00 112385.67 131076.00 112396.33 131076.00 112407.00C131054.33 112407.00 131032.67 112407.00 131011.00 112407.00C131021.67 112418.00 131032.33 112429.00 131043.00 112440.00C131043.00 112450.67 131043.00 112461.33 131043.00 112472.00C131054.00 112472.00 131065.00 112472.00 131076.00 112472.00C131076.00 112504.00 131076.00 112536.00 131076.00 112568.00C131054.33 112568.00 131032.67 112568.00 131011.00 112568.00C131000.33 112589.33 130989.67 112610.67 130979.00 112632.00C130989.77 112632.08 131000.59 112631.85 131011.33 112632.11C131043.55 112643.08 131075.78 112654.04 131108.00 112665.00C131118.67 112686.33 131129.33 112707.67 131140.00 112729.00C131150.67 112739.67 131161.33 112750.33 131172.00 112761.00C131172.00 112825.33 131172.00 112889.67 131172.00 112954.00C131182.67 112954.00 131193.33 112954.00 131204.00 112954.00C131214.67 112964.67 131225.33 112975.33 131236.00 112986.00C131257.67 112954.00 131279.33 112922.00 131301.00 112890.00C131311.67 112932.67 131322.33 112975.33 131333.00 113018.00C131354.33 113018.00 131375.67 113018.00 131397.00 113018.00C131407.67 113007.33 131418.33 112996.67 131429.00 112986.00C131482.67 112975.33 131536.33 112964.67 131590.00 112954.00C131611.33 112943.33 131632.67 112932.67 131654.00 112922.00C131675.67 112922.00 131697.33 112922.00 131719.00 112922.00C131740.45 112932.69 131761.85 112943.50 131783.33 112954.11C131815.22 112964.74 131847.11 112975.37 131879.00 112986.00C131911.33 112975.33 131943.67 112964.67 131976.00 112954.00C131997.33 112964.67 132018.67 112975.33 132040.00 112986.00C132059.98 113026.09 132080.08 113066.12 132100.44 113106.02C132102.76 113110.01 132103.99 113114.78 132107.73 113117.73C132138.82 113148.82 132169.91 113179.91 132201.00 113211.00C132222.37 113243.44 132243.84 113275.83 132265.16 113308.31C132275.77 113329.54 132286.39 113350.77 132297.00 113372.00C132297.00 113425.67 132297.00 113479.33 132297.00 113533.00C132275.67 113533.00 132254.33 113533.00 132233.00 113533.00C132233.00 113565.00 132233.00 113597.00 132233.00 113629.00C132243.67 113629.00 132254.33 113629.00 132265.00 113629.00C132265.00 113650.67 132265.00 113672.33 132265.00 113694.00C132243.67 113715.33 132222.33 113736.67 132201.00 113758.00C132179.67 113758.00 132158.33 113758.00 132137.00 113758.00C132137.00 113768.67 132137.00 113779.33 132137.00 113790.00C132126.33 113790.00 132115.67 113790.00 132105.00 113790.00C132094.00 113800.67 132083.00 113811.33 132072.00 113822.00C132072.00 113843.33 132072.00 113864.67 132072.00 113886.00C132061.33 113907.67 132050.67 113929.33 132040.00 113951.00C132008.00 113983.00 131976.00 114015.00 131944.00 114047.00C131944.00 114057.67 131944.00 114068.33 131944.00 114079.00C131954.67 114090.00 131965.33 114101.00 131976.00 114112.00C131976.00 114122.67 131976.00 114133.33 131976.00 114144.00C131965.33 114154.67 131954.67 114165.33 131944.00 114176.00C131944.00 114186.67 131944.00 114197.33 131944.00 114208.00C131922.33 114218.67 131900.67 114229.33 131879.00 114240.00C131879.00 114250.67 131879.00 114261.33 131879.00 114272.00C131890.00 114282.67 131901.00 114293.33 131912.00 114304.00C131901.00 114315.00 131890.00 114326.00 131879.00 114337.00C131868.33 114337.00 131857.67 114337.00 131847.00 114337.00C131868.67 114347.67 131890.33 114358.33 131912.00 114369.00C131901.00 114369.00 131890.00 114369.00 131879.00 114369.00C131847.00 114401.00 131815.00 114433.00 131783.00 114465.00C131793.69 114475.79 131804.62 114486.41 131815.16 114497.31C131825.77 114518.88 131836.39 114540.44 131847.00 114562.00C131847.00 114583.33 131847.00 114604.67 131847.00 114626.00C131857.67 114636.67 131868.33 114647.33 131879.00 114658.00C131868.33 114679.33 131857.67 114700.67 131847.00 114722.00C131857.67 114733.00 131868.33 114744.00 131879.00 114755.00C131868.33 114755.00 131857.67 114755.00 131847.00 114755.00C131857.67 114765.67 131868.33 114776.33 131879.00 114787.00C131890.00 114787.00 131901.00 114787.00 131912.00 114787.00C131922.67 114797.67 131933.33 114808.33 131944.00 114819.00C131933.33 114829.67 131922.67 114840.33 131912.00 114851.00C131922.67 114851.00 131933.33 114851.00 131944.00 114851.00C131933.33 114861.67 131922.67 114872.33 131912.00 114883.00C131922.67 114893.67 131933.33 114904.33 131944.00 114915.00C131933.33 114915.00 131922.67 114915.00 131912.00 114915.00C131922.67 114925.67 131933.33 114936.33 131944.00 114947.00C131944.00 114958.00 131944.00 114969.00 131944.00 114980.00C131954.67 114980.00 131965.33 114980.00 131976.00 114980.00C131976.00 115001.33 131976.00 115022.67 131976.00 115044.00C132008.00 115065.33 132040.00 115086.67 132072.00 115108.00C132072.00 115129.67 132072.00 115151.33 132072.00 115173.00C132061.33 115173.00 132050.67 115173.00 132040.00 115173.00C132040.00 115205.00 132040.00 115237.00 132040.00 115269.00C132050.67 115269.00 132061.33 115269.00 132072.00 115269.00C132072.00 115279.67 132072.00 115290.33 132072.00 115301.00C132093.67 115311.67 132115.33 115322.33 132137.00 115333.00C132147.67 115344.00 132158.33 115355.00 132169.00 115366.00C132158.33 115376.67 132147.67 115387.33 132137.00 115398.00C132147.67 115408.67 132158.33 115419.33 132169.00 115430.00C132158.33 115430.00 132147.67 115430.00 132137.00 115430.00C132147.67 115430.00 132158.33 115430.00 132169.00 115430.00C132179.67 115451.33 132190.33 115472.67 132201.00 115494.00C132201.00 115515.33 132201.00 115536.67 132201.00 115558.00C132190.33 115569.00 132179.67 115580.00 132169.00 115591.00C132147.67 115591.00 132126.33 115591.00 132105.00 115591.00C132115.67 115612.33 132126.33 115633.67 132137.00 115655.00C132115.33 115644.33 132093.67 115633.67 132072.00 115623.00C132061.33 115623.00 132050.67 115623.00 132040.00 115623.00C132007.93 115644.43 131975.75 115665.73 131943.75 115687.25C131933.17 115697.83 131922.58 115708.42 131912.00 115719.00C131890.33 115708.33 131868.67 115697.67 131847.00 115687.00C131847.00 115708.33 131847.00 115729.67 131847.00 115751.00C131857.67 115751.00 131868.33 115751.00 131879.00 115751.00C131879.00 115761.67 131879.00 115772.33 131879.00 115783.00C131857.67 115794.00 131836.33 115805.00 131815.00 115816.00C131815.00 115826.67 131815.00 115837.33 131815.00 115848.00C131793.67 115848.00 131772.33 115848.00 131751.00 115848.00C131740.33 115858.67 131729.67 115869.33 131719.00 115880.00C131708.33 115869.33 131697.67 115858.67 131687.00 115848.00C131687.00 115869.33 131687.00 115890.67 131687.00 115912.00C131665.33 115922.67 131643.67 115933.33 131622.00 115944.00C131643.67 115944.00 131665.33 115944.00 131687.00 115944.00C131687.00 115954.67 131687.00 115965.33 131687.00 115976.00C131665.33 115976.00 131643.67 115976.00 131622.00 115976.00C131611.33 115987.00 131600.67 115998.00 131590.00 116009.00C131590.00 115998.00 131590.00 115987.00 131590.00 115976.00C131568.67 115976.00 131547.33 115976.00 131526.00 115976.00C131515.33 115997.67 131504.67 116019.33 131494.00 116041.00C131504.67 116051.67 131515.33 116062.33 131526.00 116073.00C131526.00 116083.67 131526.00 116094.33 131526.00 116105.00C131515.33 116105.00 131504.67 116105.00 131494.00 116105.00C131483.00 116094.33 131472.00 116083.67 131461.00 116073.00C131450.33 116073.00 131439.67 116073.00 131429.00 116073.00C131407.67 116094.33 131386.33 116115.67 131365.00 116137.00C131354.33 116137.00 131343.67 116137.00 131333.00 116137.00C131333.00 116147.67 131333.00 116158.33 131333.00 116169.00C131311.67 116158.33 131290.33 116147.67 131269.00 116137.00C131269.00 116147.67 131269.00 116158.33 131269.00 116169.00C131258.00 116180.00 131247.00 116191.00 131236.00 116202.00C131247.00 116212.67 131258.00 116223.33 131269.00 116234.00C131258.00 116234.00 131247.00 116234.00 131236.00 116234.00C131225.33 116244.67 131214.67 116255.33 131204.00 116266.00C131193.33 116255.33 131182.67 116244.67 131172.00 116234.00C131150.67 116244.67 131129.33 116255.33 131108.00 116266.00C131108.00 116287.33 131108.00 116308.67 131108.00 116330.00C131086.33 116340.67 131064.67 116351.33 131043.00 116362.00C131043.00 116383.67 131043.00 116405.33 131043.00 116427.00C131032.33 116416.00 131021.67 116405.00 131011.00 116394.00C131011.00 116340.67 131011.00 116287.33 131011.00 116234.00C131000.33 116234.00 130989.67 116234.00 130979.00 116234.00C130957.67 116255.33 130936.33 116276.67 130915.00 116298.00C130904.33 116298.00 130893.67 116298.00 130883.00 116298.00C130872.33 116319.33 130861.67 116340.67 130851.00 116362.00C130840.00 116372.67 130829.00 116383.33 130818.00 116394.00C130796.67 116394.00 130775.33 116394.00 130754.00 116394.00C130775.33 116405.00 130796.67 116416.00 130818.00 116427.00C130796.67 116427.00 130775.33 116427.00 130754.00 116427.00C130732.67 116448.33 130711.33 116469.67 130690.00 116491.00C130690.00 116523.00 130690.00 116555.00 130690.00 116587.00C130679.33 116576.33 130668.67 116565.67 130658.00 116555.00C130658.00 116544.33 130658.00 116533.67 130658.00 116523.00C130636.33 116533.67 130614.67 116544.33 130593.00 116555.00C130603.67 116576.33 130614.33 116597.67 130625.00 116619.00C130603.67 116630.00 130582.33 116641.00 130561.00 116652.00C130550.33 116662.67 130539.67 116673.33 130529.00 116684.00C130539.69 116694.79 130550.62 116705.41 130561.16 116716.31C130571.77 116737.54 130582.39 116758.77 130593.00 116780.00C130614.67 116790.67 130636.33 116801.33 130658.00 116812.00C130636.33 116833.67 130614.67 116855.33 130593.00 116877.00C130593.00 116887.67 130593.00 116898.33 130593.00 116909.00C130582.33 116909.00 130571.67 116909.00 130561.00 116909.00C130539.67 116919.67 130518.33 116930.33 130497.00 116941.00C130497.00 116930.33 130497.00 116919.67 130497.00 116909.00C130486.33 116898.33 130475.67 116887.67 130465.00 116877.00C130454.33 116877.00 130443.67 116877.00 130433.00 116877.00C130411.33 116930.67 130389.67 116984.33 130368.00 117038.00C130346.67 117038.00 130325.33 117038.00 130304.00 117038.00C130304.00 117048.67 130304.00 117059.33 130304.00 117070.00C130282.67 117091.33 130261.33 117112.67 130240.00 117134.00C130218.33 117134.00 130196.67 117134.00 130175.00 117134.00C130175.00 117112.67 130175.00 117091.33 130175.00 117070.00C130132.33 117070.00 130089.67 117070.00 130047.00 117070.00C130057.67 117091.33 130068.33 117112.67 130079.00 117134.00C130068.33 117134.00 130057.67 117134.00 130047.00 117134.00C130036.31 117144.79 130025.38 117155.41 130014.84 117166.31C130003.89 117187.54 129992.95 117208.77 129982.00 117230.00C129993.00 117241.00 130004.00 117252.00 130015.00 117263.00C130015.00 117273.67 130015.00 117284.33 130015.00 117295.00C129993.33 117295.00 129971.67 117295.00 129950.00 117295.00C129939.21 117305.69 129928.59 117316.62 129917.69 117327.16C129896.46 117337.77 129875.23 117348.39 129854.00 117359.00C129843.33 117348.33 129832.67 117337.67 129822.00 117327.00C129811.00 117327.00 129800.00 117327.00 129789.00 117327.00C129778.33 117316.33 129767.67 117305.67 129757.00 117295.00C129767.67 117284.33 129778.33 117273.67 129789.00 117263.00C129778.33 117263.00 129767.67 117263.00 129757.00 117263.00C129746.33 117252.00 129735.67 117241.00 129725.00 117230.00C129714.21 117241.02 129703.60 117252.29 129692.69 117263.16C129671.46 117273.77 129650.23 117284.39 129629.00 117295.00C129629.00 117316.33 129629.00 117337.67 129629.00 117359.00C129618.33 117380.33 129607.67 117401.67 129597.00 117423.00C129607.67 117433.67 129618.33 117444.33 129629.00 117455.00C129629.00 117466.00 129629.00 117477.00 129629.00 117488.00C129618.33 117488.00 129607.67 117488.00 129597.00 117488.00C129575.33 117477.00 129553.67 117466.00 129532.00 117455.00C129521.33 117444.33 129510.67 117433.67 129500.00 117423.00C129489.33 117433.67 129478.67 117444.33 129468.00 117455.00C129468.00 117466.00 129468.00 117477.00 129468.00 117488.00C129457.33 117498.67 129446.67 117509.33 129436.00 117520.00C129446.67 117530.67 129457.33 117541.33 129468.00 117552.00C129468.00 117562.67 129468.00 117573.33 129468.00 117584.00C129457.33 117594.67 129446.67 117605.33 129436.00 117616.00C129425.33 117616.00 129414.67 117616.00 129404.00 117616.00C129393.33 117605.33 129382.67 117594.67 129372.00 117584.00C129361.00 117594.67 129350.00 117605.33 129339.00 117616.00C129296.33 117594.67 129253.67 117573.33 129211.00 117552.00C129200.33 117562.67 129189.67 117573.33 129179.00 117584.00C129168.00 117616.33 129157.00 117648.67 129146.00 117681.00C129135.33 117681.00 129124.67 117681.00 129114.00 117681.00C129092.67 117691.67 129071.33 117702.33 129050.00 117713.00C129039.33 117723.67 129028.67 117734.33 129018.00 117745.00C129007.33 117734.33 128996.67 117723.67 128986.00 117713.00C128986.00 117680.67 128986.00 117648.33 128986.00 117616.00C128964.33 117616.00 128942.67 117616.00 128921.00 117616.00C128921.00 117562.33 128921.00 117508.67 128921.00 117455.00C128889.00 117476.67 128857.00 117498.33 128825.00 117520.00C128814.33 117520.00 128803.67 117520.00 128793.00 117520.00C128782.33 117509.33 128771.67 117498.67 128761.00 117488.00C128761.00 117477.00 128761.00 117466.00 128761.00 117455.00C128720.84 117435.29 128680.72 117415.47 128640.75 117395.37C128637.83 117393.76 128634.50 117392.56 128631.84 117390.69C128621.23 117369.46 128610.61 117348.23 128600.00 117327.00C128589.33 117316.33 128578.67 117305.67 128568.00 117295.00C128557.33 117295.00 128546.67 117295.00 128536.00 117295.00C128525.00 117316.33 128514.00 117337.67 128503.00 117359.00C128492.33 117369.67 128481.67 117380.33 128471.00 117391.00C128439.00 117391.00 128407.00 117391.00 128375.00 117391.00C128342.57 117380.27 128310.09 117369.66 128277.69 117358.84C128256.34 117348.21 128235.05 117337.45 128213.67 117326.89C128181.44 117316.26 128149.22 117305.63 128117.00 117295.00C128117.00 117273.33 128117.00 117251.67 128117.00 117230.00C128095.67 117208.67 128074.33 117187.33 128053.00 117166.00C128053.00 117144.67 128053.00 117123.33 128053.00 117102.00C128031.67 117102.00 128010.33 117102.00 127989.00 117102.00C127956.67 117091.33 127924.33 117080.67 127892.00 117070.00C127849.33 117070.00 127806.67 117070.00 127764.00 117070.00C127753.33 117059.33 127742.67 117048.67 127732.00 117038.00C127732.00 117016.33 127732.00 116994.67 127732.00 116973.00C127689.00 116973.00 127646.00 116973.00 127603.00 116973.00C127592.33 116951.67 127581.67 116930.33 127571.00 116909.00C127549.67 116909.00 127528.33 116909.00 127507.00 116909.00C127485.23 116930.39 127463.54 116951.88 127441.72 116973.21C127399.15 117005.47 127356.57 117037.74 127314.00 117070.00C127314.00 117080.67 127314.00 117091.33 127314.00 117102.00C127335.33 117112.67 127356.67 117123.33 127378.00 117134.00C127378.00 117144.67 127378.00 117155.33 127378.00 117166.00C127345.67 117166.00 127313.33 117166.00 127281.00 117166.00C127270.33 117144.67 127259.67 117123.33 127249.00 117102.00C127227.67 117102.00 127206.33 117102.00 127185.00 117102.00C127174.33 117091.33 127163.67 117080.67 127153.00 117070.00C127131.67 117080.67 127110.33 117091.33 127089.00 117102.00C127024.67 117102.00 126960.33 117102.00 126896.00 117102.00C126896.00 117080.67 126896.00 117059.33 126896.00 117038.00C126874.33 117038.00 126852.67 117038.00 126831.00 117038.00C126809.67 117048.67 126788.33 117059.33 126767.00 117070.00C126745.67 117059.33 126724.33 117048.67 126703.00 117038.00C126649.33 117070.00 126595.67 117102.00 126542.00 117134.00C126531.33 117123.33 126520.67 117112.67 126510.00 117102.00C126520.67 117080.67 126531.33 117059.33 126542.00 117038.00C126531.33 117027.00 126520.67 117016.00 126510.00 117005.00C126499.33 117005.00 126488.67 117005.00 126478.00 117005.00C126445.67 117026.67 126413.33 117048.33 126381.00 117070.00C126359.67 117048.33 126338.33 117026.67 126317.00 117005.00C126284.67 117005.00 126252.33 117005.00 126220.00 117005.00C126209.33 116994.33 126198.67 116983.67 126188.00 116973.00C126188.00 116951.67 126188.00 116930.33 126188.00 116909.00C126177.33 116898.33 126166.67 116887.67 126156.00 116877.00C126124.00 116877.00 126092.00 116877.00 126060.00 116877.00C126049.33 116887.67 126038.67 116898.33 126028.00 116909.00C126016.77 116908.92 126005.52 116909.15 125994.31 116908.89C125930.20 116898.26 125866.10 116887.63 125802.00 116877.00C125791.33 116887.67 125780.67 116898.33 125770.00 116909.00C125770.00 116930.33 125770.00 116951.67 125770.00 116973.00C125705.67 116973.00 125641.33 116973.00 125577.00 116973.00C125555.67 116983.67 125534.33 116994.33 125513.00 117005.00C125491.67 116994.33 125470.33 116983.67 125449.00 116973.00C125416.67 116983.67 125384.33 116994.33 125352.00 117005.00C125320.00 116994.33 125288.00 116983.67 125256.00 116973.00C125223.67 116994.67 125191.33 117016.33 125159.00 117038.00C125137.67 117027.00 125116.33 117016.00 125095.00 117005.00C125073.67 117016.00 125052.33 117027.00 125031.00 117038.00C125009.33 117070.00 124987.67 117102.00 124966.00 117134.00C124944.67 117134.00 124923.33 117134.00 124902.00 117134.00C124891.33 117080.33 124880.67 117026.67 124870.00 116973.00C124859.33 116962.33 124848.67 116951.67 124838.00 116941.00C124784.33 116930.33 124730.67 116919.67 124677.00 116909.00C124666.33 116887.67 124655.67 116866.33 124645.00 116845.00C124602.00 116845.00 124559.00 116845.00 124516.00 116845.00C124505.33 116823.33 124494.67 116801.67 124484.00 116780.00C124452.00 116780.00 124420.00 116780.00 124388.00 116780.00C124355.67 116812.33 124323.33 116844.67 124291.00 116877.00C124269.67 116887.67 124248.33 116898.33 124227.00 116909.00C124216.33 116919.67 124205.67 116930.33 124195.00 116941.00C124184.33 116941.00 124173.67 116941.00 124163.00 116941.00C124163.00 116973.33 124163.00 117005.67 124163.00 117038.00C124152.33 117038.00 124141.67 117038.00 124131.00 117038.00C124120.00 117059.33 124109.00 117080.67 124098.00 117102.00C124087.23 117101.93 124076.41 117102.15 124065.67 117101.89C124033.78 117091.26 124001.89 117080.63 123970.00 117070.00C123937.67 117091.33 123905.33 117112.67 123873.00 117134.00C123873.00 117155.33 123873.00 117176.67 123873.00 117198.00C123862.33 117219.67 123851.67 117241.33 123841.00 117263.00C123798.00 117284.33 123755.00 117305.67 123712.00 117327.00C123712.00 117316.33 123712.00 117305.67 123712.00 117295.00C123690.67 117295.00 123669.33 117295.00 123648.00 117295.00C123637.33 117284.33 123626.67 117273.67 123616.00 117263.00C123594.67 117263.00 123573.33 117263.00 123552.00 117263.00C123552.00 117252.00 123552.00 117241.00 123552.00 117230.00C123562.67 117219.33 123573.33 117208.67 123584.00 117198.00C123584.00 117187.33 123584.00 117176.67 123584.00 117166.00C123551.67 117166.00 123519.33 117166.00 123487.00 117166.00C123444.26 117198.43 123401.44 117230.76 123358.75 117263.25C123348.17 117273.83 123337.58 117284.42 123327.00 117295.00C123284.00 117305.67 123241.00 117316.33 123198.00 117327.00C123166.00 117316.33 123134.00 117305.67 123102.00 117295.00C123091.00 117305.67 123080.00 117316.33 123069.00 117327.00C123069.00 117337.67 123069.00 117348.33 123069.00 117359.00C123101.33 117380.33 123133.67 117401.67 123166.00 117423.00C123166.00 117444.67 123166.00 117466.33 123166.00 117488.00C123155.21 117498.69 123144.59 117509.62 123133.69 117520.16C123112.12 117530.77 123090.56 117541.39 123069.00 117552.00C123047.67 117573.33 123026.33 117594.67 123005.00 117616.00C122983.64 117659.12 122962.17 117702.18 122940.89 117745.33C122930.26 117777.22 122919.63 117809.11 122909.00 117841.00C122876.67 117852.00 122844.33 117863.00 122812.00 117874.00C122801.33 117874.00 122790.67 117874.00 122780.00 117874.00C122758.67 117895.33 122737.33 117916.67 122716.00 117938.00C122705.33 117970.00 122694.67 118002.00 122684.00 118034.00C122673.00 118044.67 122662.00 118055.33 122651.00 118066.00C122619.00 118055.33 122587.00 118044.67 122555.00 118034.00C122544.33 118034.00 122533.67 118034.00 122523.00 118034.00C122501.67 118087.67 122480.33 118141.33 122459.00 118195.00C122426.67 118227.00 122394.33 118259.00 122362.00 118291.00C122351.33 118323.33 122340.67 118355.67 122330.00 118388.00C122319.33 118398.67 122308.67 118409.33 122298.00 118420.00C122265.67 118430.67 122233.33 118441.33 122201.00 118452.00C122179.67 118441.33 122158.33 118430.67 122137.00 118420.00C122126.33 118420.00 122115.67 118420.00 122105.00 118420.00C122083.67 118366.33 122062.33 118312.67 122041.00 118259.00C121965.67 118184.00 121890.33 118109.00 121815.00 118034.00C121804.33 118002.00 121793.67 117970.00 121783.00 117938.00C121783.00 117873.67 121783.00 117809.33 121783.00 117745.00C121772.33 117734.33 121761.67 117723.67 121751.00 117713.00C121740.23 117712.93 121729.41 117713.15 121718.67 117712.89C121686.78 117702.26 121654.89 117691.63 121623.00 117681.00C121601.33 117691.67 121579.67 117702.33 121558.00 117713.00C121547.33 117713.00 121536.67 117713.00 121526.00 117713.00C121515.33 117723.67 121504.67 117734.33 121494.00 117745.00C121504.67 117788.00 121515.33 117831.00 121526.00 117874.00C121515.33 117884.67 121504.67 117895.33 121494.00 117906.00C121494.00 117916.67 121494.00 117927.33 121494.00 117938.00C121483.33 117938.00 121472.67 117938.00 121462.00 117938.00C121451.33 117948.67 121440.67 117959.33 121430.00 117970.00C121408.33 117959.33 121386.67 117948.67 121365.00 117938.00C121279.33 117948.67 121193.67 117959.33 121108.00 117970.00C121076.00 117980.67 121044.00 117991.33 121012.00 118002.00C121012.00 118012.67 121012.00 118023.33 121012.00 118034.00C121001.00 118044.67 120990.00 118055.33 120979.00 118066.00C121011.33 118098.33 121043.67 118130.67 121076.00 118163.00C121065.33 118184.33 121054.67 118205.67 121044.00 118227.00C121033.33 118227.00 121022.67 118227.00 121012.00 118227.00C120979.67 118205.67 120947.33 118184.33 120915.00 118163.00C120883.00 118163.00 120851.00 118163.00 120819.00 118163.00C120797.15 118173.82 120775.19 118184.43 120753.42 118195.39C120721.50 118216.63 120689.64 118237.98 120657.69 118259.16C120636.46 118269.77 120615.23 118280.39 120594.00 118291.00C120583.00 118291.00 120572.00 118291.00 120561.00 118291.00C120539.67 118280.33 120518.33 118269.67 120497.00 118259.00C120475.67 118269.67 120454.33 118280.33 120433.00 118291.00C120413.29 118331.16 120393.47 118371.28 120373.37 118411.25C120371.92 118414.17 120370.46 118417.08 120369.00 118420.00C120347.33 118420.00 120325.67 118420.00 120304.00 118420.00C120272.00 118409.33 120240.00 118398.67 120208.00 118388.00C120175.67 118388.00 120143.33 118388.00 120111.00 118388.00C120089.67 118366.67 120068.33 118345.33 120047.00 118324.00C120025.67 118324.00 120004.33 118324.00 119983.00 118324.00C119967.62 118308.28 119952.63 118292.18 119936.64 118277.07C119930.42 118271.05 119924.21 118265.02 119918.00 118259.00C119907.33 118259.00 119896.67 118259.00 119886.00 118259.00C119854.00 118280.67 119822.00 118302.33 119790.00 118324.00C119746.89 118323.96 119703.76 118324.08 119660.65 118323.94C119596.44 118312.96 119532.22 118301.98 119468.00 118291.00C119457.33 118269.67 119446.67 118248.33 119436.00 118227.00C119361.00 118227.00 119286.00 118227.00 119211.00 118227.00C119200.33 118237.67 119189.67 118248.33 119179.00 118259.00C119157.67 118312.67 119136.33 118366.33 119115.00 118420.00C119090.40 118444.35 119065.53 118468.44 119041.11 118492.98C119012.07 118522.32 118983.04 118551.66 118954.00 118581.00C118825.33 118559.67 118696.67 118538.33 118568.00 118517.00C118514.33 118549.00 118460.67 118581.00 118407.00 118613.00C118374.89 118612.95 118342.76 118613.09 118310.66 118612.93C118257.10 118602.29 118203.55 118591.64 118150.00 118581.00C118117.57 118591.73 118085.09 118602.34 118052.69 118613.16C118031.46 118623.77 118010.23 118634.39 117989.00 118645.00C117978.21 118655.69 117967.59 118666.62 117956.69 118677.16C117935.46 118687.77 117914.23 118698.39 117893.00 118709.00C117871.28 118730.77 117849.44 118752.45 117827.80 118774.29C117774.53 118849.19 117721.27 118924.10 117668.00 118999.00C117635.67 119084.67 117603.33 119170.33 117571.00 119256.00C117560.33 119266.67 117549.67 119277.33 117539.00 119288.00C117517.67 119288.00 117496.33 119288.00 117475.00 119288.00C117442.67 119298.67 117410.33 119309.33 117378.00 119320.00C117367.33 119331.00 117356.67 119342.00 117346.00 119353.00C117345.92 119363.77 117346.16 119374.60 117345.88 119385.33C117313.92 119470.89 117281.96 119556.44 117250.00 119642.00C117217.67 119685.00 117185.33 119728.00 117153.00 119771.00C117142.33 119771.00 117131.67 119771.00 117121.00 119771.00C117056.64 119802.95 116992.22 119834.78 116928.00 119867.00C116928.00 119888.33 116928.00 119909.67 116928.00 119931.00C116949.33 119984.67 116970.67 120038.33 116992.00 120092.00C116981.33 120124.33 116970.67 120156.67 116960.00 120189.00C116970.67 120199.67 116981.33 120210.33 116992.00 120221.00C116992.00 120263.67 116992.00 120306.33 116992.00 120349.00C116949.29 120413.45 116906.49 120477.83 116863.84 120542.31C116842.56 120585.21 116821.28 120628.10 116800.00 120671.00C116789.00 120671.00 116778.00 120671.00 116767.00 120671.00C116767.00 120681.67 116767.00 120692.33 116767.00 120703.00C116724.33 120724.33 116681.67 120745.67 116639.00 120767.00C116617.33 120788.67 116595.67 120810.33 116574.00 120832.00C116434.67 120832.00 116295.33 120832.00 116156.00 120832.00C116145.33 120842.67 116134.67 120853.33 116124.00 120864.00C116134.67 120896.00 116145.33 120928.00 116156.00 120960.00C116145.33 120981.33 116134.67 121002.67 116124.00 121024.00C116038.33 121045.67 115952.67 121067.33 115867.00 121089.00C115856.33 121110.33 115845.67 121131.67 115835.00 121153.00C115835.00 121185.33 115835.00 121217.67 115835.00 121250.00C115824.24 121271.42 115813.64 121292.92 115802.79 121314.28C115770.53 121356.85 115738.26 121399.43 115706.00 121442.00C115674.00 121442.00 115642.00 121442.00 115610.00 121442.00C115567.00 121485.00 115524.00 121528.00 115481.00 121571.00C115459.67 121603.33 115438.33 121635.67 115417.00 121668.00C115417.00 121678.67 115417.00 121689.33 115417.00 121700.00C115406.33 121721.33 115395.67 121742.67 115385.00 121764.00C115385.00 121796.00 115385.00 121828.00 115385.00 121860.00C115363.33 121892.33 115341.67 121924.67 115320.00 121957.00C115309.33 122000.00 115298.67 122043.00 115288.00 122086.00C115266.67 122107.33 115245.33 122128.67 115224.00 122150.00C115224.00 122160.67 115224.00 122171.33 115224.00 122182.00C115213.33 122203.33 115202.67 122224.67 115192.00 122246.00C115202.97 122256.86 115213.73 122267.94 115224.82 122278.66C115278.21 122321.44 115331.61 122364.22 115385.00 122407.00C115406.33 122439.33 115427.67 122471.67 115449.00 122504.00C115449.00 122514.67 115449.00 122525.33 115449.00 122536.00C115427.67 122557.33 115406.33 122578.67 115385.00 122600.00C115374.23 122599.93 115363.41 122600.15 115352.67 122599.89C115256.01 122567.88 115159.32 122535.92 115062.67 122503.87C115009.45 122482.25 114956.22 122460.62 114903.00 122439.00C114903.00 122428.33 114903.00 122417.67 114903.00 122407.00C114884.25 122388.86 114865.49 122370.73 114847.17 122352.17C114822.65 122327.57 114798.40 122302.71 114774.00 122278.00C114741.67 122278.00 114709.33 122278.00 114677.00 122278.00C114677.00 122246.00 114677.00 122214.00 114677.00 122182.00C114645.00 122182.00 114613.00 122182.00 114581.00 122182.00C114591.67 122171.33 114602.33 122160.67 114613.00 122150.00C114602.33 122139.33 114591.67 122128.67 114581.00 122118.00C114570.33 122128.67 114559.67 122139.33 114549.00 122150.00C114516.67 122139.33 114484.33 122128.67 114452.00 122118.00C114473.67 122107.33 114495.33 122096.67 114517.00 122086.00C114517.00 122075.00 114517.00 122064.00 114517.00 122053.00C114506.00 122042.33 114495.00 122031.67 114484.00 122021.00C114473.33 121989.00 114462.67 121957.00 114452.00 121925.00C114441.33 121925.00 114430.67 121925.00 114420.00 121925.00C114420.00 121903.33 114420.00 121881.67 114420.00 121860.00C114388.00 121828.00 114356.00 121796.00 114324.00 121764.00C114313.33 121774.67 114302.67 121785.33 114292.00 121796.00C114292.00 121785.33 114292.00 121774.67 114292.00 121764.00C114259.67 121742.67 114227.33 121721.33 114195.00 121700.00C114195.00 121689.33 114195.00 121678.67 114195.00 121668.00C114163.00 121668.00 114131.00 121668.00 114099.00 121668.00C114088.33 121657.00 114077.67 121646.00 114067.00 121635.00C114045.33 121635.00 114023.67 121635.00 114002.00 121635.00C113980.67 121613.67 113959.33 121592.33 113938.00 121571.00C113895.00 121571.00 113852.00 121571.00 113809.00 121571.00C113787.67 121560.33 113766.33 121549.67 113745.00 121539.00C113734.33 121517.67 113723.67 121496.33 113713.00 121475.00C113691.67 121475.00 113670.33 121475.00 113649.00 121475.00C113649.00 121464.00 113649.00 121453.00 113649.00 121442.00C113638.00 121453.00 113627.00 121464.00 113616.00 121475.00C113605.33 121464.00 113594.67 121453.00 113584.00 121442.00C113562.67 121442.00 113541.33 121442.00 113520.00 121442.00C113520.00 121453.00 113520.00 121464.00 113520.00 121475.00C113498.67 121475.00 113477.33 121475.00 113456.00 121475.00C113445.00 121485.67 113434.00 121496.33 113423.00 121507.00C113412.33 121496.33 113401.67 121485.67 113391.00 121475.00C113359.00 121464.00 113327.00 121453.00 113295.00 121442.00C113295.00 121420.67 113295.00 121399.33 113295.00 121378.00C113284.33 121388.67 113273.67 121399.33 113263.00 121410.00C113244.75 121391.70 113226.49 121373.40 113207.82 121355.52C113204.55 121352.35 113201.27 121349.17 113198.00 121346.00C113187.33 121346.00 113176.67 121346.00 113166.00 121346.00C113166.00 121314.00 113166.00 121282.00 113166.00 121250.00C113123.33 121250.00 113080.67 121250.00 113038.00 121250.00C113016.33 121239.00 112994.67 121228.00 112973.00 121217.00C112941.00 121228.00 112909.00 121239.00 112877.00 121250.00C112877.00 121239.00 112877.00 121228.00 112877.00 121217.00C112866.33 121206.33 112855.67 121195.67 112845.00 121185.00C112845.00 121163.67 112845.00 121142.33 112845.00 121121.00C112812.67 121121.00 112780.33 121121.00 112748.00 121121.00C112737.33 121110.33 112726.67 121099.67 112716.00 121089.00C112705.33 121089.00 112694.67 121089.00 112684.00 121089.00C112684.00 121078.33 112684.00 121067.67 112684.00 121057.00C112673.33 121057.00 112662.67 121057.00 112652.00 121057.00C112662.67 121046.00 112673.33 121035.00 112684.00 121024.00C112673.33 121024.00 112662.67 121024.00 112652.00 121024.00C112641.33 121013.33 112630.67 121002.67 112620.00 120992.00C112587.67 120992.00 112555.33 120992.00 112523.00 120992.00C112512.33 120981.33 112501.67 120970.67 112491.00 120960.00C112480.33 120960.00 112469.67 120960.00 112459.00 120960.00C112448.33 120970.67 112437.67 120981.33 112427.00 120992.00C112405.33 120970.67 112383.67 120949.33 112362.00 120928.00C112351.33 120938.67 112340.67 120949.33 112330.00 120960.00C112308.67 120960.00 112287.33 120960.00 112266.00 120960.00C112255.33 120949.33 112244.67 120938.67 112234.00 120928.00C112234.00 120917.33 112234.00 120906.67 112234.00 120896.00C112223.23 120895.93 112212.41 120896.15 112201.67 120895.89C112169.44 120885.26 112137.22 120874.63 112105.00 120864.00C112073.00 120864.00 112041.00 120864.00 112009.00 120864.00C111998.33 120853.33 111987.67 120842.67 111977.00 120832.00C111944.67 120832.00 111912.33 120832.00 111880.00 120832.00C111880.00 120821.00 111880.00 120810.00 111880.00 120799.00C111858.67 120799.00 111837.33 120799.00 111816.00 120799.00C111805.20 120810.02 111794.60 120821.30 111783.69 120832.16C111762.12 120842.77 111740.56 120853.39 111719.00 120864.00C111719.00 120853.33 111719.00 120842.67 111719.00 120832.00C111697.67 120832.00 111676.33 120832.00 111655.00 120832.00C111633.67 120821.00 111612.33 120810.00 111591.00 120799.00C111580.33 120799.00 111569.67 120799.00 111559.00 120799.00C111537.33 120810.00 111515.67 120821.00 111494.00 120832.00C111440.33 120799.67 111386.67 120767.33 111333.00 120735.00C111322.33 120745.67 111311.67 120756.33 111301.00 120767.00C111279.67 120745.67 111258.33 120724.33 111237.00 120703.00C111247.67 120703.00 111258.33 120703.00 111269.00 120703.00C111258.33 120692.33 111247.67 120681.67 111237.00 120671.00C111226.33 120681.67 111215.67 120692.33 111205.00 120703.00C111194.33 120703.00 111183.67 120703.00 111173.00 120703.00C111162.33 120681.67 111151.67 120660.33 111141.00 120639.00C111130.00 120649.67 111119.00 120660.33 111108.00 120671.00C111108.00 120660.33 111108.00 120649.67 111108.00 120639.00C111097.33 120639.00 111086.67 120639.00 111076.00 120639.00C111076.00 120628.33 111076.00 120617.67 111076.00 120607.00C111086.67 120607.00 111097.33 120607.00 111108.00 120607.00C111076.00 120607.00 111044.00 120607.00 111012.00 120607.00C110990.67 120585.33 110969.33 120563.67 110948.00 120542.00C110937.33 120552.67 110926.67 120563.33 110916.00 120574.00C110894.33 120563.33 110872.67 120552.67 110851.00 120542.00C110861.67 120542.00 110872.33 120542.00 110883.00 120542.00C110861.67 120531.33 110840.33 120520.67 110819.00 120510.00C110829.67 120510.00 110840.33 120510.00 110851.00 120510.00C110808.33 120488.67 110765.67 120467.33 110723.00 120446.00C110690.67 120446.00 110658.33 120446.00 110626.00 120446.00C110626.00 120435.33 110626.00 120424.67 110626.00 120414.00C110636.67 120403.00 110647.33 120392.00 110658.00 120381.00C110636.67 120381.00 110615.33 120381.00 110594.00 120381.00C110594.00 120392.00 110594.00 120403.00 110594.00 120414.00C110583.33 120414.00 110572.67 120414.00 110562.00 120414.00C110540.33 120392.33 110518.67 120370.67 110497.00 120349.00C110497.00 120338.33 110497.00 120327.67 110497.00 120317.00C110486.33 120317.00 110475.67 120317.00 110465.00 120317.00C110454.33 120295.67 110443.67 120274.33 110433.00 120253.00C110422.33 120253.00 110411.67 120253.00 110401.00 120253.00C110401.00 120242.33 110401.00 120231.67 110401.00 120221.00C110390.33 120199.33 110379.67 120177.67 110369.00 120156.00C110347.67 120156.00 110326.33 120156.00 110305.00 120156.00C110294.00 120134.67 110283.00 120113.33 110272.00 120092.00C110261.33 120092.00 110250.67 120092.00 110240.00 120092.00C110240.00 120081.33 110240.00 120070.67 110240.00 120060.00C110218.67 120060.00 110197.33 120060.00 110176.00 120060.00C110165.33 120049.33 110154.67 120038.67 110144.00 120028.00C110144.00 120038.67 110144.00 120049.33 110144.00 120060.00C110122.67 120060.00 110101.33 120060.00 110080.00 120060.00C110061.25 120041.86 110042.49 120023.73 110024.17 120005.17C110021.11 120002.11 110018.06 119999.06 110015.00 119996.00C110025.67 120017.33 110036.33 120038.67 110047.00 120060.00C110025.67 120060.00 110004.33 120060.00 109983.00 120060.00C109972.33 120049.33 109961.67 120038.67 109951.00 120028.00C109929.67 120028.00 109908.33 120028.00 109887.00 120028.00C109887.00 120017.33 109887.00 120006.67 109887.00 119996.00C109868.25 120014.14 109849.49 120032.27 109831.17 120050.83C109817.44 120064.56 109803.72 120078.28 109790.00 120092.00C109790.00 120081.33 109790.00 120070.67 109790.00 120060.00C109800.67 120049.33 109811.33 120038.67 109822.00 120028.00C109811.33 120017.33 109800.67 120006.67 109790.00 119996.00C109779.33 119996.00 109768.67 119996.00 109758.00 119996.00C109736.67 119985.00 109715.33 119974.00 109694.00 119963.00C109694.00 119974.00 109694.00 119985.00 109694.00 119996.00C109694.00 119985.00 109694.00 119974.00 109694.00 119963.00C109683.00 119952.33 109672.00 119941.67 109661.00 119931.00C109650.33 119931.00 109639.67 119931.00 109629.00 119931.00C109618.33 119920.33 109607.67 119909.67 109597.00 119899.00C109586.33 119909.67 109575.67 119920.33 109565.00 119931.00C109543.67 119931.00 109522.33 119931.00 109501.00 119931.00C109490.33 119920.33 109479.67 119909.67 109469.00 119899.00C109458.00 119899.00 109447.00 119899.00 109436.00 119899.00C109436.00 119888.33 109436.00 119877.67 109436.00 119867.00C109447.00 119867.00 109458.00 119867.00 109469.00 119867.00C109458.00 119867.00 109447.00 119867.00 109436.00 119867.00C109414.67 119845.67 109393.33 119824.33 109372.00 119803.00C109382.67 119803.00 109393.33 119803.00 109404.00 119803.00C109393.33 119792.33 109382.67 119781.67 109372.00 119771.00C109372.00 119749.33 109372.00 119727.67 109372.00 119706.00C109361.33 119695.33 109350.67 119684.67 109340.00 119674.00C109340.00 119684.67 109340.00 119695.33 109340.00 119706.00C109318.67 119695.33 109297.33 119684.67 109276.00 119674.00C109265.33 119674.00 109254.67 119674.00 109244.00 119674.00C109233.00 119663.33 109222.00 119652.67 109211.00 119642.00C109200.33 119642.00 109189.67 119642.00 109179.00 119642.00C109157.67 119620.67 109136.33 119599.33 109115.00 119578.00C109104.33 119578.00 109093.67 119578.00 109083.00 119578.00C109083.00 119556.33 109083.00 119534.67 109083.00 119513.00C109072.33 119502.33 109061.67 119491.67 109051.00 119481.00C109051.00 119470.33 109051.00 119459.67 109051.00 119449.00C109040.00 119449.00 109029.00 119449.00 109018.00 119449.00C109018.00 119438.33 109018.00 119427.67 109018.00 119417.00C109007.33 119417.00 108996.67 119417.00 108986.00 119417.00C108964.67 119427.67 108943.33 119438.33 108922.00 119449.00C108922.00 119438.33 108922.00 119427.67 108922.00 119417.00C108911.33 119427.67 108900.67 119438.33 108890.00 119449.00C108890.00 119438.33 108890.00 119427.67 108890.00 119417.00C108868.33 119406.33 108846.67 119395.67 108825.00 119385.00C108782.33 119385.00 108739.67 119385.00 108697.00 119385.00C108675.67 119363.33 108654.33 119341.67 108633.00 119320.00C108633.00 119331.00 108633.00 119342.00 108633.00 119353.00C108611.33 119342.00 108589.67 119331.00 108568.00 119320.00C108536.00 119320.00 108504.00 119320.00 108472.00 119320.00C108472.00 119341.67 108472.00 119363.33 108472.00 119385.00C108450.67 119385.00 108429.33 119385.00 108408.00 119385.00C108383.65 119372.90 108359.12 119361.16 108334.89 119348.82C108316.26 119339.21 108297.63 119329.61 108279.00 119320.00C108279.00 119309.33 108279.00 119298.67 108279.00 119288.00C108268.33 119288.00 108257.67 119288.00 108247.00 119288.00C108247.00 119277.33 108247.00 119266.67 108247.00 119256.00C108225.33 119256.00 108203.67 119256.00 108182.00 119256.00C108193.00 119256.00 108204.00 119256.00 108215.00 119256.00C108215.00 119234.67 108215.00 119213.33 108215.00 119192.00C108182.67 119192.00 108150.33 119192.00 108118.00 119192.00C108128.67 119181.33 108139.33 119170.67 108150.00 119160.00C108128.67 119160.00 108107.33 119160.00 108086.00 119160.00C108086.00 119149.00 108086.00 119138.00 108086.00 119127.00C108053.67 119095.00 108021.33 119063.00 107989.00 119031.00C107989.00 119020.33 107989.00 119009.67 107989.00 118999.00C107967.67 118988.33 107946.33 118977.67 107925.00 118967.00C107925.00 118945.33 107925.00 118923.67 107925.00 118902.00C107903.67 118891.33 107882.33 118880.67 107861.00 118870.00C107861.00 118859.33 107861.00 118848.67 107861.00 118838.00C107828.67 118773.67 107796.33 118709.33 107764.00 118645.00C107721.33 118645.00 107678.67 118645.00 107636.00 118645.00C107592.88 118623.64 107549.82 118602.17 107506.67 118580.89C107474.78 118570.26 107442.89 118559.63 107411.00 118549.00C107411.00 118538.33 107411.00 118527.67 107411.00 118517.00C107389.33 118506.00 107367.67 118495.00 107346.00 118484.00C107314.00 118484.00 107282.00 118484.00 107250.00 118484.00C107250.00 118495.00 107250.00 118506.00 107250.00 118517.00C107228.49 118527.82 107206.86 118538.45 107185.41 118549.39C107153.21 118570.69 107120.88 118591.85 107088.75 118613.25C107078.17 118623.83 107067.58 118634.42 107057.00 118645.00C107014.00 118645.00 106971.00 118645.00 106928.00 118645.00C106906.67 118655.67 106885.33 118666.33 106864.00 118677.00C106853.33 118666.33 106842.67 118655.67 106832.00 118645.00C106778.33 118634.33 106724.67 118623.67 106671.00 118613.00C106660.23 118613.09 106649.40 118612.83 106638.67 118613.13C106585.12 118634.42 106531.56 118655.71 106478.00 118677.00C106456.67 118666.33 106435.33 118655.67 106414.00 118645.00C106382.00 118645.00 106350.00 118645.00 106318.00 118645.00C106296.33 118634.33 106274.67 118623.67 106253.00 118613.00C106221.00 118613.00 106189.00 118613.00 106157.00 118613.00C106114.00 118591.67 106071.00 118570.33 106028.00 118549.00C106006.67 118559.67 105985.33 118570.33 105964.00 118581.00C105942.67 118570.33 105921.33 118559.67 105900.00 118549.00C105889.00 118549.00 105878.00 118549.00 105867.00 118549.00C105867.00 118538.33 105867.00 118527.67 105867.00 118517.00C105824.33 118495.33 105781.67 118473.67 105739.00 118452.00C105674.67 118441.33 105610.33 118430.67 105546.00 118420.00C105546.00 118388.00 105546.00 118356.00 105546.00 118324.00C105535.33 118313.00 105524.67 118302.00 105514.00 118291.00C105481.67 118291.00 105449.33 118291.00 105417.00 118291.00C105427.67 118269.67 105438.33 118248.33 105449.00 118227.00C105438.33 118205.67 105427.67 118184.33 105417.00 118163.00C105395.67 118141.67 105374.33 118120.33 105353.00 118099.00C105353.00 118077.33 105353.00 118055.67 105353.00 118034.00C105342.33 118012.67 105331.67 117991.33 105321.00 117970.00C105321.00 117959.33 105321.00 117948.67 105321.00 117938.00C105353.00 117895.00 105385.00 117852.00 105417.00 117809.00C105460.00 117798.33 105503.00 117787.67 105546.00 117777.00C105556.73 117744.90 105567.35 117712.75 105578.16 117680.69C105588.77 117659.12 105599.39 117637.56 105610.00 117616.00C105642.33 117594.67 105674.67 117573.33 105707.00 117552.00C105717.67 117509.00 105728.33 117466.00 105739.00 117423.00C105739.00 117412.33 105739.00 117401.67 105739.00 117391.00C105749.67 117380.33 105760.33 117369.67 105771.00 117359.00C105814.11 117358.96 105857.24 117359.08 105900.35 117358.94C105964.23 117348.29 106028.12 117337.65 106092.00 117327.00C106113.67 117284.00 106135.33 117241.00 106157.00 117198.00C106189.00 117166.00 106221.00 117134.00 106253.00 117102.00C106263.67 117069.67 106274.33 117037.33 106285.00 117005.00C106274.33 116994.33 106263.67 116983.67 106253.00 116973.00C106253.00 116962.33 106253.00 116951.67 106253.00 116941.00C106220.89 116919.63 106188.84 116898.15 106156.69 116876.84C106134.89 116866.18 106113.19 116855.30 106091.34 116844.77C106059.56 116833.85 106027.78 116822.92 105996.00 116812.00C105910.33 116812.00 105824.67 116812.00 105739.00 116812.00C105664.00 116790.67 105589.00 116769.33 105514.00 116748.00C105470.89 116748.05 105427.76 116747.91 105384.66 116748.07C105331.10 116758.71 105277.55 116769.36 105224.00 116780.00C105170.67 116812.33 105117.33 116844.67 105064.00 116877.00C105053.00 116919.67 105042.00 116962.33 105031.00 117005.00C105020.33 117005.00 105009.67 117005.00 104999.00 117005.00C104977.67 116994.33 104956.33 116983.67 104935.00 116973.00C104892.00 116973.00 104849.00 116973.00 104806.00 116973.00C104752.67 116919.33 104699.33 116865.67 104646.00 116812.00C104646.00 116747.67 104646.00 116683.33 104646.00 116619.00C104635.00 116576.33 104624.00 116533.67 104613.00 116491.00C104613.00 116448.00 104613.00 116405.00 104613.00 116362.00C104581.00 116265.67 104549.00 116169.33 104517.00 116073.00C104516.96 116040.55 104517.08 116008.09 104516.94 115975.65C104506.24 115911.33 104495.68 115846.97 104484.89 115782.67C104474.26 115750.78 104463.63 115718.89 104453.00 115687.00C104463.67 115665.67 104474.33 115644.33 104485.00 115623.00C104506.33 115612.33 104527.67 115601.67 104549.00 115591.00C104559.67 115580.00 104570.33 115569.00 104581.00 115558.00C104634.67 115558.00 104688.33 115558.00 104742.00 115558.00C104763.33 115536.67 104784.67 115515.33 104806.00 115494.00C104806.00 115397.67 104806.00 115301.33 104806.00 115205.00C104795.33 115183.33 104784.67 115161.67 104774.00 115140.00C104763.31 115129.21 104752.38 115118.59 104741.84 115107.69C104720.56 115065.12 104699.28 115022.56 104678.00 114980.00C104624.33 114947.67 104570.67 114915.33 104517.00 114883.00C104527.67 114851.00 104538.33 114819.00 104549.00 114787.00C104538.33 114776.33 104527.67 114765.67 104517.00 114755.00C104517.00 114744.00 104517.00 114733.00 104517.00 114722.00C104495.67 114700.67 104474.33 114679.33 104453.00 114658.00C104463.67 114604.33 104474.33 114550.67 104485.00 114497.00C104474.33 114475.67 104463.67 114454.33 104453.00 114433.00C104453.00 114422.33 104453.00 114411.67 104453.00 114401.00C104431.33 114379.67 104409.67 114358.33 104388.00 114337.00C104377.33 114315.33 104366.67 114293.67 104356.00 114272.00C104366.67 114261.33 104377.33 114250.67 104388.00 114240.00C104366.67 114218.67 104345.33 114197.33 104324.00 114176.00C104334.67 114165.33 104345.33 114154.67 104356.00 114144.00C104345.33 114144.00 104334.67 114144.00 104324.00 114144.00C104313.33 114122.33 104302.67 114100.67 104292.00 114079.00C104281.33 114079.00 104270.67 114079.00 104260.00 114079.00C104241.75 114060.70 104223.49 114042.40 104204.82 114024.52C104201.55 114021.35 104198.27 114018.17 104195.00 114015.00C104195.00 114004.33 104195.00 113993.67 104195.00 113983.00C104173.67 113972.33 104152.33 113961.67 104131.00 113951.00C104120.33 113940.33 104109.67 113929.67 104099.00 113919.00C104099.00 113929.67 104099.00 113940.33 104099.00 113951.00C104067.00 113929.33 104035.00 113907.67 104003.00 113886.00C104013.67 113875.33 104024.33 113864.67 104035.00 113854.00C104024.33 113843.33 104013.67 113832.67 104003.00 113822.00C104003.00 113811.33 104003.00 113800.67 104003.00 113790.00C103992.00 113790.00 103981.00 113790.00 103970.00 113790.00C103981.00 113779.33 103992.00 113768.67 104003.00 113758.00C104003.00 113747.33 104003.00 113736.67 104003.00 113726.00C103992.00 113715.33 103981.00 113704.67 103970.00 113694.00C103981.00 113683.00 103992.00 113672.00 104003.00 113661.00C103992.00 113661.00 103981.00 113661.00 103970.00 113661.00C103970.00 113639.67 103970.00 113618.33 103970.00 113597.00C103959.33 113575.67 103948.67 113554.33 103938.00 113533.00C103938.00 113511.33 103938.00 113489.67 103938.00 113468.00C103948.67 113457.33 103959.33 113446.67 103970.00 113436.00C103959.33 113436.00 103948.67 113436.00 103938.00 113436.00C103948.67 113425.33 103959.33 113414.67 103970.00 113404.00C103970.00 113393.33 103970.00 113382.67 103970.00 113372.00C103981.00 113361.33 103992.00 113350.67 104003.00 113340.00C104003.00 113286.33 104003.00 113232.67 104003.00 113179.00C103992.00 113168.33 103981.00 113157.67 103970.00 113147.00C103981.00 113136.33 103992.00 113125.67 104003.00 113115.00C103992.00 113104.33 103981.00 113093.67 103970.00 113083.00C103970.00 113061.33 103970.00 113039.67 103970.00 113018.00C103981.00 113018.00 103992.00 113018.00 104003.00 113018.00C103992.00 113018.00 103981.00 113018.00 103970.00 113018.00C103970.00 113007.33 103970.00 112996.67 103970.00 112986.00C103981.00 112964.67 103992.00 112943.33 104003.00 112922.00C104003.00 112911.33 104003.00 112900.67 104003.00 112890.00C104003.00 112900.67 104003.00 112911.33 104003.00 112922.00C104003.00 112900.67 104003.00 112879.33 104003.00 112858.00z"},"br-12":{"name":"Mato Grosso do Sul","path":"M81302.00 122857.00C81538.09 122363.79 81774.21 121870.59 82010.28 121377.37C82170.86 121023.92 82331.43 120670.46 82492.00 120317.00C82610.00 120317.00 82728.00 120317.00 82846.00 120317.00C82867.33 120285.00 82888.67 120253.00 82910.00 120221.00C82899.33 120221.00 82888.67 120221.00 82878.00 120221.00C82888.67 120199.33 82899.33 120177.67 82910.00 120156.00C82877.79 120123.87 82845.87 120091.45 82813.00 120060.00C82802.33 120060.00 82791.67 120060.00 82781.00 120060.00C82781.00 119931.33 82781.00 119802.67 82781.00 119674.00C82706.00 119674.00 82631.00 119674.00 82556.00 119674.00C82888.33 118602.33 83220.67 117530.67 83553.00 116459.00C83713.67 116448.33 83874.33 116437.67 84035.00 116427.00C84035.00 116416.00 84035.00 116405.00 84035.00 116394.00C84013.67 116383.33 83992.33 116372.67 83971.00 116362.00C83960.34 116351.33 83949.66 116340.67 83939.00 116330.00C83939.00 116308.67 83939.00 116287.33 83939.00 116266.00C83928.34 116255.33 83917.66 116244.67 83907.00 116234.00C83896.34 116244.67 83885.66 116255.33 83875.00 116266.00C83853.34 116255.33 83831.66 116244.67 83810.00 116234.00C83810.00 116244.67 83810.00 116255.33 83810.00 116266.00C83692.33 116158.67 83574.67 116051.33 83457.00 115944.00C83445.66 115899.53 83433.84 115855.17 83422.81 115810.61C83401.88 115715.74 83380.94 115620.87 83360.00 115526.00C83167.00 115161.67 82974.00 114797.33 82781.00 114433.00C82845.33 114433.00 82909.67 114433.00 82974.00 114433.00C82974.00 114401.00 82974.00 114369.00 82974.00 114337.00C82909.67 114283.33 82845.33 114229.67 82781.00 114176.00C82802.67 114111.67 82824.33 114047.33 82846.00 113983.00C82824.33 113961.67 82802.67 113940.33 82781.00 113919.00C82770.33 113919.00 82759.67 113919.00 82749.00 113919.00C82727.67 113876.00 82706.33 113833.00 82685.00 113790.00C82674.33 113790.00 82663.67 113790.00 82653.00 113790.00C82631.33 113736.33 82609.67 113682.67 82588.00 113629.00C82566.67 113618.33 82545.33 113607.67 82524.00 113597.00C82513.33 113575.67 82502.67 113554.33 82492.00 113533.00C82502.67 113511.33 82513.33 113489.67 82524.00 113468.00C82524.00 113436.00 82524.00 113404.00 82524.00 113372.00C82513.34 113382.67 82502.66 113393.33 82492.00 113404.00C82492.00 113393.33 82492.00 113382.67 82492.00 113372.00C82502.67 113350.67 82513.33 113329.33 82524.00 113308.00C82502.67 113308.00 82481.33 113308.00 82460.00 113308.00C82470.67 113308.00 82481.33 113308.00 82492.00 113308.00C82502.67 113286.33 82513.33 113264.67 82524.00 113243.00C82502.67 113254.00 82481.33 113265.00 82460.00 113276.00C82460.00 113265.00 82460.00 113254.00 82460.00 113243.00C82470.66 113232.33 82481.34 113221.67 82492.00 113211.00C82492.00 113200.33 82492.00 113189.67 82492.00 113179.00C82470.67 113168.33 82449.33 113157.67 82428.00 113147.00C82428.00 113136.33 82428.00 113125.67 82428.00 113115.00C82439.30 113115.23 82450.67 113114.52 82461.93 113115.38C82514.95 113125.92 82567.98 113136.46 82621.00 113147.00C82642.33 113104.00 82663.67 113061.00 82685.00 113018.00C82706.33 113007.33 82727.67 112996.67 82749.00 112986.00C82770.34 113007.33 82791.66 113028.67 82813.00 113050.00C82813.00 113093.00 82813.00 113136.00 82813.00 113179.00C82834.66 113189.67 82856.34 113200.33 82878.00 113211.00C82878.00 113254.00 82878.00 113297.00 82878.00 113340.00C82888.67 113382.67 82899.33 113425.33 82910.00 113468.00C82920.67 113468.00 82931.33 113468.00 82942.00 113468.00C82942.00 113489.67 82942.00 113511.33 82942.00 113533.00C82952.67 113533.00 82963.33 113533.00 82974.00 113533.00C82974.00 113565.00 82974.00 113597.00 82974.00 113629.00C82984.66 113639.67 82995.34 113650.33 83006.00 113661.00C83006.00 113672.00 83006.00 113683.00 83006.00 113694.00C83017.00 113694.00 83028.00 113694.00 83039.00 113694.00C83017.08 113715.08 82995.40 113736.39 82974.00 113758.00C82974.00 113790.00 82974.00 113822.00 82974.00 113854.00C82963.34 113864.67 82952.66 113875.33 82942.00 113886.00C82963.33 113897.00 82984.67 113908.00 83006.00 113919.00C83006.00 113929.67 83006.00 113940.33 83006.00 113951.00C83017.00 113951.00 83028.00 113951.00 83039.00 113951.00C83039.00 113961.67 83039.00 113972.33 83039.00 113983.00C83071.00 113972.33 83103.00 113961.67 83135.00 113951.00C83135.00 113940.33 83135.00 113929.67 83135.00 113919.00C83145.67 113919.00 83156.33 113919.00 83167.00 113919.00C83188.67 113940.33 83210.33 113961.67 83232.00 113983.00C83242.67 114004.33 83253.33 114025.67 83264.00 114047.00C83274.66 114057.67 83285.34 114068.33 83296.00 114079.00C83285.33 114079.00 83274.67 114079.00 83264.00 114079.00C83274.67 114100.67 83285.33 114122.33 83296.00 114144.00C83317.33 114154.67 83338.67 114165.33 83360.00 114176.00C83349.34 114186.67 83338.66 114197.33 83328.00 114208.00C83317.33 114208.00 83306.67 114208.00 83296.00 114208.00C83306.67 114240.00 83317.33 114272.00 83328.00 114304.00C83328.00 114315.00 83328.00 114326.00 83328.00 114337.00C83371.00 114326.00 83414.00 114315.00 83457.00 114304.00C83467.67 114336.33 83478.33 114368.67 83489.00 114401.00C83510.33 114401.00 83531.67 114401.00 83553.00 114401.00C83564.07 114411.84 83574.71 114423.17 83586.04 114433.69C83618.03 114454.79 83650.01 114475.90 83682.00 114497.00C83671.00 114518.67 83660.00 114540.33 83649.00 114562.00C83692.00 114583.33 83735.00 114604.67 83778.00 114626.00C83831.67 114615.33 83885.33 114604.67 83939.00 114594.00C83939.00 114626.00 83939.00 114658.00 83939.00 114690.00C83960.34 114722.33 83981.66 114754.67 84003.00 114787.00C84024.66 114797.67 84046.34 114808.33 84068.00 114819.00C84078.67 114797.67 84089.33 114776.33 84100.00 114755.00C84089.33 114722.67 84078.67 114690.33 84068.00 114658.00C84089.33 114658.00 84110.67 114658.00 84132.00 114658.00C84153.33 114626.00 84174.67 114594.00 84196.00 114562.00C84217.33 114572.67 84238.67 114583.33 84260.00 114594.00C84260.00 114583.33 84260.00 114572.67 84260.00 114562.00C84271.00 114551.33 84282.00 114540.67 84293.00 114530.00C84293.00 114519.00 84293.00 114508.00 84293.00 114497.00C84314.33 114508.00 84335.67 114519.00 84357.00 114530.00C84378.34 114497.67 84399.66 114465.33 84421.00 114433.00C84431.67 114433.00 84442.33 114433.00 84453.00 114433.00C84474.41 114454.59 84496.07 114475.94 84518.00 114497.00C84528.66 114486.33 84539.34 114475.67 84550.00 114465.00C84560.66 114475.67 84571.34 114486.33 84582.00 114497.00C84582.00 114486.33 84582.00 114475.67 84582.00 114465.00C84603.33 114465.00 84624.67 114465.00 84646.00 114465.00C84646.00 114454.33 84646.00 114443.67 84646.00 114433.00C84667.66 114422.33 84689.34 114411.67 84711.00 114401.00C84721.66 114390.33 84732.34 114379.67 84743.00 114369.00C84753.66 114379.67 84764.34 114390.33 84775.00 114401.00C84785.66 114390.33 84796.34 114379.67 84807.00 114369.00C84817.67 114369.00 84828.33 114369.00 84839.00 114369.00C84828.34 114379.67 84817.66 114390.33 84807.00 114401.00C84817.66 114411.67 84828.34 114422.33 84839.00 114433.00C84839.00 114411.67 84839.00 114390.33 84839.00 114369.00C84871.33 114379.67 84903.67 114390.33 84936.00 114401.00C84957.33 114390.33 84978.67 114379.67 85000.00 114369.00C85032.00 114369.00 85064.00 114369.00 85096.00 114369.00C85096.00 114358.33 85096.00 114347.67 85096.00 114337.00C85074.67 114337.00 85053.33 114337.00 85032.00 114337.00C85021.33 114315.33 85010.67 114293.67 85000.00 114272.00C85010.66 114282.67 85021.34 114293.33 85032.00 114304.00C85053.34 114282.67 85074.66 114261.33 85096.00 114240.00C85107.00 114250.67 85118.00 114261.33 85129.00 114272.00C85129.00 114261.33 85129.00 114250.67 85129.00 114240.00C85171.67 114240.00 85214.33 114240.00 85257.00 114240.00C85289.33 114229.33 85321.67 114218.67 85354.00 114208.00C85386.00 114208.00 85418.00 114208.00 85450.00 114208.00C85471.34 114186.67 85492.66 114165.33 85514.00 114144.00C85557.00 114165.33 85600.00 114186.67 85643.00 114208.00C85643.00 114197.33 85643.00 114186.67 85643.00 114176.00C85675.00 114176.00 85707.00 114176.00 85739.00 114176.00C85739.00 114143.67 85739.00 114111.33 85739.00 114079.00C85760.66 114068.33 85782.34 114057.67 85804.00 114047.00C85814.67 114025.67 85825.33 114004.33 85836.00 113983.00C85857.33 113983.00 85878.67 113983.00 85900.00 113983.00C85910.66 113972.33 85921.34 113961.67 85932.00 113951.00C85943.00 113961.67 85954.00 113972.33 85965.00 113983.00C85975.67 113983.00 85986.33 113983.00 85997.00 113983.00C86007.67 113918.67 86018.33 113854.33 86029.00 113790.00C86050.33 113790.00 86071.67 113790.00 86093.00 113790.00C86093.00 113779.33 86093.00 113768.67 86093.00 113758.00C86103.67 113736.67 86114.33 113715.33 86125.00 113694.00C86146.67 113694.00 86168.33 113694.00 86190.00 113694.00C86211.33 113672.33 86232.67 113650.67 86254.00 113629.00C86264.67 113597.00 86275.33 113565.00 86286.00 113533.00C86318.33 113490.00 86350.67 113447.00 86383.00 113404.00C86383.00 113393.33 86383.00 113382.67 86383.00 113372.00C86361.34 113382.67 86339.66 113393.33 86318.00 113404.00C86307.34 113393.33 86296.66 113382.67 86286.00 113372.00C86286.00 113361.33 86286.00 113350.67 86286.00 113340.00C86296.66 113329.33 86307.34 113318.67 86318.00 113308.00C86307.33 113286.33 86296.67 113264.67 86286.00 113243.00C86296.67 113243.00 86307.33 113243.00 86318.00 113243.00C86328.67 113221.67 86339.33 113200.33 86350.00 113179.00C86371.67 113179.00 86393.33 113179.00 86415.00 113179.00C86436.33 113147.00 86457.67 113115.00 86479.00 113083.00C86511.10 113071.94 86543.23 113060.98 86575.31 113049.85C86596.87 113039.23 86618.44 113028.62 86640.00 113018.00C86661.33 113028.67 86682.67 113039.33 86704.00 113050.00C86725.33 113039.33 86746.67 113028.67 86768.00 113018.00C86779.00 112986.00 86790.00 112954.00 86801.00 112922.00C86811.67 112922.00 86822.33 112922.00 86833.00 112922.00C86843.67 112900.67 86854.33 112879.33 86865.00 112858.00C86854.33 112847.00 86843.67 112836.00 86833.00 112825.00C86843.67 112803.67 86854.33 112782.33 86865.00 112761.00C86875.66 112771.67 86886.34 112782.33 86897.00 112793.00C86907.66 112782.33 86918.34 112771.67 86929.00 112761.00C86918.33 112739.67 86907.67 112718.33 86897.00 112697.00C86907.66 112686.33 86918.34 112675.67 86929.00 112665.00C86950.33 112665.00 86971.67 112665.00 86993.00 112665.00C87004.00 112654.00 87015.00 112643.00 87026.00 112632.00C87026.00 112621.33 87026.00 112610.67 87026.00 112600.00C87004.34 112589.33 86982.66 112578.67 86961.00 112568.00C86971.66 112557.33 86982.34 112546.67 86993.00 112536.00C87004.00 112536.00 87015.00 112536.00 87026.00 112536.00C87036.66 112525.33 87047.34 112514.67 87058.00 112504.00C87047.34 112493.33 87036.66 112482.67 87026.00 112472.00C87015.00 112472.00 87004.00 112472.00 86993.00 112472.00C86971.67 112461.33 86950.33 112450.67 86929.00 112440.00C86950.33 112429.00 86971.67 112418.00 86993.00 112407.00C86993.00 112375.00 86993.00 112343.00 86993.00 112311.00C87036.00 112300.33 87079.00 112289.67 87122.00 112279.00C87143.33 112289.67 87164.67 112300.33 87186.00 112311.00C87197.00 112311.00 87208.00 112311.00 87219.00 112311.00C87208.00 112289.67 87197.00 112268.33 87186.00 112247.00C87197.39 112235.83 87208.38 112224.18 87220.03 112213.31C87251.69 112192.20 87283.34 112171.10 87315.00 112150.00C87315.00 112139.33 87315.00 112128.67 87315.00 112118.00C87304.34 112107.33 87293.66 112096.67 87283.00 112086.00C87304.33 112075.33 87325.67 112064.67 87347.00 112054.00C87347.00 112032.33 87347.00 112010.67 87347.00 111989.00C87379.33 111989.00 87411.67 111989.00 87444.00 111989.00C87444.00 111967.67 87444.00 111946.33 87444.00 111925.00C87465.33 111925.00 87486.67 111925.00 87508.00 111925.00C87518.66 111935.67 87529.34 111946.33 87540.00 111957.00C87583.00 111957.00 87626.00 111957.00 87669.00 111957.00C87658.00 111967.67 87647.00 111978.33 87636.00 111989.00C87657.66 111978.33 87679.34 111967.67 87701.00 111957.00C87711.66 111967.67 87722.34 111978.33 87733.00 111989.00C87733.00 112000.00 87733.00 112011.00 87733.00 112022.00C87754.33 112032.67 87775.67 112043.33 87797.00 112054.00C87807.66 112043.33 87818.34 112032.67 87829.00 112022.00C87818.33 112011.00 87807.67 112000.00 87797.00 111989.00C87807.67 111989.00 87818.33 111989.00 87829.00 111989.00C87840.00 112010.67 87851.00 112032.33 87862.00 112054.00C87872.66 112043.33 87883.34 112032.67 87894.00 112022.00C87883.33 112011.00 87872.67 112000.00 87862.00 111989.00C87862.00 111978.33 87862.00 111967.67 87862.00 111957.00C87872.79 111967.69 87883.39 111978.59 87894.30 111989.16C87915.54 112000.10 87936.77 112011.05 87958.00 112022.00C87958.00 112011.00 87958.00 112000.00 87958.00 111989.00C87979.33 111989.00 88000.67 111989.00 88022.00 111989.00C88022.00 112000.00 88022.00 112011.00 88022.00 112022.00C88086.33 112022.00 88150.67 112022.00 88215.00 112022.00C88204.33 112000.33 88193.67 111978.67 88183.00 111957.00C88194.01 111957.23 88205.14 111956.54 88216.08 111957.36C88248.05 111967.91 88280.03 111978.45 88312.00 111989.00C88344.00 111967.67 88376.00 111946.33 88408.00 111925.00C88418.66 111935.67 88429.34 111946.33 88440.00 111957.00C88450.66 111946.33 88461.34 111935.67 88472.00 111925.00C88483.00 111925.00 88494.00 111925.00 88505.00 111925.00C88505.00 111914.33 88505.00 111903.67 88505.00 111893.00C88515.67 111893.00 88526.33 111893.00 88537.00 111893.00C88526.33 111871.67 88515.67 111850.33 88505.00 111829.00C88515.66 111839.67 88526.34 111850.33 88537.00 111861.00C88547.67 111839.67 88558.33 111818.33 88569.00 111797.00C88569.00 111818.33 88569.00 111839.67 88569.00 111861.00C88579.67 111861.00 88590.33 111861.00 88601.00 111861.00C88633.34 111882.33 88665.66 111903.67 88698.00 111925.00C88698.00 111914.33 88698.00 111903.67 88698.00 111893.00C88708.67 111893.00 88719.33 111893.00 88730.00 111893.00C88730.00 111914.33 88730.00 111935.67 88730.00 111957.00C88751.33 111946.33 88772.67 111935.67 88794.00 111925.00C88794.00 111946.33 88794.00 111967.67 88794.00 111989.00C88804.67 112000.00 88815.33 112011.00 88826.00 112022.00C88847.66 112000.33 88869.34 111978.67 88891.00 111957.00C88912.33 111946.33 88933.67 111935.67 88955.00 111925.00C88965.66 111935.67 88976.34 111946.33 88987.00 111957.00C88997.67 111935.67 89008.33 111914.33 89019.00 111893.00C89040.33 111893.00 89061.67 111893.00 89083.00 111893.00C89094.00 111871.67 89105.00 111850.33 89116.00 111829.00C89116.00 111818.33 89116.00 111807.67 89116.00 111797.00C89148.00 111786.00 89180.00 111775.00 89212.00 111764.00C89212.00 111753.33 89212.00 111742.67 89212.00 111732.00C89222.67 111732.00 89233.33 111732.00 89244.00 111732.00C89244.00 111721.33 89244.00 111710.67 89244.00 111700.00C89265.33 111710.67 89286.67 111721.33 89308.00 111732.00C89308.00 111742.67 89308.00 111753.33 89308.00 111764.00C89297.34 111753.33 89286.66 111742.67 89276.00 111732.00C89276.00 111742.67 89276.00 111753.33 89276.00 111764.00C89297.66 111785.67 89319.34 111807.33 89341.00 111829.00C89341.00 111818.33 89341.00 111807.67 89341.00 111797.00C89362.33 111797.00 89383.67 111797.00 89405.00 111797.00C89405.00 111786.00 89405.00 111775.00 89405.00 111764.00C89415.66 111753.33 89426.34 111742.67 89437.00 111732.00C89447.67 111732.00 89458.33 111732.00 89469.00 111732.00C89479.66 111742.67 89490.34 111753.33 89501.00 111764.00C89512.00 111753.33 89523.00 111742.67 89534.00 111732.00C89544.67 111732.00 89555.33 111732.00 89566.00 111732.00C89576.67 111710.67 89587.33 111689.33 89598.00 111668.00C89587.34 111657.33 89576.66 111646.67 89566.00 111636.00C89566.00 111625.33 89566.00 111614.67 89566.00 111604.00C89598.00 111604.00 89630.00 111604.00 89662.00 111604.00C89651.33 111604.00 89640.67 111604.00 89630.00 111604.00C89640.67 111593.00 89651.33 111582.00 89662.00 111571.00C89683.67 111582.00 89705.33 111593.00 89727.00 111604.00C89716.00 111582.33 89705.00 111560.67 89694.00 111539.00C89694.00 111528.33 89694.00 111517.67 89694.00 111507.00C89705.00 111517.67 89716.00 111528.33 89727.00 111539.00C89727.00 111517.67 89727.00 111496.33 89727.00 111475.00C89748.33 111475.00 89769.67 111475.00 89791.00 111475.00C89801.66 111485.67 89812.34 111496.33 89823.00 111507.00C89844.33 111507.00 89865.67 111507.00 89887.00 111507.00C89887.00 111496.33 89887.00 111485.67 89887.00 111475.00C89908.66 111485.67 89930.34 111496.33 89952.00 111507.00C89941.00 111485.67 89930.00 111464.33 89919.00 111443.00C89930.00 111443.00 89941.00 111443.00 89952.00 111443.00C89962.66 111432.33 89973.34 111421.67 89984.00 111411.00C90005.33 111421.67 90026.67 111432.33 90048.00 111443.00C90048.00 111400.00 90048.00 111357.00 90048.00 111314.00C90058.66 111324.67 90069.34 111335.33 90080.00 111346.00C90090.66 111335.33 90101.34 111324.67 90112.00 111314.00C90122.66 111324.67 90133.34 111335.33 90144.00 111346.00C90165.66 111335.33 90187.34 111324.67 90209.00 111314.00C90219.67 111314.00 90230.33 111314.00 90241.00 111314.00C90251.66 111324.67 90262.34 111335.33 90273.00 111346.00C90273.00 111324.67 90273.00 111303.33 90273.00 111282.00C90283.67 111282.00 90294.33 111282.00 90305.00 111282.00C90315.66 111271.33 90326.34 111260.67 90337.00 111250.00C90347.67 111250.00 90358.33 111250.00 90369.00 111250.00C90380.00 111239.33 90391.00 111228.67 90402.00 111218.00C90412.66 111228.67 90423.34 111239.33 90434.00 111250.00C90466.00 111260.67 90498.00 111271.33 90530.00 111282.00C90551.66 111271.33 90573.34 111260.67 90595.00 111250.00C90616.33 111250.00 90637.67 111250.00 90659.00 111250.00C90669.67 111271.33 90680.33 111292.67 90691.00 111314.00C90701.67 111314.00 90712.33 111314.00 90723.00 111314.00C90712.33 111292.67 90701.67 111271.33 90691.00 111250.00C90701.67 111250.00 90712.33 111250.00 90723.00 111250.00C90744.67 111271.33 90766.33 111292.67 90788.00 111314.00C90809.33 111324.67 90830.67 111335.33 90852.00 111346.00C90873.33 111367.67 90894.67 111389.33 90916.00 111411.00C90894.67 111411.00 90873.33 111411.00 90852.00 111411.00C90852.00 111432.33 90852.00 111453.67 90852.00 111475.00C90862.66 111464.33 90873.34 111453.67 90884.00 111443.00C90884.00 111485.67 90884.00 111528.33 90884.00 111571.00C90894.66 111560.33 90905.34 111549.67 90916.00 111539.00C90916.00 111560.67 90916.00 111582.33 90916.00 111604.00C90926.67 111593.00 90937.33 111582.00 90948.00 111571.00C90958.67 111571.00 90969.33 111571.00 90980.00 111571.00C90980.00 111603.33 90980.00 111635.67 90980.00 111668.00C90991.00 111646.67 91002.00 111625.33 91013.00 111604.00C91023.66 111614.67 91034.34 111625.33 91045.00 111636.00C91087.67 111636.00 91130.33 111636.00 91173.00 111636.00C91162.34 111646.67 91151.66 111657.33 91141.00 111668.00C91162.33 111700.00 91183.67 111732.00 91205.00 111764.00C91226.66 111753.33 91248.34 111742.67 91270.00 111732.00C91270.00 111710.67 91270.00 111689.33 91270.00 111668.00C91291.33 111678.67 91312.67 111689.33 91334.00 111700.00C91377.00 111700.00 91420.00 111700.00 91463.00 111700.00C91452.34 111710.67 91441.66 111721.33 91431.00 111732.00C91420.00 111732.00 91409.00 111732.00 91398.00 111732.00C91398.00 111742.67 91398.00 111753.33 91398.00 111764.00C91419.66 111753.33 91441.34 111742.67 91463.00 111732.00C91452.34 111742.67 91441.66 111753.33 91431.00 111764.00C91441.67 111775.00 91452.33 111786.00 91463.00 111797.00C91484.33 111786.00 91505.67 111775.00 91527.00 111764.00C91516.34 111753.33 91505.66 111742.67 91495.00 111732.00C91505.66 111721.33 91516.34 111710.67 91527.00 111700.00C91548.34 111732.33 91569.66 111764.67 91591.00 111797.00C91602.00 111786.00 91613.00 111775.00 91624.00 111764.00C91634.67 111785.67 91645.33 111807.33 91656.00 111829.00C91666.66 111839.67 91677.34 111850.33 91688.00 111861.00C91698.66 111850.33 91709.34 111839.67 91720.00 111829.00C91730.67 111829.00 91741.33 111829.00 91752.00 111829.00C91741.34 111839.67 91730.66 111850.33 91720.00 111861.00C91730.66 111871.67 91741.34 111882.33 91752.00 111893.00C91762.66 111882.33 91773.34 111871.67 91784.00 111861.00C91816.33 111861.00 91848.67 111861.00 91881.00 111861.00C91870.33 111882.33 91859.67 111903.67 91849.00 111925.00C91881.00 111957.33 91913.00 111989.67 91945.00 112022.00C91945.00 112011.00 91945.00 112000.00 91945.00 111989.00C91955.66 111978.33 91966.34 111967.67 91977.00 111957.00C91987.67 111978.67 91998.33 112000.33 92009.00 112022.00C92019.67 112011.00 92030.33 112000.00 92041.00 111989.00C92052.00 111989.00 92063.00 111989.00 92074.00 111989.00C92084.67 112000.00 92095.33 112011.00 92106.00 112022.00C92116.67 112022.00 92127.33 112022.00 92138.00 112022.00C92148.66 112032.67 92159.34 112043.33 92170.00 112054.00C92180.67 112054.00 92191.33 112054.00 92202.00 112054.00C92212.67 112075.33 92223.33 112096.67 92234.00 112118.00C92255.67 112096.67 92277.33 112075.33 92299.00 112054.00C92309.67 112075.33 92320.33 112096.67 92331.00 112118.00C92352.34 112096.67 92373.66 112075.33 92395.00 112054.00C92405.67 112075.33 92416.33 112096.67 92427.00 112118.00C92438.00 112096.67 92449.00 112075.33 92460.00 112054.00C92470.67 112075.33 92481.33 112096.67 92492.00 112118.00C92513.34 112096.67 92534.66 112075.33 92556.00 112054.00C92556.00 112075.33 92556.00 112096.67 92556.00 112118.00C92577.33 112128.67 92598.67 112139.33 92620.00 112150.00C92620.00 112118.00 92620.00 112086.00 92620.00 112054.00C92630.67 112075.33 92641.33 112096.67 92652.00 112118.00C92684.39 112149.94 92716.94 112181.72 92749.00 112214.00C92749.00 112192.67 92749.00 112171.33 92749.00 112150.00C92781.13 112182.21 92813.55 112214.12 92845.00 112247.00C92866.67 112236.00 92888.33 112225.00 92910.00 112214.00C92899.00 112225.00 92888.00 112236.00 92877.00 112247.00C92888.00 112247.00 92899.00 112247.00 92910.00 112247.00C92899.00 112268.33 92888.00 112289.67 92877.00 112311.00C92888.00 112321.67 92899.00 112332.33 92910.00 112343.00C92899.00 112343.00 92888.00 112343.00 92877.00 112343.00C92888.00 112353.67 92899.00 112364.33 92910.00 112375.00C92899.00 112375.00 92888.00 112375.00 92877.00 112375.00C92877.00 112396.67 92877.00 112418.33 92877.00 112440.00C92888.00 112450.67 92899.00 112461.33 92910.00 112472.00C92910.00 112461.33 92910.00 112450.67 92910.00 112440.00C92920.67 112440.00 92931.33 112440.00 92942.00 112440.00C92942.00 112472.00 92942.00 112504.00 92942.00 112536.00C92952.67 112536.00 92963.33 112536.00 92974.00 112536.00C92984.66 112546.67 92995.34 112557.33 93006.00 112568.00C93006.00 112557.33 93006.00 112546.67 93006.00 112536.00C93027.34 112557.33 93048.66 112578.67 93070.00 112600.00C93059.33 112600.00 93048.67 112600.00 93038.00 112600.00C93059.66 112610.67 93081.34 112621.33 93103.00 112632.00C93103.00 112643.00 93103.00 112654.00 93103.00 112665.00C93113.66 112675.67 93124.34 112686.33 93135.00 112697.00C93156.33 112697.00 93177.67 112697.00 93199.00 112697.00C93199.00 112718.33 93199.00 112739.67 93199.00 112761.00C93220.33 112761.00 93241.67 112761.00 93263.00 112761.00C93263.00 112771.67 93263.00 112782.33 93263.00 112793.00C93274.00 112782.33 93285.00 112771.67 93296.00 112761.00C93296.00 112771.67 93296.00 112782.33 93296.00 112793.00C93306.66 112782.33 93317.34 112771.67 93328.00 112761.00C93338.67 112761.00 93349.33 112761.00 93360.00 112761.00C93370.66 112750.33 93381.34 112739.67 93392.00 112729.00C93424.00 112761.00 93456.00 112793.00 93488.00 112825.00C93488.00 112836.00 93488.00 112847.00 93488.00 112858.00C93499.00 112858.00 93510.00 112858.00 93521.00 112858.00C93521.00 112868.67 93521.00 112879.33 93521.00 112890.00C93563.67 112890.00 93606.33 112890.00 93649.00 112890.00C93659.66 112900.67 93670.34 112911.33 93681.00 112922.00C93702.66 112911.33 93724.34 112900.67 93746.00 112890.00C93767.33 112900.67 93788.67 112911.33 93810.00 112922.00C93810.00 112932.67 93810.00 112943.33 93810.00 112954.00C93820.67 112954.00 93831.33 112954.00 93842.00 112954.00C93852.66 112943.33 93863.34 112932.67 93874.00 112922.00C93884.79 112932.69 93895.38 112943.59 93906.31 112954.15C93927.87 112964.77 93949.44 112975.38 93971.00 112986.00C93981.67 112986.00 93992.33 112986.00 94003.00 112986.00C94003.00 113018.33 94003.00 113050.67 94003.00 113083.00C94024.33 113083.00 94045.67 113083.00 94067.00 113083.00C94067.00 113072.00 94067.00 113061.00 94067.00 113050.00C94067.00 113061.00 94067.00 113072.00 94067.00 113083.00C94088.33 113093.67 94109.67 113104.33 94131.00 113115.00C94131.00 113104.33 94131.00 113093.67 94131.00 113083.00C94120.33 113083.00 94109.67 113083.00 94099.00 113083.00C94109.67 113072.00 94120.33 113061.00 94131.00 113050.00C94142.00 113061.00 94153.00 113072.00 94164.00 113083.00C94196.00 113072.00 94228.00 113061.00 94260.00 113050.00C94270.67 113050.00 94281.33 113050.00 94292.00 113050.00C94281.33 113061.00 94270.67 113072.00 94260.00 113083.00C94281.33 113093.67 94302.67 113104.33 94324.00 113115.00C94313.34 113125.67 94302.66 113136.33 94292.00 113147.00C94302.66 113136.33 94313.34 113125.67 94324.00 113115.00C94324.00 113125.67 94324.00 113136.33 94324.00 113147.00C94345.67 113147.00 94367.33 113147.00 94389.00 113147.00C94389.00 113136.33 94389.00 113125.67 94389.00 113115.00C94399.66 113125.67 94410.34 113136.33 94421.00 113147.00C94410.34 113157.67 94399.66 113168.33 94389.00 113179.00C94399.66 113189.67 94410.34 113200.33 94421.00 113211.00C94431.67 113211.00 94442.33 113211.00 94453.00 113211.00C94453.00 113221.67 94453.00 113232.33 94453.00 113243.00C94463.67 113243.00 94474.33 113243.00 94485.00 113243.00C94485.00 113264.67 94485.00 113286.33 94485.00 113308.00C94495.66 113297.33 94506.34 113286.67 94517.00 113276.00C94506.34 113286.67 94495.66 113297.33 94485.00 113308.00C94495.66 113318.67 94506.34 113329.33 94517.00 113340.00C94517.00 113329.33 94517.00 113318.67 94517.00 113308.00C94527.66 113318.67 94538.34 113329.33 94549.00 113340.00C94549.00 113329.33 94549.00 113318.67 94549.00 113308.00C94560.00 113308.00 94571.00 113308.00 94582.00 113308.00C94582.00 113318.67 94582.00 113329.33 94582.00 113340.00C94603.33 113350.67 94624.67 113361.33 94646.00 113372.00C94646.00 113382.67 94646.00 113393.33 94646.00 113404.00C94635.34 113393.33 94624.66 113382.67 94614.00 113372.00C94614.00 113382.67 94614.00 113393.33 94614.00 113404.00C94646.00 113404.00 94678.00 113404.00 94710.00 113404.00C94710.00 113414.67 94710.00 113425.33 94710.00 113436.00C94720.67 113436.00 94731.33 113436.00 94742.00 113436.00C94742.00 113446.67 94742.00 113457.33 94742.00 113468.00C94763.66 113457.33 94785.34 113446.67 94807.00 113436.00C94817.66 113446.67 94828.34 113457.33 94839.00 113468.00C94839.00 113479.00 94839.00 113490.00 94839.00 113501.00C94849.67 113501.00 94860.33 113501.00 94871.00 113501.00C94860.34 113511.67 94849.66 113522.33 94839.00 113533.00C94849.67 113533.00 94860.33 113533.00 94871.00 113533.00C94871.00 113522.33 94871.00 113511.67 94871.00 113501.00C94881.66 113511.67 94892.34 113522.33 94903.00 113533.00C94935.33 113533.00 94967.67 113533.00 95000.00 113533.00C95000.00 113543.67 95000.00 113554.33 95000.00 113565.00C95021.33 113575.67 95042.67 113586.33 95064.00 113597.00C95085.34 113575.67 95106.66 113554.33 95128.00 113533.00C95138.67 113511.33 95149.33 113489.67 95160.00 113468.00C95171.00 113479.00 95182.00 113490.00 95193.00 113501.00C95193.00 113490.00 95193.00 113479.00 95193.00 113468.00C95203.67 113479.00 95214.33 113490.00 95225.00 113501.00C95235.67 113490.00 95246.33 113479.00 95257.00 113468.00C95267.67 113479.00 95278.33 113490.00 95289.00 113501.00C95289.00 113490.00 95289.00 113479.00 95289.00 113468.00C95310.08 113489.91 95331.39 113511.60 95353.00 113533.00C95385.33 113533.00 95417.67 113533.00 95450.00 113533.00C95450.00 113522.33 95450.00 113511.67 95450.00 113501.00C95450.00 113511.67 95450.00 113522.33 95450.00 113533.00C95471.33 113533.00 95492.67 113533.00 95514.00 113533.00C95524.66 113522.33 95535.34 113511.67 95546.00 113501.00C95546.00 113511.67 95546.00 113522.33 95546.00 113533.00C95546.00 113522.33 95546.00 113511.67 95546.00 113501.00C95556.67 113501.00 95567.33 113501.00 95578.00 113501.00C95578.00 113490.00 95578.00 113479.00 95578.00 113468.00C95589.00 113479.00 95600.00 113490.00 95611.00 113501.00C95611.00 113490.00 95611.00 113479.00 95611.00 113468.00C95632.33 113479.00 95653.67 113490.00 95675.00 113501.00C95685.66 113511.67 95696.34 113522.33 95707.00 113533.00C95707.00 113522.33 95707.00 113511.67 95707.00 113501.00C95717.67 113479.33 95728.33 113457.67 95739.00 113436.00C95749.66 113446.67 95760.34 113457.33 95771.00 113468.00C95781.67 113446.67 95792.33 113425.33 95803.00 113404.00C95814.00 113414.67 95825.00 113425.33 95836.00 113436.00C95836.00 113425.33 95836.00 113414.67 95836.00 113404.00C95857.33 113404.00 95878.67 113404.00 95900.00 113404.00C95910.66 113393.33 95921.34 113382.67 95932.00 113372.00C95996.33 113372.00 96060.67 113372.00 96125.00 113372.00C96135.67 113393.33 96146.33 113414.67 96157.00 113436.00C96178.33 113425.33 96199.67 113414.67 96221.00 113404.00C96253.33 113414.67 96285.67 113425.33 96318.00 113436.00C96339.33 113425.33 96360.67 113414.67 96382.00 113404.00C96393.01 113403.77 96404.14 113404.46 96415.08 113403.64C96447.05 113393.09 96479.03 113382.55 96511.00 113372.00C96511.00 113350.67 96511.00 113329.33 96511.00 113308.00C96521.67 113308.00 96532.33 113308.00 96543.00 113308.00C96564.33 113286.33 96585.67 113264.67 96607.00 113243.00C96617.67 113243.00 96628.33 113243.00 96639.00 113243.00C96660.67 113221.67 96682.33 113200.33 96704.00 113179.00C96736.00 113179.00 96768.00 113179.00 96800.00 113179.00C96800.00 113168.33 96800.00 113157.67 96800.00 113147.00C96810.66 113136.33 96821.34 113125.67 96832.00 113115.00C96821.33 113115.00 96810.67 113115.00 96800.00 113115.00C96810.67 113093.33 96821.33 113071.67 96832.00 113050.00C96832.00 113039.33 96832.00 113028.67 96832.00 113018.00C96842.67 112996.67 96853.33 112975.33 96864.00 112954.00C96896.33 112943.33 96928.67 112932.67 96961.00 112922.00C96982.33 112922.00 97003.67 112922.00 97025.00 112922.00C97046.66 112911.33 97068.34 112900.67 97090.00 112890.00C97090.00 112868.33 97090.00 112846.67 97090.00 112825.00C97100.80 112836.02 97111.37 112847.26 97122.31 112858.15C97143.54 112868.77 97164.77 112879.38 97186.00 112890.00C97186.00 112879.33 97186.00 112868.67 97186.00 112858.00C97196.67 112858.00 97207.33 112858.00 97218.00 112858.00C97239.67 112847.00 97261.33 112836.00 97283.00 112825.00C97293.66 112814.33 97304.34 112803.67 97315.00 112793.00C97336.33 112803.67 97357.67 112814.33 97379.00 112825.00C97411.10 112814.27 97443.23 112803.65 97475.31 112792.85C97518.20 112771.56 97561.10 112750.28 97604.00 112729.00C97614.66 112718.33 97625.34 112707.67 97636.00 112697.00C97657.33 112707.67 97678.67 112718.33 97700.00 112729.00C97700.00 112739.67 97700.00 112750.33 97700.00 112761.00C97711.00 112750.33 97722.00 112739.67 97733.00 112729.00C97743.67 112750.33 97754.33 112771.67 97765.00 112793.00C97797.00 112771.67 97829.00 112750.33 97861.00 112729.00C97871.67 112729.00 97882.33 112729.00 97893.00 112729.00C97904.00 112739.67 97915.00 112750.33 97926.00 112761.00C97958.00 112761.00 97990.00 112761.00 98022.00 112761.00C98043.33 112771.67 98064.67 112782.33 98086.00 112793.00C98097.00 112793.00 98108.00 112793.00 98119.00 112793.00C98119.00 112803.67 98119.00 112814.33 98119.00 112825.00C98129.67 112825.00 98140.33 112825.00 98151.00 112825.00C98140.33 112846.67 98129.67 112868.33 98119.00 112890.00C98129.67 112890.00 98140.33 112890.00 98151.00 112890.00C98151.00 112900.67 98151.00 112911.33 98151.00 112922.00C98161.67 112943.33 98172.33 112964.67 98183.00 112986.00C98236.67 112996.67 98290.33 113007.33 98344.00 113018.00C98354.66 113028.67 98365.34 113039.33 98376.00 113050.00C98386.66 113039.33 98397.34 113028.67 98408.00 113018.00C98418.66 113028.67 98429.34 113039.33 98440.00 113050.00C98440.00 113061.00 98440.00 113072.00 98440.00 113083.00C98461.34 113104.33 98482.66 113125.67 98504.00 113147.00C98536.33 113157.67 98568.67 113168.33 98601.00 113179.00C98601.00 113200.33 98601.00 113221.67 98601.00 113243.00C98590.34 113232.33 98579.66 113221.67 98569.00 113211.00C98569.00 113232.67 98569.00 113254.33 98569.00 113276.00C98579.66 113286.67 98590.34 113297.33 98601.00 113308.00C98590.34 113318.67 98579.66 113329.33 98569.00 113340.00C98579.67 113340.00 98590.33 113340.00 98601.00 113340.00C98601.00 113350.67 98601.00 113361.33 98601.00 113372.00C98611.67 113372.00 98622.33 113372.00 98633.00 113372.00C98622.33 113404.00 98611.67 113436.00 98601.00 113468.00C98590.33 113479.00 98579.67 113490.00 98569.00 113501.00C98590.74 113512.01 98612.73 113522.58 98634.32 113533.88C98665.88 113554.92 98697.44 113575.96 98729.00 113597.00C98729.00 113586.33 98729.00 113575.67 98729.00 113565.00C98729.00 113575.67 98729.00 113586.33 98729.00 113597.00C98740.00 113597.00 98751.00 113597.00 98762.00 113597.00C98783.33 113607.67 98804.67 113618.33 98826.00 113629.00C98879.67 113629.00 98933.33 113629.00 98987.00 113629.00C98997.66 113618.33 99008.34 113607.67 99019.00 113597.00C99051.00 113597.00 99083.00 113597.00 99115.00 113597.00C99125.79 113586.31 99136.38 113575.41 99147.31 113564.85C99168.87 113554.23 99190.44 113543.62 99212.00 113533.00C99222.67 113511.33 99233.33 113489.67 99244.00 113468.00C99265.33 113468.00 99286.67 113468.00 99308.00 113468.00C99318.66 113457.33 99329.34 113446.67 99340.00 113436.00C99361.67 113436.00 99383.33 113436.00 99405.00 113436.00C99415.66 113425.33 99426.34 113414.67 99437.00 113404.00C99447.67 113404.00 99458.33 113404.00 99469.00 113404.00C99479.79 113393.31 99490.39 113382.41 99501.31 113371.85C99522.54 113361.23 99543.77 113350.62 99565.00 113340.00C99575.66 113350.67 99586.34 113361.33 99597.00 113372.00C99618.67 113372.00 99640.33 113372.00 99662.00 113372.00C99672.66 113382.67 99683.34 113393.33 99694.00 113404.00C99704.66 113393.33 99715.34 113382.67 99726.00 113372.00C99736.67 113393.33 99747.33 113414.67 99758.00 113436.00C99779.66 113425.33 99801.34 113414.67 99823.00 113404.00C99833.66 113414.67 99844.34 113425.33 99855.00 113436.00C99855.00 113425.33 99855.00 113414.67 99855.00 113404.00C99855.00 113414.67 99855.00 113425.33 99855.00 113436.00C99865.66 113425.33 99876.34 113414.67 99887.00 113404.00C99908.33 113404.00 99929.67 113404.00 99951.00 113404.00C99972.66 113414.67 99994.34 113425.33 100016.00 113436.00C100026.67 113425.33 100037.33 113414.67 100048.00 113404.00C100037.33 113393.33 100026.67 113382.67 100016.00 113372.00C100026.67 113350.67 100037.33 113329.33 100048.00 113308.00C100048.00 113297.33 100048.00 113286.67 100048.00 113276.00C100080.00 113243.67 100112.00 113211.33 100144.00 113179.00C100144.00 113147.00 100144.00 113115.00 100144.00 113083.00C100154.67 113061.33 100165.33 113039.67 100176.00 113018.00C100176.00 113007.33 100176.00 112996.67 100176.00 112986.00C100165.33 112986.00 100154.67 112986.00 100144.00 112986.00C100144.00 112943.33 100144.00 112900.67 100144.00 112858.00C100154.67 112868.67 100165.33 112879.33 100176.00 112890.00C100176.00 112879.33 100176.00 112868.67 100176.00 112858.00C100186.67 112858.00 100197.33 112858.00 100208.00 112858.00C100229.86 112815.10 100251.56 112772.11 100273.00 112729.00C100315.67 112718.33 100358.33 112707.67 100401.00 112697.00C100411.67 112697.00 100422.33 112697.00 100433.00 112697.00C100444.00 112707.67 100455.00 112718.33 100466.00 112729.00C100476.67 112718.33 100487.33 112707.67 100498.00 112697.00C100508.67 112697.00 100519.33 112697.00 100530.00 112697.00C100530.00 112686.33 100530.00 112675.67 100530.00 112665.00C100562.00 112654.00 100594.00 112643.00 100626.00 112632.00C100670.81 112588.98 100714.19 112544.52 100758.26 112500.74C100821.50 112437.50 100884.75 112374.25 100948.00 112311.00C100958.67 112289.67 100969.33 112268.33 100980.00 112247.00C100990.67 112236.00 101001.33 112225.00 101012.00 112214.00C101076.33 112192.67 101140.67 112171.33 101205.00 112150.00C101194.33 112118.00 101183.67 112086.00 101173.00 112054.00C101183.67 112021.67 101194.33 111989.33 101205.00 111957.00C101215.67 111946.33 101226.33 111935.67 101237.00 111925.00C101247.67 111893.00 101258.33 111861.00 101269.00 111829.00C101290.67 111818.33 101312.33 111807.67 101334.00 111797.00C101366.00 111797.00 101398.00 111797.00 101430.00 111797.00C101451.76 111764.60 101473.38 111732.10 101495.24 111699.76C101505.83 111689.17 101516.41 111678.59 101527.00 111668.00C101527.00 111646.67 101527.00 111625.33 101527.00 111604.00C101548.33 111604.00 101569.67 111604.00 101591.00 111604.00C101612.33 111582.33 101633.67 111560.67 101655.00 111539.00C101698.00 111528.33 101741.00 111517.67 101784.00 111507.00C101805.33 111517.67 101826.67 111528.33 101848.00 111539.00C101848.00 111560.67 101848.00 111582.33 101848.00 111604.00C101869.67 111614.67 101891.33 111625.33 101913.00 111636.00C101880.67 112300.33 101848.33 112964.67 101816.00 113629.00C101805.33 113629.00 101794.67 113629.00 101784.00 113629.00C101762.67 113639.67 101741.33 113650.33 101720.00 113661.00C101698.33 113650.33 101676.67 113639.67 101655.00 113629.00C101633.67 113650.67 101612.33 113672.33 101591.00 113694.00C101505.33 113694.00 101419.67 113694.00 101334.00 113694.00C101323.33 113704.67 101312.67 113715.33 101302.00 113726.00C101247.82 113747.64 101193.48 113768.92 101139.40 113790.80C101118.60 113801.20 101097.80 113811.60 101077.00 113822.00C101077.00 113854.33 101077.00 113886.67 101077.00 113919.00C101065.88 113929.69 101054.94 113940.59 101043.69 113951.15C101022.46 113961.77 101001.23 113972.38 100980.00 113983.00C100980.00 113993.67 100980.00 114004.33 100980.00 114015.00C100969.31 114025.79 100958.41 114036.38 100947.85 114047.31C100926.56 114090.20 100905.28 114133.10 100884.00 114176.00C100884.00 114186.67 100884.00 114197.33 100884.00 114208.00C100862.53 114250.97 100841.09 114293.96 100819.07 114336.64C100808.33 114350.68 100797.01 114364.31 100786.05 114378.19C100754.37 114417.79 100722.68 114457.40 100691.00 114497.00C100691.00 114518.67 100691.00 114540.33 100691.00 114562.00C100680.31 114572.79 100669.41 114583.39 100658.84 114594.31C100647.89 114615.54 100636.95 114636.77 100626.00 114658.00C100626.00 114679.33 100626.00 114700.67 100626.00 114722.00C100637.00 114743.67 100648.00 114765.33 100659.00 114787.00C100648.00 114797.67 100637.00 114808.33 100626.00 114819.00C100637.00 114819.00 100648.00 114819.00 100659.00 114819.00C100648.00 114840.33 100637.00 114861.67 100626.00 114883.00C100637.00 114893.67 100648.00 114904.33 100659.00 114915.00C100659.00 114904.33 100659.00 114893.67 100659.00 114883.00C100669.67 114883.00 100680.33 114883.00 100691.00 114883.00C100701.67 114872.33 100712.33 114861.67 100723.00 114851.00C100733.67 114861.67 100744.33 114872.33 100755.00 114883.00C100787.33 114883.00 100819.67 114883.00 100852.00 114883.00C100852.00 114872.33 100852.00 114861.67 100852.00 114851.00C100884.00 114851.00 100916.00 114851.00 100948.00 114851.00C100958.67 114872.33 100969.33 114893.67 100980.00 114915.00C100990.67 114915.00 101001.33 114915.00 101012.00 114915.00C101001.33 114904.33 100990.67 114893.67 100980.00 114883.00C100990.67 114883.00 101001.33 114883.00 101012.00 114883.00C101012.00 114904.33 101012.00 114925.67 101012.00 114947.00C101033.67 114936.33 101055.33 114925.67 101077.00 114915.00C101087.67 114925.67 101098.33 114936.33 101109.00 114947.00C101109.00 114958.00 101109.00 114969.00 101109.00 114980.00C101119.67 114969.00 101130.33 114958.00 101141.00 114947.00C101141.00 114958.00 101141.00 114969.00 101141.00 114980.00C101151.67 114980.00 101162.33 114980.00 101173.00 114980.00C101173.00 114990.67 101173.00 115001.33 101173.00 115012.00C101183.67 115012.00 101194.33 115012.00 101205.00 115012.00C101215.67 115022.67 101226.33 115033.33 101237.00 115044.00C101237.00 115065.33 101237.00 115086.67 101237.00 115108.00C101247.67 115097.33 101258.33 115086.67 101269.00 115076.00C101280.00 115076.00 101291.00 115076.00 101302.00 115076.00C101302.00 115097.33 101302.00 115118.67 101302.00 115140.00C101312.67 115140.00 101323.33 115140.00 101334.00 115140.00C101334.00 115151.00 101334.00 115162.00 101334.00 115173.00C101355.33 115173.00 101376.67 115173.00 101398.00 115173.00C101387.33 115183.67 101376.67 115194.33 101366.00 115205.00C101376.67 115205.00 101387.33 115205.00 101398.00 115205.00C101398.00 115215.67 101398.00 115226.33 101398.00 115237.00C101419.33 115258.33 101440.67 115279.67 101462.00 115301.00C101515.67 115290.33 101569.33 115279.67 101623.00 115269.00C101633.67 115269.00 101644.33 115269.00 101655.00 115269.00C101666.00 115279.67 101677.00 115290.33 101688.00 115301.00C101698.67 115290.33 101709.33 115279.67 101720.00 115269.00C101730.67 115269.00 101741.33 115269.00 101752.00 115269.00C101752.00 115279.67 101752.00 115290.33 101752.00 115301.00C101773.33 115301.00 101794.67 115301.00 101816.00 115301.00C101826.67 115322.67 101837.33 115344.33 101848.00 115366.00C101858.67 115344.33 101869.33 115322.67 101880.00 115301.00C101901.66 115280.21 101923.00 115259.09 101944.23 115237.87C101950.16 115233.79 101957.11 115231.25 101963.44 115227.78C101978.63 115220.19 101993.81 115212.59 102009.00 115205.00C102009.00 115194.33 102009.00 115183.67 102009.00 115173.00C102052.00 115173.00 102095.00 115173.00 102138.00 115173.00C102148.67 115183.67 102159.33 115194.33 102170.00 115205.00C102170.00 115194.33 102170.00 115183.67 102170.00 115173.00C102191.33 115173.00 102212.67 115173.00 102234.00 115173.00C102234.00 115183.67 102234.00 115194.33 102234.00 115205.00C102244.67 115226.33 102255.33 115247.67 102266.00 115269.00C102298.33 115279.67 102330.67 115290.33 102363.00 115301.00C102363.00 115311.67 102363.00 115322.33 102363.00 115333.00C102384.33 115333.00 102405.67 115333.00 102427.00 115333.00C102437.67 115322.33 102448.33 115311.67 102459.00 115301.00C102469.67 115301.00 102480.33 115301.00 102491.00 115301.00C102491.00 115322.67 102491.00 115344.33 102491.00 115366.00C102512.67 115366.00 102534.33 115366.00 102556.00 115366.00C102577.33 115376.67 102598.67 115387.33 102620.00 115398.00C102641.33 115398.00 102662.67 115398.00 102684.00 115398.00C102694.67 115408.67 102705.33 115419.33 102716.00 115430.00C102727.00 115430.00 102738.00 115430.00 102749.00 115430.00C102759.79 115440.69 102770.39 115451.59 102781.31 115462.15C102802.54 115472.77 102823.77 115483.38 102845.00 115494.00C102855.67 115483.33 102866.33 115472.67 102877.00 115462.00C102887.67 115462.00 102898.33 115462.00 102909.00 115462.00C102919.67 115440.67 102930.33 115419.33 102941.00 115398.00C102952.00 115387.33 102963.00 115376.67 102974.00 115366.00C102974.00 115333.67 102974.00 115301.33 102974.00 115269.00C102984.67 115269.00 102995.33 115269.00 103006.00 115269.00C103006.00 115258.33 103006.00 115247.67 103006.00 115237.00C103016.67 115247.67 103027.33 115258.33 103038.00 115269.00C103038.00 115258.33 103038.00 115247.67 103038.00 115237.00C103048.67 115226.33 103059.33 115215.67 103070.00 115205.00C103070.00 115215.67 103070.00 115226.33 103070.00 115237.00C103080.67 115226.33 103091.33 115215.67 103102.00 115205.00C103102.00 115215.67 103102.00 115226.33 103102.00 115237.00C103112.67 115237.00 103123.33 115237.00 103134.00 115237.00C103134.00 115226.33 103134.00 115215.67 103134.00 115205.00C103145.00 115226.33 103156.00 115247.67 103167.00 115269.00C103177.67 115258.33 103188.33 115247.67 103199.00 115237.00C103199.00 115247.67 103199.00 115258.33 103199.00 115269.00C103209.67 115269.00 103220.33 115269.00 103231.00 115269.00C103263.00 115290.33 103295.00 115311.67 103327.00 115333.00C103359.33 115322.33 103391.67 115311.67 103424.00 115301.00C103456.00 115311.67 103488.00 115322.33 103520.00 115333.00C103530.67 115333.00 103541.33 115333.00 103552.00 115333.00C103563.00 115322.33 103574.00 115311.67 103585.00 115301.00C103627.67 115290.33 103670.33 115279.67 103713.00 115269.00C103777.44 115279.72 103841.90 115290.30 103906.33 115301.11C103938.55 115311.74 103970.78 115322.37 104003.00 115333.00C104013.67 115333.00 104024.33 115333.00 104035.00 115333.00C104074.53 115353.49 104114.15 115373.82 104154.07 115393.54C104159.82 115397.39 104166.15 115398.81 104173.00 115398.00C104180.33 115398.00 104187.67 115398.00 104195.00 115398.00C104206.00 115419.33 104217.00 115440.67 104228.00 115462.00C104260.00 115472.67 104292.00 115483.33 104324.00 115494.00C104484.67 115494.00 104645.33 115494.00 104806.00 115494.00C104784.67 115515.33 104763.33 115536.67 104742.00 115558.00C104688.33 115558.00 104634.67 115558.00 104581.00 115558.00C104570.20 115569.03 104559.63 115580.26 104548.69 115591.15C104527.46 115601.77 104506.23 115612.38 104485.00 115623.00C104474.33 115644.33 104463.67 115665.67 104453.00 115687.00C104463.67 115719.38 104474.79 115751.64 104485.18 115784.09C104495.78 115848.06 104506.39 115912.03 104517.00 115976.00C104517.00 116008.33 104517.00 116040.67 104517.00 116073.00C104549.00 116169.33 104581.00 116265.67 104613.00 116362.00C104613.00 116405.00 104613.00 116448.00 104613.00 116491.00C104624.00 116533.67 104635.00 116576.33 104646.00 116619.00C104646.00 116683.33 104646.00 116747.67 104646.00 116812.00C104699.33 116865.67 104752.67 116919.33 104806.00 116973.00C104849.00 116973.00 104892.00 116973.00 104935.00 116973.00C104956.33 116983.67 104977.67 116994.33 104999.00 117005.00C105009.67 117005.00 105020.33 117005.00 105031.00 117005.00C105042.00 116962.33 105053.00 116919.67 105064.00 116877.00C105117.33 116844.67 105170.67 116812.33 105224.00 116780.00C105277.67 116769.33 105331.33 116758.67 105385.00 116748.00C105428.00 116748.00 105471.00 116748.00 105514.00 116748.00C105589.00 116769.33 105664.00 116790.67 105739.00 116812.00C105824.67 116812.00 105910.33 116812.00 105996.00 116812.00C106028.10 116823.06 106060.23 116834.02 106092.31 116845.15C106114.28 116856.12 106136.51 116866.61 106158.32 116877.88C106189.88 116898.92 106221.44 116919.96 106253.00 116941.00C106253.00 116951.67 106253.00 116962.33 106253.00 116973.00C106263.67 116983.67 106274.33 116994.33 106285.00 117005.00C106274.33 117037.33 106263.67 117069.67 106253.00 117102.00C106221.00 117134.00 106189.00 117166.00 106157.00 117198.00C106135.33 117241.00 106113.67 117284.00 106092.00 117327.00C106028.00 117337.67 105964.00 117348.33 105900.00 117359.00C105857.00 117359.00 105814.00 117359.00 105771.00 117359.00C105760.33 117369.67 105749.67 117380.33 105739.00 117391.00C105738.79 117402.10 105739.43 117413.29 105738.67 117424.34C105728.11 117466.89 105717.56 117509.45 105707.00 117552.00C105674.67 117573.33 105642.33 117594.67 105610.00 117616.00C105599.24 117638.16 105588.00 117660.10 105577.53 117682.39C105567.02 117713.93 105556.51 117745.46 105546.00 117777.00C105503.00 117787.67 105460.00 117798.33 105417.00 117809.00C105385.00 117852.00 105353.00 117895.00 105321.00 117938.00C105321.00 117948.67 105321.00 117959.33 105321.00 117970.00C105331.67 117991.33 105342.33 118012.67 105353.00 118034.00C105353.00 118055.67 105353.00 118077.33 105353.00 118099.00C105374.33 118120.33 105395.67 118141.67 105417.00 118163.00C105427.67 118184.33 105438.33 118205.67 105449.00 118227.00C105438.33 118248.33 105427.67 118269.67 105417.00 118291.00C105449.33 118291.00 105481.67 118291.00 105514.00 118291.00C105524.67 118302.00 105535.33 118313.00 105546.00 118324.00C105546.00 118356.00 105546.00 118388.00 105546.00 118420.00C105610.33 118430.67 105674.67 118441.33 105739.00 118452.00C105781.67 118473.67 105824.33 118495.33 105867.00 118517.00C105867.00 118527.67 105867.00 118538.33 105867.00 118549.00C105878.00 118549.00 105889.00 118549.00 105900.00 118549.00C105921.33 118559.67 105942.67 118570.33 105964.00 118581.00C105985.33 118570.33 106006.67 118559.67 106028.00 118549.00C106071.00 118570.33 106114.00 118591.67 106157.00 118613.00C106189.00 118613.00 106221.00 118613.00 106253.00 118613.00C106274.67 118623.67 106296.33 118634.33 106318.00 118645.00C106350.00 118645.00 106382.00 118645.00 106414.00 118645.00C106435.33 118655.67 106456.67 118666.33 106478.00 118677.00C106531.67 118655.67 106585.33 118634.33 106639.00 118613.00C106650.30 118613.23 106661.67 118612.52 106672.92 118613.38C106725.95 118623.92 106778.97 118634.46 106832.00 118645.00C106842.67 118655.67 106853.33 118666.33 106864.00 118677.00C106885.33 118666.33 106906.67 118655.67 106928.00 118645.00C106971.00 118645.00 107014.00 118645.00 107057.00 118645.00C107068.07 118634.16 107078.71 118622.83 107090.05 118612.31C107122.14 118591.16 107154.18 118569.94 107186.31 118548.85C107207.54 118538.23 107228.77 118527.62 107250.00 118517.00C107250.00 118506.00 107250.00 118495.00 107250.00 118484.00C107282.00 118484.00 107314.00 118484.00 107346.00 118484.00C107367.67 118495.00 107389.33 118506.00 107411.00 118517.00C107411.00 118527.67 107411.00 118538.33 107411.00 118549.00C107443.10 118559.73 107475.24 118570.35 107507.31 118581.15C107550.20 118602.44 107593.10 118623.72 107636.00 118645.00C107678.67 118645.00 107721.33 118645.00 107764.00 118645.00C107796.33 118709.33 107828.67 118773.67 107861.00 118838.00C107861.00 118848.67 107861.00 118859.33 107861.00 118870.00C107882.33 118880.67 107903.67 118891.33 107925.00 118902.00C107925.00 118923.67 107925.00 118945.33 107925.00 118967.00C107946.33 118977.67 107967.67 118988.33 107989.00 118999.00C107989.00 119009.67 107989.00 119020.33 107989.00 119031.00C108021.33 119063.00 108053.67 119095.00 108086.00 119127.00C108086.00 119138.00 108086.00 119149.00 108086.00 119160.00C108107.33 119160.00 108128.67 119160.00 108150.00 119160.00C108139.33 119170.67 108128.67 119181.33 108118.00 119192.00C108150.33 119192.00 108182.67 119192.00 108215.00 119192.00C108215.00 119213.33 108215.00 119234.67 108215.00 119256.00C108204.00 119256.00 108193.00 119256.00 108182.00 119256.00C108203.67 119256.00 108225.33 119256.00 108247.00 119256.00C108247.00 119266.67 108247.00 119277.33 108247.00 119288.00C108257.67 119288.00 108268.33 119288.00 108279.00 119288.00C108279.00 119298.67 108279.00 119309.33 108279.00 119320.00C108314.09 119338.15 108349.16 119356.34 108384.72 119373.54C108392.48 119377.36 108400.24 119381.18 108408.00 119385.00C108429.33 119385.00 108450.67 119385.00 108472.00 119385.00C108472.00 119363.33 108472.00 119341.67 108472.00 119320.00C108504.00 119320.00 108536.00 119320.00 108568.00 119320.00C108589.67 119331.00 108611.33 119342.00 108633.00 119353.00C108633.00 119342.00 108633.00 119331.00 108633.00 119320.00C108654.33 119341.67 108675.67 119363.33 108697.00 119385.00C108739.67 119385.00 108782.33 119385.00 108825.00 119385.00C108846.67 119395.67 108868.33 119406.33 108890.00 119417.00C108890.00 119427.67 108890.00 119438.33 108890.00 119449.00C108900.67 119438.33 108911.33 119427.67 108922.00 119417.00C108922.00 119427.67 108922.00 119438.33 108922.00 119449.00C108943.33 119438.33 108964.67 119427.67 108986.00 119417.00C108996.67 119417.00 109007.33 119417.00 109018.00 119417.00C109018.00 119427.67 109018.00 119438.33 109018.00 119449.00C109029.00 119449.00 109040.00 119449.00 109051.00 119449.00C109051.00 119459.67 109051.00 119470.33 109051.00 119481.00C109061.67 119491.67 109072.33 119502.33 109083.00 119513.00C109083.00 119534.67 109083.00 119556.33 109083.00 119578.00C109093.67 119578.00 109104.33 119578.00 109115.00 119578.00C109136.33 119599.33 109157.67 119620.67 109179.00 119642.00C109189.67 119642.00 109200.33 119642.00 109211.00 119642.00C109222.00 119652.67 109233.00 119663.33 109244.00 119674.00C109254.67 119674.00 109265.33 119674.00 109276.00 119674.00C109297.33 119684.67 109318.67 119695.33 109340.00 119706.00C109340.00 119695.33 109340.00 119684.67 109340.00 119674.00C109350.67 119684.67 109361.33 119695.33 109372.00 119706.00C109372.00 119727.67 109372.00 119749.33 109372.00 119771.00C109382.67 119781.67 109393.33 119792.33 109404.00 119803.00C109393.33 119803.00 109382.67 119803.00 109372.00 119803.00C109393.33 119824.33 109414.67 119845.67 109436.00 119867.00C109447.00 119867.00 109458.00 119867.00 109469.00 119867.00C109458.00 119867.00 109447.00 119867.00 109436.00 119867.00C109436.00 119877.67 109436.00 119888.33 109436.00 119899.00C109447.00 119899.00 109458.00 119899.00 109469.00 119899.00C109479.67 119909.67 109490.33 119920.33 109501.00 119931.00C109522.33 119931.00 109543.67 119931.00 109565.00 119931.00C109575.67 119920.33 109586.33 119909.67 109597.00 119899.00C109607.67 119909.67 109618.33 119920.33 109629.00 119931.00C109639.67 119931.00 109650.33 119931.00 109661.00 119931.00C109672.00 119941.67 109683.00 119952.33 109694.00 119963.00C109694.00 119974.00 109694.00 119985.00 109694.00 119996.00C109694.00 119985.00 109694.00 119974.00 109694.00 119963.00C109715.33 119974.00 109736.67 119985.00 109758.00 119996.00C109768.67 119996.00 109779.33 119996.00 109790.00 119996.00C109800.67 120006.67 109811.33 120017.33 109822.00 120028.00C109811.33 120038.67 109800.67 120049.33 109790.00 120060.00C109790.00 120070.67 109790.00 120081.33 109790.00 120092.00C109822.21 120059.88 109854.12 120027.45 109887.00 119996.00C109887.00 120006.67 109887.00 120017.33 109887.00 120028.00C109908.33 120028.00 109929.67 120028.00 109951.00 120028.00C109961.67 120038.67 109972.33 120049.33 109983.00 120060.00C110004.33 120060.00 110025.67 120060.00 110047.00 120060.00C110036.33 120038.67 110025.67 120017.33 110015.00 119996.00C110036.41 120017.59 110058.07 120038.94 110080.00 120060.00C110101.33 120060.00 110122.67 120060.00 110144.00 120060.00C110144.00 120049.33 110144.00 120038.67 110144.00 120028.00C110154.67 120038.67 110165.33 120049.33 110176.00 120060.00C110197.33 120060.00 110218.67 120060.00 110240.00 120060.00C110240.00 120070.67 110240.00 120081.33 110240.00 120092.00C110250.67 120092.00 110261.33 120092.00 110272.00 120092.00C110283.00 120113.33 110294.00 120134.67 110305.00 120156.00C110326.33 120156.00 110347.67 120156.00 110369.00 120156.00C110379.67 120177.67 110390.33 120199.33 110401.00 120221.00C110401.00 120231.67 110401.00 120242.33 110401.00 120253.00C110411.67 120253.00 110422.33 120253.00 110433.00 120253.00C110443.67 120274.33 110454.33 120295.67 110465.00 120317.00C110475.67 120317.00 110486.33 120317.00 110497.00 120317.00C110497.00 120327.67 110497.00 120338.33 110497.00 120349.00C110518.67 120370.67 110540.33 120392.33 110562.00 120414.00C110572.67 120414.00 110583.33 120414.00 110594.00 120414.00C110594.00 120403.00 110594.00 120392.00 110594.00 120381.00C110615.33 120381.00 110636.67 120381.00 110658.00 120381.00C110647.33 120392.00 110636.67 120403.00 110626.00 120414.00C110626.00 120424.67 110626.00 120435.33 110626.00 120446.00C110658.33 120446.00 110690.67 120446.00 110723.00 120446.00C110765.67 120467.33 110808.33 120488.67 110851.00 120510.00C110840.33 120510.00 110829.67 120510.00 110819.00 120510.00C110840.33 120520.67 110861.67 120531.33 110883.00 120542.00C110872.33 120542.00 110861.67 120542.00 110851.00 120542.00C110872.67 120552.67 110894.33 120563.33 110916.00 120574.00C110926.67 120563.33 110937.33 120552.67 110948.00 120542.00C110969.33 120563.67 110990.67 120585.33 111012.00 120607.00C111044.00 120607.00 111076.00 120607.00 111108.00 120607.00C111097.33 120607.00 111086.67 120607.00 111076.00 120607.00C111076.00 120617.67 111076.00 120628.33 111076.00 120639.00C111086.67 120639.00 111097.33 120639.00 111108.00 120639.00C111108.00 120649.67 111108.00 120660.33 111108.00 120671.00C111119.00 120660.33 111130.00 120649.67 111141.00 120639.00C111151.67 120660.33 111162.33 120681.67 111173.00 120703.00C111183.67 120703.00 111194.33 120703.00 111205.00 120703.00C111215.67 120692.33 111226.33 120681.67 111237.00 120671.00C111247.67 120681.67 111258.33 120692.33 111269.00 120703.00C111258.33 120703.00 111247.67 120703.00 111237.00 120703.00C111258.33 120724.33 111279.67 120745.67 111301.00 120767.00C111311.67 120756.33 111322.33 120745.67 111333.00 120735.00C111386.67 120767.33 111440.33 120799.67 111494.00 120832.00C111515.67 120821.00 111537.33 120810.00 111559.00 120799.00C111569.67 120799.00 111580.33 120799.00 111591.00 120799.00C111612.33 120810.00 111633.67 120821.00 111655.00 120832.00C111676.33 120832.00 111697.67 120832.00 111719.00 120832.00C111719.00 120842.67 111719.00 120853.33 111719.00 120864.00C111740.67 120853.33 111762.33 120842.67 111784.00 120832.00C111794.67 120821.00 111805.33 120810.00 111816.00 120799.00C111837.33 120799.00 111858.67 120799.00 111880.00 120799.00C111880.00 120810.00 111880.00 120821.00 111880.00 120832.00C111912.33 120832.00 111944.67 120832.00 111977.00 120832.00C111987.67 120842.67 111998.33 120853.33 112009.00 120864.00C112041.00 120864.00 112073.00 120864.00 112105.00 120864.00C112137.33 120874.67 112169.67 120885.33 112202.00 120896.00C112212.67 120896.00 112223.33 120896.00 112234.00 120896.00C112234.00 120906.67 112234.00 120917.33 112234.00 120928.00C112244.67 120938.67 112255.33 120949.33 112266.00 120960.00C112287.33 120960.00 112308.67 120960.00 112330.00 120960.00C112340.67 120949.33 112351.33 120938.67 112362.00 120928.00C112383.67 120949.33 112405.33 120970.67 112427.00 120992.00C112437.67 120981.33 112448.33 120970.67 112459.00 120960.00C112469.67 120960.00 112480.33 120960.00 112491.00 120960.00C112501.67 120970.67 112512.33 120981.33 112523.00 120992.00C112555.33 120992.00 112587.67 120992.00 112620.00 120992.00C112630.67 121002.67 112641.33 121013.33 112652.00 121024.00C112662.67 121024.00 112673.33 121024.00 112684.00 121024.00C112673.33 121035.00 112662.67 121046.00 112652.00 121057.00C112662.67 121057.00 112673.33 121057.00 112684.00 121057.00C112684.00 121067.67 112684.00 121078.33 112684.00 121089.00C112694.67 121089.00 112705.33 121089.00 112716.00 121089.00C112726.67 121099.67 112737.33 121110.33 112748.00 121121.00C112780.33 121121.00 112812.67 121121.00 112845.00 121121.00C112845.00 121142.33 112845.00 121163.67 112845.00 121185.00C112855.67 121195.67 112866.33 121206.33 112877.00 121217.00C112877.00 121228.00 112877.00 121239.00 112877.00 121250.00C112909.00 121239.00 112941.00 121228.00 112973.00 121217.00C112994.67 121228.00 113016.33 121239.00 113038.00 121250.00C113080.67 121250.00 113123.33 121250.00 113166.00 121250.00C113166.00 121282.00 113166.00 121314.00 113166.00 121346.00C113176.67 121346.00 113187.33 121346.00 113198.00 121346.00C113219.91 121367.08 113241.60 121388.39 113263.00 121410.00C113273.67 121399.33 113284.33 121388.67 113295.00 121378.00C113295.00 121399.33 113295.00 121420.67 113295.00 121442.00C113327.00 121453.00 113359.00 121464.00 113391.00 121475.00C113401.67 121485.67 113412.33 121496.33 113423.00 121507.00C113434.00 121496.33 113445.00 121485.67 113456.00 121475.00C113477.33 121475.00 113498.67 121475.00 113520.00 121475.00C113520.00 121464.00 113520.00 121453.00 113520.00 121442.00C113541.33 121442.00 113562.67 121442.00 113584.00 121442.00C113594.67 121453.00 113605.33 121464.00 113616.00 121475.00C113627.00 121464.00 113638.00 121453.00 113649.00 121442.00C113649.00 121453.00 113649.00 121464.00 113649.00 121475.00C113670.33 121475.00 113691.67 121475.00 113713.00 121475.00C113723.67 121496.33 113734.33 121517.67 113745.00 121539.00C113766.33 121549.67 113787.67 121560.33 113809.00 121571.00C113852.00 121571.00 113895.00 121571.00 113938.00 121571.00C113959.33 121592.33 113980.67 121613.67 114002.00 121635.00C114023.67 121635.00 114045.33 121635.00 114067.00 121635.00C114077.67 121646.00 114088.33 121657.00 114099.00 121668.00C114131.00 121668.00 114163.00 121668.00 114195.00 121668.00C114195.00 121678.67 114195.00 121689.33 114195.00 121700.00C114227.33 121721.33 114259.67 121742.67 114292.00 121764.00C114292.00 121774.67 114292.00 121785.33 114292.00 121796.00C114302.67 121785.33 114313.33 121774.67 114324.00 121764.00C114356.00 121796.00 114388.00 121828.00 114420.00 121860.00C114420.00 121881.67 114420.00 121903.33 114420.00 121925.00C114430.67 121925.00 114441.33 121925.00 114452.00 121925.00C114462.67 121957.00 114473.33 121989.00 114484.00 122021.00C114495.00 122031.67 114506.00 122042.33 114517.00 122053.00C114517.00 122064.00 114517.00 122075.00 114517.00 122086.00C114495.33 122096.67 114473.67 122107.33 114452.00 122118.00C114484.33 122128.67 114516.67 122139.33 114549.00 122150.00C114559.67 122139.33 114570.33 122128.67 114581.00 122118.00C114591.67 122128.67 114602.33 122139.33 114613.00 122150.00C114602.33 122160.67 114591.67 122171.33 114581.00 122182.00C114613.00 122182.00 114645.00 122182.00 114677.00 122182.00C114677.00 122214.00 114677.00 122246.00 114677.00 122278.00C114709.33 122278.00 114741.67 122278.00 114774.00 122278.00C114816.70 122321.29 114859.05 122364.96 114903.00 122407.00C114903.00 122417.67 114903.00 122428.33 114903.00 122439.00C114881.33 122449.67 114859.67 122460.33 114838.00 122471.00C114816.67 122492.67 114795.33 122514.33 114774.00 122536.00C114774.00 122557.33 114774.00 122578.67 114774.00 122600.00C114827.67 122675.00 114881.33 122750.00 114935.00 122825.00C114945.67 122846.33 114956.33 122867.67 114967.00 122889.00C114967.00 122942.67 114967.00 122996.33 114967.00 123050.00C114934.67 123050.00 114902.33 123050.00 114870.00 123050.00C114838.00 123039.33 114806.00 123028.67 114774.00 123018.00C114763.33 123018.00 114752.67 123018.00 114742.00 123018.00C114720.33 123028.67 114698.67 123039.33 114677.00 123050.00C114666.19 123071.91 114654.92 123093.61 114644.39 123115.65C114612.59 123201.10 114580.79 123286.55 114549.00 123372.00C114538.31 123382.79 114527.41 123393.39 114516.84 123404.31C114495.22 123446.87 114473.61 123489.44 114452.00 123532.00C114441.33 123585.67 114430.67 123639.33 114420.00 123693.00C114409.33 123703.67 114398.67 123714.33 114388.00 123725.00C114388.00 123736.00 114388.00 123747.00 114388.00 123758.00C114420.00 123790.00 114452.00 123822.00 114484.00 123854.00C114462.67 123886.00 114441.33 123918.00 114420.00 123950.00C114430.67 123971.67 114441.33 123993.33 114452.00 124015.00C114452.00 124025.67 114452.00 124036.33 114452.00 124047.00C114473.67 124068.33 114495.33 124089.67 114517.00 124111.00C114517.00 124207.67 114517.00 124304.33 114517.00 124401.00C114528.01 124422.74 114538.58 124444.73 114549.88 124466.32C114570.92 124497.88 114591.96 124529.44 114613.00 124561.00C114613.00 124593.33 114613.00 124625.67 114613.00 124658.00C114581.00 124733.00 114549.00 124808.00 114517.00 124883.00C114538.33 124936.67 114559.67 124990.33 114581.00 125044.00C114581.00 125086.67 114581.00 125129.33 114581.00 125172.00C114570.33 125204.33 114559.67 125236.67 114549.00 125269.00C114538.33 125279.67 114527.67 125290.33 114517.00 125301.00C114538.37 125333.11 114559.85 125365.15 114581.15 125397.31C114591.77 125418.87 114602.38 125440.44 114613.00 125462.00C114613.00 125483.33 114613.00 125504.67 114613.00 125526.00C114569.81 125612.18 114526.39 125698.25 114483.36 125784.51C114451.48 125859.38 114419.37 125934.16 114387.64 126009.08C114366.36 126073.15 114345.20 126137.26 114323.85 126201.31C114313.23 126222.87 114302.62 126244.44 114292.00 126266.00C114238.33 126308.67 114184.67 126351.33 114131.00 126394.00C114109.67 126404.67 114088.33 126415.33 114067.00 126426.00C114045.33 126447.67 114023.67 126469.33 114002.00 126491.00C113980.67 126501.67 113959.33 126512.33 113938.00 126523.00C113926.98 126523.23 113915.86 126522.54 113904.91 126523.36C113872.26 126534.03 113839.73 126545.07 113807.01 126555.50C113765.00 126566.00 113723.00 126576.50 113681.00 126587.00C113616.67 126587.00 113552.33 126587.00 113488.00 126587.00C113391.33 126608.33 113294.67 126629.67 113198.00 126651.00C113149.27 126683.96 113100.73 126717.18 113051.47 126749.34C113035.98 126759.56 113020.49 126769.78 113005.00 126780.00C112994.33 126780.00 112983.67 126780.00 112973.00 126780.00C112962.33 126790.67 112951.67 126801.33 112941.00 126812.00C112930.33 126855.00 112919.67 126898.00 112909.00 126941.00C112887.67 126951.67 112866.33 126962.33 112845.00 126973.00C112791.33 127069.33 112737.67 127165.67 112684.00 127262.00C112684.00 127272.67 112684.00 127283.33 112684.00 127294.00C112662.58 127305.08 112641.09 127316.04 112619.72 127327.21C112576.60 127359.43 112533.22 127391.32 112490.26 127423.74C112469.13 127444.94 112447.86 127466.00 112426.82 127487.29C112373.21 127573.19 112319.61 127659.10 112266.00 127745.00C112255.33 127777.00 112244.67 127809.00 112234.00 127841.00C112201.67 127873.00 112169.33 127905.00 112137.00 127937.00C112062.00 127980.00 111987.00 128023.00 111912.00 128066.00C111890.67 128087.33 111869.33 128108.67 111848.00 128130.00C111848.00 128141.00 111848.00 128152.00 111848.00 128163.00C111826.67 128184.33 111805.33 128205.67 111784.00 128227.00C111730.33 128345.00 111676.67 128463.00 111623.00 128581.00C111612.33 128634.33 111601.67 128687.67 111591.00 128741.00C111612.33 128773.33 111633.67 128805.67 111655.00 128838.00C111654.96 128859.45 111655.09 128880.89 111654.93 128902.34C111644.29 128955.89 111633.64 129009.45 111623.00 129063.00C111623.00 129116.67 111623.00 129170.33 111623.00 129224.00C111633.67 129256.00 111644.33 129288.00 111655.00 129320.00C111676.33 129341.33 111697.67 129362.67 111719.00 129384.00C111708.33 129459.00 111697.67 129534.00 111687.00 129609.00C111676.33 129630.67 111665.67 129652.33 111655.00 129674.00C111590.67 129716.67 111526.33 129759.33 111462.00 129802.00C111387.00 129802.00 111312.00 129802.00 111237.00 129802.00C111215.67 129812.67 111194.33 129823.33 111173.00 129834.00C111130.00 129887.67 111087.00 129941.33 111044.00 129995.00C111033.33 130027.33 111022.67 130059.67 111012.00 130092.00C110990.67 130124.00 110969.33 130156.00 110948.00 130188.00C110948.00 130220.33 110948.00 130252.67 110948.00 130285.00C110926.33 130338.33 110904.67 130391.67 110883.00 130445.00C110851.00 130456.00 110819.00 130467.00 110787.00 130478.00C110776.33 130499.33 110765.67 130520.67 110755.00 130542.00C110743.99 130542.23 110732.86 130541.54 110721.91 130542.36C110689.94 130552.91 110657.97 130563.45 110626.00 130574.00C110583.00 130574.00 110540.00 130574.00 110497.00 130574.00C110486.31 130584.79 110475.41 130595.39 110464.85 130606.31C110454.23 130627.54 110443.62 130648.77 110433.00 130670.00C110443.67 130723.67 110454.33 130777.33 110465.00 130831.00C110454.33 130852.67 110443.67 130874.33 110433.00 130896.00C110443.84 130907.06 110455.15 130917.72 110465.70 130929.03C110487.14 130960.68 110508.57 130992.34 110530.00 131024.00C110540.67 131088.33 110551.33 131152.67 110562.00 131217.00C110572.67 131227.67 110583.33 131238.33 110594.00 131249.00C110583.04 131303.66 110572.45 131358.39 110561.25 131413.00C110550.84 131455.00 110540.41 131497.00 110530.00 131539.00C110530.00 131571.00 110530.00 131603.00 110530.00 131635.00C110514.47 131649.71 110499.80 131665.39 110483.02 131678.72C110423.68 131728.48 110364.34 131778.24 110305.00 131828.00C110293.71 131871.70 110282.83 131915.52 110271.28 131959.15C110250.03 132022.72 110228.94 132086.33 110208.00 132150.00C110175.95 132182.11 110143.78 132214.10 110111.81 132246.28C110090.11 132278.26 110068.54 132310.33 110046.76 132342.25C110036.04 132353.19 110025.54 132364.34 110014.69 132375.15C109972.13 132396.44 109929.56 132417.72 109887.00 132439.00C109854.55 132438.96 109822.11 132439.07 109789.66 132438.94C109725.44 132428.30 109661.22 132417.65 109597.00 132407.00C109586.33 132407.00 109575.67 132407.00 109565.00 132407.00C109543.67 132417.67 109522.33 132428.33 109501.00 132439.00C109479.07 132481.99 109457.45 132525.17 109435.31 132568.05C109414.20 132600.03 109393.10 132632.01 109372.00 132664.00C109382.67 132685.33 109393.33 132706.67 109404.00 132728.00C109457.67 132771.00 109511.33 132814.00 109565.00 132857.00C109565.00 132889.00 109565.00 132921.00 109565.00 132953.00C109586.33 132996.00 109607.67 133039.00 109629.00 133082.00C109629.00 133125.00 109629.00 133168.00 109629.00 133211.00C109586.33 133286.00 109543.67 133361.00 109501.00 133436.00C109479.33 133457.33 109457.67 133478.67 109436.00 133500.00C109425.33 133521.33 109414.67 133542.67 109404.00 133564.00C109339.67 133585.67 109275.33 133607.33 109211.00 133629.00C109179.00 133650.33 109147.00 133671.67 109115.00 133693.00C109082.67 133768.00 109050.33 133843.00 109018.00 133918.00C109018.00 133939.33 109018.00 133960.67 109018.00 133982.00C109007.33 134014.33 108996.67 134046.67 108986.00 134079.00C108911.00 134132.33 108836.00 134185.67 108761.00 134239.00C108739.67 134271.33 108718.33 134303.67 108697.00 134336.00C108675.67 134346.67 108654.33 134357.33 108633.00 134368.00C108633.00 134378.67 108633.00 134389.33 108633.00 134400.00C108611.33 134400.00 108589.67 134400.00 108568.00 134400.00C108514.67 134464.33 108461.33 134528.67 108408.00 134593.00C108396.13 134628.39 108383.62 134663.58 108372.21 134699.12C108330.47 134835.41 108288.74 134971.71 108247.00 135108.00C108193.33 135183.00 108139.67 135258.00 108086.00 135333.00C108053.79 135365.12 108021.88 135397.55 107989.00 135429.00C107978.33 135461.33 107967.67 135493.67 107957.00 135526.00C107882.00 135579.33 107807.00 135632.67 107732.00 135686.00C107691.94 135727.75 107650.57 135768.20 107609.77 135809.23C107604.92 135813.12 107601.91 135818.35 107599.50 135824.00C107590.33 135842.33 107581.17 135860.67 107572.00 135879.00C107561.00 135879.00 107550.00 135879.00 107539.00 135879.00C107528.33 135889.67 107517.67 135900.33 107507.00 135911.00C107474.90 135922.06 107442.77 135933.02 107410.69 135944.15C107367.79 135965.43 107324.90 135986.72 107282.00 136008.00C107228.33 136018.67 107174.67 136029.33 107121.00 136040.00C107089.00 136072.33 107057.00 136104.67 107025.00 136137.00C106992.56 136158.37 106960.17 136179.84 106927.69 136201.15C106906.05 136212.11 106884.17 136222.63 106862.68 136233.88C106831.13 136254.92 106799.56 136275.96 106768.00 136297.00C106703.67 136318.67 106639.33 136340.33 106575.00 136362.00C106532.00 136394.00 106489.00 136426.00 106446.00 136458.00C106414.00 136468.67 106382.00 136479.33 106350.00 136490.00C106264.00 136543.67 106178.00 136597.33 106092.00 136651.00C106081.33 136672.33 106070.67 136693.67 106060.00 136715.00C106006.67 136758.00 105953.33 136801.00 105900.00 136844.00C105878.33 136887.00 105856.67 136930.00 105835.00 136973.00C105824.33 136973.00 105813.67 136973.00 105803.00 136973.00C105760.33 136994.33 105717.67 137015.67 105675.00 137037.00C105589.00 137058.33 105503.00 137079.67 105417.00 137101.00C105406.33 137111.67 105395.67 137122.33 105385.00 137133.00C105374.33 137133.00 105363.67 137133.00 105353.00 137133.00C105288.67 137165.33 105224.33 137197.67 105160.00 137230.00C105138.57 137262.07 105117.29 137294.24 105095.76 137326.24C105085.18 137336.83 105074.59 137347.41 105064.00 137358.00C104999.67 137379.67 104935.33 137401.33 104871.00 137423.00C104828.18 137466.01 104784.80 137508.45 104741.79 137551.28C104709.83 137594.30 104677.73 137637.23 104645.84 137680.31C104634.89 137701.54 104623.95 137722.77 104613.00 137744.00C104613.00 137765.67 104613.00 137787.33 104613.00 137809.00C104624.00 137819.67 104635.00 137830.33 104646.00 137841.00C104613.67 137894.33 104581.33 137947.67 104549.00 138001.00C104538.33 138001.00 104527.67 138001.00 104517.00 138001.00C104442.00 138097.67 104367.00 138194.33 104292.00 138291.00C104259.79 138323.12 104227.88 138355.55 104195.00 138387.00C104131.00 138387.00 104067.00 138387.00 104003.00 138387.00C104003.00 138397.67 104003.00 138408.33 104003.00 138419.00C103991.89 138419.07 103980.78 138418.85 103969.67 138419.11C103842.45 138461.80 103715.25 138504.58 103587.96 138547.07C103578.11 138550.75 103568.97 138556.17 103559.41 138560.58C103525.14 138577.49 103490.85 138594.40 103456.78 138611.69C103451.17 138616.26 103446.41 138621.90 103441.12 138626.88C103435.19 138632.94 103428.93 138638.73 103423.30 138645.05C103401.86 138677.03 103380.43 138709.01 103359.00 138741.00C103316.33 138751.67 103273.67 138762.33 103231.00 138773.00C103220.33 138773.00 103209.67 138773.00 103199.00 138773.00C103199.00 138783.67 103199.00 138794.33 103199.00 138805.00C103166.67 138837.33 103134.33 138869.67 103102.00 138902.00C103069.91 138912.75 103037.75 138923.32 103005.70 138934.18C102952.01 138966.14 102898.41 138998.24 102844.68 139030.13C102790.60 139052.07 102736.38 139073.65 102682.39 139095.81C102640.26 139116.87 102598.13 139137.93 102556.00 139159.00C102534.33 139191.00 102512.67 139223.00 102491.00 139255.00C102491.00 139266.00 102491.00 139277.00 102491.00 139288.00C102469.67 139309.33 102448.33 139330.67 102427.00 139352.00C102405.25 139363.01 102383.27 139373.59 102361.68 139384.88C102329.79 139405.92 102297.89 139426.96 102266.00 139448.00C102255.33 139491.00 102244.67 139534.00 102234.00 139577.00C102202.00 139620.00 102170.00 139663.00 102138.00 139706.00C102138.00 139909.33 102138.00 140112.67 102138.00 140316.00C102095.00 140359.00 102052.00 140402.00 102009.00 140445.00C102009.00 140466.33 102009.00 140487.67 102009.00 140509.00C101966.00 140573.33 101923.00 140637.67 101880.00 140702.00C101858.61 140777.10 101837.31 140852.23 101815.87 140927.32C101794.59 140980.88 101773.29 141034.44 101752.00 141088.00C101752.00 141098.67 101752.00 141109.33 101752.00 141120.00C101730.58 141163.08 101709.29 141206.23 101687.80 141249.28C101634.20 141324.19 101580.60 141399.09 101527.00 141474.00C101516.33 141484.67 101505.67 141495.33 101495.00 141506.00C101419.67 141527.33 101344.33 141548.67 101269.00 141570.00C101172.67 141634.33 101076.33 141698.67 100980.00 141763.00C100894.33 141806.00 100808.67 141849.00 100723.00 141892.00C100680.00 141881.33 100637.00 141870.67 100594.00 141860.00C100583.21 141870.69 100572.61 141881.59 100561.69 141892.15C100540.46 141902.77 100519.23 141913.38 100498.00 141924.00C100498.00 141934.67 100498.00 141945.33 100498.00 141956.00C100455.00 142031.00 100412.00 142106.00 100369.00 142181.00C100369.00 142245.33 100369.00 142309.67 100369.00 142374.00C100347.67 142438.45 100326.19 142502.86 100304.94 142567.34C100294.11 142632.11 100283.63 142696.95 100272.58 142761.67C100262.05 142804.11 100251.53 142846.56 100241.00 142889.00C100229.93 142910.72 100218.43 142932.25 100207.64 142954.09C100197.09 142986.44 100186.10 143018.67 100175.82 143051.09C100165.22 143114.73 100154.61 143178.36 100144.00 143242.00C100144.00 143253.00 100144.00 143264.00 100144.00 143275.00C100112.00 143328.33 100080.00 143381.67 100048.00 143435.00C100037.33 143499.33 100026.67 143563.67 100016.00 143628.00C100005.00 143660.33 99994.00 143692.67 99983.00 143725.00C99994.00 143735.67 100005.00 143746.33 100016.00 143757.00C100005.00 143778.33 99994.00 143799.67 99983.00 143821.00C99994.00 143853.33 100005.00 143885.67 100016.00 143918.00C100016.00 143960.67 100016.00 144003.33 100016.00 144046.00C99983.67 144142.67 99951.33 144239.33 99919.00 144336.00C99908.33 144357.33 99897.67 144378.67 99887.00 144400.00C99854.67 144432.00 99822.33 144464.00 99790.00 144496.00C99725.66 144528.33 99661.34 144560.67 99597.00 144593.00C99479.34 144678.67 99361.66 144764.33 99244.00 144850.00C99201.00 144860.67 99158.00 144871.33 99115.00 144882.00C99104.33 144882.00 99093.67 144882.00 99083.00 144882.00C99072.34 144892.67 99061.66 144903.33 99051.00 144914.00C99008.00 144882.00 98965.00 144850.00 98922.00 144818.00C98922.00 144796.67 98922.00 144775.33 98922.00 144754.00C98911.33 144732.33 98900.67 144710.67 98890.00 144689.00C98890.00 144667.67 98890.00 144646.33 98890.00 144625.00C98858.00 144614.33 98826.00 144603.67 98794.00 144593.00C98772.34 144603.67 98750.66 144614.33 98729.00 144625.00C98707.66 144603.67 98686.34 144582.33 98665.00 144561.00C98643.67 144550.33 98622.33 144539.67 98601.00 144529.00C98568.66 144496.67 98536.34 144464.33 98504.00 144432.00C98482.67 144421.33 98461.33 144410.67 98440.00 144400.00C98418.67 144346.33 98397.33 144292.67 98376.00 144239.00C98376.00 144217.67 98376.00 144196.33 98376.00 144175.00C98365.21 144164.31 98354.62 144153.41 98343.69 144142.85C98322.00 144132.24 98300.41 144121.42 98278.66 144110.93C98225.44 144099.94 98172.22 144088.98 98119.00 144078.00C98086.67 144046.00 98054.33 144014.00 98022.00 143982.00C98022.00 143992.67 98022.00 144003.33 98022.00 144014.00C98000.67 144014.00 97979.33 144014.00 97958.00 144014.00C97936.34 144003.33 97914.66 143992.67 97893.00 143982.00C97882.33 143982.00 97871.67 143982.00 97861.00 143982.00C97839.67 143971.33 97818.33 143960.67 97797.00 143950.00C97764.67 143960.67 97732.33 143971.33 97700.00 143982.00C97700.00 143971.33 97700.00 143960.67 97700.00 143950.00C97711.00 143928.67 97722.00 143907.33 97733.00 143886.00C97700.67 143875.00 97668.33 143864.00 97636.00 143853.00C97636.00 143831.67 97636.00 143810.33 97636.00 143789.00C97614.67 143799.67 97593.33 143810.33 97572.00 143821.00C97561.34 143831.67 97550.66 143842.33 97540.00 143853.00C97529.33 143853.00 97518.67 143853.00 97508.00 143853.00C97497.00 143831.67 97486.00 143810.33 97475.00 143789.00C97464.33 143789.00 97453.67 143789.00 97443.00 143789.00C97432.34 143778.33 97421.66 143767.67 97411.00 143757.00C97389.67 143757.00 97368.33 143757.00 97347.00 143757.00C97336.33 143735.67 97325.67 143714.33 97315.00 143693.00C97293.33 143693.00 97271.67 143693.00 97250.00 143693.00C97239.33 143682.00 97228.67 143671.00 97218.00 143660.00C97196.57 143692.40 97175.29 143724.90 97153.76 143757.24C97132.51 143778.50 97111.25 143799.75 97090.00 143821.00C97090.00 143842.67 97090.00 143864.33 97090.00 143886.00C97079.00 143896.67 97068.00 143907.33 97057.00 143918.00C96992.67 143928.67 96928.33 143939.33 96864.00 143950.00C96864.00 143928.67 96864.00 143907.33 96864.00 143886.00C96842.67 143886.00 96821.33 143886.00 96800.00 143886.00C96789.34 143896.67 96778.66 143907.33 96768.00 143918.00C96757.33 143918.00 96746.67 143918.00 96736.00 143918.00C96725.34 143928.67 96714.66 143939.33 96704.00 143950.00C96682.33 143950.00 96660.67 143950.00 96639.00 143950.00C96639.00 143960.67 96639.00 143971.33 96639.00 143982.00C96617.67 143992.67 96596.33 144003.33 96575.00 144014.00C96564.34 144024.67 96553.66 144035.33 96543.00 144046.00C96511.00 144035.33 96479.00 144024.67 96447.00 144014.00C96425.33 144035.33 96403.67 144056.67 96382.00 144078.00C96382.00 144099.67 96382.00 144121.33 96382.00 144143.00C96371.34 144132.33 96360.66 144121.67 96350.00 144111.00C96318.00 144121.67 96286.00 144132.33 96254.00 144143.00C96243.00 144121.33 96232.00 144099.67 96221.00 144078.00C96210.33 144078.00 96199.67 144078.00 96189.00 144078.00C96178.33 144099.67 96167.67 144121.33 96157.00 144143.00C96135.67 144143.00 96114.33 144143.00 96093.00 144143.00C96093.00 144164.33 96093.00 144185.67 96093.00 144207.00C96071.67 144207.00 96050.33 144207.00 96029.00 144207.00C96029.00 144228.33 96029.00 144249.67 96029.00 144271.00C96018.00 144281.67 96007.00 144292.33 95996.00 144303.00C96007.00 144335.33 96018.00 144367.67 96029.00 144400.00C96007.33 144400.00 95985.67 144400.00 95964.00 144400.00C95964.00 144410.67 95964.00 144421.33 95964.00 144432.00C95953.34 144421.33 95942.66 144410.67 95932.00 144400.00C95900.00 144400.00 95868.00 144400.00 95836.00 144400.00C95814.34 144389.33 95792.66 144378.67 95771.00 144368.00C95760.34 144378.67 95749.66 144389.33 95739.00 144400.00C95717.67 144389.33 95696.33 144378.67 95675.00 144368.00C95664.21 144378.69 95653.62 144389.59 95642.69 144400.15C95578.24 144431.66 95514.18 144463.94 95450.00 144496.00C95439.33 144496.00 95428.67 144496.00 95418.00 144496.00C95407.00 144517.67 95396.00 144539.33 95385.00 144561.00C95363.67 144550.33 95342.33 144539.67 95321.00 144529.00C95321.00 144518.00 95321.00 144507.00 95321.00 144496.00C95310.33 144507.00 95299.67 144518.00 95289.00 144529.00C95267.67 144518.00 95246.33 144507.00 95225.00 144496.00C95214.33 144474.67 95203.67 144453.33 95193.00 144432.00C95182.00 144421.33 95171.00 144410.67 95160.00 144400.00C95138.66 144421.33 95117.34 144442.67 95096.00 144464.00C95085.33 144464.00 95074.67 144464.00 95064.00 144464.00C95064.00 144474.67 95064.00 144485.33 95064.00 144496.00C95042.67 144507.00 95021.33 144518.00 95000.00 144529.00C94989.00 144529.00 94978.00 144529.00 94967.00 144529.00C94956.33 144518.00 94945.67 144507.00 94935.00 144496.00C94924.33 144507.00 94913.67 144518.00 94903.00 144529.00C94871.00 144539.67 94839.00 144550.33 94807.00 144561.00C94807.00 144550.33 94807.00 144539.67 94807.00 144529.00C94785.33 144529.00 94763.67 144529.00 94742.00 144529.00C94731.34 144539.67 94720.66 144550.33 94710.00 144561.00C94710.00 144571.67 94710.00 144582.33 94710.00 144593.00C94645.67 144593.00 94581.33 144593.00 94517.00 144593.00C94485.00 144582.33 94453.00 144571.67 94421.00 144561.00C94421.00 144550.33 94421.00 144539.67 94421.00 144529.00C94410.33 144529.00 94399.67 144529.00 94389.00 144529.00C94389.00 144518.00 94389.00 144507.00 94389.00 144496.00C94378.33 144496.00 94367.67 144496.00 94357.00 144496.00C94345.61 144485.16 94334.60 144473.87 94322.97 144463.31C94291.31 144442.20 94259.66 144421.10 94228.00 144400.00C94206.67 144400.00 94185.33 144400.00 94164.00 144400.00C94131.67 144453.67 94099.33 144507.33 94067.00 144561.00C94056.33 144561.00 94045.67 144561.00 94035.00 144561.00C94013.67 144550.33 93992.33 144539.67 93971.00 144529.00C93960.33 144518.00 93949.67 144507.00 93939.00 144496.00C93917.33 144496.00 93895.67 144496.00 93874.00 144496.00C93874.00 144474.67 93874.00 144453.33 93874.00 144432.00C93863.33 144432.00 93852.67 144432.00 93842.00 144432.00C93831.34 144442.67 93820.66 144453.33 93810.00 144464.00C93799.33 144464.00 93788.67 144464.00 93778.00 144464.00C93767.34 144453.33 93756.66 144442.67 93746.00 144432.00C93735.00 144432.00 93724.00 144432.00 93713.00 144432.00C93702.34 144421.33 93691.66 144410.67 93681.00 144400.00C93681.00 144367.67 93681.00 144335.33 93681.00 144303.00C93659.67 144303.00 93638.33 144303.00 93617.00 144303.00C93627.67 144281.67 93638.33 144260.33 93649.00 144239.00C93617.00 144217.67 93585.00 144196.33 93553.00 144175.00C93563.67 144153.55 93574.52 144132.18 93585.08 144110.67C93595.72 144067.78 93606.36 144024.89 93617.00 143982.00C93606.33 143960.67 93595.67 143939.33 93585.00 143918.00C93585.00 143853.67 93585.00 143789.33 93585.00 143725.00C93574.34 143714.33 93563.66 143703.67 93553.00 143693.00C93574.33 143650.00 93595.67 143607.00 93617.00 143564.00C93617.00 143531.67 93617.00 143499.33 93617.00 143467.00C93595.66 143445.67 93574.34 143424.33 93553.00 143403.00C93563.67 143403.00 93574.33 143403.00 93585.00 143403.00C93574.33 143381.67 93563.67 143360.33 93553.00 143339.00C93563.67 143306.67 93574.33 143274.33 93585.00 143242.00C93595.66 143231.33 93606.34 143220.67 93617.00 143210.00C93606.34 143199.33 93595.66 143188.67 93585.00 143178.00C93574.33 143178.00 93563.67 143178.00 93553.00 143178.00C93542.34 143188.67 93531.66 143199.33 93521.00 143210.00C93499.08 143188.92 93477.40 143167.61 93456.00 143146.00C93466.67 143114.00 93477.33 143082.00 93488.00 143050.00C93477.33 143039.00 93466.67 143028.00 93456.00 143017.00C93445.33 143017.00 93434.67 143017.00 93424.00 143017.00C93424.00 142974.33 93424.00 142931.67 93424.00 142889.00C93413.33 142867.33 93402.67 142845.67 93392.00 142824.00C93381.33 142835.00 93370.67 142846.00 93360.00 142857.00C93349.33 142846.00 93338.67 142835.00 93328.00 142824.00C93306.34 142813.33 93284.66 142802.67 93263.00 142792.00C93263.00 142781.33 93263.00 142770.67 93263.00 142760.00C93231.00 142770.67 93199.00 142781.33 93167.00 142792.00C93156.34 142781.33 93145.66 142770.67 93135.00 142760.00C93135.00 142706.33 93135.00 142652.67 93135.00 142599.00C93145.67 142577.67 93156.33 142556.33 93167.00 142535.00C93167.00 142524.33 93167.00 142513.67 93167.00 142503.00C93177.66 142492.33 93188.34 142481.67 93199.00 142471.00C93177.67 142449.33 93156.33 142427.67 93135.00 142406.00C93135.00 142384.67 93135.00 142363.33 93135.00 142342.00C93124.33 142320.67 93113.67 142299.33 93103.00 142278.00C93102.76 142266.99 93103.48 142255.85 93102.63 142244.91C93091.69 142212.84 93080.86 142180.73 93069.85 142148.69C93059.23 142127.46 93048.62 142106.23 93038.00 142085.00C93027.33 142085.00 93016.67 142085.00 93006.00 142085.00C93006.00 142063.67 93006.00 142042.33 93006.00 142021.00C93027.33 142021.00 93048.67 142021.00 93070.00 142021.00C93081.00 141988.67 93092.00 141956.33 93103.00 141924.00C93092.00 141913.33 93081.00 141902.67 93070.00 141892.00C93123.67 141827.67 93177.33 141763.33 93231.00 141699.00C93241.67 141645.33 93252.33 141591.67 93263.00 141538.00C93252.33 141516.67 93241.67 141495.33 93231.00 141474.00C93220.33 141474.00 93209.67 141474.00 93199.00 141474.00C93199.00 141452.67 93199.00 141431.33 93199.00 141410.00C93177.66 141377.67 93156.34 141345.33 93135.00 141313.00C93102.66 141291.67 93070.34 141270.33 93038.00 141249.00C93048.67 141227.67 93059.33 141206.33 93070.00 141185.00C93059.33 141152.67 93048.67 141120.33 93038.00 141088.00C93038.00 141077.33 93038.00 141066.67 93038.00 141056.00C93070.33 141045.33 93102.67 141034.67 93135.00 141024.00C93156.34 141002.67 93177.66 140981.33 93199.00 140960.00C93188.33 140949.00 93177.67 140938.00 93167.00 140927.00C93156.33 140927.00 93145.67 140927.00 93135.00 140927.00C93124.34 140916.33 93113.66 140905.67 93103.00 140895.00C93113.66 140884.33 93124.34 140873.67 93135.00 140863.00C93113.33 140831.00 93091.67 140799.00 93070.00 140767.00C93091.67 140767.00 93113.33 140767.00 93135.00 140767.00C93145.67 140745.33 93156.33 140723.67 93167.00 140702.00C93177.66 140691.33 93188.34 140680.67 93199.00 140670.00C93167.00 140638.00 93135.00 140606.00 93103.00 140574.00C93103.00 140541.67 93103.00 140509.33 93103.00 140477.00C93060.23 140456.05 93017.60 140434.83 92975.00 140413.55C92969.10 140412.31 92962.73 140413.36 92956.65 140412.99C92950.14 140413.37 92943.29 140411.93 92937.14 140414.60C92906.43 140424.74 92875.71 140434.87 92845.00 140445.00C92845.00 140391.33 92845.00 140337.67 92845.00 140284.00C92812.78 140219.78 92780.95 140155.36 92749.00 140091.00C92759.67 140091.00 92770.33 140091.00 92781.00 140091.00C92781.00 140059.00 92781.00 140027.00 92781.00 139995.00C92770.34 139984.33 92759.66 139973.67 92749.00 139963.00C92759.66 139952.33 92770.34 139941.67 92781.00 139931.00C92759.90 139909.22 92738.86 139887.37 92717.08 139866.28C92702.66 139858.63 92687.74 139851.75 92673.13 139844.40C92666.08 139840.94 92659.04 139837.47 92652.00 139834.00C92663.00 139791.33 92674.00 139748.67 92685.00 139706.00C92674.00 139695.00 92663.00 139684.00 92652.00 139673.00C92673.66 139662.33 92695.34 139651.67 92717.00 139641.00C92695.33 139598.33 92673.67 139555.67 92652.00 139513.00C92652.00 139491.33 92652.00 139469.67 92652.00 139448.00C92630.67 139448.00 92609.33 139448.00 92588.00 139448.00C92598.66 139437.33 92609.34 139426.67 92620.00 139416.00C92609.34 139405.33 92598.66 139394.67 92588.00 139384.00C92598.67 139362.67 92609.33 139341.33 92620.00 139320.00C92609.33 139287.67 92598.67 139255.33 92588.00 139223.00C92588.00 139201.67 92588.00 139180.33 92588.00 139159.00C92566.67 139148.33 92545.33 139137.67 92524.00 139127.00C92534.67 139105.33 92545.33 139083.67 92556.00 139062.00C92545.33 139030.00 92534.67 138998.00 92524.00 138966.00C92534.66 138955.33 92545.34 138944.67 92556.00 138934.00C92556.00 138880.33 92556.00 138826.67 92556.00 138773.00C92566.66 138762.33 92577.34 138751.67 92588.00 138741.00C92588.00 138719.67 92588.00 138698.33 92588.00 138677.00C92609.33 138666.00 92630.67 138655.00 92652.00 138644.00C92652.00 138622.67 92652.00 138601.33 92652.00 138580.00C92663.00 138569.33 92674.00 138558.67 92685.00 138548.00C92706.33 138558.67 92727.67 138569.33 92749.00 138580.00C92749.00 138569.33 92749.00 138558.67 92749.00 138548.00C92738.34 138537.33 92727.66 138526.67 92717.00 138516.00C92717.00 138505.33 92717.00 138494.67 92717.00 138484.00C92727.66 138473.33 92738.34 138462.67 92749.00 138452.00C92749.23 138440.65 92748.54 138429.20 92749.36 138417.92C92759.90 138386.28 92770.45 138354.64 92781.00 138323.00C92770.33 138291.00 92759.67 138259.00 92749.00 138227.00C92759.67 138216.00 92770.33 138205.00 92781.00 138194.00C92770.33 138172.67 92759.67 138151.33 92749.00 138130.00C92749.00 138098.00 92749.00 138066.00 92749.00 138034.00C92738.33 138023.00 92727.67 138012.00 92717.00 138001.00C92717.00 137969.00 92717.00 137937.00 92717.00 137905.00C92684.56 137872.95 92652.24 137840.78 92619.71 137808.81C92587.74 137787.11 92555.67 137765.55 92523.76 137743.76C92513.18 137733.17 92502.58 137722.59 92492.00 137712.00C92470.33 137712.00 92448.67 137712.00 92427.00 137712.00C92405.61 137669.50 92384.57 137626.82 92363.50 137584.16C92358.67 137579.66 92351.38 137577.83 92345.60 137574.37C92308.40 137555.91 92271.20 137537.45 92234.00 137519.00C92202.00 137433.33 92170.00 137347.67 92138.00 137262.00C92138.00 137240.67 92138.00 137219.33 92138.00 137198.00C92127.33 137176.33 92116.67 137154.67 92106.00 137133.00C92116.67 137111.67 92127.33 137090.33 92138.00 137069.00C92148.67 137069.00 92159.33 137069.00 92170.00 137069.00C92170.23 137057.99 92169.54 137046.86 92170.36 137035.91C92180.90 137003.94 92191.45 136971.97 92202.00 136940.00C92191.33 136897.33 92180.67 136854.67 92170.00 136812.00C92159.34 136801.33 92148.66 136790.67 92138.00 136780.00C92148.67 136769.00 92159.33 136758.00 92170.00 136747.00C92159.34 136736.33 92148.66 136725.67 92138.00 136715.00C92105.67 136704.33 92073.33 136693.67 92041.00 136683.00C92030.34 136693.67 92019.66 136704.33 92009.00 136715.00C91998.34 136704.33 91987.66 136693.67 91977.00 136683.00C91966.34 136693.67 91955.66 136704.33 91945.00 136715.00C91934.21 136704.31 91923.61 136693.41 91912.69 136682.85C91891.46 136672.24 91870.23 136661.62 91849.00 136651.00C91859.67 136629.67 91870.33 136608.33 91881.00 136587.00C91881.00 136576.33 91881.00 136565.67 91881.00 136555.00C91838.00 136533.33 91795.00 136511.67 91752.00 136490.00C91741.24 136457.43 91730.13 136424.96 91719.59 136392.33C91709.05 136349.89 91698.53 136307.44 91688.00 136265.00C91666.66 136243.67 91645.34 136222.33 91624.00 136201.00C91559.67 136201.00 91495.33 136201.00 91431.00 136201.00C91398.67 136190.33 91366.33 136179.67 91334.00 136169.00C91323.34 136179.67 91312.66 136190.33 91302.00 136201.00C91291.34 136190.33 91280.66 136179.67 91270.00 136169.00C91248.34 136179.67 91226.66 136190.33 91205.00 136201.00C91194.34 136211.67 91183.66 136222.33 91173.00 136233.00C91141.00 136233.00 91109.00 136233.00 91077.00 136233.00C91055.66 136211.67 91034.34 136190.33 91013.00 136169.00C90980.67 136179.67 90948.33 136190.33 90916.00 136201.00C90916.00 136222.33 90916.00 136243.67 90916.00 136265.00C90905.33 136265.00 90894.67 136265.00 90884.00 136265.00C90873.34 136254.33 90862.66 136243.67 90852.00 136233.00C90809.00 136222.33 90766.00 136211.67 90723.00 136201.00C90701.67 136190.33 90680.33 136179.67 90659.00 136169.00C90648.33 136169.00 90637.67 136169.00 90627.00 136169.00C90616.34 136179.67 90605.66 136190.33 90595.00 136201.00C90573.33 136201.00 90551.67 136201.00 90530.00 136201.00C90519.34 136211.67 90508.66 136222.33 90498.00 136233.00C90508.66 136222.33 90519.34 136211.67 90530.00 136201.00C90508.67 136201.00 90487.33 136201.00 90466.00 136201.00C90433.66 136179.67 90401.34 136158.33 90369.00 136137.00C90358.33 136137.00 90347.67 136137.00 90337.00 136137.00C90337.00 136147.67 90337.00 136158.33 90337.00 136169.00C90326.34 136179.67 90315.66 136190.33 90305.00 136201.00C90262.33 136201.00 90219.67 136201.00 90177.00 136201.00C90166.00 136211.67 90155.00 136222.33 90144.00 136233.00C90133.34 136222.33 90122.66 136211.67 90112.00 136201.00C90112.00 136190.33 90112.00 136179.67 90112.00 136169.00C90090.67 136169.00 90069.33 136169.00 90048.00 136169.00C90048.00 136179.67 90048.00 136190.33 90048.00 136201.00C90037.33 136179.67 90026.67 136158.33 90016.00 136137.00C90005.34 136147.67 89994.66 136158.33 89984.00 136169.00C89962.33 136169.00 89940.67 136169.00 89919.00 136169.00C89919.00 136158.33 89919.00 136147.67 89919.00 136137.00C89887.00 136115.33 89855.00 136093.67 89823.00 136072.00C89823.00 136050.67 89823.00 136029.33 89823.00 136008.00C89812.34 135997.33 89801.66 135986.67 89791.00 135976.00C89758.67 135976.00 89726.33 135976.00 89694.00 135976.00C89683.34 135965.33 89672.66 135954.67 89662.00 135944.00C89651.34 135954.67 89640.66 135965.33 89630.00 135976.00C89608.67 135954.33 89587.33 135932.67 89566.00 135911.00C89544.34 135900.33 89522.66 135889.67 89501.00 135879.00C89490.34 135868.33 89479.66 135857.67 89469.00 135847.00C89458.34 135857.67 89447.66 135868.33 89437.00 135879.00C89415.66 135857.67 89394.34 135836.33 89373.00 135815.00C89373.00 135804.33 89373.00 135793.67 89373.00 135783.00C89362.33 135783.00 89351.67 135783.00 89341.00 135783.00C89330.00 135761.67 89319.00 135740.33 89308.00 135719.00C89308.00 135708.00 89308.00 135697.00 89308.00 135686.00C89297.33 135686.00 89286.67 135686.00 89276.00 135686.00C89276.00 135675.33 89276.00 135664.67 89276.00 135654.00C89265.34 135664.67 89254.66 135675.33 89244.00 135686.00C89233.34 135675.33 89222.66 135664.67 89212.00 135654.00C89201.33 135622.00 89190.67 135590.00 89180.00 135558.00C89180.00 135515.00 89180.00 135472.00 89180.00 135429.00C89158.67 135418.33 89137.33 135407.67 89116.00 135397.00C89126.67 135397.00 89137.33 135397.00 89148.00 135397.00C89137.34 135386.33 89126.66 135375.67 89116.00 135365.00C89116.00 135354.33 89116.00 135343.67 89116.00 135333.00C89094.34 135322.33 89072.66 135311.67 89051.00 135301.00C89061.67 135290.00 89072.33 135279.00 89083.00 135268.00C89083.00 135236.00 89083.00 135204.00 89083.00 135172.00C89072.34 135182.67 89061.66 135193.33 89051.00 135204.00C89019.00 135204.00 88987.00 135204.00 88955.00 135204.00C88955.00 135214.67 88955.00 135225.33 88955.00 135236.00C88944.34 135225.33 88933.66 135214.67 88923.00 135204.00C88912.34 135214.67 88901.66 135225.33 88891.00 135236.00C88880.00 135225.33 88869.00 135214.67 88858.00 135204.00C88847.34 135214.67 88836.66 135225.33 88826.00 135236.00C88815.34 135225.33 88804.66 135214.67 88794.00 135204.00C88794.00 135214.67 88794.00 135225.33 88794.00 135236.00C88783.33 135236.00 88772.67 135236.00 88762.00 135236.00C88762.00 135225.33 88762.00 135214.67 88762.00 135204.00C88751.33 135204.00 88740.67 135204.00 88730.00 135204.00C88730.00 135214.67 88730.00 135225.33 88730.00 135236.00C88719.34 135225.33 88708.66 135214.67 88698.00 135204.00C88687.00 135225.33 88676.00 135246.67 88665.00 135268.00C88633.00 135268.00 88601.00 135268.00 88569.00 135268.00C88558.33 135279.00 88547.67 135290.00 88537.00 135301.00C88537.00 135311.67 88537.00 135322.33 88537.00 135333.00C88515.33 135333.00 88493.67 135333.00 88472.00 135333.00C88472.00 135354.33 88472.00 135375.67 88472.00 135397.00C88461.34 135407.67 88450.66 135418.33 88440.00 135429.00C88440.00 135439.67 88440.00 135450.33 88440.00 135461.00C88450.67 135472.00 88461.33 135483.00 88472.00 135494.00C88461.33 135494.00 88450.67 135494.00 88440.00 135494.00C88440.00 135515.33 88440.00 135536.67 88440.00 135558.00C88418.67 135547.33 88397.33 135536.67 88376.00 135526.00C88376.00 135547.33 88376.00 135568.67 88376.00 135590.00C88386.67 135590.00 88397.33 135590.00 88408.00 135590.00C88376.00 135611.33 88344.00 135632.67 88312.00 135654.00C88312.00 135675.67 88312.00 135697.33 88312.00 135719.00C88301.34 135729.67 88290.66 135740.33 88280.00 135751.00C88290.66 135761.67 88301.34 135772.33 88312.00 135783.00C88301.33 135783.00 88290.67 135783.00 88280.00 135783.00C88269.00 135804.33 88258.00 135825.67 88247.00 135847.00C88236.34 135836.33 88225.66 135825.67 88215.00 135815.00C88204.33 135815.00 88193.67 135815.00 88183.00 135815.00C88183.00 135825.67 88183.00 135836.33 88183.00 135847.00C88172.33 135847.00 88161.67 135847.00 88151.00 135847.00C88140.34 135857.67 88129.66 135868.33 88119.00 135879.00C88108.34 135868.33 88097.66 135857.67 88087.00 135847.00C88087.00 135857.67 88087.00 135868.33 88087.00 135879.00C88076.34 135889.67 88065.66 135900.33 88055.00 135911.00C88055.00 135922.00 88055.00 135933.00 88055.00 135944.00C88022.66 135965.33 87990.34 135986.67 87958.00 136008.00C87936.67 136008.00 87915.33 136008.00 87894.00 136008.00C87904.67 136040.00 87915.33 136072.00 87926.00 136104.00C87915.33 136104.00 87904.67 136104.00 87894.00 136104.00C87883.21 136093.31 87872.62 136082.41 87861.69 136071.85C87819.06 136050.89 87776.43 136029.92 87734.05 136008.46C87729.70 136003.58 87727.79 135996.50 87724.39 135990.77C87716.59 135975.18 87708.80 135959.59 87701.00 135944.00C87701.00 135922.33 87701.00 135900.67 87701.00 135879.00C87690.34 135889.67 87679.66 135900.33 87669.00 135911.00C87669.00 135900.33 87669.00 135889.67 87669.00 135879.00C87647.33 135879.00 87625.67 135879.00 87604.00 135879.00C87604.00 135889.67 87604.00 135900.33 87604.00 135911.00C87614.67 135922.00 87625.33 135933.00 87636.00 135944.00C87636.00 135954.67 87636.00 135965.33 87636.00 135976.00C87625.33 135976.00 87614.67 135976.00 87604.00 135976.00C87604.00 135986.67 87604.00 135997.33 87604.00 136008.00C87572.00 136040.00 87540.00 136072.00 87508.00 136104.00C87486.67 136093.33 87465.33 136082.67 87444.00 136072.00C87454.66 136061.33 87465.34 136050.67 87476.00 136040.00C87454.59 136018.41 87432.93 135997.06 87411.00 135976.00C87400.34 135986.67 87389.66 135997.33 87379.00 136008.00C87357.67 136008.00 87336.33 136008.00 87315.00 136008.00C87315.00 136018.67 87315.00 136029.33 87315.00 136040.00C87293.67 136050.67 87272.33 136061.33 87251.00 136072.00C87240.33 136072.00 87229.67 136072.00 87219.00 136072.00C87219.00 136061.33 87219.00 136050.67 87219.00 136040.00C87208.00 136040.00 87197.00 136040.00 87186.00 136040.00C87197.00 136029.33 87208.00 136018.67 87219.00 136008.00C87208.00 136008.00 87197.00 136008.00 87186.00 136008.00C87164.67 136018.67 87143.33 136029.33 87122.00 136040.00C87122.00 136093.67 87122.00 136147.33 87122.00 136201.00C87100.67 136211.67 87079.33 136222.33 87058.00 136233.00C87047.21 136243.69 87036.62 136254.59 87025.69 136265.15C87004.13 136275.76 86982.56 136286.38 86961.00 136297.00C86950.33 136297.00 86939.67 136297.00 86929.00 136297.00C86918.33 136275.67 86907.67 136254.33 86897.00 136233.00C86886.33 136233.00 86875.67 136233.00 86865.00 136233.00C86843.67 136222.33 86822.33 136211.67 86801.00 136201.00C86790.00 136190.33 86779.00 136179.67 86768.00 136169.00C86779.00 136147.33 86790.00 136125.67 86801.00 136104.00C86790.00 136082.67 86779.00 136061.33 86768.00 136040.00C86757.33 136040.00 86746.67 136040.00 86736.00 136040.00C86714.67 136050.67 86693.33 136061.33 86672.00 136072.00C86672.00 136082.67 86672.00 136093.33 86672.00 136104.00C86661.33 136115.00 86650.67 136126.00 86640.00 136137.00C86622.00 136118.36 86604.04 136099.68 86585.19 136081.88C86582.67 136078.80 86575.62 136073.89 86576.03 136072.00C86586.69 136072.00 86597.34 136072.00 86608.00 136072.00C86597.00 136072.00 86586.00 136072.00 86575.00 136072.00C86564.34 136061.33 86553.66 136050.67 86543.00 136040.00C86532.34 136050.67 86521.66 136061.33 86511.00 136072.00C86489.67 136072.00 86468.33 136072.00 86447.00 136072.00C86436.31 136061.20 86425.41 136050.61 86414.85 136039.69C86404.23 136018.46 86393.62 135997.23 86383.00 135976.00C86361.34 135986.67 86339.66 135997.33 86318.00 136008.00C86296.67 136008.00 86275.33 136008.00 86254.00 136008.00C86243.34 135997.33 86232.66 135986.67 86222.00 135976.00C86232.66 135965.33 86243.34 135954.67 86254.00 135944.00C86243.33 135933.00 86232.67 135922.00 86222.00 135911.00C86200.34 135932.67 86178.66 135954.33 86157.00 135976.00C86146.34 135965.33 86135.66 135954.67 86125.00 135944.00C86114.34 135954.67 86103.66 135965.33 86093.00 135976.00C86071.67 135976.00 86050.33 135976.00 86029.00 135976.00C86018.34 135986.67 86007.66 135997.33 85997.00 136008.00C85986.34 135997.33 85975.66 135986.67 85965.00 135976.00C85965.00 135965.33 85965.00 135954.67 85965.00 135944.00C85943.33 135944.00 85921.67 135944.00 85900.00 135944.00C85910.67 135965.33 85921.33 135986.67 85932.00 136008.00C85900.00 136008.00 85868.00 136008.00 85836.00 136008.00C85825.34 136018.67 85814.66 136029.33 85804.00 136040.00C85793.34 136029.33 85782.66 136018.67 85772.00 136008.00C85761.00 136018.67 85750.00 136029.33 85739.00 136040.00C85728.33 136040.00 85717.67 136040.00 85707.00 136040.00C85696.34 136029.33 85685.66 136018.67 85675.00 136008.00C85685.67 135975.67 85696.33 135943.33 85707.00 135911.00C85685.67 135922.00 85664.33 135933.00 85643.00 135944.00C85611.00 135933.00 85579.00 135922.00 85547.00 135911.00C85525.33 135922.00 85503.67 135933.00 85482.00 135944.00C85471.33 135933.00 85460.67 135922.00 85450.00 135911.00C85439.33 135922.00 85428.67 135933.00 85418.00 135944.00C85396.67 135944.00 85375.33 135944.00 85354.00 135944.00C85343.00 135954.67 85332.00 135965.33 85321.00 135976.00C85321.00 135965.33 85321.00 135954.67 85321.00 135944.00C85310.33 135933.00 85299.67 135922.00 85289.00 135911.00C85289.00 135900.33 85289.00 135889.67 85289.00 135879.00C85278.34 135868.33 85267.66 135857.67 85257.00 135847.00C85246.34 135857.67 85235.66 135868.33 85225.00 135879.00C85214.33 135879.00 85203.67 135879.00 85193.00 135879.00C85193.00 135868.33 85193.00 135857.67 85193.00 135847.00C85193.00 135868.33 85193.00 135889.67 85193.00 135911.00C85203.67 135922.00 85214.33 135933.00 85225.00 135944.00C85203.67 135944.00 85182.33 135944.00 85161.00 135944.00C85161.00 135954.67 85161.00 135965.33 85161.00 135976.00C85128.66 135997.33 85096.34 136018.67 85064.00 136040.00C85042.66 136018.67 85021.34 135997.33 85000.00 135976.00C84967.67 135976.00 84935.33 135976.00 84903.00 135976.00C84903.00 135965.33 84903.00 135954.67 84903.00 135944.00C84892.34 135954.67 84881.66 135965.33 84871.00 135976.00C84871.00 135965.33 84871.00 135954.67 84871.00 135944.00C84860.33 135933.00 84849.67 135922.00 84839.00 135911.00C84828.33 135911.00 84817.67 135911.00 84807.00 135911.00C84807.00 135900.33 84807.00 135889.67 84807.00 135879.00C84785.67 135889.67 84764.33 135900.33 84743.00 135911.00C84743.00 135922.00 84743.00 135933.00 84743.00 135944.00C84721.34 135954.67 84699.66 135965.33 84678.00 135976.00C84689.00 135986.67 84700.00 135997.33 84711.00 136008.00C84700.00 136008.00 84689.00 136008.00 84678.00 136008.00C84656.67 135997.33 84635.33 135986.67 84614.00 135976.00C84614.00 135965.33 84614.00 135954.67 84614.00 135944.00C84603.34 135954.67 84592.66 135965.33 84582.00 135976.00C84582.00 135965.33 84582.00 135954.67 84582.00 135944.00C84571.33 135944.00 84560.67 135944.00 84550.00 135944.00C84539.33 135933.00 84528.67 135922.00 84518.00 135911.00C84507.00 135922.00 84496.00 135933.00 84485.00 135944.00C84463.67 135944.00 84442.33 135944.00 84421.00 135944.00C84421.00 135933.00 84421.00 135922.00 84421.00 135911.00C84410.33 135911.00 84399.67 135911.00 84389.00 135911.00C84399.67 135889.67 84410.33 135868.33 84421.00 135847.00C84399.67 135847.00 84378.33 135847.00 84357.00 135847.00C84357.00 135836.33 84357.00 135825.67 84357.00 135815.00C84346.34 135825.67 84335.66 135836.33 84325.00 135847.00C84325.00 135836.33 84325.00 135825.67 84325.00 135815.00C84292.67 135804.33 84260.33 135793.67 84228.00 135783.00C84206.67 135793.67 84185.33 135804.33 84164.00 135815.00C84174.66 135804.33 84185.34 135793.67 84196.00 135783.00C84174.67 135783.00 84153.33 135783.00 84132.00 135783.00C84110.66 135761.67 84089.34 135740.33 84068.00 135719.00C84057.00 135729.67 84046.00 135740.33 84035.00 135751.00C84035.00 135761.67 84035.00 135772.33 84035.00 135783.00C84035.00 135761.67 84035.00 135740.33 84035.00 135719.00C84024.34 135729.67 84013.66 135740.33 84003.00 135751.00C83992.34 135740.33 83981.66 135729.67 83971.00 135719.00C83949.67 135729.67 83928.33 135740.33 83907.00 135751.00C83896.33 135751.00 83885.67 135751.00 83875.00 135751.00C83875.00 135740.33 83875.00 135729.67 83875.00 135719.00C83853.33 135719.00 83831.67 135719.00 83810.00 135719.00C83788.67 135697.33 83767.33 135675.67 83746.00 135654.00C83735.33 135654.00 83724.67 135654.00 83714.00 135654.00C83703.21 135664.69 83692.61 135675.59 83681.69 135686.16C83660.13 135697.10 83638.56 135708.05 83617.00 135719.00C83574.33 135708.00 83531.67 135697.00 83489.00 135686.00C83478.33 135686.00 83467.67 135686.00 83457.00 135686.00C83446.00 135664.67 83435.00 135643.33 83424.00 135622.00C83424.00 135579.33 83424.00 135536.67 83424.00 135494.00C83413.34 135504.67 83402.66 135515.33 83392.00 135526.00C83392.00 135515.33 83392.00 135504.67 83392.00 135494.00C83381.33 135494.00 83370.67 135494.00 83360.00 135494.00C83360.00 135483.00 83360.00 135472.00 83360.00 135461.00C83349.33 135461.00 83338.67 135461.00 83328.00 135461.00C83328.00 135450.33 83328.00 135439.67 83328.00 135429.00C83317.33 135429.00 83306.67 135429.00 83296.00 135429.00C83306.66 135418.33 83317.34 135407.67 83328.00 135397.00C83317.33 135375.67 83306.67 135354.33 83296.00 135333.00C83296.00 135311.33 83296.00 135289.67 83296.00 135268.00C83253.00 135289.67 83210.00 135311.33 83167.00 135333.00C83124.33 135333.00 83081.67 135333.00 83039.00 135333.00C83017.42 135312.30 82996.12 135291.30 82975.30 135269.83C82964.20 135258.55 82953.10 135247.28 82942.00 135236.00C82931.34 135246.67 82920.66 135257.33 82910.00 135268.00C82888.67 135268.00 82867.33 135268.00 82846.00 135268.00C82846.00 135279.00 82846.00 135290.00 82846.00 135301.00C82835.00 135311.67 82824.00 135322.33 82813.00 135333.00C82813.00 135343.67 82813.00 135354.33 82813.00 135365.00C82791.66 135343.67 82770.34 135322.33 82749.00 135301.00C82738.34 135311.67 82727.66 135322.33 82717.00 135333.00C82706.33 135333.00 82695.67 135333.00 82685.00 135333.00C82685.00 135354.33 82685.00 135375.67 82685.00 135397.00C82695.67 135397.00 82706.33 135397.00 82717.00 135397.00C82717.00 135418.33 82717.00 135439.67 82717.00 135461.00C82695.67 135472.00 82674.33 135483.00 82653.00 135494.00C82631.33 135494.00 82609.67 135494.00 82588.00 135494.00C82556.00 135472.33 82524.00 135450.67 82492.00 135429.00C82481.34 135439.67 82470.66 135450.33 82460.00 135461.00C82449.33 135493.33 82438.67 135525.67 82428.00 135558.00C82417.33 135558.00 82406.67 135558.00 82396.00 135558.00C82385.00 135536.67 82374.00 135515.33 82363.00 135494.00C82352.33 135494.00 82341.67 135494.00 82331.00 135494.00C82320.33 135472.33 82309.67 135450.67 82299.00 135429.00C82288.34 135418.33 82277.66 135407.67 82267.00 135397.00C82213.33 135418.33 82159.67 135439.67 82106.00 135461.00C82116.67 135472.00 82127.33 135483.00 82138.00 135494.00C82116.67 135483.00 82095.33 135472.00 82074.00 135461.00C82052.67 135461.00 82031.33 135461.00 82010.00 135461.00C81999.00 135450.33 81988.00 135439.67 81977.00 135429.00C81913.00 135429.00 81849.00 135429.00 81785.00 135429.00C81795.67 135407.67 81806.33 135386.33 81817.00 135365.00C81806.34 135354.33 81795.66 135343.67 81785.00 135333.00C81774.00 135300.67 81763.00 135268.33 81752.00 135236.00C81730.67 135236.00 81709.33 135236.00 81688.00 135236.00C81677.34 135225.33 81666.66 135214.67 81656.00 135204.00C81645.33 135225.33 81634.67 135246.67 81624.00 135268.00C81602.67 135268.00 81581.33 135268.00 81560.00 135268.00C81549.00 135257.33 81538.00 135246.67 81527.00 135236.00C81516.34 135246.67 81505.66 135257.33 81495.00 135268.00C81505.67 135214.67 81516.33 135161.33 81527.00 135108.00C81516.33 135097.00 81505.67 135086.00 81495.00 135075.00C81473.67 135075.00 81452.33 135075.00 81431.00 135075.00C81431.00 135053.67 81431.00 135032.33 81431.00 135011.00C81441.67 134989.67 81452.33 134968.33 81463.00 134947.00C81516.67 134914.67 81570.33 134882.33 81624.00 134850.00C81624.00 134807.33 81624.00 134764.67 81624.00 134722.00C81645.34 134700.67 81666.66 134679.33 81688.00 134658.00C81709.33 134582.67 81730.67 134507.33 81752.00 134432.00C81752.00 134410.67 81752.00 134389.33 81752.00 134368.00C81741.33 134368.00 81730.67 134368.00 81720.00 134368.00C81709.34 134357.33 81698.66 134346.67 81688.00 134336.00C81720.34 134314.67 81752.66 134293.33 81785.00 134272.00C81806.33 134272.00 81827.67 134272.00 81849.00 134272.00C81859.67 134261.00 81870.33 134250.00 81881.00 134239.00C81870.21 134228.31 81859.62 134217.41 81848.69 134206.85C81763.13 134164.24 81677.56 134121.62 81592.00 134079.00C81592.00 134068.33 81592.00 134057.67 81592.00 134047.00C81641.39 134030.04 81690.71 134012.84 81740.38 133996.72C81755.26 133991.81 81770.13 133986.91 81785.00 133982.00C81817.00 133917.67 81849.00 133853.33 81881.00 133789.00C81881.00 133757.00 81881.00 133725.00 81881.00 133693.00C81859.67 133693.00 81838.33 133693.00 81817.00 133693.00C81785.44 133661.75 81753.34 133631.02 81722.73 133598.82C81717.43 133594.32 81721.07 133586.21 81720.00 133580.00C81720.67 133573.71 81718.46 133566.73 81721.50 133561.00C81731.67 133540.67 81741.83 133520.33 81752.00 133500.00C81816.33 133457.00 81880.67 133414.00 81945.00 133371.00C81966.67 133349.67 81988.33 133328.33 82010.00 133307.00C82010.00 133296.33 82010.00 133285.67 82010.00 133275.00C81945.66 133242.67 81881.34 133210.33 81817.00 133178.00C81785.11 133113.78 81752.44 133049.95 81720.00 132986.00C81741.67 132953.67 81763.33 132921.33 81785.00 132889.00C81817.00 132878.33 81849.00 132867.67 81881.00 132857.00C81881.00 132846.33 81881.00 132835.67 81881.00 132825.00C81859.67 132803.33 81838.33 132781.67 81817.00 132760.00C81763.33 132738.67 81709.67 132717.33 81656.00 132696.00C81645.33 132664.00 81634.67 132632.00 81624.00 132600.00C81624.00 132567.67 81624.00 132535.33 81624.00 132503.00C81634.67 132471.00 81645.33 132439.00 81656.00 132407.00C81677.33 132396.33 81698.67 132385.67 81720.00 132375.00C81741.71 132342.56 81763.51 132310.17 81785.15 132277.69C81795.77 132256.46 81806.38 132235.23 81817.00 132214.00C81817.00 132192.67 81817.00 132171.33 81817.00 132150.00C81838.53 132095.60 81860.39 132041.32 81881.71 131986.84C81892.14 131955.23 81902.57 131923.62 81913.00 131892.00C81977.33 131817.00 82041.67 131742.00 82106.00 131667.00C82116.74 131645.28 82127.87 131623.74 82138.36 131601.91C82148.90 131569.94 82159.45 131537.97 82170.00 131506.00C82159.34 131495.33 82148.66 131484.67 82138.00 131474.00C82073.67 131463.33 82009.33 131452.67 81945.00 131442.00C81902.34 131399.33 81859.66 131356.67 81817.00 131314.00C81827.78 131302.96 81838.42 131291.77 81849.29 131280.81C81945.52 131216.54 82041.76 131152.27 82138.00 131088.00C82148.67 131066.67 82159.33 131045.33 82170.00 131024.00C82170.00 130970.33 82170.00 130916.67 82170.00 130863.00C82148.67 130777.33 82127.33 130691.67 82106.00 130606.00C82106.00 130595.33 82106.00 130584.67 82106.00 130574.00C82138.33 130520.33 82170.67 130466.67 82203.00 130413.00C82170.67 130359.33 82138.33 130305.67 82106.00 130252.00C82095.33 130209.33 82084.67 130166.67 82074.00 130124.00C82106.00 130102.67 82138.00 130081.33 82170.00 130060.00C82202.33 130006.33 82234.67 129952.67 82267.00 129899.00C82288.33 129877.33 82309.67 129855.67 82331.00 129834.00C82320.33 129812.67 82309.67 129791.33 82299.00 129770.00C82299.00 129716.33 82299.00 129662.67 82299.00 129609.00C82277.67 129609.00 82256.33 129609.00 82235.00 129609.00C82213.34 129630.67 82191.66 129652.33 82170.00 129674.00C82148.67 129674.00 82127.33 129674.00 82106.00 129674.00C82095.31 129663.20 82084.41 129652.61 82073.85 129641.69C82052.57 129598.79 82031.28 129555.90 82010.00 129513.00C81998.87 129502.31 81987.94 129491.41 81976.69 129480.85C81955.46 129470.23 81934.23 129459.62 81913.00 129449.00C81891.67 129459.67 81870.33 129470.33 81849.00 129481.00C81827.67 129470.33 81806.33 129459.67 81785.00 129449.00C81795.67 129427.33 81806.33 129405.67 81817.00 129384.00C81913.42 129319.79 82009.68 129255.36 82106.00 129191.00C82116.67 129159.00 82127.33 129127.00 82138.00 129095.00C82127.33 129073.67 82116.67 129052.33 82106.00 129031.00C82052.33 128988.00 81998.67 128945.00 81945.00 128902.00C81923.67 128902.00 81902.33 128902.00 81881.00 128902.00C81849.00 128923.33 81817.00 128944.67 81785.00 128966.00C81763.33 128966.00 81741.67 128966.00 81720.00 128966.00C81698.67 128955.33 81677.33 128944.67 81656.00 128934.00C81656.09 128923.23 81655.83 128912.45 81656.13 128901.68C81677.42 128848.12 81698.71 128794.56 81720.00 128741.00C81762.77 128720.07 81805.39 128698.81 81848.00 128677.57C81852.57 128676.69 81857.44 128678.84 81862.13 128679.18C81922.09 128689.11 81982.04 128699.06 82042.00 128709.00C82063.33 128709.00 82084.67 128709.00 82106.00 128709.00C82106.00 128698.33 82106.00 128687.67 82106.00 128677.00C82084.66 128634.53 82063.57 128591.92 82042.59 128549.27C82037.43 128541.65 82031.12 128534.84 82025.50 128527.54C81988.00 128481.02 81950.50 128434.51 81913.00 128388.00C81902.33 128366.33 81891.67 128344.67 81881.00 128323.00C81870.34 128312.33 81859.66 128301.67 81849.00 128291.00C81827.67 128291.00 81806.33 128291.00 81785.00 128291.00C81752.67 128355.33 81720.33 128419.67 81688.00 128484.00C81634.33 128484.00 81580.67 128484.00 81527.00 128484.00C81527.00 128452.00 81527.00 128420.00 81527.00 128388.00C81548.94 128323.64 81570.86 128259.28 81592.00 128194.66C81592.00 128184.11 81592.00 128173.55 81592.00 128163.00C81559.67 128163.00 81527.33 128163.00 81495.00 128163.00C81463.00 128120.00 81431.00 128077.00 81399.00 128034.00C81399.00 128001.67 81399.00 127969.33 81399.00 127937.00C81420.33 127905.00 81441.67 127873.00 81463.00 127841.00C81431.00 127744.67 81399.00 127648.33 81367.00 127552.00C81377.67 127509.00 81388.33 127466.00 81399.00 127423.00C81431.00 127369.33 81463.00 127315.67 81495.00 127262.00C81495.00 127240.67 81495.00 127219.33 81495.00 127198.00C81452.33 127133.67 81409.67 127069.33 81367.00 127005.00C81302.67 126994.33 81238.33 126983.67 81174.00 126973.00C81131.00 126940.67 81088.00 126908.33 81045.00 126876.00C81023.67 126801.00 81002.33 126726.00 80981.00 126651.00C80991.67 126618.88 81002.46 126586.80 81013.07 126554.66C81023.71 126501.11 81034.35 126447.55 81045.00 126394.00C81045.00 126372.67 81045.00 126351.33 81045.00 126330.00C81023.66 126308.67 81002.34 126287.33 80981.00 126266.00C80948.67 126266.00 80916.33 126266.00 80884.00 126266.00C80852.00 126298.00 80820.00 126330.00 80788.00 126362.00C80788.00 126372.67 80788.00 126383.33 80788.00 126394.00C80755.66 126372.67 80723.34 126351.33 80691.00 126330.00C80680.33 126287.00 80669.67 126244.00 80659.00 126201.00C80669.70 126190.21 80680.59 126179.61 80691.16 126168.69C80702.11 126147.46 80713.05 126126.23 80724.00 126105.00C80766.67 126094.33 80809.33 126083.67 80852.00 126073.00C80862.67 126051.33 80873.33 126029.67 80884.00 126008.00C80862.66 125986.67 80841.34 125965.33 80820.00 125944.00C80777.00 125944.00 80734.00 125944.00 80691.00 125944.00C80680.34 125933.33 80669.66 125922.67 80659.00 125912.00C80659.00 125901.33 80659.00 125890.67 80659.00 125880.00C80669.70 125868.88 80680.58 125857.93 80691.16 125846.69C80702.11 125825.46 80713.05 125804.23 80724.00 125783.00C80756.00 125783.00 80788.00 125783.00 80820.00 125783.00C80852.00 125772.33 80884.00 125761.67 80916.00 125751.00C80927.00 125719.00 80938.00 125687.00 80949.00 125655.00C80981.00 125633.33 81013.00 125611.67 81045.00 125590.00C81109.33 125579.33 81173.67 125568.67 81238.00 125558.00C81238.09 125547.23 81237.83 125536.45 81238.13 125525.68C81259.42 125472.12 81280.71 125418.56 81302.00 125365.00C81323.66 125354.33 81345.34 125343.67 81367.00 125333.00C81420.33 125333.00 81473.67 125333.00 81527.00 125333.00C81548.66 125322.33 81570.34 125311.67 81592.00 125301.00C81613.33 125258.00 81634.67 125215.00 81656.00 125172.00C81677.33 125161.33 81698.67 125150.67 81720.00 125140.00C81730.67 125140.00 81741.33 125140.00 81752.00 125140.00C81773.66 125150.67 81795.34 125161.33 81817.00 125172.00C81849.00 125204.33 81881.00 125236.67 81913.00 125269.00C81934.33 125226.00 81955.67 125183.00 81977.00 125140.00C82020.00 125086.33 82063.00 125032.67 82106.00 124979.00C82116.67 124957.67 82127.33 124936.33 82138.00 124915.00C81698.67 124572.00 81259.33 124229.00 80820.00 123886.00C80980.67 123543.00 81141.33 123200.00 81302.00 122857.00z"},"br-13":{"name":"Minas Gerais","path":"M114452.00 124015.00C114441.33 123993.33 114430.67 123971.67 114420.00 123950.00C114441.33 123918.00 114462.67 123886.00 114484.00 123854.00C114452.00 123822.00 114420.00 123790.00 114388.00 123758.00C114388.00 123747.00 114388.00 123736.00 114388.00 123725.00C114398.67 123714.33 114409.33 123703.67 114420.00 123693.00C114430.67 123639.33 114441.33 123585.67 114452.00 123532.00C114473.67 123489.33 114495.33 123446.67 114517.00 123404.00C114527.67 123393.33 114538.33 123382.67 114549.00 123372.00C114581.49 123285.23 114613.27 123198.19 114646.21 123111.60C114656.47 123091.07 114666.73 123070.53 114677.00 123050.00C114698.67 123039.33 114720.33 123028.67 114742.00 123018.00C114752.82 123018.10 114763.64 123017.79 114774.46 123018.15C114806.31 123028.77 114838.15 123039.38 114870.00 123050.00C114902.33 123050.00 114934.67 123050.00 114967.00 123050.00C114967.00 122996.33 114967.00 122942.67 114967.00 122889.00C114955.61 122866.88 114945.28 122844.19 114933.19 122822.46C114880.12 122748.31 114827.06 122674.15 114774.00 122600.00C114774.00 122578.67 114774.00 122557.33 114774.00 122536.00C114795.33 122514.33 114816.67 122492.67 114838.00 122471.00C114859.67 122460.33 114881.33 122449.67 114903.00 122439.00C114958.33 122461.21 115013.29 122484.37 115068.87 122505.95C115163.58 122537.29 115258.29 122568.65 115353.00 122600.00C115363.67 122600.00 115374.33 122600.00 115385.00 122600.00C115406.33 122578.67 115427.67 122557.33 115449.00 122536.00C115449.00 122525.33 115449.00 122514.67 115449.00 122504.00C115427.67 122471.67 115406.33 122439.33 115385.00 122407.00C115330.64 122363.15 115275.69 122320.01 115221.71 122275.71C115211.81 122265.81 115201.90 122255.90 115192.00 122246.00C115202.67 122224.67 115213.33 122203.33 115224.00 122182.00C115224.00 122171.33 115224.00 122160.67 115224.00 122150.00C115245.33 122128.67 115266.67 122107.33 115288.00 122086.00C115298.67 122043.00 115309.33 122000.00 115320.00 121957.00C115341.67 121924.67 115363.33 121892.33 115385.00 121860.00C115385.00 121828.00 115385.00 121796.00 115385.00 121764.00C115395.67 121742.67 115406.33 121721.33 115417.00 121700.00C115417.00 121689.33 115417.00 121678.67 115417.00 121668.00C115438.47 121635.57 115459.73 121603.00 115481.34 121570.66C115524.23 121527.77 115567.11 121484.89 115610.00 121442.00C115642.00 121442.00 115674.00 121442.00 115706.00 121442.00C115738.38 121399.17 115770.95 121356.48 115803.22 121313.57C115813.81 121292.38 115824.41 121271.19 115835.00 121250.00C115835.00 121217.67 115835.00 121185.33 115835.00 121153.00C115845.67 121131.67 115856.33 121110.33 115867.00 121089.00C115952.67 121067.33 116038.33 121045.67 116124.00 121024.00C116134.67 121002.67 116145.33 120981.33 116156.00 120960.00C116145.33 120928.00 116134.67 120896.00 116124.00 120864.00C116134.67 120853.33 116145.33 120842.67 116156.00 120832.00C116295.33 120832.00 116434.67 120832.00 116574.00 120832.00C116595.67 120810.33 116617.33 120788.67 116639.00 120767.00C116681.67 120745.67 116724.33 120724.33 116767.00 120703.00C116767.00 120692.33 116767.00 120681.67 116767.00 120671.00C116778.00 120671.00 116789.00 120671.00 116800.00 120671.00C116821.44 120627.88 116842.74 120584.68 116864.27 120541.60C116906.83 120477.39 116949.42 120413.20 116992.00 120349.00C116992.00 120306.33 116992.00 120263.67 116992.00 120221.00C116981.33 120210.33 116970.67 120199.67 116960.00 120189.00C116970.67 120156.67 116981.33 120124.33 116992.00 120092.00C116970.67 120038.33 116949.33 119984.67 116928.00 119931.00C116928.00 119909.67 116928.00 119888.33 116928.00 119867.00C116992.22 119834.78 117056.64 119802.95 117121.00 119771.00C117131.67 119771.00 117142.33 119771.00 117153.00 119771.00C117185.33 119728.00 117217.67 119685.00 117250.00 119642.00C117282.00 119556.33 117314.00 119470.67 117346.00 119385.00C117346.00 119374.33 117346.00 119363.67 117346.00 119353.00C117356.67 119342.00 117367.33 119331.00 117378.00 119320.00C117410.33 119309.33 117442.67 119298.67 117475.00 119288.00C117496.33 119288.00 117517.67 119288.00 117539.00 119288.00C117549.67 119277.33 117560.33 119266.67 117571.00 119256.00C117603.33 119170.33 117635.67 119084.67 117668.00 118999.00C117721.33 118924.00 117774.67 118849.00 117828.00 118774.00C117849.67 118752.33 117871.33 118730.67 117893.00 118709.00C117914.43 118698.18 117936.03 118687.71 117957.34 118676.66C117968.86 118665.88 117979.01 118653.46 117991.46 118643.78C118013.32 118633.20 118034.62 118621.39 118056.90 118611.71C118087.93 118601.47 118118.97 118591.24 118150.00 118581.00C118203.83 118591.64 118257.62 118602.52 118311.48 118613.00C118343.32 118613.00 118375.16 118613.00 118407.00 118613.00C118460.67 118581.00 118514.33 118549.00 118568.00 118517.00C118696.67 118538.33 118825.33 118559.67 118954.00 118581.00C119006.38 118528.07 119058.57 118474.91 119111.98 118423.02C119118.67 118415.76 119119.97 118405.61 119124.16 118396.97C119142.44 118350.98 119160.72 118304.99 119179.00 118259.00C119189.67 118248.33 119200.33 118237.67 119211.00 118227.00C119286.00 118227.00 119361.00 118227.00 119436.00 118227.00C119446.67 118248.33 119457.33 118269.67 119468.00 118291.00C119532.50 118301.97 119596.96 118313.16 119661.48 118324.00C119704.32 118324.00 119747.16 118324.00 119790.00 118324.00C119822.00 118302.33 119854.00 118280.67 119886.00 118259.00C119896.67 118259.00 119907.33 118259.00 119918.00 118259.00C119940.17 118280.16 119961.88 118301.79 119983.00 118324.00C120004.33 118324.00 120025.67 118324.00 120047.00 118324.00C120068.33 118345.33 120089.67 118366.67 120111.00 118388.00C120143.33 118388.00 120175.67 118388.00 120208.00 118388.00C120240.00 118398.67 120272.00 118409.33 120304.00 118420.00C120325.67 118420.00 120347.33 118420.00 120369.00 118420.00C120390.54 118377.10 120411.87 118334.10 120433.00 118291.00C120454.33 118280.33 120475.67 118269.67 120497.00 118259.00C120518.33 118269.67 120539.67 118280.33 120561.00 118291.00C120572.00 118291.00 120583.00 118291.00 120594.00 118291.00C120616.53 118279.37 120639.69 118268.91 120661.79 118256.48C120693.38 118235.67 120724.52 118214.11 120756.43 118193.80C120777.29 118183.54 120798.15 118173.27 120819.00 118163.00C120851.00 118163.00 120883.00 118163.00 120915.00 118163.00C120947.33 118184.33 120979.67 118205.67 121012.00 118227.00C121022.67 118227.00 121033.33 118227.00 121044.00 118227.00C121054.67 118205.67 121065.33 118184.33 121076.00 118163.00C121043.67 118130.67 121011.33 118098.33 120979.00 118066.00C120990.00 118055.33 121001.00 118044.67 121012.00 118034.00C121012.00 118023.33 121012.00 118012.67 121012.00 118002.00C121044.87 117991.37 121077.39 117979.54 121110.48 117969.70C121195.32 117959.13 121280.16 117948.57 121365.00 117938.00C121386.67 117948.67 121408.33 117959.33 121430.00 117970.00C121440.67 117959.33 121451.33 117948.67 121462.00 117938.00C121472.67 117938.00 121483.33 117938.00 121494.00 117938.00C121494.00 117927.33 121494.00 117916.67 121494.00 117906.00C121504.67 117895.33 121515.33 117884.67 121526.00 117874.00C121515.33 117831.00 121504.67 117788.00 121494.00 117745.00C121504.67 117734.33 121515.33 117723.67 121526.00 117713.00C121536.81 117712.86 121547.63 117713.29 121558.43 117712.79C121579.95 117702.19 121601.48 117691.60 121623.00 117681.00C121655.00 117691.67 121687.00 117702.33 121719.00 117713.00C121729.67 117713.00 121740.33 117713.00 121751.00 117713.00C121761.67 117723.67 121772.33 117734.33 121783.00 117745.00C121783.00 117809.33 121783.00 117873.67 121783.00 117938.00C121793.67 117970.00 121804.33 118002.00 121815.00 118034.00C121890.33 118109.00 121965.67 118184.00 122041.00 118259.00C122062.33 118312.67 122083.67 118366.33 122105.00 118420.00C122115.81 118420.15 122126.63 118419.71 122137.43 118420.22C122158.62 118430.81 122179.81 118441.41 122201.00 118452.00C122233.33 118441.33 122265.67 118430.67 122298.00 118420.00C122308.67 118409.33 122319.33 118398.67 122330.00 118388.00C122340.67 118355.67 122351.33 118323.33 122362.00 118291.00C122394.33 118259.00 122426.67 118227.00 122459.00 118195.00C122480.33 118141.33 122501.67 118087.67 122523.00 118034.00C122533.82 118034.10 122544.64 118033.79 122555.46 118034.15C122587.31 118044.77 122619.15 118055.38 122651.00 118066.00C122662.00 118055.33 122673.00 118044.67 122684.00 118034.00C122694.67 118002.00 122705.33 117970.00 122716.00 117938.00C122737.33 117916.67 122758.67 117895.33 122780.00 117874.00C122790.82 117873.89 122801.64 117874.21 122812.46 117873.84C122844.64 117862.90 122876.82 117851.95 122909.00 117841.00C122920.17 117808.23 122930.45 117775.13 122942.21 117742.57C122963.14 117700.38 122984.07 117658.19 123005.00 117616.00C123026.33 117594.67 123047.67 117573.33 123069.00 117552.00C123090.67 117541.33 123112.33 117530.67 123134.00 117520.00C123144.67 117509.33 123155.33 117498.67 123166.00 117488.00C123166.00 117466.33 123166.00 117444.67 123166.00 117423.00C123133.67 117401.67 123101.33 117380.33 123069.00 117359.00C123069.00 117348.33 123069.00 117337.67 123069.00 117327.00C123080.00 117316.33 123091.00 117305.67 123102.00 117295.00C123134.00 117305.67 123166.00 117316.33 123198.00 117327.00C123241.00 117316.33 123284.00 117305.67 123327.00 117295.00C123343.01 117279.36 123357.83 117262.27 123376.54 117249.71C123413.37 117221.81 123450.18 117193.90 123487.00 117166.00C123519.33 117166.00 123551.67 117166.00 123584.00 117166.00C123584.00 117176.67 123584.00 117187.33 123584.00 117198.00C123573.33 117208.67 123562.67 117219.33 123552.00 117230.00C123552.00 117241.00 123552.00 117252.00 123552.00 117263.00C123573.33 117263.00 123594.67 117263.00 123616.00 117263.00C123626.67 117273.67 123637.33 117284.33 123648.00 117295.00C123669.33 117295.00 123690.67 117295.00 123712.00 117295.00C123712.00 117305.67 123712.00 117316.33 123712.00 117327.00C123755.00 117305.67 123798.00 117284.33 123841.00 117263.00C123851.67 117241.33 123862.33 117219.67 123873.00 117198.00C123873.00 117176.67 123873.00 117155.33 123873.00 117134.00C123905.33 117112.67 123937.67 117091.33 123970.00 117070.00C124002.00 117080.67 124034.00 117091.33 124066.00 117102.00C124076.67 117102.00 124087.33 117102.00 124098.00 117102.00C124109.00 117080.67 124120.00 117059.33 124131.00 117038.00C124141.67 117038.00 124152.33 117038.00 124163.00 117038.00C124163.00 117005.67 124163.00 116973.33 124163.00 116941.00C124173.67 116941.00 124184.33 116941.00 124195.00 116941.00C124206.61 116930.10 124216.90 116917.63 124229.41 116907.78C124250.04 116897.38 124270.83 116887.30 124291.34 116876.66C124323.56 116844.44 124355.78 116812.22 124388.00 116780.00C124420.00 116780.00 124452.00 116780.00 124484.00 116780.00C124494.67 116801.67 124505.33 116823.33 124516.00 116845.00C124559.00 116845.00 124602.00 116845.00 124645.00 116845.00C124655.67 116866.33 124666.33 116887.67 124677.00 116909.00C124730.67 116919.67 124784.33 116930.33 124838.00 116941.00C124848.67 116951.67 124859.33 116962.33 124870.00 116973.00C124880.67 117026.67 124891.33 117080.33 124902.00 117134.00C124923.33 117134.00 124944.67 117134.00 124966.00 117134.00C124987.67 117102.00 125009.33 117070.00 125031.00 117038.00C125052.33 117027.00 125073.67 117016.00 125095.00 117005.00C125116.33 117016.00 125137.67 117027.00 125159.00 117038.00C125191.33 117016.33 125223.67 116994.67 125256.00 116973.00C125288.00 116983.67 125320.00 116994.33 125352.00 117005.00C125384.33 116994.33 125416.67 116983.67 125449.00 116973.00C125470.33 116983.67 125491.67 116994.33 125513.00 117005.00C125534.33 116994.33 125555.67 116983.67 125577.00 116973.00C125641.33 116973.00 125705.67 116973.00 125770.00 116973.00C125770.00 116951.67 125770.00 116930.33 125770.00 116909.00C125780.67 116898.33 125791.33 116887.67 125802.00 116877.00C125867.18 116887.54 125932.22 116899.13 125997.48 116909.00C126007.66 116909.00 126017.83 116909.00 126028.00 116909.00C126038.67 116898.33 126049.33 116887.67 126060.00 116877.00C126092.00 116877.00 126124.00 116877.00 126156.00 116877.00C126166.67 116887.67 126177.33 116898.33 126188.00 116909.00C126188.00 116930.33 126188.00 116951.67 126188.00 116973.00C126198.67 116983.67 126209.33 116994.33 126220.00 117005.00C126252.33 117005.00 126284.67 117005.00 126317.00 117005.00C126338.33 117026.67 126359.67 117048.33 126381.00 117070.00C126413.33 117048.33 126445.67 117026.67 126478.00 117005.00C126488.67 117005.00 126499.33 117005.00 126510.00 117005.00C126520.67 117016.00 126531.33 117027.00 126542.00 117038.00C126531.33 117059.33 126520.67 117080.67 126510.00 117102.00C126520.67 117112.67 126531.33 117123.33 126542.00 117134.00C126595.67 117102.00 126649.33 117070.00 126703.00 117038.00C126724.33 117048.67 126745.67 117059.33 126767.00 117070.00C126788.33 117059.33 126809.67 117048.67 126831.00 117038.00C126852.67 117038.00 126874.33 117038.00 126896.00 117038.00C126896.00 117059.33 126896.00 117080.67 126896.00 117102.00C126960.33 117102.00 127024.67 117102.00 127089.00 117102.00C127110.33 117091.33 127131.67 117080.67 127153.00 117070.00C127163.67 117080.67 127174.33 117091.33 127185.00 117102.00C127206.33 117102.00 127227.67 117102.00 127249.00 117102.00C127259.67 117123.33 127270.33 117144.67 127281.00 117166.00C127313.33 117166.00 127345.67 117166.00 127378.00 117166.00C127378.00 117155.33 127378.00 117144.67 127378.00 117134.00C127356.67 117123.33 127335.33 117112.67 127314.00 117102.00C127314.00 117091.33 127314.00 117080.67 127314.00 117070.00C127356.77 117037.54 127399.63 117005.20 127442.34 116972.66C127463.90 116951.44 127485.45 116930.22 127507.00 116909.00C127528.33 116909.00 127549.67 116909.00 127571.00 116909.00C127581.67 116930.33 127592.33 116951.67 127603.00 116973.00C127646.00 116973.00 127689.00 116973.00 127732.00 116973.00C127732.00 116994.67 127732.00 117016.33 127732.00 117038.00C127742.67 117048.67 127753.33 117059.33 127764.00 117070.00C127806.67 117070.00 127849.33 117070.00 127892.00 117070.00C127924.33 117080.67 127956.67 117091.33 127989.00 117102.00C128010.33 117102.00 128031.67 117102.00 128053.00 117102.00C128053.00 117123.33 128053.00 117144.67 128053.00 117166.00C128074.33 117187.33 128095.67 117208.67 128117.00 117230.00C128117.00 117251.67 128117.00 117273.33 128117.00 117295.00C128150.11 117306.17 128183.56 117316.44 128216.46 117328.22C128238.32 117338.80 128259.62 117350.61 128281.90 117360.29C128312.93 117370.53 128343.97 117380.76 128375.00 117391.00C128407.00 117391.00 128439.00 117391.00 128471.00 117391.00C128481.91 117379.40 128494.35 117369.08 128504.23 117356.60C128514.83 117336.07 128525.41 117315.53 128536.00 117295.00C128546.67 117295.00 128557.33 117295.00 128568.00 117295.00C128578.90 117306.61 128591.37 117316.89 128601.21 117329.40C128611.47 117349.93 128621.73 117370.47 128632.00 117391.00C128674.90 117412.54 128717.90 117433.87 128761.00 117455.00C128761.00 117466.00 128761.00 117477.00 128761.00 117488.00C128771.67 117498.67 128782.33 117509.33 128793.00 117520.00C128803.67 117520.00 128814.33 117520.00 128825.00 117520.00C128857.00 117498.33 128889.00 117476.67 128921.00 117455.00C128921.00 117508.67 128921.00 117562.33 128921.00 117616.00C128942.67 117616.00 128964.33 117616.00 128986.00 117616.00C128986.00 117648.33 128986.00 117680.67 128986.00 117713.00C128996.67 117723.67 129007.33 117734.33 129018.00 117745.00C129029.61 117734.10 129039.89 117721.63 129052.40 117711.79C129072.93 117701.53 129093.47 117691.27 129114.00 117681.00C129124.67 117681.00 129135.33 117681.00 129146.00 117681.00C129157.00 117648.67 129168.00 117616.33 129179.00 117584.00C129189.67 117573.33 129200.33 117562.67 129211.00 117552.00C129253.67 117573.33 129296.33 117594.67 129339.00 117616.00C129350.00 117605.33 129361.00 117594.67 129372.00 117584.00C129382.67 117594.67 129393.33 117605.33 129404.00 117616.00C129414.67 117616.00 129425.33 117616.00 129436.00 117616.00C129446.67 117605.33 129457.33 117594.67 129468.00 117584.00C129468.00 117573.33 129468.00 117562.67 129468.00 117552.00C129457.33 117541.33 129446.67 117530.67 129436.00 117520.00C129446.67 117509.33 129457.33 117498.67 129468.00 117488.00C129468.00 117477.00 129468.00 117466.00 129468.00 117455.00C129478.67 117444.33 129489.33 117433.67 129500.00 117423.00C129511.62 117433.91 129521.91 117446.39 129534.43 117456.23C129555.29 117466.83 129576.15 117477.41 129597.00 117488.00C129607.67 117488.00 129618.33 117488.00 129629.00 117488.00C129629.00 117477.00 129629.00 117466.00 129629.00 117455.00C129618.33 117444.33 129607.67 117433.67 129597.00 117423.00C129607.67 117401.67 129618.33 117380.33 129629.00 117359.00C129629.00 117337.67 129629.00 117316.33 129629.00 117295.00C129650.33 117284.33 129671.67 117273.67 129693.00 117263.00C129703.67 117252.00 129714.33 117241.00 129725.00 117230.00C129735.67 117241.00 129746.33 117252.00 129757.00 117263.00C129767.67 117263.00 129778.33 117263.00 129789.00 117263.00C129778.33 117273.67 129767.67 117284.33 129757.00 117295.00C129767.67 117305.67 129778.33 117316.33 129789.00 117327.00C129800.00 117327.00 129811.00 117327.00 129822.00 117327.00C129832.67 117337.67 129843.33 117348.33 129854.00 117359.00C129875.43 117348.18 129897.03 117337.71 129918.34 117326.66C129928.89 117316.11 129939.45 117305.55 129950.00 117295.00C129971.67 117295.00 129993.33 117295.00 130015.00 117295.00C130015.00 117284.33 130015.00 117273.67 130015.00 117263.00C130004.00 117252.00 129993.00 117241.00 129982.00 117230.00C129993.15 117208.57 130003.97 117186.97 130015.34 117165.66C130025.89 117155.11 130036.45 117144.55 130047.00 117134.00C130057.67 117134.00 130068.33 117134.00 130079.00 117134.00C130068.33 117112.67 130057.67 117091.33 130047.00 117070.00C130089.67 117070.00 130132.33 117070.00 130175.00 117070.00C130175.00 117091.33 130175.00 117112.67 130175.00 117134.00C130196.67 117134.00 130218.33 117134.00 130240.00 117134.00C130261.33 117112.67 130282.67 117091.33 130304.00 117070.00C130304.00 117059.33 130304.00 117048.67 130304.00 117038.00C130325.33 117038.00 130346.67 117038.00 130368.00 117038.00C130389.67 116984.33 130411.33 116930.67 130433.00 116877.00C130443.67 116877.00 130454.33 116877.00 130465.00 116877.00C130475.67 116887.67 130486.33 116898.33 130497.00 116909.00C130497.00 116919.67 130497.00 116930.33 130497.00 116941.00C130518.33 116930.33 130539.67 116919.67 130561.00 116909.00C130571.67 116909.00 130582.33 116909.00 130593.00 116909.00C130593.00 116898.33 130593.00 116887.67 130593.00 116877.00C130614.67 116855.33 130636.33 116833.67 130658.00 116812.00C130636.33 116801.33 130614.67 116790.67 130593.00 116780.00C130582.18 116758.57 130571.71 116736.97 130560.66 116715.66C130550.11 116705.11 130539.55 116694.55 130529.00 116684.00C130540.60 116673.09 130550.92 116660.65 130563.40 116650.77C130583.93 116640.17 130604.47 116629.59 130625.00 116619.00C130614.33 116597.67 130603.67 116576.33 130593.00 116555.00C130614.67 116544.33 130636.33 116533.67 130658.00 116523.00C130658.00 116533.67 130658.00 116544.33 130658.00 116555.00C130668.67 116565.67 130679.33 116576.33 130690.00 116587.00C130690.00 116555.00 130690.00 116523.00 130690.00 116491.00C130711.33 116469.67 130732.67 116448.33 130754.00 116427.00C130775.33 116427.00 130796.67 116427.00 130818.00 116427.00C130796.67 116416.00 130775.33 116405.00 130754.00 116394.00C130775.33 116394.00 130796.67 116394.00 130818.00 116394.00C130829.22 116382.38 130842.09 116372.18 130852.21 116359.60C130862.47 116339.07 130872.73 116318.53 130883.00 116298.00C130893.67 116298.00 130904.33 116298.00 130915.00 116298.00C130936.33 116276.67 130957.67 116255.33 130979.00 116234.00C130989.67 116234.00 131000.33 116234.00 131011.00 116234.00C131011.00 116287.33 131011.00 116340.67 131011.00 116394.00C131021.67 116405.00 131032.33 116416.00 131043.00 116427.00C131043.00 116405.33 131043.00 116383.67 131043.00 116362.00C131064.67 116351.33 131086.33 116340.67 131108.00 116330.00C131108.00 116308.67 131108.00 116287.33 131108.00 116266.00C131129.33 116255.33 131150.67 116244.67 131172.00 116234.00C131182.67 116244.67 131193.33 116255.33 131204.00 116266.00C131214.67 116255.33 131225.33 116244.67 131236.00 116234.00C131247.00 116234.00 131258.00 116234.00 131269.00 116234.00C131258.00 116223.33 131247.00 116212.67 131236.00 116202.00C131247.00 116191.00 131258.00 116180.00 131269.00 116169.00C131269.00 116158.33 131269.00 116147.67 131269.00 116137.00C131290.33 116147.67 131311.67 116158.33 131333.00 116169.00C131333.00 116158.33 131333.00 116147.67 131333.00 116137.00C131343.67 116137.00 131354.33 116137.00 131365.00 116137.00C131386.33 116115.67 131407.67 116094.33 131429.00 116073.00C131439.67 116073.00 131450.33 116073.00 131461.00 116073.00C131472.00 116083.67 131483.00 116094.33 131494.00 116105.00C131504.67 116105.00 131515.33 116105.00 131526.00 116105.00C131526.00 116094.33 131526.00 116083.67 131526.00 116073.00C131515.33 116062.33 131504.67 116051.67 131494.00 116041.00C131504.67 116019.33 131515.33 115997.67 131526.00 115976.00C131547.33 115976.00 131568.67 115976.00 131590.00 115976.00C131590.00 115987.00 131590.00 115998.00 131590.00 116009.00C131600.67 115998.00 131611.33 115987.00 131622.00 115976.00C131643.67 115976.00 131665.33 115976.00 131687.00 115976.00C131687.00 115965.33 131687.00 115954.67 131687.00 115944.00C131665.33 115944.00 131643.67 115944.00 131622.00 115944.00C131643.67 115933.33 131665.33 115922.67 131687.00 115912.00C131687.00 115890.67 131687.00 115869.33 131687.00 115848.00C131697.67 115858.67 131708.33 115869.33 131719.00 115880.00C131729.67 115869.33 131740.33 115858.67 131751.00 115848.00C131772.33 115848.00 131793.67 115848.00 131815.00 115848.00C131815.00 115837.33 131815.00 115826.67 131815.00 115816.00C131836.33 115805.00 131857.67 115794.00 131879.00 115783.00C131879.00 115772.33 131879.00 115761.67 131879.00 115751.00C131868.33 115751.00 131857.67 115751.00 131847.00 115751.00C131847.00 115729.67 131847.00 115708.33 131847.00 115687.00C131868.67 115697.67 131890.33 115708.33 131912.00 115719.00C131926.66 115705.35 131939.10 115688.95 131956.55 115678.64C131984.37 115660.09 132012.18 115641.54 132040.00 115623.00C132050.81 115623.14 132061.63 115622.71 132072.43 115623.21C132093.95 115633.81 132115.48 115644.40 132137.00 115655.00C132126.33 115633.67 132115.67 115612.33 132105.00 115591.00C132126.33 115591.00 132147.67 115591.00 132169.00 115591.00C132179.67 115580.00 132190.33 115569.00 132201.00 115558.00C132201.00 115536.67 132201.00 115515.33 132201.00 115494.00C132190.33 115472.67 132179.67 115451.33 132169.00 115430.00C132158.33 115430.00 132147.67 115430.00 132137.00 115430.00C132147.67 115430.00 132158.33 115430.00 132169.00 115430.00C132158.33 115419.33 132147.67 115408.67 132137.00 115398.00C132147.67 115387.33 132158.33 115376.67 132169.00 115366.00C132158.15 115354.96 132147.61 115343.63 132136.57 115332.79C132115.05 115322.19 132093.52 115311.60 132072.00 115301.00C132072.00 115290.33 132072.00 115279.67 132072.00 115269.00C132061.33 115269.00 132050.67 115269.00 132040.00 115269.00C132040.00 115237.00 132040.00 115205.00 132040.00 115173.00C132050.67 115173.00 132061.33 115173.00 132072.00 115173.00C132072.00 115151.33 132072.00 115129.67 132072.00 115108.00C132040.00 115086.67 132008.00 115065.33 131976.00 115044.00C131976.00 115022.67 131976.00 115001.33 131976.00 114980.00C131965.33 114980.00 131954.67 114980.00 131944.00 114980.00C131944.00 114969.00 131944.00 114958.00 131944.00 114947.00C131933.33 114936.33 131922.67 114925.67 131912.00 114915.00C131922.67 114915.00 131933.33 114915.00 131944.00 114915.00C131933.33 114904.33 131922.67 114893.67 131912.00 114883.00C131922.67 114872.33 131933.33 114861.67 131944.00 114851.00C131933.33 114851.00 131922.67 114851.00 131912.00 114851.00C131922.67 114840.33 131933.33 114829.67 131944.00 114819.00C131933.33 114808.33 131922.67 114797.67 131912.00 114787.00C131901.00 114787.00 131890.00 114787.00 131879.00 114787.00C131868.33 114776.33 131857.67 114765.67 131847.00 114755.00C131857.67 114755.00 131868.33 114755.00 131879.00 114755.00C131868.33 114744.00 131857.67 114733.00 131847.00 114722.00C131857.67 114700.67 131868.33 114679.33 131879.00 114658.00C131868.33 114647.33 131857.67 114636.67 131847.00 114626.00C131847.00 114604.67 131847.00 114583.33 131847.00 114562.00C131836.33 114540.33 131825.67 114518.67 131815.00 114497.00C131804.33 114486.33 131793.67 114475.67 131783.00 114465.00C131815.00 114433.00 131847.00 114401.00 131879.00 114369.00C131890.00 114369.00 131901.00 114369.00 131912.00 114369.00C131890.33 114358.33 131868.67 114347.67 131847.00 114337.00C131857.67 114337.00 131868.33 114337.00 131879.00 114337.00C131890.00 114326.00 131901.00 114315.00 131912.00 114304.00C131901.00 114293.33 131890.00 114282.67 131879.00 114272.00C131879.00 114261.33 131879.00 114250.67 131879.00 114240.00C131900.67 114229.33 131922.33 114218.67 131944.00 114208.00C131944.00 114197.33 131944.00 114186.67 131944.00 114176.00C131954.67 114165.33 131965.33 114154.67 131976.00 114144.00C131976.00 114133.33 131976.00 114122.67 131976.00 114112.00C131965.33 114101.00 131954.67 114090.00 131944.00 114079.00C131944.00 114068.33 131944.00 114057.67 131944.00 114047.00C131976.00 114015.00 132008.00 113983.00 132040.00 113951.00C132050.67 113929.33 132061.33 113907.67 132072.00 113886.00C132072.00 113864.67 132072.00 113843.33 132072.00 113822.00C132083.00 113811.33 132094.00 113800.67 132105.00 113790.00C132115.67 113790.00 132126.33 113790.00 132137.00 113790.00C132137.00 113779.33 132137.00 113768.67 132137.00 113758.00C132158.33 113758.00 132179.67 113758.00 132201.00 113758.00C132222.33 113736.67 132243.67 113715.33 132265.00 113694.00C132265.00 113672.33 132265.00 113650.67 132265.00 113629.00C132254.33 113629.00 132243.67 113629.00 132233.00 113629.00C132233.00 113597.00 132233.00 113565.00 132233.00 113533.00C132254.33 113533.00 132275.67 113533.00 132297.00 113533.00C132297.00 113479.33 132297.00 113425.67 132297.00 113372.00C132285.36 113349.46 132274.90 113326.30 132262.47 113304.19C132241.27 113272.59 132221.09 113240.24 132199.17 113209.17C132167.78 113177.78 132136.39 113146.39 132105.00 113115.00C132083.13 113072.10 132061.46 113029.10 132040.00 112986.00C132018.67 112975.33 131997.33 112964.67 131976.00 112954.00C131943.67 112964.67 131911.33 112975.33 131879.00 112986.00C131846.24 112974.83 131813.14 112964.56 131780.60 112952.79C131760.07 112942.52 131739.53 112932.27 131719.00 112922.00C131697.33 112922.00 131675.67 112922.00 131654.00 112922.00C131632.49 112932.66 131611.13 112943.62 131589.53 112954.09C131536.02 112964.73 131482.51 112975.36 131429.00 112986.00C131418.33 112996.67 131407.67 113007.33 131397.00 113018.00C131375.67 113018.00 131354.33 113018.00 131333.00 113018.00C131322.33 112975.33 131311.67 112932.67 131301.00 112890.00C131279.33 112922.00 131257.67 112954.00 131236.00 112986.00C131225.33 112975.33 131214.67 112964.67 131204.00 112954.00C131193.33 112954.00 131182.67 112954.00 131172.00 112954.00C131172.00 112889.67 131172.00 112825.33 131172.00 112761.00C131161.10 112749.39 131148.63 112739.11 131138.79 112726.60C131128.53 112706.07 131118.27 112685.53 131108.00 112665.00C131075.67 112654.00 131043.33 112643.00 131011.00 112632.00C131000.33 112632.00 130989.67 112632.00 130979.00 112632.00C130989.67 112610.67 131000.33 112589.33 131011.00 112568.00C131032.67 112568.00 131054.33 112568.00 131076.00 112568.00C131076.00 112536.00 131076.00 112504.00 131076.00 112472.00C131065.00 112472.00 131054.00 112472.00 131043.00 112472.00C131043.00 112461.33 131043.00 112450.67 131043.00 112440.00C131032.33 112429.00 131021.67 112418.00 131011.00 112407.00C131032.67 112407.00 131054.33 112407.00 131076.00 112407.00C131076.00 112396.33 131076.00 112385.67 131076.00 112375.00C131065.00 112375.00 131054.00 112375.00 131043.00 112375.00C131043.00 112364.33 131043.00 112353.67 131043.00 112343.00C131032.33 112332.33 131021.67 112321.67 131011.00 112311.00C131021.67 112311.00 131032.33 112311.00 131043.00 112311.00C131043.00 112289.67 131043.00 112268.33 131043.00 112247.00C131054.00 112257.67 131065.00 112268.33 131076.00 112279.00C131086.67 112268.33 131097.33 112257.67 131108.00 112247.00C131108.00 112214.67 131108.00 112182.33 131108.00 112150.00C131097.33 112139.33 131086.67 112128.67 131076.00 112118.00C131108.00 112096.67 131140.00 112075.33 131172.00 112054.00C131161.33 112054.00 131150.67 112054.00 131140.00 112054.00C131140.00 112032.33 131140.00 112010.67 131140.00 111989.00C131140.00 112000.00 131140.00 112011.00 131140.00 112022.00C131161.33 112032.67 131182.67 112043.33 131204.00 112054.00C131204.00 112064.67 131204.00 112075.33 131204.00 112086.00C131214.67 112086.00 131225.33 112086.00 131236.00 112086.00C131236.00 112096.67 131236.00 112107.33 131236.00 112118.00C131268.33 112107.33 131300.67 112096.67 131333.00 112086.00C131343.67 112107.33 131354.33 112128.67 131365.00 112150.00C131375.67 112139.33 131386.33 112128.67 131397.00 112118.00C131386.33 112107.33 131375.67 112096.67 131365.00 112086.00C131386.33 112086.00 131407.67 112086.00 131429.00 112086.00C131429.00 112096.67 131429.00 112107.33 131429.00 112118.00C131439.67 112107.33 131450.33 112096.67 131461.00 112086.00C131439.67 112064.67 131418.33 112043.33 131397.00 112022.00C131407.67 112022.00 131418.33 112022.00 131429.00 112022.00C131429.00 112011.00 131429.00 112000.00 131429.00 111989.00C131439.67 111989.00 131450.33 111989.00 131461.00 111989.00C131472.00 111978.33 131483.00 111967.67 131494.00 111957.00C131515.33 111967.67 131536.67 111978.33 131558.00 111989.00C131557.85 111978.19 131558.29 111967.37 131557.78 111956.57C131547.19 111935.38 131536.59 111914.19 131526.00 111893.00C131536.67 111882.33 131547.33 111871.67 131558.00 111861.00C131558.00 111850.33 131558.00 111839.67 131558.00 111829.00C131547.33 111818.33 131536.67 111807.67 131526.00 111797.00C131515.33 111797.00 131504.67 111797.00 131494.00 111797.00C131494.00 111786.00 131494.00 111775.00 131494.00 111764.00C131526.00 111753.33 131558.00 111742.67 131590.00 111732.00C131590.00 111721.33 131590.00 111710.67 131590.00 111700.00C131579.33 111689.33 131568.67 111678.67 131558.00 111668.00C131579.33 111668.00 131600.67 111668.00 131622.00 111668.00C131622.00 111646.67 131622.00 111625.33 131622.00 111604.00C131643.67 111604.00 131665.33 111604.00 131687.00 111604.00C131697.67 111614.67 131708.33 111625.33 131719.00 111636.00C131729.67 111625.33 131740.33 111614.67 131751.00 111604.00C131740.33 111593.00 131729.67 111582.00 131719.00 111571.00C131729.67 111571.00 131740.33 111571.00 131751.00 111571.00C131740.33 111549.67 131729.67 111528.33 131719.00 111507.00C131729.67 111496.33 131740.33 111485.67 131751.00 111475.00C131783.00 111475.00 131815.00 111475.00 131847.00 111475.00C131847.00 111453.67 131847.00 111432.33 131847.00 111411.00C131857.67 111400.33 131868.33 111389.67 131879.00 111379.00C131879.00 111389.67 131879.00 111400.33 131879.00 111411.00C131890.00 111411.00 131901.00 111411.00 131912.00 111411.00C131912.00 111400.33 131912.00 111389.67 131912.00 111379.00C131890.33 111357.33 131868.67 111335.67 131847.00 111314.00C131879.33 111314.00 131911.67 111314.00 131944.00 111314.00C131922.33 111303.33 131900.67 111292.67 131879.00 111282.00C131890.00 111271.33 131901.00 111260.67 131912.00 111250.00C131901.00 111239.33 131890.00 111228.67 131879.00 111218.00C131911.33 111218.00 131943.67 111218.00 131976.00 111218.00C131986.67 111207.33 131997.33 111196.67 132008.00 111186.00C131997.33 111175.00 131986.67 111164.00 131976.00 111153.00C131986.67 111142.33 131997.33 111131.67 132008.00 111121.00C132008.00 111131.67 132008.00 111142.33 132008.00 111153.00C132029.33 111142.33 132050.67 111131.67 132072.00 111121.00C132083.00 111142.67 132094.00 111164.33 132105.00 111186.00C132115.67 111175.00 132126.33 111164.00 132137.00 111153.00C132126.33 111142.33 132115.67 111131.67 132105.00 111121.00C132126.33 111110.33 132147.67 111099.67 132169.00 111089.00C132190.33 111099.67 132211.67 111110.33 132233.00 111121.00C132222.33 111099.67 132211.67 111078.33 132201.00 111057.00C132211.67 111046.33 132222.33 111035.67 132233.00 111025.00C132233.00 111014.33 132233.00 111003.67 132233.00 110993.00C132243.67 110993.00 132254.33 110993.00 132265.00 110993.00C132254.33 110982.33 132243.67 110971.67 132233.00 110961.00C132243.67 110939.33 132254.33 110917.67 132265.00 110896.00C132275.67 110917.67 132286.33 110939.33 132297.00 110961.00C132297.00 110928.67 132297.00 110896.33 132297.00 110864.00C132308.00 110874.67 132319.00 110885.33 132330.00 110896.00C132330.00 110885.33 132330.00 110874.67 132330.00 110864.00C132340.67 110874.67 132351.33 110885.33 132362.00 110896.00C132372.67 110896.00 132383.33 110896.00 132394.00 110896.00C132394.00 110864.00 132394.00 110832.00 132394.00 110800.00C132394.00 110810.67 132394.00 110821.33 132394.00 110832.00C132404.67 110821.33 132415.33 110810.67 132426.00 110800.00C132436.67 110810.67 132447.33 110821.33 132458.00 110832.00C132468.67 110832.00 132479.33 110832.00 132490.00 110832.00C132479.33 110832.00 132468.67 110832.00 132458.00 110832.00C132458.00 110821.33 132458.00 110810.67 132458.00 110800.00C132468.67 110800.00 132479.33 110800.00 132490.00 110800.00C132490.00 110789.33 132490.00 110778.67 132490.00 110768.00C132522.33 110778.67 132554.67 110789.33 132587.00 110800.00C132576.33 110789.33 132565.67 110778.67 132555.00 110768.00C132565.67 110757.00 132576.33 110746.00 132587.00 110735.00C132597.67 110746.00 132608.33 110757.00 132619.00 110768.00C132629.67 110757.00 132640.33 110746.00 132651.00 110735.00C132640.33 110735.00 132629.67 110735.00 132619.00 110735.00C132619.00 110724.33 132619.00 110713.67 132619.00 110703.00C132629.67 110703.00 132640.33 110703.00 132651.00 110703.00C132661.67 110692.33 132672.33 110681.67 132683.00 110671.00C132683.00 110681.67 132683.00 110692.33 132683.00 110703.00C132693.67 110692.33 132704.33 110681.67 132715.00 110671.00C132704.33 110671.00 132693.67 110671.00 132683.00 110671.00C132683.00 110639.00 132683.00 110607.00 132683.00 110575.00C132693.67 110575.00 132704.33 110575.00 132715.00 110575.00C132715.00 110585.67 132715.00 110596.33 132715.00 110607.00C132736.67 110617.67 132758.33 110628.33 132780.00 110639.00C132769.33 110628.33 132758.67 110617.67 132748.00 110607.00C132758.67 110607.00 132769.33 110607.00 132780.00 110607.00C132780.00 110596.33 132780.00 110585.67 132780.00 110575.00C132790.67 110564.33 132801.33 110553.67 132812.00 110543.00C132812.00 110553.67 132812.00 110564.33 132812.00 110575.00C132812.00 110564.33 132812.00 110553.67 132812.00 110543.00C132822.67 110553.67 132833.33 110564.33 132844.00 110575.00C132844.00 110564.33 132844.00 110553.67 132844.00 110543.00C132854.67 110543.00 132865.33 110543.00 132876.00 110543.00C132865.33 110532.00 132854.67 110521.00 132844.00 110510.00C132865.33 110510.00 132886.67 110510.00 132908.00 110510.00C132897.33 110499.33 132886.67 110488.67 132876.00 110478.00C132897.33 110467.33 132918.67 110456.67 132940.00 110446.00C132940.00 110435.33 132940.00 110424.67 132940.00 110414.00C132918.67 110424.67 132897.33 110435.33 132876.00 110446.00C132876.00 110435.33 132876.00 110424.67 132876.00 110414.00C132886.67 110414.00 132897.33 110414.00 132908.00 110414.00C132908.00 110403.33 132908.00 110392.67 132908.00 110382.00C132886.67 110382.00 132865.33 110382.00 132844.00 110382.00C132876.00 110371.33 132908.00 110360.67 132940.00 110350.00C132951.00 110339.00 132962.00 110328.00 132973.00 110317.00C132961.07 110306.09 132950.39 110293.67 132937.60 110283.79C132917.07 110273.52 132896.53 110263.27 132876.00 110253.00C132876.00 110242.33 132876.00 110231.67 132876.00 110221.00C132865.33 110231.67 132854.67 110242.33 132844.00 110253.00C132833.33 110242.33 132822.67 110231.67 132812.00 110221.00C132822.67 110210.33 132833.33 110199.67 132844.00 110189.00C132822.67 110178.33 132801.33 110167.67 132780.00 110157.00C132790.67 110146.33 132801.33 110135.67 132812.00 110125.00C132801.33 110114.00 132790.67 110103.00 132780.00 110092.00C132769.33 110103.00 132758.67 110114.00 132748.00 110125.00C132748.00 110114.00 132748.00 110103.00 132748.00 110092.00C132737.00 110081.33 132726.00 110070.67 132715.00 110060.00C132747.33 110049.33 132779.67 110038.67 132812.00 110028.00C132801.33 110017.33 132790.67 110006.67 132780.00 109996.00C132769.33 109996.00 132758.67 109996.00 132748.00 109996.00C132737.00 109974.67 132726.00 109953.33 132715.00 109932.00C132704.19 109932.15 132693.37 109931.71 132682.57 109932.22C132661.38 109942.81 132640.19 109953.41 132619.00 109964.00C132629.67 109942.33 132640.33 109920.67 132651.00 109899.00C132640.33 109899.00 132629.67 109899.00 132619.00 109899.00C132608.33 109888.33 132597.67 109877.67 132587.00 109867.00C132597.67 109867.00 132608.33 109867.00 132619.00 109867.00C132629.67 109856.33 132640.33 109845.67 132651.00 109835.00C132640.33 109835.00 132629.67 109835.00 132619.00 109835.00C132619.00 109824.33 132619.00 109813.67 132619.00 109803.00C132608.33 109803.00 132597.67 109803.00 132587.00 109803.00C132576.33 109781.67 132565.67 109760.33 132555.00 109739.00C132576.33 109739.00 132597.67 109739.00 132619.00 109739.00C132618.90 109728.18 132619.20 109717.36 132618.85 109706.54C132608.24 109674.36 132597.62 109642.18 132587.00 109610.00C132608.33 109588.67 132629.67 109567.33 132651.00 109546.00C132619.00 109556.67 132587.00 109567.33 132555.00 109578.00C132555.00 109567.33 132555.00 109556.67 132555.00 109546.00C132565.67 109535.33 132576.33 109524.67 132587.00 109514.00C132565.67 109503.00 132544.33 109492.00 132523.00 109481.00C132523.00 109427.67 132523.00 109374.33 132523.00 109321.00C132501.33 109321.00 132479.67 109321.00 132458.00 109321.00C132458.00 109299.33 132458.00 109277.67 132458.00 109256.00C132468.67 109256.00 132479.33 109256.00 132490.00 109256.00C132479.33 109256.00 132468.67 109256.00 132458.00 109256.00C132447.33 109245.33 132436.67 109234.67 132426.00 109224.00C132436.82 109202.57 132447.29 109180.97 132458.34 109159.66C132468.89 109149.11 132479.45 109138.55 132490.00 109128.00C132479.33 109117.33 132468.67 109106.67 132458.00 109096.00C132468.67 109096.00 132479.33 109096.00 132490.00 109096.00C132490.00 109063.67 132490.00 109031.33 132490.00 108999.00C132468.67 108988.33 132447.33 108977.67 132426.00 108967.00C132404.67 108967.00 132383.33 108967.00 132362.00 108967.00C132372.67 108956.33 132383.33 108945.67 132394.00 108935.00C132394.00 108902.67 132394.00 108870.33 132394.00 108838.00C132383.33 108849.00 132372.67 108860.00 132362.00 108871.00C132351.33 108860.00 132340.67 108849.00 132330.00 108838.00C132351.33 108827.33 132372.67 108816.67 132394.00 108806.00C132383.33 108795.33 132372.67 108784.67 132362.00 108774.00C132351.33 108774.00 132340.67 108774.00 132330.00 108774.00C132340.67 108774.00 132351.33 108774.00 132362.00 108774.00C132351.33 108752.67 132340.67 108731.33 132330.00 108710.00C132308.08 108731.08 132286.41 108752.40 132265.00 108774.00C132254.33 108763.33 132243.67 108752.67 132233.00 108742.00C132233.00 108720.67 132233.00 108699.33 132233.00 108678.00C132222.33 108678.00 132211.67 108678.00 132201.00 108678.00C132201.00 108656.33 132201.00 108634.67 132201.00 108613.00C132190.33 108624.00 132179.67 108635.00 132169.00 108646.00C132169.00 108624.33 132169.00 108602.67 132169.00 108581.00C132158.33 108581.00 132147.67 108581.00 132137.00 108581.00C132126.33 108591.67 132115.67 108602.33 132105.00 108613.00C132105.00 108602.33 132105.00 108591.67 132105.00 108581.00C132094.00 108559.67 132083.00 108538.33 132072.00 108517.00C132061.33 108527.67 132050.67 108538.33 132040.00 108549.00C132050.67 108527.67 132061.33 108506.33 132072.00 108485.00C132061.33 108474.33 132050.67 108463.67 132040.00 108453.00C132040.00 108463.67 132040.00 108474.33 132040.00 108485.00C132018.67 108506.33 131997.33 108527.67 131976.00 108549.00C131965.33 108538.33 131954.67 108527.67 131944.00 108517.00C131954.67 108506.33 131965.33 108495.67 131976.00 108485.00C131965.33 108474.33 131954.67 108463.67 131944.00 108453.00C131954.67 108453.00 131965.33 108453.00 131976.00 108453.00C131965.33 108453.00 131954.67 108453.00 131944.00 108453.00C131944.00 108442.00 131944.00 108431.00 131944.00 108420.00C131922.33 108420.00 131900.67 108420.00 131879.00 108420.00C131879.00 108409.33 131879.00 108398.67 131879.00 108388.00C131857.67 108398.67 131836.33 108409.33 131815.00 108420.00C131815.00 108431.00 131815.00 108442.00 131815.00 108453.00C131804.33 108453.00 131793.67 108453.00 131783.00 108453.00C131783.00 108420.67 131783.00 108388.33 131783.00 108356.00C131761.67 108356.00 131740.33 108356.00 131719.00 108356.00C131719.00 108366.67 131719.00 108377.33 131719.00 108388.00C131708.33 108377.33 131697.67 108366.67 131687.00 108356.00C131687.00 108345.33 131687.00 108334.67 131687.00 108324.00C131654.67 108324.00 131622.33 108324.00 131590.00 108324.00C131600.67 108313.33 131611.33 108302.67 131622.00 108292.00C131611.33 108292.00 131600.67 108292.00 131590.00 108292.00C131600.67 108281.33 131611.33 108270.67 131622.00 108260.00C131611.33 108260.00 131600.67 108260.00 131590.00 108260.00C131600.67 108249.00 131611.33 108238.00 131622.00 108227.00C131611.33 108216.33 131600.67 108205.67 131590.00 108195.00C131579.33 108205.67 131568.67 108216.33 131558.00 108227.00C131547.33 108216.33 131536.67 108205.67 131526.00 108195.00C131526.00 108205.67 131526.00 108216.33 131526.00 108227.00C131515.33 108216.33 131504.67 108205.67 131494.00 108195.00C131504.67 108184.33 131515.33 108173.67 131526.00 108163.00C131504.33 108163.00 131482.67 108163.00 131461.00 108163.00C131461.00 108141.67 131461.00 108120.33 131461.00 108099.00C131450.18 108077.57 131439.70 108055.97 131428.66 108034.65C131418.11 108023.77 131407.55 108012.88 131397.00 108002.00C131397.00 107938.00 131397.00 107874.00 131397.00 107810.00C131407.91 107798.07 131420.33 107787.39 131430.21 107774.60C131440.47 107754.07 131450.73 107733.53 131461.00 107713.00C131482.67 107702.33 131504.33 107691.67 131526.00 107681.00C131536.67 107648.67 131547.33 107616.33 131558.00 107584.00C131547.33 107541.33 131536.67 107498.67 131526.00 107456.00C131547.60 107434.59 131568.92 107412.92 131590.00 107391.00C131611.33 107380.33 131632.67 107369.67 131654.00 107359.00C131686.73 107304.67 131720.08 107250.71 131752.41 107196.14C131762.59 107175.42 131772.81 107154.72 131783.00 107134.00C131793.67 107134.00 131804.33 107134.00 131815.00 107134.00C131825.67 107102.00 131836.33 107070.00 131847.00 107038.00C131857.67 107027.33 131868.33 107016.67 131879.00 107006.00C131879.00 106984.33 131879.00 106962.67 131879.00 106941.00C131890.00 106930.33 131901.00 106919.67 131912.00 106909.00C131901.00 106898.33 131890.00 106887.67 131879.00 106877.00C131890.00 106855.67 131901.00 106834.33 131912.00 106813.00C131933.33 106802.33 131954.67 106791.67 131976.00 106781.00C131976.00 106770.00 131976.00 106759.00 131976.00 106748.00C131986.67 106748.00 131997.33 106748.00 132008.00 106748.00C132018.67 106716.00 132029.33 106684.00 132040.00 106652.00C132029.33 106619.67 132018.67 106587.33 132008.00 106555.00C132018.67 106555.00 132029.33 106555.00 132040.00 106555.00C132018.67 106533.67 131997.33 106512.33 131976.00 106491.00C131986.67 106491.00 131997.33 106491.00 132008.00 106491.00C131997.33 106469.67 131986.67 106448.33 131976.00 106427.00C131965.33 106427.00 131954.67 106427.00 131944.00 106427.00C131954.67 106416.33 131965.33 106405.67 131976.00 106395.00C131976.00 106384.33 131976.00 106373.67 131976.00 106363.00C131965.33 106352.00 131954.67 106341.00 131944.00 106330.00C131933.33 106330.00 131922.67 106330.00 131912.00 106330.00C131922.67 106319.33 131933.33 106308.67 131944.00 106298.00C131933.33 106287.33 131922.67 106276.67 131912.00 106266.00C131922.67 106255.33 131933.33 106244.67 131944.00 106234.00C131933.33 106234.00 131922.67 106234.00 131912.00 106234.00C131912.00 106223.33 131912.00 106212.67 131912.00 106202.00C131901.00 106191.33 131890.00 106180.67 131879.00 106170.00C131900.67 106159.33 131922.33 106148.67 131944.00 106138.00C131944.00 106127.00 131944.00 106116.00 131944.00 106105.00C131954.67 106105.00 131965.33 106105.00 131976.00 106105.00C131965.33 106094.33 131954.67 106083.67 131944.00 106073.00C131954.67 106062.33 131965.33 106051.67 131976.00 106041.00C131976.00 106009.00 131976.00 105977.00 131976.00 105945.00C131986.67 105955.67 131997.33 105966.33 132008.00 105977.00C132008.00 105966.33 132008.00 105955.67 132008.00 105945.00C132018.67 105945.00 132029.33 105945.00 132040.00 105945.00C132040.00 105955.67 132040.00 105966.33 132040.00 105977.00C132050.67 105966.33 132061.33 105955.67 132072.00 105945.00C132072.00 105934.00 132072.00 105923.00 132072.00 105912.00C132083.00 105912.00 132094.00 105912.00 132105.00 105912.00C132105.00 105901.33 132105.00 105890.67 132105.00 105880.00C132094.00 105869.33 132083.00 105858.67 132072.00 105848.00C132083.00 105837.33 132094.00 105826.67 132105.00 105816.00C132105.00 105783.67 132105.00 105751.33 132105.00 105719.00C132094.00 105719.00 132083.00 105719.00 132072.00 105719.00C132083.00 105708.33 132094.00 105697.67 132105.00 105687.00C132094.00 105687.00 132083.00 105687.00 132072.00 105687.00C132093.67 105676.33 132115.33 105665.67 132137.00 105655.00C132137.00 105633.67 132137.00 105612.33 132137.00 105591.00C132137.00 105601.67 132137.00 105612.33 132137.00 105623.00C132137.00 105612.33 132137.00 105601.67 132137.00 105591.00C132158.33 105591.00 132179.67 105591.00 132201.00 105591.00C132201.00 105580.33 132201.00 105569.67 132201.00 105559.00C132211.67 105569.67 132222.33 105580.33 132233.00 105591.00C132233.00 105580.33 132233.00 105569.67 132233.00 105559.00C132233.00 105569.67 132233.00 105580.33 132233.00 105591.00C132265.33 105591.00 132297.67 105591.00 132330.00 105591.00C132340.67 105601.67 132351.33 105612.33 132362.00 105623.00C132383.33 105612.33 132404.67 105601.67 132426.00 105591.00C132458.33 105591.00 132490.67 105591.00 132523.00 105591.00C132523.00 105580.33 132523.00 105569.67 132523.00 105559.00C132544.60 105537.59 132565.92 105515.92 132587.00 105494.00C132587.00 105483.33 132587.00 105472.67 132587.00 105462.00C132597.67 105462.00 132608.33 105462.00 132619.00 105462.00C132619.00 105451.33 132619.00 105440.67 132619.00 105430.00C132640.33 105430.00 132661.67 105430.00 132683.00 105430.00C132683.00 105408.67 132683.00 105387.33 132683.00 105366.00C132693.67 105376.67 132704.33 105387.33 132715.00 105398.00C132726.00 105398.00 132737.00 105398.00 132748.00 105398.00C132758.67 105387.33 132769.33 105376.67 132780.00 105366.00C132769.33 105366.00 132758.67 105366.00 132748.00 105366.00C132758.67 105366.00 132769.33 105366.00 132780.00 105366.00C132769.33 105355.33 132758.67 105344.67 132748.00 105334.00C132758.67 105334.00 132769.33 105334.00 132780.00 105334.00C132769.33 105334.00 132758.67 105334.00 132748.00 105334.00C132748.00 105323.33 132748.00 105312.67 132748.00 105302.00C132758.67 105302.00 132769.33 105302.00 132780.00 105302.00C132769.33 105302.00 132758.67 105302.00 132748.00 105302.00C132758.67 105280.33 132769.33 105258.67 132780.00 105237.00C132790.67 105247.67 132801.33 105258.33 132812.00 105269.00C132812.00 105258.33 132812.00 105247.67 132812.00 105237.00C132822.67 105237.00 132833.33 105237.00 132844.00 105237.00C132844.00 105226.33 132844.00 105215.67 132844.00 105205.00C132854.67 105205.00 132865.33 105205.00 132876.00 105205.00C132886.67 105194.33 132897.33 105183.67 132908.00 105173.00C132897.33 105173.00 132886.67 105173.00 132876.00 105173.00C132886.67 105173.00 132897.33 105173.00 132908.00 105173.00C132918.67 105183.67 132929.33 105194.33 132940.00 105205.00C132929.33 105226.33 132918.67 105247.67 132908.00 105269.00C132929.67 105258.33 132951.33 105247.67 132973.00 105237.00C133004.94 105269.39 133036.72 105301.94 133069.00 105334.00C133079.67 105323.33 133090.33 105312.67 133101.00 105302.00C133111.67 105312.67 133122.33 105323.33 133133.00 105334.00C133149.44 105318.43 133164.76 105301.46 133183.60 105288.66C133220.40 105260.77 133257.20 105232.89 133294.00 105205.00C133446.12 105172.40 133598.38 105140.38 133750.42 105107.39C133962.61 105054.26 134174.81 105001.13 134387.00 104948.00C134408.67 104948.00 134430.33 104948.00 134452.00 104948.00C134452.00 104937.33 134452.00 104926.67 134452.00 104916.00C134462.67 104905.33 134473.33 104894.67 134484.00 104884.00C134484.00 104862.33 134484.00 104840.67 134484.00 104819.00C134451.67 104765.33 134419.33 104711.67 134387.00 104658.00C134398.00 104647.33 134409.00 104636.67 134420.00 104626.00C134409.00 104615.33 134398.00 104604.67 134387.00 104594.00C134408.67 104551.33 134430.33 104508.67 134452.00 104466.00C134430.33 104412.33 134408.67 104358.67 134387.00 104305.00C134387.00 104272.67 134387.00 104240.33 134387.00 104208.00C134355.00 104176.00 134323.00 104144.00 134291.00 104112.00C134269.67 104069.00 134248.33 104026.00 134227.00 103983.00C134237.67 103929.33 134248.33 103875.67 134259.00 103822.00C134248.33 103800.67 134237.67 103779.33 134227.00 103758.00C134237.67 103736.67 134248.33 103715.33 134259.00 103694.00C134259.00 103683.33 134259.00 103672.67 134259.00 103662.00C134216.00 103651.33 134173.00 103640.67 134130.00 103630.00C134130.00 103619.00 134130.00 103608.00 134130.00 103597.00C134119.33 103597.00 134108.67 103597.00 134098.00 103597.00C134076.67 103575.67 134055.33 103554.33 134034.00 103533.00C134001.67 103522.33 133969.33 103511.67 133937.00 103501.00C133894.33 103468.67 133851.67 103436.33 133809.00 103404.00C133809.00 103329.00 133809.00 103254.00 133809.00 103179.00C133830.33 103114.67 133851.67 103050.33 133873.00 102986.00C133873.00 102922.00 133873.00 102858.00 133873.00 102794.00C133905.13 102750.90 133937.11 102707.69 133969.34 102664.66C133990.90 102643.44 134012.45 102622.22 134034.00 102601.00C134056.68 102590.01 134078.82 102577.85 134101.87 102567.68C134132.58 102557.11 134163.29 102546.56 134194.00 102536.00C134215.67 102514.67 134237.33 102493.33 134259.00 102472.00C134259.00 102461.33 134259.00 102450.67 134259.00 102440.00C134226.67 102429.33 134194.33 102418.67 134162.00 102408.00C134183.67 102386.33 134205.33 102364.67 134227.00 102343.00C134248.33 102343.00 134269.67 102343.00 134291.00 102343.00C134301.67 102300.33 134312.33 102257.67 134323.00 102215.00C134269.33 102150.67 134215.67 102086.33 134162.00 102022.00C134130.00 102022.00 134098.00 102022.00 134066.00 102022.00C134066.00 101947.00 134066.00 101872.00 134066.00 101797.00C134044.67 101797.00 134023.33 101797.00 134002.00 101797.00C133969.13 101828.45 133937.19 101860.86 133905.00 101893.00C133883.67 101850.33 133862.33 101807.67 133841.00 101765.00C133851.67 101754.33 133862.33 101743.67 133873.00 101733.00C133862.33 101700.67 133851.67 101668.33 133841.00 101636.00C133873.00 101593.00 133905.00 101550.00 133937.00 101507.00C133948.39 101473.91 133958.48 101440.34 133970.73 101407.58C134002.54 101344.41 134034.46 101281.30 134066.00 101218.00C134076.67 101207.33 134087.33 101196.67 134098.00 101186.00C134076.67 101175.33 134055.33 101164.67 134034.00 101154.00C134034.00 101132.33 134034.00 101110.67 134034.00 101089.00C134012.33 101078.33 133990.67 101067.67 133969.00 101057.00C133947.67 101035.67 133926.33 101014.33 133905.00 100993.00C133905.00 100971.67 133905.00 100950.33 133905.00 100929.00C133916.94 100917.78 133927.51 100904.97 133940.41 100894.86C134024.94 100841.91 134109.47 100788.95 134194.00 100736.00C134205.00 100714.33 134216.00 100692.67 134227.00 100671.00C134285.07 100682.66 134342.89 100695.58 134401.13 100706.35C134460.75 100716.23 134520.38 100726.12 134580.00 100736.00C134623.17 100757.34 134666.22 100778.93 134709.47 100800.12C134752.45 100810.85 134795.50 100821.30 134838.43 100832.22C134881.12 100853.84 134923.72 100875.63 134966.46 100897.15C134998.64 100907.77 135030.82 100918.38 135063.00 100929.00C135105.83 100961.05 135148.51 100993.29 135191.43 101025.21C135234.39 101046.27 135277.25 101067.53 135320.00 101089.00C135352.00 101078.33 135384.00 101067.67 135416.00 101057.00C135426.81 101056.86 135437.63 101057.29 135448.43 101056.79C135469.95 101046.19 135491.48 101035.60 135513.00 101025.00C135534.33 101035.67 135555.67 101046.33 135577.00 101057.00C135609.00 101025.00 135641.00 100993.00 135673.00 100961.00C135684.00 100961.00 135695.00 100961.00 135706.00 100961.00C135727.33 100939.67 135748.67 100918.33 135770.00 100897.00C135780.81 100897.15 135791.63 100896.71 135802.43 100897.22C135823.62 100907.81 135844.81 100918.41 135866.00 100929.00C135877.00 100918.33 135888.00 100907.67 135899.00 100897.00C135888.00 100854.00 135877.00 100811.00 135866.00 100768.00C135855.33 100757.33 135844.67 100746.67 135834.00 100736.00C135834.00 100725.33 135834.00 100714.67 135834.00 100704.00C135812.67 100693.00 135791.33 100682.00 135770.00 100671.00C135780.67 100639.00 135791.33 100607.00 135802.00 100575.00C135812.67 100564.33 135823.33 100553.67 135834.00 100543.00C135834.00 100521.67 135834.00 100500.33 135834.00 100479.00C135812.57 100467.85 135790.97 100457.03 135769.66 100445.66C135759.11 100435.11 135748.55 100424.55 135738.00 100414.00C135738.00 100392.67 135738.00 100371.33 135738.00 100350.00C135727.33 100328.67 135716.67 100307.33 135706.00 100286.00C135716.67 100232.33 135727.33 100178.67 135738.00 100125.00C135752.49 100095.11 135769.02 100066.11 135780.41 100034.82C135798.27 99989.88 135816.14 99944.94 135834.00 99900.00C135812.67 99867.66 135791.33 99835.34 135770.00 99803.00C135759.18 99802.90 135748.36 99803.20 135737.54 99802.85C135705.36 99792.23 135673.18 99781.62 135641.00 99771.00C135641.00 99749.67 135641.00 99728.33 135641.00 99707.00C135630.33 99685.67 135619.67 99664.33 135609.00 99643.00C135609.00 99621.33 135609.00 99599.67 135609.00 99578.00C135641.33 99556.66 135673.67 99535.34 135706.00 99514.00C135706.00 99482.00 135706.00 99450.00 135706.00 99418.00C135716.82 99417.89 135727.64 99418.21 135738.46 99417.84C135770.31 99406.90 135802.15 99395.95 135834.00 99385.00C135855.41 99363.41 135877.08 99342.07 135899.00 99321.00C135888.00 99299.67 135877.00 99278.33 135866.00 99257.00C135877.00 99235.33 135888.00 99213.67 135899.00 99192.00C135920.33 99203.00 135941.67 99214.00 135963.00 99225.00C135995.00 99214.00 136027.00 99203.00 136059.00 99192.00C136059.11 99203.15 136058.79 99214.31 136059.16 99225.46C136070.11 99257.30 136081.05 99289.15 136092.00 99321.00C136124.00 99321.00 136156.00 99321.00 136188.00 99321.00C136209.33 99353.34 136230.67 99385.66 136252.00 99418.00C136295.00 99439.33 136338.00 99460.67 136381.00 99482.00C136423.67 99524.66 136466.33 99567.34 136509.00 99610.00C136520.00 99610.00 136531.00 99610.00 136542.00 99610.00C136552.67 99621.00 136563.33 99632.00 136574.00 99643.00C136584.82 99643.10 136595.64 99642.79 136606.46 99643.15C136638.31 99653.76 136670.15 99664.39 136702.00 99675.00C136702.00 99696.33 136702.00 99717.67 136702.00 99739.00C136723.67 99739.00 136745.33 99739.00 136767.00 99739.00C136767.00 99792.67 136767.00 99846.33 136767.00 99900.00C136777.67 99910.66 136788.33 99921.34 136799.00 99932.00C136820.33 99932.00 136841.67 99932.00 136863.00 99932.00C136852.33 99964.00 136841.67 99996.00 136831.00 100028.00C136820.33 100039.00 136809.67 100050.00 136799.00 100061.00C136798.85 100071.81 136799.29 100082.63 136798.78 100093.43C136788.19 100114.62 136777.59 100135.81 136767.00 100157.00C136777.67 100157.00 136788.33 100157.00 136799.00 100157.00C136809.67 100167.67 136820.33 100178.33 136831.00 100189.00C136852.33 100189.00 136873.67 100189.00 136895.00 100189.00C136895.00 100210.33 136895.00 100231.67 136895.00 100253.00C136906.00 100264.00 136917.00 100275.00 136928.00 100286.00C136970.67 100286.00 137013.33 100286.00 137056.00 100286.00C137077.33 100275.00 137098.67 100264.00 137120.00 100253.00C137141.67 100253.00 137163.33 100253.00 137185.00 100253.00C137195.67 100285.33 137206.33 100317.67 137217.00 100350.00C137238.33 100350.00 137259.67 100350.00 137281.00 100350.00C137281.00 100339.33 137281.00 100328.67 137281.00 100318.00C137291.81 100318.15 137302.63 100317.71 137313.43 100318.22C137356.29 100339.48 137399.14 100360.74 137442.00 100382.00C137474.00 100350.00 137506.00 100318.00 137538.00 100286.00C137527.33 100253.67 137516.67 100221.33 137506.00 100189.00C137516.67 100189.00 137527.33 100189.00 137538.00 100189.00C137538.00 100199.67 137538.00 100210.33 137538.00 100221.00C137559.67 100242.67 137581.33 100264.33 137603.00 100286.00C137613.67 100286.00 137624.33 100286.00 137635.00 100286.00C137645.67 100275.00 137656.33 100264.00 137667.00 100253.00C137688.33 100253.00 137709.67 100253.00 137731.00 100253.00C137742.00 100274.67 137753.00 100296.33 137764.00 100318.00C137796.00 100318.00 137828.00 100318.00 137860.00 100318.00C137870.67 100307.33 137881.33 100296.67 137892.00 100286.00C137902.67 100243.00 137913.33 100200.00 137924.00 100157.00C137945.67 100167.67 137967.33 100178.33 137989.00 100189.00C138010.64 100156.13 138033.05 100123.74 138054.20 100090.57C138064.47 100069.71 138074.73 100048.85 138085.00 100028.00C138095.67 100028.00 138106.33 100028.00 138117.00 100028.00C138117.00 100039.00 138117.00 100050.00 138117.00 100061.00C138138.33 100061.00 138159.67 100061.00 138181.00 100061.00C138213.33 100093.00 138245.67 100125.00 138278.00 100157.00C138267.33 100200.00 138256.67 100243.00 138246.00 100286.00C138267.33 100286.00 138288.67 100286.00 138310.00 100286.00C138320.67 100307.33 138331.33 100328.67 138342.00 100350.00C138374.33 100360.67 138406.67 100371.33 138439.00 100382.00C138439.00 100457.00 138439.00 100532.00 138439.00 100607.00C138428.33 100617.67 138417.67 100628.33 138407.00 100639.00C138407.00 100703.33 138407.00 100767.67 138407.00 100832.00C138342.67 100896.33 138278.33 100960.67 138214.00 101025.00C138214.00 101046.33 138214.00 101067.67 138214.00 101089.00C138192.33 101100.00 138170.67 101111.00 138149.00 101122.00C138149.00 101143.33 138149.00 101164.67 138149.00 101186.00C138127.67 101196.67 138106.33 101207.33 138085.00 101218.00C138074.33 101239.33 138063.67 101260.67 138053.00 101282.00C138053.00 101293.00 138053.00 101304.00 138053.00 101315.00C138063.67 101325.67 138074.33 101336.33 138085.00 101347.00C138085.00 101368.33 138085.00 101389.67 138085.00 101411.00C138074.33 101421.67 138063.67 101432.33 138053.00 101443.00C138053.00 101453.67 138053.00 101464.33 138053.00 101475.00C138031.67 101485.67 138010.33 101496.33 137989.00 101507.00C137967.33 101507.00 137945.67 101507.00 137924.00 101507.00C137924.00 101518.00 137924.00 101529.00 137924.00 101540.00C137902.67 101540.00 137881.33 101540.00 137860.00 101540.00C137849.33 101550.67 137838.67 101561.33 137828.00 101572.00C137795.67 101572.00 137763.33 101572.00 137731.00 101572.00C137731.00 101593.33 137731.00 101614.67 137731.00 101636.00C137763.33 101657.33 137795.67 101678.67 137828.00 101700.00C137828.00 101732.33 137828.00 101764.67 137828.00 101797.00C137838.67 101818.33 137849.33 101839.67 137860.00 101861.00C137870.67 101850.33 137881.33 101839.67 137892.00 101829.00C137892.15 101839.81 137891.71 101850.63 137892.22 101861.43C137902.81 101882.62 137913.41 101903.81 137924.00 101925.00C137967.00 101914.33 138010.00 101903.67 138053.00 101893.00C138042.33 101882.33 138031.67 101871.67 138021.00 101861.00C138053.00 101829.00 138085.00 101797.00 138117.00 101765.00C138117.00 101743.33 138117.00 101721.67 138117.00 101700.00C138127.67 101689.33 138138.33 101678.67 138149.00 101668.00C138149.00 101646.67 138149.00 101625.33 138149.00 101604.00C138224.00 101604.00 138299.00 101604.00 138374.00 101604.00C138385.00 101571.67 138396.00 101539.33 138407.00 101507.00C138396.00 101496.33 138385.00 101485.67 138374.00 101475.00C138395.67 101475.00 138417.33 101475.00 138439.00 101475.00C138439.00 101443.00 138439.00 101411.00 138439.00 101379.00C138460.33 101357.67 138481.67 101336.33 138503.00 101315.00C138556.67 101304.00 138610.33 101293.00 138664.00 101282.00C138739.00 101325.00 138814.00 101368.00 138889.00 101411.00C138899.67 101400.33 138910.33 101389.67 138921.00 101379.00C138931.67 101379.00 138942.33 101379.00 138953.00 101379.00C138953.00 101368.33 138953.00 101357.67 138953.00 101347.00C138974.33 101347.00 138995.67 101347.00 139017.00 101347.00C139028.00 101336.33 139039.00 101325.67 139050.00 101315.00C139060.67 101315.00 139071.33 101315.00 139082.00 101315.00C139082.00 101293.33 139082.00 101271.67 139082.00 101250.00C139092.67 101250.00 139103.33 101250.00 139114.00 101250.00C139114.00 101239.33 139114.00 101228.67 139114.00 101218.00C139124.67 101218.00 139135.33 101218.00 139146.00 101218.00C139156.67 101207.33 139167.33 101196.67 139178.00 101186.00C139199.67 101196.67 139221.33 101207.33 139243.00 101218.00C139264.33 101207.33 139285.67 101196.67 139307.00 101186.00C139328.33 101196.67 139349.67 101207.33 139371.00 101218.00C139424.67 101218.00 139478.33 101218.00 139532.00 101218.00C139542.67 101207.33 139553.33 101196.67 139564.00 101186.00C139564.00 101196.67 139564.00 101207.33 139564.00 101218.00C139564.00 101207.33 139564.00 101196.67 139564.00 101186.00C139574.67 101186.00 139585.33 101186.00 139596.00 101186.00C139596.00 101175.33 139596.00 101164.67 139596.00 101154.00C139606.67 101154.00 139617.33 101154.00 139628.00 101154.00C139628.00 101132.33 139628.00 101110.67 139628.00 101089.00C139639.00 101100.00 139650.00 101111.00 139661.00 101122.00C139661.00 101111.00 139661.00 101100.00 139661.00 101089.00C139693.00 101089.00 139725.00 101089.00 139757.00 101089.00C139757.00 101078.33 139757.00 101067.67 139757.00 101057.00C139778.33 101057.00 139799.67 101057.00 139821.00 101057.00C139821.00 101046.33 139821.00 101035.67 139821.00 101025.00C139842.97 100992.13 139865.75 100959.77 139887.20 100926.57C139897.47 100905.71 139907.73 100884.85 139918.00 100864.00C139907.33 100853.33 139896.67 100842.67 139886.00 100832.00C139896.67 100810.67 139907.33 100789.33 139918.00 100768.00C139928.67 100768.00 139939.33 100768.00 139950.00 100768.00C139950.00 100778.67 139950.00 100789.33 139950.00 100800.00C139960.67 100768.00 139971.33 100736.00 139982.00 100704.00C139992.67 100714.67 140003.33 100725.33 140014.00 100736.00C140014.00 100746.67 140014.00 100757.33 140014.00 100768.00C140035.67 100757.33 140057.33 100746.67 140079.00 100736.00C140089.67 100725.33 140100.33 100714.67 140111.00 100704.00C140121.67 100671.67 140132.33 100639.33 140143.00 100607.00C140153.67 100607.00 140164.33 100607.00 140175.00 100607.00C140175.00 100596.33 140175.00 100585.67 140175.00 100575.00C140185.67 100575.00 140196.33 100575.00 140207.00 100575.00C140207.00 100553.67 140207.00 100532.33 140207.00 100511.00C140217.67 100521.67 140228.33 100532.33 140239.00 100543.00C140239.00 100532.33 140239.00 100521.67 140239.00 100511.00C140271.33 100478.67 140303.67 100446.33 140336.00 100414.00C140336.00 100403.33 140336.00 100392.67 140336.00 100382.00C140357.33 100382.00 140378.67 100382.00 140400.00 100382.00C140410.67 100371.33 140421.33 100360.67 140432.00 100350.00C140453.67 100350.00 140475.33 100350.00 140497.00 100350.00C140518.33 100371.33 140539.67 100392.67 140561.00 100414.00C140571.81 100413.85 140582.63 100414.29 140593.43 100413.78C140614.62 100403.19 140635.81 100392.59 140657.00 100382.00C140678.67 100403.33 140700.33 100424.67 140722.00 100446.00C140754.00 100424.67 140786.00 100403.33 140818.00 100382.00C140828.67 100382.00 140839.33 100382.00 140850.00 100382.00C140850.00 100392.67 140850.00 100403.33 140850.00 100414.00C140860.67 100414.00 140871.33 100414.00 140882.00 100414.00C140882.00 100403.33 140882.00 100392.67 140882.00 100382.00C140893.00 100371.33 140904.00 100360.67 140915.00 100350.00C140904.00 100350.00 140893.00 100350.00 140882.00 100350.00C140903.67 100339.33 140925.33 100328.67 140947.00 100318.00C140957.67 100296.33 140968.33 100274.67 140979.00 100253.00C140989.67 100253.00 141000.33 100253.00 141011.00 100253.00C141011.00 100264.00 141011.00 100275.00 141011.00 100286.00C141021.67 100286.00 141032.33 100286.00 141043.00 100286.00C141075.85 100263.59 141109.47 100242.24 141141.83 100219.17C141173.22 100187.78 141204.61 100156.39 141236.00 100125.00C141246.67 100125.00 141257.33 100125.00 141268.00 100125.00C141268.00 100103.67 141268.00 100082.33 141268.00 100061.00C141278.67 100050.00 141289.33 100039.00 141300.00 100028.00C141300.00 100017.33 141300.00 100006.67 141300.00 99996.00C141310.67 100006.67 141321.33 100017.33 141332.00 100028.00C141343.00 100028.00 141354.00 100028.00 141365.00 100028.00C141365.00 100006.67 141365.00 99985.33 141365.00 99964.00C141397.00 99964.00 141429.00 99964.00 141461.00 99964.00C141471.67 99942.67 141482.33 99921.33 141493.00 99900.00C141503.67 99910.66 141514.33 99921.34 141525.00 99932.00C141536.00 99910.67 141547.00 99889.33 141558.00 99868.00C141547.00 99846.33 141536.00 99824.67 141525.00 99803.00C141536.00 99813.67 141547.00 99824.33 141558.00 99835.00C141568.67 99835.00 141579.33 99835.00 141590.00 99835.00C141590.00 99824.33 141590.00 99813.67 141590.00 99803.00C141622.00 99803.00 141654.00 99803.00 141686.00 99803.00C141675.33 99792.34 141664.67 99781.66 141654.00 99771.00C141654.00 99760.33 141654.00 99749.67 141654.00 99739.00C141675.33 99728.33 141696.67 99717.67 141718.00 99707.00C141729.00 99685.67 141740.00 99664.33 141751.00 99643.00C141761.67 99653.66 141772.33 99664.34 141783.00 99675.00C141793.67 99653.34 141804.33 99631.66 141815.00 99610.00C141825.67 99599.34 141836.33 99588.66 141847.00 99578.00C141857.67 99588.66 141868.33 99599.34 141879.00 99610.00C141900.33 99588.66 141921.67 99567.34 141943.00 99546.00C141943.00 99524.67 141943.00 99503.33 141943.00 99482.00C141964.67 99471.34 141986.33 99460.66 142008.00 99450.00C142018.67 99428.34 142029.33 99406.66 142040.00 99385.00C142072.00 99396.00 142104.00 99407.00 142136.00 99418.00C142136.00 99407.00 142136.00 99396.00 142136.00 99385.00C142157.67 99385.00 142179.33 99385.00 142201.00 99385.00C142201.00 99374.33 142201.00 99363.67 142201.00 99353.00C142222.33 99342.33 142243.67 99331.67 142265.00 99321.00C142254.33 99331.66 142243.67 99342.34 142233.00 99353.00C142254.33 99363.67 142275.67 99374.33 142297.00 99385.00C142394.17 99395.91 142491.27 99407.56 142588.48 99418.00C142598.66 99418.00 142608.83 99418.00 142619.00 99418.00C142633.12 99402.52 142649.83 99389.08 142660.46 99370.75C142679.26 99342.21 142698.94 99314.19 142716.91 99285.15C142737.60 99243.43 142758.31 99201.72 142779.00 99160.00C142790.00 99149.33 142801.00 99138.67 142812.00 99128.00C142812.00 99138.67 142812.00 99149.33 142812.00 99160.00C142822.67 99149.34 142833.33 99138.66 142844.00 99128.00C142844.00 99106.67 142844.00 99085.33 142844.00 99064.00C142908.33 99042.33 142972.67 99020.67 143037.00 98999.00C143037.00 98988.33 143037.00 98977.67 143037.00 98967.00C143058.33 98977.67 143079.67 98988.33 143101.00 98999.00C143101.00 98977.67 143101.00 98956.33 143101.00 98935.00C143122.33 98935.00 143143.67 98935.00 143165.00 98935.00C143154.33 98924.34 143143.67 98913.66 143133.00 98903.00C143154.33 98881.66 143175.67 98860.34 143197.00 98839.00C143208.00 98849.67 143219.00 98860.33 143230.00 98871.00C143240.67 98860.34 143251.33 98849.66 143262.00 98839.00C143272.67 98839.00 143283.33 98839.00 143294.00 98839.00C143294.00 98828.33 143294.00 98817.67 143294.00 98807.00C143304.82 98806.89 143315.64 98807.21 143326.46 98806.84C143358.31 98795.90 143390.15 98784.95 143422.00 98774.00C143422.00 98763.33 143422.00 98752.67 143422.00 98742.00C143433.00 98742.00 143444.00 98742.00 143455.00 98742.00C143455.00 98731.33 143455.00 98720.67 143455.00 98710.00C143476.33 98710.00 143497.67 98710.00 143519.00 98710.00C143529.67 98699.34 143540.33 98688.66 143551.00 98678.00C143572.33 98678.00 143593.67 98678.00 143615.00 98678.00C143615.00 98667.33 143615.00 98656.67 143615.00 98646.00C143615.00 98656.67 143615.00 98667.33 143615.00 98678.00C143636.67 98646.00 143658.33 98614.00 143680.00 98582.00C143712.00 98582.00 143744.00 98582.00 143776.00 98582.00C143776.00 98560.33 143776.00 98538.67 143776.00 98517.00C143765.33 98527.66 143754.67 98538.34 143744.00 98549.00C143733.33 98549.00 143722.67 98549.00 143712.00 98549.00C143712.00 98527.67 143712.00 98506.33 143712.00 98485.00C143722.67 98495.66 143733.33 98506.34 143744.00 98517.00C143744.00 98485.00 143744.00 98453.00 143744.00 98421.00C143754.67 98410.34 143765.33 98399.66 143776.00 98389.00C143808.33 98389.00 143840.67 98389.00 143873.00 98389.00C143862.00 98378.00 143851.00 98367.00 143840.00 98356.00C143829.33 98356.00 143818.67 98356.00 143808.00 98356.00C143818.67 98345.34 143829.33 98334.66 143840.00 98324.00C143829.33 98313.34 143818.67 98302.66 143808.00 98292.00C143818.67 98292.00 143829.33 98292.00 143840.00 98292.00C143851.00 98281.33 143862.00 98270.67 143873.00 98260.00C143851.33 98249.34 143829.67 98238.66 143808.00 98228.00C143808.00 98217.33 143808.00 98206.67 143808.00 98196.00C143840.33 98206.67 143872.67 98217.33 143905.00 98228.00C143915.67 98217.34 143926.33 98206.66 143937.00 98196.00C143926.33 98185.00 143915.67 98174.00 143905.00 98163.00C143937.00 98163.00 143969.00 98163.00 144001.00 98163.00C144001.00 98152.33 144001.00 98141.67 144001.00 98131.00C144011.67 98131.00 144022.33 98131.00 144033.00 98131.00C144043.67 98120.34 144054.33 98109.66 144065.00 98099.00C144097.33 98099.00 144129.67 98099.00 144162.00 98099.00C144162.00 98088.33 144162.00 98077.67 144162.00 98067.00C144172.67 98077.66 144183.33 98088.34 144194.00 98099.00C144204.67 98088.34 144215.33 98077.66 144226.00 98067.00C144226.00 98056.33 144226.00 98045.67 144226.00 98035.00C144236.81 98034.85 144247.63 98035.29 144258.43 98034.79C144279.95 98024.18 144301.48 98013.60 144323.00 98003.00C144323.00 97981.33 144323.00 97959.67 144323.00 97938.00C144333.67 97949.00 144344.33 97960.00 144355.00 97971.00C144365.67 97949.34 144376.33 97927.66 144387.00 97906.00C144387.00 97916.67 144387.00 97927.33 144387.00 97938.00C144408.33 97938.00 144429.67 97938.00 144451.00 97938.00C144451.00 97916.67 144451.00 97895.33 144451.00 97874.00C144462.00 97874.00 144473.00 97874.00 144484.00 97874.00C144484.00 97852.67 144484.00 97831.33 144484.00 97810.00C144494.67 97810.00 144505.33 97810.00 144516.00 97810.00C144516.00 97799.33 144516.00 97788.67 144516.00 97778.00C144537.33 97799.34 144558.67 97820.66 144580.00 97842.00C144580.00 97820.67 144580.00 97799.33 144580.00 97778.00C144590.67 97788.66 144601.33 97799.34 144612.00 97810.00C144622.67 97799.34 144633.33 97788.66 144644.00 97778.00C144633.33 97767.34 144622.67 97756.66 144612.00 97746.00C144622.67 97724.34 144633.33 97702.66 144644.00 97681.00C144654.67 97681.00 144665.33 97681.00 144676.00 97681.00C144687.00 97691.67 144698.00 97702.33 144709.00 97713.00C144719.67 97702.34 144730.33 97691.66 144741.00 97681.00C144730.33 97681.00 144719.67 97681.00 144709.00 97681.00C144719.67 97670.34 144730.33 97659.66 144741.00 97649.00C144751.67 97659.66 144762.33 97670.34 144773.00 97681.00C144783.67 97649.00 144794.33 97617.00 144805.00 97585.00C144815.67 97585.00 144826.33 97585.00 144837.00 97585.00C144847.67 97574.34 144858.33 97563.66 144869.00 97553.00C144890.67 97553.00 144912.33 97553.00 144934.00 97553.00C144965.94 97520.61 144997.72 97488.06 145030.00 97456.00C145030.00 97466.67 145030.00 97477.33 145030.00 97488.00C145030.00 97477.33 145030.00 97466.67 145030.00 97456.00C145051.33 97456.00 145072.67 97456.00 145094.00 97456.00C145094.00 97445.33 145094.00 97434.67 145094.00 97424.00C145105.00 97424.00 145116.00 97424.00 145127.00 97424.00C145127.00 97413.33 145127.00 97402.67 145127.00 97392.00C145148.33 97402.67 145169.67 97413.33 145191.00 97424.00C145191.00 97402.67 145191.00 97381.33 145191.00 97360.00C145234.00 97360.00 145277.00 97360.00 145320.00 97360.00C145330.67 97349.00 145341.33 97338.00 145352.00 97327.00C145352.00 97338.00 145352.00 97349.00 145352.00 97360.00C145362.67 97349.00 145373.33 97338.00 145384.00 97327.00C145394.67 97338.00 145405.33 97349.00 145416.00 97360.00C145426.67 97360.00 145437.33 97360.00 145448.00 97360.00C145469.08 97338.08 145490.40 97316.40 145512.00 97295.00C145523.00 97295.00 145534.00 97295.00 145545.00 97295.00C145545.00 97284.33 145545.00 97273.67 145545.00 97263.00C145555.67 97273.66 145566.33 97284.34 145577.00 97295.00C145588.61 97284.10 145598.90 97271.63 145611.41 97261.79C145632.04 97251.38 145652.83 97241.30 145673.34 97230.66C145694.56 97209.44 145715.78 97188.22 145737.00 97167.00C145769.33 97156.33 145801.67 97145.67 145834.00 97135.00C145844.67 97124.00 145855.33 97113.00 145866.00 97102.00C145887.33 97102.00 145908.67 97102.00 145930.00 97102.00C145930.00 97113.00 145930.00 97124.00 145930.00 97135.00C145941.00 97124.00 145952.00 97113.00 145963.00 97102.00C145963.00 97091.33 145963.00 97080.67 145963.00 97070.00C145973.67 97080.66 145984.33 97091.34 145995.00 97102.00C146005.67 97091.34 146016.33 97080.66 146027.00 97070.00C146037.67 97070.00 146048.33 97070.00 146059.00 97070.00C146069.67 97059.34 146080.33 97048.66 146091.00 97038.00C146101.67 97038.00 146112.33 97038.00 146123.00 97038.00C146112.33 97027.34 146101.67 97016.66 146091.00 97006.00C146112.67 97006.00 146134.33 97006.00 146156.00 97006.00C146156.00 96995.33 146156.00 96984.67 146156.00 96974.00C146188.00 96963.33 146220.00 96952.67 146252.00 96942.00C146284.00 96963.33 146316.00 96984.67 146348.00 97006.00C146359.00 96995.33 146370.00 96984.67 146381.00 96974.00C146445.00 96974.00 146509.00 96974.00 146573.00 96974.00C146584.00 96995.33 146595.00 97016.67 146606.00 97038.00C146606.00 97027.33 146606.00 97016.67 146606.00 97006.00C146595.00 97006.00 146584.00 97006.00 146573.00 97006.00C146584.00 96995.33 146595.00 96984.67 146606.00 96974.00C146616.67 96984.66 146627.33 96995.34 146638.00 97006.00C146638.00 96984.67 146638.00 96963.33 146638.00 96942.00C146670.00 96942.00 146702.00 96942.00 146734.00 96942.00C146734.00 96920.33 146734.00 96898.67 146734.00 96877.00C146744.67 96888.00 146755.33 96899.00 146766.00 96910.00C146766.00 96931.33 146766.00 96952.67 146766.00 96974.00C146777.00 96974.00 146788.00 96974.00 146799.00 96974.00C146799.00 96984.67 146799.00 96995.33 146799.00 97006.00C146831.00 97006.00 146863.00 97006.00 146895.00 97006.00C146916.33 97027.34 146937.67 97048.66 146959.00 97070.00C146970.00 97070.00 146981.00 97070.00 146992.00 97070.00C146992.00 97048.67 146992.00 97027.33 146992.00 97006.00C147034.67 97016.66 147077.33 97027.34 147120.00 97038.00C147120.00 97059.33 147120.00 97080.67 147120.00 97102.00C147109.33 97102.00 147098.67 97102.00 147088.00 97102.00C147098.67 97113.00 147109.33 97124.00 147120.00 97135.00C147141.33 97124.00 147162.67 97113.00 147184.00 97102.00C147195.00 97070.00 147206.00 97038.00 147217.00 97006.00C147227.67 97006.00 147238.33 97006.00 147249.00 97006.00C147249.00 97027.33 147249.00 97048.67 147249.00 97070.00C147259.67 97080.66 147270.33 97091.34 147281.00 97102.00C147291.67 97102.00 147302.33 97102.00 147313.00 97102.00C147323.67 97091.34 147334.33 97080.66 147345.00 97070.00C147345.00 97080.67 147345.00 97091.33 147345.00 97102.00C147355.67 97102.00 147366.33 97102.00 147377.00 97102.00C147377.00 97091.33 147377.00 97080.67 147377.00 97070.00C147387.67 97070.00 147398.33 97070.00 147409.00 97070.00C147409.00 97091.67 147409.00 97113.33 147409.00 97135.00C147430.67 97135.00 147452.33 97135.00 147474.00 97135.00C147484.67 97124.00 147495.33 97113.00 147506.00 97102.00C147506.00 97113.00 147506.00 97124.00 147506.00 97135.00C147516.67 97135.00 147527.33 97135.00 147538.00 97135.00C147548.67 97145.66 147559.33 97156.34 147570.00 97167.00C147570.00 97156.33 147570.00 97145.67 147570.00 97135.00C147580.67 97145.66 147591.33 97156.34 147602.00 97167.00C147613.00 97145.33 147624.00 97123.67 147635.00 97102.00C147656.33 97102.00 147677.67 97102.00 147699.00 97102.00C147699.00 97091.33 147699.00 97080.67 147699.00 97070.00C147741.67 97070.00 147784.33 97070.00 147827.00 97070.00C147816.33 97070.00 147805.67 97070.00 147795.00 97070.00C147816.67 97080.66 147838.33 97091.34 147860.00 97102.00C147860.00 97113.00 147860.00 97124.00 147860.00 97135.00C147870.67 97124.00 147881.33 97113.00 147892.00 97102.00C147902.67 97102.00 147913.33 97102.00 147924.00 97102.00C147934.67 97123.66 147945.33 97145.34 147956.00 97167.00C147966.67 97167.00 147977.33 97167.00 147988.00 97167.00C147988.00 97188.33 147988.00 97209.67 147988.00 97231.00C147988.00 97209.67 147988.00 97188.33 147988.00 97167.00C147998.67 97167.00 148009.33 97167.00 148020.00 97167.00C148031.00 97188.33 148042.00 97209.67 148053.00 97231.00C148063.67 97220.34 148074.33 97209.66 148085.00 97199.00C148095.67 97209.66 148106.33 97220.34 148117.00 97231.00C148117.00 97220.33 148117.00 97209.67 148117.00 97199.00C148127.67 97199.00 148138.33 97199.00 148149.00 97199.00C148159.67 97209.66 148170.33 97220.34 148181.00 97231.00C148181.00 97220.33 148181.00 97209.67 148181.00 97199.00C148191.67 97209.66 148202.33 97220.34 148213.00 97231.00C148213.00 97220.33 148213.00 97209.67 148213.00 97199.00C148223.67 97199.00 148234.33 97199.00 148245.00 97199.00C148256.00 97209.67 148267.00 97220.33 148278.00 97231.00C148278.00 97220.33 148278.00 97209.67 148278.00 97199.00C148278.00 97220.33 148278.00 97241.67 148278.00 97263.00C148299.33 97263.00 148320.67 97263.00 148342.00 97263.00C148352.67 97273.66 148363.33 97284.34 148374.00 97295.00C148374.00 97284.33 148374.00 97273.67 148374.00 97263.00C148384.67 97273.66 148395.33 97284.34 148406.00 97295.00C148427.67 97284.34 148449.33 97273.66 148471.00 97263.00C148471.00 97273.67 148471.00 97284.33 148471.00 97295.00C148460.00 97295.00 148449.00 97295.00 148438.00 97295.00C148449.00 97305.67 148460.00 97316.33 148471.00 97327.00C148481.67 97316.34 148492.33 97305.66 148503.00 97295.00C148503.00 97305.67 148503.00 97316.33 148503.00 97327.00C148513.67 97305.67 148524.33 97284.33 148535.00 97263.00C148556.33 97273.67 148577.67 97284.33 148599.00 97295.00C148609.67 97295.00 148620.33 97295.00 148631.00 97295.00C148620.33 97305.66 148609.67 97316.34 148599.00 97327.00C148609.67 97327.00 148620.33 97327.00 148631.00 97327.00C148631.00 97338.00 148631.00 97349.00 148631.00 97360.00C148641.67 97349.00 148652.33 97338.00 148663.00 97327.00C148674.00 97348.67 148685.00 97370.33 148696.00 97392.00C148717.33 97392.00 148738.67 97392.00 148760.00 97392.00C148770.67 97402.66 148781.33 97413.34 148792.00 97424.00C148760.00 97467.00 148728.00 97510.00 148696.00 97553.00C148696.00 97563.67 148696.00 97574.33 148696.00 97585.00C148674.33 97606.33 148652.67 97627.67 148631.00 97649.00C148608.56 97727.01 148587.06 97805.31 148563.99 97883.13C148554.33 97912.43 148544.66 97941.71 148535.00 97971.00C148524.31 97981.86 148513.28 97992.38 148502.80 98003.44C148459.87 98099.63 148416.93 98195.81 148374.00 98292.00C148363.45 98357.17 148351.90 98422.20 148341.98 98487.45C148341.94 98497.45 148342.18 98507.46 148341.85 98517.46C148331.25 98549.64 148320.62 98581.82 148310.00 98614.00C148310.00 98635.33 148310.00 98656.67 148310.00 98678.00C148320.67 98667.34 148331.33 98656.66 148342.00 98646.00C148342.00 98678.00 148342.00 98710.00 148342.00 98742.00C148352.67 98742.00 148363.33 98742.00 148374.00 98742.00C148374.00 98763.67 148374.00 98785.33 148374.00 98807.00C148352.67 98817.67 148331.33 98828.33 148310.00 98839.00C148331.33 98849.67 148352.67 98860.33 148374.00 98871.00C148352.67 98871.00 148331.33 98871.00 148310.00 98871.00C148320.67 98871.00 148331.33 98871.00 148342.00 98871.00C148331.33 98881.66 148320.67 98892.34 148310.00 98903.00C148320.67 98903.00 148331.33 98903.00 148342.00 98903.00C148331.33 98913.66 148320.67 98924.34 148310.00 98935.00C148320.67 98945.66 148331.33 98956.34 148342.00 98967.00C148342.00 98956.33 148342.00 98945.67 148342.00 98935.00C148352.67 98935.00 148363.33 98935.00 148374.00 98935.00C148374.00 98956.33 148374.00 98977.67 148374.00 98999.00C148384.67 98999.00 148395.33 98999.00 148406.00 98999.00C148416.67 99010.00 148427.33 99021.00 148438.00 99032.00C148459.82 99032.10 148481.64 99031.80 148503.46 99032.15C148567.64 99053.44 148631.82 99074.72 148696.00 99096.00C148728.00 99096.00 148760.00 99096.00 148792.00 99096.00C148802.67 99106.66 148813.33 99117.34 148824.00 99128.00C148845.67 99128.00 148867.33 99128.00 148889.00 99128.00C148899.67 99138.66 148910.33 99149.34 148921.00 99160.00C148963.67 99160.00 149006.33 99160.00 149049.00 99160.00C149070.67 99181.66 149092.33 99203.34 149114.00 99225.00C149114.00 99235.67 149114.00 99246.33 149114.00 99257.00C149103.00 99267.67 149092.00 99278.33 149081.00 99289.00C149081.00 99299.67 149081.00 99310.33 149081.00 99321.00C149102.67 99321.00 149124.33 99321.00 149146.00 99321.00C149156.67 99310.34 149167.33 99299.66 149178.00 99289.00C149199.33 99289.00 149220.67 99289.00 149242.00 99289.00C149242.00 99299.67 149242.00 99310.33 149242.00 99321.00C149263.67 99321.00 149285.33 99321.00 149307.00 99321.00C149328.33 99342.34 149349.67 99363.66 149371.00 99385.00C149424.67 99396.00 149478.33 99407.00 149532.00 99418.00C149553.33 99428.67 149574.67 99439.33 149596.00 99450.00C149606.81 99449.85 149617.63 99450.29 149628.43 99449.78C149649.62 99439.19 149670.81 99428.60 149692.00 99418.00C149713.67 99418.00 149735.33 99418.00 149757.00 99418.00C149767.67 99439.33 149778.33 99460.67 149789.00 99482.00C149842.67 99514.00 149896.33 99546.00 149950.00 99578.00C149960.67 99588.66 149971.33 99599.34 149982.00 99610.00C149971.33 99610.00 149960.67 99610.00 149950.00 99610.00C149950.00 99631.67 149950.00 99653.33 149950.00 99675.00C149960.67 99696.33 149971.33 99717.67 149982.00 99739.00C149992.67 99739.00 150003.33 99739.00 150014.00 99739.00C150024.67 99717.67 150035.33 99696.33 150046.00 99675.00C150056.67 99685.66 150067.33 99696.34 150078.00 99707.00C150078.00 99685.67 150078.00 99664.33 150078.00 99643.00C150099.67 99643.00 150121.33 99643.00 150143.00 99643.00C150153.67 99632.00 150164.33 99621.00 150175.00 99610.00C150207.00 99610.00 150239.00 99610.00 150271.00 99610.00C150271.00 99599.33 150271.00 99588.67 150271.00 99578.00C150249.67 99556.66 150228.33 99535.34 150207.00 99514.00C150217.67 99503.34 150228.33 99492.66 150239.00 99482.00C150260.33 99482.00 150281.67 99482.00 150303.00 99482.00C150313.67 99471.34 150324.33 99460.66 150335.00 99450.00C150324.33 99428.34 150313.67 99406.66 150303.00 99385.00C150313.67 99374.34 150324.33 99363.66 150335.00 99353.00C150356.67 99353.00 150378.33 99353.00 150400.00 99353.00C150400.00 99342.33 150400.00 99331.67 150400.00 99321.00C150410.67 99310.34 150421.33 99299.66 150432.00 99289.00C150442.67 99289.00 150453.33 99289.00 150464.00 99289.00C150474.67 99278.34 150485.33 99267.66 150496.00 99257.00C150506.67 99267.66 150517.33 99278.34 150528.00 99289.00C150562.02 99267.00 150595.25 99243.71 150629.81 99222.56C150670.87 99201.71 150711.93 99180.85 150753.00 99160.00C150785.33 99160.00 150817.67 99160.00 150850.00 99160.00C150882.00 99128.00 150914.00 99096.00 150946.00 99064.00C150956.81 99063.85 150967.63 99064.29 150978.43 99063.79C150999.95 99053.18 151021.48 99042.60 151043.00 99032.00C151053.67 99042.66 151064.33 99053.34 151075.00 99064.00C151096.33 99064.00 151117.67 99064.00 151139.00 99064.00C151149.67 99053.34 151160.33 99042.66 151171.00 99032.00C151171.00 99021.00 151171.00 99010.00 151171.00 98999.00C151246.84 98988.44 151322.57 98976.98 151398.48 98967.00C151440.65 98967.00 151482.83 98967.00 151525.00 98967.00C151535.67 98956.34 151546.33 98945.66 151557.00 98935.00C151567.81 98935.15 151578.63 98934.71 151589.43 98935.21C151610.95 98945.82 151632.48 98956.40 151654.00 98967.00C151654.00 98956.33 151654.00 98945.67 151654.00 98935.00C151696.67 98956.33 151739.33 98977.67 151782.00 98999.00C151814.33 98999.00 151846.67 98999.00 151879.00 98999.00C151900.33 99020.67 151921.67 99042.33 151943.00 99064.00C151953.67 99064.00 151964.33 99064.00 151975.00 99064.00C151975.00 99053.33 151975.00 99042.67 151975.00 99032.00C151986.62 99042.89 151996.88 99055.41 152009.43 99065.20C152030.29 99075.47 152051.14 99085.73 152072.00 99096.00C152082.67 99117.33 152093.33 99138.67 152104.00 99160.00C152114.67 99149.34 152125.33 99138.66 152136.00 99128.00C152146.67 99128.00 152157.33 99128.00 152168.00 99128.00C152178.67 99106.67 152189.33 99085.33 152200.00 99064.00C152210.67 99085.33 152221.33 99106.67 152232.00 99128.00C152243.00 99128.00 152254.00 99128.00 152265.00 99128.00C152286.33 99117.33 152307.67 99106.67 152329.00 99096.00C152339.67 99096.00 152350.33 99096.00 152361.00 99096.00C152361.00 99106.67 152361.00 99117.33 152361.00 99128.00C152393.33 99149.34 152425.67 99170.66 152458.00 99192.00C152468.67 99181.34 152479.33 99170.66 152490.00 99160.00C152522.00 99170.67 152554.00 99181.33 152586.00 99192.00C152596.67 99181.34 152607.33 99170.66 152618.00 99160.00C152650.33 99181.67 152682.67 99203.33 152715.00 99225.00C152736.33 99225.00 152757.67 99225.00 152779.00 99225.00C152789.67 99235.66 152800.33 99246.34 152811.00 99257.00C152821.67 99289.00 152832.33 99321.00 152843.00 99353.00C152843.00 99363.67 152843.00 99374.33 152843.00 99385.00C152854.00 99385.00 152865.00 99385.00 152876.00 99385.00C152886.67 99396.00 152897.33 99407.00 152908.00 99418.00C152908.00 99407.00 152908.00 99396.00 152908.00 99385.00C152918.67 99417.33 152929.33 99449.67 152940.00 99482.00C152950.67 99482.00 152961.33 99482.00 152972.00 99482.00C152972.00 99471.33 152972.00 99460.67 152972.00 99450.00C152993.33 99471.34 153014.67 99492.66 153036.00 99514.00C153046.67 99514.00 153057.33 99514.00 153068.00 99514.00C153079.00 99503.33 153090.00 99492.67 153101.00 99482.00C153111.67 99492.66 153122.33 99503.34 153133.00 99514.00C153122.33 99514.00 153111.67 99514.00 153101.00 99514.00C153101.00 99524.67 153101.00 99535.33 153101.00 99546.00C153122.33 99556.67 153143.67 99567.33 153165.00 99578.00C153175.67 99599.66 153186.33 99621.34 153197.00 99643.00C153218.33 99643.00 153239.67 99643.00 153261.00 99643.00C153261.00 99653.67 153261.00 99664.33 153261.00 99675.00C153276.26 99689.74 153290.12 99706.16 153307.86 99718.08C153346.03 99746.49 153384.26 99774.82 153422.34 99803.35C153443.56 99824.90 153464.78 99846.45 153486.00 99868.00C153539.67 99878.66 153593.33 99889.34 153647.00 99900.00C153657.67 99921.33 153668.33 99942.67 153679.00 99964.00C153700.67 99985.33 153722.33 100006.67 153744.00 100028.00C153765.33 100039.00 153786.67 100050.00 153808.00 100061.00C153808.00 100071.67 153808.00 100082.33 153808.00 100093.00C153829.33 100082.33 153850.67 100071.67 153872.00 100061.00C153861.33 100061.00 153850.67 100061.00 153840.00 100061.00C153861.33 100061.00 153882.67 100061.00 153904.00 100061.00C153904.00 100071.67 153904.00 100082.33 153904.00 100093.00C153915.00 100093.00 153926.00 100093.00 153937.00 100093.00C153926.00 100103.67 153915.00 100114.33 153904.00 100125.00C153925.67 100135.67 153947.33 100146.33 153969.00 100157.00C153979.67 100167.67 153990.33 100178.33 154001.00 100189.00C154011.67 100178.33 154022.33 100167.67 154033.00 100157.00C154054.33 100178.33 154075.67 100199.67 154097.00 100221.00C154097.00 100210.33 154097.00 100199.67 154097.00 100189.00C154107.67 100210.33 154118.33 100231.67 154129.00 100253.00C154140.00 100253.00 154151.00 100253.00 154162.00 100253.00C154151.00 100253.00 154140.00 100253.00 154129.00 100253.00C154161.43 100274.81 154193.99 100296.41 154226.34 100318.34C154247.56 100339.56 154268.78 100360.78 154290.00 100382.00C154300.82 100360.57 154311.29 100338.97 154322.34 100317.66C154343.89 100296.11 154365.45 100274.55 154387.00 100253.00C154408.43 100264.15 154430.03 100274.97 154451.34 100286.34C154472.63 100307.71 154494.09 100328.92 154515.27 100350.40C154536.85 100382.26 154558.42 100414.13 154580.00 100446.00C154590.82 100446.11 154601.64 100445.79 154612.46 100446.16C154644.31 100457.10 154676.15 100468.05 154708.00 100479.00C154708.00 100500.33 154708.00 100521.67 154708.00 100543.00C154740.33 100543.00 154772.67 100543.00 154805.00 100543.00C154837.00 100564.33 154869.00 100585.67 154901.00 100607.00C154933.33 100650.00 154965.67 100693.00 154998.00 100736.00C155051.33 100736.00 155104.67 100736.00 155158.00 100736.00C155157.62 100758.14 155158.78 100780.38 155157.38 100802.47C155146.94 100844.65 155136.47 100886.82 155126.00 100929.00C155169.00 100939.67 155212.00 100950.33 155255.00 100961.00C155287.00 100982.33 155319.00 101003.67 155351.00 101025.00C155383.33 101014.33 155415.67 101003.67 155448.00 100993.00C155461.65 101007.69 155478.14 101020.11 155488.36 101037.67C155506.91 101065.77 155525.45 101093.89 155544.00 101122.00C155576.33 101089.67 155608.67 101057.33 155641.00 101025.00C155651.67 101025.00 155662.33 101025.00 155673.00 101025.00C155683.82 101046.43 155694.30 101068.03 155705.34 101089.35C155715.89 101100.23 155726.45 101111.12 155737.00 101122.00C155780.00 101132.67 155823.00 101143.33 155866.00 101154.00C155876.67 101175.33 155887.33 101196.67 155898.00 101218.00C155908.67 101207.33 155919.33 101196.67 155930.00 101186.00C155951.33 101207.33 155972.67 101228.67 155994.00 101250.00C156015.82 101228.60 156037.47 101207.03 156059.40 101185.73C156091.27 101164.49 156123.13 101143.24 156155.00 101122.00C156176.67 101132.67 156198.33 101143.33 156220.00 101154.00C156241.33 101143.33 156262.67 101132.67 156284.00 101122.00C156294.67 101132.67 156305.33 101143.33 156316.00 101154.00C156337.33 101143.33 156358.67 101132.67 156380.00 101122.00C156380.00 101100.33 156380.00 101078.67 156380.00 101057.00C156390.67 101057.00 156401.33 101057.00 156412.00 101057.00C156423.00 101078.67 156434.00 101100.33 156445.00 101122.00C156466.33 101122.00 156487.67 101122.00 156509.00 101122.00C156509.00 101143.33 156509.00 101164.67 156509.00 101186.00C156530.33 101207.33 156551.67 101228.67 156573.00 101250.00C156594.43 101260.82 156616.03 101271.29 156637.34 101282.34C156658.89 101303.89 156680.45 101325.45 156702.00 101347.00C156712.67 101379.00 156723.33 101411.00 156734.00 101443.00C156744.67 101443.00 156755.33 101443.00 156766.00 101443.00C156766.00 101475.33 156766.00 101507.67 156766.00 101540.00C156787.33 101540.00 156808.67 101540.00 156830.00 101540.00C156853.04 101528.71 156875.45 101516.06 156898.92 101505.70C156962.96 101484.70 157026.73 101462.81 157090.96 101442.41C157143.31 101431.95 157195.65 101421.48 157248.00 101411.00C157259.00 101421.67 157270.00 101432.33 157281.00 101443.00C157302.33 101443.00 157323.67 101443.00 157345.00 101443.00C157387.67 101464.33 157430.33 101485.67 157473.00 101507.00C157505.33 101496.33 157537.67 101485.67 157570.00 101475.00C157570.00 101453.67 157570.00 101432.33 157570.00 101411.00C157591.33 101411.00 157612.67 101411.00 157634.00 101411.00C157644.67 101400.33 157655.33 101389.67 157666.00 101379.00C157687.67 101379.00 157709.33 101379.00 157731.00 101379.00C157742.61 101368.10 157752.89 101355.63 157765.40 101345.79C157785.93 101335.52 157806.47 101325.27 157827.00 101315.00C157837.67 101282.67 157848.33 101250.33 157859.00 101218.00C157880.67 101218.00 157902.33 101218.00 157924.00 101218.00C157946.22 101207.28 157967.88 101195.27 157990.47 101185.38C158032.64 101174.92 158074.82 101164.47 158117.00 101154.00C158127.67 101143.33 158138.33 101132.67 158149.00 101122.00C158159.67 101122.00 158170.33 101122.00 158181.00 101122.00C158576.42 101484.84 158972.31 101847.17 159367.42 102210.34C159508.85 102341.85 159650.58 102473.03 159791.78 102604.77C159908.52 102721.18 160025.26 102837.59 160142.00 102954.00C160185.00 102986.33 160228.00 103018.67 160271.00 103051.00C160270.89 103069.33 160270.39 103087.81 160274.24 103105.85C160305.16 103323.39 160336.18 103540.92 160367.03 103758.48C160377.69 103929.99 160388.34 104101.49 160399.00 104273.00C160442.00 104273.00 160485.00 104273.00 160528.00 104273.00C160549.33 104262.00 160570.67 104251.00 160592.00 104240.00C160602.67 104240.00 160613.33 104240.00 160624.00 104240.00C160645.67 104261.67 160667.33 104283.33 160689.00 104305.00C160721.77 104293.81 160754.90 104283.58 160787.43 104271.77C160808.28 104261.16 160829.15 104250.59 160850.00 104240.00C160882.00 104240.00 160914.00 104240.00 160946.00 104240.00C160978.00 104261.67 161010.00 104283.33 161042.00 104305.00C161053.15 104305.10 161064.31 104304.79 161075.46 104305.15C161108.08 104316.28 161141.03 104326.48 161173.42 104338.22C161215.51 104359.36 161257.71 104380.27 161300.00 104401.00C161310.67 104390.33 161321.33 104379.67 161332.00 104369.00C161342.67 104337.00 161353.33 104305.00 161364.00 104273.00C161378.96 104272.53 161394.35 104274.78 161408.79 104269.73C161447.53 104259.82 161486.26 104249.91 161525.00 104240.00C161557.00 104208.00 161589.00 104176.00 161621.00 104144.00C161653.33 104154.67 161685.67 104165.33 161718.00 104176.00C161750.00 104154.67 161782.00 104133.33 161814.00 104112.00C161857.00 104112.00 161900.00 104112.00 161943.00 104112.00C161975.00 104079.67 162007.00 104047.33 162039.00 104015.00C162049.67 104015.00 162060.33 104015.00 162071.00 104015.00C162071.00 103983.00 162071.00 103951.00 162071.00 103919.00C162092.92 103897.92 162114.59 103876.60 162136.00 103855.00C162136.00 103833.33 162136.00 103811.67 162136.00 103790.00C162157.33 103811.67 162178.67 103833.33 162200.00 103855.00C162264.33 103855.00 162328.67 103855.00 162393.00 103855.00C162403.67 103908.33 162414.33 103961.67 162425.00 104015.00C162457.16 104014.92 162489.31 104015.16 162521.47 104014.88C162564.31 104004.26 162607.16 103993.63 162650.00 103983.00C162660.67 103972.33 162671.33 103961.67 162682.00 103951.00C162692.67 103961.67 162703.33 103972.33 162714.00 103983.00C162725.00 103961.67 162736.00 103940.33 162747.00 103919.00C162757.67 103919.00 162768.33 103919.00 162779.00 103919.00C162779.00 103876.00 162779.00 103833.00 162779.00 103790.00C162800.33 103790.00 162821.67 103790.00 162843.00 103790.00C162843.00 103800.67 162843.00 103811.33 162843.00 103822.00C162886.00 103843.67 162929.00 103865.33 162972.00 103887.00C162982.67 103908.33 162993.33 103929.67 163004.00 103951.00C162993.33 103972.33 162982.67 103993.67 162972.00 104015.00C162982.67 104036.67 162993.33 104058.33 163004.00 104080.00C163025.33 104090.67 163046.67 104101.33 163068.00 104112.00C163100.33 104101.33 163132.67 104090.67 163165.00 104080.00C163175.67 104069.33 163186.33 104058.67 163197.00 104048.00C163207.67 104048.00 163218.33 104048.00 163229.00 104048.00C163218.33 104026.33 163207.67 104004.67 163197.00 103983.00C163207.67 103961.67 163218.33 103940.33 163229.00 103919.00C163250.33 103919.00 163271.67 103919.00 163293.00 103919.00C163314.33 103908.33 163335.67 103897.67 163357.00 103887.00C163368.00 103887.00 163379.00 103887.00 163390.00 103887.00C163390.00 103897.67 163390.00 103908.33 163390.00 103919.00C163400.67 103919.00 163411.33 103919.00 163422.00 103919.00C163443.33 103951.00 163464.67 103983.00 163486.00 104015.00C163486.00 104026.00 163486.00 104037.00 163486.00 104048.00C163518.33 104058.67 163550.67 104069.33 163583.00 104080.00C163604.33 104122.67 163625.67 104165.33 163647.00 104208.00C163657.67 104208.00 163668.33 104208.00 163679.00 104208.00C163689.67 104186.67 163700.33 104165.33 163711.00 104144.00C163721.67 104144.00 163732.33 104144.00 163743.00 104144.00C163764.67 104176.00 163786.33 104208.00 163808.00 104240.00C163818.67 104240.00 163829.33 104240.00 163840.00 104240.00C163850.67 104251.00 163861.33 104262.00 163872.00 104273.00C163872.00 104283.67 163872.00 104294.33 163872.00 104305.00C163861.33 104315.67 163850.67 104326.33 163840.00 104337.00C163861.33 104347.67 163882.67 104358.33 163904.00 104369.00C163904.00 104379.67 163904.00 104390.33 163904.00 104401.00C163947.00 104411.67 163990.00 104422.33 164033.00 104433.00C164022.33 104454.67 164011.67 104476.33 164001.00 104498.00C164011.67 104519.33 164022.33 104540.67 164033.00 104562.00C164054.33 104562.00 164075.67 104562.00 164097.00 104562.00C164118.33 104551.33 164139.67 104540.67 164161.00 104530.00C164193.33 104530.00 164225.67 104530.00 164258.00 104530.00C164258.00 104508.67 164258.00 104487.33 164258.00 104466.00C164268.67 104444.33 164279.33 104422.67 164290.00 104401.00C164311.33 104390.33 164332.67 104379.67 164354.00 104369.00C164375.41 104390.60 164397.08 104411.92 164419.00 104433.00C164432.65 104418.34 164449.05 104405.90 164459.36 104388.45C164477.90 104360.63 164496.46 104332.82 164515.00 104305.00C164525.67 104315.67 164536.33 104326.33 164547.00 104337.00C164557.67 104337.00 164568.33 104337.00 164579.00 104337.00C164611.33 104369.00 164643.67 104401.00 164676.00 104433.00C164686.67 104476.00 164697.33 104519.00 164708.00 104562.00C164718.67 104572.67 164729.33 104583.33 164740.00 104594.00C164740.00 104583.33 164740.00 104572.67 164740.00 104562.00C164761.33 104583.33 164782.67 104604.67 164804.00 104626.00C164804.00 104615.33 164804.00 104604.67 164804.00 104594.00C164815.00 104604.67 164826.00 104615.33 164837.00 104626.00C164858.33 104626.00 164879.67 104626.00 164901.00 104626.00C164911.67 104636.67 164922.33 104647.33 164933.00 104658.00C164944.61 104647.10 164954.89 104634.63 164967.40 104624.79C164987.93 104614.52 165008.47 104604.27 165029.00 104594.00C165040.00 104604.67 165051.00 104615.33 165062.00 104626.00C165072.67 104626.00 165083.33 104626.00 165094.00 104626.00C165104.67 104636.67 165115.33 104647.33 165126.00 104658.00C165136.67 104647.33 165147.33 104636.67 165158.00 104626.00C165211.67 104626.00 165265.33 104626.00 165319.00 104626.00C165340.33 104615.33 165361.67 104604.67 165383.00 104594.00C165393.67 104604.67 165404.33 104615.33 165415.00 104626.00C165426.00 104615.33 165437.00 104604.67 165448.00 104594.00C165469.33 104594.00 165490.67 104594.00 165512.00 104594.00C165533.33 104583.33 165554.67 104572.67 165576.00 104562.00C165586.67 104562.00 165597.33 104562.00 165608.00 104562.00C165618.67 104583.33 165629.33 104604.67 165640.00 104626.00C165640.00 104636.67 165640.00 104647.33 165640.00 104658.00C165651.00 104658.00 165662.00 104658.00 165673.00 104658.00C165673.00 104679.67 165673.00 104701.33 165673.00 104723.00C165683.67 104723.00 165694.33 104723.00 165705.00 104723.00C165705.00 104733.67 165705.00 104744.33 165705.00 104755.00C165715.67 104755.00 165726.33 104755.00 165737.00 104755.00C165737.00 104776.33 165737.00 104797.67 165737.00 104819.00C165747.67 104819.00 165758.33 104819.00 165769.00 104819.00C165769.00 104829.67 165769.00 104840.33 165769.00 104851.00C165779.67 104840.33 165790.33 104829.67 165801.00 104819.00C165833.33 104840.67 165865.67 104862.33 165898.00 104884.00C165908.67 104884.00 165919.33 104884.00 165930.00 104884.00C165930.00 104926.67 165930.00 104969.33 165930.00 105012.00C165908.33 105022.67 165886.67 105033.33 165865.00 105044.00C165876.00 105054.67 165887.00 105065.33 165898.00 105076.00C165908.67 105065.33 165919.33 105054.67 165930.00 105044.00C165930.00 105054.67 165930.00 105065.33 165930.00 105076.00C165940.67 105076.00 165951.33 105076.00 165962.00 105076.00C165962.00 105065.33 165962.00 105054.67 165962.00 105044.00C165983.33 105044.00 166004.67 105044.00 166026.00 105044.00C166036.67 105033.33 166047.33 105022.67 166058.00 105012.00C166058.00 105033.33 166058.00 105054.67 166058.00 105076.00C166069.00 105076.00 166080.00 105076.00 166091.00 105076.00C166112.33 105065.33 166133.67 105054.67 166155.00 105044.00C166165.67 105054.67 166176.33 105065.33 166187.00 105076.00C166208.33 105076.00 166229.67 105076.00 166251.00 105076.00C166251.00 105065.33 166251.00 105054.67 166251.00 105044.00C166272.67 105033.33 166294.33 105022.67 166316.00 105012.00C166316.00 105022.67 166316.00 105033.33 166316.00 105044.00C166305.00 105065.67 166294.00 105087.33 166283.00 105109.00C166294.00 105119.67 166305.00 105130.33 166316.00 105141.00C166326.67 105141.00 166337.33 105141.00 166348.00 105141.00C166358.67 105119.33 166369.33 105097.67 166380.00 105076.00C166390.67 105076.00 166401.33 105076.00 166412.00 105076.00C166401.33 105108.33 166390.67 105140.67 166380.00 105173.00C166380.00 105162.33 166380.00 105151.67 166380.00 105141.00C166380.00 105162.33 166380.00 105183.67 166380.00 105205.00C166369.33 105205.00 166358.67 105205.00 166348.00 105205.00C166348.00 105215.67 166348.00 105226.33 166348.00 105237.00C166358.67 105226.33 166369.33 105215.67 166380.00 105205.00C166390.67 105215.67 166401.33 105226.33 166412.00 105237.00C166412.00 105247.67 166412.00 105258.33 166412.00 105269.00C166422.67 105280.00 166433.33 105291.00 166444.00 105302.00C166433.33 105302.00 166422.67 105302.00 166412.00 105302.00C166412.00 105312.67 166412.00 105323.33 166412.00 105334.00C166433.33 105334.00 166454.67 105334.00 166476.00 105334.00C166487.00 105344.67 166498.00 105355.33 166509.00 105366.00C166498.00 105366.00 166487.00 105366.00 166476.00 105366.00C166487.00 105376.67 166498.00 105387.33 166509.00 105398.00C166530.33 105398.00 166551.67 105398.00 166573.00 105398.00C166562.33 105408.67 166551.67 105419.33 166541.00 105430.00C166551.67 105430.00 166562.33 105430.00 166573.00 105430.00C166573.00 105440.67 166573.00 105451.33 166573.00 105462.00C166583.67 105462.00 166594.33 105462.00 166605.00 105462.00C166605.00 105451.33 166605.00 105440.67 166605.00 105430.00C166615.67 105430.00 166626.33 105430.00 166637.00 105430.00C166647.67 105451.33 166658.33 105472.67 166669.00 105494.00C166679.67 105494.00 166690.33 105494.00 166701.00 105494.00C166701.00 105505.00 166701.00 105516.00 166701.00 105527.00C166712.00 105527.00 166723.00 105527.00 166734.00 105527.00C166734.00 105516.00 166734.00 105505.00 166734.00 105494.00C166755.33 105494.00 166776.67 105494.00 166798.00 105494.00C166798.00 105515.67 166798.00 105537.33 166798.00 105559.00C166830.00 105559.00 166862.00 105559.00 166894.00 105559.00C166894.00 105537.33 166894.00 105515.67 166894.00 105494.00C166947.67 105494.00 167001.33 105494.00 167055.00 105494.00C167065.67 105505.00 167076.33 105516.00 167087.00 105527.00C167097.67 105527.00 167108.33 105527.00 167119.00 105527.00C167108.33 105527.00 167097.67 105527.00 167087.00 105527.00C167065.67 105559.00 167044.33 105591.00 167023.00 105623.00C167023.00 105633.67 167023.00 105644.33 167023.00 105655.00C167044.33 105655.00 167065.67 105655.00 167087.00 105655.00C167119.33 105687.33 167151.67 105719.67 167184.00 105752.00C167184.00 105773.33 167184.00 105794.67 167184.00 105816.00C167205.33 105826.67 167226.67 105837.33 167248.00 105848.00C167258.67 105869.33 167269.33 105890.67 167280.00 105912.00C167280.00 105933.67 167280.00 105955.33 167280.00 105977.00C167301.67 105977.00 167323.33 105977.00 167345.00 105977.00C167345.00 105998.33 167345.00 106019.67 167345.00 106041.00C167355.67 106051.67 167366.33 106062.33 167377.00 106073.00C167377.00 106094.67 167377.00 106116.33 167377.00 106138.00C167344.67 106159.33 167312.33 106180.67 167280.00 106202.00C167280.00 106212.67 167280.00 106223.33 167280.00 106234.00C167269.33 106234.00 167258.67 106234.00 167248.00 106234.00C167237.33 106223.33 167226.67 106212.67 167216.00 106202.00C167205.33 106202.00 167194.67 106202.00 167184.00 106202.00C167194.67 106223.33 167205.33 106244.67 167216.00 106266.00C167226.67 106266.00 167237.33 106266.00 167248.00 106266.00C167258.67 106287.33 167269.33 106308.67 167280.00 106330.00C167269.33 106373.00 167258.67 106416.00 167248.00 106459.00C167226.67 106469.67 167205.33 106480.33 167184.00 106491.00C167184.00 106501.67 167184.00 106512.33 167184.00 106523.00C167162.33 106533.67 167140.67 106544.33 167119.00 106555.00C167119.00 106566.00 167119.00 106577.00 167119.00 106588.00C167087.00 106630.67 167055.00 106673.33 167023.00 106716.00C167033.67 106737.67 167044.33 106759.33 167055.00 106781.00C167065.67 106791.67 167076.33 106802.33 167087.00 106813.00C167097.67 106845.00 167108.33 106877.00 167119.00 106909.00C167087.00 106909.00 167055.00 106909.00 167023.00 106909.00C167011.40 106919.91 167001.08 106932.35 166988.60 106942.23C166968.07 106952.83 166947.53 106963.41 166927.00 106974.00C166916.00 107016.67 166905.00 107059.33 166894.00 107102.00C166883.33 107102.00 166872.67 107102.00 166862.00 107102.00C166851.33 107091.33 166840.67 107080.67 166830.00 107070.00C166819.33 107070.00 166808.67 107070.00 166798.00 107070.00C166798.00 107059.33 166798.00 107048.67 166798.00 107038.00C166787.33 107038.00 166776.67 107038.00 166766.00 107038.00C166755.33 107048.67 166744.67 107059.33 166734.00 107070.00C166734.00 107091.33 166734.00 107112.67 166734.00 107134.00C166712.33 107144.67 166690.67 107155.33 166669.00 107166.00C166669.00 107177.00 166669.00 107188.00 166669.00 107199.00C166647.67 107220.33 166626.33 107241.67 166605.00 107263.00C166582.94 107317.89 166561.72 107373.14 166539.11 107427.80C166529.07 107447.87 166519.03 107467.93 166509.00 107488.00C166508.89 107498.82 166509.21 107509.64 166508.84 107520.46C166497.90 107552.64 166486.95 107584.82 166476.00 107617.00C166454.67 107617.00 166433.33 107617.00 166412.00 107617.00C166412.00 107638.33 166412.00 107659.67 166412.00 107681.00C166401.33 107702.33 166390.67 107723.67 166380.00 107745.00C166358.67 107755.67 166337.33 107766.33 166316.00 107777.00C166305.00 107755.67 166294.00 107734.33 166283.00 107713.00C166272.33 107713.00 166261.67 107713.00 166251.00 107713.00C166261.67 107691.67 166272.33 107670.33 166283.00 107649.00C166272.33 107627.33 166261.67 107605.67 166251.00 107584.00C166240.02 107607.02 166227.85 107629.51 166217.69 107652.91C166206.71 107684.84 166197.00 107717.25 166185.11 107748.84C166175.08 107769.23 166165.03 107789.61 166155.00 107810.00C166144.33 107810.00 166133.67 107810.00 166123.00 107810.00C166101.33 107852.67 166079.67 107895.33 166058.00 107938.00C166015.34 107981.01 165972.90 108024.24 165930.00 108067.00C165919.33 108067.00 165908.67 108067.00 165898.00 108067.00C165898.00 108088.33 165898.00 108109.67 165898.00 108131.00C165887.00 108131.00 165876.00 108131.00 165865.00 108131.00C165876.00 108141.67 165887.00 108152.33 165898.00 108163.00C165908.67 108163.00 165919.33 108163.00 165930.00 108163.00C165930.00 108195.33 165930.00 108227.67 165930.00 108260.00C165940.67 108260.00 165951.33 108260.00 165962.00 108260.00C165962.00 108292.00 165962.00 108324.00 165962.00 108356.00C165940.51 108355.90 165919.03 108356.20 165897.54 108355.85C165865.36 108345.23 165833.18 108334.62 165801.00 108324.00C165790.33 108313.33 165779.67 108302.67 165769.00 108292.00C165769.00 108302.67 165769.00 108313.33 165769.00 108324.00C165747.67 108324.00 165726.33 108324.00 165705.00 108324.00C165672.67 108302.67 165640.33 108281.33 165608.00 108260.00C165597.33 108260.00 165586.67 108260.00 165576.00 108260.00C165565.33 108270.67 165554.67 108281.33 165544.00 108292.00C165544.00 108302.67 165544.00 108313.33 165544.00 108324.00C165533.33 108313.33 165522.67 108302.67 165512.00 108292.00C165501.33 108302.67 165490.67 108313.33 165480.00 108324.00C165458.33 108324.00 165436.67 108324.00 165415.00 108324.00C165393.67 108367.00 165372.33 108410.00 165351.00 108453.00C165350.85 108463.81 165351.29 108474.63 165350.78 108485.43C165340.20 108506.80 165329.30 108528.01 165318.91 108549.47C165308.27 108602.98 165297.64 108656.49 165287.00 108710.00C165265.33 108752.67 165243.67 108795.33 165222.00 108838.00C165222.00 108859.67 165222.00 108881.33 165222.00 108903.00C165243.92 108924.08 165265.59 108945.40 165287.00 108967.00C165276.33 108988.33 165265.67 109009.67 165255.00 109031.00C165255.00 109063.33 165255.00 109095.67 165255.00 109128.00C165233.33 109138.67 165211.67 109149.33 165190.00 109160.00C165168.67 109213.67 165147.33 109267.33 165126.00 109321.00C165104.67 109331.67 165083.33 109342.33 165062.00 109353.00C165104.67 109374.33 165147.33 109395.67 165190.00 109417.00C165233.00 109417.00 165276.00 109417.00 165319.00 109417.00C165329.67 109427.67 165340.33 109438.33 165351.00 109449.00C165372.33 109438.33 165393.67 109427.67 165415.00 109417.00C165436.67 109427.67 165458.33 109438.33 165480.00 109449.00C165480.00 109470.67 165480.00 109492.33 165480.00 109514.00C165490.67 109524.67 165501.33 109535.33 165512.00 109546.00C165512.00 109567.33 165512.00 109588.67 165512.00 109610.00C165522.67 109620.67 165533.33 109631.33 165544.00 109642.00C165533.33 109652.67 165522.67 109663.33 165512.00 109674.00C165512.00 109685.00 165512.00 109696.00 165512.00 109707.00C165490.67 109707.00 165469.33 109707.00 165448.00 109707.00C165448.00 109717.67 165448.00 109728.33 165448.00 109739.00C165437.00 109749.67 165426.00 109760.33 165415.00 109771.00C165415.00 109803.00 165415.00 109835.00 165415.00 109867.00C165404.33 109888.67 165393.67 109910.33 165383.00 109932.00C165361.67 109932.00 165340.33 109932.00 165319.00 109932.00C165308.33 109910.33 165297.67 109888.67 165287.00 109867.00C165265.33 109888.67 165243.67 109910.33 165222.00 109932.00C165211.33 109932.00 165200.67 109932.00 165190.00 109932.00C165179.33 109942.67 165168.67 109953.33 165158.00 109964.00C165136.67 109942.33 165115.33 109920.67 165094.00 109899.00C165083.33 109899.00 165072.67 109899.00 165062.00 109899.00C165062.00 109888.33 165062.00 109877.67 165062.00 109867.00C165029.67 109845.67 164997.33 109824.33 164965.00 109803.00C164954.33 109813.67 164943.67 109824.33 164933.00 109835.00C164901.00 109845.67 164869.00 109856.33 164837.00 109867.00C164826.00 109867.00 164815.00 109867.00 164804.00 109867.00C164793.33 109877.67 164782.67 109888.33 164772.00 109899.00C164761.19 109898.85 164750.37 109899.29 164739.57 109898.78C164718.38 109888.19 164697.19 109877.59 164676.00 109867.00C164643.67 109867.00 164611.33 109867.00 164579.00 109867.00C164568.33 109856.33 164557.67 109845.67 164547.00 109835.00C164547.00 109824.33 164547.00 109813.67 164547.00 109803.00C164515.00 109803.00 164483.00 109803.00 164451.00 109803.00C164429.33 109813.67 164407.67 109824.33 164386.00 109835.00C164386.00 109867.33 164386.00 109899.67 164386.00 109932.00C164364.30 109975.84 164341.88 110019.33 164320.65 110063.39C164299.77 110115.93 164278.88 110168.46 164258.00 110221.00C164225.67 110253.00 164193.33 110285.00 164161.00 110317.00C164150.33 110317.00 164139.67 110317.00 164129.00 110317.00C164118.33 110360.00 164107.67 110403.00 164097.00 110446.00C164097.00 110467.33 164097.00 110488.67 164097.00 110510.00C164065.00 110574.33 164033.00 110638.67 164001.00 110703.00C164001.00 110735.33 164001.00 110767.67 164001.00 110800.00C164022.33 110800.00 164043.67 110800.00 164065.00 110800.00C164064.96 110817.06 164065.93 110834.34 164061.84 110851.07C164052.23 110909.05 164042.61 110967.02 164033.00 111025.00C164011.33 111057.00 163989.67 111089.00 163968.00 111121.00C163979.00 111174.67 163990.00 111228.33 164001.00 111282.00C164033.00 111292.67 164065.00 111303.33 164097.00 111314.00C164097.00 111335.67 164097.00 111357.33 164097.00 111379.00C164075.67 111400.33 164054.33 111421.67 164033.00 111443.00C164043.67 111475.00 164054.33 111507.00 164065.00 111539.00C164054.33 111549.67 164043.67 111560.33 164033.00 111571.00C164022.33 111571.00 164011.67 111571.00 164001.00 111571.00C164001.00 111592.67 164001.00 111614.33 164001.00 111636.00C164011.67 111646.67 164022.33 111657.33 164033.00 111668.00C164033.00 111689.33 164033.00 111710.67 164033.00 111732.00C164065.00 111753.67 164097.00 111775.33 164129.00 111797.00C164086.33 111807.67 164043.67 111818.33 164001.00 111829.00C163979.33 111861.00 163957.67 111893.00 163936.00 111925.00C163925.33 111925.00 163914.67 111925.00 163904.00 111925.00C163904.00 111946.33 163904.00 111967.67 163904.00 111989.00C163882.67 111989.00 163861.33 111989.00 163840.00 111989.00C163840.00 112010.67 163840.00 112032.33 163840.00 112054.00C163861.33 112064.67 163882.67 112075.33 163904.00 112086.00C163882.67 112107.33 163861.33 112128.67 163840.00 112150.00C163850.67 112160.67 163861.33 112171.33 163872.00 112182.00C163872.00 112225.00 163872.00 112268.00 163872.00 112311.00C163829.00 112332.33 163786.00 112353.67 163743.00 112375.00C163775.43 112396.81 163807.99 112418.41 163840.34 112440.34C163850.89 112450.89 163861.45 112461.45 163872.00 112472.00C163904.00 112461.33 163936.00 112450.67 163968.00 112440.00C163989.67 112450.67 164011.33 112461.33 164033.00 112472.00C164054.33 112493.33 164075.67 112514.67 164097.00 112536.00C164150.67 112546.67 164204.33 112557.33 164258.00 112568.00C164258.00 112589.33 164258.00 112610.67 164258.00 112632.00C164279.33 112664.33 164300.67 112696.67 164322.00 112729.00C164332.67 112729.00 164343.33 112729.00 164354.00 112729.00C164354.00 112750.33 164354.00 112771.67 164354.00 112793.00C164375.67 112793.00 164397.33 112793.00 164419.00 112793.00C164419.00 112825.33 164419.00 112857.67 164419.00 112890.00C164408.00 112911.33 164397.00 112932.67 164386.00 112954.00C164407.92 112975.08 164429.59 112996.40 164451.00 113018.00C164472.33 113071.67 164493.67 113125.33 164515.00 113179.00C164547.33 113200.33 164579.67 113221.67 164612.00 113243.00C164633.33 113221.67 164654.67 113200.33 164676.00 113179.00C164708.00 113179.00 164740.00 113179.00 164772.00 113179.00C164761.33 113189.67 164750.67 113200.33 164740.00 113211.00C164750.67 113232.67 164761.33 113254.33 164772.00 113276.00C164761.33 113276.00 164750.67 113276.00 164740.00 113276.00C164740.00 113308.00 164740.00 113340.00 164740.00 113372.00C164761.33 113382.67 164782.67 113393.33 164804.00 113404.00C164815.00 113425.33 164826.00 113446.67 164837.00 113468.00C164858.33 113446.67 164879.67 113425.33 164901.00 113404.00C164911.67 113404.00 164922.33 113404.00 164933.00 113404.00C164954.84 113437.68 164977.77 113470.69 164998.89 113504.80C165008.93 113524.87 165018.97 113544.93 165029.00 113565.00C165040.00 113532.67 165051.00 113500.33 165062.00 113468.00C165062.00 113446.67 165062.00 113425.33 165062.00 113404.00C165072.89 113415.62 165085.41 113425.88 165095.20 113438.43C165105.47 113459.29 165115.73 113480.15 165126.00 113501.00C165147.33 113511.67 165168.67 113522.33 165190.00 113533.00C165179.33 113554.33 165168.67 113575.67 165158.00 113597.00C165169.62 113607.89 165179.88 113620.41 165192.43 113630.20C165213.29 113640.47 165234.15 113650.73 165255.00 113661.00C165265.67 113672.00 165276.33 113683.00 165287.00 113694.00C165287.00 113726.00 165287.00 113758.00 165287.00 113790.00C165297.67 113800.67 165308.33 113811.33 165319.00 113822.00C165329.67 113822.00 165340.33 113822.00 165351.00 113822.00C165361.67 113854.33 165372.33 113886.67 165383.00 113919.00C165393.67 113929.67 165404.33 113940.33 165415.00 113951.00C165447.33 113940.33 165479.67 113929.67 165512.00 113919.00C165522.67 113940.33 165533.33 113961.67 165544.00 113983.00C165576.00 113983.00 165608.00 113983.00 165640.00 113983.00C165661.67 114015.00 165683.33 114047.00 165705.00 114079.00C165694.33 114100.67 165683.67 114122.33 165673.00 114144.00C165683.67 114165.33 165694.33 114186.67 165705.00 114208.00C165694.33 114229.33 165683.67 114250.67 165673.00 114272.00C165694.33 114293.67 165715.67 114315.33 165737.00 114337.00C165747.67 114358.33 165758.33 114379.67 165769.00 114401.00C165758.33 114422.33 165747.67 114443.67 165737.00 114465.00C165747.67 114454.33 165758.33 114443.67 165769.00 114433.00C165790.33 114443.67 165811.67 114454.33 165833.00 114465.00C165843.67 114486.67 165854.33 114508.33 165865.00 114530.00C165865.00 114540.67 165865.00 114551.33 165865.00 114562.00C165811.67 114637.00 165758.33 114712.00 165705.00 114787.00C165619.33 114829.67 165533.67 114872.33 165448.00 114915.00C165448.00 114925.67 165448.00 114936.33 165448.00 114947.00C165460.56 114959.01 165471.30 114973.12 165485.30 114983.52C165516.85 115004.22 165547.77 115025.96 165579.80 115045.89C165599.86 115055.93 165619.93 115065.97 165640.00 115076.00C165640.00 115119.00 165640.00 115162.00 165640.00 115205.00C165576.05 115172.57 165512.22 115139.89 165448.00 115108.00C165437.00 115108.00 165426.00 115108.00 165415.00 115108.00C165383.00 115086.67 165351.00 115065.33 165319.00 115044.00C165319.00 115033.33 165319.00 115022.67 165319.00 115012.00C165297.67 115022.67 165276.33 115033.33 165255.00 115044.00C165244.00 115022.67 165233.00 115001.33 165222.00 114980.00C165211.33 114980.00 165200.67 114980.00 165190.00 114980.00C165168.67 114958.33 165147.33 114936.67 165126.00 114915.00C165104.67 114915.00 165083.33 114915.00 165062.00 114915.00C165051.00 114925.67 165040.00 114936.33 165029.00 114947.00C165007.67 114936.33 164986.33 114925.67 164965.00 114915.00C164954.33 114925.67 164943.67 114936.33 164933.00 114947.00C164911.67 114947.00 164890.33 114947.00 164869.00 114947.00C164869.00 114936.33 164869.00 114925.67 164869.00 114915.00C164804.67 114915.00 164740.33 114915.00 164676.00 114915.00C164633.00 114904.33 164590.00 114893.67 164547.00 114883.00C164536.33 114904.33 164525.67 114925.67 164515.00 114947.00C164483.00 114915.00 164451.00 114883.00 164419.00 114851.00C164386.67 114851.00 164354.33 114851.00 164322.00 114851.00C164300.67 114819.00 164279.33 114787.00 164258.00 114755.00C164247.33 114755.00 164236.67 114755.00 164226.00 114755.00C164161.84 114797.16 164097.92 114839.71 164034.00 114882.23C164021.29 114884.00 164008.41 114882.51 163995.61 114883.00C163975.74 114883.00 163955.87 114883.00 163936.00 114883.00C163936.00 114915.33 163936.00 114947.67 163936.00 114980.00C163893.33 114980.00 163850.67 114980.00 163808.00 114980.00C163808.00 115001.33 163808.00 115022.67 163808.00 115044.00C163797.33 115065.33 163786.67 115086.67 163776.00 115108.00C163786.67 115118.67 163797.33 115129.33 163808.00 115140.00C163786.33 115151.00 163764.67 115162.00 163743.00 115173.00C163743.00 115194.33 163743.00 115215.67 163743.00 115237.00C163711.00 115247.67 163679.00 115258.33 163647.00 115269.00C163636.18 115290.43 163625.70 115312.03 163614.66 115333.35C163604.11 115344.23 163593.55 115355.12 163583.00 115366.00C163561.33 115355.00 163539.67 115344.00 163518.00 115333.00C163507.33 115344.00 163496.67 115355.00 163486.00 115366.00C163475.33 115355.00 163464.67 115344.00 163454.00 115333.00C163421.67 115354.67 163389.33 115376.33 163357.00 115398.00C163346.33 115387.33 163335.67 115376.67 163325.00 115366.00C163325.00 115344.33 163325.00 115322.67 163325.00 115301.00C163282.33 115301.00 163239.67 115301.00 163197.00 115301.00C163186.33 115311.67 163175.67 115322.33 163165.00 115333.00C163143.33 115322.33 163121.67 115311.67 163100.00 115301.00C163078.67 115301.00 163057.33 115301.00 163036.00 115301.00C163046.67 115269.00 163057.33 115237.00 163068.00 115205.00C163057.33 115205.00 163046.67 115205.00 163036.00 115205.00C163036.00 115194.33 163036.00 115183.67 163036.00 115173.00C163025.19 115173.15 163014.37 115172.71 163003.57 115173.22C162982.38 115183.81 162961.19 115194.41 162940.00 115205.00C162950.67 115183.33 162961.33 115161.67 162972.00 115140.00C162961.33 115118.67 162950.67 115097.33 162940.00 115076.00C162929.00 115076.00 162918.00 115076.00 162907.00 115076.00C162896.33 115065.33 162885.67 115054.67 162875.00 115044.00C162853.67 115065.33 162832.33 115086.67 162811.00 115108.00C162800.33 115097.33 162789.67 115086.67 162779.00 115076.00C162768.33 115076.00 162757.67 115076.00 162747.00 115076.00C162714.54 115119.10 162682.22 115162.31 162649.66 115205.34C162639.11 115215.89 162628.55 115226.45 162618.00 115237.00C162607.33 115226.33 162596.67 115215.67 162586.00 115205.00C162575.33 115205.00 162564.67 115205.00 162554.00 115205.00C162543.00 115183.33 162532.00 115161.67 162521.00 115140.00C162510.33 115161.67 162499.67 115183.33 162489.00 115205.00C162478.33 115205.00 162467.67 115205.00 162457.00 115205.00C162446.33 115215.67 162435.67 115226.33 162425.00 115237.00C162628.67 115430.00 162832.33 115623.00 163036.00 115816.00C163046.67 115891.00 163057.33 115966.00 163068.00 116041.00C163025.33 116051.67 162982.67 116062.33 162940.00 116073.00C162929.00 116062.33 162918.00 116051.67 162907.00 116041.00C162875.00 116030.33 162843.00 116019.67 162811.00 116009.00C162768.00 116009.00 162725.00 116009.00 162682.00 116009.00C162671.33 115998.00 162660.67 115987.00 162650.00 115976.00C162639.33 115976.00 162628.67 115976.00 162618.00 115976.00C162618.00 115954.67 162618.00 115933.33 162618.00 115912.00C162596.67 115901.33 162575.33 115890.67 162554.00 115880.00C162532.33 115880.00 162510.67 115880.00 162489.00 115880.00C162489.00 115858.67 162489.00 115837.33 162489.00 115816.00C162478.33 115826.67 162467.67 115837.33 162457.00 115848.00C162446.33 115837.33 162435.67 115826.67 162425.00 115816.00C162425.00 115826.67 162425.00 115837.33 162425.00 115848.00C162414.33 115848.00 162403.67 115848.00 162393.00 115848.00C162360.94 115880.28 162328.39 115912.06 162296.00 115944.00C162285.33 115944.00 162274.67 115944.00 162264.00 115944.00C162253.33 115933.33 162242.67 115922.67 162232.00 115912.00C162221.33 115912.00 162210.67 115912.00 162200.00 115912.00C162200.00 115955.00 162200.00 115998.00 162200.00 116041.00C162189.33 116041.00 162178.67 116041.00 162168.00 116041.00C162156.38 116030.09 162146.09 116017.61 162133.57 116007.77C162112.72 115997.16 162091.85 115986.59 162071.00 115976.00C162060.33 115987.00 162049.67 115998.00 162039.00 116009.00C162028.33 116041.00 162017.67 116073.00 162007.00 116105.00C161975.00 116105.00 161943.00 116105.00 161911.00 116105.00C161911.00 116083.67 161911.00 116062.33 161911.00 116041.00C161889.33 116041.00 161867.67 116041.00 161846.00 116041.00C161835.33 116073.00 161824.67 116105.00 161814.00 116137.00C161803.33 116137.00 161792.67 116137.00 161782.00 116137.00C161792.67 116115.67 161803.33 116094.33 161814.00 116073.00C161782.00 116083.67 161750.00 116094.33 161718.00 116105.00C161718.00 116126.33 161718.00 116147.67 161718.00 116169.00C161696.33 116169.00 161674.67 116169.00 161653.00 116169.00C161610.33 116190.67 161567.67 116212.33 161525.00 116234.00C161525.00 116255.33 161525.00 116276.67 161525.00 116298.00C161514.33 116308.67 161503.67 116319.33 161493.00 116330.00C161493.00 116340.67 161493.00 116351.33 161493.00 116362.00C161503.67 116372.67 161514.33 116383.33 161525.00 116394.00C161525.00 116405.00 161525.00 116416.00 161525.00 116427.00C161514.33 116427.00 161503.67 116427.00 161493.00 116427.00C161493.00 116448.33 161493.00 116469.67 161493.00 116491.00C161503.67 116501.67 161514.33 116512.33 161525.00 116523.00C161470.69 116566.79 161415.83 116609.93 161361.86 116654.13C161319.65 116696.16 161277.95 116738.71 161235.00 116780.00C161235.00 116823.00 161235.00 116866.00 161235.00 116909.00C161246.00 116919.67 161257.00 116930.33 161268.00 116941.00C161268.00 117005.33 161268.00 117069.67 161268.00 117134.00C161246.33 117134.00 161224.67 117134.00 161203.00 117134.00C161203.00 117177.00 161203.00 117220.00 161203.00 117263.00C161235.33 117263.00 161267.67 117263.00 161300.00 117263.00C161256.90 117284.13 161213.90 117305.46 161171.00 117327.00C161149.67 117359.00 161128.33 117391.00 161107.00 117423.00C161117.67 117433.67 161128.33 117444.33 161139.00 117455.00C161279.17 117465.94 161419.30 117477.39 161559.49 117488.00C161601.82 117488.06 161644.14 117487.87 161686.47 117488.09C161739.81 117498.70 161793.11 117509.55 161846.48 117520.00C161856.99 117520.00 161867.49 117520.00 161878.00 117520.00C161877.55 117544.05 161878.98 117568.18 161877.10 117592.18C161866.73 117686.28 161856.27 117780.37 161846.00 117874.48C161846.00 117906.32 161846.00 117938.16 161846.00 117970.00C161835.33 117970.00 161824.67 117970.00 161814.00 117970.00C161803.33 118055.67 161792.67 118141.33 161782.00 118227.00C161792.67 118237.67 161803.33 118248.33 161814.00 118259.00C161814.00 118269.67 161814.00 118280.33 161814.00 118291.00C161792.92 118312.92 161771.60 118334.59 161750.00 118356.00C161739.33 118356.00 161728.67 118356.00 161718.00 118356.00C161718.00 118366.67 161718.00 118377.33 161718.00 118388.00C161739.33 118398.67 161760.67 118409.33 161782.00 118420.00C161771.33 118430.67 161760.67 118441.33 161750.00 118452.00C161771.33 118441.33 161792.67 118430.67 161814.00 118420.00C161814.00 118430.67 161814.00 118441.33 161814.00 118452.00C161824.67 118452.00 161835.33 118452.00 161846.00 118452.00C161835.33 118462.67 161824.67 118473.33 161814.00 118484.00C161835.33 118484.00 161856.67 118484.00 161878.00 118484.00C161899.67 118505.67 161921.33 118527.33 161943.00 118549.00C161964.33 118549.00 161985.67 118549.00 162007.00 118549.00C162017.67 118559.67 162028.33 118570.33 162039.00 118581.00C162092.67 118591.67 162146.33 118602.33 162200.00 118613.00C162210.67 118623.67 162221.33 118634.33 162232.00 118645.00C162242.64 118709.50 162253.49 118773.96 162264.00 118838.48C162264.00 118913.32 162264.00 118988.16 162264.00 119063.00C162285.67 119084.33 162307.33 119105.67 162329.00 119127.00C162318.00 119138.00 162307.00 119149.00 162296.00 119160.00C162317.67 119170.67 162339.33 119181.33 162361.00 119192.00C162361.00 119213.33 162361.00 119234.67 162361.00 119256.00C162328.91 119288.58 162295.44 119319.77 162264.00 119353.00C162253.33 119342.00 162242.67 119331.00 162232.00 119320.00C162220.38 119331.22 162210.18 119344.09 162197.60 119354.21C162177.07 119364.48 162156.53 119374.73 162136.00 119385.00C161910.67 119385.00 161685.33 119385.00 161460.00 119385.00C161438.67 119352.67 161417.33 119320.33 161396.00 119288.00C161396.00 119277.33 161396.00 119266.67 161396.00 119256.00C161385.10 119244.39 161372.63 119234.11 161362.79 119221.60C161352.53 119201.07 161342.27 119180.53 161332.00 119160.00C161310.67 119170.67 161289.33 119181.33 161268.00 119192.00C161139.33 119192.00 161010.67 119192.00 160882.00 119192.00C160860.33 119224.00 160838.67 119256.00 160817.00 119288.00C160828.00 119309.67 160839.00 119331.33 160850.00 119353.00C160839.00 119374.33 160828.00 119395.67 160817.00 119417.00C160828.00 119417.00 160839.00 119417.00 160850.00 119417.00C160839.00 119427.67 160828.00 119438.33 160817.00 119449.00C160828.00 119459.67 160839.00 119470.33 160850.00 119481.00C160860.67 119481.00 160871.33 119481.00 160882.00 119481.00C160903.33 119513.33 160924.67 119545.67 160946.00 119578.00C160956.67 119567.00 160967.33 119556.00 160978.00 119545.00C160978.00 119513.00 160978.00 119481.00 160978.00 119449.00C160999.33 119470.33 161020.67 119491.67 161042.00 119513.00C161053.15 119512.90 161064.31 119513.21 161075.46 119512.85C161107.31 119502.23 161139.15 119491.62 161171.00 119481.00C161181.89 119492.62 161194.41 119502.88 161204.20 119515.43C161214.47 119536.29 161224.73 119557.15 161235.00 119578.00C161235.00 119588.67 161235.00 119599.33 161235.00 119610.00C161256.67 119610.00 161278.33 119610.00 161300.00 119610.00C161321.33 119620.67 161342.67 119631.33 161364.00 119642.00C161374.82 119663.43 161385.29 119685.03 161396.34 119706.34C161406.89 119716.89 161417.45 119727.45 161428.00 119738.00C161428.00 119759.67 161428.00 119781.33 161428.00 119803.00C161438.67 119803.00 161449.33 119803.00 161460.00 119803.00C161471.00 119813.67 161482.00 119824.33 161493.00 119835.00C161525.00 119845.67 161557.00 119856.33 161589.00 119867.00C161589.00 119877.67 161589.00 119888.33 161589.00 119899.00C161610.33 119899.00 161631.67 119899.00 161653.00 119899.00C161653.00 119909.67 161653.00 119920.33 161653.00 119931.00C161664.00 119952.67 161675.00 119974.33 161686.00 119996.00C161696.67 119996.00 161707.33 119996.00 161718.00 119996.00C161718.00 120006.67 161718.00 120017.33 161718.00 120028.00C161728.67 120038.67 161739.33 120049.33 161750.00 120060.00C161782.00 120060.00 161814.00 120060.00 161846.00 120060.00C161856.67 120049.33 161867.33 120038.67 161878.00 120028.00C161878.00 120049.33 161878.00 120070.67 161878.00 120092.00C161867.33 120092.00 161856.67 120092.00 161846.00 120092.00C161803.33 120124.33 161760.67 120156.67 161718.00 120189.00C161696.33 120189.00 161674.67 120189.00 161653.00 120189.00C161653.00 120210.33 161653.00 120231.67 161653.00 120253.00C161642.33 120263.67 161631.67 120274.33 161621.00 120285.00C161642.67 120306.33 161664.33 120327.67 161686.00 120349.00C161675.00 120370.67 161664.00 120392.33 161653.00 120414.00C161664.00 120424.67 161675.00 120435.33 161686.00 120446.00C161696.67 120446.00 161707.33 120446.00 161718.00 120446.00C161718.00 120467.33 161718.00 120488.67 161718.00 120510.00C161750.00 120510.00 161782.00 120510.00 161814.00 120510.00C161824.67 120531.33 161835.33 120552.67 161846.00 120574.00C161856.67 120563.33 161867.33 120552.67 161878.00 120542.00C161889.00 120542.00 161900.00 120542.00 161911.00 120542.00C161911.00 120563.67 161911.00 120585.33 161911.00 120607.00C161921.67 120596.00 161932.33 120585.00 161943.00 120574.00C161943.00 120606.33 161943.00 120638.67 161943.00 120671.00C161975.00 120671.00 162007.00 120671.00 162039.00 120671.00C162060.41 120692.60 162082.08 120713.92 162104.00 120735.00C162104.00 120745.67 162104.00 120756.33 162104.00 120767.00C162114.67 120767.00 162125.33 120767.00 162136.00 120767.00C162146.67 120777.67 162157.33 120788.33 162168.00 120799.00C162168.00 120820.67 162168.00 120842.33 162168.00 120864.00C162189.33 120864.00 162210.67 120864.00 162232.00 120864.00C162221.33 120885.33 162210.67 120906.67 162200.00 120928.00C162221.33 120949.33 162242.67 120970.67 162264.00 120992.00C162264.00 121013.67 162264.00 121035.33 162264.00 121057.00C162274.67 121057.00 162285.33 121057.00 162296.00 121057.00C162296.00 121067.67 162296.00 121078.33 162296.00 121089.00C162307.00 121089.00 162318.00 121089.00 162329.00 121089.00C162318.00 121099.67 162307.00 121110.33 162296.00 121121.00C162307.00 121131.67 162318.00 121142.33 162329.00 121153.00C162329.00 121174.33 162329.00 121195.67 162329.00 121217.00C162318.00 121228.00 162307.00 121239.00 162296.00 121250.00C162285.33 121250.00 162274.67 121250.00 162264.00 121250.00C162264.00 121271.33 162264.00 121292.67 162264.00 121314.00C162274.67 121324.67 162285.33 121335.33 162296.00 121346.00C162285.33 121356.67 162274.67 121367.33 162264.00 121378.00C162274.81 121378.14 162285.63 121377.71 162296.43 121378.21C162317.95 121388.81 162339.48 121399.40 162361.00 121410.00C162361.00 121442.33 162361.00 121474.67 162361.00 121507.00C162339.33 121507.00 162317.67 121507.00 162296.00 121507.00C162274.67 121517.67 162253.33 121528.33 162232.00 121539.00C162242.67 121549.67 162253.33 121560.33 162264.00 121571.00C162285.67 121571.00 162307.33 121571.00 162329.00 121571.00C162318.00 121581.67 162307.00 121592.33 162296.00 121603.00C162296.00 121613.67 162296.00 121624.33 162296.00 121635.00C162328.33 121635.00 162360.67 121635.00 162393.00 121635.00C162403.67 121646.00 162414.33 121657.00 162425.00 121668.00C162414.33 121689.33 162403.67 121710.67 162393.00 121732.00C162382.33 121732.00 162371.67 121732.00 162361.00 121732.00C162350.33 121742.67 162339.67 121753.33 162329.00 121764.00C162318.00 121764.00 162307.00 121764.00 162296.00 121764.00C162285.33 121796.00 162274.67 121828.00 162264.00 121860.00C162264.00 121881.67 162264.00 121903.33 162264.00 121925.00C162285.67 121935.67 162307.33 121946.33 162329.00 121957.00C162318.00 121967.67 162307.00 121978.33 162296.00 121989.00C162296.00 121999.67 162296.00 122010.33 162296.00 122021.00C162253.33 122053.33 162210.67 122085.67 162168.00 122118.00C162168.00 122150.00 162168.00 122182.00 162168.00 122214.00C162157.33 122224.67 162146.67 122235.33 162136.00 122246.00C162136.00 122256.67 162136.00 122267.33 162136.00 122278.00C162146.67 122289.00 162157.33 122300.00 162168.00 122311.00C162168.00 122332.33 162168.00 122353.67 162168.00 122375.00C162189.33 122385.67 162210.67 122396.33 162232.00 122407.00C162221.33 122417.67 162210.67 122428.33 162200.00 122439.00C162200.00 122449.67 162200.00 122460.33 162200.00 122471.00C162168.00 122514.00 162136.00 122557.00 162104.00 122600.00C162104.00 122610.67 162104.00 122621.33 162104.00 122632.00C162050.33 122632.00 161996.67 122632.00 161943.00 122632.00C161878.62 122610.82 161814.28 122589.49 161750.00 122568.00C161750.00 122589.33 161750.00 122610.67 161750.00 122632.00C161760.67 122653.33 161771.33 122674.67 161782.00 122696.00C161771.33 122728.33 161760.67 122760.67 161750.00 122793.00C161771.54 122835.90 161792.87 122878.90 161814.00 122922.00C161814.00 122932.67 161814.00 122943.33 161814.00 122954.00C161782.00 122964.67 161750.00 122975.33 161718.00 122986.00C161718.00 122996.67 161718.00 123007.33 161718.00 123018.00C161685.67 123018.00 161653.33 123018.00 161621.00 123018.00C161621.00 123039.33 161621.00 123060.67 161621.00 123082.00C161599.67 123082.00 161578.33 123082.00 161557.00 123082.00C161546.33 123092.67 161535.67 123103.33 161525.00 123114.00C161514.33 123114.00 161503.67 123114.00 161493.00 123114.00C161482.00 123167.67 161471.00 123221.33 161460.00 123275.00C161449.33 123285.67 161438.67 123296.33 161428.00 123307.00C161406.67 123307.00 161385.33 123307.00 161364.00 123307.00C161353.33 123328.67 161342.67 123350.33 161332.00 123372.00C161310.67 123382.67 161289.33 123393.33 161268.00 123404.00C161246.33 123404.00 161224.67 123404.00 161203.00 123404.00C161192.33 123414.67 161181.67 123425.33 161171.00 123436.00C161160.33 123468.00 161149.67 123500.00 161139.00 123532.00C161149.67 123543.00 161160.33 123554.00 161171.00 123565.00C161160.33 123575.67 161149.67 123586.33 161139.00 123597.00C161139.00 123629.00 161139.00 123661.00 161139.00 123693.00C161128.33 123714.67 161117.67 123736.33 161107.00 123758.00C161117.67 123768.67 161128.33 123779.33 161139.00 123790.00C161117.67 123800.67 161096.33 123811.33 161075.00 123822.00C161075.00 123843.33 161075.00 123864.67 161075.00 123886.00C161096.33 123896.67 161117.67 123907.33 161139.00 123918.00C161149.67 123939.67 161160.33 123961.33 161171.00 123983.00C161160.33 123983.00 161149.67 123983.00 161139.00 123983.00C161139.00 123993.67 161139.00 124004.33 161139.00 124015.00C161160.33 124025.67 161181.67 124036.33 161203.00 124047.00C161192.05 124069.70 161179.79 124091.80 161169.71 124114.90C161159.47 124145.93 161149.24 124176.97 161139.00 124208.00C161128.33 124208.00 161117.67 124208.00 161107.00 124208.00C161117.67 124229.33 161128.33 124250.67 161139.00 124272.00C161139.00 124282.67 161139.00 124293.33 161139.00 124304.00C161128.33 124304.00 161117.67 124304.00 161107.00 124304.00C161107.00 124368.33 161107.00 124432.67 161107.00 124497.00C161074.67 124529.33 161042.33 124561.67 161010.00 124594.00C160999.33 124583.00 160988.67 124572.00 160978.00 124561.00C160946.00 124572.00 160914.00 124583.00 160882.00 124594.00C160882.00 124615.33 160882.00 124636.67 160882.00 124658.00C160860.33 124690.00 160838.67 124722.00 160817.00 124754.00C160806.33 124754.00 160795.67 124754.00 160785.00 124754.00C160774.33 124743.33 160763.67 124732.67 160753.00 124722.00C160731.67 124732.67 160710.33 124743.33 160689.00 124754.00C160646.00 124754.00 160603.00 124754.00 160560.00 124754.00C160549.33 124764.67 160538.67 124775.33 160528.00 124786.00C160517.33 124829.00 160506.67 124872.00 160496.00 124915.00C160485.33 124925.67 160474.67 124936.33 160464.00 124947.00C160474.67 124968.33 160485.33 124989.67 160496.00 125011.00C160496.00 125022.00 160496.00 125033.00 160496.00 125044.00C160506.67 125065.33 160517.33 125086.67 160528.00 125108.00C160506.67 125129.33 160485.33 125150.67 160464.00 125172.00C160464.00 125204.33 160464.00 125236.67 160464.00 125269.00C160442.59 125290.60 160420.92 125311.92 160399.00 125333.00C160398.90 125343.82 160399.20 125354.64 160398.85 125365.46C160388.24 125397.64 160377.62 125429.82 160367.00 125462.00C160356.33 125472.67 160345.67 125483.33 160335.00 125494.00C160335.00 125515.33 160335.00 125536.67 160335.00 125558.00C160324.33 125579.33 160313.67 125600.67 160303.00 125622.00C160313.67 125633.00 160324.33 125644.00 160335.00 125655.00C160313.67 125676.33 160292.33 125697.67 160271.00 125719.00C160281.67 125719.00 160292.33 125719.00 160303.00 125719.00C160292.10 125730.61 160279.63 125740.89 160269.79 125753.40C160259.53 125773.93 160249.27 125794.47 160239.00 125815.00C160228.00 125825.67 160217.00 125836.33 160206.00 125847.00C160205.90 125858.15 160206.21 125869.31 160205.85 125880.46C160195.25 125912.31 160184.62 125944.15 160174.00 125976.00C160142.00 125997.33 160110.00 126018.67 160078.00 126040.00C160067.33 126029.33 160056.67 126018.67 160046.00 126008.00C160035.33 126018.67 160024.67 126029.33 160014.00 126040.00C160014.00 126051.00 160014.00 126062.00 160014.00 126073.00C159467.33 126073.00 158920.67 126073.00 158374.00 126073.00C158374.00 126083.67 158374.00 126094.33 158374.00 126105.00C158363.33 126115.67 158352.67 126126.33 158342.00 126137.00C158342.00 126190.67 158342.00 126244.33 158342.00 126298.00C158331.00 126308.67 158320.00 126319.33 158309.00 126330.00C158298.33 126362.00 158287.67 126394.00 158277.00 126426.00C158287.67 126436.67 158298.33 126447.33 158309.00 126458.00C158298.33 126469.00 158287.67 126480.00 158277.00 126491.00C158245.00 126491.00 158213.00 126491.00 158181.00 126491.00C158181.00 126501.67 158181.00 126512.33 158181.00 126523.00C158169.38 126533.89 158159.12 126546.41 158146.57 126556.20C158125.71 126566.47 158104.85 126576.73 158084.00 126587.00C158062.67 126608.33 158041.33 126629.67 158020.00 126651.00C157998.67 126651.00 157977.33 126651.00 157956.00 126651.00C157966.67 126672.67 157977.33 126694.33 157988.00 126716.00C157966.67 126726.67 157945.33 126737.33 157924.00 126748.00C157923.89 126758.82 157924.21 126769.64 157923.84 126780.46C157912.90 126812.31 157901.95 126844.15 157891.00 126876.00C157912.67 126876.00 157934.33 126876.00 157956.00 126876.00C157956.12 126887.15 157955.76 126898.30 157956.18 126909.45C157977.44 126962.64 157998.73 127015.82 158020.00 127069.00C158073.67 127079.67 158127.33 127090.33 158181.00 127101.00C158181.00 127197.67 158181.00 127294.33 158181.00 127391.00C158170.33 127412.33 158159.67 127433.67 158149.00 127455.00C158149.00 127487.33 158149.00 127519.67 158149.00 127552.00C158138.33 127562.67 158127.67 127573.33 158117.00 127584.00C158127.67 127616.00 158138.33 127648.00 158149.00 127680.00C158149.00 127701.67 158149.00 127723.33 158149.00 127745.00C158127.33 127745.00 158105.67 127745.00 158084.00 127745.00C158073.33 127755.67 158062.67 127766.33 158052.00 127777.00C158052.00 127787.67 158052.00 127798.33 158052.00 127809.00C158030.67 127841.00 158009.33 127873.00 157988.00 127905.00C157988.00 127926.67 157988.00 127948.33 157988.00 127970.00C157966.67 127991.33 157945.33 128012.67 157924.00 128034.00C157924.00 128044.67 157924.00 128055.33 157924.00 128066.00C157934.67 128076.67 157945.33 128087.33 157956.00 128098.00C158009.67 128098.00 158063.33 128098.00 158117.00 128098.00C158106.00 128119.67 158095.00 128141.33 158084.00 128163.00C158095.00 128173.67 158106.00 128184.33 158117.00 128195.00C158117.00 128184.33 158117.00 128173.67 158117.00 128163.00C158127.67 128173.67 158138.33 128184.33 158149.00 128195.00C158127.59 128216.60 158105.92 128237.92 158084.00 128259.00C158073.33 128259.00 158062.67 128259.00 158052.00 128259.00C158062.67 128269.67 158073.33 128280.33 158084.00 128291.00C158062.67 128301.67 158041.33 128312.33 158020.00 128323.00C158009.33 128344.67 157998.67 128366.33 157988.00 128388.00C157977.33 128398.67 157966.67 128409.33 157956.00 128420.00C157956.00 128430.67 157956.00 128441.33 157956.00 128452.00C157934.59 128473.60 157912.92 128494.92 157891.00 128516.00C157902.00 128526.67 157913.00 128537.33 157924.00 128548.00C157913.00 128559.00 157902.00 128570.00 157891.00 128581.00C157880.33 128581.00 157869.67 128581.00 157859.00 128581.00C157869.67 128591.67 157880.33 128602.33 157891.00 128613.00C157902.00 128645.00 157913.00 128677.00 157924.00 128709.00C157913.00 128709.00 157902.00 128709.00 157891.00 128709.00C157891.00 128698.33 157891.00 128687.67 157891.00 128677.00C157869.67 128677.00 157848.33 128677.00 157827.00 128677.00C157827.00 128720.00 157827.00 128763.00 157827.00 128806.00C157816.33 128816.67 157805.67 128827.33 157795.00 128838.00C157805.67 128848.67 157816.33 128859.33 157827.00 128870.00C157816.33 128880.67 157805.67 128891.33 157795.00 128902.00C157773.67 128902.00 157752.33 128902.00 157731.00 128902.00C157720.33 128912.67 157709.67 128923.33 157699.00 128934.00C157656.00 128934.00 157613.00 128934.00 157570.00 128934.00C157580.67 128944.67 157591.33 128955.33 157602.00 128966.00C157580.67 129009.00 157559.33 129052.00 157538.00 129095.00C157559.33 129116.33 157580.67 129137.67 157602.00 129159.00C157580.40 129180.41 157559.08 129202.08 157538.00 129224.00C157516.33 129234.67 157494.67 129245.33 157473.00 129256.00C157462.33 129266.67 157451.67 129277.33 157441.00 129288.00C157451.67 129298.67 157462.33 129309.33 157473.00 129320.00C157451.67 129330.67 157430.33 129341.33 157409.00 129352.00C157409.00 129373.33 157409.00 129394.67 157409.00 129416.00C157398.33 129427.00 157387.67 129438.00 157377.00 129449.00C157387.67 129459.67 157398.33 129470.33 157409.00 129481.00C157398.33 129502.33 157387.67 129523.67 157377.00 129545.00C157377.00 129534.33 157377.00 129523.67 157377.00 129513.00C157366.33 129523.67 157355.67 129534.33 157345.00 129545.00C157345.00 129566.33 157345.00 129587.67 157345.00 129609.00C157312.67 129598.33 157280.33 129587.67 157248.00 129577.00C157237.33 129587.67 157226.67 129598.33 157216.00 129609.00C157184.00 129598.33 157152.00 129587.67 157120.00 129577.00C157098.33 129577.00 157076.67 129577.00 157055.00 129577.00C157044.33 129587.67 157033.67 129598.33 157023.00 129609.00C156991.00 129620.00 156959.00 129631.00 156927.00 129642.00C156894.67 129642.00 156862.33 129642.00 156830.00 129642.00C156819.33 129631.00 156808.67 129620.00 156798.00 129609.00C156766.06 129641.39 156734.28 129673.94 156702.00 129706.00C156702.00 129716.67 156702.00 129727.33 156702.00 129738.00C156691.33 129738.00 156680.67 129738.00 156670.00 129738.00C156659.00 129727.33 156648.00 129716.67 156637.00 129706.00C156615.57 129716.82 156593.97 129727.29 156572.66 129738.34C156551.44 129759.56 156530.22 129780.78 156509.00 129802.00C156509.00 129812.67 156509.00 129823.33 156509.00 129834.00C156530.33 129845.00 156551.67 129856.00 156573.00 129867.00C156573.00 129877.67 156573.00 129888.33 156573.00 129899.00C156594.33 129920.33 156615.67 129941.67 156637.00 129963.00C156648.00 129963.00 156659.00 129963.00 156670.00 129963.00C156680.67 129973.67 156691.33 129984.33 156702.00 129995.00C156723.33 129995.00 156744.67 129995.00 156766.00 129995.00C156798.12 130027.55 156829.88 130060.46 156863.00 130092.00C156863.00 130102.67 156863.00 130113.33 156863.00 130124.00C156841.33 130124.00 156819.67 130124.00 156798.00 130124.00C156787.33 130113.33 156776.67 130102.67 156766.00 130092.00C156766.00 130124.00 156766.00 130156.00 156766.00 130188.00C156734.00 130220.33 156702.00 130252.67 156670.00 130285.00C156670.00 130295.67 156670.00 130306.33 156670.00 130317.00C156648.33 130317.00 156626.67 130317.00 156605.00 130317.00C156605.00 130338.33 156605.00 130359.67 156605.00 130381.00C156594.33 130391.67 156583.67 130402.33 156573.00 130413.00C156573.00 130423.67 156573.00 130434.33 156573.00 130445.00C156530.33 130445.00 156487.67 130445.00 156445.00 130445.00C156445.00 130488.00 156445.00 130531.00 156445.00 130574.00C156434.00 130574.00 156423.00 130574.00 156412.00 130574.00C156401.18 130595.43 156390.71 130617.03 156379.66 130638.34C156358.17 130659.63 156336.97 130681.20 156316.00 130703.00C156316.00 130713.67 156316.00 130724.33 156316.00 130735.00C156305.33 130745.67 156294.67 130756.33 156284.00 130767.00C156284.00 130777.67 156284.00 130788.33 156284.00 130799.00C156273.33 130799.00 156262.67 130799.00 156252.00 130799.00C156273.33 130842.00 156294.67 130885.00 156316.00 130928.00C156305.33 130938.67 156294.67 130949.33 156284.00 130960.00C156284.00 130981.33 156284.00 131002.67 156284.00 131024.00C156294.67 131034.67 156305.33 131045.33 156316.00 131056.00C156316.00 131045.33 156316.00 131034.67 156316.00 131024.00C156326.67 131034.67 156337.33 131045.33 156348.00 131056.00C156337.33 131077.67 156326.67 131099.33 156316.00 131121.00C156326.67 131131.67 156337.33 131142.33 156348.00 131153.00C156326.67 131174.33 156305.33 131195.67 156284.00 131217.00C156262.57 131227.82 156240.97 131238.30 156219.65 131249.34C156197.59 131270.37 156176.01 131291.91 156155.00 131314.00C156155.00 131356.67 156155.00 131399.33 156155.00 131442.00C156144.33 131463.33 156133.67 131484.67 156123.00 131506.00C156123.00 131517.00 156123.00 131528.00 156123.00 131539.00C156133.67 131539.00 156144.33 131539.00 156155.00 131539.00C156165.67 131549.67 156176.33 131560.33 156187.00 131571.00C156165.67 131581.67 156144.33 131592.33 156123.00 131603.00C156133.67 131613.67 156144.33 131624.33 156155.00 131635.00C156144.33 131645.67 156133.67 131656.33 156123.00 131667.00C156133.67 131688.67 156144.33 131710.33 156155.00 131732.00C156133.67 131742.67 156112.33 131753.33 156091.00 131764.00C156091.00 131774.67 156091.00 131785.33 156091.00 131796.00C156069.67 131806.67 156048.33 131817.33 156027.00 131828.00C156037.81 131828.15 156048.63 131827.71 156059.43 131828.22C156080.62 131838.81 156101.81 131849.41 156123.00 131860.00C156101.67 131881.33 156080.33 131902.67 156059.00 131924.00C156037.33 131924.00 156015.67 131924.00 155994.00 131924.00C155983.33 131913.33 155972.67 131902.67 155962.00 131892.00C155951.33 131902.67 155940.67 131913.33 155930.00 131924.00C155930.00 131956.33 155930.00 131988.67 155930.00 132021.00C155919.33 132031.67 155908.67 132042.33 155898.00 132053.00C155898.00 132074.33 155898.00 132095.67 155898.00 132117.00C155887.33 132138.67 155876.67 132160.33 155866.00 132182.00C155898.00 132192.67 155930.00 132203.33 155962.00 132214.00C155962.00 132224.67 155962.00 132235.33 155962.00 132246.00C155983.67 132278.00 156005.33 132310.00 156027.00 132342.00C156015.06 132353.23 156004.45 132366.04 155991.60 132376.21C155971.07 132386.48 155950.53 132396.73 155930.00 132407.00C155919.33 132439.00 155908.67 132471.00 155898.00 132503.00C155876.67 132503.00 155855.33 132503.00 155834.00 132503.00C155823.00 132513.67 155812.00 132524.33 155801.00 132535.00C155801.00 132545.67 155801.00 132556.33 155801.00 132567.00C155790.33 132578.00 155779.67 132589.00 155769.00 132600.00C155769.00 132610.67 155769.00 132621.33 155769.00 132632.00C155737.00 132642.67 155705.00 132653.33 155673.00 132664.00C155673.00 132674.67 155673.00 132685.33 155673.00 132696.00C155683.67 132706.67 155694.33 132717.33 155705.00 132728.00C155672.90 132749.80 155640.67 132771.42 155608.65 132793.34C155593.78 132808.37 155577.00 132821.79 155565.12 132839.50C155536.74 132877.33 155508.37 132915.17 155480.00 132953.00C155490.67 132964.00 155501.33 132975.00 155512.00 132986.00C155522.67 132986.00 155533.33 132986.00 155544.00 132986.00C155522.67 133007.33 155501.33 133028.67 155480.00 133050.00C155490.67 133060.67 155501.33 133071.33 155512.00 133082.00C155544.33 133082.00 155576.67 133082.00 155609.00 133082.00C155609.00 133103.33 155609.00 133124.67 155609.00 133146.00C155619.67 133156.67 155630.33 133167.33 155641.00 133178.00C155651.67 133178.00 155662.33 133178.00 155673.00 133178.00C155683.67 133167.33 155694.33 133156.67 155705.00 133146.00C155737.00 133146.00 155769.00 133146.00 155801.00 133146.00C155822.67 133156.67 155844.33 133167.33 155866.00 133178.00C155876.67 133189.00 155887.33 133200.00 155898.00 133211.00C155887.33 133211.00 155876.67 133211.00 155866.00 133211.00C155876.67 133232.33 155887.33 133253.67 155898.00 133275.00C155908.67 133264.33 155919.33 133253.67 155930.00 133243.00C155940.67 133253.67 155951.33 133264.33 155962.00 133275.00C155962.00 133328.67 155962.00 133382.33 155962.00 133436.00C155897.67 133457.33 155833.33 133478.67 155769.00 133500.00C155769.00 133510.67 155769.00 133521.33 155769.00 133532.00C155726.33 133542.67 155683.67 133553.33 155641.00 133564.00C155608.67 133564.00 155576.33 133564.00 155544.00 133564.00C155512.00 133574.67 155480.00 133585.33 155448.00 133596.00C155437.33 133596.00 155426.67 133596.00 155416.00 133596.00C155405.33 133617.67 155394.67 133639.33 155384.00 133661.00C155276.67 133693.00 155169.33 133725.00 155062.00 133757.00C155051.33 133767.67 155040.67 133778.33 155030.00 133789.00C154918.37 133833.92 154806.46 133878.13 154695.03 133923.53C154624.35 133953.69 154553.68 133983.84 154483.00 134014.00C154483.00 134035.67 154483.00 134057.33 154483.00 134079.00C154461.67 134089.67 154440.33 134100.33 154419.00 134111.00C154397.67 134111.00 154376.33 134111.00 154355.00 134111.00C154332.44 134121.73 154310.42 134133.70 154287.51 134143.63C154244.25 134154.64 154200.78 134164.87 154157.66 134176.43C154126.77 134186.62 154095.88 134196.80 154065.00 134207.00C154054.33 134217.67 154043.67 134228.33 154033.00 134239.00C153968.53 134260.76 153904.00 134282.35 153839.57 134304.22C153775.38 134336.15 153711.19 134368.07 153647.00 134400.00C153635.38 134410.91 153625.10 134423.40 153612.56 134433.23C153570.20 134454.50 153527.97 134476.01 153485.53 134497.12C153399.87 134518.48 153314.18 134539.70 153228.55 134561.18C153175.03 134582.44 153121.52 134603.73 153068.00 134625.00C153068.00 134636.00 153068.00 134647.00 153068.00 134658.00C153025.33 134700.67 152982.67 134743.33 152940.00 134786.00C152875.53 134807.43 152811.00 134828.68 152746.57 134850.22C152725.38 134861.15 152704.19 134872.07 152683.00 134883.00C152672.00 134883.00 152661.00 134883.00 152650.00 134883.00C152607.33 134915.00 152564.67 134947.00 152522.00 134979.00C152511.18 134979.10 152500.36 134978.80 152489.54 134979.15C152456.59 134990.26 152423.32 135000.47 152390.60 135012.21C152370.07 135022.48 152349.53 135032.73 152329.00 135043.00C152329.00 135053.67 152329.00 135064.33 152329.00 135075.00C152339.67 135086.00 152350.33 135097.00 152361.00 135108.00C152347.35 135122.66 152330.95 135135.10 152320.64 135152.55C152302.10 135180.37 152283.54 135208.18 152265.00 135236.00C152222.00 135246.67 152179.00 135257.33 152136.00 135268.00C152136.00 135257.33 152136.00 135246.67 152136.00 135236.00C152093.00 135236.00 152050.00 135236.00 152007.00 135236.00C151975.00 135246.67 151943.00 135257.33 151911.00 135268.00C151911.00 135289.67 151911.00 135311.33 151911.00 135333.00C151889.67 135343.67 151868.33 135354.33 151847.00 135365.00C151835.73 135342.29 151823.04 135320.25 151812.71 135297.10C151802.47 135266.07 151792.24 135235.03 151782.00 135204.00C151782.00 135193.33 151782.00 135182.67 151782.00 135172.00C151814.33 135150.67 151846.67 135129.33 151879.00 135108.00C151879.00 135065.00 151879.00 135022.00 151879.00 134979.00C151846.67 134979.00 151814.33 134979.00 151782.00 134979.00C151760.67 134968.33 151739.33 134957.67 151718.00 134947.00C151718.00 134936.33 151718.00 134925.67 151718.00 134915.00C151707.33 134915.00 151696.67 134915.00 151686.00 134915.00C151643.00 134947.00 151600.00 134979.00 151557.00 135011.00C151546.33 135000.33 151535.67 134989.67 151525.00 134979.00C151525.00 134968.33 151525.00 134957.67 151525.00 134947.00C151514.33 134957.67 151503.67 134968.33 151493.00 134979.00C151482.33 134979.00 151471.67 134979.00 151461.00 134979.00C151450.33 134968.33 151439.67 134957.67 151429.00 134947.00C151418.00 134947.00 151407.00 134947.00 151396.00 134947.00C151385.33 134936.33 151374.67 134925.67 151364.00 134915.00C151364.00 134904.33 151364.00 134893.67 151364.00 134883.00C151353.33 134872.00 151342.67 134861.00 151332.00 134850.00C151321.33 134861.00 151310.67 134872.00 151300.00 134883.00C151289.33 134872.00 151278.67 134861.00 151268.00 134850.00C151257.33 134861.00 151246.67 134872.00 151236.00 134883.00C151214.18 134883.10 151192.36 134882.80 151170.54 134883.15C151138.69 134893.75 151106.85 134904.38 151075.00 134915.00C151053.57 134904.18 151031.97 134893.71 151010.66 134882.66C150999.77 134871.77 150988.89 134860.89 150978.00 134850.00C150967.33 134861.00 150956.67 134872.00 150946.00 134883.00C150924.67 134883.00 150903.33 134883.00 150882.00 134883.00C150871.33 134872.00 150860.67 134861.00 150850.00 134850.00C150839.33 134850.00 150828.67 134850.00 150818.00 134850.00C150796.33 134861.00 150774.67 134872.00 150753.00 134883.00C150753.00 134893.67 150753.00 134904.33 150753.00 134915.00C150715.90 134940.26 150677.72 134963.97 150641.52 134990.52C150603.68 135018.68 150565.84 135046.84 150528.00 135075.00C150506.67 135075.00 150485.33 135075.00 150464.00 135075.00C150453.15 135086.04 150442.61 135097.37 150431.57 135108.22C150388.71 135129.48 150345.86 135150.74 150303.00 135172.00C150238.67 135172.00 150174.33 135172.00 150110.00 135172.00C150110.00 135161.33 150110.00 135150.67 150110.00 135140.00C150099.33 135129.33 150088.67 135118.67 150078.00 135108.00C150067.33 135108.00 150056.67 135108.00 150046.00 135108.00C150035.33 135129.33 150024.67 135150.67 150014.00 135172.00C149960.33 135182.67 149906.67 135193.33 149853.00 135204.00C149842.33 135214.67 149831.67 135225.33 149821.00 135236.00C149809.39 135225.10 149799.11 135212.63 149786.60 135202.79C149766.07 135192.52 149745.53 135182.27 149725.00 135172.00C149725.00 135139.67 149725.00 135107.33 149725.00 135075.00C149714.00 135086.00 149703.00 135097.00 149692.00 135108.00C149681.33 135108.00 149670.67 135108.00 149660.00 135108.00C149649.33 135129.33 149638.67 135150.67 149628.00 135172.00C149617.33 135172.00 149606.67 135172.00 149596.00 135172.00C149596.00 135193.33 149596.00 135214.67 149596.00 135236.00C149585.33 135236.00 149574.67 135236.00 149564.00 135236.00C149564.00 135214.67 149564.00 135193.33 149564.00 135172.00C149553.33 135182.67 149542.67 135193.33 149532.00 135204.00C149510.33 135182.67 149488.67 135161.33 149467.00 135140.00C149445.67 135140.00 149424.33 135140.00 149403.00 135140.00C149403.00 135150.67 149403.00 135161.33 149403.00 135172.00C149381.67 135172.00 149360.33 135172.00 149339.00 135172.00C149339.00 135193.33 149339.00 135214.67 149339.00 135236.00C149328.33 135246.67 149317.67 135257.33 149307.00 135268.00C149307.00 135257.33 149307.00 135246.67 149307.00 135236.00C149296.00 135214.67 149285.00 135193.33 149274.00 135172.00C149252.67 135172.00 149231.33 135172.00 149210.00 135172.00C149199.33 135182.67 149188.67 135193.33 149178.00 135204.00C149145.67 135204.00 149113.33 135204.00 149081.00 135204.00C149059.67 135236.33 149038.33 135268.67 149017.00 135301.00C149006.33 135290.00 148995.67 135279.00 148985.00 135268.00C148974.33 135268.00 148963.67 135268.00 148953.00 135268.00C148953.00 135257.33 148953.00 135246.67 148953.00 135236.00C148931.67 135225.33 148910.33 135214.67 148889.00 135204.00C148899.67 135204.00 148910.33 135204.00 148921.00 135204.00C148910.33 135193.33 148899.67 135182.67 148889.00 135172.00C148889.00 135161.33 148889.00 135150.67 148889.00 135140.00C148867.33 135140.00 148845.67 135140.00 148824.00 135140.00C148781.33 135172.00 148738.67 135204.00 148696.00 135236.00C148674.33 135236.00 148652.67 135236.00 148631.00 135236.00C148588.13 135257.26 148545.45 135278.91 148503.00 135301.00C148481.33 135290.00 148459.67 135279.00 148438.00 135268.00C148427.33 135279.00 148416.67 135290.00 148406.00 135301.00C148395.33 135301.00 148384.67 135301.00 148374.00 135301.00C148374.00 135311.67 148374.00 135322.33 148374.00 135333.00C148363.33 135322.33 148352.67 135311.67 148342.00 135301.00C148342.00 135322.33 148342.00 135343.67 148342.00 135365.00C148320.67 135365.00 148299.33 135365.00 148278.00 135365.00C148267.00 135375.67 148256.00 135386.33 148245.00 135397.00C148180.23 135418.87 148115.10 135439.74 148050.57 135462.23C148029.72 135472.83 148008.85 135483.41 147988.00 135494.00C147977.18 135494.10 147966.36 135493.79 147955.54 135494.15C147923.69 135504.75 147891.85 135515.38 147860.00 135526.00C147860.00 135536.67 147860.00 135547.33 147860.00 135558.00C147849.00 135558.00 147838.00 135558.00 147827.00 135558.00C147816.33 135568.67 147805.67 135579.33 147795.00 135590.00C147784.33 135590.00 147773.67 135590.00 147763.00 135590.00C147752.33 135600.67 147741.67 135611.33 147731.00 135622.00C147709.67 135600.67 147688.33 135579.33 147667.00 135558.00C147634.67 135558.00 147602.33 135558.00 147570.00 135558.00C147570.00 135568.67 147570.00 135579.33 147570.00 135590.00C147527.33 135600.67 147484.67 135611.33 147442.00 135622.00C147431.00 135622.00 147420.00 135622.00 147409.00 135622.00C147409.00 135643.33 147409.00 135664.67 147409.00 135686.00C147398.33 135686.00 147387.67 135686.00 147377.00 135686.00C147366.33 135697.00 147355.67 135708.00 147345.00 135719.00C147345.00 135708.00 147345.00 135697.00 147345.00 135686.00C147323.67 135675.33 147302.33 135664.67 147281.00 135654.00C147281.00 135675.67 147281.00 135697.33 147281.00 135719.00C147259.67 135729.67 147238.33 135740.33 147217.00 135751.00C147206.00 135740.33 147195.00 135729.67 147184.00 135719.00C147184.00 135761.67 147184.00 135804.33 147184.00 135847.00C147162.67 135847.00 147141.33 135847.00 147120.00 135847.00C147109.33 135857.67 147098.67 135868.33 147088.00 135879.00C147077.33 135868.33 147066.67 135857.67 147056.00 135847.00C147045.18 135868.43 147034.70 135890.03 147023.66 135911.35C147013.12 135922.24 147002.55 135933.12 146992.00 135944.00C146959.67 135944.00 146927.33 135944.00 146895.00 135944.00C146884.33 135965.33 146873.67 135986.67 146863.00 136008.00C146841.67 136018.67 146820.33 136029.33 146799.00 136040.00C146788.00 136040.00 146777.00 136040.00 146766.00 136040.00C146766.00 136029.33 146766.00 136018.67 146766.00 136008.00C146744.67 136018.67 146723.33 136029.33 146702.00 136040.00C146702.00 136050.67 146702.00 136061.33 146702.00 136072.00C146680.67 136082.67 146659.33 136093.33 146638.00 136104.00C146627.33 136115.00 146616.67 136126.00 146606.00 136137.00C146595.00 136126.00 146584.00 136115.00 146573.00 136104.00C146562.33 136115.00 146551.67 136126.00 146541.00 136137.00C146530.33 136094.00 146519.67 136051.00 146509.00 136008.00C146509.00 136018.67 146509.00 136029.33 146509.00 136040.00C146498.33 136029.33 146487.67 136018.67 146477.00 136008.00C146455.67 136008.00 146434.33 136008.00 146413.00 136008.00C146402.33 136018.67 146391.67 136029.33 146381.00 136040.00C146381.00 136029.33 146381.00 136018.67 146381.00 136008.00C146370.00 136029.33 146359.00 136050.67 146348.00 136072.00C146326.67 136072.00 146305.33 136072.00 146284.00 136072.00C146273.33 136082.67 146262.67 136093.33 146252.00 136104.00C146241.33 136093.33 146230.67 136082.67 146220.00 136072.00C146177.00 136072.00 146134.00 136072.00 146091.00 136072.00C146080.33 136061.33 146069.67 136050.67 146059.00 136040.00C146027.16 136071.97 145994.92 136103.55 145963.81 136136.23C145950.91 136138.06 145937.82 136136.45 145924.84 136137.00C145915.89 136137.00 145906.95 136137.00 145898.00 136137.00C145898.00 136115.33 145898.00 136093.67 145898.00 136072.00C145855.33 136072.00 145812.67 136072.00 145770.00 136072.00C145748.33 136061.33 145726.67 136050.67 145705.00 136040.00C145694.33 136050.67 145683.67 136061.33 145673.00 136072.00C145651.67 136072.00 145630.33 136072.00 145609.00 136072.00C145598.33 136093.67 145587.67 136115.33 145577.00 136137.00C145577.00 136158.33 145577.00 136179.67 145577.00 136201.00C145566.33 136190.33 145555.67 136179.67 145545.00 136169.00C145502.00 136211.67 145459.00 136254.33 145416.00 136297.00C145384.00 136307.67 145352.00 136318.33 145320.00 136329.00C145320.00 136340.00 145320.00 136351.00 145320.00 136362.00C145298.33 136372.67 145276.67 136383.33 145255.00 136394.00C145255.00 136404.67 145255.00 136415.33 145255.00 136426.00C145233.67 136426.00 145212.33 136426.00 145191.00 136426.00C145191.00 136415.33 145191.00 136404.67 145191.00 136394.00C145158.67 136404.67 145126.33 136415.33 145094.00 136426.00C145083.33 136415.33 145072.67 136404.67 145062.00 136394.00C145040.67 136404.67 145019.33 136415.33 144998.00 136426.00C144987.33 136415.33 144976.67 136404.67 144966.00 136394.00C144955.18 136394.10 144944.36 136393.80 144933.54 136394.15C144901.36 136404.75 144869.18 136415.38 144837.00 136426.00C144826.33 136436.67 144815.67 136447.33 144805.00 136458.00C144805.00 136479.33 144805.00 136500.67 144805.00 136522.00C144773.00 136533.00 144741.00 136544.00 144709.00 136555.00C144709.00 136565.67 144709.00 136576.33 144709.00 136587.00C144687.33 136608.33 144665.67 136629.67 144644.00 136651.00C144644.00 136661.67 144644.00 136672.33 144644.00 136683.00C144633.33 136672.33 144622.67 136661.67 144612.00 136651.00C144590.67 136651.00 144569.33 136651.00 144548.00 136651.00C144526.67 136640.33 144505.33 136629.67 144484.00 136619.00C144462.33 136629.67 144440.67 136640.33 144419.00 136651.00C144387.00 136629.67 144355.00 136608.33 144323.00 136587.00C144312.33 136587.00 144301.67 136587.00 144291.00 136587.00C144269.33 136608.33 144247.67 136629.67 144226.00 136651.00C144204.67 136651.00 144183.33 136651.00 144162.00 136651.00C144140.67 136661.67 144119.33 136672.33 144098.00 136683.00C144087.00 136683.00 144076.00 136683.00 144065.00 136683.00C144054.33 136693.67 144043.67 136704.33 144033.00 136715.00C144022.33 136715.00 144011.67 136715.00 144001.00 136715.00C143990.11 136726.62 143977.59 136736.88 143967.80 136749.43C143957.52 136770.28 143947.27 136791.15 143937.00 136812.00C143937.00 136822.67 143937.00 136833.33 143937.00 136844.00C143894.10 136865.54 143851.10 136886.87 143808.00 136908.00C143776.00 136908.00 143744.00 136908.00 143712.00 136908.00C143701.33 136897.33 143690.67 136886.67 143680.00 136876.00C143669.33 136876.00 143658.67 136876.00 143648.00 136876.00C143636.07 136886.91 143625.39 136899.33 143612.60 136909.21C143592.07 136919.48 143571.53 136929.73 143551.00 136940.00C143540.33 136972.33 143529.67 137004.67 143519.00 137037.00C143454.67 137037.00 143390.33 137037.00 143326.00 137037.00C143293.90 137058.47 143261.67 137079.75 143229.65 137101.34C143218.76 137111.88 143207.88 137122.45 143197.00 137133.00C143154.33 137122.33 143111.67 137111.67 143069.00 137101.00C143015.33 137101.00 142961.67 137101.00 142908.00 137101.00C142908.00 137090.33 142908.00 137079.67 142908.00 137069.00C142885.30 137079.95 142863.20 137092.21 142840.10 137102.29C142809.07 137112.53 142778.03 137122.76 142747.00 137133.00C142715.00 137154.67 142683.00 137176.33 142651.00 137198.00C142629.33 137187.00 142607.67 137176.00 142586.00 137165.00C142574.38 137176.22 142564.18 137189.09 142551.60 137199.21C142531.07 137209.48 142510.53 137219.73 142490.00 137230.00C142479.33 137230.00 142468.67 137230.00 142458.00 137230.00C142446.38 137240.89 142436.12 137253.41 142423.57 137263.20C142402.72 137273.48 142381.85 137283.73 142361.00 137294.00C142350.33 137294.00 142339.67 137294.00 142329.00 137294.00C142297.12 137325.95 142264.96 137357.62 142233.74 137390.22C142232.26 137400.70 142233.01 137411.52 142233.41 137421.98C142238.73 137430.92 142247.98 137436.87 142254.77 137444.75C142261.12 137449.25 142267.83 137457.03 142258.09 137461.91C142239.06 137480.94 142220.03 137499.97 142201.00 137519.00C142158.00 137529.67 142115.00 137540.33 142072.00 137551.00C142061.19 137551.15 142050.37 137550.71 142039.57 137551.22C142018.38 137561.81 141997.19 137572.41 141976.00 137583.00C141965.00 137583.00 141954.00 137583.00 141943.00 137583.00C141889.67 137615.33 141836.33 137647.67 141783.00 137680.00C141793.67 137690.67 141804.33 137701.33 141815.00 137712.00C141804.33 137733.33 141793.67 137754.67 141783.00 137776.00C141783.00 137787.00 141783.00 137798.00 141783.00 137809.00C141772.33 137809.00 141761.67 137809.00 141751.00 137809.00C141740.00 137819.67 141729.00 137830.33 141718.00 137841.00C141686.00 137830.33 141654.00 137819.67 141622.00 137809.00C141568.33 137819.67 141514.67 137830.33 141461.00 137841.00C141450.33 137851.67 141439.67 137862.33 141429.00 137873.00C141407.67 137873.00 141386.33 137873.00 141365.00 137873.00C141354.00 137894.33 141343.00 137915.67 141332.00 137937.00C141310.67 137937.00 141289.33 137937.00 141268.00 137937.00C141236.00 137958.33 141204.00 137979.67 141172.00 138001.00C141139.67 138001.00 141107.33 138001.00 141075.00 138001.00C141085.67 137969.00 141096.33 137937.00 141107.00 137905.00C141085.67 137883.67 141064.33 137862.33 141043.00 137841.00C141021.67 137841.00 141000.33 137841.00 140979.00 137841.00C140957.40 137819.59 140936.08 137797.92 140915.00 137776.00C140904.00 137776.00 140893.00 137776.00 140882.00 137776.00C140850.00 137754.67 140818.00 137733.33 140786.00 137712.00C140775.33 137712.00 140764.67 137712.00 140754.00 137712.00C140764.67 137722.67 140775.33 137733.33 140786.00 137744.00C140764.67 137797.67 140743.33 137851.33 140722.00 137905.00C140700.33 137894.33 140678.67 137883.67 140657.00 137873.00C140614.33 137905.00 140571.67 137937.00 140529.00 137969.00C140518.33 137969.00 140507.67 137969.00 140497.00 137969.00C140486.00 137979.67 140475.00 137990.33 140464.00 138001.00C140451.88 138001.55 140439.51 137999.77 140427.56 138002.14C140386.38 138012.76 140345.19 138023.39 140304.00 138034.00C140293.00 138023.00 140282.00 138012.00 140271.00 138001.00C140271.00 137990.33 140271.00 137979.67 140271.00 137969.00C140286.40 137954.93 140299.81 137938.32 140318.02 137927.66C140345.35 137909.45 140372.67 137891.22 140400.00 137873.00C140389.33 137851.67 140378.67 137830.33 140368.00 137809.00C140346.67 137809.00 140325.33 137809.00 140304.00 137809.00C140304.00 137787.33 140304.00 137765.67 140304.00 137744.00C140282.33 137765.67 140260.67 137787.33 140239.00 137809.00C140249.67 137809.00 140260.33 137809.00 140271.00 137809.00C140260.33 137819.67 140249.67 137830.33 140239.00 137841.00C140217.67 137841.00 140196.33 137841.00 140175.00 137841.00C140153.67 137873.00 140132.33 137905.00 140111.00 137937.00C140057.33 137947.67 140003.67 137958.33 139950.00 137969.00C139928.67 137979.67 139907.33 137990.33 139886.00 138001.00C139875.00 138001.00 139864.00 138001.00 139853.00 138001.00C139831.67 137979.67 139810.33 137958.33 139789.00 137937.00C139799.67 137926.33 139810.33 137915.67 139821.00 137905.00C139821.00 137894.33 139821.00 137883.67 139821.00 137873.00C139842.67 137851.67 139864.33 137830.33 139886.00 137809.00C139875.00 137809.00 139864.00 137809.00 139853.00 137809.00C139864.00 137787.33 139875.00 137765.67 139886.00 137744.00C139896.67 137744.00 139907.33 137744.00 139918.00 137744.00C139907.33 137722.67 139896.67 137701.33 139886.00 137680.00C139886.00 137669.33 139886.00 137658.67 139886.00 137648.00C139864.33 137637.33 139842.67 137626.67 139821.00 137616.00C139789.00 137637.33 139757.00 137658.67 139725.00 137680.00C139692.67 137669.33 139660.33 137658.67 139628.00 137648.00C139617.33 137658.67 139606.67 137669.33 139596.00 137680.00C139596.00 137690.67 139596.00 137701.33 139596.00 137712.00C139574.67 137733.33 139553.33 137754.67 139532.00 137776.00C139542.67 137787.00 139553.33 137798.00 139564.00 137809.00C139564.00 137819.67 139564.00 137830.33 139564.00 137841.00C139585.33 137841.00 139606.67 137841.00 139628.00 137841.00C139639.00 137873.00 139650.00 137905.00 139661.00 137937.00C139682.33 137947.67 139703.67 137958.33 139725.00 137969.00C139725.00 137979.67 139725.00 137990.33 139725.00 138001.00C139735.67 138001.00 139746.33 138001.00 139757.00 138001.00C139725.00 138012.00 139693.00 138023.00 139661.00 138034.00C139650.00 138044.67 139639.00 138055.33 139628.00 138066.00C139606.67 138055.33 139585.33 138044.67 139564.00 138034.00C139542.67 138034.00 139521.33 138034.00 139500.00 138034.00C139500.00 138044.67 139500.00 138055.33 139500.00 138066.00C139489.33 138076.67 139478.67 138087.33 139468.00 138098.00C139457.00 138098.00 139446.00 138098.00 139435.00 138098.00C139435.00 138108.67 139435.00 138119.33 139435.00 138130.00C139403.00 138140.67 139371.00 138151.33 139339.00 138162.00C139328.33 138172.67 139317.67 138183.33 139307.00 138194.00C139264.00 138205.00 139221.00 138216.00 139178.00 138227.00C139167.33 138269.67 139156.67 138312.33 139146.00 138355.00C139167.33 138376.33 139188.67 138397.67 139210.00 138419.00C139221.15 138418.90 139232.31 138419.21 139243.46 138418.85C139307.31 138397.58 139371.15 138376.28 139435.00 138355.00C139488.67 138355.00 139542.33 138355.00 139596.00 138355.00C139585.33 138355.00 139574.67 138355.00 139564.00 138355.00C139585.33 138387.33 139606.67 138419.67 139628.00 138452.00C139628.00 138473.33 139628.00 138494.67 139628.00 138516.00C139639.00 138516.00 139650.00 138516.00 139661.00 138516.00C139661.00 138537.33 139661.00 138558.67 139661.00 138580.00C139650.00 138590.67 139639.00 138601.33 139628.00 138612.00C139617.33 138612.00 139606.67 138612.00 139596.00 138612.00C139585.33 138633.67 139574.67 138655.33 139564.00 138677.00C139564.00 138687.67 139564.00 138698.33 139564.00 138709.00C139585.33 138730.33 139606.67 138751.67 139628.00 138773.00C139639.00 138773.00 139650.00 138773.00 139661.00 138773.00C139661.00 138783.67 139661.00 138794.33 139661.00 138805.00C139639.33 138805.00 139617.67 138805.00 139596.00 138805.00C139585.33 138794.33 139574.67 138783.67 139564.00 138773.00C139553.33 138773.00 139542.67 138773.00 139532.00 138773.00C139521.18 138751.57 139510.71 138729.97 139499.66 138708.66C139489.11 138698.11 139478.55 138687.55 139468.00 138677.00C139457.00 138698.33 139446.00 138719.67 139435.00 138741.00C139413.67 138741.00 139392.33 138741.00 139371.00 138741.00C139381.64 138794.83 139392.52 138848.62 139403.00 138902.48C139403.00 138912.99 139403.00 138923.49 139403.00 138934.00C139391.39 138944.90 139381.11 138957.37 139368.60 138967.21C139348.07 138977.48 139327.53 138987.73 139307.00 138998.00C139296.33 138998.00 139285.67 138998.00 139275.00 138998.00C139264.33 138987.33 139253.67 138976.67 139243.00 138966.00C139243.00 138944.67 139243.00 138923.33 139243.00 138902.00C139221.33 138891.33 139199.67 138880.67 139178.00 138870.00C139178.00 138880.67 139178.00 138891.33 139178.00 138902.00C139156.67 138891.33 139135.33 138880.67 139114.00 138870.00C139114.00 138880.67 139114.00 138891.33 139114.00 138902.00C139081.67 138902.00 139049.33 138902.00 139017.00 138902.00C139006.33 138923.33 138995.67 138944.67 138985.00 138966.00C138974.33 138966.00 138963.67 138966.00 138953.00 138966.00C138953.00 138998.00 138953.00 139030.00 138953.00 139062.00C138942.33 139062.00 138931.67 139062.00 138921.00 139062.00C138899.67 139073.00 138878.33 139084.00 138857.00 139095.00C138846.33 139095.00 138835.67 139095.00 138825.00 139095.00C138825.00 139062.67 138825.00 139030.33 138825.00 138998.00C138814.00 138998.00 138803.00 138998.00 138792.00 138998.00C138792.00 138966.00 138792.00 138934.00 138792.00 138902.00C138770.67 138902.00 138749.33 138902.00 138728.00 138902.00C138728.14 138891.19 138727.71 138880.37 138728.21 138869.57C138738.83 138848.06 138749.40 138826.52 138760.00 138805.00C138749.19 138805.15 138738.37 138804.71 138727.57 138805.22C138706.38 138815.81 138685.19 138826.41 138664.00 138837.00C138664.00 138848.00 138664.00 138859.00 138664.00 138870.00C138642.67 138891.33 138621.33 138912.67 138600.00 138934.00C138578.33 138934.00 138556.67 138934.00 138535.00 138934.00C138513.67 138955.33 138492.33 138976.67 138471.00 138998.00C138428.10 139019.54 138385.10 139040.87 138342.00 139062.00C138342.00 139073.00 138342.00 139084.00 138342.00 139095.00C138320.57 139105.82 138298.97 139116.29 138277.66 139127.34C138267.11 139137.89 138256.55 139148.45 138246.00 139159.00C138213.67 139148.33 138181.33 139137.67 138149.00 139127.00C138117.00 139148.33 138085.00 139169.67 138053.00 139191.00C138010.00 139180.33 137967.00 139169.67 137924.00 139159.00C137892.00 139169.67 137860.00 139180.33 137828.00 139191.00C137806.67 139212.33 137785.33 139233.67 137764.00 139255.00C137742.33 139255.00 137720.67 139255.00 137699.00 139255.00C137677.67 139276.67 137656.33 139298.33 137635.00 139320.00C137613.67 139309.33 137592.33 139298.67 137571.00 139288.00C137581.67 139277.00 137592.33 139266.00 137603.00 139255.00C137613.67 139223.00 137624.33 139191.00 137635.00 139159.00C137634.90 139148.18 137635.20 139137.36 137634.85 139126.54C137624.25 139094.36 137613.62 139062.18 137603.00 139030.00C137603.00 139019.33 137603.00 139008.67 137603.00 138998.00C137592.33 139008.67 137581.67 139019.33 137571.00 139030.00C137517.33 139040.67 137463.67 139051.33 137410.00 139062.00C137399.33 139051.33 137388.67 139040.67 137378.00 139030.00C137366.81 139040.69 137355.95 139051.71 137344.55 139062.18C137291.37 139083.79 137238.18 139105.39 137185.00 139127.00C137174.33 139148.33 137163.67 139169.67 137153.00 139191.00C137142.00 139180.33 137131.00 139169.67 137120.00 139159.00C137098.67 139159.00 137077.33 139159.00 137056.00 139159.00C137056.00 139137.67 137056.00 139116.33 137056.00 139095.00C137024.00 139095.00 136992.00 139095.00 136960.00 139095.00C136938.33 139127.00 136916.67 139159.00 136895.00 139191.00C136863.00 139180.33 136831.00 139169.67 136799.00 139159.00C136766.67 139169.67 136734.33 139180.33 136702.00 139191.00C136691.33 139201.67 136680.67 139212.33 136670.00 139223.00C136638.00 139212.33 136606.00 139201.67 136574.00 139191.00C136563.33 139169.67 136552.67 139148.33 136542.00 139127.00C136531.00 139116.33 136520.00 139105.67 136509.00 139095.00C136509.00 139084.00 136509.00 139073.00 136509.00 139062.00C136498.33 139062.00 136487.67 139062.00 136477.00 139062.00C136477.00 139051.33 136477.00 139040.67 136477.00 139030.00C136498.67 139030.00 136520.33 139030.00 136542.00 139030.00C136531.00 138998.00 136520.00 138966.00 136509.00 138934.00C136520.00 138923.33 136531.00 138912.67 136542.00 138902.00C136531.00 138891.33 136520.00 138880.67 136509.00 138870.00C136509.00 138848.33 136509.00 138826.67 136509.00 138805.00C136530.67 138762.33 136552.33 138719.67 136574.00 138677.00C136595.33 138666.00 136616.67 138655.00 136638.00 138644.00C136638.00 138633.33 136638.00 138622.67 136638.00 138612.00C136648.67 138612.00 136659.33 138612.00 136670.00 138612.00C136670.00 138601.33 136670.00 138590.67 136670.00 138580.00C136680.67 138569.33 136691.33 138558.67 136702.00 138548.00C136702.00 138537.33 136702.00 138526.67 136702.00 138516.00C136670.00 138516.00 136638.00 138516.00 136606.00 138516.00C136595.33 138526.67 136584.67 138537.33 136574.00 138548.00C136552.33 138516.00 136530.67 138484.00 136509.00 138452.00C136498.33 138452.00 136487.67 138452.00 136477.00 138452.00C136477.00 138441.00 136477.00 138430.00 136477.00 138419.00C136466.33 138430.00 136455.67 138441.00 136445.00 138452.00C136423.67 138452.00 136402.33 138452.00 136381.00 138452.00C136348.67 138430.33 136316.33 138408.67 136284.00 138387.00C136284.00 138397.67 136284.00 138408.33 136284.00 138419.00C136262.67 138408.33 136241.33 138397.67 136220.00 138387.00C136220.00 138376.33 136220.00 138365.67 136220.00 138355.00C136198.67 138355.00 136177.33 138355.00 136156.00 138355.00C136145.33 138323.00 136134.67 138291.00 136124.00 138259.00C136102.33 138259.00 136080.67 138259.00 136059.00 138259.00C136048.33 138248.33 136037.67 138237.67 136027.00 138227.00C136037.67 138216.00 136048.33 138205.00 136059.00 138194.00C136048.33 138183.33 136037.67 138172.67 136027.00 138162.00C136027.00 138151.33 136027.00 138140.67 136027.00 138130.00C136037.67 138119.33 136048.33 138108.67 136059.00 138098.00C136080.67 138108.67 136102.33 138119.33 136124.00 138130.00C136124.00 138119.33 136124.00 138108.67 136124.00 138098.00C136156.00 138087.33 136188.00 138076.67 136220.00 138066.00C136230.67 138055.33 136241.33 138044.67 136252.00 138034.00C136273.67 138044.67 136295.33 138055.33 136317.00 138066.00C136327.67 138055.33 136338.33 138044.67 136349.00 138034.00C136359.67 138044.67 136370.33 138055.33 136381.00 138066.00C136370.33 138076.67 136359.67 138087.33 136349.00 138098.00C136359.81 138097.85 136370.63 138098.29 136381.43 138097.78C136402.62 138087.19 136423.81 138076.59 136445.00 138066.00C136445.00 138044.33 136445.00 138022.67 136445.00 138001.00C136423.67 137979.67 136402.33 137958.33 136381.00 137937.00C136359.67 137937.00 136338.33 137937.00 136317.00 137937.00C136306.00 137926.33 136295.00 137915.67 136284.00 137905.00C136284.00 137894.33 136284.00 137883.67 136284.00 137873.00C136316.33 137862.33 136348.67 137851.67 136381.00 137841.00C136348.67 137808.67 136316.33 137776.33 136284.00 137744.00C136305.67 137722.67 136327.33 137701.33 136349.00 137680.00C136316.67 137680.00 136284.33 137680.00 136252.00 137680.00C136252.00 137658.67 136252.00 137637.33 136252.00 137616.00C136284.33 137583.67 136316.67 137551.33 136349.00 137519.00C136349.00 137497.67 136349.00 137476.33 136349.00 137455.00C136338.33 137465.67 136327.67 137476.33 136317.00 137487.00C136306.00 137487.00 136295.00 137487.00 136284.00 137487.00C136262.67 137476.33 136241.33 137465.67 136220.00 137455.00C136220.00 137444.33 136220.00 137433.67 136220.00 137423.00C136198.67 137423.00 136177.33 137423.00 136156.00 137423.00C136156.00 137401.33 136156.00 137379.67 136156.00 137358.00C136102.33 137358.00 136048.67 137358.00 135995.00 137358.00C135984.33 137347.33 135973.67 137336.67 135963.00 137326.00C135941.67 137336.67 135920.33 137347.33 135899.00 137358.00C135899.00 137336.67 135899.00 137315.33 135899.00 137294.00C135845.33 137272.67 135791.67 137251.33 135738.00 137230.00C135748.67 137219.33 135759.33 137208.67 135770.00 137198.00C135770.00 137176.33 135770.00 137154.67 135770.00 137133.00C135748.67 137122.33 135727.33 137111.67 135706.00 137101.00C135695.00 137101.00 135684.00 137101.00 135673.00 137101.00C135673.00 137090.33 135673.00 137079.67 135673.00 137069.00C135684.00 137058.33 135695.00 137047.67 135706.00 137037.00C135695.00 137026.33 135684.00 137015.67 135673.00 137005.00C135651.67 137005.00 135630.33 137005.00 135609.00 137005.00C135598.33 137015.67 135587.67 137026.33 135577.00 137037.00C135577.00 137026.33 135577.00 137015.67 135577.00 137005.00C135566.33 136994.33 135555.67 136983.67 135545.00 136973.00C135512.67 136973.00 135480.33 136973.00 135448.00 136973.00C135426.67 136962.00 135405.33 136951.00 135384.00 136940.00C135384.00 136951.00 135384.00 136962.00 135384.00 136973.00C135352.00 136962.00 135320.00 136951.00 135288.00 136940.00C135277.33 136929.33 135266.67 136918.67 135256.00 136908.00C135245.00 136908.00 135234.00 136908.00 135223.00 136908.00C135223.00 136897.33 135223.00 136886.67 135223.00 136876.00C135191.00 136865.33 135159.00 136854.67 135127.00 136844.00C135127.10 136833.18 135126.80 136822.36 135127.15 136811.54C135137.75 136779.36 135148.38 136747.18 135159.00 136715.00C135148.33 136704.33 135137.67 136693.67 135127.00 136683.00C135137.67 136661.67 135148.33 136640.33 135159.00 136619.00C135137.67 136619.00 135116.33 136619.00 135095.00 136619.00C135084.33 136597.67 135073.67 136576.33 135063.00 136555.00C135052.00 136555.00 135041.00 136555.00 135030.00 136555.00C135030.00 136544.00 135030.00 136533.00 135030.00 136522.00C135019.33 136522.00 135008.67 136522.00 134998.00 136522.00C134998.00 136500.67 134998.00 136479.33 134998.00 136458.00C134987.33 136447.33 134976.67 136436.67 134966.00 136426.00C134966.00 136415.33 134966.00 136404.67 134966.00 136394.00C134955.33 136394.00 134944.67 136394.00 134934.00 136394.00C134934.00 136383.33 134934.00 136372.67 134934.00 136362.00C134923.33 136362.00 134912.67 136362.00 134902.00 136362.00C134891.33 136351.00 134880.67 136340.00 134870.00 136329.00C134880.67 136329.00 134891.33 136329.00 134902.00 136329.00C134923.33 136307.67 134944.67 136286.33 134966.00 136265.00C134955.33 136243.67 134944.67 136222.33 134934.00 136201.00C134944.67 136190.33 134955.33 136179.67 134966.00 136169.00C134955.33 136158.33 134944.67 136147.67 134934.00 136137.00C134934.00 136126.00 134934.00 136115.00 134934.00 136104.00C134944.90 136092.39 134957.37 136082.11 134967.21 136069.60C134977.48 136049.07 134987.73 136028.53 134998.00 136008.00C135008.67 136018.67 135019.33 136029.33 135030.00 136040.00C135019.33 136018.67 135008.67 135997.33 134998.00 135976.00C135030.33 135954.33 135062.67 135932.67 135095.00 135911.00C135084.33 135900.33 135073.67 135889.67 135063.00 135879.00C135084.33 135825.67 135105.67 135772.33 135127.00 135719.00C135116.33 135708.00 135105.67 135697.00 135095.00 135686.00C135137.67 135686.00 135180.33 135686.00 135223.00 135686.00C135234.00 135654.00 135245.00 135622.00 135256.00 135590.00C135298.67 135579.33 135341.33 135568.67 135384.00 135558.00C135405.33 135536.67 135426.67 135515.33 135448.00 135494.00C135448.00 135483.00 135448.00 135472.00 135448.00 135461.00C135426.67 135461.00 135405.33 135461.00 135384.00 135461.00C135373.33 135429.00 135362.67 135397.00 135352.00 135365.00C135330.57 135354.18 135308.97 135343.71 135287.66 135332.66C135266.11 135311.11 135244.55 135289.55 135223.00 135268.00C135191.00 135279.00 135159.00 135290.00 135127.00 135301.00C135105.67 135290.00 135084.33 135279.00 135063.00 135268.00C135009.33 135268.00 134955.67 135268.00 134902.00 135268.00C134891.33 135257.33 134880.67 135246.67 134870.00 135236.00C134870.00 135214.67 134870.00 135193.33 134870.00 135172.00C134880.67 135172.00 134891.33 135172.00 134902.00 135172.00C134912.67 135182.67 134923.33 135193.33 134934.00 135204.00C134955.33 135193.33 134976.67 135182.67 134998.00 135172.00C135019.82 135171.90 135041.64 135172.20 135063.46 135171.85C135095.31 135161.25 135127.15 135150.62 135159.00 135140.00C135159.00 135129.33 135159.00 135118.67 135159.00 135108.00C135137.57 135096.85 135115.97 135086.03 135094.66 135074.66C135073.10 135053.44 135051.55 135032.22 135030.00 135011.00C135041.00 134989.67 135052.00 134968.33 135063.00 134947.00C135073.67 134947.00 135084.33 134947.00 135095.00 134947.00C135095.00 134936.33 135095.00 134925.67 135095.00 134915.00C135116.33 134925.67 135137.67 134936.33 135159.00 134947.00C135169.67 134936.33 135180.33 134925.67 135191.00 134915.00C135191.00 134904.33 135191.00 134893.67 135191.00 134883.00C135201.67 134883.00 135212.33 134883.00 135223.00 134883.00C135234.00 134872.00 135245.00 134861.00 135256.00 134850.00C135288.00 134871.67 135320.00 134893.33 135352.00 134915.00C135362.67 134915.00 135373.33 134915.00 135384.00 134915.00C135384.00 134882.67 135384.00 134850.33 135384.00 134818.00C135373.10 134806.39 135360.63 134796.11 135350.79 134783.60C135340.52 134763.07 135330.27 134742.53 135320.00 134722.00C135309.33 134722.00 135298.67 134722.00 135288.00 134722.00C135274.31 134707.31 135257.88 134694.82 135247.51 134677.34C135228.68 134649.22 135209.84 134621.11 135191.00 134593.00C135191.00 134571.67 135191.00 134550.33 135191.00 134529.00C135169.67 134518.33 135148.33 134507.67 135127.00 134497.00C135137.67 134475.33 135148.33 134453.67 135159.00 134432.00C135137.67 134410.67 135116.33 134389.33 135095.00 134368.00C135105.67 134357.33 135116.33 134346.67 135127.00 134336.00C135137.67 134336.00 135148.33 134336.00 135159.00 134336.00C135169.89 134324.38 135182.41 134314.12 135192.20 134301.57C135202.48 134280.72 135212.73 134259.85 135223.00 134239.00C135212.33 134228.33 135201.67 134217.67 135191.00 134207.00C135191.00 134196.33 135191.00 134185.67 135191.00 134175.00C135169.67 134143.00 135148.33 134111.00 135127.00 134079.00C135105.67 134079.00 135084.33 134079.00 135063.00 134079.00C135052.00 134057.33 135041.00 134035.67 135030.00 134014.00C135041.00 133992.67 135052.00 133971.33 135063.00 133950.00C135084.33 133939.33 135105.67 133928.67 135127.00 133918.00C135127.00 133907.33 135127.00 133896.67 135127.00 133886.00C135159.00 133853.67 135191.00 133821.33 135223.00 133789.00C135212.33 133767.67 135201.67 133746.33 135191.00 133725.00C135201.67 133725.00 135212.33 133725.00 135223.00 133725.00C135234.00 133714.33 135245.00 133703.67 135256.00 133693.00C135277.33 133693.00 135298.67 133693.00 135320.00 133693.00C135320.00 133628.67 135320.00 133564.33 135320.00 133500.00C135330.67 133478.67 135341.33 133457.33 135352.00 133436.00C135341.33 133414.33 135330.67 133392.67 135320.00 133371.00C135320.00 133360.33 135320.00 133349.67 135320.00 133339.00C135330.67 133328.33 135341.33 133317.67 135352.00 133307.00C135352.00 133285.67 135352.00 133264.33 135352.00 133243.00C135416.33 133253.67 135480.67 133264.33 135545.00 133275.00C135566.33 133264.33 135587.67 133253.67 135609.00 133243.00C135609.00 133210.67 135609.00 133178.33 135609.00 133146.00C135630.33 133135.33 135651.67 133124.67 135673.00 133114.00C135684.00 133114.00 135695.00 133114.00 135706.00 133114.00C135695.00 133092.67 135684.00 133071.33 135673.00 133050.00C135684.00 133039.33 135695.00 133028.67 135706.00 133018.00C135727.33 133018.00 135748.67 133018.00 135770.00 133018.00C135770.00 132996.33 135770.00 132974.67 135770.00 132953.00C135791.33 132942.33 135812.67 132931.67 135834.00 132921.00C135834.00 132910.33 135834.00 132899.67 135834.00 132889.00C135823.33 132878.33 135812.67 132867.67 135802.00 132857.00C135812.67 132846.33 135823.33 132835.67 135834.00 132825.00C135834.14 132814.19 135833.71 132803.37 135834.21 132792.57C135844.83 132771.06 135855.40 132749.52 135866.00 132728.00C135866.00 132717.33 135866.00 132706.67 135866.00 132696.00C135877.00 132685.33 135888.00 132674.67 135899.00 132664.00C135909.67 132664.00 135920.33 132664.00 135931.00 132664.00C135931.00 132653.33 135931.00 132642.67 135931.00 132632.00C135898.67 132599.67 135866.33 132567.33 135834.00 132535.00C135823.33 132513.67 135812.67 132492.33 135802.00 132471.00C135812.67 132460.33 135823.33 132449.67 135834.00 132439.00C135834.00 132417.67 135834.00 132396.33 135834.00 132375.00C135855.67 132353.33 135877.33 132331.67 135899.00 132310.00C135888.00 132299.33 135877.00 132288.67 135866.00 132278.00C135866.00 132256.67 135866.00 132235.33 135866.00 132214.00C135855.33 132203.33 135844.67 132192.67 135834.00 132182.00C135834.00 132160.33 135834.00 132138.67 135834.00 132117.00C135812.67 132117.00 135791.33 132117.00 135770.00 132117.00C135748.67 132106.33 135727.33 132095.67 135706.00 132085.00C135684.33 132085.00 135662.67 132085.00 135641.00 132085.00C135619.67 132074.33 135598.33 132063.67 135577.00 132053.00C135577.00 132042.33 135577.00 132031.67 135577.00 132021.00C135534.00 132042.33 135491.00 132063.67 135448.00 132085.00C135448.00 132095.67 135448.00 132106.33 135448.00 132117.00C135426.57 132106.18 135404.97 132095.71 135383.66 132084.66C135373.11 132074.11 135362.55 132063.55 135352.00 132053.00C135362.67 132042.33 135373.33 132031.67 135384.00 132021.00C135373.33 132021.00 135362.67 132021.00 135352.00 132021.00C135352.00 132010.33 135352.00 131999.67 135352.00 131989.00C135341.33 131978.33 135330.67 131967.67 135320.00 131957.00C135309.33 131957.00 135298.67 131957.00 135288.00 131957.00C135277.33 131935.33 135266.67 131913.67 135256.00 131892.00C135245.00 131881.33 135234.00 131870.67 135223.00 131860.00C135223.00 131806.33 135223.00 131752.67 135223.00 131699.00C135191.00 131699.00 135159.00 131699.00 135127.00 131699.00C135116.33 131720.67 135105.67 131742.33 135095.00 131764.00C135084.33 131764.00 135073.67 131764.00 135063.00 131764.00C135041.01 131785.23 135019.09 131806.54 134997.73 131828.40C134976.48 131860.26 134955.24 131892.13 134934.00 131924.00C134923.18 131902.57 134912.71 131880.97 134901.66 131859.66C134891.11 131849.11 134880.55 131838.55 134870.00 131828.00C134870.00 131838.67 134870.00 131849.33 134870.00 131860.00C134848.33 131860.00 134826.67 131860.00 134805.00 131860.00C134772.90 131838.53 134740.67 131817.26 134708.66 131795.66C134698.11 131785.11 134687.55 131774.55 134677.00 131764.00C134687.67 131742.33 134698.33 131720.67 134709.00 131699.00C134676.67 131699.00 134644.33 131699.00 134612.00 131699.00C134590.92 131720.92 134569.60 131742.59 134548.00 131764.00C134505.33 131753.33 134462.67 131742.67 134420.00 131732.00C134398.33 131732.00 134376.67 131732.00 134355.00 131732.00C134344.33 131742.67 134333.67 131753.33 134323.00 131764.00C134323.00 131774.67 134323.00 131785.33 134323.00 131796.00C134312.33 131806.67 134301.67 131817.33 134291.00 131828.00C134269.67 131828.00 134248.33 131828.00 134227.00 131828.00C134227.00 131838.67 134227.00 131849.33 134227.00 131860.00C134216.00 131860.00 134205.00 131860.00 134194.00 131860.00C134194.00 131870.67 134194.00 131881.33 134194.00 131892.00C134162.00 131902.67 134130.00 131913.33 134098.00 131924.00C134087.33 131935.00 134076.67 131946.00 134066.00 131957.00C134055.33 131957.00 134044.67 131957.00 134034.00 131957.00C134023.33 131967.67 134012.67 131978.33 134002.00 131989.00C133980.33 131989.00 133958.67 131989.00 133937.00 131989.00C133937.00 131999.67 133937.00 132010.33 133937.00 132021.00C133926.33 132010.33 133915.67 131999.67 133905.00 131989.00C133894.33 131999.67 133883.67 132010.33 133873.00 132021.00C133851.67 132010.33 133830.33 131999.67 133809.00 131989.00C133798.00 131999.67 133787.00 132010.33 133776.00 132021.00C133765.33 132010.33 133754.67 131999.67 133744.00 131989.00C133722.67 131989.00 133701.33 131989.00 133680.00 131989.00C133658.67 131999.67 133637.33 132010.33 133616.00 132021.00C133616.00 132010.33 133616.00 131999.67 133616.00 131989.00C133605.33 131999.67 133594.67 132010.33 133584.00 132021.00C133573.00 132010.33 133562.00 131999.67 133551.00 131989.00C133540.33 131989.00 133529.67 131989.00 133519.00 131989.00C133508.33 131978.33 133497.67 131967.67 133487.00 131957.00C133497.67 131957.00 133508.33 131957.00 133519.00 131957.00C133519.00 131946.00 133519.00 131935.00 133519.00 131924.00C133508.33 131902.67 133497.67 131881.33 133487.00 131860.00C133497.67 131860.00 133508.33 131860.00 133519.00 131860.00C133529.67 131838.67 133540.33 131817.33 133551.00 131796.00C133540.33 131774.67 133529.67 131753.33 133519.00 131732.00C133540.16 131709.83 133561.79 131688.12 133584.00 131667.00C133572.07 131656.09 133561.39 131643.67 133548.60 131633.79C133528.07 131623.52 133507.53 131613.27 133487.00 131603.00C133476.33 131581.67 133465.67 131560.33 133455.00 131539.00C133455.00 131528.00 133455.00 131517.00 133455.00 131506.00C133444.33 131484.67 133433.67 131463.33 133423.00 131442.00C133412.33 131442.00 133401.67 131442.00 133391.00 131442.00C133401.67 131431.33 133412.33 131420.67 133423.00 131410.00C133401.67 131388.67 133380.33 131367.33 133359.00 131346.00C133359.00 131313.67 133359.00 131281.33 133359.00 131249.00C133348.00 131227.67 133337.00 131206.33 133326.00 131185.00C133326.00 131174.33 133326.00 131163.67 133326.00 131153.00C133315.33 131153.00 133304.67 131153.00 133294.00 131153.00C133283.33 131131.33 133272.67 131109.67 133262.00 131088.00C133240.67 131099.00 133219.33 131110.00 133198.00 131121.00C133198.00 131099.33 133198.00 131077.67 133198.00 131056.00C133208.67 131045.33 133219.33 131034.67 133230.00 131024.00C133230.00 131013.33 133230.00 131002.67 133230.00 130992.00C133240.67 130981.33 133251.33 130970.67 133262.00 130960.00C133208.33 130960.00 133154.67 130960.00 133101.00 130960.00C133101.00 130970.67 133101.00 130981.33 133101.00 130992.00C133089.38 130969.47 133078.90 130946.32 133066.50 130924.21C133045.99 130893.15 133025.51 130862.07 133005.00 130831.00C133005.00 130820.33 133005.00 130809.67 133005.00 130799.00C132994.33 130788.33 132983.67 130777.67 132973.00 130767.00C132983.67 130734.67 132994.33 130702.33 133005.00 130670.00C132972.67 130638.00 132940.33 130606.00 132908.00 130574.00C132929.67 130563.33 132951.33 130552.67 132973.00 130542.00C132973.00 130520.67 132973.00 130499.33 132973.00 130478.00C132994.33 130478.00 133015.67 130478.00 133037.00 130478.00C133037.00 130467.00 133037.00 130456.00 133037.00 130445.00C133004.67 130434.33 132972.33 130423.67 132940.00 130413.00C132929.33 130402.33 132918.67 130391.67 132908.00 130381.00C132897.33 130381.00 132886.67 130381.00 132876.00 130381.00C132886.67 130349.00 132897.33 130317.00 132908.00 130285.00C132897.03 130261.97 132884.84 130239.49 132874.69 130216.09C132853.64 130153.11 132832.75 130090.08 132812.00 130027.00C132822.67 130016.33 132833.33 130005.67 132844.00 129995.00C132844.10 129973.51 132843.80 129952.03 132844.15 129930.54C132854.76 129898.36 132865.38 129866.18 132876.00 129834.00C132864.39 129823.10 132854.11 129810.63 132841.60 129800.79C132821.07 129790.52 132800.53 129780.27 132780.00 129770.00C132769.33 129748.67 132758.67 129727.33 132748.00 129706.00C132726.33 129706.00 132704.67 129706.00 132683.00 129706.00C132672.33 129684.67 132661.67 129663.33 132651.00 129642.00C132651.00 129620.33 132651.00 129598.67 132651.00 129577.00C132619.00 129577.00 132587.00 129577.00 132555.00 129577.00C132533.33 129555.67 132511.67 129534.33 132490.00 129513.00C132468.67 129470.00 132447.33 129427.00 132426.00 129384.00C132447.89 129329.75 132469.12 129275.22 132491.44 129221.15C132512.63 129179.10 132533.82 129137.05 132555.00 129095.00C132533.33 129052.00 132511.67 129009.00 132490.00 128966.00C132511.67 128955.33 132533.33 128944.67 132555.00 128934.00C132565.67 128902.00 132576.33 128870.00 132587.00 128838.00C132597.67 128838.00 132608.33 128838.00 132619.00 128838.00C132629.67 128827.33 132640.33 128816.67 132651.00 128806.00C132661.67 128763.00 132672.33 128720.00 132683.00 128677.00C132693.67 128677.00 132704.33 128677.00 132715.00 128677.00C132704.33 128655.67 132693.67 128634.33 132683.00 128613.00C132704.67 128591.33 132726.33 128569.67 132748.00 128548.00C132748.00 128537.33 132748.00 128526.67 132748.00 128516.00C132758.67 128505.33 132769.33 128494.67 132780.00 128484.00C132801.33 128494.67 132822.67 128505.33 132844.00 128516.00C132897.67 128516.00 132951.33 128516.00 133005.00 128516.00C133005.00 128505.33 133005.00 128494.67 133005.00 128484.00C133015.90 128472.39 133028.37 128462.11 133038.21 128449.60C133048.47 128429.07 133058.73 128408.53 133069.00 128388.00C133069.00 128366.33 133069.00 128344.67 133069.00 128323.00C133079.67 128301.67 133090.33 128280.33 133101.00 128259.00C133101.00 128237.67 133101.00 128216.33 133101.00 128195.00C133079.67 128184.33 133058.33 128173.67 133037.00 128163.00C133037.00 128130.67 133037.00 128098.33 133037.00 128066.00C133015.67 128055.33 132994.33 128044.67 132973.00 128034.00C132973.00 128001.67 132973.00 127969.33 132973.00 127937.00C132962.00 127937.00 132951.00 127937.00 132940.00 127937.00C132918.67 127894.33 132897.33 127851.67 132876.00 127809.00C132886.67 127798.33 132897.33 127787.67 132908.00 127777.00C132897.33 127755.33 132886.67 127733.67 132876.00 127712.00C132876.00 127690.67 132876.00 127669.33 132876.00 127648.00C132865.33 127648.00 132854.67 127648.00 132844.00 127648.00C132833.33 127626.67 132822.67 127605.33 132812.00 127584.00C132768.87 127573.22 132725.66 127562.74 132682.57 127551.78C132661.38 127540.85 132640.19 127529.93 132619.00 127519.00C132597.67 127519.00 132576.33 127519.00 132555.00 127519.00C132522.67 127487.00 132490.33 127455.00 132458.00 127423.00C132426.00 127412.33 132394.00 127401.67 132362.00 127391.00C132351.33 127369.67 132340.67 127348.33 132330.00 127327.00C132308.33 127327.00 132286.67 127327.00 132265.00 127327.00C132233.00 127305.33 132201.00 127283.67 132169.00 127262.00C132169.00 127251.33 132169.00 127240.67 132169.00 127230.00C132179.67 127219.33 132190.33 127208.67 132201.00 127198.00C132201.00 127187.33 132201.00 127176.67 132201.00 127166.00C132190.33 127166.00 132179.67 127166.00 132169.00 127166.00C132169.00 127155.33 132169.00 127144.67 132169.00 127134.00C132179.67 127123.00 132190.33 127112.00 132201.00 127101.00C132190.33 127101.00 132179.67 127101.00 132169.00 127101.00C132179.67 127090.33 132190.33 127079.67 132201.00 127069.00C132190.33 127069.00 132179.67 127069.00 132169.00 127069.00C132179.67 127058.33 132190.33 127047.67 132201.00 127037.00C132190.33 127026.33 132179.67 127015.67 132169.00 127005.00C132179.67 126983.67 132190.33 126962.33 132201.00 126941.00C132190.33 126941.00 132179.67 126941.00 132169.00 126941.00C132169.00 126908.67 132169.00 126876.33 132169.00 126844.00C132158.33 126812.00 132147.67 126780.00 132137.00 126748.00C132158.33 126737.33 132179.67 126726.67 132201.00 126716.00C132190.33 126705.00 132179.67 126694.00 132169.00 126683.00C132179.67 126683.00 132190.33 126683.00 132201.00 126683.00C132201.00 126651.00 132201.00 126619.00 132201.00 126587.00C132211.67 126587.00 132222.33 126587.00 132233.00 126587.00C132233.00 126555.00 132233.00 126523.00 132233.00 126491.00C132243.67 126469.33 132254.33 126447.67 132265.00 126426.00C132275.67 126426.00 132286.33 126426.00 132297.00 126426.00C132318.67 126394.00 132340.33 126362.00 132362.00 126330.00C132372.67 126330.00 132383.33 126330.00 132394.00 126330.00C132415.33 126276.33 132436.67 126222.67 132458.00 126169.00C132458.00 126158.33 132458.00 126147.67 132458.00 126137.00C132436.16 126103.32 132413.23 126070.31 132392.11 126036.20C132382.07 126016.13 132372.03 125996.07 132362.00 125976.00C132351.33 125976.00 132340.67 125976.00 132330.00 125976.00C132330.00 125944.00 132330.00 125912.00 132330.00 125880.00C132319.00 125858.33 132308.00 125836.67 132297.00 125815.00C132286.18 125814.90 132275.36 125815.21 132264.54 125814.85C132232.69 125804.23 132200.85 125793.62 132169.00 125783.00C132147.67 125740.33 132126.33 125697.67 132105.00 125655.00C132062.00 125644.00 132019.00 125633.00 131976.00 125622.00C131954.67 125600.67 131933.33 125579.33 131912.00 125558.00C131890.33 125558.00 131868.67 125558.00 131847.00 125558.00C131825.67 125526.00 131804.33 125494.00 131783.00 125462.00C131729.33 125462.00 131675.67 125462.00 131622.00 125462.00C131611.33 125429.67 131600.67 125397.33 131590.00 125365.00C131547.00 125343.67 131504.00 125322.33 131461.00 125301.00C131461.00 125268.67 131461.00 125236.33 131461.00 125204.00C131482.67 125193.33 131504.33 125182.67 131526.00 125172.00C131526.00 125150.67 131526.00 125129.33 131526.00 125108.00C131515.18 125086.57 131504.71 125064.97 131493.66 125043.66C131440.11 124990.11 131386.55 124936.55 131333.00 124883.00C131333.00 124872.33 131333.00 124861.67 131333.00 124851.00C131311.67 124872.33 131290.33 124893.67 131269.00 124915.00C131247.33 124915.00 131225.67 124915.00 131204.00 124915.00C131182.67 124936.33 131161.33 124957.67 131140.00 124979.00C131097.00 124979.00 131054.00 124979.00 131011.00 124979.00C130989.67 124989.67 130968.33 125000.33 130947.00 125011.00C130947.00 125022.00 130947.00 125033.00 130947.00 125044.00C130904.00 125044.00 130861.00 125044.00 130818.00 125044.00C130796.67 125054.67 130775.33 125065.33 130754.00 125076.00C130754.00 125108.00 130754.00 125140.00 130754.00 125172.00C130722.00 125204.33 130690.00 125236.67 130658.00 125269.00C130636.33 125269.00 130614.67 125269.00 130593.00 125269.00C130571.67 125279.67 130550.33 125290.33 130529.00 125301.00C130493.32 125265.59 130458.02 125229.79 130422.78 125193.94C130404.54 125175.93 130386.24 125158.00 130368.00 125140.00C130368.00 125118.67 130368.00 125097.33 130368.00 125076.00C130314.33 125033.00 130260.67 124990.00 130207.00 124947.00C130196.18 124947.10 130185.36 124946.79 130174.54 124947.15C130141.93 124958.28 130108.99 124968.48 130076.60 124980.21C130056.07 124990.47 130035.53 125000.73 130015.00 125011.00C129982.67 125000.33 129950.33 124989.67 129918.00 124979.00C129864.33 124979.00 129810.67 124979.00 129757.00 124979.00C129703.67 125000.67 129650.33 125022.33 129597.00 125044.00C129575.33 125033.00 129553.67 125022.00 129532.00 125011.00C129521.33 125011.00 129510.67 125011.00 129500.00 125011.00C129478.53 125043.43 129457.27 125076.00 129435.66 125108.34C129425.11 125118.89 129414.55 125129.45 129404.00 125140.00C129404.00 125172.33 129404.00 125204.67 129404.00 125237.00C129414.67 125237.00 129425.33 125237.00 129436.00 125237.00C129446.67 125247.67 129457.33 125258.33 129468.00 125269.00C129467.85 125279.81 129468.29 125290.63 129467.78 125301.43C129457.19 125322.62 129446.59 125343.81 129436.00 125365.00C129436.00 125408.00 129436.00 125451.00 129436.00 125494.00C129425.18 125515.43 129414.71 125537.03 129403.66 125558.34C129371.44 125590.56 129339.22 125622.78 129307.00 125655.00C129296.33 125655.00 129285.67 125655.00 129275.00 125655.00C129232.00 125633.33 129189.00 125611.67 129146.00 125590.00C129124.67 125558.00 129103.33 125526.00 129082.00 125494.00C129071.33 125440.33 129060.67 125386.67 129050.00 125333.00C129007.00 125301.00 128964.00 125269.00 128921.00 125237.00C128910.33 125237.00 128899.67 125237.00 128889.00 125237.00C128878.33 125247.67 128867.67 125258.33 128857.00 125269.00C128857.00 125322.67 128857.00 125376.33 128857.00 125430.00C128835.56 125472.79 128814.26 125515.65 128792.73 125558.40C128771.15 125590.60 128749.58 125622.80 128728.00 125655.00C128696.00 125644.00 128664.00 125633.00 128632.00 125622.00C128621.33 125654.33 128610.67 125686.67 128600.00 125719.00C128557.00 125740.33 128514.00 125761.67 128471.00 125783.00C128439.00 125783.00 128407.00 125783.00 128375.00 125783.00C128342.67 125772.33 128310.33 125761.67 128278.00 125751.00C128256.67 125729.67 128235.33 125708.33 128214.00 125687.00C128181.67 125676.33 128149.33 125665.67 128117.00 125655.00C128106.33 125622.67 128095.67 125590.33 128085.00 125558.00C128063.67 125558.00 128042.33 125558.00 128021.00 125558.00C128010.33 125547.33 127999.67 125536.67 127989.00 125526.00C127978.22 125493.87 127967.70 125461.66 127956.75 125429.59C127924.50 125376.06 127892.25 125322.53 127860.00 125269.00C127838.67 125258.33 127817.33 125247.67 127796.00 125237.00C127785.33 125226.00 127774.67 125215.00 127764.00 125204.00C127731.67 125204.00 127699.33 125204.00 127667.00 125204.00C127656.33 125215.00 127645.67 125226.00 127635.00 125237.00C127645.67 125247.67 127656.33 125258.33 127667.00 125269.00C127656.36 125322.83 127645.48 125376.62 127635.00 125430.48C127635.00 125440.99 127635.00 125451.49 127635.00 125462.00C127688.67 125515.33 127742.33 125568.67 127796.00 125622.00C127796.00 125633.00 127796.00 125644.00 127796.00 125655.00C127785.33 125676.33 127774.67 125697.67 127764.00 125719.00C127753.19 125719.14 127742.37 125718.71 127731.57 125719.21C127710.05 125729.81 127688.52 125740.40 127667.00 125751.00C127613.67 125751.00 127560.33 125751.00 127507.00 125751.00C127474.13 125719.55 127442.19 125687.14 127410.00 125655.00C127378.00 125644.00 127346.00 125633.00 127314.00 125622.00C127281.67 125622.00 127249.33 125622.00 127217.00 125622.00C127195.67 125633.00 127174.33 125644.00 127153.00 125655.00C127110.00 125655.00 127067.00 125655.00 127024.00 125655.00C126981.33 125644.00 126938.67 125633.00 126896.00 125622.00C126842.17 125632.97 126788.39 125644.19 126734.52 125655.00C126713.35 125655.00 126692.17 125655.00 126671.00 125655.00C126617.33 125676.33 126563.67 125697.67 126510.00 125719.00C126435.00 125719.00 126360.00 125719.00 126285.00 125719.00C126252.67 125708.33 126220.33 125697.67 126188.00 125687.00C126145.33 125687.00 126102.67 125687.00 126060.00 125687.00C126038.33 125697.67 126016.67 125708.33 125995.00 125719.00C125952.33 125761.67 125909.67 125804.33 125867.00 125847.00C125834.67 125858.00 125802.33 125869.00 125770.00 125880.00C125738.00 125880.00 125706.00 125880.00 125674.00 125880.00C125663.33 125869.00 125652.67 125858.00 125642.00 125847.00C125609.67 125847.00 125577.33 125847.00 125545.00 125847.00C125491.33 125825.67 125437.67 125804.33 125384.00 125783.00C125373.18 125783.10 125362.36 125782.79 125351.54 125783.15C125316.56 125794.39 125282.07 125807.24 125246.73 125817.30C125206.82 125827.19 125166.91 125837.10 125127.00 125847.00C125052.00 125847.00 124977.00 125847.00 124902.00 125847.00C124869.90 125868.80 124837.67 125890.41 124805.66 125912.34C124795.11 125922.89 124784.55 125933.45 124774.00 125944.00C124763.00 125976.00 124752.00 126008.00 124741.00 126040.00C124752.00 126061.67 124763.00 126083.33 124774.00 126105.00C124774.00 126115.67 124774.00 126126.33 124774.00 126137.00C124741.10 126168.64 124708.83 126200.93 124676.78 126233.43C124655.52 126276.29 124634.26 126319.14 124613.00 126362.00C124613.00 126405.00 124613.00 126448.00 124613.00 126491.00C124634.33 126523.00 124655.67 126555.00 124677.00 126587.00C124666.33 126640.67 124655.67 126694.33 124645.00 126748.00C124666.33 126801.67 124687.67 126855.33 124709.00 126909.00C124709.00 126951.67 124709.00 126994.33 124709.00 127037.00C124687.67 127080.00 124666.33 127123.00 124645.00 127166.00C124634.33 127176.67 124623.67 127187.33 124613.00 127198.00C124591.33 127198.00 124569.67 127198.00 124548.00 127198.00C124451.67 127133.67 124355.33 127069.33 124259.00 127005.00C124248.33 126994.33 124237.67 126983.67 124227.00 126973.00C124237.60 126789.50 124248.76 126606.02 124258.99 126422.50C124258.66 126390.02 124259.74 126357.50 124258.38 126325.06C124247.91 126241.04 124237.47 126157.02 124227.00 126073.00C124204.76 126017.78 124183.51 125962.14 124160.62 125907.19C124150.76 125887.12 124140.87 125867.06 124131.00 125847.00C124087.86 125836.23 124044.66 125825.73 124001.57 125814.78C123980.38 125804.19 123959.19 125793.59 123938.00 125783.00C123895.00 125783.00 123852.00 125783.00 123809.00 125783.00C123798.09 125794.63 123785.58 125804.90 123775.76 125817.46C123732.40 125904.61 123688.35 125991.44 123645.42 126078.81C123603.62 126173.21 123561.81 126267.60 123520.00 126362.00C123498.18 126383.40 123476.53 126404.97 123454.60 126426.27C123390.40 126469.18 123326.20 126512.09 123262.00 126555.00C123262.00 126565.67 123262.00 126576.33 123262.00 126587.00C123251.19 126586.85 123240.37 126587.29 123229.57 126586.78C123208.20 126576.20 123186.99 126565.30 123165.53 126554.91C123111.85 126544.30 123058.23 126533.46 123004.52 126523.00C122994.01 126523.00 122983.51 126523.00 122973.00 126523.00C122930.00 126458.67 122887.00 126394.33 122844.00 126330.00C122843.90 126308.51 122844.20 126287.03 122843.85 126265.54C122832.58 126232.53 122822.68 126198.99 122810.50 126166.33C122757.34 126070.88 122704.17 125975.44 122651.00 125880.00C122651.00 125794.00 122651.00 125708.00 122651.00 125622.00C122640.33 125600.67 122629.67 125579.33 122619.00 125558.00C122619.00 125504.33 122619.00 125450.67 122619.00 125397.00C122640.67 125311.33 122662.33 125225.67 122684.00 125140.00C122705.33 125118.67 122726.67 125097.33 122748.00 125076.00C122780.00 125076.00 122812.00 125076.00 122844.00 125076.00C122865.67 125065.33 122887.33 125054.67 122909.00 125044.00C122909.00 125001.00 122909.00 124958.00 122909.00 124915.00C122898.33 124904.33 122887.67 124893.67 122877.00 124883.00C122861.18 124882.67 122845.09 124884.41 122829.61 124880.12C122781.08 124870.41 122732.54 124860.70 122684.00 124851.00C122651.67 124861.67 122619.33 124872.33 122587.00 124883.00C122555.00 124904.33 122523.00 124925.67 122491.00 124947.00C122458.67 124957.67 122426.33 124968.33 122394.00 124979.00C122265.17 124968.35 122136.35 124957.59 122007.52 124947.00C121975.68 124947.00 121943.84 124947.00 121912.00 124947.00C121859.08 124894.01 121805.08 124842.08 121753.14 124788.12C121747.02 124780.53 121744.05 124771.01 121739.29 124762.57C121721.86 124727.71 121704.43 124692.86 121687.00 124658.00C121651.55 124646.71 121616.57 124633.90 121580.79 124623.70C121541.19 124613.81 121501.60 124603.90 121462.00 124594.00C121451.33 124604.67 121440.67 124615.33 121430.00 124626.00C121397.51 124626.08 121365.02 124625.84 121332.53 124626.12C121288.60 124637.32 121244.45 124647.69 121200.66 124659.43C121169.77 124669.62 121138.88 124679.80 121108.00 124690.00C121108.00 124700.67 121108.00 124711.33 121108.00 124722.00C120979.33 124722.00 120850.67 124722.00 120722.00 124722.00C120668.17 124711.36 120614.38 124700.48 120560.52 124690.00C120485.52 124690.05 120410.52 124689.89 120335.52 124690.08C120271.68 124700.72 120207.84 124711.36 120144.00 124722.00C120111.67 124743.33 120079.33 124764.67 120047.00 124786.00C119982.67 124786.00 119918.33 124786.00 119854.00 124786.00C119830.16 124774.56 119807.07 124761.49 119782.68 124751.26C119699.45 124720.17 119616.23 124689.09 119533.00 124658.00C119447.00 124668.67 119361.00 124679.33 119275.00 124690.00C119253.67 124679.33 119232.33 124668.67 119211.00 124658.00C119189.67 124658.00 119168.33 124658.00 119147.00 124658.00C119093.33 124604.33 119039.67 124550.67 118986.00 124497.00C118964.57 124486.18 118942.97 124475.70 118921.65 124464.66C118910.77 124454.11 118899.88 124443.55 118889.00 124433.00C118825.00 124433.00 118761.00 124433.00 118697.00 124433.00C118664.67 124443.67 118632.33 124454.33 118600.00 124465.00C118589.33 124465.00 118578.67 124465.00 118568.00 124465.00C118557.33 124454.33 118546.67 124443.67 118536.00 124433.00C118493.00 124422.33 118450.00 124411.67 118407.00 124401.00C118375.00 124401.00 118343.00 124401.00 118311.00 124401.00C118268.00 124422.33 118225.00 124443.67 118182.00 124465.00C118117.67 124443.67 118053.33 124422.33 117989.00 124401.00C117946.33 124411.67 117903.67 124422.33 117861.00 124433.00C117850.00 124433.00 117839.00 124433.00 117828.00 124433.00C117806.67 124422.33 117785.33 124411.67 117764.00 124401.00C117732.00 124401.00 117700.00 124401.00 117668.00 124401.00C117668.00 124379.33 117668.00 124357.67 117668.00 124336.00C117635.67 124325.33 117603.33 124314.67 117571.00 124304.00C117506.67 124229.00 117442.33 124154.00 117378.00 124079.00C117313.10 124057.08 117247.84 124036.12 117183.02 124014.01C117162.34 124003.67 117141.67 123993.34 117121.00 123983.00C117078.10 124004.54 117035.10 124025.87 116992.00 124047.00C116960.00 124047.00 116928.00 124047.00 116896.00 124047.00C116874.57 124057.82 116852.97 124068.29 116831.66 124079.34C116810.10 124100.56 116788.55 124121.78 116767.00 124143.00C116713.67 124143.00 116660.33 124143.00 116607.00 124143.00C116595.28 124165.39 116584.68 124188.41 116572.22 124210.38C116540.81 124252.25 116509.40 124294.12 116478.00 124336.00C116456.57 124346.82 116434.97 124357.29 116413.66 124368.34C116392.05 124390.06 116370.22 124411.56 116348.75 124433.42C116316.83 124486.94 116284.92 124540.47 116253.00 124594.00C116242.19 124594.14 116231.37 124593.71 116220.57 124594.21C116199.05 124604.81 116177.52 124615.40 116156.00 124626.00C116145.18 124626.09 116134.35 124625.82 116123.53 124626.13C116043.94 124648.47 115964.65 124671.94 115884.85 124693.52C115803.90 124713.68 115722.95 124733.84 115642.00 124754.00C115620.67 124754.00 115599.33 124754.00 115578.00 124754.00C115578.00 124764.67 115578.00 124775.33 115578.00 124786.00C115545.67 124807.67 115513.33 124829.33 115481.00 124851.00C115438.33 124861.67 115395.67 124872.33 115353.00 124883.00C115309.30 124924.96 115266.96 124968.29 115224.00 125011.00C115159.67 125011.00 115095.33 125011.00 115031.00 125011.00C115031.00 125032.67 115031.00 125054.33 115031.00 125076.00C114998.90 125097.47 114966.67 125118.74 114934.66 125140.34C114913.10 125161.56 114891.55 125182.78 114870.00 125204.00C114838.00 125204.00 114806.00 125204.00 114774.00 125204.00C114774.00 125215.00 114774.00 125226.00 114774.00 125237.00C114720.33 125312.00 114666.67 125387.00 114613.00 125462.00C114601.37 125439.15 114590.97 125415.64 114578.49 125393.24C114558.00 125362.49 114537.49 125331.75 114517.00 125301.00C114527.67 125290.33 114538.33 125279.67 114549.00 125269.00C114559.67 125236.67 114570.33 125204.33 114581.00 125172.00C114581.00 125129.33 114581.00 125086.67 114581.00 125044.00C114559.67 124990.33 114538.33 124936.67 114517.00 124883.00C114549.00 124808.00 114581.00 124733.00 114613.00 124658.00C114613.00 124625.67 114613.00 124593.33 114613.00 124561.00C114591.16 124527.65 114568.21 124495.00 114547.11 124461.20C114537.07 124441.14 114527.03 124421.07 114517.00 124401.00C114517.00 124304.33 114517.00 124207.67 114517.00 124111.00C114495.33 124089.67 114473.67 124068.33 114452.00 124047.00C114452.00 124036.33 114452.00 124025.67 114452.00 124015.00z"},"br-16":{"name":"Paraná","path":"M97540.00 151634.00C97550.66 151623.33 97561.34 151612.67 97572.00 151602.00C97572.00 151580.67 97572.00 151559.33 97572.00 151538.00C97603.85 151473.84 97635.58 151409.62 97667.70 151345.60C97689.33 151313.31 97711.26 151281.22 97733.00 151249.00C97765.00 151227.33 97797.00 151205.67 97829.00 151184.00C97872.04 151130.25 97915.14 151076.55 97958.15 151022.78C97979.53 150990.59 98001.14 150958.54 98022.37 150926.26C98043.58 150883.50 98064.79 150840.75 98086.00 150798.00C98097.00 150734.00 98108.00 150670.00 98119.00 150606.00C98140.34 150573.67 98161.66 150541.33 98183.00 150509.00C98193.67 150477.00 98204.33 150445.00 98215.00 150413.00C98236.34 150380.67 98257.66 150348.33 98279.00 150316.00C98300.67 150316.00 98322.33 150316.00 98344.00 150316.00C98354.67 150294.67 98365.33 150273.33 98376.00 150252.00C98365.33 150209.00 98354.67 150166.00 98344.00 150123.00C98333.00 150101.67 98322.00 150080.33 98311.00 150059.00C98289.66 150037.67 98268.34 150016.33 98247.00 149995.00C98236.33 149973.33 98225.67 149951.67 98215.00 149930.00C98225.67 149908.67 98236.33 149887.33 98247.00 149866.00C98236.33 149834.00 98225.67 149802.00 98215.00 149770.00C98215.00 149737.67 98215.00 149705.33 98215.00 149673.00C98247.00 149587.33 98279.00 149501.67 98311.00 149416.00C98311.00 149351.67 98311.00 149287.33 98311.00 149223.00C98332.67 149180.00 98354.33 149137.00 98376.00 149094.00C98408.30 148965.32 98440.07 148836.50 98472.09 148707.75C98515.07 148579.51 98558.30 148451.34 98601.00 148323.00C98622.33 148312.00 98643.67 148301.00 98665.00 148290.00C98675.82 148268.19 98686.91 148246.52 98697.55 148224.63C98719.15 148170.99 98740.95 148117.43 98762.42 148063.74C98773.25 148031.50 98783.78 147999.17 98794.79 147967.00C98815.86 147914.00 98836.93 147861.00 98858.00 147808.00C98868.66 147690.24 98879.38 147572.49 98890.00 147454.73C98890.00 147433.15 98890.00 147411.58 98890.00 147390.00C98868.54 147314.40 98846.92 147238.84 98825.56 147163.22C98815.04 147120.81 98804.52 147078.41 98794.00 147036.00C98815.33 146961.00 98836.67 146886.00 98858.00 146811.00C98901.00 146768.33 98944.00 146725.67 98987.00 146683.00C99019.00 146640.00 99051.00 146597.00 99083.00 146554.00C99104.49 146500.10 99125.77 146446.11 99147.38 146392.26C99158.25 146371.17 99169.13 146350.09 99180.00 146329.00C99158.33 146243.33 99136.67 146157.67 99115.00 146072.00C99093.66 146039.67 99072.34 146007.33 99051.00 145975.00C98997.33 145921.67 98943.67 145868.33 98890.00 145815.00C98879.33 145782.67 98868.67 145750.33 98858.00 145718.00C98858.00 145653.67 98858.00 145589.33 98858.00 145525.00C98836.67 145471.67 98815.33 145418.33 98794.00 145365.00C98794.00 145343.33 98794.00 145321.67 98794.00 145300.00C98783.34 145289.33 98772.66 145278.67 98762.00 145268.00C98783.33 145225.00 98804.67 145182.00 98826.00 145139.00C98868.67 145107.00 98911.33 145075.00 98954.00 145043.00C98986.41 144999.95 99018.73 144956.83 99051.19 144913.81C99061.79 144903.21 99072.40 144892.60 99083.00 144882.00C99093.75 144881.96 99104.51 144882.09 99115.26 144881.94C99158.17 144871.29 99201.09 144860.65 99244.00 144850.00C99361.66 144764.33 99479.34 144678.67 99597.00 144593.00C99661.34 144560.67 99725.66 144528.33 99790.00 144496.00C99822.33 144464.00 99854.67 144432.00 99887.00 144400.00C99897.68 144378.58 99908.46 144357.20 99919.09 144335.75C99951.39 144239.17 99983.69 144142.58 100016.00 144046.00C100016.00 144003.33 100016.00 143960.67 100016.00 143918.00C100005.00 143885.67 99994.00 143853.33 99983.00 143821.00C99994.00 143799.67 100005.00 143778.33 100016.00 143757.00C100005.00 143746.33 99994.00 143735.67 99983.00 143725.00C99994.00 143692.58 100005.11 143660.19 100016.04 143627.74C100026.70 143563.49 100037.35 143499.25 100048.00 143435.00C100080.00 143381.67 100112.00 143328.33 100144.00 143275.00C100144.13 143263.58 100143.73 143252.13 100144.21 143240.72C100154.81 143177.15 100165.40 143113.57 100176.00 143050.00C100186.83 143017.44 100197.35 142984.75 100208.38 142952.26C100219.25 142931.08 100230.28 142909.97 100241.06 142888.74C100251.75 142845.39 100262.70 142802.10 100273.21 142758.72C100283.81 142694.81 100294.40 142630.91 100305.00 142567.00C100326.33 142502.67 100347.67 142438.33 100369.00 142374.00C100369.00 142309.67 100369.00 142245.33 100369.00 142181.00C100412.00 142106.00 100455.00 142031.00 100498.00 141956.00C100498.00 141945.33 100498.00 141934.67 100498.00 141924.00C100519.33 141913.33 100540.67 141902.67 100562.00 141892.00C100572.67 141881.33 100583.33 141870.67 100594.00 141860.00C100637.00 141870.67 100680.00 141881.33 100723.00 141892.00C100808.67 141849.00 100894.33 141806.00 100980.00 141763.00C101076.33 141698.67 101172.67 141634.33 101269.00 141570.00C101344.33 141548.67 101419.67 141527.33 101495.00 141506.00C101505.71 141495.25 101516.50 141484.58 101527.16 141473.78C101580.77 141398.85 101634.39 141323.93 101688.00 141249.00C101709.33 141206.00 101730.67 141163.00 101752.00 141120.00C101752.00 141109.33 101752.00 141098.67 101752.00 141088.00C101773.35 141034.24 101794.77 140980.52 101816.07 140926.74C101837.38 140851.83 101858.69 140776.91 101880.00 140702.00C101923.00 140637.67 101966.00 140573.33 102009.00 140509.00C102009.00 140487.67 102009.00 140466.33 102009.00 140445.00C102052.00 140402.00 102095.00 140359.00 102138.00 140316.00C102138.00 140112.67 102138.00 139909.33 102138.00 139706.00C102170.00 139663.00 102202.00 139620.00 102234.00 139577.00C102244.67 139534.00 102255.33 139491.00 102266.00 139448.00C102298.60 139426.57 102331.06 139404.92 102363.74 139383.63C102384.82 139373.09 102405.91 139362.55 102427.00 139352.00C102448.33 139330.67 102469.67 139309.33 102491.00 139288.00C102491.00 139277.00 102491.00 139266.00 102491.00 139255.00C102512.67 139223.00 102534.33 139191.00 102556.00 139159.00C102599.05 139137.54 102642.00 139115.86 102685.13 139094.55C102738.42 139073.03 102791.71 139051.52 102845.00 139030.00C102898.67 138998.00 102952.33 138966.00 103006.00 138934.00C103038.00 138923.33 103070.00 138912.67 103102.00 138902.00C103134.33 138869.67 103166.67 138837.33 103199.00 138805.00C103199.00 138794.33 103199.00 138783.67 103199.00 138773.00C103209.75 138772.96 103220.51 138773.09 103231.26 138772.94C103273.84 138762.29 103316.42 138751.65 103359.00 138741.00C103380.67 138708.67 103402.33 138676.33 103424.00 138644.00C103434.67 138633.33 103445.33 138622.67 103456.00 138612.00C103499.17 138590.41 103542.31 138568.76 103585.76 138547.75C103713.93 138505.11 103841.92 138461.93 103970.00 138419.00C103981.00 138419.00 103992.00 138419.00 104003.00 138419.00C104003.00 138408.33 104003.00 138397.67 104003.00 138387.00C104067.00 138387.00 104131.00 138387.00 104195.00 138387.00C104216.36 138366.41 104237.58 138345.68 104258.42 138324.57C104269.68 138313.32 104280.95 138302.08 104292.16 138290.79C104367.11 138194.19 104442.05 138097.60 104517.00 138001.00C104527.67 138001.00 104538.33 138001.00 104549.00 138001.00C104581.33 137947.67 104613.67 137894.33 104646.00 137841.00C104667.48 137905.28 104688.84 137969.61 104710.00 138034.00C104731.33 138001.67 104752.67 137969.33 104774.00 137937.00C104817.00 137926.33 104860.00 137915.67 104903.00 137905.00C104939.92 137868.13 104976.82 137831.25 105013.31 137793.96C105019.41 137787.94 105025.22 137781.51 105031.51 137775.75C105053.00 137765.17 105074.50 137754.58 105096.00 137744.00C105096.00 137733.33 105096.00 137722.67 105096.00 137712.00C105138.67 137690.67 105181.33 137669.33 105224.00 137648.00C105235.00 137637.33 105246.00 137626.67 105257.00 137616.00C105332.00 137605.00 105407.00 137594.00 105482.00 137583.00C105514.00 137594.00 105546.00 137605.00 105578.00 137616.00C105653.00 137669.33 105728.00 137722.67 105803.00 137776.00C105824.33 137787.00 105845.67 137798.00 105867.00 137809.00C105920.67 137787.33 105974.33 137765.67 106028.00 137744.00C106071.00 137744.00 106114.00 137744.00 106157.00 137744.00C106167.67 137754.67 106178.33 137765.33 106189.00 137776.00C106232.00 137787.00 106275.00 137798.00 106318.00 137809.00C106360.67 137830.33 106403.33 137851.67 106446.00 137873.00C106478.33 137873.00 106510.67 137873.00 106543.00 137873.00C106607.33 137851.67 106671.67 137830.33 106736.00 137809.00C106832.51 137744.60 106928.94 137680.05 107025.50 137615.74C107046.67 137604.83 107067.83 137593.92 107089.00 137583.00C107099.67 137583.00 107110.33 137583.00 107121.00 137583.00C107142.67 137615.33 107164.33 137647.67 107186.00 137680.00C107228.67 137723.00 107271.33 137766.00 107314.00 137809.00C107324.67 137809.00 107335.33 137809.00 107346.00 137809.00C107367.73 137819.73 107389.51 137830.37 107411.22 137841.15C107443.15 137862.42 107475.07 137883.72 107507.00 137905.00C107517.67 137905.00 107528.33 137905.00 107539.00 137905.00C107592.67 137873.00 107646.33 137841.00 107700.00 137809.00C107721.33 137809.00 107742.67 137809.00 107764.00 137809.00C107764.00 137798.00 107764.00 137787.00 107764.00 137776.00C107785.67 137776.00 107807.33 137776.00 107829.00 137776.00C107839.67 137787.00 107850.33 137798.00 107861.00 137809.00C107871.67 137809.00 107882.33 137809.00 107893.00 137809.00C107914.72 137819.79 107936.33 137830.82 107958.13 137841.45C108011.42 137862.63 108064.71 137883.81 108118.00 137905.00C108193.00 137905.00 108268.00 137905.00 108343.00 137905.00C108375.33 137915.67 108407.67 137926.33 108440.00 137937.00C108461.33 137915.67 108482.67 137894.33 108504.00 137873.00C108525.43 137862.33 108546.79 137851.52 108568.26 137840.94C108611.17 137830.29 108654.09 137819.65 108697.00 137809.00C108707.70 137819.75 108718.51 137830.41 108729.15 137841.22C108750.43 137873.15 108771.72 137905.07 108793.00 137937.00C108793.00 137990.67 108793.00 138044.33 108793.00 138098.00C108803.67 138098.00 108814.33 138098.00 108825.00 138098.00C108870.62 138075.27 108916.39 138052.84 108961.92 138029.93C108980.69 138020.26 108999.43 138010.50 109018.26 138000.94C109061.17 137990.29 109104.09 137979.65 109147.00 137969.00C109136.33 137904.67 109125.67 137840.33 109115.00 137776.00C109115.04 137765.25 109114.91 137754.49 109115.06 137743.74C109125.71 137701.16 109136.35 137658.58 109147.00 137616.00C109147.06 137604.92 109146.89 137593.83 109147.08 137582.75C109157.72 137550.83 109168.36 137518.92 109179.00 137487.00C109200.74 137454.95 109222.38 137422.82 109244.19 137390.81C109254.79 137379.87 109265.40 137368.94 109276.00 137358.00C109297.33 137347.33 109318.67 137336.67 109340.00 137326.00C109350.67 137326.00 109361.33 137326.00 109372.00 137326.00C109393.75 137336.96 109415.65 137347.65 109437.32 137358.79C109490.54 137390.87 109543.77 137422.93 109597.00 137455.00C109650.67 137455.00 109704.33 137455.00 109758.00 137455.00C109801.00 137465.67 109844.00 137476.33 109887.00 137487.00C109940.33 137519.00 109993.67 137551.00 110047.00 137583.00C110079.33 137583.00 110111.67 137583.00 110144.00 137583.00C110208.51 137636.88 110273.15 137690.60 110337.57 137744.57C110357.01 137763.91 110376.36 137783.33 110395.31 137803.14C110418.37 137826.60 110441.81 137849.68 110465.00 137873.00C110497.33 137883.67 110529.67 137894.33 110562.00 137905.00C110572.75 137904.95 110583.51 137905.09 110594.26 137904.93C110712.17 137872.94 110830.09 137840.98 110948.00 137809.00C110969.33 137819.67 110990.67 137830.33 111012.00 137841.00C111022.67 137841.00 111033.33 137841.00 111044.00 137841.00C111054.67 137851.67 111065.33 137862.33 111076.00 137873.00C111097.67 137873.00 111119.33 137873.00 111141.00 137873.00C111141.04 137883.75 111140.91 137894.51 111141.06 137905.26C111151.71 137948.17 111162.35 137991.09 111173.00 138034.00C111183.67 138055.33 111194.33 138076.67 111205.00 138098.00C111237.00 138098.00 111269.00 138098.00 111301.00 138098.00C111333.33 138076.67 111365.67 138055.33 111398.00 138034.00C111473.00 138034.00 111548.00 138034.00 111623.00 138034.00C111644.40 138044.73 111665.85 138055.35 111687.21 138066.16C111730.14 138098.11 111773.07 138130.05 111816.00 138162.00C111848.23 138172.83 111880.59 138183.36 111912.75 138194.38C111934.17 138205.25 111955.58 138216.13 111977.00 138227.00C111987.67 138216.00 111998.33 138205.00 112009.00 138194.00C112051.67 138183.33 112094.33 138172.67 112137.00 138162.00C112147.67 138172.67 112158.33 138183.33 112169.00 138194.00C112190.67 138194.00 112212.33 138194.00 112234.00 138194.00C112276.67 138172.67 112319.33 138151.33 112362.00 138130.00C112373.00 138130.00 112384.00 138130.00 112395.00 138130.00C112427.00 138087.00 112459.00 138044.00 112491.00 138001.00C112523.00 138001.00 112555.00 138001.00 112587.00 138001.00C112630.00 138022.67 112673.00 138044.33 112716.00 138066.00C112737.33 138066.00 112758.67 138066.00 112780.00 138066.00C112801.67 138055.33 112823.33 138044.67 112845.00 138034.00C112887.67 138044.67 112930.33 138055.33 112973.00 138066.00C112994.75 138066.04 113016.51 138065.91 113038.26 138066.06C113080.84 138076.71 113123.42 138087.35 113166.00 138098.00C113176.75 138097.94 113187.50 138098.11 113198.25 138097.92C113230.50 138087.28 113262.75 138076.64 113295.00 138066.00C113316.33 138076.67 113337.67 138087.33 113359.00 138098.00C113380.33 138119.33 113401.67 138140.67 113423.00 138162.00C113434.00 138162.00 113445.00 138162.00 113456.00 138162.00C113466.67 138205.00 113477.33 138248.00 113488.00 138291.00C113520.00 138312.33 113552.00 138333.67 113584.00 138355.00C113594.75 138355.06 113605.50 138354.89 113616.25 138355.08C113648.73 138365.88 113681.33 138376.39 113713.74 138387.37C113734.90 138397.97 113756.09 138408.49 113777.22 138419.15C113809.48 138440.76 113841.74 138462.38 113874.00 138484.00C113938.33 138505.33 114002.67 138526.67 114067.00 138548.00C114152.67 138548.00 114238.33 138548.00 114324.00 138548.00C114409.67 138591.00 114495.33 138634.00 114581.00 138677.00C114602.33 138677.00 114623.67 138677.00 114645.00 138677.00C114666.67 138666.00 114688.33 138655.00 114710.00 138644.00C114742.00 138644.00 114774.00 138644.00 114806.00 138644.00C114827.33 138676.33 114848.67 138708.67 114870.00 138741.00C114881.00 138741.00 114892.00 138741.00 114903.00 138741.00C114924.33 138730.33 114945.67 138719.67 114967.00 138709.00C115020.67 138709.00 115074.33 138709.00 115128.00 138709.00C115138.75 138719.70 115149.41 138730.50 115160.22 138741.15C115224.48 138784.10 115288.74 138827.05 115353.00 138870.00C115374.33 138912.67 115395.67 138955.33 115417.00 138998.00C115427.67 139008.67 115438.33 139019.33 115449.00 139030.00C115459.67 139062.33 115470.33 139094.67 115481.00 139127.00C115513.33 139137.67 115545.67 139148.33 115578.00 139159.00C115577.89 139180.67 115578.22 139202.36 115577.84 139224.01C115567.22 139288.01 115556.61 139352.00 115546.00 139416.00C115556.67 139426.67 115567.33 139437.33 115578.00 139448.00C115642.33 139448.00 115706.67 139448.00 115771.00 139448.00C115791.43 139468.31 115811.73 139488.76 115831.67 139509.56C115834.89 139515.16 115841.68 139512.35 115847.00 139513.00C115864.33 139513.00 115881.67 139513.00 115899.00 139513.00C115931.33 139502.00 115963.67 139491.00 115996.00 139480.00C116038.67 139405.00 116081.33 139330.00 116124.00 139255.00C116144.15 139234.73 116164.43 139214.58 116185.07 139194.81C116187.80 139190.26 116192.60 139190.82 116197.25 139191.00C116226.50 139191.00 116255.75 139191.00 116285.00 139191.00C116295.67 139212.33 116306.33 139233.67 116317.00 139255.00C116349.57 139266.16 116382.24 139277.04 116414.74 139288.37C116435.82 139298.91 116456.91 139309.45 116478.00 139320.00C116499.33 139309.33 116520.67 139298.67 116542.00 139288.00C116563.67 139266.33 116585.33 139244.67 116607.00 139223.00C116649.67 139233.67 116692.33 139244.33 116735.00 139255.00C116756.67 139266.00 116778.33 139277.00 116800.00 139288.00C116810.67 139298.67 116821.33 139309.33 116832.00 139320.00C116842.67 139341.33 116853.33 139362.67 116864.00 139384.00C116874.67 139394.67 116885.33 139405.33 116896.00 139416.00C116917.33 139426.67 116938.67 139437.33 116960.00 139448.00C116981.67 139426.67 117003.33 139405.33 117025.00 139384.00C117035.67 139384.00 117046.33 139384.00 117057.00 139384.00C117089.00 139405.33 117121.00 139426.67 117153.00 139448.00C117174.33 139437.33 117195.67 139426.67 117217.00 139416.00C117249.33 139426.67 117281.67 139437.33 117314.00 139448.00C117324.67 139426.67 117335.33 139405.33 117346.00 139384.00C117356.67 139384.00 117367.33 139384.00 117378.00 139384.00C117378.00 139352.00 117378.00 139320.00 117378.00 139288.00C117388.67 139277.00 117399.33 139266.00 117410.00 139255.00C117431.67 139255.00 117453.33 139255.00 117475.00 139255.00C117496.33 139244.33 117517.67 139233.67 117539.00 139223.00C117571.33 139244.67 117603.67 139266.33 117636.00 139288.00C117636.00 139298.67 117636.00 139309.33 117636.00 139320.00C117657.33 139341.33 117678.67 139362.67 117700.00 139384.00C117710.67 139405.33 117721.33 139426.67 117732.00 139448.00C117785.67 139448.00 117839.33 139448.00 117893.00 139448.00C117903.67 139426.67 117914.33 139405.33 117925.00 139384.00C117946.33 139384.00 117967.67 139384.00 117989.00 139384.00C118010.33 139373.33 118031.67 139362.67 118053.00 139352.00C118096.00 139373.33 118139.00 139394.67 118182.00 139416.00C118192.67 139426.67 118203.33 139437.33 118214.00 139448.00C118214.00 139458.67 118214.00 139469.33 118214.00 139480.00C118224.67 139480.00 118235.33 139480.00 118246.00 139480.00C118267.67 139469.33 118289.33 139458.67 118311.00 139448.00C118332.33 139458.67 118353.67 139469.33 118375.00 139480.00C118407.33 139480.00 118439.67 139480.00 118472.00 139480.00C118504.00 139469.33 118536.00 139458.67 118568.00 139448.00C118589.33 139426.67 118610.67 139405.33 118632.00 139384.00C118664.33 139394.67 118696.67 139405.33 118729.00 139416.00C118761.00 139416.00 118793.00 139416.00 118825.00 139416.00C118846.33 139384.00 118867.67 139352.00 118889.00 139320.00C118910.67 139320.00 118932.33 139320.00 118954.00 139320.00C118975.33 139330.67 118996.67 139341.33 119018.00 139352.00C119050.33 139319.67 119082.67 139287.33 119115.00 139255.00C119115.00 139244.33 119115.00 139233.67 119115.00 139223.00C119147.00 139233.67 119179.00 139244.33 119211.00 139255.00C119232.33 139255.00 119253.67 139255.00 119275.00 139255.00C119286.00 139287.33 119297.00 139319.67 119308.00 139352.00C119329.33 139352.00 119350.67 139352.00 119372.00 139352.00C119382.67 139341.33 119393.33 139330.67 119404.00 139320.00C119393.33 139298.33 119382.67 139276.67 119372.00 139255.00C119372.00 139244.33 119372.00 139233.67 119372.00 139223.00C119382.67 139212.33 119393.33 139201.67 119404.00 139191.00C119436.00 139212.33 119468.00 139233.67 119500.00 139255.00C119500.00 139266.00 119500.00 139277.00 119500.00 139288.00C119511.00 139309.33 119522.00 139330.67 119533.00 139352.00C119522.00 139384.00 119511.00 139416.00 119500.00 139448.00C119489.33 139458.67 119478.67 139469.33 119468.00 139480.00C119468.00 139491.00 119468.00 139502.00 119468.00 139513.00C119500.33 139545.00 119532.67 139577.00 119565.00 139609.00C119597.00 139609.00 119629.00 139609.00 119661.00 139609.00C119682.40 139619.73 119703.85 139630.37 119725.22 139641.15C119757.48 139662.76 119789.74 139684.38 119822.00 139706.00C119822.00 139716.67 119822.00 139727.33 119822.00 139738.00C119811.33 139738.00 119800.67 139738.00 119790.00 139738.00C119790.00 139748.67 119790.00 139759.33 119790.00 139770.00C119779.33 139791.33 119768.67 139812.67 119758.00 139834.00C119758.00 139877.00 119758.00 139920.00 119758.00 139963.00C119779.33 139963.00 119800.67 139963.00 119822.00 139963.00C119843.33 139984.33 119864.67 140005.67 119886.00 140027.00C119896.67 140016.33 119907.33 140005.67 119918.00 139995.00C119938.79 140015.05 119959.46 140035.22 119979.76 140055.77C119983.06 140061.15 119989.76 140058.31 119995.00 140059.00C120012.33 140059.00 120029.67 140059.00 120047.00 140059.00C120079.33 140048.33 120111.67 140037.67 120144.00 140027.00C120165.33 140048.33 120186.67 140069.67 120208.00 140091.00C120218.67 140091.00 120229.33 140091.00 120240.00 140091.00C120240.00 140102.00 120240.00 140113.00 120240.00 140124.00C120250.67 140134.67 120261.33 140145.33 120272.00 140156.00C120282.67 140156.00 120293.33 140156.00 120304.00 140156.00C120314.67 140166.67 120325.33 140177.33 120336.00 140188.00C120357.67 140188.00 120379.33 140188.00 120401.00 140188.00C120422.33 140198.67 120443.67 140209.33 120465.00 140220.00C120486.33 140209.33 120507.67 140198.67 120529.00 140188.00C120550.67 140188.00 120572.33 140188.00 120594.00 140188.00C120615.33 140209.33 120636.67 140230.67 120658.00 140252.00C120636.67 140284.33 120615.33 140316.67 120594.00 140349.00C120604.67 140359.67 120615.33 140370.33 120626.00 140381.00C120647.33 140391.67 120668.67 140402.33 120690.00 140413.00C120700.67 140434.33 120711.33 140455.67 120722.00 140477.00C120732.67 140466.33 120743.33 140455.67 120754.00 140445.00C120754.00 140455.67 120754.00 140466.33 120754.00 140477.00C120765.00 140487.67 120776.00 140498.33 120787.00 140509.00C120819.00 140509.00 120851.00 140509.00 120883.00 140509.00C120872.33 140520.00 120861.67 140531.00 120851.00 140542.00C120861.70 140552.76 120872.52 140563.40 120883.14 140574.23C120915.09 140627.49 120947.05 140680.74 120979.00 140734.00C120979.00 140766.33 120979.00 140798.67 120979.00 140831.00C120990.00 140841.67 121001.00 140852.33 121012.00 140863.00C121022.67 140863.00 121033.33 140863.00 121044.00 140863.00C121033.33 140884.33 121022.67 140905.67 121012.00 140927.00C121022.67 140938.00 121033.33 140949.00 121044.00 140960.00C121065.33 141002.67 121086.67 141045.33 121108.00 141088.00C121108.00 141120.33 121108.00 141152.67 121108.00 141185.00C121118.67 141206.33 121129.33 141227.67 121140.00 141249.00C121140.00 141270.33 121140.00 141291.67 121140.00 141313.00C121129.33 141334.67 121118.67 141356.33 121108.00 141378.00C121097.33 141367.00 121086.67 141356.00 121076.00 141345.00C121076.00 141377.33 121076.00 141409.67 121076.00 141442.00C121108.00 141442.00 121140.00 141442.00 121172.00 141442.00C121204.33 141463.33 121236.67 141484.67 121269.00 141506.00C121269.00 141516.67 121269.00 141527.33 121269.00 141538.00C121279.67 141548.67 121290.33 141559.33 121301.00 141570.00C121290.33 141581.00 121279.67 141592.00 121269.00 141603.00C121258.33 141592.00 121247.67 141581.00 121237.00 141570.00C121204.67 141581.00 121172.33 141592.00 121140.00 141603.00C121140.00 141613.67 121140.00 141624.33 121140.00 141635.00C121172.33 141635.00 121204.67 141635.00 121237.00 141635.00C121237.00 141656.33 121237.00 141677.67 121237.00 141699.00C121247.67 141699.00 121258.33 141699.00 121269.00 141699.00C121279.67 141709.67 121290.33 141720.33 121301.00 141731.00C121311.67 141731.00 121322.33 141731.00 121333.00 141731.00C121333.00 141752.33 121333.00 141773.67 121333.00 141795.00C121354.33 141795.00 121375.67 141795.00 121397.00 141795.00C121386.33 141806.00 121375.67 141817.00 121365.00 141828.00C121375.67 141838.67 121386.33 141849.33 121397.00 141860.00C121386.33 141860.00 121375.67 141860.00 121365.00 141860.00C121354.33 141849.33 121343.67 141838.67 121333.00 141828.00C121322.33 141828.00 121311.67 141828.00 121301.00 141828.00C121279.67 141849.33 121258.33 141870.67 121237.00 141892.00C121237.00 141945.67 121237.00 141999.33 121237.00 142053.00C121215.33 142042.33 121193.67 142031.67 121172.00 142021.00C121172.00 142042.33 121172.00 142063.67 121172.00 142085.00C121161.33 142095.67 121150.67 142106.33 121140.00 142117.00C121150.67 142138.33 121161.33 142159.67 121172.00 142181.00C121161.33 142181.00 121150.67 142181.00 121140.00 142181.00C121129.33 142192.00 121118.67 142203.00 121108.00 142214.00C121118.75 142224.70 121129.40 142235.51 121140.22 142246.15C121172.48 142267.43 121204.74 142288.72 121237.00 142310.00C121226.33 142320.67 121215.67 142331.33 121205.00 142342.00C121215.67 142363.33 121226.33 142384.67 121237.00 142406.00C121226.33 142427.67 121215.67 142449.33 121205.00 142471.00C121215.67 142481.67 121226.33 142492.33 121237.00 142503.00C121237.00 142513.67 121237.00 142524.33 121237.00 142535.00C121215.33 142556.33 121193.67 142577.67 121172.00 142599.00C121161.33 142620.67 121150.67 142642.33 121140.00 142664.00C121150.67 142674.67 121161.33 142685.33 121172.00 142696.00C121172.00 142717.33 121172.00 142738.67 121172.00 142760.00C121183.00 142760.00 121194.00 142760.00 121205.00 142760.00C121205.00 142770.67 121205.00 142781.33 121205.00 142792.00C121194.00 142802.67 121183.00 142813.33 121172.00 142824.00C121193.67 142835.00 121215.33 142846.00 121237.00 142857.00C121237.00 142867.67 121237.00 142878.33 121237.00 142889.00C121258.33 142899.67 121279.67 142910.33 121301.00 142921.00C121301.00 142931.67 121301.00 142942.33 121301.00 142953.00C121311.67 142953.00 121322.33 142953.00 121333.00 142953.00C121333.00 142974.33 121333.00 142995.67 121333.00 143017.00C121343.67 143017.00 121354.33 143017.00 121365.00 143017.00C121375.67 143028.00 121386.33 143039.00 121397.00 143050.00C121408.00 143050.00 121419.00 143050.00 121430.00 143050.00C121430.00 143060.67 121430.00 143071.33 121430.00 143082.00C121440.67 143082.00 121451.33 143082.00 121462.00 143082.00C121462.00 143092.67 121462.00 143103.33 121462.00 143114.00C121472.67 143124.67 121483.33 143135.33 121494.00 143146.00C121483.33 143167.33 121472.67 143188.67 121462.00 143210.00C121462.00 143220.67 121462.00 143231.33 121462.00 143242.00C121472.67 143263.67 121483.33 143285.33 121494.00 143307.00C121483.33 143307.00 121472.67 143307.00 121462.00 143307.00C121440.33 143296.33 121418.67 143285.67 121397.00 143275.00C121397.00 143307.00 121397.00 143339.00 121397.00 143371.00C121386.33 143381.67 121375.67 143392.33 121365.00 143403.00C121386.67 143413.67 121408.33 143424.33 121430.00 143435.00C121419.00 143445.67 121408.00 143456.33 121397.00 143467.00C121397.00 143478.00 121397.00 143489.00 121397.00 143500.00C121408.00 143521.33 121419.00 143542.67 121430.00 143564.00C121430.00 143607.00 121430.00 143650.00 121430.00 143693.00C121386.90 143714.13 121343.89 143735.45 121301.00 143757.00C121290.33 143757.00 121279.67 143757.00 121269.00 143757.00C121269.00 143767.67 121269.00 143778.33 121269.00 143789.00C121279.67 143799.67 121290.33 143810.33 121301.00 143821.00C121279.67 143810.33 121258.33 143799.67 121237.00 143789.00C121226.33 143789.00 121215.67 143789.00 121205.00 143789.00C121226.33 143799.67 121247.67 143810.33 121269.00 143821.00C121258.33 143831.67 121247.67 143842.33 121237.00 143853.00C121226.33 143853.00 121215.67 143853.00 121205.00 143853.00C121215.67 143864.00 121226.33 143875.00 121237.00 143886.00C121237.00 143907.33 121237.00 143928.67 121237.00 143950.00C121247.67 143960.67 121258.33 143971.33 121269.00 143982.00C121279.67 144003.33 121290.33 144024.67 121301.00 144046.00C121322.33 144024.67 121343.67 144003.33 121365.00 143982.00C121365.00 144014.00 121365.00 144046.00 121365.00 144078.00C121381.86 144095.36 121398.50 144112.93 121416.12 144129.53C121431.65 144144.45 121446.76 144159.79 121462.00 144175.00C121462.00 144185.67 121462.00 144196.33 121462.00 144207.00C121472.67 144207.00 121483.33 144207.00 121494.00 144207.00C121515.33 144217.67 121536.67 144228.33 121558.00 144239.00C121558.00 144228.33 121558.00 144217.67 121558.00 144207.00C121579.67 144196.33 121601.33 144185.67 121623.00 144175.00C121623.00 144185.67 121623.00 144196.33 121623.00 144207.00C121633.67 144207.00 121644.33 144207.00 121655.00 144207.00C121655.00 144217.67 121655.00 144228.33 121655.00 144239.00C121665.67 144249.67 121676.33 144260.33 121687.00 144271.00C121654.67 144271.00 121622.33 144271.00 121590.00 144271.00C121601.00 144292.67 121612.00 144314.33 121623.00 144336.00C121633.67 144325.00 121644.33 144314.00 121655.00 144303.00C121665.67 144314.00 121676.33 144325.00 121687.00 144336.00C121687.00 144346.67 121687.00 144357.33 121687.00 144368.00C121697.67 144368.00 121708.33 144368.00 121719.00 144368.00C121719.00 144378.67 121719.00 144389.33 121719.00 144400.00C121697.67 144400.00 121676.33 144400.00 121655.00 144400.00C121655.00 144410.67 121655.00 144421.33 121655.00 144432.00C121665.67 144432.00 121676.33 144432.00 121687.00 144432.00C121708.33 144442.67 121729.67 144453.33 121751.00 144464.00C121751.00 144474.67 121751.00 144485.33 121751.00 144496.00C121740.33 144507.00 121729.67 144518.00 121719.00 144529.00C121719.00 144539.67 121719.00 144550.33 121719.00 144561.00C121729.67 144561.00 121740.33 144561.00 121751.00 144561.00C121761.67 144571.67 121772.33 144582.33 121783.00 144593.00C121783.00 144603.67 121783.00 144614.33 121783.00 144625.00C121793.67 144625.00 121804.33 144625.00 121815.00 144625.00C121804.33 144635.67 121793.67 144646.33 121783.00 144657.00C121772.33 144657.00 121761.67 144657.00 121751.00 144657.00C121761.67 144657.00 121772.33 144657.00 121783.00 144657.00C121772.33 144667.67 121761.67 144678.33 121751.00 144689.00C121783.33 144689.00 121815.67 144689.00 121848.00 144689.00C121848.00 144700.00 121848.00 144711.00 121848.00 144722.00C121858.67 144722.00 121869.33 144722.00 121880.00 144722.00C121880.00 144743.33 121880.00 144764.67 121880.00 144786.00C121901.33 144807.33 121922.67 144828.67 121944.00 144850.00C121965.33 144860.67 121986.67 144871.33 122008.00 144882.00C122008.00 144892.67 122008.00 144903.33 122008.00 144914.00C122019.00 144914.00 122030.00 144914.00 122041.00 144914.00C122030.00 144925.00 122019.00 144936.00 122008.00 144947.00C122019.00 144957.67 122030.00 144968.33 122041.00 144979.00C122041.00 144989.67 122041.00 145000.33 122041.00 145011.00C122051.75 145011.06 122062.50 145010.89 122073.25 145011.08C122105.17 145021.72 122137.08 145032.36 122169.00 145043.00C122158.33 145053.67 122147.67 145064.33 122137.00 145075.00C122147.67 145075.00 122158.33 145075.00 122169.00 145075.00C122158.33 145085.67 122147.67 145096.33 122137.00 145107.00C122169.00 145117.67 122201.00 145128.33 122233.00 145139.00C122233.00 145150.00 122233.00 145161.00 122233.00 145172.00C122244.00 145161.00 122255.00 145150.00 122266.00 145139.00C122276.67 145150.00 122287.33 145161.00 122298.00 145172.00C122308.67 145161.00 122319.33 145150.00 122330.00 145139.00C122340.67 145150.00 122351.33 145161.00 122362.00 145172.00C122362.00 145182.67 122362.00 145193.33 122362.00 145204.00C122394.33 145225.33 122426.67 145246.67 122459.00 145268.00C122469.67 145268.00 122480.33 145268.00 122491.00 145268.00C122491.00 145278.67 122491.00 145289.33 122491.00 145300.00C122501.67 145310.67 122512.33 145321.33 122523.00 145332.00C122501.67 145343.00 122480.33 145354.00 122459.00 145365.00C122459.00 145440.00 122459.00 145515.00 122459.00 145590.00C122437.33 145600.67 122415.67 145611.33 122394.00 145622.00C122405.02 145632.86 122415.73 145644.04 122426.93 145654.69C122469.62 145686.46 122512.31 145718.23 122555.00 145750.00C122555.00 145761.00 122555.00 145772.00 122555.00 145783.00C122576.33 145783.00 122597.67 145783.00 122619.00 145783.00C122629.67 145793.67 122640.33 145804.33 122651.00 145815.00C122640.33 145825.67 122629.67 145836.33 122619.00 145847.00C122629.67 145847.00 122640.33 145847.00 122651.00 145847.00C122662.00 145857.67 122673.00 145868.33 122684.00 145879.00C122673.00 145900.33 122662.00 145921.67 122651.00 145943.00C122667.93 145959.45 122685.08 145975.69 122701.30 145992.85C122706.20 145997.90 122711.10 146002.95 122716.00 146008.00C122716.00 146029.33 122716.00 146050.67 122716.00 146072.00C122726.67 146082.67 122737.33 146093.33 122748.00 146104.00C122758.67 146093.33 122769.33 146082.67 122780.00 146072.00C122790.67 146072.00 122801.33 146072.00 122812.00 146072.00C122833.67 146093.33 122855.33 146114.67 122877.00 146136.00C122887.67 146136.00 122898.33 146136.00 122909.00 146136.00C122909.00 146157.67 122909.00 146179.33 122909.00 146201.00C122941.00 146201.00 122973.00 146201.00 123005.00 146201.00C123015.67 146211.67 123026.33 146222.33 123037.00 146233.00C123058.67 146233.00 123080.33 146233.00 123102.00 146233.00C123112.67 146243.67 123123.33 146254.33 123134.00 146265.00C123101.67 146297.00 123069.33 146329.00 123037.00 146361.00C123026.33 146361.00 123015.67 146361.00 123005.00 146361.00C122966.99 146418.67 122928.96 146476.33 122890.52 146533.72C122886.02 146540.48 122881.51 146547.24 122877.00 146554.00C122877.00 146564.67 122877.00 146575.33 122877.00 146586.00C122887.67 146597.00 122898.33 146608.00 122909.00 146619.00C122919.67 146597.33 122930.33 146575.67 122941.00 146554.00C122951.67 146554.00 122962.33 146554.00 122973.00 146554.00C122973.00 146564.67 122973.00 146575.33 122973.00 146586.00C122962.33 146607.67 122951.67 146629.33 122941.00 146651.00C122919.67 146672.33 122898.33 146693.67 122877.00 146715.00C122887.67 146725.67 122898.33 146736.33 122909.00 146747.00C122898.33 146768.33 122887.67 146789.67 122877.00 146811.00C122887.67 146811.00 122898.33 146811.00 122909.00 146811.00C122909.00 146832.67 122909.00 146854.33 122909.00 146876.00C122898.33 146876.00 122887.67 146876.00 122877.00 146876.00C122856.21 146896.05 122835.54 146916.22 122815.24 146936.77C122809.85 146940.06 122812.69 146946.76 122812.00 146952.00C122812.00 146969.33 122812.00 146986.67 122812.00 147004.00C122780.00 147014.67 122748.00 147025.33 122716.00 147036.00C122705.33 147036.00 122694.67 147036.00 122684.00 147036.00C122694.67 147057.67 122705.33 147079.33 122716.00 147101.00C122716.00 147122.33 122716.00 147143.67 122716.00 147165.00C122726.67 147175.67 122737.33 147186.33 122748.00 147197.00C122737.33 147207.67 122726.67 147218.33 122716.00 147229.00C122705.33 147250.67 122694.67 147272.33 122684.00 147294.00C122673.00 147283.33 122662.00 147272.67 122651.00 147262.00C122640.33 147272.67 122629.67 147283.33 122619.00 147294.00C122608.33 147294.00 122597.67 147294.00 122587.00 147294.00C122587.00 147315.33 122587.00 147336.67 122587.00 147358.00C122597.67 147379.33 122608.33 147400.67 122619.00 147422.00C122619.00 147433.00 122619.00 147444.00 122619.00 147455.00C122608.33 147455.00 122597.67 147455.00 122587.00 147455.00C122608.33 147465.67 122629.67 147476.33 122651.00 147487.00C122629.67 147508.33 122608.33 147529.67 122587.00 147551.00C122587.00 147561.67 122587.00 147572.33 122587.00 147583.00C122597.67 147593.67 122608.33 147604.33 122619.00 147615.00C122608.33 147647.33 122597.67 147679.67 122587.00 147712.00C122597.67 147712.00 122608.33 147712.00 122619.00 147712.00C122619.00 147722.67 122619.00 147733.33 122619.00 147744.00C122629.67 147744.00 122640.33 147744.00 122651.00 147744.00C122651.00 147754.67 122651.00 147765.33 122651.00 147776.00C122640.33 147797.33 122629.67 147818.67 122619.00 147840.00C122629.67 147840.00 122640.33 147840.00 122651.00 147840.00C122651.00 147850.67 122651.00 147861.33 122651.00 147872.00C122662.00 147872.00 122673.00 147872.00 122684.00 147872.00C122716.00 147904.33 122748.00 147936.67 122780.00 147969.00C122812.33 147969.00 122844.67 147969.00 122877.00 147969.00C122898.33 147979.67 122919.67 147990.33 122941.00 148001.00C122994.67 148001.00 123048.33 148001.00 123102.00 148001.00C123102.00 147979.67 123102.00 147958.33 123102.00 147937.00C123123.33 147937.00 123144.67 147937.00 123166.00 147937.00C123166.00 147926.33 123166.00 147915.67 123166.00 147905.00C123176.67 147894.00 123187.33 147883.00 123198.00 147872.00C123283.67 147872.00 123369.33 147872.00 123455.00 147872.00C123465.67 147883.00 123476.33 147894.00 123487.00 147905.00C123508.67 147915.67 123530.33 147926.33 123552.00 147937.00C123562.67 147915.33 123573.33 147893.67 123584.00 147872.00C123594.67 147872.00 123605.33 147872.00 123616.00 147872.00C123616.00 147883.00 123616.00 147894.00 123616.00 147905.00C123637.33 147905.00 123658.67 147905.00 123680.00 147905.00C123680.00 147894.00 123680.00 147883.00 123680.00 147872.00C123690.67 147872.00 123701.33 147872.00 123712.00 147872.00C123723.00 147893.67 123734.00 147915.33 123745.00 147937.00C123755.67 147937.00 123766.33 147937.00 123777.00 147937.00C123787.67 147926.33 123798.33 147915.67 123809.00 147905.00C123819.67 147905.00 123830.33 147905.00 123841.00 147905.00C123851.67 147883.33 123862.33 147861.67 123873.00 147840.00C123883.67 147829.33 123894.33 147818.67 123905.00 147808.00C123905.00 147786.67 123905.00 147765.33 123905.00 147744.00C123916.00 147733.33 123927.00 147722.67 123938.00 147712.00C123927.00 147722.67 123916.00 147733.33 123905.00 147744.00C123894.33 147733.33 123883.67 147722.67 123873.00 147712.00C123883.67 147701.33 123894.33 147690.67 123905.00 147680.00C123916.00 147680.00 123927.00 147680.00 123938.00 147680.00C123959.33 147690.67 123980.67 147701.33 124002.00 147712.00C124023.33 147701.33 124044.67 147690.67 124066.00 147680.00C124076.67 147680.00 124087.33 147680.00 124098.00 147680.00C124098.00 147690.67 124098.00 147701.33 124098.00 147712.00C124087.33 147712.00 124076.67 147712.00 124066.00 147712.00C124055.33 147744.00 124044.67 147776.00 124034.00 147808.00C124055.33 147797.33 124076.67 147786.67 124098.00 147776.00C124109.00 147776.00 124120.00 147776.00 124131.00 147776.00C124131.00 147797.33 124131.00 147818.67 124131.00 147840.00C124152.33 147840.00 124173.67 147840.00 124195.00 147840.00C124195.00 147850.67 124195.00 147861.33 124195.00 147872.00C124216.33 147872.00 124237.67 147872.00 124259.00 147872.00C124269.67 147893.67 124280.33 147915.33 124291.00 147937.00C124312.67 147915.33 124334.33 147893.67 124356.00 147872.00C124388.00 147872.00 124420.00 147872.00 124452.00 147872.00C124462.67 147883.00 124473.33 147894.00 124484.00 147905.00C124494.67 147905.00 124505.33 147905.00 124516.00 147905.00C124516.00 147894.00 124516.00 147883.00 124516.00 147872.00C124526.96 147871.89 124537.95 147872.23 124548.89 147871.83C124602.26 147861.21 124655.63 147850.61 124709.00 147840.00C124730.67 147850.67 124752.33 147861.33 124774.00 147872.00C124784.67 147872.00 124795.33 147872.00 124806.00 147872.00C124784.33 147850.67 124762.67 147829.33 124741.00 147808.00C124752.00 147797.33 124763.00 147786.67 124774.00 147776.00C124795.33 147797.33 124816.67 147818.67 124838.00 147840.00C124859.33 147818.67 124880.67 147797.33 124902.00 147776.00C124912.67 147786.67 124923.33 147797.33 124934.00 147808.00C124944.67 147829.33 124955.33 147850.67 124966.00 147872.00C124987.67 147872.00 125009.33 147872.00 125031.00 147872.00C125052.33 147883.00 125073.67 147894.00 125095.00 147905.00C125105.67 147937.00 125116.33 147969.00 125127.00 148001.00C125148.67 147990.33 125170.33 147979.67 125192.00 147969.00C125202.67 147947.67 125213.33 147926.33 125224.00 147905.00C125234.67 147905.00 125245.33 147905.00 125256.00 147905.00C125256.00 147926.33 125256.00 147947.67 125256.00 147969.00C125266.67 147969.00 125277.33 147969.00 125288.00 147969.00C125309.43 147958.33 125330.79 147947.52 125352.26 147936.94C125395.17 147926.29 125438.09 147915.65 125481.00 147905.00C125502.33 147926.33 125523.67 147947.67 125545.00 147969.00C125545.00 147926.00 125545.00 147883.00 125545.00 147840.00C125566.67 147850.67 125588.33 147861.33 125610.00 147872.00C125620.67 147883.00 125631.33 147894.00 125642.00 147905.00C125631.33 147915.67 125620.67 147926.33 125610.00 147937.00C125620.67 147937.00 125631.33 147937.00 125642.00 147937.00C125631.33 147947.67 125620.67 147958.33 125610.00 147969.00C125620.67 147979.67 125631.33 147990.33 125642.00 148001.00C125631.33 148001.00 125620.67 148001.00 125610.00 148001.00C125631.33 148011.67 125652.67 148022.33 125674.00 148033.00C125684.67 148011.67 125695.33 147990.33 125706.00 147969.00C125727.33 147958.33 125748.67 147947.67 125770.00 147937.00C125770.00 147926.33 125770.00 147915.67 125770.00 147905.00C125791.67 147905.00 125813.33 147905.00 125835.00 147905.00C125856.33 147883.33 125877.67 147861.67 125899.00 147840.00C125909.67 147850.67 125920.33 147861.33 125931.00 147872.00C125941.67 147861.33 125952.33 147850.67 125963.00 147840.00C125984.67 147861.67 126006.33 147883.33 126028.00 147905.00C126038.67 147894.00 126049.33 147883.00 126060.00 147872.00C126070.67 147893.67 126081.33 147915.33 126092.00 147937.00C126102.67 147947.67 126113.33 147958.33 126124.00 147969.00C126124.00 147979.67 126124.00 147990.33 126124.00 148001.00C126134.67 148022.33 126145.33 148043.67 126156.00 148065.00C126177.33 148065.00 126198.67 148065.00 126220.00 148065.00C126220.00 148076.00 126220.00 148087.00 126220.00 148098.00C126231.00 148098.00 126242.00 148098.00 126253.00 148098.00C126253.00 148108.67 126253.00 148119.33 126253.00 148130.00C126263.67 148130.00 126274.33 148130.00 126285.00 148130.00C126295.67 148140.67 126306.33 148151.33 126317.00 148162.00C126317.00 148172.67 126317.00 148183.33 126317.00 148194.00C126349.00 148194.00 126381.00 148194.00 126413.00 148194.00C126413.00 148183.33 126413.00 148172.67 126413.00 148162.00C126423.67 148172.67 126434.33 148183.33 126445.00 148194.00C126445.00 148204.67 126445.00 148215.33 126445.00 148226.00C126434.33 148236.67 126423.67 148247.33 126413.00 148258.00C126413.00 148279.67 126413.00 148301.33 126413.00 148323.00C126402.33 148323.00 126391.67 148323.00 126381.00 148323.00C126381.00 148344.33 126381.00 148365.67 126381.00 148387.00C126359.67 148397.67 126338.33 148408.33 126317.00 148419.00C126306.25 148429.70 126295.59 148440.50 126284.78 148451.15C126252.52 148472.76 126220.26 148494.38 126188.00 148516.00C126188.00 148548.00 126188.00 148580.00 126188.00 148612.00C126177.33 148622.67 126166.67 148633.33 126156.00 148644.00C126145.33 148665.33 126134.67 148686.67 126124.00 148708.00C126134.67 148729.67 126145.33 148751.33 126156.00 148773.00C126145.33 148783.67 126134.67 148794.33 126124.00 148805.00C126156.00 148805.00 126188.00 148805.00 126220.00 148805.00C126220.00 148826.33 126220.00 148847.67 126220.00 148869.00C126199.57 148889.31 126179.27 148909.76 126159.33 148930.56C126157.56 148932.41 126154.22 148934.92 126159.00 148934.00C126168.67 148934.00 126178.33 148934.00 126188.00 148934.00C126177.33 148955.33 126166.67 148976.67 126156.00 148998.00C126156.00 148987.33 126156.00 148976.67 126156.00 148966.00C126145.33 148966.00 126134.67 148966.00 126124.00 148966.00C126124.00 149019.33 126124.00 149072.67 126124.00 149126.00C126134.67 149137.00 126145.33 149148.00 126156.00 149159.00C126145.33 149169.67 126134.67 149180.33 126124.00 149191.00C126134.67 149201.67 126145.33 149212.33 126156.00 149223.00C126145.33 149233.67 126134.67 149244.33 126124.00 149255.00C126124.00 149276.33 126124.00 149297.67 126124.00 149319.00C126113.33 149340.67 126102.67 149362.33 126092.00 149384.00C126070.67 149394.67 126049.33 149405.33 126028.00 149416.00C126028.00 149426.67 126028.00 149437.33 126028.00 149448.00C126017.00 149448.00 126006.00 149448.00 125995.00 149448.00C125995.00 149491.00 125995.00 149534.00 125995.00 149577.00C126006.00 149577.00 126017.00 149577.00 126028.00 149577.00C126028.00 149587.67 126028.00 149598.33 126028.00 149609.00C126038.67 149619.67 126049.33 149630.33 126060.00 149641.00C126060.00 149662.33 126060.00 149683.67 126060.00 149705.00C126081.33 149705.00 126102.67 149705.00 126124.00 149705.00C126124.00 149715.67 126124.00 149726.33 126124.00 149737.00C126134.67 149748.00 126145.33 149759.00 126156.00 149770.00C126156.00 149791.33 126156.00 149812.67 126156.00 149834.00C126193.06 149871.12 126230.15 149908.22 126267.64 149944.90C126273.43 149950.60 126279.21 149956.30 126285.00 149962.00C126295.67 149962.00 126306.33 149962.00 126317.00 149962.00C126327.67 149940.67 126338.33 149919.33 126349.00 149898.00C126359.70 149887.25 126370.51 149876.59 126381.15 149865.78C126402.43 149833.85 126423.72 149801.93 126445.00 149770.00C126456.00 149759.00 126467.00 149748.00 126478.00 149737.00C126499.33 149737.00 126520.67 149737.00 126542.00 149737.00C126542.04 149715.58 126541.91 149694.16 126542.06 149672.74C126552.71 149629.83 126563.35 149586.91 126574.00 149544.00C126638.33 149501.33 126702.67 149458.67 126767.00 149416.00C126788.33 149416.00 126809.67 149416.00 126831.00 149416.00C126842.00 149405.33 126853.00 149394.67 126864.00 149384.00C126896.23 149394.83 126928.58 149405.36 126960.74 149416.37C126981.82 149426.91 127002.91 149437.45 127024.00 149448.00C127024.00 149458.67 127024.00 149469.33 127024.00 149480.00C127034.67 149480.00 127045.33 149480.00 127056.00 149480.00C127088.33 149512.33 127120.67 149544.67 127153.00 149577.00C127153.00 149598.33 127153.00 149619.67 127153.00 149641.00C127174.33 149641.00 127195.67 149641.00 127217.00 149641.00C127217.00 149651.67 127217.00 149662.33 127217.00 149673.00C127227.67 149662.33 127238.33 149651.67 127249.00 149641.00C127259.67 149641.00 127270.33 149641.00 127281.00 149641.00C127281.00 149673.00 127281.00 149705.00 127281.00 149737.00C127270.33 149737.00 127259.67 149737.00 127249.00 149737.00C127249.00 149758.67 127249.00 149780.33 127249.00 149802.00C127270.67 149780.33 127292.33 149758.67 127314.00 149737.00C127324.67 149715.67 127335.33 149694.33 127346.00 149673.00C127367.33 149651.67 127388.67 149630.33 127410.00 149609.00C127410.00 149598.33 127410.00 149587.67 127410.00 149577.00C127420.67 149577.00 127431.33 149577.00 127442.00 149577.00C127452.67 149598.33 127463.33 149619.67 127474.00 149641.00C127485.00 149641.00 127496.00 149641.00 127507.00 149641.00C127507.00 149608.67 127507.00 149576.33 127507.00 149544.00C127517.67 149533.33 127528.33 149522.67 127539.00 149512.00C127539.00 149490.67 127539.00 149469.33 127539.00 149448.00C127560.33 149448.00 127581.67 149448.00 127603.00 149448.00C127603.00 149426.67 127603.00 149405.33 127603.00 149384.00C127613.67 149373.33 127624.33 149362.67 127635.00 149352.00C127645.67 149373.33 127656.33 149394.67 127667.00 149416.00C127687.79 149436.05 127708.46 149456.22 127728.76 149476.77C127734.15 149480.06 127731.31 149486.76 127732.00 149492.00C127732.00 149498.67 127732.00 149505.33 127732.00 149512.00C127742.67 149512.00 127753.33 149512.00 127764.00 149512.00C127753.33 149522.67 127742.67 149533.33 127732.00 149544.00C127732.00 149555.00 127732.00 149566.00 127732.00 149577.00C127753.33 149587.67 127774.67 149598.33 127796.00 149609.00C127806.67 149609.00 127817.33 149609.00 127828.00 149609.00C127828.00 149619.67 127828.00 149630.33 127828.00 149641.00C127817.33 149651.67 127806.67 149662.33 127796.00 149673.00C127806.67 149705.33 127817.33 149737.67 127828.00 149770.00C127817.33 149791.33 127806.67 149812.67 127796.00 149834.00C127806.67 149844.67 127817.33 149855.33 127828.00 149866.00C127828.00 149876.67 127828.00 149887.33 127828.00 149898.00C127849.33 149930.33 127870.67 149962.67 127892.00 149995.00C127892.00 150005.67 127892.00 150016.33 127892.00 150027.00C127913.67 150048.33 127935.33 150069.67 127957.00 150091.00C127957.00 150101.67 127957.00 150112.33 127957.00 150123.00C127991.66 150140.33 128026.40 150157.53 128060.74 150175.49C128068.83 150179.66 128076.91 150183.83 128085.00 150188.00C128074.33 150198.67 128063.67 150209.33 128053.00 150220.00C128042.33 150220.00 128031.67 150220.00 128021.00 150220.00C128021.00 150241.33 128021.00 150262.67 128021.00 150284.00C128010.33 150305.33 127999.67 150326.67 127989.00 150348.00C127956.67 150358.67 127924.33 150369.33 127892.00 150380.00C127903.00 150401.67 127914.00 150423.33 127925.00 150445.00C127946.33 150455.67 127967.67 150466.33 127989.00 150477.00C128010.33 150477.00 128031.67 150477.00 128053.00 150477.00C128063.67 150498.33 128074.33 150519.67 128085.00 150541.00C128096.05 150551.91 128106.83 150563.10 128118.05 150573.83C128171.36 150616.56 128224.68 150659.28 128278.00 150702.00C128321.10 150680.87 128364.11 150659.55 128407.00 150638.00C128417.67 150648.67 128428.33 150659.33 128439.00 150670.00C128449.67 150659.33 128460.33 150648.67 128471.00 150638.00C128492.67 150638.00 128514.33 150638.00 128536.00 150638.00C128536.00 150605.67 128536.00 150573.33 128536.00 150541.00C128557.33 150551.67 128578.67 150562.33 128600.00 150573.00C128610.67 150562.33 128621.33 150551.67 128632.00 150541.00C128653.33 150541.00 128674.67 150541.00 128696.00 150541.00C128685.33 150551.67 128674.67 150562.33 128664.00 150573.00C128674.67 150584.00 128685.33 150595.00 128696.00 150606.00C128599.45 150691.91 128502.80 150777.71 128406.31 150863.69C128385.21 150884.79 128364.10 150905.90 128343.00 150927.00C128343.00 150948.33 128343.00 150969.67 128343.00 150991.00C128353.67 150991.00 128364.33 150991.00 128375.00 150991.00C128363.95 151001.91 128353.17 151013.10 128341.95 151023.83C128288.58 151066.63 128235.15 151109.36 128181.81 151152.19C128149.54 151184.46 128117.27 151216.73 128085.00 151249.00C128042.08 151313.63 127999.32 151378.37 127956.30 151442.93C127924.19 151485.28 127892.10 151527.65 127860.00 151570.00C127849.33 151623.67 127838.67 151677.33 127828.00 151731.00C127817.33 151741.67 127806.67 151752.33 127796.00 151763.00C127774.58 151763.04 127753.16 151762.91 127731.74 151763.06C127688.83 151773.71 127645.91 151784.35 127603.00 151795.00C127560.00 151816.33 127517.00 151837.67 127474.00 151859.00C127431.33 151870.00 127388.67 151881.00 127346.00 151892.00C127399.67 151924.00 127453.33 151956.00 127507.00 151988.00C127485.33 152041.67 127463.67 152095.33 127442.00 152149.00C127431.33 152149.00 127420.67 152149.00 127410.00 152149.00C127410.00 152181.00 127410.00 152213.00 127410.00 152245.00C127399.33 152245.00 127388.67 152245.00 127378.00 152245.00C127367.33 152256.00 127356.67 152267.00 127346.00 152278.00C127335.33 152299.33 127324.67 152320.67 127314.00 152342.00C127249.67 152342.00 127185.33 152342.00 127121.00 152342.00C127088.67 152352.67 127056.33 152363.33 127024.00 152374.00C126970.67 152417.00 126917.33 152460.00 126864.00 152503.00C126821.00 152556.33 126778.00 152609.67 126735.00 152663.00C126681.23 152759.81 126627.52 152856.66 126573.72 152953.46C126488.15 153092.64 126402.57 153231.82 126317.00 153371.00C126306.33 153435.33 126295.67 153499.67 126285.00 153564.00C126285.00 153585.33 126285.00 153606.67 126285.00 153628.00C126274.33 153617.33 126263.67 153606.67 126253.00 153596.00C126242.00 153606.67 126231.00 153617.33 126220.00 153628.00C126198.67 153638.67 126177.33 153649.33 126156.00 153660.00C126156.00 153681.33 126156.00 153702.67 126156.00 153724.00C126145.33 153745.67 126134.67 153767.33 126124.00 153789.00C126134.67 153799.67 126145.33 153810.33 126156.00 153821.00C126134.67 153864.00 126113.33 153907.00 126092.00 153950.00C126070.67 154025.00 126049.33 154100.00 126028.00 154175.00C126017.00 154185.67 126006.00 154196.33 125995.00 154207.00C126006.00 154217.67 126017.00 154228.33 126028.00 154239.00C126017.00 154239.00 126006.00 154239.00 125995.00 154239.00C125984.33 154249.67 125973.67 154260.33 125963.00 154271.00C125952.33 154260.33 125941.67 154249.67 125931.00 154239.00C125931.00 154249.67 125931.00 154260.33 125931.00 154271.00C125909.67 154271.00 125888.33 154271.00 125867.00 154271.00C125867.00 154260.33 125867.00 154249.67 125867.00 154239.00C125856.33 154239.00 125845.67 154239.00 125835.00 154239.00C125835.00 154228.33 125835.00 154217.67 125835.00 154207.00C125818.07 154190.55 125800.92 154174.31 125784.70 154157.15C125779.80 154152.10 125774.90 154147.05 125770.00 154142.00C125738.00 154163.67 125706.00 154185.33 125674.00 154207.00C125674.00 154217.67 125674.00 154228.33 125674.00 154239.00C125652.67 154239.00 125631.33 154239.00 125610.00 154239.00C125610.00 154249.67 125610.00 154260.33 125610.00 154271.00C125159.67 154271.00 124709.33 154271.00 124259.00 154271.00C124280.33 154281.67 124301.67 154292.33 124323.00 154303.00C124301.67 154303.00 124280.33 154303.00 124259.00 154303.00C124259.00 154292.33 124259.00 154281.67 124259.00 154271.00C124248.33 154271.00 124237.67 154271.00 124227.00 154271.00C124205.67 154292.33 124184.33 154313.67 124163.00 154335.00C124163.00 154345.67 124163.00 154356.33 124163.00 154367.00C124152.33 154367.00 124141.67 154367.00 124131.00 154367.00C124120.00 154378.00 124109.00 154389.00 124098.00 154400.00C124087.33 154400.00 124076.67 154400.00 124066.00 154400.00C124066.00 154410.67 124066.00 154421.33 124066.00 154432.00C124034.00 154432.00 124002.00 154432.00 123970.00 154432.00C123959.33 154410.33 123948.67 154388.67 123938.00 154367.00C123927.00 154367.00 123916.00 154367.00 123905.00 154367.00C123894.33 154388.67 123883.67 154410.33 123873.00 154432.00C123862.33 154432.00 123851.67 154432.00 123841.00 154432.00C123830.33 154442.67 123819.67 154453.33 123809.00 154464.00C123787.67 154442.67 123766.33 154421.33 123745.00 154400.00C123745.00 154378.33 123745.00 154356.67 123745.00 154335.00C123734.00 154345.67 123723.00 154356.33 123712.00 154367.00C123690.67 154367.00 123669.33 154367.00 123648.00 154367.00C123648.00 154378.00 123648.00 154389.00 123648.00 154400.00C123637.33 154400.00 123626.67 154400.00 123616.00 154400.00C123605.33 154378.33 123594.67 154356.67 123584.00 154335.00C123573.33 154345.67 123562.67 154356.33 123552.00 154367.00C123530.33 154356.33 123508.67 154345.67 123487.00 154335.00C123476.33 154345.67 123465.67 154356.33 123455.00 154367.00C123465.67 154367.00 123476.33 154367.00 123487.00 154367.00C123476.33 154367.00 123465.67 154367.00 123455.00 154367.00C123444.33 154388.67 123433.67 154410.33 123423.00 154432.00C123423.00 154421.33 123423.00 154410.67 123423.00 154400.00C123412.33 154400.00 123401.67 154400.00 123391.00 154400.00C123391.00 154410.67 123391.00 154421.33 123391.00 154432.00C123380.33 154421.33 123369.67 154410.67 123359.00 154400.00C123348.33 154400.00 123337.67 154400.00 123327.00 154400.00C123316.33 154389.00 123305.67 154378.00 123295.00 154367.00C123284.00 154367.00 123273.00 154367.00 123262.00 154367.00C123251.33 154378.00 123240.67 154389.00 123230.00 154400.00C123208.67 154400.00 123187.33 154400.00 123166.00 154400.00C123166.00 154410.67 123166.00 154421.33 123166.00 154432.00C123144.67 154432.00 123123.33 154432.00 123102.00 154432.00C123091.00 154442.67 123080.00 154453.33 123069.00 154464.00C123047.67 154474.67 123026.33 154485.33 123005.00 154496.00C122983.67 154496.00 122962.33 154496.00 122941.00 154496.00C122951.67 154506.67 122962.33 154517.33 122973.00 154528.00C122962.33 154538.67 122951.67 154549.33 122941.00 154560.00C122919.67 154571.00 122898.33 154582.00 122877.00 154593.00C122877.00 154625.00 122877.00 154657.00 122877.00 154689.00C122855.33 154689.00 122833.67 154689.00 122812.00 154689.00C122822.67 154689.00 122833.33 154689.00 122844.00 154689.00C122833.33 154699.67 122822.67 154710.33 122812.00 154721.00C122812.00 154731.67 122812.00 154742.33 122812.00 154753.00C122801.33 154742.33 122790.67 154731.67 122780.00 154721.00C122780.00 154731.67 122780.00 154742.33 122780.00 154753.00C122769.33 154742.33 122758.67 154731.67 122748.00 154721.00C122737.33 154721.00 122726.67 154721.00 122716.00 154721.00C122705.33 154731.67 122694.67 154742.33 122684.00 154753.00C122684.00 154763.67 122684.00 154774.33 122684.00 154785.00C122694.67 154796.00 122705.33 154807.00 122716.00 154818.00C122705.33 154818.00 122694.67 154818.00 122684.00 154818.00C122694.67 154818.00 122705.33 154818.00 122716.00 154818.00C122716.00 154828.67 122716.00 154839.33 122716.00 154850.00C122694.33 154850.00 122672.67 154850.00 122651.00 154850.00C122662.00 154860.67 122673.00 154871.33 122684.00 154882.00C122673.00 154892.67 122662.00 154903.33 122651.00 154914.00C122651.00 154903.33 122651.00 154892.67 122651.00 154882.00C122629.67 154882.00 122608.33 154882.00 122587.00 154882.00C122555.00 154903.33 122523.00 154924.67 122491.00 154946.00C122480.33 154956.67 122469.67 154967.33 122459.00 154978.00C122448.00 154978.00 122437.00 154978.00 122426.00 154978.00C122426.00 154989.00 122426.00 155000.00 122426.00 155011.00C122415.33 155011.00 122404.67 155011.00 122394.00 155011.00C122394.00 155021.67 122394.00 155032.33 122394.00 155043.00C122383.33 155032.33 122372.67 155021.67 122362.00 155011.00C122372.67 155021.67 122383.33 155032.33 122394.00 155043.00C122383.33 155043.00 122372.67 155043.00 122362.00 155043.00C122362.00 155053.67 122362.00 155064.33 122362.00 155075.00C122351.33 155075.00 122340.67 155075.00 122330.00 155075.00C122330.00 155085.67 122330.00 155096.33 122330.00 155107.00C122297.67 155107.00 122265.33 155107.00 122233.00 155107.00C122233.00 155117.67 122233.00 155128.33 122233.00 155139.00C122222.33 155128.33 122211.67 155117.67 122201.00 155107.00C122201.00 155096.33 122201.00 155085.67 122201.00 155075.00C122190.33 155096.33 122179.67 155117.67 122169.00 155139.00C122147.67 155128.33 122126.33 155117.67 122105.00 155107.00C122105.00 155128.33 122105.00 155149.67 122105.00 155171.00C122105.00 155160.33 122105.00 155149.67 122105.00 155139.00C122094.33 155149.67 122083.67 155160.33 122073.00 155171.00C122062.33 155171.00 122051.67 155171.00 122041.00 155171.00C122030.00 155181.67 122019.00 155192.33 122008.00 155203.00C122008.00 155181.67 122008.00 155160.33 122008.00 155139.00C121976.00 155139.00 121944.00 155139.00 121912.00 155139.00C121901.33 155160.33 121890.67 155181.67 121880.00 155203.00C121858.33 155224.67 121836.67 155246.33 121815.00 155268.00C121804.33 155257.33 121793.67 155246.67 121783.00 155236.00C121783.00 155246.67 121783.00 155257.33 121783.00 155268.00C121772.33 155278.67 121761.67 155289.33 121751.00 155300.00C121761.67 155300.00 121772.33 155300.00 121783.00 155300.00C121772.33 155310.67 121761.67 155321.33 121751.00 155332.00C121740.33 155332.00 121729.67 155332.00 121719.00 155332.00C121729.67 155353.33 121740.33 155374.67 121751.00 155396.00C121751.00 155385.33 121751.00 155374.67 121751.00 155364.00C121751.00 155374.67 121751.00 155385.33 121751.00 155396.00C121740.33 155407.00 121729.67 155418.00 121719.00 155429.00C121708.33 155429.00 121697.67 155429.00 121687.00 155429.00C121687.00 155439.67 121687.00 155450.33 121687.00 155461.00C121676.33 155450.33 121665.67 155439.67 121655.00 155429.00C121644.33 155439.67 121633.67 155450.33 121623.00 155461.00C121612.00 155450.33 121601.00 155439.67 121590.00 155429.00C121590.00 155439.67 121590.00 155450.33 121590.00 155461.00C121579.33 155439.33 121568.67 155417.67 121558.00 155396.00C121547.33 155396.00 121536.67 155396.00 121526.00 155396.00C121526.00 155407.00 121526.00 155418.00 121526.00 155429.00C121536.67 155439.67 121547.33 155450.33 121558.00 155461.00C121526.00 155461.00 121494.00 155461.00 121462.00 155461.00C121472.67 155461.00 121483.33 155461.00 121494.00 155461.00C121483.33 155482.33 121472.67 155503.67 121462.00 155525.00C121440.33 155514.33 121418.67 155503.67 121397.00 155493.00C121375.67 155460.67 121354.33 155428.33 121333.00 155396.00C121333.00 155417.67 121333.00 155439.33 121333.00 155461.00C121322.33 155461.00 121311.67 155461.00 121301.00 155461.00C121301.00 155450.33 121301.00 155439.67 121301.00 155429.00C121279.67 155429.00 121258.33 155429.00 121237.00 155429.00C121237.00 155439.67 121237.00 155450.33 121237.00 155461.00C121226.33 155439.33 121215.67 155417.67 121205.00 155396.00C121194.00 155396.00 121183.00 155396.00 121172.00 155396.00C121172.00 155385.33 121172.00 155374.67 121172.00 155364.00C121172.00 155374.67 121172.00 155385.33 121172.00 155396.00C121161.33 155396.00 121150.67 155396.00 121140.00 155396.00C121118.67 155385.33 121097.33 155374.67 121076.00 155364.00C121086.67 155353.33 121097.33 155342.67 121108.00 155332.00C121108.00 155310.67 121108.00 155289.33 121108.00 155268.00C121097.33 155268.00 121086.67 155268.00 121076.00 155268.00C121076.00 155289.33 121076.00 155310.67 121076.00 155332.00C121054.67 155342.67 121033.33 155353.33 121012.00 155364.00C121012.00 155342.67 121012.00 155321.33 121012.00 155300.00C121001.00 155300.00 120990.00 155300.00 120979.00 155300.00C120979.00 155289.33 120979.00 155278.67 120979.00 155268.00C120968.33 155268.00 120957.67 155268.00 120947.00 155268.00C120947.00 155278.67 120947.00 155289.33 120947.00 155300.00C120936.33 155289.33 120925.67 155278.67 120915.00 155268.00C120904.33 155278.67 120893.67 155289.33 120883.00 155300.00C120872.33 155289.33 120861.67 155278.67 120851.00 155268.00C120840.33 155268.00 120829.67 155268.00 120819.00 155268.00C120840.33 155246.33 120861.67 155224.67 120883.00 155203.00C120861.67 155203.00 120840.33 155203.00 120819.00 155203.00C120808.33 155181.67 120797.67 155160.33 120787.00 155139.00C120765.33 155128.33 120743.67 155117.67 120722.00 155107.00C120700.67 155128.33 120679.33 155149.67 120658.00 155171.00C120647.33 155171.00 120636.67 155171.00 120626.00 155171.00C120615.33 155149.67 120604.67 155128.33 120594.00 155107.00C120615.33 155085.67 120636.67 155064.33 120658.00 155043.00C120615.00 155043.00 120572.00 155043.00 120529.00 155043.00C120529.00 155010.67 120529.00 154978.33 120529.00 154946.00C120507.67 154935.33 120486.33 154924.67 120465.00 154914.00C120454.33 154892.67 120443.67 154871.33 120433.00 154850.00C120422.33 154850.00 120411.67 154850.00 120401.00 154850.00C120401.00 154860.67 120401.00 154871.33 120401.00 154882.00C120411.67 154882.00 120422.33 154882.00 120433.00 154882.00C120433.00 154903.33 120433.00 154924.67 120433.00 154946.00C120422.33 154946.00 120411.67 154946.00 120401.00 154946.00C120390.33 154914.00 120379.67 154882.00 120369.00 154850.00C120358.00 154860.67 120347.00 154871.33 120336.00 154882.00C120336.00 154892.67 120336.00 154903.33 120336.00 154914.00C120314.67 154903.33 120293.33 154892.67 120272.00 154882.00C120261.33 154849.67 120250.67 154817.33 120240.00 154785.00C120229.33 154796.00 120218.67 154807.00 120208.00 154818.00C120197.33 154818.00 120186.67 154818.00 120176.00 154818.00C120165.33 154796.33 120154.67 154774.67 120144.00 154753.00C120144.00 154731.67 120144.00 154710.33 120144.00 154689.00C120133.00 154699.67 120122.00 154710.33 120111.00 154721.00C120100.33 154721.00 120089.67 154721.00 120079.00 154721.00C120100.67 154710.33 120122.33 154699.67 120144.00 154689.00C120144.00 154667.67 120144.00 154646.33 120144.00 154625.00C120133.00 154614.33 120122.00 154603.67 120111.00 154593.00C120111.00 154614.33 120111.00 154635.67 120111.00 154657.00C120100.33 154657.00 120089.67 154657.00 120079.00 154657.00C120068.33 154646.33 120057.67 154635.67 120047.00 154625.00C120036.33 154625.00 120025.67 154625.00 120015.00 154625.00C119994.57 154604.69 119974.27 154584.24 119954.33 154563.44C119951.33 154561.27 119950.40 154559.12 119954.00 154557.00C119963.67 154547.33 119973.33 154537.67 119983.00 154528.00C119940.00 154517.33 119897.00 154506.67 119854.00 154496.00C119843.33 154506.67 119832.67 154517.33 119822.00 154528.00C119800.67 154506.67 119779.33 154485.33 119758.00 154464.00C119725.67 154474.67 119693.33 154485.33 119661.00 154496.00C119650.33 154485.33 119639.67 154474.67 119629.00 154464.00C119639.67 154453.33 119650.33 154442.67 119661.00 154432.00C119650.33 154421.33 119639.67 154410.67 119629.00 154400.00C119607.67 154410.67 119586.33 154421.33 119565.00 154432.00C119554.33 154442.67 119543.67 154453.33 119533.00 154464.00C119554.33 154474.67 119575.67 154485.33 119597.00 154496.00C119554.00 154539.00 119511.00 154582.00 119468.00 154625.00C119478.67 154603.33 119489.33 154581.67 119500.00 154560.00C119500.00 154528.00 119500.00 154496.00 119500.00 154464.00C119489.33 154453.33 119478.67 154442.67 119468.00 154432.00C119436.00 154421.33 119404.00 154410.67 119372.00 154400.00C119372.00 154410.67 119372.00 154421.33 119372.00 154432.00C119350.67 154432.00 119329.33 154432.00 119308.00 154432.00C119308.00 154442.67 119308.00 154453.33 119308.00 154464.00C119318.67 154485.33 119329.33 154506.67 119340.00 154528.00C119329.33 154538.67 119318.67 154549.33 119308.00 154560.00C119275.67 154538.67 119243.33 154517.33 119211.00 154496.00C119189.67 154496.00 119168.33 154496.00 119147.00 154496.00C119125.33 154506.67 119103.67 154517.33 119082.00 154528.00C119060.67 154528.00 119039.33 154528.00 119018.00 154528.00C119007.33 154538.67 118996.67 154549.33 118986.00 154560.00C118986.00 154571.00 118986.00 154582.00 118986.00 154593.00C118985.94 154581.92 118986.11 154570.83 118985.92 154559.75C118975.28 154527.83 118964.64 154495.92 118954.00 154464.00C118943.33 154496.00 118932.67 154528.00 118922.00 154560.00C118889.67 154581.67 118857.33 154603.33 118825.00 154625.00C118814.33 154614.33 118803.67 154603.67 118793.00 154593.00C118782.33 154614.33 118771.67 154635.67 118761.00 154657.00C118739.67 154624.67 118718.33 154592.33 118697.00 154560.00C118675.33 154581.67 118653.67 154603.33 118632.00 154625.00C118632.06 154614.25 118631.89 154603.50 118632.08 154592.75C118642.72 154560.50 118653.36 154528.25 118664.00 154496.00C118653.33 154485.33 118642.67 154474.67 118632.00 154464.00C118610.67 154474.67 118589.33 154485.33 118568.00 154496.00C118557.33 154485.33 118546.67 154474.67 118536.00 154464.00C118514.67 154485.33 118493.33 154506.67 118472.00 154528.00C118482.67 154528.00 118493.33 154528.00 118504.00 154528.00C118514.67 154538.67 118525.33 154549.33 118536.00 154560.00C118546.67 154560.00 118557.33 154560.00 118568.00 154560.00C118568.00 154549.33 118568.00 154538.67 118568.00 154528.00C118578.67 154538.67 118589.33 154549.33 118600.00 154560.00C118589.33 154581.67 118578.67 154603.33 118568.00 154625.00C118536.00 154657.00 118504.00 154689.00 118472.00 154721.00C118461.00 154710.33 118450.00 154699.67 118439.00 154689.00C118439.00 154678.33 118439.00 154667.67 118439.00 154657.00C118417.67 154657.00 118396.33 154657.00 118375.00 154657.00C118364.33 154646.33 118353.67 154635.67 118343.00 154625.00C118332.33 154625.00 118321.67 154625.00 118311.00 154625.00C118300.33 154635.67 118289.67 154646.33 118279.00 154657.00C118268.00 154635.67 118257.00 154614.33 118246.00 154593.00C118246.00 154571.33 118246.00 154549.67 118246.00 154528.00C118214.00 154517.33 118182.00 154506.67 118150.00 154496.00C118150.00 154528.33 118150.00 154560.67 118150.00 154593.00C118128.67 154582.00 118107.33 154571.00 118086.00 154560.00C118064.25 154571.02 118042.54 154582.13 118020.75 154593.08C117988.83 154603.72 117956.92 154614.36 117925.00 154625.00C117892.67 154646.33 117860.33 154667.67 117828.00 154689.00C117828.00 154710.33 117828.00 154731.67 117828.00 154753.00C117806.67 154753.00 117785.33 154753.00 117764.00 154753.00C117774.67 154774.67 117785.33 154796.33 117796.00 154818.00C117796.00 154828.67 117796.00 154839.33 117796.00 154850.00C117785.33 154860.67 117774.67 154871.33 117764.00 154882.00C117774.67 154892.67 117785.33 154903.33 117796.00 154914.00C117796.00 154924.67 117796.00 154935.33 117796.00 154946.00C117785.33 154946.00 117774.67 154946.00 117764.00 154946.00C117764.00 154956.67 117764.00 154967.33 117764.00 154978.00C117785.33 154978.00 117806.67 154978.00 117828.00 154978.00C117828.00 154989.00 117828.00 155000.00 117828.00 155011.00C117817.33 155000.00 117806.67 154989.00 117796.00 154978.00C117785.33 154989.00 117774.67 155000.00 117764.00 155011.00C117753.33 155000.00 117742.67 154989.00 117732.00 154978.00C117710.67 154967.33 117689.33 154956.67 117668.00 154946.00C117657.33 154935.33 117646.67 154924.67 117636.00 154914.00C117636.00 154903.33 117636.00 154892.67 117636.00 154882.00C117625.00 154892.67 117614.00 154903.33 117603.00 154914.00C117603.00 154903.33 117603.00 154892.67 117603.00 154882.00C117614.00 154860.67 117625.00 154839.33 117636.00 154818.00C117625.00 154796.33 117614.00 154774.67 117603.00 154753.00C117549.67 154721.00 117496.33 154689.00 117443.00 154657.00C117443.00 154646.33 117443.00 154635.67 117443.00 154625.00C117432.00 154635.67 117421.00 154646.33 117410.00 154657.00C117367.33 154657.00 117324.67 154657.00 117282.00 154657.00C117271.33 154635.67 117260.67 154614.33 117250.00 154593.00C117239.00 154582.00 117228.00 154571.00 117217.00 154560.00C117228.00 154549.33 117239.00 154538.67 117250.00 154528.00C117228.33 154517.33 117206.67 154506.67 117185.00 154496.00C117185.00 154506.67 117185.00 154517.33 117185.00 154528.00C117185.00 154517.33 117185.00 154506.67 117185.00 154496.00C117163.67 154496.00 117142.33 154496.00 117121.00 154496.00C117121.00 154485.33 117121.00 154474.67 117121.00 154464.00C117110.33 154464.00 117099.67 154464.00 117089.00 154464.00C117089.00 154485.33 117089.00 154506.67 117089.00 154528.00C117078.33 154517.33 117067.67 154506.67 117057.00 154496.00C117067.67 154496.00 117078.33 154496.00 117089.00 154496.00C117067.67 154496.00 117046.33 154496.00 117025.00 154496.00C117014.00 154485.33 117003.00 154474.67 116992.00 154464.00C116981.33 154474.67 116970.67 154485.33 116960.00 154496.00C116949.33 154485.33 116938.67 154474.67 116928.00 154464.00C116863.78 154496.22 116799.36 154528.05 116735.00 154560.00C116735.00 154528.00 116735.00 154496.00 116735.00 154464.00C116724.33 154464.00 116713.67 154464.00 116703.00 154464.00C116692.33 154431.67 116681.67 154399.33 116671.00 154367.00C116660.33 154367.00 116649.67 154367.00 116639.00 154367.00C116606.67 154399.33 116574.33 154431.67 116542.00 154464.00C116542.00 154496.00 116542.00 154528.00 116542.00 154560.00C116552.67 154571.00 116563.33 154582.00 116574.00 154593.00C116585.00 154593.00 116596.00 154593.00 116607.00 154593.00C116628.33 154582.00 116649.67 154571.00 116671.00 154560.00C116692.33 154560.00 116713.67 154560.00 116735.00 154560.00C116735.00 154581.67 116735.00 154603.33 116735.00 154625.00C116724.33 154635.67 116713.67 154646.33 116703.00 154657.00C116692.25 154657.06 116681.50 154656.89 116670.75 154657.08C116638.50 154667.72 116606.25 154678.36 116574.00 154689.00C116552.58 154688.96 116531.16 154689.09 116509.74 154688.94C116467.16 154678.29 116424.58 154667.65 116382.00 154657.00C116360.33 154678.33 116338.67 154699.67 116317.00 154721.00C116306.33 154742.33 116295.67 154763.67 116285.00 154785.00C116263.67 154806.67 116242.33 154828.33 116221.00 154850.00C116242.33 154892.67 116263.67 154935.33 116285.00 154978.00C116274.33 154978.00 116263.67 154978.00 116253.00 154978.00C116242.33 154989.00 116231.67 155000.00 116221.00 155011.00C116199.33 155021.67 116177.67 155032.33 116156.00 155043.00C116145.33 155053.67 116134.67 155064.33 116124.00 155075.00C116113.22 155096.47 116102.58 155118.02 116091.71 155139.45C116070.47 155171.63 116049.24 155203.82 116028.00 155236.00C116017.33 155246.67 116006.67 155257.33 115996.00 155268.00C115953.00 155289.33 115910.00 155310.67 115867.00 155332.00C115899.33 155396.33 115931.67 155460.67 115964.00 155525.00C115953.00 155535.67 115942.00 155546.33 115931.00 155557.00C115888.33 155557.00 115845.67 155557.00 115803.00 155557.00C115803.00 155525.00 115803.00 155493.00 115803.00 155461.00C115792.33 155450.33 115781.67 155439.67 115771.00 155429.00C115706.67 155439.67 115642.33 155450.33 115578.00 155461.00C115558.45 155480.66 115538.79 155500.22 115518.78 155519.41C115515.71 155522.33 115512.88 155525.65 115508.78 155527.11C115488.85 155537.08 115468.92 155547.03 115449.00 155557.00C115438.33 155589.33 115427.67 155621.67 115417.00 155654.00C115406.33 155664.67 115395.67 155675.33 115385.00 155686.00C115374.14 155674.98 115362.97 155664.26 115352.30 155653.07C115320.20 155610.38 115288.10 155567.69 115256.00 155525.00C115245.33 155525.00 115234.67 155525.00 115224.00 155525.00C115202.52 155589.28 115181.16 155653.61 115160.00 155718.00C115149.33 155728.67 115138.67 155739.33 115128.00 155750.00C115095.67 155750.00 115063.33 155750.00 115031.00 155750.00C115031.00 155696.33 115031.00 155642.67 115031.00 155589.00C114999.00 155557.00 114967.00 155525.00 114935.00 155493.00C114924.33 155493.00 114913.67 155493.00 114903.00 155493.00C114892.00 155503.67 114881.00 155514.33 114870.00 155525.00C114891.67 155568.00 114913.33 155611.00 114935.00 155654.00C114924.33 155675.33 114913.67 155696.67 114903.00 155718.00C114892.00 155718.00 114881.00 155718.00 114870.00 155718.00C114859.33 155696.67 114848.67 155675.33 114838.00 155654.00C114806.00 155654.00 114774.00 155654.00 114742.00 155654.00C114742.00 155621.67 114742.00 155589.33 114742.00 155557.00C114709.67 155535.67 114677.33 155514.33 114645.00 155493.00C114634.33 155482.33 114623.67 155471.67 114613.00 155461.00C114527.33 155493.00 114441.67 155525.00 114356.00 155557.00C114345.25 155546.30 114334.60 155535.49 114323.78 155524.85C114291.52 155503.57 114259.26 155482.28 114227.00 155461.00C114216.33 155493.00 114205.67 155525.00 114195.00 155557.00C114184.33 155557.00 114173.67 155557.00 114163.00 155557.00C114163.00 155578.33 114163.00 155599.67 114163.00 155621.00C114143.66 155641.04 114124.23 155660.99 114104.44 155680.59C114101.59 155683.31 114099.07 155686.55 114095.22 155687.86C114074.81 155697.91 114054.41 155707.95 114034.00 155718.00C114012.67 155718.00 113991.33 155718.00 113970.00 155718.00C113970.00 155728.67 113970.00 155739.33 113970.00 155750.00C113959.33 155750.00 113948.67 155750.00 113938.00 155750.00C113927.33 155739.33 113916.67 155728.67 113906.00 155718.00C113884.33 155728.67 113862.67 155739.33 113841.00 155750.00C113841.00 155760.67 113841.00 155771.33 113841.00 155782.00C113830.33 155782.00 113819.67 155782.00 113809.00 155782.00C113787.67 155792.67 113766.33 155803.33 113745.00 155814.00C113702.00 155814.00 113659.00 155814.00 113616.00 155814.00C113605.33 155835.67 113594.67 155857.33 113584.00 155879.00C113573.33 155889.67 113562.67 155900.33 113552.00 155911.00C113520.00 155921.67 113488.00 155932.33 113456.00 155943.00C113456.00 155953.67 113456.00 155964.33 113456.00 155975.00C113445.00 155975.00 113434.00 155975.00 113423.00 155975.00C113412.33 155996.33 113401.67 156017.67 113391.00 156039.00C113401.67 156039.00 113412.33 156039.00 113423.00 156039.00C113423.00 156050.00 113423.00 156061.00 113423.00 156072.00C113401.67 156093.33 113380.33 156114.67 113359.00 156136.00C113380.33 156157.33 113401.67 156178.67 113423.00 156200.00C113391.00 156210.67 113359.00 156221.33 113327.00 156232.00C113316.33 156242.67 113305.67 156253.33 113295.00 156264.00C113295.00 156285.67 113295.00 156307.33 113295.00 156329.00C113273.67 156318.33 113252.33 156307.67 113231.00 156297.00C113231.00 156307.67 113231.00 156318.33 113231.00 156329.00C113241.67 156339.67 113252.33 156350.33 113263.00 156361.00C113241.33 156371.67 113219.67 156382.33 113198.00 156393.00C113198.00 156403.67 113198.00 156414.33 113198.00 156425.00C113209.00 156446.67 113220.00 156468.33 113231.00 156490.00C113263.00 156500.67 113295.00 156511.33 113327.00 156522.00C113316.33 156532.67 113305.67 156543.33 113295.00 156554.00C113295.00 156564.67 113295.00 156575.33 113295.00 156586.00C113316.33 156586.00 113337.67 156586.00 113359.00 156586.00C113380.33 156596.67 113401.67 156607.33 113423.00 156618.00C113412.33 156628.67 113401.67 156639.33 113391.00 156650.00C113401.67 156660.67 113412.33 156671.33 113423.00 156682.00C113401.67 156693.00 113380.33 156704.00 113359.00 156715.00C113359.00 156725.67 113359.00 156736.33 113359.00 156747.00C113348.33 156747.00 113337.67 156747.00 113327.00 156747.00C113327.00 156768.33 113327.00 156789.67 113327.00 156811.00C113337.67 156821.67 113348.33 156832.33 113359.00 156843.00C113369.67 156864.67 113380.33 156886.33 113391.00 156908.00C113401.67 156908.00 113412.33 156908.00 113423.00 156908.00C113434.00 156929.33 113445.00 156950.67 113456.00 156972.00C113466.67 156972.00 113477.33 156972.00 113488.00 156972.00C113488.00 156982.67 113488.00 156993.33 113488.00 157004.00C113509.33 157014.67 113530.67 157025.33 113552.00 157036.00C113541.33 157046.67 113530.67 157057.33 113520.00 157068.00C113520.00 157078.67 113520.00 157089.33 113520.00 157100.00C113541.33 157111.00 113562.67 157122.00 113584.00 157133.00C113573.33 157143.67 113562.67 157154.33 113552.00 157165.00C113552.00 157197.00 113552.00 157229.00 113552.00 157261.00C113530.67 157271.67 113509.33 157282.33 113488.00 157293.00C113498.67 157314.67 113509.33 157336.33 113520.00 157358.00C113509.33 157368.67 113498.67 157379.33 113488.00 157390.00C113488.00 157400.67 113488.00 157411.33 113488.00 157422.00C113455.67 157422.00 113423.33 157422.00 113391.00 157422.00C113380.33 157432.67 113369.67 157443.33 113359.00 157454.00C113337.67 157454.00 113316.33 157454.00 113295.00 157454.00C113295.00 157464.67 113295.00 157475.33 113295.00 157486.00C113284.33 157486.00 113273.67 157486.00 113263.00 157486.00C113263.00 157507.67 113263.00 157529.33 113263.00 157551.00C113230.67 157551.00 113198.33 157551.00 113166.00 157551.00C113155.33 157540.00 113144.67 157529.00 113134.00 157518.00C113112.67 157529.00 113091.33 157540.00 113070.00 157551.00C113070.00 157540.00 113070.00 157529.00 113070.00 157518.00C113059.25 157518.06 113048.50 157517.88 113037.75 157518.09C113005.50 157529.06 112973.25 157540.03 112941.00 157551.00C112919.67 157551.00 112898.33 157551.00 112877.00 157551.00C112855.67 157561.67 112834.33 157572.33 112813.00 157583.00C112791.33 157583.00 112769.67 157583.00 112748.00 157583.00C112726.67 157604.33 112705.33 157625.67 112684.00 157647.00C112705.33 157668.33 112726.67 157689.67 112748.00 157711.00C112748.00 157732.67 112748.00 157754.33 112748.00 157776.00C112737.33 157786.67 112726.67 157797.33 112716.00 157808.00C112694.67 157818.67 112673.33 157829.33 112652.00 157840.00C112662.67 157818.67 112673.33 157797.33 112684.00 157776.00C112641.00 157754.33 112598.00 157732.67 112555.00 157711.00C112544.33 157679.00 112533.67 157647.00 112523.00 157615.00C112501.67 157593.67 112480.33 157572.33 112459.00 157551.00C112459.00 157529.33 112459.00 157507.67 112459.00 157486.00C112448.33 157464.67 112437.67 157443.33 112427.00 157422.00C112416.33 157411.33 112405.67 157400.67 112395.00 157390.00C112362.67 157390.00 112330.33 157390.00 112298.00 157390.00C112308.67 157368.67 112319.33 157347.33 112330.00 157326.00C112319.33 157315.00 112308.67 157304.00 112298.00 157293.00C112287.33 157271.67 112276.67 157250.33 112266.00 157229.00C112244.67 157218.33 112223.33 157207.67 112202.00 157197.00C112169.67 157207.67 112137.33 157218.33 112105.00 157229.00C111944.33 157229.00 111783.67 157229.00 111623.00 157229.00C111601.58 157207.63 111580.26 157186.16 111558.78 157164.85C111526.52 157143.24 111494.26 157121.62 111462.00 157100.00C111419.00 157132.33 111376.00 157164.67 111333.00 157197.00C111311.58 157196.96 111290.16 157197.09 111268.74 157196.94C111226.16 157186.29 111183.58 157175.65 111141.00 157165.00C111055.00 157186.33 110969.00 157207.67 110883.00 157229.00C110861.67 157229.00 110840.33 157229.00 110819.00 157229.00C110787.00 157218.33 110755.00 157207.67 110723.00 157197.00C110690.67 157218.33 110658.33 157239.67 110626.00 157261.00C110604.67 157250.33 110583.33 157239.67 110562.00 157229.00C110540.33 157250.33 110518.67 157271.67 110497.00 157293.00C110486.33 157293.00 110475.67 157293.00 110465.00 157293.00C110454.33 157282.33 110443.67 157271.67 110433.00 157261.00C110433.00 157250.33 110433.00 157239.67 110433.00 157229.00C110401.00 157218.33 110369.00 157207.67 110337.00 157197.00C110294.00 157197.00 110251.00 157197.00 110208.00 157197.00C110176.00 157175.67 110144.00 157154.33 110112.00 157133.00C110101.33 157143.67 110090.67 157154.33 110080.00 157165.00C110058.33 157154.33 110036.67 157143.67 110015.00 157133.00C109993.67 157133.00 109972.33 157133.00 109951.00 157133.00C109951.00 157122.00 109951.00 157111.00 109951.00 157100.00C109908.00 157111.00 109865.00 157122.00 109822.00 157133.00C109811.33 157111.33 109800.67 157089.67 109790.00 157068.00C109790.00 157057.33 109790.00 157046.67 109790.00 157036.00C109768.67 157036.00 109747.33 157036.00 109726.00 157036.00C109726.00 157025.33 109726.00 157014.67 109726.00 157004.00C109704.33 156993.33 109682.67 156982.67 109661.00 156972.00C109650.33 156961.33 109639.67 156950.67 109629.00 156940.00C109618.33 156940.00 109607.67 156940.00 109597.00 156940.00C109586.33 156929.33 109575.67 156918.67 109565.00 156908.00C109543.67 156908.00 109522.33 156908.00 109501.00 156908.00C109490.33 156886.33 109479.67 156864.67 109469.00 156843.00C109458.00 156843.00 109447.00 156843.00 109436.00 156843.00C109425.33 156832.33 109414.67 156821.67 109404.00 156811.00C109404.00 156779.00 109404.00 156747.00 109404.00 156715.00C109382.67 156704.00 109361.33 156693.00 109340.00 156682.00C109318.67 156682.00 109297.33 156682.00 109276.00 156682.00C109265.33 156671.33 109254.67 156660.67 109244.00 156650.00C109201.00 156650.00 109158.00 156650.00 109115.00 156650.00C109072.00 156607.33 109029.00 156564.67 108986.00 156522.00C108964.67 156543.33 108943.33 156564.67 108922.00 156586.00C108889.67 156596.67 108857.33 156607.33 108825.00 156618.00C108793.00 156618.00 108761.00 156618.00 108729.00 156618.00C108718.33 156607.33 108707.67 156596.67 108697.00 156586.00C108675.67 156586.00 108654.33 156586.00 108633.00 156586.00C108611.33 156596.67 108589.67 156607.33 108568.00 156618.00C108557.33 156618.00 108546.67 156618.00 108536.00 156618.00C108536.00 156607.33 108536.00 156596.67 108536.00 156586.00C108504.00 156554.00 108472.00 156522.00 108440.00 156490.00C108407.67 156490.00 108375.33 156490.00 108343.00 156490.00C108321.67 156500.67 108300.33 156511.33 108279.00 156522.00C108268.33 156500.33 108257.67 156478.67 108247.00 156457.00C108236.33 156478.67 108225.67 156500.33 108215.00 156522.00C108193.33 156500.33 108171.67 156478.67 108150.00 156457.00C108128.67 156468.00 108107.33 156479.00 108086.00 156490.00C108075.33 156490.00 108064.67 156490.00 108054.00 156490.00C108037.55 156473.07 108021.31 156455.92 108004.15 156439.70C107999.10 156434.80 107994.05 156429.90 107989.00 156425.00C107978.33 156435.67 107967.67 156446.33 107957.00 156457.00C107935.67 156468.00 107914.33 156479.00 107893.00 156490.00C107818.00 156490.00 107743.00 156490.00 107668.00 156490.00C107646.67 156457.67 107625.33 156425.33 107604.00 156393.00C107582.33 156393.00 107560.67 156393.00 107539.00 156393.00C107496.33 156361.00 107453.67 156329.00 107411.00 156297.00C107378.43 156307.83 107345.76 156318.36 107313.26 156329.37C107292.18 156339.91 107271.09 156350.45 107250.00 156361.00C107239.33 156350.33 107228.67 156339.67 107218.00 156329.00C107207.33 156339.67 107196.67 156350.33 107186.00 156361.00C107164.33 156350.33 107142.67 156339.67 107121.00 156329.00C107099.67 156350.33 107078.33 156371.67 107057.00 156393.00C107046.33 156382.33 107035.67 156371.67 107025.00 156361.00C107003.67 156361.00 106982.33 156361.00 106961.00 156361.00C106961.00 156350.33 106961.00 156339.67 106961.00 156329.00C106949.91 156318.31 106938.95 156307.48 106927.76 156296.88C106906.51 156285.92 106885.25 156274.96 106864.00 156264.00C106864.00 156253.33 106864.00 156242.67 106864.00 156232.00C106853.33 156221.33 106842.67 156210.67 106832.00 156200.00C106810.67 156189.33 106789.33 156178.67 106768.00 156168.00C106735.67 156136.00 106703.33 156104.00 106671.00 156072.00C106639.00 156082.67 106607.00 156093.33 106575.00 156104.00C106564.33 156104.00 106553.67 156104.00 106543.00 156104.00C106532.33 156093.33 106521.67 156082.67 106511.00 156072.00C106500.00 156082.67 106489.00 156093.33 106478.00 156104.00C106467.33 156082.33 106456.67 156060.67 106446.00 156039.00C106424.67 156028.33 106403.33 156017.67 106382.00 156007.00C106371.33 156017.67 106360.67 156028.33 106350.00 156039.00C106339.33 156039.00 106328.67 156039.00 106318.00 156039.00C106307.00 156050.00 106296.00 156061.00 106285.00 156072.00C106274.33 156072.00 106263.67 156072.00 106253.00 156072.00C106231.67 156061.00 106210.33 156050.00 106189.00 156039.00C106167.67 156050.00 106146.33 156061.00 106125.00 156072.00C106114.00 156072.00 106103.00 156072.00 106092.00 156072.00C106081.33 156061.00 106070.67 156050.00 106060.00 156039.00C105995.67 156039.00 105931.33 156039.00 105867.00 156039.00C105824.33 156060.67 105781.67 156082.33 105739.00 156104.00C105685.33 156104.00 105631.67 156104.00 105578.00 156104.00C105567.33 156093.33 105556.67 156082.67 105546.00 156072.00C105524.67 156082.67 105503.33 156093.33 105482.00 156104.00C105471.00 156104.00 105460.00 156104.00 105449.00 156104.00C105427.67 156114.67 105406.33 156125.33 105385.00 156136.00C105320.67 156103.67 105256.33 156071.33 105192.00 156039.00C105127.67 156082.00 105063.33 156125.00 104999.00 156168.00C104966.77 156178.82 104934.42 156189.36 104902.26 156200.37C104859.50 156221.57 104816.75 156242.79 104774.00 156264.00C104752.67 156264.00 104731.33 156264.00 104710.00 156264.00C104688.67 156242.67 104667.33 156221.33 104646.00 156200.00C104635.00 156200.00 104624.00 156200.00 104613.00 156200.00C104591.67 156189.33 104570.33 156178.67 104549.00 156168.00C104527.67 156146.67 104506.33 156125.33 104485.00 156104.00C104474.33 156082.33 104463.67 156060.67 104453.00 156039.00C104442.33 156039.00 104431.67 156039.00 104421.00 156039.00C104410.00 156050.00 104399.00 156061.00 104388.00 156072.00C104377.33 156072.00 104366.67 156072.00 104356.00 156072.00C104345.33 156061.00 104334.67 156050.00 104324.00 156039.00C104302.67 156039.00 104281.33 156039.00 104260.00 156039.00C104238.33 156017.67 104216.67 155996.33 104195.00 155975.00C104184.33 155975.00 104173.67 155975.00 104163.00 155975.00C104163.00 155964.33 104163.00 155953.67 104163.00 155943.00C104120.33 155921.67 104077.67 155900.33 104035.00 155879.00C104013.33 155857.33 103991.67 155835.67 103970.00 155814.00C103959.33 155814.00 103948.67 155814.00 103938.00 155814.00C103938.00 155803.33 103938.00 155792.67 103938.00 155782.00C103927.33 155771.33 103916.67 155760.67 103906.00 155750.00C103906.00 155739.33 103906.00 155728.67 103906.00 155718.00C103884.67 155685.67 103863.33 155653.33 103842.00 155621.00C103831.33 155621.00 103820.67 155621.00 103810.00 155621.00C103810.00 155599.67 103810.00 155578.33 103810.00 155557.00C103767.00 155578.33 103724.00 155599.67 103681.00 155621.00C103670.33 155621.00 103659.67 155621.00 103649.00 155621.00C103638.33 155610.33 103627.67 155599.67 103617.00 155589.00C103595.33 155589.00 103573.67 155589.00 103552.00 155589.00C103552.00 155578.33 103552.00 155567.67 103552.00 155557.00C103530.67 155557.00 103509.33 155557.00 103488.00 155557.00C103488.00 155567.67 103488.00 155578.33 103488.00 155589.00C103477.33 155578.33 103466.67 155567.67 103456.00 155557.00C103445.33 155567.67 103434.67 155578.33 103424.00 155589.00C103402.33 155567.67 103380.67 155546.33 103359.00 155525.00C103348.25 155535.70 103337.59 155546.50 103326.78 155557.15C103262.52 155600.10 103198.26 155643.05 103134.00 155686.00C103123.33 155696.67 103112.67 155707.33 103102.00 155718.00C103080.67 155718.00 103059.33 155718.00 103038.00 155718.00C103005.67 155739.33 102973.33 155760.67 102941.00 155782.00C102919.67 155782.00 102898.33 155782.00 102877.00 155782.00C102845.00 155792.67 102813.00 155803.33 102781.00 155814.00C102738.00 155803.33 102695.00 155792.67 102652.00 155782.00C102609.33 155782.00 102566.67 155782.00 102524.00 155782.00C102524.00 155771.33 102524.00 155760.67 102524.00 155750.00C102491.67 155728.67 102459.33 155707.33 102427.00 155686.00C102416.33 155686.00 102405.67 155686.00 102395.00 155686.00C102384.33 155653.67 102373.67 155621.33 102363.00 155589.00C102330.67 155599.67 102298.33 155610.33 102266.00 155621.00C102234.00 155621.00 102202.00 155621.00 102170.00 155621.00C102148.33 155610.33 102126.67 155599.67 102105.00 155589.00C102094.33 155578.33 102083.67 155567.67 102073.00 155557.00C102083.67 155557.00 102094.33 155557.00 102105.00 155557.00C102083.67 155535.67 102062.33 155514.33 102041.00 155493.00C102062.33 155460.67 102083.67 155428.33 102105.00 155396.00C102083.67 155385.33 102062.33 155374.67 102041.00 155364.00C102041.00 155342.67 102041.00 155321.33 102041.00 155300.00C102030.33 155300.00 102019.67 155300.00 102009.00 155300.00C101987.67 155267.67 101966.33 155235.33 101945.00 155203.00C101934.25 155192.30 101923.60 155181.49 101912.78 155170.85C101880.52 155149.57 101848.26 155128.28 101816.00 155107.00C101794.46 155064.10 101773.12 155021.11 101752.00 154978.00C101741.33 154978.00 101730.67 154978.00 101720.00 154978.00C101687.67 154956.67 101655.33 154935.33 101623.00 154914.00C101623.00 154903.33 101623.00 154892.67 101623.00 154882.00C101633.67 154871.33 101644.33 154860.67 101655.00 154850.00C101644.33 154828.33 101633.67 154806.67 101623.00 154785.00C101633.67 154753.00 101644.33 154721.00 101655.00 154689.00C101666.00 154689.00 101677.00 154689.00 101688.00 154689.00C101688.00 154667.67 101688.00 154646.33 101688.00 154625.00C101677.00 154603.33 101666.00 154581.67 101655.00 154560.00C101633.67 154560.00 101612.33 154560.00 101591.00 154560.00C101591.00 154549.33 101591.00 154538.67 101591.00 154528.00C101580.33 154538.67 101569.67 154549.33 101559.00 154560.00C101559.00 154538.67 101559.00 154517.33 101559.00 154496.00C101548.33 154506.67 101537.67 154517.33 101527.00 154528.00C101516.33 154517.33 101505.67 154506.67 101495.00 154496.00C101495.00 154485.33 101495.00 154474.67 101495.00 154464.00C101473.33 154464.00 101451.67 154464.00 101430.00 154464.00C101440.67 154453.33 101451.33 154442.67 101462.00 154432.00C101451.33 154432.00 101440.67 154432.00 101430.00 154432.00C101440.67 154421.33 101451.33 154410.67 101462.00 154400.00C101440.67 154389.00 101419.33 154378.00 101398.00 154367.00C101398.00 154356.33 101398.00 154345.67 101398.00 154335.00C101387.33 154345.67 101376.67 154356.33 101366.00 154367.00C101355.33 154356.33 101344.67 154345.67 101334.00 154335.00C101334.00 154313.67 101334.00 154292.33 101334.00 154271.00C101323.33 154281.67 101312.67 154292.33 101302.00 154303.00C101291.00 154303.00 101280.00 154303.00 101269.00 154303.00C101269.00 154281.67 101269.00 154260.33 101269.00 154239.00C101237.00 154228.33 101205.00 154217.67 101173.00 154207.00C101173.00 154196.33 101173.00 154185.67 101173.00 154175.00C101183.67 154175.00 101194.33 154175.00 101205.00 154175.00C101194.33 154164.00 101183.67 154153.00 101173.00 154142.00C101162.33 154099.33 101151.67 154056.67 101141.00 154014.00C101162.33 154014.00 101183.67 154014.00 101205.00 154014.00C101205.00 153992.67 101205.00 153971.33 101205.00 153950.00C101215.67 153971.33 101226.33 153992.67 101237.00 154014.00C101247.67 154014.00 101258.33 154014.00 101269.00 154014.00C101258.33 153992.67 101247.67 153971.33 101237.00 153950.00C101247.67 153939.00 101258.33 153928.00 101269.00 153917.00C101258.33 153917.00 101247.67 153917.00 101237.00 153917.00C101215.67 153928.00 101194.33 153939.00 101173.00 153950.00C101183.67 153928.33 101194.33 153906.67 101205.00 153885.00C101215.67 153885.00 101226.33 153885.00 101237.00 153885.00C101247.67 153874.33 101258.33 153863.67 101269.00 153853.00C101237.00 153853.00 101205.00 153853.00 101173.00 153853.00C101173.00 153831.67 101173.00 153810.33 101173.00 153789.00C101162.33 153799.67 101151.67 153810.33 101141.00 153821.00C101130.33 153810.33 101119.67 153799.67 101109.00 153789.00C101130.33 153789.00 101151.67 153789.00 101173.00 153789.00C101173.00 153778.33 101173.00 153767.67 101173.00 153757.00C101183.67 153757.00 101194.33 153757.00 101205.00 153757.00C101215.67 153746.00 101226.33 153735.00 101237.00 153724.00C101215.67 153724.00 101194.33 153724.00 101173.00 153724.00C101183.67 153702.67 101194.33 153681.33 101205.00 153660.00C101183.67 153660.00 101162.33 153660.00 101141.00 153660.00C101151.67 153660.00 101162.33 153660.00 101173.00 153660.00C101173.00 153649.33 101173.00 153638.67 101173.00 153628.00C101162.33 153606.67 101151.67 153585.33 101141.00 153564.00C101130.33 153574.67 101119.67 153585.33 101109.00 153596.00C101109.00 153585.33 101109.00 153574.67 101109.00 153564.00C101119.67 153542.33 101130.33 153520.67 101141.00 153499.00C101151.67 153499.00 101162.33 153499.00 101173.00 153499.00C101173.00 153488.33 101173.00 153477.67 101173.00 153467.00C101183.67 153456.33 101194.33 153445.67 101205.00 153435.00C101226.33 153445.67 101247.67 153456.33 101269.00 153467.00C101269.00 153456.33 101269.00 153445.67 101269.00 153435.00C101247.67 153435.00 101226.33 153435.00 101205.00 153435.00C101215.67 153413.67 101226.33 153392.33 101237.00 153371.00C101237.00 153360.33 101237.00 153349.67 101237.00 153339.00C101205.00 153339.00 101173.00 153339.00 101141.00 153339.00C101162.33 153328.00 101183.67 153317.00 101205.00 153306.00C101205.00 153295.33 101205.00 153284.67 101205.00 153274.00C101162.33 153252.67 101119.67 153231.33 101077.00 153210.00C101087.67 153199.33 101098.33 153188.67 101109.00 153178.00C101130.33 153178.00 101151.67 153178.00 101173.00 153178.00C101162.33 153167.33 101151.67 153156.67 101141.00 153146.00C101162.33 153146.00 101183.67 153146.00 101205.00 153146.00C101173.00 153124.33 101141.00 153102.67 101109.00 153081.00C101087.33 153092.00 101065.67 153103.00 101044.00 153114.00C101055.00 153081.67 101066.00 153049.33 101077.00 153017.00C101077.00 153006.33 101077.00 152995.67 101077.00 152985.00C101055.33 152985.00 101033.67 152985.00 101012.00 152985.00C101022.67 152974.33 101033.33 152963.67 101044.00 152953.00C101022.67 152942.33 101001.33 152931.67 100980.00 152921.00C101001.33 152921.00 101022.67 152921.00 101044.00 152921.00C101033.33 152899.33 101022.67 152877.67 101012.00 152856.00C101033.67 152866.67 101055.33 152877.33 101077.00 152888.00C101077.00 152899.00 101077.00 152910.00 101077.00 152921.00C101087.67 152910.00 101098.33 152899.00 101109.00 152888.00C101109.00 152877.33 101109.00 152866.67 101109.00 152856.00C101119.67 152845.33 101130.33 152834.67 101141.00 152824.00C101119.67 152813.33 101098.33 152802.67 101077.00 152792.00C101077.00 152781.33 101077.00 152770.67 101077.00 152760.00C101066.00 152738.33 101055.00 152716.67 101044.00 152695.00C101022.67 152684.33 101001.33 152673.67 100980.00 152663.00C100958.67 152673.67 100937.33 152684.33 100916.00 152695.00C100926.67 152673.67 100937.33 152652.33 100948.00 152631.00C100958.67 152631.00 100969.33 152631.00 100980.00 152631.00C100980.00 152620.33 100980.00 152609.67 100980.00 152599.00C100969.33 152609.67 100958.67 152620.33 100948.00 152631.00C100937.33 152620.33 100926.67 152609.67 100916.00 152599.00C100926.67 152577.67 100937.33 152556.33 100948.00 152535.00C100937.33 152524.33 100926.67 152513.67 100916.00 152503.00C100883.67 152524.33 100851.33 152545.67 100819.00 152567.00C100819.00 152556.33 100819.00 152545.67 100819.00 152535.00C100808.33 152545.67 100797.67 152556.33 100787.00 152567.00C100787.00 152556.33 100787.00 152545.67 100787.00 152535.00C100797.67 152524.33 100808.33 152513.67 100819.00 152503.00C100808.33 152492.00 100797.67 152481.00 100787.00 152470.00C100765.67 152481.00 100744.33 152492.00 100723.00 152503.00C100712.33 152503.00 100701.67 152503.00 100691.00 152503.00C100691.00 152492.00 100691.00 152481.00 100691.00 152470.00C100680.33 152470.00 100669.67 152470.00 100659.00 152470.00C100659.00 152481.00 100659.00 152492.00 100659.00 152503.00C100648.00 152503.00 100637.00 152503.00 100626.00 152503.00C100637.00 152524.33 100648.00 152545.67 100659.00 152567.00C100648.00 152588.33 100637.00 152609.67 100626.00 152631.00C100615.33 152620.33 100604.67 152609.67 100594.00 152599.00C100594.00 152577.67 100594.00 152556.33 100594.00 152535.00C100583.33 152513.33 100572.67 152491.67 100562.00 152470.00C100540.67 152470.00 100519.33 152470.00 100498.00 152470.00C100498.00 152459.33 100498.00 152448.67 100498.00 152438.00C100508.67 152427.33 100519.33 152416.67 100530.00 152406.00C100497.67 152384.67 100465.33 152363.33 100433.00 152342.00C100422.33 152331.33 100411.67 152320.67 100401.00 152310.00C100390.33 152288.33 100379.67 152266.67 100369.00 152245.00C100347.67 152234.33 100326.33 152223.67 100305.00 152213.00C100262.00 152256.00 100219.00 152299.00 100176.00 152342.00C100154.67 152320.67 100133.33 152299.33 100112.00 152278.00C100101.33 152256.33 100090.67 152234.67 100080.00 152213.00C100058.67 152213.00 100037.33 152213.00 100016.00 152213.00C100005.00 152245.33 99994.00 152277.67 99983.00 152310.00C99983.00 152363.33 99983.00 152416.67 99983.00 152470.00C99972.33 152470.00 99961.67 152470.00 99951.00 152470.00C99951.00 152481.00 99951.00 152492.00 99951.00 152503.00C99929.66 152470.67 99908.34 152438.33 99887.00 152406.00C99865.67 152352.33 99844.33 152298.67 99823.00 152245.00C99823.00 152223.67 99823.00 152202.33 99823.00 152181.00C99865.66 152127.33 99908.34 152073.67 99951.00 152020.00C99951.00 151988.00 99951.00 151956.00 99951.00 151924.00C99940.34 151913.33 99929.66 151902.67 99919.00 151892.00C99908.33 151892.00 99897.67 151892.00 99887.00 151892.00C99833.28 151934.74 99779.50 151977.41 99725.81 152020.19C99693.88 152052.46 99661.94 152084.73 99630.00 152117.00C99618.91 152116.94 99607.83 152117.11 99596.75 152116.92C99564.83 152106.28 99532.91 152095.64 99501.00 152085.00C99479.67 152095.67 99458.33 152106.33 99437.00 152117.00C99426.33 152138.33 99415.67 152159.67 99405.00 152181.00C99415.67 152181.00 99426.33 152181.00 99437.00 152181.00C99479.67 152202.33 99522.33 152223.67 99565.00 152245.00C99565.00 152256.00 99565.00 152267.00 99565.00 152278.00C99575.66 152288.67 99586.34 152299.33 99597.00 152310.00C99554.33 152310.00 99511.67 152310.00 99469.00 152310.00C99426.00 152277.67 99383.00 152245.33 99340.00 152213.00C99329.33 152213.00 99318.67 152213.00 99308.00 152213.00C99297.34 152223.67 99286.66 152234.33 99276.00 152245.00C99276.00 152288.00 99276.00 152331.00 99276.00 152374.00C99254.67 152374.00 99233.33 152374.00 99212.00 152374.00C99190.33 152352.67 99168.67 152331.33 99147.00 152310.00C99125.67 152267.00 99104.33 152224.00 99083.00 152181.00C99061.67 152181.00 99040.33 152181.00 99019.00 152181.00C98965.33 152213.33 98911.67 152245.67 98858.00 152278.00C98826.00 152331.33 98794.00 152384.67 98762.00 152438.00C98751.00 152438.00 98740.00 152438.00 98729.00 152438.00C98697.00 152416.67 98665.00 152395.33 98633.00 152374.00C98611.67 152384.67 98590.33 152395.33 98569.00 152406.00C98569.00 152438.33 98569.00 152470.67 98569.00 152503.00C98558.00 152524.33 98547.00 152545.67 98536.00 152567.00C98482.67 152609.67 98429.33 152652.33 98376.00 152695.00C98386.67 152738.00 98397.33 152781.00 98408.00 152824.00C98397.34 152834.67 98386.66 152845.33 98376.00 152856.00C98365.33 152856.00 98354.67 152856.00 98344.00 152856.00C98322.33 152802.33 98300.67 152748.67 98279.00 152695.00C98247.00 152652.33 98215.00 152609.67 98183.00 152567.00C98161.60 152556.27 98140.15 152545.63 98118.78 152534.85C98086.52 152513.24 98054.26 152491.62 98022.00 152470.00C97990.00 152491.67 97958.00 152513.33 97926.00 152535.00C97915.00 152535.00 97904.00 152535.00 97893.00 152535.00C97882.33 152513.33 97871.67 152491.67 97861.00 152470.00C97871.67 152448.67 97882.33 152427.33 97893.00 152406.00C97850.33 152384.67 97807.67 152363.33 97765.00 152342.00C97754.25 152342.04 97743.49 152341.91 97732.74 152342.06C97689.83 152352.71 97646.91 152363.35 97604.00 152374.00C97604.00 152288.33 97604.00 152202.67 97604.00 152117.00C97593.33 152084.67 97582.67 152052.33 97572.00 152020.00C97572.00 151955.67 97572.00 151891.33 97572.00 151827.00C97539.66 151805.67 97507.34 151784.33 97475.00 151763.00C97475.00 151731.00 97475.00 151699.00 97475.00 151667.00C97496.67 151656.00 97518.33 151645.00 97540.00 151634.00z"},"br-21":{"name":"Rio Grande do Sul","path":"M84646.00 173756.00C84656.67 173691.67 84667.33 173627.33 84678.00 173563.00C84667.35 173498.54 84656.55 173434.11 84646.00 173369.64C84646.00 173348.43 84646.00 173327.21 84646.00 173306.00C84699.67 173220.00 84753.33 173134.00 84807.00 173048.00C84882.00 172984.00 84957.00 172920.00 85032.00 172856.00C85064.33 172845.00 85096.67 172834.00 85129.00 172823.00C85214.67 172823.00 85300.33 172823.00 85386.00 172823.00C85450.33 172801.67 85514.67 172780.33 85579.00 172759.00C85590.24 172748.00 85601.02 172736.48 85612.57 172725.82C85655.17 172693.79 85697.95 172661.98 85740.42 172629.79C85815.28 172565.86 85890.14 172501.93 85965.00 172438.00C86093.36 172266.35 86222.19 172095.06 86350.00 171923.00C86403.66 171880.33 86457.34 171837.67 86511.00 171795.00C86554.00 171730.67 86597.00 171666.33 86640.00 171602.00C86715.56 171558.76 86790.99 171515.28 86866.63 171472.18C86908.75 171451.11 86950.88 171430.06 86993.00 171409.00C87014.78 171387.29 87036.43 171365.44 87058.30 171343.80C87090.20 171322.54 87122.10 171301.27 87154.00 171280.00C87186.33 171237.00 87218.67 171194.00 87251.00 171151.00C87251.00 171097.67 87251.00 171044.33 87251.00 170991.00C87261.67 170937.33 87272.33 170883.67 87283.00 170830.00C87304.33 170819.33 87325.67 170808.67 87347.00 170798.00C87411.33 170798.00 87475.67 170798.00 87540.00 170798.00C87561.33 170787.33 87582.67 170776.67 87604.00 170766.00C87679.00 170626.67 87754.00 170487.33 87829.00 170348.00C87840.00 170315.67 87851.00 170283.33 87862.00 170251.00C87851.00 170208.33 87840.00 170165.67 87829.00 170123.00C87861.33 170058.67 87893.67 169994.33 87926.00 169930.00C87969.00 169876.33 88012.00 169822.67 88055.00 169769.00C88076.33 169704.67 88097.67 169640.33 88119.00 169576.00C88151.00 169565.33 88183.00 169554.67 88215.00 169544.00C88268.67 169544.00 88322.33 169544.00 88376.00 169544.00C88419.12 169511.63 88462.14 169479.13 88505.32 169446.84C88526.54 169436.23 88547.77 169425.61 88569.00 169415.00C88676.45 169404.35 88783.90 169393.60 88891.36 169383.00C88912.57 169383.00 88933.79 169383.00 88955.00 169383.00C88965.67 169318.67 88976.33 169254.33 88987.00 169190.00C89008.33 169158.00 89029.67 169126.00 89051.00 169094.00C89019.00 169061.67 88987.00 169029.33 88955.00 168997.00C88965.67 168954.33 88976.33 168911.67 88987.00 168869.00C89008.33 168847.33 89029.67 168825.67 89051.00 168804.00C89073.10 168793.28 89094.97 168782.02 89117.22 168771.65C89191.81 168750.43 89266.41 168729.22 89341.00 168708.00C89362.39 168686.23 89383.88 168664.55 89405.21 168642.72C89437.18 168600.03 89469.27 168557.43 89501.16 168514.68C89512.11 168493.45 89523.05 168472.23 89534.00 168451.00C89533.97 168407.88 89534.07 168364.77 89533.95 168321.65C89522.97 168246.77 89511.98 168171.88 89501.00 168097.00C89512.00 168064.67 89523.00 168032.33 89534.00 168000.00C89555.75 167988.98 89577.75 167978.42 89599.34 167967.11C89630.89 167946.07 89662.44 167925.04 89694.00 167904.00C89812.00 167904.00 89930.00 167904.00 90048.00 167904.00C90091.00 167850.33 90134.00 167796.67 90177.00 167743.00C90198.42 167700.25 90219.70 167657.42 90241.21 167614.71C90273.15 167571.81 90305.07 167528.90 90337.00 167486.00C90465.67 167378.67 90594.33 167271.33 90723.00 167164.00C90766.00 167142.67 90809.00 167121.33 90852.00 167100.00C90873.34 167078.67 90894.66 167057.33 90916.00 167036.00C90926.67 167014.67 90937.33 166993.33 90948.00 166972.00C90926.62 166950.22 90905.11 166928.56 90883.80 166906.70C90862.54 166874.80 90841.27 166842.90 90820.00 166811.00C90820.00 166768.00 90820.00 166725.00 90820.00 166682.00C90841.33 166650.00 90862.67 166618.00 90884.00 166586.00C90928.48 166575.09 90972.86 166563.72 91017.41 166553.09C91101.51 166535.73 91185.57 166518.22 91269.85 166501.76C91293.68 166496.86 91317.65 166492.60 91341.36 166487.18C91381.91 166477.11 91422.45 166467.06 91463.00 166457.00C91473.66 166446.33 91484.34 166435.67 91495.00 166425.00C91494.91 166414.22 91495.19 166403.44 91494.86 166392.67C91462.57 166317.78 91430.29 166242.89 91398.00 166168.00C91398.00 166135.67 91398.00 166103.33 91398.00 166071.00C91441.00 166006.67 91484.00 165942.33 91527.00 165878.00C91570.00 165867.33 91613.00 165856.67 91656.00 165846.00C91698.67 165867.33 91741.33 165888.67 91784.00 165910.00C91880.67 165910.00 91977.33 165910.00 92074.00 165910.00C92106.00 165921.00 92138.00 165932.00 92170.00 165943.00C92180.66 165953.67 92191.34 165964.33 92202.00 165975.00C92212.74 166007.10 92223.34 166039.25 92234.16 166071.32C92255.97 166114.12 92277.61 166157.00 92299.00 166200.00C92320.33 166200.00 92341.67 166200.00 92363.00 166200.00C92373.67 166178.67 92384.33 166157.33 92395.00 166136.00C92395.00 166103.67 92395.00 166071.33 92395.00 166039.00C92427.33 165953.33 92459.67 165867.67 92492.00 165782.00C92492.00 165760.67 92492.00 165739.33 92492.00 165718.00C92438.24 165685.59 92384.44 165653.25 92330.71 165620.79C92287.81 165588.86 92244.90 165556.93 92202.00 165525.00C92137.67 165503.33 92073.33 165481.67 92009.00 165460.00C91998.33 165428.00 91987.67 165396.00 91977.00 165364.00C91987.67 165342.67 91998.33 165321.33 92009.00 165300.00C92073.45 165278.32 92137.87 165256.53 92202.35 165234.93C92255.90 165224.28 92309.45 165213.64 92363.00 165203.00C92427.41 165149.24 92491.88 165095.55 92556.25 165041.75C92566.97 165031.14 92577.47 165020.32 92588.32 165009.84C92609.54 164999.23 92630.77 164988.61 92652.00 164978.00C92663.00 164978.00 92674.00 164978.00 92685.00 164978.00C92695.66 164967.33 92706.34 164956.67 92717.00 164946.00C92706.33 164924.67 92695.67 164903.33 92685.00 164882.00C92706.33 164871.00 92727.67 164860.00 92749.00 164849.00C92738.33 164827.67 92727.67 164806.33 92717.00 164785.00C92727.69 164774.20 92738.60 164763.61 92749.16 164752.68C92759.77 164731.45 92770.39 164710.23 92781.00 164689.00C92802.33 164689.00 92823.67 164689.00 92845.00 164689.00C92866.66 164699.67 92888.34 164710.33 92910.00 164721.00C92910.00 164731.67 92910.00 164742.33 92910.00 164753.00C92899.00 164774.33 92888.00 164795.67 92877.00 164817.00C92877.00 164827.67 92877.00 164838.33 92877.00 164849.00C92920.00 164870.67 92963.00 164892.33 93006.00 164914.00C93016.67 164914.00 93027.33 164914.00 93038.00 164914.00C93048.66 164903.33 93059.34 164892.67 93070.00 164882.00C93070.00 164849.67 93070.00 164817.33 93070.00 164785.00C93091.67 164763.67 93113.33 164742.33 93135.00 164721.00C93167.00 164710.33 93199.00 164699.67 93231.00 164689.00C93263.38 164624.69 93295.89 164560.44 93328.00 164496.00C93349.33 164496.00 93370.67 164496.00 93392.00 164496.00C93413.33 164528.00 93434.67 164560.00 93456.00 164592.00C93488.33 164592.00 93520.67 164592.00 93553.00 164592.00C93563.67 164570.67 93574.33 164549.33 93585.00 164528.00C93627.67 164485.00 93670.33 164442.00 93713.00 164399.00C93777.33 164367.00 93841.67 164335.00 93906.00 164303.00C93917.00 164292.33 93928.00 164281.67 93939.00 164271.00C93939.00 164249.33 93939.00 164227.67 93939.00 164206.00C93917.33 164174.00 93895.67 164142.00 93874.00 164110.00C93863.33 164110.00 93852.67 164110.00 93842.00 164110.00C93842.00 164088.67 93842.00 164067.33 93842.00 164046.00C93863.33 164024.33 93884.67 164002.67 93906.00 163981.00C93949.00 163981.00 93992.00 163981.00 94035.00 163981.00C94045.66 163970.33 94056.34 163959.67 94067.00 163949.00C94077.67 163906.33 94088.33 163863.67 94099.00 163821.00C94109.67 163799.33 94120.33 163777.67 94131.00 163756.00C94163.33 163756.00 94195.67 163756.00 94228.00 163756.00C94271.00 163766.67 94314.00 163777.33 94357.00 163788.00C94378.33 163788.00 94399.67 163788.00 94421.00 163788.00C94432.42 163765.57 94443.19 163742.78 94455.04 163720.58C94486.36 163668.05 94517.68 163615.53 94549.00 163563.00C94613.34 163509.67 94677.66 163456.33 94742.00 163403.00C94763.67 163403.00 94785.33 163403.00 94807.00 163403.00C94828.33 163413.67 94849.67 163424.33 94871.00 163435.00C94892.44 163467.07 94913.71 163499.25 94935.25 163531.25C94966.74 163562.43 94998.76 163593.09 95029.30 163625.22C95033.33 163631.47 95037.34 163620.56 95041.36 163618.32C95059.34 163599.65 95077.61 163581.27 95096.00 163563.00C95085.33 163520.33 95074.67 163477.67 95064.00 163435.00C95074.80 163424.31 95085.39 163413.40 95096.32 163402.84C95117.67 163391.89 95138.93 163380.74 95160.35 163369.91C95203.23 163359.28 95246.12 163348.64 95289.00 163338.00C95332.38 163359.74 95375.59 163381.87 95419.09 163403.36C95450.72 163413.91 95482.36 163424.45 95514.00 163435.00C95524.67 163413.33 95535.33 163391.67 95546.00 163370.00C95546.00 163348.67 95546.00 163327.33 95546.00 163306.00C95535.33 163284.67 95524.67 163263.33 95514.00 163242.00C95439.00 163209.67 95364.00 163177.33 95289.00 163145.00C95278.33 163123.67 95267.67 163102.33 95257.00 163081.00C95278.34 163059.67 95299.66 163038.33 95321.00 163017.00C95353.33 163006.33 95385.67 162995.67 95418.00 162985.00C95471.57 163027.94 95525.31 163070.68 95578.77 163113.75C95589.51 163124.16 95600.25 163134.58 95611.00 163145.00C95632.33 163134.33 95653.67 163123.67 95675.00 163113.00C95685.67 163081.00 95696.33 163049.00 95707.00 163017.00C95728.33 163017.00 95749.67 163017.00 95771.00 163017.00C95803.33 163027.67 95835.67 163038.33 95868.00 163049.00C95878.67 163049.00 95889.33 163049.00 95900.00 163049.00C95921.33 163038.33 95942.67 163027.67 95964.00 163017.00C95974.67 162995.33 95985.33 162973.67 95996.00 162952.00C95996.00 162941.33 95996.00 162930.67 95996.00 162920.00C96039.00 162877.33 96082.00 162834.67 96125.00 162792.00C96125.00 162652.67 96125.00 162513.33 96125.00 162374.00C96135.67 162352.33 96146.33 162330.67 96157.00 162309.00C96221.33 162309.00 96285.67 162309.00 96350.00 162309.00C96360.66 162298.33 96371.34 162287.67 96382.00 162277.00C96392.68 162244.88 96403.46 162212.79 96414.07 162180.65C96425.05 162127.10 96436.02 162073.55 96447.00 162020.00C96479.00 161955.67 96511.00 161891.33 96543.00 161827.00C96553.67 161827.00 96564.33 161827.00 96575.00 161827.00C96596.33 161837.67 96617.67 161848.33 96639.00 161859.00C96650.00 161923.33 96661.00 161987.67 96672.00 162052.00C96693.33 162062.67 96714.67 162073.33 96736.00 162084.00C96757.33 162084.00 96778.67 162084.00 96800.00 162084.00C96832.06 162051.72 96864.61 162019.94 96897.00 161988.00C96929.00 161988.00 96961.00 161988.00 96993.00 161988.00C97057.33 162009.33 97121.67 162030.67 97186.00 162052.00C97196.66 162041.33 97207.34 162030.67 97218.00 162020.00C97217.94 161998.55 97218.11 161977.10 97217.91 161955.65C97207.28 161912.77 97196.64 161869.88 97186.00 161827.00C97186.00 161805.67 97186.00 161784.33 97186.00 161763.00C97196.67 161741.33 97207.33 161719.67 97218.00 161698.00C97228.67 161698.00 97239.33 161698.00 97250.00 161698.00C97261.00 161709.00 97272.00 161720.00 97283.00 161731.00C97304.33 161784.33 97325.67 161837.67 97347.00 161891.00C97379.00 161891.00 97411.00 161891.00 97443.00 161891.00C97453.77 161869.17 97465.01 161847.55 97475.49 161825.58C97486.40 161793.96 97497.15 161762.27 97508.18 161730.69C97540.13 161677.13 97572.06 161623.56 97604.00 161570.00C97604.00 161548.67 97604.00 161527.33 97604.00 161506.00C97614.67 161484.33 97625.33 161462.67 97636.00 161441.00C97646.67 161441.00 97657.33 161441.00 97668.00 161441.00C97711.00 161484.00 97754.00 161527.00 97797.00 161570.00C97818.33 161612.67 97839.67 161655.33 97861.00 161698.00C97871.67 161698.00 97882.33 161698.00 97893.00 161698.00C97914.66 161687.33 97936.34 161676.67 97958.00 161666.00C97968.67 161644.67 97979.33 161623.33 97990.00 161602.00C98000.66 161591.33 98011.34 161580.67 98022.00 161570.00C98097.00 161570.00 98172.00 161570.00 98247.00 161570.00C98268.33 161559.33 98289.67 161548.67 98311.00 161538.00C98311.00 161516.33 98311.00 161494.67 98311.00 161473.00C98299.93 161462.16 98289.29 161450.84 98277.96 161440.30C98246.30 161419.21 98214.65 161398.10 98183.00 161377.00C98183.00 161355.67 98183.00 161334.33 98183.00 161313.00C98236.67 161313.00 98290.33 161313.00 98344.00 161313.00C98375.45 161280.12 98407.87 161248.21 98440.00 161216.00C98450.67 161216.00 98461.33 161216.00 98472.00 161216.00C98504.34 161237.33 98536.66 161258.67 98569.00 161280.00C98569.00 161291.00 98569.00 161302.00 98569.00 161313.00C98601.10 161355.74 98633.09 161398.56 98665.25 161441.25C98675.97 161451.86 98686.47 161462.68 98697.32 161473.16C98718.87 161484.11 98740.44 161495.05 98762.00 161506.00C98783.33 161495.00 98804.67 161484.00 98826.00 161473.00C98826.00 161451.67 98826.00 161430.33 98826.00 161409.00C98815.33 161377.00 98804.67 161345.00 98794.00 161313.00C98794.00 161280.67 98794.00 161248.33 98794.00 161216.00C98804.67 161216.00 98815.33 161216.00 98826.00 161216.00C98847.33 161226.67 98868.67 161237.33 98890.00 161248.00C98911.38 161269.78 98932.89 161291.44 98954.20 161313.29C98975.80 161345.19 98997.40 161377.10 99019.00 161409.00C99030.01 161408.78 99041.14 161409.47 99052.09 161408.64C99083.72 161398.09 99115.36 161387.55 99147.00 161377.00C99147.00 161334.00 99147.00 161291.00 99147.00 161248.00C99158.00 161226.67 99169.00 161205.33 99180.00 161184.00C99190.66 161173.33 99201.34 161162.67 99212.00 161152.00C99244.00 161152.00 99276.00 161152.00 99308.00 161152.00C99329.33 161141.33 99350.67 161130.67 99372.00 161120.00C99383.00 161098.33 99394.00 161076.67 99405.00 161055.00C99405.00 161012.33 99405.00 160969.67 99405.00 160927.00C99415.67 160894.67 99426.33 160862.33 99437.00 160830.00C99458.33 160798.00 99479.67 160766.00 99501.00 160734.00C99501.06 160712.55 99500.89 160691.10 99501.09 160669.65C99511.72 160626.77 99522.36 160583.88 99533.00 160541.00C99554.34 160519.67 99575.66 160498.33 99597.00 160477.00C99608.00 160477.00 99619.00 160477.00 99630.00 160477.00C99640.66 160487.67 99651.34 160498.33 99662.00 160509.00C99662.00 160562.67 99662.00 160616.33 99662.00 160670.00C99683.33 160680.67 99704.67 160691.33 99726.00 160702.00C99833.33 160702.00 99940.67 160702.00 100048.00 160702.00C100079.57 160637.45 100111.88 160573.27 100144.00 160509.00C100187.00 160498.33 100230.00 160487.67 100273.00 160477.00C100294.33 160444.67 100315.67 160412.33 100337.00 160380.00C100337.00 160348.00 100337.00 160316.00 100337.00 160284.00C100347.67 160262.33 100358.33 160240.67 100369.00 160219.00C100401.33 160208.33 100433.67 160197.67 100466.00 160187.00C100508.67 160187.00 100551.33 160187.00 100594.00 160187.00C100594.00 160133.33 100594.00 160079.67 100594.00 160026.00C100604.67 160015.33 100615.33 160004.67 100626.00 159994.00C100647.67 159994.00 100669.33 159994.00 100691.00 159994.00C100712.33 160004.67 100733.67 160015.33 100755.00 160026.00C100765.67 160047.67 100776.33 160069.33 100787.00 160091.00C100808.67 160091.00 100830.33 160091.00 100852.00 160091.00C100873.33 160058.67 100894.67 160026.33 100916.00 159994.00C100926.67 159962.00 100937.33 159930.00 100948.00 159898.00C100958.67 159887.33 100969.33 159876.67 100980.00 159866.00C101012.33 159866.00 101044.67 159866.00 101077.00 159866.00C101098.33 159919.33 101119.67 159972.67 101141.00 160026.00C101151.67 160037.00 101162.33 160048.00 101173.00 160059.00C101183.67 160059.00 101194.33 160059.00 101205.00 160059.00C101215.67 160069.67 101226.33 160080.33 101237.00 160091.00C101258.67 160091.00 101280.33 160091.00 101302.00 160091.00C101313.24 160079.99 101324.02 160068.49 101335.57 160057.82C101377.71 160025.88 101419.85 159993.94 101462.00 159962.00C101483.67 159972.67 101505.33 159983.33 101527.00 159994.00C101548.33 160047.67 101569.67 160101.33 101591.00 160155.00C101612.33 160155.00 101633.67 160155.00 101655.00 160155.00C101676.67 160144.33 101698.33 160133.67 101720.00 160123.00C101730.67 160123.00 101741.33 160123.00 101752.00 160123.00C101762.80 160112.31 101773.39 160101.40 101784.32 160090.84C101805.55 160080.23 101826.77 160069.61 101848.00 160059.00C101858.67 160048.00 101869.33 160037.00 101880.00 160026.00C101912.33 160026.00 101944.67 160026.00 101977.00 160026.00C101998.33 160037.00 102019.67 160048.00 102041.00 160059.00C102041.00 160069.67 102041.00 160080.33 102041.00 160091.00C102051.67 160101.67 102062.33 160112.33 102073.00 160123.00C102073.00 160176.67 102073.00 160230.33 102073.00 160284.00C102083.67 160294.67 102094.33 160305.33 102105.00 160316.00C102116.00 160316.00 102127.00 160316.00 102138.00 160316.00C102159.33 160262.33 102180.67 160208.67 102202.00 160155.00C102245.00 160155.00 102288.00 160155.00 102331.00 160155.00C102373.67 160133.67 102416.33 160112.33 102459.00 160091.00C102491.33 160091.00 102523.67 160091.00 102556.00 160091.00C102588.00 160123.00 102620.00 160155.00 102652.00 160187.00C102673.33 160197.67 102694.67 160208.33 102716.00 160219.00C102748.33 160219.00 102780.67 160219.00 102813.00 160219.00C102813.00 160176.33 102813.00 160133.67 102813.00 160091.00C102791.67 160069.33 102770.33 160047.67 102749.00 160026.00C102749.00 159983.33 102749.00 159940.67 102749.00 159898.00C102791.67 159898.00 102834.33 159898.00 102877.00 159898.00C102887.67 159919.33 102898.33 159940.67 102909.00 159962.00C102930.67 159972.67 102952.33 159983.33 102974.00 159994.00C103049.00 159972.67 103124.00 159951.33 103199.00 159930.00C103209.74 159908.28 103220.87 159886.74 103231.36 159864.90C103241.91 159832.94 103252.45 159800.97 103263.00 159769.00C103284.33 159747.67 103305.67 159726.33 103327.00 159705.00C103337.67 159705.00 103348.33 159705.00 103359.00 159705.00C103370.00 159694.33 103381.00 159683.67 103392.00 159673.00C103402.69 159683.80 103413.60 159694.39 103424.16 159705.32C103434.77 159726.55 103445.39 159747.77 103456.00 159769.00C103466.67 159779.67 103477.33 159790.33 103488.00 159801.00C103552.33 159801.00 103616.67 159801.00 103681.00 159801.00C103681.00 159812.00 103681.00 159823.00 103681.00 159834.00C103691.67 159844.67 103702.33 159855.33 103713.00 159866.00C103723.67 159866.00 103734.33 159866.00 103745.00 159866.00C103745.00 159898.00 103745.00 159930.00 103745.00 159962.00C103733.58 159984.44 103722.81 160007.22 103710.96 160029.42C103679.64 160081.95 103648.32 160134.48 103617.00 160187.00C103617.00 160219.33 103617.00 160251.67 103617.00 160284.00C103638.33 160284.00 103659.67 160284.00 103681.00 160284.00C103702.33 160251.67 103723.67 160219.33 103745.00 160187.00C103830.98 160144.30 103916.82 160101.31 104003.00 160059.00C104013.67 160059.00 104024.33 160059.00 104035.00 160059.00C104088.33 160091.00 104141.67 160123.00 104195.00 160155.00C104216.67 160155.00 104238.33 160155.00 104260.00 160155.00C104270.67 160144.33 104281.33 160133.67 104292.00 160123.00C104302.67 160069.33 104313.33 160015.67 104324.00 159962.00C104324.00 159951.33 104324.00 159940.67 104324.00 159930.00C104334.67 159930.00 104345.33 159930.00 104356.00 159930.00C104366.67 159919.33 104377.33 159908.67 104388.00 159898.00C104399.00 159908.67 104410.00 159919.33 104421.00 159930.00C104442.33 159973.00 104463.67 160016.00 104485.00 160059.00C104485.00 160069.67 104485.00 160080.33 104485.00 160091.00C104496.03 160090.77 104507.17 160091.48 104518.13 160090.63C104614.20 160058.74 104710.07 160026.29 104806.00 159994.00C104806.00 159962.00 104806.00 159930.00 104806.00 159898.00C104795.33 159865.67 104784.67 159833.33 104774.00 159801.00C104774.00 159779.67 104774.00 159758.33 104774.00 159737.00C104806.33 159705.00 104838.67 159673.00 104871.00 159641.00C104924.33 159641.00 104977.67 159641.00 105031.00 159641.00C105042.00 159651.67 105053.00 159662.33 105064.00 159673.00C105052.91 159694.42 105041.96 159715.91 105030.79 159737.29C104998.86 159780.19 104966.93 159823.10 104935.00 159866.00C104935.00 159898.00 104935.00 159930.00 104935.00 159962.00C104945.67 159972.67 104956.33 159983.33 104967.00 159994.00C104977.67 159994.00 104988.33 159994.00 104999.00 159994.00C105042.00 159962.00 105085.00 159930.00 105128.00 159898.00C105138.67 159898.00 105149.33 159898.00 105160.00 159898.00C105170.67 159919.33 105181.33 159940.67 105192.00 159962.00C105202.67 159962.00 105213.33 159962.00 105224.00 159962.00C105224.00 159983.33 105224.00 160004.67 105224.00 160026.00C105202.56 160058.40 105181.29 160090.91 105159.75 160123.25C105149.17 160133.83 105138.58 160144.42 105128.00 160155.00C105128.00 160187.00 105128.00 160219.00 105128.00 160251.00C105138.67 160251.00 105149.33 160251.00 105160.00 160251.00C105170.67 160262.00 105181.33 160273.00 105192.00 160284.00C105213.67 160294.67 105235.33 160305.33 105257.00 160316.00C105267.67 160305.33 105278.33 160294.67 105289.00 160284.00C105289.00 160230.33 105289.00 160176.67 105289.00 160123.00C105299.67 160090.67 105310.33 160058.33 105321.00 160026.00C105332.01 160026.24 105343.15 160025.52 105354.09 160026.38C105385.73 160037.25 105417.36 160048.13 105449.00 160059.00C105449.00 160101.67 105449.00 160144.33 105449.00 160187.00C105460.00 160197.67 105471.00 160208.33 105482.00 160219.00C105493.02 160218.77 105504.14 160219.47 105515.09 160218.64C105546.83 160208.02 105578.61 160197.53 105610.32 160186.84C105631.88 160176.23 105653.44 160165.61 105675.00 160155.00C105675.00 160144.33 105675.00 160133.67 105675.00 160123.00C105717.67 160101.67 105760.33 160080.33 105803.00 160059.00C105813.67 160059.00 105824.33 160059.00 105835.00 160059.00C105845.67 160069.67 105856.33 160080.33 105867.00 160091.00C105867.00 160144.33 105867.00 160197.67 105867.00 160251.00C105888.67 160251.00 105910.33 160251.00 105932.00 160251.00C105953.33 160240.33 105974.67 160229.67 105996.00 160219.00C106039.00 160219.00 106082.00 160219.00 106125.00 160219.00C106135.67 160229.67 106146.33 160240.33 106157.00 160251.00C106189.00 160251.00 106221.00 160251.00 106253.00 160251.00C106253.00 160262.00 106253.00 160273.00 106253.00 160284.00C106263.67 160284.00 106274.33 160284.00 106285.00 160284.00C106284.78 160295.02 106285.47 160306.14 106284.64 160317.09C106274.09 160348.72 106263.55 160380.36 106253.00 160412.00C106253.00 160422.67 106253.00 160433.33 106253.00 160444.00C106274.67 160455.00 106296.33 160466.00 106318.00 160477.00C106318.00 160487.67 106318.00 160498.33 106318.00 160509.00C106361.00 160466.33 106403.00 160422.67 106446.00 160380.00C106456.67 160380.00 106467.33 160380.00 106478.00 160380.00C106489.07 160401.72 106500.57 160423.25 106511.36 160445.10C106521.91 160477.06 106532.45 160509.03 106543.00 160541.00C106543.00 160551.67 106543.00 160562.33 106543.00 160573.00C106553.67 160583.67 106564.33 160594.33 106575.00 160605.00C106585.67 160605.00 106596.33 160605.00 106607.00 160605.00C106628.33 160583.67 106649.67 160562.33 106671.00 160541.00C106671.00 160508.67 106671.00 160476.33 106671.00 160444.00C106681.67 160433.33 106692.33 160422.67 106703.00 160412.00C106724.67 160412.00 106746.33 160412.00 106768.00 160412.00C106789.33 160444.33 106810.67 160476.67 106832.00 160509.00C106853.33 160519.67 106874.67 160530.33 106896.00 160541.00C106906.67 160541.00 106917.33 160541.00 106928.00 160541.00C106939.00 160530.33 106950.00 160519.67 106961.00 160509.00C106993.00 160498.33 107025.00 160487.67 107057.00 160477.00C107067.67 160466.00 107078.33 160455.00 107089.00 160444.00C107132.00 160444.00 107175.00 160444.00 107218.00 160444.00C107239.33 160433.33 107260.67 160422.67 107282.00 160412.00C107303.33 160444.33 107324.67 160476.67 107346.00 160509.00C107399.67 160519.67 107453.33 160530.33 107507.00 160541.00C107539.33 160541.00 107571.67 160541.00 107604.00 160541.00C107604.00 160487.33 107604.00 160433.67 107604.00 160380.00C107657.33 160348.00 107710.67 160316.00 107764.00 160284.00C107785.67 160284.00 107807.33 160284.00 107829.00 160284.00C107828.78 160295.02 107829.47 160306.14 107828.64 160317.09C107818.09 160348.72 107807.55 160380.36 107797.00 160412.00C107797.00 160444.33 107797.00 160476.67 107797.00 160509.00C107842.44 160554.59 107888.19 160599.87 107933.41 160645.67C107941.28 160653.78 107949.14 160661.89 107957.00 160670.00C107967.67 160670.00 107978.33 160670.00 107989.00 160670.00C108000.00 160659.00 108011.00 160648.00 108022.00 160637.00C108011.00 160594.33 108000.00 160551.67 107989.00 160509.00C107989.00 160498.33 107989.00 160487.67 107989.00 160477.00C108010.67 160477.00 108032.33 160477.00 108054.00 160477.00C108054.00 160487.67 108054.00 160498.33 108054.00 160509.00C108064.67 160509.00 108075.33 160509.00 108086.00 160509.00C108075.33 160551.67 108064.67 160594.33 108054.00 160637.00C108064.67 160669.33 108075.33 160701.67 108086.00 160734.00C108107.33 160723.33 108128.67 160712.67 108150.00 160702.00C108171.67 160680.33 108193.33 160658.67 108215.00 160637.00C108225.67 160637.00 108236.33 160637.00 108247.00 160637.00C108268.33 160658.67 108289.67 160680.33 108311.00 160702.00C108332.33 160712.67 108353.67 160723.33 108375.00 160734.00C108396.67 160755.33 108418.33 160776.67 108440.00 160798.00C108450.67 160798.00 108461.33 160798.00 108472.00 160798.00C108472.00 160787.33 108472.00 160776.67 108472.00 160766.00C108482.67 160755.33 108493.33 160744.67 108504.00 160734.00C108482.60 160691.24 108461.16 160648.47 108440.33 160605.44C108439.58 160598.20 108440.21 160590.76 108440.00 160583.44C108440.00 160558.63 108440.00 160533.81 108440.00 160509.00C108504.33 160509.00 108568.67 160509.00 108633.00 160509.00C108643.67 160498.33 108654.33 160487.67 108665.00 160477.00C108697.00 160498.33 108729.00 160519.67 108761.00 160541.00C108750.33 160551.67 108739.67 160562.33 108729.00 160573.00C108697.00 160583.67 108665.00 160594.33 108633.00 160605.00C108611.33 160626.67 108589.67 160648.33 108568.00 160670.00C108568.00 160680.67 108568.00 160691.33 108568.00 160702.00C108611.00 160712.67 108654.00 160723.33 108697.00 160734.00C108707.67 160734.00 108718.33 160734.00 108729.00 160734.00C108750.33 160766.00 108771.67 160798.00 108793.00 160830.00C108803.67 160830.00 108814.33 160830.00 108825.00 160830.00C108825.00 160840.67 108825.00 160851.33 108825.00 160862.00C108836.00 160862.00 108847.00 160862.00 108858.00 160862.00C108868.69 160851.20 108879.60 160840.61 108890.16 160829.68C108900.84 160808.07 108911.92 160786.63 108922.36 160764.91C108932.91 160733.28 108943.45 160701.64 108954.00 160670.00C108985.56 160638.11 109016.62 160605.71 109049.15 160574.80C109054.12 160570.96 109061.85 160573.94 109068.00 160573.00C109074.51 160573.91 109082.90 160570.28 109087.00 160577.00C109096.33 160586.33 109105.67 160595.67 109115.00 160605.00C109104.33 160658.67 109093.67 160712.33 109083.00 160766.00C109104.33 160766.00 109125.67 160766.00 109147.00 160766.00C109168.33 160755.33 109189.67 160744.67 109211.00 160734.00C109232.67 160734.00 109254.33 160734.00 109276.00 160734.00C109286.67 160723.33 109297.33 160712.67 109308.00 160702.00C109329.33 160712.67 109350.67 160723.33 109372.00 160734.00C109372.00 160787.67 109372.00 160841.33 109372.00 160895.00C109382.67 160905.67 109393.33 160916.33 109404.00 160927.00C109425.67 160927.00 109447.33 160927.00 109469.00 160927.00C109490.33 160916.33 109511.67 160905.67 109533.00 160895.00C109565.00 160905.67 109597.00 160916.33 109629.00 160927.00C109650.67 160927.00 109672.33 160927.00 109694.00 160927.00C109726.00 160905.33 109758.00 160883.67 109790.00 160862.00C109800.67 160862.00 109811.33 160862.00 109822.00 160862.00C109822.00 160883.67 109822.00 160905.33 109822.00 160927.00C109800.67 160937.67 109779.33 160948.33 109758.00 160959.00C109768.67 160969.67 109779.33 160980.33 109790.00 160991.00C109790.00 161001.67 109790.00 161012.33 109790.00 161023.00C109811.33 161033.67 109832.67 161044.33 109854.00 161055.00C109865.00 161065.67 109876.00 161076.33 109887.00 161087.00C109908.33 161076.33 109929.67 161065.67 109951.00 161055.00C109983.00 161055.00 110015.00 161055.00 110047.00 161055.00C110068.67 161065.67 110090.33 161076.33 110112.00 161087.00C110112.00 161108.67 110112.00 161130.33 110112.00 161152.00C110026.00 161152.00 109940.00 161152.00 109854.00 161152.00C109854.00 161173.33 109854.00 161194.67 109854.00 161216.00C109875.67 161226.67 109897.33 161237.33 109919.00 161248.00C109972.67 161248.00 110026.33 161248.00 110080.00 161248.00C110112.00 161280.33 110144.00 161312.67 110176.00 161345.00C110176.00 161366.33 110176.00 161387.67 110176.00 161409.00C110133.00 161441.33 110090.00 161473.67 110047.00 161506.00C110058.00 161516.67 110069.00 161527.33 110080.00 161538.00C110101.33 161538.00 110122.67 161538.00 110144.00 161538.00C110184.57 161517.84 110225.03 161497.46 110265.19 161476.51C110270.79 161472.06 110277.69 161472.97 110284.38 161473.00C110291.25 161473.00 110298.12 161473.00 110305.00 161473.00C110315.67 161484.00 110326.33 161495.00 110337.00 161506.00C110337.00 161559.33 110337.00 161612.67 110337.00 161666.00C110358.33 161698.33 110379.67 161730.67 110401.00 161763.00C110422.33 161763.00 110443.67 161763.00 110465.00 161763.00C110464.78 161751.98 110465.47 161740.86 110464.64 161729.90C110454.09 161697.94 110443.55 161665.97 110433.00 161634.00C110443.67 161623.33 110454.33 161612.67 110465.00 161602.00C110465.00 161591.33 110465.00 161580.67 110465.00 161570.00C110518.67 161570.00 110572.33 161570.00 110626.00 161570.00C110625.91 161580.78 110626.18 161591.56 110625.87 161602.33C110604.58 161655.89 110583.29 161709.44 110562.00 161763.00C110572.67 161773.67 110583.33 161784.33 110594.00 161795.00C110636.90 161773.46 110679.90 161752.12 110723.00 161731.00C110755.00 161763.00 110787.00 161795.00 110819.00 161827.00C110840.33 161827.00 110861.67 161827.00 110883.00 161827.00C110883.00 161805.67 110883.00 161784.33 110883.00 161763.00C110861.67 161741.33 110840.33 161719.67 110819.00 161698.00C110819.00 161676.67 110819.00 161655.33 110819.00 161634.00C110840.45 161633.95 110861.90 161634.09 110883.35 161633.93C110936.90 161623.28 110990.45 161612.64 111044.00 161602.00C111044.00 161612.67 111044.00 161623.33 111044.00 161634.00C111065.33 161644.67 111086.67 161655.33 111108.00 161666.00C111129.67 161687.67 111151.33 161709.33 111173.00 161731.00C111183.67 161731.00 111194.33 161731.00 111205.00 161731.00C111215.67 161720.00 111226.33 161709.00 111237.00 161698.00C111247.67 161666.00 111258.33 161634.00 111269.00 161602.00C111279.67 161591.33 111290.33 161580.67 111301.00 161570.00C111322.67 161570.00 111344.33 161570.00 111366.00 161570.00C111387.33 161580.67 111408.67 161591.33 111430.00 161602.00C111430.00 161612.67 111430.00 161623.33 111430.00 161634.00C111419.33 161655.33 111408.67 161676.67 111398.00 161698.00C111408.67 161719.67 111419.33 161741.33 111430.00 161763.00C111462.00 161763.00 111494.00 161763.00 111526.00 161763.00C111537.00 161752.33 111548.00 161741.67 111559.00 161731.00C111559.00 161698.67 111559.00 161666.33 111559.00 161634.00C111591.00 161634.00 111623.00 161634.00 111655.00 161634.00C111655.00 161644.67 111655.00 161655.33 111655.00 161666.00C111665.67 161666.00 111676.33 161666.00 111687.00 161666.00C111665.67 161730.33 111644.33 161794.67 111623.00 161859.00C111633.67 161869.67 111644.33 161880.33 111655.00 161891.00C111676.33 161891.00 111697.67 161891.00 111719.00 161891.00C111740.67 161859.00 111762.33 161827.00 111784.00 161795.00C111816.00 161795.00 111848.00 161795.00 111880.00 161795.00C111879.94 161816.45 111880.11 161837.90 111879.91 161859.35C111869.28 161902.24 111858.64 161945.12 111848.00 161988.00C111858.67 162009.33 111869.33 162030.67 111880.00 162052.00C111890.67 162062.67 111901.33 162073.33 111912.00 162084.00C111922.67 162084.00 111933.33 162084.00 111944.00 162084.00C111955.00 162062.67 111966.00 162041.33 111977.00 162020.00C111977.00 162009.33 111977.00 161998.67 111977.00 161988.00C111987.67 161988.00 111998.33 161988.00 112009.00 161988.00C112009.00 161977.33 112009.00 161966.67 112009.00 161956.00C112030.33 161966.67 112051.67 161977.33 112073.00 161988.00C112116.00 161977.33 112159.00 161966.67 112202.00 161956.00C112234.00 161956.00 112266.00 161956.00 112298.00 161956.00C112308.67 161977.33 112319.33 161998.67 112330.00 162020.00C112340.67 162020.00 112351.33 162020.00 112362.00 162020.00C112362.00 162063.00 112362.00 162106.00 112362.00 162149.00C112383.91 162170.09 112405.60 162191.39 112427.00 162213.00C112437.67 162213.00 112448.33 162213.00 112459.00 162213.00C112459.00 162223.67 112459.00 162234.33 112459.00 162245.00C112491.00 162277.33 112523.00 162309.67 112555.00 162342.00C112555.00 162374.00 112555.00 162406.00 112555.00 162438.00C112576.67 162438.00 112598.33 162438.00 112620.00 162438.00C112630.67 162416.67 112641.33 162395.33 112652.00 162374.00C112673.36 162352.87 112694.37 162331.38 112715.30 162309.83C112721.55 162305.61 112728.80 162302.90 112735.45 162299.27C112750.30 162291.85 112765.15 162284.42 112780.00 162277.00C112801.67 162287.67 112823.33 162298.33 112845.00 162309.00C112844.79 162320.44 112845.43 162331.96 112844.66 162343.35C112834.12 162385.57 112823.56 162427.78 112813.00 162470.00C112834.33 162480.67 112855.67 162491.33 112877.00 162502.00C112898.33 162523.67 112919.67 162545.33 112941.00 162567.00C112973.33 162545.33 113005.67 162523.67 113038.00 162502.00C113059.33 162512.67 113080.67 162523.33 113102.00 162534.00C113112.67 162534.00 113123.33 162534.00 113134.00 162534.00C113134.00 162566.33 113134.00 162598.67 113134.00 162631.00C113144.67 162641.67 113155.33 162652.33 113166.00 162663.00C113155.33 162673.67 113144.67 162684.33 113134.00 162695.00C113134.00 162716.33 113134.00 162737.67 113134.00 162759.00C113166.33 162770.00 113198.67 162781.00 113231.00 162792.00C113252.33 162781.00 113273.67 162770.00 113295.00 162759.00C113305.67 162780.67 113316.33 162802.33 113327.00 162824.00C113327.00 162845.33 113327.00 162866.67 113327.00 162888.00C113359.00 162909.33 113391.00 162930.67 113423.00 162952.00C113434.00 162973.67 113445.00 162995.33 113456.00 163017.00C113466.67 163027.67 113477.33 163038.33 113488.00 163049.00C113509.33 163027.67 113530.67 163006.33 113552.00 162985.00C113573.33 162995.67 113594.67 163006.33 113616.00 163017.00C113648.33 163017.00 113680.67 163017.00 113713.00 163017.00C113734.45 163038.38 113755.76 163059.90 113777.30 163081.20C113809.54 163102.46 113841.77 163123.73 113874.00 163145.00C113906.00 163145.00 113938.00 163145.00 113970.00 163145.00C113970.22 163156.02 113969.53 163167.14 113970.36 163178.10C113980.91 163210.06 113991.45 163242.03 114002.00 163274.00C114002.00 163284.67 114002.00 163295.33 114002.00 163306.00C114013.02 163305.78 114024.14 163306.47 114035.10 163305.64C114067.06 163295.09 114099.03 163284.55 114131.00 163274.00C114141.67 163274.00 114152.33 163274.00 114163.00 163274.00C114184.33 163284.67 114205.67 163295.33 114227.00 163306.00C114237.67 163316.67 114248.33 163327.33 114259.00 163338.00C114248.33 163370.33 114237.67 163402.67 114227.00 163435.00C114237.67 163445.67 114248.33 163456.33 114259.00 163467.00C114291.33 163467.00 114323.67 163467.00 114356.00 163467.00C114356.00 163520.67 114356.00 163574.33 114356.00 163628.00C114377.45 163649.38 114398.76 163670.90 114420.30 163692.20C114452.54 163713.46 114484.77 163734.73 114517.00 163756.00C114517.00 163799.00 114517.00 163842.00 114517.00 163885.00C114527.67 163895.67 114538.33 163906.33 114549.00 163917.00C114549.00 163927.67 114549.00 163938.33 114549.00 163949.00C114570.33 163949.00 114591.67 163949.00 114613.00 163949.00C114623.67 163917.00 114634.33 163885.00 114645.00 163853.00C114655.67 163842.33 114666.33 163831.67 114677.00 163821.00C114688.00 163831.67 114699.00 163842.33 114710.00 163853.00C114720.67 163874.33 114731.33 163895.67 114742.00 163917.00C114784.67 163938.33 114827.33 163959.67 114870.00 163981.00C114891.67 163981.00 114913.33 163981.00 114935.00 163981.00C114945.67 163991.67 114956.33 164002.33 114967.00 164013.00C114956.33 164034.67 114945.67 164056.33 114935.00 164078.00C114956.33 164099.33 114977.67 164120.67 114999.00 164142.00C114988.33 164152.67 114977.67 164163.33 114967.00 164174.00C115020.67 164184.67 115074.33 164195.33 115128.00 164206.00C115149.33 164227.67 115170.67 164249.33 115192.00 164271.00C115192.00 164313.67 115192.00 164356.33 115192.00 164399.00C115181.33 164420.67 115170.67 164442.33 115160.00 164464.00C115138.33 164474.67 115116.67 164485.33 115095.00 164496.00C115084.33 164506.67 115073.67 164517.33 115063.00 164528.00C115095.33 164538.67 115127.67 164549.33 115160.00 164560.00C115170.69 164570.80 115181.60 164581.39 115192.16 164592.32C115202.77 164613.55 115213.39 164634.77 115224.00 164656.00C115213.33 164688.33 115202.67 164720.67 115192.00 164753.00C115202.67 164763.67 115213.33 164774.33 115224.00 164785.00C115245.33 164785.00 115266.67 164785.00 115288.00 164785.00C115320.33 164753.00 115352.67 164721.00 115385.00 164689.00C115395.67 164689.00 115406.33 164689.00 115417.00 164689.00C115438.33 164721.00 115459.67 164753.00 115481.00 164785.00C115481.00 164795.67 115481.00 164806.33 115481.00 164817.00C115524.00 164806.33 115567.00 164795.67 115610.00 164785.00C115610.00 164795.67 115610.00 164806.33 115610.00 164817.00C115620.67 164817.00 115631.33 164817.00 115642.00 164817.00C115631.33 164838.67 115620.67 164860.33 115610.00 164882.00C115620.67 164914.00 115631.33 164946.00 115642.00 164978.00C115631.33 164999.33 115620.67 165020.67 115610.00 165042.00C115610.00 165053.00 115610.00 165064.00 115610.00 165075.00C115631.33 165085.67 115652.67 165096.33 115674.00 165107.00C115684.67 165085.33 115695.33 165063.67 115706.00 165042.00C115717.00 165053.00 115728.00 165064.00 115739.00 165075.00C115739.00 165085.67 115739.00 165096.33 115739.00 165107.00C115749.67 165117.67 115760.33 165128.33 115771.00 165139.00C115771.00 165203.33 115771.00 165267.67 115771.00 165332.00C115781.67 165332.00 115792.33 165332.00 115803.00 165332.00C115856.67 165364.00 115910.33 165396.00 115964.00 165428.00C115996.00 165428.00 116028.00 165428.00 116060.00 165428.00C116060.00 165460.33 116060.00 165492.67 116060.00 165525.00C116081.33 165535.67 116102.67 165546.33 116124.00 165557.00C116134.85 165568.06 116146.16 165578.72 116156.71 165590.04C116178.14 165621.69 116199.57 165653.35 116221.00 165685.00C116210.33 165717.33 116199.67 165749.67 116189.00 165782.00C116221.00 165792.67 116253.00 165803.33 116285.00 165814.00C116317.33 165846.00 116349.67 165878.00 116382.00 165910.00C116371.00 165931.67 116360.00 165953.33 116349.00 165975.00C116360.00 165996.33 116371.00 166017.67 116382.00 166039.00C116403.33 166039.00 116424.67 166039.00 116446.00 166039.00C116467.33 166017.67 116488.67 165996.33 116510.00 165975.00C116520.67 165975.00 116531.33 165975.00 116542.00 165975.00C116563.71 165996.45 116585.57 166017.76 116607.20 166039.30C116628.46 166071.54 116649.73 166103.77 116671.00 166136.00C116692.33 166146.67 116713.67 166157.33 116735.00 166168.00C116745.67 166178.67 116756.33 166189.33 116767.00 166200.00C116788.67 166200.00 116810.33 166200.00 116832.00 166200.00C116832.00 166167.67 116832.00 166135.33 116832.00 166103.00C116853.33 166103.00 116874.67 166103.00 116896.00 166103.00C116928.00 166114.00 116960.00 166125.00 116992.00 166136.00C117056.33 166136.00 117120.67 166136.00 117185.00 166136.00C117217.39 166167.94 117249.94 166199.72 117282.00 166232.00C117346.33 166232.00 117410.67 166232.00 117475.00 166232.00C117485.67 166253.33 117496.33 166274.67 117507.00 166296.00C117528.33 166296.00 117549.67 166296.00 117571.00 166296.00C117581.67 166264.00 117592.33 166232.00 117603.00 166200.00C117614.00 166189.33 117625.00 166178.67 117636.00 166168.00C117646.67 166168.00 117657.33 166168.00 117668.00 166168.00C117678.67 166178.67 117689.33 166189.33 117700.00 166200.00C117700.00 166264.33 117700.00 166328.67 117700.00 166393.00C117710.67 166382.33 117721.33 166371.67 117732.00 166361.00C117742.67 166361.00 117753.33 166361.00 117764.00 166361.00C117753.33 166328.67 117742.67 166296.33 117732.00 166264.00C117742.67 166264.00 117753.33 166264.00 117764.00 166264.00C117774.67 166253.33 117785.33 166242.67 117796.00 166232.00C117817.67 166232.00 117839.33 166232.00 117861.00 166232.00C117882.33 166242.67 117903.67 166253.33 117925.00 166264.00C117935.67 166274.67 117946.33 166285.33 117957.00 166296.00C117957.00 166306.67 117957.00 166317.33 117957.00 166328.00C117967.67 166328.00 117978.33 166328.00 117989.00 166328.00C118010.33 166339.00 118031.67 166350.00 118053.00 166361.00C118085.33 166350.00 118117.67 166339.00 118150.00 166328.00C118150.00 166317.33 118150.00 166306.67 118150.00 166296.00C118139.33 166296.00 118128.67 166296.00 118118.00 166296.00C118107.33 166285.33 118096.67 166274.67 118086.00 166264.00C118118.00 166242.67 118150.00 166221.33 118182.00 166200.00C118182.00 166210.67 118182.00 166221.33 118182.00 166232.00C118203.33 166275.00 118224.67 166318.00 118246.00 166361.00C118257.00 166371.67 118268.00 166382.33 118279.00 166393.00C118311.28 166360.94 118343.06 166328.39 118375.00 166296.00C118385.67 166296.00 118396.33 166296.00 118407.00 166296.00C118417.67 166306.67 118428.33 166317.33 118439.00 166328.00C118460.67 166328.00 118482.33 166328.00 118504.00 166328.00C118525.33 166360.33 118546.67 166392.67 118568.00 166425.00C118568.00 166457.00 118568.00 166489.00 118568.00 166521.00C118578.67 166532.00 118589.33 166543.00 118600.00 166554.00C118632.33 166543.00 118664.67 166532.00 118697.00 166521.00C118685.47 166499.01 118674.55 166476.68 118662.62 166454.92C118641.74 166423.62 118620.87 166392.31 118600.00 166361.00C118610.67 166361.00 118621.33 166361.00 118632.00 166361.00C118642.67 166339.33 118653.33 166317.67 118664.00 166296.00C118685.67 166285.33 118707.33 166274.67 118729.00 166264.00C118729.00 166253.33 118729.00 166242.67 118729.00 166232.00C118739.67 166221.33 118750.33 166210.67 118761.00 166200.00C118761.00 166210.67 118761.00 166221.33 118761.00 166232.00C118782.33 166242.67 118803.67 166253.33 118825.00 166264.00C118825.00 166274.67 118825.00 166285.33 118825.00 166296.00C118814.31 166306.80 118803.40 166317.38 118792.84 166328.32C118782.23 166349.88 118771.61 166371.44 118761.00 166393.00C118761.00 166403.67 118761.00 166414.33 118761.00 166425.00C118782.33 166425.00 118803.67 166425.00 118825.00 166425.00C118846.33 166446.33 118867.67 166467.67 118889.00 166489.00C118910.67 166467.67 118932.33 166446.33 118954.00 166425.00C118975.33 166435.67 118996.67 166446.33 119018.00 166457.00C119071.67 166457.00 119125.33 166457.00 119179.00 166457.00C119189.69 166446.20 119200.60 166435.61 119211.16 166424.68C119221.77 166403.45 119232.39 166382.23 119243.00 166361.00C119253.67 166350.00 119264.33 166339.00 119275.00 166328.00C119296.67 166339.00 119318.33 166350.00 119340.00 166361.00C119361.33 166350.00 119382.67 166339.00 119404.00 166328.00C119404.00 166317.33 119404.00 166306.67 119404.00 166296.00C119414.67 166285.33 119425.33 166274.67 119436.00 166264.00C119446.67 166264.00 119457.33 166264.00 119468.00 166264.00C119478.67 166285.33 119489.33 166306.67 119500.00 166328.00C119521.67 166328.00 119543.33 166328.00 119565.00 166328.00C119586.14 166371.09 119607.44 166414.11 119629.00 166457.00C119650.33 166446.33 119671.67 166435.67 119693.00 166425.00C119671.67 166403.67 119650.33 166382.33 119629.00 166361.00C119639.67 166350.00 119650.33 166339.00 119661.00 166328.00C119671.67 166328.00 119682.33 166328.00 119693.00 166328.00C119725.33 166349.67 119757.67 166371.33 119790.00 166393.00C119800.67 166393.00 119811.33 166393.00 119822.00 166393.00C119832.67 166382.33 119843.33 166371.67 119854.00 166361.00C119864.67 166361.00 119875.33 166361.00 119886.00 166361.00C119875.33 166339.33 119864.67 166317.67 119854.00 166296.00C119854.00 166285.33 119854.00 166274.67 119854.00 166264.00C119875.33 166274.67 119896.67 166285.33 119918.00 166296.00C119929.00 166285.33 119940.00 166274.67 119951.00 166264.00C119972.33 166274.67 119993.67 166285.33 120015.00 166296.00C120025.67 166296.00 120036.33 166296.00 120047.00 166296.00C120035.98 166296.22 120024.86 166295.53 120013.90 166296.36C119981.94 166306.91 119949.97 166317.45 119918.00 166328.00C119939.67 166339.00 119961.33 166350.00 119983.00 166361.00C119983.00 166403.67 119983.00 166446.33 119983.00 166489.00C120025.67 166489.00 120068.33 166489.00 120111.00 166489.00C120100.33 166499.67 120089.67 166510.33 120079.00 166521.00C120089.67 166532.00 120100.33 166543.00 120111.00 166554.00C120132.67 166521.67 120154.33 166489.33 120176.00 166457.00C120197.33 166467.67 120218.67 166478.33 120240.00 166489.00C120229.33 166478.33 120218.67 166467.67 120208.00 166457.00C120208.00 166435.67 120208.00 166414.33 120208.00 166393.00C120218.67 166393.00 120229.33 166393.00 120240.00 166393.00C120250.67 166425.00 120261.33 166457.00 120272.00 166489.00C120282.67 166489.00 120293.33 166489.00 120304.00 166489.00C120325.67 166510.67 120347.33 166532.33 120369.00 166554.00C120379.67 166543.00 120390.33 166532.00 120401.00 166521.00C120390.33 166510.33 120379.67 166499.67 120369.00 166489.00C120379.67 166467.67 120390.33 166446.33 120401.00 166425.00C120390.33 166425.00 120379.67 166425.00 120369.00 166425.00C120390.33 166414.33 120411.67 166403.67 120433.00 166393.00C120433.00 166382.33 120433.00 166371.67 120433.00 166361.00C120443.67 166361.00 120454.33 166361.00 120465.00 166361.00C120465.00 166403.67 120465.00 166446.33 120465.00 166489.00C120454.33 166499.67 120443.67 166510.33 120433.00 166521.00C120443.67 166532.00 120454.33 166543.00 120465.00 166554.00C120497.00 166543.00 120529.00 166532.00 120561.00 166521.00C120561.00 166532.00 120561.00 166543.00 120561.00 166554.00C120572.00 166554.00 120583.00 166554.00 120594.00 166554.00C120583.00 166564.67 120572.00 166575.33 120561.00 166586.00C120582.67 166607.33 120604.33 166628.67 120626.00 166650.00C120604.33 166671.33 120582.67 166692.67 120561.00 166714.00C120550.33 166735.67 120539.67 166757.33 120529.00 166779.00C120539.67 166779.00 120550.33 166779.00 120561.00 166779.00C120582.67 166789.67 120604.33 166800.33 120626.00 166811.00C120636.67 166843.00 120647.33 166875.00 120658.00 166907.00C120668.67 166917.67 120679.33 166928.33 120690.00 166939.00C120700.67 166928.33 120711.33 166917.67 120722.00 166907.00C120722.00 166960.67 120722.00 167014.33 120722.00 167068.00C120743.67 167068.00 120765.33 167068.00 120787.00 167068.00C120797.67 167089.33 120808.33 167110.67 120819.00 167132.00C120797.33 167153.67 120775.67 167175.33 120754.00 167197.00C120743.33 167197.00 120732.67 167197.00 120722.00 167197.00C120722.00 167186.00 120722.00 167175.00 120722.00 167164.00C120690.00 167164.00 120658.00 167164.00 120626.00 167164.00C120583.00 167175.00 120540.00 167186.00 120497.00 167197.00C120497.00 167175.33 120497.00 167153.67 120497.00 167132.00C120475.67 167153.67 120454.33 167175.33 120433.00 167197.00C120422.33 167197.00 120411.67 167197.00 120401.00 167197.00C120390.33 167186.00 120379.67 167175.00 120369.00 167164.00C120369.00 167142.67 120369.00 167121.33 120369.00 167100.00C120358.00 167110.67 120347.00 167121.33 120336.00 167132.00C120325.33 167132.00 120314.67 167132.00 120304.00 167132.00C120293.33 167153.67 120282.67 167175.33 120272.00 167197.00C120250.67 167218.33 120229.33 167239.67 120208.00 167261.00C120218.67 167271.67 120229.33 167282.33 120240.00 167293.00C120229.33 167303.67 120218.67 167314.33 120208.00 167325.00C120218.67 167325.00 120229.33 167325.00 120240.00 167325.00C120218.67 167335.67 120197.33 167346.33 120176.00 167357.00C120165.33 167368.00 120154.67 167379.00 120144.00 167390.00C120133.00 167390.00 120122.00 167390.00 120111.00 167390.00C120111.00 167400.67 120111.00 167411.33 120111.00 167422.00C120122.00 167422.00 120133.00 167422.00 120144.00 167422.00C120144.00 167443.33 120144.00 167464.67 120144.00 167486.00C120154.67 167486.00 120165.33 167486.00 120176.00 167486.00C120186.67 167496.67 120197.33 167507.33 120208.00 167518.00C120186.67 167518.00 120165.33 167518.00 120144.00 167518.00C120133.00 167528.67 120122.00 167539.33 120111.00 167550.00C120111.00 167571.67 120111.00 167593.33 120111.00 167615.00C120100.33 167615.00 120089.67 167615.00 120079.00 167615.00C120079.00 167593.33 120079.00 167571.67 120079.00 167550.00C120047.00 167550.00 120015.00 167550.00 119983.00 167550.00C119993.67 167550.00 120004.33 167550.00 120015.00 167550.00C119993.67 167550.00 119972.33 167550.00 119951.00 167550.00C119951.00 167582.33 119951.00 167614.67 119951.00 167647.00C119940.00 167668.33 119929.00 167689.67 119918.00 167711.00C119929.00 167721.67 119940.00 167732.33 119951.00 167743.00C119929.33 167753.67 119907.67 167764.33 119886.00 167775.00C119886.00 167764.33 119886.00 167753.67 119886.00 167743.00C119875.33 167743.00 119864.67 167743.00 119854.00 167743.00C119875.33 167711.00 119896.67 167679.00 119918.00 167647.00C119907.33 167636.33 119896.67 167625.67 119886.00 167615.00C119875.33 167625.67 119864.67 167636.33 119854.00 167647.00C119843.33 167647.00 119832.67 167647.00 119822.00 167647.00C119811.33 167636.33 119800.67 167625.67 119790.00 167615.00C119790.00 167604.00 119790.00 167593.00 119790.00 167582.00C119779.33 167593.00 119768.67 167604.00 119758.00 167615.00C119736.33 167615.00 119714.67 167615.00 119693.00 167615.00C119682.33 167636.33 119671.67 167657.67 119661.00 167679.00C119661.00 167700.33 119661.00 167721.67 119661.00 167743.00C119682.33 167753.67 119703.67 167764.33 119725.00 167775.00C119714.33 167775.00 119703.67 167775.00 119693.00 167775.00C119693.00 167786.00 119693.00 167797.00 119693.00 167808.00C119682.33 167818.67 119671.67 167829.33 119661.00 167840.00C119639.67 167829.33 119618.33 167818.67 119597.00 167808.00C119597.00 167818.67 119597.00 167829.33 119597.00 167840.00C119597.00 167829.33 119597.00 167818.67 119597.00 167808.00C119586.33 167818.67 119575.67 167829.33 119565.00 167840.00C119565.00 167861.33 119565.00 167882.67 119565.00 167904.00C119554.33 167914.67 119543.67 167925.33 119533.00 167936.00C119543.67 167936.00 119554.33 167936.00 119565.00 167936.00C119565.00 167957.33 119565.00 167978.67 119565.00 168000.00C119575.67 168000.00 119586.33 168000.00 119597.00 168000.00C119597.00 168021.67 119597.00 168043.33 119597.00 168065.00C119575.67 168054.33 119554.33 168043.67 119533.00 168033.00C119533.00 168075.67 119533.00 168118.33 119533.00 168161.00C119543.67 168161.00 119554.33 168161.00 119565.00 168161.00C119554.33 168204.00 119543.67 168247.00 119533.00 168290.00C119554.33 168279.33 119575.67 168268.67 119597.00 168258.00C119597.00 168268.67 119597.00 168279.33 119597.00 168290.00C119586.33 168290.00 119575.67 168290.00 119565.00 168290.00C119565.00 168300.67 119565.00 168311.33 119565.00 168322.00C119543.59 168343.59 119521.93 168364.94 119500.00 168386.00C119532.33 168375.33 119564.67 168364.67 119597.00 168354.00C119597.00 168375.33 119597.00 168396.67 119597.00 168418.00C119607.67 168407.33 119618.33 168396.67 119629.00 168386.00C119650.33 168386.00 119671.67 168386.00 119693.00 168386.00C119682.33 168386.00 119671.67 168386.00 119661.00 168386.00C119661.00 168396.67 119661.00 168407.33 119661.00 168418.00C119650.33 168418.00 119639.67 168418.00 119629.00 168418.00C119629.00 168429.00 119629.00 168440.00 119629.00 168451.00C119618.33 168451.00 119607.67 168451.00 119597.00 168451.00C119597.00 168472.33 119597.00 168493.67 119597.00 168515.00C119575.67 168525.67 119554.33 168536.33 119533.00 168547.00C119543.67 168557.67 119554.33 168568.33 119565.00 168579.00C119543.33 168589.67 119521.67 168600.33 119500.00 168611.00C119511.00 168621.67 119522.00 168632.33 119533.00 168643.00C119565.00 168643.00 119597.00 168643.00 119629.00 168643.00C119618.33 168643.00 119607.67 168643.00 119597.00 168643.00C119597.00 168664.67 119597.00 168686.33 119597.00 168708.00C119586.33 168708.00 119575.67 168708.00 119565.00 168708.00C119565.00 168740.00 119565.00 168772.00 119565.00 168804.00C119586.33 168814.67 119607.67 168825.33 119629.00 168836.00C119639.67 168847.00 119650.33 168858.00 119661.00 168869.00C119682.33 168879.67 119703.67 168890.33 119725.00 168901.00C119703.67 168911.67 119682.33 168922.33 119661.00 168933.00C119650.33 168922.33 119639.67 168911.67 119629.00 168901.00C119629.00 168933.00 119629.00 168965.00 119629.00 168997.00C119618.33 168986.33 119607.67 168975.67 119597.00 168965.00C119586.33 168975.67 119575.67 168986.33 119565.00 168997.00C119565.00 169018.67 119565.00 169040.33 119565.00 169062.00C119543.33 169083.33 119521.67 169104.67 119500.00 169126.00C119532.33 169115.33 119564.67 169104.67 119597.00 169094.00C119607.67 169094.00 119618.33 169094.00 119629.00 169094.00C119629.00 169104.67 119629.00 169115.33 119629.00 169126.00C119618.33 169126.00 119607.67 169126.00 119597.00 169126.00C119597.00 169136.67 119597.00 169147.33 119597.00 169158.00C119586.33 169158.00 119575.67 169158.00 119565.00 169158.00C119565.00 169168.67 119565.00 169179.33 119565.00 169190.00C119554.33 169200.67 119543.67 169211.33 119533.00 169222.00C119533.00 169232.67 119533.00 169243.33 119533.00 169254.00C119458.00 169286.33 119383.00 169318.67 119308.00 169351.00C119340.00 169351.00 119372.00 169351.00 119404.00 169351.00C119404.00 169361.67 119404.00 169372.33 119404.00 169383.00C119404.00 169372.33 119404.00 169361.67 119404.00 169351.00C119436.00 169340.33 119468.00 169329.67 119500.00 169319.00C119521.67 169319.00 119543.33 169319.00 119565.00 169319.00C119575.67 169308.33 119586.33 169297.67 119597.00 169287.00C119607.67 169287.00 119618.33 169287.00 119629.00 169287.00C119629.00 169297.67 119629.00 169308.33 119629.00 169319.00C119607.67 169319.00 119586.33 169319.00 119565.00 169319.00C119575.67 169329.67 119586.33 169340.33 119597.00 169351.00C119575.67 169351.00 119554.33 169351.00 119533.00 169351.00C119543.67 169361.67 119554.33 169372.33 119565.00 169383.00C119565.00 169393.67 119565.00 169404.33 119565.00 169415.00C119543.33 169415.00 119521.67 169415.00 119500.00 169415.00C119500.00 169436.33 119500.00 169457.67 119500.00 169479.00C119511.00 169479.00 119522.00 169479.00 119533.00 169479.00C119522.00 169490.00 119511.00 169501.00 119500.00 169512.00C119500.00 169533.33 119500.00 169554.67 119500.00 169576.00C119511.00 169576.00 119522.00 169576.00 119533.00 169576.00C119490.00 169576.00 119447.00 169576.00 119404.00 169576.00C119414.67 169597.33 119425.33 169618.67 119436.00 169640.00C119425.33 169650.67 119414.67 169661.33 119404.00 169672.00C119404.00 169661.33 119404.00 169650.67 119404.00 169640.00C119361.00 169640.00 119318.00 169640.00 119275.00 169640.00C119286.00 169650.67 119297.00 169661.33 119308.00 169672.00C119308.00 169704.33 119308.00 169736.67 119308.00 169769.00C119286.33 169769.00 119264.67 169769.00 119243.00 169769.00C119243.00 169779.67 119243.00 169790.33 119243.00 169801.00C119232.33 169811.67 119221.67 169822.33 119211.00 169833.00C119232.59 169854.41 119253.94 169876.07 119275.00 169898.00C119253.67 169898.00 119232.33 169898.00 119211.00 169898.00C119200.33 169887.00 119189.67 169876.00 119179.00 169865.00C119168.33 169876.00 119157.67 169887.00 119147.00 169898.00C119125.33 169898.00 119103.67 169898.00 119082.00 169898.00C119071.33 169908.67 119060.67 169919.33 119050.00 169930.00C119050.00 169908.33 119050.00 169886.67 119050.00 169865.00C119028.67 169886.67 119007.33 169908.33 118986.00 169930.00C118986.00 169919.33 118986.00 169908.67 118986.00 169898.00C118975.33 169887.00 118964.67 169876.00 118954.00 169865.00C118964.67 169865.00 118975.33 169865.00 118986.00 169865.00C118964.67 169865.00 118943.33 169865.00 118922.00 169865.00C118922.00 169854.33 118922.00 169843.67 118922.00 169833.00C118943.33 169822.33 118964.67 169811.67 118986.00 169801.00C118986.00 169790.33 118986.00 169779.67 118986.00 169769.00C118996.67 169769.00 119007.33 169769.00 119018.00 169769.00C118996.67 169769.00 118975.33 169769.00 118954.00 169769.00C118932.33 169779.67 118910.67 169790.33 118889.00 169801.00C118889.00 169833.33 118889.00 169865.67 118889.00 169898.00C118900.00 169898.00 118911.00 169898.00 118922.00 169898.00C118922.00 169919.33 118922.00 169940.67 118922.00 169962.00C118932.67 169962.00 118943.33 169962.00 118954.00 169962.00C118943.33 169962.00 118932.67 169962.00 118922.00 169962.00C118922.00 170004.67 118922.00 170047.33 118922.00 170090.00C118932.67 170079.33 118943.33 170068.67 118954.00 170058.00C118943.33 170068.67 118932.67 170079.33 118922.00 170090.00C118932.67 170101.00 118943.33 170112.00 118954.00 170123.00C118932.33 170133.67 118910.67 170144.33 118889.00 170155.00C118900.00 170133.33 118911.00 170111.67 118922.00 170090.00C118889.67 170111.67 118857.33 170133.33 118825.00 170155.00C118825.00 170133.33 118825.00 170111.67 118825.00 170090.00C118835.67 170090.00 118846.33 170090.00 118857.00 170090.00C118867.67 170068.67 118878.33 170047.33 118889.00 170026.00C118857.00 170026.00 118825.00 170026.00 118793.00 170026.00C118793.00 170015.33 118793.00 170004.67 118793.00 169994.00C118771.67 169994.00 118750.33 169994.00 118729.00 169994.00C118739.67 169983.33 118750.33 169972.67 118761.00 169962.00C118739.67 169962.00 118718.33 169962.00 118697.00 169962.00C118697.00 169951.33 118697.00 169940.67 118697.00 169930.00C118675.33 169951.33 118653.67 169972.67 118632.00 169994.00C118653.67 169994.00 118675.33 169994.00 118697.00 169994.00C118707.67 170004.67 118718.33 170015.33 118729.00 170026.00C118729.00 170036.67 118729.00 170047.33 118729.00 170058.00C118696.67 170068.67 118664.33 170079.33 118632.00 170090.00C118642.67 170090.00 118653.33 170090.00 118664.00 170090.00C118653.33 170101.00 118642.67 170112.00 118632.00 170123.00C118642.67 170123.00 118653.33 170123.00 118664.00 170123.00C118675.00 170133.67 118686.00 170144.33 118697.00 170155.00C118686.00 170155.00 118675.00 170155.00 118664.00 170155.00C118632.00 170176.33 118600.00 170197.67 118568.00 170219.00C118589.33 170219.00 118610.67 170219.00 118632.00 170219.00C118632.00 170229.67 118632.00 170240.33 118632.00 170251.00C118653.67 170251.00 118675.33 170251.00 118697.00 170251.00C118686.00 170251.00 118675.00 170251.00 118664.00 170251.00C118664.00 170283.33 118664.00 170315.67 118664.00 170348.00C118653.33 170358.67 118642.67 170369.33 118632.00 170380.00C118642.67 170380.00 118653.33 170380.00 118664.00 170380.00C118664.00 170390.67 118664.00 170401.33 118664.00 170412.00C118675.00 170422.67 118686.00 170433.33 118697.00 170444.00C118697.00 170454.67 118697.00 170465.33 118697.00 170476.00C118707.67 170476.00 118718.33 170476.00 118729.00 170476.00C118729.00 170454.67 118729.00 170433.33 118729.00 170412.00C118739.67 170401.33 118750.33 170390.67 118761.00 170380.00C118761.00 170390.67 118761.00 170401.33 118761.00 170412.00C118771.67 170412.00 118782.33 170412.00 118793.00 170412.00C118793.00 170422.67 118793.00 170433.33 118793.00 170444.00C118814.33 170454.67 118835.67 170465.33 118857.00 170476.00C118846.33 170476.00 118835.67 170476.00 118825.00 170476.00C118835.67 170486.67 118846.33 170497.33 118857.00 170508.00C118878.67 170508.00 118900.33 170508.00 118922.00 170508.00C118932.67 170519.00 118943.33 170530.00 118954.00 170541.00C118954.00 170551.67 118954.00 170562.33 118954.00 170573.00C118975.33 170573.00 118996.67 170573.00 119018.00 170573.00C119007.33 170583.67 118996.67 170594.33 118986.00 170605.00C119018.00 170605.00 119050.00 170605.00 119082.00 170605.00C119082.00 170615.67 119082.00 170626.33 119082.00 170637.00C119071.33 170647.67 119060.67 170658.33 119050.00 170669.00C119071.67 170669.00 119093.33 170669.00 119115.00 170669.00C119136.33 170679.67 119157.67 170690.33 119179.00 170701.00C119136.00 170636.67 119093.00 170572.33 119050.00 170508.00C119028.67 170508.00 119007.33 170508.00 118986.00 170508.00C118943.26 170465.08 118900.28 170422.39 118857.00 170380.00C118846.33 170380.00 118835.67 170380.00 118825.00 170380.00C118814.33 170337.00 118803.67 170294.00 118793.00 170251.00C118836.00 170251.00 118879.00 170251.00 118922.00 170251.00C118954.00 170240.33 118986.00 170229.67 119018.00 170219.00C119028.67 170219.00 119039.33 170219.00 119050.00 170219.00C119050.00 170208.33 119050.00 170197.67 119050.00 170187.00C119082.33 170187.00 119114.67 170187.00 119147.00 170187.00C119157.80 170176.30 119168.39 170165.40 119179.32 170154.84C119222.21 170133.22 119265.11 170111.61 119308.00 170090.00C119318.67 170101.00 119329.33 170112.00 119340.00 170123.00C119380.58 170101.95 119421.27 170081.11 119462.26 170060.87C119469.84 170059.08 119470.96 170050.82 119474.50 170045.00C119483.00 170028.00 119491.50 170011.00 119500.00 169994.00C119511.00 169983.33 119522.00 169972.67 119533.00 169962.00C119554.33 169962.00 119575.67 169962.00 119597.00 169962.00C119597.00 169972.67 119597.00 169983.33 119597.00 169994.00C119618.33 169994.00 119639.67 169994.00 119661.00 169994.00C119671.67 170004.67 119682.33 170015.33 119693.00 170026.00C119714.67 170026.00 119736.33 170026.00 119758.00 170026.00C119779.71 170036.74 119801.26 170047.87 119823.09 170058.36C119854.72 170068.91 119886.36 170079.45 119918.00 170090.00C119939.67 170090.00 119961.33 170090.00 119983.00 170090.00C119993.67 170111.67 120004.33 170133.33 120015.00 170155.00C120015.00 170165.67 120015.00 170176.33 120015.00 170187.00C120025.67 170187.00 120036.33 170187.00 120047.00 170187.00C120057.67 170197.67 120068.33 170208.33 120079.00 170219.00C120068.33 170219.00 120057.67 170219.00 120047.00 170219.00C120047.00 170229.67 120047.00 170240.33 120047.00 170251.00C120068.33 170261.67 120089.67 170272.33 120111.00 170283.00C120100.33 170293.67 120089.67 170304.33 120079.00 170315.00C120079.00 170326.00 120079.00 170337.00 120079.00 170348.00C120111.33 170348.00 120143.67 170348.00 120176.00 170348.00C120186.67 170358.67 120197.33 170369.33 120208.00 170380.00C120208.00 170390.67 120208.00 170401.33 120208.00 170412.00C120218.67 170401.33 120229.33 170390.67 120240.00 170380.00C120240.00 170390.67 120240.00 170401.33 120240.00 170412.00C120272.00 170412.00 120304.00 170412.00 120336.00 170412.00C120368.33 170433.33 120400.67 170454.67 120433.00 170476.00C120443.67 170476.00 120454.33 170476.00 120465.00 170476.00C120486.33 170465.33 120507.67 170454.67 120529.00 170444.00C120539.67 170454.67 120550.33 170465.33 120561.00 170476.00C120561.00 170486.67 120561.00 170497.33 120561.00 170508.00C120572.00 170519.00 120583.00 170530.00 120594.00 170541.00C120594.00 170530.00 120594.00 170519.00 120594.00 170508.00C120594.00 170519.00 120594.00 170530.00 120594.00 170541.00C120604.67 170541.00 120615.33 170541.00 120626.00 170541.00C120604.33 170551.67 120582.67 170562.33 120561.00 170573.00C120561.00 170583.67 120561.00 170594.33 120561.00 170605.00C120614.67 170605.00 120668.33 170605.00 120722.00 170605.00C120690.00 170637.00 120658.00 170669.00 120626.00 170701.00C120626.00 170722.67 120626.00 170744.33 120626.00 170766.00C120593.13 170798.68 120559.96 170831.06 120527.29 170863.93C120442.20 170959.62 120357.09 171055.31 120272.00 171151.00C120088.38 171421.01 119904.53 171690.87 119721.06 171960.97C119700.99 171991.42 119680.85 172021.83 119660.84 172052.32C119650.23 172073.55 119639.61 172094.77 119629.00 172116.00C119607.67 172137.33 119586.33 172158.67 119565.00 172180.00C119519.55 172272.90 119472.54 172365.03 119426.32 172457.54C119375.46 172558.71 119324.86 172660.00 119273.82 172761.07C119231.51 172835.49 119189.11 172909.87 119146.86 172984.33C119114.57 173059.22 119082.29 173134.11 119050.00 173209.00C119028.64 173241.45 119007.13 173273.82 118985.86 173306.33C118920.36 173458.83 118855.17 173611.47 118789.47 173763.89C118747.39 173858.36 118705.05 173952.72 118663.11 174047.25C118620.02 174155.85 118576.64 174264.34 118533.74 174373.01C118469.45 174544.04 118405.42 174715.18 118340.95 174886.14C118307.59 174970.09 118274.35 175054.08 118240.34 175137.76C118231.56 175159.51 118222.78 175181.25 118214.00 175203.00C118214.00 175224.33 118214.00 175245.67 118214.00 175267.00C118192.67 175299.33 118171.33 175331.67 118150.00 175364.00C118139.04 175407.38 118128.52 175450.88 118117.27 175494.18C118074.30 175622.51 118031.62 175750.94 117988.48 175879.21C117956.59 175953.91 117924.78 176028.64 117892.82 176103.31C117848.04 176181.61 117802.92 176259.71 117758.37 176338.14C117706.58 176431.43 117654.79 176524.71 117603.00 176618.00C117485.00 176768.50 117366.84 176918.88 117248.96 177069.46C117194.72 177145.37 117140.26 177221.13 117086.16 177297.14C116947.63 177499.62 116809.14 177702.13 116670.58 177904.58C116499.05 178140.05 116327.53 178375.53 116156.00 178611.00C116145.18 178632.52 116134.54 178654.13 116123.62 178675.60C116026.46 178827.10 115929.53 178978.76 115832.21 179130.16C115790.13 179192.77 115748.07 179255.39 115706.00 179318.00C115652.24 179372.21 115598.25 179426.19 115544.65 179480.54C115468.87 179566.83 115392.84 179652.92 115317.23 179739.35C115264.81 179802.56 115212.41 179865.78 115160.00 179929.00C115084.89 179993.39 115009.86 180057.87 114934.70 180122.20C114902.38 180143.89 114870.01 180165.49 114837.73 180187.23C114697.84 180305.47 114557.74 180423.48 114417.97 180541.86C114289.88 180659.30 114161.85 180776.81 114033.72 180894.21C113948.15 180958.48 113862.57 181022.74 113777.00 181087.00C113755.25 181119.40 113733.90 181152.08 113711.91 181184.31C113657.13 181250.13 113602.05 181315.70 113547.45 181381.67C113505.97 181433.45 113464.48 181485.22 113423.00 181537.00C113305.25 181622.75 113187.46 181708.45 113069.72 181794.23C112951.71 181890.88 112833.75 181987.59 112715.71 182084.20C112608.70 182159.18 112501.74 182234.25 112394.69 182309.17C112295.57 182363.96 112196.28 182418.43 112097.28 182473.43C111949.74 182557.99 111802.23 182642.61 111654.68 182727.16C111504.69 182802.18 111354.67 182877.14 111204.69 182952.18C111054.70 183037.86 110904.67 183123.47 110754.71 183209.20C110647.15 183284.45 110539.42 183359.46 110431.98 183434.86C110367.91 183488.33 110303.78 183541.74 110239.75 183595.25C110153.37 183681.75 110066.75 183768.02 109980.51 183854.66C109831.34 184014.44 109682.17 184174.22 109533.00 184334.00C109522.33 184366.33 109511.67 184398.67 109501.00 184431.00C109501.00 184473.67 109501.00 184516.33 109501.00 184559.00C109468.67 184516.33 109436.33 184473.67 109404.00 184431.00C109372.00 184441.67 109340.00 184452.33 109308.00 184463.00C109254.22 184506.05 109200.52 184549.20 109146.69 184592.18C109093.12 184624.12 109039.56 184656.06 108986.00 184688.00C108920.06 184765.00 108853.86 184841.78 108788.09 184918.92C108736.34 184981.39 108684.52 185043.80 108632.80 185106.29C108557.82 185213.64 108482.76 185320.93 108407.83 185428.31C108354.19 185524.66 108300.44 185620.95 108246.87 185717.33C108202.60 185827.70 108158.03 185937.95 108113.96 186048.39C108040.30 186237.93 107966.66 186427.47 107893.00 186617.00C107880.97 186676.69 107869.59 186736.52 107857.09 186796.11C107826.02 186940.19 107795.02 187084.28 107763.90 187228.34C107731.87 187335.66 107699.95 187443.02 107667.86 187550.33C107592.90 187721.55 107517.95 187892.78 107443.00 188064.00C107378.63 188171.45 107314.17 188278.84 107249.85 188386.32C107174.64 188547.26 107099.69 188708.33 107024.32 188869.19C106981.46 188943.88 106938.69 189018.62 106895.79 189093.29C106842.37 189168.37 106789.03 189243.51 106735.56 189318.56C106617.70 189468.37 106499.85 189618.19 106382.00 189768.00C106285.14 189853.81 106188.34 189939.68 106091.45 190025.45C105705.88 190336.38 105320.29 190647.28 104934.73 190958.23C104763.39 191108.22 104592.08 191258.25 104420.72 191408.22C104269.08 191527.15 104117.62 191646.32 103965.87 191765.09C103923.63 191796.64 103881.65 191828.56 103839.23 191859.85C103679.15 191966.57 103519.07 192073.28 103359.00 192180.00C103348.33 192180.00 103337.67 192180.00 103327.00 192180.00C103305.67 192190.67 103284.33 192201.33 103263.00 192212.00C103252.33 192201.33 103241.67 192190.67 103231.00 192180.00C103198.67 192180.00 103166.33 192180.00 103134.00 192180.00C103123.33 192169.33 103112.67 192158.67 103102.00 192148.00C103101.76 192136.65 103102.47 192125.19 103101.64 192113.91C103091.09 192082.28 103080.55 192050.64 103070.00 192019.00C103070.00 191997.67 103070.00 191976.33 103070.00 191955.00C103059.33 191944.33 103048.67 191933.67 103038.00 191923.00C102908.88 191912.04 102779.78 191900.77 102650.65 191890.00C102640.43 191890.00 102630.22 191890.00 102620.00 191890.00C102620.00 191879.33 102620.00 191868.67 102620.00 191858.00C102630.67 191847.33 102641.33 191836.67 102652.00 191826.00C102641.33 191815.33 102630.67 191804.67 102620.00 191794.00C102620.00 191783.33 102620.00 191772.67 102620.00 191762.00C102609.33 191740.33 102598.67 191718.67 102588.00 191697.00C102598.69 191686.20 102609.60 191675.61 102620.16 191664.68C102630.77 191643.45 102641.39 191622.23 102652.00 191601.00C102630.67 191579.67 102609.33 191558.33 102588.00 191537.00C102598.67 191515.33 102609.33 191493.67 102620.00 191472.00C102630.67 191461.33 102641.33 191450.67 102652.00 191440.00C102652.00 191333.00 102652.00 191226.00 102652.00 191119.00C102673.33 191000.88 102694.76 190882.77 102716.02 190764.64C102727.02 190593.43 102738.01 190422.21 102749.00 190251.00C102716.67 190090.00 102684.33 189929.00 102652.00 189768.00C102662.67 189607.33 102673.33 189446.67 102684.00 189286.00C102791.33 189125.33 102898.67 188964.67 103006.00 188804.00C103156.00 188718.00 103306.00 188632.00 103456.00 188546.00C103531.00 188557.00 103606.00 188568.00 103681.00 188579.00C103777.33 188461.00 103873.67 188343.00 103970.00 188225.00C103873.67 188192.67 103777.33 188160.33 103681.00 188128.00C103713.00 188096.00 103745.00 188064.00 103777.00 188032.00C103788.00 188053.33 103799.00 188074.67 103810.00 188096.00C103799.00 188096.00 103788.00 188096.00 103777.00 188096.00C103788.00 188106.67 103799.00 188117.33 103810.00 188128.00C103820.67 188128.00 103831.33 188128.00 103842.00 188128.00C103820.33 188096.00 103798.67 188064.00 103777.00 188032.00C103938.00 187957.00 104099.00 187882.00 104260.00 187807.00C104302.67 187742.67 104345.33 187678.33 104388.00 187614.00C104377.33 187603.33 104366.67 187592.67 104356.00 187582.00C104388.33 187549.67 104420.67 187517.33 104453.00 187485.00C104549.33 187463.67 104645.67 187442.33 104742.00 187421.00C104763.33 187367.33 104784.67 187313.67 104806.00 187260.00C104645.33 187120.67 104484.67 186981.33 104324.00 186842.00C104324.00 186852.67 104324.00 186863.33 104324.00 186874.00C104302.67 186852.67 104281.33 186831.33 104260.00 186810.00C104206.33 186799.33 104152.67 186788.67 104099.00 186778.00C104067.00 186756.67 104035.00 186735.33 104003.00 186714.00C103992.00 186671.00 103981.00 186628.00 103970.00 186585.00C103927.33 186595.67 103884.67 186606.33 103842.00 186617.00C103831.33 186638.67 103820.67 186660.33 103810.00 186682.00C103799.00 186682.00 103788.00 186682.00 103777.00 186682.00C103755.64 186660.00 103734.43 186637.83 103712.32 186616.60C103680.49 186595.29 103648.60 186574.03 103616.68 186552.84C103595.12 186542.23 103573.56 186531.61 103552.00 186521.00C103530.67 186531.67 103509.33 186542.33 103488.00 186553.00C103477.33 186553.00 103466.67 186553.00 103456.00 186553.00C103434.67 186520.67 103413.33 186488.33 103392.00 186456.00C103381.00 186456.00 103370.00 186456.00 103359.00 186456.00C103337.67 186477.67 103316.33 186499.33 103295.00 186521.00C103262.93 186499.23 103230.76 186477.61 103198.75 186455.75C103188.17 186445.17 103177.58 186434.58 103167.00 186424.00C103167.00 186413.33 103167.00 186402.67 103167.00 186392.00C103156.00 186392.00 103145.00 186392.00 103134.00 186392.00C103123.33 186402.67 103112.67 186413.33 103102.00 186424.00C103080.39 186381.00 103059.13 186337.82 103037.30 186294.94C103016.21 186262.96 102995.10 186230.98 102974.00 186199.00C102974.00 186188.33 102974.00 186177.67 102974.00 186167.00C102963.00 186145.67 102952.00 186124.33 102941.00 186103.00C102941.00 186070.67 102941.00 186038.33 102941.00 186006.00C102877.00 186006.00 102813.00 186006.00 102749.00 186006.00C102727.33 186016.67 102705.67 186027.33 102684.00 186038.00C102684.00 186027.33 102684.00 186016.67 102684.00 186006.00C102673.33 186016.67 102662.67 186027.33 102652.00 186038.00C102620.00 186016.67 102588.00 185995.33 102556.00 185974.00C102556.00 185963.33 102556.00 185952.67 102556.00 185942.00C102534.33 185942.00 102512.67 185942.00 102491.00 185942.00C102480.33 185920.67 102469.67 185899.33 102459.00 185878.00C102427.00 185867.33 102395.00 185856.67 102363.00 185846.00C102363.00 185824.33 102363.00 185802.67 102363.00 185781.00C102341.33 185770.33 102319.67 185759.67 102298.00 185749.00C102276.67 185727.67 102255.33 185706.33 102234.00 185685.00C102234.00 185652.67 102234.00 185620.33 102234.00 185588.00C102180.33 185566.67 102126.67 185545.33 102073.00 185524.00C102083.67 185513.33 102094.33 185502.67 102105.00 185492.00C102116.00 185449.00 102127.00 185406.00 102138.00 185363.00C102127.00 185341.67 102116.00 185320.33 102105.00 185299.00C102105.00 185277.67 102105.00 185256.33 102105.00 185235.00C102083.67 185224.00 102062.33 185213.00 102041.00 185202.00C102041.00 185191.33 102041.00 185180.67 102041.00 185170.00C102051.67 185170.00 102062.33 185170.00 102073.00 185170.00C102083.67 185148.67 102094.33 185127.33 102105.00 185106.00C102083.67 185095.33 102062.33 185084.67 102041.00 185074.00C102041.00 185052.67 102041.00 185031.33 102041.00 185010.00C102019.67 184999.00 101998.33 184988.00 101977.00 184977.00C101966.33 184955.67 101955.67 184934.33 101945.00 184913.00C101945.00 184881.00 101945.00 184849.00 101945.00 184817.00C101923.23 184784.60 101901.62 184752.09 101879.75 184719.75C101869.17 184709.17 101858.58 184698.58 101848.00 184688.00C101848.00 184677.33 101848.00 184666.67 101848.00 184656.00C101837.33 184656.00 101826.67 184656.00 101816.00 184656.00C101805.33 184645.33 101794.67 184634.67 101784.00 184624.00C101794.67 184613.33 101805.33 184602.67 101816.00 184592.00C101794.67 184581.00 101773.33 184570.00 101752.00 184559.00C101752.00 184548.33 101752.00 184537.67 101752.00 184527.00C101741.33 184516.33 101730.67 184505.67 101720.00 184495.00C101730.67 184463.00 101741.33 184431.00 101752.00 184399.00C101719.67 184399.00 101687.33 184399.00 101655.00 184399.00C101666.00 184388.00 101677.00 184377.00 101688.00 184366.00C101688.00 184355.33 101688.00 184344.67 101688.00 184334.00C101666.33 184291.33 101644.67 184248.67 101623.00 184206.00C101633.67 184195.33 101644.33 184184.67 101655.00 184174.00C101644.33 184163.00 101633.67 184152.00 101623.00 184141.00C101644.67 184152.00 101666.33 184163.00 101688.00 184174.00C101698.67 184163.00 101709.33 184152.00 101720.00 184141.00C101687.67 184130.33 101655.33 184119.67 101623.00 184109.00C101623.00 184087.67 101623.00 184066.33 101623.00 184045.00C101601.67 184045.00 101580.33 184045.00 101559.00 184045.00C101559.00 184034.33 101559.00 184023.67 101559.00 184013.00C101548.33 184023.67 101537.67 184034.33 101527.00 184045.00C101516.20 184034.31 101505.62 184023.40 101494.68 184012.84C101473.12 184002.23 101451.56 183991.61 101430.00 183981.00C101419.33 183991.67 101408.67 184002.33 101398.00 184013.00C101398.00 184002.33 101398.00 183991.67 101398.00 183981.00C101376.67 183981.00 101355.33 183981.00 101334.00 183981.00C101312.33 183970.00 101290.67 183959.00 101269.00 183948.00C101258.33 183948.00 101247.67 183948.00 101237.00 183948.00C101226.31 183937.20 101215.40 183926.61 101204.84 183915.68C101194.23 183894.45 101183.61 183873.23 101173.00 183852.00C101162.33 183852.00 101151.67 183852.00 101141.00 183852.00C101151.67 183841.33 101162.33 183830.67 101173.00 183820.00C101162.33 183809.33 101151.67 183798.67 101141.00 183788.00C101130.33 183788.00 101119.67 183788.00 101109.00 183788.00C101109.00 183745.00 101109.00 183702.00 101109.00 183659.00C101087.33 183648.33 101065.67 183637.67 101044.00 183627.00C101033.33 183637.67 101022.67 183648.33 101012.00 183659.00C100980.00 183648.33 100948.00 183637.67 100916.00 183627.00C100905.33 183605.67 100894.67 183584.33 100884.00 183563.00C100862.33 183552.33 100840.67 183541.67 100819.00 183531.00C100819.00 183520.00 100819.00 183509.00 100819.00 183498.00C100786.90 183487.26 100754.76 183476.65 100722.68 183465.84C100701.45 183455.23 100680.23 183444.61 100659.00 183434.00C100637.33 183434.00 100615.67 183434.00 100594.00 183434.00C100572.67 183412.67 100551.33 183391.33 100530.00 183370.00C100530.00 183359.33 100530.00 183348.67 100530.00 183338.00C100540.67 183338.00 100551.33 183338.00 100562.00 183338.00C100562.00 183327.00 100562.00 183316.00 100562.00 183305.00C100572.67 183305.00 100583.33 183305.00 100594.00 183305.00C100594.00 183294.33 100594.00 183283.67 100594.00 183273.00C100583.33 183273.00 100572.67 183273.00 100562.00 183273.00C100551.33 183262.33 100540.67 183251.67 100530.00 183241.00C100487.00 183241.00 100444.00 183241.00 100401.00 183241.00C100390.33 183230.33 100379.67 183219.67 100369.00 183209.00C100358.33 183209.00 100347.67 183209.00 100337.00 183209.00C100337.00 183198.33 100337.00 183187.67 100337.00 183177.00C100326.33 183177.00 100315.67 183177.00 100305.00 183177.00C100294.33 183166.33 100283.67 183155.67 100273.00 183145.00C100262.33 183145.00 100251.67 183145.00 100241.00 183145.00C100251.67 183145.00 100262.33 183145.00 100273.00 183145.00C100251.33 183145.00 100229.67 183145.00 100208.00 183145.00C100197.33 183155.67 100186.67 183166.33 100176.00 183177.00C100165.33 183177.00 100154.67 183177.00 100144.00 183177.00C100144.00 183187.67 100144.00 183198.33 100144.00 183209.00C100122.67 183230.33 100101.33 183251.67 100080.00 183273.00C100069.33 183262.33 100058.67 183251.67 100048.00 183241.00C100026.33 183273.33 100004.67 183305.67 99983.00 183338.00C99983.00 183327.00 99983.00 183316.00 99983.00 183305.00C99961.67 183305.00 99940.33 183305.00 99919.00 183305.00C99919.00 183294.33 99919.00 183283.67 99919.00 183273.00C99908.34 183262.33 99897.66 183251.67 99887.00 183241.00C99897.67 183241.00 99908.33 183241.00 99919.00 183241.00C99908.34 183230.33 99897.66 183219.67 99887.00 183209.00C99833.33 183187.67 99779.67 183166.33 99726.00 183145.00C99726.00 183123.33 99726.00 183101.67 99726.00 183080.00C99704.56 183058.61 99683.22 183037.12 99661.71 183015.79C99190.15 182662.19 98718.57 182308.60 98247.00 181955.00C98257.67 181933.67 98268.33 181912.33 98279.00 181891.00C98257.53 181869.57 98236.02 181848.15 98215.24 181826.05C98205.17 181806.88 98195.78 181787.28 98185.97 181767.94C98184.03 181764.53 98181.47 181760.92 98187.00 181760.00C98207.00 181750.00 98227.00 181740.00 98247.00 181730.00C98247.00 181719.33 98247.00 181708.67 98247.00 181698.00C98247.00 181708.67 98247.00 181719.33 98247.00 181730.00C98247.00 181719.33 98247.00 181708.67 98247.00 181698.00C98236.33 181676.33 98225.67 181654.67 98215.00 181633.00C98204.33 181644.00 98193.67 181655.00 98183.00 181666.00C98172.33 181633.67 98161.67 181601.33 98151.00 181569.00C98140.20 181558.31 98129.62 181547.40 98118.68 181536.84C98097.12 181526.23 98075.56 181515.61 98054.00 181505.00C98064.66 181494.33 98075.34 181483.67 98086.00 181473.00C98043.33 181408.67 98000.67 181344.33 97958.00 181280.00C97936.34 181258.33 97914.66 181236.67 97893.00 181215.00C97861.00 181215.00 97829.00 181215.00 97797.00 181215.00C97797.00 181204.33 97797.00 181193.67 97797.00 181183.00C97786.33 181183.00 97775.67 181183.00 97765.00 181183.00C97765.00 181172.33 97765.00 181161.67 97765.00 181151.00C97732.67 181140.33 97700.33 181129.67 97668.00 181119.00C97668.00 181097.67 97668.00 181076.33 97668.00 181055.00C97657.34 181044.33 97646.66 181033.67 97636.00 181023.00C97636.00 181012.00 97636.00 181001.00 97636.00 180990.00C97496.67 180990.00 97357.33 180990.00 97218.00 180990.00C97196.66 180968.67 97175.34 180947.33 97154.00 180926.00C97143.33 180926.00 97132.67 180926.00 97122.00 180926.00C97111.34 180915.33 97100.66 180904.67 97090.00 180894.00C97079.00 180904.67 97068.00 180915.33 97057.00 180926.00C97035.67 180926.00 97014.33 180926.00 96993.00 180926.00C96982.33 180904.67 96971.67 180883.33 96961.00 180862.00C96907.33 180851.33 96853.67 180840.67 96800.00 180830.00C96757.33 180851.33 96714.67 180872.67 96672.00 180894.00C96650.34 180883.33 96628.66 180872.67 96607.00 180862.00C96596.34 180872.67 96585.66 180883.33 96575.00 180894.00C96543.00 180894.00 96511.00 180894.00 96479.00 180894.00C96468.34 180904.67 96457.66 180915.33 96447.00 180926.00C96414.67 180883.33 96382.33 180840.67 96350.00 180798.00C96339.33 180798.00 96328.67 180798.00 96318.00 180798.00C96328.67 180787.00 96339.33 180776.00 96350.00 180765.00C96317.93 180743.57 96285.76 180722.28 96253.75 180700.75C96232.17 180679.50 96210.58 180658.25 96189.00 180637.00C96199.67 180637.00 96210.33 180637.00 96221.00 180637.00C96210.34 180626.33 96199.66 180615.67 96189.00 180605.00C96178.33 180605.00 96167.67 180605.00 96157.00 180605.00C96157.00 180615.67 96157.00 180626.33 96157.00 180637.00C96145.99 180636.78 96134.86 180637.47 96123.91 180636.64C96092.28 180626.09 96060.64 180615.55 96029.00 180605.00C96018.00 180615.67 96007.00 180626.33 95996.00 180637.00C95985.33 180637.00 95974.67 180637.00 95964.00 180637.00C95964.00 180615.33 95964.00 180593.67 95964.00 180572.00C95974.67 180572.00 95985.33 180572.00 95996.00 180572.00C95985.34 180561.33 95974.66 180550.67 95964.00 180540.00C95964.00 180529.33 95964.00 180518.67 95964.00 180508.00C95932.00 180497.33 95900.00 180486.67 95868.00 180476.00C95868.00 180465.33 95868.00 180454.67 95868.00 180444.00C95878.66 180433.33 95889.34 180422.67 95900.00 180412.00C95900.00 180401.00 95900.00 180390.00 95900.00 180379.00C95889.34 180368.33 95878.66 180357.67 95868.00 180347.00C95835.67 180336.33 95803.33 180325.67 95771.00 180315.00C95760.34 180304.33 95749.66 180293.67 95739.00 180283.00C95749.66 180272.33 95760.34 180261.67 95771.00 180251.00C95760.20 180240.31 95749.61 180229.40 95738.68 180218.84C95717.46 180208.23 95696.23 180197.61 95675.00 180187.00C95685.67 180176.00 95696.33 180165.00 95707.00 180154.00C95696.33 180154.00 95685.67 180154.00 95675.00 180154.00C95675.00 180143.33 95675.00 180132.67 95675.00 180122.00C95664.34 180111.33 95653.66 180100.67 95643.00 180090.00C95643.00 180079.33 95643.00 180068.67 95643.00 180058.00C95643.00 180068.67 95643.00 180079.33 95643.00 180090.00C95621.34 180079.33 95599.66 180068.67 95578.00 180058.00C95556.67 180068.67 95535.33 180079.33 95514.00 180090.00C95503.34 180100.67 95492.66 180111.33 95482.00 180122.00C95492.67 180122.00 95503.33 180122.00 95514.00 180122.00C95514.00 180143.67 95514.00 180165.33 95514.00 180187.00C95492.56 180219.07 95471.28 180251.25 95449.75 180283.25C95439.16 180293.83 95428.58 180304.42 95418.00 180315.00C95407.00 180315.00 95396.00 180315.00 95385.00 180315.00C95385.00 180336.33 95385.00 180357.67 95385.00 180379.00C95363.67 180379.00 95342.33 180379.00 95321.00 180379.00C95310.34 180368.33 95299.66 180357.67 95289.00 180347.00C95257.00 180336.33 95225.00 180325.67 95193.00 180315.00C95182.00 180304.33 95171.00 180293.67 95160.00 180283.00C95138.67 180283.00 95117.33 180283.00 95096.00 180283.00C95096.00 180272.33 95096.00 180261.67 95096.00 180251.00C95074.67 180251.00 95053.33 180251.00 95032.00 180251.00C94999.66 180229.67 94967.34 180208.33 94935.00 180187.00C94935.00 180176.00 94935.00 180165.00 94935.00 180154.00C94913.67 180154.00 94892.33 180154.00 94871.00 180154.00C94881.66 180143.33 94892.34 180132.67 94903.00 180122.00C94892.34 180111.33 94881.66 180100.67 94871.00 180090.00C94849.67 180090.00 94828.33 180090.00 94807.00 180090.00C94807.00 180079.33 94807.00 180068.67 94807.00 180058.00C94720.88 180047.35 94634.77 180036.58 94548.64 180026.00C94538.10 180026.00 94527.55 180026.00 94517.00 180026.00C94517.00 180015.33 94517.00 180004.67 94517.00 179994.00C94506.33 179994.00 94495.67 179994.00 94485.00 179994.00C94485.00 179940.33 94485.00 179886.67 94485.00 179833.00C94474.34 179822.33 94463.66 179811.67 94453.00 179801.00C94463.66 179790.33 94474.34 179779.67 94485.00 179769.00C94463.67 179747.33 94442.33 179725.67 94421.00 179704.00C94388.67 179704.00 94356.33 179704.00 94324.00 179704.00C94324.00 179693.33 94324.00 179682.67 94324.00 179672.00C94345.66 179661.33 94367.34 179650.67 94389.00 179640.00C94378.20 179629.31 94367.62 179618.40 94356.68 179607.84C94335.12 179597.23 94313.56 179586.61 94292.00 179576.00C94292.00 179565.00 94292.00 179554.00 94292.00 179543.00C94302.67 179543.00 94313.33 179543.00 94324.00 179543.00C94313.34 179532.33 94302.66 179521.67 94292.00 179511.00C94292.00 179500.33 94292.00 179489.67 94292.00 179479.00C94270.67 179468.33 94249.33 179457.67 94228.00 179447.00C94217.34 179457.67 94206.66 179468.33 94196.00 179479.00C94185.33 179479.00 94174.67 179479.00 94164.00 179479.00C94164.00 179468.33 94164.00 179457.67 94164.00 179447.00C94153.00 179447.00 94142.00 179447.00 94131.00 179447.00C94120.34 179436.33 94109.66 179425.67 94099.00 179415.00C94088.33 179415.00 94077.67 179415.00 94067.00 179415.00C94067.00 179393.67 94067.00 179372.33 94067.00 179351.00C94077.67 179351.00 94088.33 179351.00 94099.00 179351.00C94099.00 179318.67 94099.00 179286.33 94099.00 179254.00C94109.67 179232.67 94120.33 179211.33 94131.00 179190.00C94109.67 179190.00 94088.33 179190.00 94067.00 179190.00C94045.66 179157.67 94024.34 179125.33 94003.00 179093.00C94003.00 179104.00 94003.00 179115.00 94003.00 179126.00C93992.33 179115.00 93981.67 179104.00 93971.00 179093.00C93981.66 179082.33 93992.34 179071.67 94003.00 179061.00C94003.00 179029.00 94003.00 178997.00 94003.00 178965.00C93992.33 178965.00 93981.67 178965.00 93971.00 178965.00C93949.34 178954.33 93927.66 178943.67 93906.00 178933.00C93906.00 178911.33 93906.00 178889.67 93906.00 178868.00C93884.67 178868.00 93863.33 178868.00 93842.00 178868.00C93820.67 178878.67 93799.33 178889.33 93778.00 178900.00C93767.33 178900.00 93756.67 178900.00 93746.00 178900.00C93746.00 178889.33 93746.00 178878.67 93746.00 178868.00C93735.00 178857.33 93724.00 178846.67 93713.00 178836.00C93691.67 178836.00 93670.33 178836.00 93649.00 178836.00C93627.67 178825.33 93606.33 178814.67 93585.00 178804.00C93595.67 178782.67 93606.33 178761.33 93617.00 178740.00C93627.67 178729.00 93638.33 178718.00 93649.00 178707.00C93649.00 178696.33 93649.00 178685.67 93649.00 178675.00C93638.34 178664.33 93627.66 178653.67 93617.00 178643.00C93606.33 178643.00 93595.67 178643.00 93585.00 178643.00C93585.00 178621.67 93585.00 178600.33 93585.00 178579.00C93563.67 178579.00 93542.33 178579.00 93521.00 178579.00C93510.00 178557.67 93499.00 178536.33 93488.00 178515.00C93456.00 178525.67 93424.00 178536.33 93392.00 178547.00C93381.34 178536.33 93370.66 178525.67 93360.00 178515.00C93360.00 178482.67 93360.00 178450.33 93360.00 178418.00C93338.67 178407.33 93317.33 178396.67 93296.00 178386.00C93285.00 178375.33 93274.00 178364.67 93263.00 178354.00C93263.00 178332.67 93263.00 178311.33 93263.00 178290.00C93231.00 178279.00 93199.00 178268.00 93167.00 178257.00C93156.33 178268.00 93145.67 178279.00 93135.00 178290.00C93135.00 178279.00 93135.00 178268.00 93135.00 178257.00C93113.34 178246.33 93091.66 178235.67 93070.00 178225.00C93059.33 178203.67 93048.67 178182.33 93038.00 178161.00C93027.34 178150.33 93016.66 178139.67 93006.00 178129.00C93006.00 178107.33 93006.00 178085.67 93006.00 178064.00C92995.33 178042.67 92984.67 178021.33 92974.00 178000.00C92963.33 178000.00 92952.67 178000.00 92942.00 178000.00C92942.00 177989.33 92942.00 177978.67 92942.00 177968.00C92931.33 177968.00 92920.67 177968.00 92910.00 177968.00C92898.87 177978.69 92887.94 177989.60 92876.68 178000.16C92855.46 178010.77 92834.23 178021.39 92813.00 178032.00C92802.33 178032.00 92791.67 178032.00 92781.00 178032.00C92781.00 178021.33 92781.00 178010.67 92781.00 178000.00C92759.67 178000.00 92738.33 178000.00 92717.00 178000.00C92706.34 178010.67 92695.66 178021.33 92685.00 178032.00C92674.00 178032.00 92663.00 178032.00 92652.00 178032.00C92641.31 178042.80 92630.40 178053.38 92619.84 178064.32C92609.23 178085.88 92598.61 178107.44 92588.00 178129.00C92577.34 178118.33 92566.66 178107.67 92556.00 178097.00C92545.33 178118.33 92534.67 178139.67 92524.00 178161.00C92545.33 178171.67 92566.67 178182.33 92588.00 178193.00C92577.33 178193.00 92566.67 178193.00 92556.00 178193.00C92556.00 178214.33 92556.00 178235.67 92556.00 178257.00C92577.33 178278.67 92598.67 178300.33 92620.00 178322.00C92609.33 178343.33 92598.67 178364.67 92588.00 178386.00C92577.33 178386.00 92566.67 178386.00 92556.00 178386.00C92545.33 178407.33 92534.67 178428.67 92524.00 178450.00C92534.66 178460.67 92545.34 178471.33 92556.00 178482.00C92545.33 178493.00 92534.67 178504.00 92524.00 178515.00C92524.00 178525.67 92524.00 178536.33 92524.00 178547.00C92481.00 178547.00 92438.00 178547.00 92395.00 178547.00C92395.00 178536.33 92395.00 178525.67 92395.00 178515.00C92384.33 178504.00 92373.67 178493.00 92363.00 178482.00C92352.33 178503.67 92341.67 178525.33 92331.00 178547.00C92320.33 178547.00 92309.67 178547.00 92299.00 178547.00C92288.33 178525.33 92277.67 178503.67 92267.00 178482.00C92256.00 178482.00 92245.00 178482.00 92234.00 178482.00C92245.00 178493.00 92256.00 178504.00 92267.00 178515.00C92256.00 178515.00 92245.00 178515.00 92234.00 178515.00C92234.00 178547.00 92234.00 178579.00 92234.00 178611.00C92223.34 178621.67 92212.66 178632.33 92202.00 178643.00C92212.66 178653.67 92223.34 178664.33 92234.00 178675.00C92202.00 178675.00 92170.00 178675.00 92138.00 178675.00C92138.00 178685.67 92138.00 178696.33 92138.00 178707.00C92127.33 178728.67 92116.67 178750.33 92106.00 178772.00C92073.67 178761.33 92041.33 178750.67 92009.00 178740.00C92019.67 178761.33 92030.33 178782.67 92041.00 178804.00C92019.67 178814.67 91998.33 178825.33 91977.00 178836.00C91923.33 178836.00 91869.67 178836.00 91816.00 178836.00C91816.00 178846.67 91816.00 178857.33 91816.00 178868.00C91794.66 178900.33 91773.34 178932.67 91752.00 178965.00C91752.00 178975.67 91752.00 178986.33 91752.00 178997.00C91720.00 178986.33 91688.00 178975.67 91656.00 178965.00C91645.30 178975.80 91634.40 178986.39 91623.84 178997.32C91602.23 179040.21 91580.61 179083.11 91559.00 179126.00C91537.67 179126.00 91516.33 179126.00 91495.00 179126.00C91495.00 179136.67 91495.00 179147.33 91495.00 179158.00C91484.33 179158.00 91473.67 179158.00 91463.00 179158.00C91441.34 179136.33 91419.66 179114.67 91398.00 179093.00C91387.33 179104.00 91376.67 179115.00 91366.00 179126.00C91344.67 179126.00 91323.33 179126.00 91302.00 179126.00C91280.66 179147.33 91259.34 179168.67 91238.00 179190.00C91173.62 179168.82 91109.28 179147.49 91045.00 179126.00C91023.34 179136.67 91001.66 179147.33 90980.00 179158.00C90980.00 179168.67 90980.00 179179.33 90980.00 179190.00C90948.00 179179.33 90916.00 179168.67 90884.00 179158.00C90883.79 179146.89 90884.43 179135.70 90883.66 179124.64C90873.11 179082.10 90862.56 179039.55 90852.00 178997.00C90852.00 178922.00 90852.00 178847.00 90852.00 178772.00C90862.67 178739.67 90873.33 178707.33 90884.00 178675.00C90894.66 178664.33 90905.34 178653.67 90916.00 178643.00C90905.34 178632.33 90894.66 178621.67 90884.00 178611.00C90884.00 178579.00 90884.00 178547.00 90884.00 178515.00C90873.33 178515.00 90862.67 178515.00 90852.00 178515.00C90873.33 178472.00 90894.67 178429.00 90916.00 178386.00C90905.34 178375.33 90894.66 178364.67 90884.00 178354.00C90884.00 178321.67 90884.00 178289.33 90884.00 178257.00C90916.00 178214.33 90948.00 178171.67 90980.00 178129.00C90980.00 178107.33 90980.00 178085.67 90980.00 178064.00C90958.66 178042.67 90937.34 178021.33 90916.00 178000.00C90905.33 177968.00 90894.67 177936.00 90884.00 177904.00C90873.33 177893.00 90862.67 177882.00 90852.00 177871.00C90852.00 177860.33 90852.00 177849.67 90852.00 177839.00C90862.67 177839.00 90873.33 177839.00 90884.00 177839.00C90862.67 177828.33 90841.33 177817.67 90820.00 177807.00C90820.00 177775.00 90820.00 177743.00 90820.00 177711.00C90798.33 177711.00 90776.67 177711.00 90755.00 177711.00C90755.00 177700.33 90755.00 177689.67 90755.00 177679.00C90733.67 177679.00 90712.33 177679.00 90691.00 177679.00C90669.67 177668.00 90648.33 177657.00 90627.00 177646.00C90627.00 177614.00 90627.00 177582.00 90627.00 177550.00C90616.34 177539.33 90605.66 177528.67 90595.00 177518.00C90584.00 177518.00 90573.00 177518.00 90562.00 177518.00C90540.66 177539.33 90519.34 177560.67 90498.00 177582.00C90487.33 177582.00 90476.67 177582.00 90466.00 177582.00C90455.33 177539.33 90444.67 177496.67 90434.00 177454.00C90423.33 177454.00 90412.67 177454.00 90402.00 177454.00C90380.34 177464.67 90358.66 177475.33 90337.00 177486.00C90326.33 177486.00 90315.67 177486.00 90305.00 177486.00C90305.00 177475.33 90305.00 177464.67 90305.00 177454.00C90315.67 177432.33 90326.33 177410.67 90337.00 177389.00C90326.33 177389.00 90315.67 177389.00 90305.00 177389.00C90294.20 177378.31 90283.61 177367.40 90272.68 177356.84C90251.46 177346.23 90230.23 177335.61 90209.00 177325.00C90209.00 177303.67 90209.00 177282.33 90209.00 177261.00C90230.33 177250.00 90251.67 177239.00 90273.00 177228.00C90273.00 177217.33 90273.00 177206.67 90273.00 177196.00C90251.67 177196.00 90230.33 177196.00 90209.00 177196.00C90187.33 177174.67 90165.67 177153.33 90144.00 177132.00C90133.33 177110.67 90122.67 177089.33 90112.00 177068.00C90122.67 177046.33 90133.33 177024.67 90144.00 177003.00C90122.67 176992.33 90101.33 176981.67 90080.00 176971.00C90069.34 176960.33 90058.66 176949.67 90048.00 176939.00C90069.34 176917.67 90090.66 176896.33 90112.00 176875.00C90080.00 176864.33 90048.00 176853.67 90016.00 176843.00C89973.00 176843.00 89930.00 176843.00 89887.00 176843.00C89865.92 176821.09 89844.60 176799.40 89823.00 176778.00C89823.00 176767.33 89823.00 176756.67 89823.00 176746.00C89833.67 176746.00 89844.33 176746.00 89855.00 176746.00C89855.00 176735.33 89855.00 176724.67 89855.00 176714.00C89833.67 176703.33 89812.33 176692.67 89791.00 176682.00C89780.33 176682.00 89769.67 176682.00 89759.00 176682.00C89748.33 176703.33 89737.67 176724.67 89727.00 176746.00C89716.00 176746.00 89705.00 176746.00 89694.00 176746.00C89694.00 176724.67 89694.00 176703.33 89694.00 176682.00C89705.00 176671.33 89716.00 176660.67 89727.00 176650.00C89708.07 176631.74 89689.13 176613.48 89671.06 176594.35C89667.54 176592.34 89664.02 176583.56 89660.50 176586.55C89650.33 176597.03 89640.17 176607.52 89630.00 176618.00C89619.33 176618.00 89608.67 176618.00 89598.00 176618.00C89598.00 176607.00 89598.00 176596.00 89598.00 176585.00C89587.33 176563.67 89576.67 176542.33 89566.00 176521.00C89566.00 176499.67 89566.00 176478.33 89566.00 176457.00C89555.34 176446.33 89544.66 176435.67 89534.00 176425.00C89534.00 176435.67 89534.00 176446.33 89534.00 176457.00C89512.34 176467.67 89490.66 176478.33 89469.00 176489.00C89437.00 176478.33 89405.00 176467.67 89373.00 176457.00C89362.33 176457.00 89351.67 176457.00 89341.00 176457.00C89341.00 176435.33 89341.00 176413.67 89341.00 176392.00C89319.34 176381.33 89297.66 176370.67 89276.00 176360.00C89276.00 176349.33 89276.00 176338.67 89276.00 176328.00C89265.34 176317.33 89254.66 176306.67 89244.00 176296.00C89233.33 176296.00 89222.67 176296.00 89212.00 176296.00C89212.00 176306.67 89212.00 176317.33 89212.00 176328.00C89180.00 176328.00 89148.00 176328.00 89116.00 176328.00C89105.00 176317.33 89094.00 176306.67 89083.00 176296.00C89094.00 176296.00 89105.00 176296.00 89116.00 176296.00C89116.00 176285.33 89116.00 176274.67 89116.00 176264.00C89094.33 176264.00 89072.67 176264.00 89051.00 176264.00C89051.00 176242.67 89051.00 176221.33 89051.00 176200.00C89040.33 176189.00 89029.67 176178.00 89019.00 176167.00C89019.00 176156.33 89019.00 176145.67 89019.00 176135.00C89029.67 176135.00 89040.33 176135.00 89051.00 176135.00C89051.00 176113.67 89051.00 176092.33 89051.00 176071.00C89029.67 176071.00 89008.33 176071.00 88987.00 176071.00C88976.33 176038.67 88965.67 176006.33 88955.00 175974.00C88944.33 175985.00 88933.67 175996.00 88923.00 176007.00C88901.33 176007.00 88879.67 176007.00 88858.00 176007.00C88836.67 175985.33 88815.33 175963.67 88794.00 175942.00C88804.66 175931.33 88815.34 175920.67 88826.00 175910.00C88815.31 175899.20 88804.40 175888.61 88793.84 175877.68C88772.56 175834.79 88751.28 175791.89 88730.00 175749.00C88708.33 175760.00 88686.67 175771.00 88665.00 175782.00C88654.33 175803.33 88643.67 175824.67 88633.00 175846.00C88622.33 175846.00 88611.67 175846.00 88601.00 175846.00C88590.33 175824.67 88579.67 175803.33 88569.00 175782.00C88558.33 175771.00 88547.67 175760.00 88537.00 175749.00C88537.00 175727.67 88537.00 175706.33 88537.00 175685.00C88515.34 175674.33 88493.66 175663.67 88472.00 175653.00C88429.33 175653.00 88386.67 175653.00 88344.00 175653.00C88344.00 175642.33 88344.00 175631.67 88344.00 175621.00C88333.33 175599.33 88322.67 175577.67 88312.00 175556.00C88333.33 175545.33 88354.67 175534.67 88376.00 175524.00C88376.00 175492.00 88376.00 175460.00 88376.00 175428.00C88365.34 175417.33 88354.66 175406.67 88344.00 175396.00C88333.33 175417.33 88322.67 175438.67 88312.00 175460.00C88279.67 175428.00 88247.33 175396.00 88215.00 175364.00C88215.00 175342.33 88215.00 175320.67 88215.00 175299.00C88183.00 175309.67 88151.00 175320.33 88119.00 175331.00C88108.33 175331.00 88097.67 175331.00 88087.00 175331.00C88065.33 175342.00 88043.67 175353.00 88022.00 175364.00C88011.33 175353.00 88000.67 175342.00 87990.00 175331.00C88011.67 175309.67 88033.33 175288.33 88055.00 175267.00C88044.00 175235.00 88033.00 175203.00 88022.00 175171.00C88000.67 175181.67 87979.33 175192.33 87958.00 175203.00C87936.67 175181.33 87915.33 175159.67 87894.00 175138.00C87915.33 175138.00 87936.67 175138.00 87958.00 175138.00C87958.00 175127.33 87958.00 175116.67 87958.00 175106.00C87936.66 175084.67 87915.34 175063.33 87894.00 175042.00C87883.33 175020.67 87872.67 174999.33 87862.00 174978.00C87829.67 174978.00 87797.33 174978.00 87765.00 174978.00C87765.00 174967.33 87765.00 174956.67 87765.00 174946.00C87797.33 174935.00 87829.67 174924.00 87862.00 174913.00C87862.00 174902.33 87862.00 174891.67 87862.00 174881.00C87851.00 174891.67 87840.00 174902.33 87829.00 174913.00C87818.34 174902.33 87807.66 174891.67 87797.00 174881.00C87797.00 174870.33 87797.00 174859.67 87797.00 174849.00C87775.67 174859.67 87754.33 174870.33 87733.00 174881.00C87722.34 174870.33 87711.66 174859.67 87701.00 174849.00C87679.34 174859.67 87657.66 174870.33 87636.00 174881.00C87614.66 174859.67 87593.34 174838.33 87572.00 174817.00C87572.00 174795.67 87572.00 174774.33 87572.00 174753.00C87561.33 174753.00 87550.67 174753.00 87540.00 174753.00C87518.54 174742.00 87497.18 174730.80 87475.65 174719.91C87432.77 174709.28 87389.88 174698.64 87347.00 174688.00C87315.00 174688.00 87283.00 174688.00 87251.00 174688.00C87240.33 174666.67 87229.67 174645.33 87219.00 174624.00C87229.67 174592.00 87240.33 174560.00 87251.00 174528.00C87251.00 174517.00 87251.00 174506.00 87251.00 174495.00C87218.67 174484.33 87186.33 174473.67 87154.00 174463.00C87143.33 174441.67 87132.67 174420.33 87122.00 174399.00C87100.67 174399.00 87079.33 174399.00 87058.00 174399.00C87047.20 174388.31 87036.62 174377.40 87025.68 174366.84C87004.12 174356.23 86982.56 174345.61 86961.00 174335.00C86907.67 174335.00 86854.33 174335.00 86801.00 174335.00C86801.00 174324.33 86801.00 174313.67 86801.00 174303.00C86779.33 174303.00 86757.67 174303.00 86736.00 174303.00C86704.00 174345.67 86672.00 174388.33 86640.00 174431.00C86640.00 174420.33 86640.00 174409.67 86640.00 174399.00C86629.34 174409.67 86618.66 174420.33 86608.00 174431.00C86608.00 174420.33 86608.00 174409.67 86608.00 174399.00C86596.87 174388.31 86585.94 174377.40 86574.68 174366.84C86553.46 174356.23 86532.23 174345.61 86511.00 174335.00C86479.00 174345.67 86447.00 174356.33 86415.00 174367.00C86382.67 174367.00 86350.33 174367.00 86318.00 174367.00C86307.33 174345.67 86296.67 174324.33 86286.00 174303.00C86221.67 174303.00 86157.33 174303.00 86093.00 174303.00C86082.34 174313.67 86071.66 174324.33 86061.00 174335.00C86061.00 174356.33 86061.00 174377.67 86061.00 174399.00C86039.67 174399.00 86018.33 174399.00 85997.00 174399.00C85975.34 174388.33 85953.66 174377.67 85932.00 174367.00C85910.67 174367.00 85889.33 174367.00 85868.00 174367.00C85868.00 174356.33 85868.00 174345.67 85868.00 174335.00C85878.67 174335.00 85889.33 174335.00 85900.00 174335.00C85900.00 174324.33 85900.00 174313.67 85900.00 174303.00C85889.33 174303.00 85878.67 174303.00 85868.00 174303.00C85846.66 174324.33 85825.34 174345.67 85804.00 174367.00C85793.33 174388.33 85782.67 174409.67 85772.00 174431.00C85782.67 174431.00 85793.33 174431.00 85804.00 174431.00C85793.34 174441.67 85782.66 174452.33 85772.00 174463.00C85760.65 174462.76 85749.19 174463.47 85737.91 174462.64C85706.28 174452.09 85674.64 174441.55 85643.00 174431.00C85643.00 174452.33 85643.00 174473.67 85643.00 174495.00C85664.33 174495.00 85685.67 174495.00 85707.00 174495.00C85707.00 174516.67 85707.00 174538.33 85707.00 174560.00C85685.67 174570.67 85664.33 174581.33 85643.00 174592.00C85621.67 174592.00 85600.33 174592.00 85579.00 174592.00C85557.33 174634.67 85535.67 174677.33 85514.00 174720.00C85492.67 174741.67 85471.33 174763.33 85450.00 174785.00C85450.00 174806.33 85450.00 174827.67 85450.00 174849.00C85428.67 174849.00 85407.33 174849.00 85386.00 174849.00C85386.00 174870.33 85386.00 174891.67 85386.00 174913.00C85396.67 174924.00 85407.33 174935.00 85418.00 174946.00C85407.33 174946.00 85396.67 174946.00 85386.00 174946.00C85396.67 174946.00 85407.33 174946.00 85418.00 174946.00C85418.00 174956.67 85418.00 174967.33 85418.00 174978.00C85428.67 174999.33 85439.33 175020.67 85450.00 175042.00C85428.66 175063.33 85407.34 175084.67 85386.00 175106.00C85375.33 175106.00 85364.67 175106.00 85354.00 175106.00C85321.67 175127.67 85289.33 175149.33 85257.00 175171.00C85246.33 175203.00 85235.67 175235.00 85225.00 175267.00C85203.67 175277.67 85182.33 175288.33 85161.00 175299.00C85118.00 175299.00 85075.00 175299.00 85032.00 175299.00C85021.34 175288.33 85010.66 175277.67 85000.00 175267.00C85000.00 175256.33 85000.00 175245.67 85000.00 175235.00C84989.34 175224.33 84978.66 175213.67 84968.00 175203.00C84957.34 175213.67 84946.66 175224.33 84936.00 175235.00C84936.00 175245.67 84936.00 175256.33 84936.00 175267.00C84914.33 175288.33 84892.67 175309.67 84871.00 175331.00C84860.33 175331.00 84849.67 175331.00 84839.00 175331.00C84827.98 175309.25 84817.42 175287.25 84806.11 175265.66C84784.98 175234.03 84763.98 175202.31 84742.75 175170.74C84732.16 175159.83 84721.59 175148.91 84711.00 175138.00C84700.00 175159.67 84689.00 175181.33 84678.00 175203.00C84624.67 175224.33 84571.33 175245.67 84518.00 175267.00C84507.00 175245.67 84496.00 175224.33 84485.00 175203.00C84473.93 175213.84 84463.29 175225.16 84451.96 175235.70C84420.30 175256.79 84388.65 175277.90 84357.00 175299.00C84357.00 175320.67 84357.00 175342.33 84357.00 175364.00C84303.33 175364.00 84249.67 175364.00 84196.00 175364.00C84196.00 175342.33 84196.00 175320.67 84196.00 175299.00C84206.66 175288.33 84217.34 175277.67 84228.00 175267.00C84206.67 175256.33 84185.33 175245.67 84164.00 175235.00C84132.00 175235.00 84100.00 175235.00 84068.00 175235.00C84046.34 175224.33 84024.66 175213.67 84003.00 175203.00C83960.33 175203.00 83917.67 175203.00 83875.00 175203.00C83864.00 175235.00 83853.00 175267.00 83842.00 175299.00C83756.37 175277.54 83670.70 175256.21 83585.00 175235.00C83574.33 175213.67 83563.67 175192.33 83553.00 175171.00C83542.33 175160.00 83531.67 175149.00 83521.00 175138.00C83531.67 175074.00 83542.33 175010.00 83553.00 174946.00C83542.33 174935.00 83531.67 174924.00 83521.00 174913.00C83445.63 174880.91 83370.34 174848.58 83294.91 174816.64C83262.94 174806.09 83230.97 174795.55 83199.00 174785.00C83177.67 174795.67 83156.33 174806.33 83135.00 174817.00C83156.34 174795.67 83177.66 174774.33 83199.00 174753.00C83274.00 174753.00 83349.00 174753.00 83424.00 174753.00C83477.76 174731.26 83531.58 174709.64 83585.30 174687.82C83692.54 174623.55 83799.77 174559.27 83907.00 174495.00C83939.00 174463.00 83971.00 174431.00 84003.00 174399.00C84024.67 174345.33 84046.33 174291.67 84068.00 174238.00C84126.83 174179.26 84185.59 174120.45 84243.94 174061.23C84249.74 174055.70 84254.96 174049.42 84261.13 174044.37C84357.42 173990.91 84453.71 173937.46 84550.00 173884.00C84582.00 173841.33 84614.00 173798.67 84646.00 173756.00z"},"br-05":{"name":"Bahia","path":"M135416.00 82601.00C135405.33 82590.34 135394.67 82579.66 135384.00 82569.00C135384.00 82547.67 135384.00 82526.33 135384.00 82505.00C135394.67 82505.00 135405.33 82505.00 135416.00 82505.00C135426.67 82472.67 135437.33 82440.33 135448.00 82408.00C135437.33 82386.67 135426.67 82365.33 135416.00 82344.00C135459.13 82333.23 135502.32 82322.73 135545.41 82311.79C135673.94 82247.53 135802.47 82183.26 135931.00 82119.00C135952.33 82119.00 135973.67 82119.00 135995.00 82119.00C136017.88 82084.21 136041.66 82049.98 136063.94 82014.80C136094.62 81963.87 136125.32 81912.94 136156.00 81862.00C136166.67 81754.67 136177.33 81647.33 136188.00 81540.00C136220.00 81454.33 136252.00 81368.67 136284.00 81283.00C136316.33 81251.00 136348.67 81219.00 136381.00 81187.00C136381.00 81154.67 136381.00 81122.33 136381.00 81090.00C136391.67 81090.00 136402.33 81090.00 136413.00 81090.00C136445.00 81068.67 136477.00 81047.33 136509.00 81026.00C136520.14 81004.57 136530.97 80982.99 136542.32 80961.67C136553.05 80950.73 136563.53 80939.56 136574.40 80928.76C136627.93 80896.84 136681.47 80864.92 136735.00 80833.00C136756.33 80800.66 136777.67 80768.34 136799.00 80736.00C136852.67 80704.00 136906.33 80672.00 136960.00 80640.00C136960.00 80629.33 136960.00 80618.67 136960.00 80608.00C136938.33 80565.00 136916.67 80522.00 136895.00 80479.00C136895.10 80468.19 136894.80 80457.37 136895.15 80446.56C136906.47 80414.12 136917.18 80381.45 136928.90 80349.16C136939.27 80328.11 136949.63 80307.05 136960.00 80286.00C136970.84 80275.30 136981.40 80264.32 136992.41 80253.79C137056.56 80221.76 137120.59 80189.49 137185.00 80158.00C137195.67 80136.34 137206.33 80114.66 137217.00 80093.00C137217.00 80050.33 137217.00 80007.67 137217.00 79965.00C137184.67 79954.33 137152.33 79943.67 137120.00 79933.00C137109.33 79933.00 137098.67 79933.00 137088.00 79933.00C137184.57 79868.52 137280.91 79803.70 137378.00 79740.00C137388.67 79697.00 137399.33 79654.00 137410.00 79611.00C137410.00 79600.33 137410.00 79589.67 137410.00 79579.00C137398.93 79567.48 137386.88 79556.82 137376.47 79544.72C137355.18 79513.05 137334.09 79481.25 137312.67 79449.67C137302.11 79439.12 137291.56 79428.56 137281.00 79418.00C137281.00 79407.33 137281.00 79396.67 137281.00 79386.00C137323.90 79364.46 137366.90 79343.13 137410.00 79322.00C137410.00 79311.33 137410.00 79300.67 137410.00 79290.00C137442.00 79279.00 137474.00 79268.00 137506.00 79257.00C137516.67 79268.00 137527.33 79279.00 137538.00 79290.00C137570.33 79279.00 137602.67 79268.00 137635.00 79257.00C137667.00 79257.00 137699.00 79257.00 137731.00 79257.00C137763.33 79225.00 137795.67 79193.00 137828.00 79161.00C137860.00 79171.67 137892.00 79182.33 137924.00 79193.00C137945.67 79182.33 137967.33 79171.67 137989.00 79161.00C137999.67 79150.34 138010.33 79139.66 138021.00 79129.00C138021.00 79096.67 138021.00 79064.33 138021.00 79032.00C138063.67 79021.33 138106.33 79010.67 138149.00 79000.00C138159.67 78957.00 138170.33 78914.00 138181.00 78871.00C138192.00 78860.33 138203.00 78849.67 138214.00 78839.00C138246.00 78839.00 138278.00 78839.00 138310.00 78839.00C138331.33 78828.33 138352.67 78817.67 138374.00 78807.00C138395.67 78807.00 138417.33 78807.00 138439.00 78807.00C138449.67 78775.00 138460.33 78743.00 138471.00 78711.00C138493.04 78699.74 138515.51 78689.24 138537.27 78677.48C138600.85 78634.99 138664.42 78592.49 138728.00 78550.00C138738.67 78528.67 138749.33 78507.33 138760.00 78486.00C138781.81 78464.27 138803.46 78442.36 138825.39 78420.74C138857.26 78399.49 138889.13 78378.25 138921.00 78357.00C138985.33 78357.00 139049.67 78357.00 139114.00 78357.00C139124.67 78314.00 139135.33 78271.00 139146.00 78228.00C139124.67 78196.00 139103.33 78164.00 139082.00 78132.00C139092.67 78110.67 139103.33 78089.33 139114.00 78068.00C139114.00 78046.33 139114.00 78024.67 139114.00 78003.00C139124.67 78003.00 139135.33 78003.00 139146.00 78003.00C139188.90 77981.46 139231.90 77960.13 139275.00 77939.00C139339.33 77939.00 139403.67 77939.00 139468.00 77939.00C139489.33 77928.33 139510.67 77917.67 139532.00 77907.00C139553.62 77863.13 139575.71 77819.48 139597.03 77775.47C139618.88 77722.06 139640.20 77668.42 139662.40 77615.16C139672.60 77594.44 139682.80 77573.72 139693.00 77553.00C139703.67 77542.34 139714.33 77531.66 139725.00 77521.00C139725.00 77435.33 139725.00 77349.67 139725.00 77264.00C139714.33 77221.00 139703.67 77178.00 139693.00 77135.00C139703.67 77124.34 139714.33 77113.66 139725.00 77103.00C139725.00 77081.67 139725.00 77060.33 139725.00 77039.00C139692.67 77039.00 139660.33 77039.00 139628.00 77039.00C139617.33 77017.34 139606.67 76995.66 139596.00 76974.00C139660.33 76974.00 139724.67 76974.00 139789.00 76974.00C139810.33 76963.33 139831.67 76952.67 139853.00 76942.00C139885.33 76910.00 139917.67 76878.00 139950.00 76846.00C139971.33 76846.00 139992.67 76846.00 140014.00 76846.00C140067.67 76813.67 140121.33 76781.33 140175.00 76749.00C140185.67 76749.00 140196.33 76749.00 140207.00 76749.00C140228.40 76770.81 140249.96 76792.47 140271.26 76814.38C140292.84 76846.26 140314.42 76878.13 140336.00 76910.00C140336.00 77006.67 140336.00 77103.33 140336.00 77200.00C140357.33 77232.00 140378.67 77264.00 140400.00 77296.00C140443.09 77328.13 140486.30 77360.10 140529.32 77392.33C140539.89 77403.22 140550.44 77414.11 140561.00 77425.00C140561.00 77478.33 140561.00 77531.67 140561.00 77585.00C140572.39 77596.31 140582.98 77608.54 140594.89 77619.26C140626.36 77640.30 140657.94 77661.16 140689.33 77682.32C140700.78 77693.00 140711.47 77704.65 140723.40 77714.70C140744.27 77725.14 140765.13 77735.57 140786.00 77746.00C140807.33 77789.00 140828.67 77832.00 140850.00 77875.00C140893.00 77907.00 140936.00 77939.00 140979.00 77971.00C140989.67 77992.66 141000.33 78014.34 141011.00 78036.00C141000.33 78089.33 140989.67 78142.67 140979.00 78196.00C140989.67 78228.33 141000.33 78260.67 141011.00 78293.00C141054.00 78325.00 141097.00 78357.00 141140.00 78389.00C141140.00 78410.67 141140.00 78432.33 141140.00 78454.00C141092.12 78500.08 141045.68 78547.61 140998.55 78594.45C140991.69 78601.65 140984.13 78608.30 140977.74 78615.90C140956.84 78647.60 140935.92 78679.30 140915.00 78711.00C140925.67 78732.33 140936.33 78753.67 140947.00 78775.00C140947.00 78807.00 140947.00 78839.00 140947.00 78871.00C140936.33 78892.66 140925.67 78914.34 140915.00 78936.00C140925.66 78968.16 140936.54 79000.25 140947.07 79032.46C140957.65 79107.80 140968.77 79183.10 140979.00 79258.48C140979.00 79268.99 140979.00 79279.49 140979.00 79290.00C141000.33 79311.34 141021.67 79332.66 141043.00 79354.00C141053.67 79354.00 141064.33 79354.00 141075.00 79354.00C141096.67 79364.67 141118.33 79375.33 141140.00 79386.00C141161.33 79386.00 141182.67 79386.00 141204.00 79386.00C141214.67 79407.33 141225.33 79428.67 141236.00 79450.00C141246.67 79460.66 141257.33 79471.34 141268.00 79482.00C141268.40 79494.04 141267.17 79506.21 141268.70 79518.16C141289.80 79613.44 141310.90 79708.72 141332.00 79804.00C141385.67 79847.00 141439.33 79890.00 141493.00 79933.00C141546.81 79943.73 141600.65 79954.32 141654.44 79965.15C141686.63 79975.76 141718.81 79986.38 141751.00 79997.00C141751.12 80007.81 141750.77 80018.62 141751.17 80029.43C141772.45 80082.95 141793.72 80136.48 141815.00 80190.00C141825.67 80200.66 141836.33 80211.34 141847.00 80222.00C141890.00 80222.00 141933.00 80222.00 141976.00 80222.00C141986.67 80232.66 141997.33 80243.34 142008.00 80254.00C142008.00 80264.67 142008.00 80275.33 142008.00 80286.00C142023.96 80286.14 142040.01 80285.18 142055.82 80287.96C142136.37 80297.97 142216.90 80308.10 142297.46 80318.00C142361.64 80318.00 142425.82 80318.00 142490.00 80318.00C142500.67 80329.00 142511.33 80340.00 142522.00 80351.00C142554.33 80340.00 142586.67 80329.00 142619.00 80318.00C142640.33 80318.00 142661.67 80318.00 142683.00 80318.00C142693.84 80329.03 142704.39 80340.35 142715.41 80351.21C142736.69 80361.96 142758.15 80372.37 142779.33 80383.32C142790.78 80394.00 142801.47 80405.65 142813.40 80415.70C142834.27 80426.14 142855.13 80436.57 142876.00 80447.00C142897.33 80479.00 142918.67 80511.00 142940.00 80543.00C142972.33 80543.00 143004.67 80543.00 143037.00 80543.00C143069.00 80554.00 143101.00 80565.00 143133.00 80576.00C143143.67 80576.00 143154.33 80576.00 143165.00 80576.00C143165.00 80586.67 143165.00 80597.33 143165.00 80608.00C143229.33 80661.67 143293.67 80715.33 143358.00 80769.00C143390.33 80736.66 143422.67 80704.34 143455.00 80672.00C143465.67 80672.00 143476.33 80672.00 143487.00 80672.00C143497.67 80661.34 143508.33 80650.66 143519.00 80640.00C143540.33 80640.00 143561.67 80640.00 143583.00 80640.00C143615.33 80607.66 143647.67 80575.34 143680.00 80543.00C143690.67 80543.00 143701.33 80543.00 143712.00 80543.00C143722.67 80564.66 143733.33 80586.34 143744.00 80608.00C143787.10 80575.54 143830.30 80543.22 143873.33 80510.67C143894.55 80489.45 143915.78 80468.23 143937.00 80447.00C143937.00 80415.00 143937.00 80383.00 143937.00 80351.00C143969.00 80286.67 144001.00 80222.33 144033.00 80158.00C144076.00 80158.00 144119.00 80158.00 144162.00 80158.00C144162.00 80125.67 144162.00 80093.33 144162.00 80061.00C144172.67 80050.34 144183.33 80039.66 144194.00 80029.00C144226.33 80018.33 144258.67 80007.67 144291.00 79997.00C144302.23 79986.22 144312.66 79974.43 144324.40 79964.30C144345.27 79953.86 144366.13 79943.43 144387.00 79933.00C144430.00 79943.67 144473.00 79954.33 144516.00 79965.00C144548.00 79954.33 144580.00 79943.67 144612.00 79933.00C144612.10 79921.85 144611.80 79910.70 144612.15 79899.56C144622.75 79867.70 144633.38 79835.85 144644.00 79804.00C144622.67 79739.67 144601.33 79675.33 144580.00 79611.00C144590.67 79611.00 144601.33 79611.00 144612.00 79611.00C144612.00 79600.33 144612.00 79589.67 144612.00 79579.00C144622.84 79568.30 144633.40 79557.31 144644.42 79546.79C144665.94 79536.19 144687.47 79525.60 144709.00 79515.00C144741.00 79515.00 144773.00 79515.00 144805.00 79515.00C144826.42 79503.85 144848.02 79493.03 144869.33 79481.67C144880.01 79470.55 144891.68 79460.22 144901.72 79448.59C144923.15 79406.40 144944.57 79364.20 144966.00 79322.00C144987.33 79311.33 145008.67 79300.67 145030.00 79290.00C145073.00 79290.00 145116.00 79290.00 145159.00 79290.00C145201.67 79322.00 145244.33 79354.00 145287.00 79386.00C145319.33 79386.00 145351.67 79386.00 145384.00 79386.00C145416.00 79375.33 145448.00 79364.67 145480.00 79354.00C145501.67 79332.67 145523.33 79311.33 145545.00 79290.00C145555.67 79268.34 145566.33 79246.66 145577.00 79225.00C145587.67 79214.34 145598.33 79203.66 145609.00 79193.00C145620.62 79193.41 145632.39 79192.14 145643.90 79193.72C145685.93 79204.14 145727.97 79214.57 145770.00 79225.00C145802.00 79214.33 145834.00 79203.67 145866.00 79193.00C145882.26 79176.66 145899.08 79160.82 145913.58 79142.85C145973.29 79073.38 146032.70 79003.63 146092.64 78934.37C146102.76 78924.24 146112.88 78914.12 146123.00 78904.00C146144.67 78904.00 146166.33 78904.00 146188.00 78904.00C146209.33 78914.67 146230.67 78925.33 146252.00 78936.00C146273.33 78957.34 146294.67 78978.66 146316.00 79000.00C146348.33 79064.34 146380.67 79128.66 146413.00 79193.00C146445.00 79214.33 146477.00 79235.67 146509.00 79257.00C146541.33 79268.00 146573.67 79279.00 146606.00 79290.00C146616.67 79290.00 146627.33 79290.00 146638.00 79290.00C146670.00 79268.33 146702.00 79246.67 146734.00 79225.00C146744.67 79225.00 146755.33 79225.00 146766.00 79225.00C146798.84 79246.85 146831.40 79269.14 146864.41 79290.71C146906.84 79312.01 146949.37 79333.10 146992.00 79354.00C147013.33 79354.00 147034.67 79354.00 147056.00 79354.00C147077.33 79343.33 147098.67 79332.67 147120.00 79322.00C147130.67 79322.00 147141.33 79322.00 147152.00 79322.00C147183.45 79257.23 147216.44 79193.22 147249.00 79129.00C147259.67 79118.34 147270.33 79107.66 147281.00 79097.00C147313.00 79097.00 147345.00 79097.00 147377.00 79097.00C147387.80 79085.44 147399.54 79074.62 147409.72 79062.59C147420.57 79041.13 147432.17 79019.99 147442.50 78998.30C147474.34 78891.87 147506.17 78785.43 147538.00 78679.00C147569.51 78645.85 147602.45 78614.12 147635.00 78582.00C147634.62 78570.21 147635.81 78558.29 147634.30 78546.59C147623.54 78494.06 147612.77 78441.53 147602.00 78389.00C147613.10 78346.20 147623.95 78303.34 147635.20 78260.58C147645.80 78239.05 147656.40 78217.53 147667.00 78196.00C147688.33 78196.00 147709.67 78196.00 147731.00 78196.00C147795.44 78228.11 147859.69 78260.62 147924.00 78293.00C147999.00 78293.00 148074.00 78293.00 148149.00 78293.00C148149.37 78281.21 148148.21 78269.29 148149.68 78257.59C148160.11 78205.06 148170.56 78152.53 148181.00 78100.00C148202.33 78078.66 148223.67 78057.34 148245.00 78036.00C148256.00 78003.67 148267.00 77971.33 148278.00 77939.00C148310.15 77906.94 148342.13 77874.70 148374.39 77842.74C148406.69 77821.02 148439.12 77799.51 148471.33 77777.67C148492.55 77756.45 148513.78 77735.23 148535.00 77714.00C148535.00 77617.67 148535.00 77521.33 148535.00 77425.00C148599.41 77360.53 148663.95 77296.18 148728.28 77231.63C148760.18 77188.75 148792.09 77145.87 148824.00 77103.00C148834.64 77027.84 148845.46 76952.71 148856.00 76877.54C148856.00 76845.69 148856.00 76813.85 148856.00 76782.00C148845.33 76760.34 148834.67 76738.66 148824.00 76717.00C148845.80 76684.91 148867.41 76652.68 148889.33 76620.67C148899.89 76610.12 148910.44 76599.56 148921.00 76589.00C149017.33 76589.00 149113.67 76589.00 149210.00 76589.00C149210.10 76567.19 149209.80 76545.37 149210.15 76523.56C149220.75 76491.70 149231.38 76459.85 149242.00 76428.00C149274.33 76406.66 149306.67 76385.34 149339.00 76364.00C149349.67 76321.00 149360.33 76278.00 149371.00 76235.00C149360.33 76213.67 149349.67 76192.33 149339.00 76171.00C149317.33 76160.00 149295.67 76149.00 149274.00 76138.00C149242.00 76106.00 149210.00 76074.00 149178.00 76042.00C149199.33 75999.00 149220.67 75956.00 149242.00 75913.00C149242.00 75902.33 149242.00 75891.67 149242.00 75881.00C149231.33 75870.34 149220.67 75859.66 149210.00 75849.00C149188.67 75849.00 149167.33 75849.00 149146.00 75849.00C149146.00 75817.00 149146.00 75785.00 149146.00 75753.00C149167.33 75753.00 149188.67 75753.00 149210.00 75753.00C149210.00 75731.33 149210.00 75709.67 149210.00 75688.00C149242.33 75677.33 149274.67 75666.67 149307.00 75656.00C149317.67 75634.67 149328.33 75613.33 149339.00 75592.00C149339.00 75570.67 149339.00 75549.33 149339.00 75528.00C149360.33 75506.33 149381.67 75484.67 149403.00 75463.00C149403.00 75452.33 149403.00 75441.67 149403.00 75431.00C149381.67 75409.66 149360.33 75388.34 149339.00 75367.00C149317.33 75356.33 149295.67 75345.67 149274.00 75335.00C149252.67 75313.33 149231.33 75291.67 149210.00 75270.00C149178.00 75270.00 149146.00 75270.00 149114.00 75270.00C149103.00 75248.67 149092.00 75227.33 149081.00 75206.00C149017.00 75184.67 148953.00 75163.33 148889.00 75142.00C148877.45 75131.20 148866.62 75119.47 148854.60 75109.28C148833.73 75098.52 148812.87 75087.76 148792.00 75077.00C148770.67 75013.00 148749.33 74949.00 148728.00 74885.00C148728.00 74831.33 148728.00 74777.67 148728.00 74724.00C148685.00 74649.00 148642.00 74574.00 148599.00 74499.00C148567.00 74488.33 148535.00 74477.67 148503.00 74467.00C148513.67 74445.34 148524.33 74423.66 148535.00 74402.00C148535.00 74391.33 148535.00 74380.67 148535.00 74370.00C148545.67 74370.00 148556.33 74370.00 148567.00 74370.00C148545.67 74359.33 148524.33 74348.67 148503.00 74338.00C148503.00 74295.00 148503.00 74252.00 148503.00 74209.00C148492.33 74166.33 148481.67 74123.67 148471.00 74081.00C148471.00 74059.33 148471.00 74037.67 148471.00 74016.00C148524.33 73930.33 148577.67 73844.67 148631.00 73759.00C148663.33 73737.66 148695.67 73716.34 148728.00 73695.00C148749.33 73652.00 148770.67 73609.00 148792.00 73566.00C148813.33 73544.66 148834.67 73523.34 148856.00 73502.00C148984.90 73459.71 149113.34 73416.03 149242.00 73373.00C149275.01 73350.97 149308.51 73329.62 149341.21 73307.15C149404.81 73254.11 149468.40 73201.05 149532.00 73148.00C149553.33 73137.33 149574.67 73126.67 149596.00 73116.00C149628.42 73072.69 149660.37 73028.99 149693.09 72985.93C149725.06 72954.29 149757.03 72922.64 149789.00 72891.00C149799.81 72890.90 149810.63 72891.20 149821.44 72890.85C149853.29 72880.24 149885.15 72869.62 149917.00 72859.00C149928.00 72859.00 149939.00 72859.00 149950.00 72859.00C150014.33 72794.66 150078.67 72730.34 150143.00 72666.00C150165.16 72655.16 150186.96 72643.51 150209.37 72633.21C150240.58 72622.81 150271.79 72612.40 150303.00 72602.00C150324.67 72612.67 150346.33 72623.33 150368.00 72634.00C150378.67 72634.00 150389.33 72634.00 150400.00 72634.00C150421.33 72644.67 150442.67 72655.33 150464.00 72666.00C150507.00 72719.67 150550.00 72773.33 150593.00 72827.00C150604.82 72850.06 150615.70 72873.62 150628.18 72896.33C150659.11 72948.22 150690.06 73000.11 150721.00 73052.00C150753.33 73084.00 150785.67 73116.00 150818.00 73148.00C150860.67 73148.00 150903.33 73148.00 150946.00 73148.00C150967.67 73180.33 150989.33 73212.67 151011.00 73245.00C151032.33 73255.67 151053.67 73266.33 151075.00 73277.00C151085.67 73277.00 151096.33 73277.00 151107.00 73277.00C151117.67 73319.67 151128.33 73362.33 151139.00 73405.00C151160.67 73405.00 151182.33 73405.00 151204.00 73405.00C151214.67 73383.67 151225.33 73362.33 151236.00 73341.00C151278.67 73341.00 151321.33 73341.00 151364.00 73341.00C151385.67 73330.33 151407.33 73319.67 151429.00 73309.00C151461.00 73309.00 151493.00 73309.00 151525.00 73309.00C151535.67 73330.33 151546.33 73351.67 151557.00 73373.00C151567.67 73383.66 151578.33 73394.34 151589.00 73405.00C151621.33 73383.66 151653.67 73362.34 151686.00 73341.00C151707.33 73287.33 151728.67 73233.67 151750.00 73180.00C151771.33 73180.00 151792.67 73180.00 151814.00 73180.00C151835.67 73201.66 151857.33 73223.34 151879.00 73245.00C151879.00 73223.33 151879.00 73201.67 151879.00 73180.00C151889.67 73180.00 151900.33 73180.00 151911.00 73180.00C151921.67 73169.34 151932.33 73158.66 151943.00 73148.00C151953.67 73158.66 151964.33 73169.34 151975.00 73180.00C151985.67 73180.00 151996.33 73180.00 152007.00 73180.00C152007.00 73191.00 152007.00 73202.00 152007.00 73213.00C152018.00 73213.00 152029.00 73213.00 152040.00 73213.00C152061.33 73223.67 152082.67 73234.33 152104.00 73245.00C152104.00 73255.67 152104.00 73266.33 152104.00 73277.00C152146.67 73277.00 152189.33 73277.00 152232.00 73277.00C152232.00 73309.00 152232.00 73341.00 152232.00 73373.00C152296.84 73362.41 152361.61 73351.19 152426.49 73340.99C152437.14 73340.92 152447.79 73341.19 152458.44 73340.85C152490.29 73330.24 152522.15 73319.62 152554.00 73309.00C152575.33 73319.67 152596.67 73330.33 152618.00 73341.00C152639.67 73362.33 152661.33 73383.67 152683.00 73405.00C152683.00 73416.00 152683.00 73427.00 152683.00 73438.00C152693.67 73448.66 152704.33 73459.34 152715.00 73470.00C152704.33 73502.00 152693.67 73534.00 152683.00 73566.00C152683.08 73587.82 152682.85 73609.63 152683.11 73631.45C152693.84 73674.10 152704.31 73716.81 152715.21 73759.41C152725.81 73780.61 152736.40 73801.81 152747.00 73823.00C152747.00 73834.00 152747.00 73845.00 152747.00 73856.00C152779.00 73877.33 152811.00 73898.67 152843.00 73920.00C152875.33 73920.00 152907.67 73920.00 152940.00 73920.00C152961.33 73930.67 152982.67 73941.33 153004.00 73952.00C153036.33 73995.00 153068.67 74038.00 153101.00 74081.00C153122.33 74081.00 153143.67 74081.00 153165.00 74081.00C153186.33 74059.33 153207.67 74037.67 153229.00 74016.00C153239.67 74016.00 153250.33 74016.00 153261.00 74016.00C153271.67 74037.66 153282.33 74059.34 153293.00 74081.00C153293.00 74113.00 153293.00 74145.00 153293.00 74177.00C153314.67 74209.33 153336.33 74241.67 153358.00 74274.00C153358.00 74306.00 153358.00 74338.00 153358.00 74370.00C153380.13 74369.75 153402.32 74370.51 153424.41 74369.60C153487.94 74359.06 153551.47 74348.53 153615.00 74338.00C153625.67 74327.34 153636.33 74316.66 153647.00 74306.00C153647.00 74273.67 153647.00 74241.33 153647.00 74209.00C153668.67 74198.33 153690.33 74187.67 153712.00 74177.00C153754.67 74134.34 153797.33 74091.66 153840.00 74049.00C153840.00 74006.00 153840.00 73963.00 153840.00 73920.00C153850.67 73930.66 153861.33 73941.34 153872.00 73952.00C153904.33 73962.67 153936.67 73973.33 153969.00 73984.00C153969.00 73994.67 153969.00 74005.33 153969.00 74016.00C153990.48 74015.90 154011.96 74016.20 154033.44 74015.85C154065.29 74005.24 154097.15 73994.62 154129.00 73984.00C154150.67 73984.00 154172.33 73984.00 154194.00 73984.00C154215.33 73973.33 154236.67 73962.67 154258.00 73952.00C154268.67 73962.66 154279.33 73973.34 154290.00 73984.00C154322.38 73941.18 154354.94 73898.49 154387.20 73855.58C154397.80 73834.05 154408.40 73812.53 154419.00 73791.00C154429.67 73780.34 154440.33 73769.66 154451.00 73759.00C154483.33 73769.67 154515.67 73780.33 154548.00 73791.00C154580.00 73780.33 154612.00 73769.67 154644.00 73759.00C154687.00 73769.67 154730.00 73780.33 154773.00 73791.00C154815.67 73780.33 154858.33 73769.67 154901.00 73759.00C154911.67 73737.67 154922.33 73716.33 154933.00 73695.00C154922.33 73673.67 154911.67 73652.33 154901.00 73631.00C154911.85 73619.97 154922.39 73608.64 154933.42 73597.79C154954.94 73587.19 154976.47 73576.60 154998.00 73566.00C155030.00 73576.67 155062.00 73587.33 155094.00 73598.00C155104.84 73587.30 155115.40 73576.31 155126.42 73565.79C155147.94 73555.19 155169.47 73544.60 155191.00 73534.00C155201.67 73523.34 155212.33 73512.66 155223.00 73502.00C155223.00 73459.00 155223.00 73416.00 155223.00 73373.00C155234.52 73361.94 155245.17 73349.89 155257.26 73339.49C155289.02 73318.48 155320.50 73297.02 155352.42 73276.30C155394.95 73255.19 155437.47 73234.10 155480.00 73213.00C155490.67 73202.00 155501.33 73191.00 155512.00 73180.00C155522.67 73180.00 155533.33 73180.00 155544.00 73180.00C155544.00 73137.33 155544.00 73094.67 155544.00 73052.00C155597.67 73019.67 155651.33 72987.33 155705.00 72955.00C155715.67 72933.67 155726.33 72912.33 155737.00 72891.00C155747.81 72890.90 155758.63 72891.20 155769.44 72890.85C155801.63 72880.24 155833.81 72869.62 155866.00 72859.00C155898.00 72859.00 155930.00 72859.00 155962.00 72859.00C155973.52 72847.93 155984.18 72835.88 155996.28 72825.47C156028.35 72804.13 156060.16 72782.35 156092.40 72761.30C156113.27 72750.86 156134.13 72740.43 156155.00 72730.00C156165.67 72730.00 156176.33 72730.00 156187.00 72730.00C156208.67 72740.67 156230.33 72751.33 156252.00 72762.00C156273.33 72762.00 156294.67 72762.00 156316.00 72762.00C156337.33 72751.33 156358.67 72740.67 156380.00 72730.00C156476.67 72730.00 156573.33 72730.00 156670.00 72730.00C156702.12 72719.22 156734.33 72708.70 156766.40 72697.76C156819.93 72665.84 156873.47 72633.92 156927.00 72602.00C156969.67 72602.00 157012.33 72602.00 157055.00 72602.00C157076.67 72591.33 157098.33 72580.67 157120.00 72570.00C157162.67 72591.33 157205.33 72612.67 157248.00 72634.00C157291.00 72601.67 157334.00 72569.33 157377.00 72537.00C157398.33 72569.34 157419.67 72601.66 157441.00 72634.00C157473.33 72634.00 157505.67 72634.00 157538.00 72634.00C157559.33 72655.34 157580.67 72676.66 157602.00 72698.00C157612.67 72698.00 157623.33 72698.00 157634.00 72698.00C157644.79 72686.77 157656.56 72676.32 157666.72 72664.60C157677.49 72643.73 157688.24 72622.87 157699.00 72602.00C157731.00 72591.33 157763.00 72580.67 157795.00 72570.00C157816.33 72548.33 157837.67 72526.67 157859.00 72505.00C157869.67 72505.00 157880.33 72505.00 157891.00 72505.00C157912.67 72515.67 157934.33 72526.33 157956.00 72537.00C157977.33 72537.00 157998.67 72537.00 158020.00 72537.00C158041.33 72440.67 158062.67 72344.33 158084.00 72248.00C158116.33 72215.66 158148.67 72183.34 158181.00 72151.00C158181.00 72119.00 158181.00 72087.00 158181.00 72055.00C158213.00 72023.00 158245.00 71991.00 158277.00 71959.00C158287.67 71959.00 158298.33 71959.00 158309.00 71959.00C158331.17 71937.05 158352.92 71914.63 158375.37 71892.97C158417.58 71861.32 158459.79 71829.66 158502.00 71798.00C158502.00 71723.00 158502.00 71648.00 158502.00 71573.00C158513.00 71530.00 158524.00 71487.00 158535.00 71444.00C158535.00 71433.33 158535.00 71422.67 158535.00 71412.00C158610.00 71412.00 158685.00 71412.00 158760.00 71412.00C158770.67 71390.67 158781.33 71369.33 158792.00 71348.00C158792.00 71326.33 158792.00 71304.67 158792.00 71283.00C158856.82 71272.41 158921.58 71261.20 158986.45 71251.00C158996.63 71251.00 159006.82 71251.00 159017.00 71251.00C159017.00 71229.67 159017.00 71208.33 159017.00 71187.00C159038.33 71187.00 159059.67 71187.00 159081.00 71187.00C159091.67 71165.67 159102.33 71144.33 159113.00 71123.00C159166.67 71123.00 159220.33 71123.00 159274.00 71123.00C159284.67 71144.33 159295.33 71165.67 159306.00 71187.00C159338.33 71176.33 159370.67 71165.67 159403.00 71155.00C159403.00 71112.00 159403.00 71069.00 159403.00 71026.00C159424.33 71015.33 159445.67 71004.67 159467.00 70994.00C159477.67 70951.00 159488.33 70908.00 159499.00 70865.00C159509.67 70865.00 159520.33 70865.00 159531.00 70865.00C159541.67 70843.67 159552.33 70822.33 159563.00 70801.00C159563.00 70779.67 159563.00 70758.33 159563.00 70737.00C159574.00 70726.33 159585.00 70715.67 159596.00 70705.00C159596.00 70694.00 159596.00 70683.00 159596.00 70672.00C159606.67 70672.00 159617.33 70672.00 159628.00 70672.00C159638.67 70640.00 159649.33 70608.00 159660.00 70576.00C159681.33 70576.00 159702.67 70576.00 159724.00 70576.00C159745.80 70553.95 159768.12 70532.38 159789.58 70510.02C159832.06 70457.02 159874.53 70404.01 159917.00 70351.00C159927.67 70361.66 159938.33 70372.34 159949.00 70383.00C159971.02 70328.75 159992.64 70274.32 160014.91 70220.17C160035.98 70177.96 160057.19 70135.82 160078.15 70093.56C160088.75 70061.37 160099.38 70029.19 160110.00 69997.00C160131.33 69975.66 160152.67 69954.34 160174.00 69933.00C160174.00 69922.33 160174.00 69911.67 160174.00 69901.00C160206.33 69901.00 160238.67 69901.00 160271.00 69901.00C160313.67 69933.00 160356.33 69965.00 160399.00 69997.00C160431.33 69997.00 160463.67 69997.00 160496.00 69997.00C160528.00 70018.67 160560.00 70040.33 160592.00 70062.00C160602.67 70062.00 160613.33 70062.00 160624.00 70062.00C160645.67 70051.00 160667.33 70040.00 160689.00 70029.00C160710.33 70007.66 160731.67 69986.34 160753.00 69965.00C160785.33 69965.00 160817.67 69965.00 160850.00 69965.00C160850.00 69954.33 160850.00 69943.67 160850.00 69933.00C160860.67 69922.34 160871.33 69911.66 160882.00 69901.00C160892.81 69901.10 160903.63 69900.80 160914.44 69901.15C160946.29 69911.76 160978.15 69922.38 161010.00 69933.00C161020.67 69922.34 161031.33 69911.66 161042.00 69901.00C161053.00 69911.67 161064.00 69922.33 161075.00 69933.00C161085.67 69922.34 161096.33 69911.66 161107.00 69901.00C161117.67 69911.66 161128.33 69922.34 161139.00 69933.00C161149.67 69922.34 161160.33 69911.66 161171.00 69901.00C161181.67 69911.66 161192.33 69922.34 161203.00 69933.00C161278.00 69922.33 161353.00 69911.67 161428.00 69901.00C161417.33 69922.33 161406.67 69943.67 161396.00 69965.00C161396.00 69975.67 161396.00 69986.33 161396.00 69997.00C161385.33 70007.66 161374.67 70018.34 161364.00 70029.00C161364.00 70040.00 161364.00 70051.00 161364.00 70062.00C161374.67 70083.33 161385.33 70104.67 161396.00 70126.00C161406.67 70136.66 161417.33 70147.34 161428.00 70158.00C161428.00 70168.67 161428.00 70179.33 161428.00 70190.00C161438.79 70201.23 161450.58 70211.68 161460.72 70223.42C161471.49 70244.61 161482.24 70265.81 161493.00 70287.00C161525.00 70287.00 161557.00 70287.00 161589.00 70287.00C161589.00 70297.67 161589.00 70308.33 161589.00 70319.00C161599.67 70308.34 161610.33 70297.66 161621.00 70287.00C161685.33 70287.00 161749.67 70287.00 161814.00 70287.00C161824.67 70329.67 161835.33 70372.33 161846.00 70415.00C161835.33 70458.00 161824.67 70501.00 161814.00 70544.00C161835.33 70554.67 161856.67 70565.33 161878.00 70576.00C161910.33 70554.66 161942.67 70533.34 161975.00 70512.00C161985.67 70512.00 161996.33 70512.00 162007.00 70512.00C162028.33 70501.00 162049.67 70490.00 162071.00 70479.00C162103.33 70490.00 162135.67 70501.00 162168.00 70512.00C162168.00 70533.33 162168.00 70554.67 162168.00 70576.00C162189.48 70575.93 162210.97 70576.15 162232.45 70575.89C162275.30 70565.26 162318.15 70554.63 162361.00 70544.00C162361.00 70565.33 162361.00 70586.67 162361.00 70608.00C162382.33 70629.34 162403.67 70650.66 162425.00 70672.00C162435.67 70672.00 162446.33 70672.00 162457.00 70672.00C162457.00 70715.00 162457.00 70758.00 162457.00 70801.00C162478.33 70822.34 162499.67 70843.66 162521.00 70865.00C162521.00 70886.67 162521.00 70908.33 162521.00 70930.00C162553.33 70940.67 162585.67 70951.33 162618.00 70962.00C162618.00 71004.67 162618.00 71047.33 162618.00 71090.00C162639.33 71090.00 162660.67 71090.00 162682.00 71090.00C162682.00 71143.67 162682.00 71197.33 162682.00 71251.00C162714.01 71315.50 162746.98 71379.51 162779.00 71444.00C162779.00 71465.33 162779.00 71486.67 162779.00 71508.00C162789.67 71519.00 162800.33 71530.00 162811.00 71541.00C162811.00 71573.00 162811.00 71605.00 162811.00 71637.00C162821.67 71647.66 162832.33 71658.34 162843.00 71669.00C162832.33 71690.66 162821.67 71712.34 162811.00 71734.00C162832.33 71744.67 162853.67 71755.33 162875.00 71766.00C162885.67 71787.33 162896.33 71808.67 162907.00 71830.00C162928.67 71830.00 162950.33 71830.00 162972.00 71830.00C162972.00 71840.67 162972.00 71851.33 162972.00 71862.00C162993.33 71851.33 163014.67 71840.67 163036.00 71830.00C163057.33 71840.67 163078.67 71851.33 163100.00 71862.00C163110.67 71862.00 163121.33 71862.00 163132.00 71862.00C163132.00 71883.33 163132.00 71904.67 163132.00 71926.00C163143.00 71926.00 163154.00 71926.00 163165.00 71926.00C163187.04 71937.58 163209.46 71948.49 163231.26 71960.51C163262.51 71981.34 163293.75 72002.17 163325.00 72023.00C163368.00 72023.00 163411.00 72023.00 163454.00 72023.00C163464.67 72044.33 163475.33 72065.67 163486.00 72087.00C163507.33 72097.67 163528.67 72108.33 163550.00 72119.00C163539.33 72140.66 163528.67 72162.34 163518.00 72184.00C163518.00 72216.00 163518.00 72248.00 163518.00 72280.00C163507.33 72301.33 163496.67 72322.67 163486.00 72344.00C163486.00 72355.00 163486.00 72366.00 163486.00 72377.00C163464.67 72409.00 163443.33 72441.00 163422.00 72473.00C163432.67 72494.33 163443.33 72515.67 163454.00 72537.00C163454.00 72558.67 163454.00 72580.33 163454.00 72602.00C163464.67 72602.00 163475.33 72602.00 163486.00 72602.00C163486.00 72623.33 163486.00 72644.67 163486.00 72666.00C163475.33 72676.66 163464.67 72687.34 163454.00 72698.00C163421.67 72708.67 163389.33 72719.33 163357.00 72730.00C163357.00 72751.67 163357.00 72773.33 163357.00 72795.00C163335.67 72805.67 163314.33 72816.33 163293.00 72827.00C163261.00 72816.33 163229.00 72805.67 163197.00 72795.00C163197.00 72805.67 163197.00 72816.33 163197.00 72827.00C163186.33 72827.00 163175.67 72827.00 163165.00 72827.00C163154.00 72837.67 163143.00 72848.33 163132.00 72859.00C163164.33 72901.67 163196.67 72944.33 163229.00 72987.00C163218.33 72998.00 163207.67 73009.00 163197.00 73020.00C163207.67 73041.33 163218.33 73062.67 163229.00 73084.00C163207.67 73105.34 163186.33 73126.66 163165.00 73148.00C163175.67 73169.66 163186.33 73191.34 163197.00 73213.00C163197.00 73245.00 163197.00 73277.00 163197.00 73309.00C163186.33 73309.00 163175.67 73309.00 163165.00 73309.00C163143.33 73319.67 163121.67 73330.33 163100.00 73341.00C163100.00 73373.33 163100.00 73405.67 163100.00 73438.00C163078.67 73480.67 163057.33 73523.33 163036.00 73566.00C163079.00 73544.67 163122.00 73523.33 163165.00 73502.00C163207.67 73502.00 163250.33 73502.00 163293.00 73502.00C163304.30 73512.89 163314.86 73524.70 163326.65 73534.99C163379.77 73567.00 163432.89 73599.00 163486.00 73631.00C163571.70 73652.21 163657.36 73673.54 163743.00 73695.00C163796.67 73673.67 163850.33 73652.33 163904.00 73631.00C163936.33 73631.00 163968.67 73631.00 164001.00 73631.00C164032.45 73598.13 164064.86 73566.19 164097.00 73534.00C164107.67 73534.00 164118.33 73534.00 164129.00 73534.00C164139.67 73491.00 164150.33 73448.00 164161.00 73405.00C164171.67 73394.34 164182.33 73383.66 164193.00 73373.00C164225.33 73362.33 164257.67 73351.67 164290.00 73341.00C164311.48 73341.10 164332.96 73340.81 164354.44 73341.15C164386.63 73351.76 164418.81 73362.38 164451.00 73373.00C164461.67 73383.66 164472.33 73394.34 164483.00 73405.00C164504.64 73372.17 164526.98 73339.77 164548.17 73306.67C164580.11 73243.11 164612.06 73179.56 164644.00 73116.00C164665.33 73094.66 164686.67 73073.34 164708.00 73052.00C164729.33 73052.00 164750.67 73052.00 164772.00 73052.00C164804.33 73084.00 164836.67 73116.00 164869.00 73148.00C164901.00 73158.67 164933.00 73169.33 164965.00 73180.00C164975.67 73180.00 164986.33 73180.00 164997.00 73180.00C165040.00 73137.33 165083.00 73094.67 165126.00 73052.00C165126.00 73009.00 165126.00 72966.00 165126.00 72923.00C165147.33 72858.67 165168.67 72794.33 165190.00 72730.00C165211.67 72708.67 165233.33 72687.33 165255.00 72666.00C165276.33 72548.00 165297.67 72430.00 165319.00 72312.00C165329.67 72280.00 165340.33 72248.00 165351.00 72216.00C165340.33 72173.00 165329.67 72130.00 165319.00 72087.00C165329.73 72033.19 165340.32 71979.35 165351.15 71925.56C165372.42 71861.70 165393.72 71797.85 165415.00 71734.00C165458.00 71691.00 165501.00 71648.00 165544.00 71605.00C165576.00 71605.00 165608.00 71605.00 165640.00 71605.00C165651.00 71615.67 165662.00 71626.33 165673.00 71637.00C165683.67 71637.00 165694.33 71637.00 165705.00 71637.00C165737.15 71669.40 165769.13 71701.97 165801.39 71734.26C165833.59 71755.50 165865.80 71776.75 165898.00 71798.00C165908.67 71819.33 165919.33 71840.67 165930.00 71862.00C165983.67 71862.00 166037.33 71862.00 166091.00 71862.00C166155.00 71830.00 166219.00 71798.00 166283.00 71766.00C166326.00 71723.00 166369.00 71680.00 166412.00 71637.00C166519.33 71637.00 166626.67 71637.00 166734.00 71637.00C166756.16 71626.16 166777.96 71614.51 166800.37 71604.21C166831.58 71593.81 166862.79 71583.40 166894.00 71573.00C166958.91 71497.47 167023.54 71421.69 167088.63 71346.32C167098.75 71335.88 167108.88 71325.44 167119.00 71315.00C167130.00 71283.00 167141.00 71251.00 167152.00 71219.00C167173.33 71208.33 167194.67 71197.67 167216.00 71187.00C167248.00 71122.67 167280.00 71058.33 167312.00 70994.00C167301.23 70950.87 167290.72 70907.67 167279.79 70864.59C167247.85 70800.39 167215.93 70736.20 167184.00 70672.00C167184.00 70629.33 167184.00 70586.67 167184.00 70544.00C167194.67 70533.34 167205.33 70522.66 167216.00 70512.00C167249.49 70500.75 167282.68 70488.55 167316.36 70477.92C167400.91 70456.95 167485.45 70435.97 167570.00 70415.00C167591.33 70425.67 167612.67 70436.33 167634.00 70447.00C167655.33 70447.00 167676.67 70447.00 167698.00 70447.00C167762.33 70404.33 167826.67 70361.67 167891.00 70319.00C167966.50 70329.60 168041.94 70340.74 168117.47 70351.00C168138.65 70351.00 168159.82 70351.00 168181.00 70351.00C168212.22 70319.67 168243.79 70288.68 168274.37 70256.72C168280.02 70250.44 168270.77 70241.24 168270.28 70233.86C168261.86 70208.57 168253.43 70183.29 168245.00 70158.00C168244.94 70125.85 168245.12 70093.70 168244.91 70061.54C168234.27 70008.03 168223.64 69954.51 168213.00 69901.00C168191.33 69858.00 168169.67 69815.00 168148.00 69772.00C168159.00 69740.00 168170.00 69708.00 168181.00 69676.00C168245.00 69676.00 168309.00 69676.00 168373.00 69676.00C168405.33 69665.00 168437.67 69654.00 168470.00 69643.00C168502.00 69643.00 168534.00 69643.00 168566.00 69643.00C168630.33 69621.67 168694.67 69600.33 168759.00 69579.00C168759.00 69568.33 168759.00 69557.67 168759.00 69547.00C168780.41 69525.40 168802.08 69504.08 168824.00 69483.00C168866.67 69472.33 168909.33 69461.67 168952.00 69451.00C168962.67 69440.00 168973.33 69429.00 168984.00 69418.00C169048.33 69396.67 169112.67 69375.33 169177.00 69354.00C169209.33 69332.66 169241.67 69311.34 169274.00 69290.00C169274.00 69268.67 169274.00 69247.33 169274.00 69226.00C169284.67 69215.00 169295.33 69204.00 169306.00 69193.00C169348.67 69193.00 169391.33 69193.00 169434.00 69193.00C169445.00 69161.00 169456.00 69129.00 169467.00 69097.00C169478.14 69096.77 169489.36 69097.46 169500.45 69096.64C169542.63 69086.09 169584.82 69075.54 169627.00 69065.00C169648.67 69065.00 169670.33 69065.00 169692.00 69065.00C169734.67 69107.66 169777.33 69150.34 169820.00 69193.00C169906.00 69193.00 169992.00 69193.00 170078.00 69193.00C170088.79 69204.56 170100.54 69215.37 170110.71 69227.41C170121.14 69248.27 170131.57 69269.14 170142.00 69290.00C170142.10 69311.48 170141.81 69332.96 170142.15 69354.44C170152.75 69386.63 170163.38 69418.81 170174.00 69451.00C170195.33 69461.67 170216.67 69472.33 170238.00 69483.00C170248.79 69494.23 170260.56 69504.68 170270.72 69516.40C170281.49 69537.27 170292.24 69558.13 170303.00 69579.00C170292.00 69589.67 170281.00 69600.33 170270.00 69611.00C170270.00 69675.33 170270.00 69739.67 170270.00 69804.00C170281.00 69825.67 170292.00 69847.33 170303.00 69869.00C170324.33 69890.34 170345.67 69911.66 170367.00 69933.00C170377.67 69933.00 170388.33 69933.00 170399.00 69933.00C170399.00 69922.33 170399.00 69911.67 170399.00 69901.00C170431.33 69911.67 170463.67 69922.33 170496.00 69933.00C170528.00 69922.33 170560.00 69911.67 170592.00 69901.00C170613.60 69879.60 170634.92 69857.92 170656.00 69836.00C170677.67 69857.66 170699.33 69879.34 170721.00 69901.00C170721.00 69911.67 170721.00 69922.33 170721.00 69933.00C170765.70 69943.99 170810.23 69955.69 170855.03 69966.20C170908.24 69976.91 170961.56 69987.07 171014.69 69998.16C171091.66 70017.12 171168.57 70036.33 171245.26 70056.41C171253.66 70058.15 171261.86 70061.51 171270.42 70062.00C171279.95 70062.00 171289.47 70062.00 171299.00 70062.00C171320.67 70083.33 171342.33 70104.67 171364.00 70126.00C171406.67 70147.33 171449.33 70168.67 171492.00 70190.00C171513.67 70233.00 171535.33 70276.00 171557.00 70319.00C171578.33 70329.67 171599.67 70340.33 171621.00 70351.00C171631.67 70361.66 171642.33 70372.34 171653.00 70383.00C171674.48 70382.90 171695.96 70383.19 171717.44 70382.85C171750.31 70372.22 171782.97 70360.81 171815.96 70350.68C171879.64 70340.12 171943.32 70329.56 172007.00 70319.00C172028.33 70308.33 172049.67 70297.67 172071.00 70287.00C172093.22 70287.24 172115.49 70286.52 172137.67 70287.38C172212.28 70297.85 172286.84 70308.87 172361.48 70319.00C172371.99 70319.00 172382.49 70319.00 172393.00 70319.00C172405.13 70330.58 172416.18 70343.37 172429.09 70354.07C172470.50 70385.17 172511.99 70416.14 172553.33 70447.33C172596.22 70490.22 172639.11 70533.11 172682.00 70576.00C172714.00 70586.67 172746.00 70597.33 172778.00 70608.00C172799.67 70629.33 172821.33 70650.67 172843.00 70672.00C172853.73 70705.08 172865.13 70737.96 172875.43 70771.16C172885.92 70824.27 172896.65 70877.33 172907.00 70930.46C172907.00 70962.31 172907.00 70994.15 172907.00 71026.00C172939.11 71090.45 172971.62 71154.69 173004.00 71219.00C173046.67 71240.33 173089.33 71261.67 173132.00 71283.00C173153.33 71272.33 173174.67 71261.67 173196.00 71251.00C173207.00 71251.00 173218.00 71251.00 173229.00 71251.00C173250.33 71208.33 173271.67 71165.67 173293.00 71123.00C173293.00 71026.33 173293.00 70929.67 173293.00 70833.00C173304.42 70810.65 173315.05 70787.88 173326.99 70765.82C173380.00 70681.22 173433.00 70596.61 173486.00 70512.00C173518.00 70501.00 173550.00 70490.00 173582.00 70479.00C173646.33 70490.00 173710.67 70501.00 173775.00 70512.00C173818.09 70544.13 173861.30 70576.11 173904.33 70608.33C173925.55 70629.55 173946.78 70650.77 173968.00 70672.00C173957.23 70715.13 173946.73 70758.33 173935.79 70801.41C173925.19 70822.61 173914.60 70843.81 173904.00 70865.00C173860.90 70897.46 173817.70 70929.78 173774.67 70962.33C173764.11 70972.88 173753.56 70983.44 173743.00 70994.00C173743.00 71004.67 173743.00 71015.33 173743.00 71026.00C173732.33 71036.66 173721.67 71047.34 173711.00 71058.00C173711.00 71068.67 173711.00 71079.33 173711.00 71090.00C173722.26 71112.37 173732.73 71135.18 173744.51 71157.26C173765.77 71188.82 173786.42 71220.84 173808.09 71252.09C173840.20 71284.13 173872.19 71316.30 173904.37 71348.28C173947.07 71380.23 173989.63 71412.37 174032.42 71444.21C174075.38 71465.27 174118.24 71486.53 174161.00 71508.00C174193.00 71519.00 174225.00 71530.00 174257.00 71541.00C174332.33 71465.66 174407.67 71390.34 174483.00 71315.00C174493.67 71315.00 174504.33 71315.00 174515.00 71315.00C174536.33 71304.33 174557.67 71293.67 174579.00 71283.00C174611.33 71283.00 174643.67 71283.00 174676.00 71283.00C174676.00 71304.67 174676.00 71326.33 174676.00 71348.00C174708.00 71380.00 174740.00 71412.00 174772.00 71444.00C174782.67 71476.33 174793.33 71508.67 174804.00 71541.00C174804.00 71551.67 174804.00 71562.33 174804.00 71573.00C174792.49 71584.06 174781.83 71596.11 174769.74 71606.51C174738.49 71627.34 174707.25 71648.17 174676.00 71669.00C174665.00 71690.67 174654.00 71712.33 174643.00 71734.00C174654.00 71755.33 174665.00 71776.67 174676.00 71798.00C174697.33 71798.00 174718.67 71798.00 174740.00 71798.00C174707.67 71830.00 174675.33 71862.00 174643.00 71894.00C174654.00 71937.00 174665.00 71980.00 174676.00 72023.00C174697.40 72044.49 174718.97 72065.80 174740.26 72087.39C174761.53 72119.76 174783.02 72151.98 174804.17 72184.43C174825.45 72237.62 174846.72 72290.81 174868.00 72344.00C174857.33 72365.66 174846.67 72387.34 174836.00 72409.00C174889.70 72526.82 174943.52 72644.59 174997.15 72762.44C175018.42 72826.63 175039.72 72890.81 175061.00 72955.00C175104.00 72998.00 175147.00 73041.00 175190.00 73084.00C175200.67 73116.00 175211.33 73148.00 175222.00 73180.00C175232.67 73191.00 175243.33 73202.00 175254.00 73213.00C175254.00 73234.33 175254.00 73255.67 175254.00 73277.00C175243.33 73287.66 175232.67 73298.34 175222.00 73309.00C175222.00 73330.33 175222.00 73351.67 175222.00 73373.00C175232.67 73383.66 175243.33 73394.34 175254.00 73405.00C175286.33 73405.00 175318.67 73405.00 175351.00 73405.00C175383.00 73437.33 175415.00 73469.67 175447.00 73502.00C175468.33 73491.33 175489.67 73480.67 175511.00 73470.00C175543.33 73480.67 175575.67 73491.33 175608.00 73502.00C175618.67 73491.34 175629.33 73480.66 175640.00 73470.00C175651.62 73470.41 175663.39 73469.14 175674.90 73470.72C175716.93 73481.14 175758.97 73491.57 175801.00 73502.00C175811.67 73502.00 175822.33 73502.00 175833.00 73502.00C175833.00 73512.67 175833.00 73523.33 175833.00 73534.00C175843.67 73544.66 175854.33 73555.34 175865.00 73566.00C175875.67 73566.00 175886.33 73566.00 175897.00 73566.00C175918.67 73587.66 175940.33 73609.34 175962.00 73631.00C175994.00 73631.00 176026.00 73631.00 176058.00 73631.00C176100.75 73673.92 176143.73 73716.61 176187.00 73759.00C176176.02 73791.77 176165.64 73824.78 176154.28 73857.40C176143.51 73878.27 176132.76 73899.13 176122.00 73920.00C176122.00 73930.67 176122.00 73941.33 176122.00 73952.00C176100.67 73973.34 176079.33 73994.66 176058.00 74016.00C176068.67 74027.00 176079.33 74038.00 176090.00 74049.00C176090.00 74059.67 176090.00 74070.33 176090.00 74081.00C176079.33 74091.66 176068.67 74102.34 176058.00 74113.00C176058.00 74123.67 176058.00 74134.33 176058.00 74145.00C176047.33 74134.34 176036.67 74123.66 176026.00 74113.00C176015.33 74123.66 176004.67 74134.34 175994.00 74145.00C175994.00 74188.00 175994.00 74231.00 175994.00 74274.00C176004.67 74295.33 176015.33 74316.67 176026.00 74338.00C176047.33 74348.67 176068.67 74359.33 176090.00 74370.00C176111.41 74391.60 176133.08 74412.92 176155.00 74434.00C176176.42 74445.15 176198.02 74455.97 176219.33 74467.33C176229.89 74477.88 176240.44 74488.44 176251.00 74499.00C176240.33 74509.66 176229.67 74520.34 176219.00 74531.00C176197.67 74531.00 176176.33 74531.00 176155.00 74531.00C176133.33 74552.33 176111.67 74573.67 176090.00 74595.00C176079.33 74616.33 176068.67 74637.67 176058.00 74659.00C176036.67 74670.00 176015.33 74681.00 175994.00 74692.00C175994.00 74799.00 175994.00 74906.00 175994.00 75013.00C176015.33 75056.00 176036.67 75099.00 176058.00 75142.00C176068.67 75142.00 176079.33 75142.00 176090.00 75142.00C176090.00 75152.67 176090.00 75163.33 176090.00 75174.00C176122.33 75206.00 176154.67 75238.00 176187.00 75270.00C176219.00 75281.00 176251.00 75292.00 176283.00 75303.00C176293.67 75303.00 176304.33 75303.00 176315.00 75303.00C176325.67 75313.66 176336.33 75324.34 176347.00 75335.00C176325.67 75377.67 176304.33 75420.33 176283.00 75463.00C176293.67 75473.66 176304.33 75484.34 176315.00 75495.00C176315.00 75506.00 176315.00 75517.00 176315.00 75528.00C176293.67 75549.34 176272.33 75570.66 176251.00 75592.00C176251.00 75624.00 176251.00 75656.00 176251.00 75688.00C176229.67 75720.34 176208.33 75752.66 176187.00 75785.00C176187.00 75795.67 176187.00 75806.33 176187.00 75817.00C176208.33 75827.67 176229.67 75838.33 176251.00 75849.00C176283.00 75913.33 176315.00 75977.67 176347.00 76042.00C176358.00 76052.67 176369.00 76063.33 176380.00 76074.00C176390.67 76074.00 176401.33 76074.00 176412.00 76074.00C176433.33 76063.33 176454.67 76052.67 176476.00 76042.00C176497.33 76042.00 176518.67 76042.00 176540.00 76042.00C176540.00 76063.33 176540.00 76084.67 176540.00 76106.00C176572.33 76106.00 176604.67 76106.00 176637.00 76106.00C176669.00 76116.67 176701.00 76127.33 176733.00 76138.00C176743.67 76127.34 176754.33 76116.66 176765.00 76106.00C176840.33 76149.00 176915.67 76192.00 176991.00 76235.00C177001.67 76256.33 177012.33 76277.67 177023.00 76299.00C177023.00 76363.33 177023.00 76427.67 177023.00 76492.00C177065.67 76577.66 177108.33 76663.34 177151.00 76749.00C177183.33 76792.00 177215.67 76835.00 177248.00 76878.00C177247.78 76899.90 177248.44 76921.86 177247.66 76943.71C177237.13 76996.97 177226.38 77050.18 177216.00 77103.46C177216.00 77113.98 177216.00 77124.49 177216.00 77135.00C177237.33 77145.67 177258.67 77156.33 177280.00 77167.00C177322.67 77370.67 177365.33 77574.33 177408.00 77778.00C177408.00 77788.67 177408.00 77799.33 177408.00 77810.00C177419.00 77821.00 177430.00 77832.00 177441.00 77843.00C177398.00 77864.33 177355.00 77885.67 177312.00 77907.00C177280.00 77907.00 177248.00 77907.00 177216.00 77907.00C177204.16 77918.07 177193.11 77930.06 177180.74 77940.51C177149.49 77961.34 177118.25 77982.17 177087.00 78003.00C177076.33 78003.00 177065.67 78003.00 177055.00 78003.00C177044.33 78014.00 177033.67 78025.00 177023.00 78036.00C177023.00 78046.67 177023.00 78057.33 177023.00 78068.00C177001.33 78068.00 176979.67 78068.00 176958.00 78068.00C176958.00 78078.67 176958.00 78089.33 176958.00 78100.00C176947.33 78110.66 176936.67 78121.34 176926.00 78132.00C176926.00 78142.67 176926.00 78153.33 176926.00 78164.00C176936.67 78164.00 176947.33 78164.00 176958.00 78164.00C176926.00 78174.67 176894.00 78185.33 176862.00 78196.00C176872.67 78217.66 176883.33 78239.34 176894.00 78261.00C176883.33 78271.66 176872.67 78282.34 176862.00 78293.00C176915.67 78389.33 176969.33 78485.67 177023.00 78582.00C177033.67 78614.33 177044.33 78646.67 177055.00 78679.00C177055.00 78700.33 177055.00 78721.67 177055.00 78743.00C177044.33 78764.33 177033.67 78785.67 177023.00 78807.00C177023.00 78828.33 177023.00 78849.67 177023.00 78871.00C177023.00 78860.33 177023.00 78849.67 177023.00 78839.00C177012.33 78849.66 177001.67 78860.34 176991.00 78871.00C176991.00 78882.00 176991.00 78893.00 176991.00 78904.00C176969.33 78904.00 176947.67 78904.00 176926.00 78904.00C176926.00 78914.67 176926.00 78925.33 176926.00 78936.00C176936.67 78946.66 176947.33 78957.34 176958.00 78968.00C176958.00 78978.67 176958.00 78989.33 176958.00 79000.00C176969.00 79010.67 176980.00 79021.33 176991.00 79032.00C176991.15 79048.42 176990.19 79064.92 176993.01 79081.20C177013.68 79257.80 177034.34 79434.40 177055.00 79611.00C176855.55 79688.63 176655.93 79765.84 176456.58 79843.73C176408.79 79862.82 176360.84 79881.53 176313.18 79900.92C176271.12 79922.28 176229.06 79943.64 176187.00 79965.00C176144.00 79965.00 176101.00 79965.00 176058.00 79965.00C176058.00 79911.33 176058.00 79857.67 176058.00 79804.00C176036.67 79782.66 176015.33 79761.34 175994.00 79740.00C175983.33 79740.00 175972.67 79740.00 175962.00 79740.00C175951.00 79718.33 175940.00 79696.67 175929.00 79675.00C175918.19 79675.10 175907.37 79674.80 175896.56 79675.15C175864.71 79685.76 175832.85 79696.38 175801.00 79707.00C175779.67 79685.66 175758.33 79664.34 175737.00 79643.00C175715.33 79664.33 175693.67 79685.67 175672.00 79707.00C175650.67 79696.33 175629.33 79685.67 175608.00 79675.00C175597.33 79696.66 175586.67 79718.34 175576.00 79740.00C175554.33 79740.00 175532.67 79740.00 175511.00 79740.00C175489.67 79729.00 175468.33 79718.00 175447.00 79707.00C175415.00 79707.00 175383.00 79707.00 175351.00 79707.00C175340.33 79685.67 175329.67 79664.33 175319.00 79643.00C175286.67 79653.67 175254.33 79664.33 175222.00 79675.00C175211.33 79675.00 175200.67 79675.00 175190.00 79675.00C175179.33 79696.66 175168.67 79718.34 175158.00 79740.00C175158.00 79804.33 175158.00 79868.67 175158.00 79933.00C175147.02 79965.44 175136.64 79998.12 175125.28 80030.40C175114.51 80051.27 175103.76 80072.13 175093.00 80093.00C175082.33 80093.00 175071.67 80093.00 175061.00 80093.00C175050.33 80104.00 175039.67 80115.00 175029.00 80126.00C175039.67 80147.33 175050.33 80168.67 175061.00 80190.00C175050.33 80211.33 175039.67 80232.67 175029.00 80254.00C175039.67 80254.00 175050.33 80254.00 175061.00 80254.00C175071.67 80286.33 175082.33 80318.67 175093.00 80351.00C175082.22 80362.23 175070.43 80372.67 175060.29 80384.41C175049.86 80405.27 175039.43 80426.14 175029.00 80447.00C175029.00 80468.33 175029.00 80489.67 175029.00 80511.00C175050.33 80543.34 175071.67 80575.66 175093.00 80608.00C175093.00 80640.00 175093.00 80672.00 175093.00 80704.00C175114.67 80714.67 175136.33 80725.33 175158.00 80736.00C175158.00 80747.00 175158.00 80758.00 175158.00 80769.00C175168.67 80758.00 175179.33 80747.00 175190.00 80736.00C175200.67 80736.00 175211.33 80736.00 175222.00 80736.00C175222.00 80757.67 175222.00 80779.33 175222.00 80801.00C175254.33 80811.67 175286.67 80822.33 175319.00 80833.00C175319.00 80843.67 175319.00 80854.33 175319.00 80865.00C175308.00 80886.33 175297.00 80907.67 175286.00 80929.00C175297.11 80940.56 175309.24 80951.33 175319.71 80963.41C175330.14 80984.27 175340.57 81005.14 175351.00 81026.00C175393.67 81047.33 175436.33 81068.67 175479.00 81090.00C175489.67 81111.33 175500.33 81132.67 175511.00 81154.00C175522.00 81165.00 175533.00 81176.00 175544.00 81187.00C175554.67 81187.00 175565.33 81187.00 175576.00 81187.00C175576.00 81165.33 175576.00 81143.67 175576.00 81122.00C175597.33 81132.67 175618.67 81143.33 175640.00 81154.00C175650.67 81165.00 175661.33 81176.00 175672.00 81187.00C175672.00 81197.67 175672.00 81208.33 175672.00 81219.00C175682.67 81240.33 175693.33 81261.67 175704.00 81283.00C175693.33 81283.00 175682.67 81283.00 175672.00 81283.00C175672.00 81293.67 175672.00 81304.33 175672.00 81315.00C175682.67 81325.66 175693.33 81336.34 175704.00 81347.00C175715.00 81347.00 175726.00 81347.00 175737.00 81347.00C175737.00 81357.67 175737.00 81368.33 175737.00 81379.00C175747.67 81379.00 175758.33 81379.00 175769.00 81379.00C175769.00 81390.00 175769.00 81401.00 175769.00 81412.00C175779.67 81412.00 175790.33 81412.00 175801.00 81412.00C175800.90 81433.48 175801.20 81454.96 175800.85 81476.44C175790.25 81508.30 175779.62 81540.15 175769.00 81572.00C175758.33 81572.00 175747.67 81572.00 175737.00 81572.00C175737.00 81583.00 175737.00 81594.00 175737.00 81605.00C175747.67 81626.33 175758.33 81647.67 175769.00 81669.00C175790.33 81679.67 175811.67 81690.33 175833.00 81701.00C175843.67 81701.00 175854.33 81701.00 175865.00 81701.00C175865.00 81711.67 175865.00 81722.33 175865.00 81733.00C175854.33 81754.66 175843.67 81776.34 175833.00 81798.00C175843.67 81808.66 175854.33 81819.34 175865.00 81830.00C175854.33 81840.66 175843.67 81851.34 175833.00 81862.00C175854.33 81872.67 175875.67 81883.33 175897.00 81894.00C175918.67 81915.33 175940.33 81936.67 175962.00 81958.00C175983.33 81968.67 176004.67 81979.33 176026.00 81990.00C176036.67 81979.34 176047.33 81968.66 176058.00 81958.00C176090.33 81990.34 176122.67 82022.66 176155.00 82055.00C176165.67 82044.34 176176.33 82033.66 176187.00 82023.00C176208.33 82033.67 176229.67 82044.33 176251.00 82055.00C176272.33 82055.00 176293.67 82055.00 176315.00 82055.00C176304.33 82065.66 176293.67 82076.34 176283.00 82087.00C176283.00 82119.00 176283.00 82151.00 176283.00 82183.00C176272.33 82193.66 176261.67 82204.34 176251.00 82215.00C176240.33 82215.00 176229.67 82215.00 176219.00 82215.00C176229.67 82236.66 176240.33 82258.34 176251.00 82280.00C176240.33 82280.00 176229.67 82280.00 176219.00 82280.00C176219.00 82290.67 176219.00 82301.33 176219.00 82312.00C176229.67 82312.00 176240.33 82312.00 176251.00 82312.00C176251.00 82322.67 176251.00 82333.33 176251.00 82344.00C176240.33 82354.66 176229.67 82365.34 176219.00 82376.00C176229.67 82386.66 176240.33 82397.34 176251.00 82408.00C176240.33 82419.00 176229.67 82430.00 176219.00 82441.00C176219.00 82451.67 176219.00 82462.33 176219.00 82473.00C176197.67 82483.67 176176.33 82494.33 176155.00 82505.00C176155.00 82526.33 176155.00 82547.67 176155.00 82569.00C176176.33 82601.34 176197.67 82633.66 176219.00 82666.00C176208.33 82666.00 176197.67 82666.00 176187.00 82666.00C176187.00 82676.67 176187.00 82687.33 176187.00 82698.00C176208.33 82708.67 176229.67 82719.33 176251.00 82730.00C176229.67 82730.00 176208.33 82730.00 176187.00 82730.00C176187.00 82740.67 176187.00 82751.33 176187.00 82762.00C176197.67 82772.66 176208.33 82783.34 176219.00 82794.00C176229.67 82783.34 176240.33 82772.66 176251.00 82762.00C176251.10 82772.81 176250.80 82783.63 176251.15 82794.44C176261.75 82826.63 176272.38 82858.81 176283.00 82891.00C176293.67 82901.66 176304.33 82912.34 176315.00 82923.00C176315.00 82933.67 176315.00 82944.33 176315.00 82955.00C176304.33 82965.66 176293.67 82976.34 176283.00 82987.00C176283.00 82997.67 176283.00 83008.33 176283.00 83019.00C176304.33 83019.00 176325.67 83019.00 176347.00 83019.00C176347.00 83040.67 176347.00 83062.33 176347.00 83084.00C176358.00 83073.00 176369.00 83062.00 176380.00 83051.00C176390.67 83051.00 176401.33 83051.00 176412.00 83051.00C176412.00 83062.00 176412.00 83073.00 176412.00 83084.00C176401.33 83084.00 176390.67 83084.00 176380.00 83084.00C176401.33 83105.34 176422.67 83126.66 176444.00 83148.00C176444.00 83158.67 176444.00 83169.33 176444.00 83180.00C176454.67 83180.00 176465.33 83180.00 176476.00 83180.00C176476.00 83158.67 176476.00 83137.33 176476.00 83116.00C176486.67 83116.00 176497.33 83116.00 176508.00 83116.00C176508.00 83105.33 176508.00 83094.67 176508.00 83084.00C176529.67 83084.00 176551.33 83084.00 176573.00 83084.00C176583.67 83094.66 176594.33 83105.34 176605.00 83116.00C176615.67 83116.00 176626.33 83116.00 176637.00 83116.00C176637.00 83148.00 176637.00 83180.00 176637.00 83212.00C176647.67 83222.66 176658.33 83233.34 176669.00 83244.00C176679.67 83233.34 176690.33 83222.66 176701.00 83212.00C176701.00 83222.67 176701.00 83233.33 176701.00 83244.00C176711.67 83222.67 176722.33 83201.33 176733.00 83180.00C176743.67 83180.00 176754.33 83180.00 176765.00 83180.00C176786.67 83190.67 176808.33 83201.33 176830.00 83212.00C176797.67 83212.00 176765.33 83212.00 176733.00 83212.00C176754.67 83222.67 176776.33 83233.33 176798.00 83244.00C176798.00 83255.00 176798.00 83266.00 176798.00 83277.00C176830.00 83266.00 176862.00 83255.00 176894.00 83244.00C176894.00 83265.67 176894.00 83287.33 176894.00 83309.00C176872.67 83309.00 176851.33 83309.00 176830.00 83309.00C176830.00 83330.33 176830.00 83351.67 176830.00 83373.00C176840.67 83383.66 176851.33 83394.34 176862.00 83405.00C176872.67 83405.00 176883.33 83405.00 176894.00 83405.00C176904.67 83426.33 176915.33 83447.67 176926.00 83469.00C176936.67 83469.00 176947.33 83469.00 176958.00 83469.00C176979.67 83480.00 177001.33 83491.00 177023.00 83502.00C177033.67 83502.00 177044.33 83502.00 177055.00 83502.00C177065.67 83512.66 177076.33 83523.34 177087.00 83534.00C177076.33 83544.66 177065.67 83555.34 177055.00 83566.00C177055.00 83587.33 177055.00 83608.67 177055.00 83630.00C177076.33 83640.67 177097.67 83651.33 177119.00 83662.00C177129.67 83651.34 177140.33 83640.66 177151.00 83630.00C177161.67 83640.66 177172.33 83651.34 177183.00 83662.00C177204.67 83662.00 177226.33 83662.00 177248.00 83662.00C177258.67 83673.00 177269.33 83684.00 177280.00 83695.00C177290.67 83684.00 177301.33 83673.00 177312.00 83662.00C177333.33 83683.67 177354.67 83705.33 177376.00 83727.00C177408.33 83727.00 177440.67 83727.00 177473.00 83727.00C177473.00 83748.33 177473.00 83769.67 177473.00 83791.00C177494.33 83791.00 177515.67 83791.00 177537.00 83791.00C177558.33 83780.33 177579.67 83769.67 177601.00 83759.00C177612.00 83759.00 177623.00 83759.00 177634.00 83759.00C177623.00 83791.00 177612.00 83823.00 177601.00 83855.00C177622.67 83855.00 177644.33 83855.00 177666.00 83855.00C177687.33 83865.67 177708.67 83876.33 177730.00 83887.00C177730.00 83865.67 177730.00 83844.33 177730.00 83823.00C177751.33 83801.66 177772.67 83780.34 177794.00 83759.00C177783.33 83737.67 177772.67 83716.33 177762.00 83695.00C177783.33 83695.00 177804.67 83695.00 177826.00 83695.00C177826.00 83673.33 177826.00 83651.67 177826.00 83630.00C177837.00 83640.67 177848.00 83651.33 177859.00 83662.00C177869.67 83651.34 177880.33 83640.66 177891.00 83630.00C177901.67 83630.00 177912.33 83630.00 177923.00 83630.00C177933.67 83651.66 177944.33 83673.34 177955.00 83695.00C177965.67 83705.66 177976.33 83716.34 177987.00 83727.00C178008.67 83727.00 178030.33 83727.00 178052.00 83727.00C178073.33 83716.33 178094.67 83705.67 178116.00 83695.00C178137.33 83695.00 178158.67 83695.00 178180.00 83695.00C178169.33 83716.33 178158.67 83737.67 178148.00 83759.00C178158.67 83769.66 178169.33 83780.34 178180.00 83791.00C178190.67 83791.00 178201.33 83791.00 178212.00 83791.00C178201.33 83780.34 178190.67 83769.66 178180.00 83759.00C178201.33 83759.00 178222.67 83759.00 178244.00 83759.00C178255.00 83769.67 178266.00 83780.33 178277.00 83791.00C178341.33 83791.00 178405.67 83791.00 178470.00 83791.00C178470.00 83769.67 178470.00 83748.33 178470.00 83727.00C178491.33 83705.33 178512.67 83683.67 178534.00 83662.00C178609.00 83662.00 178684.00 83662.00 178759.00 83662.00C178780.74 83650.91 178802.89 83640.50 178824.38 83628.97C178867.01 83597.18 178909.76 83565.55 178952.33 83533.67C179005.30 83480.11 179058.17 83426.45 179111.96 83373.71C179122.97 83362.80 179133.99 83351.90 179145.00 83341.00C179155.67 83341.00 179166.33 83341.00 179177.00 83341.00C179187.67 83319.67 179198.33 83298.33 179209.00 83277.00C179241.33 83277.00 179273.67 83277.00 179306.00 83277.00C179295.00 83277.00 179284.00 83277.00 179273.00 83277.00C179284.00 83287.67 179295.00 83298.33 179306.00 83309.00C179294.85 83330.42 179284.03 83352.02 179272.67 83373.33C179208.45 83437.55 179144.22 83501.77 179080.00 83566.00C179037.29 83630.49 178994.43 83694.87 178951.80 83759.42C178833.59 84006.02 178715.63 84252.76 178597.27 84499.28C178554.81 84574.01 178512.21 84648.66 178469.82 84723.43C178394.04 84906.59 178318.63 85089.91 178242.61 85272.97C178157.40 85454.32 178072.21 85635.66 177987.00 85817.00C177976.33 85870.33 177965.67 85923.67 177955.00 85977.00C177911.32 86042.61 177867.15 86107.90 177823.78 86173.71C177791.46 86227.61 177759.68 86281.84 177727.01 86335.53C177706.67 86366.35 177686.34 86397.18 177666.00 86428.00C177655.01 86460.45 177644.64 86493.14 177633.26 86525.44C177617.85 86554.60 177603.96 86584.63 177586.30 86612.55C177494.77 86765.49 177403.33 86918.48 177311.72 87071.37C177264.01 87135.16 177215.74 87198.55 177169.21 87263.22C177098.06 87360.96 177026.63 87458.49 176955.73 87556.41C176892.15 87651.60 176828.58 87746.80 176765.00 87842.00C176754.33 87852.66 176743.67 87863.34 176733.00 87874.00C176733.00 87885.00 176733.00 87896.00 176733.00 87907.00C176722.33 87928.33 176711.67 87949.67 176701.00 87971.00C176690.33 87971.00 176679.67 87971.00 176669.00 87971.00C176636.89 88024.78 176604.92 88078.64 176572.71 88132.36C176529.74 88185.71 176486.66 88238.99 176443.74 88292.39C176422.26 88325.23 176400.25 88357.75 176379.09 88390.80C176336.22 88475.56 176293.78 88560.56 176251.16 88645.45C176224.17 88691.34 176196.68 88736.94 176169.48 88782.71C176164.66 88790.81 176159.83 88798.90 176155.00 88807.00C176133.33 88817.67 176111.67 88828.33 176090.00 88839.00C176047.08 88881.75 176004.39 88924.73 175962.00 88968.00C175962.00 89010.67 175962.00 89053.33 175962.00 89096.00C175940.33 89096.00 175918.67 89096.00 175897.00 89096.00C175886.33 89117.66 175875.67 89139.34 175865.00 89161.00C175843.67 89171.67 175822.33 89182.33 175801.00 89193.00C175779.53 89225.09 175758.27 89257.32 175736.67 89289.33C175683.04 89343.03 175629.27 89396.59 175575.73 89450.38C175500.82 89557.25 175425.91 89664.13 175351.00 89771.00C175318.67 89792.67 175286.33 89814.33 175254.00 89836.00C175221.58 89878.98 175189.61 89922.33 175156.91 89965.09C175124.88 89997.21 175092.67 90029.16 175060.74 90061.39C175017.94 90125.44 174975.33 90189.63 174933.00 90254.00C174911.33 90254.00 174889.67 90254.00 174868.00 90254.00C174836.00 90286.00 174804.00 90318.00 174772.00 90350.00C174740.00 90403.67 174708.00 90457.33 174676.00 90511.00C174633.00 90554.00 174590.00 90597.00 174547.00 90640.00C174493.33 90640.00 174439.67 90640.00 174386.00 90640.00C174362.94 90651.82 174339.38 90662.70 174316.67 90675.18C174264.78 90706.12 174212.89 90737.06 174161.00 90768.00C174118.00 90811.00 174075.00 90854.00 174032.00 90897.00C174000.00 90907.67 173968.00 90918.33 173936.00 90929.00C173914.67 90929.00 173893.33 90929.00 173872.00 90929.00C173850.33 90918.33 173828.67 90907.67 173807.00 90897.00C173807.00 90907.67 173807.00 90918.33 173807.00 90929.00C173752.61 90918.24 173698.31 90907.02 173643.87 90896.56C173569.58 90886.04 173495.29 90875.52 173421.00 90865.00C173453.37 90789.85 173485.84 90714.74 173518.15 90639.56C173528.75 90607.37 173539.38 90575.19 173550.00 90543.00C173539.33 90521.67 173528.67 90500.33 173518.00 90479.00C173432.33 90500.33 173346.67 90521.67 173261.00 90543.00C173282.33 90586.00 173303.67 90629.00 173325.00 90672.00C173303.67 90704.00 173282.33 90736.00 173261.00 90768.00C173261.00 90778.67 173261.00 90789.33 173261.00 90800.00C173250.33 90800.00 173239.67 90800.00 173229.00 90800.00C173207.20 90832.43 173185.60 90864.99 173163.67 90897.33C173152.72 90908.73 173140.78 90919.28 173130.49 90931.26C173109.53 90962.61 173088.75 90994.07 173067.68 91025.33C173057.11 91036.22 173046.56 91047.11 173036.00 91058.00C173025.33 91058.00 173014.67 91058.00 173004.00 91058.00C172961.00 91090.00 172918.00 91122.00 172875.00 91154.00C172853.67 91154.00 172832.33 91154.00 172811.00 91154.00C172789.33 91175.33 172767.67 91196.67 172746.00 91218.00C172735.33 91239.66 172724.67 91261.34 172714.00 91283.00C172703.33 91293.66 172692.67 91304.34 172682.00 91315.00C172671.33 91315.00 172660.67 91315.00 172650.00 91315.00C172638.93 91326.51 172626.90 91337.19 172616.47 91349.26C172595.32 91380.50 172574.16 91411.75 172553.00 91443.00C172553.00 91454.00 172553.00 91465.00 172553.00 91476.00C172520.56 91486.97 172487.90 91497.39 172455.60 91508.70C172434.73 91519.14 172413.87 91529.57 172393.00 91540.00C172403.67 91540.00 172414.33 91540.00 172425.00 91540.00C172340.42 91581.19 172256.66 91624.02 172172.74 91666.54C172149.60 91678.23 172126.26 91689.53 172103.00 91701.00C172092.33 91722.33 172081.67 91743.67 172071.00 91765.00C172039.00 91775.67 172007.00 91786.33 171975.00 91797.00C171942.67 91818.34 171910.33 91839.66 171878.00 91861.00C171878.00 91872.00 171878.00 91883.00 171878.00 91894.00C171856.67 91894.00 171835.33 91894.00 171814.00 91894.00C171792.33 91904.67 171770.67 91915.33 171749.00 91926.00C171727.67 91958.00 171706.33 91990.00 171685.00 92022.00C171663.67 92097.00 171642.33 92172.00 171621.00 92247.00C171620.86 92262.97 171621.82 92279.03 171619.03 92294.85C171609.03 92375.57 171599.01 92456.28 171589.00 92537.00C171599.67 92579.67 171610.33 92622.33 171621.00 92665.00C171642.47 92697.42 171663.73 92729.99 171685.33 92762.33C171695.89 92772.88 171706.44 92783.44 171717.00 92794.00C171760.00 92761.67 171803.00 92729.33 171846.00 92697.00C171856.79 92708.56 171868.54 92719.37 171878.71 92731.41C171889.14 92752.27 171899.57 92773.14 171910.00 92794.00C171899.33 92804.66 171888.67 92815.34 171878.00 92826.00C171888.67 92826.00 171899.33 92826.00 171910.00 92826.00C171910.00 92869.00 171910.00 92912.00 171910.00 92955.00C171920.79 92966.23 171932.56 92976.68 171942.72 92988.40C171953.49 93009.27 171964.24 93030.13 171975.00 93051.00C171964.00 93061.67 171953.00 93072.33 171942.00 93083.00C171953.00 93093.67 171964.00 93104.33 171975.00 93115.00C171953.33 93147.33 171931.67 93179.67 171910.00 93212.00C171888.67 93201.33 171867.33 93190.67 171846.00 93180.00C171846.00 93201.33 171846.00 93222.67 171846.00 93244.00C171867.33 93244.00 171888.67 93244.00 171910.00 93244.00C171899.33 93254.66 171888.67 93265.34 171878.00 93276.00C171878.00 93286.67 171878.00 93297.33 171878.00 93308.00C171846.00 93329.67 171814.00 93351.33 171782.00 93373.00C171781.94 93394.49 171782.12 93415.97 171781.91 93437.45C171770.97 93491.13 171759.78 93544.76 171749.00 93598.46C171749.00 93619.64 171749.00 93640.82 171749.00 93662.00C171760.00 93672.67 171771.00 93683.33 171782.00 93694.00C171803.33 93694.00 171824.67 93694.00 171846.00 93694.00C171846.00 93715.33 171846.00 93736.67 171846.00 93758.00C171867.33 93769.00 171888.67 93780.00 171910.00 93791.00C171899.33 93801.66 171888.67 93812.34 171878.00 93823.00C171878.00 93855.00 171878.00 93887.00 171878.00 93919.00C171899.33 93919.00 171920.67 93919.00 171942.00 93919.00C171953.00 93908.33 171964.00 93897.67 171975.00 93887.00C171975.00 93930.00 171975.00 93973.00 171975.00 94016.00C171963.85 94037.42 171953.03 94059.02 171941.67 94080.33C171909.78 94112.55 171877.89 94144.78 171846.00 94177.00C171846.00 94166.00 171846.00 94155.00 171846.00 94144.00C171835.33 94122.67 171824.67 94101.33 171814.00 94080.00C171792.33 94080.00 171770.67 94080.00 171749.00 94080.00C171727.67 94101.34 171706.33 94122.66 171685.00 94144.00C171653.00 94144.00 171621.00 94144.00 171589.00 94144.00C171599.67 94155.00 171610.33 94166.00 171621.00 94177.00C171621.00 94198.33 171621.00 94219.67 171621.00 94241.00C171578.24 94283.91 171535.01 94326.34 171492.00 94369.00C171481.33 94412.00 171470.67 94455.00 171460.00 94498.00C171460.00 94562.33 171460.00 94626.67 171460.00 94691.00C171481.33 94755.33 171502.67 94819.67 171524.00 94884.00C171546.64 94917.83 171570.03 94951.18 171592.18 94985.33C171623.11 95037.22 171654.06 95089.11 171685.00 95141.00C171685.00 95151.67 171685.00 95162.33 171685.00 95173.00C171706.33 95183.67 171727.67 95194.33 171749.00 95205.00C171760.00 95237.33 171771.00 95269.67 171782.00 95302.00C171782.00 95355.67 171782.00 95409.33 171782.00 95463.00C171760.33 95559.33 171738.67 95655.67 171717.00 95752.00C171716.78 95773.90 171717.44 95795.86 171716.66 95817.71C171706.05 95870.95 171695.57 95924.22 171684.85 95977.44C171674.25 96009.63 171663.62 96041.81 171653.00 96074.00C171652.90 96095.48 171653.20 96116.96 171652.85 96138.44C171620.90 96234.79 171588.78 96331.08 171556.91 96427.45C171545.87 96481.11 171534.98 96534.80 171523.85 96588.44C171513.25 96620.30 171502.62 96652.15 171492.00 96684.00C171491.95 96727.15 171492.10 96770.30 171491.92 96813.46C171481.28 96877.64 171470.64 96941.82 171460.00 97006.00C171470.67 97038.00 171481.33 97070.00 171492.00 97102.00C171492.00 97091.33 171492.00 97080.67 171492.00 97070.00C171502.67 97080.66 171513.33 97091.34 171524.00 97102.00C171524.00 97145.00 171524.00 97188.00 171524.00 97231.00C171513.33 97241.66 171502.67 97252.34 171492.00 97263.00C171492.00 97273.67 171492.00 97284.33 171492.00 97295.00C171470.67 97338.00 171449.33 97381.00 171428.00 97424.00C171428.00 97467.00 171428.00 97510.00 171428.00 97553.00C171406.67 97638.83 171385.19 97724.62 171363.94 97810.46C171353.30 97895.97 171342.65 97981.49 171332.00 98067.00C171310.33 98110.00 171288.67 98153.00 171267.00 98196.00C171267.00 98249.33 171267.00 98302.67 171267.00 98356.00C171256.23 98399.13 171245.73 98442.33 171234.79 98485.41C171224.19 98506.78 171213.31 98528.00 171202.91 98549.46C171181.61 98656.64 171160.30 98763.82 171139.00 98871.00C171139.00 99053.33 171139.00 99235.67 171139.00 99418.00C171160.33 99460.67 171181.67 99503.33 171203.00 99546.00C171224.33 99556.67 171245.67 99567.33 171267.00 99578.00C171277.67 99578.00 171288.33 99578.00 171299.00 99578.00C171310.00 99556.67 171321.00 99535.33 171332.00 99514.00C171332.00 99535.33 171332.00 99556.67 171332.00 99578.00C171321.00 99578.00 171310.00 99578.00 171299.00 99578.00C171299.00 99610.33 171299.00 99642.67 171299.00 99675.00C171288.33 99685.66 171277.67 99696.34 171267.00 99707.00C171277.67 99707.00 171288.33 99707.00 171299.00 99707.00C171299.00 99696.33 171299.00 99685.67 171299.00 99675.00C171310.00 99675.00 171321.00 99675.00 171332.00 99675.00C171332.00 99803.67 171332.00 99932.33 171332.00 100061.00C171342.74 100125.14 171353.29 100189.32 171364.15 100253.44C171374.75 100285.63 171385.38 100317.81 171396.00 100350.00C171396.10 100371.48 171395.80 100392.96 171396.15 100414.44C171417.42 100478.63 171438.72 100542.81 171460.00 100607.00C171460.00 101025.00 171460.00 101443.00 171460.00 101861.00C171470.67 101925.33 171481.33 101989.67 171492.00 102054.00C171481.33 102064.67 171470.67 102075.33 171460.00 102086.00C171470.67 102096.67 171481.33 102107.33 171492.00 102118.00C171513.72 102257.48 171535.31 102396.98 171557.12 102536.45C171589.08 102654.30 171621.04 102772.15 171653.00 102890.00C171653.00 102900.67 171653.00 102911.33 171653.00 102922.00C171663.67 102932.67 171674.33 102943.33 171685.00 102954.00C171695.65 103040.16 171706.45 103126.29 171717.00 103212.46C171717.03 103319.46 171716.94 103426.46 171717.05 103533.46C171727.70 103640.64 171738.35 103747.82 171749.00 103855.00C171770.67 103940.67 171792.33 104026.33 171814.00 104112.00C171824.67 104112.00 171835.33 104112.00 171846.00 104112.00C171867.33 104187.00 171888.67 104262.00 171910.00 104337.00C171910.00 104347.67 171910.00 104358.33 171910.00 104369.00C171920.79 104380.23 171932.58 104390.67 171942.71 104402.41C171985.48 104487.61 172028.24 104572.80 172071.00 104658.00C172081.67 104669.00 172092.33 104680.00 172103.00 104691.00C172103.00 104701.67 172103.00 104712.33 172103.00 104723.00C172092.33 104733.67 172081.67 104744.33 172071.00 104755.00C172071.00 104765.67 172071.00 104776.33 172071.00 104787.00C172092.33 104797.67 172113.67 104808.33 172135.00 104819.00C172135.00 104829.67 172135.00 104840.33 172135.00 104851.00C172124.21 104862.57 172112.44 104873.37 172102.28 104885.43C172090.45 104908.43 172079.72 104932.01 172067.08 104954.57C172036.39 105006.05 172005.69 105057.52 171975.00 105109.00C171932.00 105259.00 171889.00 105409.00 171846.00 105559.00C171813.63 105634.15 171781.16 105709.26 171748.85 105784.44C171727.58 105848.63 171706.28 105912.81 171685.00 105977.00C171674.33 105987.67 171663.67 105998.33 171653.00 106009.00C171653.00 106073.33 171653.00 106137.67 171653.00 106202.00C171663.67 106234.00 171674.33 106266.00 171685.00 106298.00C171674.33 106308.67 171663.67 106319.33 171653.00 106330.00C171642.33 106362.33 171631.67 106394.67 171621.00 106427.00C171610.33 106437.67 171599.67 106448.33 171589.00 106459.00C171578.33 106491.00 171567.67 106523.00 171557.00 106555.00C171535.33 106566.00 171513.67 106577.00 171492.00 106588.00C171460.00 106630.67 171428.00 106673.33 171396.00 106716.00C171396.00 106726.67 171396.00 106737.33 171396.00 106748.00C171385.33 106748.00 171374.67 106748.00 171364.00 106748.00C171353.33 106791.00 171342.67 106834.00 171332.00 106877.00C171332.00 106887.67 171332.00 106898.33 171332.00 106909.00C171353.33 106877.00 171374.67 106845.00 171396.00 106813.00C171374.67 106866.67 171353.33 106920.33 171332.00 106974.00C171342.67 107016.67 171353.33 107059.33 171364.00 107102.00C171374.67 107112.67 171385.33 107123.33 171396.00 107134.00C171406.67 107134.00 171417.33 107134.00 171428.00 107134.00C171428.00 107144.67 171428.00 107155.33 171428.00 107166.00C171417.33 107187.67 171406.67 107209.33 171396.00 107231.00C171396.00 107273.67 171396.00 107316.33 171396.00 107359.00C171374.67 107369.67 171353.33 107380.33 171332.00 107391.00C171310.28 107412.82 171288.35 107434.44 171266.76 107456.40C171234.84 107509.93 171202.92 107563.47 171171.00 107617.00C171171.00 107649.00 171171.00 107681.00 171171.00 107713.00C171160.33 107723.67 171149.67 107734.33 171139.00 107745.00C171139.00 107755.67 171139.00 107766.33 171139.00 107777.00C171149.67 107766.33 171160.33 107755.67 171171.00 107745.00C171171.00 107777.33 171171.00 107809.67 171171.00 107842.00C171160.33 107852.67 171149.67 107863.33 171139.00 107874.00C171139.00 107895.33 171139.00 107916.67 171139.00 107938.00C171106.67 108002.33 171074.33 108066.67 171042.00 108131.00C171041.94 108174.15 171042.12 108217.30 171041.91 108260.45C171031.30 108313.79 171020.45 108367.09 171010.00 108420.46C171010.00 108473.97 171010.00 108527.49 171010.00 108581.00C170999.33 108613.33 170988.67 108645.67 170978.00 108678.00C170988.67 108688.67 170999.33 108699.33 171010.00 108710.00C170988.67 108731.33 170967.33 108752.67 170946.00 108774.00C170946.00 108849.00 170946.00 108924.00 170946.00 108999.00C170935.33 108999.00 170924.67 108999.00 170914.00 108999.00C170902.97 109009.84 170891.64 109020.39 170880.80 109031.42C170870.20 109052.95 170859.60 109074.47 170849.00 109096.00C170849.00 109117.33 170849.00 109138.67 170849.00 109160.00C170838.33 109170.67 170827.67 109181.33 170817.00 109192.00C170806.33 109192.00 170795.67 109192.00 170785.00 109192.00C170784.65 109207.13 170786.25 109222.45 170782.79 109237.35C170772.86 109297.23 170762.93 109357.12 170753.00 109417.00C170763.67 109524.33 170774.33 109631.67 170785.00 109739.00C170806.47 109771.09 170827.73 109803.32 170849.33 109835.33C170870.89 109856.55 170892.44 109877.78 170914.00 109899.00C170892.33 109910.00 170870.67 109921.00 170849.00 109932.00C170806.33 109996.33 170763.67 110060.67 170721.00 110125.00C170721.00 110189.00 170721.00 110253.00 170721.00 110317.00C170688.67 110370.67 170656.33 110424.33 170624.00 110478.00C170624.00 110542.33 170624.00 110606.67 170624.00 110671.00C170634.67 110681.67 170645.33 110692.33 170656.00 110703.00C170645.30 110713.84 170634.31 110724.40 170623.80 110735.42C170613.20 110756.95 170602.60 110778.47 170592.00 110800.00C170592.00 110842.67 170592.00 110885.33 170592.00 110928.00C170581.33 110949.67 170570.67 110971.33 170560.00 110993.00C170538.67 111003.67 170517.33 111014.33 170496.00 111025.00C170484.99 111046.86 170473.12 111068.37 170462.64 111090.45C170452.09 111132.97 170441.55 111175.48 170431.00 111218.00C170431.00 111357.33 170431.00 111496.67 170431.00 111636.00C170420.33 111689.67 170409.67 111743.33 170399.00 111797.00C170409.65 111882.82 170420.45 111968.63 170431.00 112054.46C170431.04 112086.46 170430.91 112118.46 170431.07 112150.46C170441.78 112225.45 170452.31 112300.47 170463.13 112375.45C170484.76 112450.30 170506.38 112525.15 170528.00 112600.00C170528.04 112707.49 170527.91 112814.97 170528.07 112922.46C170538.72 112997.31 170549.36 113072.15 170560.00 113147.00C170549.33 113157.67 170538.67 113168.33 170528.00 113179.00C170528.25 113201.13 170527.49 113223.32 170528.40 113245.41C170538.93 113308.94 170549.46 113372.47 170560.00 113436.00C170635.00 113543.33 170710.00 113650.67 170785.00 113758.00C170795.67 113758.00 170806.33 113758.00 170817.00 113758.00C170800.67 113774.24 170784.85 113791.05 170766.89 113805.53C170697.93 113864.69 170628.96 113923.84 170560.00 113983.00C170570.67 114015.00 170581.33 114047.00 170592.00 114079.00C170560.00 114100.67 170528.00 114122.33 170496.00 114144.00C170484.84 114165.42 170474.03 114187.02 170462.67 114208.33C170377.11 114293.89 170291.56 114379.44 170206.00 114465.00C170195.33 114486.67 170184.67 114508.33 170174.00 114530.00C170174.00 114551.33 170174.00 114572.67 170174.00 114594.00C170184.67 114604.67 170195.33 114615.33 170206.00 114626.00C170194.77 114636.79 170184.33 114648.58 170172.59 114658.71C170087.39 114701.47 170002.20 114744.24 169917.00 114787.00C169895.33 114787.00 169873.67 114787.00 169852.00 114787.00C169841.33 114776.33 169830.67 114765.67 169820.00 114755.00C169798.67 114765.67 169777.33 114776.33 169756.00 114787.00C169734.67 114808.33 169713.33 114829.67 169692.00 114851.00C169681.19 114851.10 169670.37 114850.80 169659.56 114851.15C169626.98 114862.10 169594.11 114872.32 169561.72 114883.73C169487.15 114926.49 169412.58 114969.25 169338.00 115012.00C169294.93 115054.81 169251.72 115097.48 169208.72 115140.37C169176.62 115183.71 169144.13 115226.78 169112.27 115270.28C169069.24 115345.48 169025.94 115420.53 168983.09 115495.83C168940.73 115580.89 168898.36 115665.94 168856.00 115751.00C168845.33 115740.33 168834.67 115729.67 168824.00 115719.00C168791.67 115719.00 168759.33 115719.00 168727.00 115719.00C168727.00 115708.33 168727.00 115697.67 168727.00 115687.00C168716.33 115687.00 168705.67 115687.00 168695.00 115687.00C168705.67 115708.33 168716.33 115729.67 168727.00 115751.00C168748.33 115740.33 168769.67 115729.67 168791.00 115719.00C168780.33 115729.67 168769.67 115740.33 168759.00 115751.00C168769.67 115772.67 168780.33 115794.33 168791.00 115816.00C168802.00 115805.00 168813.00 115794.00 168824.00 115783.00C168770.28 115858.48 168716.43 115933.87 168662.78 116009.41C168587.85 116148.61 168512.93 116287.80 168438.00 116427.00C168438.00 116448.33 168438.00 116469.67 168438.00 116491.00C168405.67 116555.33 168373.33 116619.67 168341.00 116684.00C168340.59 116695.62 168341.86 116707.39 168340.28 116718.90C168329.85 116760.93 168319.42 116802.97 168309.00 116845.00C168319.67 116855.67 168330.33 116866.33 168341.00 116877.00C168319.67 116919.67 168298.33 116962.33 168277.00 117005.00C168277.00 116973.00 168277.00 116941.00 168277.00 116909.00C168265.77 116898.21 168255.33 116886.42 168243.58 116876.28C168222.34 116865.57 168200.95 116855.18 168179.83 116844.25C167826.22 116619.17 167472.61 116394.08 167119.00 116169.00C167106.87 116157.42 167095.82 116144.62 167082.89 116133.92C167040.44 116102.29 166998.40 116070.11 166955.69 116038.85C166771.64 115919.87 166587.82 115800.53 166403.63 115681.78C166149.09 115522.85 165894.54 115363.93 165640.00 115205.00C165640.00 115162.00 165640.00 115119.00 165640.00 115076.00C165617.96 115064.74 165595.50 115054.24 165573.74 115042.49C165542.40 115021.53 165510.93 115000.77 165479.68 114979.67C165469.12 114968.78 165458.56 114957.89 165448.00 114947.00C165448.00 114936.33 165448.00 114925.67 165448.00 114915.00C165533.67 114872.33 165619.33 114829.67 165705.00 114787.00C165758.33 114712.00 165811.67 114637.00 165865.00 114562.00C165865.00 114551.33 165865.00 114540.67 165865.00 114530.00C165854.33 114508.33 165843.67 114486.67 165833.00 114465.00C165811.67 114454.33 165790.33 114443.67 165769.00 114433.00C165758.33 114443.67 165747.67 114454.33 165737.00 114465.00C165747.67 114443.67 165758.33 114422.33 165769.00 114401.00C165758.33 114379.67 165747.67 114358.33 165737.00 114337.00C165715.67 114315.33 165694.33 114293.67 165673.00 114272.00C165683.67 114250.67 165694.33 114229.33 165705.00 114208.00C165694.33 114186.67 165683.67 114165.33 165673.00 114144.00C165683.67 114122.33 165694.33 114100.67 165705.00 114079.00C165683.33 114047.00 165661.67 114015.00 165640.00 113983.00C165608.00 113983.00 165576.00 113983.00 165544.00 113983.00C165533.33 113961.67 165522.67 113940.33 165512.00 113919.00C165479.67 113929.67 165447.33 113940.33 165415.00 113951.00C165404.33 113940.33 165393.67 113929.67 165383.00 113919.00C165372.33 113886.67 165361.67 113854.33 165351.00 113822.00C165340.33 113822.00 165329.67 113822.00 165319.00 113822.00C165308.33 113811.33 165297.67 113800.67 165287.00 113790.00C165287.00 113758.00 165287.00 113726.00 165287.00 113694.00C165276.16 113682.97 165265.61 113671.64 165254.58 113660.80C165233.05 113650.20 165211.53 113639.60 165190.00 113629.00C165179.33 113618.33 165168.67 113607.67 165158.00 113597.00C165168.67 113575.67 165179.33 113554.33 165190.00 113533.00C165168.67 113522.33 165147.33 113511.67 165126.00 113501.00C165115.33 113479.33 165104.67 113457.67 165094.00 113436.00C165083.33 113425.33 165072.67 113414.67 165062.00 113404.00C165062.00 113425.33 165062.00 113446.67 165062.00 113468.00C165051.00 113500.33 165040.00 113532.67 165029.00 113565.00C165017.75 113542.96 165007.22 113520.51 164995.50 113498.73C164974.67 113467.15 164953.83 113435.58 164933.00 113404.00C164922.33 113404.00 164911.67 113404.00 164901.00 113404.00C164879.67 113425.33 164858.33 113446.67 164837.00 113468.00C164826.00 113446.67 164815.00 113425.33 164804.00 113404.00C164782.67 113393.33 164761.33 113382.67 164740.00 113372.00C164740.00 113340.00 164740.00 113308.00 164740.00 113276.00C164750.67 113276.00 164761.33 113276.00 164772.00 113276.00C164761.33 113254.33 164750.67 113232.67 164740.00 113211.00C164750.67 113200.33 164761.33 113189.67 164772.00 113179.00C164740.00 113179.00 164708.00 113179.00 164676.00 113179.00C164654.67 113200.33 164633.33 113221.67 164612.00 113243.00C164579.67 113221.67 164547.33 113200.33 164515.00 113179.00C164493.67 113125.33 164472.33 113071.67 164451.00 113018.00C164429.59 112996.40 164407.92 112975.08 164386.00 112954.00C164397.00 112932.67 164408.00 112911.33 164419.00 112890.00C164419.00 112857.67 164419.00 112825.33 164419.00 112793.00C164397.33 112793.00 164375.67 112793.00 164354.00 112793.00C164354.00 112771.67 164354.00 112750.33 164354.00 112729.00C164343.33 112729.00 164332.67 112729.00 164322.00 112729.00C164300.67 112696.67 164279.33 112664.33 164258.00 112632.00C164258.00 112610.67 164258.00 112589.33 164258.00 112568.00C164204.33 112557.33 164150.67 112546.67 164097.00 112536.00C164075.67 112514.67 164054.33 112493.33 164033.00 112472.00C164011.33 112461.33 163989.67 112450.67 163968.00 112440.00C163936.00 112450.67 163904.00 112461.33 163872.00 112472.00C163860.48 112460.93 163849.82 112448.88 163837.73 112438.47C163806.15 112417.32 163774.58 112396.15 163743.00 112375.00C163786.00 112353.67 163829.00 112332.33 163872.00 112311.00C163872.00 112268.00 163872.00 112225.00 163872.00 112182.00C163861.33 112171.33 163850.67 112160.67 163840.00 112150.00C163861.33 112128.67 163882.67 112107.33 163904.00 112086.00C163882.67 112075.33 163861.33 112064.67 163840.00 112054.00C163840.00 112032.33 163840.00 112010.67 163840.00 111989.00C163861.33 111989.00 163882.67 111989.00 163904.00 111989.00C163904.00 111967.67 163904.00 111946.33 163904.00 111925.00C163914.67 111925.00 163925.33 111925.00 163936.00 111925.00C163957.67 111893.00 163979.33 111861.00 164001.00 111829.00C164043.67 111818.33 164086.33 111807.67 164129.00 111797.00C164097.00 111775.33 164065.00 111753.67 164033.00 111732.00C164033.00 111710.67 164033.00 111689.33 164033.00 111668.00C164022.33 111657.33 164011.67 111646.67 164001.00 111636.00C164001.00 111614.33 164001.00 111592.67 164001.00 111571.00C164011.67 111571.00 164022.33 111571.00 164033.00 111571.00C164043.67 111560.33 164054.33 111549.67 164065.00 111539.00C164054.33 111507.00 164043.67 111475.00 164033.00 111443.00C164054.33 111421.67 164075.67 111400.33 164097.00 111379.00C164097.00 111357.33 164097.00 111335.67 164097.00 111314.00C164065.00 111303.33 164033.00 111292.67 164001.00 111282.00C163990.00 111228.33 163979.00 111174.67 163968.00 111121.00C163989.67 111089.00 164011.33 111057.00 164033.00 111025.00C164043.59 110960.18 164054.81 110895.42 164065.00 110830.55C164065.00 110820.37 164065.00 110810.18 164065.00 110800.00C164043.67 110800.00 164022.33 110800.00 164001.00 110800.00C164001.00 110767.67 164001.00 110735.33 164001.00 110703.00C164033.00 110638.67 164065.00 110574.33 164097.00 110510.00C164097.07 110488.52 164096.85 110467.03 164097.11 110445.55C164107.74 110402.70 164118.37 110359.85 164129.00 110317.00C164139.67 110317.00 164150.33 110317.00 164161.00 110317.00C164193.33 110285.00 164225.67 110253.00 164258.00 110221.00C164279.69 110166.75 164300.96 110112.32 164322.91 110058.18C164343.94 110016.12 164364.97 109974.06 164386.00 109932.00C164386.00 109899.67 164386.00 109867.33 164386.00 109835.00C164407.67 109824.33 164429.33 109813.67 164451.00 109803.00C164483.00 109803.00 164515.00 109803.00 164547.00 109803.00C164547.00 109813.67 164547.00 109824.33 164547.00 109835.00C164557.67 109845.67 164568.33 109856.33 164579.00 109867.00C164611.33 109867.00 164643.67 109867.00 164676.00 109867.00C164697.33 109877.67 164718.67 109888.33 164740.00 109899.00C164750.67 109899.00 164761.33 109899.00 164772.00 109899.00C164782.67 109888.33 164793.33 109877.67 164804.00 109867.00C164815.15 109866.90 164826.30 109867.20 164837.44 109866.85C164869.29 109856.24 164901.15 109845.62 164933.00 109835.00C164943.67 109824.33 164954.33 109813.67 164965.00 109803.00C164997.33 109824.33 165029.67 109845.67 165062.00 109867.00C165062.00 109877.67 165062.00 109888.33 165062.00 109899.00C165072.67 109899.00 165083.33 109899.00 165094.00 109899.00C165115.33 109920.67 165136.67 109942.33 165158.00 109964.00C165168.67 109953.33 165179.33 109942.67 165190.00 109932.00C165200.67 109932.00 165211.33 109932.00 165222.00 109932.00C165243.67 109910.33 165265.33 109888.67 165287.00 109867.00C165297.67 109888.67 165308.33 109910.33 165319.00 109932.00C165340.33 109932.00 165361.67 109932.00 165383.00 109932.00C165393.67 109910.33 165404.33 109888.67 165415.00 109867.00C165415.00 109835.00 165415.00 109803.00 165415.00 109771.00C165426.00 109760.33 165437.00 109749.67 165448.00 109739.00C165448.00 109728.33 165448.00 109717.67 165448.00 109707.00C165469.33 109707.00 165490.67 109707.00 165512.00 109707.00C165512.00 109696.00 165512.00 109685.00 165512.00 109674.00C165522.67 109663.33 165533.33 109652.67 165544.00 109642.00C165533.33 109631.33 165522.67 109620.67 165512.00 109610.00C165512.00 109588.67 165512.00 109567.33 165512.00 109546.00C165501.33 109535.33 165490.67 109524.67 165480.00 109514.00C165480.00 109492.33 165480.00 109470.67 165480.00 109449.00C165458.33 109438.33 165436.67 109427.67 165415.00 109417.00C165393.67 109427.67 165372.33 109438.33 165351.00 109449.00C165340.33 109438.33 165329.67 109427.67 165319.00 109417.00C165276.00 109417.00 165233.00 109417.00 165190.00 109417.00C165147.33 109395.67 165104.67 109374.33 165062.00 109353.00C165083.33 109342.33 165104.67 109331.67 165126.00 109321.00C165147.33 109267.33 165168.67 109213.67 165190.00 109160.00C165211.67 109149.33 165233.33 109138.67 165255.00 109128.00C165255.00 109095.67 165255.00 109063.33 165255.00 109031.00C165265.67 109009.67 165276.33 108988.33 165287.00 108967.00C165265.59 108945.40 165243.92 108924.08 165222.00 108903.00C165222.00 108881.33 165222.00 108859.67 165222.00 108838.00C165243.67 108795.33 165265.33 108752.67 165287.00 108710.00C165297.67 108656.33 165308.33 108602.67 165319.00 108549.00C165329.67 108527.67 165340.33 108506.33 165351.00 108485.00C165351.00 108474.33 165351.00 108463.67 165351.00 108453.00C165372.33 108410.00 165393.67 108367.00 165415.00 108324.00C165436.67 108324.00 165458.33 108324.00 165480.00 108324.00C165490.67 108313.33 165501.33 108302.67 165512.00 108292.00C165522.67 108302.67 165533.33 108313.33 165544.00 108324.00C165544.00 108313.33 165544.00 108302.67 165544.00 108292.00C165554.67 108281.33 165565.33 108270.67 165576.00 108260.00C165586.67 108260.00 165597.33 108260.00 165608.00 108260.00C165640.33 108281.33 165672.67 108302.67 165705.00 108324.00C165726.33 108324.00 165747.67 108324.00 165769.00 108324.00C165769.00 108313.33 165769.00 108302.67 165769.00 108292.00C165779.67 108302.67 165790.33 108313.33 165801.00 108324.00C165833.33 108334.67 165865.67 108345.33 165898.00 108356.00C165919.33 108356.00 165940.67 108356.00 165962.00 108356.00C165962.00 108324.00 165962.00 108292.00 165962.00 108260.00C165951.33 108260.00 165940.67 108260.00 165930.00 108260.00C165930.00 108227.67 165930.00 108195.33 165930.00 108163.00C165919.33 108163.00 165908.67 108163.00 165898.00 108163.00C165887.00 108152.33 165876.00 108141.67 165865.00 108131.00C165876.00 108131.00 165887.00 108131.00 165898.00 108131.00C165898.00 108109.67 165898.00 108088.33 165898.00 108067.00C165908.67 108067.00 165919.33 108067.00 165930.00 108067.00C165972.90 108024.24 166015.34 107981.01 166058.00 107938.00C166079.67 107895.33 166101.33 107852.67 166123.00 107810.00C166133.67 107810.00 166144.33 107810.00 166155.00 107810.00C166165.84 107787.50 166177.46 107765.35 166187.79 107742.63C166198.48 107710.96 166208.67 107679.10 166219.70 107647.57C166230.13 107626.38 166240.57 107605.19 166251.00 107584.00C166261.67 107605.67 166272.33 107627.33 166283.00 107649.00C166272.33 107670.33 166261.67 107691.67 166251.00 107713.00C166261.67 107713.00 166272.33 107713.00 166283.00 107713.00C166294.00 107734.33 166305.00 107755.67 166316.00 107777.00C166337.33 107766.33 166358.67 107755.67 166380.00 107745.00C166390.67 107723.67 166401.33 107702.33 166412.00 107681.00C166412.00 107659.67 166412.00 107638.33 166412.00 107617.00C166433.33 107617.00 166454.67 107617.00 166476.00 107617.00C166487.00 107584.67 166498.00 107552.33 166509.00 107520.00C166509.00 107509.33 166509.00 107498.67 166509.00 107488.00C166520.28 107464.80 166532.63 107442.09 166543.16 107418.55C166563.77 107366.70 166584.38 107314.85 166605.00 107263.00C166626.33 107241.67 166647.67 107220.33 166669.00 107199.00C166669.00 107188.00 166669.00 107177.00 166669.00 107166.00C166690.67 107155.33 166712.33 107144.67 166734.00 107134.00C166734.00 107112.67 166734.00 107091.33 166734.00 107070.00C166744.67 107059.33 166755.33 107048.67 166766.00 107038.00C166776.67 107038.00 166787.33 107038.00 166798.00 107038.00C166798.00 107048.67 166798.00 107059.33 166798.00 107070.00C166808.67 107070.00 166819.33 107070.00 166830.00 107070.00C166840.67 107080.67 166851.33 107091.33 166862.00 107102.00C166872.67 107102.00 166883.33 107102.00 166894.00 107102.00C166905.00 107059.33 166916.00 107016.67 166927.00 106974.00C166948.42 106962.84 166970.02 106952.03 166991.33 106940.67C167001.89 106930.11 167012.44 106919.56 167023.00 106909.00C167055.00 106909.00 167087.00 106909.00 167119.00 106909.00C167108.33 106877.00 167097.67 106845.00 167087.00 106813.00C167076.30 106802.16 167065.31 106791.60 167054.80 106780.58C167044.20 106759.05 167033.60 106737.53 167023.00 106716.00C167055.00 106673.33 167087.00 106630.67 167119.00 106588.00C167119.00 106577.00 167119.00 106566.00 167119.00 106555.00C167140.67 106544.33 167162.33 106533.67 167184.00 106523.00C167184.00 106512.33 167184.00 106501.67 167184.00 106491.00C167205.33 106480.33 167226.67 106469.67 167248.00 106459.00C167258.67 106416.00 167269.33 106373.00 167280.00 106330.00C167269.33 106308.67 167258.67 106287.33 167248.00 106266.00C167237.33 106266.00 167226.67 106266.00 167216.00 106266.00C167205.33 106244.67 167194.67 106223.33 167184.00 106202.00C167194.67 106202.00 167205.33 106202.00 167216.00 106202.00C167226.67 106212.67 167237.33 106223.33 167248.00 106234.00C167258.67 106234.00 167269.33 106234.00 167280.00 106234.00C167280.00 106223.33 167280.00 106212.67 167280.00 106202.00C167312.33 106180.67 167344.67 106159.33 167377.00 106138.00C167377.00 106116.33 167377.00 106094.67 167377.00 106073.00C167366.33 106062.33 167355.67 106051.67 167345.00 106041.00C167345.00 106019.67 167345.00 105998.33 167345.00 105977.00C167323.33 105977.00 167301.67 105977.00 167280.00 105977.00C167280.00 105955.33 167280.00 105933.67 167280.00 105912.00C167269.33 105890.67 167258.67 105869.33 167248.00 105848.00C167226.67 105837.33 167205.33 105826.67 167184.00 105816.00C167184.00 105794.67 167184.00 105773.33 167184.00 105752.00C167151.67 105719.67 167119.33 105687.33 167087.00 105655.00C167065.67 105655.00 167044.33 105655.00 167023.00 105655.00C167023.00 105644.33 167023.00 105633.67 167023.00 105623.00C167044.33 105591.00 167065.67 105559.00 167087.00 105527.00C167097.67 105527.00 167108.33 105527.00 167119.00 105527.00C167108.33 105527.00 167097.67 105527.00 167087.00 105527.00C167076.33 105516.00 167065.67 105505.00 167055.00 105494.00C167001.33 105494.00 166947.67 105494.00 166894.00 105494.00C166894.00 105515.67 166894.00 105537.33 166894.00 105559.00C166862.00 105559.00 166830.00 105559.00 166798.00 105559.00C166798.00 105537.33 166798.00 105515.67 166798.00 105494.00C166776.67 105494.00 166755.33 105494.00 166734.00 105494.00C166734.00 105505.00 166734.00 105516.00 166734.00 105527.00C166723.00 105527.00 166712.00 105527.00 166701.00 105527.00C166701.00 105516.00 166701.00 105505.00 166701.00 105494.00C166690.33 105494.00 166679.67 105494.00 166669.00 105494.00C166658.33 105472.67 166647.67 105451.33 166637.00 105430.00C166626.33 105430.00 166615.67 105430.00 166605.00 105430.00C166605.00 105440.67 166605.00 105451.33 166605.00 105462.00C166594.33 105462.00 166583.67 105462.00 166573.00 105462.00C166573.00 105451.33 166573.00 105440.67 166573.00 105430.00C166562.33 105430.00 166551.67 105430.00 166541.00 105430.00C166551.67 105419.33 166562.33 105408.67 166573.00 105398.00C166551.67 105398.00 166530.33 105398.00 166509.00 105398.00C166498.00 105387.33 166487.00 105376.67 166476.00 105366.00C166487.00 105366.00 166498.00 105366.00 166509.00 105366.00C166498.00 105355.33 166487.00 105344.67 166476.00 105334.00C166454.67 105334.00 166433.33 105334.00 166412.00 105334.00C166412.00 105323.33 166412.00 105312.67 166412.00 105302.00C166422.67 105302.00 166433.33 105302.00 166444.00 105302.00C166433.33 105291.00 166422.67 105280.00 166412.00 105269.00C166412.00 105258.33 166412.00 105247.67 166412.00 105237.00C166401.33 105226.33 166390.67 105215.67 166380.00 105205.00C166369.33 105215.67 166358.67 105226.33 166348.00 105237.00C166348.00 105226.33 166348.00 105215.67 166348.00 105205.00C166358.67 105205.00 166369.33 105205.00 166380.00 105205.00C166380.00 105183.67 166380.00 105162.33 166380.00 105141.00C166380.00 105151.67 166380.00 105162.33 166380.00 105173.00C166390.67 105140.67 166401.33 105108.33 166412.00 105076.00C166401.33 105076.00 166390.67 105076.00 166380.00 105076.00C166369.33 105097.67 166358.67 105119.33 166348.00 105141.00C166337.33 105141.00 166326.67 105141.00 166316.00 105141.00C166305.00 105130.33 166294.00 105119.67 166283.00 105109.00C166294.00 105087.33 166305.00 105065.67 166316.00 105044.00C166316.00 105033.33 166316.00 105022.67 166316.00 105012.00C166294.33 105022.67 166272.67 105033.33 166251.00 105044.00C166251.00 105054.67 166251.00 105065.33 166251.00 105076.00C166229.67 105076.00 166208.33 105076.00 166187.00 105076.00C166176.33 105065.33 166165.67 105054.67 166155.00 105044.00C166133.67 105054.67 166112.33 105065.33 166091.00 105076.00C166080.00 105076.00 166069.00 105076.00 166058.00 105076.00C166058.00 105054.67 166058.00 105033.33 166058.00 105012.00C166047.33 105022.67 166036.67 105033.33 166026.00 105044.00C166004.67 105044.00 165983.33 105044.00 165962.00 105044.00C165962.00 105054.67 165962.00 105065.33 165962.00 105076.00C165951.33 105076.00 165940.67 105076.00 165930.00 105076.00C165930.00 105065.33 165930.00 105054.67 165930.00 105044.00C165919.33 105054.67 165908.67 105065.33 165898.00 105076.00C165887.00 105065.33 165876.00 105054.67 165865.00 105044.00C165886.67 105033.33 165908.33 105022.67 165930.00 105012.00C165930.00 104969.33 165930.00 104926.67 165930.00 104884.00C165919.33 104884.00 165908.67 104884.00 165898.00 104884.00C165865.67 104862.33 165833.33 104840.67 165801.00 104819.00C165790.33 104829.67 165779.67 104840.33 165769.00 104851.00C165769.00 104840.33 165769.00 104829.67 165769.00 104819.00C165758.33 104819.00 165747.67 104819.00 165737.00 104819.00C165737.00 104797.67 165737.00 104776.33 165737.00 104755.00C165726.33 104755.00 165715.67 104755.00 165705.00 104755.00C165705.00 104744.33 165705.00 104733.67 165705.00 104723.00C165694.33 104723.00 165683.67 104723.00 165673.00 104723.00C165673.00 104701.33 165673.00 104679.67 165673.00 104658.00C165662.00 104658.00 165651.00 104658.00 165640.00 104658.00C165640.00 104647.33 165640.00 104636.67 165640.00 104626.00C165629.33 104604.67 165618.67 104583.33 165608.00 104562.00C165597.33 104562.00 165586.67 104562.00 165576.00 104562.00C165554.67 104572.67 165533.33 104583.33 165512.00 104594.00C165490.67 104594.00 165469.33 104594.00 165448.00 104594.00C165437.00 104604.67 165426.00 104615.33 165415.00 104626.00C165404.33 104615.33 165393.67 104604.67 165383.00 104594.00C165361.67 104604.67 165340.33 104615.33 165319.00 104626.00C165265.33 104626.00 165211.67 104626.00 165158.00 104626.00C165147.33 104636.67 165136.67 104647.33 165126.00 104658.00C165115.33 104647.33 165104.67 104636.67 165094.00 104626.00C165083.33 104626.00 165072.67 104626.00 165062.00 104626.00C165051.00 104615.33 165040.00 104604.67 165029.00 104594.00C165007.67 104604.67 164986.33 104615.33 164965.00 104626.00C164954.33 104636.67 164943.67 104647.33 164933.00 104658.00C164922.33 104647.33 164911.67 104636.67 164901.00 104626.00C164879.67 104626.00 164858.33 104626.00 164837.00 104626.00C164826.00 104615.33 164815.00 104604.67 164804.00 104594.00C164804.00 104604.67 164804.00 104615.33 164804.00 104626.00C164782.67 104604.67 164761.33 104583.33 164740.00 104562.00C164740.00 104572.67 164740.00 104583.33 164740.00 104594.00C164729.33 104583.33 164718.67 104572.67 164708.00 104562.00C164697.33 104519.00 164686.67 104476.00 164676.00 104433.00C164643.67 104401.00 164611.33 104369.00 164579.00 104337.00C164568.33 104337.00 164557.67 104337.00 164547.00 104337.00C164536.33 104326.33 164525.67 104315.67 164515.00 104305.00C164493.53 104337.09 164472.27 104369.32 164450.67 104401.33C164440.11 104411.89 164429.56 104422.44 164419.00 104433.00C164397.08 104411.92 164375.41 104390.60 164354.00 104369.00C164332.67 104379.67 164311.33 104390.33 164290.00 104401.00C164279.33 104422.67 164268.67 104444.33 164258.00 104466.00C164258.00 104487.33 164258.00 104508.67 164258.00 104530.00C164225.67 104530.00 164193.33 104530.00 164161.00 104530.00C164139.67 104540.67 164118.33 104551.33 164097.00 104562.00C164075.67 104562.00 164054.33 104562.00 164033.00 104562.00C164022.33 104540.67 164011.67 104519.33 164001.00 104498.00C164011.67 104476.33 164022.33 104454.67 164033.00 104433.00C163990.00 104422.33 163947.00 104411.67 163904.00 104401.00C163904.00 104390.33 163904.00 104379.67 163904.00 104369.00C163882.67 104358.33 163861.33 104347.67 163840.00 104337.00C163850.67 104326.33 163861.33 104315.67 163872.00 104305.00C163872.00 104294.33 163872.00 104283.67 163872.00 104273.00C163861.33 104262.00 163850.67 104251.00 163840.00 104240.00C163829.33 104240.00 163818.67 104240.00 163808.00 104240.00C163786.33 104208.00 163764.67 104176.00 163743.00 104144.00C163732.33 104144.00 163721.67 104144.00 163711.00 104144.00C163700.33 104165.33 163689.67 104186.67 163679.00 104208.00C163668.33 104208.00 163657.67 104208.00 163647.00 104208.00C163625.67 104165.33 163604.33 104122.67 163583.00 104080.00C163550.67 104069.33 163518.33 104058.67 163486.00 104048.00C163486.00 104037.00 163486.00 104026.00 163486.00 104015.00C163464.67 103983.00 163443.33 103951.00 163422.00 103919.00C163411.33 103919.00 163400.67 103919.00 163390.00 103919.00C163390.00 103908.33 163390.00 103897.67 163390.00 103887.00C163379.00 103887.00 163368.00 103887.00 163357.00 103887.00C163335.67 103897.67 163314.33 103908.33 163293.00 103919.00C163271.67 103919.00 163250.33 103919.00 163229.00 103919.00C163218.33 103940.33 163207.67 103961.67 163197.00 103983.00C163207.67 104004.67 163218.33 104026.33 163229.00 104048.00C163218.33 104048.00 163207.67 104048.00 163197.00 104048.00C163186.33 104058.67 163175.67 104069.33 163165.00 104080.00C163132.67 104090.67 163100.33 104101.33 163068.00 104112.00C163046.67 104101.33 163025.33 104090.67 163004.00 104080.00C162993.33 104058.33 162982.67 104036.67 162972.00 104015.00C162982.67 103993.67 162993.33 103972.33 163004.00 103951.00C162993.33 103929.67 162982.67 103908.33 162972.00 103887.00C162929.00 103865.33 162886.00 103843.67 162843.00 103822.00C162843.00 103811.33 162843.00 103800.67 162843.00 103790.00C162821.67 103790.00 162800.33 103790.00 162779.00 103790.00C162779.00 103833.00 162779.00 103876.00 162779.00 103919.00C162768.33 103919.00 162757.67 103919.00 162747.00 103919.00C162736.00 103940.33 162725.00 103961.67 162714.00 103983.00C162703.33 103972.33 162692.67 103961.67 162682.00 103951.00C162671.33 103961.67 162660.67 103972.33 162650.00 103983.00C162607.00 103993.67 162564.00 104004.33 162521.00 104015.00C162489.00 104015.00 162457.00 104015.00 162425.00 104015.00C162414.33 103961.67 162403.67 103908.33 162393.00 103855.00C162328.67 103855.00 162264.33 103855.00 162200.00 103855.00C162178.67 103833.33 162157.33 103811.67 162136.00 103790.00C162136.00 103811.67 162136.00 103833.33 162136.00 103855.00C162114.59 103876.60 162092.92 103897.92 162071.00 103919.00C162071.00 103951.00 162071.00 103983.00 162071.00 104015.00C162060.33 104015.00 162049.67 104015.00 162039.00 104015.00C162007.00 104047.33 161975.00 104079.67 161943.00 104112.00C161900.00 104112.00 161857.00 104112.00 161814.00 104112.00C161782.00 104133.33 161750.00 104154.67 161718.00 104176.00C161685.67 104165.33 161653.33 104154.67 161621.00 104144.00C161589.00 104176.00 161557.00 104208.00 161525.00 104240.00C161482.00 104251.00 161439.00 104262.00 161396.00 104273.00C161385.33 104273.00 161374.67 104273.00 161364.00 104273.00C161353.33 104305.00 161342.67 104337.00 161332.00 104369.00C161321.33 104379.67 161310.67 104390.33 161300.00 104401.00C161256.90 104379.87 161213.90 104358.54 161171.00 104337.00C161139.00 104326.33 161107.00 104315.67 161075.00 104305.00C161064.00 104305.00 161053.00 104305.00 161042.00 104305.00C161010.00 104283.33 160978.00 104261.67 160946.00 104240.00C160914.00 104240.00 160882.00 104240.00 160850.00 104240.00C160827.50 104251.17 160805.38 104263.18 160782.63 104273.79C160751.42 104284.19 160720.21 104294.60 160689.00 104305.00C160667.33 104283.33 160645.67 104261.67 160624.00 104240.00C160613.33 104240.00 160602.67 104240.00 160592.00 104240.00C160570.67 104251.00 160549.33 104262.00 160528.00 104273.00C160485.00 104273.00 160442.00 104273.00 160399.00 104273.00C160388.30 104101.18 160377.70 103929.35 160366.93 103757.54C160334.95 103532.69 160302.98 103307.85 160271.00 103083.00C160271.00 103072.33 160271.00 103061.67 160271.00 103051.00C160227.90 103018.54 160184.70 102986.21 160141.67 102953.67C160022.82 102835.28 159904.21 102716.63 159785.20 102598.40C159628.16 102452.70 159471.47 102306.62 159314.20 102161.18C158936.47 101814.78 158558.73 101468.39 158181.00 101122.00C158170.33 101122.00 158159.67 101122.00 158149.00 101122.00C158138.33 101132.67 158127.67 101143.33 158117.00 101154.00C158073.87 101164.77 158030.68 101175.27 157987.59 101186.21C157966.39 101196.80 157945.20 101207.40 157924.00 101218.00C157902.33 101218.00 157880.67 101218.00 157859.00 101218.00C157848.33 101250.33 157837.67 101282.67 157827.00 101315.00C157805.67 101325.67 157784.33 101336.33 157763.00 101347.00C157752.33 101357.67 157741.67 101368.33 157731.00 101379.00C157709.33 101379.00 157687.67 101379.00 157666.00 101379.00C157655.33 101389.67 157644.67 101400.33 157634.00 101411.00C157612.67 101411.00 157591.33 101411.00 157570.00 101411.00C157570.00 101432.33 157570.00 101453.67 157570.00 101475.00C157537.67 101485.67 157505.33 101496.33 157473.00 101507.00C157430.33 101485.67 157387.67 101464.33 157345.00 101443.00C157323.67 101443.00 157302.33 101443.00 157281.00 101443.00C157270.00 101432.33 157259.00 101421.67 157248.00 101411.00C157194.52 101421.73 157141.02 101432.32 157087.56 101443.15C157023.24 101464.52 156958.87 101485.73 156894.59 101507.21C156873.06 101518.14 156851.53 101529.07 156830.00 101540.00C156808.67 101540.00 156787.33 101540.00 156766.00 101540.00C156766.00 101507.67 156766.00 101475.33 156766.00 101443.00C156755.33 101443.00 156744.67 101443.00 156734.00 101443.00C156723.33 101411.00 156712.67 101379.00 156702.00 101347.00C156680.33 101325.33 156658.67 101303.67 156637.00 101282.00C156615.67 101271.33 156594.33 101260.67 156573.00 101250.00C156551.67 101228.67 156530.33 101207.33 156509.00 101186.00C156509.00 101164.67 156509.00 101143.33 156509.00 101122.00C156487.67 101122.00 156466.33 101122.00 156445.00 101122.00C156434.00 101100.33 156423.00 101078.67 156412.00 101057.00C156401.33 101057.00 156390.67 101057.00 156380.00 101057.00C156380.00 101078.67 156380.00 101100.33 156380.00 101122.00C156358.67 101132.67 156337.33 101143.33 156316.00 101154.00C156305.33 101143.33 156294.67 101132.67 156284.00 101122.00C156262.67 101132.67 156241.33 101143.33 156220.00 101154.00C156198.33 101143.33 156176.67 101132.67 156155.00 101122.00C156122.90 101143.46 156090.68 101164.74 156058.67 101186.33C156037.11 101207.55 156015.56 101228.78 155994.00 101250.00C155972.67 101228.67 155951.33 101207.33 155930.00 101186.00C155919.33 101196.67 155908.67 101207.33 155898.00 101218.00C155887.33 101196.67 155876.67 101175.33 155866.00 101154.00C155823.00 101143.33 155780.00 101132.67 155737.00 101122.00C155726.22 101110.44 155714.46 101099.64 155704.29 101087.60C155693.86 101066.73 155683.43 101045.86 155673.00 101025.00C155662.33 101025.00 155651.67 101025.00 155641.00 101025.00C155608.67 101057.33 155576.33 101089.67 155544.00 101122.00C155522.53 101089.58 155501.27 101057.01 155479.67 101024.67C155469.11 101014.11 155458.56 101003.56 155448.00 100993.00C155415.67 101003.67 155383.33 101014.33 155351.00 101025.00C155319.00 101003.67 155287.00 100982.33 155255.00 100961.00C155212.00 100950.33 155169.00 100939.67 155126.00 100929.00C155136.67 100886.00 155147.33 100843.00 155158.00 100800.00C155158.00 100778.67 155158.00 100757.33 155158.00 100736.00C155104.67 100736.00 155051.33 100736.00 154998.00 100736.00C154965.67 100693.00 154933.33 100650.00 154901.00 100607.00C154869.00 100585.67 154837.00 100564.33 154805.00 100543.00C154772.67 100543.00 154740.33 100543.00 154708.00 100543.00C154708.00 100521.67 154708.00 100500.33 154708.00 100479.00C154676.00 100468.00 154644.00 100457.00 154612.00 100446.00C154601.33 100446.00 154590.67 100446.00 154580.00 100446.00C154558.20 100413.91 154536.59 100381.68 154514.67 100349.67C154493.45 100328.45 154472.22 100307.22 154451.00 100286.00C154429.67 100275.00 154408.33 100264.00 154387.00 100253.00C154365.33 100274.67 154343.67 100296.33 154322.00 100318.00C154311.33 100339.33 154300.67 100360.67 154290.00 100382.00C154268.52 100360.60 154247.20 100339.03 154225.61 100317.74C154193.41 100296.16 154161.20 100274.58 154129.00 100253.00C154140.00 100253.00 154151.00 100253.00 154162.00 100253.00C154151.00 100253.00 154140.00 100253.00 154129.00 100253.00C154118.33 100231.67 154107.67 100210.33 154097.00 100189.00C154097.00 100199.67 154097.00 100210.33 154097.00 100221.00C154075.67 100199.67 154054.33 100178.33 154033.00 100157.00C154022.33 100167.67 154011.67 100178.33 154001.00 100189.00C153990.16 100178.30 153979.60 100167.31 153968.58 100156.80C153947.05 100146.20 153925.53 100135.60 153904.00 100125.00C153915.00 100114.33 153926.00 100103.67 153937.00 100093.00C153926.00 100093.00 153915.00 100093.00 153904.00 100093.00C153904.00 100082.33 153904.00 100071.67 153904.00 100061.00C153882.67 100061.00 153861.33 100061.00 153840.00 100061.00C153850.67 100061.00 153861.33 100061.00 153872.00 100061.00C153850.67 100071.67 153829.33 100082.33 153808.00 100093.00C153808.00 100082.33 153808.00 100071.67 153808.00 100061.00C153786.58 100049.85 153764.98 100039.03 153743.67 100027.67C153722.11 100006.45 153700.56 99985.22 153679.00 99964.00C153668.33 99942.67 153657.67 99921.33 153647.00 99900.00C153593.33 99889.33 153539.67 99878.67 153486.00 99868.00C153464.15 99846.05 153442.76 99823.60 153420.62 99801.97C153377.99 99770.18 153335.24 99738.54 153292.67 99706.67C153282.11 99696.12 153271.56 99685.56 153261.00 99675.00C153261.00 99664.33 153261.00 99653.67 153261.00 99643.00C153239.67 99643.00 153218.33 99643.00 153197.00 99643.00C153186.33 99621.34 153175.67 99599.66 153165.00 99578.00C153143.67 99567.33 153122.33 99556.67 153101.00 99546.00C153101.00 99535.33 153101.00 99524.67 153101.00 99514.00C153111.67 99514.00 153122.33 99514.00 153133.00 99514.00C153122.33 99503.34 153111.67 99492.66 153101.00 99482.00C153090.00 99492.67 153079.00 99503.33 153068.00 99514.00C153057.33 99514.00 153046.67 99514.00 153036.00 99514.00C153014.67 99492.66 152993.33 99471.34 152972.00 99450.00C152972.00 99460.67 152972.00 99471.33 152972.00 99482.00C152961.33 99482.00 152950.67 99482.00 152940.00 99482.00C152929.33 99449.67 152918.67 99417.33 152908.00 99385.00C152908.00 99396.00 152908.00 99407.00 152908.00 99418.00C152897.33 99407.00 152886.67 99396.00 152876.00 99385.00C152865.00 99385.00 152854.00 99385.00 152843.00 99385.00C152842.90 99374.19 152843.20 99363.37 152842.85 99352.56C152832.25 99320.70 152821.62 99288.85 152811.00 99257.00C152800.33 99246.34 152789.67 99235.66 152779.00 99225.00C152757.67 99225.00 152736.33 99225.00 152715.00 99225.00C152682.67 99203.33 152650.33 99181.67 152618.00 99160.00C152607.33 99170.66 152596.67 99181.34 152586.00 99192.00C152554.00 99181.33 152522.00 99170.67 152490.00 99160.00C152479.33 99170.66 152468.67 99181.34 152458.00 99192.00C152425.67 99170.66 152393.33 99149.34 152361.00 99128.00C152361.00 99117.33 152361.00 99106.67 152361.00 99096.00C152350.33 99096.00 152339.67 99096.00 152329.00 99096.00C152307.67 99106.67 152286.33 99117.33 152265.00 99128.00C152254.00 99128.00 152243.00 99128.00 152232.00 99128.00C152221.33 99106.67 152210.67 99085.33 152200.00 99064.00C152189.33 99085.33 152178.67 99106.67 152168.00 99128.00C152157.33 99128.00 152146.67 99128.00 152136.00 99128.00C152125.33 99138.66 152114.67 99149.34 152104.00 99160.00C152093.33 99138.67 152082.67 99117.33 152072.00 99096.00C152050.33 99085.33 152028.67 99074.67 152007.00 99064.00C151996.33 99053.34 151985.67 99042.66 151975.00 99032.00C151975.00 99042.67 151975.00 99053.33 151975.00 99064.00C151964.33 99064.00 151953.67 99064.00 151943.00 99064.00C151921.67 99042.33 151900.33 99020.67 151879.00 98999.00C151846.67 98999.00 151814.33 98999.00 151782.00 98999.00C151739.33 98977.67 151696.67 98956.33 151654.00 98935.00C151654.00 98945.67 151654.00 98956.33 151654.00 98967.00C151632.33 98956.33 151610.67 98945.67 151589.00 98935.00C151578.33 98935.00 151567.67 98935.00 151557.00 98935.00C151546.33 98945.66 151535.67 98956.34 151525.00 98967.00C151481.85 98967.04 151438.69 98966.91 151395.54 98967.07C151320.69 98977.71 151245.85 98988.35 151171.00 98999.00C151171.00 99010.00 151171.00 99021.00 151171.00 99032.00C151160.33 99042.66 151149.67 99053.34 151139.00 99064.00C151117.67 99064.00 151096.33 99064.00 151075.00 99064.00C151064.33 99053.34 151053.67 99042.66 151043.00 99032.00C151021.33 99042.67 150999.67 99053.33 150978.00 99064.00C150967.33 99064.00 150956.67 99064.00 150946.00 99064.00C150914.00 99096.00 150882.00 99128.00 150850.00 99160.00C150817.67 99160.00 150785.33 99160.00 150753.00 99160.00C150710.21 99181.77 150667.36 99203.41 150624.61 99225.26C150592.41 99246.50 150560.20 99267.75 150528.00 99289.00C150517.33 99278.34 150506.67 99267.66 150496.00 99257.00C150485.33 99267.66 150474.67 99278.34 150464.00 99289.00C150453.33 99289.00 150442.67 99289.00 150432.00 99289.00C150421.33 99299.66 150410.67 99310.34 150400.00 99321.00C150400.00 99331.67 150400.00 99342.33 150400.00 99353.00C150378.33 99353.00 150356.67 99353.00 150335.00 99353.00C150324.33 99363.66 150313.67 99374.34 150303.00 99385.00C150313.67 99406.66 150324.33 99428.34 150335.00 99450.00C150324.33 99460.66 150313.67 99471.34 150303.00 99482.00C150281.67 99482.00 150260.33 99482.00 150239.00 99482.00C150228.33 99492.66 150217.67 99503.34 150207.00 99514.00C150228.33 99535.34 150249.67 99556.66 150271.00 99578.00C150271.00 99588.67 150271.00 99599.33 150271.00 99610.00C150239.00 99610.00 150207.00 99610.00 150175.00 99610.00C150164.33 99621.00 150153.67 99632.00 150143.00 99643.00C150121.33 99643.00 150099.67 99643.00 150078.00 99643.00C150078.00 99664.33 150078.00 99685.67 150078.00 99707.00C150067.33 99696.34 150056.67 99685.66 150046.00 99675.00C150035.33 99696.33 150024.67 99717.67 150014.00 99739.00C150003.33 99739.00 149992.67 99739.00 149982.00 99739.00C149971.33 99717.67 149960.67 99696.33 149950.00 99675.00C149950.00 99653.33 149950.00 99631.67 149950.00 99610.00C149960.67 99610.00 149971.33 99610.00 149982.00 99610.00C149970.69 99599.11 149960.15 99587.30 149948.35 99577.01C149895.23 99545.34 149842.11 99513.67 149789.00 99482.00C149778.33 99460.67 149767.67 99439.33 149757.00 99418.00C149735.33 99418.00 149713.67 99418.00 149692.00 99418.00C149670.67 99428.67 149649.33 99439.33 149628.00 99450.00C149617.33 99450.00 149606.67 99450.00 149596.00 99450.00C149574.50 99439.34 149553.14 99428.39 149531.55 99417.91C149478.03 99406.94 149424.52 99395.97 149371.00 99385.00C149349.67 99363.66 149328.33 99342.34 149307.00 99321.00C149285.33 99321.00 149263.67 99321.00 149242.00 99321.00C149242.00 99310.33 149242.00 99299.67 149242.00 99289.00C149220.67 99289.00 149199.33 99289.00 149178.00 99289.00C149167.33 99299.66 149156.67 99310.34 149146.00 99321.00C149124.33 99321.00 149102.67 99321.00 149081.00 99321.00C149081.00 99310.33 149081.00 99299.67 149081.00 99289.00C149092.00 99278.33 149103.00 99267.67 149114.00 99257.00C149114.00 99246.33 149114.00 99235.67 149114.00 99225.00C149092.33 99203.34 149070.67 99181.66 149049.00 99160.00C149006.33 99160.00 148963.67 99160.00 148921.00 99160.00C148910.33 99149.34 148899.67 99138.66 148889.00 99128.00C148867.33 99128.00 148845.67 99128.00 148824.00 99128.00C148813.33 99117.34 148802.67 99106.66 148792.00 99096.00C148760.00 99096.00 148728.00 99096.00 148696.00 99096.00C148631.67 99074.67 148567.33 99053.33 148503.00 99032.00C148481.33 99032.00 148459.67 99032.00 148438.00 99032.00C148427.33 99021.00 148416.67 99010.00 148406.00 98999.00C148395.33 98999.00 148384.67 98999.00 148374.00 98999.00C148374.00 98977.67 148374.00 98956.33 148374.00 98935.00C148363.33 98935.00 148352.67 98935.00 148342.00 98935.00C148342.00 98945.67 148342.00 98956.33 148342.00 98967.00C148331.33 98956.34 148320.67 98945.66 148310.00 98935.00C148320.67 98924.34 148331.33 98913.66 148342.00 98903.00C148331.33 98903.00 148320.67 98903.00 148310.00 98903.00C148320.67 98892.34 148331.33 98881.66 148342.00 98871.00C148331.33 98871.00 148320.67 98871.00 148310.00 98871.00C148331.33 98871.00 148352.67 98871.00 148374.00 98871.00C148352.67 98860.33 148331.33 98849.67 148310.00 98839.00C148331.33 98828.33 148352.67 98817.67 148374.00 98807.00C148374.00 98785.33 148374.00 98763.67 148374.00 98742.00C148363.33 98742.00 148352.67 98742.00 148342.00 98742.00C148342.00 98710.00 148342.00 98678.00 148342.00 98646.00C148331.33 98656.66 148320.67 98667.34 148310.00 98678.00C148310.10 98656.52 148309.81 98635.04 148310.15 98613.56C148320.75 98581.37 148331.38 98549.19 148342.00 98517.00C148342.35 98501.87 148340.75 98486.54 148344.21 98471.65C148354.14 98411.77 148364.07 98351.88 148374.00 98292.00C148417.00 98195.67 148460.00 98099.33 148503.00 98003.00C148513.67 97992.34 148524.33 97981.66 148535.00 97971.00C148549.26 97926.70 148565.15 97882.90 148577.26 97837.94C148595.17 97774.96 148613.08 97711.98 148631.00 97649.00C148652.67 97627.67 148674.33 97606.33 148696.00 97585.00C148696.00 97574.33 148696.00 97563.67 148696.00 97553.00C148728.00 97510.00 148760.00 97467.00 148792.00 97424.00C148781.33 97413.34 148770.67 97402.66 148760.00 97392.00C148738.67 97392.00 148717.33 97392.00 148696.00 97392.00C148685.00 97370.33 148674.00 97348.67 148663.00 97327.00C148652.33 97338.00 148641.67 97349.00 148631.00 97360.00C148631.00 97349.00 148631.00 97338.00 148631.00 97327.00C148620.33 97327.00 148609.67 97327.00 148599.00 97327.00C148609.67 97316.34 148620.33 97305.66 148631.00 97295.00C148620.33 97295.00 148609.67 97295.00 148599.00 97295.00C148577.67 97284.33 148556.33 97273.67 148535.00 97263.00C148524.33 97284.33 148513.67 97305.67 148503.00 97327.00C148503.00 97316.33 148503.00 97305.67 148503.00 97295.00C148492.33 97305.66 148481.67 97316.34 148471.00 97327.00C148460.00 97316.33 148449.00 97305.67 148438.00 97295.00C148449.00 97295.00 148460.00 97295.00 148471.00 97295.00C148471.00 97284.33 148471.00 97273.67 148471.00 97263.00C148449.33 97273.67 148427.67 97284.33 148406.00 97295.00C148395.33 97284.34 148384.67 97273.66 148374.00 97263.00C148374.00 97273.67 148374.00 97284.33 148374.00 97295.00C148363.33 97284.34 148352.67 97273.66 148342.00 97263.00C148320.67 97263.00 148299.33 97263.00 148278.00 97263.00C148278.00 97241.67 148278.00 97220.33 148278.00 97199.00C148278.00 97209.67 148278.00 97220.33 148278.00 97231.00C148267.00 97220.33 148256.00 97209.67 148245.00 97199.00C148234.33 97199.00 148223.67 97199.00 148213.00 97199.00C148213.00 97209.67 148213.00 97220.33 148213.00 97231.00C148202.33 97220.34 148191.67 97209.66 148181.00 97199.00C148181.00 97209.67 148181.00 97220.33 148181.00 97231.00C148170.33 97220.34 148159.67 97209.66 148149.00 97199.00C148138.33 97199.00 148127.67 97199.00 148117.00 97199.00C148117.00 97209.67 148117.00 97220.33 148117.00 97231.00C148106.33 97220.34 148095.67 97209.66 148085.00 97199.00C148074.33 97209.66 148063.67 97220.34 148053.00 97231.00C148042.00 97209.67 148031.00 97188.33 148020.00 97167.00C148009.33 97167.00 147998.67 97167.00 147988.00 97167.00C147988.00 97188.33 147988.00 97209.67 147988.00 97231.00C147988.00 97209.67 147988.00 97188.33 147988.00 97167.00C147977.33 97167.00 147966.67 97167.00 147956.00 97167.00C147945.33 97145.34 147934.67 97123.66 147924.00 97102.00C147913.33 97102.00 147902.67 97102.00 147892.00 97102.00C147881.33 97113.00 147870.67 97124.00 147860.00 97135.00C147860.00 97124.00 147860.00 97113.00 147860.00 97102.00C147838.33 97091.33 147816.67 97080.67 147795.00 97070.00C147805.67 97070.00 147816.33 97070.00 147827.00 97070.00C147784.33 97070.00 147741.67 97070.00 147699.00 97070.00C147699.00 97080.67 147699.00 97091.33 147699.00 97102.00C147677.67 97102.00 147656.33 97102.00 147635.00 97102.00C147624.00 97123.67 147613.00 97145.33 147602.00 97167.00C147591.33 97156.34 147580.67 97145.66 147570.00 97135.00C147570.00 97145.67 147570.00 97156.33 147570.00 97167.00C147559.33 97156.34 147548.67 97145.66 147538.00 97135.00C147527.33 97135.00 147516.67 97135.00 147506.00 97135.00C147506.00 97124.00 147506.00 97113.00 147506.00 97102.00C147495.33 97113.00 147484.67 97124.00 147474.00 97135.00C147452.33 97135.00 147430.67 97135.00 147409.00 97135.00C147409.00 97113.33 147409.00 97091.67 147409.00 97070.00C147398.33 97070.00 147387.67 97070.00 147377.00 97070.00C147377.00 97080.67 147377.00 97091.33 147377.00 97102.00C147366.33 97102.00 147355.67 97102.00 147345.00 97102.00C147345.00 97091.33 147345.00 97080.67 147345.00 97070.00C147334.33 97080.66 147323.67 97091.34 147313.00 97102.00C147302.33 97102.00 147291.67 97102.00 147281.00 97102.00C147270.33 97091.34 147259.67 97080.66 147249.00 97070.00C147249.00 97048.67 147249.00 97027.33 147249.00 97006.00C147238.33 97006.00 147227.67 97006.00 147217.00 97006.00C147206.00 97038.00 147195.00 97070.00 147184.00 97102.00C147162.67 97113.00 147141.33 97124.00 147120.00 97135.00C147109.33 97124.00 147098.67 97113.00 147088.00 97102.00C147098.67 97102.00 147109.33 97102.00 147120.00 97102.00C147120.00 97080.67 147120.00 97059.33 147120.00 97038.00C147077.33 97027.33 147034.67 97016.67 146992.00 97006.00C146992.00 97027.33 146992.00 97048.67 146992.00 97070.00C146981.00 97070.00 146970.00 97070.00 146959.00 97070.00C146937.67 97048.66 146916.33 97027.34 146895.00 97006.00C146863.00 97006.00 146831.00 97006.00 146799.00 97006.00C146799.00 96995.33 146799.00 96984.67 146799.00 96974.00C146788.00 96974.00 146777.00 96974.00 146766.00 96974.00C146766.00 96952.67 146766.00 96931.33 146766.00 96910.00C146755.33 96899.00 146744.67 96888.00 146734.00 96877.00C146734.00 96898.67 146734.00 96920.33 146734.00 96942.00C146702.00 96942.00 146670.00 96942.00 146638.00 96942.00C146638.00 96963.33 146638.00 96984.67 146638.00 97006.00C146627.33 96995.34 146616.67 96984.66 146606.00 96974.00C146595.00 96984.67 146584.00 96995.33 146573.00 97006.00C146584.00 97006.00 146595.00 97006.00 146606.00 97006.00C146606.00 97016.67 146606.00 97027.33 146606.00 97038.00C146595.00 97016.67 146584.00 96995.33 146573.00 96974.00C146509.00 96974.00 146445.00 96974.00 146381.00 96974.00C146370.00 96984.67 146359.00 96995.33 146348.00 97006.00C146316.00 96984.67 146284.00 96963.33 146252.00 96942.00C146220.00 96952.67 146188.00 96963.33 146156.00 96974.00C146156.00 96984.67 146156.00 96995.33 146156.00 97006.00C146134.33 97006.00 146112.67 97006.00 146091.00 97006.00C146101.67 97016.66 146112.33 97027.34 146123.00 97038.00C146112.33 97038.00 146101.67 97038.00 146091.00 97038.00C146080.33 97048.66 146069.67 97059.34 146059.00 97070.00C146048.33 97070.00 146037.67 97070.00 146027.00 97070.00C146016.33 97080.66 146005.67 97091.34 145995.00 97102.00C145984.33 97091.34 145973.67 97080.66 145963.00 97070.00C145963.00 97080.67 145963.00 97091.33 145963.00 97102.00C145952.00 97113.00 145941.00 97124.00 145930.00 97135.00C145930.00 97124.00 145930.00 97113.00 145930.00 97102.00C145908.67 97102.00 145887.33 97102.00 145866.00 97102.00C145855.33 97113.00 145844.67 97124.00 145834.00 97135.00C145801.67 97145.67 145769.33 97156.33 145737.00 97167.00C145715.67 97188.34 145694.33 97209.66 145673.00 97231.00C145651.67 97241.67 145630.33 97252.33 145609.00 97263.00C145598.33 97273.66 145587.67 97284.34 145577.00 97295.00C145566.33 97284.34 145555.67 97273.66 145545.00 97263.00C145545.00 97273.67 145545.00 97284.33 145545.00 97295.00C145534.00 97295.00 145523.00 97295.00 145512.00 97295.00C145490.40 97316.40 145469.08 97338.08 145448.00 97360.00C145437.33 97360.00 145426.67 97360.00 145416.00 97360.00C145405.33 97349.00 145394.67 97338.00 145384.00 97327.00C145373.33 97338.00 145362.67 97349.00 145352.00 97360.00C145352.00 97349.00 145352.00 97338.00 145352.00 97327.00C145341.33 97338.00 145330.67 97349.00 145320.00 97360.00C145277.00 97360.00 145234.00 97360.00 145191.00 97360.00C145191.00 97381.33 145191.00 97402.67 145191.00 97424.00C145169.67 97413.33 145148.33 97402.67 145127.00 97392.00C145127.00 97402.67 145127.00 97413.33 145127.00 97424.00C145116.00 97424.00 145105.00 97424.00 145094.00 97424.00C145094.00 97434.67 145094.00 97445.33 145094.00 97456.00C145072.67 97456.00 145051.33 97456.00 145030.00 97456.00C145030.00 97466.67 145030.00 97477.33 145030.00 97488.00C145030.00 97477.33 145030.00 97466.67 145030.00 97456.00C144997.72 97488.06 144965.94 97520.61 144934.00 97553.00C144912.33 97553.00 144890.67 97553.00 144869.00 97553.00C144858.33 97563.66 144847.67 97574.34 144837.00 97585.00C144826.33 97585.00 144815.67 97585.00 144805.00 97585.00C144794.33 97617.00 144783.67 97649.00 144773.00 97681.00C144762.33 97670.34 144751.67 97659.66 144741.00 97649.00C144730.33 97659.66 144719.67 97670.34 144709.00 97681.00C144719.67 97681.00 144730.33 97681.00 144741.00 97681.00C144730.33 97691.66 144719.67 97702.34 144709.00 97713.00C144698.00 97702.33 144687.00 97691.67 144676.00 97681.00C144665.33 97681.00 144654.67 97681.00 144644.00 97681.00C144633.33 97702.66 144622.67 97724.34 144612.00 97746.00C144622.67 97756.66 144633.33 97767.34 144644.00 97778.00C144633.33 97788.66 144622.67 97799.34 144612.00 97810.00C144601.33 97799.34 144590.67 97788.66 144580.00 97778.00C144580.00 97799.33 144580.00 97820.67 144580.00 97842.00C144558.67 97820.66 144537.33 97799.34 144516.00 97778.00C144516.00 97788.67 144516.00 97799.33 144516.00 97810.00C144505.33 97810.00 144494.67 97810.00 144484.00 97810.00C144484.00 97831.33 144484.00 97852.67 144484.00 97874.00C144473.00 97874.00 144462.00 97874.00 144451.00 97874.00C144451.00 97895.33 144451.00 97916.67 144451.00 97938.00C144429.67 97938.00 144408.33 97938.00 144387.00 97938.00C144387.00 97927.33 144387.00 97916.67 144387.00 97906.00C144376.33 97927.66 144365.67 97949.34 144355.00 97971.00C144344.33 97960.00 144333.67 97949.00 144323.00 97938.00C144323.00 97959.67 144323.00 97981.33 144323.00 98003.00C144301.33 98013.67 144279.67 98024.33 144258.00 98035.00C144247.33 98035.00 144236.67 98035.00 144226.00 98035.00C144226.00 98045.67 144226.00 98056.33 144226.00 98067.00C144215.33 98077.66 144204.67 98088.34 144194.00 98099.00C144183.33 98088.34 144172.67 98077.66 144162.00 98067.00C144162.00 98077.67 144162.00 98088.33 144162.00 98099.00C144129.67 98099.00 144097.33 98099.00 144065.00 98099.00C144054.33 98109.66 144043.67 98120.34 144033.00 98131.00C144022.33 98131.00 144011.67 98131.00 144001.00 98131.00C144001.00 98141.67 144001.00 98152.33 144001.00 98163.00C143969.00 98163.00 143937.00 98163.00 143905.00 98163.00C143915.67 98174.00 143926.33 98185.00 143937.00 98196.00C143926.33 98206.66 143915.67 98217.34 143905.00 98228.00C143872.67 98217.33 143840.33 98206.67 143808.00 98196.00C143808.00 98206.67 143808.00 98217.33 143808.00 98228.00C143829.67 98238.67 143851.33 98249.33 143873.00 98260.00C143862.00 98270.67 143851.00 98281.33 143840.00 98292.00C143829.33 98292.00 143818.67 98292.00 143808.00 98292.00C143818.67 98302.66 143829.33 98313.34 143840.00 98324.00C143829.33 98334.66 143818.67 98345.34 143808.00 98356.00C143818.67 98356.00 143829.33 98356.00 143840.00 98356.00C143851.00 98367.00 143862.00 98378.00 143873.00 98389.00C143840.67 98389.00 143808.33 98389.00 143776.00 98389.00C143765.33 98399.66 143754.67 98410.34 143744.00 98421.00C143744.00 98453.00 143744.00 98485.00 143744.00 98517.00C143733.33 98506.34 143722.67 98495.66 143712.00 98485.00C143712.00 98506.33 143712.00 98527.67 143712.00 98549.00C143722.67 98549.00 143733.33 98549.00 143744.00 98549.00C143754.67 98538.34 143765.33 98527.66 143776.00 98517.00C143776.00 98538.67 143776.00 98560.33 143776.00 98582.00C143744.00 98582.00 143712.00 98582.00 143680.00 98582.00C143658.33 98614.00 143636.67 98646.00 143615.00 98678.00C143615.00 98667.33 143615.00 98656.67 143615.00 98646.00C143615.00 98656.67 143615.00 98667.33 143615.00 98678.00C143593.67 98678.00 143572.33 98678.00 143551.00 98678.00C143540.33 98688.66 143529.67 98699.34 143519.00 98710.00C143497.67 98710.00 143476.33 98710.00 143455.00 98710.00C143455.00 98720.67 143455.00 98731.33 143455.00 98742.00C143444.00 98742.00 143433.00 98742.00 143422.00 98742.00C143422.00 98752.67 143422.00 98763.33 143422.00 98774.00C143390.00 98785.00 143358.00 98796.00 143326.00 98807.00C143315.33 98807.00 143304.67 98807.00 143294.00 98807.00C143294.00 98817.67 143294.00 98828.33 143294.00 98839.00C143283.33 98839.00 143272.67 98839.00 143262.00 98839.00C143251.33 98849.66 143240.67 98860.34 143230.00 98871.00C143219.00 98860.33 143208.00 98849.67 143197.00 98839.00C143175.67 98860.34 143154.33 98881.66 143133.00 98903.00C143143.67 98913.66 143154.33 98924.34 143165.00 98935.00C143143.67 98935.00 143122.33 98935.00 143101.00 98935.00C143101.00 98956.33 143101.00 98977.67 143101.00 98999.00C143079.67 98988.33 143058.33 98977.67 143037.00 98967.00C143037.00 98977.67 143037.00 98988.33 143037.00 98999.00C142972.67 99020.67 142908.33 99042.33 142844.00 99064.00C142844.00 99085.33 142844.00 99106.67 142844.00 99128.00C142833.33 99138.66 142822.67 99149.34 142812.00 99160.00C142812.00 99149.33 142812.00 99138.67 142812.00 99128.00C142800.97 99138.84 142789.64 99149.39 142778.79 99160.41C142757.42 99203.40 142736.20 99246.45 142714.74 99289.39C142693.37 99321.36 142672.17 99353.44 142650.68 99385.33C142640.11 99396.22 142629.56 99407.11 142619.00 99418.00C142602.36 99417.88 142585.64 99418.76 142569.14 99416.07C142478.43 99405.72 142387.71 99395.36 142297.00 99385.00C142275.67 99374.33 142254.33 99363.67 142233.00 99353.00C142243.67 99342.34 142254.33 99331.66 142265.00 99321.00C142243.67 99331.67 142222.33 99342.33 142201.00 99353.00C142201.00 99363.67 142201.00 99374.33 142201.00 99385.00C142179.33 99385.00 142157.67 99385.00 142136.00 99385.00C142136.00 99396.00 142136.00 99407.00 142136.00 99418.00C142104.00 99407.00 142072.00 99396.00 142040.00 99385.00C142029.33 99406.66 142018.67 99428.34 142008.00 99450.00C141986.33 99460.67 141964.67 99471.33 141943.00 99482.00C141943.00 99503.33 141943.00 99524.67 141943.00 99546.00C141921.67 99567.34 141900.33 99588.66 141879.00 99610.00C141868.33 99599.34 141857.67 99588.66 141847.00 99578.00C141836.30 99588.84 141825.32 99599.40 141814.80 99610.42C141804.20 99631.95 141793.60 99653.47 141783.00 99675.00C141772.33 99664.34 141761.67 99653.66 141751.00 99643.00C141740.00 99664.33 141729.00 99685.67 141718.00 99707.00C141696.67 99717.67 141675.33 99728.33 141654.00 99739.00C141654.00 99749.67 141654.00 99760.33 141654.00 99771.00C141664.67 99781.66 141675.33 99792.34 141686.00 99803.00C141654.00 99803.00 141622.00 99803.00 141590.00 99803.00C141590.00 99813.67 141590.00 99824.33 141590.00 99835.00C141579.33 99835.00 141568.67 99835.00 141558.00 99835.00C141547.00 99824.33 141536.00 99813.67 141525.00 99803.00C141536.00 99824.67 141547.00 99846.33 141558.00 99868.00C141547.00 99889.33 141536.00 99910.67 141525.00 99932.00C141514.33 99921.34 141503.67 99910.66 141493.00 99900.00C141482.33 99921.33 141471.67 99942.67 141461.00 99964.00C141429.00 99964.00 141397.00 99964.00 141365.00 99964.00C141365.00 99985.33 141365.00 100006.67 141365.00 100028.00C141354.00 100028.00 141343.00 100028.00 141332.00 100028.00C141321.33 100017.33 141310.67 100006.67 141300.00 99996.00C141300.00 100006.67 141300.00 100017.33 141300.00 100028.00C141289.33 100039.00 141278.67 100050.00 141268.00 100061.00C141268.00 100082.33 141268.00 100103.67 141268.00 100125.00C141257.33 100125.00 141246.67 100125.00 141236.00 100125.00C141203.85 100157.06 141171.87 100189.30 141139.61 100221.26C141107.41 100242.84 141075.20 100264.42 141043.00 100286.00C141032.33 100286.00 141021.67 100286.00 141011.00 100286.00C141011.00 100275.00 141011.00 100264.00 141011.00 100253.00C141000.33 100253.00 140989.67 100253.00 140979.00 100253.00C140968.33 100274.67 140957.67 100296.33 140947.00 100318.00C140925.33 100328.67 140903.67 100339.33 140882.00 100350.00C140893.00 100350.00 140904.00 100350.00 140915.00 100350.00C140904.00 100360.67 140893.00 100371.33 140882.00 100382.00C140882.00 100392.67 140882.00 100403.33 140882.00 100414.00C140871.33 100414.00 140860.67 100414.00 140850.00 100414.00C140850.00 100403.33 140850.00 100392.67 140850.00 100382.00C140839.33 100382.00 140828.67 100382.00 140818.00 100382.00C140786.00 100403.33 140754.00 100424.67 140722.00 100446.00C140700.33 100424.67 140678.67 100403.33 140657.00 100382.00C140635.67 100392.67 140614.33 100403.33 140593.00 100414.00C140582.33 100414.00 140571.67 100414.00 140561.00 100414.00C140539.67 100392.67 140518.33 100371.33 140497.00 100350.00C140475.33 100350.00 140453.67 100350.00 140432.00 100350.00C140421.33 100360.67 140410.67 100371.33 140400.00 100382.00C140378.67 100382.00 140357.33 100382.00 140336.00 100382.00C140336.00 100392.67 140336.00 100403.33 140336.00 100414.00C140303.67 100446.33 140271.33 100478.67 140239.00 100511.00C140239.00 100521.67 140239.00 100532.33 140239.00 100543.00C140228.33 100532.33 140217.67 100521.67 140207.00 100511.00C140207.00 100532.33 140207.00 100553.67 140207.00 100575.00C140196.33 100575.00 140185.67 100575.00 140175.00 100575.00C140175.00 100585.67 140175.00 100596.33 140175.00 100607.00C140164.33 100607.00 140153.67 100607.00 140143.00 100607.00C140132.33 100639.33 140121.67 100671.67 140111.00 100704.00C140100.16 100714.70 140089.60 100725.69 140078.58 100736.20C140057.05 100746.80 140035.53 100757.40 140014.00 100768.00C140014.00 100757.33 140014.00 100746.67 140014.00 100736.00C140003.33 100725.33 139992.67 100714.67 139982.00 100704.00C139971.33 100736.00 139960.67 100768.00 139950.00 100800.00C139950.00 100789.33 139950.00 100778.67 139950.00 100768.00C139939.33 100768.00 139928.67 100768.00 139918.00 100768.00C139907.33 100789.33 139896.67 100810.67 139886.00 100832.00C139896.67 100842.67 139907.33 100853.33 139918.00 100864.00C139906.72 100886.36 139896.28 100909.19 139884.47 100931.26C139863.31 100962.50 139842.16 100993.75 139821.00 101025.00C139821.00 101035.67 139821.00 101046.33 139821.00 101057.00C139799.67 101057.00 139778.33 101057.00 139757.00 101057.00C139757.00 101067.67 139757.00 101078.33 139757.00 101089.00C139725.00 101089.00 139693.00 101089.00 139661.00 101089.00C139661.00 101100.00 139661.00 101111.00 139661.00 101122.00C139650.00 101111.00 139639.00 101100.00 139628.00 101089.00C139628.00 101110.67 139628.00 101132.33 139628.00 101154.00C139617.33 101154.00 139606.67 101154.00 139596.00 101154.00C139596.00 101164.67 139596.00 101175.33 139596.00 101186.00C139585.33 101186.00 139574.67 101186.00 139564.00 101186.00C139564.00 101196.67 139564.00 101207.33 139564.00 101218.00C139564.00 101207.33 139564.00 101196.67 139564.00 101186.00C139553.33 101196.67 139542.67 101207.33 139532.00 101218.00C139478.33 101218.00 139424.67 101218.00 139371.00 101218.00C139349.67 101207.33 139328.33 101196.67 139307.00 101186.00C139285.67 101196.67 139264.33 101207.33 139243.00 101218.00C139221.33 101207.33 139199.67 101196.67 139178.00 101186.00C139167.33 101196.67 139156.67 101207.33 139146.00 101218.00C139135.33 101218.00 139124.67 101218.00 139114.00 101218.00C139114.00 101228.67 139114.00 101239.33 139114.00 101250.00C139103.33 101250.00 139092.67 101250.00 139082.00 101250.00C139082.00 101271.67 139082.00 101293.33 139082.00 101315.00C139071.33 101315.00 139060.67 101315.00 139050.00 101315.00C139039.00 101325.67 139028.00 101336.33 139017.00 101347.00C138995.67 101347.00 138974.33 101347.00 138953.00 101347.00C138953.00 101357.67 138953.00 101368.33 138953.00 101379.00C138942.33 101379.00 138931.67 101379.00 138921.00 101379.00C138910.33 101389.67 138899.67 101400.33 138889.00 101411.00C138814.00 101368.00 138739.00 101325.00 138664.00 101282.00C138610.33 101293.00 138556.67 101304.00 138503.00 101315.00C138481.67 101336.33 138460.33 101357.67 138439.00 101379.00C138439.00 101411.00 138439.00 101443.00 138439.00 101475.00C138417.33 101475.00 138395.67 101475.00 138374.00 101475.00C138385.00 101485.67 138396.00 101496.33 138407.00 101507.00C138396.00 101539.33 138385.00 101571.67 138374.00 101604.00C138299.00 101604.00 138224.00 101604.00 138149.00 101604.00C138149.00 101625.33 138149.00 101646.67 138149.00 101668.00C138138.33 101678.67 138127.67 101689.33 138117.00 101700.00C138117.00 101721.67 138117.00 101743.33 138117.00 101765.00C138085.00 101797.00 138053.00 101829.00 138021.00 101861.00C138031.67 101871.67 138042.33 101882.33 138053.00 101893.00C138010.00 101903.67 137967.00 101914.33 137924.00 101925.00C137913.33 101903.67 137902.67 101882.33 137892.00 101861.00C137892.00 101850.33 137892.00 101839.67 137892.00 101829.00C137881.33 101839.67 137870.67 101850.33 137860.00 101861.00C137849.33 101839.67 137838.67 101818.33 137828.00 101797.00C137828.00 101764.67 137828.00 101732.33 137828.00 101700.00C137795.67 101678.67 137763.33 101657.33 137731.00 101636.00C137731.00 101614.67 137731.00 101593.33 137731.00 101572.00C137763.33 101572.00 137795.67 101572.00 137828.00 101572.00C137838.67 101561.33 137849.33 101550.67 137860.00 101540.00C137881.33 101540.00 137902.67 101540.00 137924.00 101540.00C137924.00 101529.00 137924.00 101518.00 137924.00 101507.00C137945.67 101507.00 137967.33 101507.00 137989.00 101507.00C138010.33 101496.33 138031.67 101485.67 138053.00 101475.00C138053.00 101464.33 138053.00 101453.67 138053.00 101443.00C138063.67 101432.33 138074.33 101421.67 138085.00 101411.00C138085.00 101389.67 138085.00 101368.33 138085.00 101347.00C138074.33 101336.33 138063.67 101325.67 138053.00 101315.00C138053.00 101304.00 138053.00 101293.00 138053.00 101282.00C138063.67 101260.67 138074.33 101239.33 138085.00 101218.00C138106.33 101207.33 138127.67 101196.67 138149.00 101186.00C138149.00 101164.67 138149.00 101143.33 138149.00 101122.00C138170.67 101111.00 138192.33 101100.00 138214.00 101089.00C138214.00 101067.67 138214.00 101046.33 138214.00 101025.00C138278.33 100960.67 138342.67 100896.33 138407.00 100832.00C138407.00 100767.67 138407.00 100703.33 138407.00 100639.00C138417.67 100628.33 138428.33 100617.67 138439.00 100607.00C138439.00 100532.00 138439.00 100457.00 138439.00 100382.00C138406.67 100371.33 138374.33 100360.67 138342.00 100350.00C138331.33 100328.67 138320.67 100307.33 138310.00 100286.00C138288.67 100286.00 138267.33 100286.00 138246.00 100286.00C138256.67 100243.00 138267.33 100200.00 138278.00 100157.00C138245.67 100125.00 138213.33 100093.00 138181.00 100061.00C138159.67 100061.00 138138.33 100061.00 138117.00 100061.00C138117.10 100049.85 138116.80 100038.70 138117.15 100027.56C138127.75 99995.70 138138.38 99963.85 138149.00 99932.00C138127.67 99899.66 138106.33 99867.34 138085.00 99835.00C138074.33 99835.00 138063.67 99835.00 138053.00 99835.00C138053.00 99824.33 138053.00 99813.67 138053.00 99803.00C138095.67 99781.67 138138.33 99760.33 138181.00 99739.00C138181.00 99728.33 138181.00 99717.67 138181.00 99707.00C138202.92 99685.93 138224.59 99664.60 138246.00 99643.00C138246.00 99535.67 138246.00 99428.33 138246.00 99321.00C138256.67 99321.00 138267.33 99321.00 138278.00 99321.00C138278.00 99278.00 138278.00 99235.00 138278.00 99192.00C138267.33 99192.00 138256.67 99192.00 138246.00 99192.00C138213.61 99160.06 138181.06 99128.28 138149.00 99096.00C138159.67 99085.34 138170.33 99074.66 138181.00 99064.00C138181.00 99042.33 138181.00 99020.67 138181.00 98999.00C138202.67 98999.00 138224.33 98999.00 138246.00 98999.00C138246.00 98988.33 138246.00 98977.67 138246.00 98967.00C138246.00 98977.67 138246.00 98988.33 138246.00 98999.00C138256.67 98999.00 138267.33 98999.00 138278.00 98999.00C138299.33 98988.33 138320.67 98977.67 138342.00 98967.00C138342.00 98945.67 138342.00 98924.33 138342.00 98903.00C138331.33 98892.34 138320.67 98881.66 138310.00 98871.00C138331.33 98849.66 138352.67 98828.34 138374.00 98807.00C138374.00 98796.00 138374.00 98785.00 138374.00 98774.00C138342.00 98742.00 138310.00 98710.00 138278.00 98678.00C138299.33 98667.33 138320.67 98656.67 138342.00 98646.00C138352.67 98613.67 138363.33 98581.33 138374.00 98549.00C138363.33 98538.34 138352.67 98527.66 138342.00 98517.00C138331.33 98517.00 138320.67 98517.00 138310.00 98517.00C138320.67 98517.00 138331.33 98517.00 138342.00 98517.00C138342.00 98506.33 138342.00 98495.67 138342.00 98485.00C138331.33 98474.34 138320.67 98463.66 138310.00 98453.00C138320.67 98453.00 138331.33 98453.00 138342.00 98453.00C138331.33 98431.67 138320.67 98410.33 138310.00 98389.00C138331.33 98399.67 138352.67 98410.33 138374.00 98421.00C138385.00 98410.33 138396.00 98399.67 138407.00 98389.00C138364.00 98346.00 138321.00 98303.00 138278.00 98260.00C138288.67 98249.34 138299.33 98238.66 138310.00 98228.00C138299.33 98228.00 138288.67 98228.00 138278.00 98228.00C138288.67 98217.34 138299.33 98206.66 138310.00 98196.00C138310.00 98174.33 138310.00 98152.67 138310.00 98131.00C138278.00 98099.00 138246.00 98067.00 138214.00 98035.00C138224.81 98013.58 138235.30 97991.99 138246.32 97970.67C138256.89 97959.78 138267.44 97948.89 138278.00 97938.00C138278.00 97916.67 138278.00 97895.33 138278.00 97874.00C138267.33 97863.34 138256.67 97852.66 138246.00 97842.00C138246.00 97831.33 138246.00 97820.67 138246.00 97810.00C138235.33 97810.00 138224.67 97810.00 138214.00 97810.00C138214.00 97799.33 138214.00 97788.67 138214.00 97778.00C138224.67 97767.34 138235.33 97756.66 138246.00 97746.00C138267.33 97778.00 138288.67 97810.00 138310.00 97842.00C138342.33 97852.67 138374.67 97863.33 138407.00 97874.00C138417.67 97863.34 138428.33 97852.66 138439.00 97842.00C138449.67 97842.00 138460.33 97842.00 138471.00 97842.00C138492.33 97820.66 138513.67 97799.34 138535.00 97778.00C138556.67 97778.00 138578.33 97778.00 138600.00 97778.00C138610.67 97767.34 138621.33 97756.66 138632.00 97746.00C138632.00 97713.67 138632.00 97681.33 138632.00 97649.00C138653.33 97627.66 138674.67 97606.34 138696.00 97585.00C138696.00 97574.33 138696.00 97563.67 138696.00 97553.00C138706.67 97531.34 138717.33 97509.66 138728.00 97488.00C138717.33 97477.34 138706.67 97466.66 138696.00 97456.00C138674.67 97456.00 138653.33 97456.00 138632.00 97456.00C138610.33 97445.33 138588.67 97434.67 138567.00 97424.00C138556.19 97402.58 138545.70 97380.99 138534.68 97359.67C138524.11 97348.78 138513.56 97337.89 138503.00 97327.00C138492.33 97263.00 138481.67 97199.00 138471.00 97135.00C138449.67 97124.00 138428.33 97113.00 138407.00 97102.00C138374.67 97102.00 138342.33 97102.00 138310.00 97102.00C138320.67 97080.67 138331.33 97059.33 138342.00 97038.00C138331.33 97027.34 138320.67 97016.66 138310.00 97006.00C138288.67 97006.00 138267.33 97006.00 138246.00 97006.00C138235.33 97016.66 138224.67 97027.34 138214.00 97038.00C138203.00 97038.00 138192.00 97038.00 138181.00 97038.00C138181.00 97027.33 138181.00 97016.67 138181.00 97006.00C138170.33 96984.67 138159.67 96963.33 138149.00 96942.00C138127.67 96942.00 138106.33 96942.00 138085.00 96942.00C138053.00 96920.33 138021.00 96898.67 137989.00 96877.00C138010.33 96834.33 138031.67 96791.67 138053.00 96749.00C138031.67 96727.33 138010.33 96705.67 137989.00 96684.00C137946.10 96705.87 137903.11 96727.54 137860.00 96749.00C137849.33 96749.00 137838.67 96749.00 137828.00 96749.00C137828.00 96727.33 137828.00 96705.67 137828.00 96684.00C137795.67 96684.00 137763.33 96684.00 137731.00 96684.00C137742.00 96652.00 137753.00 96620.00 137764.00 96588.00C137753.00 96566.67 137742.00 96545.33 137731.00 96524.00C137709.67 96513.00 137688.33 96502.00 137667.00 96491.00C137635.00 96502.00 137603.00 96513.00 137571.00 96524.00C137517.33 96513.00 137463.67 96502.00 137410.00 96491.00C137388.33 96480.33 137366.67 96469.67 137345.00 96459.00C137345.00 96416.33 137345.00 96373.67 137345.00 96331.00C137323.67 96331.00 137302.33 96331.00 137281.00 96331.00C137249.00 96309.33 137217.00 96287.67 137185.00 96266.00C137152.67 96266.00 137120.33 96266.00 137088.00 96266.00C137066.67 96255.33 137045.33 96244.67 137024.00 96234.00C137045.33 96212.66 137066.67 96191.34 137088.00 96170.00C137098.67 96180.66 137109.33 96191.34 137120.00 96202.00C137131.00 96202.00 137142.00 96202.00 137153.00 96202.00C137174.33 96170.00 137195.67 96138.00 137217.00 96106.00C137206.33 96084.34 137195.67 96062.66 137185.00 96041.00C137163.33 96041.00 137141.67 96041.00 137120.00 96041.00C137152.33 96019.66 137184.67 95998.34 137217.00 95977.00C137238.33 95934.00 137259.67 95891.00 137281.00 95848.00C137291.67 95837.34 137302.33 95826.66 137313.00 95816.00C137291.67 95794.66 137270.33 95773.34 137249.00 95752.00C137259.67 95720.00 137270.33 95688.00 137281.00 95656.00C137270.16 95644.97 137259.61 95633.65 137248.59 95622.79C137225.67 95611.04 137202.24 95600.23 137179.67 95587.82C137127.78 95556.88 137075.89 95525.94 137024.00 95495.00C137034.67 95462.67 137045.33 95430.33 137056.00 95398.00C137056.00 95355.33 137056.00 95312.67 137056.00 95270.00C137099.00 95195.00 137142.00 95120.00 137185.00 95045.00C137185.00 95023.33 137185.00 95001.67 137185.00 94980.00C137163.33 94958.67 137141.67 94937.33 137120.00 94916.00C137088.00 94916.00 137056.00 94916.00 137024.00 94916.00C137024.00 94905.33 137024.00 94894.67 137024.00 94884.00C137034.67 94862.67 137045.33 94841.33 137056.00 94820.00C137024.00 94798.33 136992.00 94776.67 136960.00 94755.00C136970.67 94744.34 136981.33 94733.66 136992.00 94723.00C137067.00 94701.67 137142.00 94680.33 137217.00 94659.00C137227.67 94648.34 137238.33 94637.66 137249.00 94627.00C137227.67 94584.00 137206.33 94541.00 137185.00 94498.00C137152.67 94508.67 137120.33 94519.33 137088.00 94530.00C137066.67 94519.33 137045.33 94508.67 137024.00 94498.00C137024.00 94487.33 137024.00 94476.67 137024.00 94466.00C137067.00 94433.67 137110.00 94401.33 137153.00 94369.00C137163.67 94369.00 137174.33 94369.00 137185.00 94369.00C137185.00 94358.33 137185.00 94347.67 137185.00 94337.00C137174.16 94326.30 137163.60 94315.31 137152.58 94304.79C137131.06 94294.19 137109.53 94283.60 137088.00 94273.00C137077.33 94262.34 137066.67 94251.66 137056.00 94241.00C137066.79 94229.77 137078.58 94219.33 137088.72 94207.58C137110.15 94165.06 137131.57 94122.53 137153.00 94080.00C137174.33 94058.66 137195.67 94037.34 137217.00 94016.00C137227.67 94016.00 137238.33 94016.00 137249.00 94016.00C137259.67 93994.34 137270.33 93972.66 137281.00 93951.00C137324.00 93929.67 137367.00 93908.33 137410.00 93887.00C137452.67 93844.00 137495.33 93801.00 137538.00 93758.00C137495.33 93715.34 137452.67 93672.66 137410.00 93630.00C137367.00 93640.67 137324.00 93651.33 137281.00 93662.00C137270.33 93651.34 137259.67 93640.66 137249.00 93630.00C137238.33 93640.66 137227.67 93651.34 137217.00 93662.00C137206.22 93650.77 137194.43 93640.33 137184.29 93628.59C137173.86 93607.73 137163.43 93586.86 137153.00 93566.00C137163.67 93544.34 137174.33 93522.66 137185.00 93501.00C137174.33 93479.67 137163.67 93458.33 137153.00 93437.00C137174.33 93415.66 137195.67 93394.34 137217.00 93373.00C137227.67 93351.34 137238.33 93329.66 137249.00 93308.00C137249.00 93286.67 137249.00 93265.33 137249.00 93244.00C137238.33 93244.00 137227.67 93244.00 137217.00 93244.00C137217.00 93233.33 137217.00 93222.67 137217.00 93212.00C137249.00 93201.33 137281.00 93190.67 137313.00 93180.00C137313.00 93169.33 137313.00 93158.67 137313.00 93148.00C137291.43 93115.02 137269.32 93082.38 137248.10 93049.18C137237.73 93028.46 137227.37 93007.73 137217.00 92987.00C137195.67 92997.67 137174.33 93008.33 137153.00 93019.00C137153.00 92997.67 137153.00 92976.33 137153.00 92955.00C137185.00 92933.33 137217.00 92911.67 137249.00 92890.00C137259.67 92868.67 137270.33 92847.33 137281.00 92826.00C137378.87 92793.79 137476.59 92761.14 137574.41 92728.78C137605.33 92718.37 137636.11 92707.53 137667.00 92697.00C137677.84 92686.30 137688.40 92675.31 137699.42 92664.79C137720.94 92654.19 137742.47 92643.60 137764.00 92633.00C137785.33 92590.33 137806.67 92547.67 137828.00 92505.00C137857.13 92489.58 137887.13 92475.73 137915.11 92458.22C137961.07 92430.82 138007.04 92403.41 138053.00 92376.00C138063.67 92333.00 138074.33 92290.00 138085.00 92247.00C138085.00 92236.33 138085.00 92225.67 138085.00 92215.00C138073.77 92204.22 138063.34 92192.43 138051.60 92182.30C138030.73 92171.86 138009.87 92161.43 137989.00 92151.00C137934.75 92172.69 137880.32 92193.96 137826.18 92215.91C137805.45 92226.27 137784.73 92236.64 137764.00 92247.00C137742.33 92247.00 137720.67 92247.00 137699.00 92247.00C137687.48 92258.06 137676.82 92270.12 137664.73 92280.52C137601.15 92323.01 137537.58 92365.51 137474.00 92408.00C137420.33 92418.67 137366.67 92429.33 137313.00 92440.00C137291.67 92429.33 137270.33 92418.67 137249.00 92408.00C137217.00 92440.33 137185.00 92472.67 137153.00 92505.00C137110.00 92526.33 137067.00 92547.67 137024.00 92569.00C137002.67 92569.00 136981.33 92569.00 136960.00 92569.00C136949.33 92536.67 136938.67 92504.33 136928.00 92472.00C136928.00 92450.67 136928.00 92429.33 136928.00 92408.00C136917.00 92408.00 136906.00 92408.00 136895.00 92408.00C136863.00 92386.67 136831.00 92365.33 136799.00 92344.00C136820.33 92311.66 136841.67 92279.34 136863.00 92247.00C136863.00 92204.33 136863.00 92161.67 136863.00 92119.00C136820.33 92119.00 136777.67 92119.00 136735.00 92119.00C136735.00 92108.33 136735.00 92097.67 136735.00 92087.00C136745.67 92076.00 136756.33 92065.00 136767.00 92054.00C136777.67 92022.00 136788.33 91990.00 136799.00 91958.00C136799.00 91936.67 136799.00 91915.33 136799.00 91894.00C136820.33 91883.00 136841.67 91872.00 136863.00 91861.00C136863.00 91829.00 136863.00 91797.00 136863.00 91765.00C136852.33 91765.00 136841.67 91765.00 136831.00 91765.00C136820.33 91754.34 136809.67 91743.66 136799.00 91733.00C136820.33 91722.33 136841.67 91711.67 136863.00 91701.00C136852.33 91679.34 136841.67 91657.66 136831.00 91636.00C136852.33 91625.33 136873.67 91614.67 136895.00 91604.00C136895.00 91572.00 136895.00 91540.00 136895.00 91508.00C136884.33 91497.34 136873.67 91486.66 136863.00 91476.00C136852.33 91476.00 136841.67 91476.00 136831.00 91476.00C136809.87 91432.90 136788.54 91389.90 136767.00 91347.00C136799.00 91315.00 136831.00 91283.00 136863.00 91251.00C136884.19 91207.60 136905.68 91164.33 136928.33 91121.67C136938.89 91111.12 136949.44 91100.56 136960.00 91090.00C136960.00 91068.33 136960.00 91046.67 136960.00 91025.00C136970.67 91014.34 136981.33 91003.66 136992.00 90993.00C136992.00 90971.67 136992.00 90950.33 136992.00 90929.00C137024.00 90918.33 137056.00 90907.67 137088.00 90897.00C137098.67 90886.34 137109.33 90875.66 137120.00 90865.00C137141.67 90865.00 137163.33 90865.00 137185.00 90865.00C137206.33 90875.67 137227.67 90886.33 137249.00 90897.00C137259.67 90897.00 137270.33 90897.00 137281.00 90897.00C137291.67 90886.34 137302.33 90875.66 137313.00 90865.00C137323.67 90865.00 137334.33 90865.00 137345.00 90865.00C137356.00 90854.33 137367.00 90843.67 137378.00 90833.00C137410.00 90822.00 137442.00 90811.00 137474.00 90800.00C137484.67 90789.34 137495.33 90778.66 137506.00 90768.00C137527.67 90768.00 137549.33 90768.00 137571.00 90768.00C137592.33 90746.66 137613.67 90725.34 137635.00 90704.00C137656.33 90693.33 137677.67 90682.67 137699.00 90672.00C137720.67 90629.00 137742.33 90586.00 137764.00 90543.00C137764.00 90521.67 137764.00 90500.33 137764.00 90479.00C137720.90 90457.87 137677.90 90436.54 137635.00 90415.00C137560.00 90447.00 137485.00 90479.00 137410.00 90511.00C137388.33 90511.00 137366.67 90511.00 137345.00 90511.00C137313.00 90532.33 137281.00 90553.67 137249.00 90575.00C137173.51 90564.40 137098.07 90553.26 137022.55 90543.00C137012.37 90543.00 137002.18 90543.00 136992.00 90543.00C136981.33 90564.33 136970.67 90585.67 136960.00 90607.00C136927.67 90618.00 136895.33 90629.00 136863.00 90640.00C136873.64 90586.17 136884.51 90532.39 136895.00 90478.54C136895.00 90457.36 136895.00 90436.18 136895.00 90415.00C136916.87 90372.10 136938.54 90329.10 136960.00 90286.00C136938.33 90254.00 136916.67 90222.00 136895.00 90190.00C136927.43 90168.20 136959.99 90146.60 136992.33 90124.67C137013.55 90103.45 137034.78 90082.23 137056.00 90061.00C137045.19 90039.58 137034.70 90017.99 137023.68 89996.67C137002.71 89974.86 136981.49 89953.30 136960.00 89932.00C136960.00 89889.33 136960.00 89846.67 136960.00 89804.00C136970.67 89793.00 136981.33 89782.00 136992.00 89771.00C136992.00 89749.67 136992.00 89728.33 136992.00 89707.00C136981.33 89685.67 136970.67 89664.33 136960.00 89643.00C136981.33 89632.33 137002.67 89621.67 137024.00 89611.00C137024.00 89568.00 137024.00 89525.00 137024.00 89482.00C137012.77 89471.22 137002.34 89459.43 136990.60 89449.30C136969.73 89438.86 136948.87 89428.43 136928.00 89418.00C136928.00 89407.33 136928.00 89396.67 136928.00 89386.00C136917.00 89386.00 136906.00 89386.00 136895.00 89386.00C136916.67 89353.67 136938.33 89321.33 136960.00 89289.00C136981.33 89278.33 137002.67 89267.67 137024.00 89257.00C137045.33 89235.66 137066.67 89214.34 137088.00 89193.00C137077.33 89171.34 137066.67 89149.66 137056.00 89128.00C137034.67 89128.00 137013.33 89128.00 136992.00 89128.00C136992.00 89117.33 136992.00 89106.67 136992.00 89096.00C136970.67 89085.33 136949.33 89074.67 136928.00 89064.00C136949.33 89010.33 136970.67 88956.67 136992.00 88903.00C136981.33 88881.67 136970.67 88860.33 136960.00 88839.00C136981.33 88817.66 137002.67 88796.34 137024.00 88775.00C137034.67 88742.67 137045.33 88710.33 137056.00 88678.00C137066.67 88667.34 137077.33 88656.66 137088.00 88646.00C137098.81 88645.90 137109.63 88646.20 137120.44 88645.85C137154.10 88634.97 137187.51 88623.29 137221.32 88612.92C137262.55 88602.61 137303.77 88592.31 137345.00 88582.00C137409.33 88582.00 137473.67 88582.00 137538.00 88582.00C137549.00 88549.67 137560.00 88517.33 137571.00 88485.00C137560.00 88463.67 137549.00 88442.33 137538.00 88421.00C137549.00 88399.67 137560.00 88378.33 137571.00 88357.00C137560.00 88335.33 137549.00 88313.67 137538.00 88292.00C137504.45 88303.78 137470.56 88314.68 137437.22 88327.04C137363.82 88358.36 137290.41 88389.68 137217.00 88421.00C137174.00 88410.33 137131.00 88399.67 137088.00 88389.00C137088.00 88335.33 137088.00 88281.67 137088.00 88228.00C137098.67 88206.67 137109.33 88185.33 137120.00 88164.00C137120.00 88153.33 137120.00 88142.67 137120.00 88132.00C137109.33 88110.34 137098.67 88088.66 137088.00 88067.00C137066.67 88045.66 137045.33 88024.34 137024.00 88003.00C136992.00 88003.00 136960.00 88003.00 136928.00 88003.00C136917.00 88013.67 136906.00 88024.33 136895.00 88035.00C136884.33 88024.34 136873.67 88013.66 136863.00 88003.00C136863.00 87992.33 136863.00 87981.67 136863.00 87971.00C136873.67 87960.34 136884.33 87949.66 136895.00 87939.00C136895.00 87917.33 136895.00 87895.67 136895.00 87874.00C136906.00 87863.33 136917.00 87852.67 136928.00 87842.00C136917.00 87820.67 136906.00 87799.33 136895.00 87778.00C136863.00 87756.67 136831.00 87735.33 136799.00 87714.00C136788.33 87714.00 136777.67 87714.00 136767.00 87714.00C136745.33 87703.33 136723.67 87692.67 136702.00 87682.00C136691.33 87660.34 136680.67 87638.66 136670.00 87617.00C136659.33 87627.66 136648.67 87638.34 136638.00 87649.00C136627.33 87638.34 136616.67 87627.66 136606.00 87617.00C136616.67 87606.34 136627.33 87595.66 136638.00 87585.00C136638.00 87563.67 136638.00 87542.33 136638.00 87521.00C136681.00 87510.33 136724.00 87499.67 136767.00 87489.00C136767.00 87478.00 136767.00 87467.00 136767.00 87456.00C136756.19 87455.90 136745.37 87456.20 136734.56 87455.85C136702.37 87445.24 136670.19 87434.62 136638.00 87424.00C136627.19 87423.90 136616.37 87424.20 136605.56 87423.85C136573.37 87413.24 136541.19 87402.62 136509.00 87392.00C136520.15 87370.58 136530.97 87348.98 136542.33 87327.67C136552.89 87317.12 136563.44 87306.56 136574.00 87296.00C136552.33 87263.67 136530.67 87231.33 136509.00 87199.00C136498.33 87199.00 136487.67 87199.00 136477.00 87199.00C136498.67 87188.33 136520.33 87177.67 136542.00 87167.00C136552.67 87135.00 136563.33 87103.00 136574.00 87071.00C136563.33 87060.00 136552.67 87049.00 136542.00 87038.00C136542.00 87016.67 136542.00 86995.33 136542.00 86974.00C136509.67 86963.33 136477.33 86952.67 136445.00 86942.00C136455.67 86931.34 136466.33 86920.66 136477.00 86910.00C136477.00 86888.67 136477.00 86867.33 136477.00 86846.00C136466.33 86835.00 136455.67 86824.00 136445.00 86813.00C136466.33 86802.33 136487.67 86791.67 136509.00 86781.00C136509.10 86770.19 136508.80 86759.37 136509.15 86748.56C136520.09 86716.71 136531.05 86684.85 136542.00 86653.00C136542.00 86631.33 136542.00 86609.67 136542.00 86588.00C136552.67 86566.67 136563.33 86545.33 136574.00 86524.00C136563.33 86502.67 136552.67 86481.33 136542.00 86460.00C136520.33 86449.33 136498.67 86438.67 136477.00 86428.00C136477.00 86417.00 136477.00 86406.00 136477.00 86395.00C136466.33 86373.67 136455.67 86352.33 136445.00 86331.00C136466.33 86320.33 136487.67 86309.67 136509.00 86299.00C136498.33 86288.34 136487.67 86277.66 136477.00 86267.00C136477.00 86256.33 136477.00 86245.67 136477.00 86235.00C136455.67 86213.33 136434.33 86191.67 136413.00 86170.00C136413.00 86148.67 136413.00 86127.33 136413.00 86106.00C136434.33 86095.33 136455.67 86084.67 136477.00 86074.00C136487.67 86074.00 136498.33 86074.00 136509.00 86074.00C136509.00 86052.67 136509.00 86031.33 136509.00 86010.00C136541.33 85977.66 136573.67 85945.34 136606.00 85913.00C136627.33 85902.33 136648.67 85891.67 136670.00 85881.00C136680.79 85869.77 136692.58 85859.32 136702.72 85847.58C136713.49 85826.39 136724.24 85805.19 136735.00 85784.00C136777.67 85773.33 136820.33 85762.67 136863.00 85752.00C136885.46 85751.75 136907.98 85752.51 136930.40 85751.60C136993.60 85741.06 137056.80 85730.53 137120.00 85720.00C137173.67 85698.67 137227.33 85677.33 137281.00 85656.00C137313.33 85656.00 137345.67 85656.00 137378.00 85656.00C137410.00 85623.67 137442.00 85591.33 137474.00 85559.00C137474.00 85537.67 137474.00 85516.33 137474.00 85495.00C137463.33 85473.67 137452.67 85452.33 137442.00 85431.00C137409.67 85431.00 137377.33 85431.00 137345.00 85431.00C137323.67 85452.34 137302.33 85473.66 137281.00 85495.00C137238.33 85505.67 137195.67 85516.33 137153.00 85527.00C137109.90 85505.87 137066.90 85484.54 137024.00 85463.00C136992.00 85452.33 136960.00 85441.67 136928.00 85431.00C136885.00 85452.33 136842.00 85473.67 136799.00 85495.00C136777.67 85495.00 136756.33 85495.00 136735.00 85495.00C136702.61 85463.06 136670.06 85431.28 136638.00 85399.00C136616.67 85409.67 136595.33 85420.33 136574.00 85431.00C136552.33 85398.67 136530.67 85366.33 136509.00 85334.00C136520.00 85312.67 136531.00 85291.33 136542.00 85270.00C136531.00 85248.67 136520.00 85227.33 136509.00 85206.00C136520.00 85195.33 136531.00 85184.67 136542.00 85174.00C136563.33 85184.67 136584.67 85195.33 136606.00 85206.00C136616.67 85195.34 136627.33 85184.66 136638.00 85174.00C136638.00 85152.33 136638.00 85130.67 136638.00 85109.00C136659.33 85098.33 136680.67 85087.67 136702.00 85077.00C136713.00 85055.67 136724.00 85034.33 136735.00 85013.00C136724.00 85002.33 136713.00 84991.67 136702.00 84981.00C136702.00 84970.33 136702.00 84959.67 136702.00 84949.00C136723.67 84938.00 136745.33 84927.00 136767.00 84916.00C136767.00 84905.33 136767.00 84894.67 136767.00 84884.00C136745.33 84873.33 136723.67 84862.67 136702.00 84852.00C136680.67 84830.66 136659.33 84809.34 136638.00 84788.00C136606.00 84798.67 136574.00 84809.33 136542.00 84820.00C136531.00 84809.33 136520.00 84798.67 136509.00 84788.00C136532.95 84776.54 136556.39 84763.97 136580.70 84753.30C136632.13 84732.53 136683.57 84711.77 136735.00 84691.00C136767.00 84637.67 136799.00 84584.33 136831.00 84531.00C136852.33 84520.00 136873.67 84509.00 136895.00 84498.00C136894.90 84476.52 136895.20 84455.04 136894.85 84433.56C136884.25 84401.70 136873.62 84369.85 136863.00 84338.00C136852.21 84326.44 136840.46 84315.63 136830.29 84303.59C136819.86 84282.73 136809.43 84261.86 136799.00 84241.00C136799.00 84219.67 136799.00 84198.33 136799.00 84177.00C136820.33 84166.33 136841.67 84155.67 136863.00 84145.00C136884.67 84155.67 136906.33 84166.33 136928.00 84177.00C136949.33 84166.33 136970.67 84155.67 136992.00 84145.00C137024.00 84145.00 137056.00 84145.00 137088.00 84145.00C137141.82 84177.04 137195.55 84209.24 137249.43 84241.17C137302.95 84262.45 137356.48 84283.72 137410.00 84305.00C137431.33 84294.33 137452.67 84283.67 137474.00 84273.00C137506.33 84283.67 137538.67 84294.33 137571.00 84305.00C137603.16 84294.34 137635.25 84283.46 137667.46 84272.93C137742.31 84262.29 137817.15 84251.65 137892.00 84241.00C137892.00 84209.00 137892.00 84177.00 137892.00 84145.00C137881.33 84134.34 137870.67 84123.66 137860.00 84113.00C137849.19 84112.90 137838.37 84113.20 137827.56 84112.85C137795.37 84101.90 137763.19 84090.95 137731.00 84080.00C137720.33 84069.34 137709.67 84058.66 137699.00 84048.00C137677.67 84058.67 137656.33 84069.33 137635.00 84080.00C137602.67 84080.00 137570.33 84080.00 137538.00 84080.00C137527.33 84058.67 137516.67 84037.33 137506.00 84016.00C137484.67 84026.67 137463.33 84037.33 137442.00 84048.00C137431.33 84058.66 137420.67 84069.34 137410.00 84080.00C137366.90 84058.87 137323.90 84037.54 137281.00 84016.00C137270.33 83994.67 137259.67 83973.33 137249.00 83952.00C137249.00 83941.33 137249.00 83930.67 137249.00 83920.00C137227.67 83898.33 137206.33 83876.67 137185.00 83855.00C137163.33 83855.00 137141.67 83855.00 137120.00 83855.00C137098.67 83844.33 137077.33 83833.67 137056.00 83823.00C137045.19 83822.90 137034.37 83823.20 137023.56 83822.85C136991.26 83811.94 136958.75 83801.55 136926.58 83790.30C136884.05 83769.19 136841.53 83748.10 136799.00 83727.00C136745.33 83737.67 136691.67 83748.33 136638.00 83759.00C136616.67 83748.33 136595.33 83737.67 136574.00 83727.00C136531.00 83727.00 136488.00 83727.00 136445.00 83727.00C136423.67 83737.67 136402.33 83748.33 136381.00 83759.00C136370.33 83759.00 136359.67 83759.00 136349.00 83759.00C136338.21 83747.77 136326.42 83737.32 136316.28 83725.58C136305.51 83704.39 136294.76 83683.19 136284.00 83662.00C136252.00 83651.33 136220.00 83640.67 136188.00 83630.00C136134.33 83630.00 136080.67 83630.00 136027.00 83630.00C136016.33 83608.67 136005.67 83587.33 135995.00 83566.00C135963.00 83555.33 135931.00 83544.67 135899.00 83534.00C135876.82 83512.66 135854.73 83491.18 135833.85 83468.56C135823.25 83436.70 135812.62 83404.85 135802.00 83373.00C135802.00 83308.67 135802.00 83244.33 135802.00 83180.00C135770.00 83158.67 135738.00 83137.33 135706.00 83116.00C135706.00 83062.33 135706.00 83008.67 135706.00 82955.00C135684.33 82944.33 135662.67 82933.67 135641.00 82923.00C135630.19 82922.90 135619.37 82923.20 135608.56 82922.85C135576.71 82912.24 135544.85 82901.62 135513.00 82891.00C135491.33 82858.67 135469.67 82826.33 135448.00 82794.00C135437.33 82751.33 135426.67 82708.67 135416.00 82666.00C135416.00 82644.33 135416.00 82622.67 135416.00 82601.00z"},"br-18":{"name":"Piauí","path":"M138535.00 77489.00C138524.33 77424.67 138513.67 77360.33 138503.00 77296.00C138513.67 77274.67 138524.33 77253.33 138535.00 77232.00C138535.00 77210.33 138535.00 77188.67 138535.00 77167.00C138567.33 77167.00 138599.67 77167.00 138632.00 77167.00C138642.67 77135.00 138653.33 77103.00 138664.00 77071.00C138674.67 77060.34 138685.33 77049.66 138696.00 77039.00C138696.00 77028.33 138696.00 77017.67 138696.00 77007.00C138717.33 76996.00 138738.67 76985.00 138760.00 76974.00C138778.42 76918.57 138796.86 76863.14 138816.07 76807.97C138819.05 76799.32 138822.02 76790.66 138825.00 76782.00C138835.67 76771.00 138846.33 76760.00 138857.00 76749.00C138878.33 76685.00 138899.67 76621.00 138921.00 76557.00C138899.67 76535.33 138878.33 76513.67 138857.00 76492.00C138867.67 76492.00 138878.33 76492.00 138889.00 76492.00C138889.06 76470.56 138888.89 76449.11 138889.08 76427.67C138899.72 76384.78 138910.36 76341.89 138921.00 76299.00C138921.00 76288.33 138921.00 76277.67 138921.00 76267.00C138942.33 76245.66 138963.67 76224.34 138985.00 76203.00C138985.00 76181.33 138985.00 76159.67 138985.00 76138.00C138995.67 76106.00 139006.33 76074.00 139017.00 76042.00C139017.00 76031.33 139017.00 76020.67 139017.00 76010.00C139028.00 75988.67 139039.00 75967.33 139050.00 75946.00C139039.00 75913.67 139028.00 75881.33 139017.00 75849.00C138995.67 75827.66 138974.33 75806.34 138953.00 75785.00C138953.00 75731.33 138953.00 75677.67 138953.00 75624.00C138942.33 75613.34 138931.67 75602.66 138921.00 75592.00C138921.00 75581.33 138921.00 75570.67 138921.00 75560.00C138942.33 75527.66 138963.67 75495.34 138985.00 75463.00C138985.21 75451.90 138984.57 75440.72 138985.33 75429.67C138995.89 75387.45 139006.44 75345.22 139017.00 75303.00C139017.00 75292.00 139017.00 75281.00 139017.00 75270.00C139028.13 75259.30 139039.06 75248.41 139050.31 75237.85C139071.54 75227.23 139092.77 75216.62 139114.00 75206.00C139124.67 75174.00 139135.33 75142.00 139146.00 75110.00C139146.00 75088.33 139146.00 75066.67 139146.00 75045.00C139135.33 75023.67 139124.67 75002.33 139114.00 74981.00C139124.67 74970.34 139135.33 74959.66 139146.00 74949.00C139135.33 74927.67 139124.67 74906.33 139114.00 74885.00C139114.00 74874.00 139114.00 74863.00 139114.00 74852.00C139103.33 74841.34 139092.67 74830.66 139082.00 74820.00C139092.67 74809.34 139103.33 74798.66 139114.00 74788.00C139092.67 74777.33 139071.33 74766.67 139050.00 74756.00C139071.33 74723.66 139092.67 74691.34 139114.00 74659.00C139103.33 74616.33 139092.67 74573.67 139082.00 74531.00C139092.67 74498.67 139103.33 74466.33 139114.00 74434.00C139114.00 74423.33 139114.00 74412.67 139114.00 74402.00C139124.67 74402.00 139135.33 74402.00 139146.00 74402.00C139146.00 74391.33 139146.00 74380.67 139146.00 74370.00C139135.33 74348.67 139124.67 74327.33 139114.00 74306.00C139092.41 74284.59 139071.07 74262.93 139050.00 74241.00C139060.67 74230.34 139071.33 74219.66 139082.00 74209.00C139071.33 74187.67 139060.67 74166.33 139050.00 74145.00C139050.00 74123.67 139050.00 74102.33 139050.00 74081.00C139071.33 74059.33 139092.67 74037.67 139114.00 74016.00C139103.33 73994.67 139092.67 73973.33 139082.00 73952.00C139103.33 73941.33 139124.67 73930.67 139146.00 73920.00C139146.23 73908.99 139145.54 73897.86 139146.36 73886.92C139156.91 73854.95 139167.45 73822.97 139178.00 73791.00C139199.67 73780.33 139221.33 73769.67 139243.00 73759.00C139243.00 73748.33 139243.00 73737.67 139243.00 73727.00C139264.33 73716.33 139285.67 73705.67 139307.00 73695.00C139296.33 73673.67 139285.67 73652.33 139275.00 73631.00C139285.67 73620.00 139296.33 73609.00 139307.00 73598.00C139296.33 73598.00 139285.67 73598.00 139275.00 73598.00C139285.67 73587.34 139296.33 73576.66 139307.00 73566.00C139296.33 73555.34 139285.67 73544.66 139275.00 73534.00C139275.00 73523.33 139275.00 73512.67 139275.00 73502.00C139264.33 73502.00 139253.67 73502.00 139243.00 73502.00C139253.67 73491.34 139264.33 73480.66 139275.00 73470.00C139264.33 73470.00 139253.67 73470.00 139243.00 73470.00C139243.00 73437.67 139243.00 73405.33 139243.00 73373.00C139210.67 73330.33 139178.33 73287.67 139146.00 73245.00C139135.33 73223.34 139124.67 73201.66 139114.00 73180.00C139081.79 73147.87 139049.88 73115.45 139017.00 73084.00C138995.67 73084.00 138974.33 73084.00 138953.00 73084.00C138931.67 73073.33 138910.33 73062.67 138889.00 73052.00C138878.33 73041.34 138867.67 73030.66 138857.00 73020.00C138846.33 73030.66 138835.67 73041.34 138825.00 73052.00C138814.00 73041.33 138803.00 73030.67 138792.00 73020.00C138803.00 72998.33 138814.00 72976.67 138825.00 72955.00C138814.00 72955.00 138803.00 72955.00 138792.00 72955.00C138792.00 72933.67 138792.00 72912.33 138792.00 72891.00C138781.33 72891.00 138770.67 72891.00 138760.00 72891.00C138760.00 72880.33 138760.00 72869.67 138760.00 72859.00C138749.33 72837.67 138738.67 72816.33 138728.00 72795.00C138728.00 72784.00 138728.00 72773.00 138728.00 72762.00C138749.33 72762.00 138770.67 72762.00 138792.00 72762.00C138792.00 72740.67 138792.00 72719.33 138792.00 72698.00C138781.33 72676.67 138770.67 72655.33 138760.00 72634.00C138760.00 72612.67 138760.00 72591.33 138760.00 72570.00C138770.67 72537.67 138781.33 72505.33 138792.00 72473.00C138781.33 72473.00 138770.67 72473.00 138760.00 72473.00C138760.00 72441.00 138760.00 72409.00 138760.00 72377.00C138749.33 72344.67 138738.67 72312.33 138728.00 72280.00C138738.67 72280.00 138749.33 72280.00 138760.00 72280.00C138770.67 72269.34 138781.33 72258.66 138792.00 72248.00C138759.87 72215.79 138727.45 72183.88 138696.00 72151.00C138685.33 72119.00 138674.67 72087.00 138664.00 72055.00C138653.33 72044.34 138642.67 72033.66 138632.00 72023.00C138632.00 71958.67 138632.00 71894.33 138632.00 71830.00C138642.67 71830.00 138653.33 71830.00 138664.00 71830.00C138664.00 71808.67 138664.00 71787.33 138664.00 71766.00C138653.33 71766.00 138642.67 71766.00 138632.00 71766.00C138632.00 71733.67 138632.00 71701.33 138632.00 71669.00C138610.59 71647.41 138588.93 71626.06 138567.00 71605.00C138578.00 71583.67 138589.00 71562.33 138600.00 71541.00C138589.00 71519.33 138578.00 71497.67 138567.00 71476.00C138567.00 71454.67 138567.00 71433.33 138567.00 71412.00C138535.00 71390.67 138503.00 71369.33 138471.00 71348.00C138460.33 71315.67 138449.67 71283.33 138439.00 71251.00C138417.33 71229.67 138395.67 71208.33 138374.00 71187.00C138373.77 71175.99 138374.46 71164.86 138373.64 71153.92C138363.03 71121.85 138352.54 71089.74 138341.85 71057.69C138331.24 71036.46 138320.62 71015.23 138310.00 70994.00C138331.33 70972.66 138352.67 70951.34 138374.00 70930.00C138374.00 70876.33 138374.00 70822.67 138374.00 70769.00C138395.67 70758.33 138417.33 70747.67 138439.00 70737.00C138428.33 70726.34 138417.67 70715.66 138407.00 70705.00C138417.69 70693.87 138428.59 70682.94 138439.15 70671.69C138449.76 70650.46 138460.38 70629.23 138471.00 70608.00C138481.67 70597.34 138492.33 70586.66 138503.00 70576.00C138513.67 70576.00 138524.33 70576.00 138535.00 70576.00C138545.67 70565.34 138556.33 70554.66 138567.00 70544.00C138567.00 70533.33 138567.00 70522.67 138567.00 70512.00C138545.67 70501.00 138524.33 70490.00 138503.00 70479.00C138492.33 70468.34 138481.67 70457.66 138471.00 70447.00C138481.67 70425.67 138492.33 70404.33 138503.00 70383.00C138524.33 70372.33 138545.67 70361.67 138567.00 70351.00C138578.00 70329.67 138589.00 70308.33 138600.00 70287.00C138600.00 70276.00 138600.00 70265.00 138600.00 70254.00C138610.67 70254.00 138621.33 70254.00 138632.00 70254.00C138664.00 70222.00 138696.00 70190.00 138728.00 70158.00C138749.33 70168.67 138770.67 70179.33 138792.00 70190.00C138803.00 70147.33 138814.00 70104.67 138825.00 70062.00C138846.33 70051.00 138867.67 70040.00 138889.00 70029.00C138910.33 70029.00 138931.67 70029.00 138953.00 70029.00C138942.33 70007.67 138931.67 69986.33 138921.00 69965.00C138942.33 69954.33 138963.67 69943.67 138985.00 69933.00C139006.67 69933.00 139028.33 69933.00 139050.00 69933.00C139082.00 69858.00 139114.00 69783.00 139146.00 69708.00C139156.67 69697.34 139167.33 69686.66 139178.00 69676.00C139167.33 69665.00 139156.67 69654.00 139146.00 69643.00C139156.73 69610.90 139167.35 69578.77 139178.15 69546.69C139188.76 69525.46 139199.38 69504.23 139210.00 69483.00C139221.00 69483.00 139232.00 69483.00 139243.00 69483.00C139243.00 69472.33 139243.00 69461.67 139243.00 69451.00C139275.00 69461.67 139307.00 69472.33 139339.00 69483.00C139360.33 69461.33 139381.67 69439.67 139403.00 69418.00C139360.33 69396.67 139317.67 69375.33 139275.00 69354.00C139275.00 69343.33 139275.00 69332.67 139275.00 69322.00C139317.88 69289.70 139361.03 69257.74 139403.74 69225.24C139414.16 69214.50 139424.58 69203.75 139435.00 69193.00C139435.00 69171.67 139435.00 69150.33 139435.00 69129.00C139446.00 69118.33 139457.00 69107.67 139468.00 69097.00C139457.00 69075.67 139446.00 69054.33 139435.00 69033.00C139446.17 69021.61 139457.82 69010.62 139468.69 68998.97C139489.80 68967.31 139510.90 68935.66 139532.00 68904.00C139521.33 68893.34 139510.67 68882.66 139500.00 68872.00C139510.67 68839.67 139521.33 68807.33 139532.00 68775.00C139521.33 68732.33 139510.67 68689.67 139500.00 68647.00C139510.69 68636.21 139521.59 68625.62 139532.15 68614.69C139542.76 68593.13 139553.38 68571.56 139564.00 68550.00C139564.00 68518.00 139564.00 68486.00 139564.00 68454.00C139585.33 68443.33 139606.67 68432.67 139628.00 68422.00C139617.33 68411.34 139606.67 68400.66 139596.00 68390.00C139617.67 68379.00 139639.33 68368.00 139661.00 68357.00C139671.67 68357.00 139682.33 68357.00 139693.00 68357.00C139703.67 68346.34 139714.33 68335.66 139725.00 68325.00C139714.33 68303.67 139703.67 68282.33 139693.00 68261.00C139714.33 68250.33 139735.67 68239.67 139757.00 68229.00C139757.00 68186.00 139757.00 68143.00 139757.00 68100.00C139778.33 68078.66 139799.67 68057.34 139821.00 68036.00C139821.00 68003.67 139821.00 67971.33 139821.00 67939.00C139842.67 67917.67 139864.33 67896.33 139886.00 67875.00C139886.00 67810.67 139886.00 67746.33 139886.00 67682.00C139971.67 67607.00 140057.33 67532.00 140143.00 67457.00C140132.33 67435.67 140121.67 67414.33 140111.00 67393.00C140121.69 67382.21 140132.59 67371.62 140143.15 67360.69C140153.76 67339.13 140164.38 67317.56 140175.00 67296.00C140196.33 67296.00 140217.67 67296.00 140239.00 67296.00C140249.67 67274.67 140260.33 67253.33 140271.00 67232.00C140260.33 67200.00 140249.67 67168.00 140239.00 67136.00C140256.44 67100.49 140273.80 67064.93 140292.19 67029.90C140296.13 67022.27 140300.06 67014.63 140304.00 67007.00C140293.00 66985.67 140282.00 66964.33 140271.00 66943.00C140292.67 66900.00 140314.33 66857.00 140336.00 66814.00C140336.00 66782.00 140336.00 66750.00 140336.00 66718.00C140346.67 66707.00 140357.33 66696.00 140368.00 66685.00C140346.67 66653.00 140325.33 66621.00 140304.00 66589.00C140325.33 66567.66 140346.67 66546.34 140368.00 66525.00C140389.33 66525.00 140410.67 66525.00 140432.00 66525.00C140432.00 66514.33 140432.00 66503.67 140432.00 66493.00C140400.00 66471.33 140368.00 66449.67 140336.00 66428.00C140357.43 66395.93 140378.71 66363.76 140400.24 66331.76C140410.83 66321.18 140421.41 66310.58 140432.00 66300.00C140432.00 66289.00 140432.00 66278.00 140432.00 66267.00C140421.33 66256.34 140410.67 66245.66 140400.00 66235.00C140421.33 66213.66 140442.67 66192.34 140464.00 66171.00C140464.00 66139.00 140464.00 66107.00 140464.00 66075.00C140475.00 66075.00 140486.00 66075.00 140497.00 66075.00C140518.33 66064.00 140539.67 66053.00 140561.00 66042.00C140561.00 66031.33 140561.00 66020.67 140561.00 66010.00C140528.67 65988.66 140496.33 65967.34 140464.00 65946.00C140496.33 65935.33 140528.67 65924.67 140561.00 65914.00C140561.00 65903.33 140561.00 65892.67 140561.00 65882.00C140539.67 65871.00 140518.33 65860.00 140497.00 65849.00C140486.00 65827.67 140475.00 65806.33 140464.00 65785.00C140475.00 65785.00 140486.00 65785.00 140497.00 65785.00C140507.67 65774.34 140518.33 65763.66 140529.00 65753.00C140529.00 65731.67 140529.00 65710.33 140529.00 65689.00C140550.33 65678.33 140571.67 65667.67 140593.00 65657.00C140603.67 65635.34 140614.33 65613.66 140625.00 65592.00C140614.33 65560.00 140603.67 65528.00 140593.00 65496.00C140614.33 65485.33 140635.67 65474.67 140657.00 65464.00C140657.00 65442.33 140657.00 65420.67 140657.00 65399.00C140667.67 65409.67 140678.33 65420.33 140689.00 65431.00C140700.00 65420.33 140711.00 65409.67 140722.00 65399.00C140711.00 65388.33 140700.00 65377.67 140689.00 65367.00C140700.00 65345.67 140711.00 65324.33 140722.00 65303.00C140711.00 65281.67 140700.00 65260.33 140689.00 65239.00C140700.00 65228.00 140711.00 65217.00 140722.00 65206.00C140722.00 65217.00 140722.00 65228.00 140722.00 65239.00C140732.67 65239.00 140743.33 65239.00 140754.00 65239.00C140754.00 65228.00 140754.00 65217.00 140754.00 65206.00C140743.33 65184.67 140732.67 65163.33 140722.00 65142.00C140732.67 65120.67 140743.33 65099.33 140754.00 65078.00C140775.33 65067.33 140796.67 65056.67 140818.00 65046.00C140818.00 65013.67 140818.00 64981.33 140818.00 64949.00C140828.67 64949.00 140839.33 64949.00 140850.00 64949.00C140871.67 64938.33 140893.33 64927.67 140915.00 64917.00C140893.33 64906.33 140871.67 64895.67 140850.00 64885.00C140850.00 64874.33 140850.00 64863.67 140850.00 64853.00C140860.67 64853.00 140871.33 64853.00 140882.00 64853.00C140903.67 64863.67 140925.33 64874.33 140947.00 64885.00C140957.67 64885.00 140968.33 64885.00 140979.00 64885.00C140968.33 64863.67 140957.67 64842.33 140947.00 64821.00C140957.67 64810.00 140968.33 64799.00 140979.00 64788.00C141000.33 64788.00 141021.67 64788.00 141043.00 64788.00C141053.67 64777.33 141064.33 64766.67 141075.00 64756.00C141075.00 64745.33 141075.00 64734.67 141075.00 64724.00C141085.67 64724.00 141096.33 64724.00 141107.00 64724.00C141118.00 64713.33 141129.00 64702.67 141140.00 64692.00C141140.00 64670.67 141140.00 64649.33 141140.00 64628.00C141150.67 64606.33 141161.33 64584.67 141172.00 64563.00C141182.67 64563.00 141193.33 64563.00 141204.00 64563.00C141225.33 64573.67 141246.67 64584.33 141268.00 64595.00C141311.00 64552.33 141354.00 64509.67 141397.00 64467.00C141407.67 64445.67 141418.33 64424.33 141429.00 64403.00C141450.33 64392.00 141471.67 64381.00 141493.00 64370.00C141536.00 64370.00 141579.00 64370.00 141622.00 64370.00C141643.33 64359.33 141664.67 64348.67 141686.00 64338.00C141718.33 64348.67 141750.67 64359.33 141783.00 64370.00C141815.00 64338.00 141847.00 64306.00 141879.00 64274.00C141889.67 64274.00 141900.33 64274.00 141911.00 64274.00C141932.67 64284.67 141954.33 64295.33 141976.00 64306.00C141976.00 64316.67 141976.00 64327.33 141976.00 64338.00C141986.67 64338.00 141997.33 64338.00 142008.00 64338.00C142029.33 64316.67 142050.67 64295.33 142072.00 64274.00C142104.00 64263.33 142136.00 64252.67 142168.00 64242.00C142179.00 64209.67 142190.00 64177.33 142201.00 64145.00C142233.00 64123.67 142265.00 64102.33 142297.00 64081.00C142307.67 64091.67 142318.33 64102.33 142329.00 64113.00C142350.67 64113.00 142372.33 64113.00 142394.00 64113.00C142404.67 64102.33 142415.33 64091.67 142426.00 64081.00C142490.33 64059.67 142554.67 64038.33 142619.00 64017.00C142651.00 64027.67 142683.00 64038.33 142715.00 64049.00C142725.67 64049.00 142736.33 64049.00 142747.00 64049.00C142768.67 64059.67 142790.33 64070.33 142812.00 64081.00C142854.67 64049.00 142897.33 64017.00 142940.00 63985.00C142961.33 63985.00 142982.67 63985.00 143004.00 63985.00C143025.67 63963.33 143047.33 63941.67 143069.00 63920.00C143101.00 63920.00 143133.00 63920.00 143165.00 63920.00C143187.16 63909.24 143209.10 63898.00 143231.39 63887.54C143262.93 63877.02 143294.47 63866.51 143326.00 63856.00C143336.67 63866.67 143347.33 63877.33 143358.00 63888.00C143368.69 63877.21 143379.59 63866.61 143390.15 63855.69C143422.09 63791.29 143455.06 63727.40 143487.00 63663.00C143497.67 63652.33 143508.33 63641.67 143519.00 63631.00C143540.33 63641.67 143561.67 63652.33 143583.00 63663.00C143604.67 63652.33 143626.33 63641.67 143648.00 63631.00C143658.67 63609.67 143669.33 63588.33 143680.00 63567.00C143690.67 63556.00 143701.33 63545.00 143712.00 63534.00C143712.00 63523.33 143712.00 63512.67 143712.00 63502.00C143722.80 63491.31 143733.39 63480.41 143744.31 63469.85C143787.21 63448.57 143830.10 63427.28 143873.00 63406.00C143883.67 63384.67 143894.33 63363.33 143905.00 63342.00C143947.67 63352.67 143990.33 63363.33 144033.00 63374.00C144043.67 63384.67 144054.33 63395.33 144065.00 63406.00C144129.33 63384.67 144193.67 63363.33 144258.00 63342.00C144279.67 63384.67 144301.33 63427.33 144323.00 63470.00C144344.33 63480.67 144365.67 63491.33 144387.00 63502.00C144430.00 63502.00 144473.00 63502.00 144516.00 63502.00C144526.67 63448.67 144537.33 63395.33 144548.00 63342.00C144558.67 63331.00 144569.33 63320.00 144580.00 63309.00C144590.67 63266.33 144601.33 63223.67 144612.00 63181.00C144622.67 63181.00 144633.33 63181.00 144644.00 63181.00C144665.67 63170.33 144687.33 63159.67 144709.00 63149.00C144719.67 63138.00 144730.33 63127.00 144741.00 63116.00C144773.00 63105.33 144805.00 63094.67 144837.00 63084.00C144869.33 63030.33 144901.67 62976.67 144934.00 62923.00C144934.00 62912.33 144934.00 62901.67 144934.00 62891.00C144966.07 62869.57 144998.24 62848.29 145030.24 62826.76C145040.83 62816.18 145051.41 62805.58 145062.00 62795.00C145072.67 62762.67 145083.33 62730.33 145094.00 62698.00C145147.67 62687.33 145201.33 62676.67 145255.00 62666.00C145265.67 62666.00 145276.33 62666.00 145287.00 62666.00C145298.00 62623.33 145309.00 62580.67 145320.00 62538.00C145341.33 62516.33 145362.67 62494.67 145384.00 62473.00C145405.33 62473.00 145426.67 62473.00 145448.00 62473.00C145448.00 62462.33 145448.00 62451.67 145448.00 62441.00C145491.00 62419.67 145534.00 62398.33 145577.00 62377.00C145619.67 62366.33 145662.33 62355.67 145705.00 62345.00C145758.67 62291.33 145812.33 62237.67 145866.00 62184.00C145898.33 62173.33 145930.67 62162.67 145963.00 62152.00C145984.33 62152.00 146005.67 62152.00 146027.00 62152.00C146080.67 62130.33 146134.33 62108.67 146188.00 62087.00C146220.00 62108.67 146252.00 62130.33 146284.00 62152.00C146294.67 62152.00 146305.33 62152.00 146316.00 62152.00C146348.33 62098.33 146380.67 62044.67 146413.00 61991.00C146434.33 61969.67 146455.67 61948.33 146477.00 61927.00C146476.77 61915.99 146477.46 61904.86 146476.64 61893.92C146466.09 61861.95 146455.55 61829.97 146445.00 61798.00C146466.33 61755.33 146487.67 61712.67 146509.00 61670.00C146509.00 61637.67 146509.00 61605.33 146509.00 61573.00C146552.00 61573.00 146595.00 61573.00 146638.00 61573.00C146691.67 61508.67 146745.33 61444.33 146799.00 61380.00C146799.00 61337.00 146799.00 61294.00 146799.00 61251.00C146820.33 61240.33 146841.67 61229.67 146863.00 61219.00C146884.33 61219.00 146905.67 61219.00 146927.00 61219.00C146927.00 61165.67 146927.00 61112.33 146927.00 61059.00C146948.67 61026.67 146970.33 60994.33 146992.00 60962.00C147034.67 60940.67 147077.33 60919.33 147120.00 60898.00C147130.67 60865.67 147141.33 60833.33 147152.00 60801.00C147162.67 60790.33 147173.33 60779.67 147184.00 60769.00C147195.00 60769.00 147206.00 60769.00 147217.00 60769.00C147217.00 60801.33 147217.00 60833.67 147217.00 60866.00C147238.33 60866.00 147259.67 60866.00 147281.00 60866.00C147291.67 60844.33 147302.33 60822.67 147313.00 60801.00C147281.00 60758.33 147249.00 60715.67 147217.00 60673.00C147217.00 60651.33 147217.00 60629.67 147217.00 60608.00C147259.67 60608.00 147302.33 60608.00 147345.00 60608.00C147366.33 60640.33 147387.67 60672.67 147409.00 60705.00C147420.00 60705.00 147431.00 60705.00 147442.00 60705.00C147452.67 60683.67 147463.33 60662.33 147474.00 60641.00C147474.00 60598.00 147474.00 60555.00 147474.00 60512.00C147484.67 60490.67 147495.33 60469.33 147506.00 60448.00C147527.33 60448.00 147548.67 60448.00 147570.00 60448.00C147580.67 60437.00 147591.33 60426.00 147602.00 60415.00C147677.00 60404.33 147752.00 60393.67 147827.00 60383.00C147848.67 60361.67 147870.33 60340.33 147892.00 60319.00C147913.33 60319.00 147934.67 60319.00 147956.00 60319.00C147977.33 60329.67 147998.67 60340.33 148020.00 60351.00C148020.00 60372.33 148020.00 60393.67 148020.00 60415.00C148041.67 60426.00 148063.33 60437.00 148085.00 60448.00C148095.67 60448.00 148106.33 60448.00 148117.00 60448.00C148127.67 60426.33 148138.33 60404.67 148149.00 60383.00C148159.67 60372.33 148170.33 60361.67 148181.00 60351.00C148234.67 60361.67 148288.33 60372.33 148342.00 60383.00C148385.00 60351.00 148428.00 60319.00 148471.00 60287.00C148524.33 60276.33 148577.67 60265.67 148631.00 60255.00C148641.67 60233.33 148652.33 60211.67 148663.00 60190.00C148684.91 60168.92 148706.61 60147.61 148728.00 60126.00C148760.00 60147.33 148792.00 60168.67 148824.00 60190.00C148845.67 60168.67 148867.33 60147.33 148889.00 60126.00C148942.33 60126.00 148995.67 60126.00 149049.00 60126.00C149070.67 60115.33 149092.33 60104.67 149114.00 60094.00C149124.67 60094.00 149135.33 60094.00 149146.00 60094.00C149146.00 60104.67 149146.00 60115.33 149146.00 60126.00C149156.67 60136.67 149167.33 60147.33 149178.00 60158.00C149221.00 60147.33 149264.00 60136.67 149307.00 60126.00C149328.71 60136.74 149350.26 60147.86 149372.08 60158.36C149403.72 60168.90 149435.36 60179.45 149467.00 60190.00C149499.33 60222.33 149531.67 60254.67 149564.00 60287.00C149596.00 60297.67 149628.00 60308.33 149660.00 60319.00C149681.67 60340.33 149703.33 60361.67 149725.00 60383.00C149746.33 60383.00 149767.67 60383.00 149789.00 60383.00C149789.00 60372.33 149789.00 60361.67 149789.00 60351.00C149810.33 60351.00 149831.67 60351.00 149853.00 60351.00C149863.67 60361.67 149874.33 60372.33 149885.00 60383.00C149885.23 60394.01 149884.54 60405.14 149885.36 60416.08C149895.91 60448.05 149906.45 60480.03 149917.00 60512.00C149928.00 60522.67 149939.00 60533.33 149950.00 60544.00C150003.33 60565.33 150056.67 60586.67 150110.00 60608.00C150121.02 60619.13 150132.26 60630.05 150143.15 60641.31C150164.43 60683.87 150185.72 60726.43 150207.00 60769.00C150249.67 60790.67 150292.33 60812.33 150335.00 60834.00C150335.00 60823.00 150335.00 60812.00 150335.00 60801.00C150356.67 60790.33 150378.33 60779.67 150400.00 60769.00C150432.00 60779.67 150464.00 60790.33 150496.00 60801.00C150517.33 60801.00 150538.67 60801.00 150560.00 60801.00C150581.67 60790.33 150603.33 60779.67 150625.00 60769.00C150635.67 60769.00 150646.33 60769.00 150657.00 60769.00C150657.00 60737.00 150657.00 60705.00 150657.00 60673.00C150700.00 60683.67 150743.00 60694.33 150786.00 60705.00C150807.33 60662.00 150828.67 60619.00 150850.00 60576.00C150914.33 60586.67 150978.67 60597.33 151043.00 60608.00C151085.67 60597.33 151128.33 60586.67 151171.00 60576.00C151203.33 60554.67 151235.67 60533.33 151268.00 60512.00C151278.67 60490.67 151289.33 60469.33 151300.00 60448.00C151311.39 60447.78 151322.83 60448.46 151334.18 60447.63C151397.79 60436.75 151461.39 60425.88 151525.00 60415.00C151578.67 60426.00 151632.33 60437.00 151686.00 60448.00C151718.00 60469.33 151750.00 60490.67 151782.00 60512.00C151814.33 60512.00 151846.67 60512.00 151879.00 60512.00C151921.67 60490.67 151964.33 60469.33 152007.00 60448.00C152039.33 60415.67 152071.67 60383.33 152104.00 60351.00C152136.00 60351.00 152168.00 60351.00 152200.00 60351.00C152221.67 60372.33 152243.33 60393.67 152265.00 60415.00C152286.44 60414.94 152307.89 60415.11 152329.33 60414.92C152372.22 60404.28 152415.11 60393.64 152458.00 60383.00C152468.67 60383.00 152479.33 60383.00 152490.00 60383.00C152511.33 60361.67 152532.67 60340.33 152554.00 60319.00C152564.67 60276.00 152575.33 60233.00 152586.00 60190.00C152639.67 60168.67 152693.33 60147.33 152747.00 60126.00C152790.00 60072.33 152833.00 60018.67 152876.00 59965.00C152886.67 59933.00 152897.33 59901.00 152908.00 59869.00C152908.12 59847.31 152907.77 59825.58 152908.18 59803.91C152918.78 59739.94 152929.39 59675.97 152940.00 59612.00C152972.00 59569.00 153004.00 59526.00 153036.00 59483.00C153036.00 59429.33 153036.00 59375.67 153036.00 59322.00C153057.67 59279.33 153079.33 59236.67 153101.00 59194.00C153079.33 59183.33 153057.67 59172.67 153036.00 59162.00C153036.00 59151.00 153036.00 59140.00 153036.00 59129.00C153046.80 59118.31 153057.38 59107.41 153068.31 59096.85C153089.87 59086.23 153111.44 59075.62 153133.00 59065.00C153122.33 59033.00 153111.67 59001.00 153101.00 58969.00C153111.67 58936.67 153122.33 58904.33 153133.00 58872.00C153111.33 58840.00 153089.67 58808.00 153068.00 58776.00C153068.00 58765.33 153068.00 58754.67 153068.00 58744.00C153100.33 58690.33 153132.67 58636.67 153165.00 58583.00C153165.00 58550.67 153165.00 58518.33 153165.00 58486.00C153207.67 58443.33 153250.33 58400.67 153293.00 58358.00C153293.00 58347.33 153293.00 58336.67 153293.00 58326.00C153282.33 58315.00 153271.67 58304.00 153261.00 58293.00C153239.67 58304.00 153218.33 58315.00 153197.00 58326.00C153186.33 58315.00 153175.67 58304.00 153165.00 58293.00C153175.76 58260.43 153186.87 58227.96 153197.42 58195.33C153207.94 58152.89 153218.47 58110.44 153229.00 58068.00C153218.33 58046.67 153207.67 58025.33 153197.00 58004.00C153197.00 57982.67 153197.00 57961.33 153197.00 57940.00C153186.31 57929.21 153175.41 57918.62 153164.85 57907.69C153154.24 57886.13 153143.62 57864.56 153133.00 57843.00C153133.00 57832.33 153133.00 57821.67 153133.00 57811.00C153121.99 57810.77 153110.86 57811.46 153099.92 57810.64C153035.89 57789.58 152971.92 57768.37 152908.00 57747.00C152875.67 57704.00 152843.33 57661.00 152811.00 57618.00C152779.00 57618.00 152747.00 57618.00 152715.00 57618.00C152682.61 57586.06 152650.06 57554.28 152618.00 57522.00C152607.33 57457.67 152596.67 57393.33 152586.00 57329.00C152586.00 57318.33 152586.00 57307.67 152586.00 57297.00C152545.83 57277.03 152505.75 57256.88 152465.99 57236.12C152460.33 57231.86 152453.72 57231.52 152446.91 57232.00C152407.61 57232.00 152368.30 57232.00 152329.00 57232.00C152307.67 57210.67 152286.33 57189.33 152265.00 57168.00C152254.00 57125.00 152243.00 57082.00 152232.00 57039.00C152200.00 57007.00 152168.00 56975.00 152136.00 56943.00C152136.00 56932.33 152136.00 56921.67 152136.00 56911.00C152146.80 56900.31 152157.39 56889.41 152168.31 56878.85C152189.54 56868.23 152210.77 56857.61 152232.00 56847.00C152232.00 56836.00 152232.00 56825.00 152232.00 56814.00C152243.00 56803.33 152254.00 56792.67 152265.00 56782.00C152265.00 56739.33 152265.00 56696.67 152265.00 56654.00C152211.33 56600.33 152157.67 56546.67 152104.00 56493.00C152103.94 56471.56 152104.11 56450.11 152103.92 56428.67C152093.28 56385.78 152082.64 56342.89 152072.00 56300.00C152061.33 56289.33 152050.67 56278.67 152040.00 56268.00C152040.00 56246.33 152040.00 56224.67 152040.00 56203.00C152072.00 56149.67 152104.00 56096.33 152136.00 56043.00C152104.00 55978.67 152072.00 55914.33 152040.00 55850.00C152050.67 55817.67 152061.33 55785.33 152072.00 55753.00C152061.34 55731.54 152050.46 55710.19 152039.93 55688.66C152028.94 55635.11 152017.98 55581.55 152007.00 55528.00C152018.00 55506.67 152029.00 55485.33 152040.00 55464.00C152040.00 55453.33 152040.00 55442.67 152040.00 55432.00C152072.00 55432.00 152104.00 55432.00 152136.00 55432.00C152135.94 55410.22 152136.13 55388.45 152135.91 55366.67C152114.60 55291.78 152093.30 55216.89 152072.00 55142.00C152082.67 55088.67 152093.33 55035.33 152104.00 54982.00C152104.00 54971.33 152104.00 54960.67 152104.00 54950.00C152082.92 54928.08 152061.60 54906.40 152040.00 54885.00C152040.00 54863.67 152040.00 54842.33 152040.00 54821.00C152050.69 54810.21 152061.59 54799.62 152072.15 54788.69C152082.76 54767.13 152093.38 54745.56 152104.00 54724.00C152157.67 54713.33 152211.33 54702.67 152265.00 54692.00C152286.33 54692.00 152307.67 54692.00 152329.00 54692.00C152339.74 54670.29 152350.87 54648.74 152361.36 54626.92C152371.91 54594.95 152382.45 54562.97 152393.00 54531.00C152425.33 54509.67 152457.67 54488.33 152490.00 54467.00C152500.67 54402.67 152511.33 54338.33 152522.00 54274.00C152554.00 54242.00 152586.00 54210.00 152618.00 54178.00C152618.21 54166.90 152617.57 54155.71 152618.33 54144.66C152628.89 54102.11 152639.44 54059.55 152650.00 54017.00C152661.00 54006.33 152672.00 53995.67 152683.00 53985.00C152725.67 53974.33 152768.33 53963.67 152811.00 53953.00C152832.67 53931.33 152854.33 53909.67 152876.00 53888.00C152886.67 53845.33 152897.33 53802.67 152908.00 53760.00C152918.67 53749.33 152929.33 53738.67 152940.00 53728.00C152982.67 53717.00 153025.33 53706.00 153068.00 53695.00C153089.67 53684.33 153111.33 53673.67 153133.00 53663.00C153133.00 53641.67 153133.00 53620.33 153133.00 53599.00C153197.28 53566.90 153261.45 53534.55 153326.00 53503.00C153336.66 53481.21 153347.54 53459.52 153358.07 53437.66C153368.72 53384.44 153379.36 53331.22 153390.00 53278.00C153390.00 53245.67 153390.00 53213.33 153390.00 53181.00C153368.67 53127.33 153347.33 53073.67 153326.00 53020.00C153326.00 52998.67 153326.00 52977.33 153326.00 52956.00C153368.67 52902.33 153411.33 52848.67 153454.00 52795.00C153453.96 52762.89 153454.09 52730.78 153453.93 52698.66C153443.12 52644.76 153432.68 52590.77 153421.64 52536.92C153411.09 52504.90 153400.10 52473.00 153389.82 52440.91C153379.22 52376.94 153368.61 52312.97 153358.00 52249.00C153336.33 52216.67 153314.67 52184.33 153293.00 52152.00C153282.33 52152.00 153271.67 52152.00 153261.00 52152.00C153261.00 52087.67 153261.00 52023.33 153261.00 51959.00C153229.00 51884.00 153197.00 51809.00 153165.00 51734.00C153165.04 51712.55 153164.91 51691.11 153165.07 51669.66C153175.72 51616.11 153186.36 51562.56 153197.00 51509.00C153175.67 51487.67 153154.33 51466.33 153133.00 51445.00C153133.00 51434.33 153133.00 51423.67 153133.00 51413.00C153090.00 51370.00 153047.00 51327.00 153004.00 51284.00C153004.00 51230.33 153004.00 51176.67 153004.00 51123.00C152993.33 51091.00 152982.67 51059.00 152972.00 51027.00C152918.33 50973.33 152864.67 50919.67 152811.00 50866.00C152800.33 50866.00 152789.67 50866.00 152779.00 50866.00C152768.33 50834.00 152757.67 50802.00 152747.00 50770.00C152747.00 50737.67 152747.00 50705.33 152747.00 50673.00C152779.00 50641.00 152811.00 50609.00 152843.00 50577.00C152854.00 50555.33 152865.00 50533.67 152876.00 50512.00C152876.00 50490.67 152876.00 50469.33 152876.00 50448.00C152843.60 50426.57 152811.10 50405.29 152778.76 50383.76C152768.15 50373.05 152757.33 50362.54 152746.85 50351.69C152736.24 50330.13 152725.62 50308.56 152715.00 50287.00C152725.67 50265.67 152736.33 50244.33 152747.00 50223.00C152768.33 50201.67 152789.67 50180.33 152811.00 50159.00C152832.67 50148.00 152854.33 50137.00 152876.00 50126.00C152876.00 50115.33 152876.00 50104.67 152876.00 50094.00C152886.94 50082.80 152898.44 50072.09 152909.02 50060.56C152962.01 49986.04 153015.01 49911.52 153068.00 49837.00C153088.66 49797.14 153109.15 49757.19 153129.03 49716.94C153133.29 49711.16 153133.38 49704.41 153133.00 49697.54C153132.86 49689.93 153133.35 49682.23 153132.67 49674.67C153122.11 49632.45 153111.56 49590.22 153101.00 49548.00C153122.33 49515.67 153143.67 49483.33 153165.00 49451.00C153165.00 49419.00 153165.00 49387.00 153165.00 49355.00C153175.67 49355.00 153186.33 49355.00 153197.00 49355.00C153197.00 49322.67 153197.00 49290.33 153197.00 49258.00C153165.00 49236.67 153133.00 49215.33 153101.00 49194.00C153090.00 49172.67 153079.00 49151.33 153068.00 49130.00C153079.00 49087.00 153090.00 49044.00 153101.00 49001.00C153079.22 48979.62 153057.57 48958.11 153035.71 48936.81C152971.48 48893.87 152907.24 48850.93 152843.00 48808.00C152843.00 48797.33 152843.00 48786.67 152843.00 48776.00C152832.33 48776.00 152821.67 48776.00 152811.00 48776.00C152789.67 48786.67 152768.33 48797.33 152747.00 48808.00C152725.67 48808.00 152704.33 48808.00 152683.00 48808.00C152683.00 48722.33 152683.00 48636.67 152683.00 48551.00C152650.67 48497.33 152618.33 48443.67 152586.00 48390.00C152585.96 48368.55 152586.09 48347.11 152585.93 48325.66C152575.28 48272.11 152564.64 48218.56 152554.00 48165.00C152554.00 48133.00 152554.00 48101.00 152554.00 48069.00C152564.67 48036.67 152575.33 48004.33 152586.00 47972.00C152650.60 47896.77 152715.04 47821.40 152779.74 47746.26C152800.83 47725.18 152821.91 47704.09 152843.00 47683.00C152907.33 47683.00 152971.67 47683.00 153036.00 47683.00C153036.00 47672.33 153036.00 47661.67 153036.00 47651.00C153004.00 47629.33 152972.00 47607.67 152940.00 47586.00C152950.67 47564.67 152961.33 47543.33 152972.00 47522.00C152982.67 47511.33 152993.33 47500.67 153004.00 47490.00C153036.33 47479.33 153068.67 47468.67 153101.00 47458.00C153122.33 47436.33 153143.67 47414.67 153165.00 47393.00C153165.00 47361.00 153165.00 47329.00 153165.00 47297.00C153186.33 47232.67 153207.67 47168.33 153229.00 47104.00C153239.67 47093.33 153250.33 47082.67 153261.00 47072.00C153282.67 47007.67 153304.33 46943.33 153326.00 46879.00C153347.33 46879.00 153368.67 46879.00 153390.00 46879.00C153400.67 46889.67 153411.33 46900.33 153422.00 46911.00C153432.67 46911.00 153443.33 46911.00 153454.00 46911.00C153475.35 46846.56 153497.03 46782.23 153519.00 46718.00C153594.00 46664.33 153669.00 46610.67 153744.00 46557.00C153765.33 46535.67 153786.67 46514.33 153808.00 46493.00C153808.00 46428.67 153808.00 46364.33 153808.00 46300.00C153872.33 46193.00 153936.67 46086.00 154001.00 45979.00C154022.59 45957.59 154043.93 45935.93 154065.00 45914.00C154054.26 45892.29 154043.13 45870.75 154032.64 45848.93C154022.09 45817.28 154011.55 45785.64 154001.00 45754.00C154011.69 45743.21 154022.59 45732.62 154033.15 45721.69C154043.76 45700.13 154054.38 45678.56 154065.00 45657.00C154065.00 45635.67 154065.00 45614.33 154065.00 45593.00C154043.67 45550.00 154022.33 45507.00 154001.00 45464.00C154001.00 45442.67 154001.00 45421.33 154001.00 45400.00C154011.67 45378.67 154022.33 45357.33 154033.00 45336.00C154065.06 45303.57 154097.21 45271.21 154129.21 45238.73C154161.48 45196.15 154193.74 45153.58 154226.00 45111.00C154247.33 45111.00 154268.67 45111.00 154290.00 45111.00C154300.67 45089.33 154311.33 45067.67 154322.00 45046.00C154322.23 45034.99 154321.52 45023.86 154322.37 45012.93C154333.24 44981.28 154344.13 44949.64 154355.00 44918.00C154387.11 44896.29 154419.16 44874.49 154451.31 44852.85C154472.54 44842.23 154493.77 44831.61 154515.00 44821.00C154536.93 44799.24 154559.21 44777.80 154580.93 44755.83C154623.28 44702.55 154665.64 44649.28 154708.00 44596.00C154708.00 44564.00 154708.00 44532.00 154708.00 44500.00C154718.67 44478.33 154729.33 44456.67 154740.00 44435.00C154772.33 44413.67 154804.67 44392.33 154837.00 44371.00C154837.00 44339.00 154837.00 44307.00 154837.00 44275.00C154847.67 44253.33 154858.33 44231.67 154869.00 44210.00C154879.67 44220.67 154890.33 44231.33 154901.00 44242.00C154911.67 44242.00 154922.33 44242.00 154933.00 44242.00C154933.00 44274.33 154933.00 44306.67 154933.00 44339.00C154954.67 44360.33 154976.33 44381.67 154998.00 44403.00C155019.33 44403.00 155040.67 44403.00 155062.00 44403.00C155083.33 44392.33 155104.67 44381.67 155126.00 44371.00C155147.67 44339.00 155169.33 44307.00 155191.00 44275.00C155212.33 44275.00 155233.67 44275.00 155255.00 44275.00C155255.00 44296.33 155255.00 44317.67 155255.00 44339.00C155265.67 44349.67 155276.33 44360.33 155287.00 44371.00C155308.33 44360.33 155329.67 44349.67 155351.00 44339.00C155362.00 44317.67 155373.00 44296.33 155384.00 44275.00C155384.00 44253.33 155384.00 44231.67 155384.00 44210.00C155416.00 44220.67 155448.00 44231.33 155480.00 44242.00C155501.33 44242.00 155522.67 44242.00 155544.00 44242.00C155587.00 44210.00 155630.00 44178.00 155673.00 44146.00C155683.80 44156.69 155694.39 44167.59 155705.31 44178.15C155748.21 44199.43 155791.10 44220.72 155834.00 44242.00C155844.67 44242.00 155855.33 44242.00 155866.00 44242.00C155888.09 44231.09 155909.97 44219.72 155932.21 44209.12C155985.14 44188.08 156038.07 44167.04 156091.00 44146.00C156144.67 44156.67 156198.33 44167.33 156252.00 44178.00C156262.67 44167.33 156273.33 44156.67 156284.00 44146.00C156284.00 44156.67 156284.00 44167.33 156284.00 44178.00C156294.67 44156.67 156305.33 44135.33 156316.00 44114.00C156305.33 44081.67 156294.67 44049.33 156284.00 44017.00C156305.33 44006.33 156326.67 43995.67 156348.00 43985.00C156348.00 43974.33 156348.00 43963.67 156348.00 43953.00C156401.67 43942.33 156455.33 43931.67 156509.00 43921.00C156530.33 43878.00 156551.67 43835.00 156573.00 43792.00C156594.33 43781.33 156615.67 43770.67 156637.00 43760.00C156637.00 43728.00 156637.00 43696.00 156637.00 43664.00C156648.00 43642.33 156659.00 43620.67 156670.00 43599.00C156680.67 43588.33 156691.33 43577.67 156702.00 43567.00C156723.33 43567.00 156744.67 43567.00 156766.00 43567.00C156766.00 43535.00 156766.00 43503.00 156766.00 43471.00C156712.33 43471.00 156658.67 43471.00 156605.00 43471.00C156605.00 43449.33 156605.00 43427.67 156605.00 43406.00C156637.06 43373.72 156669.61 43341.94 156702.00 43310.00C156755.67 43310.00 156809.33 43310.00 156863.00 43310.00C156884.46 43299.34 156905.81 43288.46 156927.34 43277.93C156980.89 43267.29 157034.45 43256.64 157088.00 43246.00C157120.00 43246.00 157152.00 43246.00 157184.00 43246.00C157205.33 43235.33 157226.67 43224.67 157248.00 43214.00C157269.67 43181.67 157291.33 43149.33 157313.00 43117.00C157323.67 43117.00 157334.33 43117.00 157345.00 43117.00C157345.23 43105.99 157344.54 43094.86 157345.36 43083.92C157355.97 43051.85 157366.46 43019.74 157377.15 42987.69C157387.76 42966.46 157398.38 42945.23 157409.00 42924.00C157419.67 42924.00 157430.33 42924.00 157441.00 42924.00C157462.67 42934.67 157484.33 42945.33 157506.00 42956.00C157516.67 42956.00 157527.33 42956.00 157538.00 42956.00C157538.00 42891.67 157538.00 42827.33 157538.00 42763.00C157559.33 42741.67 157580.67 42720.33 157602.00 42699.00C157602.00 42656.00 157602.00 42613.00 157602.00 42570.00C157612.80 42559.31 157623.38 42548.41 157634.31 42537.85C157677.15 42516.77 157720.03 42495.74 157762.59 42474.10C157768.92 42466.66 157774.43 42458.32 157780.45 42450.54C157806.70 42415.27 157832.99 42380.03 157859.15 42344.69C157869.76 42323.46 157880.38 42302.23 157891.00 42281.00C157934.11 42248.96 157977.13 42216.80 158020.31 42184.85C158041.54 42174.23 158062.77 42163.61 158084.00 42153.00C158095.00 42099.33 158106.00 42045.67 158117.00 41992.00C158117.00 41981.33 158117.00 41970.67 158117.00 41960.00C158149.00 41927.67 158181.00 41895.33 158213.00 41863.00C158202.33 41831.00 158191.67 41799.00 158181.00 41767.00C158169.76 41755.68 158159.04 41743.79 158147.44 41732.84C158104.75 41700.94 158061.79 41669.36 158019.26 41637.26C158008.66 41626.44 157997.59 41616.04 157987.31 41604.96C157966.11 41572.90 157945.06 41540.75 157923.76 41508.76C157902.17 41487.51 157880.59 41466.25 157859.00 41445.00C157869.67 41402.33 157880.33 41359.67 157891.00 41317.00C157891.00 41284.67 157891.00 41252.33 157891.00 41220.00C157923.33 41209.33 157955.67 41198.67 157988.00 41188.00C157988.00 41177.33 157988.00 41166.67 157988.00 41156.00C157977.33 41134.33 157966.67 41112.67 157956.00 41091.00C157956.00 41037.67 157956.00 40984.33 157956.00 40931.00C158003.22 40883.42 158050.03 40835.42 158098.06 40788.64C158104.37 40782.43 158110.69 40776.21 158117.00 40770.00C158138.33 40780.67 158159.67 40791.33 158181.00 40802.00C158202.33 40845.00 158223.67 40888.00 158245.00 40931.00C158298.67 40973.67 158352.33 41016.33 158406.00 41059.00C158438.00 41069.67 158470.00 41080.33 158502.00 41091.00C158513.00 41091.00 158524.00 41091.00 158535.00 41091.00C158599.00 41155.33 158663.00 41219.67 158727.00 41284.00C158770.00 41305.67 158813.00 41327.33 158856.00 41349.00C158856.00 41359.67 158856.00 41370.33 158856.00 41381.00C158899.11 41413.04 158942.13 41445.20 158985.31 41477.15C159049.54 41509.44 159113.77 41541.72 159178.00 41574.00C159189.01 41573.77 159200.13 41574.46 159211.08 41573.64C159242.72 41563.10 159274.36 41552.55 159306.00 41542.00C159316.67 41542.00 159327.33 41542.00 159338.00 41542.00C159370.33 41563.33 159402.67 41584.67 159435.00 41606.00C159477.67 41606.00 159520.33 41606.00 159563.00 41606.00C159584.67 41584.67 159606.33 41563.33 159628.00 41542.00C159649.45 41542.04 159670.89 41541.91 159692.34 41542.07C159745.89 41552.71 159799.45 41563.36 159853.00 41574.00C159863.67 41584.67 159874.33 41595.33 159885.00 41606.00C159895.67 41595.33 159906.33 41584.67 159917.00 41574.00C159938.33 41584.67 159959.67 41595.33 159981.00 41606.00C160013.33 41595.33 160045.67 41584.67 160078.00 41574.00C160120.67 41595.33 160163.33 41616.67 160206.00 41638.00C160217.00 41638.00 160228.00 41638.00 160239.00 41638.00C160281.67 41659.33 160324.33 41680.67 160367.00 41702.00C160377.67 41691.33 160388.33 41680.67 160399.00 41670.00C160410.00 41670.00 160421.00 41670.00 160432.00 41670.00C160432.00 41713.00 160432.00 41756.00 160432.00 41799.00C160442.67 41799.00 160453.33 41799.00 160464.00 41799.00C160464.00 41809.67 160464.00 41820.33 160464.00 41831.00C160496.00 41852.33 160528.00 41873.67 160560.00 41895.00C160603.00 41895.00 160646.00 41895.00 160689.00 41895.00C160689.00 41916.67 160689.00 41938.33 160689.00 41960.00C160710.33 41992.00 160731.67 42024.00 160753.00 42056.00C160753.00 42077.33 160753.00 42098.67 160753.00 42120.00C160763.67 42141.67 160774.33 42163.33 160785.00 42185.00C160774.33 42185.00 160763.67 42185.00 160753.00 42185.00C160763.67 42195.67 160774.33 42206.33 160785.00 42217.00C160774.33 42238.33 160763.67 42259.67 160753.00 42281.00C160753.00 42291.67 160753.00 42302.33 160753.00 42313.00C160742.33 42334.67 160731.67 42356.33 160721.00 42378.00C160731.67 42378.00 160742.33 42378.00 160753.00 42378.00C160753.00 42410.00 160753.00 42442.00 160753.00 42474.00C160731.67 42484.67 160710.33 42495.33 160689.00 42506.00C160689.00 42516.67 160689.00 42527.33 160689.00 42538.00C160667.33 42538.00 160645.67 42538.00 160624.00 42538.00C160624.00 42559.67 160624.00 42581.33 160624.00 42603.00C160570.67 42656.33 160517.33 42709.67 160464.00 42763.00C160453.33 42784.67 160442.67 42806.33 160432.00 42828.00C160432.00 42860.00 160432.00 42892.00 160432.00 42924.00C160335.33 43095.67 160238.67 43267.33 160142.00 43439.00C160120.67 43492.33 160099.33 43545.67 160078.00 43599.00C160078.00 43609.67 160078.00 43620.33 160078.00 43631.00C160056.67 43652.67 160035.33 43674.33 160014.00 43696.00C160014.00 43717.33 160014.00 43738.67 160014.00 43760.00C160003.00 43781.33 159992.00 43802.67 159981.00 43824.00C159981.00 43835.00 159981.00 43846.00 159981.00 43857.00C160013.33 43846.00 160045.67 43835.00 160078.00 43824.00C160078.00 43877.67 160078.00 43931.33 160078.00 43985.00C160088.67 43985.00 160099.33 43985.00 160110.00 43985.00C160120.67 44006.67 160131.33 44028.33 160142.00 44050.00C160206.33 44050.00 160270.67 44050.00 160335.00 44050.00C160335.00 44114.00 160335.00 44178.00 160335.00 44242.00C160356.33 44263.67 160377.67 44285.33 160399.00 44307.00C160410.00 44349.67 160421.00 44392.33 160432.00 44435.00C160432.00 44445.67 160432.00 44456.33 160432.00 44467.00C160453.33 44456.33 160474.67 44445.67 160496.00 44435.00C160517.33 44435.00 160538.67 44435.00 160560.00 44435.00C160528.00 44445.67 160496.00 44456.33 160464.00 44467.00C160453.33 44478.00 160442.67 44489.00 160432.00 44500.00C160432.00 44553.33 160432.00 44606.67 160432.00 44660.00C160410.33 44692.33 160388.67 44724.67 160367.00 44757.00C160324.33 44757.00 160281.67 44757.00 160239.00 44757.00C160239.00 44767.67 160239.00 44778.33 160239.00 44789.00C160228.00 44799.67 160217.00 44810.33 160206.00 44821.00C160206.00 44831.67 160206.00 44842.33 160206.00 44853.00C160248.90 44874.86 160291.89 44896.55 160335.00 44918.00C160356.33 44971.33 160377.67 45024.67 160399.00 45078.00C160388.33 45153.00 160377.67 45228.00 160367.00 45303.00C160356.33 45314.00 160345.67 45325.00 160335.00 45336.00C160345.80 45346.69 160356.38 45357.59 160367.31 45368.15C160388.87 45378.77 160410.44 45389.38 160432.00 45400.00C160485.33 45400.00 160538.67 45400.00 160592.00 45400.00C160613.67 45421.33 160635.33 45442.67 160657.00 45464.00C160689.00 45464.00 160721.00 45464.00 160753.00 45464.00C160785.33 45485.67 160817.67 45507.33 160850.00 45529.00C160850.00 45539.67 160850.00 45550.33 160850.00 45561.00C160828.33 45561.00 160806.67 45561.00 160785.00 45561.00C160774.33 45571.67 160763.67 45582.33 160753.00 45593.00C160742.33 45646.67 160731.67 45700.33 160721.00 45754.00C160742.33 45775.33 160763.67 45796.67 160785.00 45818.00C160763.57 45850.07 160742.29 45882.24 160720.76 45914.24C160667.17 45967.82 160613.59 46021.42 160560.00 46075.00C160560.00 46085.67 160560.00 46096.33 160560.00 46107.00C160581.33 46085.67 160602.67 46064.33 160624.00 46043.00C160624.00 46053.67 160624.00 46064.33 160624.00 46075.00C160635.00 46075.00 160646.00 46075.00 160657.00 46075.00C160667.67 46107.33 160678.33 46139.67 160689.00 46172.00C160689.00 46182.67 160689.00 46193.33 160689.00 46204.00C160710.33 46225.33 160731.67 46246.67 160753.00 46268.00C160753.00 46278.67 160753.00 46289.33 160753.00 46300.00C160774.06 46342.82 160795.11 46385.66 160816.68 46428.21C160821.14 46433.68 160826.71 46438.26 160831.60 46443.38C160848.40 46459.92 160865.20 46476.46 160882.00 46493.00C160903.33 46536.00 160924.67 46579.00 160946.00 46622.00C160924.67 46675.67 160903.33 46729.33 160882.00 46783.00C160871.33 46783.00 160860.67 46783.00 160850.00 46783.00C160850.00 46793.67 160850.00 46804.33 160850.00 46815.00C160839.00 46815.00 160828.00 46815.00 160817.00 46815.00C160817.00 46825.67 160817.00 46836.33 160817.00 46847.00C160806.33 46857.67 160795.67 46868.33 160785.00 46879.00C160806.46 46922.10 160828.12 46965.11 160850.00 47008.00C160817.67 47029.33 160785.33 47050.67 160753.00 47072.00C160753.00 47082.67 160753.00 47093.33 160753.00 47104.00C160763.67 47104.00 160774.33 47104.00 160785.00 47104.00C160827.77 47083.06 160870.40 47061.84 160913.00 47040.55C160918.86 47039.28 160925.20 47040.36 160931.25 47040.00C160946.83 47040.00 160962.42 47040.00 160978.00 47040.00C160999.33 47029.33 161020.67 47018.67 161042.00 47008.00C161053.00 47018.67 161064.00 47029.33 161075.00 47040.00C161085.67 47029.33 161096.33 47018.67 161107.00 47008.00C161107.00 47018.67 161107.00 47029.33 161107.00 47040.00C161128.33 47050.67 161149.67 47061.33 161171.00 47072.00C161182.01 47072.23 161193.14 47071.54 161204.09 47072.36C161236.06 47082.90 161268.03 47093.45 161300.00 47104.00C161332.00 47104.00 161364.00 47104.00 161396.00 47104.00C161406.67 47114.67 161417.33 47125.33 161428.00 47136.00C161428.00 47146.67 161428.00 47157.33 161428.00 47168.00C161406.67 47189.67 161385.33 47211.33 161364.00 47233.00C161374.67 47254.33 161385.33 47275.67 161396.00 47297.00C161374.67 47361.33 161353.33 47425.67 161332.00 47490.00C161321.33 47500.67 161310.67 47511.33 161300.00 47522.00C161321.33 47554.33 161342.67 47586.67 161364.00 47619.00C161364.00 47640.33 161364.00 47661.67 161364.00 47683.00C161385.45 47693.67 161406.82 47704.52 161428.33 47715.08C161471.22 47725.72 161514.11 47736.36 161557.00 47747.00C161535.63 47768.45 161514.10 47789.75 161492.82 47811.29C161439.22 47897.20 161385.61 47983.10 161332.00 48069.00C161353.33 48197.67 161374.67 48326.33 161396.00 48455.00C161396.00 48487.00 161396.00 48519.00 161396.00 48551.00C161374.67 48561.67 161353.33 48572.33 161332.00 48583.00C161310.67 48626.00 161289.33 48669.00 161268.00 48712.00C161246.33 48733.33 161224.67 48754.67 161203.00 48776.00C161203.00 48829.67 161203.00 48883.33 161203.00 48937.00C161181.67 48979.67 161160.33 49022.33 161139.00 49065.00C161139.00 49118.67 161139.00 49172.33 161139.00 49226.00C161117.67 49258.33 161096.33 49290.67 161075.00 49323.00C161075.00 49365.67 161075.00 49408.33 161075.00 49451.00C161053.33 49472.67 161031.67 49494.33 161010.00 49516.00C160999.33 49548.00 160988.67 49580.00 160978.00 49612.00C160967.33 49612.00 160956.67 49612.00 160946.00 49612.00C160935.33 49644.33 160924.67 49676.67 160914.00 49709.00C160881.67 49709.00 160849.33 49709.00 160817.00 49709.00C160828.00 49719.67 160839.00 49730.33 160850.00 49741.00C160871.33 49741.00 160892.67 49741.00 160914.00 49741.00C160914.00 49762.33 160914.00 49783.67 160914.00 49805.00C160903.33 49837.00 160892.67 49869.00 160882.00 49901.00C160882.00 49922.67 160882.00 49944.33 160882.00 49966.00C160924.67 49987.33 160967.33 50008.67 161010.00 50030.00C161042.62 50073.21 161074.94 50116.68 161107.74 50159.74C161118.16 50170.16 161128.58 50180.58 161139.00 50191.00C161095.72 50244.89 161052.68 50298.97 161009.26 50352.74C160966.84 50395.16 160924.42 50437.58 160882.00 50480.00C160871.33 50501.67 160860.67 50523.33 160850.00 50545.00C160850.00 50555.67 160850.00 50566.33 160850.00 50577.00C160828.33 50587.67 160806.67 50598.33 160785.00 50609.00C160785.00 50619.67 160785.00 50630.33 160785.00 50641.00C160806.79 50651.67 160828.49 50662.52 160850.33 50673.08C160892.89 50683.72 160935.44 50694.36 160978.00 50705.00C160978.00 50715.67 160978.00 50726.33 160978.00 50737.00C160956.67 50748.00 160935.33 50759.00 160914.00 50770.00C160903.33 50802.00 160892.67 50834.00 160882.00 50866.00C160882.00 50876.67 160882.00 50887.33 160882.00 50898.00C160860.33 50908.67 160838.67 50919.33 160817.00 50930.00C160828.00 50983.67 160839.00 51037.33 160850.00 51091.00C160828.33 51112.33 160806.67 51133.67 160785.00 51155.00C160817.33 51198.00 160849.67 51241.00 160882.00 51284.00C160871.33 51305.33 160860.67 51326.67 160850.00 51348.00C160871.33 51380.33 160892.67 51412.67 160914.00 51445.00C160914.00 51466.33 160914.00 51487.67 160914.00 51509.00C160935.33 51509.00 160956.67 51509.00 160978.00 51509.00C160978.00 51519.67 160978.00 51530.33 160978.00 51541.00C160988.67 51551.67 160999.33 51562.33 161010.00 51573.00C161020.67 51551.67 161031.33 51530.33 161042.00 51509.00C161063.67 51519.67 161085.33 51530.33 161107.00 51541.00C161160.67 51616.00 161214.33 51691.00 161268.00 51766.00C161278.67 51755.33 161289.33 51744.67 161300.00 51734.00C161310.67 51734.00 161321.33 51734.00 161332.00 51734.00C161332.00 51755.33 161332.00 51776.67 161332.00 51798.00C161353.33 51809.00 161374.67 51820.00 161396.00 51831.00C161396.00 51863.00 161396.00 51895.00 161396.00 51927.00C161385.33 51970.00 161374.67 52013.00 161364.00 52056.00C161417.67 52056.00 161471.33 52056.00 161525.00 52056.00C161525.00 52077.33 161525.00 52098.67 161525.00 52120.00C161535.67 52120.00 161546.33 52120.00 161557.00 52120.00C161557.00 52130.67 161557.00 52141.33 161557.00 52152.00C161567.67 52162.67 161578.33 52173.33 161589.00 52184.00C161589.00 52205.67 161589.00 52227.33 161589.00 52249.00C161632.00 52270.33 161675.00 52291.67 161718.00 52313.00C161739.33 52291.67 161760.67 52270.33 161782.00 52249.00C161792.67 52249.00 161803.33 52249.00 161814.00 52249.00C161824.67 52281.00 161835.33 52313.00 161846.00 52345.00C161867.67 52334.33 161889.33 52323.67 161911.00 52313.00C161911.00 52345.00 161911.00 52377.00 161911.00 52409.00C161953.67 52430.67 161996.33 52452.33 162039.00 52474.00C162049.67 52506.00 162060.33 52538.00 162071.00 52570.00C162082.00 52559.33 162093.00 52548.67 162104.00 52538.00C162114.67 52538.00 162125.33 52538.00 162136.00 52538.00C162157.33 52570.00 162178.67 52602.00 162200.00 52634.00C162232.00 52634.00 162264.00 52634.00 162296.00 52634.00C162307.00 52655.67 162318.00 52677.33 162329.00 52699.00C162318.00 52731.00 162307.00 52763.00 162296.00 52795.00C162307.00 52838.00 162318.00 52881.00 162329.00 52924.00C162296.67 52945.33 162264.33 52966.67 162232.00 52988.00C162264.33 53009.33 162296.67 53030.67 162329.00 53052.00C162339.67 53052.00 162350.33 53052.00 162361.00 53052.00C162371.67 53073.67 162382.33 53095.33 162393.00 53117.00C162371.67 53127.67 162350.33 53138.33 162329.00 53149.00C162329.00 53192.00 162329.00 53235.00 162329.00 53278.00C162350.33 53288.67 162371.67 53299.33 162393.00 53310.00C162393.00 53331.33 162393.00 53352.67 162393.00 53374.00C162382.33 53406.00 162371.67 53438.00 162361.00 53470.00C162339.33 53481.00 162317.67 53492.00 162296.00 53503.00C162285.33 53535.00 162274.67 53567.00 162264.00 53599.00C162274.84 53610.07 162286.16 53620.72 162296.70 53632.04C162318.17 53664.14 162339.74 53696.17 162361.15 53728.31C162371.76 53749.54 162382.38 53770.77 162393.00 53792.00C162382.33 53802.67 162371.67 53813.33 162361.00 53824.00C162328.67 53824.00 162296.33 53824.00 162264.00 53824.00C162253.33 53834.67 162242.67 53845.33 162232.00 53856.00C162232.00 53866.67 162232.00 53877.33 162232.00 53888.00C162242.67 53909.67 162253.33 53931.33 162264.00 53953.00C162285.09 53974.32 162306.54 53995.30 162328.05 54016.18C162332.06 54021.75 162334.39 54028.44 162337.73 54034.45C162345.48 54049.97 162353.24 54065.48 162361.00 54081.00C162361.00 54092.00 162361.00 54103.00 162361.00 54114.00C162339.33 54135.33 162317.67 54156.67 162296.00 54178.00C162296.00 54231.67 162296.00 54285.33 162296.00 54339.00C162285.33 54349.67 162274.67 54360.33 162264.00 54371.00C162274.67 54392.33 162285.33 54413.67 162296.00 54435.00C162296.00 54456.33 162296.00 54477.67 162296.00 54499.00C162328.33 54520.67 162360.67 54542.33 162393.00 54564.00C162393.00 54606.67 162393.00 54649.33 162393.00 54692.00C162414.14 54735.10 162435.44 54778.11 162457.00 54821.00C162446.33 54864.00 162435.67 54907.00 162425.00 54950.00C162414.33 54971.33 162403.67 54992.67 162393.00 55014.00C162360.67 55024.67 162328.33 55035.33 162296.00 55046.00C162285.33 55056.67 162274.67 55067.33 162264.00 55078.00C162274.67 55099.46 162285.52 55120.82 162296.09 55142.33C162307.06 55185.22 162318.03 55228.11 162329.00 55271.00C162350.33 55303.00 162371.67 55335.00 162393.00 55367.00C162382.33 55388.67 162371.67 55410.33 162361.00 55432.00C162382.46 55517.64 162403.79 55603.30 162425.00 55689.00C162414.33 55742.67 162403.67 55796.33 162393.00 55850.00C162404.05 55882.83 162414.72 55915.78 162426.01 55948.52C162447.00 56001.35 162468.00 56054.17 162489.00 56107.00C162478.33 56139.00 162467.67 56171.00 162457.00 56203.00C162489.33 56235.33 162521.67 56267.67 162554.00 56300.00C162554.00 56385.67 162554.00 56471.33 162554.00 56557.00C162543.00 56589.33 162532.00 56621.67 162521.00 56654.00C162510.33 56664.67 162499.67 56675.33 162489.00 56686.00C162489.00 56696.67 162489.00 56707.33 162489.00 56718.00C162467.67 56739.33 162446.33 56760.67 162425.00 56782.00C162425.00 56835.67 162425.00 56889.33 162425.00 56943.00C162457.00 56932.33 162489.00 56921.67 162521.00 56911.00C162542.67 56932.33 162564.33 56953.67 162586.00 56975.00C162607.33 57050.00 162628.67 57125.00 162650.00 57200.00C162671.33 57243.00 162692.67 57286.00 162714.00 57329.00C162703.33 57361.00 162692.67 57393.00 162682.00 57425.00C162682.00 57543.00 162682.00 57661.00 162682.00 57779.00C162725.00 57832.67 162768.00 57886.33 162811.00 57940.00C162832.33 57993.67 162853.67 58047.33 162875.00 58101.00C162885.80 58111.69 162896.38 58122.59 162907.31 58133.15C162928.87 58143.77 162950.44 58154.38 162972.00 58165.00C162982.67 58175.67 162993.33 58186.33 163004.00 58197.00C163004.00 58250.67 163004.00 58304.33 163004.00 58358.00C162993.33 58411.33 162982.67 58464.67 162972.00 58518.00C162950.33 58529.00 162928.67 58540.00 162907.00 58551.00C162907.05 58572.44 162906.91 58593.89 162907.07 58615.34C162918.06 58668.89 162929.02 58722.45 162940.00 58776.00C162940.00 58851.00 162940.00 58926.00 162940.00 59001.00C162950.67 59043.67 162961.33 59086.33 162972.00 59129.00C162972.00 59172.00 162972.00 59215.00 162972.00 59258.00C163036.33 59322.33 163100.67 59386.67 163165.00 59451.00C163186.33 59504.67 163207.67 59558.33 163229.00 59612.00C163229.00 59622.67 163229.00 59633.33 163229.00 59644.00C163250.33 59665.33 163271.67 59686.67 163293.00 59708.00C163293.00 59718.67 163293.00 59729.33 163293.00 59740.00C163271.67 59783.00 163250.33 59826.00 163229.00 59869.00C163271.90 59911.77 163314.34 59954.99 163357.00 59998.00C163443.00 59998.00 163529.00 59998.00 163615.00 59998.00C163647.00 60030.00 163679.00 60062.00 163711.00 60094.00C163743.40 60115.43 163775.90 60136.71 163808.24 60158.24C163818.83 60168.82 163829.41 60179.42 163840.00 60190.00C163905.78 60201.17 163971.51 60212.65 164037.32 60223.61C164111.00 60234.06 164184.65 60244.63 164258.34 60255.00C164300.89 60255.00 164343.45 60255.00 164386.00 60255.00C164407.67 60265.67 164429.33 60276.33 164451.00 60287.00C164483.00 60319.00 164515.00 60351.00 164547.00 60383.00C164547.23 60394.01 164546.54 60405.14 164547.36 60416.08C164557.91 60448.05 164568.45 60480.03 164579.00 60512.00C164590.00 60522.67 164601.00 60533.33 164612.00 60544.00C164622.67 60576.33 164633.33 60608.67 164644.00 60641.00C164654.67 60651.67 164665.33 60662.33 164676.00 60673.00C164697.33 60673.00 164718.67 60673.00 164740.00 60673.00C164761.33 60651.33 164782.67 60629.67 164804.00 60608.00C164825.67 60597.33 164847.33 60586.67 164869.00 60576.00C164901.00 60586.67 164933.00 60597.33 164965.00 60608.00C164965.00 60619.00 164965.00 60630.00 164965.00 60641.00C164913.22 60692.81 164861.52 60744.70 164809.15 60795.93C164803.05 60800.42 164800.93 60807.78 164797.50 60814.20C164789.00 60831.47 164780.50 60848.74 164772.00 60866.00C164761.33 60866.00 164750.67 60866.00 164740.00 60866.00C164718.67 60876.67 164697.33 60887.33 164676.00 60898.00C164676.00 60940.67 164676.00 60983.33 164676.00 61026.00C164665.33 61047.67 164654.67 61069.33 164644.00 61091.00C164665.33 61144.33 164686.67 61197.67 164708.00 61251.00C164697.33 61272.67 164686.67 61294.33 164676.00 61316.00C164676.00 61391.00 164676.00 61466.00 164676.00 61541.00C164708.00 61551.67 164740.00 61562.33 164772.00 61573.00C164772.00 61583.67 164772.00 61594.33 164772.00 61605.00C164740.00 61615.67 164708.00 61626.33 164676.00 61637.00C164676.00 61648.00 164676.00 61659.00 164676.00 61670.00C164665.33 61659.00 164654.67 61648.00 164644.00 61637.00C164644.00 61658.67 164644.00 61680.33 164644.00 61702.00C164654.67 61702.00 164665.33 61702.00 164676.00 61702.00C164676.00 61712.67 164676.00 61723.33 164676.00 61734.00C164654.67 61755.33 164633.33 61776.67 164612.00 61798.00C164612.00 61808.67 164612.00 61819.33 164612.00 61830.00C164590.33 61873.00 164568.67 61916.00 164547.00 61959.00C164525.67 61969.67 164504.33 61980.33 164483.00 61991.00C164483.00 62001.67 164483.00 62012.33 164483.00 62023.00C164450.67 62066.00 164418.33 62109.00 164386.00 62152.00C164397.00 62173.33 164408.00 62194.67 164419.00 62216.00C164397.33 62280.33 164375.67 62344.67 164354.00 62409.00C164354.00 62430.33 164354.00 62451.67 164354.00 62473.00C164343.33 62484.00 164332.67 62495.00 164322.00 62506.00C164311.30 62559.90 164300.28 62613.75 164289.80 62667.68C164279.19 62752.79 164268.60 62837.89 164258.00 62923.00C164268.67 62966.00 164279.33 63009.00 164290.00 63052.00C164279.33 63073.33 164268.67 63094.67 164258.00 63116.00C164215.00 63137.67 164172.00 63159.33 164129.00 63181.00C164139.67 63202.33 164150.33 63223.67 164161.00 63245.00C164139.67 63330.67 164118.33 63416.33 164097.00 63502.00C163936.33 63566.33 163775.67 63630.67 163615.00 63695.00C163604.33 63716.33 163593.67 63737.67 163583.00 63759.00C163561.33 63770.00 163539.67 63781.00 163518.00 63792.00C163464.33 63802.67 163410.67 63813.33 163357.00 63824.00C163346.33 63845.33 163335.67 63866.67 163325.00 63888.00C163325.00 63909.33 163325.00 63930.67 163325.00 63952.00C163357.33 64038.00 163389.67 64124.00 163422.00 64210.00C163433.52 64221.83 163445.69 64233.05 163456.76 64245.30C163509.51 64308.54 163562.25 64371.77 163615.00 64435.00C163615.00 64445.67 163615.00 64456.33 163615.00 64467.00C163625.67 64477.67 163636.33 64488.33 163647.00 64499.00C163647.00 64574.00 163647.00 64649.00 163647.00 64724.00C163614.65 64788.45 163582.17 64852.84 163549.89 64917.33C163528.59 64981.55 163507.30 65045.78 163486.00 65110.00C163496.67 65174.33 163507.33 65238.67 163518.00 65303.00C163550.33 65335.00 163582.67 65367.00 163615.00 65399.00C163657.77 65409.72 163700.57 65420.34 163743.32 65431.12C163829.21 65463.41 163915.11 65495.71 164001.00 65528.00C164011.67 65528.00 164022.33 65528.00 164033.00 65528.00C164065.00 65560.00 164097.00 65592.00 164129.00 65624.00C164129.23 65635.34 164128.53 65646.80 164129.36 65658.07C164139.91 65689.71 164150.45 65721.36 164161.00 65753.00C164160.87 65775.18 164161.26 65797.37 164160.79 65819.53C164150.23 65947.72 164139.41 66075.90 164129.00 66204.10C164129.00 66236.07 164129.00 66268.03 164129.00 66300.00C164075.33 66396.33 164021.67 66492.67 163968.00 66589.00C163956.96 66621.83 163946.28 66654.78 163934.99 66687.53C163913.99 66740.47 163892.86 66793.36 163871.92 66846.33C163861.28 66889.22 163850.64 66932.11 163840.00 66975.00C163850.67 66996.33 163861.33 67017.67 163872.00 67039.00C163882.67 67049.66 163893.33 67060.34 163904.00 67071.00C163904.00 67092.67 163904.00 67114.33 163904.00 67136.00C163893.33 67146.66 163882.67 67157.34 163872.00 67168.00C163872.00 67178.67 163872.00 67189.33 163872.00 67200.00C163818.33 67178.67 163764.67 67157.33 163711.00 67136.00C163700.33 67146.66 163689.67 67157.34 163679.00 67168.00C163679.00 67178.67 163679.00 67189.33 163679.00 67200.00C163668.33 67210.66 163657.67 67221.34 163647.00 67232.00C163625.67 67232.00 163604.33 67232.00 163583.00 67232.00C163572.00 67242.67 163561.00 67253.33 163550.00 67264.00C163550.00 67285.67 163550.00 67307.33 163550.00 67329.00C163539.33 67339.66 163528.67 67350.34 163518.00 67361.00C163496.67 67361.00 163475.33 67361.00 163454.00 67361.00C163443.33 67382.33 163432.67 67403.67 163422.00 67425.00C163411.31 67435.79 163400.41 67446.39 163389.84 67457.30C163378.90 67478.54 163367.95 67499.77 163357.00 67521.00C163357.00 67532.00 163357.00 67543.00 163357.00 67554.00C163325.00 67554.00 163293.00 67554.00 163261.00 67554.00C163239.67 67575.34 163218.33 67596.66 163197.00 67618.00C163164.67 67628.67 163132.33 67639.33 163100.00 67650.00C163089.20 67660.69 163078.61 67671.59 163067.69 67682.15C163046.46 67692.77 163025.23 67703.38 163004.00 67714.00C163014.67 67757.00 163025.33 67800.00 163036.00 67843.00C163025.33 67853.66 163014.67 67864.34 163004.00 67875.00C163004.00 67896.33 163004.00 67917.67 163004.00 67939.00C162993.33 67939.00 162982.67 67939.00 162972.00 67939.00C162972.00 67960.67 162972.00 67982.33 162972.00 68004.00C162929.00 68014.67 162886.00 68025.33 162843.00 68036.00C162843.00 68046.67 162843.00 68057.33 162843.00 68068.00C162832.33 68078.66 162821.67 68089.34 162811.00 68100.00C162821.67 68143.00 162832.33 68186.00 162843.00 68229.00C162811.00 68261.00 162779.00 68293.00 162747.00 68325.00C162714.67 68325.00 162682.33 68325.00 162650.00 68325.00C162650.00 68314.33 162650.00 68303.67 162650.00 68293.00C162639.33 68271.67 162628.67 68250.33 162618.00 68229.00C162607.33 68218.34 162596.67 68207.66 162586.00 68197.00C162553.67 68197.00 162521.33 68197.00 162489.00 68197.00C162478.33 68218.33 162467.67 68239.67 162457.00 68261.00C162467.67 68261.00 162478.33 68261.00 162489.00 68261.00C162489.00 68293.00 162489.00 68325.00 162489.00 68357.00C162478.33 68357.00 162467.67 68357.00 162457.00 68357.00C162446.33 68368.00 162435.67 68379.00 162425.00 68390.00C162425.00 68432.67 162425.00 68475.33 162425.00 68518.00C162414.33 68539.33 162403.67 68560.67 162393.00 68582.00C162371.67 68603.67 162350.33 68625.33 162329.00 68647.00C162307.22 68625.29 162285.57 68603.44 162263.71 68581.81C162231.74 68560.43 162199.67 68539.22 162167.76 68517.76C162157.17 68507.18 162146.59 68496.58 162136.00 68486.00C162136.00 68475.33 162136.00 68464.67 162136.00 68454.00C162114.33 68432.67 162092.67 68411.33 162071.00 68390.00C162049.67 68400.67 162028.33 68411.33 162007.00 68422.00C161996.33 68422.00 161985.67 68422.00 161975.00 68422.00C161964.33 68454.00 161953.67 68486.00 161943.00 68518.00C161889.33 68528.67 161835.67 68539.33 161782.00 68550.00C161771.32 68582.45 161760.54 68614.87 161749.93 68647.34C161739.28 68700.89 161728.64 68754.45 161718.00 68808.00C161675.00 68797.00 161632.00 68786.00 161589.00 68775.00C161589.00 68807.33 161589.00 68839.67 161589.00 68872.00C161578.33 68904.00 161567.67 68936.00 161557.00 68968.00C161546.33 68978.66 161535.67 68989.34 161525.00 69000.00C161514.33 69000.00 161503.67 69000.00 161493.00 69000.00C161482.00 69021.67 161471.00 69043.33 161460.00 69065.00C161438.67 69075.67 161417.33 69086.33 161396.00 69097.00C161385.33 69097.00 161374.67 69097.00 161364.00 69097.00C161353.33 69086.34 161342.67 69075.66 161332.00 69065.00C161310.67 69065.00 161289.33 69065.00 161268.00 69065.00C161268.00 69086.33 161268.00 69107.67 161268.00 69129.00C161246.33 69172.00 161224.67 69215.00 161203.00 69258.00C161171.00 69290.00 161139.00 69322.00 161107.00 69354.00C161085.33 69354.00 161063.67 69354.00 161042.00 69354.00C161031.33 69364.66 161020.67 69375.34 161010.00 69386.00C160999.33 69386.00 160988.67 69386.00 160978.00 69386.00C160978.00 69407.67 160978.00 69429.33 160978.00 69451.00C160988.67 69483.00 160999.33 69515.00 161010.00 69547.00C160988.67 69568.34 160967.33 69589.66 160946.00 69611.00C160924.67 69611.00 160903.33 69611.00 160882.00 69611.00C160871.21 69621.69 160860.61 69632.59 160849.69 69643.15C160828.13 69654.10 160806.56 69665.05 160785.00 69676.00C160731.33 69676.00 160677.67 69676.00 160624.00 69676.00C160591.72 69718.88 160559.74 69762.02 160527.26 69804.74C160516.71 69815.19 160506.36 69825.84 160495.69 69836.15C160452.79 69857.77 160409.90 69879.39 160367.00 69901.00C160302.67 69901.00 160238.33 69901.00 160174.00 69901.00C160174.00 69911.67 160174.00 69922.33 160174.00 69933.00C160152.67 69954.34 160131.33 69975.66 160110.00 69997.00C160099.27 70029.43 160088.66 70061.90 160077.85 70094.31C160056.37 70137.53 160034.48 70180.56 160013.23 70223.89C159991.83 70276.93 159970.41 70329.96 159949.00 70383.00C159938.33 70372.34 159927.67 70361.66 159917.00 70351.00C159873.72 70404.89 159830.68 70458.98 159787.26 70512.74C159766.17 70533.82 159745.09 70554.91 159724.00 70576.00C159702.67 70576.00 159681.33 70576.00 159660.00 70576.00C159649.33 70608.00 159638.67 70640.00 159628.00 70672.00C159617.33 70672.00 159606.67 70672.00 159596.00 70672.00C159596.00 70683.00 159596.00 70694.00 159596.00 70705.00C159585.00 70715.67 159574.00 70726.33 159563.00 70737.00C159563.00 70758.33 159563.00 70779.67 159563.00 70801.00C159552.33 70822.33 159541.67 70843.67 159531.00 70865.00C159520.33 70865.00 159509.67 70865.00 159499.00 70865.00C159488.33 70908.00 159477.67 70951.00 159467.00 70994.00C159445.67 71004.67 159424.33 71015.33 159403.00 71026.00C159403.00 71069.00 159403.00 71112.00 159403.00 71155.00C159370.67 71165.67 159338.33 71176.33 159306.00 71187.00C159295.33 71165.67 159284.67 71144.33 159274.00 71123.00C159220.33 71123.00 159166.67 71123.00 159113.00 71123.00C159102.33 71144.33 159091.67 71165.67 159081.00 71187.00C159059.67 71187.00 159038.33 71187.00 159017.00 71187.00C159017.00 71208.33 159017.00 71229.67 159017.00 71251.00C159005.61 71251.22 158994.17 71250.55 158982.82 71251.36C158919.21 71261.91 158855.61 71272.46 158792.00 71283.00C158792.00 71304.67 158792.00 71326.33 158792.00 71348.00C158781.33 71369.33 158770.67 71390.67 158760.00 71412.00C158685.00 71412.00 158610.00 71412.00 158535.00 71412.00C158534.78 71423.10 158535.44 71434.29 158534.65 71445.34C158523.77 71487.89 158512.88 71530.45 158502.00 71573.00C158502.00 71648.00 158502.00 71723.00 158502.00 71798.00C158459.11 71830.29 158415.98 71862.27 158373.25 71894.75C158351.83 71916.16 158330.42 71937.58 158309.00 71959.00C158298.33 71959.00 158287.67 71959.00 158277.00 71959.00C158245.00 71991.00 158213.00 72023.00 158181.00 72055.00C158181.00 72087.00 158181.00 72119.00 158181.00 72151.00C158148.67 72183.34 158116.33 72215.66 158084.00 72248.00C158062.67 72344.33 158041.33 72440.67 158020.00 72537.00C157998.67 72537.00 157977.33 72537.00 157956.00 72537.00C157934.33 72526.33 157912.67 72515.67 157891.00 72505.00C157880.33 72505.00 157869.67 72505.00 157859.00 72505.00C157837.67 72526.67 157816.33 72548.33 157795.00 72570.00C157763.00 72580.67 157731.00 72591.33 157699.00 72602.00C157688.00 72623.33 157677.00 72644.67 157666.00 72666.00C157655.33 72676.66 157644.67 72687.34 157634.00 72698.00C157623.33 72698.00 157612.67 72698.00 157602.00 72698.00C157580.67 72676.66 157559.33 72655.34 157538.00 72634.00C157505.67 72634.00 157473.33 72634.00 157441.00 72634.00C157419.67 72601.66 157398.33 72569.34 157377.00 72537.00C157334.00 72569.33 157291.00 72601.67 157248.00 72634.00C157205.33 72612.67 157162.67 72591.33 157120.00 72570.00C157098.33 72580.67 157076.67 72591.33 157055.00 72602.00C157012.33 72602.00 156969.67 72602.00 156927.00 72602.00C156873.33 72634.00 156819.67 72666.00 156766.00 72698.00C156734.00 72708.67 156702.00 72719.33 156670.00 72730.00C156573.33 72730.00 156476.67 72730.00 156380.00 72730.00C156358.67 72740.67 156337.33 72751.33 156316.00 72762.00C156294.67 72762.00 156273.33 72762.00 156252.00 72762.00C156230.33 72751.33 156208.67 72740.67 156187.00 72730.00C156176.33 72730.00 156165.67 72730.00 156155.00 72730.00C156133.26 72741.02 156111.26 72751.58 156089.67 72762.89C156057.71 72784.35 156025.66 72805.68 155993.76 72827.24C155983.17 72837.82 155972.59 72848.42 155962.00 72859.00C155930.00 72859.00 155898.00 72859.00 155866.00 72859.00C155833.67 72869.67 155801.33 72880.33 155769.00 72891.00C155758.33 72891.00 155747.67 72891.00 155737.00 72891.00C155726.33 72912.33 155715.67 72933.67 155705.00 72955.00C155651.33 72987.33 155597.67 73019.67 155544.00 73052.00C155544.00 73094.67 155544.00 73137.33 155544.00 73180.00C155533.33 73180.00 155522.67 73180.00 155512.00 73180.00C155501.20 73191.03 155490.63 73202.26 155479.69 73213.15C155436.47 73234.71 155393.05 73255.90 155349.96 73277.69C155318.24 73298.90 155286.42 73319.95 155254.76 73341.24C155244.17 73351.82 155233.59 73362.42 155223.00 73373.00C155223.00 73416.00 155223.00 73459.00 155223.00 73502.00C155212.20 73512.69 155201.62 73523.59 155190.69 73534.15C155169.13 73544.77 155147.56 73555.38 155126.00 73566.00C155115.33 73576.66 155104.67 73587.34 155094.00 73598.00C155062.00 73587.33 155030.00 73576.67 154998.00 73566.00C154976.33 73576.67 154954.67 73587.33 154933.00 73598.00C154922.33 73609.00 154911.67 73620.00 154901.00 73631.00C154911.67 73652.33 154922.33 73673.67 154933.00 73695.00C154922.33 73716.33 154911.67 73737.67 154901.00 73759.00C154858.33 73769.67 154815.67 73780.33 154773.00 73791.00C154730.00 73780.33 154687.00 73769.67 154644.00 73759.00C154612.00 73769.67 154580.00 73780.33 154548.00 73791.00C154515.67 73780.33 154483.33 73769.67 154451.00 73759.00C154440.31 73769.79 154429.41 73780.38 154418.85 73791.31C154408.15 73812.96 154397.59 73834.68 154386.79 73856.27C154354.52 73898.85 154322.26 73941.42 154290.00 73984.00C154279.33 73973.34 154268.67 73962.66 154258.00 73952.00C154236.67 73962.67 154215.33 73973.33 154194.00 73984.00C154172.33 73984.00 154150.67 73984.00 154129.00 73984.00C154097.00 73994.67 154065.00 74005.33 154033.00 74016.00C154011.67 74016.00 153990.33 74016.00 153969.00 74016.00C153969.00 74005.33 153969.00 73994.67 153969.00 73984.00C153936.67 73973.33 153904.33 73962.67 153872.00 73952.00C153861.33 73941.34 153850.67 73930.66 153840.00 73920.00C153840.00 73963.00 153840.00 74006.00 153840.00 74049.00C153797.33 74091.66 153754.67 74134.34 153712.00 74177.00C153690.33 74187.67 153668.67 74198.33 153647.00 74209.00C153647.00 74241.33 153647.00 74273.67 153647.00 74306.00C153636.33 74316.66 153625.67 74327.34 153615.00 74338.00C153550.67 74348.67 153486.33 74359.33 153422.00 74370.00C153400.67 74370.00 153379.33 74370.00 153358.00 74370.00C153358.00 74338.00 153358.00 74306.00 153358.00 74274.00C153336.33 74241.67 153314.67 74209.33 153293.00 74177.00C153293.00 74145.00 153293.00 74113.00 153293.00 74081.00C153282.33 74059.34 153271.67 74037.66 153261.00 74016.00C153250.33 74016.00 153239.67 74016.00 153229.00 74016.00C153207.67 74037.67 153186.33 74059.33 153165.00 74081.00C153143.67 74081.00 153122.33 74081.00 153101.00 74081.00C153068.67 74038.00 153036.33 73995.00 153004.00 73952.00C152982.67 73941.33 152961.33 73930.67 152940.00 73920.00C152907.67 73920.00 152875.33 73920.00 152843.00 73920.00C152811.00 73898.67 152779.00 73877.33 152747.00 73856.00C152747.00 73845.00 152747.00 73834.00 152747.00 73823.00C152736.33 73801.54 152725.48 73780.18 152714.92 73758.67C152704.28 73716.11 152693.64 73673.56 152683.00 73631.00C152683.00 73609.33 152683.00 73587.67 152683.00 73566.00C152693.67 73534.00 152704.33 73502.00 152715.00 73470.00C152704.33 73459.34 152693.67 73448.66 152683.00 73438.00C152683.00 73427.00 152683.00 73416.00 152683.00 73405.00C152661.33 73383.67 152639.67 73362.33 152618.00 73341.00C152596.67 73330.33 152575.33 73319.67 152554.00 73309.00C152522.00 73319.67 152490.00 73330.33 152458.00 73341.00C152446.28 73341.22 152434.50 73340.55 152422.82 73341.36C152359.21 73351.91 152295.61 73362.46 152232.00 73373.00C152232.00 73341.00 152232.00 73309.00 152232.00 73277.00C152189.33 73277.00 152146.67 73277.00 152104.00 73277.00C152104.00 73266.33 152104.00 73255.67 152104.00 73245.00C152082.67 73234.33 152061.33 73223.67 152040.00 73213.00C152029.00 73213.00 152018.00 73213.00 152007.00 73213.00C152007.00 73202.00 152007.00 73191.00 152007.00 73180.00C151996.33 73180.00 151985.67 73180.00 151975.00 73180.00C151964.33 73169.34 151953.67 73158.66 151943.00 73148.00C151932.33 73158.66 151921.67 73169.34 151911.00 73180.00C151900.33 73180.00 151889.67 73180.00 151879.00 73180.00C151879.00 73201.67 151879.00 73223.33 151879.00 73245.00C151857.33 73223.34 151835.67 73201.66 151814.00 73180.00C151792.67 73180.00 151771.33 73180.00 151750.00 73180.00C151728.67 73233.67 151707.33 73287.33 151686.00 73341.00C151653.67 73362.34 151621.33 73383.66 151589.00 73405.00C151578.31 73394.21 151567.41 73383.61 151556.85 73372.69C151546.24 73351.46 151535.62 73330.23 151525.00 73309.00C151493.00 73309.00 151461.00 73309.00 151429.00 73309.00C151407.33 73319.67 151385.67 73330.33 151364.00 73341.00C151321.33 73341.00 151278.67 73341.00 151236.00 73341.00C151225.33 73362.33 151214.67 73383.67 151204.00 73405.00C151182.33 73405.00 151160.67 73405.00 151139.00 73405.00C151128.33 73362.33 151117.67 73319.67 151107.00 73277.00C151096.33 73277.00 151085.67 73277.00 151075.00 73277.00C151053.67 73266.33 151032.33 73255.67 151011.00 73245.00C150989.33 73212.67 150967.67 73180.33 150946.00 73148.00C150903.33 73148.00 150860.67 73148.00 150818.00 73148.00C150785.67 73116.00 150753.33 73084.00 150721.00 73052.00C150688.77 72997.78 150656.24 72943.72 150624.19 72889.39C150613.50 72868.33 150603.33 72846.96 150592.29 72826.10C150549.52 72772.74 150506.76 72719.37 150464.00 72666.00C150442.67 72655.33 150421.33 72644.67 150400.00 72634.00C150389.33 72634.00 150378.67 72634.00 150368.00 72634.00C150346.33 72623.33 150324.67 72612.67 150303.00 72602.00C150270.90 72612.73 150238.76 72623.35 150206.69 72634.15C150185.46 72644.77 150164.23 72655.38 150143.00 72666.00C150078.67 72730.34 150014.33 72794.66 149950.00 72859.00C149938.65 72859.23 149927.20 72858.54 149915.92 72859.36C149884.28 72869.90 149852.64 72880.45 149821.00 72891.00C149810.33 72891.00 149799.67 72891.00 149789.00 72891.00C149756.61 72923.10 149724.12 72955.11 149691.79 72987.27C149659.86 73030.18 149627.93 73073.09 149596.00 73116.00C149574.59 73126.76 149553.09 73137.34 149531.74 73148.22C149467.39 73201.87 149403.10 73255.59 149338.71 73309.19C149306.48 73330.47 149274.24 73351.73 149242.00 73373.00C149131.56 73409.94 149021.27 73447.36 148910.71 73483.95C148892.47 73489.97 148874.24 73495.98 148856.00 73502.00C148834.67 73523.34 148813.33 73544.66 148792.00 73566.00C148770.67 73609.00 148749.33 73652.00 148728.00 73695.00C148695.67 73716.34 148663.33 73737.66 148631.00 73759.00C148577.67 73844.67 148524.33 73930.33 148471.00 74016.00C148471.06 74037.78 148470.89 74059.56 148471.08 74081.33C148481.72 74123.89 148492.36 74166.44 148503.00 74209.00C148503.00 74252.00 148503.00 74295.00 148503.00 74338.00C148524.33 74348.67 148545.67 74359.33 148567.00 74370.00C148556.33 74370.00 148545.67 74370.00 148535.00 74370.00C148535.00 74380.67 148535.00 74391.33 148535.00 74402.00C148524.33 74423.66 148513.67 74445.34 148503.00 74467.00C148535.00 74477.67 148567.00 74488.33 148599.00 74499.00C148642.00 74574.00 148685.00 74649.00 148728.00 74724.00C148728.00 74777.67 148728.00 74831.33 148728.00 74885.00C148749.33 74949.00 148770.67 75013.00 148792.00 75077.00C148813.33 75088.00 148834.67 75099.00 148856.00 75110.00C148867.00 75120.67 148878.00 75131.33 148889.00 75142.00C148953.00 75163.33 149017.00 75184.67 149081.00 75206.00C149092.00 75227.33 149103.00 75248.67 149114.00 75270.00C149146.00 75270.00 149178.00 75270.00 149210.00 75270.00C149231.33 75291.67 149252.67 75313.33 149274.00 75335.00C149295.67 75345.67 149317.33 75356.33 149339.00 75367.00C149360.33 75388.34 149381.67 75409.66 149403.00 75431.00C149403.00 75441.67 149403.00 75452.33 149403.00 75463.00C149381.67 75484.67 149360.33 75506.33 149339.00 75528.00C149339.00 75549.33 149339.00 75570.67 149339.00 75592.00C149328.33 75613.33 149317.67 75634.67 149307.00 75656.00C149274.67 75666.67 149242.33 75677.33 149210.00 75688.00C149210.00 75709.67 149210.00 75731.33 149210.00 75753.00C149188.67 75753.00 149167.33 75753.00 149146.00 75753.00C149146.00 75785.00 149146.00 75817.00 149146.00 75849.00C149167.33 75849.00 149188.67 75849.00 149210.00 75849.00C149220.67 75859.66 149231.33 75870.34 149242.00 75881.00C149242.00 75891.67 149242.00 75902.33 149242.00 75913.00C149220.67 75956.00 149199.33 75999.00 149178.00 76042.00C149210.00 76074.00 149242.00 76106.00 149274.00 76138.00C149295.67 76149.00 149317.33 76160.00 149339.00 76171.00C149349.67 76192.33 149360.33 76213.67 149371.00 76235.00C149360.33 76278.00 149349.67 76321.00 149339.00 76364.00C149306.67 76385.34 149274.33 76406.66 149242.00 76428.00C149231.33 76460.00 149220.67 76492.00 149210.00 76524.00C149210.00 76545.67 149210.00 76567.33 149210.00 76589.00C149113.67 76589.00 149017.33 76589.00 148921.00 76589.00C148910.16 76600.06 148898.85 76610.72 148888.30 76622.03C148866.86 76653.68 148845.43 76685.34 148824.00 76717.00C148834.67 76738.66 148845.33 76760.34 148856.00 76782.00C148855.97 76814.11 148856.06 76846.23 148855.95 76878.34C148845.30 76953.23 148834.65 77028.11 148824.00 77103.00C148791.91 77146.07 148759.92 77189.22 148727.76 77232.24C148663.50 77296.49 148599.25 77360.75 148535.00 77425.00C148535.00 77521.33 148535.00 77617.67 148535.00 77714.00C148513.56 77735.38 148492.24 77756.89 148470.71 77778.19C148438.41 77799.90 148406.00 77821.45 148373.76 77843.24C148341.84 77875.16 148309.92 77907.08 148278.00 77939.00C148267.00 77971.33 148256.00 78003.67 148245.00 78036.00C148223.67 78057.34 148202.33 78078.66 148181.00 78100.00C148170.33 78153.67 148159.67 78207.33 148149.00 78261.00C148149.00 78271.67 148149.00 78282.33 148149.00 78293.00C148074.00 78293.00 147999.00 78293.00 147924.00 78293.00C147859.69 78260.62 147795.44 78228.11 147731.00 78196.00C147709.67 78196.00 147688.33 78196.00 147667.00 78196.00C147656.33 78217.79 147645.49 78239.50 147634.91 78261.33C147623.94 78303.89 147612.97 78346.44 147602.00 78389.00C147613.00 78442.67 147624.00 78496.33 147635.00 78550.00C147635.00 78560.67 147635.00 78571.33 147635.00 78582.00C147603.44 78613.26 147571.34 78643.98 147540.73 78676.18C147535.01 78682.16 147535.16 78691.58 147532.00 78699.06C147502.00 78799.38 147472.00 78899.69 147442.00 79000.00C147431.00 79021.33 147420.00 79042.67 147409.00 79064.00C147398.33 79075.00 147387.67 79086.00 147377.00 79097.00C147345.00 79097.00 147313.00 79097.00 147281.00 79097.00C147270.31 79107.79 147259.41 79118.39 147248.84 79129.31C147217.79 79190.68 147186.20 79251.78 147156.12 79313.64C147153.97 79318.39 147152.37 79324.03 147146.00 79322.00C147137.33 79322.00 147128.67 79322.00 147120.00 79322.00C147098.67 79332.67 147077.33 79343.33 147056.00 79354.00C147034.67 79354.00 147013.33 79354.00 146992.00 79354.00C146948.88 79332.77 146905.70 79311.63 146862.87 79289.81C146830.49 79268.37 146798.31 79246.57 146766.00 79225.00C146755.33 79225.00 146744.67 79225.00 146734.00 79225.00C146702.00 79246.67 146670.00 79268.33 146638.00 79290.00C146626.99 79289.77 146615.86 79290.48 146604.91 79289.63C146572.94 79278.75 146540.97 79267.88 146509.00 79257.00C146477.00 79235.67 146445.00 79214.33 146413.00 79193.00C146380.67 79128.66 146348.33 79064.34 146316.00 79000.00C146294.67 78978.66 146273.33 78957.34 146252.00 78936.00C146230.67 78925.33 146209.33 78914.67 146188.00 78904.00C146166.33 78904.00 146144.67 78904.00 146123.00 78904.00C146108.32 78919.05 146092.63 78933.18 146079.37 78949.55C146018.66 79020.27 145958.08 79091.12 145897.26 79161.74C145886.84 79172.16 145876.42 79182.58 145866.00 79193.00C145834.00 79203.67 145802.00 79214.33 145770.00 79225.00C145727.00 79214.33 145684.00 79203.67 145641.00 79193.00C145630.33 79193.00 145619.67 79193.00 145609.00 79193.00C145598.31 79203.79 145587.41 79214.38 145576.85 79225.31C145566.24 79246.87 145555.62 79268.44 145545.00 79290.00C145523.33 79311.33 145501.67 79332.67 145480.00 79354.00C145448.00 79364.67 145416.00 79375.33 145384.00 79386.00C145351.67 79386.00 145319.33 79386.00 145287.00 79386.00C145244.33 79354.00 145201.67 79322.00 145159.00 79290.00C145116.00 79290.00 145073.00 79290.00 145030.00 79290.00C145008.67 79300.67 144987.33 79311.33 144966.00 79322.00C144944.33 79364.66 144922.67 79407.34 144901.00 79450.00C144890.21 79460.70 144879.61 79471.59 144868.69 79482.16C144847.46 79493.11 144826.23 79504.05 144805.00 79515.00C144773.00 79515.00 144741.00 79515.00 144709.00 79515.00C144687.33 79525.67 144665.67 79536.33 144644.00 79547.00C144633.33 79557.66 144622.67 79568.34 144612.00 79579.00C144612.00 79589.67 144612.00 79600.33 144612.00 79611.00C144601.33 79611.00 144590.67 79611.00 144580.00 79611.00C144601.33 79675.33 144622.67 79739.67 144644.00 79804.00C144633.33 79836.00 144622.67 79868.00 144612.00 79900.00C144612.00 79911.00 144612.00 79922.00 144612.00 79933.00C144580.00 79943.67 144548.00 79954.33 144516.00 79965.00C144473.00 79954.33 144430.00 79943.67 144387.00 79933.00C144365.67 79943.67 144344.33 79954.33 144323.00 79965.00C144312.33 79975.66 144301.67 79986.34 144291.00 79997.00C144258.67 80007.67 144226.33 80018.33 144194.00 80029.00C144183.33 80039.66 144172.67 80050.34 144162.00 80061.00C144162.00 80093.33 144162.00 80125.67 144162.00 80158.00C144119.00 80158.00 144076.00 80158.00 144033.00 80158.00C144001.00 80222.33 143969.00 80286.67 143937.00 80351.00C143937.00 80383.00 143937.00 80415.00 143937.00 80447.00C143915.56 80468.39 143894.22 80489.87 143872.73 80511.21C143829.82 80543.47 143786.91 80575.74 143744.00 80608.00C143733.33 80586.34 143722.67 80564.66 143712.00 80543.00C143701.33 80543.00 143690.67 80543.00 143680.00 80543.00C143647.67 80575.34 143615.33 80607.66 143583.00 80640.00C143561.67 80640.00 143540.33 80640.00 143519.00 80640.00C143508.33 80650.66 143497.67 80661.34 143487.00 80672.00C143476.33 80672.00 143465.67 80672.00 143455.00 80672.00C143422.67 80704.34 143390.33 80736.66 143358.00 80769.00C143293.67 80715.33 143229.33 80661.67 143165.00 80608.00C143165.00 80597.33 143165.00 80586.67 143165.00 80576.00C143153.99 80575.76 143142.87 80576.48 143131.93 80575.63C143100.29 80564.76 143068.64 80553.88 143037.00 80543.00C143004.67 80543.00 142972.33 80543.00 142940.00 80543.00C142918.67 80511.00 142897.33 80479.00 142876.00 80447.00C142854.67 80436.33 142833.33 80425.67 142812.00 80415.00C142800.87 80404.30 142789.94 80393.41 142778.69 80382.85C142757.46 80372.23 142736.23 80361.62 142715.00 80351.00C142704.33 80340.00 142693.67 80329.00 142683.00 80318.00C142661.67 80318.00 142640.33 80318.00 142619.00 80318.00C142586.67 80329.00 142554.33 80340.00 142522.00 80351.00C142511.33 80340.00 142500.67 80329.00 142490.00 80318.00C142425.55 80317.97 142361.11 80318.06 142296.66 80317.96C142210.99 80307.32 142125.34 80296.57 142039.66 80286.00C142029.11 80286.00 142018.55 80286.00 142008.00 80286.00C142008.00 80275.33 142008.00 80264.67 142008.00 80254.00C141997.33 80243.34 141986.67 80232.66 141976.00 80222.00C141933.00 80222.00 141890.00 80222.00 141847.00 80222.00C141836.33 80211.34 141825.67 80200.66 141815.00 80190.00C141793.67 80136.33 141772.33 80082.67 141751.00 80029.00C141751.00 80018.33 141751.00 80007.67 141751.00 79997.00C141718.55 79986.32 141686.13 79975.54 141653.66 79964.93C141600.11 79954.29 141546.55 79943.65 141493.00 79933.00C141439.33 79890.00 141385.67 79847.00 141332.00 79804.00C141310.67 79707.67 141289.33 79611.33 141268.00 79515.00C141268.00 79504.00 141268.00 79493.00 141268.00 79482.00C141257.31 79471.21 141246.41 79460.61 141235.85 79449.69C141225.24 79428.46 141214.62 79407.23 141204.00 79386.00C141182.67 79386.00 141161.33 79386.00 141140.00 79386.00C141118.33 79375.33 141096.67 79364.67 141075.00 79354.00C141064.33 79354.00 141053.67 79354.00 141043.00 79354.00C141021.67 79332.66 141000.33 79311.34 140979.00 79290.00C140978.67 79277.50 140979.72 79264.92 140978.35 79252.48C140967.91 79178.99 140957.45 79105.49 140947.00 79032.00C140936.33 79000.00 140925.67 78968.00 140915.00 78936.00C140925.67 78914.34 140936.33 78892.66 140947.00 78871.00C140947.00 78839.00 140947.00 78807.00 140947.00 78775.00C140936.33 78753.67 140925.67 78732.33 140915.00 78711.00C140936.43 78678.60 140957.71 78646.10 140979.24 78613.76C141024.73 78568.43 141069.90 78522.78 141115.59 78477.67C141123.73 78469.78 141131.87 78461.89 141140.00 78454.00C141140.00 78432.33 141140.00 78410.67 141140.00 78389.00C141097.00 78357.00 141054.00 78325.00 141011.00 78293.00C141000.33 78260.67 140989.67 78228.33 140979.00 78196.00C140989.67 78142.67 141000.33 78089.33 141011.00 78036.00C141000.33 78014.34 140989.67 77992.66 140979.00 77971.00C140936.00 77939.00 140893.00 77907.00 140850.00 77875.00C140828.67 77832.00 140807.33 77789.00 140786.00 77746.00C140764.67 77735.33 140743.33 77724.67 140722.00 77714.00C140710.61 77703.16 140699.59 77691.87 140687.96 77681.31C140656.24 77660.10 140624.41 77639.06 140592.76 77617.75C140582.17 77606.84 140571.59 77595.92 140561.00 77585.00C140561.00 77531.67 140561.00 77478.33 140561.00 77425.00C140549.76 77413.68 140539.04 77401.79 140527.45 77390.84C140484.96 77359.23 140442.48 77327.61 140400.00 77296.00C140378.67 77264.00 140357.33 77232.00 140336.00 77200.00C140336.00 77103.33 140336.00 77006.67 140336.00 76910.00C140314.24 76877.93 140292.61 76845.77 140270.76 76813.76C140249.51 76792.17 140228.25 76770.59 140207.00 76749.00C140196.33 76749.00 140185.67 76749.00 140175.00 76749.00C140121.33 76781.33 140067.67 76813.67 140014.00 76846.00C139992.67 76846.00 139971.33 76846.00 139950.00 76846.00C139917.67 76878.00 139885.33 76910.00 139853.00 76942.00C139831.67 76952.67 139810.33 76963.33 139789.00 76974.00C139724.67 76974.00 139660.33 76974.00 139596.00 76974.00C139574.67 77006.34 139553.33 77038.66 139532.00 77071.00C139542.74 77092.71 139553.87 77114.26 139564.36 77136.08C139574.91 77168.05 139585.45 77200.03 139596.00 77232.00C139585.33 77264.00 139574.67 77296.00 139564.00 77328.00C139542.67 77349.34 139521.33 77370.66 139500.00 77392.00C139425.00 77435.00 139350.00 77478.00 139275.00 77521.00C139200.00 77510.33 139125.00 77499.67 139050.00 77489.00C138985.67 77456.67 138921.33 77424.33 138857.00 77392.00C138780.83 77414.10 138704.56 77435.85 138628.46 77458.17C138597.30 77468.45 138566.15 77478.72 138535.00 77489.00z"},"br-06":{"name":"Ceará","path":"M160014.00 43760.00C160014.00 43738.67 160014.00 43717.33 160014.00 43696.00C160035.33 43674.33 160056.67 43652.67 160078.00 43631.00C160078.00 43620.33 160078.00 43609.67 160078.00 43599.00C160099.38 43545.61 160120.69 43492.18 160142.11 43438.80C160238.74 43267.20 160335.37 43095.60 160432.00 42924.00C160432.00 42892.00 160432.00 42860.00 160432.00 42828.00C160442.67 42806.33 160453.33 42784.67 160464.00 42763.00C160517.33 42709.67 160570.67 42656.33 160624.00 42603.00C160624.00 42581.33 160624.00 42559.67 160624.00 42538.00C160645.67 42538.00 160667.33 42538.00 160689.00 42538.00C160689.00 42527.33 160689.00 42516.67 160689.00 42506.00C160710.33 42495.33 160731.67 42484.67 160753.00 42474.00C160753.00 42442.00 160753.00 42410.00 160753.00 42378.00C160742.33 42378.00 160731.67 42378.00 160721.00 42378.00C160731.67 42356.33 160742.33 42334.67 160753.00 42313.00C160753.00 42302.33 160753.00 42291.67 160753.00 42281.00C160763.67 42259.67 160774.33 42238.33 160785.00 42217.00C160774.33 42206.33 160763.67 42195.67 160753.00 42185.00C160763.67 42185.00 160774.33 42185.00 160785.00 42185.00C160774.33 42163.33 160763.67 42141.67 160753.00 42120.00C160753.00 42098.67 160753.00 42077.33 160753.00 42056.00C160731.67 42024.00 160710.33 41992.00 160689.00 41960.00C160689.00 41938.33 160689.00 41916.67 160689.00 41895.00C160646.00 41895.00 160603.00 41895.00 160560.00 41895.00C160528.00 41873.67 160496.00 41852.33 160464.00 41831.00C160464.00 41820.33 160464.00 41809.67 160464.00 41799.00C160453.33 41799.00 160442.67 41799.00 160432.00 41799.00C160432.00 41756.00 160432.00 41713.00 160432.00 41670.00C160507.00 41627.33 160582.00 41584.67 160657.00 41542.00C160667.67 41531.00 160678.33 41520.00 160689.00 41509.00C160710.33 41498.33 160731.67 41487.67 160753.00 41477.00C160796.00 41487.67 160839.00 41498.33 160882.00 41509.00C160946.33 41509.00 161010.67 41509.00 161075.00 41509.00C161096.33 41498.33 161117.67 41487.67 161139.00 41477.00C161224.67 41487.67 161310.33 41498.33 161396.00 41509.00C161428.33 41520.00 161460.67 41531.00 161493.00 41542.00C161503.67 41531.00 161514.33 41520.00 161525.00 41509.00C161535.67 41520.00 161546.33 41531.00 161557.00 41542.00C161600.08 41541.98 161643.15 41542.04 161686.23 41541.97C161771.82 41530.98 161857.41 41519.99 161943.00 41509.00C161964.41 41498.33 161985.77 41487.54 162007.22 41476.94C162050.15 41466.30 162093.07 41455.65 162136.00 41445.00C162157.33 41434.33 162178.67 41423.67 162200.00 41413.00C162264.33 41413.00 162328.67 41413.00 162393.00 41413.00C162403.67 41391.67 162414.33 41370.33 162425.00 41349.00C162435.67 41359.67 162446.33 41370.33 162457.00 41381.00C162489.33 41381.00 162521.67 41381.00 162554.00 41381.00C162554.00 41370.33 162554.00 41359.67 162554.00 41349.00C162564.67 41359.67 162575.33 41370.33 162586.00 41381.00C162596.67 41370.33 162607.33 41359.67 162618.00 41349.00C162628.67 41359.67 162639.33 41370.33 162650.00 41381.00C162660.67 41381.00 162671.33 41381.00 162682.00 41381.00C162692.67 41413.00 162703.33 41445.00 162714.00 41477.00C162735.67 41466.33 162757.33 41455.67 162779.00 41445.00C162800.33 41445.00 162821.67 41445.00 162843.00 41445.00C162875.33 41434.33 162907.67 41423.67 162940.00 41413.00C162972.00 41381.00 163004.00 41349.00 163036.00 41317.00C163175.33 41317.00 163314.67 41317.00 163454.00 41317.00C163475.33 41306.00 163496.67 41295.00 163518.00 41284.00C163561.00 41295.00 163604.00 41306.00 163647.00 41317.00C163732.67 41306.00 163818.33 41295.00 163904.00 41284.00C163936.33 41273.33 163968.67 41262.67 164001.00 41252.00C164011.67 41241.33 164022.33 41230.67 164033.00 41220.00C164086.33 41198.67 164139.67 41177.33 164193.00 41156.00C164214.67 41134.33 164236.33 41112.67 164258.00 41091.00C164258.00 41069.67 164258.00 41048.33 164258.00 41027.00C164290.00 41016.33 164322.00 41005.67 164354.00 40995.00C164418.33 41027.00 164482.67 41059.00 164547.00 41091.00C164579.33 41102.00 164611.67 41113.00 164644.00 41124.00C164740.33 41124.00 164836.67 41124.00 164933.00 41124.00C165008.00 41113.00 165083.00 41102.00 165158.00 41091.00C165222.33 41102.00 165286.67 41113.00 165351.00 41124.00C165394.00 41124.00 165437.00 41124.00 165480.00 41124.00C165480.00 41113.00 165480.00 41102.00 165480.00 41091.00C165545.25 41102.21 165610.53 41113.21 165675.75 41124.55C165728.17 41135.03 165780.58 41145.52 165833.00 41156.00C165822.33 41145.33 165811.67 41134.67 165801.00 41124.00C165854.67 41156.00 165908.33 41188.00 165962.00 41220.00C165972.67 41230.67 165983.33 41241.33 165994.00 41252.00C166026.33 41241.33 166058.67 41230.67 166091.00 41220.00C166091.00 41209.33 166091.00 41198.67 166091.00 41188.00C166144.33 41188.00 166197.67 41188.00 166251.00 41188.00C166283.33 41198.67 166315.67 41209.33 166348.00 41220.00C166348.00 41230.67 166348.00 41241.33 166348.00 41252.00C166401.67 41252.00 166455.33 41252.00 166509.00 41252.00C166541.00 41262.67 166573.00 41273.33 166605.00 41284.00C166615.67 41273.33 166626.33 41262.67 166637.00 41252.00C166615.67 41252.00 166594.33 41252.00 166573.00 41252.00C166583.67 41241.33 166594.33 41230.67 166605.00 41220.00C166658.67 41252.33 166712.33 41284.67 166766.00 41317.00C166787.33 41317.00 166808.67 41317.00 166830.00 41317.00C166808.67 41306.00 166787.33 41295.00 166766.00 41284.00C166744.33 41284.00 166722.67 41284.00 166701.00 41284.00C166722.67 41284.00 166744.33 41284.00 166766.00 41284.00C166819.67 41305.67 166873.33 41327.33 166927.00 41349.00C166905.33 41338.33 166883.67 41327.67 166862.00 41317.00C166905.00 41327.67 166948.00 41338.33 166991.00 41349.00C167001.67 41370.33 167012.33 41391.67 167023.00 41413.00C167055.00 41423.67 167087.00 41434.33 167119.00 41445.00C167130.00 41445.00 167141.00 41445.00 167152.00 41445.00C167162.67 41455.67 167173.33 41466.33 167184.00 41477.00C167205.33 41477.00 167226.67 41477.00 167248.00 41477.00C167333.68 41541.43 167419.35 41605.89 167505.20 41670.10C167526.85 41680.79 167548.56 41691.38 167570.18 41702.14C167612.78 41734.43 167655.39 41766.71 167698.00 41799.00C167730.33 41809.67 167762.67 41820.33 167795.00 41831.00C167837.67 41874.00 167880.33 41917.00 167923.00 41960.00C167933.67 41960.00 167944.33 41960.00 167955.00 41960.00C167987.33 41981.33 168019.67 42002.67 168052.00 42024.00C168095.00 42024.00 168138.00 42024.00 168181.00 42024.00C168202.33 42034.67 168223.67 42045.33 168245.00 42056.00C168274.89 42086.03 168305.16 42115.69 168334.48 42146.28C168337.53 42148.44 168339.29 42153.62 168343.50 42153.00C168353.33 42153.00 168363.17 42153.00 168373.00 42153.00C168394.67 42142.00 168416.33 42131.00 168438.00 42120.00C168459.33 42131.00 168480.67 42142.00 168502.00 42153.00C168533.83 42200.68 168565.46 42248.50 168597.74 42295.88C168608.86 42312.32 168619.99 42328.76 168631.16 42345.16C168641.77 42356.11 168652.39 42367.05 168663.00 42378.00C168684.33 42378.00 168705.67 42378.00 168727.00 42378.00C168760.02 42399.71 168792.91 42421.65 168826.02 42443.21C168878.68 42474.81 168931.34 42506.40 168984.00 42538.00C169037.67 42559.67 169091.33 42581.33 169145.00 42603.00C169177.33 42645.67 169209.67 42688.33 169242.00 42731.00C169284.81 42741.72 169327.64 42752.36 169370.43 42763.14C169402.62 42773.76 169434.81 42784.38 169467.00 42795.00C169499.00 42827.33 169531.00 42859.67 169563.00 42892.00C169584.33 42902.67 169605.67 42913.33 169627.00 42924.00C169659.33 42913.33 169691.67 42902.67 169724.00 42892.00C169756.00 42902.67 169788.00 42913.33 169820.00 42924.00C169863.00 42967.00 169906.00 43010.00 169949.00 43053.00C169959.67 43053.00 169970.33 43053.00 169981.00 43053.00C170023.89 43074.55 170066.90 43095.86 170110.00 43117.00C170152.67 43117.00 170195.33 43117.00 170238.00 43117.00C170267.74 43146.43 170297.86 43175.47 170327.05 43205.44C170340.71 43219.37 170354.53 43233.16 170368.05 43247.22C170432.03 43321.82 170496.02 43396.41 170560.00 43471.00C170592.00 43524.33 170624.00 43577.67 170656.00 43631.00C170666.67 43631.00 170677.33 43631.00 170688.00 43631.00C170688.00 43642.00 170688.00 43653.00 170688.00 43664.00C170720.33 43685.33 170752.67 43706.67 170785.00 43728.00C170828.00 43728.00 170871.00 43728.00 170914.00 43728.00C170924.67 43760.00 170935.33 43792.00 170946.00 43824.00C170978.00 43867.00 171010.00 43910.00 171042.00 43953.00C171074.33 43974.33 171106.67 43995.67 171139.00 44017.00C171139.00 44006.33 171139.00 43995.67 171139.00 43985.00C171160.33 44006.67 171181.67 44028.33 171203.00 44050.00C171224.33 44050.00 171245.67 44050.00 171267.00 44050.00C171288.67 44039.00 171310.33 44028.00 171332.00 44017.00C171342.67 44017.00 171353.33 44017.00 171364.00 44017.00C171374.67 44006.33 171385.33 43995.67 171396.00 43985.00C171417.33 43985.00 171438.67 43985.00 171460.00 43985.00C171513.67 44017.33 171567.33 44049.67 171621.00 44082.00C171642.33 44124.67 171663.67 44167.33 171685.00 44210.00C171706.33 44220.67 171727.67 44231.33 171749.00 44242.00C171749.00 44263.67 171749.00 44285.33 171749.00 44307.00C171760.00 44307.00 171771.00 44307.00 171782.00 44307.00C171792.67 44349.67 171803.33 44392.33 171814.00 44435.00C171835.33 44456.67 171856.67 44478.33 171878.00 44500.00C171910.33 44500.00 171942.67 44500.00 171975.00 44500.00C172028.33 44553.33 172081.67 44606.67 172135.00 44660.00C172167.33 44671.00 172199.67 44682.00 172232.00 44693.00C172264.00 44693.00 172296.00 44693.00 172328.00 44693.00C172338.99 44704.12 172350.26 44714.98 172361.07 44726.28C172414.38 44790.18 172467.69 44854.09 172521.00 44918.00C172531.67 44939.33 172542.33 44960.67 172553.00 44982.00C172585.33 45014.00 172617.67 45046.00 172650.00 45078.00C172671.33 45078.00 172692.67 45078.00 172714.00 45078.00C172757.00 45099.67 172800.00 45121.33 172843.00 45143.00C172918.00 45218.00 172993.00 45293.00 173068.00 45368.00C173100.00 45378.67 173132.00 45389.33 173164.00 45400.00C173207.00 45400.00 173250.00 45400.00 173293.00 45400.00C173314.33 45410.67 173335.67 45421.33 173357.00 45432.00C173378.33 45432.00 173399.67 45432.00 173421.00 45432.00C173463.95 45453.04 173506.79 45474.31 173549.53 45495.77C173554.56 45500.37 173559.14 45505.59 173564.00 45510.44C173570.00 45516.63 173576.00 45522.81 173582.00 45529.00C173592.67 45529.00 173603.33 45529.00 173614.00 45529.00C173635.67 45539.67 173657.33 45550.33 173679.00 45561.00C173711.00 45561.00 173743.00 45561.00 173775.00 45561.00C173785.67 45571.67 173796.33 45582.33 173807.00 45593.00C173828.67 45582.33 173850.33 45571.67 173872.00 45561.00C173893.33 45561.00 173914.67 45561.00 173936.00 45561.00C173936.00 45539.33 173936.00 45517.67 173936.00 45496.00C173925.33 45485.33 173914.67 45474.67 173904.00 45464.00C173925.33 45485.67 173946.67 45507.33 173968.00 45529.00C174021.67 45625.33 174075.33 45721.67 174129.00 45818.00C174129.00 45828.67 174129.00 45839.33 174129.00 45850.00C174182.70 45925.07 174236.44 46000.11 174290.12 46075.19C174343.60 46161.01 174396.92 46246.94 174450.52 46332.68C174482.68 46375.46 174514.84 46418.23 174547.00 46461.00C174590.00 46493.00 174633.00 46525.00 174676.00 46557.00C174707.93 46589.40 174739.74 46621.93 174772.00 46654.00C174750.67 46643.33 174729.33 46632.67 174708.00 46622.00C174718.67 46632.67 174729.33 46643.33 174740.00 46654.00C174750.67 46654.00 174761.33 46654.00 174772.00 46654.00C174772.00 46643.33 174772.00 46632.67 174772.00 46622.00C174804.00 46622.00 174836.00 46622.00 174868.00 46622.00C174879.03 46632.74 174890.15 46643.39 174901.13 46654.19C174922.71 46686.43 174944.06 46718.84 174965.78 46750.98C175008.19 46804.32 175050.60 46857.66 175093.00 46911.00C175104.14 46921.92 175115.54 46932.61 175126.52 46943.69C175158.40 46986.51 175190.22 47029.38 175222.16 47072.16C175232.81 47082.85 175243.54 47093.45 175254.13 47104.19C175318.68 47200.29 175382.76 47296.69 175447.00 47393.00C175457.69 47404.08 175468.49 47415.05 175479.11 47426.20C175522.08 47501.13 175565.04 47576.06 175608.00 47651.00C175651.00 47672.33 175694.00 47693.67 175737.00 47715.00C175812.23 47800.87 175887.35 47886.85 175962.65 47972.65C176016.04 48025.93 176068.93 48079.71 176122.19 48133.13C176154.46 48154.42 176186.73 48175.71 176219.00 48197.00C176337.00 48315.00 176455.00 48433.00 176573.00 48551.00C176616.06 48583.23 176659.00 48615.62 176702.13 48647.76C176766.09 48690.50 176830.04 48733.25 176894.00 48776.00C176915.33 48776.00 176936.67 48776.00 176958.00 48776.00C177001.00 48808.33 177044.00 48840.67 177087.00 48873.00C177119.00 48873.00 177151.00 48873.00 177183.00 48873.00C177204.67 48883.67 177226.33 48894.33 177248.00 48905.00C177258.67 48894.33 177269.33 48883.67 177280.00 48873.00C177290.67 48915.67 177301.33 48958.33 177312.00 49001.00C177301.33 49001.00 177290.67 49001.00 177280.00 49001.00C177301.36 49033.41 177322.78 49065.77 177344.10 49098.20C177380.46 49170.95 177416.79 49243.71 177453.49 49316.28C177459.99 49329.19 177466.50 49342.10 177473.00 49355.00C177505.00 49387.00 177537.00 49419.00 177569.00 49451.00C177590.67 49461.67 177612.33 49472.33 177634.00 49483.00C177644.85 49494.32 177655.96 49505.40 177666.64 49516.86C177698.49 49559.29 177730.27 49601.77 177762.16 49644.16C177791.54 49673.84 177820.52 49703.92 177850.44 49733.06C177864.37 49746.72 177878.16 49760.53 177892.22 49774.05C177966.81 49838.03 178041.40 49902.02 178116.00 49966.00C178158.67 49987.33 178201.33 50008.67 178244.00 50030.00C178287.00 50040.67 178330.00 50051.33 178373.00 50062.00C178437.22 50029.78 178501.64 49997.95 178566.00 49966.00C178598.00 49998.00 178630.00 50030.00 178662.00 50062.00C178662.00 50072.67 178662.00 50083.33 178662.00 50094.00C178683.67 50094.00 178705.33 50094.00 178727.00 50094.00C178812.67 50137.00 178898.33 50180.00 178984.00 50223.00C179037.67 50233.67 179091.33 50244.33 179145.00 50255.00C179166.33 50265.67 179187.67 50276.33 179209.00 50287.00C179219.67 50297.67 179230.33 50308.33 179241.00 50319.00C179241.00 50308.33 179241.00 50297.67 179241.00 50287.00C179241.00 50297.67 179241.00 50308.33 179241.00 50319.00C179262.67 50319.00 179284.33 50319.00 179306.00 50319.00C179327.39 50330.06 179348.82 50341.02 179370.18 50352.14C179412.79 50384.09 179455.39 50416.05 179498.00 50448.00C179519.69 50480.41 179541.45 50512.77 179563.10 50545.20C179573.75 50566.55 179584.49 50587.84 179595.06 50609.22C179616.41 50684.21 179637.70 50759.23 179659.09 50834.21C179680.72 50887.81 179702.36 50941.40 179724.00 50995.00C179713.00 51005.67 179702.00 51016.33 179691.00 51027.00C179519.40 51063.68 179347.75 51100.07 179176.20 51136.97C179047.80 51164.64 178919.40 51192.32 178791.00 51220.00C178758.85 51230.69 178726.73 51241.48 178694.56 51252.11C178426.71 51316.40 178158.85 51380.70 177891.00 51445.00C177869.33 51509.41 177847.58 51573.80 177825.96 51638.22C177815.31 51691.48 177804.65 51744.74 177794.00 51798.00C177762.00 51884.00 177730.00 51970.00 177698.00 52056.00C177644.33 52077.33 177590.67 52098.67 177537.00 52120.00C177515.67 52141.33 177494.33 52162.67 177473.00 52184.00C177462.33 52227.00 177451.67 52270.00 177441.00 52313.00C177387.33 52366.67 177333.67 52420.33 177280.00 52474.00C177269.33 52559.67 177258.67 52645.33 177248.00 52731.00C177226.33 52763.00 177204.67 52795.00 177183.00 52827.00C177183.00 52848.67 177183.00 52870.33 177183.00 52892.00C177194.00 52902.67 177205.00 52913.33 177216.00 52924.00C177216.00 52945.33 177216.00 52966.67 177216.00 52988.00C177205.00 53020.33 177194.00 53052.67 177183.00 53085.00C177183.00 53106.33 177183.00 53127.67 177183.00 53149.00C177194.00 53170.33 177205.00 53191.67 177216.00 53213.00C177216.00 53223.67 177216.00 53234.33 177216.00 53245.00C177205.00 53245.00 177194.00 53245.00 177183.00 53245.00C177164.68 53263.94 177146.37 53282.89 177127.60 53301.39C177113.83 53315.08 177100.24 53328.98 177086.32 53342.51C177043.55 53374.34 177000.77 53406.17 176958.00 53438.00C176936.67 53448.67 176915.33 53459.33 176894.00 53470.00C176883.33 53502.33 176872.67 53534.67 176862.00 53567.00C176862.00 53577.67 176862.00 53588.33 176862.00 53599.00C176851.33 53609.67 176840.67 53620.33 176830.00 53631.00C176840.67 53663.33 176851.33 53695.67 176862.00 53728.00C176851.28 53749.39 176840.65 53770.83 176829.86 53792.18C176797.58 53835.12 176765.29 53878.06 176733.00 53921.00C176732.97 53942.41 176733.06 53963.82 176732.96 53985.22C176722.31 54038.82 176711.65 54092.41 176701.00 54146.00C176690.33 54156.67 176679.67 54167.33 176669.00 54178.00C176658.33 54199.33 176647.67 54220.67 176637.00 54242.00C176615.67 54252.67 176594.33 54263.33 176573.00 54274.00C176551.33 54274.00 176529.67 54274.00 176508.00 54274.00C176486.67 54317.00 176465.33 54360.00 176444.00 54403.00C176422.28 54413.94 176400.43 54424.63 176378.78 54435.72C176325.52 54467.49 176272.26 54499.24 176219.00 54531.00C176219.00 54542.00 176219.00 54553.00 176219.00 54564.00C176208.33 54574.67 176197.67 54585.33 176187.00 54596.00C176187.00 54617.33 176187.00 54638.67 176187.00 54660.00C176165.33 54681.33 176143.67 54702.67 176122.00 54724.00C176090.00 54788.33 176058.00 54852.67 176026.00 54917.00C175993.67 54928.00 175961.33 54939.00 175929.00 54950.00C175886.33 54992.67 175843.67 55035.33 175801.00 55078.00C175801.00 55121.00 175801.00 55164.00 175801.00 55207.00C175790.33 55239.00 175779.67 55271.00 175769.00 55303.00C175769.00 55324.33 175769.00 55345.67 175769.00 55367.00C175790.33 55356.33 175811.67 55345.67 175833.00 55335.00C175854.33 55335.00 175875.67 55335.00 175897.00 55335.00C175897.00 55345.67 175897.00 55356.33 175897.00 55367.00C175918.67 55367.00 175940.33 55367.00 175962.00 55367.00C175931.08 55428.49 175899.88 55489.83 175869.44 55551.55C175857.29 55576.03 175845.14 55600.52 175833.00 55625.00C175779.33 55678.33 175725.67 55731.67 175672.00 55785.00C175672.00 55796.00 175672.00 55807.00 175672.00 55818.00C175650.67 55839.33 175629.33 55860.67 175608.00 55882.00C175618.67 55903.33 175629.33 55924.67 175640.00 55946.00C175618.67 56010.33 175597.33 56074.67 175576.00 56139.00C175554.33 56160.33 175532.67 56181.67 175511.00 56203.00C175500.33 56224.67 175489.67 56246.33 175479.00 56268.00C175457.67 56289.33 175436.33 56310.67 175415.00 56332.00C175415.00 56364.33 175415.00 56396.67 175415.00 56429.00C175393.67 56439.67 175372.33 56450.33 175351.00 56461.00C175340.33 56461.00 175329.67 56461.00 175319.00 56461.00C175308.00 56471.67 175297.00 56482.33 175286.00 56493.00C175264.67 56503.67 175243.33 56514.33 175222.00 56525.00C175157.67 56578.67 175093.33 56632.33 175029.00 56686.00C175018.33 56707.33 175007.67 56728.67 174997.00 56750.00C174997.00 56803.67 174997.00 56857.33 174997.00 56911.00C174986.33 56921.67 174975.67 56932.33 174965.00 56943.00C174954.33 56943.00 174943.67 56943.00 174933.00 56943.00C174911.33 56964.33 174889.67 56985.67 174868.00 57007.00C174868.00 57017.67 174868.00 57028.33 174868.00 57039.00C174846.67 57039.00 174825.33 57039.00 174804.00 57039.00C174782.67 57060.67 174761.33 57082.33 174740.00 57104.00C174718.67 57093.33 174697.33 57082.67 174676.00 57072.00C174643.67 57072.00 174611.33 57072.00 174579.00 57072.00C174568.33 57050.33 174557.67 57028.67 174547.00 57007.00C174547.00 57028.67 174547.00 57050.33 174547.00 57072.00C174514.67 57093.33 174482.33 57114.67 174450.00 57136.00C174439.33 57125.33 174428.67 57114.67 174418.00 57104.00C174407.33 57082.33 174396.67 57060.67 174386.00 57039.00C174386.00 57028.33 174386.00 57017.67 174386.00 57007.00C174375.33 57007.00 174364.67 57007.00 174354.00 57007.00C174354.00 56985.67 174354.00 56964.33 174354.00 56943.00C174343.33 56953.67 174332.67 56964.33 174322.00 56975.00C174311.33 56964.33 174300.67 56953.67 174290.00 56943.00C174279.00 56953.67 174268.00 56964.33 174257.00 56975.00C174246.33 56975.00 174235.67 56975.00 174225.00 56975.00C174193.00 57007.33 174161.00 57039.67 174129.00 57072.00C174107.67 57082.67 174086.33 57093.33 174065.00 57104.00C174075.67 57125.33 174086.33 57146.67 174097.00 57168.00C174075.33 57189.33 174053.67 57210.67 174032.00 57232.00C174021.33 57232.00 174010.67 57232.00 174000.00 57232.00C173989.29 57264.40 173978.66 57296.82 173967.90 57329.20C173957.26 57350.47 173946.63 57371.73 173936.00 57393.00C173936.00 57403.67 173936.00 57414.33 173936.00 57425.00C173893.00 57468.00 173850.00 57511.00 173807.00 57554.00C173807.00 57575.33 173807.00 57596.67 173807.00 57618.00C173764.33 57628.67 173721.67 57639.33 173679.00 57650.00C173679.00 57682.33 173679.00 57714.67 173679.00 57747.00C173689.67 57757.67 173700.33 57768.33 173711.00 57779.00C173711.00 57789.67 173711.00 57800.33 173711.00 57811.00C173700.33 57821.67 173689.67 57832.33 173679.00 57843.00C173668.33 57864.67 173657.67 57886.33 173647.00 57908.00C173625.33 57897.00 173603.67 57886.00 173582.00 57875.00C173571.33 57907.33 173560.67 57939.67 173550.00 57972.00C173539.33 57982.67 173528.67 57993.33 173518.00 58004.00C173496.67 58014.67 173475.33 58025.33 173454.00 58036.00C173454.00 58046.67 173454.00 58057.33 173454.00 58068.00C173464.67 58068.00 173475.33 58068.00 173486.00 58068.00C173486.00 58100.33 173486.00 58132.67 173486.00 58165.00C173464.33 58186.33 173442.67 58207.67 173421.00 58229.00C173421.00 58250.33 173421.00 58271.67 173421.00 58293.00C173432.00 58325.33 173443.00 58357.67 173454.00 58390.00C173475.33 58400.67 173496.67 58411.33 173518.00 58422.00C173507.33 58432.67 173496.67 58443.33 173486.00 58454.00C173475.33 58454.00 173464.67 58454.00 173454.00 58454.00C173454.00 58475.33 173454.00 58496.67 173454.00 58518.00C173432.33 58518.00 173410.67 58518.00 173389.00 58518.00C173389.00 58529.00 173389.00 58540.00 173389.00 58551.00C173378.33 58561.67 173367.67 58572.33 173357.00 58583.00C173346.33 58583.00 173335.67 58583.00 173325.00 58583.00C173335.67 58593.67 173346.33 58604.33 173357.00 58615.00C173378.33 58615.00 173399.67 58615.00 173421.00 58615.00C173421.00 58625.67 173421.00 58636.33 173421.00 58647.00C173485.33 58647.00 173549.67 58647.00 173614.00 58647.00C173635.67 58636.33 173657.33 58625.67 173679.00 58615.00C173700.33 58636.33 173721.67 58657.67 173743.00 58679.00C173732.33 58679.00 173721.67 58679.00 173711.00 58679.00C173657.33 58722.00 173603.67 58765.00 173550.00 58808.00C173550.00 58829.33 173550.00 58850.67 173550.00 58872.00C173528.67 58882.67 173507.33 58893.33 173486.00 58904.00C173486.00 58936.33 173486.00 58968.67 173486.00 59001.00C173440.93 59045.81 173395.67 59090.44 173350.72 59135.38C173331.48 59154.92 173312.24 59174.46 173293.00 59194.00C173282.33 59215.33 173271.67 59236.67 173261.00 59258.00C173271.67 59268.67 173282.33 59279.33 173293.00 59290.00C173271.67 59322.33 173250.33 59354.67 173229.00 59387.00C173229.00 59397.67 173229.00 59408.33 173229.00 59419.00C173218.00 59429.67 173207.00 59440.33 173196.00 59451.00C173196.00 59461.67 173196.00 59472.33 173196.00 59483.00C173174.67 59493.67 173153.33 59504.33 173132.00 59515.00C173153.33 59536.67 173174.67 59558.33 173196.00 59580.00C173196.00 59601.33 173196.00 59622.67 173196.00 59644.00C173153.33 59686.67 173110.67 59729.33 173068.00 59772.00C173068.00 59793.67 173068.00 59815.33 173068.00 59837.00C173089.33 59847.67 173110.67 59858.33 173132.00 59869.00C173132.00 59890.33 173132.00 59911.67 173132.00 59933.00C173121.33 59943.67 173110.67 59954.33 173100.00 59965.00C173078.67 59976.00 173057.33 59987.00 173036.00 59998.00C173046.67 59998.00 173057.33 59998.00 173068.00 59998.00C173057.33 59998.00 173046.67 59998.00 173036.00 59998.00C173025.33 60030.00 173014.67 60062.00 173004.00 60094.00C173004.05 60104.74 173003.91 60115.48 173004.07 60126.22C173014.72 60158.48 173025.36 60190.74 173036.00 60223.00C173046.67 60233.67 173057.33 60244.33 173068.00 60255.00C173068.00 60276.33 173068.00 60297.67 173068.00 60319.00C173078.67 60329.67 173089.33 60340.33 173100.00 60351.00C173100.00 60372.33 173100.00 60393.67 173100.00 60415.00C173121.33 60415.00 173142.67 60415.00 173164.00 60415.00C173174.67 60436.67 173185.33 60458.33 173196.00 60480.00C173217.67 60490.67 173239.33 60501.33 173261.00 60512.00C173261.00 60533.33 173261.00 60554.67 173261.00 60576.00C173239.33 60565.33 173217.67 60554.67 173196.00 60544.00C173174.67 60544.00 173153.33 60544.00 173132.00 60544.00C173142.67 60554.67 173153.33 60565.33 173164.00 60576.00C173164.00 60586.67 173164.00 60597.33 173164.00 60608.00C173142.67 60619.00 173121.33 60630.00 173100.00 60641.00C173066.12 60674.89 173032.31 60708.85 172998.05 60742.36C172989.03 60751.24 172980.02 60760.12 172971.00 60769.00C172982.00 60779.67 172993.00 60790.33 173004.00 60801.00C173004.00 60812.00 173004.00 60823.00 173004.00 60834.00C172993.00 60844.67 172982.00 60855.33 172971.00 60866.00C172971.00 60876.67 172971.00 60887.33 172971.00 60898.00C172960.33 60908.67 172949.67 60919.33 172939.00 60930.00C172917.67 60940.67 172896.33 60951.33 172875.00 60962.00C172853.67 60962.00 172832.33 60962.00 172811.00 60962.00C172811.00 60983.33 172811.00 61004.67 172811.00 61026.00C172778.67 61026.00 172746.33 61026.00 172714.00 61026.00C172714.00 61037.00 172714.00 61048.00 172714.00 61059.00C172671.00 61069.67 172628.00 61080.33 172585.00 61091.00C172574.33 61101.67 172563.67 61112.33 172553.00 61123.00C172563.67 61133.67 172574.33 61144.33 172585.00 61155.00C172585.00 61176.33 172585.00 61197.67 172585.00 61219.00C172596.00 61240.67 172607.00 61262.33 172618.00 61284.00C172596.33 61294.67 172574.67 61305.33 172553.00 61316.00C172563.67 61337.33 172574.33 61358.67 172585.00 61380.00C172606.67 61380.00 172628.33 61380.00 172650.00 61380.00C172650.00 61390.67 172650.00 61401.33 172650.00 61412.00C172660.67 61422.67 172671.33 61433.33 172682.00 61444.00C172671.33 61444.00 172660.67 61444.00 172650.00 61444.00C172639.33 61465.67 172628.67 61487.33 172618.00 61509.00C172607.00 61509.00 172596.00 61509.00 172585.00 61509.00C172574.33 61519.67 172563.67 61530.33 172553.00 61541.00C172563.67 61551.67 172574.33 61562.33 172585.00 61573.00C172596.00 61573.00 172607.00 61573.00 172618.00 61573.00C172650.25 61594.43 172682.37 61616.06 172714.70 61637.36C172735.80 61648.24 172756.90 61659.12 172778.00 61670.00C172789.00 61670.00 172800.00 61670.00 172811.00 61670.00C172843.00 61680.67 172875.00 61691.33 172907.00 61702.00C172907.00 61723.33 172907.00 61744.67 172907.00 61766.00C172939.33 61776.67 172971.67 61787.33 173004.00 61798.00C173004.00 61808.67 173004.00 61819.33 173004.00 61830.00C172993.00 61851.67 172982.00 61873.33 172971.00 61895.00C172989.93 61913.31 173008.87 61931.61 173027.36 61950.36C173040.91 61963.90 173054.46 61977.45 173068.00 61991.00C173067.95 62001.74 173068.09 62012.48 173067.93 62023.22C173057.23 62055.54 173046.64 62087.89 173035.90 62120.20C173025.26 62141.47 173014.63 62162.73 173004.00 62184.00C172993.00 62194.67 172982.00 62205.33 172971.00 62216.00C172971.00 62259.00 172971.00 62302.00 172971.00 62345.00C172960.33 62355.67 172949.67 62366.33 172939.00 62377.00C172949.67 62387.67 172960.33 62398.33 172971.00 62409.00C172960.33 62419.67 172949.67 62430.33 172939.00 62441.00C172939.00 62462.67 172939.00 62484.33 172939.00 62506.00C172971.33 62495.00 173003.67 62484.00 173036.00 62473.00C173068.00 62473.00 173100.00 62473.00 173132.00 62473.00C173142.67 62484.00 173153.33 62495.00 173164.00 62506.00C173185.67 62506.00 173207.33 62506.00 173229.00 62506.00C173239.67 62516.67 173250.33 62527.33 173261.00 62538.00C173250.33 62559.33 173239.67 62580.67 173229.00 62602.00C173239.67 62612.67 173250.33 62623.33 173261.00 62634.00C173261.00 62655.33 173261.00 62676.67 173261.00 62698.00C173282.33 62709.00 173303.67 62720.00 173325.00 62731.00C173335.67 62741.67 173346.33 62752.33 173357.00 62763.00C173378.33 62773.67 173399.67 62784.33 173421.00 62795.00C173464.00 62773.67 173507.00 62752.33 173550.00 62731.00C173560.67 62741.67 173571.33 62752.33 173582.00 62763.00C173571.33 62773.67 173560.67 62784.33 173550.00 62795.00C173560.67 62816.33 173571.33 62837.67 173582.00 62859.00C173592.67 62859.00 173603.33 62859.00 173614.00 62859.00C173614.00 62880.33 173614.00 62901.67 173614.00 62923.00C173625.00 62955.33 173636.00 62987.67 173647.00 63020.00C173636.00 63041.33 173625.00 63062.67 173614.00 63084.00C173603.33 63094.67 173592.67 63105.33 173582.00 63116.00C173582.00 63159.00 173582.00 63202.00 173582.00 63245.00C173560.67 63266.33 173539.33 63287.67 173518.00 63309.00C173496.67 63341.33 173475.33 63373.67 173454.00 63406.00C173443.00 63438.00 173432.00 63470.00 173421.00 63502.00C173410.33 63512.67 173399.67 63523.33 173389.00 63534.00C173378.33 63555.67 173367.67 63577.33 173357.00 63599.00C173378.33 63599.00 173399.67 63599.00 173421.00 63599.00C173421.00 63631.00 173421.00 63663.00 173421.00 63695.00C173399.67 63695.00 173378.33 63695.00 173357.00 63695.00C173357.00 63705.67 173357.00 63716.33 173357.00 63727.00C173346.33 63737.67 173335.67 63748.33 173325.00 63759.00C173325.00 63770.00 173325.00 63781.00 173325.00 63792.00C173260.67 63802.67 173196.33 63813.33 173132.00 63824.00C173132.00 63834.67 173132.00 63845.33 173132.00 63856.00C173142.67 63866.67 173153.33 63877.33 173164.00 63888.00C173174.67 63909.33 173185.33 63930.67 173196.00 63952.00C173174.67 63973.67 173153.33 63995.33 173132.00 64017.00C173121.33 64038.33 173110.67 64059.67 173100.00 64081.00C173110.67 64091.67 173121.33 64102.33 173132.00 64113.00C173110.67 64113.00 173089.33 64113.00 173068.00 64113.00C173078.67 64123.67 173089.33 64134.33 173100.00 64145.00C173100.00 64166.67 173100.00 64188.33 173100.00 64210.00C173089.33 64220.67 173078.67 64231.33 173068.00 64242.00C173078.67 64252.67 173089.33 64263.33 173100.00 64274.00C173089.33 64284.67 173078.67 64295.33 173068.00 64306.00C173068.00 64316.67 173068.00 64327.33 173068.00 64338.00C173035.67 64348.67 173003.33 64359.33 172971.00 64370.00C172960.33 64381.00 172949.67 64392.00 172939.00 64403.00C172907.00 64403.00 172875.00 64403.00 172843.00 64403.00C172832.33 64413.67 172821.67 64424.33 172811.00 64435.00C172811.00 64467.00 172811.00 64499.00 172811.00 64531.00C172800.00 64541.67 172789.00 64552.33 172778.00 64563.00C172778.00 64584.67 172778.00 64606.33 172778.00 64628.00C172767.33 64628.00 172756.67 64628.00 172746.00 64628.00C172724.67 64638.67 172703.33 64649.33 172682.00 64660.00C172692.67 64670.67 172703.33 64681.33 172714.00 64692.00C172703.33 64702.67 172692.67 64713.33 172682.00 64724.00C172671.33 64745.33 172660.67 64766.67 172650.00 64788.00C172628.33 64788.00 172606.67 64788.00 172585.00 64788.00C172563.67 64799.00 172542.33 64810.00 172521.00 64821.00C172510.33 64810.00 172499.67 64799.00 172489.00 64788.00C172489.00 64799.00 172489.00 64810.00 172489.00 64821.00C172478.33 64831.67 172467.67 64842.33 172457.00 64853.00C172414.00 64853.00 172371.00 64853.00 172328.00 64853.00C172328.00 64842.33 172328.00 64831.67 172328.00 64821.00C172317.33 64821.00 172306.67 64821.00 172296.00 64821.00C172285.33 64842.33 172274.67 64863.67 172264.00 64885.00C172285.33 64895.67 172306.67 64906.33 172328.00 64917.00C172328.00 64938.33 172328.00 64959.67 172328.00 64981.00C172317.33 65013.33 172306.67 65045.67 172296.00 65078.00C172242.33 65078.00 172188.67 65078.00 172135.00 65078.00C172113.67 65067.33 172092.33 65056.67 172071.00 65046.00C172049.67 65067.33 172028.33 65088.67 172007.00 65110.00C172007.00 65142.00 172007.00 65174.00 172007.00 65206.00C171985.33 65217.00 171963.67 65228.00 171942.00 65239.00C171931.33 65228.00 171920.67 65217.00 171910.00 65206.00C171888.67 65206.00 171867.33 65206.00 171846.00 65206.00C171846.00 65227.67 171846.00 65249.33 171846.00 65271.00C171835.33 65271.00 171824.67 65271.00 171814.00 65271.00C171803.33 65260.33 171792.67 65249.67 171782.00 65239.00C171771.00 65249.67 171760.00 65260.33 171749.00 65271.00C171738.33 65271.00 171727.67 65271.00 171717.00 65271.00C171717.00 65292.33 171717.00 65313.67 171717.00 65335.00C171706.33 65356.33 171695.67 65377.67 171685.00 65399.00C171695.67 65420.67 171706.33 65442.33 171717.00 65464.00C171695.67 65506.67 171674.33 65549.33 171653.00 65592.00C171642.33 65602.66 171631.67 65613.34 171621.00 65624.00C171621.00 65645.67 171621.00 65667.33 171621.00 65689.00C171599.67 65689.00 171578.33 65689.00 171557.00 65689.00C171546.00 65699.67 171535.00 65710.33 171524.00 65721.00C171492.00 65710.33 171460.00 65699.67 171428.00 65689.00C171427.95 65678.26 171428.09 65667.52 171427.93 65656.78C171417.28 65624.52 171406.64 65592.26 171396.00 65560.00C171385.33 65560.00 171374.67 65560.00 171364.00 65560.00C171353.33 65570.66 171342.67 65581.34 171332.00 65592.00C171289.00 65581.33 171246.00 65570.67 171203.00 65560.00C171181.67 65592.34 171160.33 65624.66 171139.00 65657.00C171096.00 65689.00 171053.00 65721.00 171010.00 65753.00C170999.33 65742.34 170988.67 65731.66 170978.00 65721.00C170999.33 65699.66 171020.67 65678.34 171042.00 65657.00C171031.33 65635.34 171020.67 65613.66 171010.00 65592.00C171010.00 65570.67 171010.00 65549.33 171010.00 65528.00C170999.33 65485.00 170988.67 65442.00 170978.00 65399.00C170967.33 65377.67 170956.67 65356.33 170946.00 65335.00C170946.00 65313.67 170946.00 65292.33 170946.00 65271.00C170913.67 65249.33 170881.33 65227.67 170849.00 65206.00C170838.33 65174.00 170827.67 65142.00 170817.00 65110.00C170795.67 65099.33 170774.33 65088.67 170753.00 65078.00C170710.00 65078.00 170667.00 65078.00 170624.00 65078.00C170602.67 65045.67 170581.33 65013.33 170560.00 64981.00C170527.67 64970.33 170495.33 64959.67 170463.00 64949.00C170441.67 64959.67 170420.33 64970.33 170399.00 64981.00C170377.67 64981.00 170356.33 64981.00 170335.00 64981.00C170324.33 64991.67 170313.67 65002.33 170303.00 65013.00C170281.33 65013.00 170259.67 65013.00 170238.00 65013.00C170248.67 65002.33 170259.33 64991.67 170270.00 64981.00C170270.00 64949.00 170270.00 64917.00 170270.00 64885.00C170238.00 64874.33 170206.00 64863.67 170174.00 64853.00C170174.00 64842.33 170174.00 64831.67 170174.00 64821.00C170163.33 64810.00 170152.67 64799.00 170142.00 64788.00C170131.33 64799.00 170120.67 64810.00 170110.00 64821.00C170067.00 64821.00 170024.00 64821.00 169981.00 64821.00C169981.00 64799.33 169981.00 64777.67 169981.00 64756.00C169991.67 64745.33 170002.33 64734.67 170013.00 64724.00C170013.00 64692.00 170013.00 64660.00 170013.00 64628.00C170029.79 64610.69 170046.45 64593.25 170063.80 64576.49C170079.20 64561.33 170094.60 64546.16 170110.00 64531.00C170120.67 64531.00 170131.33 64531.00 170142.00 64531.00C170131.33 64520.33 170120.67 64509.67 170110.00 64499.00C170099.33 64499.00 170088.67 64499.00 170078.00 64499.00C170066.97 64488.26 170055.85 64477.61 170044.87 64466.81C170023.58 64434.54 170002.29 64402.27 169981.00 64370.00C169970.33 64327.33 169959.67 64284.67 169949.00 64242.00C169949.00 64231.33 169949.00 64220.67 169949.00 64210.00C169927.67 64199.00 169906.33 64188.00 169885.00 64177.00C169823.23 64115.66 169761.31 64054.48 169699.84 63992.85C169695.66 63988.73 169691.72 63984.33 169686.79 63981.08C169645.53 63950.05 169604.26 63919.03 169563.00 63888.00C169552.33 63888.00 169541.67 63888.00 169531.00 63888.00C169466.78 63855.78 169402.36 63823.95 169338.00 63792.00C169327.26 63791.96 169316.52 63792.07 169305.78 63791.94C169262.85 63780.96 169219.93 63769.98 169177.00 63759.00C169155.67 63737.67 169134.33 63716.33 169113.00 63695.00C169102.33 63673.67 169091.67 63652.33 169081.00 63631.00C169059.33 63609.67 169037.67 63588.33 169016.00 63567.00C169005.33 63567.00 168994.67 63567.00 168984.00 63567.00C168941.20 63534.59 168898.45 63502.12 168855.62 63469.75C168823.41 63448.50 168791.21 63427.25 168759.00 63406.00C168737.67 63384.67 168716.33 63363.33 168695.00 63342.00C168673.67 63309.67 168652.33 63277.33 168631.00 63245.00C168620.00 63245.00 168609.00 63245.00 168598.00 63245.00C168587.33 63234.33 168576.67 63223.67 168566.00 63213.00C168534.00 63213.00 168502.00 63213.00 168470.00 63213.00C168437.67 63191.67 168405.33 63170.33 168373.00 63149.00C168351.67 63127.33 168330.33 63105.67 168309.00 63084.00C168298.26 63084.05 168287.52 63083.90 168276.78 63084.07C168244.85 63094.72 168212.93 63105.36 168181.00 63116.00C168148.59 63116.02 168116.19 63115.96 168083.78 63116.03C168008.50 63127.11 167933.19 63138.04 167857.92 63149.21C167804.62 63159.81 167751.31 63170.40 167698.00 63181.00C167633.67 63181.00 167569.33 63181.00 167505.00 63181.00C167473.00 63170.33 167441.00 63159.67 167409.00 63149.00C167398.33 63159.67 167387.67 63170.33 167377.00 63181.00C167323.33 63202.33 167269.67 63223.67 167216.00 63245.00C167194.67 63234.33 167173.33 63223.67 167152.00 63213.00C167141.00 63213.00 167130.00 63213.00 167119.00 63213.00C167044.00 63298.67 166969.00 63384.33 166894.00 63470.00C166862.00 63480.67 166830.00 63491.33 166798.00 63502.00C166755.00 63491.33 166712.00 63480.67 166669.00 63470.00C166647.67 63491.33 166626.33 63512.67 166605.00 63534.00C166519.33 63534.00 166433.67 63534.00 166348.00 63534.00C166229.20 63555.86 166110.36 63577.54 165991.57 63599.52C165842.38 63631.35 165693.19 63663.17 165544.00 63695.00C165501.00 63630.67 165458.00 63566.33 165415.00 63502.00C165404.33 63491.33 165393.67 63480.67 165383.00 63470.00C165361.67 63470.00 165340.33 63470.00 165319.00 63470.00C165276.00 63448.67 165233.00 63427.33 165190.00 63406.00C165104.33 63427.33 165018.67 63448.67 164933.00 63470.00C164729.33 63470.00 164525.67 63470.00 164322.00 63470.00C164247.00 63480.67 164172.00 63491.33 164097.00 63502.00C164118.33 63416.33 164139.67 63330.67 164161.00 63245.00C164150.33 63223.67 164139.67 63202.33 164129.00 63181.00C164172.00 63159.33 164215.00 63137.67 164258.00 63116.00C164268.67 63094.67 164279.33 63073.33 164290.00 63052.00C164279.33 63009.00 164268.67 62966.00 164258.00 62923.00C164268.75 62837.06 164279.32 62751.08 164290.16 62665.15C164300.78 62612.10 164311.39 62559.05 164322.00 62506.00C164332.67 62495.00 164343.33 62484.00 164354.00 62473.00C164354.00 62451.67 164354.00 62430.33 164354.00 62409.00C164375.67 62344.67 164397.33 62280.33 164419.00 62216.00C164408.00 62194.67 164397.00 62173.33 164386.00 62152.00C164418.33 62109.00 164450.67 62066.00 164483.00 62023.00C164483.00 62012.33 164483.00 62001.67 164483.00 61991.00C164504.33 61980.33 164525.67 61969.67 164547.00 61959.00C164568.67 61916.00 164590.33 61873.00 164612.00 61830.00C164612.00 61819.33 164612.00 61808.67 164612.00 61798.00C164633.33 61776.67 164654.67 61755.33 164676.00 61734.00C164676.00 61723.33 164676.00 61712.67 164676.00 61702.00C164665.33 61702.00 164654.67 61702.00 164644.00 61702.00C164644.00 61680.33 164644.00 61658.67 164644.00 61637.00C164654.67 61648.00 164665.33 61659.00 164676.00 61670.00C164676.00 61659.00 164676.00 61648.00 164676.00 61637.00C164708.00 61626.33 164740.00 61615.67 164772.00 61605.00C164772.00 61594.33 164772.00 61583.67 164772.00 61573.00C164740.00 61562.33 164708.00 61551.67 164676.00 61541.00C164676.00 61466.00 164676.00 61391.00 164676.00 61316.00C164686.67 61294.33 164697.33 61272.67 164708.00 61251.00C164686.67 61197.67 164665.33 61144.33 164644.00 61091.00C164654.67 61069.33 164665.33 61047.67 164676.00 61026.00C164676.00 60983.33 164676.00 60940.67 164676.00 60898.00C164697.33 60887.33 164718.67 60876.67 164740.00 60866.00C164750.67 60866.00 164761.33 60866.00 164772.00 60866.00C164782.67 60844.33 164793.33 60822.67 164804.00 60801.00C164838.13 60767.39 164872.35 60733.86 164906.12 60699.89C164925.74 60680.26 164945.37 60660.63 164965.00 60641.00C164965.00 60630.00 164965.00 60619.00 164965.00 60608.00C164933.00 60597.33 164901.00 60586.67 164869.00 60576.00C164847.33 60586.67 164825.67 60597.33 164804.00 60608.00C164782.67 60629.67 164761.33 60651.33 164740.00 60673.00C164718.67 60673.00 164697.33 60673.00 164676.00 60673.00C164665.33 60662.33 164654.67 60651.67 164644.00 60641.00C164633.33 60608.67 164622.67 60576.33 164612.00 60544.00C164601.00 60533.33 164590.00 60522.67 164579.00 60512.00C164568.33 60479.67 164557.67 60447.33 164547.00 60415.00C164547.00 60404.33 164547.00 60393.67 164547.00 60383.00C164515.00 60351.00 164483.00 60319.00 164451.00 60287.00C164429.33 60276.33 164407.67 60265.67 164386.00 60255.00C164343.26 60254.98 164300.52 60255.04 164257.78 60254.97C164182.06 60244.15 164106.31 60233.52 164030.60 60222.59C163967.07 60211.72 163903.53 60200.86 163840.00 60190.00C163829.26 60179.30 163818.61 60168.52 163807.81 60157.88C163775.54 60136.58 163743.27 60115.29 163711.00 60094.00C163679.00 60062.00 163647.00 60030.00 163615.00 59998.00C163529.00 59998.00 163443.00 59998.00 163357.00 59998.00C163314.35 59954.99 163271.89 59911.77 163229.00 59869.00C163250.33 59826.00 163271.67 59783.00 163293.00 59740.00C163293.00 59729.33 163293.00 59718.67 163293.00 59708.00C163271.67 59686.67 163250.33 59665.33 163229.00 59644.00C163229.00 59633.33 163229.00 59622.67 163229.00 59612.00C163207.67 59558.33 163186.33 59504.67 163165.00 59451.00C163100.67 59386.67 163036.33 59322.33 162972.00 59258.00C162972.00 59215.00 162972.00 59172.00 162972.00 59129.00C162961.33 59086.33 162950.67 59043.67 162940.00 59001.00C162940.00 58926.00 162940.00 58851.00 162940.00 58776.00C162929.00 58722.33 162918.00 58668.67 162907.00 58615.00C162907.00 58593.67 162907.00 58572.33 162907.00 58551.00C162928.67 58540.00 162950.33 58529.00 162972.00 58518.00C162982.67 58464.67 162993.33 58411.33 163004.00 58358.00C163004.00 58304.33 163004.00 58250.67 163004.00 58197.00C162993.33 58186.33 162982.67 58175.67 162972.00 58165.00C162950.33 58154.33 162928.67 58143.67 162907.00 58133.00C162896.33 58122.33 162885.67 58111.67 162875.00 58101.00C162853.67 58047.33 162832.33 57993.67 162811.00 57940.00C162768.00 57886.33 162725.00 57832.67 162682.00 57779.00C162682.00 57661.00 162682.00 57543.00 162682.00 57425.00C162692.67 57393.00 162703.33 57361.00 162714.00 57329.00C162692.67 57286.00 162671.33 57243.00 162650.00 57200.00C162628.67 57125.00 162607.33 57050.00 162586.00 56975.00C162564.33 56953.67 162542.67 56932.33 162521.00 56911.00C162489.00 56921.67 162457.00 56932.33 162425.00 56943.00C162425.00 56889.33 162425.00 56835.67 162425.00 56782.00C162446.33 56760.67 162467.67 56739.33 162489.00 56718.00C162489.00 56707.33 162489.00 56696.67 162489.00 56686.00C162499.67 56675.33 162510.33 56664.67 162521.00 56654.00C162532.00 56621.67 162543.00 56589.33 162554.00 56557.00C162554.00 56471.33 162554.00 56385.67 162554.00 56300.00C162521.67 56267.67 162489.33 56235.33 162457.00 56203.00C162467.67 56171.00 162478.33 56139.00 162489.00 56107.00C162467.56 56052.93 162445.94 55998.93 162424.61 55944.82C162414.07 55913.21 162403.54 55881.61 162393.00 55850.00C162403.67 55796.33 162414.33 55742.67 162425.00 55689.00C162403.79 55603.30 162382.46 55517.64 162361.00 55432.00C162371.67 55410.33 162382.33 55388.67 162393.00 55367.00C162371.67 55335.00 162350.33 55303.00 162329.00 55271.00C162318.00 55228.00 162307.00 55185.00 162296.00 55142.00C162285.33 55120.67 162274.67 55099.33 162264.00 55078.00C162274.67 55067.33 162285.33 55056.67 162296.00 55046.00C162328.33 55035.33 162360.67 55024.67 162393.00 55014.00C162403.67 54992.59 162414.46 54971.23 162425.05 54949.78C162435.70 54906.85 162446.35 54863.93 162457.00 54821.00C162435.45 54778.11 162414.13 54735.10 162393.00 54692.00C162393.00 54649.33 162393.00 54606.67 162393.00 54564.00C162360.67 54542.33 162328.33 54520.67 162296.00 54499.00C162296.00 54477.67 162296.00 54456.33 162296.00 54435.00C162285.33 54413.67 162274.67 54392.33 162264.00 54371.00C162274.67 54360.33 162285.33 54349.67 162296.00 54339.00C162296.00 54285.33 162296.00 54231.67 162296.00 54178.00C162317.67 54156.67 162339.33 54135.33 162361.00 54114.00C162361.00 54103.00 162361.00 54092.00 162361.00 54081.00C162350.33 54059.67 162339.67 54038.33 162329.00 54017.00C162310.28 53998.88 162291.54 53980.79 162273.23 53962.25C162270.01 53958.73 162266.07 53955.71 162263.40 53951.78C162252.93 53930.52 162242.46 53909.26 162232.00 53888.00C162232.00 53877.33 162232.00 53866.67 162232.00 53856.00C162242.67 53845.33 162253.33 53834.67 162264.00 53824.00C162296.33 53824.00 162328.67 53824.00 162361.00 53824.00C162371.67 53813.33 162382.33 53802.67 162393.00 53792.00C162382.18 53770.49 162371.56 53748.87 162360.62 53727.43C162339.08 53695.29 162317.54 53663.15 162296.00 53631.00C162285.33 53620.33 162274.67 53609.67 162264.00 53599.00C162274.67 53567.00 162285.33 53535.00 162296.00 53503.00C162317.67 53492.00 162339.33 53481.00 162361.00 53470.00C162371.67 53438.00 162382.33 53406.00 162393.00 53374.00C162393.00 53352.67 162393.00 53331.33 162393.00 53310.00C162371.67 53299.33 162350.33 53288.67 162329.00 53278.00C162329.00 53235.00 162329.00 53192.00 162329.00 53149.00C162350.33 53138.33 162371.67 53127.67 162393.00 53117.00C162382.33 53095.33 162371.67 53073.67 162361.00 53052.00C162350.33 53052.00 162339.67 53052.00 162329.00 53052.00C162296.67 53030.67 162264.33 53009.33 162232.00 52988.00C162264.33 52966.67 162296.67 52945.33 162329.00 52924.00C162318.00 52881.00 162307.00 52838.00 162296.00 52795.00C162307.00 52763.00 162318.00 52731.00 162329.00 52699.00C162318.00 52677.33 162307.00 52655.67 162296.00 52634.00C162264.00 52634.00 162232.00 52634.00 162200.00 52634.00C162178.67 52602.00 162157.33 52570.00 162136.00 52538.00C162125.33 52538.00 162114.67 52538.00 162104.00 52538.00C162093.00 52548.67 162082.00 52559.33 162071.00 52570.00C162060.33 52538.00 162049.67 52506.00 162039.00 52474.00C161996.33 52452.33 161953.67 52430.67 161911.00 52409.00C161911.00 52377.00 161911.00 52345.00 161911.00 52313.00C161889.33 52323.67 161867.67 52334.33 161846.00 52345.00C161835.33 52313.00 161824.67 52281.00 161814.00 52249.00C161803.33 52249.00 161792.67 52249.00 161782.00 52249.00C161760.67 52270.33 161739.33 52291.67 161718.00 52313.00C161675.00 52291.67 161632.00 52270.33 161589.00 52249.00C161589.00 52227.33 161589.00 52205.67 161589.00 52184.00C161578.33 52173.33 161567.67 52162.67 161557.00 52152.00C161557.00 52141.33 161557.00 52130.67 161557.00 52120.00C161546.33 52120.00 161535.67 52120.00 161525.00 52120.00C161525.00 52098.67 161525.00 52077.33 161525.00 52056.00C161471.33 52056.00 161417.67 52056.00 161364.00 52056.00C161374.67 52013.00 161385.33 51970.00 161396.00 51927.00C161396.00 51895.00 161396.00 51863.00 161396.00 51831.00C161374.67 51820.00 161353.33 51809.00 161332.00 51798.00C161332.00 51776.67 161332.00 51755.33 161332.00 51734.00C161321.33 51734.00 161310.67 51734.00 161300.00 51734.00C161289.33 51744.67 161278.67 51755.33 161268.00 51766.00C161214.33 51691.00 161160.67 51616.00 161107.00 51541.00C161085.33 51530.33 161063.67 51519.67 161042.00 51509.00C161031.33 51530.33 161020.67 51551.67 161010.00 51573.00C160999.33 51562.33 160988.67 51551.67 160978.00 51541.00C160978.00 51530.33 160978.00 51519.67 160978.00 51509.00C160956.67 51509.00 160935.33 51509.00 160914.00 51509.00C160914.00 51487.67 160914.00 51466.33 160914.00 51445.00C160892.67 51412.67 160871.33 51380.33 160850.00 51348.00C160860.67 51326.67 160871.33 51305.33 160882.00 51284.00C160849.67 51241.00 160817.33 51198.00 160785.00 51155.00C160806.67 51133.67 160828.33 51112.33 160850.00 51091.00C160839.00 51037.33 160828.00 50983.67 160817.00 50930.00C160838.67 50919.33 160860.33 50908.67 160882.00 50898.00C160882.05 50887.26 160881.90 50876.52 160882.07 50865.78C160892.72 50833.86 160903.36 50801.93 160914.00 50770.00C160935.33 50759.00 160956.67 50748.00 160978.00 50737.00C160978.00 50726.33 160978.00 50715.67 160978.00 50705.00C160935.33 50694.33 160892.67 50683.67 160850.00 50673.00C160828.33 50662.33 160806.67 50651.67 160785.00 50641.00C160785.00 50630.33 160785.00 50619.67 160785.00 50609.00C160806.67 50598.33 160828.33 50587.67 160850.00 50577.00C160850.00 50566.33 160850.00 50555.67 160850.00 50545.00C160860.67 50523.33 160871.33 50501.67 160882.00 50480.00C160924.71 50437.27 160967.47 50394.59 161010.14 50351.82C161053.09 50298.21 161096.05 50244.61 161139.00 50191.00C161128.19 50180.08 161117.15 50169.37 161106.48 50158.32C161074.32 50115.54 161042.16 50072.77 161010.00 50030.00C160967.33 50008.67 160924.67 49987.33 160882.00 49966.00C160882.00 49944.33 160882.00 49922.67 160882.00 49901.00C160892.67 49869.00 160903.33 49837.00 160914.00 49805.00C160914.00 49783.67 160914.00 49762.33 160914.00 49741.00C160892.67 49741.00 160871.33 49741.00 160850.00 49741.00C160839.00 49730.33 160828.00 49719.67 160817.00 49709.00C160849.33 49709.00 160881.67 49709.00 160914.00 49709.00C160924.67 49676.67 160935.33 49644.33 160946.00 49612.00C160956.67 49612.00 160967.33 49612.00 160978.00 49612.00C160988.67 49580.00 160999.33 49548.00 161010.00 49516.00C161031.67 49494.33 161053.33 49472.67 161075.00 49451.00C161075.00 49408.33 161075.00 49365.67 161075.00 49323.00C161096.33 49290.67 161117.67 49258.33 161139.00 49226.00C161139.00 49172.33 161139.00 49118.67 161139.00 49065.00C161160.33 49022.33 161181.67 48979.67 161203.00 48937.00C161203.00 48883.33 161203.00 48829.67 161203.00 48776.00C161224.67 48754.67 161246.33 48733.33 161268.00 48712.00C161289.33 48669.00 161310.67 48626.00 161332.00 48583.00C161353.33 48572.33 161374.67 48561.67 161396.00 48551.00C161395.98 48518.93 161396.05 48486.85 161395.96 48454.78C161374.65 48326.18 161353.32 48197.59 161332.00 48069.00C161385.67 47983.00 161439.33 47897.00 161493.00 47811.00C161514.33 47789.67 161535.67 47768.33 161557.00 47747.00C161514.00 47736.33 161471.00 47725.67 161428.00 47715.00C161406.67 47704.33 161385.33 47693.67 161364.00 47683.00C161364.00 47661.67 161364.00 47640.33 161364.00 47619.00C161342.67 47586.67 161321.33 47554.33 161300.00 47522.00C161310.67 47511.33 161321.33 47500.67 161332.00 47490.00C161353.33 47425.67 161374.67 47361.33 161396.00 47297.00C161385.33 47275.67 161374.67 47254.33 161364.00 47233.00C161385.33 47211.33 161406.67 47189.67 161428.00 47168.00C161428.00 47157.33 161428.00 47146.67 161428.00 47136.00C161417.33 47125.33 161406.67 47114.67 161396.00 47104.00C161364.00 47104.00 161332.00 47104.00 161300.00 47104.00C161267.67 47093.33 161235.33 47082.67 161203.00 47072.00C161192.33 47072.00 161181.67 47072.00 161171.00 47072.00C161149.67 47061.33 161128.33 47050.67 161107.00 47040.00C161107.00 47029.33 161107.00 47018.67 161107.00 47008.00C161096.33 47018.67 161085.67 47029.33 161075.00 47040.00C161064.00 47029.33 161053.00 47018.67 161042.00 47008.00C161020.67 47018.67 160999.33 47029.33 160978.00 47040.00C160956.67 47040.00 160935.33 47040.00 160914.00 47040.00C160871.11 47061.55 160828.10 47082.86 160785.00 47104.00C160774.33 47104.00 160763.67 47104.00 160753.00 47104.00C160753.00 47093.33 160753.00 47082.67 160753.00 47072.00C160785.33 47050.67 160817.67 47029.33 160850.00 47008.00C160828.13 46965.10 160806.46 46922.10 160785.00 46879.00C160795.67 46868.33 160806.33 46857.67 160817.00 46847.00C160817.00 46836.33 160817.00 46825.67 160817.00 46815.00C160828.00 46815.00 160839.00 46815.00 160850.00 46815.00C160850.00 46804.33 160850.00 46793.67 160850.00 46783.00C160860.67 46783.00 160871.33 46783.00 160882.00 46783.00C160903.33 46729.33 160924.67 46675.67 160946.00 46622.00C160924.67 46579.00 160903.33 46536.00 160882.00 46493.00C160860.33 46471.67 160838.67 46450.33 160817.00 46429.00C160795.45 46386.11 160774.13 46343.10 160753.00 46300.00C160753.00 46289.33 160753.00 46278.67 160753.00 46268.00C160731.67 46246.67 160710.33 46225.33 160689.00 46204.00C160688.95 46193.26 160689.09 46182.52 160688.93 46171.78C160678.28 46139.52 160667.64 46107.26 160657.00 46075.00C160646.00 46075.00 160635.00 46075.00 160624.00 46075.00C160624.00 46064.33 160624.00 46053.67 160624.00 46043.00C160602.67 46064.33 160581.33 46085.67 160560.00 46107.00C160560.00 46096.33 160560.00 46085.67 160560.00 46075.00C160613.67 46021.33 160667.33 45967.67 160721.00 45914.00C160742.33 45882.00 160763.67 45850.00 160785.00 45818.00C160763.67 45796.67 160742.33 45775.33 160721.00 45754.00C160731.67 45700.33 160742.33 45646.67 160753.00 45593.00C160763.67 45582.33 160774.33 45571.67 160785.00 45561.00C160806.67 45561.00 160828.33 45561.00 160850.00 45561.00C160850.00 45550.33 160850.00 45539.67 160850.00 45529.00C160817.67 45507.33 160785.33 45485.67 160753.00 45464.00C160721.00 45464.00 160689.00 45464.00 160657.00 45464.00C160635.33 45442.67 160613.67 45421.33 160592.00 45400.00C160538.67 45400.00 160485.33 45400.00 160432.00 45400.00C160410.33 45389.33 160388.67 45378.67 160367.00 45368.00C160356.33 45357.33 160345.67 45346.67 160335.00 45336.00C160345.67 45325.00 160356.33 45314.00 160367.00 45303.00C160377.67 45228.00 160388.33 45153.00 160399.00 45078.00C160377.67 45024.67 160356.33 44971.33 160335.00 44918.00C160292.05 44896.63 160249.22 44875.03 160206.48 44853.25C160205.37 44850.75 160206.31 44846.99 160206.00 44844.00C160206.00 44836.33 160206.00 44828.67 160206.00 44821.00C160217.00 44810.33 160228.00 44799.67 160239.00 44789.00C160239.00 44778.33 160239.00 44767.67 160239.00 44757.00C160281.67 44757.00 160324.33 44757.00 160367.00 44757.00C160388.67 44724.67 160410.33 44692.33 160432.00 44660.00C160432.00 44606.67 160432.00 44553.33 160432.00 44500.00C160442.67 44489.00 160453.33 44478.00 160464.00 44467.00C160496.00 44456.33 160528.00 44445.67 160560.00 44435.00C160538.67 44435.00 160517.33 44435.00 160496.00 44435.00C160474.67 44445.67 160453.33 44456.33 160432.00 44467.00C160431.96 44456.26 160432.08 44445.52 160431.94 44434.78C160420.96 44392.19 160409.98 44349.59 160399.00 44307.00C160377.67 44285.33 160356.33 44263.67 160335.00 44242.00C160335.00 44178.00 160335.00 44114.00 160335.00 44050.00C160270.67 44050.00 160206.33 44050.00 160142.00 44050.00C160131.33 44028.33 160120.67 44006.67 160110.00 43985.00C160099.33 43985.00 160088.67 43985.00 160078.00 43985.00C160078.00 43931.33 160078.00 43877.67 160078.00 43824.00C160045.67 43835.00 160013.33 43846.00 159981.00 43857.00C159981.00 43846.00 159981.00 43835.00 159981.00 43824.00C159992.00 43802.67 160003.00 43781.33 160014.00 43760.00z"},"br-20":{"name":"Rio Grande do Norte","path":"M173454.00 58068.00C173454.00 58057.33 173454.00 58046.67 173454.00 58036.00C173475.33 58025.33 173496.67 58014.67 173518.00 58004.00C173528.67 57993.34 173539.33 57982.66 173550.00 57972.00C173560.67 57939.67 173571.33 57907.33 173582.00 57875.00C173603.67 57886.00 173625.33 57897.00 173647.00 57908.00C173657.67 57886.33 173668.33 57864.67 173679.00 57843.00C173689.67 57832.34 173700.33 57821.66 173711.00 57811.00C173711.00 57800.33 173711.00 57789.67 173711.00 57779.00C173700.33 57768.34 173689.67 57757.66 173679.00 57747.00C173679.00 57714.67 173679.00 57682.33 173679.00 57650.00C173721.67 57639.33 173764.33 57628.67 173807.00 57618.00C173807.00 57596.67 173807.00 57575.33 173807.00 57554.00C173850.00 57511.00 173893.00 57468.00 173936.00 57425.00C173936.00 57414.33 173936.00 57403.67 173936.00 57393.00C173946.68 57371.62 173957.40 57350.26 173968.05 57328.86C173978.70 57296.58 173989.35 57264.29 174000.00 57232.00C174010.67 57232.00 174021.33 57232.00 174032.00 57232.00C174053.67 57210.67 174075.33 57189.33 174097.00 57168.00C174086.33 57146.67 174075.67 57125.33 174065.00 57104.00C174086.33 57093.33 174107.67 57082.67 174129.00 57072.00C174161.00 57039.67 174193.00 57007.33 174225.00 56975.00C174235.67 56975.00 174246.33 56975.00 174257.00 56975.00C174268.00 56964.33 174279.00 56953.67 174290.00 56943.00C174300.67 56953.66 174311.33 56964.34 174322.00 56975.00C174332.67 56964.34 174343.33 56953.66 174354.00 56943.00C174354.00 56964.33 174354.00 56985.67 174354.00 57007.00C174364.67 57007.00 174375.33 57007.00 174386.00 57007.00C174386.00 57017.67 174386.00 57028.33 174386.00 57039.00C174396.67 57060.67 174407.33 57082.33 174418.00 57104.00C174428.67 57114.66 174439.33 57125.34 174450.00 57136.00C174482.33 57114.66 174514.67 57093.34 174547.00 57072.00C174547.00 57050.33 174547.00 57028.67 174547.00 57007.00C174557.67 57028.67 174568.33 57050.33 174579.00 57072.00C174611.33 57072.00 174643.67 57072.00 174676.00 57072.00C174697.33 57082.67 174718.67 57093.33 174740.00 57104.00C174761.33 57082.33 174782.67 57060.67 174804.00 57039.00C174825.33 57039.00 174846.67 57039.00 174868.00 57039.00C174868.00 57028.33 174868.00 57017.67 174868.00 57007.00C174889.67 56985.67 174911.33 56964.33 174933.00 56943.00C174943.67 56943.00 174954.33 56943.00 174965.00 56943.00C174975.67 56932.34 174986.33 56921.66 174997.00 56911.00C174997.00 56857.33 174997.00 56803.67 174997.00 56750.00C175007.67 56728.67 175018.33 56707.33 175029.00 56686.00C175093.33 56632.33 175157.67 56578.67 175222.00 56525.00C175243.33 56514.33 175264.67 56503.67 175286.00 56493.00C175297.00 56482.33 175308.00 56471.67 175319.00 56461.00C175329.67 56461.00 175340.33 56461.00 175351.00 56461.00C175372.33 56450.33 175393.67 56439.67 175415.00 56429.00C175415.00 56396.67 175415.00 56364.33 175415.00 56332.00C175436.33 56310.66 175457.67 56289.34 175479.00 56268.00C175489.67 56246.33 175500.33 56224.67 175511.00 56203.00C175532.67 56181.67 175554.33 56160.33 175576.00 56139.00C175597.33 56074.67 175618.67 56010.33 175640.00 55946.00C175629.33 55924.67 175618.67 55903.33 175608.00 55882.00C175629.33 55860.66 175650.67 55839.34 175672.00 55818.00C175672.00 55807.00 175672.00 55796.00 175672.00 55785.00C175725.67 55731.67 175779.33 55678.33 175833.00 55625.00C175862.83 55565.03 175892.36 55504.91 175922.62 55445.15C175935.75 55419.10 175948.88 55393.05 175962.00 55367.00C175940.33 55367.00 175918.67 55367.00 175897.00 55367.00C175897.00 55356.33 175897.00 55345.67 175897.00 55335.00C175875.67 55335.00 175854.33 55335.00 175833.00 55335.00C175811.67 55345.67 175790.33 55356.33 175769.00 55367.00C175769.00 55345.67 175769.00 55324.33 175769.00 55303.00C175779.67 55271.00 175790.33 55239.00 175801.00 55207.00C175801.00 55164.00 175801.00 55121.00 175801.00 55078.00C175843.67 55035.34 175886.33 54992.66 175929.00 54950.00C175961.33 54939.00 175993.67 54928.00 176026.00 54917.00C176058.00 54852.67 176090.00 54788.33 176122.00 54724.00C176143.67 54702.67 176165.33 54681.33 176187.00 54660.00C176187.00 54638.67 176187.00 54617.33 176187.00 54596.00C176197.67 54585.34 176208.33 54574.66 176219.00 54564.00C176219.00 54553.00 176219.00 54542.00 176219.00 54531.00C176272.71 54498.98 176326.41 54466.94 176380.13 54434.93C176401.42 54424.30 176422.71 54413.64 176444.00 54403.00C176465.33 54360.00 176486.67 54317.00 176508.00 54274.00C176529.67 54274.00 176551.33 54274.00 176573.00 54274.00C176594.33 54263.33 176615.67 54252.67 176637.00 54242.00C176647.67 54220.67 176658.33 54199.33 176669.00 54178.00C176679.67 54167.34 176690.33 54156.66 176701.00 54146.00C176711.67 54092.33 176722.33 54038.67 176733.00 53985.00C176733.00 53963.67 176733.00 53942.33 176733.00 53921.00C176765.33 53878.00 176797.67 53835.00 176830.00 53792.00C176840.67 53770.67 176851.33 53749.33 176862.00 53728.00C176851.33 53695.67 176840.67 53663.33 176830.00 53631.00C176840.67 53620.34 176851.33 53609.66 176862.00 53599.00C176862.00 53588.33 176862.00 53577.67 176862.00 53567.00C176872.67 53534.67 176883.33 53502.33 176894.00 53470.00C176915.33 53459.33 176936.67 53448.67 176958.00 53438.00C177001.00 53406.00 177044.00 53374.00 177087.00 53342.00C177110.13 53318.77 177133.46 53295.75 177156.45 53272.39C177165.29 53263.25 177174.15 53254.13 177183.00 53245.00C177194.00 53245.00 177205.00 53245.00 177216.00 53245.00C177216.00 53234.33 177216.00 53223.67 177216.00 53213.00C177205.00 53191.67 177194.00 53170.33 177183.00 53149.00C177183.00 53127.67 177183.00 53106.33 177183.00 53085.00C177194.00 53052.67 177205.00 53020.33 177216.00 52988.00C177216.00 52966.67 177216.00 52945.33 177216.00 52924.00C177205.00 52913.33 177194.00 52902.67 177183.00 52892.00C177183.00 52870.33 177183.00 52848.67 177183.00 52827.00C177204.67 52795.00 177226.33 52763.00 177248.00 52731.00C177258.67 52645.33 177269.33 52559.67 177280.00 52474.00C177333.67 52420.34 177387.33 52366.66 177441.00 52313.00C177451.67 52270.00 177462.33 52227.00 177473.00 52184.00C177494.33 52162.66 177515.67 52141.34 177537.00 52120.00C177590.67 52098.67 177644.33 52077.33 177698.00 52056.00C177730.00 51970.00 177762.00 51884.00 177794.00 51798.00C177804.67 51744.67 177815.33 51691.33 177826.00 51638.00C177847.67 51573.67 177869.33 51509.33 177891.00 51445.00C178159.25 51380.56 178427.54 51316.30 178695.75 51251.75C178727.55 51241.16 178759.34 51230.53 178791.14 51219.97C178989.40 51177.32 179187.58 51134.28 179385.93 51092.08C179487.62 51070.39 179589.31 51048.69 179691.00 51027.00C179702.00 51016.33 179713.00 51005.67 179724.00 50995.00C179734.72 51016.42 179745.39 51037.85 179756.15 51059.25C179788.09 51112.84 179820.05 51166.42 179852.00 51220.00C179916.33 51284.34 179980.67 51348.66 180045.00 51413.00C180077.00 51434.33 180109.00 51455.67 180141.00 51477.00C180152.00 51477.00 180163.00 51477.00 180174.00 51477.00C180206.00 51487.67 180238.00 51498.33 180270.00 51509.00C180307.05 51490.45 180344.10 51471.90 180381.32 51453.70C180387.21 51450.80 180393.11 51447.90 180399.00 51445.00C180420.33 51445.00 180441.67 51445.00 180463.00 51445.00C180523.61 51475.42 180584.41 51505.47 180645.15 51535.63C180670.12 51548.05 180695.06 51560.52 180720.00 51573.00C180757.55 51554.53 180795.11 51536.08 180832.48 51517.26C180859.32 51503.83 180886.16 51490.42 180913.00 51477.00C180956.00 51477.00 180999.00 51477.00 181042.00 51477.00C181063.33 51455.66 181084.67 51434.34 181106.00 51413.00C181170.33 51455.67 181234.67 51498.33 181299.00 51541.00C181331.33 51551.67 181363.67 51562.33 181396.00 51573.00C181428.00 51573.00 181460.00 51573.00 181492.00 51573.00C181524.00 51605.33 181556.00 51637.67 181588.00 51670.00C181620.33 51712.67 181652.67 51755.33 181685.00 51798.00C181749.33 51862.34 181813.67 51926.66 181878.00 51991.00C181931.67 52012.67 181985.33 52034.33 182039.00 52056.00C182071.00 52077.33 182103.00 52098.67 182135.00 52120.00C182156.33 52109.33 182177.67 52098.67 182199.00 52088.00C182188.33 52098.66 182177.67 52109.34 182167.00 52120.00C182188.67 52141.33 182210.33 52162.67 182232.00 52184.00C182253.33 52162.66 182274.67 52141.34 182296.00 52120.00C182306.67 52120.00 182317.33 52120.00 182328.00 52120.00C182328.00 52152.00 182328.00 52184.00 182328.00 52216.00C182349.33 52227.00 182370.67 52238.00 182392.00 52249.00C182424.33 52238.00 182456.67 52227.00 182489.00 52216.00C182553.33 52227.00 182617.67 52238.00 182682.00 52249.00C182692.67 52227.33 182703.33 52205.67 182714.00 52184.00C182735.33 52194.67 182756.67 52205.33 182778.00 52216.00C182788.67 52205.34 182799.33 52194.66 182810.00 52184.00C182831.67 52184.00 182853.33 52184.00 182875.00 52184.00C182917.67 52194.67 182960.33 52205.33 183003.00 52216.00C183013.67 52205.34 183024.33 52194.66 183035.00 52184.00C183078.00 52184.00 183121.00 52184.00 183164.00 52184.00C183196.00 52162.67 183228.00 52141.33 183260.00 52120.00C183292.38 52120.01 183324.76 52119.97 183357.14 52120.02C183432.55 52130.80 183508.00 52141.37 183583.40 52152.28C183636.60 52162.85 183689.80 52173.43 183743.00 52184.00C183796.33 52205.67 183849.67 52227.33 183903.00 52249.00C183935.33 52249.00 183967.67 52249.00 184000.00 52249.00C184010.67 52238.00 184021.33 52227.00 184032.00 52216.00C184053.38 52227.01 184074.74 52238.07 184096.14 52249.04C184128.43 52259.69 184160.71 52270.35 184193.00 52281.00C184193.00 52291.67 184193.00 52302.33 184193.00 52313.00C184225.00 52291.67 184257.00 52270.33 184289.00 52249.00C184310.67 52249.00 184332.33 52249.00 184354.00 52249.00C184407.33 52259.67 184460.67 52270.33 184514.00 52281.00C184653.33 52281.00 184792.67 52281.00 184932.00 52281.00C184975.00 52270.33 185018.00 52259.67 185061.00 52249.00C185104.04 52227.30 185147.10 52205.65 185190.12 52183.92C185222.08 52162.61 185254.04 52141.31 185286.00 52120.00C185318.33 52120.00 185350.67 52120.00 185383.00 52120.00C185415.00 52098.67 185447.00 52077.33 185479.00 52056.00C185522.00 52056.00 185565.00 52056.00 185608.00 52056.00C185618.67 52045.00 185629.33 52034.00 185640.00 52023.00C185725.67 52023.00 185811.33 52023.00 185897.00 52023.00C185961.33 52044.67 186025.67 52066.33 186090.00 52088.00C186132.67 52109.33 186175.33 52130.67 186218.00 52152.00C186261.00 52152.00 186304.00 52152.00 186347.00 52152.00C186390.00 52162.67 186433.00 52173.33 186476.00 52184.00C186518.67 52173.33 186561.33 52162.67 186604.00 52152.00C186614.67 52162.66 186625.33 52173.34 186636.00 52184.00C186647.00 52184.00 186658.00 52184.00 186669.00 52184.00C186700.79 52199.94 186732.71 52215.64 186764.23 52232.11C186775.16 52237.74 186786.08 52243.37 186797.00 52249.00C186861.33 52259.67 186925.67 52270.33 186990.00 52281.00C187000.67 52291.66 187011.33 52302.34 187022.00 52313.00C187043.67 52313.00 187065.33 52313.00 187087.00 52313.00C187172.67 52334.33 187258.33 52355.67 187344.00 52377.00C187354.67 52387.66 187365.33 52398.34 187376.00 52409.00C187386.67 52398.34 187397.33 52387.66 187408.00 52377.00C187429.33 52377.00 187450.67 52377.00 187472.00 52377.00C187472.00 52366.33 187472.00 52355.67 187472.00 52345.00C187547.33 52388.00 187622.67 52431.00 187698.00 52474.00C187751.33 52484.67 187804.67 52495.33 187858.00 52506.00C187901.00 52527.33 187944.00 52548.67 187987.00 52570.00C188019.00 52570.00 188051.00 52570.00 188083.00 52570.00C188115.33 52613.00 188147.67 52656.00 188180.00 52699.00C188190.67 52720.33 188201.33 52741.67 188212.00 52763.00C188233.33 52773.67 188254.67 52784.33 188276.00 52795.00C188319.00 52827.33 188362.00 52859.67 188405.00 52892.00C188448.00 52945.33 188491.00 52998.67 188534.00 53052.00C188544.67 53073.67 188555.33 53095.33 188566.00 53117.00C188576.67 53127.66 188587.33 53138.34 188598.00 53149.00C188608.67 53181.05 188619.38 53213.08 188630.03 53245.14C188651.36 53331.09 188672.68 53417.05 188694.00 53503.00C188704.67 53524.33 188715.33 53545.67 188726.00 53567.00C188747.67 53588.33 188769.33 53609.67 188791.00 53631.00C188812.33 53641.67 188833.67 53652.33 188855.00 53663.00C188876.33 53684.67 188897.67 53706.33 188919.00 53728.00C188919.00 53749.33 188919.00 53770.67 188919.00 53792.00C188940.67 53824.00 188962.33 53856.00 188984.00 53888.00C188994.67 53888.00 189005.33 53888.00 189016.00 53888.00C189016.00 53941.67 189016.00 53995.33 189016.00 54049.00C189040.66 54073.52 189065.09 54098.27 189089.44 54123.10C189107.51 54141.51 189125.72 54159.79 189144.00 54178.00C189144.00 54167.33 189144.00 54156.67 189144.00 54146.00C189144.00 54178.00 189144.00 54210.00 189144.00 54242.00C189155.00 54263.33 189166.00 54284.67 189177.00 54306.00C189177.00 54317.00 189177.00 54328.00 189177.00 54339.00C189187.67 54349.66 189198.33 54360.34 189209.00 54371.00C189209.00 54403.00 189209.00 54435.00 189209.00 54467.00C189219.68 54488.38 189230.40 54509.74 189241.05 54531.14C189251.70 54563.42 189262.35 54595.71 189273.00 54628.00C189283.67 54628.00 189294.33 54628.00 189305.00 54628.00C189305.00 54681.67 189305.00 54735.33 189305.00 54789.00C189315.67 54821.00 189326.33 54853.00 189337.00 54885.00C189347.67 54885.00 189358.33 54885.00 189369.00 54885.00C189369.00 54960.00 189369.00 55035.00 189369.00 55110.00C189380.00 55131.67 189391.00 55153.33 189402.00 55175.00C189423.33 55175.00 189444.67 55175.00 189466.00 55175.00C189465.99 55185.71 189466.03 55196.43 189465.98 55207.14C189455.32 55282.10 189444.66 55357.05 189434.00 55432.00C189434.00 55453.33 189434.00 55474.67 189434.00 55496.00C189444.67 55506.66 189455.33 55517.34 189466.00 55528.00C189466.00 55560.33 189466.00 55592.67 189466.00 55625.00C189476.67 55646.33 189487.33 55667.67 189498.00 55689.00C189508.67 55689.00 189519.33 55689.00 189530.00 55689.00C189530.00 55807.00 189530.00 55925.00 189530.00 56043.00C189540.67 56064.33 189551.33 56085.67 189562.00 56107.00C189573.00 56117.67 189584.00 56128.33 189595.00 56139.00C189605.67 56128.34 189616.33 56117.66 189627.00 56107.00C189637.67 56107.00 189648.33 56107.00 189659.00 56107.00C189659.00 56203.33 189659.00 56299.67 189659.00 56396.00C189669.67 56439.00 189680.33 56482.00 189691.00 56525.00C189723.33 56525.00 189755.67 56525.00 189788.00 56525.00C189798.67 56557.00 189809.33 56589.00 189820.00 56621.00C189830.67 56621.00 189841.33 56621.00 189852.00 56621.00C189852.00 56632.00 189852.00 56643.00 189852.00 56654.00C189862.67 56675.33 189873.33 56696.67 189884.00 56718.00C189873.33 56761.00 189862.67 56804.00 189852.00 56847.00C189862.67 56879.00 189873.33 56911.00 189884.00 56943.00C189884.00 56953.67 189884.00 56964.33 189884.00 56975.00C189894.67 56975.00 189905.33 56975.00 189916.00 56975.00C189916.00 57103.67 189916.00 57232.33 189916.00 57361.00C189926.67 57436.00 189937.33 57511.00 189948.00 57586.00C189948.00 57575.33 189948.00 57564.67 189948.00 57554.00C189958.67 57564.66 189969.33 57575.34 189980.00 57586.00C189980.00 57596.67 189980.00 57607.33 189980.00 57618.00C189991.03 57650.37 190002.01 57682.76 190013.06 57715.13C190023.71 57736.42 190034.35 57757.71 190045.00 57779.00C190055.67 57779.00 190066.33 57779.00 190077.00 57779.00C190087.67 57789.66 190098.33 57800.34 190109.00 57811.00C190141.00 57811.00 190173.00 57811.00 190205.00 57811.00C190205.02 57821.76 190204.95 57832.53 190205.04 57843.29C190216.00 57929.19 190227.01 58015.10 190238.00 58101.00C190238.00 58133.00 190238.00 58165.00 190238.00 58197.00C190227.00 58207.67 190216.00 58218.33 190205.00 58229.00C190216.12 58272.29 190227.07 58315.62 190238.29 58358.88C190248.87 58390.59 190259.43 58422.29 190270.00 58454.00C190280.67 58464.66 190291.33 58475.34 190302.00 58486.00C190334.00 58486.00 190366.00 58486.00 190398.00 58486.00C190409.00 58496.67 190420.00 58507.33 190431.00 58518.00C190441.69 58561.04 190452.34 58604.10 190463.05 58647.14C190484.36 58711.43 190505.68 58775.71 190527.00 58840.00C190527.00 58915.00 190527.00 58990.00 190527.00 59065.00C190516.33 59075.66 190505.67 59086.34 190495.00 59097.00C190473.62 59107.68 190452.26 59118.40 190430.86 59129.05C190398.57 59140.03 190366.29 59151.02 190334.00 59162.00C190312.67 59162.00 190291.33 59162.00 190270.00 59162.00C190248.33 59183.33 190226.67 59204.67 190205.00 59226.00C190173.00 59236.67 190141.00 59247.33 190109.00 59258.00C190098.33 59258.00 190087.67 59258.00 190077.00 59258.00C190034.00 59215.00 189991.00 59172.00 189948.00 59129.00C189937.33 59129.00 189926.67 59129.00 189916.00 59129.00C189905.33 59140.00 189894.67 59151.00 189884.00 59162.00C189873.33 59162.00 189862.67 59162.00 189852.00 59162.00C189841.33 59204.67 189830.67 59247.33 189820.00 59290.00C189798.33 59290.00 189776.67 59290.00 189755.00 59290.00C189733.67 59322.33 189712.33 59354.67 189691.00 59387.00C189680.33 59387.00 189669.67 59387.00 189659.00 59387.00C189637.67 59397.67 189616.33 59408.33 189595.00 59419.00C189552.00 59408.33 189509.00 59397.67 189466.00 59387.00C189455.33 59387.00 189444.67 59387.00 189434.00 59387.00C189423.26 59365.03 189412.25 59343.18 189401.69 59321.12C189390.80 59289.41 189379.90 59257.71 189369.00 59226.00C189358.33 59226.00 189347.67 59226.00 189337.00 59226.00C189326.33 59247.33 189315.67 59268.67 189305.00 59290.00C189262.33 59290.00 189219.67 59290.00 189177.00 59290.00C189144.67 59311.34 189112.33 59332.66 189080.00 59354.00C188994.33 59354.00 188908.67 59354.00 188823.00 59354.00C188801.67 59343.33 188780.33 59332.67 188759.00 59322.00C188726.67 59279.33 188694.33 59236.67 188662.00 59194.00C188640.63 59183.30 188619.24 59172.65 188597.88 59161.92C188565.59 59140.28 188533.29 59118.64 188501.00 59097.00C188490.33 59097.00 188479.67 59097.00 188469.00 59097.00C188437.00 59086.33 188405.00 59075.67 188373.00 59065.00C188351.33 59065.00 188329.67 59065.00 188308.00 59065.00C188308.00 59054.33 188308.00 59043.67 188308.00 59033.00C188297.33 59043.66 188286.67 59054.34 188276.00 59065.00C188254.67 59054.33 188233.33 59043.67 188212.00 59033.00C188201.33 59033.00 188190.67 59033.00 188180.00 59033.00C188169.33 59043.66 188158.67 59054.34 188148.00 59065.00C188126.33 59065.00 188104.67 59065.00 188083.00 59065.00C188072.33 59054.34 188061.67 59043.66 188051.00 59033.00C188051.00 59043.67 188051.00 59054.33 188051.00 59065.00C188040.33 59054.34 188029.67 59043.66 188019.00 59033.00C187987.00 59033.00 187955.00 59033.00 187923.00 59033.00C187912.00 59022.33 187901.00 59011.67 187890.00 59001.00C187890.00 59011.67 187890.00 59022.33 187890.00 59033.00C187858.00 59033.00 187826.00 59033.00 187794.00 59033.00C187783.33 59054.33 187772.67 59075.67 187762.00 59097.00C187751.33 59097.00 187740.67 59097.00 187730.00 59097.00C187730.00 59086.33 187730.00 59075.67 187730.00 59065.00C187697.67 59065.00 187665.33 59065.00 187633.00 59065.00C187622.33 59054.34 187611.67 59043.66 187601.00 59033.00C187601.00 59022.33 187601.00 59011.67 187601.00 59001.00C187579.67 58979.66 187558.33 58958.34 187537.00 58937.00C187504.67 58937.00 187472.33 58937.00 187440.00 58937.00C187418.62 58925.99 187397.26 58914.93 187375.86 58903.95C187343.91 58893.30 187311.95 58882.65 187280.00 58872.00C187269.00 58872.00 187258.00 58872.00 187247.00 58872.00C187247.00 58882.67 187247.00 58893.33 187247.00 58904.00C187236.33 58904.00 187225.67 58904.00 187215.00 58904.00C187193.67 58893.33 187172.33 58882.67 187151.00 58872.00C187108.00 58915.00 187065.00 58958.00 187022.00 59001.00C187000.62 59001.01 186979.24 59000.97 186957.86 59001.02C186882.91 59011.68 186807.95 59022.34 186733.00 59033.00C186722.33 59043.66 186711.67 59054.34 186701.00 59065.00C186582.95 59065.01 186464.91 59064.99 186346.86 59065.01C186207.57 59075.67 186068.29 59086.34 185929.00 59097.00C185897.00 59086.33 185865.00 59075.67 185833.00 59065.00C185811.33 59065.00 185789.67 59065.00 185768.00 59065.00C185725.33 59054.33 185682.67 59043.67 185640.00 59033.00C185629.33 59022.34 185618.67 59011.66 185608.00 59001.00C185608.00 58968.67 185608.00 58936.33 185608.00 58904.00C185565.00 58893.33 185522.00 58882.67 185479.00 58872.00C185457.67 58850.66 185436.33 58829.34 185415.00 58808.00C185393.33 58765.00 185371.67 58722.00 185350.00 58679.00C185350.00 58689.67 185350.00 58700.33 185350.00 58711.00C185339.33 58711.00 185328.67 58711.00 185318.00 58711.00C185318.00 58700.33 185318.00 58689.67 185318.00 58679.00C185307.33 58679.00 185296.67 58679.00 185286.00 58679.00C185275.33 58689.66 185264.67 58700.34 185254.00 58711.00C185232.67 58722.00 185211.33 58733.00 185190.00 58744.00C185179.00 58744.00 185168.00 58744.00 185157.00 58744.00C185146.33 58754.66 185135.67 58765.34 185125.00 58776.00C185071.67 58776.00 185018.33 58776.00 184965.00 58776.00C184922.00 58786.67 184879.00 58797.33 184836.00 58808.00C184761.00 58808.00 184686.00 58808.00 184611.00 58808.00C184568.00 58818.67 184525.00 58829.33 184482.00 58840.00C184471.33 58786.33 184460.67 58732.67 184450.00 58679.00C184428.62 58668.32 184407.26 58657.60 184385.86 58646.96C184353.57 58636.31 184321.29 58625.65 184289.00 58615.00C184278.33 58615.00 184267.67 58615.00 184257.00 58615.00C184257.00 58572.00 184257.00 58529.00 184257.00 58486.00C184278.33 58454.00 184299.67 58422.00 184321.00 58390.00C184321.00 58325.67 184321.00 58261.33 184321.00 58197.00C184289.30 58165.25 184257.44 58133.66 184226.07 58101.59C184215.05 58090.39 184204.02 58079.20 184193.00 58068.00C184139.33 58100.33 184085.67 58132.67 184032.00 58165.00C184000.00 58175.67 183968.00 58186.33 183936.00 58197.00C183882.33 58175.67 183828.67 58154.33 183775.00 58133.00C183721.33 58240.00 183667.67 58347.00 183614.00 58454.00C183571.00 58454.00 183528.00 58454.00 183485.00 58454.00C183421.00 58443.33 183357.00 58432.67 183293.00 58422.00C183282.00 58475.67 183271.00 58529.33 183260.00 58583.00C183260.00 58604.33 183260.00 58625.67 183260.00 58647.00C183227.98 58700.71 183195.94 58754.41 183163.94 58808.13C183153.29 58829.42 183142.65 58850.71 183132.00 58872.00C183132.00 58893.67 183132.00 58915.33 183132.00 58937.00C183142.67 58969.00 183153.33 59001.00 183164.00 59033.00C183164.00 59065.00 183164.00 59097.00 183164.00 59129.00C183174.67 59129.00 183185.33 59129.00 183196.00 59129.00C183228.38 59150.68 183260.73 59172.41 183293.13 59194.07C183314.42 59204.70 183335.71 59215.36 183357.00 59226.00C183367.67 59258.00 183378.33 59290.00 183389.00 59322.00C183399.67 59332.66 183410.33 59343.34 183421.00 59354.00C183442.33 59365.00 183463.67 59376.00 183485.00 59387.00C183496.00 59387.00 183507.00 59387.00 183518.00 59387.00C183528.67 59397.66 183539.33 59408.34 183550.00 59419.00C183550.00 59483.33 183550.00 59547.67 183550.00 59612.00C183560.67 59654.67 183571.33 59697.33 183582.00 59740.00C183582.00 59750.67 183582.00 59761.33 183582.00 59772.00C183560.67 59761.33 183539.33 59750.67 183518.00 59740.00C183507.00 59750.67 183496.00 59761.33 183485.00 59772.00C183463.67 59740.00 183442.33 59708.00 183421.00 59676.00C183367.33 59654.67 183313.67 59633.33 183260.00 59612.00C183249.33 59601.34 183238.67 59590.66 183228.00 59580.00C183206.67 59590.67 183185.33 59601.33 183164.00 59612.00C183174.67 59633.33 183185.33 59654.67 183196.00 59676.00C183164.00 59740.33 183132.00 59804.67 183100.00 59869.00C183089.33 59944.00 183078.67 60019.00 183068.00 60094.00C183046.33 60115.33 183024.67 60136.67 183003.00 60158.00C183024.67 60190.33 183046.33 60222.67 183068.00 60255.00C183089.33 60265.67 183110.67 60276.33 183132.00 60287.00C183142.67 60287.00 183153.33 60287.00 183164.00 60287.00C183164.00 60297.67 183164.00 60308.33 183164.00 60319.00C183174.67 60319.00 183185.33 60319.00 183196.00 60319.00C183217.33 60340.34 183238.67 60361.66 183260.00 60383.00C183271.00 60415.33 183282.00 60447.67 183293.00 60480.00C183282.00 60544.33 183271.00 60608.67 183260.00 60673.00C183249.33 60683.66 183238.67 60694.34 183228.00 60705.00C183196.00 60715.67 183164.00 60726.33 183132.00 60737.00C183110.67 60758.34 183089.33 60779.66 183068.00 60801.00C183046.33 60801.00 183024.67 60801.00 183003.00 60801.00C182985.53 60819.03 182968.12 60837.13 182950.24 60854.76C182946.49 60858.51 182942.75 60862.25 182939.00 60866.00C182949.67 60887.33 182960.33 60908.67 182971.00 60930.00C182971.00 60940.67 182971.00 60951.33 182971.00 60962.00C182906.67 61058.33 182842.33 61154.67 182778.00 61251.00C182735.00 61251.00 182692.00 61251.00 182649.00 61251.00C182617.00 61240.33 182585.00 61229.67 182553.00 61219.00C182499.33 61219.00 182445.67 61219.00 182392.00 61219.00C182360.00 61305.00 182328.00 61391.00 182296.00 61477.00C182285.33 61477.00 182274.67 61477.00 182264.00 61477.00C182221.00 61455.33 182178.00 61433.67 182135.00 61412.00C182103.00 61358.33 182071.00 61304.67 182039.00 61251.00C182049.67 61219.00 182060.33 61187.00 182071.00 61155.00C182071.00 61133.67 182071.00 61112.33 182071.00 61091.00C182092.33 61058.67 182113.67 61026.33 182135.00 60994.00C182156.33 60919.00 182177.67 60844.00 182199.00 60769.00C182134.67 60779.67 182070.33 60790.33 182006.00 60801.00C182006.00 60715.33 182006.00 60629.67 182006.00 60544.00C181899.00 60447.67 181792.00 60351.33 181685.00 60255.00C181577.67 60297.67 181470.33 60340.33 181363.00 60383.00C181352.33 60383.00 181341.67 60383.00 181331.00 60383.00C181288.33 60404.67 181245.67 60426.33 181203.00 60448.00C181170.67 60480.00 181138.33 60512.00 181106.00 60544.00C181106.00 60533.33 181106.00 60522.67 181106.00 60512.00C181116.67 60501.34 181127.33 60490.66 181138.00 60480.00C181116.67 60480.00 181095.33 60480.00 181074.00 60480.00C181074.00 60469.33 181074.00 60458.67 181074.00 60448.00C181063.33 60426.33 181052.67 60404.67 181042.00 60383.00C181042.00 60361.67 181042.00 60340.33 181042.00 60319.00C181031.33 60287.00 181020.67 60255.00 181010.00 60223.00C180999.00 60201.33 180988.00 60179.67 180977.00 60158.00C180955.67 60158.00 180934.33 60158.00 180913.00 60158.00C180859.33 60201.00 180805.67 60244.00 180752.00 60287.00C180741.33 60297.66 180730.67 60308.34 180720.00 60319.00C180687.96 60329.69 180655.90 60340.34 180623.87 60351.07C180602.58 60361.70 180581.29 60372.36 180560.00 60383.00C180484.67 60404.67 180409.33 60426.33 180334.00 60448.00C180323.33 60448.00 180312.67 60448.00 180302.00 60448.00C180270.00 60490.67 180238.00 60533.33 180206.00 60576.00C180141.67 60619.00 180077.33 60662.00 180013.00 60705.00C179948.67 60705.00 179884.33 60705.00 179820.00 60705.00C179788.00 60683.67 179756.00 60662.33 179724.00 60641.00C179724.00 60619.33 179724.00 60597.67 179724.00 60576.00C179713.00 60565.33 179702.00 60554.67 179691.00 60544.00C179691.00 60533.33 179691.00 60522.67 179691.00 60512.00C179669.67 60490.66 179648.33 60469.34 179627.00 60448.00C179637.67 60426.33 179648.33 60404.67 179659.00 60383.00C179659.00 60340.33 179659.00 60297.67 179659.00 60255.00C179637.67 60244.33 179616.33 60233.67 179595.00 60223.00C179573.67 60201.33 179552.33 60179.67 179531.00 60158.00C179541.67 60136.67 179552.33 60115.33 179563.00 60094.00C179520.00 60083.33 179477.00 60072.67 179434.00 60062.00C179391.33 60083.33 179348.67 60104.67 179306.00 60126.00C179220.00 60115.33 179134.00 60104.67 179048.00 60094.00C179026.62 60094.02 179005.24 60093.97 178983.86 60094.03C178865.91 60115.35 178747.95 60136.67 178630.00 60158.00C178651.67 60104.67 178673.33 60051.33 178695.00 59998.00C178684.00 59987.00 178673.00 59976.00 178662.00 59965.00C178673.00 59943.67 178684.00 59922.33 178695.00 59901.00C178684.00 59879.67 178673.00 59858.33 178662.00 59837.00C178662.00 59772.67 178662.00 59708.33 178662.00 59644.00C178651.33 59644.00 178640.67 59644.00 178630.00 59644.00C178630.00 59622.67 178630.00 59601.33 178630.00 59580.00C178640.67 59537.00 178651.33 59494.00 178662.00 59451.00C178651.33 59440.34 178640.67 59429.66 178630.00 59419.00C178630.00 59408.33 178630.00 59397.67 178630.00 59387.00C178651.67 59354.67 178673.33 59322.33 178695.00 59290.00C178780.67 59290.00 178866.33 59290.00 178952.00 59290.00C178984.00 59258.00 179016.00 59226.00 179048.00 59194.00C179058.67 59097.33 179069.33 59000.67 179080.00 58904.00C179091.00 58872.00 179102.00 58840.00 179113.00 58808.00C179102.00 58797.33 179091.00 58786.67 179080.00 58776.00C179069.33 58754.33 179058.67 58732.67 179048.00 58711.00C179048.00 58689.67 179048.00 58668.33 179048.00 58647.00C179058.67 58636.34 179069.33 58625.66 179080.00 58615.00C179080.00 58593.67 179080.00 58572.33 179080.00 58551.00C179101.67 58529.34 179123.33 58507.66 179145.00 58486.00C179145.00 58443.33 179145.00 58400.67 179145.00 58358.00C179155.67 58325.67 179166.33 58293.33 179177.00 58261.00C179187.67 58261.00 179198.33 58261.00 179209.00 58261.00C179252.00 58239.67 179295.00 58218.33 179338.00 58197.00C179348.67 58186.34 179359.33 58175.66 179370.00 58165.00C179380.67 58132.67 179391.33 58100.33 179402.00 58068.00C179423.33 58057.33 179444.67 58046.67 179466.00 58036.00C179498.33 58046.67 179530.67 58057.33 179563.00 58068.00C179584.33 58068.00 179605.67 58068.00 179627.00 58068.00C179627.00 58014.67 179627.00 57961.33 179627.00 57908.00C179680.67 57854.34 179734.33 57800.66 179788.00 57747.00C179798.67 57747.00 179809.33 57747.00 179820.00 57747.00C179830.67 57736.34 179841.33 57725.66 179852.00 57715.00C179884.37 57703.97 179916.77 57693.00 179949.13 57681.93C179970.42 57671.30 179991.71 57660.64 180013.00 57650.00C180013.00 57628.67 180013.00 57607.33 180013.00 57586.00C180045.00 57575.33 180077.00 57564.67 180109.00 57554.00C180119.67 57543.34 180130.33 57532.66 180141.00 57522.00C180152.00 57489.67 180163.00 57457.33 180174.00 57425.00C180163.00 57425.00 180152.00 57425.00 180141.00 57425.00C180119.67 57414.33 180098.33 57403.67 180077.00 57393.00C180098.33 57339.33 180119.67 57285.67 180141.00 57232.00C180130.33 57210.67 180119.67 57189.33 180109.00 57168.00C180109.00 57146.67 180109.00 57125.33 180109.00 57104.00C180098.33 57050.33 180087.67 56996.67 180077.00 56943.00C180087.67 56932.34 180098.33 56921.66 180109.00 56911.00C180077.00 56911.00 180045.00 56911.00 180013.00 56911.00C179991.67 56900.33 179970.33 56889.67 179949.00 56879.00C179916.67 56889.67 179884.33 56900.33 179852.00 56911.00C179841.33 56889.67 179830.67 56868.33 179820.00 56847.00C179798.67 56836.00 179777.33 56825.00 179756.00 56814.00C179745.33 56814.00 179734.67 56814.00 179724.00 56814.00C179713.00 56825.00 179702.00 56836.00 179691.00 56847.00C179669.67 56889.67 179648.33 56932.33 179627.00 56975.00C179605.67 56975.00 179584.33 56975.00 179563.00 56975.00C179541.33 56964.33 179519.67 56953.67 179498.00 56943.00C179487.33 56953.66 179476.67 56964.34 179466.00 56975.00C179423.33 56985.67 179380.67 56996.33 179338.00 57007.00C179305.67 57039.34 179273.33 57071.66 179241.00 57104.00C179198.33 57104.00 179155.67 57104.00 179113.00 57104.00C179091.33 57146.67 179069.67 57189.33 179048.00 57232.00C178962.33 57232.00 178876.67 57232.00 178791.00 57232.00C178780.33 57243.00 178769.67 57254.00 178759.00 57265.00C178759.00 57307.67 178759.00 57350.33 178759.00 57393.00C178716.00 57403.67 178673.00 57414.33 178630.00 57425.00C178619.33 57414.34 178608.67 57403.66 178598.00 57393.00C178576.67 57393.00 178555.33 57393.00 178534.00 57393.00C178534.00 57403.67 178534.00 57414.33 178534.00 57425.00C178480.33 57425.00 178426.67 57425.00 178373.00 57425.00C178373.00 57446.67 178373.00 57468.33 178373.00 57490.00C178341.00 57490.00 178309.00 57490.00 178277.00 57490.00C178255.33 57479.00 178233.67 57468.00 178212.00 57457.00C178190.67 57468.00 178169.33 57479.00 178148.00 57490.00C178126.67 57511.34 178105.33 57532.66 178084.00 57554.00C178019.67 57554.00 177955.33 57554.00 177891.00 57554.00C177880.33 57575.33 177869.67 57596.67 177859.00 57618.00C177805.33 57618.00 177751.67 57618.00 177698.00 57618.00C177665.67 57607.33 177633.33 57596.67 177601.00 57586.00C177590.33 57575.34 177579.67 57564.66 177569.00 57554.00C177558.33 57554.00 177547.67 57554.00 177537.00 57554.00C177483.33 57586.00 177429.67 57618.00 177376.00 57650.00C177365.33 57660.66 177354.67 57671.34 177344.00 57682.00C177344.00 57703.67 177344.00 57725.33 177344.00 57747.00C177333.33 57747.00 177322.67 57747.00 177312.00 57747.00C177290.67 57768.34 177269.33 57789.66 177248.00 57811.00C177269.33 57821.67 177290.67 57832.33 177312.00 57843.00C177290.67 57853.67 177269.33 57864.33 177248.00 57875.00C177269.33 57896.67 177290.67 57918.33 177312.00 57940.00C177301.33 57950.66 177290.67 57961.34 177280.00 57972.00C177280.00 57993.33 177280.00 58014.67 177280.00 58036.00C177290.67 58057.67 177301.33 58079.33 177312.00 58101.00C177322.67 58101.00 177333.33 58101.00 177344.00 58101.00C177258.33 58101.00 177172.67 58101.00 177087.00 58101.00C177065.67 58133.00 177044.33 58165.00 177023.00 58197.00C177033.67 58207.66 177044.33 58218.34 177055.00 58229.00C177044.33 58229.00 177033.67 58229.00 177023.00 58229.00C177001.33 58239.67 176979.67 58250.33 176958.00 58261.00C176947.33 58282.67 176936.67 58304.33 176926.00 58326.00C176936.67 58336.66 176947.33 58347.34 176958.00 58358.00C176947.33 58379.33 176936.67 58400.67 176926.00 58422.00C176926.00 58432.67 176926.00 58443.33 176926.00 58454.00C176904.67 58464.67 176883.33 58475.33 176862.00 58486.00C176851.33 58496.66 176840.67 58507.34 176830.00 58518.00C176787.00 58496.67 176744.00 58475.33 176701.00 58454.00C176701.00 58497.00 176701.00 58540.00 176701.00 58583.00C176711.67 58593.66 176722.33 58604.34 176733.00 58615.00C176722.33 58625.66 176711.67 58636.34 176701.00 58647.00C176679.67 58647.00 176658.33 58647.00 176637.00 58647.00C176615.67 58668.34 176594.33 58689.66 176573.00 58711.00C176551.33 58722.00 176529.67 58733.00 176508.00 58744.00C176486.67 58744.00 176465.33 58744.00 176444.00 58744.00C176422.67 58722.33 176401.33 58700.67 176380.00 58679.00C176380.00 58668.33 176380.00 58657.67 176380.00 58647.00C176369.00 58657.67 176358.00 58668.33 176347.00 58679.00C176336.33 58700.67 176325.67 58722.33 176315.00 58744.00C176304.33 58754.66 176293.67 58765.34 176283.00 58776.00C176229.33 58776.00 176175.67 58776.00 176122.00 58776.00C176133.00 58786.67 176144.00 58797.33 176155.00 58808.00C176133.33 58829.33 176111.67 58850.67 176090.00 58872.00C176100.67 58904.33 176111.33 58936.67 176122.00 58969.00C176111.33 58969.00 176100.67 58969.00 176090.00 58969.00C176079.33 58979.66 176068.67 58990.34 176058.00 59001.00C176036.67 59001.00 176015.33 59001.00 175994.00 59001.00C176004.67 58979.67 176015.33 58958.33 176026.00 58937.00C176004.67 58926.00 175983.33 58915.00 175962.00 58904.00C175962.00 58882.67 175962.00 58861.33 175962.00 58840.00C175951.00 58840.00 175940.00 58840.00 175929.00 58840.00C175929.00 58861.33 175929.00 58882.67 175929.00 58904.00C175918.33 58904.00 175907.67 58904.00 175897.00 58904.00C175897.00 58915.00 175897.00 58926.00 175897.00 58937.00C175886.33 58937.00 175875.67 58937.00 175865.00 58937.00C175854.33 58947.66 175843.67 58958.34 175833.00 58969.00C175822.33 59001.00 175811.67 59033.00 175801.00 59065.00C175779.67 59075.67 175758.33 59086.33 175737.00 59097.00C175726.00 59118.67 175715.00 59140.33 175704.00 59162.00C175682.67 59183.34 175661.33 59204.66 175640.00 59226.00C175608.00 59226.00 175576.00 59226.00 175544.00 59226.00C175522.33 59183.00 175500.67 59140.00 175479.00 59097.00C175457.67 59107.67 175436.33 59118.33 175415.00 59129.00C175372.00 59129.00 175329.00 59129.00 175286.00 59129.00C175264.67 59107.66 175243.33 59086.34 175222.00 59065.00C175179.00 59065.00 175136.00 59065.00 175093.00 59065.00C175082.33 59054.34 175071.67 59043.66 175061.00 59033.00C175039.67 59043.67 175018.33 59054.33 174997.00 59065.00C174986.33 59065.00 174975.67 59065.00 174965.00 59065.00C174911.33 59097.33 174857.67 59129.67 174804.00 59162.00C174804.00 59129.67 174804.00 59097.33 174804.00 59065.00C174772.00 59065.00 174740.00 59065.00 174708.00 59065.00C174697.33 59043.67 174686.67 59022.33 174676.00 59001.00C174654.33 58979.67 174632.67 58958.33 174611.00 58937.00C174568.33 58937.00 174525.67 58937.00 174483.00 58937.00C174472.00 58926.00 174461.00 58915.00 174450.00 58904.00C174439.33 58904.00 174428.67 58904.00 174418.00 58904.00C174418.00 58882.67 174418.00 58861.33 174418.00 58840.00C174407.33 58829.34 174396.67 58818.66 174386.00 58808.00C174375.33 58786.67 174364.67 58765.33 174354.00 58744.00C174336.53 58725.97 174319.12 58707.87 174301.24 58690.24C174297.49 58686.49 174293.75 58682.75 174290.00 58679.00C174279.00 58679.00 174268.00 58679.00 174257.00 58679.00C174225.00 58689.67 174193.00 58700.33 174161.00 58711.00C174129.00 58689.67 174097.00 58668.33 174065.00 58647.00C174054.00 58636.33 174043.00 58625.67 174032.00 58615.00C174010.67 58615.00 173989.33 58615.00 173968.00 58615.00C173936.00 58625.67 173904.00 58636.33 173872.00 58647.00C173882.67 58615.00 173893.33 58583.00 173904.00 58551.00C173893.33 58529.33 173882.67 58507.67 173872.00 58486.00C173906.04 58434.95 173940.14 58383.94 173973.83 58332.65C173982.56 58319.43 173991.28 58306.22 174000.00 58293.00C173969.41 58308.71 173938.96 58324.71 173908.13 58339.93C173896.08 58345.96 173884.04 58351.98 173872.00 58358.00C173861.33 58358.00 173850.67 58358.00 173840.00 58358.00C173818.33 58379.33 173796.67 58400.67 173775.00 58422.00C173764.33 58411.34 173753.67 58400.66 173743.00 58390.00C173732.33 58390.00 173721.67 58390.00 173711.00 58390.00C173689.67 58379.33 173668.33 58368.67 173647.00 58358.00C173636.00 58358.00 173625.00 58358.00 173614.00 58358.00C173603.33 58368.66 173592.67 58379.34 173582.00 58390.00C173592.67 58400.66 173603.33 58411.34 173614.00 58422.00C173582.00 58422.00 173550.00 58422.00 173518.00 58422.00C173496.67 58411.33 173475.33 58400.67 173454.00 58390.00C173443.00 58357.67 173432.00 58325.33 173421.00 58293.00C173421.00 58271.67 173421.00 58250.33 173421.00 58229.00C173442.67 58207.67 173464.33 58186.33 173486.00 58165.00C173486.00 58132.67 173486.00 58100.33 173486.00 58068.00C173475.33 58068.00 173464.67 58068.00 173454.00 58068.00z"},"br-02":{"name":"Alagoas","path":"M175061.00 72955.00C175114.67 72901.67 175168.33 72848.33 175222.00 72795.00C175254.33 72784.00 175286.67 72773.00 175319.00 72762.00C175361.67 72719.34 175404.33 72676.66 175447.00 72634.00C175447.00 72601.67 175447.00 72569.33 175447.00 72537.00C175468.33 72494.33 175489.67 72451.67 175511.00 72409.00C175575.91 72344.12 175640.75 72279.17 175705.71 72214.34C175716.14 72204.23 175726.57 72194.12 175737.00 72184.00C175779.67 72184.00 175822.33 72184.00 175865.00 72184.00C175886.33 72173.00 175907.67 72162.00 175929.00 72151.00C175961.33 72151.00 175993.67 72151.00 176026.00 72151.00C176036.67 72129.67 176047.33 72108.33 176058.00 72087.00C176111.67 72087.00 176165.33 72087.00 176219.00 72087.00C176240.33 72076.33 176261.67 72065.67 176283.00 72055.00C176293.67 72023.00 176304.33 71991.00 176315.00 71959.00C176336.67 71937.34 176358.33 71915.66 176380.00 71894.00C176380.00 71883.33 176380.00 71872.67 176380.00 71862.00C176401.33 71840.66 176422.67 71819.34 176444.00 71798.00C176454.67 71776.67 176465.33 71755.33 176476.00 71734.00C176519.00 71691.00 176562.00 71648.00 176605.00 71605.00C176615.67 71583.67 176626.33 71562.33 176637.00 71541.00C176658.33 71530.00 176679.67 71519.00 176701.00 71508.00C176711.67 71519.00 176722.33 71530.00 176733.00 71541.00C176743.67 71508.67 176754.33 71476.33 176765.00 71444.00C176765.00 71433.33 176765.00 71422.67 176765.00 71412.00C176786.67 71401.33 176808.33 71390.67 176830.00 71380.00C176851.33 71358.33 176872.67 71336.67 176894.00 71315.00C176904.67 71293.67 176915.33 71272.33 176926.00 71251.00C176936.67 71240.34 176947.33 71229.66 176958.00 71219.00C176969.00 71154.67 176980.00 71090.33 176991.00 71026.00C176980.00 71015.33 176969.00 71004.67 176958.00 70994.00C176979.67 70972.67 177001.33 70951.33 177023.00 70930.00C177023.00 70908.33 177023.00 70886.67 177023.00 70865.00C177012.33 70854.34 177001.67 70843.66 176991.00 70833.00C177023.00 70811.67 177055.00 70790.33 177087.00 70769.00C177097.67 70769.00 177108.33 70769.00 177119.00 70769.00C177151.33 70736.66 177183.67 70704.34 177216.00 70672.00C177237.33 70672.00 177258.67 70672.00 177280.00 70672.00C177290.67 70661.34 177301.33 70650.66 177312.00 70640.00C177333.33 70661.67 177354.67 70683.33 177376.00 70705.00C177376.00 70726.33 177376.00 70747.67 177376.00 70769.00C177386.67 70779.66 177397.33 70790.34 177408.00 70801.00C177419.00 70801.00 177430.00 70801.00 177441.00 70801.00C177441.00 70811.67 177441.00 70822.33 177441.00 70833.00C177451.67 70843.66 177462.33 70854.34 177473.00 70865.00C177483.67 70886.66 177494.33 70908.34 177505.00 70930.00C177526.33 70951.34 177547.67 70972.66 177569.00 70994.00C177569.00 71004.67 177569.00 71015.33 177569.00 71026.00C177579.67 71047.33 177590.33 71068.67 177601.00 71090.00C177622.67 71101.00 177644.33 71112.00 177666.00 71123.00C177666.00 71155.00 177666.00 71187.00 177666.00 71219.00C177650.73 71234.21 177635.63 71249.60 177620.07 71264.51C177613.71 71270.68 177607.35 71276.84 177601.00 71283.00C177601.00 71293.67 177601.00 71304.33 177601.00 71315.00C177622.67 71304.33 177644.33 71293.67 177666.00 71283.00C177666.00 71304.67 177666.00 71326.33 177666.00 71348.00C177708.67 71326.33 177751.33 71304.67 177794.00 71283.00C177794.00 71293.67 177794.00 71304.33 177794.00 71315.00C177783.33 71326.00 177772.67 71337.00 177762.00 71348.00C177772.67 71358.66 177783.33 71369.34 177794.00 71380.00C177815.67 71390.67 177837.33 71401.33 177859.00 71412.00C177901.67 71412.00 177944.33 71412.00 177987.00 71412.00C177997.67 71401.34 178008.33 71390.66 178019.00 71380.00C178008.33 71369.34 177997.67 71358.66 177987.00 71348.00C177997.67 71326.34 178008.33 71304.66 178019.00 71283.00C178040.67 71261.67 178062.33 71240.33 178084.00 71219.00C178105.33 71208.33 178126.67 71197.67 178148.00 71187.00C178180.00 71197.67 178212.00 71208.33 178244.00 71219.00C178276.33 71187.00 178308.67 71155.00 178341.00 71123.00C178362.33 71133.67 178383.67 71144.33 178405.00 71155.00C178415.67 71155.00 178426.33 71155.00 178437.00 71155.00C178458.67 71165.67 178480.33 71176.33 178502.00 71187.00C178534.00 71187.00 178566.00 71187.00 178598.00 71187.00C178598.00 71229.67 178598.00 71272.33 178598.00 71315.00C178587.33 71326.00 178576.67 71337.00 178566.00 71348.00C178609.00 71390.67 178652.00 71433.33 178695.00 71476.00C178748.33 71476.00 178801.67 71476.00 178855.00 71476.00C178887.33 71497.67 178919.67 71519.33 178952.00 71541.00C178973.33 71562.34 178994.67 71583.66 179016.00 71605.00C179123.33 71648.00 179230.67 71691.00 179338.00 71734.00C179348.67 71755.33 179359.33 71776.67 179370.00 71798.00C179391.33 71798.00 179412.67 71798.00 179434.00 71798.00C179434.00 71819.33 179434.00 71840.67 179434.00 71862.00C179455.35 71883.37 179476.74 71904.71 179498.07 71926.10C179530.38 71969.06 179562.69 72012.03 179595.00 72055.00C179648.67 72108.66 179702.33 72162.34 179756.00 72216.00C179756.00 72237.33 179756.00 72258.67 179756.00 72280.00C179766.67 72301.33 179777.33 72322.67 179788.00 72344.00C179798.67 72344.00 179809.33 72344.00 179820.00 72344.00C179820.00 72397.67 179820.00 72451.33 179820.00 72505.00C179852.00 72473.00 179884.00 72441.00 179916.00 72409.00C179937.67 72398.33 179959.33 72387.67 179981.00 72377.00C180045.33 72419.67 180109.67 72462.33 180174.00 72505.00C180152.33 72526.66 180130.67 72548.34 180109.00 72570.00C180109.00 72602.00 180109.00 72634.00 180109.00 72666.00C180119.67 72676.66 180130.33 72687.34 180141.00 72698.00C180173.37 72676.65 180205.72 72655.27 180238.11 72633.95C180259.41 72623.30 180280.70 72612.65 180302.00 72602.00C180323.67 72569.67 180345.33 72537.33 180367.00 72505.00C180377.67 72505.00 180388.33 72505.00 180399.00 72505.00C180441.67 72526.67 180484.33 72548.33 180527.00 72570.00C180538.02 72580.70 180549.08 72591.37 180560.07 72602.10C180592.05 72644.73 180624.02 72687.37 180656.00 72730.00C180645.33 72762.33 180634.67 72794.67 180624.00 72827.00C180634.67 72848.33 180645.33 72869.67 180656.00 72891.00C180656.00 72869.67 180656.00 72848.33 180656.00 72827.00C180666.67 72848.33 180677.33 72869.67 180688.00 72891.00C180731.00 72891.00 180774.00 72891.00 180817.00 72891.00C180849.00 72944.67 180881.00 72998.33 180913.00 73052.00C180956.00 73073.33 180999.00 73094.67 181042.00 73116.00C181074.00 73148.33 181106.00 73180.67 181138.00 73213.00C181148.67 73213.00 181159.33 73213.00 181170.00 73213.00C181181.00 73202.00 181192.00 73191.00 181203.00 73180.00C181213.67 73180.00 181224.33 73180.00 181235.00 73180.00C181235.00 73169.33 181235.00 73158.67 181235.00 73148.00C181224.33 73137.34 181213.67 73126.66 181203.00 73116.00C181203.00 73094.67 181203.00 73073.33 181203.00 73052.00C181235.00 73030.33 181267.00 73008.67 181299.00 72987.00C181299.00 72976.33 181299.00 72965.67 181299.00 72955.00C181288.33 72944.34 181277.67 72933.66 181267.00 72923.00C181288.33 72880.33 181309.67 72837.67 181331.00 72795.00C181352.67 72773.34 181374.33 72751.66 181396.00 72730.00C181406.67 72730.00 181417.33 72730.00 181428.00 72730.00C181460.00 72719.33 181492.00 72708.67 181524.00 72698.00C181513.33 72698.00 181502.67 72698.00 181492.00 72698.00C181502.67 72687.34 181513.33 72676.66 181524.00 72666.00C181556.33 72666.00 181588.67 72666.00 181621.00 72666.00C181631.67 72676.66 181642.33 72687.34 181653.00 72698.00C181663.67 72719.33 181674.33 72740.67 181685.00 72762.00C181749.33 72762.00 181813.67 72762.00 181878.00 72762.00C181942.33 72730.00 182006.67 72698.00 182071.00 72666.00C182167.33 72676.67 182263.67 72687.33 182360.00 72698.00C182381.33 72708.67 182402.67 72719.33 182424.00 72730.00C182456.33 72773.00 182488.67 72816.00 182521.00 72859.00C182542.33 72869.67 182563.67 72880.33 182585.00 72891.00C182585.00 72880.33 182585.00 72869.67 182585.00 72859.00C182595.67 72869.66 182606.33 72880.34 182617.00 72891.00C182627.67 72891.00 182638.33 72891.00 182649.00 72891.00C182649.00 72901.67 182649.00 72912.33 182649.00 72923.00C182660.00 72933.67 182671.00 72944.33 182682.00 72955.00C182692.67 72944.34 182703.33 72933.66 182714.00 72923.00C182714.00 72933.67 182714.00 72944.33 182714.00 72955.00C182724.67 72944.34 182735.33 72933.66 182746.00 72923.00C182746.00 72933.67 182746.00 72944.33 182746.00 72955.00C182756.67 72955.00 182767.33 72955.00 182778.00 72955.00C182778.00 72976.67 182778.00 72998.33 182778.00 73020.00C182799.33 73009.00 182820.67 72998.00 182842.00 72987.00C182853.00 72987.00 182864.00 72987.00 182875.00 72987.00C182896.33 72976.33 182917.67 72965.67 182939.00 72955.00C182949.67 72955.00 182960.33 72955.00 182971.00 72955.00C182971.00 72933.67 182971.00 72912.33 182971.00 72891.00C182960.33 72891.00 182949.67 72891.00 182939.00 72891.00C182939.00 72848.00 182939.00 72805.00 182939.00 72762.00C183046.00 72730.00 183153.00 72698.00 183260.00 72666.00C183275.46 72650.94 183291.11 72636.07 183306.28 72620.71C183312.52 72614.48 183318.76 72608.24 183325.00 72602.00C183325.00 72591.33 183325.00 72580.67 183325.00 72570.00C183335.67 72548.34 183346.33 72526.66 183357.00 72505.00C183367.67 72505.00 183378.33 72505.00 183389.00 72505.00C183399.67 72515.66 183410.33 72526.34 183421.00 72537.00C183442.33 72515.66 183463.67 72494.34 183485.00 72473.00C183496.00 72473.00 183507.00 72473.00 183518.00 72473.00C183518.00 72462.33 183518.00 72451.67 183518.00 72441.00C183539.33 72430.33 183560.67 72419.67 183582.00 72409.00C183582.00 72398.33 183582.00 72387.67 183582.00 72377.00C183603.33 72377.00 183624.67 72377.00 183646.00 72377.00C183646.00 72398.33 183646.00 72419.67 183646.00 72441.00C183656.67 72451.66 183667.33 72462.34 183678.00 72473.00C183689.00 72451.67 183700.00 72430.33 183711.00 72409.00C183721.67 72419.66 183732.33 72430.34 183743.00 72441.00C183764.33 72441.00 183785.67 72441.00 183807.00 72441.00C183828.33 72430.33 183849.67 72419.67 183871.00 72409.00C183892.67 72419.67 183914.33 72430.33 183936.00 72441.00C183957.33 72419.66 183978.67 72398.34 184000.00 72377.00C183989.33 72366.00 183978.67 72355.00 183968.00 72344.00C183968.00 72333.33 183968.00 72322.67 183968.00 72312.00C183989.33 72322.67 184010.67 72333.33 184032.00 72344.00C184042.67 72344.00 184053.33 72344.00 184064.00 72344.00C184074.67 72333.34 184085.33 72322.66 184096.00 72312.00C184107.00 72290.67 184118.00 72269.33 184129.00 72248.00C184150.33 72226.66 184171.67 72205.34 184193.00 72184.00C184193.00 72194.67 184193.00 72205.33 184193.00 72216.00C184203.67 72205.34 184214.33 72194.66 184225.00 72184.00C184235.67 72194.66 184246.33 72205.34 184257.00 72216.00C184257.00 72205.33 184257.00 72194.67 184257.00 72184.00C184267.67 72184.00 184278.33 72184.00 184289.00 72184.00C184310.67 72173.00 184332.33 72162.00 184354.00 72151.00C184364.67 72162.00 184375.33 72173.00 184386.00 72184.00C184396.67 72184.00 184407.33 72184.00 184418.00 72184.00C184418.00 72194.67 184418.00 72205.33 184418.00 72216.00C184428.67 72216.00 184439.33 72216.00 184450.00 72216.00C184450.00 72205.33 184450.00 72194.67 184450.00 72184.00C184460.67 72194.66 184471.33 72205.34 184482.00 72216.00C184514.33 72205.33 184546.67 72194.67 184579.00 72184.00C184579.00 72173.00 184579.00 72162.00 184579.00 72151.00C184557.33 72140.33 184535.67 72129.67 184514.00 72119.00C184514.00 72097.67 184514.00 72076.33 184514.00 72055.00C184503.33 72044.34 184492.67 72033.66 184482.00 72023.00C184460.67 72023.00 184439.33 72023.00 184418.00 72023.00C184418.00 71990.67 184418.00 71958.33 184418.00 71926.00C184407.33 71915.34 184396.67 71904.66 184386.00 71894.00C184386.00 71872.67 184386.00 71851.33 184386.00 71830.00C184439.67 71830.00 184493.33 71830.00 184547.00 71830.00C184568.33 71808.66 184589.67 71787.34 184611.00 71766.00C184611.00 71744.33 184611.00 71722.67 184611.00 71701.00C184621.67 71701.00 184632.33 71701.00 184643.00 71701.00C184653.67 71690.34 184664.33 71679.66 184675.00 71669.00C184685.67 71637.00 184696.33 71605.00 184707.00 71573.00C184728.67 71573.00 184750.33 71573.00 184772.00 71573.00C184782.67 71562.34 184793.33 71551.66 184804.00 71541.00C184868.33 71541.00 184932.67 71541.00 184997.00 71541.00C184997.00 71530.00 184997.00 71519.00 184997.00 71508.00C185018.33 71497.33 185039.67 71486.67 185061.00 71476.00C185082.33 71454.66 185103.67 71433.34 185125.00 71412.00C185125.00 71401.33 185125.00 71390.67 185125.00 71380.00C185135.67 71369.34 185146.33 71358.66 185157.00 71348.00C185146.33 71326.34 185135.67 71304.66 185125.00 71283.00C185103.67 71272.33 185082.33 71261.67 185061.00 71251.00C185050.33 71229.67 185039.67 71208.33 185029.00 71187.00C185039.67 71165.67 185050.33 71144.33 185061.00 71123.00C185125.33 71101.33 185189.67 71079.67 185254.00 71058.00C185286.00 71015.33 185318.00 70972.67 185350.00 70930.00C185403.67 70919.33 185457.33 70908.67 185511.00 70898.00C185554.00 70908.67 185597.00 70919.33 185640.00 70930.00C185661.33 70908.33 185682.67 70886.67 185704.00 70865.00C185747.00 70865.00 185790.00 70865.00 185833.00 70865.00C185833.00 70854.33 185833.00 70843.67 185833.00 70833.00C185854.33 70822.33 185875.67 70811.67 185897.00 70801.00C185907.67 70790.34 185918.33 70779.66 185929.00 70769.00C185961.33 70769.00 185993.67 70769.00 186026.00 70769.00C186036.67 70747.67 186047.33 70726.33 186058.00 70705.00C186058.00 70694.00 186058.00 70683.00 186058.00 70672.00C186079.33 70672.00 186100.67 70672.00 186122.00 70672.00C186132.67 70661.34 186143.33 70650.66 186154.00 70640.00C186164.67 70650.66 186175.33 70661.34 186186.00 70672.00C186229.00 70661.33 186272.00 70650.67 186315.00 70640.00C186336.33 70661.67 186357.67 70683.33 186379.00 70705.00C186411.33 70705.00 186443.67 70705.00 186476.00 70705.00C186486.67 70683.34 186497.33 70661.66 186508.00 70640.00C186529.33 70650.67 186550.67 70661.33 186572.00 70672.00C186593.33 70650.66 186614.67 70629.34 186636.00 70608.00C186647.00 70608.00 186658.00 70608.00 186669.00 70608.00C186679.67 70629.33 186690.33 70650.67 186701.00 70672.00C186701.00 70661.33 186701.00 70650.67 186701.00 70640.00C186701.00 70661.67 186701.00 70683.33 186701.00 70705.00C186690.33 70726.33 186679.67 70747.67 186669.00 70769.00C186679.67 70779.66 186690.33 70790.34 186701.00 70801.00C186690.33 70811.66 186679.67 70822.34 186669.00 70833.00C186679.67 70833.00 186690.33 70833.00 186701.00 70833.00C186711.67 70843.66 186722.33 70854.34 186733.00 70865.00C186755.25 70876.43 186777.44 70887.99 186799.73 70899.35C186820.49 70909.56 186841.24 70919.78 186862.00 70930.00C186883.33 70919.33 186904.67 70908.67 186926.00 70898.00C186947.33 70898.00 186968.67 70898.00 186990.00 70898.00C187000.67 70887.00 187011.33 70876.00 187022.00 70865.00C187043.67 70876.00 187065.33 70887.00 187087.00 70898.00C187097.67 70876.34 187108.33 70854.66 187119.00 70833.00C187151.00 70833.00 187183.00 70833.00 187215.00 70833.00C187236.67 70811.67 187258.33 70790.33 187280.00 70769.00C187312.00 70769.00 187344.00 70769.00 187376.00 70769.00C187393.21 70751.79 187410.46 70734.62 187427.47 70717.22C187442.31 70702.15 187457.16 70687.07 187472.00 70672.00C187504.33 70672.00 187536.67 70672.00 187569.00 70672.00C187579.67 70650.67 187590.33 70629.33 187601.00 70608.00C187611.67 70597.34 187622.33 70586.66 187633.00 70576.00C187654.67 70576.00 187676.33 70576.00 187698.00 70576.00C187708.67 70554.67 187719.33 70533.33 187730.00 70512.00C187751.33 70512.00 187772.67 70512.00 187794.00 70512.00C187809.21 70496.37 187824.25 70480.57 187839.76 70465.24C187845.84 70459.16 187851.92 70453.08 187858.00 70447.00C187858.00 70468.67 187858.00 70490.33 187858.00 70512.00C187879.67 70490.34 187901.33 70468.66 187923.00 70447.00C187944.33 70447.00 187965.67 70447.00 187987.00 70447.00C187987.00 70457.67 187987.00 70468.33 187987.00 70479.00C187997.67 70468.34 188008.33 70457.66 188019.00 70447.00C188019.00 70457.67 188019.00 70468.33 188019.00 70479.00C188029.67 70490.00 188040.33 70501.00 188051.00 70512.00C188051.00 70501.00 188051.00 70490.00 188051.00 70479.00C188072.67 70479.00 188094.33 70479.00 188116.00 70479.00C188116.00 70468.33 188116.00 70457.67 188116.00 70447.00C188148.00 70447.00 188180.00 70447.00 188212.00 70447.00C188201.33 70468.66 188190.67 70490.34 188180.00 70512.00C188190.67 70512.00 188201.33 70512.00 188212.00 70512.00C188212.00 70522.67 188212.00 70533.33 188212.00 70544.00C188222.67 70554.66 188233.33 70565.34 188244.00 70576.00C188276.33 70576.00 188308.67 70576.00 188341.00 70576.00C188341.00 70565.33 188341.00 70554.67 188341.00 70544.00C188383.67 70544.00 188426.33 70544.00 188469.00 70544.00C188479.67 70565.33 188490.33 70586.67 188501.00 70608.00C188576.08 70629.35 188651.16 70650.72 188726.24 70672.06C188812.16 70693.70 188898.08 70715.35 188984.00 70737.00C189016.00 70737.00 189048.00 70737.00 189080.00 70737.00C189123.00 70758.33 189166.00 70779.67 189209.00 70801.00C189230.33 70790.33 189251.67 70779.67 189273.00 70769.00C189294.33 70779.67 189315.67 70790.33 189337.00 70801.00C189412.00 70801.00 189487.00 70801.00 189562.00 70801.00C189594.33 70822.34 189626.67 70843.66 189659.00 70865.00C189659.00 70897.33 189659.00 70929.67 189659.00 70962.00C189637.67 70983.34 189616.33 71004.66 189595.00 71026.00C189582.70 71062.29 189570.23 71098.54 189558.05 71134.87C189548.70 71162.91 189539.35 71190.96 189530.00 71219.00C189510.06 71238.91 189490.15 71258.84 189470.38 71278.91C189447.58 71301.94 189424.79 71324.97 189402.00 71348.00C189380.33 71380.00 189358.67 71412.00 189337.00 71444.00C189326.33 71454.66 189315.67 71465.34 189305.00 71476.00C189294.33 71508.33 189283.67 71540.67 189273.00 71573.00C189273.00 71594.33 189273.00 71615.67 189273.00 71637.00C189262.33 71647.66 189251.67 71658.34 189241.00 71669.00C189251.67 71669.00 189262.33 71669.00 189273.00 71669.00C189255.79 71686.21 189238.54 71703.38 189221.53 71720.78C189206.69 71735.85 189191.84 71750.93 189177.00 71766.00C189177.00 71787.33 189177.00 71808.67 189177.00 71830.00C189155.33 71851.33 189133.67 71872.67 189112.00 71894.00C189112.00 71904.67 189112.00 71915.33 189112.00 71926.00C189090.67 71937.00 189069.33 71948.00 189048.00 71959.00C189048.00 71991.00 189048.00 72023.00 189048.00 72055.00C189037.33 72065.66 189026.67 72076.34 189016.00 72087.00C189005.33 72087.00 188994.67 72087.00 188984.00 72087.00C188984.00 72130.00 188984.00 72173.00 188984.00 72216.00C188973.33 72237.33 188962.67 72258.67 188952.00 72280.00C188930.33 72290.67 188908.67 72301.33 188887.00 72312.00C188876.33 72322.66 188865.67 72333.34 188855.00 72344.00C188855.00 72355.00 188855.00 72366.00 188855.00 72377.00C188844.33 72398.33 188833.67 72419.67 188823.00 72441.00C188801.67 72451.67 188780.33 72462.33 188759.00 72473.00C188759.00 72483.67 188759.00 72494.33 188759.00 72505.00C188748.00 72537.33 188737.00 72569.67 188726.00 72602.00C188694.00 72634.00 188662.00 72666.00 188630.00 72698.00C188608.67 72708.67 188587.33 72719.33 188566.00 72730.00C188544.33 72762.33 188522.67 72794.67 188501.00 72827.00C188479.67 72837.67 188458.33 72848.33 188437.00 72859.00C188426.33 72869.66 188415.67 72880.34 188405.00 72891.00C188415.67 72891.00 188426.33 72891.00 188437.00 72891.00C188405.00 72901.67 188373.00 72912.33 188341.00 72923.00C188330.00 72933.67 188319.00 72944.33 188308.00 72955.00C188308.00 72965.67 188308.00 72976.33 188308.00 72987.00C188276.00 72998.00 188244.00 73009.00 188212.00 73020.00C188192.09 73039.94 188172.16 73059.85 188152.10 73079.62C188129.06 73102.41 188106.03 73125.21 188083.00 73148.00C188072.33 73169.66 188061.67 73191.34 188051.00 73213.00C188040.33 73266.33 188029.67 73319.67 188019.00 73373.00C187997.67 73416.00 187976.33 73459.00 187955.00 73502.00C187933.33 73502.00 187911.67 73502.00 187890.00 73502.00C187890.00 73523.33 187890.00 73544.67 187890.00 73566.00C187879.33 73566.00 187868.67 73566.00 187858.00 73566.00C187826.00 73598.33 187794.00 73630.67 187762.00 73663.00C187751.33 73684.33 187740.67 73705.67 187730.00 73727.00C187687.00 73759.00 187644.00 73791.00 187601.00 73823.00C187601.00 73855.33 187601.00 73887.67 187601.00 73920.00C187579.67 73920.00 187558.33 73920.00 187537.00 73920.00C187515.33 73941.33 187493.67 73962.67 187472.00 73984.00C187472.00 73994.67 187472.00 74005.33 187472.00 74016.00C187450.67 74027.00 187429.33 74038.00 187408.00 74049.00C187386.67 74070.34 187365.33 74091.66 187344.00 74113.00C187333.33 74113.00 187322.67 74113.00 187312.00 74113.00C187290.33 74145.00 187268.67 74177.00 187247.00 74209.00C187225.67 74230.67 187204.33 74252.33 187183.00 74274.00C187172.31 74295.37 187161.65 74316.75 187150.93 74338.10C187129.61 74370.06 187108.31 74402.03 187087.00 74434.00C187087.00 74487.67 187087.00 74541.33 187087.00 74595.00C187065.33 74595.00 187043.67 74595.00 187022.00 74595.00C187000.67 74627.34 186979.33 74659.66 186958.00 74692.00C186947.33 74681.00 186936.67 74670.00 186926.00 74659.00C186936.67 74659.00 186947.33 74659.00 186958.00 74659.00C186958.00 74648.33 186958.00 74637.67 186958.00 74627.00C186947.33 74627.00 186936.67 74627.00 186926.00 74627.00C186883.00 74637.67 186840.00 74648.33 186797.00 74659.00C186754.33 74712.66 186711.67 74766.34 186669.00 74820.00C186658.00 74820.00 186647.00 74820.00 186636.00 74820.00C186604.00 74852.33 186572.00 74884.67 186540.00 74917.00C186529.33 74938.33 186518.67 74959.67 186508.00 74981.00C186518.67 74970.34 186529.33 74959.66 186540.00 74949.00C186475.67 75024.00 186411.33 75099.00 186347.00 75174.00C186314.89 75227.82 186282.84 75281.69 186250.68 75335.48C186229.11 75367.32 186207.56 75399.16 186186.00 75431.00C186164.67 75484.67 186143.33 75538.33 186122.00 75592.00C186057.67 75645.67 185993.33 75699.33 185929.00 75753.00C185897.00 75817.33 185865.00 75881.67 185833.00 75946.00C185810.39 75979.45 185787.68 76012.82 185765.14 76046.31C185723.41 76109.24 185681.66 76172.16 185639.94 76235.10C185596.96 76310.07 185553.98 76385.04 185511.00 76460.00C185489.67 76481.34 185468.33 76502.66 185447.00 76524.00C185447.00 76545.67 185447.00 76567.33 185447.00 76589.00C185425.67 76610.34 185404.33 76631.66 185383.00 76653.00C185361.33 76642.33 185339.67 76631.67 185318.00 76621.00C185296.64 76642.37 185275.26 76663.71 185253.92 76685.10C185210.95 76738.73 185167.97 76792.36 185125.00 76846.00C185114.33 76867.33 185103.67 76888.67 185093.00 76910.00C185071.67 76931.34 185050.33 76952.66 185029.00 76974.00C185029.00 76985.00 185029.00 76996.00 185029.00 77007.00C185007.67 76996.00 184986.33 76985.00 184965.00 76974.00C184943.33 76985.00 184921.67 76996.00 184900.00 77007.00C184878.67 77028.34 184857.33 77049.66 184836.00 77071.00C184814.67 77114.00 184793.33 77157.00 184772.00 77200.00C184729.00 77221.33 184686.00 77242.67 184643.00 77264.00C184600.00 77317.67 184557.00 77371.33 184514.00 77425.00C184460.67 77467.67 184407.33 77510.33 184354.00 77553.00C184321.67 77596.00 184289.33 77639.00 184257.00 77682.00C184246.33 77703.33 184235.67 77724.67 184225.00 77746.00C184225.00 77799.67 184225.00 77853.33 184225.00 77907.00C184235.67 77917.66 184246.33 77928.34 184257.00 77939.00C184257.00 77949.67 184257.00 77960.33 184257.00 77971.00C184246.33 77981.66 184235.67 77992.34 184225.00 78003.00C184214.33 78003.00 184203.67 78003.00 184193.00 78003.00C184150.00 78067.33 184107.00 78131.67 184064.00 78196.00C183999.67 78335.34 183935.33 78474.66 183871.00 78614.00C183855.95 78629.11 183840.72 78644.04 183825.96 78659.44C183819.64 78665.96 183813.32 78672.48 183807.00 78679.00C183796.33 78668.00 183785.67 78657.00 183775.00 78646.00C183732.90 78561.65 183690.44 78477.49 183648.13 78393.25C183646.57 78390.48 183645.40 78387.54 183644.50 78384.50C183634.33 78354.00 183624.17 78323.50 183614.00 78293.00C183603.33 78293.00 183592.67 78293.00 183582.00 78293.00C183549.67 78271.33 183517.33 78249.67 183485.00 78228.00C183474.33 78217.34 183463.67 78206.66 183453.00 78196.00C183421.00 78217.67 183389.00 78239.33 183357.00 78261.00C183357.00 78271.67 183357.00 78282.33 183357.00 78293.00C183346.33 78293.00 183335.67 78293.00 183325.00 78293.00C183292.67 78303.67 183260.33 78314.33 183228.00 78325.00C183217.33 78325.00 183206.67 78325.00 183196.00 78325.00C183196.00 78314.33 183196.00 78303.67 183196.00 78293.00C183206.67 78293.00 183217.33 78293.00 183228.00 78293.00C183185.33 78293.00 183142.67 78293.00 183100.00 78293.00C183089.33 78303.66 183078.67 78314.34 183068.00 78325.00C183035.67 78303.66 183003.33 78282.34 182971.00 78261.00C182981.67 78218.00 182992.33 78175.00 183003.00 78132.00C182992.33 78089.00 182981.67 78046.00 182971.00 78003.00C182971.00 77949.67 182971.00 77896.33 182971.00 77843.00C182960.31 77821.30 182949.65 77799.58 182938.93 77777.90C182917.60 77745.90 182896.25 77713.91 182874.94 77681.89C182863.96 77660.59 182852.98 77639.30 182842.00 77618.00C182810.00 77596.33 182778.00 77574.67 182746.00 77553.00C182746.00 77542.33 182746.00 77531.67 182746.00 77521.00C182724.67 77499.66 182703.33 77478.34 182682.00 77457.00C182660.33 77457.00 182638.67 77457.00 182617.00 77457.00C182595.67 77478.34 182574.33 77499.66 182553.00 77521.00C182521.00 77521.00 182489.00 77521.00 182457.00 77521.00C182446.00 77531.67 182435.00 77542.33 182424.00 77553.00C182392.00 77553.00 182360.00 77553.00 182328.00 77553.00C182306.67 77542.33 182285.33 77531.67 182264.00 77521.00C182253.33 77521.00 182242.67 77521.00 182232.00 77521.00C182210.33 77499.67 182188.67 77478.33 182167.00 77457.00C182145.67 77446.33 182124.33 77435.67 182103.00 77425.00C182092.33 77425.00 182081.67 77425.00 182071.00 77425.00C182081.67 77414.00 182092.33 77403.00 182103.00 77392.00C182103.00 77381.33 182103.00 77370.67 182103.00 77360.00C182070.67 77349.33 182038.33 77338.67 182006.00 77328.00C181995.29 77327.98 181984.59 77328.03 181973.88 77327.98C181920.25 77317.32 181866.63 77306.66 181813.00 77296.00C181802.29 77285.32 181791.63 77274.59 181780.90 77263.93C181748.93 77242.63 181716.97 77221.31 181685.00 77200.00C181674.33 77189.00 181663.67 77178.00 181653.00 77167.00C181653.00 77135.00 181653.00 77103.00 181653.00 77071.00C181642.33 77049.67 181631.67 77028.33 181621.00 77007.00C181599.33 77007.00 181577.67 77007.00 181556.00 77007.00C181534.67 76985.33 181513.33 76963.67 181492.00 76942.00C181438.33 76931.33 181384.67 76920.67 181331.00 76910.00C181320.31 76888.63 181309.65 76867.25 181298.93 76845.90C181277.61 76813.60 181256.31 76781.30 181235.00 76749.00C181213.33 76727.67 181191.67 76706.33 181170.00 76685.00C181159.33 76653.00 181148.67 76621.00 181138.00 76589.00C181138.00 76567.33 181138.00 76545.67 181138.00 76524.00C181127.33 76513.34 181116.67 76502.66 181106.00 76492.00C181106.00 76417.00 181106.00 76342.00 181106.00 76267.00C181095.33 76245.67 181084.67 76224.33 181074.00 76203.00C181074.00 76192.33 181074.00 76181.67 181074.00 76171.00C181031.00 76149.33 180988.00 76127.67 180945.00 76106.00C180923.67 76106.00 180902.33 76106.00 180881.00 76106.00C180849.00 76127.67 180817.00 76149.33 180785.00 76171.00C180752.67 76171.00 180720.33 76171.00 180688.00 76171.00C180645.30 76127.98 180602.62 76084.93 180559.91 76041.92C180473.94 75966.94 180387.97 75891.97 180302.00 75817.00C180270.00 75795.67 180238.00 75774.33 180206.00 75753.00C180131.00 75742.33 180056.00 75731.67 179981.00 75721.00C179916.67 75721.00 179852.33 75721.00 179788.00 75721.00C179777.33 75710.00 179766.67 75699.00 179756.00 75688.00C179756.00 75677.33 179756.00 75666.67 179756.00 75656.00C179745.31 75634.63 179734.65 75613.25 179723.93 75591.90C179702.28 75559.60 179680.64 75527.30 179659.00 75495.00C179627.00 75463.00 179595.00 75431.00 179563.00 75399.00C179541.29 75388.33 179519.60 75377.61 179497.88 75366.96C179465.92 75356.31 179433.96 75345.65 179402.00 75335.00C179359.00 75302.67 179316.00 75270.33 179273.00 75238.00C179251.67 75216.66 179230.33 75195.34 179209.00 75174.00C179187.67 75174.00 179166.33 75174.00 179145.00 75174.00C179112.67 75163.33 179080.33 75152.67 179048.00 75142.00C179005.33 75120.33 178962.67 75098.67 178920.00 75077.00C178909.33 75066.34 178898.67 75055.66 178888.00 75045.00C178695.00 75013.00 178502.00 74981.00 178309.00 74949.00C178276.67 74949.00 178244.33 74949.00 178212.00 74949.00C178190.63 74938.31 178169.25 74927.65 178147.90 74916.93C178029.93 74841.96 177911.97 74766.98 177794.00 74692.00C177794.00 74681.00 177794.00 74670.00 177794.00 74659.00C177772.67 74616.33 177751.33 74573.67 177730.00 74531.00C177691.61 74511.83 177653.23 74492.63 177614.93 74473.26C177588.95 74460.18 177562.98 74447.09 177537.00 74434.00C177483.33 74423.33 177429.67 74412.67 177376.00 74402.00C177365.33 74402.00 177354.67 74402.00 177344.00 74402.00C177301.33 74423.67 177258.67 74445.33 177216.00 74467.00C177205.00 74467.00 177194.00 74467.00 177183.00 74467.00C177172.33 74434.67 177161.67 74402.33 177151.00 74370.00C177129.67 74348.66 177108.33 74327.34 177087.00 74306.00C177076.33 74284.34 177065.67 74262.66 177055.00 74241.00C177022.67 74241.00 176990.33 74241.00 176958.00 74241.00C176958.00 74219.67 176958.00 74198.33 176958.00 74177.00C176947.33 74177.00 176936.67 74177.00 176926.00 74177.00C176861.67 74123.33 176797.33 74069.67 176733.00 74016.00C176722.33 74005.34 176711.67 73994.66 176701.00 73984.00C176690.33 73984.00 176679.67 73984.00 176669.00 73984.00C176637.00 73994.67 176605.00 74005.33 176573.00 74016.00C176508.67 73994.67 176444.33 73973.33 176380.00 73952.00C176326.33 73941.33 176272.67 73930.67 176219.00 73920.00C176197.67 73898.66 176176.33 73877.34 176155.00 73856.00C176165.67 73823.67 176176.33 73791.33 176187.00 73759.00C176163.23 73735.54 176139.35 73712.20 176115.66 73688.66C176096.44 73669.44 176077.22 73650.22 176058.00 73631.00C176026.00 73631.00 175994.00 73631.00 175962.00 73631.00C175940.33 73609.34 175918.67 73587.66 175897.00 73566.00C175886.33 73566.00 175875.67 73566.00 175865.00 73566.00C175854.33 73555.34 175843.67 73544.66 175833.00 73534.00C175833.00 73523.33 175833.00 73512.67 175833.00 73502.00C175822.33 73502.00 175811.67 73502.00 175801.00 73502.00C175758.00 73491.33 175715.00 73480.67 175672.00 73470.00C175661.33 73470.00 175650.67 73470.00 175640.00 73470.00C175629.33 73480.66 175618.67 73491.34 175608.00 73502.00C175575.67 73491.33 175543.33 73480.67 175511.00 73470.00C175489.67 73480.67 175468.33 73491.33 175447.00 73502.00C175415.00 73469.67 175383.00 73437.33 175351.00 73405.00C175318.67 73405.00 175286.33 73405.00 175254.00 73405.00C175243.33 73394.34 175232.67 73383.66 175222.00 73373.00C175222.00 73351.67 175222.00 73330.33 175222.00 73309.00C175232.67 73298.34 175243.33 73287.66 175254.00 73277.00C175254.00 73255.67 175254.00 73234.33 175254.00 73213.00C175243.33 73202.00 175232.67 73191.00 175222.00 73180.00C175211.33 73148.00 175200.67 73116.00 175190.00 73084.00C175147.00 73041.00 175104.00 72998.00 175061.00 72955.00z"},"br-26":{"name":"Sergipe","path":"M175061.00 80093.00C175071.67 80093.00 175082.33 80093.00 175093.00 80093.00C175104.00 80071.67 175115.00 80050.33 175126.00 80029.00C175136.67 79997.00 175147.33 79965.00 175158.00 79933.00C175158.00 79868.67 175158.00 79804.33 175158.00 79740.00C175168.67 79718.34 175179.33 79696.66 175190.00 79675.00C175200.67 79675.00 175211.33 79675.00 175222.00 79675.00C175254.33 79664.33 175286.67 79653.67 175319.00 79643.00C175329.67 79664.33 175340.33 79685.67 175351.00 79707.00C175383.00 79707.00 175415.00 79707.00 175447.00 79707.00C175468.33 79718.00 175489.67 79729.00 175511.00 79740.00C175532.67 79740.00 175554.33 79740.00 175576.00 79740.00C175586.67 79718.34 175597.33 79696.66 175608.00 79675.00C175629.33 79685.67 175650.67 79696.33 175672.00 79707.00C175693.67 79685.67 175715.33 79664.33 175737.00 79643.00C175758.33 79664.34 175779.67 79685.66 175801.00 79707.00C175833.00 79696.33 175865.00 79685.67 175897.00 79675.00C175907.67 79675.00 175918.33 79675.00 175929.00 79675.00C175940.00 79696.67 175951.00 79718.33 175962.00 79740.00C175972.67 79740.00 175983.33 79740.00 175994.00 79740.00C176015.33 79761.34 176036.67 79782.66 176058.00 79804.00C176058.00 79857.67 176058.00 79911.33 176058.00 79965.00C176101.00 79965.00 176144.00 79965.00 176187.00 79965.00C176229.70 79943.32 176272.39 79921.63 176315.09 79899.96C176369.85 79878.22 176424.57 79856.40 176479.35 79834.70C176671.23 79760.13 176863.12 79685.57 177055.00 79611.00C177033.67 79428.67 177012.33 79246.33 176991.00 79064.00C176991.00 79053.33 176991.00 79042.67 176991.00 79032.00C176980.00 79021.33 176969.00 79010.67 176958.00 79000.00C176958.00 78989.33 176958.00 78978.67 176958.00 78968.00C176947.33 78957.34 176936.67 78946.66 176926.00 78936.00C176926.00 78925.33 176926.00 78914.67 176926.00 78904.00C176947.67 78904.00 176969.33 78904.00 176991.00 78904.00C176991.00 78893.00 176991.00 78882.00 176991.00 78871.00C177001.67 78860.34 177012.33 78849.66 177023.00 78839.00C177023.00 78849.67 177023.00 78860.33 177023.00 78871.00C177023.00 78849.67 177023.00 78828.33 177023.00 78807.00C177033.67 78785.67 177044.33 78764.33 177055.00 78743.00C177055.00 78721.67 177055.00 78700.33 177055.00 78679.00C177044.33 78646.67 177033.67 78614.33 177023.00 78582.00C176969.33 78485.67 176915.67 78389.33 176862.00 78293.00C176872.67 78282.34 176883.33 78271.66 176894.00 78261.00C176883.33 78239.34 176872.67 78217.66 176862.00 78196.00C176894.00 78185.33 176926.00 78174.67 176958.00 78164.00C176947.33 78164.00 176936.67 78164.00 176926.00 78164.00C176926.00 78153.33 176926.00 78142.67 176926.00 78132.00C176936.67 78121.34 176947.33 78110.66 176958.00 78100.00C176958.00 78089.33 176958.00 78078.67 176958.00 78068.00C176979.67 78068.00 177001.33 78068.00 177023.00 78068.00C177023.00 78057.33 177023.00 78046.67 177023.00 78036.00C177033.67 78025.00 177044.33 78014.00 177055.00 78003.00C177065.67 78003.00 177076.33 78003.00 177087.00 78003.00C177119.00 77981.67 177151.00 77960.33 177183.00 77939.00C177194.00 77928.33 177205.00 77917.67 177216.00 77907.00C177248.00 77907.00 177280.00 77907.00 177312.00 77907.00C177355.00 77885.67 177398.00 77864.33 177441.00 77843.00C177430.00 77832.00 177419.00 77821.00 177408.00 77810.00C177407.99 77799.30 177408.03 77788.60 177407.98 77777.90C177365.32 77574.27 177322.66 77370.63 177280.00 77167.00C177258.67 77156.33 177237.33 77145.67 177216.00 77135.00C177216.01 77124.30 177215.97 77113.60 177216.02 77102.90C177226.68 77049.27 177237.34 76995.63 177248.00 76942.00C177248.00 76920.67 177248.00 76899.33 177248.00 76878.00C177215.67 76835.00 177183.33 76792.00 177151.00 76749.00C177108.33 76663.34 177065.67 76577.66 177023.00 76492.00C177023.00 76427.67 177023.00 76363.33 177023.00 76299.00C177012.33 76277.67 177001.67 76256.33 176991.00 76235.00C176915.67 76192.00 176840.33 76149.00 176765.00 76106.00C176754.33 76116.66 176743.67 76127.34 176733.00 76138.00C176701.00 76127.33 176669.00 76116.67 176637.00 76106.00C176604.67 76106.00 176572.33 76106.00 176540.00 76106.00C176540.00 76084.67 176540.00 76063.33 176540.00 76042.00C176518.67 76042.00 176497.33 76042.00 176476.00 76042.00C176454.67 76052.67 176433.33 76063.33 176412.00 76074.00C176401.33 76074.00 176390.67 76074.00 176380.00 76074.00C176369.00 76063.33 176358.00 76052.67 176347.00 76042.00C176315.00 75977.67 176283.00 75913.33 176251.00 75849.00C176229.67 75838.33 176208.33 75827.67 176187.00 75817.00C176187.00 75806.33 176187.00 75795.67 176187.00 75785.00C176208.33 75752.66 176229.67 75720.34 176251.00 75688.00C176251.00 75656.00 176251.00 75624.00 176251.00 75592.00C176272.33 75570.66 176293.67 75549.34 176315.00 75528.00C176315.00 75517.00 176315.00 75506.00 176315.00 75495.00C176304.33 75484.34 176293.67 75473.66 176283.00 75463.00C176304.33 75420.33 176325.67 75377.67 176347.00 75335.00C176336.33 75324.34 176325.67 75313.66 176315.00 75303.00C176304.33 75303.00 176293.67 75303.00 176283.00 75303.00C176251.00 75292.00 176219.00 75281.00 176187.00 75270.00C176154.67 75238.00 176122.33 75206.00 176090.00 75174.00C176090.00 75163.33 176090.00 75152.67 176090.00 75142.00C176079.33 75142.00 176068.67 75142.00 176058.00 75142.00C176036.67 75099.00 176015.33 75056.00 175994.00 75013.00C175994.00 74906.00 175994.00 74799.00 175994.00 74692.00C176015.33 74681.00 176036.67 74670.00 176058.00 74659.00C176068.67 74637.67 176079.33 74616.33 176090.00 74595.00C176111.67 74573.67 176133.33 74552.33 176155.00 74531.00C176176.33 74531.00 176197.67 74531.00 176219.00 74531.00C176229.67 74520.34 176240.33 74509.66 176251.00 74499.00C176240.33 74488.34 176229.67 74477.66 176219.00 74467.00C176197.67 74456.00 176176.33 74445.00 176155.00 74434.00C176142.76 74422.07 176130.40 74410.27 176118.25 74398.25C176108.83 74388.84 176099.42 74379.42 176090.00 74370.00C176068.67 74359.33 176047.33 74348.67 176026.00 74338.00C176015.33 74316.67 176004.67 74295.33 175994.00 74274.00C175994.00 74231.00 175994.00 74188.00 175994.00 74145.00C176004.67 74134.34 176015.33 74123.66 176026.00 74113.00C176036.67 74123.66 176047.33 74134.34 176058.00 74145.00C176058.00 74134.33 176058.00 74123.67 176058.00 74113.00C176068.67 74102.34 176079.33 74091.66 176090.00 74081.00C176090.00 74070.33 176090.00 74059.67 176090.00 74049.00C176079.33 74038.00 176068.67 74027.00 176058.00 74016.00C176079.33 73994.66 176100.67 73973.34 176122.00 73952.00C176122.00 73941.33 176122.00 73930.67 176122.00 73920.00C176133.00 73898.67 176144.00 73877.33 176155.00 73856.00C176176.33 73877.34 176197.67 73898.66 176219.00 73920.00C176272.67 73930.67 176326.33 73941.33 176380.00 73952.00C176444.33 73973.33 176508.67 73994.67 176573.00 74016.00C176605.00 74005.33 176637.00 73994.67 176669.00 73984.00C176679.67 73984.00 176690.33 73984.00 176701.00 73984.00C176711.72 73994.70 176722.41 74005.44 176733.15 74016.12C176797.43 74069.75 176861.72 74123.37 176926.00 74177.00C176936.67 74177.00 176947.33 74177.00 176958.00 74177.00C176958.00 74198.33 176958.00 74219.67 176958.00 74241.00C176990.33 74241.00 177022.67 74241.00 177055.00 74241.00C177065.67 74262.66 177076.33 74284.34 177087.00 74306.00C177108.33 74327.34 177129.67 74348.66 177151.00 74370.00C177161.67 74402.33 177172.33 74434.67 177183.00 74467.00C177194.00 74467.00 177205.00 74467.00 177216.00 74467.00C177258.67 74445.33 177301.33 74423.67 177344.00 74402.00C177354.70 74402.01 177365.40 74401.98 177376.10 74402.02C177429.73 74412.68 177483.37 74423.34 177537.00 74434.00C177584.54 74457.92 177632.02 74481.94 177679.59 74505.80C177696.40 74514.20 177713.20 74522.60 177730.00 74531.00C177751.33 74573.67 177772.67 74616.33 177794.00 74659.00C177794.00 74670.00 177794.00 74681.00 177794.00 74692.00C177912.00 74767.00 178030.00 74842.00 178148.00 74917.00C178169.33 74927.67 178190.67 74938.33 178212.00 74949.00C178244.33 74949.00 178276.67 74949.00 178309.00 74949.00C178502.00 74981.00 178695.00 75013.00 178888.00 75045.00C178898.67 75055.66 178909.33 75066.34 178920.00 75077.00C178962.67 75098.67 179005.33 75120.33 179048.00 75142.00C179080.33 75152.67 179112.67 75163.33 179145.00 75174.00C179166.33 75174.00 179187.67 75174.00 179209.00 75174.00C179230.33 75195.34 179251.67 75216.66 179273.00 75238.00C179316.00 75270.33 179359.00 75302.67 179402.00 75335.00C179434.00 75345.67 179466.00 75356.33 179498.00 75367.00C179519.67 75377.67 179541.33 75388.33 179563.00 75399.00C179595.00 75431.00 179627.00 75463.00 179659.00 75495.00C179680.67 75527.33 179702.33 75559.67 179724.00 75592.00C179734.67 75613.33 179745.33 75634.67 179756.00 75656.00C179756.00 75666.67 179756.00 75677.33 179756.00 75688.00C179766.67 75699.00 179777.33 75710.00 179788.00 75721.00C179852.33 75721.00 179916.67 75721.00 179981.00 75721.00C180056.00 75731.67 180131.00 75742.33 180206.00 75753.00C180238.00 75774.33 180270.00 75795.67 180302.00 75817.00C180388.00 75892.00 180474.00 75967.00 180560.00 76042.00C180602.67 76085.00 180645.33 76128.00 180688.00 76171.00C180720.33 76171.00 180752.67 76171.00 180785.00 76171.00C180817.00 76149.33 180849.00 76127.67 180881.00 76106.00C180902.33 76106.00 180923.67 76106.00 180945.00 76106.00C180988.00 76127.67 181031.00 76149.33 181074.00 76171.00C181074.00 76181.67 181074.00 76192.33 181074.00 76203.00C181084.67 76224.33 181095.33 76245.67 181106.00 76267.00C181106.00 76342.00 181106.00 76417.00 181106.00 76492.00C181116.67 76502.66 181127.33 76513.34 181138.00 76524.00C181138.00 76545.67 181138.00 76567.33 181138.00 76589.00C181148.67 76621.00 181159.33 76653.00 181170.00 76685.00C181191.67 76706.33 181213.33 76727.67 181235.00 76749.00C181256.33 76781.34 181277.67 76813.66 181299.00 76846.00C181309.67 76867.33 181320.33 76888.67 181331.00 76910.00C181384.67 76920.67 181438.33 76931.33 181492.00 76942.00C181513.33 76963.67 181534.67 76985.33 181556.00 77007.00C181577.67 77007.00 181599.33 77007.00 181621.00 77007.00C181631.67 77028.33 181642.33 77049.67 181653.00 77071.00C181653.00 77103.00 181653.00 77135.00 181653.00 77167.00C181663.67 77178.00 181674.33 77189.00 181685.00 77200.00C181717.00 77221.33 181749.00 77242.67 181781.00 77264.00C181791.67 77274.66 181802.33 77285.34 181813.00 77296.00C181866.67 77306.67 181920.33 77317.33 181974.00 77328.00C181984.67 77328.00 181995.33 77328.00 182006.00 77328.00C182038.33 77338.67 182070.67 77349.33 182103.00 77360.00C182103.00 77370.67 182103.00 77381.33 182103.00 77392.00C182092.33 77403.00 182081.67 77414.00 182071.00 77425.00C182081.67 77425.00 182092.33 77425.00 182103.00 77425.00C182124.33 77435.67 182145.67 77446.33 182167.00 77457.00C182188.67 77478.33 182210.33 77499.67 182232.00 77521.00C182242.67 77521.00 182253.33 77521.00 182264.00 77521.00C182285.33 77531.67 182306.67 77542.33 182328.00 77553.00C182360.00 77553.00 182392.00 77553.00 182424.00 77553.00C182435.00 77542.33 182446.00 77531.67 182457.00 77521.00C182489.00 77521.00 182521.00 77521.00 182553.00 77521.00C182574.33 77499.66 182595.67 77478.34 182617.00 77457.00C182638.67 77457.00 182660.33 77457.00 182682.00 77457.00C182703.33 77478.34 182724.67 77499.66 182746.00 77521.00C182746.00 77531.67 182746.00 77542.33 182746.00 77553.00C182778.00 77574.67 182810.00 77596.33 182842.00 77618.00C182853.02 77639.36 182864.02 77660.73 182875.05 77682.08C182896.37 77714.05 182917.68 77746.03 182939.00 77778.00C182949.67 77799.66 182960.33 77821.34 182971.00 77843.00C182971.00 77896.33 182971.00 77949.67 182971.00 78003.00C182981.67 78046.00 182992.33 78089.00 183003.00 78132.00C182992.33 78175.00 182981.67 78218.00 182971.00 78261.00C183003.33 78282.34 183035.67 78303.66 183068.00 78325.00C183078.67 78314.34 183089.33 78303.66 183100.00 78293.00C183142.67 78293.00 183185.33 78293.00 183228.00 78293.00C183217.33 78293.00 183206.67 78293.00 183196.00 78293.00C183196.00 78303.67 183196.00 78314.33 183196.00 78325.00C183206.67 78325.00 183217.33 78325.00 183228.00 78325.00C183260.33 78314.33 183292.67 78303.67 183325.00 78293.00C183335.67 78293.00 183346.33 78293.00 183357.00 78293.00C183357.00 78282.33 183357.00 78271.67 183357.00 78261.00C183389.00 78239.33 183421.00 78217.67 183453.00 78196.00C183463.67 78206.66 183474.33 78217.34 183485.00 78228.00C183517.33 78249.67 183549.67 78271.33 183582.00 78293.00C183592.67 78293.00 183603.33 78293.00 183614.00 78293.00C183624.67 78325.00 183635.33 78357.00 183646.00 78389.00C183680.86 78458.43 183715.83 78527.81 183750.63 78597.27C183758.75 78613.51 183766.88 78629.76 183775.00 78646.00C183775.00 78689.00 183775.00 78732.00 183775.00 78775.00C183764.33 78764.34 183753.67 78753.66 183743.00 78743.00C183689.21 78753.70 183635.41 78764.37 183581.62 78775.08C183485.41 78796.38 183389.21 78817.70 183293.00 78839.00C183164.33 78892.67 183035.67 78946.33 182907.00 79000.00C182842.67 79032.33 182778.33 79064.67 182714.00 79097.00C182660.08 79139.84 182606.21 79182.74 182552.27 79225.55C182509.51 79257.70 182466.75 79289.85 182424.00 79322.00C182349.00 79354.00 182274.00 79386.00 182199.00 79418.00C182070.33 79503.66 181941.67 79589.34 181813.00 79675.00C181756.71 79731.61 181700.48 79788.29 181644.15 79844.86C181497.09 79991.90 181350.05 80138.95 181203.00 80286.00C181160.00 80339.67 181117.00 80393.33 181074.00 80447.00C181030.96 80511.38 180987.93 80575.78 180944.89 80640.16C180891.59 80715.10 180838.30 80790.05 180785.00 80865.00C180785.00 80886.33 180785.00 80907.67 180785.00 80929.00C180741.98 80982.69 180698.95 81036.38 180655.94 81090.08C180537.96 81261.72 180419.98 81433.36 180302.00 81605.00C180259.33 81690.66 180216.67 81776.34 180174.00 81862.00C180184.67 81872.66 180195.33 81883.34 180206.00 81894.00C180120.31 81990.36 180034.62 82086.71 179948.94 82183.08C179862.96 82290.38 179776.98 82397.69 179691.00 82505.00C179637.67 82601.34 179584.33 82697.66 179531.00 82794.00C179488.00 82922.67 179445.00 83051.33 179402.00 83180.00C179391.33 83190.66 179380.67 83201.34 179370.00 83212.00C179370.00 83233.67 179370.00 83255.33 179370.00 83277.00C179316.33 83277.00 179262.67 83277.00 179209.00 83277.00C179198.33 83298.33 179187.67 83319.67 179177.00 83341.00C179166.33 83341.00 179155.67 83341.00 179145.00 83341.00C179111.95 83373.74 179078.84 83406.42 179045.83 83439.20C179014.56 83470.80 178983.28 83502.40 178952.00 83534.00C178909.00 83566.00 178866.00 83598.00 178823.00 83630.00C178801.67 83640.67 178780.33 83651.33 178759.00 83662.00C178684.00 83662.00 178609.00 83662.00 178534.00 83662.00C178512.67 83683.67 178491.33 83705.33 178470.00 83727.00C178470.00 83748.33 178470.00 83769.67 178470.00 83791.00C178405.67 83791.00 178341.33 83791.00 178277.00 83791.00C178266.00 83780.33 178255.00 83769.67 178244.00 83759.00C178222.67 83759.00 178201.33 83759.00 178180.00 83759.00C178190.67 83769.66 178201.33 83780.34 178212.00 83791.00C178201.33 83791.00 178190.67 83791.00 178180.00 83791.00C178169.33 83780.34 178158.67 83769.66 178148.00 83759.00C178158.67 83737.67 178169.33 83716.33 178180.00 83695.00C178158.67 83695.00 178137.33 83695.00 178116.00 83695.00C178094.67 83705.67 178073.33 83716.33 178052.00 83727.00C178030.33 83727.00 178008.67 83727.00 177987.00 83727.00C177976.33 83716.34 177965.67 83705.66 177955.00 83695.00C177944.33 83673.34 177933.67 83651.66 177923.00 83630.00C177912.33 83630.00 177901.67 83630.00 177891.00 83630.00C177880.33 83640.66 177869.67 83651.34 177859.00 83662.00C177848.00 83651.33 177837.00 83640.67 177826.00 83630.00C177826.00 83651.67 177826.00 83673.33 177826.00 83695.00C177804.67 83695.00 177783.33 83695.00 177762.00 83695.00C177772.67 83716.33 177783.33 83737.67 177794.00 83759.00C177772.67 83780.34 177751.33 83801.66 177730.00 83823.00C177730.00 83844.33 177730.00 83865.67 177730.00 83887.00C177708.67 83876.33 177687.33 83865.67 177666.00 83855.00C177644.33 83855.00 177622.67 83855.00 177601.00 83855.00C177612.00 83823.00 177623.00 83791.00 177634.00 83759.00C177623.00 83759.00 177612.00 83759.00 177601.00 83759.00C177579.67 83769.67 177558.33 83780.33 177537.00 83791.00C177515.67 83791.00 177494.33 83791.00 177473.00 83791.00C177473.00 83769.67 177473.00 83748.33 177473.00 83727.00C177440.67 83727.00 177408.33 83727.00 177376.00 83727.00C177354.67 83705.33 177333.33 83683.67 177312.00 83662.00C177301.33 83673.00 177290.67 83684.00 177280.00 83695.00C177269.33 83684.00 177258.67 83673.00 177248.00 83662.00C177226.33 83662.00 177204.67 83662.00 177183.00 83662.00C177172.33 83651.34 177161.67 83640.66 177151.00 83630.00C177140.33 83640.66 177129.67 83651.34 177119.00 83662.00C177097.67 83651.33 177076.33 83640.67 177055.00 83630.00C177055.00 83608.67 177055.00 83587.33 177055.00 83566.00C177065.67 83555.34 177076.33 83544.66 177087.00 83534.00C177076.33 83523.34 177065.67 83512.66 177055.00 83502.00C177044.33 83502.00 177033.67 83502.00 177023.00 83502.00C177001.33 83491.00 176979.67 83480.00 176958.00 83469.00C176947.33 83469.00 176936.67 83469.00 176926.00 83469.00C176915.33 83447.67 176904.67 83426.33 176894.00 83405.00C176883.33 83405.00 176872.67 83405.00 176862.00 83405.00C176851.33 83394.34 176840.67 83383.66 176830.00 83373.00C176830.00 83351.67 176830.00 83330.33 176830.00 83309.00C176851.33 83309.00 176872.67 83309.00 176894.00 83309.00C176894.00 83287.33 176894.00 83265.67 176894.00 83244.00C176862.00 83255.00 176830.00 83266.00 176798.00 83277.00C176798.00 83266.00 176798.00 83255.00 176798.00 83244.00C176776.33 83233.33 176754.67 83222.67 176733.00 83212.00C176765.33 83212.00 176797.67 83212.00 176830.00 83212.00C176808.33 83201.33 176786.67 83190.67 176765.00 83180.00C176754.33 83180.00 176743.67 83180.00 176733.00 83180.00C176722.33 83201.33 176711.67 83222.67 176701.00 83244.00C176701.00 83233.33 176701.00 83222.67 176701.00 83212.00C176690.33 83222.66 176679.67 83233.34 176669.00 83244.00C176658.33 83233.34 176647.67 83222.66 176637.00 83212.00C176637.00 83180.00 176637.00 83148.00 176637.00 83116.00C176626.33 83116.00 176615.67 83116.00 176605.00 83116.00C176594.33 83105.34 176583.67 83094.66 176573.00 83084.00C176551.33 83084.00 176529.67 83084.00 176508.00 83084.00C176508.00 83094.67 176508.00 83105.33 176508.00 83116.00C176497.33 83116.00 176486.67 83116.00 176476.00 83116.00C176476.00 83137.33 176476.00 83158.67 176476.00 83180.00C176465.33 83180.00 176454.67 83180.00 176444.00 83180.00C176444.00 83169.33 176444.00 83158.67 176444.00 83148.00C176422.67 83126.66 176401.33 83105.34 176380.00 83084.00C176390.67 83084.00 176401.33 83084.00 176412.00 83084.00C176412.00 83073.00 176412.00 83062.00 176412.00 83051.00C176401.33 83051.00 176390.67 83051.00 176380.00 83051.00C176369.00 83062.00 176358.00 83073.00 176347.00 83084.00C176347.00 83062.33 176347.00 83040.67 176347.00 83019.00C176325.67 83019.00 176304.33 83019.00 176283.00 83019.00C176283.00 83008.33 176283.00 82997.67 176283.00 82987.00C176293.67 82976.34 176304.33 82965.66 176315.00 82955.00C176315.00 82944.33 176315.00 82933.67 176315.00 82923.00C176304.33 82912.34 176293.67 82901.66 176283.00 82891.00C176272.33 82858.67 176261.67 82826.33 176251.00 82794.00C176251.00 82783.33 176251.00 82772.67 176251.00 82762.00C176240.33 82772.66 176229.67 82783.34 176219.00 82794.00C176208.33 82783.34 176197.67 82772.66 176187.00 82762.00C176187.00 82751.33 176187.00 82740.67 176187.00 82730.00C176208.33 82730.00 176229.67 82730.00 176251.00 82730.00C176229.67 82719.33 176208.33 82708.67 176187.00 82698.00C176187.00 82687.33 176187.00 82676.67 176187.00 82666.00C176197.67 82666.00 176208.33 82666.00 176219.00 82666.00C176197.67 82633.66 176176.33 82601.34 176155.00 82569.00C176155.00 82547.67 176155.00 82526.33 176155.00 82505.00C176176.33 82494.33 176197.67 82483.67 176219.00 82473.00C176219.00 82462.33 176219.00 82451.67 176219.00 82441.00C176229.67 82430.00 176240.33 82419.00 176251.00 82408.00C176240.33 82397.34 176229.67 82386.66 176219.00 82376.00C176229.67 82365.34 176240.33 82354.66 176251.00 82344.00C176251.00 82333.33 176251.00 82322.67 176251.00 82312.00C176240.33 82312.00 176229.67 82312.00 176219.00 82312.00C176219.00 82301.33 176219.00 82290.67 176219.00 82280.00C176229.67 82280.00 176240.33 82280.00 176251.00 82280.00C176240.33 82258.34 176229.67 82236.66 176219.00 82215.00C176229.67 82215.00 176240.33 82215.00 176251.00 82215.00C176261.67 82204.34 176272.33 82193.66 176283.00 82183.00C176283.00 82151.00 176283.00 82119.00 176283.00 82087.00C176293.67 82076.34 176304.33 82065.66 176315.00 82055.00C176293.67 82055.00 176272.33 82055.00 176251.00 82055.00C176229.67 82044.33 176208.33 82033.67 176187.00 82023.00C176176.33 82033.66 176165.67 82044.34 176155.00 82055.00C176122.67 82022.66 176090.33 81990.34 176058.00 81958.00C176047.33 81968.66 176036.67 81979.34 176026.00 81990.00C176004.67 81979.33 175983.33 81968.67 175962.00 81958.00C175940.33 81936.67 175918.67 81915.33 175897.00 81894.00C175875.67 81883.33 175854.33 81872.67 175833.00 81862.00C175843.67 81851.34 175854.33 81840.66 175865.00 81830.00C175854.33 81819.34 175843.67 81808.66 175833.00 81798.00C175843.67 81776.34 175854.33 81754.66 175865.00 81733.00C175865.00 81722.33 175865.00 81711.67 175865.00 81701.00C175854.33 81701.00 175843.67 81701.00 175833.00 81701.00C175811.67 81690.33 175790.33 81679.67 175769.00 81669.00C175758.33 81647.67 175747.67 81626.33 175737.00 81605.00C175737.00 81594.00 175737.00 81583.00 175737.00 81572.00C175747.67 81572.00 175758.33 81572.00 175769.00 81572.00C175779.67 81540.00 175790.33 81508.00 175801.00 81476.00C175801.00 81454.67 175801.00 81433.33 175801.00 81412.00C175790.33 81412.00 175779.67 81412.00 175769.00 81412.00C175769.00 81401.00 175769.00 81390.00 175769.00 81379.00C175758.33 81379.00 175747.67 81379.00 175737.00 81379.00C175737.00 81368.33 175737.00 81357.67 175737.00 81347.00C175726.00 81347.00 175715.00 81347.00 175704.00 81347.00C175693.33 81336.34 175682.67 81325.66 175672.00 81315.00C175672.00 81304.33 175672.00 81293.67 175672.00 81283.00C175682.67 81283.00 175693.33 81283.00 175704.00 81283.00C175693.33 81261.67 175682.67 81240.33 175672.00 81219.00C175672.00 81208.33 175672.00 81197.67 175672.00 81187.00C175661.33 81176.00 175650.67 81165.00 175640.00 81154.00C175618.67 81143.33 175597.33 81132.67 175576.00 81122.00C175576.00 81143.67 175576.00 81165.33 175576.00 81187.00C175565.33 81187.00 175554.67 81187.00 175544.00 81187.00C175533.00 81176.00 175522.00 81165.00 175511.00 81154.00C175500.33 81132.67 175489.67 81111.33 175479.00 81090.00C175436.33 81068.67 175393.67 81047.33 175351.00 81026.00C175340.33 81004.67 175329.67 80983.33 175319.00 80962.00C175308.00 80951.00 175297.00 80940.00 175286.00 80929.00C175297.00 80907.67 175308.00 80886.33 175319.00 80865.00C175319.00 80854.33 175319.00 80843.67 175319.00 80833.00C175286.67 80822.33 175254.33 80811.67 175222.00 80801.00C175222.00 80779.33 175222.00 80757.67 175222.00 80736.00C175211.33 80736.00 175200.67 80736.00 175190.00 80736.00C175179.33 80747.00 175168.67 80758.00 175158.00 80769.00C175158.00 80758.00 175158.00 80747.00 175158.00 80736.00C175136.33 80725.33 175114.67 80714.67 175093.00 80704.00C175093.00 80672.00 175093.00 80640.00 175093.00 80608.00C175071.67 80575.66 175050.33 80543.34 175029.00 80511.00C175029.00 80489.67 175029.00 80468.33 175029.00 80447.00C175039.67 80425.67 175050.33 80404.33 175061.00 80383.00C175071.67 80372.34 175082.33 80361.66 175093.00 80351.00C175082.33 80318.67 175071.67 80286.33 175061.00 80254.00C175050.33 80254.00 175039.67 80254.00 175029.00 80254.00C175039.67 80232.67 175050.33 80211.33 175061.00 80190.00C175050.33 80168.67 175039.67 80147.33 175029.00 80126.00C175039.67 80115.00 175050.33 80104.00 175061.00 80093.00z"},"br-07":{"name":"Distrito Federal","path":"M127474.00 104691.00C127474.00 104680.00 127474.00 104669.00 127474.00 104658.00C127495.67 104626.00 127517.33 104594.00 127539.00 104562.00C127581.67 104551.33 127624.33 104540.67 127667.00 104530.00C127678.00 104508.67 127689.00 104487.33 127700.00 104466.00C127732.00 104423.00 127764.00 104380.00 127796.00 104337.00C127806.67 104337.00 127817.33 104337.00 127828.00 104337.00C127838.67 104315.67 127849.33 104294.33 127860.00 104273.00C127849.33 104230.00 127838.67 104187.00 127828.00 104144.00C127817.33 104122.67 127806.67 104101.33 127796.00 104080.00C127774.67 104090.67 127753.33 104101.33 127732.00 104112.00C127710.33 104101.33 127688.67 104090.67 127667.00 104080.00C127667.00 104047.67 127667.00 104015.33 127667.00 103983.00C127678.01 103940.32 127689.00 103897.64 127700.01 103854.96C127710.68 103822.64 127721.34 103790.32 127732.00 103758.00C127753.33 103726.00 127774.67 103694.00 127796.00 103662.00C127817.33 103662.00 127838.67 103662.00 127860.00 103662.00C127860.00 103469.00 127860.00 103276.00 127860.00 103083.00C129103.33 103083.00 130346.67 103083.00 131590.00 103083.00C131590.00 103158.00 131590.00 103233.00 131590.00 103308.00C131611.33 103308.00 131632.67 103308.00 131654.00 103308.00C131675.67 103340.00 131697.33 103372.00 131719.00 103404.00C131729.67 103404.00 131740.33 103404.00 131751.00 103404.00C131751.00 103415.00 131751.00 103426.00 131751.00 103437.00C131761.67 103447.67 131772.33 103458.33 131783.00 103469.00C131826.00 103469.00 131869.00 103469.00 131912.00 103469.00C131944.00 103479.67 131976.00 103490.33 132008.00 103501.00C132018.67 103501.00 132029.33 103501.00 132040.00 103501.00C132050.67 103511.67 132061.33 103522.33 132072.00 103533.00C132061.33 103543.67 132050.67 103554.33 132040.00 103565.00C132018.67 103618.67 131997.33 103672.33 131976.00 103726.00C131986.67 103747.33 131997.33 103768.67 132008.00 103790.00C132008.00 103833.00 132008.00 103876.00 132008.00 103919.00C131997.33 103929.67 131986.67 103940.33 131976.00 103951.00C131986.67 103961.67 131997.33 103972.33 132008.00 103983.00C132018.67 103983.00 132029.33 103983.00 132040.00 103983.00C132050.67 103993.67 132061.33 104004.33 132072.00 104015.00C132072.00 104036.67 132072.00 104058.33 132072.00 104080.00C132061.33 104101.33 132050.67 104122.67 132040.00 104144.00C132040.00 104165.33 132040.00 104186.67 132040.00 104208.00C132050.67 104218.67 132061.33 104229.33 132072.00 104240.00C132072.00 104251.00 132072.00 104262.00 132072.00 104273.00C132061.33 104273.00 132050.67 104273.00 132040.00 104273.00C132040.00 104294.33 132040.00 104315.67 132040.00 104337.00C132040.00 104326.33 132040.00 104315.67 132040.00 104305.00C132040.00 104315.67 132040.00 104326.33 132040.00 104337.00C132029.33 104347.67 132018.67 104358.33 132008.00 104369.00C132008.00 104390.33 132008.00 104411.67 132008.00 104433.00C131997.33 104433.00 131986.67 104433.00 131976.00 104433.00C131965.33 104465.33 131954.67 104497.67 131944.00 104530.00C131933.33 104540.67 131922.67 104551.33 131912.00 104562.00C131912.00 104572.67 131912.00 104583.33 131912.00 104594.00C131901.00 104594.00 131890.00 104594.00 131879.00 104594.00C131879.00 104615.33 131879.00 104636.67 131879.00 104658.00C131868.33 104658.00 131857.67 104658.00 131847.00 104658.00C131836.33 104669.00 131825.67 104680.00 131815.00 104691.00C131815.00 104733.67 131815.00 104776.33 131815.00 104819.00C131804.33 104829.67 131793.67 104840.33 131783.00 104851.00C131793.67 104851.00 131804.33 104851.00 131815.00 104851.00C131815.00 104862.00 131815.00 104873.00 131815.00 104884.00C131804.33 104905.33 131793.67 104926.67 131783.00 104948.00C131772.33 104948.00 131761.67 104948.00 131751.00 104948.00C131761.67 104948.00 131772.33 104948.00 131783.00 104948.00C131783.00 104969.33 131783.00 104990.67 131783.00 105012.00C131793.67 105022.67 131804.33 105033.33 131815.00 105044.00C131804.33 105054.67 131793.67 105065.33 131783.00 105076.00C131804.33 105076.00 131825.67 105076.00 131847.00 105076.00C131836.33 105087.00 131825.67 105098.00 131815.00 105109.00C131815.00 105119.67 131815.00 105130.33 131815.00 105141.00C131825.67 105141.00 131836.33 105141.00 131847.00 105141.00C131847.00 105162.33 131847.00 105183.67 131847.00 105205.00C131825.67 105205.00 131804.33 105205.00 131783.00 105205.00C131793.67 105215.67 131804.33 105226.33 131815.00 105237.00C131815.00 105258.67 131815.00 105280.33 131815.00 105302.00C131804.33 105302.00 131793.67 105302.00 131783.00 105302.00C131783.00 105366.00 131783.00 105430.00 131783.00 105494.00C131793.67 105494.00 131804.33 105494.00 131815.00 105494.00C131815.00 105505.00 131815.00 105516.00 131815.00 105527.00C131825.67 105527.00 131836.33 105527.00 131847.00 105527.00C131847.00 105537.67 131847.00 105548.33 131847.00 105559.00C131868.67 105559.00 131890.33 105559.00 131912.00 105559.00C131912.00 105569.67 131912.00 105580.33 131912.00 105591.00C131922.67 105591.00 131933.33 105591.00 131944.00 105591.00C131944.00 105601.67 131944.00 105612.33 131944.00 105623.00C131954.67 105612.33 131965.33 105601.67 131976.00 105591.00C131986.67 105612.33 131997.33 105633.67 132008.00 105655.00C132018.67 105655.00 132029.33 105655.00 132040.00 105655.00C132040.00 105665.67 132040.00 105676.33 132040.00 105687.00C132061.67 105687.00 132083.33 105687.00 132105.00 105687.00C132094.00 105697.67 132083.00 105708.33 132072.00 105719.00C132083.00 105719.00 132094.00 105719.00 132105.00 105719.00C132105.00 105730.00 132105.00 105741.00 132105.00 105752.00C131515.33 105752.00 130925.67 105752.00 130336.00 105752.00C130121.67 105762.67 129907.33 105773.33 129693.00 105784.00C128964.33 105784.00 128235.67 105784.00 127507.00 105784.00C127507.00 105773.33 127507.00 105762.67 127507.00 105752.00C127517.67 105719.67 127528.33 105687.33 127539.00 105655.00C127539.00 105623.00 127539.00 105591.00 127539.00 105559.00C127549.67 105537.33 127560.33 105515.67 127571.00 105494.00C127581.67 105462.00 127592.33 105430.00 127603.00 105398.00C127592.33 105387.33 127581.67 105376.67 127571.00 105366.00C127592.33 105344.67 127613.67 105323.33 127635.00 105302.00C127635.00 105269.67 127635.00 105237.33 127635.00 105205.00C127613.67 105194.33 127592.33 105183.67 127571.00 105173.00C127560.33 105183.67 127549.67 105194.33 127539.00 105205.00C127528.33 105194.33 127517.67 105183.67 127507.00 105173.00C127507.00 105162.33 127507.00 105151.67 127507.00 105141.00C127517.67 105141.00 127528.33 105141.00 127539.00 105141.00C127539.00 105119.33 127539.00 105097.67 127539.00 105076.00C127528.33 105076.00 127517.67 105076.00 127507.00 105076.00C127507.00 105044.00 127507.00 105012.00 127507.00 104980.00C127517.67 104969.33 127528.33 104958.67 127539.00 104948.00C127528.33 104937.33 127517.67 104926.67 127507.00 104916.00C127496.00 104862.33 127485.00 104808.67 127474.00 104755.00C127474.00 104733.67 127474.00 104712.33 127474.00 104691.00z"},"br-17":{"name":"Pernambuco","path":"M160271.00 69901.00C160303.00 69901.00 160335.00 69901.00 160367.00 69901.00C160410.00 69879.33 160453.00 69857.67 160496.00 69836.00C160506.74 69825.19 160517.62 69814.50 160528.28 69803.62C160560.19 69761.08 160592.09 69718.54 160624.00 69676.00C160677.67 69676.00 160731.33 69676.00 160785.00 69676.00C160806.67 69665.00 160828.33 69654.00 160850.00 69643.00C160860.67 69632.33 160871.33 69621.67 160882.00 69611.00C160903.33 69611.00 160924.67 69611.00 160946.00 69611.00C160967.33 69589.67 160988.67 69568.33 161010.00 69547.00C160999.33 69515.00 160988.67 69483.00 160978.00 69451.00C160978.00 69429.33 160978.00 69407.67 160978.00 69386.00C160988.67 69386.00 160999.33 69386.00 161010.00 69386.00C161020.67 69375.33 161031.33 69364.67 161042.00 69354.00C161063.67 69354.00 161085.33 69354.00 161107.00 69354.00C161139.00 69322.00 161171.00 69290.00 161203.00 69258.00C161224.67 69215.00 161246.33 69172.00 161268.00 69129.00C161268.00 69107.67 161268.00 69086.33 161268.00 69065.00C161289.33 69065.00 161310.67 69065.00 161332.00 69065.00C161342.67 69075.67 161353.33 69086.33 161364.00 69097.00C161374.67 69097.00 161385.33 69097.00 161396.00 69097.00C161417.33 69086.33 161438.67 69075.67 161460.00 69065.00C161471.00 69043.33 161482.00 69021.67 161493.00 69000.00C161503.67 69000.00 161514.33 69000.00 161525.00 69000.00C161535.67 68989.33 161546.33 68978.67 161557.00 68968.00C161567.67 68936.00 161578.33 68904.00 161589.00 68872.00C161589.00 68839.67 161589.00 68807.33 161589.00 68775.00C161632.00 68786.00 161675.00 68797.00 161718.00 68808.00C161728.70 68754.26 161739.33 68700.50 161750.07 68646.78C161760.72 68614.52 161771.36 68582.26 161782.00 68550.00C161835.67 68539.33 161889.33 68528.67 161943.00 68518.00C161953.67 68486.00 161964.33 68454.00 161975.00 68422.00C161985.67 68422.00 161996.33 68422.00 162007.00 68422.00C162028.33 68411.33 162049.67 68400.67 162071.00 68390.00C162092.67 68411.33 162114.33 68432.67 162136.00 68454.00C162136.00 68464.67 162136.00 68475.33 162136.00 68486.00C162146.74 68496.70 162157.41 68507.49 162168.20 68518.13C162200.13 68539.42 162232.07 68560.71 162264.00 68582.00C162285.67 68603.67 162307.33 68625.33 162329.00 68647.00C162350.33 68625.33 162371.67 68603.67 162393.00 68582.00C162403.67 68560.67 162414.33 68539.33 162425.00 68518.00C162425.00 68475.33 162425.00 68432.67 162425.00 68390.00C162435.67 68379.00 162446.33 68368.00 162457.00 68357.00C162467.67 68357.00 162478.33 68357.00 162489.00 68357.00C162489.00 68325.00 162489.00 68293.00 162489.00 68261.00C162478.33 68261.00 162467.67 68261.00 162457.00 68261.00C162467.67 68239.67 162478.33 68218.33 162489.00 68197.00C162521.33 68197.00 162553.67 68197.00 162586.00 68197.00C162596.67 68207.67 162607.33 68218.33 162618.00 68229.00C162628.67 68250.33 162639.33 68271.67 162650.00 68293.00C162650.00 68303.67 162650.00 68314.33 162650.00 68325.00C162682.33 68325.00 162714.67 68325.00 162747.00 68325.00C162779.00 68293.00 162811.00 68261.00 162843.00 68229.00C162832.33 68186.00 162821.67 68143.00 162811.00 68100.00C162821.67 68089.33 162832.33 68078.67 162843.00 68068.00C162843.00 68057.33 162843.00 68046.67 162843.00 68036.00C162886.00 68025.33 162929.00 68014.67 162972.00 68004.00C162972.00 67982.33 162972.00 67960.67 162972.00 67939.00C162982.67 67939.00 162993.33 67939.00 163004.00 67939.00C163004.00 67917.67 163004.00 67896.33 163004.00 67875.00C163014.67 67864.33 163025.33 67853.67 163036.00 67843.00C163025.33 67800.00 163014.67 67757.00 163004.00 67714.00C163025.33 67703.33 163046.67 67692.67 163068.00 67682.00C163078.67 67671.33 163089.33 67660.67 163100.00 67650.00C163132.33 67639.33 163164.67 67628.67 163197.00 67618.00C163218.33 67596.67 163239.67 67575.33 163261.00 67554.00C163293.00 67554.00 163325.00 67554.00 163357.00 67554.00C163357.00 67543.00 163357.00 67532.00 163357.00 67521.00C163368.00 67499.67 163379.00 67478.33 163390.00 67457.00C163400.67 67446.33 163411.33 67435.67 163422.00 67425.00C163432.67 67403.67 163443.33 67382.33 163454.00 67361.00C163475.33 67361.00 163496.67 67361.00 163518.00 67361.00C163528.67 67350.33 163539.33 67339.67 163550.00 67329.00C163550.00 67307.33 163550.00 67285.67 163550.00 67264.00C163561.00 67253.33 163572.00 67242.67 163583.00 67232.00C163604.33 67232.00 163625.67 67232.00 163647.00 67232.00C163657.67 67221.33 163668.33 67210.67 163679.00 67200.00C163679.00 67189.33 163679.00 67178.67 163679.00 67168.00C163689.67 67157.33 163700.33 67146.67 163711.00 67136.00C163764.67 67157.33 163818.33 67178.67 163872.00 67200.00C163872.00 67189.33 163872.00 67178.67 163872.00 67168.00C163882.67 67157.33 163893.33 67146.67 163904.00 67136.00C163904.00 67114.33 163904.00 67092.67 163904.00 67071.00C163893.33 67060.33 163882.67 67049.67 163872.00 67039.00C163861.33 67017.67 163850.67 66996.33 163840.00 66975.00C163850.71 66931.93 163861.33 66888.84 163872.09 66845.78C163893.43 66792.04 163914.84 66738.31 163936.15 66684.55C163946.77 66652.70 163957.38 66620.85 163968.00 66589.00C164021.67 66492.67 164075.33 66396.33 164129.00 66300.00C164129.03 66267.51 164128.95 66235.02 164129.04 66202.53C164139.69 66073.94 164150.39 65945.35 164161.00 65816.76C164161.00 65795.51 164161.00 65774.26 164161.00 65753.00C164150.33 65721.00 164139.67 65689.00 164129.00 65657.00C164129.00 65646.00 164129.00 65635.00 164129.00 65624.00C164097.00 65592.00 164065.00 65560.00 164033.00 65528.00C164022.33 65528.00 164011.67 65528.00 164001.00 65528.00C163915.00 65495.67 163829.00 65463.33 163743.00 65431.00C163700.33 65420.33 163657.67 65409.67 163615.00 65399.00C163582.67 65367.00 163550.33 65335.00 163518.00 65303.00C163507.33 65238.67 163496.67 65174.33 163486.00 65110.00C163507.33 65045.67 163528.67 64981.33 163550.00 64917.00C163582.33 64852.67 163614.67 64788.33 163647.00 64724.00C163647.00 64649.00 163647.00 64574.00 163647.00 64499.00C163636.33 64488.33 163625.67 64477.67 163615.00 64467.00C163615.00 64456.33 163615.00 64445.67 163615.00 64435.00C163561.27 64370.62 163507.59 64306.19 163453.83 64241.83C163443.22 64231.22 163432.61 64220.61 163422.00 64210.00C163389.67 64124.00 163357.33 64038.00 163325.00 63952.00C163325.00 63930.67 163325.00 63909.33 163325.00 63888.00C163335.67 63866.67 163346.33 63845.33 163357.00 63824.00C163410.67 63813.33 163464.33 63802.67 163518.00 63792.00C163539.67 63781.00 163561.33 63770.00 163583.00 63759.00C163593.67 63737.67 163604.33 63716.33 163615.00 63695.00C163775.67 63630.67 163936.33 63566.33 164097.00 63502.00C164172.00 63491.33 164247.00 63480.67 164322.00 63470.00C164525.67 63470.00 164729.33 63470.00 164933.00 63470.00C165018.67 63448.67 165104.33 63427.33 165190.00 63406.00C165233.00 63427.33 165276.00 63448.67 165319.00 63470.00C165340.33 63470.00 165361.67 63470.00 165383.00 63470.00C165393.70 63480.74 165404.49 63491.40 165415.13 63502.20C165458.09 63566.46 165501.04 63630.73 165544.00 63695.00C165694.23 63662.96 165844.45 63630.88 165994.69 63598.87C166112.46 63577.25 166230.23 63555.62 166348.00 63534.00C166433.67 63534.00 166519.33 63534.00 166605.00 63534.00C166626.33 63512.67 166647.67 63491.33 166669.00 63470.00C166712.00 63480.67 166755.00 63491.33 166798.00 63502.00C166830.00 63491.33 166862.00 63480.67 166894.00 63470.00C166969.00 63384.33 167044.00 63298.67 167119.00 63213.00C167130.00 63213.00 167141.00 63213.00 167152.00 63213.00C167173.33 63223.67 167194.67 63234.33 167216.00 63245.00C167269.67 63223.67 167323.33 63202.33 167377.00 63181.00C167387.67 63170.33 167398.33 63159.67 167409.00 63149.00C167441.00 63159.67 167473.00 63170.33 167505.00 63181.00C167569.33 63181.00 167633.67 63181.00 167698.00 63181.00C167751.82 63170.32 167805.64 63159.57 167859.47 63148.93C167934.31 63137.95 168009.16 63126.98 168084.00 63116.00C168116.33 63116.00 168148.67 63116.00 168181.00 63116.00C168213.00 63105.33 168245.00 63094.67 168277.00 63084.00C168287.67 63084.00 168298.33 63084.00 168309.00 63084.00C168330.33 63105.67 168351.67 63127.33 168373.00 63149.00C168405.33 63170.33 168437.67 63191.67 168470.00 63213.00C168502.00 63213.00 168534.00 63213.00 168566.00 63213.00C168576.67 63223.67 168587.33 63234.33 168598.00 63245.00C168609.00 63245.00 168620.00 63245.00 168631.00 63245.00C168652.33 63277.33 168673.67 63309.67 168695.00 63342.00C168716.33 63363.33 168737.67 63384.67 168759.00 63406.00C168791.45 63427.44 168823.95 63448.81 168856.38 63470.28C168898.92 63502.52 168941.46 63534.76 168984.00 63567.00C168994.67 63567.00 169005.33 63567.00 169016.00 63567.00C169037.67 63588.33 169059.33 63609.67 169081.00 63631.00C169091.67 63652.33 169102.33 63673.67 169113.00 63695.00C169134.33 63716.33 169155.67 63737.67 169177.00 63759.00C169220.00 63770.00 169263.00 63781.00 169306.00 63792.00C169316.67 63792.00 169327.33 63792.00 169338.00 63792.00C169399.32 63822.46 169460.72 63852.76 169521.93 63883.46C169525.04 63884.94 169528.08 63886.70 169531.24 63888.00C169541.82 63888.00 169552.41 63888.00 169563.00 63888.00C169606.05 63920.40 169649.15 63952.73 169692.17 63985.17C169726.09 64019.09 169759.97 64053.06 169794.08 64086.79C169824.39 64116.86 169854.69 64146.93 169885.00 64177.00C169906.33 64188.00 169927.67 64199.00 169949.00 64210.00C169949.04 64220.74 169948.92 64231.50 169949.06 64242.23C169959.70 64284.82 169970.35 64327.41 169981.00 64370.00C170002.33 64402.33 170023.67 64434.67 170045.00 64467.00C170056.00 64477.67 170067.00 64488.33 170078.00 64499.00C170088.67 64499.00 170099.33 64499.00 170110.00 64499.00C170120.67 64509.67 170131.33 64520.33 170142.00 64531.00C170131.33 64531.00 170120.67 64531.00 170110.00 64531.00C170087.85 64552.85 170065.61 64574.61 170043.53 64596.52C170033.35 64607.01 170023.18 64617.51 170013.00 64628.00C170013.00 64660.00 170013.00 64692.00 170013.00 64724.00C170002.33 64734.67 169991.67 64745.33 169981.00 64756.00C169981.00 64777.67 169981.00 64799.33 169981.00 64821.00C170024.00 64821.00 170067.00 64821.00 170110.00 64821.00C170120.67 64810.00 170131.33 64799.00 170142.00 64788.00C170152.67 64799.00 170163.33 64810.00 170174.00 64821.00C170174.00 64831.67 170174.00 64842.33 170174.00 64853.00C170206.00 64863.67 170238.00 64874.33 170270.00 64885.00C170270.00 64917.00 170270.00 64949.00 170270.00 64981.00C170259.33 64991.67 170248.67 65002.33 170238.00 65013.00C170259.67 65013.00 170281.33 65013.00 170303.00 65013.00C170313.67 65002.33 170324.33 64991.67 170335.00 64981.00C170356.33 64981.00 170377.67 64981.00 170399.00 64981.00C170420.33 64970.33 170441.67 64959.67 170463.00 64949.00C170495.33 64959.67 170527.67 64970.33 170560.00 64981.00C170581.33 65013.33 170602.67 65045.67 170624.00 65078.00C170667.00 65078.00 170710.00 65078.00 170753.00 65078.00C170774.33 65088.67 170795.67 65099.33 170817.00 65110.00C170827.67 65142.00 170838.33 65174.00 170849.00 65206.00C170881.33 65227.67 170913.67 65249.33 170946.00 65271.00C170946.00 65292.33 170946.00 65313.67 170946.00 65335.00C170956.67 65356.33 170967.33 65377.67 170978.00 65399.00C170988.67 65442.00 170999.33 65485.00 171010.00 65528.00C171010.00 65549.33 171010.00 65570.67 171010.00 65592.00C171020.67 65613.67 171031.33 65635.33 171042.00 65657.00C171020.67 65678.33 170999.33 65699.67 170978.00 65721.00C170988.67 65731.67 170999.33 65742.33 171010.00 65753.00C171053.00 65721.00 171096.00 65689.00 171139.00 65657.00C171160.33 65624.67 171181.67 65592.33 171203.00 65560.00C171246.00 65570.67 171289.00 65581.33 171332.00 65592.00C171342.67 65581.33 171353.33 65570.67 171364.00 65560.00C171374.67 65560.00 171385.33 65560.00 171396.00 65560.00C171406.67 65592.33 171417.33 65624.67 171428.00 65657.00C171428.00 65667.67 171428.00 65678.33 171428.00 65689.00C171460.00 65699.67 171492.00 65710.33 171524.00 65721.00C171535.00 65710.33 171546.00 65699.67 171557.00 65689.00C171578.33 65689.00 171599.67 65689.00 171621.00 65689.00C171621.00 65667.33 171621.00 65645.67 171621.00 65624.00C171631.67 65613.33 171642.33 65602.67 171653.00 65592.00C171674.33 65549.33 171695.67 65506.67 171717.00 65464.00C171706.33 65442.33 171695.67 65420.67 171685.00 65399.00C171695.67 65377.67 171706.33 65356.33 171717.00 65335.00C171717.00 65313.67 171717.00 65292.33 171717.00 65271.00C171727.67 65271.00 171738.33 65271.00 171749.00 65271.00C171760.00 65260.33 171771.00 65249.67 171782.00 65239.00C171792.67 65249.67 171803.33 65260.33 171814.00 65271.00C171824.67 65271.00 171835.33 65271.00 171846.00 65271.00C171846.00 65249.33 171846.00 65227.67 171846.00 65206.00C171867.33 65206.00 171888.67 65206.00 171910.00 65206.00C171920.67 65217.00 171931.33 65228.00 171942.00 65239.00C171963.67 65228.00 171985.33 65217.00 172007.00 65206.00C172007.00 65174.00 172007.00 65142.00 172007.00 65110.00C172028.33 65088.67 172049.67 65067.33 172071.00 65046.00C172092.33 65056.67 172113.67 65067.33 172135.00 65078.00C172188.67 65078.00 172242.33 65078.00 172296.00 65078.00C172306.67 65045.67 172317.33 65013.33 172328.00 64981.00C172328.00 64959.67 172328.00 64938.33 172328.00 64917.00C172306.67 64906.33 172285.33 64895.67 172264.00 64885.00C172274.67 64863.67 172285.33 64842.33 172296.00 64821.00C172306.67 64821.00 172317.33 64821.00 172328.00 64821.00C172328.00 64831.67 172328.00 64842.33 172328.00 64853.00C172371.00 64853.00 172414.00 64853.00 172457.00 64853.00C172467.67 64842.33 172478.33 64831.67 172489.00 64821.00C172489.00 64810.00 172489.00 64799.00 172489.00 64788.00C172499.67 64799.00 172510.33 64810.00 172521.00 64821.00C172542.33 64810.00 172563.67 64799.00 172585.00 64788.00C172606.67 64788.00 172628.33 64788.00 172650.00 64788.00C172660.67 64766.67 172671.33 64745.33 172682.00 64724.00C172692.67 64713.33 172703.33 64702.67 172714.00 64692.00C172703.33 64681.33 172692.67 64670.67 172682.00 64660.00C172703.33 64649.33 172724.67 64638.67 172746.00 64628.00C172756.67 64628.00 172767.33 64628.00 172778.00 64628.00C172778.00 64617.00 172778.00 64606.00 172778.00 64595.00C172799.67 64595.00 172821.33 64595.00 172843.00 64595.00C172853.67 64616.67 172864.33 64638.33 172875.00 64660.00C172896.33 64660.00 172917.67 64660.00 172939.00 64660.00C172960.67 64702.67 172982.33 64745.33 173004.00 64788.00C173014.67 64788.00 173025.33 64788.00 173036.00 64788.00C173057.33 64809.67 173078.67 64831.33 173100.00 64853.00C173100.00 64863.67 173100.00 64874.33 173100.00 64885.00C173110.67 64885.00 173121.33 64885.00 173132.00 64885.00C173132.00 64895.67 173132.00 64906.33 173132.00 64917.00C173164.33 64927.67 173196.67 64938.33 173229.00 64949.00C173229.00 64981.33 173229.00 65013.67 173229.00 65046.00C173239.67 65046.00 173250.33 65046.00 173261.00 65046.00C173271.67 65067.33 173282.33 65088.67 173293.00 65110.00C173293.00 65131.33 173293.00 65152.67 173293.00 65174.00C173314.33 65184.67 173335.67 65195.33 173357.00 65206.00C173357.00 65227.67 173357.00 65249.33 173357.00 65271.00C173378.33 65271.00 173399.67 65271.00 173421.00 65271.00C173432.00 65249.33 173443.00 65227.67 173454.00 65206.00C173454.00 65227.67 173454.00 65249.33 173454.00 65271.00C173464.67 65260.33 173475.33 65249.67 173486.00 65239.00C173496.67 65249.67 173507.33 65260.33 173518.00 65271.00C173550.00 65260.33 173582.00 65249.67 173614.00 65239.00C173635.67 65249.67 173657.33 65260.33 173679.00 65271.00C173700.33 65260.33 173721.67 65249.67 173743.00 65239.00C173775.33 65239.00 173807.67 65239.00 173840.00 65239.00C173840.00 65217.33 173840.00 65195.67 173840.00 65174.00C173850.67 65163.33 173861.33 65152.67 173872.00 65142.00C173904.00 65142.00 173936.00 65142.00 173968.00 65142.00C173989.33 65120.67 174010.67 65099.33 174032.00 65078.00C174064.33 65078.00 174096.67 65078.00 174129.00 65078.00C174139.67 65099.33 174150.33 65120.67 174161.00 65142.00C174193.00 65142.00 174225.00 65142.00 174257.00 65142.00C174268.00 65120.67 174279.00 65099.33 174290.00 65078.00C174279.00 65067.33 174268.00 65056.67 174257.00 65046.00C174300.00 65035.00 174343.00 65024.00 174386.00 65013.00C174396.67 65002.33 174407.33 64991.67 174418.00 64981.00C174418.00 64970.33 174418.00 64959.67 174418.00 64949.00C174433.69 64933.37 174449.20 64917.57 174465.20 64902.26C174471.14 64896.50 174477.07 64890.75 174483.00 64885.00C174504.33 64917.00 174525.67 64949.00 174547.00 64981.00C174557.67 64970.33 174568.33 64959.67 174579.00 64949.00C174589.67 64959.67 174600.33 64970.33 174611.00 64981.00C174621.67 64970.33 174632.33 64959.67 174643.00 64949.00C174654.00 64959.67 174665.00 64970.33 174676.00 64981.00C174676.00 65013.33 174676.00 65045.67 174676.00 65078.00C174686.67 65078.00 174697.33 65078.00 174708.00 65078.00C174697.33 65099.33 174686.67 65120.67 174676.00 65142.00C174697.33 65163.33 174718.67 65184.67 174740.00 65206.00C174718.67 65238.33 174697.33 65270.67 174676.00 65303.00C174708.00 65303.00 174740.00 65303.00 174772.00 65303.00C174761.33 65313.67 174750.67 65324.33 174740.00 65335.00C174750.67 65345.67 174761.33 65356.33 174772.00 65367.00C174761.33 65388.33 174750.67 65409.67 174740.00 65431.00C174750.67 65474.00 174761.33 65517.00 174772.00 65560.00C174794.14 65582.19 174816.38 65604.28 174838.46 65626.53C174848.30 65636.69 174858.15 65646.85 174868.00 65657.00C174889.67 65646.00 174911.33 65635.00 174933.00 65624.00C174975.67 65624.00 175018.33 65624.00 175061.00 65624.00C175061.00 65613.33 175061.00 65602.67 175061.00 65592.00C175082.67 65592.00 175104.33 65592.00 175126.00 65592.00C175147.33 65570.67 175168.67 65549.33 175190.00 65528.00C175211.39 65517.28 175232.83 65506.63 175254.20 65495.87C175286.46 65474.25 175318.73 65452.62 175351.00 65431.00C175372.33 65409.67 175393.67 65388.33 175415.00 65367.00C175436.33 65377.67 175457.67 65388.33 175479.00 65399.00C175489.67 65399.00 175500.33 65399.00 175511.00 65399.00C175522.00 65420.67 175533.00 65442.33 175544.00 65464.00C175565.33 65485.33 175586.67 65506.67 175608.00 65528.00C175608.00 65538.67 175608.00 65549.33 175608.00 65560.00C175618.67 65570.67 175629.33 65581.33 175640.00 65592.00C175704.33 65602.67 175768.67 65613.33 175833.00 65624.00C175843.67 65613.33 175854.33 65602.67 175865.00 65592.00C175865.00 65581.33 175865.00 65570.67 175865.00 65560.00C175854.33 65538.67 175843.67 65517.33 175833.00 65496.00C175833.00 65453.00 175833.00 65410.00 175833.00 65367.00C175843.74 65356.29 175854.41 65345.52 175865.19 65334.86C175908.13 65302.91 175951.06 65270.95 175994.00 65239.00C176026.07 65249.71 176058.16 65260.34 176090.21 65271.10C176111.81 65281.74 176133.40 65292.37 176155.00 65303.00C176155.00 65324.33 176155.00 65345.67 176155.00 65367.00C176176.33 65367.00 176197.67 65367.00 176219.00 65367.00C176229.67 65356.33 176240.33 65345.67 176251.00 65335.00C176272.33 65345.67 176293.67 65356.33 176315.00 65367.00C176330.69 65351.37 176346.20 65335.57 176362.20 65320.26C176368.22 65314.49 176374.12 65308.57 176380.21 65302.89C176401.47 65292.26 176422.74 65281.63 176444.00 65271.00C176444.00 65249.33 176444.00 65227.67 176444.00 65206.00C176476.00 65184.67 176508.00 65163.33 176540.00 65142.00C176540.00 65110.00 176540.00 65078.00 176540.00 65046.00C176593.67 65046.00 176647.33 65046.00 176701.00 65046.00C176685.39 65029.96 176669.96 65013.75 176654.03 64998.03C176648.35 64992.35 176642.68 64986.68 176637.00 64981.00C176647.67 64970.33 176658.33 64959.67 176669.00 64949.00C176690.33 64938.33 176711.67 64927.67 176733.00 64917.00C176765.40 64873.95 176797.73 64830.85 176830.17 64787.83C176840.78 64777.22 176851.39 64766.61 176862.00 64756.00C176883.33 64745.33 176904.67 64734.67 176926.00 64724.00C176979.67 64724.00 177033.33 64724.00 177087.00 64724.00C177108.33 64692.00 177129.67 64660.00 177151.00 64628.00C177172.67 64628.00 177194.33 64628.00 177216.00 64628.00C177226.67 64638.67 177237.33 64649.33 177248.00 64660.00C177248.00 64681.33 177248.00 64702.67 177248.00 64724.00C177258.67 64724.00 177269.33 64724.00 177280.00 64724.00C177280.00 64745.33 177280.00 64766.67 177280.00 64788.00C177301.33 64809.67 177322.67 64831.33 177344.00 64853.00C177344.00 64842.33 177344.00 64831.67 177344.00 64821.00C177365.33 64810.00 177386.67 64799.00 177408.00 64788.00C177408.00 64766.67 177408.00 64745.33 177408.00 64724.00C177397.33 64713.33 177386.67 64702.67 177376.00 64692.00C177354.67 64681.33 177333.33 64670.67 177312.00 64660.00C177322.67 64649.33 177333.33 64638.67 177344.00 64628.00C177344.00 64617.00 177344.00 64606.00 177344.00 64595.00C177354.67 64584.33 177365.33 64573.67 177376.00 64563.00C177386.67 64541.67 177397.33 64520.33 177408.00 64499.00C177419.00 64499.00 177430.00 64499.00 177441.00 64499.00C177451.67 64467.00 177462.33 64435.00 177473.00 64403.00C177483.67 64403.00 177494.33 64403.00 177505.00 64403.00C177526.33 64392.00 177547.67 64381.00 177569.00 64370.00C177569.00 64338.00 177569.00 64306.00 177569.00 64274.00C177612.00 64263.33 177655.00 64252.67 177698.00 64242.00C177698.00 64220.33 177698.00 64198.67 177698.00 64177.00C177730.00 64155.67 177762.00 64134.33 177794.00 64113.00C177804.67 64134.33 177815.33 64155.67 177826.00 64177.00C177837.00 64166.33 177848.00 64155.67 177859.00 64145.00C177880.33 64155.67 177901.67 64166.33 177923.00 64177.00C177944.33 64166.33 177965.67 64155.67 177987.00 64145.00C177997.67 64134.33 178008.33 64123.67 178019.00 64113.00C178019.00 64091.67 178019.00 64070.33 178019.00 64049.00C178051.33 64038.33 178083.67 64027.67 178116.00 64017.00C178148.00 63995.33 178180.00 63973.67 178212.00 63952.00C178264.07 63934.82 178316.16 63917.69 178368.15 63900.28C178380.44 63896.19 178392.72 63892.09 178405.00 63888.00C178405.00 63845.00 178405.00 63802.00 178405.00 63759.00C178420.69 63743.37 178436.20 63727.57 178452.20 63712.26C178458.14 63706.50 178464.07 63700.75 178470.00 63695.00C178470.00 63684.33 178470.00 63673.67 178470.00 63663.00C178480.67 63652.33 178491.33 63641.67 178502.00 63631.00C178512.67 63631.00 178523.33 63631.00 178534.00 63631.00C178544.67 63598.67 178555.33 63566.33 178566.00 63534.00C178576.67 63523.33 178587.33 63512.67 178598.00 63502.00C178598.00 63480.67 178598.00 63459.33 178598.00 63438.00C178587.33 63416.67 178576.67 63395.33 178566.00 63374.00C178576.67 63363.33 178587.33 63352.67 178598.00 63342.00C178630.33 63331.00 178662.67 63320.00 178695.00 63309.00C178737.67 63320.00 178780.33 63331.00 178823.00 63342.00C178833.67 63331.00 178844.33 63320.00 178855.00 63309.00C178866.00 63309.00 178877.00 63309.00 178888.00 63309.00C178909.33 63320.00 178930.67 63331.00 178952.00 63342.00C178962.67 63331.00 178973.33 63320.00 178984.00 63309.00C179016.00 63309.00 179048.00 63309.00 179080.00 63309.00C179144.33 63277.00 179208.67 63245.00 179273.00 63213.00C179262.33 63191.67 179251.67 63170.33 179241.00 63149.00C179251.72 63127.27 179262.37 63105.50 179273.13 63083.81C179294.75 63051.87 179316.38 63019.93 179338.00 62988.00C179413.00 62988.00 179488.00 62988.00 179563.00 62988.00C179573.67 62966.33 179584.33 62944.67 179595.00 62923.00C179670.00 62923.00 179745.00 62923.00 179820.00 62923.00C179852.08 62944.69 179884.11 62966.46 179916.21 62988.10C179937.87 62998.79 179959.56 63009.40 179981.20 63020.13C180013.13 63041.42 180045.07 63062.71 180077.00 63084.00C180093.50 63117.48 180109.89 63151.02 180126.68 63184.36C180131.45 63193.90 180136.23 63203.45 180141.00 63213.00C180173.33 63213.00 180205.67 63213.00 180238.00 63213.00C180248.67 63234.33 180259.33 63255.67 180270.00 63277.00C180280.67 63266.33 180291.33 63255.67 180302.00 63245.00C180312.67 63255.67 180323.33 63266.33 180334.00 63277.00C180355.67 63287.67 180377.33 63298.33 180399.00 63309.00C180431.00 63309.00 180463.00 63309.00 180495.00 63309.00C180516.67 63320.00 180538.33 63331.00 180560.00 63342.00C180560.00 63352.67 180560.00 63363.33 180560.00 63374.00C180570.67 63395.33 180581.33 63416.67 180592.00 63438.00C180613.33 63438.00 180634.67 63438.00 180656.00 63438.00C180656.00 63427.33 180656.00 63416.67 180656.00 63406.00C180666.67 63406.00 180677.33 63406.00 180688.00 63406.00C180720.33 63427.33 180752.67 63448.67 180785.00 63470.00C180806.33 63491.33 180827.67 63512.67 180849.00 63534.00C180827.67 63566.33 180806.33 63598.67 180785.00 63631.00C180806.33 63631.00 180827.67 63631.00 180849.00 63631.00C180849.00 63641.67 180849.00 63652.33 180849.00 63663.00C180838.33 63673.67 180827.67 63684.33 180817.00 63695.00C180827.67 63716.33 180838.33 63737.67 180849.00 63759.00C180859.67 63770.00 180870.33 63781.00 180881.00 63792.00C180902.33 63802.67 180923.67 63813.33 180945.00 63824.00C180945.00 63845.33 180945.00 63866.67 180945.00 63888.00C180955.67 63888.00 180966.33 63888.00 180977.00 63888.00C180977.00 63898.67 180977.00 63909.33 180977.00 63920.00C180955.67 63941.67 180934.33 63963.33 180913.00 63985.00C180902.33 63974.00 180891.67 63963.00 180881.00 63952.00C180849.00 63963.00 180817.00 63974.00 180785.00 63985.00C180785.00 63995.67 180785.00 64006.33 180785.00 64017.00C180742.00 64027.67 180699.00 64038.33 180656.00 64049.00C180634.67 64070.33 180613.33 64091.67 180592.00 64113.00C180559.67 64113.00 180527.33 64113.00 180495.00 64113.00C180473.67 64134.33 180452.33 64155.67 180431.00 64177.00C180398.67 64177.00 180366.33 64177.00 180334.00 64177.00C180312.67 64209.33 180291.33 64241.67 180270.00 64274.00C180238.00 64295.33 180206.00 64316.67 180174.00 64338.00C180152.33 64359.67 180130.67 64381.33 180109.00 64403.00C180087.67 64467.00 180066.33 64531.00 180045.00 64595.00C180023.67 64606.00 180002.33 64617.00 179981.00 64628.00C179981.00 64670.67 179981.00 64713.33 179981.00 64756.00C180004.68 64779.98 180028.22 64804.09 180051.99 64827.99C180060.33 64836.32 180068.66 64844.66 180077.00 64853.00C180077.00 64863.67 180077.00 64874.33 180077.00 64885.00C180087.67 64906.33 180098.33 64927.67 180109.00 64949.00C180141.33 64981.33 180173.67 65013.67 180206.00 65046.00C180206.00 65078.00 180206.00 65110.00 180206.00 65142.00C180227.33 65163.33 180248.67 65184.67 180270.00 65206.00C180238.00 65249.00 180206.00 65292.00 180174.00 65335.00C180174.00 65345.67 180174.00 65356.33 180174.00 65367.00C180184.67 65367.00 180195.33 65367.00 180206.00 65367.00C180195.33 65388.33 180184.67 65409.67 180174.00 65431.00C180163.00 65431.00 180152.00 65431.00 180141.00 65431.00C180130.33 65442.00 180119.67 65453.00 180109.00 65464.00C180109.00 65474.67 180109.00 65485.33 180109.00 65496.00C180093.37 65480.32 180077.57 65464.80 180062.26 65448.80C180056.51 65442.86 180050.75 65436.93 180045.00 65431.00C180034.33 65431.00 180023.67 65431.00 180013.00 65431.00C180002.26 65442.03 179991.60 65453.17 179980.80 65464.13C179948.54 65485.42 179916.27 65506.71 179884.00 65528.00C179873.33 65517.33 179862.67 65506.67 179852.00 65496.00C179841.33 65506.67 179830.67 65517.33 179820.00 65528.00C179798.67 65538.67 179777.33 65549.33 179756.00 65560.00C179766.67 65570.67 179777.33 65581.33 179788.00 65592.00C179809.33 65592.00 179830.67 65592.00 179852.00 65592.00C179852.00 65624.33 179852.00 65656.67 179852.00 65689.00C179820.00 65699.67 179788.00 65710.33 179756.00 65721.00C179745.33 65731.67 179734.67 65742.33 179724.00 65753.00C179734.67 65763.67 179745.33 65774.33 179756.00 65785.00C179756.00 65806.33 179756.00 65827.67 179756.00 65849.00C179691.67 65892.00 179627.33 65935.00 179563.00 65978.00C179530.67 65978.00 179498.33 65978.00 179466.00 65978.00C179466.00 65988.67 179466.00 65999.33 179466.00 66010.00C179444.67 66010.00 179423.33 66010.00 179402.00 66010.00C179402.00 66020.67 179402.00 66031.33 179402.00 66042.00C179423.33 66042.00 179444.67 66042.00 179466.00 66042.00C179455.33 66053.00 179444.67 66064.00 179434.00 66075.00C179444.67 66085.67 179455.33 66096.33 179466.00 66107.00C179466.00 66117.67 179466.00 66128.33 179466.00 66139.00C179455.33 66139.00 179444.67 66139.00 179434.00 66139.00C179423.33 66149.67 179412.67 66160.33 179402.00 66171.00C179370.00 66181.67 179338.00 66192.33 179306.00 66203.00C179295.00 66203.00 179284.00 66203.00 179273.00 66203.00C179272.95 66213.74 179273.10 66224.51 179272.93 66235.22C179262.28 66267.48 179251.64 66299.74 179241.00 66332.00C179262.67 66332.00 179284.33 66332.00 179306.00 66332.00C179306.00 66342.67 179306.00 66353.33 179306.00 66364.00C179338.00 66342.67 179370.00 66321.33 179402.00 66300.00C179445.00 66300.00 179488.00 66300.00 179531.00 66300.00C179552.33 66310.67 179573.67 66321.33 179595.00 66332.00C179616.33 66321.33 179637.67 66310.67 179659.00 66300.00C179691.33 66300.00 179723.67 66300.00 179756.00 66300.00C179766.67 66310.67 179777.33 66321.33 179788.00 66332.00C179798.67 66321.33 179809.33 66310.67 179820.00 66300.00C179820.00 66310.67 179820.00 66321.33 179820.00 66332.00C179841.33 66332.00 179862.67 66332.00 179884.00 66332.00C179884.00 66310.33 179884.00 66288.67 179884.00 66267.00C179905.67 66256.33 179927.33 66245.67 179949.00 66235.00C179970.33 66245.67 179991.67 66256.33 180013.00 66267.00C180013.00 66299.33 180013.00 66331.67 180013.00 66364.00C180023.67 66374.67 180034.33 66385.33 180045.00 66396.00C180055.67 66396.00 180066.33 66396.00 180077.00 66396.00C180077.00 66406.67 180077.00 66417.33 180077.00 66428.00C180098.33 66428.00 180119.67 66428.00 180141.00 66428.00C180152.58 66439.30 180164.31 66450.46 180175.80 66461.86C180185.87 66472.24 180195.93 66482.62 180206.00 66493.00C180206.00 66535.67 180206.00 66578.33 180206.00 66621.00C180195.33 66653.33 180184.67 66685.67 180174.00 66718.00C180174.00 66739.33 180174.00 66760.67 180174.00 66782.00C180195.33 66814.00 180216.67 66846.00 180238.00 66878.00C180227.33 66899.67 180216.67 66921.33 180206.00 66943.00C180216.67 66975.00 180227.33 67007.00 180238.00 67039.00C180238.00 67049.67 180238.00 67060.33 180238.00 67071.00C180227.33 67071.00 180216.67 67071.00 180206.00 67071.00C180195.33 67092.67 180184.67 67114.33 180174.00 67136.00C180184.67 67157.33 180195.33 67178.67 180206.00 67200.00C180184.33 67210.67 180162.67 67221.33 180141.00 67232.00C180141.00 67242.67 180141.00 67253.33 180141.00 67264.00C180152.00 67274.67 180163.00 67285.33 180174.00 67296.00C180195.33 67307.00 180216.67 67318.00 180238.00 67329.00C180270.00 67318.00 180302.00 67307.00 180334.00 67296.00C180334.00 67360.33 180334.00 67424.67 180334.00 67489.00C180377.00 67532.00 180420.00 67575.00 180463.00 67618.00C180473.67 67650.00 180484.33 67682.00 180495.00 67714.00C180559.33 67724.67 180623.67 67735.33 180688.00 67746.00C180698.67 67746.00 180709.33 67746.00 180720.00 67746.00C180752.33 67789.00 180784.67 67832.00 180817.00 67875.00C180859.67 67896.33 180902.33 67917.67 180945.00 67939.00C180966.67 67928.33 180988.33 67917.67 181010.00 67907.00C181052.67 67907.00 181095.33 67907.00 181138.00 67907.00C181148.67 67896.33 181159.33 67885.67 181170.00 67875.00C181170.00 67853.67 181170.00 67832.33 181170.00 67811.00C181202.33 67800.33 181234.67 67789.67 181267.00 67779.00C181299.00 67746.67 181331.00 67714.33 181363.00 67682.00C181374.00 67660.67 181385.00 67639.33 181396.00 67618.00C181428.00 67618.00 181460.00 67618.00 181492.00 67618.00C181524.00 67596.67 181556.00 67575.33 181588.00 67554.00C181663.00 67521.67 181738.00 67489.33 181813.00 67457.00C181824.00 67435.67 181835.00 67414.33 181846.00 67393.00C181888.67 67393.00 181931.33 67393.00 181974.00 67393.00C181995.67 67403.67 182017.33 67414.33 182039.00 67425.00C182049.67 67414.33 182060.33 67403.67 182071.00 67393.00C182081.67 67371.67 182092.33 67350.33 182103.00 67329.00C182113.67 67318.00 182124.33 67307.00 182135.00 67296.00C182167.33 67296.00 182199.67 67296.00 182232.00 67296.00C182232.00 67285.33 182232.00 67274.67 182232.00 67264.00C182242.67 67264.00 182253.33 67264.00 182264.00 67264.00C182253.33 67253.33 182242.67 67242.67 182232.00 67232.00C182232.00 67221.33 182232.00 67210.67 182232.00 67200.00C182253.33 67210.67 182274.67 67221.33 182296.00 67232.00C182328.00 67232.00 182360.00 67232.00 182392.00 67232.00C182381.33 67200.00 182370.67 67168.00 182360.00 67136.00C182370.67 67125.00 182381.33 67114.00 182392.00 67103.00C182424.49 67092.31 182456.95 67081.52 182489.46 67070.89C182531.97 67060.26 182574.49 67049.63 182617.00 67039.00C182638.67 67028.33 182660.33 67017.67 182682.00 67007.00C182682.00 66985.67 182682.00 66964.33 182682.00 66943.00C182671.00 66932.00 182660.00 66921.00 182649.00 66910.00C182627.67 66910.00 182606.33 66910.00 182585.00 66910.00C182585.00 66888.67 182585.00 66867.33 182585.00 66846.00C182574.33 66846.00 182563.67 66846.00 182553.00 66846.00C182553.00 66835.33 182553.00 66824.67 182553.00 66814.00C182563.74 66803.30 182574.40 66792.51 182585.20 66781.87C182617.46 66760.58 182649.73 66739.29 182682.00 66718.00C182682.00 66610.67 182682.00 66503.33 182682.00 66396.00C182692.67 66385.33 182703.33 66374.67 182714.00 66364.00C182714.00 66342.67 182714.00 66321.33 182714.00 66300.00C182724.67 66267.67 182735.33 66235.33 182746.00 66203.00C182789.00 66213.67 182832.00 66224.33 182875.00 66235.00C182885.67 66245.67 182896.33 66256.33 182907.00 66267.00C182917.67 66256.33 182928.33 66245.67 182939.00 66235.00C182928.33 66224.33 182917.67 66213.67 182907.00 66203.00C182917.67 66181.67 182928.33 66160.33 182939.00 66139.00C182928.33 66106.67 182917.67 66074.33 182907.00 66042.00C182928.33 66020.67 182949.67 65999.33 182971.00 65978.00C182992.33 65967.33 183013.67 65956.67 183035.00 65946.00C183066.29 65961.45 183097.68 65976.70 183128.80 65992.48C183183.53 66019.98 183238.27 66047.49 183293.00 66075.00C183314.33 66064.00 183335.67 66053.00 183357.00 66042.00C183367.67 66053.00 183378.33 66064.00 183389.00 66075.00C183410.33 66064.00 183431.67 66053.00 183453.00 66042.00C183485.33 66042.00 183517.67 66042.00 183550.00 66042.00C183550.00 66031.33 183550.00 66020.67 183550.00 66010.00C183560.67 65988.67 183571.33 65967.33 183582.00 65946.00C183592.67 65946.00 183603.33 65946.00 183614.00 65946.00C183614.00 65924.67 183614.00 65903.33 183614.00 65882.00C183603.33 65871.00 183592.67 65860.00 183582.00 65849.00C183592.67 65838.33 183603.33 65827.67 183614.00 65817.00C183614.00 65742.00 183614.00 65667.00 183614.00 65592.00C183624.67 65581.33 183635.33 65570.67 183646.00 65560.00C183667.67 65560.00 183689.33 65560.00 183711.00 65560.00C183732.33 65549.33 183753.67 65538.67 183775.00 65528.00C183807.00 65528.00 183839.00 65528.00 183871.00 65528.00C183892.67 65517.33 183914.33 65506.67 183936.00 65496.00C183946.67 65506.67 183957.33 65517.33 183968.00 65528.00C184064.33 65528.00 184160.67 65528.00 184257.00 65528.00C184267.74 65538.70 184278.40 65549.49 184289.20 65560.13C184321.46 65581.42 184353.73 65602.71 184386.00 65624.00C184418.00 65624.00 184450.00 65624.00 184482.00 65624.00C184492.67 65602.67 184503.33 65581.33 184514.00 65560.00C184514.00 65549.33 184514.00 65538.67 184514.00 65528.00C184492.67 65517.33 184471.33 65506.67 184450.00 65496.00C184450.00 65485.33 184450.00 65474.67 184450.00 65464.00C184460.80 65452.92 184471.50 65441.71 184482.37 65430.71C184535.91 65388.14 184589.46 65345.57 184643.00 65303.00C184653.67 65313.67 184664.33 65324.33 184675.00 65335.00C184685.67 65367.00 184696.33 65399.00 184707.00 65431.00C184739.33 65420.33 184771.67 65409.67 184804.00 65399.00C184900.33 65399.00 184996.67 65399.00 185093.00 65399.00C185114.33 65388.33 185135.67 65377.67 185157.00 65367.00C185210.67 65377.67 185264.33 65388.33 185318.00 65399.00C185350.33 65431.33 185382.67 65463.67 185415.00 65496.00C185425.67 65485.33 185436.33 65474.67 185447.00 65464.00C185457.67 65464.00 185468.33 65464.00 185479.00 65464.00C185500.33 65485.33 185521.67 65506.67 185543.00 65528.00C185575.33 65528.00 185607.67 65528.00 185640.00 65528.00C185650.67 65538.67 185661.33 65549.33 185672.00 65560.00C185682.67 65538.67 185693.33 65517.33 185704.00 65496.00C185714.67 65496.00 185725.33 65496.00 185736.00 65496.00C185757.67 65474.33 185779.33 65452.67 185801.00 65431.00C185843.67 65431.00 185886.33 65431.00 185929.00 65431.00C185939.67 65420.33 185950.33 65409.67 185961.00 65399.00C186014.67 65409.67 186068.33 65420.33 186122.00 65431.00C186154.00 65409.67 186186.00 65388.33 186218.00 65367.00C186218.00 65335.00 186218.00 65303.00 186218.00 65271.00C186229.00 65260.33 186240.00 65249.67 186251.00 65239.00C186272.33 65239.00 186293.67 65239.00 186315.00 65239.00C186347.00 65228.00 186379.00 65217.00 186411.00 65206.00C186432.67 65217.00 186454.33 65228.00 186476.00 65239.00C186497.33 65239.00 186518.67 65239.00 186540.00 65239.00C186572.00 65217.33 186604.00 65195.67 186636.00 65174.00C186657.67 65174.00 186679.33 65174.00 186701.00 65174.00C186733.00 65152.67 186765.00 65131.33 186797.00 65110.00C186807.67 65110.00 186818.33 65110.00 186829.00 65110.00C186840.00 65099.33 186851.00 65088.67 186862.00 65078.00C186862.00 65067.33 186862.00 65056.67 186862.00 65046.00C186872.67 65046.00 186883.33 65046.00 186894.00 65046.00C186926.00 65035.00 186958.00 65024.00 186990.00 65013.00C187000.67 65013.00 187011.33 65013.00 187022.00 65013.00C187022.00 65002.33 187022.00 64991.67 187022.00 64981.00C187043.67 64970.33 187065.33 64959.67 187087.00 64949.00C187097.67 64959.67 187108.33 64970.33 187119.00 64981.00C187183.33 64981.00 187247.67 64981.00 187312.00 64981.00C187365.33 64927.67 187418.67 64874.33 187472.00 64821.00C187472.00 64810.00 187472.00 64799.00 187472.00 64788.00C187483.00 64777.33 187494.00 64766.67 187505.00 64756.00C187558.33 64756.00 187611.67 64756.00 187665.00 64756.00C187686.67 64766.67 187708.33 64777.33 187730.00 64788.00C187772.67 64777.33 187815.33 64766.67 187858.00 64756.00C187868.67 64745.33 187879.33 64734.67 187890.00 64724.00C187911.67 64724.00 187933.33 64724.00 187955.00 64724.00C187922.67 64681.00 187890.33 64638.00 187858.00 64595.00C187868.67 64573.67 187879.33 64552.33 187890.00 64531.00C187901.00 64531.00 187912.00 64531.00 187923.00 64531.00C187923.00 64520.33 187923.00 64509.67 187923.00 64499.00C187933.67 64477.67 187944.33 64456.33 187955.00 64435.00C187933.33 64445.67 187911.67 64456.33 187890.00 64467.00C187879.33 64456.33 187868.67 64445.67 187858.00 64435.00C187858.00 64424.33 187858.00 64413.67 187858.00 64403.00C187868.67 64392.00 187879.33 64381.00 187890.00 64370.00C187901.00 64338.00 187912.00 64306.00 187923.00 64274.00C187923.00 64241.67 187923.00 64209.33 187923.00 64177.00C187955.00 64145.00 187987.00 64113.00 188019.00 64081.00C188008.33 64059.67 187997.67 64038.33 187987.00 64017.00C187987.03 63995.26 187986.94 63973.50 187987.05 63951.77C187997.70 63898.51 188008.35 63845.26 188019.00 63792.00C188051.33 63781.00 188083.67 63770.00 188116.00 63759.00C188158.67 63770.00 188201.33 63781.00 188244.00 63792.00C188265.33 63792.00 188286.67 63792.00 188308.00 63792.00C188319.00 63813.33 188330.00 63834.67 188341.00 63856.00C188362.33 63866.67 188383.67 63877.33 188405.00 63888.00C188415.67 63888.00 188426.33 63888.00 188437.00 63888.00C188447.67 63866.67 188458.33 63845.33 188469.00 63824.00C188512.00 63802.33 188555.00 63780.67 188598.00 63759.00C188608.67 63748.33 188619.33 63737.67 188630.00 63727.00C188662.00 63727.00 188694.00 63727.00 188726.00 63727.00C188726.00 63695.00 188726.00 63663.00 188726.00 63631.00C188758.33 63631.00 188790.67 63631.00 188823.00 63631.00C188823.00 63620.33 188823.00 63609.67 188823.00 63599.00C188812.33 63588.33 188801.67 63577.67 188791.00 63567.00C188844.67 63567.00 188898.33 63567.00 188952.00 63567.00C188984.00 63534.67 189016.00 63502.33 189048.00 63470.00C189112.33 63448.67 189176.67 63427.33 189241.00 63406.00C189262.33 63416.67 189283.67 63427.33 189305.00 63438.00C189348.00 63448.67 189391.00 63459.33 189434.00 63470.00C189455.33 63480.67 189476.67 63491.33 189498.00 63502.00C189508.67 63502.00 189519.33 63502.00 189530.00 63502.00C189551.67 63491.33 189573.33 63480.67 189595.00 63470.00C189616.33 63480.67 189637.67 63491.33 189659.00 63502.00C189669.74 63502.05 189680.51 63501.90 189691.22 63502.07C189723.48 63512.72 189755.74 63523.36 189788.00 63534.00C189798.67 63534.00 189809.33 63534.00 189820.00 63534.00C189852.00 63545.00 189884.00 63556.00 189916.00 63567.00C189937.33 63556.00 189958.67 63545.00 189980.00 63534.00C189991.00 63523.33 190002.00 63512.67 190013.00 63502.00C190023.67 63502.00 190034.33 63502.00 190045.00 63502.00C190055.74 63512.70 190066.41 63523.49 190077.19 63534.13C190109.13 63555.75 190141.06 63577.38 190173.00 63599.00C190194.74 63620.37 190216.42 63641.81 190238.19 63663.14C190280.93 63695.18 190323.63 63727.26 190366.39 63759.26C190398.59 63780.84 190430.80 63802.42 190463.00 63824.00C190463.00 63845.33 190463.00 63866.67 190463.00 63888.00C190452.33 63909.33 190441.67 63930.67 190431.00 63952.00C190441.67 63973.67 190452.33 63995.33 190463.00 64017.00C190463.00 64027.67 190463.00 64038.33 190463.00 64049.00C190484.33 64070.33 190505.67 64091.67 190527.00 64113.00C190548.33 64145.33 190569.67 64177.67 190591.00 64210.00C190602.00 64210.00 190613.00 64210.00 190624.00 64210.00C190656.00 64188.33 190688.00 64166.67 190720.00 64145.00C190735.63 64160.68 190751.43 64176.20 190766.74 64192.20C190772.49 64198.14 190778.25 64204.07 190784.00 64210.00C190805.67 64210.00 190827.33 64210.00 190849.00 64210.00C190849.00 64220.67 190849.00 64231.33 190849.00 64242.00C190859.67 64242.00 190870.33 64242.00 190881.00 64242.00C190891.67 64220.33 190902.33 64198.67 190913.00 64177.00C190945.00 64198.67 190977.00 64220.33 191009.00 64242.00C191030.67 64231.33 191052.33 64220.67 191074.00 64210.00C191095.33 64220.67 191116.67 64231.33 191138.00 64242.00C191148.67 64242.00 191159.33 64242.00 191170.00 64242.00C191180.67 64252.67 191191.33 64263.33 191202.00 64274.00C191180.67 64274.00 191159.33 64274.00 191138.00 64274.00C191154.52 64307.05 191171.13 64340.06 191187.36 64373.25C191192.31 64383.21 191197.10 64393.29 191202.17 64403.17C191212.78 64413.78 191223.39 64424.39 191234.00 64435.00C191234.00 64456.33 191234.00 64477.67 191234.00 64499.00C191255.67 64520.33 191277.33 64541.67 191299.00 64563.00C191299.00 64584.67 191299.00 64606.33 191299.00 64628.00C191277.33 64660.00 191255.67 64692.00 191234.00 64724.00C191212.67 64788.33 191191.33 64852.67 191170.00 64917.00C191159.33 64917.00 191148.67 64917.00 191138.00 64917.00C191127.33 64927.67 191116.67 64938.33 191106.00 64949.00C191116.67 64959.67 191127.33 64970.33 191138.00 64981.00C191159.33 64981.00 191180.67 64981.00 191202.00 64981.00C191191.33 65002.67 191180.67 65024.33 191170.00 65046.00C191180.68 65067.41 191191.44 65088.79 191202.07 65110.22C191212.72 65142.15 191223.36 65174.07 191234.00 65206.00C191212.67 65281.00 191191.33 65356.00 191170.00 65431.00C191170.00 65463.33 191170.00 65495.67 191170.00 65528.00C191148.67 65528.00 191127.33 65528.00 191106.00 65528.00C191106.00 65538.67 191106.00 65549.33 191106.00 65560.00C191116.67 65581.33 191127.33 65602.67 191138.00 65624.00C191138.00 65645.67 191138.00 65667.33 191138.00 65689.00C191148.67 65689.00 191159.33 65689.00 191170.00 65689.00C191170.00 65742.33 191170.00 65795.67 191170.00 65849.00C191191.33 65870.67 191212.67 65892.33 191234.00 65914.00C191233.98 65956.74 191234.04 65999.49 191233.97 66042.23C191223.28 66117.23 191212.66 66192.24 191201.94 66267.23C191191.30 66310.15 191180.65 66353.08 191170.00 66396.00C191170.00 66428.33 191170.00 66460.67 191170.00 66493.00C191127.00 66535.67 191084.00 66578.33 191041.00 66621.00C191041.00 66642.33 191041.00 66663.67 191041.00 66685.00C191008.95 66760.15 190976.85 66835.28 190944.84 66910.44C190901.83 67028.52 190858.76 67146.58 190815.78 67264.67C190805.19 67296.78 190794.59 67328.89 190784.00 67361.00C190784.00 67393.00 190784.00 67425.00 190784.00 67457.00C190773.33 67489.33 190762.67 67521.67 190752.00 67554.00C190762.67 67554.00 190773.33 67554.00 190784.00 67554.00C190752.00 67607.33 190720.00 67660.67 190688.00 67714.00C190677.29 67746.40 190666.66 67778.83 190655.89 67811.21C190645.26 67832.47 190634.63 67853.74 190624.00 67875.00C190624.00 67885.67 190624.00 67896.33 190624.00 67907.00C190645.33 67917.67 190666.67 67928.33 190688.00 67939.00C190666.67 67992.67 190645.33 68046.33 190624.00 68100.00C190624.00 68110.67 190624.00 68121.33 190624.00 68132.00C190634.67 68132.00 190645.33 68132.00 190656.00 68132.00C190666.67 68143.00 190677.33 68154.00 190688.00 68165.00C190677.33 68175.67 190666.67 68186.33 190656.00 68197.00C190634.33 68197.00 190612.67 68197.00 190591.00 68197.00C190580.33 68207.67 190569.67 68218.33 190559.00 68229.00C190580.67 68250.33 190602.33 68271.67 190624.00 68293.00C190581.00 68389.33 190538.00 68485.67 190495.00 68582.00C190484.33 68625.00 190473.67 68668.00 190463.00 68711.00C190446.43 68744.11 190429.96 68777.28 190413.11 68810.25C190408.07 68820.16 190403.04 68830.08 190398.00 68840.00C190398.00 68872.00 190398.00 68904.00 190398.00 68936.00C190387.33 68946.67 190376.67 68957.33 190366.00 68968.00C190366.00 68989.67 190366.00 69011.33 190366.00 69033.00C190376.67 69054.33 190387.33 69075.67 190398.00 69097.00C190387.33 69107.67 190376.67 69118.33 190366.00 69129.00C190366.00 69161.33 190366.00 69193.67 190366.00 69226.00C190355.33 69226.00 190344.67 69226.00 190334.00 69226.00C190323.33 69215.00 190312.67 69204.00 190302.00 69193.00C190286.39 69209.04 190270.96 69225.25 190255.03 69240.97C190249.33 69246.73 190243.49 69252.38 190237.89 69258.21C190226.93 69279.47 190215.96 69300.74 190205.00 69322.00C190194.33 69332.67 190183.67 69343.33 190173.00 69354.00C190173.00 69386.33 190173.00 69418.67 190173.00 69451.00C190141.00 69504.33 190109.00 69557.67 190077.00 69611.00C190066.33 69621.67 190055.67 69632.33 190045.00 69643.00C190055.67 69675.33 190066.33 69707.67 190077.00 69740.00C190055.67 69750.67 190034.33 69761.33 190013.00 69772.00C190002.00 69793.33 189991.00 69814.67 189980.00 69836.00C189991.00 69857.67 190002.00 69879.33 190013.00 69901.00C190013.00 69911.67 190013.00 69922.33 190013.00 69933.00C190002.00 69943.67 189991.00 69954.33 189980.00 69965.00C189969.33 69986.33 189958.67 70007.67 189948.00 70029.00C189958.67 70050.67 189969.33 70072.33 189980.00 70094.00C189948.00 70136.67 189916.00 70179.33 189884.00 70222.00C189884.00 70243.67 189884.00 70265.33 189884.00 70287.00C189894.67 70287.00 189905.33 70287.00 189916.00 70287.00C189905.33 70308.33 189894.67 70329.67 189884.00 70351.00C189873.33 70351.00 189862.67 70351.00 189852.00 70351.00C189819.67 70393.67 189787.33 70436.33 189755.00 70479.00C189755.00 70511.33 189755.00 70543.67 189755.00 70576.00C189766.00 70608.00 189777.00 70640.00 189788.00 70672.00C189788.00 70683.00 189788.00 70694.00 189788.00 70705.00C189766.33 70715.67 189744.67 70726.33 189723.00 70737.00C189701.67 70801.33 189680.33 70865.67 189659.00 70930.00C189659.00 70908.33 189659.00 70886.67 189659.00 70865.00C189626.67 70843.67 189594.33 70822.33 189562.00 70801.00C189487.00 70801.00 189412.00 70801.00 189337.00 70801.00C189315.67 70790.33 189294.33 70779.67 189273.00 70769.00C189251.67 70779.67 189230.33 70790.33 189209.00 70801.00C189166.00 70779.67 189123.00 70758.33 189080.00 70737.00C189048.00 70737.00 189016.00 70737.00 188984.00 70737.00C188897.78 70715.26 188811.54 70693.58 188725.32 70671.81C188650.55 70650.54 188575.77 70629.27 188501.00 70608.00C188490.33 70586.67 188479.67 70565.33 188469.00 70544.00C188426.33 70544.00 188383.67 70544.00 188341.00 70544.00C188341.00 70554.67 188341.00 70565.33 188341.00 70576.00C188308.67 70576.00 188276.33 70576.00 188244.00 70576.00C188233.33 70565.33 188222.67 70554.67 188212.00 70544.00C188212.00 70533.33 188212.00 70522.67 188212.00 70512.00C188201.33 70512.00 188190.67 70512.00 188180.00 70512.00C188190.67 70490.33 188201.33 70468.67 188212.00 70447.00C188180.00 70447.00 188148.00 70447.00 188116.00 70447.00C188116.00 70457.67 188116.00 70468.33 188116.00 70479.00C188094.33 70479.00 188072.67 70479.00 188051.00 70479.00C188051.00 70490.00 188051.00 70501.00 188051.00 70512.00C188040.33 70501.00 188029.67 70490.00 188019.00 70479.00C188019.00 70468.33 188019.00 70457.67 188019.00 70447.00C188008.33 70457.67 187997.67 70468.33 187987.00 70479.00C187987.00 70468.33 187987.00 70457.67 187987.00 70447.00C187965.67 70447.00 187944.33 70447.00 187923.00 70447.00C187901.33 70468.67 187879.67 70490.33 187858.00 70512.00C187858.00 70490.33 187858.00 70468.67 187858.00 70447.00C187842.37 70462.68 187826.57 70478.20 187811.26 70494.20C187805.51 70500.13 187799.75 70506.07 187794.00 70512.00C187772.67 70512.00 187751.33 70512.00 187730.00 70512.00C187719.33 70533.33 187708.67 70554.67 187698.00 70576.00C187676.33 70576.00 187654.67 70576.00 187633.00 70576.00C187622.33 70586.67 187611.67 70597.33 187601.00 70608.00C187590.33 70629.33 187579.67 70650.67 187569.00 70672.00C187536.67 70672.00 187504.33 70672.00 187472.00 70672.00C187448.32 70695.98 187424.78 70720.09 187401.01 70743.99C187392.67 70752.32 187384.34 70760.66 187376.00 70769.00C187344.00 70769.00 187312.00 70769.00 187280.00 70769.00C187258.33 70790.33 187236.67 70811.67 187215.00 70833.00C187183.00 70833.00 187151.00 70833.00 187119.00 70833.00C187108.33 70854.67 187097.67 70876.33 187087.00 70898.00C187065.33 70887.00 187043.67 70876.00 187022.00 70865.00C187011.33 70876.00 187000.67 70887.00 186990.00 70898.00C186968.67 70898.00 186947.33 70898.00 186926.00 70898.00C186904.67 70908.67 186883.33 70919.33 186862.00 70930.00C186839.37 70918.81 186816.66 70907.77 186794.07 70896.49C186773.71 70885.99 186753.36 70875.50 186733.00 70865.00C186722.33 70854.33 186711.67 70843.67 186701.00 70833.00C186690.33 70833.00 186679.67 70833.00 186669.00 70833.00C186679.67 70822.33 186690.33 70811.67 186701.00 70801.00C186690.33 70790.33 186679.67 70779.67 186669.00 70769.00C186679.67 70747.67 186690.33 70726.33 186701.00 70705.00C186701.00 70683.33 186701.00 70661.67 186701.00 70640.00C186701.00 70650.67 186701.00 70661.33 186701.00 70672.00C186690.33 70650.67 186679.67 70629.33 186669.00 70608.00C186658.00 70608.00 186647.00 70608.00 186636.00 70608.00C186614.67 70629.33 186593.33 70650.67 186572.00 70672.00C186550.67 70661.33 186529.33 70650.67 186508.00 70640.00C186497.33 70661.67 186486.67 70683.33 186476.00 70705.00C186443.67 70705.00 186411.33 70705.00 186379.00 70705.00C186357.67 70683.33 186336.33 70661.67 186315.00 70640.00C186272.00 70650.67 186229.00 70661.33 186186.00 70672.00C186175.33 70661.33 186164.67 70650.67 186154.00 70640.00C186143.33 70650.67 186132.67 70661.33 186122.00 70672.00C186100.67 70672.00 186079.33 70672.00 186058.00 70672.00C186058.00 70683.00 186058.00 70694.00 186058.00 70705.00C186047.33 70726.33 186036.67 70747.67 186026.00 70769.00C185993.67 70769.00 185961.33 70769.00 185929.00 70769.00C185918.33 70779.67 185907.67 70790.33 185897.00 70801.00C185875.67 70811.67 185854.33 70822.33 185833.00 70833.00C185833.00 70843.67 185833.00 70854.33 185833.00 70865.00C185790.00 70865.00 185747.00 70865.00 185704.00 70865.00C185682.67 70886.67 185661.33 70908.33 185640.00 70930.00C185597.00 70919.33 185554.00 70908.67 185511.00 70898.00C185457.33 70908.67 185403.67 70919.33 185350.00 70930.00C185318.00 70972.67 185286.00 71015.33 185254.00 71058.00C185189.67 71079.67 185125.33 71101.33 185061.00 71123.00C185050.33 71144.33 185039.67 71165.67 185029.00 71187.00C185039.67 71208.33 185050.33 71229.67 185061.00 71251.00C185082.33 71261.67 185103.67 71272.33 185125.00 71283.00C185135.67 71304.67 185146.33 71326.33 185157.00 71348.00C185146.33 71358.67 185135.67 71369.33 185125.00 71380.00C185125.00 71390.67 185125.00 71401.33 185125.00 71412.00C185103.67 71433.33 185082.33 71454.67 185061.00 71476.00C185039.67 71486.67 185018.33 71497.33 184997.00 71508.00C184997.00 71519.00 184997.00 71530.00 184997.00 71541.00C184932.67 71541.00 184868.33 71541.00 184804.00 71541.00C184793.33 71551.67 184782.67 71562.33 184772.00 71573.00C184750.33 71573.00 184728.67 71573.00 184707.00 71573.00C184696.33 71605.00 184685.67 71637.00 184675.00 71669.00C184664.33 71679.67 184653.67 71690.33 184643.00 71701.00C184632.33 71701.00 184621.67 71701.00 184611.00 71701.00C184611.00 71722.67 184611.00 71744.33 184611.00 71766.00C184589.67 71787.33 184568.33 71808.67 184547.00 71830.00C184493.33 71830.00 184439.67 71830.00 184386.00 71830.00C184386.00 71851.33 184386.00 71872.67 184386.00 71894.00C184396.67 71904.67 184407.33 71915.33 184418.00 71926.00C184418.00 71958.33 184418.00 71990.67 184418.00 72023.00C184439.33 72023.00 184460.67 72023.00 184482.00 72023.00C184492.67 72033.67 184503.33 72044.33 184514.00 72055.00C184514.00 72076.33 184514.00 72097.67 184514.00 72119.00C184535.67 72129.67 184557.33 72140.33 184579.00 72151.00C184579.00 72162.00 184579.00 72173.00 184579.00 72184.00C184546.67 72194.67 184514.33 72205.33 184482.00 72216.00C184471.33 72205.33 184460.67 72194.67 184450.00 72184.00C184450.00 72194.67 184450.00 72205.33 184450.00 72216.00C184439.33 72216.00 184428.67 72216.00 184418.00 72216.00C184418.00 72205.33 184418.00 72194.67 184418.00 72184.00C184407.33 72184.00 184396.67 72184.00 184386.00 72184.00C184375.33 72173.00 184364.67 72162.00 184354.00 72151.00C184332.33 72162.00 184310.67 72173.00 184289.00 72184.00C184278.33 72184.00 184267.67 72184.00 184257.00 72184.00C184257.00 72194.67 184257.00 72205.33 184257.00 72216.00C184246.33 72205.33 184235.67 72194.67 184225.00 72184.00C184214.33 72194.67 184203.67 72205.33 184193.00 72216.00C184193.00 72205.33 184193.00 72194.67 184193.00 72184.00C184171.67 72205.33 184150.33 72226.67 184129.00 72248.00C184118.00 72269.33 184107.00 72290.67 184096.00 72312.00C184085.33 72322.67 184074.67 72333.33 184064.00 72344.00C184053.33 72344.00 184042.67 72344.00 184032.00 72344.00C184010.67 72333.33 183989.33 72322.67 183968.00 72312.00C183968.00 72322.67 183968.00 72333.33 183968.00 72344.00C183978.67 72355.00 183989.33 72366.00 184000.00 72377.00C183978.67 72398.33 183957.33 72419.67 183936.00 72441.00C183914.33 72430.33 183892.67 72419.67 183871.00 72409.00C183849.67 72419.67 183828.33 72430.33 183807.00 72441.00C183785.67 72441.00 183764.33 72441.00 183743.00 72441.00C183732.33 72430.33 183721.67 72419.67 183711.00 72409.00C183700.00 72430.33 183689.00 72451.67 183678.00 72473.00C183667.33 72462.33 183656.67 72451.67 183646.00 72441.00C183646.00 72419.67 183646.00 72398.33 183646.00 72377.00C183624.67 72377.00 183603.33 72377.00 183582.00 72377.00C183582.00 72387.67 183582.00 72398.33 183582.00 72409.00C183560.67 72419.67 183539.33 72430.33 183518.00 72441.00C183518.00 72451.67 183518.00 72462.33 183518.00 72473.00C183507.00 72473.00 183496.00 72473.00 183485.00 72473.00C183463.67 72494.33 183442.33 72515.67 183421.00 72537.00C183410.33 72526.33 183399.67 72515.67 183389.00 72505.00C183378.33 72505.00 183367.67 72505.00 183357.00 72505.00C183346.33 72526.67 183335.67 72548.33 183325.00 72570.00C183325.00 72580.67 183325.00 72591.33 183325.00 72602.00C183309.31 72617.63 183293.80 72633.43 183277.80 72648.74C183271.86 72654.49 183265.93 72660.25 183260.00 72666.00C183153.00 72698.00 183046.00 72730.00 182939.00 72762.00C182939.00 72805.00 182939.00 72848.00 182939.00 72891.00C182949.67 72891.00 182960.33 72891.00 182971.00 72891.00C182971.00 72912.33 182971.00 72933.67 182971.00 72955.00C182960.33 72955.00 182949.67 72955.00 182939.00 72955.00C182917.67 72965.67 182896.33 72976.33 182875.00 72987.00C182864.00 72987.00 182853.00 72987.00 182842.00 72987.00C182820.67 72998.00 182799.33 73009.00 182778.00 73020.00C182778.00 72998.33 182778.00 72976.67 182778.00 72955.00C182767.33 72955.00 182756.67 72955.00 182746.00 72955.00C182746.00 72944.33 182746.00 72933.67 182746.00 72923.00C182735.33 72933.67 182724.67 72944.33 182714.00 72955.00C182714.00 72944.33 182714.00 72933.67 182714.00 72923.00C182703.33 72933.67 182692.67 72944.33 182682.00 72955.00C182671.00 72944.33 182660.00 72933.67 182649.00 72923.00C182649.00 72912.33 182649.00 72901.67 182649.00 72891.00C182638.33 72891.00 182627.67 72891.00 182617.00 72891.00C182606.33 72880.33 182595.67 72869.67 182585.00 72859.00C182585.00 72869.67 182585.00 72880.33 182585.00 72891.00C182563.67 72880.33 182542.33 72869.67 182521.00 72859.00C182488.67 72816.00 182456.33 72773.00 182424.00 72730.00C182402.67 72719.33 182381.33 72708.67 182360.00 72698.00C182263.67 72687.33 182167.33 72676.67 182071.00 72666.00C182006.67 72698.00 181942.33 72730.00 181878.00 72762.00C181813.67 72762.00 181749.33 72762.00 181685.00 72762.00C181674.33 72740.67 181663.67 72719.33 181653.00 72698.00C181642.33 72687.33 181631.67 72676.67 181621.00 72666.00C181588.67 72666.00 181556.33 72666.00 181524.00 72666.00C181513.33 72676.67 181502.67 72687.33 181492.00 72698.00C181502.67 72698.00 181513.33 72698.00 181524.00 72698.00C181492.00 72708.67 181460.00 72719.33 181428.00 72730.00C181417.33 72730.00 181406.67 72730.00 181396.00 72730.00C181374.33 72751.67 181352.67 72773.33 181331.00 72795.00C181309.67 72837.67 181288.33 72880.33 181267.00 72923.00C181277.67 72933.67 181288.33 72944.33 181299.00 72955.00C181299.00 72965.67 181299.00 72976.33 181299.00 72987.00C181267.00 73008.67 181235.00 73030.33 181203.00 73052.00C181203.00 73073.33 181203.00 73094.67 181203.00 73116.00C181213.67 73126.67 181224.33 73137.33 181235.00 73148.00C181235.00 73158.67 181235.00 73169.33 181235.00 73180.00C181224.33 73180.00 181213.67 73180.00 181203.00 73180.00C181192.00 73191.00 181181.00 73202.00 181170.00 73213.00C181159.33 73213.00 181148.67 73213.00 181138.00 73213.00C181106.00 73180.67 181074.00 73148.33 181042.00 73116.00C180999.00 73094.67 180956.00 73073.33 180913.00 73052.00C180881.00 72998.33 180849.00 72944.67 180817.00 72891.00C180774.00 72891.00 180731.00 72891.00 180688.00 72891.00C180677.33 72869.67 180666.67 72848.33 180656.00 72827.00C180656.00 72848.33 180656.00 72869.67 180656.00 72891.00C180645.33 72869.67 180634.67 72848.33 180624.00 72827.00C180634.67 72794.67 180645.33 72762.33 180656.00 72730.00C180624.00 72687.33 180592.00 72644.67 180560.00 72602.00C180549.00 72591.33 180538.00 72580.67 180527.00 72570.00C180484.33 72548.33 180441.67 72526.67 180399.00 72505.00C180388.33 72505.00 180377.67 72505.00 180367.00 72505.00C180345.33 72537.33 180323.67 72569.67 180302.00 72602.00C180280.61 72612.72 180259.17 72623.37 180237.80 72634.13C180205.54 72655.42 180173.27 72676.71 180141.00 72698.00C180130.33 72687.33 180119.67 72676.67 180109.00 72666.00C180109.00 72634.00 180109.00 72602.00 180109.00 72570.00C180130.67 72548.33 180152.33 72526.67 180174.00 72505.00C180109.67 72462.33 180045.33 72419.67 179981.00 72377.00C179959.33 72387.67 179937.67 72398.33 179916.00 72409.00C179884.00 72441.00 179852.00 72473.00 179820.00 72505.00C179820.00 72451.33 179820.00 72397.67 179820.00 72344.00C179809.33 72344.00 179798.67 72344.00 179788.00 72344.00C179777.33 72322.67 179766.67 72301.33 179756.00 72280.00C179756.00 72258.67 179756.00 72237.33 179756.00 72216.00C179702.33 72162.33 179648.67 72108.67 179595.00 72055.00C179562.60 72011.95 179530.27 71968.85 179497.83 71925.83C179476.56 71904.56 179455.28 71883.28 179434.00 71862.00C179434.00 71840.67 179434.00 71819.33 179434.00 71798.00C179412.67 71798.00 179391.33 71798.00 179370.00 71798.00C179359.33 71776.67 179348.67 71755.33 179338.00 71734.00C179230.67 71691.00 179123.33 71648.00 179016.00 71605.00C178994.59 71583.63 178973.26 71562.18 178951.80 71540.87C178919.54 71519.25 178887.27 71497.62 178855.00 71476.00C178801.67 71476.00 178748.33 71476.00 178695.00 71476.00C178652.00 71433.33 178609.00 71390.67 178566.00 71348.00C178576.67 71337.00 178587.33 71326.00 178598.00 71315.00C178598.00 71272.33 178598.00 71229.67 178598.00 71187.00C178566.00 71187.00 178534.00 71187.00 178502.00 71187.00C178480.33 71176.33 178458.67 71165.67 178437.00 71155.00C178426.33 71155.00 178415.67 71155.00 178405.00 71155.00C178383.67 71144.33 178362.33 71133.67 178341.00 71123.00C178308.67 71155.00 178276.33 71187.00 178244.00 71219.00C178212.00 71208.33 178180.00 71197.67 178148.00 71187.00C178126.67 71197.67 178105.33 71208.33 178084.00 71219.00C178062.33 71240.33 178040.67 71261.67 178019.00 71283.00C178008.33 71304.67 177997.67 71326.33 177987.00 71348.00C177997.67 71358.67 178008.33 71369.33 178019.00 71380.00C178008.33 71390.67 177997.67 71401.33 177987.00 71412.00C177944.33 71412.00 177901.67 71412.00 177859.00 71412.00C177837.33 71401.33 177815.67 71390.67 177794.00 71380.00C177783.33 71369.33 177772.67 71358.67 177762.00 71348.00C177772.67 71337.00 177783.33 71326.00 177794.00 71315.00C177794.00 71304.33 177794.00 71293.67 177794.00 71283.00C177751.33 71304.67 177708.67 71326.33 177666.00 71348.00C177666.00 71326.33 177666.00 71304.67 177666.00 71283.00C177644.33 71293.67 177622.67 71304.33 177601.00 71315.00C177601.00 71304.33 177601.00 71293.67 177601.00 71283.00C177617.04 71267.39 177633.25 71251.96 177648.97 71236.03C177654.65 71230.35 177660.32 71224.68 177666.00 71219.00C177666.00 71187.00 177666.00 71155.00 177666.00 71123.00C177644.33 71112.00 177622.67 71101.00 177601.00 71090.00C177590.33 71068.67 177579.67 71047.33 177569.00 71026.00C177569.00 71015.33 177569.00 71004.67 177569.00 70994.00C177547.67 70972.67 177526.33 70951.33 177505.00 70930.00C177494.33 70908.33 177483.67 70886.67 177473.00 70865.00C177462.33 70854.33 177451.67 70843.67 177441.00 70833.00C177441.00 70822.33 177441.00 70811.67 177441.00 70801.00C177430.00 70801.00 177419.00 70801.00 177408.00 70801.00C177397.33 70790.33 177386.67 70779.67 177376.00 70769.00C177376.00 70747.67 177376.00 70726.33 177376.00 70705.00C177354.67 70683.33 177333.33 70661.67 177312.00 70640.00C177301.33 70650.67 177290.67 70661.33 177280.00 70672.00C177258.67 70672.00 177237.33 70672.00 177216.00 70672.00C177183.67 70704.33 177151.33 70736.67 177119.00 70769.00C177108.33 70769.00 177097.67 70769.00 177087.00 70769.00C177055.00 70790.33 177023.00 70811.67 176991.00 70833.00C177001.67 70843.67 177012.33 70854.33 177023.00 70865.00C177023.00 70886.67 177023.00 70908.33 177023.00 70930.00C177001.33 70951.33 176979.67 70972.67 176958.00 70994.00C176969.00 71004.67 176980.00 71015.33 176991.00 71026.00C176980.00 71090.33 176969.00 71154.67 176958.00 71219.00C176947.33 71229.67 176936.67 71240.33 176926.00 71251.00C176915.33 71272.33 176904.67 71293.67 176894.00 71315.00C176872.67 71336.67 176851.33 71358.33 176830.00 71380.00C176808.33 71390.67 176786.67 71401.33 176765.00 71412.00C176764.95 71422.74 176765.10 71433.51 176764.93 71444.22C176754.28 71476.48 176743.64 71508.74 176733.00 71541.00C176722.33 71530.00 176711.67 71519.00 176701.00 71508.00C176679.67 71519.00 176658.33 71530.00 176637.00 71541.00C176626.33 71562.33 176615.67 71583.67 176605.00 71605.00C176562.00 71648.00 176519.00 71691.00 176476.00 71734.00C176465.33 71755.33 176454.67 71776.67 176444.00 71798.00C176422.67 71819.33 176401.33 71840.67 176380.00 71862.00C176380.00 71872.67 176380.00 71883.33 176380.00 71894.00C176358.33 71915.67 176336.67 71937.33 176315.00 71959.00C176304.33 71991.00 176293.67 72023.00 176283.00 72055.00C176261.67 72065.67 176240.33 72076.33 176219.00 72087.00C176165.33 72087.00 176111.67 72087.00 176058.00 72087.00C176047.33 72108.33 176036.67 72129.67 176026.00 72151.00C175993.67 72151.00 175961.33 72151.00 175929.00 72151.00C175907.67 72162.00 175886.33 72173.00 175865.00 72184.00C175822.33 72184.00 175779.67 72184.00 175737.00 72184.00C175720.96 72199.61 175704.75 72215.04 175689.03 72230.97C175629.68 72290.32 175570.34 72349.66 175511.00 72409.00C175489.67 72451.67 175468.33 72494.33 175447.00 72537.00C175447.00 72569.33 175447.00 72601.67 175447.00 72634.00C175404.33 72676.67 175361.67 72719.33 175319.00 72762.00C175286.67 72773.00 175254.33 72784.00 175222.00 72795.00C175168.33 72848.33 175114.67 72901.67 175061.00 72955.00C175039.63 72890.60 175018.32 72826.17 174996.90 72761.79C174943.27 72644.19 174889.63 72526.60 174836.00 72409.00C174846.67 72387.33 174857.33 72365.67 174868.00 72344.00C174846.67 72290.67 174825.33 72237.33 174804.00 72184.00C174782.67 72151.67 174761.33 72119.33 174740.00 72087.00C174718.67 72065.67 174697.33 72044.33 174676.00 72023.00C174665.00 71980.00 174654.00 71937.00 174643.00 71894.00C174675.33 71862.00 174707.67 71830.00 174740.00 71798.00C174718.67 71798.00 174697.33 71798.00 174676.00 71798.00C174665.00 71776.67 174654.00 71755.33 174643.00 71734.00C174654.00 71712.33 174665.00 71690.67 174676.00 71669.00C174708.00 71647.67 174740.00 71626.33 174772.00 71605.00C174782.67 71594.33 174793.33 71583.67 174804.00 71573.00C174803.95 71562.26 174804.10 71551.49 174803.93 71540.78C174793.28 71508.52 174782.64 71476.26 174772.00 71444.00C174740.00 71412.00 174708.00 71380.00 174676.00 71348.00C174676.00 71326.33 174676.00 71304.67 174676.00 71283.00C174643.67 71283.00 174611.33 71283.00 174579.00 71283.00C174557.67 71293.67 174536.33 71304.33 174515.00 71315.00C174504.33 71315.00 174493.67 71315.00 174483.00 71315.00C174407.67 71390.33 174332.33 71465.67 174257.00 71541.00C174224.93 71529.96 174192.84 71518.99 174160.79 71507.90C174127.81 71491.41 174094.87 71474.84 174061.75 71458.64C174051.78 71453.70 174041.74 71448.86 174031.81 71443.86C173989.16 71411.84 173946.45 71379.89 173903.83 71347.83C173871.56 71315.56 173839.28 71283.28 173807.00 71251.00C173785.64 71218.93 173764.21 71186.89 173742.90 71154.79C173732.26 71133.19 173721.63 71111.60 173711.00 71090.00C173711.00 71079.33 173711.00 71068.67 173711.00 71058.00C173721.67 71047.33 173732.33 71036.67 173743.00 71026.00C173743.00 71015.33 173743.00 71004.67 173743.00 70994.00C173753.81 70983.26 173764.50 70972.38 173775.38 70961.72C173818.25 70929.48 173861.13 70897.24 173904.00 70865.00C173914.67 70843.67 173925.33 70822.33 173936.00 70801.00C173946.67 70758.00 173957.33 70715.00 173968.00 70672.00C173946.60 70650.63 173925.25 70629.19 173903.81 70607.86C173860.87 70575.91 173817.94 70543.95 173775.00 70512.00C173710.67 70501.00 173646.33 70490.00 173582.00 70479.00C173550.00 70490.00 173518.00 70501.00 173486.00 70512.00C173432.30 70597.74 173378.56 70683.45 173324.89 70769.21C173314.26 70790.47 173303.63 70811.74 173293.00 70833.00C173293.00 70929.67 173293.00 71026.33 173293.00 71123.00C173271.67 71165.67 173250.33 71208.33 173229.00 71251.00C173218.00 71251.00 173207.00 71251.00 173196.00 71251.00C173174.67 71261.67 173153.33 71272.33 173132.00 71283.00C173089.33 71261.67 173046.67 71240.33 173004.00 71219.00C172973.11 71157.63 172942.08 71096.35 172911.43 71034.86C172909.99 71031.82 172908.26 71028.85 172907.00 71025.76C172907.00 70993.84 172907.00 70961.92 172907.00 70930.00C172896.30 70876.26 172885.67 70822.50 172874.93 70768.78C172864.28 70736.52 172853.64 70704.26 172843.00 70672.00C172821.33 70650.67 172799.67 70629.33 172778.00 70608.00C172746.00 70597.33 172714.00 70586.67 172682.00 70576.00C172639.00 70533.00 172596.00 70490.00 172553.00 70447.00C172510.29 70414.94 172467.51 70382.94 172424.83 70350.83C172414.22 70340.22 172403.61 70329.61 172393.00 70319.00C172381.85 70318.96 172370.68 70319.09 172359.53 70318.93C172284.69 70308.29 172209.84 70297.65 172135.00 70287.00C172113.67 70287.00 172092.33 70287.00 172071.00 70287.00C172049.67 70297.67 172028.33 70308.33 172007.00 70319.00C171942.67 70329.67 171878.33 70340.33 171814.00 70351.00C171781.67 70361.67 171749.33 70372.33 171717.00 70383.00C171695.67 70383.00 171674.33 70383.00 171653.00 70383.00C171642.33 70372.33 171631.67 70361.67 171621.00 70351.00C171599.67 70340.33 171578.33 70329.67 171557.00 70319.00C171535.33 70276.00 171513.67 70233.00 171492.00 70190.00C171449.33 70168.67 171406.67 70147.33 171364.00 70126.00C171342.33 70104.67 171320.67 70083.33 171299.00 70062.00C171288.26 70061.96 171277.50 70062.08 171266.77 70061.94C171222.58 70050.58 171178.42 70039.10 171134.20 70027.81C171092.57 70017.51 171050.95 70007.11 171009.31 69996.86C170955.65 69986.17 170901.96 69975.57 170848.32 69964.83C170805.88 69954.22 170763.44 69943.61 170721.00 69933.00C170721.00 69922.33 170721.00 69911.67 170721.00 69901.00C170699.33 69879.33 170677.67 69857.67 170656.00 69836.00C170640.39 69852.04 170624.96 69868.25 170609.03 69883.97C170603.35 69889.65 170597.68 69895.32 170592.00 69901.00C170560.00 69911.67 170528.00 69922.33 170496.00 69933.00C170463.67 69922.33 170431.33 69911.67 170399.00 69901.00C170399.00 69911.67 170399.00 69922.33 170399.00 69933.00C170388.33 69933.00 170377.67 69933.00 170367.00 69933.00C170345.67 69911.67 170324.33 69890.33 170303.00 69869.00C170292.00 69847.33 170281.00 69825.67 170270.00 69804.00C170270.00 69739.67 170270.00 69675.33 170270.00 69611.00C170281.00 69600.33 170292.00 69589.67 170303.00 69579.00C170292.00 69557.67 170281.00 69536.33 170270.00 69515.00C170259.33 69504.33 170248.67 69493.67 170238.00 69483.00C170216.67 69472.33 170195.33 69461.67 170174.00 69451.00C170163.33 69418.67 170152.67 69386.33 170142.00 69354.00C170142.00 69332.67 170142.00 69311.33 170142.00 69290.00C170131.33 69268.67 170120.67 69247.33 170110.00 69226.00C170099.33 69215.00 170088.67 69204.00 170078.00 69193.00C169992.00 69193.00 169906.00 69193.00 169820.00 69193.00C169777.33 69150.33 169734.67 69107.67 169692.00 69065.00C169670.33 69065.00 169648.67 69065.00 169627.00 69065.00C169584.33 69075.67 169541.67 69086.33 169499.00 69097.00C169488.33 69097.00 169477.67 69097.00 169467.00 69097.00C169456.00 69129.00 169445.00 69161.00 169434.00 69193.00C169391.33 69193.00 169348.67 69193.00 169306.00 69193.00C169295.33 69204.00 169284.67 69215.00 169274.00 69226.00C169274.00 69247.33 169274.00 69268.67 169274.00 69290.00C169241.67 69311.33 169209.33 69332.67 169177.00 69354.00C169112.67 69375.33 169048.33 69396.67 168984.00 69418.00C168973.33 69429.00 168962.67 69440.00 168952.00 69451.00C168909.33 69461.67 168866.67 69472.33 168824.00 69483.00C168807.96 69498.61 168791.75 69514.04 168776.03 69529.97C168770.35 69535.65 168764.68 69541.32 168759.00 69547.00C168759.00 69557.67 168759.00 69568.33 168759.00 69579.00C168694.67 69600.33 168630.33 69621.67 168566.00 69643.00C168534.00 69643.00 168502.00 69643.00 168470.00 69643.00C168437.67 69654.00 168405.33 69665.00 168373.00 69676.00C168309.00 69676.00 168245.00 69676.00 168181.00 69676.00C168170.00 69708.00 168159.00 69740.00 168148.00 69772.00C168169.67 69815.00 168191.33 69858.00 168213.00 69901.00C168223.67 69954.67 168234.33 70008.33 168245.00 70062.00C168245.00 70094.00 168245.00 70126.00 168245.00 70158.00C168255.67 70190.00 168266.33 70222.00 168277.00 70254.00C168261.39 70270.04 168245.96 70286.25 168230.03 70301.97C168213.68 70318.32 168197.34 70334.66 168181.00 70351.00C168159.26 70350.98 168137.51 70351.04 168115.77 70350.97C168040.84 70340.31 167965.92 70329.66 167891.00 70319.00C167826.67 70361.67 167762.33 70404.33 167698.00 70447.00C167676.67 70447.00 167655.33 70447.00 167634.00 70447.00C167612.67 70436.33 167591.33 70425.67 167570.00 70415.00C167483.93 70436.37 167397.84 70457.68 167311.78 70479.08C167279.85 70490.05 167247.93 70501.02 167216.00 70512.00C167205.33 70522.67 167194.67 70533.33 167184.00 70544.00C167184.00 70586.67 167184.00 70629.33 167184.00 70672.00C167216.00 70736.33 167248.00 70800.67 167280.00 70865.00C167290.67 70908.00 167301.33 70951.00 167312.00 70994.00C167280.00 71058.33 167248.00 71122.67 167216.00 71187.00C167194.67 71197.67 167173.33 71208.33 167152.00 71219.00C167141.00 71251.00 167130.00 71283.00 167119.00 71315.00C167108.14 71326.25 167097.17 71337.40 167086.39 71348.71C167022.26 71423.48 166958.13 71498.24 166894.00 71573.00C166861.93 71583.71 166829.83 71594.34 166797.79 71605.10C166776.53 71615.74 166755.26 71626.37 166734.00 71637.00C166626.67 71637.00 166519.33 71637.00 166412.00 71637.00C166369.00 71680.00 166326.00 71723.00 166283.00 71766.00C166219.00 71798.00 166155.00 71830.00 166091.00 71862.00C166037.33 71862.00 165983.67 71862.00 165930.00 71862.00C165919.33 71840.67 165908.67 71819.33 165898.00 71798.00C165865.67 71776.67 165833.33 71755.33 165801.00 71734.00C165769.00 71701.67 165737.00 71669.33 165705.00 71637.00C165694.33 71637.00 165683.67 71637.00 165673.00 71637.00C165662.00 71626.33 165651.00 71615.67 165640.00 71605.00C165608.00 71605.00 165576.00 71605.00 165544.00 71605.00C165501.00 71648.00 165458.00 71691.00 165415.00 71734.00C165393.66 71798.08 165372.25 71862.14 165350.95 71926.23C165340.30 71979.82 165329.65 72033.41 165319.00 72087.00C165329.67 72130.00 165340.33 72173.00 165351.00 72216.00C165340.33 72248.08 165329.57 72280.14 165318.96 72312.23C165297.64 72430.15 165276.32 72548.08 165255.00 72666.00C165233.33 72687.33 165211.67 72708.67 165190.00 72730.00C165168.67 72794.33 165147.33 72858.67 165126.00 72923.00C165126.00 72966.00 165126.00 73009.00 165126.00 73052.00C165083.00 73094.67 165040.00 73137.33 164997.00 73180.00C164986.26 73179.95 164975.49 73180.10 164964.78 73179.93C164932.85 73169.28 164900.93 73158.64 164869.00 73148.00C164836.67 73116.00 164804.33 73084.00 164772.00 73052.00C164750.67 73052.00 164729.33 73052.00 164708.00 73052.00C164686.67 73073.33 164665.33 73094.67 164644.00 73116.00C164611.61 73180.39 164579.30 73244.83 164546.87 73309.20C164525.58 73341.13 164504.29 73373.07 164483.00 73405.00C164472.33 73394.33 164461.67 73383.67 164451.00 73373.00C164418.67 73362.33 164386.33 73351.67 164354.00 73341.00C164332.67 73341.00 164311.33 73341.00 164290.00 73341.00C164257.67 73351.67 164225.33 73362.33 164193.00 73373.00C164182.33 73383.67 164171.67 73394.33 164161.00 73405.00C164150.33 73448.00 164139.67 73491.00 164129.00 73534.00C164118.33 73534.00 164107.67 73534.00 164097.00 73534.00C164074.86 73556.19 164052.62 73578.28 164030.54 73600.53C164020.70 73610.69 164010.85 73620.85 164001.00 73631.00C163968.67 73631.00 163936.33 73631.00 163904.00 73631.00C163850.33 73652.33 163796.67 73673.67 163743.00 73695.00C163671.50 73677.12 163600.00 73659.22 163528.45 73641.53C163514.30 73638.02 163500.15 73634.51 163486.00 73631.00C163432.33 73598.67 163378.67 73566.33 163325.00 73534.00C163314.33 73523.33 163303.67 73512.67 163293.00 73502.00C163250.33 73502.00 163207.67 73502.00 163165.00 73502.00C163122.00 73523.33 163079.00 73544.67 163036.00 73566.00C163057.33 73523.33 163078.67 73480.67 163100.00 73438.00C163100.00 73405.67 163100.00 73373.33 163100.00 73341.00C163121.67 73330.33 163143.33 73319.67 163165.00 73309.00C163175.67 73309.00 163186.33 73309.00 163197.00 73309.00C163197.00 73277.00 163197.00 73245.00 163197.00 73213.00C163186.33 73191.33 163175.67 73169.67 163165.00 73148.00C163186.33 73126.67 163207.67 73105.33 163229.00 73084.00C163218.33 73062.67 163207.67 73041.33 163197.00 73020.00C163207.67 73009.00 163218.33 72998.00 163229.00 72987.00C163196.67 72944.33 163164.33 72901.67 163132.00 72859.00C163143.00 72848.33 163154.00 72837.67 163165.00 72827.00C163175.67 72827.00 163186.33 72827.00 163197.00 72827.00C163197.00 72816.33 163197.00 72805.67 163197.00 72795.00C163229.00 72805.67 163261.00 72816.33 163293.00 72827.00C163314.33 72816.33 163335.67 72805.67 163357.00 72795.00C163357.00 72773.33 163357.00 72751.67 163357.00 72730.00C163389.33 72719.33 163421.67 72708.67 163454.00 72698.00C163464.67 72687.33 163475.33 72676.67 163486.00 72666.00C163486.00 72644.67 163486.00 72623.33 163486.00 72602.00C163475.33 72602.00 163464.67 72602.00 163454.00 72602.00C163454.00 72580.33 163454.00 72558.67 163454.00 72537.00C163443.33 72515.67 163432.67 72494.33 163422.00 72473.00C163443.33 72441.00 163464.67 72409.00 163486.00 72377.00C163486.00 72366.00 163486.00 72355.00 163486.00 72344.00C163496.67 72322.67 163507.33 72301.33 163518.00 72280.00C163518.00 72248.00 163518.00 72216.00 163518.00 72184.00C163528.67 72162.33 163539.33 72140.67 163550.00 72119.00C163528.67 72108.33 163507.33 72097.67 163486.00 72087.00C163475.33 72065.67 163464.67 72044.33 163454.00 72023.00C163411.00 72023.00 163368.00 72023.00 163325.00 72023.00C163292.93 72001.64 163260.89 71980.22 163228.79 71958.89C163207.53 71947.93 163186.26 71936.96 163165.00 71926.00C163154.00 71926.00 163143.00 71926.00 163132.00 71926.00C163132.00 71904.67 163132.00 71883.33 163132.00 71862.00C163121.33 71862.00 163110.67 71862.00 163100.00 71862.00C163078.67 71851.33 163057.33 71840.67 163036.00 71830.00C163014.67 71840.67 162993.33 71851.33 162972.00 71862.00C162972.00 71851.33 162972.00 71840.67 162972.00 71830.00C162950.33 71830.00 162928.67 71830.00 162907.00 71830.00C162896.33 71808.67 162885.67 71787.33 162875.00 71766.00C162853.67 71755.33 162832.33 71744.67 162811.00 71734.00C162821.67 71712.33 162832.33 71690.67 162843.00 71669.00C162832.33 71658.33 162821.67 71647.67 162811.00 71637.00C162811.00 71605.00 162811.00 71573.00 162811.00 71541.00C162800.33 71530.00 162789.67 71519.00 162779.00 71508.00C162779.00 71486.67 162779.00 71465.33 162779.00 71444.00C162762.43 71410.89 162745.96 71377.72 162729.11 71344.75C162713.19 71313.61 162697.66 71282.27 162682.00 71251.00C162682.00 71197.33 162682.00 71143.67 162682.00 71090.00C162660.67 71090.00 162639.33 71090.00 162618.00 71090.00C162618.00 71047.33 162618.00 71004.67 162618.00 70962.00C162585.67 70951.33 162553.33 70940.67 162521.00 70930.00C162521.00 70908.33 162521.00 70886.67 162521.00 70865.00C162499.67 70843.67 162478.33 70822.33 162457.00 70801.00C162457.00 70758.00 162457.00 70715.00 162457.00 70672.00C162446.33 70672.00 162435.67 70672.00 162425.00 70672.00C162403.67 70650.67 162382.33 70629.33 162361.00 70608.00C162361.00 70586.67 162361.00 70565.33 162361.00 70544.00C162318.00 70554.67 162275.00 70565.33 162232.00 70576.00C162210.67 70576.00 162189.33 70576.00 162168.00 70576.00C162168.00 70554.67 162168.00 70533.33 162168.00 70512.00C162135.67 70501.00 162103.33 70490.00 162071.00 70479.00C162049.67 70490.00 162028.33 70501.00 162007.00 70512.00C161996.33 70512.00 161985.67 70512.00 161975.00 70512.00C161942.67 70533.33 161910.33 70554.67 161878.00 70576.00C161856.67 70565.33 161835.33 70554.67 161814.00 70544.00C161824.67 70501.00 161835.33 70458.00 161846.00 70415.00C161835.33 70372.33 161824.67 70329.67 161814.00 70287.00C161749.67 70287.00 161685.33 70287.00 161621.00 70287.00C161610.33 70297.67 161599.67 70308.33 161589.00 70319.00C161589.00 70308.33 161589.00 70297.67 161589.00 70287.00C161557.00 70287.00 161525.00 70287.00 161493.00 70287.00C161482.00 70265.33 161471.00 70243.67 161460.00 70222.00C161449.33 70211.33 161438.67 70200.67 161428.00 70190.00C161428.00 70179.33 161428.00 70168.67 161428.00 70158.00C161417.33 70147.33 161406.67 70136.67 161396.00 70126.00C161385.33 70104.67 161374.67 70083.33 161364.00 70062.00C161364.00 70051.00 161364.00 70040.00 161364.00 70029.00C161374.67 70018.33 161385.33 70007.67 161396.00 69997.00C161396.00 69986.33 161396.00 69975.67 161396.00 69965.00C161406.67 69943.67 161417.33 69922.33 161428.00 69901.00C161353.00 69911.67 161278.00 69922.33 161203.00 69933.00C161192.33 69922.33 161181.67 69911.67 161171.00 69901.00C161160.33 69911.67 161149.67 69922.33 161139.00 69933.00C161128.33 69922.33 161117.67 69911.67 161107.00 69901.00C161096.33 69911.67 161085.67 69922.33 161075.00 69933.00C161064.00 69922.33 161053.00 69911.67 161042.00 69901.00C161031.33 69911.67 161020.67 69922.33 161010.00 69933.00C160978.00 69922.33 160946.00 69911.67 160914.00 69901.00C160903.33 69901.00 160892.67 69901.00 160882.00 69901.00C160871.33 69911.67 160860.67 69922.33 160850.00 69933.00C160850.00 69943.67 160850.00 69954.33 160850.00 69965.00C160817.67 69965.00 160785.33 69965.00 160753.00 69965.00C160731.67 69986.33 160710.33 70007.67 160689.00 70029.00C160667.33 70040.00 160645.67 70051.00 160624.00 70062.00C160613.33 70062.00 160602.67 70062.00 160592.00 70062.00C160560.00 70040.33 160528.00 70018.67 160496.00 69997.00C160463.67 69997.00 160431.33 69997.00 160399.00 69997.00C160356.33 69965.00 160313.67 69933.00 160271.00 69901.00z"},"br-10":{"name":"Maranhão","path":"M125256.00 53503.00C125566.67 53245.67 125877.33 52988.33 126188.00 52731.00C126338.00 52623.67 126488.00 52516.33 126638.00 52409.00C126649.00 52387.67 126660.00 52366.33 126671.00 52345.00C126703.00 52323.67 126735.00 52302.33 126767.00 52281.00C126756.33 52259.33 126745.67 52237.67 126735.00 52216.00C126745.67 52205.33 126756.33 52194.67 126767.00 52184.00C126777.67 52184.00 126788.33 52184.00 126799.00 52184.00C126809.67 52194.67 126820.33 52205.33 126831.00 52216.00C126863.53 52194.49 126896.16 52173.11 126928.63 52151.51C127228.42 51916.01 127528.21 51680.50 127828.00 51445.00C127849.56 51423.18 127870.96 51401.21 127892.61 51379.49C128074.74 51229.66 128256.87 51079.83 128439.00 50930.00C128471.52 50908.48 128504.17 50887.12 128536.62 50865.50C128590.96 50821.63 128645.41 50777.91 128699.67 50733.95C128827.54 50627.65 128955.34 50521.26 129083.25 50415.01C129286.50 50254.68 129489.75 50094.34 129693.00 49934.00C129714.45 49901.59 129735.73 49869.04 129757.28 49836.72C129778.86 49815.48 129800.43 49794.24 129822.00 49773.00C129854.00 49783.67 129886.00 49794.33 129918.00 49805.00C129939.33 49805.00 129960.67 49805.00 129982.00 49805.00C129993.00 49826.33 130004.00 49847.67 130015.00 49869.00C130025.67 49858.33 130036.33 49847.67 130047.00 49837.00C130068.33 49847.67 130089.67 49858.33 130111.00 49869.00C130154.00 49869.00 130197.00 49869.00 130240.00 49869.00C130272.00 49879.67 130304.00 49890.33 130336.00 49901.00C130379.00 49869.00 130422.00 49837.00 130465.00 49805.00C130486.33 49773.00 130507.67 49741.00 130529.00 49709.00C130559.80 49693.21 130590.39 49676.98 130621.56 49661.94C130633.78 49655.83 130646.19 49650.00 130658.28 49643.72C130669.07 49632.80 130680.12 49622.13 130690.74 49611.07C130733.16 49557.71 130775.58 49504.36 130818.00 49451.00C130839.67 49386.67 130861.33 49322.33 130883.00 49258.00C130936.33 49204.67 130989.67 49151.33 131043.00 49098.00C131086.12 49033.75 131129.12 48969.41 131172.00 48905.00C131172.00 48883.33 131172.00 48861.67 131172.00 48840.00C131193.33 48818.67 131214.67 48797.33 131236.00 48776.00C131236.00 48754.67 131236.00 48733.33 131236.00 48712.00C131257.67 48690.33 131279.33 48668.67 131301.00 48647.00C131290.33 48647.00 131279.67 48647.00 131269.00 48647.00C131279.67 48625.67 131290.33 48604.33 131301.00 48583.00C131301.00 48561.67 131301.00 48540.33 131301.00 48519.00C131311.67 48508.33 131322.33 48497.67 131333.00 48487.00C131322.33 48476.33 131311.67 48465.67 131301.00 48455.00C131343.67 48433.33 131386.33 48411.67 131429.00 48390.00C131439.67 48368.67 131450.33 48347.33 131461.00 48326.00C131482.67 48326.00 131504.33 48326.00 131526.00 48326.00C131526.00 48304.67 131526.00 48283.33 131526.00 48262.00C131547.33 48272.67 131568.67 48283.33 131590.00 48294.00C131600.67 48272.33 131611.33 48250.67 131622.00 48229.00C131632.67 48229.00 131643.33 48229.00 131654.00 48229.00C131675.67 48197.00 131697.33 48165.00 131719.00 48133.00C131740.33 48133.00 131761.67 48133.00 131783.00 48133.00C131772.33 48090.00 131761.67 48047.00 131751.00 48004.00C131761.67 48004.00 131772.33 48004.00 131783.00 48004.00C131783.00 47993.33 131783.00 47982.67 131783.00 47972.00C131793.67 47961.33 131804.33 47950.67 131815.00 47940.00C131815.00 47918.67 131815.00 47897.33 131815.00 47876.00C131825.67 47865.33 131836.33 47854.67 131847.00 47844.00C131836.33 47833.00 131825.67 47822.00 131815.00 47811.00C131836.33 47800.33 131857.67 47789.67 131879.00 47779.00C131890.00 47789.67 131901.00 47800.33 131912.00 47811.00C131922.67 47800.33 131933.33 47789.67 131944.00 47779.00C131944.00 47768.33 131944.00 47757.67 131944.00 47747.00C131933.33 47725.67 131922.67 47704.33 131912.00 47683.00C131922.67 47672.33 131933.33 47661.67 131944.00 47651.00C131933.33 47640.33 131922.67 47629.67 131912.00 47619.00C131912.00 47597.33 131912.00 47575.67 131912.00 47554.00C131901.00 47532.67 131890.00 47511.33 131879.00 47490.00C131890.00 47479.33 131901.00 47468.67 131912.00 47458.00C131912.00 47447.33 131912.00 47436.67 131912.00 47426.00C131933.33 47404.33 131954.67 47382.67 131976.00 47361.00C131976.00 47329.00 131976.00 47297.00 131976.00 47265.00C131986.67 47265.00 131997.33 47265.00 132008.00 47265.00C132008.00 47243.67 132008.00 47222.33 132008.00 47201.00C132018.67 47190.00 132029.33 47179.00 132040.00 47168.00C132061.67 47168.00 132083.33 47168.00 132105.00 47168.00C132094.00 47179.00 132083.00 47190.00 132072.00 47201.00C132083.00 47201.00 132094.00 47201.00 132105.00 47201.00C132105.00 47190.00 132105.00 47179.00 132105.00 47168.00C132126.33 47168.00 132147.67 47168.00 132169.00 47168.00C132169.00 47157.33 132169.00 47146.67 132169.00 47136.00C132179.67 47136.00 132190.33 47136.00 132201.00 47136.00C132201.00 47125.33 132201.00 47114.67 132201.00 47104.00C132211.67 47093.33 132222.33 47082.67 132233.00 47072.00C132254.33 47072.00 132275.67 47072.00 132297.00 47072.00C132297.00 47061.33 132297.00 47050.67 132297.00 47040.00C132329.33 47018.33 132361.67 46996.67 132394.00 46975.00C132404.67 46953.67 132415.33 46932.33 132426.00 46911.00C132458.33 46911.00 132490.67 46911.00 132523.00 46911.00C132533.67 46889.67 132544.33 46868.33 132555.00 46847.00C132565.67 46847.00 132576.33 46847.00 132587.00 46847.00C132597.67 46825.67 132608.33 46804.33 132619.00 46783.00C132629.67 46793.67 132640.33 46804.33 132651.00 46815.00C132651.00 46793.33 132651.00 46771.67 132651.00 46750.00C132661.67 46750.00 132672.33 46750.00 132683.00 46750.00C132683.00 46718.00 132683.00 46686.00 132683.00 46654.00C132693.67 46654.00 132704.33 46654.00 132715.00 46654.00C132726.00 46643.33 132737.00 46632.67 132748.00 46622.00C132748.00 46589.67 132748.00 46557.33 132748.00 46525.00C132769.33 46514.33 132790.67 46503.67 132812.00 46493.00C132833.33 46471.67 132854.67 46450.33 132876.00 46429.00C132886.67 46439.67 132897.33 46450.33 132908.00 46461.00C132908.00 46418.00 132908.00 46375.00 132908.00 46332.00C132951.00 46332.00 132994.00 46332.00 133037.00 46332.00C133047.67 46300.00 133058.33 46268.00 133069.00 46236.00C133090.33 46225.33 133111.67 46214.67 133133.00 46204.00C133144.00 46182.33 133155.00 46160.67 133166.00 46139.00C133155.00 46117.67 133144.00 46096.33 133133.00 46075.00C133154.67 46064.33 133176.33 46053.67 133198.00 46043.00C133198.00 46011.00 133198.00 45979.00 133198.00 45947.00C133219.33 45936.00 133240.67 45925.00 133262.00 45914.00C133262.00 45860.67 133262.00 45807.33 133262.00 45754.00C133272.67 45732.33 133283.33 45710.67 133294.00 45689.00C133294.00 45667.67 133294.00 45646.33 133294.00 45625.00C133283.33 45614.33 133272.67 45603.67 133262.00 45593.00C133283.33 45582.33 133304.67 45571.67 133326.00 45561.00C133325.94 45539.21 133326.13 45517.39 133325.90 45495.61C133315.27 45453.08 133304.63 45410.54 133294.00 45368.00C133326.33 45346.33 133358.67 45324.67 133391.00 45303.00C133380.33 45292.33 133369.67 45281.67 133359.00 45271.00C133348.00 45281.67 133337.00 45292.33 133326.00 45303.00C133326.00 45281.67 133326.00 45260.33 133326.00 45239.00C133315.33 45228.33 133304.67 45217.67 133294.00 45207.00C133304.67 45207.00 133315.33 45207.00 133326.00 45207.00C133337.00 45196.33 133348.00 45185.67 133359.00 45175.00C133348.00 45164.33 133337.00 45153.67 133326.00 45143.00C133337.00 45143.00 133348.00 45143.00 133359.00 45143.00C133348.00 45143.00 133337.00 45143.00 133326.00 45143.00C133337.00 45132.33 133348.00 45121.67 133359.00 45111.00C133348.00 45100.00 133337.00 45089.00 133326.00 45078.00C133337.02 45067.19 133348.33 45056.59 133359.18 45045.64C133369.79 45024.43 133380.39 45003.21 133391.00 44982.00C133401.67 44982.00 133412.33 44982.00 133423.00 44982.00C133412.33 44960.67 133401.67 44939.33 133391.00 44918.00C133401.67 44907.33 133412.33 44896.67 133423.00 44886.00C133412.33 44875.00 133401.67 44864.00 133391.00 44853.00C133391.00 44831.67 133391.00 44810.33 133391.00 44789.00C133412.33 44789.00 133433.67 44789.00 133455.00 44789.00C133455.00 44767.67 133455.00 44746.33 133455.00 44725.00C133476.33 44714.33 133497.67 44703.67 133519.00 44693.00C133519.00 44682.00 133519.00 44671.00 133519.00 44660.00C133540.67 44660.00 133562.33 44660.00 133584.00 44660.00C133594.81 44649.31 133605.42 44638.34 133616.36 44627.82C133637.57 44617.21 133658.79 44606.61 133680.00 44596.00C133669.33 44585.33 133658.67 44574.67 133648.00 44564.00C133669.33 44564.00 133690.67 44564.00 133712.00 44564.00C133690.67 44531.67 133669.33 44499.33 133648.00 44467.00C133648.00 44456.33 133648.00 44445.67 133648.00 44435.00C133669.33 44435.00 133690.67 44435.00 133712.00 44435.00C133712.00 44445.67 133712.00 44456.33 133712.00 44467.00C133722.67 44467.00 133733.33 44467.00 133744.00 44467.00C133733.33 44424.33 133722.67 44381.67 133712.00 44339.00C133744.33 44349.67 133776.67 44360.33 133809.00 44371.00C133809.00 44349.67 133809.00 44328.33 133809.00 44307.00C133798.00 44307.00 133787.00 44307.00 133776.00 44307.00C133776.00 44296.33 133776.00 44285.67 133776.00 44275.00C133787.00 44275.00 133798.00 44275.00 133809.00 44275.00C133798.00 44264.00 133787.00 44253.00 133776.00 44242.00C133797.67 44242.00 133819.33 44242.00 133841.00 44242.00C133830.33 44220.67 133819.67 44199.33 133809.00 44178.00C133798.00 44178.00 133787.00 44178.00 133776.00 44178.00C133776.00 44156.67 133776.00 44135.33 133776.00 44114.00C133787.00 44114.00 133798.00 44114.00 133809.00 44114.00C133809.00 44103.33 133809.00 44092.67 133809.00 44082.00C133809.00 44092.67 133809.00 44103.33 133809.00 44114.00C133819.67 44103.33 133830.33 44092.67 133841.00 44082.00C133830.33 44060.33 133819.67 44038.67 133809.00 44017.00C133809.00 43995.67 133809.00 43974.33 133809.00 43953.00C133819.67 43953.00 133830.33 43953.00 133841.00 43953.00C133841.00 43921.00 133841.00 43889.00 133841.00 43857.00C133851.67 43867.67 133862.33 43878.33 133873.00 43889.00C133892.63 43869.48 133912.16 43849.85 133931.32 43829.86C133933.21 43827.91 133935.11 43825.95 133937.00 43824.00C133926.33 43824.00 133915.67 43824.00 133905.00 43824.00C133915.67 43824.00 133926.33 43824.00 133937.00 43824.00C133947.67 43813.33 133958.33 43802.67 133969.00 43792.00C133980.00 43802.67 133991.00 43813.33 134002.00 43824.00C134002.00 43813.33 134002.00 43802.67 134002.00 43792.00C134012.67 43792.00 134023.33 43792.00 134034.00 43792.00C134034.00 43781.33 134034.00 43770.67 134034.00 43760.00C134023.33 43760.00 134012.67 43760.00 134002.00 43760.00C134034.00 43728.00 134066.00 43696.00 134098.00 43664.00C134108.67 43674.67 134119.33 43685.33 134130.00 43696.00C134130.00 43706.67 134130.00 43717.33 134130.00 43728.00C134151.33 43717.33 134172.67 43706.67 134194.00 43696.00C134194.00 43685.33 134194.00 43674.67 134194.00 43664.00C134183.33 43653.00 134172.67 43642.00 134162.00 43631.00C134172.67 43631.00 134183.33 43631.00 134194.00 43631.00C134205.00 43652.67 134216.00 43674.33 134227.00 43696.00C134237.67 43696.00 134248.33 43696.00 134259.00 43696.00C134259.00 43663.67 134259.00 43631.33 134259.00 43599.00C134280.33 43609.67 134301.67 43620.33 134323.00 43631.00C134333.67 43609.67 134344.33 43588.33 134355.00 43567.00C134387.33 43567.00 134419.67 43567.00 134452.00 43567.00C134452.00 43545.67 134452.00 43524.33 134452.00 43503.00C134430.33 43492.33 134408.67 43481.67 134387.00 43471.00C134408.67 43449.33 134430.33 43427.67 134452.00 43406.00C134430.33 43384.67 134408.67 43363.33 134387.00 43342.00C134419.33 43342.00 134451.67 43342.00 134484.00 43342.00C134484.00 43299.33 134484.00 43256.67 134484.00 43214.00C134494.67 43203.00 134505.33 43192.00 134516.00 43181.00C134526.67 43192.00 134537.33 43203.00 134548.00 43214.00C134558.67 43214.00 134569.33 43214.00 134580.00 43214.00C134590.67 43192.33 134601.33 43170.67 134612.00 43149.00C134601.33 43138.33 134590.67 43127.67 134580.00 43117.00C134590.67 43106.33 134601.33 43095.67 134612.00 43085.00C134633.67 43085.00 134655.33 43085.00 134677.00 43085.00C134687.67 43095.67 134698.33 43106.33 134709.00 43117.00C134709.00 43095.67 134709.00 43074.33 134709.00 43053.00C134687.67 43042.33 134666.33 43031.67 134645.00 43021.00C134666.33 43010.00 134687.67 42999.00 134709.00 42988.00C134709.00 42977.33 134709.00 42966.67 134709.00 42956.00C134676.67 42934.67 134644.33 42913.33 134612.00 42892.00C134633.67 42892.00 134655.33 42892.00 134677.00 42892.00C134698.33 42913.33 134719.67 42934.67 134741.00 42956.00C134751.67 42945.33 134762.33 42934.67 134773.00 42924.00C134762.33 42892.00 134751.67 42860.00 134741.00 42828.00C134773.33 42828.00 134805.67 42828.00 134838.00 42828.00C134848.67 42806.33 134859.33 42784.67 134870.00 42763.00C134859.33 42752.33 134848.67 42741.67 134838.00 42731.00C134838.00 42709.67 134838.00 42688.33 134838.00 42667.00C134816.33 42677.67 134794.67 42688.33 134773.00 42699.00C134762.33 42677.67 134751.67 42656.33 134741.00 42635.00C134773.33 42635.00 134805.67 42635.00 134838.00 42635.00C134848.67 42613.33 134859.33 42591.67 134870.00 42570.00C134880.67 42570.00 134891.33 42570.00 134902.00 42570.00C134902.00 42602.33 134902.00 42634.67 134902.00 42667.00C134912.67 42667.00 134923.33 42667.00 134934.00 42667.00C134944.67 42656.33 134955.33 42645.67 134966.00 42635.00C134955.33 42592.00 134944.67 42549.00 134934.00 42506.00C134966.00 42495.33 134998.00 42484.67 135030.00 42474.00C135041.00 42484.67 135052.00 42495.33 135063.00 42506.00C135063.00 42474.00 135063.00 42442.00 135063.00 42410.00C135073.67 42399.33 135084.33 42388.67 135095.00 42378.00C135084.33 42356.33 135073.67 42334.67 135063.00 42313.00C135063.00 42281.00 135063.00 42249.00 135063.00 42217.00C135084.33 42206.33 135105.67 42195.67 135127.00 42185.00C135116.33 42174.33 135105.67 42163.67 135095.00 42153.00C135116.33 42131.33 135137.67 42109.67 135159.00 42088.00C135137.67 42077.33 135116.33 42066.67 135095.00 42056.00C135095.00 42045.33 135095.00 42034.67 135095.00 42024.00C135105.67 42013.33 135116.33 42002.67 135127.00 41992.00C135148.33 42002.67 135169.67 42013.33 135191.00 42024.00C135201.67 42002.67 135212.33 41981.33 135223.00 41960.00C135212.33 41949.00 135201.67 41938.00 135191.00 41927.00C135180.33 41927.00 135169.67 41927.00 135159.00 41927.00C135159.00 41916.33 135159.00 41905.67 135159.00 41895.00C135180.33 41895.00 135201.67 41895.00 135223.00 41895.00C135223.00 41884.33 135223.00 41873.67 135223.00 41863.00C135212.33 41852.33 135201.67 41841.67 135191.00 41831.00C135169.67 41831.00 135148.33 41831.00 135127.00 41831.00C135127.00 41798.67 135127.00 41766.33 135127.00 41734.00C135148.33 41723.33 135169.67 41712.67 135191.00 41702.00C135191.00 41691.33 135191.00 41680.67 135191.00 41670.00C135180.31 41659.19 135169.34 41648.58 135158.82 41637.64C135148.21 41616.43 135137.61 41595.21 135127.00 41574.00C135137.67 41574.00 135148.33 41574.00 135159.00 41574.00C135137.67 41552.33 135116.33 41530.67 135095.00 41509.00C135084.33 41509.00 135073.67 41509.00 135063.00 41509.00C135063.00 41498.33 135063.00 41487.67 135063.00 41477.00C135084.33 41466.33 135105.67 41455.67 135127.00 41445.00C135148.33 41445.00 135169.67 41445.00 135191.00 41445.00C135201.67 41455.67 135212.33 41466.33 135223.00 41477.00C135243.00 41457.70 135262.91 41438.32 135282.45 41418.55C135284.30 41416.70 135286.15 41414.85 135288.00 41413.00C135277.33 41413.00 135266.67 41413.00 135256.00 41413.00C135256.00 41402.33 135256.00 41391.67 135256.00 41381.00C135266.67 41370.33 135277.33 41359.67 135288.00 41349.00C135277.33 41338.33 135266.67 41327.67 135256.00 41317.00C135266.67 41317.00 135277.33 41317.00 135288.00 41317.00C135309.33 41327.67 135330.67 41338.33 135352.00 41349.00C135373.33 41338.33 135394.67 41327.67 135416.00 41317.00C135405.33 41306.00 135394.67 41295.00 135384.00 41284.00C135384.00 41273.33 135384.00 41262.67 135384.00 41252.00C135373.33 41252.00 135362.67 41252.00 135352.00 41252.00C135362.67 41241.33 135373.33 41230.67 135384.00 41220.00C135405.33 41220.00 135426.67 41220.00 135448.00 41220.00C135469.67 41241.33 135491.33 41262.67 135513.00 41284.00C135523.67 41273.33 135534.33 41262.67 135545.00 41252.00C135555.67 41252.00 135566.33 41252.00 135577.00 41252.00C135555.67 41241.33 135534.33 41230.67 135513.00 41220.00C135523.67 41220.00 135534.33 41220.00 135545.00 41220.00C135545.00 41209.33 135545.00 41198.67 135545.00 41188.00C135523.67 41198.67 135502.33 41209.33 135481.00 41220.00C135481.00 41209.33 135481.00 41198.67 135481.00 41188.00C135491.67 41188.00 135502.33 41188.00 135513.00 41188.00C135502.33 41177.33 135491.67 41166.67 135481.00 41156.00C135470.00 41156.00 135459.00 41156.00 135448.00 41156.00C135448.00 41102.33 135448.00 41048.67 135448.00 40995.00C135437.33 40995.00 135426.67 40995.00 135416.00 40995.00C135416.00 41005.67 135416.00 41016.33 135416.00 41027.00C135405.19 41037.69 135394.58 41048.66 135383.64 41059.18C135362.43 41069.79 135341.21 41080.39 135320.00 41091.00C135309.33 41069.67 135298.67 41048.33 135288.00 41027.00C135288.00 40962.67 135288.00 40898.33 135288.00 40834.00C135277.33 40834.00 135266.67 40834.00 135256.00 40834.00C135245.00 40844.67 135234.00 40855.33 135223.00 40866.00C135212.33 40834.00 135201.67 40802.00 135191.00 40770.00C135191.00 40748.67 135191.00 40727.33 135191.00 40706.00C135169.67 40716.67 135148.33 40727.33 135127.00 40738.00C135127.00 40727.33 135127.00 40716.67 135127.00 40706.00C135116.33 40684.33 135105.67 40662.67 135095.00 40641.00C135116.33 40609.00 135137.67 40577.00 135159.00 40545.00C135180.33 40534.33 135201.67 40523.67 135223.00 40513.00C135223.00 40502.33 135223.00 40491.67 135223.00 40481.00C135244.67 40491.67 135266.33 40502.33 135288.00 40513.00C135288.00 40491.33 135288.00 40469.67 135288.00 40448.00C135309.33 40437.33 135330.67 40426.67 135352.00 40416.00C135352.00 40384.00 135352.00 40352.00 135352.00 40320.00C135362.67 40309.33 135373.33 40298.67 135384.00 40288.00C135394.67 40288.00 135405.33 40288.00 135416.00 40288.00C135437.67 40330.67 135459.33 40373.33 135481.00 40416.00C135491.67 40405.33 135502.33 40394.67 135513.00 40384.00C135513.00 40341.00 135513.00 40298.00 135513.00 40255.00C135534.33 40244.33 135555.67 40233.67 135577.00 40223.00C135609.00 40223.00 135641.00 40223.00 135673.00 40223.00C135694.81 40212.34 135716.53 40201.42 135738.39 40190.92C135791.93 40180.28 135845.46 40169.64 135899.00 40159.00C135888.00 40116.00 135877.00 40073.00 135866.00 40030.00C135887.67 40019.33 135909.33 40008.67 135931.00 39998.00C135941.67 39998.00 135952.33 39998.00 135963.00 39998.00C135973.67 39976.67 135984.33 39955.33 135995.00 39934.00C135973.67 39912.67 135952.33 39891.33 135931.00 39870.00C135931.00 39848.33 135931.00 39826.67 135931.00 39805.00C135941.67 39794.33 135952.33 39783.67 135963.00 39773.00C135973.67 39773.00 135984.33 39773.00 135995.00 39773.00C136005.67 39783.67 136016.33 39794.33 136027.00 39805.00C136048.79 39804.93 136070.62 39805.14 136092.38 39804.89C136167.26 39783.59 136242.13 39762.30 136317.00 39741.00C136317.00 39730.33 136317.00 39719.67 136317.00 39709.00C136295.33 39698.33 136273.67 39687.67 136252.00 39677.00C136241.33 39666.33 136230.67 39655.67 136220.00 39645.00C136230.67 39623.33 136241.33 39601.67 136252.00 39580.00C136241.33 39558.67 136230.67 39537.33 136220.00 39516.00C136220.00 39494.67 136220.00 39473.33 136220.00 39452.00C136230.67 39430.33 136241.33 39408.67 136252.00 39387.00C136241.33 39387.00 136230.67 39387.00 136220.00 39387.00C136220.00 39312.00 136220.00 39237.00 136220.00 39162.00C136241.33 39140.67 136262.67 39119.33 136284.00 39098.00C136299.79 39067.20 136316.02 39036.61 136331.06 39005.44C136337.04 38993.29 136343.02 38981.15 136349.00 38969.00C136349.00 38958.33 136349.00 38947.67 136349.00 38937.00C136327.33 38926.33 136305.67 38915.67 136284.00 38905.00C136252.00 38948.00 136220.00 38991.00 136188.00 39034.00C136177.33 39034.00 136166.67 39034.00 136156.00 39034.00C136134.67 39023.00 136113.33 39012.00 136092.00 39001.00C136092.00 38969.00 136092.00 38937.00 136092.00 38905.00C136134.75 38872.89 136177.60 38840.90 136220.28 38808.71C136230.85 38797.81 136241.43 38786.90 136252.00 38776.00C136252.00 38722.67 136252.00 38669.33 136252.00 38616.00C136262.67 38605.00 136273.33 38594.00 136284.00 38583.00C136295.00 38529.67 136306.00 38476.33 136317.00 38423.00C136295.33 38401.33 136273.67 38379.67 136252.00 38358.00C136252.00 38347.33 136252.00 38336.67 136252.00 38326.00C136284.33 38315.33 136316.67 38304.67 136349.00 38294.00C136359.67 38315.33 136370.33 38336.67 136381.00 38358.00C136402.33 38369.00 136423.67 38380.00 136445.00 38391.00C136466.33 38380.00 136487.67 38369.00 136509.00 38358.00C136520.00 38326.00 136531.00 38294.00 136542.00 38262.00C136563.33 38262.00 136584.67 38262.00 136606.00 38262.00C136627.33 38251.33 136648.67 38240.67 136670.00 38230.00C136670.00 38219.33 136670.00 38208.67 136670.00 38198.00C136691.67 38155.00 136713.33 38112.00 136735.00 38069.00C136756.33 38047.67 136777.67 38026.33 136799.00 38005.00C136831.00 37994.33 136863.00 37983.67 136895.00 37973.00C136916.67 37951.33 136938.33 37929.67 136960.00 37908.00C136938.33 37897.33 136916.67 37886.67 136895.00 37876.00C136895.00 37865.33 136895.00 37854.67 136895.00 37844.00C136938.00 37801.00 136981.00 37758.00 137024.00 37715.00C137024.00 37683.00 137024.00 37651.00 137024.00 37619.00C137013.33 37597.67 137002.67 37576.33 136992.00 37555.00C136992.00 37522.67 136992.00 37490.33 136992.00 37458.00C137002.67 37436.67 137013.33 37415.33 137024.00 37394.00C137034.72 37383.21 137045.60 37372.55 137056.22 37361.67C137077.48 37329.44 137098.74 37297.22 137120.00 37265.00C137120.00 37233.00 137120.00 37201.00 137120.00 37169.00C137141.67 37115.20 137163.52 37061.45 137185.09 37007.61C137206.39 36911.41 137227.70 36815.20 137249.00 36719.00C137238.33 36676.00 137227.67 36633.00 137217.00 36590.00C137195.67 36590.00 137174.33 36590.00 137153.00 36590.00C137153.00 36579.33 137153.00 36568.67 137153.00 36558.00C137206.33 36483.00 137259.67 36408.00 137313.00 36333.00C137302.33 36311.33 137291.67 36289.67 137281.00 36268.00C137270.31 36257.19 137259.34 36246.58 137248.82 36235.64C137238.21 36214.43 137227.61 36193.21 137217.00 36172.00C137163.33 36161.33 137109.67 36150.67 137056.00 36140.00C137024.00 36150.67 136992.00 36161.33 136960.00 36172.00C136949.33 36172.00 136938.67 36172.00 136928.00 36172.00C136917.00 36161.33 136906.00 36150.67 136895.00 36140.00C136873.67 36161.33 136852.33 36182.67 136831.00 36204.00C136820.33 36193.33 136809.67 36182.67 136799.00 36172.00C136788.33 36118.33 136777.67 36064.67 136767.00 36011.00C136777.67 35968.33 136788.33 35925.67 136799.00 35883.00C136818.30 35863.00 136837.68 35843.09 136857.45 35823.55C136859.47 35821.80 136861.18 35819.28 136863.40 35818.00C136927.60 35818.00 136991.80 35818.00 137056.00 35818.00C137088.33 35807.33 137120.67 35796.67 137153.00 35786.00C137174.33 35796.67 137195.67 35807.33 137217.00 35818.00C137238.33 35818.00 137259.67 35818.00 137281.00 35818.00C137291.67 35807.33 137302.33 35796.67 137313.00 35786.00C137313.00 35775.33 137313.00 35764.67 137313.00 35754.00C137323.67 35743.33 137334.33 35732.67 137345.00 35722.00C137356.12 35721.92 137367.29 35722.17 137378.38 35721.87C137410.25 35711.25 137442.13 35700.63 137474.00 35690.00C137495.33 35668.33 137516.67 35646.67 137538.00 35625.00C137549.00 35603.67 137560.00 35582.33 137571.00 35561.00C137571.00 35539.67 137571.00 35518.33 137571.00 35497.00C137560.00 35486.33 137549.00 35475.67 137538.00 35465.00C137538.00 35422.00 137538.00 35379.00 137538.00 35336.00C137559.67 35303.67 137581.33 35271.33 137603.00 35239.00C137603.00 35228.33 137603.00 35217.67 137603.00 35207.00C137592.33 35196.33 137581.67 35185.67 137571.00 35175.00C137571.00 35164.33 137571.00 35153.67 137571.00 35143.00C137603.00 35132.33 137635.00 35121.67 137667.00 35111.00C137645.67 35014.67 137624.33 34918.33 137603.00 34822.00C137603.00 34800.33 137603.00 34778.67 137603.00 34757.00C137561.51 34716.15 137519.87 34675.44 137479.20 34633.78C137466.80 34621.18 137454.40 34608.59 137442.00 34596.00C137506.33 34542.67 137570.67 34489.33 137635.00 34436.00C137635.00 34425.00 137635.00 34414.00 137635.00 34403.00C137602.67 34381.67 137570.33 34360.33 137538.00 34339.00C137581.00 34307.00 137624.00 34275.00 137667.00 34243.00C137677.67 34200.00 137688.33 34157.00 137699.00 34114.00C137709.67 34103.33 137720.33 34092.67 137731.00 34082.00C137742.07 34049.89 137753.02 34017.72 137764.18 33985.64C137774.78 33964.10 137785.39 33942.55 137796.00 33921.00C137796.00 33910.33 137796.00 33899.67 137796.00 33889.00C137753.00 33899.67 137710.00 33910.33 137667.00 33921.00C137667.00 33878.33 137667.00 33835.67 137667.00 33793.00C137635.00 33793.00 137603.00 33793.00 137571.00 33793.00C137549.33 33739.33 137527.67 33685.67 137506.00 33632.00C137549.00 33589.00 137592.00 33546.00 137635.00 33503.00C137613.67 33460.33 137592.33 33417.67 137571.00 33375.00C137603.00 33342.67 137635.00 33310.33 137667.00 33278.00C137699.33 33267.33 137731.67 33256.67 137764.00 33246.00C137774.67 33246.00 137785.33 33246.00 137796.00 33246.00C137796.00 33256.67 137796.00 33267.33 137796.00 33278.00C137838.67 33267.33 137881.33 33256.67 137924.00 33246.00C137924.00 33181.67 137924.00 33117.33 137924.00 33053.00C137934.67 33042.33 137945.33 33031.67 137956.00 33021.00C137956.00 33042.33 137956.00 33063.67 137956.00 33085.00C137967.00 33074.33 137978.00 33063.67 137989.00 33053.00C137989.00 33031.67 137989.00 33010.33 137989.00 32989.00C137999.67 32967.67 138010.33 32946.33 138021.00 32925.00C138031.67 32925.00 138042.33 32925.00 138053.00 32925.00C138053.00 32957.00 138053.00 32989.00 138053.00 33021.00C138074.33 33053.00 138095.67 33085.00 138117.00 33117.00C138117.00 33106.33 138117.00 33095.67 138117.00 33085.00C138106.33 33063.67 138095.67 33042.33 138085.00 33021.00C138085.00 32967.33 138085.00 32913.67 138085.00 32860.00C138095.67 32838.67 138106.33 32817.33 138117.00 32796.00C138127.67 32796.00 138138.33 32796.00 138149.00 32796.00C138170.67 32753.00 138192.33 32710.00 138214.00 32667.00C138214.00 32677.67 138214.00 32688.33 138214.00 32699.00C138214.00 32667.00 138214.00 32635.00 138214.00 32603.00C138224.67 32603.00 138235.33 32603.00 138246.00 32603.00C138256.67 32613.67 138267.33 32624.33 138278.00 32635.00C138278.00 32656.33 138278.00 32677.67 138278.00 32699.00C138288.67 32699.00 138299.33 32699.00 138310.00 32699.00C138310.00 32645.67 138310.00 32592.33 138310.00 32539.00C138320.67 32549.67 138331.33 32560.33 138342.00 32571.00C138342.00 32549.33 138342.00 32527.67 138342.00 32506.00C138385.00 32506.00 138428.00 32506.00 138471.00 32506.00C138471.00 32527.67 138471.00 32549.33 138471.00 32571.00C138449.67 32571.00 138428.33 32571.00 138407.00 32571.00C138407.00 32581.67 138407.00 32592.33 138407.00 32603.00C138417.67 32592.33 138428.33 32581.67 138439.00 32571.00C138449.67 32581.67 138460.33 32592.33 138471.00 32603.00C138471.00 32624.33 138471.00 32645.67 138471.00 32667.00C138481.67 32667.00 138492.33 32667.00 138503.00 32667.00C138503.00 32677.67 138503.00 32688.33 138503.00 32699.00C138481.67 32710.00 138460.33 32721.00 138439.00 32732.00C138439.00 32721.00 138439.00 32710.00 138439.00 32699.00C138406.67 32699.00 138374.33 32699.00 138342.00 32699.00C138374.33 32699.00 138406.67 32699.00 138439.00 32699.00C138439.00 32731.33 138439.00 32763.67 138439.00 32796.00C138428.33 32796.00 138417.67 32796.00 138407.00 32796.00C138396.00 32817.33 138385.00 32838.67 138374.00 32860.00C138385.14 32849.31 138396.10 32838.35 138407.36 32827.82C138428.57 32817.21 138449.79 32806.61 138471.00 32796.00C138481.67 32796.00 138492.33 32796.00 138503.00 32796.00C138503.00 32785.33 138503.00 32774.67 138503.00 32764.00C138503.00 32817.67 138503.00 32871.33 138503.00 32925.00C138471.00 32925.00 138439.00 32925.00 138407.00 32925.00C138385.33 32935.67 138363.67 32946.33 138342.00 32957.00C138352.67 32967.67 138363.33 32978.33 138374.00 32989.00C138352.67 33010.33 138331.33 33031.67 138310.00 33053.00C138331.33 33042.33 138352.67 33031.67 138374.00 33021.00C138374.00 33042.33 138374.00 33063.67 138374.00 33085.00C138385.00 33074.33 138396.00 33063.67 138407.00 33053.00C138396.00 33042.33 138385.00 33031.67 138374.00 33021.00C138385.00 32999.67 138396.00 32978.33 138407.00 32957.00C138428.33 32957.00 138449.67 32957.00 138471.00 32957.00C138471.00 32967.67 138471.00 32978.33 138471.00 32989.00C138481.67 32978.33 138492.33 32967.67 138503.00 32957.00C138524.33 32957.00 138545.67 32957.00 138567.00 32957.00C138556.33 32978.33 138545.67 32999.67 138535.00 33021.00C138535.00 33031.67 138535.00 33042.33 138535.00 33053.00C138545.67 33053.00 138556.33 33053.00 138567.00 33053.00C138556.33 33074.33 138545.67 33095.67 138535.00 33117.00C138535.00 33149.33 138535.00 33181.67 138535.00 33214.00C138524.33 33224.67 138513.67 33235.33 138503.00 33246.00C138513.67 33256.67 138524.33 33267.33 138535.00 33278.00C138524.33 33321.00 138513.67 33364.00 138503.00 33407.00C138513.67 33417.67 138524.33 33428.33 138535.00 33439.00C138545.67 33428.33 138556.33 33417.67 138567.00 33407.00C138578.00 33353.33 138589.00 33299.67 138600.00 33246.00C138600.00 33235.33 138600.00 33224.67 138600.00 33214.00C138642.67 33128.33 138685.33 33042.67 138728.00 32957.00C138738.67 32967.67 138749.33 32978.33 138760.00 32989.00C138749.33 32978.33 138738.67 32967.67 138728.00 32957.00C138749.33 32914.00 138770.67 32871.00 138792.00 32828.00C138803.00 32828.00 138814.00 32828.00 138825.00 32828.00C138825.00 32817.33 138825.00 32806.67 138825.00 32796.00C138846.33 32785.33 138867.67 32774.67 138889.00 32764.00C138867.67 32764.00 138846.33 32764.00 138825.00 32764.00C138825.00 32753.33 138825.00 32742.67 138825.00 32732.00C138857.00 32699.67 138889.00 32667.33 138921.00 32635.00C138931.67 32635.00 138942.33 32635.00 138953.00 32635.00C138931.67 32613.67 138910.33 32592.33 138889.00 32571.00C138899.67 32560.33 138910.33 32549.67 138921.00 32539.00C138953.00 32528.00 138985.00 32517.00 139017.00 32506.00C139006.33 32506.00 138995.67 32506.00 138985.00 32506.00C139006.67 32506.00 139028.33 32506.00 139050.00 32506.00C139039.00 32506.00 139028.00 32506.00 139017.00 32506.00C139028.00 32517.00 139039.00 32528.00 139050.00 32539.00C139060.67 32592.33 139071.33 32645.67 139082.00 32699.00C139071.33 32720.67 139060.67 32742.33 139050.00 32764.00C139050.00 32753.33 139050.00 32742.67 139050.00 32732.00C139050.00 32742.67 139050.00 32753.33 139050.00 32764.00C139028.33 32785.33 139006.67 32806.67 138985.00 32828.00C138985.00 32849.33 138985.00 32870.67 138985.00 32892.00C138942.33 32903.00 138899.67 32914.00 138857.00 32925.00C138857.00 32935.67 138857.00 32946.33 138857.00 32957.00C138814.00 32999.67 138771.00 33042.33 138728.00 33085.00C138728.00 33095.67 138728.00 33106.33 138728.00 33117.00C138717.33 33128.00 138706.67 33139.00 138696.00 33150.00C138717.33 33150.00 138738.67 33150.00 138760.00 33150.00C138749.33 33171.33 138738.67 33192.67 138728.00 33214.00C138717.33 33214.00 138706.67 33214.00 138696.00 33214.00C138696.00 33224.67 138696.00 33235.33 138696.00 33246.00C138717.33 33235.33 138738.67 33224.67 138760.00 33214.00C138760.00 33181.67 138760.00 33149.33 138760.00 33117.00C138781.67 33085.00 138803.33 33053.00 138825.00 33021.00C138846.33 33010.33 138867.67 32999.67 138889.00 32989.00C138899.67 32989.00 138910.33 32989.00 138921.00 32989.00C138931.67 32999.67 138942.33 33010.33 138953.00 33021.00C138953.00 33031.67 138953.00 33042.33 138953.00 33053.00C138942.33 33063.67 138931.67 33074.33 138921.00 33085.00C138910.33 33085.00 138899.67 33085.00 138889.00 33085.00C138878.33 33095.67 138867.67 33106.33 138857.00 33117.00C138867.67 33117.00 138878.33 33117.00 138889.00 33117.00C138889.00 33128.00 138889.00 33139.00 138889.00 33150.00C138867.67 33150.00 138846.33 33150.00 138825.00 33150.00C138825.00 33160.67 138825.00 33171.33 138825.00 33182.00C138846.33 33171.33 138867.67 33160.67 138889.00 33150.00C138908.30 33130.00 138927.68 33110.09 138947.45 33090.55C138949.30 33088.70 138951.15 33086.85 138953.00 33085.00C138953.00 33095.67 138953.00 33106.33 138953.00 33117.00C138931.67 33149.33 138910.33 33181.67 138889.00 33214.00C138910.33 33203.33 138931.67 33192.67 138953.00 33182.00C138942.33 33203.33 138931.67 33224.67 138921.00 33246.00C138878.00 33289.00 138835.00 33332.00 138792.00 33375.00C138770.67 33375.00 138749.33 33375.00 138728.00 33375.00C138749.33 33385.67 138770.67 33396.33 138792.00 33407.00C138792.00 33417.67 138792.00 33428.33 138792.00 33439.00C138760.00 33439.00 138728.00 33439.00 138696.00 33439.00C138717.33 33439.00 138738.67 33439.00 138760.00 33439.00C138749.33 33460.33 138738.67 33481.67 138728.00 33503.00C138738.67 33513.67 138749.33 33524.33 138760.00 33535.00C138760.00 33513.67 138760.00 33492.33 138760.00 33471.00C138770.67 33460.33 138781.33 33449.67 138792.00 33439.00C138792.00 33428.33 138792.00 33417.67 138792.00 33407.00C138803.00 33396.33 138814.00 33385.67 138825.00 33375.00C138857.00 33375.00 138889.00 33375.00 138921.00 33375.00C138953.00 33353.33 138985.00 33331.67 139017.00 33310.00C139017.00 33320.67 139017.00 33331.33 139017.00 33342.00C138985.00 33363.67 138953.00 33385.33 138921.00 33407.00C138921.00 33428.33 138921.00 33449.67 138921.00 33471.00C138931.72 33460.21 138942.60 33449.55 138953.22 33438.67C138974.48 33406.44 138995.74 33374.22 139017.00 33342.00C139017.00 33363.67 139017.00 33385.33 139017.00 33407.00C138963.67 33449.67 138910.33 33492.33 138857.00 33535.00C138857.00 33545.67 138857.00 33556.33 138857.00 33567.00C138899.67 33567.00 138942.33 33567.00 138985.00 33567.00C138965.70 33587.00 138946.32 33606.91 138926.55 33626.45C138924.70 33628.30 138922.85 33630.15 138921.00 33632.00C138931.67 33642.67 138942.33 33653.33 138953.00 33664.00C138953.00 33642.67 138953.00 33621.33 138953.00 33600.00C138963.67 33589.00 138974.33 33578.00 138985.00 33567.00C139006.67 33513.67 139028.33 33460.33 139050.00 33407.00C139060.67 33353.33 139071.33 33299.67 139082.00 33246.00C139082.00 33235.33 139082.00 33224.67 139082.00 33214.00C139103.33 33235.33 139124.67 33256.67 139146.00 33278.00C139156.67 33299.33 139167.33 33320.67 139178.00 33342.00C139167.26 33374.44 139156.65 33406.95 139145.82 33439.36C139135.21 33460.57 139124.61 33481.79 139114.00 33503.00C139135.33 33449.33 139156.67 33395.67 139178.00 33342.00C139156.67 33278.00 139135.33 33214.00 139114.00 33150.00C139135.33 33128.33 139156.67 33106.67 139178.00 33085.00C139199.67 33074.33 139221.33 33063.67 139243.00 33053.00C139253.67 33063.67 139264.33 33074.33 139275.00 33085.00C139275.00 33095.67 139275.00 33106.33 139275.00 33117.00C139285.67 33106.33 139296.33 33095.67 139307.00 33085.00C139296.33 33106.67 139285.67 33128.33 139275.00 33150.00C139264.33 33160.67 139253.67 33171.33 139243.00 33182.00C139232.00 33214.00 139221.00 33246.00 139210.00 33278.00C139210.00 33288.67 139210.00 33299.33 139210.00 33310.00C139231.67 33331.67 139253.33 33353.33 139275.00 33375.00C139239.33 33428.33 139203.67 33481.67 139168.00 33535.00C139171.33 33535.00 139174.67 33535.00 139178.00 33535.00C139178.00 33543.33 139178.00 33551.67 139178.00 33560.00C139188.67 33551.67 139199.33 33543.33 139210.00 33535.00C139210.00 33524.33 139210.00 33513.67 139210.00 33503.00C139231.67 33503.00 139253.33 33503.00 139275.00 33503.00C139264.33 33492.33 139253.67 33481.67 139243.00 33471.00C139253.67 33449.67 139264.33 33428.33 139275.00 33407.00C139285.67 33417.67 139296.33 33428.33 139307.00 33439.00C139296.33 33460.33 139285.67 33481.67 139275.00 33503.00C139285.67 33503.00 139296.33 33503.00 139307.00 33503.00C139317.67 33524.33 139328.33 33545.67 139339.00 33567.00C139307.00 33588.67 139275.00 33610.33 139243.00 33632.00C139221.33 33621.33 139199.67 33610.67 139178.00 33600.00C139178.00 33610.67 139178.00 33621.33 139178.00 33632.00C139188.67 33621.33 139199.33 33610.67 139210.00 33600.00C139231.67 33610.67 139253.33 33621.33 139275.00 33632.00C139296.33 33621.33 139317.67 33610.67 139339.00 33600.00C139339.00 33610.67 139339.00 33621.33 139339.00 33632.00C139349.67 33621.33 139360.33 33610.67 139371.00 33600.00C139360.33 33600.00 139349.67 33600.00 139339.00 33600.00C139328.33 33557.00 139317.67 33514.00 139307.00 33471.00C139328.33 33428.00 139349.67 33385.00 139371.00 33342.00C139381.67 33299.33 139392.33 33256.67 139403.00 33214.00C139403.00 33203.33 139403.00 33192.67 139403.00 33182.00C139413.67 33182.00 139424.33 33182.00 139435.00 33182.00C139435.00 33203.33 139435.00 33224.67 139435.00 33246.00C139456.67 33203.00 139478.33 33160.00 139500.00 33117.00C139500.00 33095.67 139500.00 33074.33 139500.00 33053.00C139510.67 33053.00 139521.33 33053.00 139532.00 33053.00C139532.00 33042.33 139532.00 33031.67 139532.00 33021.00C139553.33 32999.67 139574.67 32978.33 139596.00 32957.00C139574.67 32946.33 139553.33 32935.67 139532.00 32925.00C139575.00 32914.00 139618.00 32903.00 139661.00 32892.00C139693.00 32892.00 139725.00 32892.00 139757.00 32892.00C139776.30 32912.00 139795.68 32931.91 139815.45 32951.45C139817.20 32953.47 139819.72 32955.18 139821.00 32957.40C139821.00 32967.93 139821.00 32978.47 139821.00 32989.00C139810.33 32989.00 139799.67 32989.00 139789.00 32989.00C139778.33 33010.33 139767.67 33031.67 139757.00 33053.00C139757.00 33042.33 139757.00 33031.67 139757.00 33021.00C139757.00 33031.67 139757.00 33042.33 139757.00 33053.00C139746.33 33053.00 139735.67 33053.00 139725.00 33053.00C139725.00 33063.67 139725.00 33074.33 139725.00 33085.00C139703.67 33106.67 139682.33 33128.33 139661.00 33150.00C139650.00 33171.33 139639.00 33192.67 139628.00 33214.00C139617.33 33224.67 139606.67 33235.33 139596.00 33246.00C139596.00 33267.33 139596.00 33288.67 139596.00 33310.00C139585.33 33310.00 139574.67 33310.00 139564.00 33310.00C139574.67 33331.67 139585.33 33353.33 139596.00 33375.00C139574.67 33396.33 139553.33 33417.67 139532.00 33439.00C139521.33 33439.00 139510.67 33439.00 139500.00 33439.00C139510.67 33439.00 139521.33 33439.00 139532.00 33439.00C139542.67 33428.33 139553.33 33417.67 139564.00 33407.00C139585.33 33407.00 139606.67 33407.00 139628.00 33407.00C139639.00 33439.00 139650.00 33471.00 139661.00 33503.00C139682.33 33535.33 139703.67 33567.67 139725.00 33600.00C139725.00 33621.33 139725.00 33642.67 139725.00 33664.00C139714.33 33685.33 139703.67 33706.67 139693.00 33728.00C139703.67 33749.67 139714.33 33771.33 139725.00 33793.00C139692.67 33793.00 139660.33 33793.00 139628.00 33793.00C139617.28 33814.60 139606.29 33836.08 139595.75 33857.75C139585.17 33889.50 139574.58 33921.25 139564.00 33953.00C139574.67 33964.00 139585.33 33975.00 139596.00 33986.00C139596.00 33975.00 139596.00 33964.00 139596.00 33953.00C139606.67 33931.67 139617.33 33910.33 139628.00 33889.00C139628.00 33867.67 139628.00 33846.33 139628.00 33825.00C139649.67 33825.00 139671.33 33825.00 139693.00 33825.00C139703.67 33814.33 139714.33 33803.67 139725.00 33793.00C139735.67 33803.67 139746.33 33814.33 139757.00 33825.00C139757.00 33857.00 139757.00 33889.00 139757.00 33921.00C139778.33 33931.67 139799.67 33942.33 139821.00 33953.00C139778.33 33974.67 139735.67 33996.33 139693.00 34018.00C139682.33 34028.67 139671.67 34039.33 139661.00 34050.00C139650.00 34050.00 139639.00 34050.00 139628.00 34050.00C139628.00 34071.33 139628.00 34092.67 139628.00 34114.00C139606.67 34114.00 139585.33 34114.00 139564.00 34114.00C139553.33 34124.67 139542.67 34135.33 139532.00 34146.00C139510.67 34124.67 139489.33 34103.33 139468.00 34082.00C139478.67 34082.00 139489.33 34082.00 139500.00 34082.00C139489.33 34092.67 139478.67 34103.33 139468.00 34114.00C139478.67 34114.00 139489.33 34114.00 139500.00 34114.00C139510.67 34124.67 139521.33 34135.33 139532.00 34146.00C139542.67 34135.33 139553.33 34124.67 139564.00 34114.00C139585.33 34114.00 139606.67 34114.00 139628.00 34114.00C139648.00 34094.70 139667.91 34075.32 139687.45 34055.55C139699.97 34043.03 139712.48 34030.52 139725.00 34018.00C139757.00 34007.33 139789.00 33996.67 139821.00 33986.00C139831.67 33975.00 139842.33 33964.00 139853.00 33953.00C139831.67 33931.67 139810.33 33910.33 139789.00 33889.00C139789.00 33878.33 139789.00 33867.67 139789.00 33857.00C139810.33 33835.67 139831.67 33814.33 139853.00 33793.00C139842.33 33771.33 139831.67 33749.67 139821.00 33728.00C139821.00 33749.67 139821.00 33771.33 139821.00 33793.00C139810.33 33803.67 139799.67 33814.33 139789.00 33825.00C139789.00 33814.33 139789.00 33803.67 139789.00 33793.00C139778.33 33782.00 139767.67 33771.00 139757.00 33760.00C139757.00 33738.67 139757.00 33717.33 139757.00 33696.00C139767.67 33706.67 139778.33 33717.33 139789.00 33728.00C139799.67 33728.00 139810.33 33728.00 139821.00 33728.00C139810.33 33717.33 139799.67 33706.67 139789.00 33696.00C139789.00 33664.00 139789.00 33632.00 139789.00 33600.00C139832.00 33567.67 139875.00 33535.33 139918.00 33503.00C139928.67 33535.33 139939.33 33567.67 139950.00 33600.00C139950.00 33589.00 139950.00 33578.00 139950.00 33567.00C139971.33 33535.00 139992.67 33503.00 140014.00 33471.00C140003.33 33471.00 139992.67 33471.00 139982.00 33471.00C139982.00 33481.67 139982.00 33492.33 139982.00 33503.00C139971.33 33503.00 139960.67 33503.00 139950.00 33503.00C139950.00 33492.33 139950.00 33481.67 139950.00 33471.00C139971.33 33471.00 139992.67 33471.00 140014.00 33471.00C140014.00 33364.00 140014.00 33257.00 140014.00 33150.00C140024.67 33117.67 140035.33 33085.33 140046.00 33053.00C140046.00 33031.67 140046.00 33010.33 140046.00 32989.00C140057.00 32967.67 140068.00 32946.33 140079.00 32925.00C140089.67 32935.67 140100.33 32946.33 140111.00 32957.00C140111.00 32935.33 140111.00 32913.67 140111.00 32892.00C140089.33 32892.00 140067.67 32892.00 140046.00 32892.00C140066.00 32872.70 140085.91 32853.32 140105.45 32833.55C140107.30 32831.70 140109.15 32829.85 140111.00 32828.00C140121.67 32849.33 140132.33 32870.67 140143.00 32892.00C140153.67 32892.00 140164.33 32892.00 140175.00 32892.00C140175.00 32967.00 140175.00 33042.00 140175.00 33117.00C140164.33 33128.00 140153.67 33139.00 140143.00 33150.00C140143.00 33139.00 140143.00 33128.00 140143.00 33117.00C140121.67 33149.33 140100.33 33181.67 140079.00 33214.00C140068.00 33256.67 140057.00 33299.33 140046.00 33342.00C140046.00 33363.67 140046.00 33385.33 140046.00 33407.00C140057.00 33407.00 140068.00 33407.00 140079.00 33407.00C140079.00 33449.67 140079.00 33492.33 140079.00 33535.00C140057.33 33556.67 140035.67 33578.33 140014.00 33600.00C140014.00 33675.00 140014.00 33750.00 140014.00 33825.00C140003.33 33814.33 139992.67 33803.67 139982.00 33793.00C139992.67 33825.00 140003.33 33857.00 140014.00 33889.00C140024.67 33889.00 140035.33 33889.00 140046.00 33889.00C140046.00 33857.00 140046.00 33825.00 140046.00 33793.00C140046.00 33803.67 140046.00 33814.33 140046.00 33825.00C140057.00 33835.67 140068.00 33846.33 140079.00 33857.00C140068.00 33878.33 140057.00 33899.67 140046.00 33921.00C140046.00 33942.67 140046.00 33964.33 140046.00 33986.00C140024.67 33996.67 140003.33 34007.33 139982.00 34018.00C139992.67 34028.67 140003.33 34039.33 140014.00 34050.00C139982.00 34050.00 139950.00 34050.00 139918.00 34050.00C139928.67 34050.00 139939.33 34050.00 139950.00 34050.00C139950.00 34040.67 139950.00 34031.33 139950.00 34022.00C139875.00 34031.33 139800.00 34040.67 139725.00 34050.00C139725.00 34039.33 139725.00 34028.67 139725.00 34018.00C139714.33 34071.33 139703.67 34124.67 139693.00 34178.00C139671.33 34199.67 139649.67 34221.33 139628.00 34243.00C139617.33 34264.33 139606.67 34285.67 139596.00 34307.00C139606.67 34285.67 139617.33 34264.33 139628.00 34243.00C139649.67 34232.33 139671.33 34221.67 139693.00 34211.00C139703.67 34200.00 139714.33 34189.00 139725.00 34178.00C139735.67 34189.00 139746.33 34200.00 139757.00 34211.00C139767.67 34211.00 139778.33 34211.00 139789.00 34211.00C139767.67 34189.33 139746.33 34167.67 139725.00 34146.00C139725.00 34135.33 139725.00 34124.67 139725.00 34114.00C139735.67 34103.33 139746.33 34092.67 139757.00 34082.00C139789.00 34082.00 139821.00 34082.00 139853.00 34082.00C139842.33 34092.67 139831.67 34103.33 139821.00 34114.00C139842.67 34103.33 139864.33 34092.67 139886.00 34082.00C139928.67 34082.00 139971.33 34082.00 140014.00 34082.00C140024.72 34071.21 140035.60 34060.54 140046.22 34049.67C140067.81 34017.45 140089.41 33985.22 140111.00 33953.00C140111.00 33921.00 140111.00 33889.00 140111.00 33857.00C140100.33 33835.67 140089.67 33814.33 140079.00 33793.00C140089.67 33739.33 140100.33 33685.67 140111.00 33632.00C140121.67 33621.33 140132.33 33610.67 140143.00 33600.00C140175.00 33589.00 140207.00 33578.00 140239.00 33567.00C140239.00 33578.00 140239.00 33589.00 140239.00 33600.00C140239.00 33589.00 140239.00 33578.00 140239.00 33567.00C140249.67 33556.33 140260.33 33545.67 140271.00 33535.00C140282.00 33545.67 140293.00 33556.33 140304.00 33567.00C140293.00 33578.00 140282.00 33589.00 140271.00 33600.00C140282.00 33610.67 140293.00 33621.33 140304.00 33632.00C140282.33 33664.00 140260.67 33696.00 140239.00 33728.00C140228.33 33728.00 140217.67 33728.00 140207.00 33728.00C140196.33 33738.67 140185.67 33749.33 140175.00 33760.00C140164.33 33760.00 140153.67 33760.00 140143.00 33760.00C140153.67 33760.00 140164.33 33760.00 140175.00 33760.00C140185.67 33749.33 140196.33 33738.67 140207.00 33728.00C140217.67 33728.00 140228.33 33728.00 140239.00 33728.00C140239.00 33781.67 140239.00 33835.33 140239.00 33889.00C140228.33 33899.67 140217.67 33910.33 140207.00 33921.00C140196.33 33921.00 140185.67 33921.00 140175.00 33921.00C140164.33 33931.67 140153.67 33942.33 140143.00 33953.00C140153.67 33953.00 140164.33 33953.00 140175.00 33953.00C140175.00 33942.33 140175.00 33931.67 140175.00 33921.00C140185.67 33931.67 140196.33 33942.33 140207.00 33953.00C140217.67 33931.67 140228.33 33910.33 140239.00 33889.00C140249.67 33899.67 140260.33 33910.33 140271.00 33921.00C140271.00 33931.67 140271.00 33942.33 140271.00 33953.00C140282.00 33964.00 140293.00 33975.00 140304.00 33986.00C140293.00 33975.00 140282.00 33964.00 140271.00 33953.00C140271.00 33942.33 140271.00 33931.67 140271.00 33921.00C140260.33 33910.33 140249.67 33899.67 140239.00 33889.00C140249.67 33878.33 140260.33 33867.67 140271.00 33857.00C140260.33 33835.67 140249.67 33814.33 140239.00 33793.00C140249.85 33771.13 140260.44 33749.12 140271.45 33727.34C140292.96 33695.56 140314.48 33663.78 140336.00 33632.00C140357.33 33621.33 140378.67 33610.67 140400.00 33600.00C140400.00 33610.67 140400.00 33621.33 140400.00 33632.00C140389.33 33642.67 140378.67 33653.33 140368.00 33664.00C140411.00 33631.67 140454.00 33599.33 140497.00 33567.00C140507.67 33567.00 140518.33 33567.00 140529.00 33567.00C140518.33 33610.00 140507.67 33653.00 140497.00 33696.00C140475.33 33685.33 140453.67 33674.67 140432.00 33664.00C140421.33 33674.67 140410.67 33685.33 140400.00 33696.00C140410.67 33696.00 140421.33 33696.00 140432.00 33696.00C140442.67 33706.67 140453.33 33717.33 140464.00 33728.00C140464.00 33738.67 140464.00 33749.33 140464.00 33760.00C140442.67 33771.00 140421.33 33782.00 140400.00 33793.00C140400.00 33803.67 140400.00 33814.33 140400.00 33825.00C140389.33 33846.33 140378.67 33867.67 140368.00 33889.00C140346.67 33889.00 140325.33 33889.00 140304.00 33889.00C140304.00 33899.67 140304.00 33910.33 140304.00 33921.00C140314.67 33910.33 140325.33 33899.67 140336.00 33889.00C140357.33 33889.00 140378.67 33889.00 140400.00 33889.00C140410.67 33857.00 140421.33 33825.00 140432.00 33793.00C140453.67 33782.00 140475.33 33771.00 140497.00 33760.00C140497.00 33781.67 140497.00 33803.33 140497.00 33825.00C140507.67 33825.00 140518.33 33825.00 140529.00 33825.00C140509.48 33844.63 140489.84 33864.15 140469.86 33883.32C140467.91 33885.21 140465.95 33887.11 140464.00 33889.00C140453.33 33878.33 140442.67 33867.67 140432.00 33857.00C140410.67 33867.67 140389.33 33878.33 140368.00 33889.00C140368.00 33910.33 140368.00 33931.67 140368.00 33953.00C140378.67 33964.00 140389.33 33975.00 140400.00 33986.00C140389.33 33996.67 140378.67 34007.33 140368.00 34018.00C140357.33 34050.00 140346.67 34082.00 140336.00 34114.00C140346.67 34092.67 140357.33 34071.33 140368.00 34050.00C140389.33 34028.67 140410.67 34007.33 140432.00 33986.00C140421.33 33964.33 140410.67 33942.67 140400.00 33921.00C140400.00 33910.33 140400.00 33899.67 140400.00 33889.00C140410.67 33889.00 140421.33 33889.00 140432.00 33889.00C140442.67 33899.67 140453.33 33910.33 140464.00 33921.00C140475.00 33921.00 140486.00 33921.00 140497.00 33921.00C140518.33 33899.67 140539.67 33878.33 140561.00 33857.00C140561.00 33835.67 140561.00 33814.33 140561.00 33793.00C140571.67 33771.33 140582.33 33749.67 140593.00 33728.00C140614.33 33717.33 140635.67 33706.67 140657.00 33696.00C140646.33 33717.33 140635.67 33738.67 140625.00 33760.00C140625.00 33781.67 140625.00 33803.33 140625.00 33825.00C140603.67 33867.67 140582.33 33910.33 140561.00 33953.00C140550.33 33964.00 140539.67 33975.00 140529.00 33986.00C140548.30 33966.00 140567.68 33946.09 140587.45 33926.55C140589.30 33924.70 140591.15 33922.85 140593.00 33921.00C140593.00 33942.67 140593.00 33964.33 140593.00 33986.00C140582.33 33996.67 140571.67 34007.33 140561.00 34018.00C140561.00 34028.67 140561.00 34039.33 140561.00 34050.00C140528.67 34060.67 140496.33 34071.33 140464.00 34082.00C140496.33 34082.00 140528.67 34082.00 140561.00 34082.00C140571.67 34060.67 140582.33 34039.33 140593.00 34018.00C140593.00 34028.67 140593.00 34039.33 140593.00 34050.00C140603.67 34071.33 140614.33 34092.67 140625.00 34114.00C140593.00 34157.00 140561.00 34200.00 140529.00 34243.00C140539.67 34253.67 140550.33 34264.33 140561.00 34275.00C140561.00 34264.33 140561.00 34253.67 140561.00 34243.00C140571.67 34232.33 140582.33 34221.67 140593.00 34211.00C140603.67 34211.00 140614.33 34211.00 140625.00 34211.00C140646.33 34200.00 140667.67 34189.00 140689.00 34178.00C140678.33 34178.00 140667.67 34178.00 140657.00 34178.00C140678.67 34135.33 140700.33 34092.67 140722.00 34050.00C140732.67 34039.33 140743.33 34028.67 140754.00 34018.00C140754.00 34028.67 140754.00 34039.33 140754.00 34050.00C140775.33 34028.67 140796.67 34007.33 140818.00 33986.00C140818.00 33975.00 140818.00 33964.00 140818.00 33953.00C140807.19 33964.02 140796.59 33975.33 140785.64 33986.18C140764.43 33996.79 140743.21 34007.39 140722.00 34018.00C140722.00 34007.33 140722.00 33996.67 140722.00 33986.00C140743.33 33964.33 140764.67 33942.67 140786.00 33921.00C140796.67 33931.67 140807.33 33942.33 140818.00 33953.00C140818.00 33910.33 140818.00 33867.67 140818.00 33825.00C140850.33 33825.00 140882.67 33825.00 140915.00 33825.00C140915.00 33814.33 140915.00 33803.67 140915.00 33793.00C140925.67 33793.00 140936.33 33793.00 140947.00 33793.00C140947.00 33782.00 140947.00 33771.00 140947.00 33760.00C140936.33 33760.00 140925.67 33760.00 140915.00 33760.00C140925.67 33749.33 140936.33 33738.67 140947.00 33728.00C140989.67 33717.33 141032.33 33706.67 141075.00 33696.00C141096.67 33728.33 141118.33 33760.67 141140.00 33793.00C141128.92 33825.11 141117.98 33857.28 141106.82 33889.36C141096.21 33910.57 141085.61 33931.79 141075.00 33953.00C141064.33 33964.00 141053.67 33975.00 141043.00 33986.00C141021.67 33953.67 141000.33 33921.33 140979.00 33889.00C140989.67 33910.33 141000.33 33931.67 141011.00 33953.00C141011.00 33964.00 141011.00 33975.00 141011.00 33986.00C141000.33 33986.00 140989.67 33986.00 140979.00 33986.00C140979.00 33996.67 140979.00 34007.33 140979.00 34018.00C140957.67 34028.67 140936.33 34039.33 140915.00 34050.00C140915.00 34028.67 140915.00 34007.33 140915.00 33986.00C140915.00 34007.33 140915.00 34028.67 140915.00 34050.00C140904.00 34050.00 140893.00 34050.00 140882.00 34050.00C140860.67 34060.67 140839.33 34071.33 140818.00 34082.00C140818.00 34114.00 140818.00 34146.00 140818.00 34178.00C140796.67 34221.00 140775.33 34264.00 140754.00 34307.00C140764.67 34317.67 140775.33 34328.33 140786.00 34339.00C140786.00 34360.33 140786.00 34381.67 140786.00 34403.00C140775.33 34403.00 140764.67 34403.00 140754.00 34403.00C140743.33 34392.33 140732.67 34381.67 140722.00 34371.00C140743.33 34403.33 140764.67 34435.67 140786.00 34468.00C140786.00 34478.67 140786.00 34489.33 140786.00 34500.00C140764.67 34532.00 140743.33 34564.00 140722.00 34596.00C140743.33 34596.00 140764.67 34596.00 140786.00 34596.00C140796.67 34617.67 140807.33 34639.33 140818.00 34661.00C140807.33 34682.33 140796.67 34703.67 140786.00 34725.00C140796.67 34714.33 140807.33 34703.67 140818.00 34693.00C140839.33 34693.00 140860.67 34693.00 140882.00 34693.00C140882.00 34725.00 140882.00 34757.00 140882.00 34789.00C140871.33 34810.67 140860.67 34832.33 140850.00 34854.00C140828.67 34843.33 140807.33 34832.67 140786.00 34822.00C140775.33 34843.33 140764.67 34864.67 140754.00 34886.00C140743.33 34875.33 140732.67 34864.67 140722.00 34854.00C140732.67 34864.67 140743.33 34875.33 140754.00 34886.00C140754.00 34896.67 140754.00 34907.33 140754.00 34918.00C140754.00 34907.33 140754.00 34896.67 140754.00 34886.00C140764.67 34875.33 140775.33 34864.67 140786.00 34854.00C140829.00 34875.33 140872.00 34896.67 140915.00 34918.00C140915.00 34907.33 140915.00 34896.67 140915.00 34886.00C140904.00 34886.00 140893.00 34886.00 140882.00 34886.00C140893.00 34864.67 140904.00 34843.33 140915.00 34822.00C140915.00 34789.67 140915.00 34757.33 140915.00 34725.00C140893.33 34693.00 140871.67 34661.00 140850.00 34629.00C140850.00 34618.00 140850.00 34607.00 140850.00 34596.00C140871.67 34574.67 140893.33 34553.33 140915.00 34532.00C140915.00 34510.67 140915.00 34489.33 140915.00 34468.00C140947.00 34425.00 140979.00 34382.00 141011.00 34339.00C141021.67 34339.00 141032.33 34339.00 141043.00 34339.00C141043.00 34328.33 141043.00 34317.67 141043.00 34307.00C141053.67 34317.67 141064.33 34328.33 141075.00 34339.00C141064.33 34360.33 141053.67 34381.67 141043.00 34403.00C141043.00 34435.33 141043.00 34467.67 141043.00 34500.00C141032.33 34510.67 141021.67 34521.33 141011.00 34532.00C141021.69 34542.81 141032.66 34553.42 141043.18 34564.36C141053.78 34585.90 141064.39 34607.45 141075.00 34629.00C141085.67 34639.67 141096.33 34650.33 141107.00 34661.00C141075.00 34618.00 141043.00 34575.00 141011.00 34532.00C141032.33 34521.33 141053.67 34510.67 141075.00 34500.00C141075.00 34478.67 141075.00 34457.33 141075.00 34436.00C141085.67 34425.00 141096.33 34414.00 141107.00 34403.00C141118.00 34414.00 141129.00 34425.00 141140.00 34436.00C141140.00 34446.67 141140.00 34457.33 141140.00 34468.00C141129.00 34468.00 141118.00 34468.00 141107.00 34468.00C141107.00 34478.67 141107.00 34489.33 141107.00 34500.00C141118.00 34510.67 141129.00 34521.33 141140.00 34532.00C141129.00 34521.33 141118.00 34510.67 141107.00 34500.00C141107.00 34489.33 141107.00 34478.67 141107.00 34468.00C141118.00 34478.67 141129.00 34489.33 141140.00 34500.00C141150.67 34489.33 141161.33 34478.67 141172.00 34468.00C141150.33 34446.33 141128.67 34424.67 141107.00 34403.00C141118.00 34381.67 141129.00 34360.33 141140.00 34339.00C141150.67 34328.33 141161.33 34317.67 141172.00 34307.00C141182.67 34317.67 141193.33 34328.33 141204.00 34339.00C141214.67 34339.00 141225.33 34339.00 141236.00 34339.00C141246.67 34349.67 141257.33 34360.33 141268.00 34371.00C141268.00 34381.67 141268.00 34392.33 141268.00 34403.00C141278.67 34392.33 141289.33 34381.67 141300.00 34371.00C141310.67 34371.00 141321.33 34371.00 141332.00 34371.00C141321.33 34360.33 141310.67 34349.67 141300.00 34339.00C141268.00 34339.00 141236.00 34339.00 141204.00 34339.00C141193.33 34317.67 141182.67 34296.33 141172.00 34275.00C141193.33 34253.67 141214.67 34232.33 141236.00 34211.00C141257.33 34200.00 141278.67 34189.00 141300.00 34178.00C141300.00 34167.33 141300.00 34156.67 141300.00 34146.00C141321.67 34156.67 141343.33 34167.33 141365.00 34178.00C141354.00 34178.00 141343.00 34178.00 141332.00 34178.00C141332.00 34199.67 141332.00 34221.33 141332.00 34243.00C141332.00 34221.33 141332.00 34199.67 141332.00 34178.00C141353.67 34178.00 141375.33 34178.00 141397.00 34178.00C141386.19 34167.31 141375.58 34156.34 141364.64 34145.82C141343.10 34135.22 141321.55 34124.61 141300.00 34114.00C141289.33 34114.00 141278.67 34114.00 141268.00 34114.00C141278.67 34135.33 141289.33 34156.67 141300.00 34178.00C141289.33 34178.00 141278.67 34178.00 141268.00 34178.00C141268.00 34135.33 141268.00 34092.67 141268.00 34050.00C141289.33 34039.33 141310.67 34028.67 141332.00 34018.00C141343.00 33996.33 141354.00 33974.67 141365.00 33953.00C141386.33 33964.00 141407.67 33975.00 141429.00 33986.00C141407.67 33986.00 141386.33 33986.00 141365.00 33986.00C141365.00 33996.67 141365.00 34007.33 141365.00 34018.00C141386.33 34007.33 141407.67 33996.67 141429.00 33986.00C141439.67 34007.33 141450.33 34028.67 141461.00 34050.00C141450.33 34039.33 141439.67 34028.67 141429.00 34018.00C141439.67 34007.33 141450.33 33996.67 141461.00 33986.00C141450.33 33996.67 141439.67 34007.33 141429.00 34018.00C141439.67 34007.33 141450.33 33996.67 141461.00 33986.00C141450.33 33975.00 141439.67 33964.00 141429.00 33953.00C141429.00 33942.33 141429.00 33931.67 141429.00 33921.00C141396.67 33899.67 141364.33 33878.33 141332.00 33857.00C141332.00 33846.33 141332.00 33835.67 141332.00 33825.00C141353.67 33814.33 141375.33 33803.67 141397.00 33793.00C141439.67 33803.67 141482.33 33814.33 141525.00 33825.00C141536.00 33846.33 141547.00 33867.67 141558.00 33889.00C141558.00 33910.33 141558.00 33931.67 141558.00 33953.00C141568.67 33942.33 141579.33 33931.67 141590.00 33921.00C141590.00 34017.67 141590.00 34114.33 141590.00 34211.00C141590.00 34168.00 141590.00 34125.00 141590.00 34082.00C141600.67 34082.00 141611.33 34082.00 141622.00 34082.00C141632.67 34167.67 141643.33 34253.33 141654.00 34339.00C141632.67 34339.00 141611.33 34339.00 141590.00 34339.00C141590.00 34349.67 141590.00 34360.33 141590.00 34371.00C141579.33 34381.67 141568.67 34392.33 141558.00 34403.00C141558.00 34414.00 141558.00 34425.00 141558.00 34436.00C141536.33 34436.00 141514.67 34436.00 141493.00 34436.00C141418.31 34473.38 141343.61 34510.73 141268.75 34547.75C141257.83 34553.17 141246.92 34558.58 141236.00 34564.00C141236.00 34574.67 141236.00 34585.33 141236.00 34596.00C141225.33 34607.00 141214.67 34618.00 141204.00 34629.00C141204.00 34650.33 141204.00 34671.67 141204.00 34693.00C141214.67 34725.00 141225.33 34757.00 141236.00 34789.00C141246.67 34789.00 141257.33 34789.00 141268.00 34789.00C141257.33 34789.00 141246.67 34789.00 141236.00 34789.00C141225.33 34735.67 141214.67 34682.33 141204.00 34629.00C141214.67 34629.00 141225.33 34629.00 141236.00 34629.00C141257.33 34607.33 141278.67 34585.67 141300.00 34564.00C141332.33 34564.00 141364.67 34564.00 141397.00 34564.00C141397.00 34596.33 141397.00 34628.67 141397.00 34661.00C141375.33 34671.67 141353.67 34682.33 141332.00 34693.00C141332.00 34714.33 141332.00 34735.67 141332.00 34757.00C141321.33 34778.67 141310.67 34800.33 141300.00 34822.00C141300.00 34832.67 141300.00 34843.33 141300.00 34854.00C141289.33 34875.33 141278.67 34896.67 141268.00 34918.00C141268.00 34928.67 141268.00 34939.33 141268.00 34950.00C141246.67 34928.67 141225.33 34907.33 141204.00 34886.00C141193.33 34896.67 141182.67 34907.33 141172.00 34918.00C141172.00 34961.00 141172.00 35004.00 141172.00 35047.00C141161.33 35047.00 141150.67 35047.00 141140.00 35047.00C141140.00 35057.67 141140.00 35068.33 141140.00 35079.00C141150.67 35068.33 141161.33 35057.67 141172.00 35047.00C141182.67 35004.00 141193.33 34961.00 141204.00 34918.00C141214.67 34918.00 141225.33 34918.00 141236.00 34918.00C141246.67 34928.67 141257.33 34939.33 141268.00 34950.00C141278.67 34939.33 141289.33 34928.67 141300.00 34918.00C141300.00 34886.00 141300.00 34854.00 141300.00 34822.00C141321.67 34800.33 141343.33 34778.67 141365.00 34757.00C141365.00 34746.33 141365.00 34735.67 141365.00 34725.00C141386.54 34682.10 141407.87 34639.10 141429.00 34596.00C141448.30 34616.00 141467.68 34635.91 141487.45 34655.45C141489.30 34657.30 141491.15 34659.15 141493.00 34661.00C141482.33 34682.33 141471.67 34703.67 141461.00 34725.00C141450.33 34725.00 141439.67 34725.00 141429.00 34725.00C141450.33 34735.67 141471.67 34746.33 141493.00 34757.00C141493.00 34767.67 141493.00 34778.33 141493.00 34789.00C141493.00 34724.67 141493.00 34660.33 141493.00 34596.00C141514.67 34607.00 141536.33 34618.00 141558.00 34629.00C141579.33 34650.33 141600.67 34671.67 141622.00 34693.00C141600.67 34725.00 141579.33 34757.00 141558.00 34789.00C141558.00 34810.67 141558.00 34832.33 141558.00 34854.00C141547.00 34875.33 141536.00 34896.67 141525.00 34918.00C141525.00 34939.33 141525.00 34960.67 141525.00 34982.00C141514.31 34992.81 141503.34 35003.42 141492.82 35014.36C141471.55 35057.24 141450.27 35100.12 141429.00 35143.00C141429.00 35153.67 141429.00 35164.33 141429.00 35175.00C141418.33 35185.67 141407.67 35196.33 141397.00 35207.00C141407.67 35239.33 141418.33 35271.67 141429.00 35304.00C141429.00 35314.67 141429.00 35325.33 141429.00 35336.00C141407.67 35314.67 141386.33 35293.33 141365.00 35272.00C141354.00 35282.67 141343.00 35293.33 141332.00 35304.00C141321.33 35304.00 141310.67 35304.00 141300.00 35304.00C141310.67 35314.67 141321.33 35325.33 141332.00 35336.00C141343.00 35314.67 141354.00 35293.33 141365.00 35272.00C141386.33 35293.33 141407.67 35314.67 141429.00 35336.00C141396.67 35400.33 141364.33 35464.67 141332.00 35529.00C141332.00 35539.67 141332.00 35550.33 141332.00 35561.00C141310.67 35561.00 141289.33 35561.00 141268.00 35561.00C141257.33 35571.67 141246.67 35582.33 141236.00 35593.00C141214.67 35593.00 141193.33 35593.00 141172.00 35593.00C141172.00 35614.67 141172.00 35636.33 141172.00 35658.00C141161.33 35658.00 141150.67 35658.00 141140.00 35658.00C141129.00 35679.33 141118.00 35700.67 141107.00 35722.00C141118.00 35700.67 141129.00 35679.33 141140.00 35658.00C141150.67 35658.00 141161.33 35658.00 141172.00 35658.00C141182.67 35636.33 141193.33 35614.67 141204.00 35593.00C141214.67 35603.67 141225.33 35614.33 141236.00 35625.00C141257.33 35603.67 141278.67 35582.33 141300.00 35561.00C141278.67 35593.33 141257.33 35625.67 141236.00 35658.00C141246.67 35668.67 141257.33 35679.33 141268.00 35690.00C141246.67 35711.33 141225.33 35732.67 141204.00 35754.00C141225.33 35732.67 141246.67 35711.33 141268.00 35690.00C141268.00 35668.33 141268.00 35646.67 141268.00 35625.00C141278.67 35614.33 141289.33 35603.67 141300.00 35593.00C141310.67 35593.00 141321.33 35593.00 141332.00 35593.00C141321.33 35646.67 141310.67 35700.33 141300.00 35754.00C141321.46 35797.11 141343.13 35840.10 141365.00 35883.00C141365.00 35872.00 141365.00 35861.00 141365.00 35850.00C141386.33 35850.00 141407.67 35850.00 141429.00 35850.00C141429.00 35775.00 141429.00 35700.00 141429.00 35625.00C141439.67 35614.33 141450.33 35603.67 141461.00 35593.00C141482.33 35528.67 141503.67 35464.33 141525.00 35400.00C141525.00 35346.33 141525.00 35292.67 141525.00 35239.00C141536.00 35228.33 141547.00 35217.67 141558.00 35207.00C141590.00 35196.33 141622.00 35185.67 141654.00 35175.00C141675.33 35207.33 141696.67 35239.67 141718.00 35272.00C141718.00 35282.67 141718.00 35293.33 141718.00 35304.00C141729.00 35293.33 141740.00 35282.67 141751.00 35272.00C141761.67 35293.33 141772.33 35314.67 141783.00 35336.00C141804.33 35325.33 141825.67 35314.67 141847.00 35304.00C141846.92 35293.21 141847.17 35282.38 141846.88 35271.62C141836.25 35239.42 141825.63 35207.21 141815.00 35175.00C141825.67 35164.33 141836.33 35153.67 141847.00 35143.00C141847.00 35121.67 141847.00 35100.33 141847.00 35079.00C141868.33 35046.67 141889.67 35014.33 141911.00 34982.00C141911.00 34971.33 141911.00 34960.67 141911.00 34950.00C141954.08 34917.89 141997.27 34885.90 142040.28 34853.72C142061.52 34832.14 142082.76 34810.57 142104.00 34789.00C142114.67 34789.00 142125.33 34789.00 142136.00 34789.00C142146.67 34800.00 142157.33 34811.00 142168.00 34822.00C142179.00 34800.33 142190.00 34778.67 142201.00 34757.00C142211.67 34757.00 142222.33 34757.00 142233.00 34757.00C142222.33 34735.67 142211.67 34714.33 142201.00 34693.00C142211.67 34682.33 142222.33 34671.67 142233.00 34661.00C142243.67 34661.00 142254.33 34661.00 142265.00 34661.00C142265.00 34650.33 142265.00 34639.67 142265.00 34629.00C142275.67 34607.33 142286.33 34585.67 142297.00 34564.00C142297.00 34553.33 142297.00 34542.67 142297.00 34532.00C142307.67 34532.00 142318.33 34532.00 142329.00 34532.00C142329.00 34542.67 142329.00 34553.33 142329.00 34564.00C142339.67 34553.33 142350.33 34542.67 142361.00 34532.00C142372.00 34532.00 142383.00 34532.00 142394.00 34532.00C142394.00 34553.33 142394.00 34574.67 142394.00 34596.00C142383.00 34596.00 142372.00 34596.00 142361.00 34596.00C142372.00 34607.00 142383.00 34618.00 142394.00 34629.00C142394.00 34650.33 142394.00 34671.67 142394.00 34693.00C142394.00 34671.67 142394.00 34650.33 142394.00 34629.00C142383.00 34639.67 142372.00 34650.33 142361.00 34661.00C142372.00 34682.33 142383.00 34703.67 142394.00 34725.00C142404.67 34735.67 142415.33 34746.33 142426.00 34757.00C142393.67 34778.67 142361.33 34800.33 142329.00 34822.00C142339.67 34822.00 142350.33 34822.00 142361.00 34822.00C142382.67 34800.33 142404.33 34778.67 142426.00 34757.00C142426.00 34810.67 142426.00 34864.33 142426.00 34918.00C142436.67 34928.67 142447.33 34939.33 142458.00 34950.00C142479.33 34950.00 142500.67 34950.00 142522.00 34950.00C142511.33 34939.33 142500.67 34928.67 142490.00 34918.00C142479.33 34928.67 142468.67 34939.33 142458.00 34950.00C142447.33 34939.33 142436.67 34928.67 142426.00 34918.00C142426.00 34896.67 142426.00 34875.33 142426.00 34854.00C142436.67 34832.33 142447.33 34810.67 142458.00 34789.00C142447.33 34757.00 142436.67 34725.00 142426.00 34693.00C142426.00 34639.33 142426.00 34585.67 142426.00 34532.00C142436.67 34521.33 142447.33 34510.67 142458.00 34500.00C142458.00 34478.67 142458.00 34457.33 142458.00 34436.00C142468.67 34425.00 142479.33 34414.00 142490.00 34403.00C142500.67 34371.00 142511.33 34339.00 142522.00 34307.00C142532.67 34296.33 142543.33 34285.67 142554.00 34275.00C142543.33 34253.67 142532.67 34232.33 142522.00 34211.00C142522.00 34221.67 142522.00 34232.33 142522.00 34243.00C142522.00 34232.00 142522.00 34221.00 142522.00 34210.00C142511.33 34199.33 142500.67 34188.67 142490.00 34178.00C142495.33 34178.00 142500.67 34178.00 142506.00 34178.00C142500.67 34167.33 142495.33 34156.67 142490.00 34146.00C142500.67 34124.67 142511.33 34103.33 142522.00 34082.00C142522.00 34071.33 142522.00 34060.67 142522.00 34050.00C142532.67 34050.00 142543.33 34050.00 142554.00 34050.00C142564.67 34060.67 142575.33 34071.33 142586.00 34082.00C142575.33 34103.33 142564.67 34124.67 142554.00 34146.00C142564.67 34156.67 142575.33 34167.33 142586.00 34178.00C142575.33 34189.00 142564.67 34200.00 142554.00 34211.00C142543.33 34264.33 142532.67 34317.67 142522.00 34371.00C142543.33 34414.00 142564.67 34457.00 142586.00 34500.00C142564.46 34542.90 142543.13 34585.90 142522.00 34629.00C142522.00 34650.33 142522.00 34671.67 142522.00 34693.00C142543.33 34693.00 142564.67 34693.00 142586.00 34693.00C142586.00 34703.67 142586.00 34714.33 142586.00 34725.00C142575.33 34746.33 142564.67 34767.67 142554.00 34789.00C142564.67 34789.00 142575.33 34789.00 142586.00 34789.00C142586.00 34767.67 142586.00 34746.33 142586.00 34725.00C142597.00 34725.00 142608.00 34725.00 142619.00 34725.00C142608.00 34725.00 142597.00 34725.00 142586.00 34725.00C142586.00 34714.33 142586.00 34703.67 142586.00 34693.00C142575.33 34682.33 142564.67 34671.67 142554.00 34661.00C142554.00 34650.33 142554.00 34639.67 142554.00 34629.00C142564.67 34618.00 142575.33 34607.00 142586.00 34596.00C142607.67 34607.00 142629.33 34618.00 142651.00 34629.00C142661.67 34618.00 142672.33 34607.00 142683.00 34596.00C142650.67 34585.33 142618.33 34574.67 142586.00 34564.00C142597.00 34532.00 142608.00 34500.00 142619.00 34468.00C142640.33 34489.33 142661.67 34510.67 142683.00 34532.00C142683.00 34553.33 142683.00 34574.67 142683.00 34596.00C142672.19 34607.02 142661.59 34618.34 142650.64 34629.18C142629.10 34639.78 142607.55 34650.39 142586.00 34661.00C142607.67 34650.33 142629.33 34639.67 142651.00 34629.00C142651.00 34639.67 142651.00 34650.33 142651.00 34661.00C142672.33 34639.33 142693.67 34617.67 142715.00 34596.00C142715.00 34564.00 142715.00 34532.00 142715.00 34500.00C142685.87 34470.71 142656.32 34441.82 142627.73 34412.00C142624.82 34409.00 142621.91 34406.00 142619.00 34403.00C142619.00 34381.67 142619.00 34360.33 142619.00 34339.00C142629.67 34328.33 142640.33 34317.67 142651.00 34307.00C142651.00 34350.00 142651.00 34393.00 142651.00 34436.00C142661.67 34403.67 142672.33 34371.33 142683.00 34339.00C142693.69 34349.81 142704.66 34360.42 142715.18 34371.36C142725.78 34392.90 142736.39 34414.45 142747.00 34436.00C142736.33 34425.00 142725.67 34414.00 142715.00 34403.00C142704.33 34414.00 142693.67 34425.00 142683.00 34436.00C142693.67 34436.00 142704.33 34436.00 142715.00 34436.00C142704.33 34446.67 142693.67 34457.33 142683.00 34468.00C142683.00 34478.67 142683.00 34489.33 142683.00 34500.00C142693.67 34489.33 142704.33 34478.67 142715.00 34468.00C142715.00 34553.67 142715.00 34639.33 142715.00 34725.00C142693.67 34757.33 142672.33 34789.67 142651.00 34822.00C142672.33 34800.33 142693.67 34778.67 142715.00 34757.00C142725.67 34725.00 142736.33 34693.00 142747.00 34661.00C142736.33 34650.33 142725.67 34639.67 142715.00 34629.00C142736.33 34618.00 142757.67 34607.00 142779.00 34596.00C142800.67 34617.67 142822.33 34639.33 142844.00 34661.00C142844.00 34682.33 142844.00 34703.67 142844.00 34725.00C142844.00 34703.67 142844.00 34682.33 142844.00 34661.00C142876.00 34661.00 142908.00 34661.00 142940.00 34661.00C142950.67 34650.33 142961.33 34639.67 142972.00 34629.00C142982.67 34629.00 142993.33 34629.00 143004.00 34629.00C143024.00 34648.30 143043.91 34667.68 143063.45 34687.45C143075.97 34699.97 143088.48 34712.48 143101.00 34725.00C143122.33 34725.00 143143.67 34725.00 143165.00 34725.00C143175.67 34746.33 143186.33 34767.67 143197.00 34789.00C143208.00 34789.00 143219.00 34789.00 143230.00 34789.00C143219.00 34767.67 143208.00 34746.33 143197.00 34725.00C143197.00 34714.33 143197.00 34703.67 143197.00 34693.00C143208.00 34671.67 143219.00 34650.33 143230.00 34629.00C143251.33 34618.00 143272.67 34607.00 143294.00 34596.00C143304.67 34617.67 143315.33 34639.33 143326.00 34661.00C143304.67 34661.00 143283.33 34661.00 143262.00 34661.00C143262.00 34693.00 143262.00 34725.00 143262.00 34757.00C143272.67 34767.67 143283.33 34778.33 143294.00 34789.00C143283.33 34767.67 143272.67 34746.33 143262.00 34725.00C143272.67 34714.33 143283.33 34703.67 143294.00 34693.00C143304.67 34714.33 143315.33 34735.67 143326.00 34757.00C143347.33 34757.00 143368.67 34757.00 143390.00 34757.00C143368.67 34757.00 143347.33 34757.00 143326.00 34757.00C143315.33 34735.67 143304.67 34714.33 143294.00 34693.00C143358.33 34682.33 143422.67 34671.67 143487.00 34661.00C143454.67 34661.00 143422.33 34661.00 143390.00 34661.00C143390.00 34650.33 143390.00 34639.67 143390.00 34629.00C143400.87 34617.65 143412.03 34606.55 143422.72 34595.05C143454.81 34552.70 143486.91 34510.35 143519.00 34468.00C143540.33 34457.33 143561.67 34446.67 143583.00 34436.00C143604.67 34457.33 143626.33 34478.67 143648.00 34500.00C143637.00 34467.67 143626.00 34435.33 143615.00 34403.00C143636.67 34424.67 143658.33 34446.33 143680.00 34468.00C143669.33 34446.33 143658.67 34424.67 143648.00 34403.00C143648.00 34392.33 143648.00 34381.67 143648.00 34371.00C143669.33 34371.00 143690.67 34371.00 143712.00 34371.00C143701.33 34371.00 143690.67 34371.00 143680.00 34371.00C143669.33 34360.33 143658.67 34349.67 143648.00 34339.00C143669.33 34328.33 143690.67 34317.67 143712.00 34307.00C143733.33 34317.67 143754.67 34328.33 143776.00 34339.00C143776.00 34328.33 143776.00 34317.67 143776.00 34307.00C143765.33 34307.00 143754.67 34307.00 143744.00 34307.00C143776.00 34307.00 143808.00 34307.00 143840.00 34307.00C143829.33 34307.00 143818.67 34307.00 143808.00 34307.00C143840.33 34307.00 143872.67 34307.00 143905.00 34307.00C143915.67 34328.33 143926.33 34349.67 143937.00 34371.00C143915.67 34381.67 143894.33 34392.33 143873.00 34403.00C143873.00 34392.33 143873.00 34381.67 143873.00 34371.00C143851.33 34403.33 143829.67 34435.67 143808.00 34468.00C143818.67 34532.33 143829.33 34596.67 143840.00 34661.00C143818.67 34650.33 143797.33 34639.67 143776.00 34629.00C143776.00 34586.00 143776.00 34543.00 143776.00 34500.00C143765.33 34521.33 143754.67 34542.67 143744.00 34564.00C143744.00 34596.33 143744.00 34628.67 143744.00 34661.00C143712.00 34650.33 143680.00 34639.67 143648.00 34629.00C143615.67 34629.00 143583.33 34629.00 143551.00 34629.00C143572.33 34629.00 143593.67 34629.00 143615.00 34629.00C143647.33 34650.33 143679.67 34671.67 143712.00 34693.00C143722.67 34693.00 143733.33 34693.00 143744.00 34693.00C143701.00 34693.00 143658.00 34693.00 143615.00 34693.00C143636.67 34703.67 143658.33 34714.33 143680.00 34725.00C143660.48 34744.63 143640.84 34764.15 143620.86 34783.32C143617.75 34786.30 143614.93 34789.69 143610.76 34791.19C143590.84 34801.46 143570.92 34811.73 143551.00 34822.00C143572.33 34822.00 143593.67 34822.00 143615.00 34822.00C143604.33 34843.33 143593.67 34864.67 143583.00 34886.00C143583.00 34896.67 143583.00 34907.33 143583.00 34918.00C143561.67 34928.67 143540.33 34939.33 143519.00 34950.00C143497.67 34950.00 143476.33 34950.00 143455.00 34950.00C143465.67 34971.33 143476.33 34992.67 143487.00 35014.00C143476.33 35035.67 143465.67 35057.33 143455.00 35079.00C143465.67 35100.33 143476.33 35121.67 143487.00 35143.00C143487.00 35175.00 143487.00 35207.00 143487.00 35239.00C143497.67 35250.00 143508.33 35261.00 143519.00 35272.00C143519.00 35261.00 143519.00 35250.00 143519.00 35239.00C143540.33 35239.00 143561.67 35239.00 143583.00 35239.00C143604.67 35228.33 143626.33 35217.67 143648.00 35207.00C143669.33 35228.67 143690.67 35250.33 143712.00 35272.00C143722.67 35293.33 143733.33 35314.67 143744.00 35336.00C143744.00 35325.33 143744.00 35314.67 143744.00 35304.00C143776.00 35261.00 143808.00 35218.00 143840.00 35175.00C143840.00 35143.00 143840.00 35111.00 143840.00 35079.00C143851.00 35079.00 143862.00 35079.00 143873.00 35079.00C143905.00 35111.00 143937.00 35143.00 143969.00 35175.00C143969.00 35196.33 143969.00 35217.67 143969.00 35239.00C143979.67 35260.67 143990.33 35282.33 144001.00 35304.00C143990.33 35314.67 143979.67 35325.33 143969.00 35336.00C143979.67 35336.00 143990.33 35336.00 144001.00 35336.00C144011.67 35325.33 144022.33 35314.67 144033.00 35304.00C144011.67 35271.67 143990.33 35239.33 143969.00 35207.00C143979.67 35207.00 143990.33 35207.00 144001.00 35207.00C144033.33 35250.00 144065.67 35293.00 144098.00 35336.00C144087.00 35357.33 144076.00 35378.67 144065.00 35400.00C144033.00 35432.33 144001.00 35464.67 143969.00 35497.00C144001.00 35486.33 144033.00 35475.67 144065.00 35465.00C144076.00 35432.67 144087.00 35400.33 144098.00 35368.00C144098.00 35346.67 144098.00 35325.33 144098.00 35304.00C144087.00 35293.33 144076.00 35282.67 144065.00 35272.00C144054.33 35229.00 144043.67 35186.00 144033.00 35143.00C144033.00 35132.33 144033.00 35121.67 144033.00 35111.00C144054.67 35111.00 144076.33 35111.00 144098.00 35111.00C144087.00 35100.33 144076.00 35089.67 144065.00 35079.00C144076.00 35079.00 144087.00 35079.00 144098.00 35079.00C144098.00 35089.67 144098.00 35100.33 144098.00 35111.00C144108.69 35100.19 144119.66 35089.58 144130.18 35078.64C144140.78 35057.10 144151.39 35035.55 144162.00 35014.00C144162.00 35057.00 144162.00 35100.00 144162.00 35143.00C144151.33 35186.00 144140.67 35229.00 144130.00 35272.00C144140.67 35272.00 144151.33 35272.00 144162.00 35272.00C144162.00 35293.33 144162.00 35314.67 144162.00 35336.00C144183.33 35314.67 144204.67 35293.33 144226.00 35272.00C144194.00 35261.00 144162.00 35250.00 144130.00 35239.00C144151.33 35228.33 144172.67 35217.67 144194.00 35207.00C144215.33 35228.67 144236.67 35250.33 144258.00 35272.00C144247.33 35239.67 144236.67 35207.33 144226.00 35175.00C144226.00 35164.33 144226.00 35153.67 144226.00 35143.00C144269.08 35110.89 144312.27 35078.91 144355.28 35046.71C144365.85 35035.81 144376.43 35024.90 144387.00 35014.00C144397.67 35014.00 144408.33 35014.00 144419.00 35014.00C144429.67 35025.00 144440.33 35036.00 144451.00 35047.00C144451.00 35025.33 144451.00 35003.67 144451.00 34982.00C144451.00 35025.00 144451.00 35068.00 144451.00 35111.00C144419.00 35143.00 144387.00 35175.00 144355.00 35207.00C144355.00 35239.33 144355.00 35271.67 144355.00 35304.00C144333.67 35304.00 144312.33 35304.00 144291.00 35304.00C144312.33 35304.00 144333.67 35304.00 144355.00 35304.00C144365.67 35282.33 144376.33 35260.67 144387.00 35239.00C144408.33 35217.67 144429.67 35196.33 144451.00 35175.00C144451.00 35164.33 144451.00 35153.67 144451.00 35143.00C144462.00 35143.00 144473.00 35143.00 144484.00 35143.00C144484.00 35132.33 144484.00 35121.67 144484.00 35111.00C144484.00 35132.33 144484.00 35153.67 144484.00 35175.00C144473.00 35175.00 144462.00 35175.00 144451.00 35175.00C144462.00 35185.67 144473.00 35196.33 144484.00 35207.00C144494.75 35164.22 144505.29 35121.37 144516.18 35078.64C144526.78 35057.10 144537.39 35035.55 144548.00 35014.00C144558.69 35025.14 144569.65 35036.10 144580.18 35047.36C144590.79 35068.57 144601.39 35089.79 144612.00 35111.00C144612.00 35121.67 144612.00 35132.33 144612.00 35143.00C144622.67 35153.67 144633.33 35164.33 144644.00 35175.00C144654.75 35207.44 144665.34 35239.95 144676.18 35272.35C144687.12 35293.57 144698.06 35314.79 144709.00 35336.00C144709.00 35368.00 144709.00 35400.00 144709.00 35432.00C144687.33 35464.33 144665.67 35496.67 144644.00 35529.00C144633.31 35518.19 144622.34 35507.58 144611.82 35496.64C144601.22 35475.10 144590.61 35453.55 144580.00 35432.00C144569.33 35443.00 144558.67 35454.00 144548.00 35465.00C144537.33 35454.00 144526.67 35443.00 144516.00 35432.00C144516.00 35443.00 144516.00 35454.00 144516.00 35465.00C144494.33 35465.00 144472.67 35465.00 144451.00 35465.00C144451.00 35443.33 144451.00 35421.67 144451.00 35400.00C144440.33 35421.67 144429.67 35443.33 144419.00 35465.00C144365.33 35465.00 144311.67 35465.00 144258.00 35465.00C144247.33 35454.00 144236.67 35443.00 144226.00 35432.00C144215.33 35432.00 144204.67 35432.00 144194.00 35432.00C144204.67 35432.00 144215.33 35432.00 144226.00 35432.00C144236.67 35453.67 144247.33 35475.33 144258.00 35497.00C144236.67 35529.00 144215.33 35561.00 144194.00 35593.00C144183.33 35593.00 144172.67 35593.00 144162.00 35593.00C144151.33 35603.67 144140.67 35614.33 144130.00 35625.00C144108.33 35603.67 144086.67 35582.33 144065.00 35561.00C144043.67 35582.33 144022.33 35603.67 144001.00 35625.00C144022.33 35603.67 144043.67 35582.33 144065.00 35561.00C144065.00 35582.33 144065.00 35603.67 144065.00 35625.00C144076.00 35625.00 144087.00 35625.00 144098.00 35625.00C144098.00 35636.00 144098.00 35647.00 144098.00 35658.00C144087.00 35658.00 144076.00 35658.00 144065.00 35658.00C144043.67 35679.33 144022.33 35700.67 144001.00 35722.00C143990.33 35722.00 143979.67 35722.00 143969.00 35722.00C143969.00 35732.67 143969.00 35743.33 143969.00 35754.00C143990.33 35754.00 144011.67 35754.00 144033.00 35754.00C144043.67 35764.67 144054.33 35775.33 144065.00 35786.00C144054.33 35786.00 144043.67 35786.00 144033.00 35786.00C144043.67 35786.00 144054.33 35786.00 144065.00 35786.00C144076.00 35796.67 144087.00 35807.33 144098.00 35818.00C144130.00 35828.67 144162.00 35839.33 144194.00 35850.00C144172.67 35871.67 144151.33 35893.33 144130.00 35915.00C144097.67 35915.00 144065.33 35915.00 144033.00 35915.00C144033.00 35925.67 144033.00 35936.33 144033.00 35947.00C144043.67 35936.33 144054.33 35925.67 144065.00 35915.00C144086.67 35925.67 144108.33 35936.33 144130.00 35947.00C144151.33 35936.33 144172.67 35925.67 144194.00 35915.00C144194.00 35882.67 144194.00 35850.33 144194.00 35818.00C144172.67 35818.00 144151.33 35818.00 144130.00 35818.00C144119.33 35807.33 144108.67 35796.67 144098.00 35786.00C144098.00 35775.33 144098.00 35764.67 144098.00 35754.00C144130.00 35754.00 144162.00 35754.00 144194.00 35754.00C144204.81 35764.69 144215.42 35775.66 144226.36 35786.18C144247.90 35796.78 144269.45 35807.39 144291.00 35818.00C144323.00 35818.00 144355.00 35818.00 144387.00 35818.00C144397.67 35807.33 144408.33 35796.67 144419.00 35786.00C144429.67 35786.00 144440.33 35786.00 144451.00 35786.00C144451.00 35818.33 144451.00 35850.67 144451.00 35883.00C144440.33 35883.00 144429.67 35883.00 144419.00 35883.00C144408.33 35904.33 144397.67 35925.67 144387.00 35947.00C144355.00 35947.00 144323.00 35947.00 144291.00 35947.00C144301.67 35947.00 144312.33 35947.00 144323.00 35947.00C144333.67 35957.67 144344.33 35968.33 144355.00 35979.00C144311.92 36011.11 144268.73 36043.09 144225.72 36075.29C144215.15 36086.19 144204.57 36097.10 144194.00 36108.00C144151.00 36118.67 144108.00 36129.33 144065.00 36140.00C144054.33 36140.00 144043.67 36140.00 144033.00 36140.00C144022.33 36161.33 144011.67 36182.67 144001.00 36204.00C143969.00 36204.00 143937.00 36204.00 143905.00 36204.00C143915.67 36214.67 143926.33 36225.33 143937.00 36236.00C143947.67 36225.33 143958.33 36214.67 143969.00 36204.00C143969.00 36214.67 143969.00 36225.33 143969.00 36236.00C143947.67 36236.00 143926.33 36236.00 143905.00 36236.00C143894.33 36257.67 143883.67 36279.33 143873.00 36301.00C143851.33 36301.00 143829.67 36301.00 143808.00 36301.00C143786.67 36311.67 143765.33 36322.33 143744.00 36333.00C143787.00 36322.33 143830.00 36311.67 143873.00 36301.00C143883.67 36290.00 143894.33 36279.00 143905.00 36268.00C143926.33 36268.00 143947.67 36268.00 143969.00 36268.00C143990.33 36236.00 144011.67 36204.00 144033.00 36172.00C144065.33 36172.00 144097.67 36172.00 144130.00 36172.00C144205.00 36150.67 144280.00 36129.33 144355.00 36108.00C144355.00 36118.67 144355.00 36129.33 144355.00 36140.00C144344.33 36161.33 144333.67 36182.67 144323.00 36204.00C144301.33 36214.67 144279.67 36225.33 144258.00 36236.00C144236.67 36236.00 144215.33 36236.00 144194.00 36236.00C144183.33 36246.67 144172.67 36257.33 144162.00 36268.00C144183.33 36257.33 144204.67 36246.67 144226.00 36236.00C144236.67 36236.00 144247.33 36236.00 144258.00 36236.00C144301.00 36204.00 144344.00 36172.00 144387.00 36140.00C144387.00 36161.33 144387.00 36182.67 144387.00 36204.00C144408.33 36204.00 144429.67 36204.00 144451.00 36204.00C144429.67 36204.00 144408.33 36204.00 144387.00 36204.00C144397.71 36182.40 144408.71 36160.92 144419.25 36139.24C144429.83 36107.16 144440.42 36075.08 144451.00 36043.00C144472.67 36043.00 144494.33 36043.00 144516.00 36043.00C144548.00 36032.33 144580.00 36021.67 144612.00 36011.00C144622.67 35979.00 144633.33 35947.00 144644.00 35915.00C144654.67 35925.67 144665.33 35936.33 144676.00 35947.00C144676.00 35968.33 144676.00 35989.67 144676.00 36011.00C144665.33 36021.67 144654.67 36032.33 144644.00 36043.00C144633.33 36086.00 144622.67 36129.00 144612.00 36172.00C144580.00 36172.00 144548.00 36172.00 144516.00 36172.00C144516.00 36182.67 144516.00 36193.33 144516.00 36204.00C144505.33 36204.00 144494.67 36204.00 144484.00 36204.00C144484.00 36236.33 144484.00 36268.67 144484.00 36301.00C144505.33 36258.00 144526.67 36215.00 144548.00 36172.00C144558.67 36182.67 144569.33 36193.33 144580.00 36204.00C144590.67 36193.33 144601.33 36182.67 144612.00 36172.00C144622.67 36139.67 144633.33 36107.33 144644.00 36075.00C144665.67 36053.67 144687.33 36032.33 144709.00 36011.00C144709.00 36021.67 144709.00 36032.33 144709.00 36043.00C144698.00 36064.67 144687.00 36086.33 144676.00 36108.00C144687.00 36118.67 144698.00 36129.33 144709.00 36140.00C144698.00 36129.33 144687.00 36118.67 144676.00 36108.00C144687.00 36075.67 144698.00 36043.33 144709.00 36011.00C144698.00 35989.67 144687.00 35968.33 144676.00 35947.00C144676.00 35936.33 144676.00 35925.67 144676.00 35915.00C144687.00 35915.00 144698.00 35915.00 144709.00 35915.00C144709.00 35904.33 144709.00 35893.67 144709.00 35883.00C144719.67 35883.00 144730.33 35883.00 144741.00 35883.00C144719.33 35872.00 144697.67 35861.00 144676.00 35850.00C144676.00 35828.67 144676.00 35807.33 144676.00 35786.00C144697.67 35796.67 144719.33 35807.33 144741.00 35818.00C144773.00 35818.00 144805.00 35818.00 144837.00 35818.00C144880.00 35850.33 144923.00 35882.67 144966.00 35915.00C144955.33 35925.67 144944.67 35936.33 144934.00 35947.00C144923.00 35936.33 144912.00 35925.67 144901.00 35915.00C144858.29 35979.46 144815.46 36043.86 144772.82 36108.36C144762.21 36129.57 144751.61 36150.79 144741.00 36172.00C144762.33 36215.00 144783.67 36258.00 144805.00 36301.00C144794.33 36311.67 144783.67 36322.33 144773.00 36333.00C144794.33 36322.33 144815.67 36311.67 144837.00 36301.00C144847.67 36290.00 144858.33 36279.00 144869.00 36268.00C144858.33 36268.00 144847.67 36268.00 144837.00 36268.00C144837.00 36225.33 144837.00 36182.67 144837.00 36140.00C144880.00 36107.67 144923.00 36075.33 144966.00 36043.00C144987.33 36053.67 145008.67 36064.33 145030.00 36075.00C145030.00 36086.00 145030.00 36097.00 145030.00 36108.00C144987.00 36129.33 144944.00 36150.67 144901.00 36172.00C144912.00 36193.33 144923.00 36214.67 144934.00 36236.00C144923.00 36246.67 144912.00 36257.33 144901.00 36268.00C144890.33 36268.00 144879.67 36268.00 144869.00 36268.00C144890.67 36300.33 144912.33 36332.67 144934.00 36365.00C144934.00 36386.33 144934.00 36407.67 144934.00 36429.00C144955.33 36450.67 144976.67 36472.33 144998.00 36494.00C145019.33 36483.00 145040.67 36472.00 145062.00 36461.00C145083.67 36439.67 145105.33 36418.33 145127.00 36397.00C145137.67 36375.67 145148.33 36354.33 145159.00 36333.00C145169.67 36322.33 145180.33 36311.67 145191.00 36301.00C145212.33 36322.33 145233.67 36343.67 145255.00 36365.00C145255.00 36386.33 145255.00 36407.67 145255.00 36429.00C145222.87 36461.39 145190.88 36493.94 145158.67 36526.22C145126.45 36547.48 145094.22 36568.74 145062.00 36590.00C145051.33 36590.00 145040.67 36590.00 145030.00 36590.00C145008.67 36611.33 144987.33 36632.67 144966.00 36654.00C144955.33 36654.00 144944.67 36654.00 144934.00 36654.00C144923.00 36664.67 144912.00 36675.33 144901.00 36686.00C144912.00 36675.33 144923.00 36664.67 144934.00 36654.00C144944.67 36664.67 144955.33 36675.33 144966.00 36686.00C144976.67 36675.33 144987.33 36664.67 144998.00 36654.00C145019.33 36654.00 145040.67 36654.00 145062.00 36654.00C145062.00 36686.33 145062.00 36718.67 145062.00 36751.00C145072.67 36761.67 145083.33 36772.33 145094.00 36783.00C145094.00 36772.33 145094.00 36761.67 145094.00 36751.00C145083.33 36729.33 145072.67 36707.67 145062.00 36686.00C145105.00 36664.67 145148.00 36643.33 145191.00 36622.00C145191.00 36643.33 145191.00 36664.67 145191.00 36686.00C145201.67 36675.33 145212.33 36664.67 145223.00 36654.00C145223.00 36664.67 145223.00 36675.33 145223.00 36686.00C145233.67 36697.00 145244.33 36708.00 145255.00 36719.00C145255.00 36676.00 145255.00 36633.00 145255.00 36590.00C145265.67 36590.00 145276.33 36590.00 145287.00 36590.00C145298.00 36600.67 145309.00 36611.33 145320.00 36622.00C145341.33 36686.33 145362.67 36750.67 145384.00 36815.00C145405.33 36836.33 145426.67 36857.67 145448.00 36879.00C145448.00 36922.00 145448.00 36965.00 145448.00 37008.00C145426.67 36997.33 145405.33 36986.67 145384.00 36976.00C145384.00 36954.33 145384.00 36932.67 145384.00 36911.00C145373.33 36922.00 145362.67 36933.00 145352.00 36944.00C145341.33 36933.00 145330.67 36922.00 145320.00 36911.00C145309.00 36922.00 145298.00 36933.00 145287.00 36944.00C145287.00 36954.67 145287.00 36965.33 145287.00 36976.00C145298.00 36965.33 145309.00 36954.67 145320.00 36944.00C145330.79 36954.72 145341.45 36965.60 145352.33 36976.22C145384.22 36997.48 145416.11 37018.74 145448.00 37040.00C145437.33 37061.33 145426.67 37082.67 145416.00 37104.00C145426.67 37093.33 145437.33 37082.67 145448.00 37072.00C145458.67 37072.00 145469.33 37072.00 145480.00 37072.00C145480.00 37104.33 145480.00 37136.67 145480.00 37169.00C145458.67 37179.67 145437.33 37190.33 145416.00 37201.00C145437.33 37222.33 145458.67 37243.67 145480.00 37265.00C145490.67 37265.00 145501.33 37265.00 145512.00 37265.00C145523.00 37254.33 145534.00 37243.67 145545.00 37233.00C145544.91 37243.79 145545.17 37254.63 145544.87 37265.38C145533.91 37297.58 145522.96 37329.79 145512.00 37362.00C145480.00 37372.67 145448.00 37383.33 145416.00 37394.00C145405.33 37404.67 145394.67 37415.33 145384.00 37426.00C145384.00 37565.33 145384.00 37704.67 145384.00 37844.00C145405.33 37833.33 145426.67 37822.67 145448.00 37812.00C145480.33 37822.67 145512.67 37833.33 145545.00 37844.00C145555.90 37854.80 145566.61 37865.82 145577.63 37876.48C145620.09 37908.65 145662.54 37940.83 145705.00 37973.00C145715.67 37994.33 145726.33 38015.67 145737.00 38037.00C145726.33 38037.00 145715.67 38037.00 145705.00 38037.00C145694.33 38058.33 145683.67 38079.67 145673.00 38101.00C145683.67 38090.33 145694.33 38079.67 145705.00 38069.00C145726.67 38069.00 145748.33 38069.00 145770.00 38069.00C145791.33 38101.00 145812.67 38133.00 145834.00 38165.00C145855.33 38176.00 145876.67 38187.00 145898.00 38198.00C145876.67 38208.67 145855.33 38219.33 145834.00 38230.00C145834.00 38240.67 145834.00 38251.33 145834.00 38262.00C145823.33 38262.00 145812.67 38262.00 145802.00 38262.00C145802.00 38251.33 145802.00 38240.67 145802.00 38230.00C145802.00 38251.33 145802.00 38272.67 145802.00 38294.00C145823.33 38283.33 145844.67 38272.67 145866.00 38262.00C145866.00 38251.33 145866.00 38240.67 145866.00 38230.00C145876.67 38240.67 145887.33 38251.33 145898.00 38262.00C145898.00 38294.00 145898.00 38326.00 145898.00 38358.00C145919.67 38411.67 145941.33 38465.33 145963.00 38519.00C145952.00 38508.33 145941.00 38497.67 145930.00 38487.00C145919.33 38508.33 145908.67 38529.67 145898.00 38551.00C145908.67 38540.33 145919.33 38529.67 145930.00 38519.00C145951.67 38519.00 145973.33 38519.00 145995.00 38519.00C146027.00 38594.00 146059.00 38669.00 146091.00 38744.00C146080.33 38754.67 146069.67 38765.33 146059.00 38776.00C146069.67 38787.00 146080.33 38798.00 146091.00 38809.00C146059.00 38841.00 146027.00 38873.00 145995.00 38905.00C145984.33 38894.33 145973.67 38883.67 145963.00 38873.00C145930.67 38883.67 145898.33 38894.33 145866.00 38905.00C145898.33 38905.00 145930.67 38905.00 145963.00 38905.00C145984.33 38926.33 146005.67 38947.67 146027.00 38969.00C146027.00 38979.67 146027.00 38990.33 146027.00 39001.00C146016.15 39022.87 146005.56 39044.88 145994.55 39066.66C145973.04 39098.44 145951.52 39130.22 145930.00 39162.00C145908.67 39172.67 145887.33 39183.33 145866.00 39194.00C145866.00 39183.33 145866.00 39172.67 145866.00 39162.00C145844.67 39162.00 145823.33 39162.00 145802.00 39162.00C145866.33 39237.00 145930.67 39312.00 145995.00 39387.00C146005.67 39387.00 146016.33 39387.00 146027.00 39387.00C146091.33 39462.00 146155.67 39537.00 146220.00 39612.00C146241.33 39601.33 146262.67 39590.67 146284.00 39580.00C146294.81 39569.31 146305.42 39558.34 146316.36 39547.82C146337.90 39537.22 146359.45 39526.61 146381.00 39516.00C146434.33 39516.00 146487.67 39516.00 146541.00 39516.00C146594.67 39505.33 146648.33 39494.67 146702.00 39484.00C146712.67 39473.33 146723.33 39462.67 146734.00 39452.00C146777.00 39441.00 146820.00 39430.00 146863.00 39419.00C146906.25 39397.27 146949.62 39375.79 146993.07 39354.47C147035.38 39333.31 147077.69 39312.15 147120.00 39291.00C147109.33 39280.33 147098.67 39269.67 147088.00 39259.00C147109.33 39259.00 147130.67 39259.00 147152.00 39259.00C147152.00 39248.33 147152.00 39237.67 147152.00 39227.00C147184.33 39216.00 147216.67 39205.00 147249.00 39194.00C147249.00 39205.00 147249.00 39216.00 147249.00 39227.00C147249.00 39216.00 147249.00 39205.00 147249.00 39194.00C147259.67 39183.33 147270.33 39172.67 147281.00 39162.00C147291.67 39172.67 147302.33 39183.33 147313.00 39194.00C147313.00 39183.33 147313.00 39172.67 147313.00 39162.00C147323.67 39172.67 147334.33 39183.33 147345.00 39194.00C147334.33 39194.00 147323.67 39194.00 147313.00 39194.00C147323.67 39205.00 147334.33 39216.00 147345.00 39227.00C147355.67 39216.00 147366.33 39205.00 147377.00 39194.00C147377.00 39205.00 147377.00 39216.00 147377.00 39227.00C147387.67 39216.00 147398.33 39205.00 147409.00 39194.00C147398.33 39183.33 147387.67 39172.67 147377.00 39162.00C147355.67 39162.00 147334.33 39162.00 147313.00 39162.00C147313.00 39151.33 147313.00 39140.67 147313.00 39130.00C147356.13 39130.04 147399.27 39129.91 147442.39 39130.07C147506.60 39140.71 147570.80 39151.36 147635.00 39162.00C147635.00 39151.33 147635.00 39140.67 147635.00 39130.00C147645.67 39119.33 147656.33 39108.67 147667.00 39098.00C147667.00 39108.67 147667.00 39119.33 147667.00 39130.00C147656.33 39140.67 147645.67 39151.33 147635.00 39162.00C147645.67 39215.67 147656.33 39269.33 147667.00 39323.00C147667.00 39333.67 147667.00 39344.33 147667.00 39355.00C147656.33 39355.00 147645.67 39355.00 147635.00 39355.00C147624.00 39344.33 147613.00 39333.67 147602.00 39323.00C147602.00 39333.67 147602.00 39344.33 147602.00 39355.00C147591.33 39355.00 147580.67 39355.00 147570.00 39355.00C147559.33 39333.67 147548.67 39312.33 147538.00 39291.00C147527.33 39280.33 147516.67 39269.67 147506.00 39259.00C147516.67 39269.67 147527.33 39280.33 147538.00 39291.00C147538.00 39301.67 147538.00 39312.33 147538.00 39323.00C147516.67 39323.00 147495.33 39323.00 147474.00 39323.00C147474.00 39312.33 147474.00 39301.67 147474.00 39291.00C147463.33 39301.67 147452.67 39312.33 147442.00 39323.00C147431.00 39312.33 147420.00 39301.67 147409.00 39291.00C147409.00 39301.67 147409.00 39312.33 147409.00 39323.00C147430.67 39323.00 147452.33 39323.00 147474.00 39323.00C147463.33 39333.67 147452.67 39344.33 147442.00 39355.00C147399.00 39365.67 147356.00 39376.33 147313.00 39387.00C147302.19 39397.69 147291.58 39408.65 147280.65 39419.18C147259.43 39430.12 147238.22 39441.06 147217.00 39452.00C147227.67 39452.00 147238.33 39452.00 147249.00 39452.00C147270.33 39441.00 147291.67 39430.00 147313.00 39419.00C147313.00 39408.33 147313.00 39397.67 147313.00 39387.00C147334.33 39397.67 147355.67 39408.33 147377.00 39419.00C147409.33 39419.00 147441.67 39419.00 147474.00 39419.00C147452.33 39419.00 147430.67 39419.00 147409.00 39419.00C147420.02 39430.14 147431.33 39441.09 147442.18 39452.36C147452.79 39473.57 147463.39 39494.79 147474.00 39516.00C147484.67 39483.67 147495.33 39451.33 147506.00 39419.00C147538.13 39419.03 147570.27 39418.93 147602.39 39419.05C147688.26 39430.03 147774.13 39441.02 147860.00 39452.00C147892.00 39473.33 147924.00 39494.67 147956.00 39516.00C147924.00 39623.00 147892.00 39730.00 147860.00 39837.00C147827.67 39890.67 147795.33 39944.33 147763.00 39998.00C147795.33 39987.33 147827.67 39976.67 147860.00 39966.00C147892.00 39912.33 147924.00 39858.67 147956.00 39805.00C148009.67 39751.67 148063.33 39698.33 148117.00 39645.00C148159.67 39569.67 148202.33 39494.33 148245.00 39419.00C148256.00 39376.33 148267.00 39333.67 148278.00 39291.00C148320.67 39237.33 148363.33 39183.67 148406.00 39130.00C148416.67 39108.67 148427.33 39087.33 148438.00 39066.00C148491.79 39022.95 148545.50 38979.77 148599.34 38936.80C148652.89 38904.86 148706.45 38872.93 148760.00 38841.00C148770.67 38841.00 148781.33 38841.00 148792.00 38841.00C148792.00 38851.67 148792.00 38862.33 148792.00 38873.00C148802.67 38873.00 148813.33 38873.00 148824.00 38873.00C148834.81 38883.69 148845.42 38894.66 148856.36 38905.18C148877.90 38915.78 148899.45 38926.39 148921.00 38937.00C148931.67 38947.67 148942.33 38958.33 148953.00 38969.00C148931.67 38947.67 148910.33 38926.33 148889.00 38905.00C148942.33 38787.00 148995.67 38669.00 149049.00 38551.00C149071.29 38540.11 149093.46 38528.95 149115.83 38518.22C149190.22 38486.48 149264.61 38454.74 149339.00 38423.00C149392.33 38369.33 149445.67 38315.67 149499.00 38262.00C149531.33 38251.33 149563.67 38240.67 149596.00 38230.00C149639.10 38251.42 149682.27 38272.73 149725.33 38294.22C149757.22 38315.48 149789.11 38336.74 149821.00 38358.00C149896.00 38519.00 149971.00 38680.00 150046.00 38841.00C150067.33 38873.00 150088.67 38905.00 150110.00 38937.00C150131.67 38947.67 150153.33 38958.33 150175.00 38969.00C150185.67 38947.67 150196.33 38926.33 150207.00 38905.00C150260.91 38872.89 150314.76 38840.67 150368.71 38808.64C150389.80 38797.76 150410.90 38786.88 150432.00 38776.00C150485.67 38776.00 150539.33 38776.00 150593.00 38776.00C150625.00 38765.33 150657.00 38754.67 150689.00 38744.00C150699.67 38744.00 150710.33 38744.00 150721.00 38744.00C150721.00 38754.67 150721.00 38765.33 150721.00 38776.00C150731.79 38776.07 150742.62 38775.87 150753.39 38776.10C150796.26 38787.07 150839.13 38798.03 150882.00 38809.00C150946.33 38809.00 151010.67 38809.00 151075.00 38809.00C151257.33 38862.33 151439.67 38915.67 151622.00 38969.00C151654.13 38990.70 151686.17 39012.57 151718.36 39034.16C151814.69 39076.85 151911.05 39119.46 152007.35 39162.19C152147.05 39237.35 152286.69 39312.62 152426.42 39387.72C152469.08 39409.17 152511.68 39430.76 152554.38 39452.13C152618.69 39473.50 152683.08 39494.71 152747.35 39516.19C152908.38 39602.02 153069.36 39687.94 153230.42 39773.71C153315.62 39816.48 153400.81 39859.24 153486.00 39902.00C153539.67 39902.00 153593.33 39902.00 153647.00 39902.00C153625.67 39912.67 153604.33 39923.33 153583.00 39934.00C153615.00 39934.00 153647.00 39934.00 153679.00 39934.00C153690.00 39923.33 153701.00 39912.67 153712.00 39902.00C153701.00 39880.33 153690.00 39858.67 153679.00 39837.00C153668.33 39848.00 153657.67 39859.00 153647.00 39870.00C153647.00 39859.00 153647.00 39848.00 153647.00 39837.00C153657.67 39826.33 153668.33 39815.67 153679.00 39805.00C153700.67 39848.00 153722.33 39891.00 153744.00 39934.00C153744.00 39955.33 153744.00 39976.67 153744.00 39998.00C153765.33 40008.67 153786.67 40019.33 153808.00 40030.00C153851.00 40030.00 153894.00 40030.00 153937.00 40030.00C153947.67 40073.00 153958.33 40116.00 153969.00 40159.00C153958.33 40169.67 153947.67 40180.33 153937.00 40191.00C153926.00 40223.33 153915.00 40255.67 153904.00 40288.00C153925.67 40298.67 153947.33 40309.33 153969.00 40320.00C153958.33 40309.33 153947.67 40298.67 153937.00 40288.00C153958.33 40255.67 153979.67 40223.33 154001.00 40191.00C153990.33 40137.33 153979.67 40083.67 153969.00 40030.00C153947.33 40008.67 153925.67 39987.33 153904.00 39966.00C153882.67 39976.67 153861.33 39987.33 153840.00 39998.00C153829.33 39987.33 153818.67 39976.67 153808.00 39966.00C153808.00 39955.33 153808.00 39944.67 153808.00 39934.00C153829.33 39934.00 153850.67 39934.00 153872.00 39934.00C153872.00 39923.33 153872.00 39912.67 153872.00 39902.00C153861.33 39902.00 153850.67 39902.00 153840.00 39902.00C153829.33 39891.33 153818.67 39880.67 153808.00 39870.00C153786.67 39880.67 153765.33 39891.33 153744.00 39902.00C153733.33 39891.33 153722.67 39880.67 153712.00 39870.00C153722.67 39859.00 153733.33 39848.00 153744.00 39837.00C153754.78 39837.09 153765.63 39836.83 153776.38 39837.13C153808.25 39848.09 153840.13 39859.04 153872.00 39870.00C153979.33 39987.67 154086.67 40105.33 154194.00 40223.00C154269.63 40277.16 154345.34 40331.20 154420.91 40385.43C154463.27 40417.29 154505.64 40449.14 154548.00 40481.00C154580.00 40481.00 154612.00 40481.00 154644.00 40481.00C154644.00 40491.67 154644.00 40502.33 154644.00 40513.00C154708.33 40502.33 154772.67 40491.67 154837.00 40481.00C154869.11 40523.75 154901.10 40566.60 154933.28 40609.28C154943.85 40619.85 154954.43 40630.43 154965.00 40641.00C154954.33 40609.00 154943.67 40577.00 154933.00 40545.00C154954.67 40545.00 154976.33 40545.00 154998.00 40545.00C155062.33 40566.33 155126.67 40587.67 155191.00 40609.00C155287.33 40619.67 155383.67 40630.33 155480.00 40641.00C155544.33 40609.00 155608.67 40577.00 155673.00 40545.00C155683.67 40534.33 155694.33 40523.67 155705.00 40513.00C155715.67 40513.00 155726.33 40513.00 155737.00 40513.00C155758.33 40523.67 155779.67 40534.33 155801.00 40545.00C155865.33 40545.00 155929.67 40545.00 155994.00 40545.00C156037.00 40502.00 156080.00 40459.00 156123.00 40416.00C156144.33 40416.00 156165.67 40416.00 156187.00 40416.00C156187.00 40448.33 156187.00 40480.67 156187.00 40513.00C156198.00 40534.33 156209.00 40555.67 156220.00 40577.00C156220.00 40566.33 156220.00 40555.67 156220.00 40545.00C156209.00 40545.00 156198.00 40545.00 156187.00 40545.00C156198.00 40534.33 156209.00 40523.67 156220.00 40513.00C156305.80 40523.65 156391.59 40534.43 156477.40 40545.00C156552.27 40545.00 156627.13 40545.00 156702.00 40545.00C156744.67 40534.33 156787.33 40523.67 156830.00 40513.00C156883.67 40513.00 156937.33 40513.00 156991.00 40513.00C156991.00 40523.67 156991.00 40534.33 156991.00 40545.00C156980.33 40545.00 156969.67 40545.00 156959.00 40545.00C156959.00 40555.67 156959.00 40566.33 156959.00 40577.00C157002.11 40652.24 157045.32 40727.43 157088.36 40802.71C157098.90 40823.81 157109.45 40844.90 157120.00 40866.00C157141.33 40823.33 157162.67 40780.67 157184.00 40738.00C157173.33 40716.33 157162.67 40694.67 157152.00 40673.00C157173.33 40662.33 157194.67 40651.67 157216.00 40641.00C157259.00 40651.67 157302.00 40662.33 157345.00 40673.00C157591.33 40673.00 157837.67 40673.00 158084.00 40673.00C158084.00 40684.00 158084.00 40695.00 158084.00 40706.00C158073.33 40695.00 158062.67 40684.00 158052.00 40673.00C158073.67 40705.33 158095.33 40737.67 158117.00 40770.00C158085.84 40800.79 158054.37 40831.26 158023.73 40862.57C158001.15 40885.38 157978.58 40908.19 157956.00 40931.00C157956.00 40984.33 157956.00 41037.67 157956.00 41091.00C157966.67 41112.67 157977.33 41134.33 157988.00 41156.00C157988.00 41166.67 157988.00 41177.33 157988.00 41188.00C157955.67 41198.67 157923.33 41209.33 157891.00 41220.00C157890.94 41252.46 157891.13 41284.95 157890.90 41317.39C157880.27 41359.92 157869.63 41402.46 157859.00 41445.00C157880.72 41466.46 157902.61 41487.78 157924.22 41509.33C157945.59 41541.63 157966.80 41574.07 157988.28 41606.28C157999.09 41616.98 158009.70 41627.92 158020.64 41638.47C158063.50 41670.43 158106.48 41702.25 158149.28 41734.29C158159.85 41745.19 158170.43 41756.10 158181.00 41767.00C158191.67 41799.00 158202.33 41831.00 158213.00 41863.00C158181.00 41895.33 158149.00 41927.67 158117.00 41960.00C158116.89 41970.92 158117.21 41981.89 158116.84 41992.78C158105.89 42046.19 158094.95 42099.59 158084.00 42153.00C158062.57 42163.77 158041.05 42174.37 158019.68 42185.24C157976.79 42217.16 157933.89 42249.08 157891.00 42281.00C157880.23 42302.43 157869.63 42323.95 157858.76 42345.32C157826.84 42388.21 157794.92 42431.11 157763.00 42474.00C157720.10 42495.54 157677.10 42516.87 157634.00 42538.00C157623.33 42548.67 157612.67 42559.33 157602.00 42570.00C157602.00 42613.00 157602.00 42656.00 157602.00 42699.00C157580.67 42720.33 157559.33 42741.67 157538.00 42763.00C157538.00 42827.33 157538.00 42891.67 157538.00 42956.00C157527.33 42956.00 157516.67 42956.00 157506.00 42956.00C157484.33 42945.33 157462.67 42934.67 157441.00 42924.00C157430.33 42924.00 157419.67 42924.00 157409.00 42924.00C157398.29 42945.60 157387.29 42967.08 157376.75 42988.76C157366.17 43020.84 157355.58 43052.92 157345.00 43085.00C157345.00 43095.67 157345.00 43106.33 157345.00 43117.00C157334.33 43117.00 157323.67 43117.00 157313.00 43117.00C157291.33 43149.33 157269.67 43181.67 157248.00 43214.00C157226.67 43224.67 157205.33 43235.33 157184.00 43246.00C157151.87 43246.05 157119.72 43245.90 157087.61 43246.08C157034.07 43256.72 156980.54 43267.36 156927.00 43278.00C156905.67 43288.67 156884.33 43299.33 156863.00 43310.00C156809.33 43310.00 156755.67 43310.00 156702.00 43310.00C156669.61 43341.94 156637.06 43373.72 156605.00 43406.00C156605.00 43427.67 156605.00 43449.33 156605.00 43471.00C156658.67 43471.00 156712.33 43471.00 156766.00 43471.00C156766.00 43503.00 156766.00 43535.00 156766.00 43567.00C156744.67 43567.00 156723.33 43567.00 156702.00 43567.00C156691.31 43577.81 156680.34 43588.42 156669.82 43599.36C156658.88 43620.90 156647.94 43642.45 156637.00 43664.00C156637.00 43696.00 156637.00 43728.00 156637.00 43760.00C156615.67 43770.67 156594.33 43781.33 156573.00 43792.00C156551.67 43835.00 156530.33 43878.00 156509.00 43921.00C156455.33 43931.67 156401.67 43942.33 156348.00 43953.00C156348.00 43963.67 156348.00 43974.33 156348.00 43985.00C156326.67 43995.67 156305.33 44006.33 156284.00 44017.00C156294.67 44049.33 156305.33 44081.67 156316.00 44114.00C156305.33 44135.33 156294.67 44156.67 156284.00 44178.00C156284.00 44167.33 156284.00 44156.67 156284.00 44146.00C156273.33 44156.67 156262.67 44167.33 156252.00 44178.00C156198.33 44167.33 156144.67 44156.67 156091.00 44146.00C156037.11 44167.47 155983.14 44188.78 155929.29 44210.36C155908.19 44220.90 155887.10 44231.45 155866.00 44242.00C155855.33 44242.00 155844.67 44242.00 155834.00 44242.00C155791.00 44220.67 155748.00 44199.33 155705.00 44178.00C155694.33 44167.33 155683.67 44156.67 155673.00 44146.00C155630.00 44178.00 155587.00 44210.00 155544.00 44242.00C155522.67 44242.00 155501.33 44242.00 155480.00 44242.00C155448.00 44231.33 155416.00 44220.67 155384.00 44210.00C155384.00 44231.67 155384.00 44253.33 155384.00 44275.00C155373.00 44296.33 155362.00 44317.67 155351.00 44339.00C155329.67 44349.67 155308.33 44360.33 155287.00 44371.00C155276.33 44360.33 155265.67 44349.67 155255.00 44339.00C155255.00 44317.67 155255.00 44296.33 155255.00 44275.00C155233.67 44275.00 155212.33 44275.00 155191.00 44275.00C155169.33 44307.00 155147.67 44339.00 155126.00 44371.00C155104.67 44381.67 155083.33 44392.33 155062.00 44403.00C155040.67 44403.00 155019.33 44403.00 154998.00 44403.00C154976.33 44381.67 154954.67 44360.33 154933.00 44339.00C154933.00 44306.67 154933.00 44274.33 154933.00 44242.00C154922.33 44242.00 154911.67 44242.00 154901.00 44242.00C154890.33 44231.33 154879.67 44220.67 154869.00 44210.00C154858.33 44231.67 154847.67 44253.33 154837.00 44275.00C154837.00 44307.00 154837.00 44339.00 154837.00 44371.00C154804.67 44392.33 154772.33 44413.67 154740.00 44435.00C154729.33 44456.67 154718.67 44478.33 154708.00 44500.00C154708.00 44532.00 154708.00 44564.00 154708.00 44596.00C154665.23 44649.75 154622.55 44703.58 154579.72 44757.28C154558.14 44778.52 154536.57 44799.76 154515.00 44821.00C154493.46 44831.85 154471.79 44842.45 154450.34 44853.45C154418.56 44874.96 154386.78 44896.48 154355.00 44918.00C154344.00 44950.00 154333.00 44982.00 154322.00 45014.00C154322.00 45024.67 154322.00 45035.33 154322.00 45046.00C154311.33 45067.67 154300.67 45089.33 154290.00 45111.00C154268.67 45111.00 154247.33 45111.00 154226.00 45111.00C154193.56 45153.75 154161.23 45196.59 154128.72 45239.28C154096.81 45271.52 154064.91 45303.76 154033.00 45336.00C154022.33 45357.33 154011.67 45378.67 154001.00 45400.00C154001.00 45421.33 154001.00 45442.67 154001.00 45464.00C154022.33 45507.00 154043.67 45550.00 154065.00 45593.00C154065.00 45614.33 154065.00 45635.67 154065.00 45657.00C154054.33 45678.67 154043.67 45700.33 154033.00 45722.00C154022.33 45732.67 154011.67 45743.33 154001.00 45754.00C154011.74 45786.11 154022.35 45818.28 154033.18 45850.36C154043.79 45871.57 154054.39 45892.79 154065.00 45914.00C154045.70 45934.00 154026.32 45953.91 154006.55 45973.45C154003.31 45976.55 154000.07 45979.66 153998.13 45983.78C153934.75 46089.18 153871.38 46194.59 153808.00 46300.00C153808.00 46364.33 153808.00 46428.67 153808.00 46493.00C153786.54 46514.39 153765.20 46535.92 153743.68 46557.23C153668.78 46610.82 153593.89 46664.41 153519.00 46718.00C153500.85 46771.30 153482.64 46824.58 153464.98 46878.05C153461.32 46889.03 153457.66 46900.02 153454.00 46911.00C153443.33 46911.00 153432.67 46911.00 153422.00 46911.00C153411.33 46900.33 153400.67 46889.67 153390.00 46879.00C153368.67 46879.00 153347.33 46879.00 153326.00 46879.00C153304.33 46943.33 153282.67 47007.67 153261.00 47072.00C153250.33 47082.67 153239.67 47093.33 153229.00 47104.00C153207.67 47168.33 153186.33 47232.67 153165.00 47297.00C153165.00 47329.00 153165.00 47361.00 153165.00 47393.00C153143.67 47414.67 153122.33 47436.33 153101.00 47458.00C153068.67 47468.67 153036.33 47479.33 153004.00 47490.00C152993.31 47500.81 152982.34 47511.42 152971.82 47522.36C152961.21 47543.57 152950.61 47564.79 152940.00 47586.00C152972.00 47607.67 153004.00 47629.33 153036.00 47651.00C153036.00 47661.67 153036.00 47672.33 153036.00 47683.00C152971.67 47683.00 152907.33 47683.00 152843.00 47683.00C152821.43 47704.66 152799.68 47726.15 152778.22 47747.91C152714.15 47822.60 152650.07 47897.30 152586.00 47972.00C152575.33 48004.33 152564.67 48036.67 152554.00 48069.00C152554.05 48101.13 152553.90 48133.28 152554.08 48165.39C152564.72 48218.93 152575.36 48272.46 152586.00 48326.00C152586.00 48347.33 152586.00 48368.67 152586.00 48390.00C152618.33 48443.67 152650.67 48497.33 152683.00 48551.00C152683.00 48636.67 152683.00 48722.33 152683.00 48808.00C152704.33 48808.00 152725.67 48808.00 152747.00 48808.00C152768.33 48797.33 152789.67 48786.67 152811.00 48776.00C152821.67 48776.00 152832.33 48776.00 152843.00 48776.00C152843.00 48786.67 152843.00 48797.33 152843.00 48808.00C152907.33 48851.00 152971.67 48894.00 153036.00 48937.00C153057.67 48958.33 153079.33 48979.67 153101.00 49001.00C153090.00 49044.00 153079.00 49087.00 153068.00 49130.00C153079.00 49151.33 153090.00 49172.67 153101.00 49194.00C153133.00 49215.33 153165.00 49236.67 153197.00 49258.00C153197.00 49290.33 153197.00 49322.67 153197.00 49355.00C153186.33 49355.00 153175.67 49355.00 153165.00 49355.00C153165.00 49387.00 153165.00 49419.00 153165.00 49451.00C153143.67 49483.33 153122.33 49515.67 153101.00 49548.00C153111.67 49590.67 153122.33 49633.33 153133.00 49676.00C153133.00 49687.00 153133.00 49698.00 153133.00 49709.00C153116.10 49742.79 153099.35 49776.66 153081.85 49810.14C153076.96 49819.39 153072.44 49828.87 153067.31 49837.97C153014.21 49912.65 152961.10 49987.32 152908.00 50062.00C152897.33 50072.67 152886.67 50083.33 152876.00 50094.00C152876.00 50104.67 152876.00 50115.33 152876.00 50126.00C152854.33 50137.00 152832.67 50148.00 152811.00 50159.00C152789.67 50180.33 152768.33 50201.67 152747.00 50223.00C152736.33 50244.33 152725.67 50265.67 152715.00 50287.00C152725.67 50308.67 152736.33 50330.33 152747.00 50352.00C152757.79 50362.72 152768.45 50373.60 152779.33 50384.22C152811.55 50405.48 152843.78 50426.74 152876.00 50448.00C152876.00 50469.33 152876.00 50490.67 152876.00 50512.00C152865.00 50533.67 152854.00 50555.33 152843.00 50577.00C152811.00 50609.00 152779.00 50641.00 152747.00 50673.00C152747.00 50705.33 152747.00 50737.67 152747.00 50770.00C152757.67 50802.00 152768.33 50834.00 152779.00 50866.00C152789.67 50866.00 152800.33 50866.00 152811.00 50866.00C152864.67 50919.67 152918.33 50973.33 152972.00 51027.00C152982.67 51059.00 152993.33 51091.00 153004.00 51123.00C153004.00 51176.67 153004.00 51230.33 153004.00 51284.00C153047.00 51327.00 153090.00 51370.00 153133.00 51413.00C153133.00 51423.67 153133.00 51434.33 153133.00 51445.00C153154.33 51466.33 153175.67 51487.67 153197.00 51509.00C153186.33 51562.67 153175.67 51616.33 153165.00 51670.00C153165.00 51691.33 153165.00 51712.67 153165.00 51734.00C153197.00 51809.00 153229.00 51884.00 153261.00 51959.00C153261.00 52023.33 153261.00 52087.67 153261.00 52152.00C153271.67 52152.00 153282.33 52152.00 153293.00 52152.00C153314.67 52184.33 153336.33 52216.67 153358.00 52249.00C153368.73 52313.45 153379.30 52377.95 153390.13 52442.38C153400.76 52474.39 153411.52 52506.36 153422.08 52538.39C153432.72 52591.93 153443.36 52645.46 153454.00 52699.00C153454.00 52731.00 153454.00 52763.00 153454.00 52795.00C153411.33 52848.67 153368.67 52902.33 153326.00 52956.00C153326.00 52977.33 153326.00 52998.67 153326.00 53020.00C153347.33 53073.67 153368.67 53127.33 153390.00 53181.00C153389.95 53213.46 153390.10 53245.94 153389.92 53278.39C153379.28 53331.59 153368.64 53384.80 153358.00 53438.00C153347.33 53459.67 153336.67 53481.33 153326.00 53503.00C153281.20 53524.95 153236.53 53547.15 153191.95 53569.53C153172.30 53579.35 153152.65 53589.18 153133.00 53599.00C153133.00 53620.33 153133.00 53641.67 153133.00 53663.00C153111.20 53673.67 153089.47 53684.55 153067.61 53695.10C153025.08 53706.07 152982.54 53717.03 152940.00 53728.00C152929.33 53738.67 152918.67 53749.33 152908.00 53760.00C152897.33 53802.67 152886.67 53845.33 152876.00 53888.00C152854.33 53909.67 152832.67 53931.33 152811.00 53953.00C152768.33 53963.67 152725.67 53974.33 152683.00 53985.00C152672.00 53995.67 152661.00 54006.33 152650.00 54017.00C152639.33 54060.00 152628.67 54103.00 152618.00 54146.00C152618.00 54156.67 152618.00 54167.33 152618.00 54178.00C152586.00 54210.00 152554.00 54242.00 152522.00 54274.00C152511.33 54338.33 152500.67 54402.67 152490.00 54467.00C152457.67 54488.33 152425.33 54509.67 152393.00 54531.00C152382.26 54563.44 152371.65 54595.95 152360.82 54628.36C152350.21 54649.57 152339.61 54670.79 152329.00 54692.00C152307.54 54692.05 152286.06 54691.90 152264.61 54692.08C152211.07 54702.72 152157.54 54713.36 152104.00 54724.00C152093.33 54745.67 152082.67 54767.33 152072.00 54789.00C152061.33 54799.67 152050.67 54810.33 152040.00 54821.00C152040.00 54842.33 152040.00 54863.67 152040.00 54885.00C152059.63 54904.52 152079.16 54924.15 152098.32 54944.14C152100.11 54946.27 152102.67 54948.08 152104.00 54950.40C152103.90 54961.19 152104.21 54972.02 152103.84 54982.78C152093.23 55035.85 152082.61 55088.93 152072.00 55142.00C152093.33 55217.00 152114.67 55292.00 152136.00 55367.00C152136.00 55388.67 152136.00 55410.33 152136.00 55432.00C152104.00 55432.00 152072.00 55432.00 152040.00 55432.00C152040.00 55442.67 152040.00 55453.33 152040.00 55464.00C152029.00 55485.33 152018.00 55506.67 152007.00 55528.00C152018.00 55581.67 152029.00 55635.33 152040.00 55689.00C152050.67 55710.33 152061.33 55731.67 152072.00 55753.00C152061.33 55785.33 152050.67 55817.67 152040.00 55850.00C152072.00 55914.33 152104.00 55978.67 152136.00 56043.00C152104.00 56096.33 152072.00 56149.67 152040.00 56203.00C152040.00 56224.67 152040.00 56246.33 152040.00 56268.00C152050.67 56278.67 152061.33 56289.33 152072.00 56300.00C152082.67 56343.00 152093.33 56386.00 152104.00 56429.00C152104.00 56450.33 152104.00 56471.67 152104.00 56493.00C152157.67 56546.67 152211.33 56600.33 152265.00 56654.00C152265.00 56696.67 152265.00 56739.33 152265.00 56782.00C152254.00 56792.67 152243.00 56803.33 152232.00 56814.00C152232.00 56825.00 152232.00 56836.00 152232.00 56847.00C152210.67 56857.67 152189.33 56868.33 152168.00 56879.00C152157.33 56889.67 152146.67 56900.33 152136.00 56911.00C152136.00 56921.67 152136.00 56932.33 152136.00 56943.00C152168.00 56975.00 152200.00 57007.00 152232.00 57039.00C152243.00 57082.00 152254.00 57125.00 152265.00 57168.00C152286.33 57189.33 152307.67 57210.67 152329.00 57232.00C152372.00 57232.00 152415.00 57232.00 152458.00 57232.00C152491.72 57249.38 152525.35 57266.91 152559.37 57283.69C152568.25 57288.13 152577.12 57292.56 152586.00 57297.00C152586.09 57307.93 152585.83 57318.88 152586.13 57329.79C152596.75 57393.86 152607.38 57457.93 152618.00 57522.00C152650.06 57554.28 152682.61 57586.06 152715.00 57618.00C152747.00 57618.00 152779.00 57618.00 152811.00 57618.00C152843.33 57661.00 152875.67 57704.00 152908.00 57747.00C152972.28 57768.49 153036.62 57789.82 153101.00 57811.00C153111.67 57811.00 153122.33 57811.00 153133.00 57811.00C153133.00 57821.67 153133.00 57832.33 153133.00 57843.00C153143.67 57864.67 153154.33 57886.33 153165.00 57908.00C153175.67 57918.67 153186.33 57929.33 153197.00 57940.00C153197.00 57961.33 153197.00 57982.67 153197.00 58004.00C153207.67 58025.33 153218.33 58046.67 153229.00 58068.00C153218.23 58111.25 153207.62 58154.54 153196.75 58197.75C153186.17 58229.50 153175.58 58261.25 153165.00 58293.00C153175.67 58304.00 153186.33 58315.00 153197.00 58326.00C153218.33 58315.00 153239.67 58304.00 153261.00 58293.00C153271.67 58304.00 153282.33 58315.00 153293.00 58326.00C153293.00 58336.67 153293.00 58347.33 153293.00 58358.00C153250.33 58400.67 153207.67 58443.33 153165.00 58486.00C153165.00 58518.33 153165.00 58550.67 153165.00 58583.00C153132.67 58636.67 153100.33 58690.33 153068.00 58744.00C153068.00 58754.67 153068.00 58765.33 153068.00 58776.00C153089.67 58808.00 153111.33 58840.00 153133.00 58872.00C153122.33 58904.33 153111.67 58936.67 153101.00 58969.00C153111.67 59001.00 153122.33 59033.00 153133.00 59065.00C153111.33 59075.67 153089.67 59086.33 153068.00 59097.00C153057.33 59107.67 153046.67 59118.33 153036.00 59129.00C153036.00 59140.00 153036.00 59151.00 153036.00 59162.00C153057.67 59172.67 153079.33 59183.33 153101.00 59194.00C153079.33 59236.67 153057.67 59279.33 153036.00 59322.00C153036.00 59375.67 153036.00 59429.33 153036.00 59483.00C153004.00 59526.00 152972.00 59569.00 152940.00 59612.00C152929.36 59676.47 152918.54 59740.92 152908.00 59805.40C152908.00 59826.60 152908.00 59847.80 152908.00 59869.00C152897.33 59901.00 152886.67 59933.00 152876.00 59965.00C152833.00 60018.67 152790.00 60072.33 152747.00 60126.00C152693.33 60147.33 152639.67 60168.67 152586.00 60190.00C152575.33 60233.00 152564.67 60276.00 152554.00 60319.00C152532.67 60340.33 152511.33 60361.67 152490.00 60383.00C152479.21 60383.06 152468.39 60382.87 152457.61 60383.10C152414.74 60393.73 152371.87 60404.36 152329.00 60415.00C152307.67 60415.00 152286.33 60415.00 152265.00 60415.00C152243.33 60393.67 152221.67 60372.33 152200.00 60351.00C152168.00 60351.00 152136.00 60351.00 152104.00 60351.00C152071.67 60383.33 152039.33 60415.67 152007.00 60448.00C151964.33 60469.33 151921.67 60490.67 151879.00 60512.00C151846.67 60512.00 151814.33 60512.00 151782.00 60512.00C151750.00 60490.67 151718.00 60469.33 151686.00 60448.00C151632.33 60437.00 151578.67 60426.00 151525.00 60415.00C151460.53 60425.98 151396.08 60437.13 151331.60 60448.00C151321.07 60448.00 151310.53 60448.00 151300.00 60448.00C151289.33 60469.33 151278.67 60490.67 151268.00 60512.00C151235.67 60533.33 151203.33 60554.67 151171.00 60576.00C151128.33 60586.67 151085.67 60597.33 151043.00 60608.00C150978.67 60597.33 150914.33 60586.67 150850.00 60576.00C150828.67 60619.00 150807.33 60662.00 150786.00 60705.00C150743.00 60694.33 150700.00 60683.67 150657.00 60673.00C150657.00 60705.00 150657.00 60737.00 150657.00 60769.00C150646.33 60769.00 150635.67 60769.00 150625.00 60769.00C150603.33 60779.67 150581.67 60790.33 150560.00 60801.00C150538.67 60801.00 150517.33 60801.00 150496.00 60801.00C150464.00 60790.33 150432.00 60779.67 150400.00 60769.00C150378.33 60779.67 150356.67 60790.33 150335.00 60801.00C150335.00 60812.00 150335.00 60823.00 150335.00 60834.00C150292.33 60812.33 150249.67 60790.67 150207.00 60769.00C150185.67 60726.33 150164.33 60683.67 150143.00 60641.00C150132.00 60630.00 150121.00 60619.00 150110.00 60608.00C150056.67 60586.67 150003.33 60565.33 149950.00 60544.00C149939.00 60533.33 149928.00 60522.67 149917.00 60512.00C149906.33 60479.67 149895.67 60447.33 149885.00 60415.00C149885.00 60404.33 149885.00 60393.67 149885.00 60383.00C149874.33 60372.33 149863.67 60361.67 149853.00 60351.00C149831.67 60351.00 149810.33 60351.00 149789.00 60351.00C149789.00 60361.67 149789.00 60372.33 149789.00 60383.00C149767.67 60383.00 149746.33 60383.00 149725.00 60383.00C149703.33 60361.67 149681.67 60340.33 149660.00 60319.00C149628.00 60308.33 149596.00 60297.67 149564.00 60287.00C149531.67 60254.67 149499.33 60222.33 149467.00 60190.00C149434.89 60179.26 149402.72 60168.65 149370.64 60157.82C149349.43 60147.21 149328.21 60136.61 149307.00 60126.00C149264.00 60136.67 149221.00 60147.33 149178.00 60158.00C149167.33 60147.33 149156.67 60136.67 149146.00 60126.00C149146.00 60115.33 149146.00 60104.67 149146.00 60094.00C149135.33 60094.00 149124.67 60094.00 149114.00 60094.00C149092.33 60104.67 149070.67 60115.33 149049.00 60126.00C148995.67 60126.00 148942.33 60126.00 148889.00 60126.00C148867.33 60147.33 148845.67 60168.67 148824.00 60190.00C148792.00 60168.67 148760.00 60147.33 148728.00 60126.00C148708.48 60145.63 148688.84 60165.15 148668.86 60184.32C148665.93 60187.28 148662.38 60189.79 148661.07 60193.93C148651.04 60214.29 148641.02 60234.64 148631.00 60255.00C148577.67 60265.67 148524.33 60276.33 148471.00 60287.00C148428.00 60319.00 148385.00 60351.00 148342.00 60383.00C148288.33 60372.33 148234.67 60361.67 148181.00 60351.00C148170.31 60361.81 148159.34 60372.42 148148.82 60383.36C148138.22 60404.90 148127.61 60426.45 148117.00 60448.00C148106.33 60448.00 148095.67 60448.00 148085.00 60448.00C148063.33 60437.00 148041.67 60426.00 148020.00 60415.00C148020.00 60393.67 148020.00 60372.33 148020.00 60351.00C147998.67 60340.33 147977.33 60329.67 147956.00 60319.00C147934.67 60319.00 147913.33 60319.00 147892.00 60319.00C147870.33 60340.33 147848.67 60361.67 147827.00 60383.00C147752.00 60393.67 147677.00 60404.33 147602.00 60415.00C147591.33 60426.00 147580.67 60437.00 147570.00 60448.00C147548.67 60448.00 147527.33 60448.00 147506.00 60448.00C147495.33 60469.33 147484.67 60490.67 147474.00 60512.00C147474.00 60555.00 147474.00 60598.00 147474.00 60641.00C147463.33 60662.33 147452.67 60683.67 147442.00 60705.00C147431.00 60705.00 147420.00 60705.00 147409.00 60705.00C147387.67 60672.67 147366.33 60640.33 147345.00 60608.00C147302.33 60608.00 147259.67 60608.00 147217.00 60608.00C147217.00 60629.67 147217.00 60651.33 147217.00 60673.00C147249.00 60715.67 147281.00 60758.33 147313.00 60801.00C147302.33 60822.67 147291.67 60844.33 147281.00 60866.00C147259.67 60866.00 147238.33 60866.00 147217.00 60866.00C147217.00 60833.67 147217.00 60801.33 147217.00 60769.00C147206.00 60769.00 147195.00 60769.00 147184.00 60769.00C147173.33 60779.67 147162.67 60790.33 147152.00 60801.00C147141.33 60833.33 147130.67 60865.67 147120.00 60898.00C147077.33 60919.33 147034.67 60940.67 146992.00 60962.00C146970.33 60994.33 146948.67 61026.67 146927.00 61059.00C146927.00 61112.33 146927.00 61165.67 146927.00 61219.00C146905.67 61219.00 146884.33 61219.00 146863.00 61219.00C146841.67 61229.67 146820.33 61240.33 146799.00 61251.00C146799.00 61294.00 146799.00 61337.00 146799.00 61380.00C146745.33 61444.33 146691.67 61508.67 146638.00 61573.00C146595.00 61573.00 146552.00 61573.00 146509.00 61573.00C146509.00 61605.33 146509.00 61637.67 146509.00 61670.00C146487.67 61712.67 146466.33 61755.33 146445.00 61798.00C146455.67 61830.33 146466.33 61862.67 146477.00 61895.00C146477.00 61905.67 146477.00 61916.33 146477.00 61927.00C146455.62 61948.47 146434.04 61969.78 146412.79 61991.34C146380.53 62044.89 146348.26 62098.45 146316.00 62152.00C146305.33 62152.00 146294.67 62152.00 146284.00 62152.00C146252.00 62130.33 146220.00 62108.67 146188.00 62087.00C146134.33 62108.67 146080.67 62130.33 146027.00 62152.00C146005.67 62152.00 145984.33 62152.00 145963.00 62152.00C145930.67 62162.67 145898.33 62173.33 145866.00 62184.00C145812.33 62237.67 145758.67 62291.33 145705.00 62345.00C145662.33 62355.67 145619.67 62366.33 145577.00 62377.00C145534.00 62398.33 145491.00 62419.67 145448.00 62441.00C145448.00 62451.67 145448.00 62462.33 145448.00 62473.00C145426.67 62473.00 145405.33 62473.00 145384.00 62473.00C145362.67 62494.67 145341.33 62516.33 145320.00 62538.00C145309.00 62580.67 145298.00 62623.33 145287.00 62666.00C145276.08 62666.10 145265.12 62665.79 145254.22 62666.15C145200.81 62676.77 145147.41 62687.39 145094.00 62698.00C145083.33 62730.33 145072.67 62762.67 145062.00 62795.00C145051.21 62805.72 145040.55 62816.60 145029.67 62827.22C144997.78 62848.48 144965.89 62869.74 144934.00 62891.00C144934.00 62901.67 144934.00 62912.33 144934.00 62923.00C144901.67 62976.67 144869.33 63030.33 144837.00 63084.00C144805.00 63094.67 144773.00 63105.33 144741.00 63116.00C144730.19 63127.02 144719.59 63138.34 144708.64 63149.18C144687.10 63159.78 144665.55 63170.39 144644.00 63181.00C144633.33 63181.00 144622.67 63181.00 144612.00 63181.00C144601.33 63223.67 144590.67 63266.33 144580.00 63309.00C144569.33 63320.00 144558.67 63331.00 144548.00 63342.00C144537.33 63395.33 144526.67 63448.67 144516.00 63502.00C144473.00 63502.00 144430.00 63502.00 144387.00 63502.00C144365.67 63491.33 144344.33 63480.67 144323.00 63470.00C144301.33 63427.33 144279.67 63384.67 144258.00 63342.00C144193.67 63363.33 144129.33 63384.67 144065.00 63406.00C144054.33 63395.33 144043.67 63384.67 144033.00 63374.00C143990.33 63363.33 143947.67 63352.67 143905.00 63342.00C143894.33 63363.33 143883.67 63384.67 143873.00 63406.00C143830.00 63427.33 143787.00 63448.67 143744.00 63470.00C143733.33 63480.67 143722.67 63491.33 143712.00 63502.00C143712.00 63512.67 143712.00 63523.33 143712.00 63534.00C143701.31 63545.14 143690.35 63556.10 143679.82 63567.36C143669.21 63588.57 143658.61 63609.79 143648.00 63631.00C143626.33 63641.67 143604.67 63652.33 143583.00 63663.00C143561.67 63652.33 143540.33 63641.67 143519.00 63631.00C143508.31 63641.81 143497.34 63652.42 143486.82 63663.36C143465.25 63706.70 143443.44 63749.92 143421.47 63793.07C143410.98 63814.04 143400.49 63835.02 143390.00 63856.00C143379.33 63866.67 143368.67 63877.33 143358.00 63888.00C143347.33 63877.33 143336.67 63866.67 143326.00 63856.00C143293.89 63866.74 143261.72 63877.35 143229.64 63888.18C143208.10 63898.78 143186.55 63909.39 143165.00 63920.00C143133.00 63920.00 143101.00 63920.00 143069.00 63920.00C143047.33 63941.67 143025.67 63963.33 143004.00 63985.00C142982.67 63985.00 142961.33 63985.00 142940.00 63985.00C142897.33 64017.00 142854.67 64049.00 142812.00 64081.00C142790.33 64070.33 142768.67 64059.67 142747.00 64049.00C142736.21 64048.92 142725.37 64049.17 142714.62 64048.87C142682.75 64038.25 142650.87 64027.63 142619.00 64017.00C142554.67 64038.33 142490.33 64059.67 142426.00 64081.00C142415.33 64091.67 142404.67 64102.33 142394.00 64113.00C142372.33 64113.00 142350.67 64113.00 142329.00 64113.00C142318.33 64102.33 142307.67 64091.67 142297.00 64081.00C142265.00 64102.33 142233.00 64123.67 142201.00 64145.00C142190.00 64177.33 142179.00 64209.67 142168.00 64242.00C142136.00 64252.67 142104.00 64263.33 142072.00 64274.00C142050.67 64295.33 142029.33 64316.67 142008.00 64338.00C141997.33 64338.00 141986.67 64338.00 141976.00 64338.00C141976.00 64327.33 141976.00 64316.67 141976.00 64306.00C141954.33 64295.33 141932.67 64284.67 141911.00 64274.00C141900.33 64274.00 141889.67 64274.00 141879.00 64274.00C141847.00 64306.00 141815.00 64338.00 141783.00 64370.00C141750.67 64359.33 141718.33 64348.67 141686.00 64338.00C141664.67 64348.67 141643.33 64359.33 141622.00 64370.00C141579.00 64370.00 141536.00 64370.00 141493.00 64370.00C141471.67 64381.00 141450.33 64392.00 141429.00 64403.00C141418.33 64424.33 141407.67 64445.67 141397.00 64467.00C141354.00 64509.67 141311.00 64552.33 141268.00 64595.00C141246.67 64584.33 141225.33 64573.67 141204.00 64563.00C141193.33 64563.00 141182.67 64563.00 141172.00 64563.00C141161.33 64584.67 141150.67 64606.33 141140.00 64628.00C141140.00 64649.33 141140.00 64670.67 141140.00 64692.00C141129.00 64702.67 141118.00 64713.33 141107.00 64724.00C141096.33 64724.00 141085.67 64724.00 141075.00 64724.00C141075.00 64734.67 141075.00 64745.33 141075.00 64756.00C141064.33 64766.67 141053.67 64777.33 141043.00 64788.00C141021.67 64788.00 141000.33 64788.00 140979.00 64788.00C140968.33 64799.00 140957.67 64810.00 140947.00 64821.00C140957.67 64842.33 140968.33 64863.67 140979.00 64885.00C140968.33 64885.00 140957.67 64885.00 140947.00 64885.00C140925.33 64874.33 140903.67 64863.67 140882.00 64853.00C140871.33 64853.00 140860.67 64853.00 140850.00 64853.00C140850.00 64863.67 140850.00 64874.33 140850.00 64885.00C140871.67 64895.67 140893.33 64906.33 140915.00 64917.00C140893.33 64927.67 140871.67 64938.33 140850.00 64949.00C140839.33 64949.00 140828.67 64949.00 140818.00 64949.00C140818.00 64981.33 140818.00 65013.67 140818.00 65046.00C140796.67 65056.67 140775.33 65067.33 140754.00 65078.00C140743.33 65099.33 140732.67 65120.67 140722.00 65142.00C140732.67 65163.33 140743.33 65184.67 140754.00 65206.00C140754.00 65217.00 140754.00 65228.00 140754.00 65239.00C140743.33 65239.00 140732.67 65239.00 140722.00 65239.00C140722.00 65228.00 140722.00 65217.00 140722.00 65206.00C140711.00 65217.00 140700.00 65228.00 140689.00 65239.00C140700.00 65260.33 140711.00 65281.67 140722.00 65303.00C140711.00 65324.33 140700.00 65345.67 140689.00 65367.00C140700.00 65377.67 140711.00 65388.33 140722.00 65399.00C140711.00 65409.67 140700.00 65420.33 140689.00 65431.00C140678.33 65420.33 140667.67 65409.67 140657.00 65399.00C140657.00 65420.67 140657.00 65442.33 140657.00 65464.00C140635.67 65474.67 140614.33 65485.33 140593.00 65496.00C140603.67 65528.00 140614.33 65560.00 140625.00 65592.00C140614.33 65613.67 140603.67 65635.33 140593.00 65657.00C140571.67 65667.67 140550.33 65678.33 140529.00 65689.00C140529.00 65710.33 140529.00 65731.67 140529.00 65753.00C140518.33 65763.67 140507.67 65774.33 140497.00 65785.00C140486.00 65785.00 140475.00 65785.00 140464.00 65785.00C140475.00 65806.33 140486.00 65827.67 140497.00 65849.00C140518.33 65860.00 140539.67 65871.00 140561.00 65882.00C140561.00 65892.67 140561.00 65903.33 140561.00 65914.00C140528.67 65924.67 140496.33 65935.33 140464.00 65946.00C140496.33 65967.33 140528.67 65988.67 140561.00 66010.00C140561.00 66020.67 140561.00 66031.33 140561.00 66042.00C140539.67 66053.00 140518.33 66064.00 140497.00 66075.00C140486.00 66075.00 140475.00 66075.00 140464.00 66075.00C140464.00 66107.00 140464.00 66139.00 140464.00 66171.00C140442.67 66192.33 140421.33 66213.67 140400.00 66235.00C140410.67 66245.67 140421.33 66256.33 140432.00 66267.00C140432.00 66278.00 140432.00 66289.00 140432.00 66300.00C140421.28 66310.79 140410.40 66321.46 140399.78 66332.33C140378.52 66364.22 140357.26 66396.11 140336.00 66428.00C140368.00 66449.67 140400.00 66471.33 140432.00 66493.00C140432.00 66503.67 140432.00 66514.33 140432.00 66525.00C140410.67 66525.00 140389.33 66525.00 140368.00 66525.00C140346.67 66546.33 140325.33 66567.67 140304.00 66589.00C140325.33 66621.00 140346.67 66653.00 140368.00 66685.00C140357.33 66696.00 140346.67 66707.00 140336.00 66718.00C140336.00 66750.00 140336.00 66782.00 140336.00 66814.00C140314.33 66857.00 140292.67 66900.00 140271.00 66943.00C140282.00 66964.33 140293.00 66985.67 140304.00 67007.00C140288.21 67037.80 140271.98 67068.38 140256.94 67099.56C140250.96 67111.71 140244.98 67123.85 140239.00 67136.00C140249.67 67168.00 140260.33 67200.00 140271.00 67232.00C140260.33 67253.33 140249.67 67274.67 140239.00 67296.00C140217.67 67296.00 140196.33 67296.00 140175.00 67296.00C140164.33 67317.67 140153.67 67339.33 140143.00 67361.00C140132.33 67371.67 140121.67 67382.33 140111.00 67393.00C140121.67 67414.33 140132.33 67435.67 140143.00 67457.00C140057.33 67532.00 139971.67 67607.00 139886.00 67682.00C139886.00 67746.33 139886.00 67810.67 139886.00 67875.00C139864.33 67896.33 139842.67 67917.67 139821.00 67939.00C139821.00 67971.33 139821.00 68003.67 139821.00 68036.00C139799.67 68057.33 139778.33 68078.67 139757.00 68100.00C139757.00 68143.00 139757.00 68186.00 139757.00 68229.00C139735.67 68239.67 139714.33 68250.33 139693.00 68261.00C139703.67 68282.33 139714.33 68303.67 139725.00 68325.00C139714.33 68335.67 139703.67 68346.33 139693.00 68357.00C139682.33 68357.00 139671.67 68357.00 139661.00 68357.00C139639.33 68368.00 139617.67 68379.00 139596.00 68390.00C139606.67 68400.67 139617.33 68411.33 139628.00 68422.00C139606.67 68432.67 139585.33 68443.33 139564.00 68454.00C139564.00 68486.00 139564.00 68518.00 139564.00 68550.00C139553.33 68571.67 139542.67 68593.33 139532.00 68615.00C139521.33 68625.67 139510.67 68636.33 139500.00 68647.00C139510.67 68689.67 139521.33 68732.33 139532.00 68775.00C139521.33 68807.33 139510.67 68839.67 139500.00 68872.00C139510.67 68882.67 139521.33 68893.33 139532.00 68904.00C139510.55 68936.08 139489.27 68968.29 139467.72 69000.28C139456.81 69011.19 139445.91 69022.09 139435.00 69033.00C139446.00 69054.33 139457.00 69075.67 139468.00 69097.00C139457.00 69107.67 139446.00 69118.33 139435.00 69129.00C139435.00 69150.33 139435.00 69171.67 139435.00 69193.00C139424.09 69204.13 139413.41 69215.51 139402.36 69226.48C139359.91 69258.32 139317.45 69290.16 139275.00 69322.00C139275.00 69332.67 139275.00 69343.33 139275.00 69354.00C139317.67 69375.33 139360.33 69396.67 139403.00 69418.00C139381.67 69439.67 139360.33 69461.33 139339.00 69483.00C139307.00 69472.33 139275.00 69461.67 139243.00 69451.00C139243.00 69461.67 139243.00 69472.33 139243.00 69483.00C139232.00 69483.00 139221.00 69483.00 139210.00 69483.00C139199.28 69504.60 139188.29 69526.08 139177.75 69547.76C139167.17 69579.50 139156.58 69611.25 139146.00 69643.00C139156.67 69654.00 139167.33 69665.00 139178.00 69676.00C139167.33 69686.67 139156.67 69697.33 139146.00 69708.00C139114.00 69783.00 139082.00 69858.00 139050.00 69933.00C139028.33 69933.00 139006.67 69933.00 138985.00 69933.00C138963.67 69943.67 138942.33 69954.33 138921.00 69965.00C138931.67 69986.33 138942.33 70007.67 138953.00 70029.00C138931.67 70029.00 138910.33 70029.00 138889.00 70029.00C138867.67 70040.00 138846.33 70051.00 138825.00 70062.00C138814.00 70104.67 138803.00 70147.33 138792.00 70190.00C138770.67 70179.33 138749.33 70168.67 138728.00 70158.00C138696.00 70190.00 138664.00 70222.00 138632.00 70254.00C138621.33 70254.00 138610.67 70254.00 138600.00 70254.00C138600.00 70265.00 138600.00 70276.00 138600.00 70287.00C138589.00 70308.33 138578.00 70329.67 138567.00 70351.00C138545.67 70361.67 138524.33 70372.33 138503.00 70383.00C138492.33 70404.33 138481.67 70425.67 138471.00 70447.00C138481.81 70457.69 138492.42 70468.65 138503.35 70479.18C138524.57 70490.12 138545.78 70501.06 138567.00 70512.00C138567.00 70522.67 138567.00 70533.33 138567.00 70544.00C138556.33 70554.67 138545.67 70565.33 138535.00 70576.00C138524.33 70576.00 138513.67 70576.00 138503.00 70576.00C138492.31 70586.81 138481.34 70597.42 138470.82 70608.36C138460.21 70629.57 138449.61 70650.79 138439.00 70672.00C138428.33 70683.00 138417.67 70694.00 138407.00 70705.00C138417.67 70715.67 138428.33 70726.33 138439.00 70737.00C138417.33 70747.67 138395.67 70758.33 138374.00 70769.00C138374.00 70822.67 138374.00 70876.33 138374.00 70930.00C138352.67 70951.33 138331.33 70972.67 138310.00 70994.00C138320.71 71015.60 138331.71 71037.08 138342.25 71058.76C138352.83 71090.84 138363.42 71122.92 138374.00 71155.00C138374.00 71165.67 138374.00 71176.33 138374.00 71187.00C138395.67 71208.33 138417.33 71229.67 138439.00 71251.00C138449.67 71283.33 138460.33 71315.67 138471.00 71348.00C138503.00 71369.33 138535.00 71390.67 138567.00 71412.00C138567.00 71433.33 138567.00 71454.67 138567.00 71476.00C138578.00 71497.67 138589.00 71519.33 138600.00 71541.00C138589.00 71562.33 138578.00 71583.67 138567.00 71605.00C138587.00 71624.30 138606.91 71643.68 138626.45 71663.45C138628.20 71665.47 138630.72 71667.18 138632.00 71669.40C138632.00 71701.60 138632.00 71733.80 138632.00 71766.00C138642.67 71766.00 138653.33 71766.00 138664.00 71766.00C138664.00 71787.33 138664.00 71808.67 138664.00 71830.00C138653.33 71830.00 138642.67 71830.00 138632.00 71830.00C138632.00 71894.33 138632.00 71958.67 138632.00 72023.00C138642.67 72033.67 138653.33 72044.33 138664.00 72055.00C138674.67 72087.00 138685.33 72119.00 138696.00 72151.00C138715.30 72171.00 138734.68 72190.91 138754.45 72210.45C138766.97 72222.97 138779.48 72235.48 138792.00 72248.00C138781.33 72258.67 138770.67 72269.33 138760.00 72280.00C138749.33 72280.00 138738.67 72280.00 138728.00 72280.00C138738.67 72312.33 138749.33 72344.67 138760.00 72377.00C138760.00 72409.00 138760.00 72441.00 138760.00 72473.00C138770.67 72473.00 138781.33 72473.00 138792.00 72473.00C138781.33 72505.33 138770.67 72537.67 138760.00 72570.00C138760.00 72591.33 138760.00 72612.67 138760.00 72634.00C138770.67 72655.33 138781.33 72676.67 138792.00 72698.00C138792.00 72719.33 138792.00 72740.67 138792.00 72762.00C138770.67 72762.00 138749.33 72762.00 138728.00 72762.00C138728.00 72773.00 138728.00 72784.00 138728.00 72795.00C138738.67 72816.33 138749.33 72837.67 138760.00 72859.00C138760.00 72869.67 138760.00 72880.33 138760.00 72891.00C138770.67 72891.00 138781.33 72891.00 138792.00 72891.00C138792.00 72912.33 138792.00 72933.67 138792.00 72955.00C138803.00 72955.00 138814.00 72955.00 138825.00 72955.00C138814.00 72976.67 138803.00 72998.33 138792.00 73020.00C138803.00 73030.67 138814.00 73041.33 138825.00 73052.00C138835.67 73041.33 138846.33 73030.67 138857.00 73020.00C138867.81 73030.69 138878.42 73041.66 138889.36 73052.18C138910.57 73062.79 138931.79 73073.39 138953.00 73084.00C138974.33 73084.00 138995.67 73084.00 139017.00 73084.00C139037.00 73103.30 139056.91 73122.68 139076.45 73142.45C139088.99 73155.11 139101.81 73167.57 139114.18 73180.36C139124.89 73202.00 139135.42 73223.74 139146.24 73245.32C139178.49 73287.88 139210.75 73330.44 139243.00 73373.00C139243.00 73405.33 139243.00 73437.67 139243.00 73470.00C139253.67 73470.00 139264.33 73470.00 139275.00 73470.00C139264.33 73480.67 139253.67 73491.33 139243.00 73502.00C139253.67 73502.00 139264.33 73502.00 139275.00 73502.00C139275.00 73512.67 139275.00 73523.33 139275.00 73534.00C139285.67 73544.67 139296.33 73555.33 139307.00 73566.00C139296.33 73576.67 139285.67 73587.33 139275.00 73598.00C139285.67 73598.00 139296.33 73598.00 139307.00 73598.00C139296.33 73609.00 139285.67 73620.00 139275.00 73631.00C139285.67 73652.33 139296.33 73673.67 139307.00 73695.00C139285.67 73705.67 139264.33 73716.33 139243.00 73727.00C139243.00 73737.67 139243.00 73748.33 139243.00 73759.00C139221.33 73769.67 139199.67 73780.33 139178.00 73791.00C139167.33 73823.33 139156.67 73855.67 139146.00 73888.00C139146.00 73898.67 139146.00 73909.33 139146.00 73920.00C139124.67 73930.67 139103.33 73941.33 139082.00 73952.00C139092.67 73973.33 139103.33 73994.67 139114.00 74016.00C139092.67 74037.67 139071.33 74059.33 139050.00 74081.00C139050.00 74102.33 139050.00 74123.67 139050.00 74145.00C139060.67 74166.33 139071.33 74187.67 139082.00 74209.00C139071.33 74219.67 139060.67 74230.33 139050.00 74241.00C139069.30 74261.00 139088.68 74280.91 139108.45 74300.45C139111.29 74303.36 139114.62 74305.92 139115.96 74309.91C139125.97 74329.94 139135.99 74349.97 139146.00 74370.00C139146.00 74380.67 139146.00 74391.33 139146.00 74402.00C139135.33 74402.00 139124.67 74402.00 139114.00 74402.00C139113.92 74412.79 139114.17 74423.63 139113.88 74434.38C139103.25 74466.59 139092.63 74498.79 139082.00 74531.00C139092.67 74573.67 139103.33 74616.33 139114.00 74659.00C139092.67 74691.33 139071.33 74723.67 139050.00 74756.00C139071.33 74766.67 139092.67 74777.33 139114.00 74788.00C139103.33 74798.67 139092.67 74809.33 139082.00 74820.00C139092.67 74830.67 139103.33 74841.33 139114.00 74852.00C139114.00 74863.00 139114.00 74874.00 139114.00 74885.00C139124.67 74906.33 139135.33 74927.67 139146.00 74949.00C139135.33 74959.67 139124.67 74970.33 139114.00 74981.00C139124.67 75002.33 139135.33 75023.67 139146.00 75045.00C139146.00 75066.67 139146.00 75088.33 139146.00 75110.00C139135.33 75142.00 139124.67 75174.00 139114.00 75206.00C139092.67 75216.67 139071.33 75227.33 139050.00 75238.00C139039.00 75248.67 139028.00 75259.33 139017.00 75270.00C139016.94 75281.13 139017.13 75292.28 139016.90 75303.39C139006.27 75345.92 138995.63 75388.46 138985.00 75431.00C138985.00 75441.67 138985.00 75452.33 138985.00 75463.00C138963.67 75495.33 138942.33 75527.67 138921.00 75560.00C138921.00 75570.67 138921.00 75581.33 138921.00 75592.00C138931.67 75602.67 138942.33 75613.33 138953.00 75624.00C138953.00 75677.67 138953.00 75731.33 138953.00 75785.00C138974.33 75806.33 138995.67 75827.67 139017.00 75849.00C139028.00 75881.33 139039.00 75913.67 139050.00 75946.00C139039.00 75967.33 139028.00 75988.67 139017.00 76010.00C139016.92 76020.79 139017.17 76031.63 139016.87 76042.38C139006.25 76074.25 138995.62 76106.13 138985.00 76138.00C138985.00 76159.67 138985.00 76181.33 138985.00 76203.00C138963.67 76224.33 138942.33 76245.67 138921.00 76267.00C138920.94 76277.79 138921.13 76288.61 138920.90 76299.39C138910.27 76342.26 138899.63 76385.13 138889.00 76428.00C138889.00 76449.33 138889.00 76470.67 138889.00 76492.00C138878.33 76492.00 138867.67 76492.00 138857.00 76492.00C138878.33 76513.67 138899.67 76535.33 138921.00 76557.00C138899.67 76621.00 138878.33 76685.00 138857.00 76749.00C138846.33 76760.00 138835.67 76771.00 138825.00 76782.00C138808.56 76829.95 138791.85 76877.79 138776.02 76925.95C138770.68 76941.96 138765.34 76957.98 138760.00 76974.00C138738.67 76985.00 138717.33 76996.00 138696.00 77007.00C138696.00 77017.67 138696.00 77028.33 138696.00 77039.00C138685.33 77049.67 138674.67 77060.33 138664.00 77071.00C138653.33 77103.00 138642.67 77135.00 138632.00 77167.00C138599.67 77167.00 138567.33 77167.00 138535.00 77167.00C138535.00 77188.67 138535.00 77210.33 138535.00 77232.00C138524.33 77253.33 138513.67 77274.67 138503.00 77296.00C138513.67 77360.33 138524.33 77424.67 138535.00 77489.00C138492.33 77467.67 138449.67 77446.33 138407.00 77425.00C138374.67 77435.67 138342.33 77446.33 138310.00 77457.00C138299.33 77467.67 138288.67 77478.33 138278.00 77489.00C138256.67 77456.67 138235.33 77424.33 138214.00 77392.00C138203.00 77295.67 138192.00 77199.33 138181.00 77103.00C138170.33 77092.33 138159.67 77081.67 138149.00 77071.00C138138.33 77071.00 138127.67 77071.00 138117.00 77071.00C138095.57 77081.76 138074.05 77092.38 138052.68 77103.23C137977.78 77156.82 137902.89 77210.41 137828.00 77264.00C137763.67 77253.33 137699.33 77242.67 137635.00 77232.00C137592.00 77242.67 137549.00 77253.33 137506.00 77264.00C137473.89 77220.92 137441.90 77177.74 137409.72 77134.72C137390.29 77115.18 137370.75 77095.75 137350.86 77076.68C137347.75 77073.70 137344.94 77070.30 137340.73 77068.86C137320.82 77058.91 137300.91 77048.96 137281.00 77039.00C137237.81 77049.74 137194.66 77060.69 137151.44 77071.31C137098.29 77081.87 137045.15 77092.44 136992.00 77103.00C136949.00 77103.00 136906.00 77103.00 136863.00 77103.00C136841.67 77092.33 136820.33 77081.67 136799.00 77071.00C136777.67 77092.33 136756.33 77113.67 136735.00 77135.00C136702.67 77113.67 136670.33 77092.33 136638.00 77071.00C136606.00 77060.33 136574.00 77049.67 136542.00 77039.00C136520.33 76964.00 136498.67 76889.00 136477.00 76814.00C136423.67 76749.67 136370.33 76685.33 136317.00 76621.00C136305.88 76620.92 136294.71 76621.17 136283.62 76620.87C136251.75 76610.25 136219.87 76599.63 136188.00 76589.00C136177.33 76556.67 136166.67 76524.33 136156.00 76492.00C136145.33 76481.33 136134.67 76470.67 136124.00 76460.00C136124.00 76406.33 136124.00 76352.67 136124.00 76299.00C136091.67 76256.33 136059.33 76213.67 136027.00 76171.00C136037.67 76149.33 136048.33 76127.67 136059.00 76106.00C136048.33 76063.33 136037.67 76020.67 136027.00 75978.00C136048.67 75956.33 136070.33 75934.67 136092.00 75913.00C136070.33 75891.67 136048.67 75870.33 136027.00 75849.00C136027.00 75817.00 136027.00 75785.00 136027.00 75753.00C136037.67 75742.33 136048.33 75731.67 136059.00 75721.00C136059.00 75688.67 136059.00 75656.33 136059.00 75624.00C136027.00 75613.33 135995.00 75602.67 135963.00 75592.00C135963.00 75581.33 135963.00 75570.67 135963.00 75560.00C135984.33 75549.33 136005.67 75538.67 136027.00 75528.00C136005.67 75506.33 135984.33 75484.67 135963.00 75463.00C135952.33 75463.00 135941.67 75463.00 135931.00 75463.00C135941.67 75431.00 135952.33 75399.00 135963.00 75367.00C135941.67 75345.67 135920.33 75324.33 135899.00 75303.00C135888.00 75281.33 135877.00 75259.67 135866.00 75238.00C135823.33 75259.67 135780.67 75281.33 135738.00 75303.00C135705.67 75303.00 135673.33 75303.00 135641.00 75303.00C135609.00 75292.00 135577.00 75281.00 135545.00 75270.00C135545.08 75259.21 135544.83 75248.37 135545.13 75237.62C135555.75 75205.75 135566.38 75173.87 135577.00 75142.00C135587.67 75131.33 135598.33 75120.67 135609.00 75110.00C135598.33 75088.33 135587.67 75066.67 135577.00 75045.00C135545.00 75023.67 135513.00 75002.33 135481.00 74981.00C135406.00 74981.00 135331.00 74981.00 135256.00 74981.00C135256.00 74970.33 135256.00 74959.67 135256.00 74949.00C135245.00 74938.33 135234.00 74927.67 135223.00 74917.00C135222.94 74895.21 135223.13 74873.38 135222.90 74851.61C135212.27 74809.08 135201.63 74766.54 135191.00 74724.00C135255.33 74681.00 135319.67 74638.00 135384.00 74595.00C135394.67 74573.67 135405.33 74552.33 135416.00 74531.00C135416.00 74488.00 135416.00 74445.00 135416.00 74402.00C135437.67 74370.00 135459.33 74338.00 135481.00 74306.00C135481.00 74273.67 135481.00 74241.33 135481.00 74209.00C135502.54 74198.16 135524.21 74187.54 135545.66 74176.56C135609.78 74134.04 135673.89 74091.52 135738.00 74049.00C135738.00 74038.00 135738.00 74027.00 135738.00 74016.00C135705.67 74005.33 135673.33 73994.67 135641.00 73984.00C135641.00 73973.33 135641.00 73962.67 135641.00 73952.00C135619.67 73920.00 135598.33 73888.00 135577.00 73856.00C135577.00 73845.00 135577.00 73834.00 135577.00 73823.00C135598.33 73801.67 135619.67 73780.33 135641.00 73759.00C135641.00 73737.67 135641.00 73716.33 135641.00 73695.00C135619.67 73684.33 135598.33 73673.67 135577.00 73663.00C135545.00 73673.67 135513.00 73684.33 135481.00 73695.00C135470.00 73673.67 135459.00 73652.33 135448.00 73631.00C135426.67 73620.00 135405.33 73609.00 135384.00 73598.00C135362.67 73598.00 135341.33 73598.00 135320.00 73598.00C135290.70 73568.87 135261.82 73539.32 135232.00 73510.73C135229.00 73507.82 135226.00 73504.91 135223.00 73502.00C135223.00 73480.67 135223.00 73459.33 135223.00 73438.00C135234.00 73416.33 135245.00 73394.67 135256.00 73373.00C135266.67 73362.33 135277.33 73351.67 135288.00 73341.00C135255.67 73330.33 135223.33 73319.67 135191.00 73309.00C135169.67 73287.67 135148.33 73266.33 135127.00 73245.00C135116.21 73245.08 135105.37 73244.83 135094.62 73245.13C135062.41 73255.75 135030.21 73266.38 134998.00 73277.00C134955.33 73277.00 134912.67 73277.00 134870.00 73277.00C134848.33 73287.67 134826.67 73298.33 134805.00 73309.00C134794.33 73319.67 134783.67 73330.33 134773.00 73341.00C134773.00 73351.67 134773.00 73362.33 134773.00 73373.00C134741.00 73362.33 134709.00 73351.67 134677.00 73341.00C134677.08 73330.21 134676.83 73319.37 134677.13 73308.62C134687.75 73276.75 134698.38 73244.87 134709.00 73213.00C134687.55 73180.59 134666.28 73148.04 134644.71 73115.72C134624.81 73096.52 134605.00 73077.22 134585.55 73057.55C134562.23 73033.99 134538.93 73010.38 134515.78 72986.67C134494.52 72954.78 134473.26 72922.89 134452.00 72891.00C134452.00 72869.67 134452.00 72848.33 134452.00 72827.00C134441.21 72827.08 13 diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.europe.js b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.europe.js new file mode 100644 index 0000000..94b107d --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.europe.js @@ -0,0 +1,2 @@ +/** Add Europe Map Data Points */ +jQuery.fn.vectorMap('addMap', 'europe_en', {"width":680,"height":520,"pathes":{"gl":{"path":"M13.47,93.57C12.35,92.52 12.34,90 10.44,89.14 10.62,88.14 13.84,87.66 11.35,86.39 10.05,87.17 9.25,86.92 8.71,87.58 6.27,88.12 8.6,85.09 6.17,85.17 5.23,84.47 10.33,84.75 9.98,83.14 11.32,83.4 14.67,82.04 12.37,81.03 11.23,81.19 6.54,82.06 10.06,81.32 13.04,80.64 9.92,76.6 8.71,79.05 9.24,77.06 11.03,78.05 12.88,77.78 14.68,74.59 9.38,77.17 8.23,75.54 7.26,73.61 12.43,77.09 11.48,74.6c2.44,-0.76 -0.97,1.23 1.21,1.43 1,0.07 3.06,0.24 1.26,-0.8C15.39,74.51 14.27,73.05 14.04,72.76 16.26,70.08 9.73,69.39 11.65,72.54 9.43,70.77 7.4,69.72 5.62,68.37 4.84,67.27 3.62,65.14 5.75,64.54 6.27,63.17 3.83,63.23 6.08,62.64 8.52,60.62 3.8,58.38 3.79,56.87 4.78,56.07 3.39,53.57 4.92,55.82c2,1.48 -1.5,0.05 -0.41,1.67 0.7,1.18 4.94,4.58 4.09,1.22C7.96,57.37 6.11,57.21 8.09,56.47 5.75,56.14 4.83,52.58 8.11,53.61c1.58,0.65 2.17,-1 2.13,-1.24 1.86,-0.56 0.99,-3.89 0.14,-5.02 -2.29,-0.92 1.59,-2.34 -1.23,-2.91 0.6,-3.73 4.98,-2.29 7.51,-3.37 2.78,-1.33 -1.33,-1.73 -1.69,-3.06 -3.07,-1.99 2.8,-0.5 3.28,-2.76 2.87,0.22 -2.67,-2.82 -1.49,-3.84 1.34,0.59 4.57,3.1 4.27,-0.2C20.58,29.48 17.09,31.14 17.33,29.6c1.78,1.02 0.79,-3.69 2.33,-1.12 1.76,1.21 4.05,-0.81 1.11,-1.21 -0.72,-0.16 1.96,-1.91 2.18,-0.31 2.04,0.89 2.39,3.26 4.86,3.29 1.12,-1.58 -2.89,-2.38 -0.16,-2.31 1.35,-1.83 -5.03,-0.94 -1.14,-2.29 1.39,-1.55 1.81,4.29 2.64,1.36 -0.57,-1.39 -0.41,-4.67 1.53,-2.59 0.16,2.02 -2.74,3.73 -1.03,6.23 2.7,1.13 0.11,-4.85 3.69,-4.25 2.74,-0.7 0.37,-3.01 -1.39,-3.16 0.93,-1.59 -0.48,-0.52 -0.91,-1.1 -1.26,0.42 -2.63,-0.27 -1.15,-1.19 -0.81,-1.9 -3.85,0.74 -5.54,0.53 -3.44,0.64 1.14,-2.76 2.36,-3.3 2.28,-0.77 4.66,2.97 6.55,0.04C34.81,17.14 33.04,17.79 32.17,17.97 30.61,18.81 30.38,17.32 30.54,16.77 29.14,17.79 26.4,16.27 29.42,16.34 29.89,14.12 31.85,14.39 33.58,13.44c0.27,-2.21 -3.96,0.03 -1.92,-1.94 2.34,1.37 5.29,0.49 7.37,1.6 0.49,1.25 2.93,3.07 2.07,0.58C40.16,10.86 37.07,10.79 34.89,10.94 32.01,10.71 38.39,8.92 36.45,6.69 35.49,6.8 33.31,6.65 34.75,5.53c1.74,0.57 3.45,1.31 2.13,3.63 0.97,-0.77 3.6,0.14 4.92,-0.01C42.62,6.51 37.36,8.29 39.31,5.97 39.94,4.69 35.39,5.71 36.07,3.41c2.18,-0.52 6.21,0.1 8.48,1.64 1.78,-0.72 2.84,-0.23 4.07,0.55 1.73,-0.23 3.46,0.06 2.78,2.25C52.75,9.86 54.51,8.35 52.72,6.73 52.71,4.07 54.56,10.07 55.78,8.98 56.01,5.87 52.57,4.02 49.87,3.57 48.45,2.66 43.96,4.29 45.02,2.48 44.96,1.07 43.75,0.16 45.71,1.28 47.56,3.52 50.55,-0.47 53.01,0.78 55.13,-0.05 52.02,4.62 54.57,4.07 55.09,3.62 56.43,7.62 57.26,5.53 57.36,3.28 54.5,4.61 54.71,2.93 54.66,0.68 56.28,0.89 57.93,0.78 59.1,1.36 57.92,5.72 60.98,5.64 61.74,4.33 57.63,0.17 61.09,2.11 61.53,3.09 65.18,3.43 63.42,2.17 61.88,1.53 60.02,-0.12 62.69,1.24c1.18,0.74 1.27,-0.27 2.37,-0.09 0.49,-0.8 2.06,-0.17 3.01,-0.37 45.89,0 91.78,0 137.67,0 0.61,1.21 1.15,3.04 -0.24,1.09 -2.48,-0.7 1.23,2.94 1.58,3.94 1.63,2.86 -1.86,0.67 -3.36,1.88 1.28,-1.72 -2.26,-4.24 -1.57,-1.36 0.03,2.25 1.64,3.73 3.68,2.39 1.03,0.77 -1.42,2.8 -1.62,3.53 -3.09,0.12 0.02,1.62 1.04,2.22 0.66,2.09 4.04,0.64 2.3,3.22 -1.05,1.95 -3.92,1.82 -3.21,-0.86 0.14,-3.28 -4.67,-1.36 -4.04,-5.02 -2.02,-0.71 -0.18,3.84 -2.96,2.48 -0.73,0.74 0.41,1.75 -1.42,1.32 -2.61,0.54 1.71,4.84 -0.38,4.25 -1.39,0.66 -1.21,4.72 0.33,2.08 -0.04,-1.13 1.18,-4.09 2.39,-2.05 0.43,1.69 3.14,3.16 0.34,3.59 0.86,3.33 -3.29,2.48 -4.22,0.42 -0.56,1.42 -4.92,2.25 -4.96,-1.01 -1.09,-1.09 -0.61,-6.28 0.38,-2.79 -0.38,2.15 4.88,3.94 3.74,1.34 -3.75,0.99 -2.13,-7.24 -6.06,-4.79 -0.93,1.3 -1.66,1.94 -1.57,-0.09 0.87,-1.48 -0.65,-6.36 -1.62,-2.76 -0.29,1.71 1.87,5.7 -1.38,4.23 -1.61,0.79 -3.43,1.95 -3.68,-0.56 -1.68,-1 0.16,-4.48 -2.68,-3.04 -0.67,1.11 2.68,6.25 0.02,3.71 -0.94,-1.89 -3.02,-1.6 -4.56,-0.77 1.83,0.09 2.37,0.85 0.57,2.18 0.59,2.05 2.81,-2.2 3.66,0.12 1.38,0.4 3.13,-0.11 3.81,2.17 2.43,3.24 -2.95,0.83 -4.01,1.04 -0.05,-1.82 -4.79,-3.3 -3.23,-1.13 1.49,0.95 1.71,0.82 0.15,1.51 -1.1,2.37 1.53,3.48 2.9,1.87 3.12,-1.53 5.02,4.79 1.15,3.53 -2.62,-0.97 -1.48,2.05 -3.89,2.7 -0.43,2.18 2.56,-0.04 2.88,-0.79 2.47,-0.74 2.4,2.46 3.26,3.28 -2.41,2.08 2.06,1.61 0.72,3.86 0.87,0.94 2.37,2.01 0.05,2.28 -2.05,0.35 -0.86,2.02 0.59,1.45 -1.67,-0.11 -1.69,1.85 -1.36,2.27 -1.73,0.52 -2.08,4.37 -0.55,3.78 -0.25,-2.23 4.33,-2.23 2.08,-0.24 -2.82,-0.46 -0.7,2.99 -3.43,2.2 2.08,0.81 0.22,1 -1.03,1.19 -1.32,0.16 3.49,1.1 1.39,1.26 -1.9,0.07 -0.29,1.99 -2.31,1.42 1.18,0.54 1.34,1.84 1.35,2.8 -2.18,2.04 -4.44,-0.74 -2.18,-2.64 1.63,-0.69 0.76,-4.19 -0.17,-2.1 -0.64,2.71 -4.66,4.66 -4.98,0.68 -0.13,-3.43 1.98,-6.57 2.12,-10.01 -0.26,-1.47 -2.38,-1.12 -1.92,-3.26 0.2,-2.67 -2.43,-4.09 -3.97,-4.66 0.54,-2.82 0.04,-5.39 -1.15,-7.72 0.49,-2.96 -3.2,-2.36 -2.3,0.29 0.39,1.99 2.16,3.98 1.82,5.79 -0.98,-1.18 -4.72,-2.37 -4.53,0.09 1.53,0.74 4.96,0.32 3.23,3.09 -0.36,0.92 2.65,-0.97 2.92,1.14 1.39,1.16 4.2,3.13 1.09,4.33 -2.3,0.81 -7.78,0.76 -7.23,-2.79 1.56,-1.72 -2.19,-2.27 -1.32,0.16 -1.72,-2.55 -3.53,-0.09 -1.9,1.66 -2.13,2.01 -4.41,0.62 -6.81,0.57 -2.19,2.71 4.76,1.16 2.08,3.05 0.58,1.9 4.08,1.91 5.81,2.83 1.96,1.43 -0.47,2.15 -1.35,0.46 -1.82,-1.08 -3.45,2.21 -4.74,-0.62 -0.64,-2.28 -4.68,1.1 -2.47,0.81 1.98,0.42 2.27,5.38 5.07,2.98 1.84,-3.35 3.57,2.14 6.26,0.44 1.29,-0.17 2.13,-0.02 0.67,0.65 1.09,1.24 2.33,0.17 2.6,1.96 1.19,2.8 4.25,5.41 6.32,6.4 -0.65,1.36 -3.26,-1.74 -3.14,1.07 -0.24,-1.71 -1.8,-0.78 -1.41,0.45 -1.2,-0.78 -1.84,-2.07 -1.82,0.08 -0.39,2.77 -2.92,-1.74 -2.76,-0.46 0.55,1.51 -0.55,2.28 -0.85,0.45 -2.38,-1.66 -2.14,3.66 -3.7,0.79 -1.88,-0.98 -0.85,3.28 -2.38,0.99 -2,-0.69 -1.48,2.95 -3.73,1.98 -1.43,0.57 -1.73,-1.87 -2.48,0.33 -1.28,0.15 -2.02,-1.77 -3.67,-0.49 -1.51,-0.59 -3.89,-0.69 -5.18,-1.79 -1.83,0.4 -3.94,-2.71 -4.99,0.05 -1.52,0.2 0.6,-5.44 -2.51,-2.84 -0.5,1.46 -2.44,2.79 -1.46,0.41 -0.04,-2.08 -3.47,-2.35 -1.81,-0.01 -0.33,2.95 -2.47,-1.46 -3.31,-2.22 2.66,-0.66 -1.9,-3.4 0.58,-4.85 0.98,-1.25 -0.43,-3.9 -1.29,-1.57 -2.2,1.2 0.59,4.8 -2.3,3.1 0.07,1.58 0.73,2.33 -0.49,2.37 -0.31,3.19 -2.4,-0.77 -3.7,1.08 -1.26,-0.57 -3.86,-0.58 -3.24,0.73 -1.86,1.54 -5.17,-0.4 -5.06,3.18 -2.02,-0.95 -3.43,1.13 -4.24,1.49 -0.67,-0.74 -1.24,2.48 -2,1.23 2.12,-2.45 -2.15,-1.8 -1.8,0.58 -2.16,1.39 -3.92,0.18 -2.08,-1.7 -1.67,0.05 -3.09,2.47 -2.5,-0.4 -0.88,-2.96 -1.92,-0.22 -2,1.13 -1.96,-0.26 -4.27,2.16 -3.76,-0.97 -0.78,-1.12 -2.93,1.49 -3.4,-0.02 1.83,-0.91 0.7,-3.4 -0.63,-1.07 -0.78,1.04 -1.78,1.59 -1.04,-0.05 -2.35,-3.54 3.85,-1.66 4.59,-3.73 -0.17,-1.96 -2.75,-5.32 -4.26,-2.64 1.79,0.66 -1.44,2.8 -2.07,2.43 -1.51,-3.02 -4.63,-0.57 -2.13,1.56 0.17,1.83 -2.38,1.81 -1.85,-0.14 -1.36,-2.38 -2.64,3.42 -2.69,-0.09 0.92,-1.47 0.05,-4.47 -1.39,-1.81 0.69,-2.4 -1.59,-1.67 -2.42,-0.69 -1.63,-2.6 -2.81,-0.08 -1.32,1.39 -0.12,2.09 -5.82,3.27 -3.43,0.33 -0.7,-1.39 -2.14,-1.09 -2.9,-2.54 -1.31,0.12 -1.87,1.12 -2.63,1.96 -0.18,2.43 -0.75,4.74 -2.05,6.98 -0.56,-1.99 -3.06,-1.81 -4.45,-3.2 -2.37,1.32 0.55,4.85 0.85,5.51 -2.93,-1.09 -0.49,5.23 -3.18,2.66C53.03,69.44 53.8,64.37 51.35,66.72c-0.01,1.25 1.67,5.14 1.03,4.67 -0.53,-2.51 -2.88,0.37 -2.61,-2.21 -1.56,-2.63 -4.32,1.46 -2.75,2.77 0.01,1.17 -1.56,2.39 -0.5,0.42 0.86,-3.51 -4.59,-2.97 -3.27,0.28 1.49,1.65 -0.07,2.95 -1.09,0.84 -1.55,-1.63 -4.28,0.31 -4.69,-2.84 -1.38,-1.87 -1.94,1.56 -0.77,2.26 -0.06,1.31 -0.47,2.49 -0.74,0.56 -1.54,-2.22 -1.58,2.78 -0.86,3.53 1.64,2.36 -5.86,1.67 -2.64,3.82 2.3,1.03 -2.22,1.12 -2.82,0.61 -1.74,0.43 1.87,2.58 -0.75,1.83C27.52,82.87 27.84,78.97 25.72,81.05c-0.33,1.79 3.97,2.08 0.81,3.67C24.18,85.6 27.77,81.48 24.7,81.96c-1.65,-0.58 -3.25,0.94 -2.07,2.52 -0.13,-1.56 -3.34,-2.97 -2.3,-0.65 0.92,1 3.65,4.19 0.68,3.11 -0.39,-1.36 -2.18,-3.54 -2.55,-1.53 -2.1,0.36 1.98,3.44 0.79,3.95 -0.52,-1.87 -2.86,-1.68 -1.64,0.35 -0.16,0.51 -2.67,-2.78 -2.9,-4.29 -1.64,-2.64 -1.84,0.81 -1.4,1.86 -0.78,1.52 2.24,0.79 1.57,2.42 -1.75,-0.73 -3.2,1.28 -0.75,1.28 -0.16,0.78 0.34,2.28 -0.65,2.59z M34.12,18.3c-1.05,0.6 -2.47,3.81 -0.57,3.47 1.95,-0.22 4.06,-4.82 0.57,-3.47z m-22.97,56.17c-2.31,-0.35 -0.79,-1.58 0,0z M2.14,66.59c-1.38,-1.11 -0.95,-1.35 0.46,-0.36 -0.18,-0.08 -0.27,0.6 -0.46,0.36z m168.23,-6.32c-0.28,-1.85 2.85,0.02 0.03,0l-0.03,0z M7.85,51.96c-0.57,-0.92 1.55,0.27 0,0z m1.18,-1.63C7.41,50.26 7.17,48.77 8.95,49.87 10,50.07 10.77,49.96 9.03,50.33z M184.09,37.53c-0.77,-1.48 -1.43,-4.23 -2.73,-6.24 -2.01,-2.67 1.21,-6.02 3.05,-2.64 0.95,1.04 0.93,3.38 1.44,4.42 -4.98,-0.16 0.39,3.51 -1.76,4.46z M23.01,25.35c-1.12,-0.81 -0.79,-3.25 0.17,-0.92 0.17,0.37 -0.49,0.58 -0.17,0.92z M209.99,8.88c0.65,-1.41 0.2,-3.29 -1.61,-3.21 -0.07,-1.5 -1.95,-5.46 0.62,-4.89 1.44,0 2.88,0 4.31,0 1.06,2.38 -1.6,4.58 -1.58,7.24 -0.32,0.7 -1.06,0.8 -1.74,0.86z M44.32,3.05c-1.74,-0.98 -6.31,0.12 -6.14,-2.09 1.47,1.81 3.05,0.95 2.25,-0.17 2.2,-0.52 2.82,0.46 3.89,2.27z","name":"Greenland"},"is":{"path":"m151.61,141.44c-2.42,-0.05 -4.73,-1.12 -5.95,-3.36 -0.71,-2.06 -4.34,-1.68 -3.81,-4.38 0.8,-0.95 3.4,-0.95 1.03,-1.6 -1.69,0.92 -0.37,-1.61 -2.18,-0.86 -0.88,-0.03 -1.32,-2.12 -2.96,-2.05 -1.43,-1.13 -6,-1.27 -4.53,-3.48 1.4,1.45 5.16,1.15 5.29,-1.63 0.95,-0.08 4.39,1.14 2.46,-0.91 -1.28,-0.31 -3.16,-1.27 -0.58,-1.35 2.41,0.51 2.39,-2.69 -0.02,-1.57 -1.25,0.39 -2.36,1.06 -1.66,-0.43 -0.34,-1.62 1.57,-4.11 -1.54,-3.94 -1.49,-1.7 -3.83,-2.36 -5.98,-2.91 1.9,-1.43 2.13,2 4.45,0.36 0.58,-0.11 0.84,1.82 1.93,0.36 1.45,0.02 2.12,1.75 4.12,1.85 1.57,1.88 4.72,-0.08 2.56,-1.73 -1.13,0.23 -4.71,-0.08 -2.41,-1.51 1.13,0.1 5.66,-0.35 3.94,-1.58 -2.53,-0.05 -1.4,-0.83 -0.29,-1.63 0.84,-2.83 -2.64,-1.96 -3.34,-1.81 -1.47,-0.72 -2,-0.85 -1.64,-2.44 2.52,0.42 0.64,-2.75 -0.27,-3.56 -0.04,-0.34 1.76,2 1.91,-0.11 -0.65,-3.43 1.88,0.34 1.11,2 -0.95,4.21 5.86,2.44 3.19,-0.73 -1.94,-1.31 0.11,-2.67 -1.13,-4.2 1.13,0.42 1.67,1.6 2.04,1.18 1.98,0.31 -0.01,2.5 1.33,3.37 0.86,1.89 -0.77,4.19 1.64,5.57 -1.28,0.64 -3.87,-0.52 -2.63,1.99 -0.4,1.18 -1.92,2.25 -0.42,2.93 -1.31,1.46 -1.09,4.59 1.22,2.7 0.49,-1.4 2.89,-6.12 2.22,-2.37 2.69,2.22 4.53,-3.04 4.48,-5.25 2.58,0.03 -0.68,6.63 3.51,5.53 -0.01,-0.74 0.05,-5.1 1.81,-2.72 1.08,-2.01 3.5,-0.36 1.83,1.62 2.1,1.36 -0.53,3.45 0.95,5.46 2.69,-0.06 0.02,-7.39 2.92,-6.07 -0.32,2.52 1.49,4.92 3.27,1.85 1.68,-2.37 1.62,3.33 3.69,1.28 1.71,-0.8 1.1,-6.38 3.47,-3.02 -0.81,1.5 1.32,1.54 -0.24,3.29 -0.5,2.17 2.82,1.16 2.36,3.29 2.02,0.52 2.1,1.62 0.19,2.57 -2.6,1.53 3.45,1.86 0.49,3.25 -0.74,0.55 -3.68,1.15 -1.27,1.34 1.72,-0.23 4.34,-1.28 4.35,1.54 -0.04,2.17 -4.93,1.21 -2.47,3.09 1.83,0.33 2.75,2.38 0.41,2.2 -1.18,-0.56 -1.74,-0.63 -0.71,0.56 -0.6,-0.3 -3.92,0.12 -2.06,0.55 2.71,0.87 -0.55,1.36 -1.7,1.52 -1.06,0.04 -2.49,1.02 -2.87,2.69 -1.35,-0.83 -1.72,1.98 -2.29,-0.35 -0.72,-2.57 -2.1,-0.68 -2.71,0.31 -2.09,-0.1 -4.17,0.18 -5.78,1.63 -1.89,0.57 -3.52,-3.04 -3.52,0.21 -2.4,-1.75 -5.62,-1.53 -6.88,1.4l-0.35,0.08 0,0z m24.31,-7.94c-1.58,1.64 1.17,1.65 0.84,-0.23 -0.28,0.08 -0.56,0.15 -0.84,0.23z M147.49,99.76c-2.33,0.02 -1.42,1.38 0.2,1.79 0.14,-0.38 0.69,-1.97 -0.2,-1.79z m33.62,15.99c1.19,-0.59 1.6,-0.17 0,0z m-44.05,-9.09c-1.62,-0.01 -0.68,-1.6 0.37,-0.74 1.34,-0.47 -0.84,-4.6 0.49,-2.48 -0.6,1.82 2.54,3.42 -0.86,3.22z m-1.42,-1.5c-1.66,0.2 -1.5,-3.06 -0.29,-0.86 -0.05,0.3 1.22,0.95 0.29,0.86z m4.48,-1.49c-0.86,-0.96 -0.83,-1.57 0,0z","name":"Iceland"},"pt":{"path":"m126.31,476.79c-3.11,-0.89 -5.74,-4.21 -9.28,-3.12 -1.78,0.38 1.76,-2.58 1.47,-3.95 0.39,-1.92 1.56,-3.11 1.18,-4.56 -0.46,-1.65 0.47,-3.6 1.4,-5.27 -0.61,-1.65 3.07,-0.14 2.33,-1.74 -1.59,-1.17 -2.48,-2.71 -4.71,-1.61 -1.89,-0.04 -2.12,-3.1 -2.67,-4.46 0.27,-2.21 3.57,-4.27 2.21,-6.5 2.42,0.37 3.47,-2.17 4.77,-3.81 0.98,-1.71 1.87,-3.43 3.16,-4.47 -0.79,-1.76 1.02,-5.31 3.28,-5.87 1.59,-1.26 -0.95,-2.63 0.8,-4.09 0.23,-2.53 -1.05,-5.19 -0.11,-7.75 2.54,0.06 0.15,-1.87 0.17,-2.24 1.59,-1.44 4.74,-3.3 6.49,-1.31 -3.35,1.53 -0.16,3.98 2.09,3.19 1.85,-0.17 3.87,2.53 6.45,0.97 1.56,-0.13 6.26,-0.07 4.22,3.05 0.22,1.77 4.81,2.08 1.88,3.98 -2.66,0.33 -4.02,2.88 -6.33,3.35 -0.97,1.66 1.09,4.53 -0.81,6.49 -1.07,1.01 0.55,2.39 -1.62,2.77 -2.6,1.54 1.62,6.06 -2.82,6.49 -1.74,-0.37 -5.6,-2.08 -3.57,1.31 1.07,1.89 -0.41,4.57 2.03,6.2 1.92,2.91 -3.81,2.81 -3.68,5.95 -1.09,1.6 0.5,5.45 2.67,5.41 -1.19,1.2 -4.31,1 -5,3.34 -3.07,2.07 -0.28,7.22 -4.25,7.62 -0.55,0.29 -1.11,0.63 -1.75,0.65z","name":"Portugal"},"ma":{"path":"m114.26,519.26c5.38,-1.06 11.75,-0.39 15.9,-4.63 5.26,-4.88 8.22,-11.54 11.83,-17.6 2.3,-1.64 3.11,0.89 3.7,2.43 3.25,0.06 3.27,5.03 6.51,6.18 2.01,2.4 5.02,1.6 7.69,1.35 1.26,1.84 3.78,-0.68 5.41,1.5 1.48,1.09 4.97,-1.46 5.09,1.72 1.76,1.07 3.75,0.97 5.94,1.12 1.21,2.49 5.27,4 3.5,6.77 1.55,1.82 -0.97,1 -2.11,1.18 -21.15,0 -42.31,0 -63.46,0z","name":"Morocco"},"es":{"path":"m170.08,507.95c-0.69,-0.45 0.64,-1.19 0,0z m-23.1,-9.15c-1.89,-0.27 -1.23,-3.36 0.81,-2.76 -1.01,0.61 -0.28,2.16 -0.81,2.76z m-1.53,-5.41c-1.92,-1.84 -4.81,-3.55 -4.78,-6.5 1.74,-1.65 -3.05,-2.72 0.06,-3.62 1.8,0.08 1.95,-2.62 0.29,-1.71 -1.68,1.92 -1.49,-3.2 -3.57,-3.37 -1.21,-2.54 -5.06,-1.7 -6.26,-3.7 0.08,-2.72 1.22,-5.37 3.58,-6.95 1.91,0.46 5.66,-3.3 1.98,-3.27 -1.9,-2.17 -1.67,-5.74 1.14,-6.99 3.7,-0.95 1.1,-4.57 -0.28,-6.35 0.58,-1.68 0.45,-3.01 -0.84,-4.53 2.46,2.34 7.45,0.07 6.4,-3.43 -2.26,-2.56 3.15,-2.71 1.97,-5.34 1.81,-1.67 0.28,-5.41 1.17,-6.21 1.77,-2.14 4.99,-2.46 6.88,-4.55 1.92,-2.79 -4.07,-2.45 -2.2,-4.91 0.43,-3.16 -4.07,-2.3 -5.69,-3.2 -1.8,2.37 -3.89,-1.02 -6.23,-0.51 -0.28,-1.34 -3.49,1.05 -2.42,-0.88 2.82,-1.19 -0.75,-4.5 -2.73,-2.96 -2.11,1.45 -3.86,-0.78 -1.34,-1.64 0.94,0.28 2.32,-1.98 0.72,-1.58 2.23,-1.63 -2.16,-0.92 -0.24,-2.66 2.41,-1.99 0.28,-4.66 -2.06,-3.75 -2.26,-1.66 -0.12,-3.23 1.07,-4.13 3.66,0.29 6.76,-2.08 9.92,-3.51 1.78,-2.19 1.34,2.22 3.29,-0.21 3.33,-0.27 2.62,6.64 6.6,4.09 2.47,1.16 5.51,0.94 8.02,1.44 1.9,-1.24 3.14,2.45 5.32,2.3 2.35,0.57 4.3,2.34 6.75,2.93 2.65,1.41 5.29,-0 7.84,-0 2.13,0.65 4.69,5.39 6.5,1.98 2.5,1.32 5.04,3.91 8.46,3.08 1.39,-0.01 3.8,0.79 4.14,1.8 -1.87,1.22 0.06,2.67 1.22,2.4 1.66,1.57 5.29,1.19 5.34,4 1.46,0.54 4.43,-0.57 4.33,1.92 1.41,-0.29 3.73,0.98 4.54,0.5 1.54,0.01 3.53,0.67 3.72,-1.35 1.63,1.02 3.94,2.12 5.05,3.3 -0.62,2.48 1.62,2.94 3.4,2.37 1.23,1.43 2.74,2.23 4.47,1.42 1.62,0.92 3.85,2.1 4.94,-0.04 1.38,-0.43 5.47,1.31 2.5,2.25 -0.52,2.49 0.35,5.62 -3.02,6.24 -3.95,0.65 -6.55,3.99 -10.24,4.85 -4,0.26 -8.86,0.24 -11.41,3.91 0.64,1.13 2.06,1.75 -0.08,1.82 -2.98,1.35 -3.8,5 -6.55,6.72 -2.04,2.09 -4.6,4.27 -5.09,7.29 -0.14,3.13 0.72,6.8 3.86,8.19 -0.28,2.13 -4.94,1.61 -6.14,3.93 -1.51,0.81 -1.84,2.35 -3.08,3.65 0.22,1.68 -4.27,3.01 -1.46,5.03 -0.94,1.1 -4.96,-1.49 -6.88,0.41 -2.79,1.13 -4.55,3.71 -5.69,6.37 -2.11,3.74 -4.63,-2.34 -7.31,0.69 -2.28,0.2 -4.7,-1.72 -7.4,-1.1 -2.51,-0.92 -5.12,-1.75 -7.89,-1.82 -2.99,0.03 -4.54,3.25 -7.74,1.83 -3.45,-0.48 -3.73,3.46 -6.83,4.06z M229.67,469.73c-3.03,-0.94 2.34,-1.17 0,0z m-3.28,-1.86c-1.31,-1.98 3.63,-2.8 0.96,-0.55 -0.28,0.23 -0.58,0.51 -0.96,0.55z m8.15,-0.95c-0.99,-1.19 -3.24,-1.21 -2.69,-3.07 -1.57,-0.61 -4.43,-0.57 -1.44,-1.83 1.82,-0.69 5.61,-3.6 5.15,-0.13 1.01,1.13 4.03,0.64 1.76,2.77 -0.83,0.87 -1.8,1.58 -2.78,2.26z m11.67,-5.53c-0.43,-1.32 -5.6,-1.9 -2.47,-2.15 1.42,0.04 2.4,0.66 2.47,2.15z","name":"Spain"},"tn":{"path":"m284.9,519.26c-2.21,-1.12 0.73,-3.64 -0.95,-5.51 -1.46,-3.16 2.15,-6.93 -0.12,-9.45 -0.67,-0.73 2.93,-1.29 1.98,-2.95 2.23,-0.03 1.46,-2.58 3.74,-2.85 2.52,-1.83 5.41,-3.02 8.35,-3.78 1.3,0.18 -1.34,3.29 1.51,2.64 0.71,-1.15 1.1,-2.15 2.08,-1.26 -0.76,0.27 1.03,1.6 0.03,2.09 1.72,0.55 2.13,5.46 4.03,3.7 1.46,-0.73 4.4,-5.15 5.37,-2.71 -0.9,2.37 -2.28,5.07 -4.51,6.35 -3.22,1.82 -2.27,6.37 0.87,7.67 1.26,0.82 1.66,2.08 3.04,2.36 -0.15,1.99 1.01,4.41 -1.79,3.68 -7.88,0 -15.77,-0.01 -23.63,0.01z","name":"Tunisia"},"dz":{"path":"m181.84,519.26c-2.16,-1 0.09,-2.29 0.05,-3.03 -0.8,-1.48 -5.28,-4.37 -1.47,-3.7 2.83,-0.51 5.98,-1.33 7.84,-3.67 1.17,-2.46 3.66,-2.95 5.89,-2.07 1.44,-0.79 2.77,-2.77 3.38,-0.29 3.67,1.9 4.38,-3.05 7.15,-3.91 3.27,-1.17 6.41,-3.1 10.01,-2.8 3.04,0.05 6.13,0.57 9.13,-0.19 2.74,1.56 5.53,-0.24 7.63,-1.26 2.46,0.75 5.2,0.79 7.75,-0.34 2.83,-0.67 5.62,0.67 8.61,0.23 3.35,0.17 5.17,6.05 8.94,3.1 1.43,-2.77 7.09,0.3 7.33,-3.88 2.03,-1.62 1.87,1.59 2.96,1.23 1.79,0.05 6.14,2.99 6.01,-0.61 2.5,-2 5.17,3.33 8.12,2.16 1.57,-1.13 4.46,-0.6 5.35,-0.15 -1.62,-0.02 -2.54,1.2 -1.93,2.18 -1.87,0.63 -3.58,2.5 -1.04,3.3 0.38,2.87 -2.09,5.94 -0.27,8.63 -0.06,1.4 0.31,4.98 -0.86,5.05 -33.52,0 -67.05,0 -100.57,0z","name":"Algeria"},"be":{"path":"m265.32,343.64c-0.99,-1.16 -1.81,-2.49 -3.73,-3.37 -2.08,-0.35 -0.28,-1.85 -1.25,-2.79 1.47,-1.88 -0.53,-2.73 -1.47,-0.87 -1.28,2.32 -4.46,0.99 -3.2,-0.74 -0.78,-0.74 1.11,-3.63 -1.62,-3.19 -2.17,0.83 -2.23,-1.41 -2.67,-2.1 -3.94,1.05 -1.51,-5.53 -5.39,-3.71 -2.36,1.07 -3.02,-4.27 -0.45,-4.53 1.73,-0.62 4.14,-3.17 4.52,-0.63 2.42,-0.22 3.66,2.56 5.83,0.13 1.3,-0.02 1.88,1.91 1.96,-0.36 0.89,-2.95 2.67,0.31 4.45,-0.43 0.58,-0.7 1.45,3.34 3.54,2.07 2.55,0.01 1.99,1.94 1.4,3.06 -1.22,1.97 -0.15,4.06 2.13,3.5 1.5,1.19 1.36,3.16 2.63,4.39 -1.48,2.22 -4.2,1.28 -5.1,4.2 -1.39,2.28 2.74,5.98 -1.59,5.37z","name":"Belgium"},"it":{"path":"m350.4,500.36c-1.75,-1.38 -4.77,0.56 -6.21,-2.11 -0.98,-3.12 -4.25,-2.35 -6.74,-3.12 -2.11,-1.47 -4.61,-1.93 -6.58,-3.76 -2.2,-1.23 -6.25,0.31 -6.1,-3.66 0.15,-1.98 2.31,-4.17 3.5,-1.8 2.52,0.49 3.53,-4.85 5.24,-0.9 2.01,0.26 4.02,2.27 5.97,0.45 2.63,-0.1 5.81,0.01 7.46,-2.47 1.45,0.01 4.12,1.89 4.36,-0.76 1.1,1.6 3.69,-2.6 2.02,0.26 -1.4,3.25 -4.08,7.31 -3.12,10.66 1.21,0.69 0.93,2.35 2.17,3.37 -1.93,0.14 -1.88,2.41 -1.97,3.84z m7.22,-15.37c-2.78,-0.14 -2.87,-3.99 -0.28,-4.55 1.37,-2.08 -1.36,-4.79 2.17,-5.13 3.25,-2.22 -1.35,-4.63 -1.21,-7.46 -1.16,-2.63 -2.56,-4.66 -3.09,-7.45 -1.59,-2.98 -4.91,-0.29 -6.78,-2.73 -1.65,-0.84 -0.12,-5.17 -3.33,-5.63 -1.56,-0.37 -4.03,2.8 -2.57,0.22 0.06,-2.91 -3.33,-1.3 -4.25,-2.37 -0.69,-2.23 -3.26,-6.17 -5.36,-4.2 -1.73,-2.18 -4.5,1.85 -5.25,-1.44 -2.69,-0.65 -4.1,-2.62 -6.18,-4.28 -0.73,-3.32 -5.19,-3.11 -5.74,-6.57 -1.05,-1.9 -5.27,-0.02 -4.05,-2.26 -1.1,-2.38 -3.86,-3.39 -4.73,-5.46 -3.13,0.51 0.07,-2.73 -1.71,-4.47 -2.14,-2.56 -1.2,-6.42 -3.6,-8.63 -2.19,-1.12 -4.5,-0.88 -6.03,-3.28 -2.22,-0.9 -4.82,-2.51 -7.33,-1.86 -1.74,1.89 -3.46,3.3 -4.61,5.48 -1.55,2.14 -5.91,2.59 -3.27,-0.76 1.07,-4.25 -4.16,-0.46 -5.52,-3.08 -2.08,-1.9 -1.08,-4.02 0.62,-5.53 0.76,-2.12 -4.77,-3.84 -2.88,-4.68 2.55,0.23 5.53,-3.6 2.83,-5.28 -0.93,-1.94 -2.92,-4.5 0.7,-3.9 2.4,0.04 4.29,-1.2 6.65,-0.24 1.85,-1.05 2.45,-2.98 2.51,-4.87 1.03,-0.35 2.29,-2.18 1.57,0.13 -0.67,2.56 4.99,2.17 2.47,4.45 0.19,0.08 2.08,0.32 2.23,1.7 1.41,1.01 2.54,-1.65 0.98,-2.25 0.53,-2.02 3.41,-3.57 2.37,-5.9 0.68,2.09 2.82,3.69 4.41,1.42 0.81,0.91 2.52,3.75 3.07,0.97 -0.97,-1.55 1.29,-1.81 -0.84,-2.7 -0.29,-2.99 3.05,2.3 3.43,-1.02 -1.77,-2.29 0.88,-4.07 2.84,-1.92 2.41,1.34 1.9,-4.15 4.64,-2.65 2.33,0.51 5.21,-2.28 6.13,0.74 1.38,2.34 4.22,3.29 6.93,3.47 1.41,0.44 5.26,-0.07 4.99,0.93 -2.13,0.92 -2.35,3.92 0.43,3.72 -1.26,1.22 -1.47,2.53 -0.57,3.56 0.79,3.16 -4.05,-1.16 -3.93,2.42 -2.22,1.73 -5.54,2.13 -7.33,4.03 -0.52,1.97 1.06,2.99 1.39,4.46 3.61,0.71 -1.06,2.87 -0.87,4.28 0.35,2.85 0.62,6.32 3.48,7.85 2.75,2.1 5.47,4.43 8.75,5.58 2.03,1.86 2.11,4.88 3.12,7.29 0.93,3.7 3.47,6.75 6.72,8.67 2.2,2.52 5.18,4.19 8.71,3.54 1.79,0.5 5.88,-2.59 5.92,0.29 -0.8,1.53 -3.65,2.89 -1.29,4.86 4.13,2.94 10.13,1.81 13.75,5.65 1.89,1.55 5.85,0.5 6.34,3.52 1.71,1.18 6.04,2.73 4.13,5.37 0.4,1.63 -0.95,3.55 -2.34,1.36 -0.96,-2.97 -3.23,-5.68 -6.54,-4.48 -2.32,-1.32 -6.05,-2.69 -6.78,1.09 -1.28,2.2 -1.32,4.97 -2.42,7.17 0.64,2.84 4.59,1.65 5.83,3.73 1.59,0.26 0.35,2.98 1.81,3.8 -0.21,3.1 -5.83,1.6 -5.88,5 0.28,1.92 0.81,4.68 -1.72,5.06 -1.23,1.65 -1.39,4.64 -3.63,5.25z m-35.56,-71.98c1.98,1.43 0.5,-2.39 0,0z m-33.54,62.41c-0.72,-1.6 -3.1,-3.35 -3.37,-5.68 1.54,-2 1.07,-4.81 2.16,-7.03 -3.26,0.28 0.82,-2.8 -0.89,-4.55 -0.02,-1.96 -1.35,-4.24 -2.94,-4.22 0.19,-1.55 0.4,-3.39 2.06,-1.78 3.1,0.15 5.25,-2.55 7.52,-4.29 0.91,-0.84 5.63,1.48 2.53,2.55 -0.36,1.47 2.3,1.33 1.41,2.66 3.07,1.36 0.3,4.08 -0.53,6.16 1.23,2.67 0.22,5.65 0.3,8.76 -0.33,1.29 -0.37,5.73 -2.35,3.37 -1.49,-1.18 -4.61,-1.6 -3.46,1.11 -0.38,1.17 -0.94,2.88 -2.43,2.94z","name":"Italy"},"by":{"path":"m402.72,308.87c0.99,-3.18 0.27,-7 -3.79,-7.04 -0.71,-2.3 3.14,-4.07 4.34,-6.18 -0.26,-5.15 -3.83,-9.19 -5.74,-13.77 2.18,-0.83 4.01,-0.87 5.95,-0.9 0.86,-1.84 2.51,-1.83 3.98,-0.84 -1.05,-1.12 -2.37,-3.07 0.28,-3.17 1.9,0.02 -0.71,-2.58 2.17,-2.24 -1.28,2.76 4.76,1.14 2.24,-1.38 -2.85,-0.47 0.33,-3.89 -1.4,-5.76 0.96,-1.56 2.7,-3.08 2.72,-4.65 2.53,0.76 4.43,-4.49 0.94,-3.47 -1.1,-1.17 0.25,-4.78 1.91,-6.11 2.45,0.48 4.37,-0.43 4.51,-3.22 0.17,-2.25 2.08,-1.78 3.18,-1.85 2.02,-2.32 2.15,2.85 3.69,0.14 1.75,-1.51 3.73,-0.83 3.53,1.45 2.17,2.99 3.24,-2.73 5.87,-2.54 1.93,0.2 3.24,2.17 5.04,1.95 0.25,2.02 -0.47,3.85 1.8,5.15 0.82,1.65 -1.87,4.51 1.47,4.95 2.1,-0.08 0.99,1.32 1.56,1.96 1.72,2.18 3.98,3.94 6.71,3.73 0,1.84 0.71,4.69 2.92,2.85 2.09,-1.22 3.09,0.78 3.28,1.76 2.02,-0.38 3.13,1.46 1.26,2.31 -0.06,3.07 -3.04,4.09 -5.35,2.65 -3.54,0.27 -2.85,5.57 0.51,5.52 0.97,2.55 1.33,5.72 3.91,7.42 -2.66,1.35 -6.88,2 -6.85,5.76 -1.23,2.53 1.43,5.57 1.33,7.2 -1.16,-1.33 -5.51,-3.73 -5.13,-0.77 -2.24,-2.52 -3.75,4.16 -4.59,0.03 -1.77,-2.65 -4.04,1.4 -4.28,1.56 -1.22,-2.58 -2.82,1.6 -3.58,-0.67 -1.01,0.66 -2.93,1.68 -4.34,1.01 -1.39,0.16 -1.96,2.41 -2.67,0.56 -2.3,-2.34 -5.69,0.72 -8.43,-0.73 -2.87,-0.21 -5.7,0.69 -8.51,0.87 -1.69,1.51 -4.3,1.17 -5.72,2.79 -0.82,1.63 -1.2,4.18 -3.37,2.88 -0.54,-0.03 -1.11,0.27 -1.34,0.78z","name":"Belarus"},"pl":{"path":"m378.8,342.69c0.85,-2.71 -2.77,-1.44 -3.2,-3.81 -2.16,-0.74 -2.68,4.74 -4.1,1.6 -1.34,-0.42 -0.38,-2.05 -2.3,-2.3 -1.38,-1.23 -0.72,-3.2 -2.99,-2.63 -1.39,-1.14 -3.17,-0.83 -4.08,-0.27 -2.65,-1 1.12,-2.8 -1.66,-3.95 -1.04,2.08 -3.71,0.51 -5.13,-0.34 -2.56,-1.21 -1.29,2 -1.13,2.64 -1.27,1.67 -2.44,1.3 -2.92,-0.65 -1.25,-0.75 -2.67,-1.29 -0.72,-2.16 1.16,-2.1 -2.17,-2.93 -3.11,-1.63 -1.5,-2.25 -5.49,-1.16 -6.45,-4 -1.21,-1.39 -2.59,1.06 -1.9,-1.41 0.23,-2.18 -0.48,-4.58 -2.34,-5.49 -1.37,-2.65 0.61,-5.37 -0.78,-8.1 -2.17,-1.37 0.53,-5.96 -3.41,-5.97 -3.09,-2.11 2.9,-5.25 0.3,-8.13 -0.64,-1.64 -2.11,-4.93 -1.01,-5.69 2.39,-0.86 4.49,-2.6 7.02,-3.34 1.88,-0.91 4.34,-1.13 5.97,-2.18 0.73,-2.97 3.72,-4.13 6.19,-5.25 2.44,-1.51 5.22,-3.64 8.26,-2.74 0.34,2.92 2.37,6.29 5.83,5.11 2.32,-0.46 3.66,-2.87 6.19,-1.88 5.94,0.22 12.06,0.04 17.77,-1.75 2.19,-1.89 4.37,-0.56 6.59,0.69 0.91,5.68 5.67,10 6.52,15.73 -0.74,2.77 -4.55,3.76 -4.71,6.89 0.95,2.08 5.51,0.97 4.43,4.48 -0.75,3.1 1.11,5.48 1.99,8.14 0.77,2 4.89,2.48 3.07,4.57 1.18,1.35 3.03,3.77 0.15,4.64 -2.63,0.49 -3.02,4.28 -4.54,6.17 -0.82,2.29 -3.04,4.17 -2.56,6.78 1.11,1.72 -0.12,4.53 2.39,4.91 -2.96,0.2 -5.66,-0.81 -7.88,-2.64 -2.12,-1.23 -4.34,-0.31 -6.37,0.12 -1.06,0.6 -0.02,2.66 -2.03,1.15 -2.7,-1.27 -4.67,0.77 -6.02,2.87 -0.44,-0.92 -1.49,0.48 -1.34,-0.18z","name":"Poland"},"jo":{"path":"m566.3,519.26c-0.01,-4.69 -2.26,-8.97 -3.12,-13.51 1.51,-3.32 4.45,-0.15 6.76,0.1 3.02,0.33 6.94,0.22 8.51,-2.87 4.44,-5.57 8.37,-11.53 12.83,-17.08 1.86,2.51 3.76,5 5.38,7.68 -2.06,2.03 2.19,4.71 3.12,1.72 0.91,2.72 -2.48,4.53 -4.03,6.38 -4,3.47 -8.47,6.39 -12.72,9.51 -2.44,0.61 -3.15,3.3 -0.46,3.9 2.58,1.36 5.17,2.72 7.71,4.17 -7.99,0 -15.99,-0 -23.98,0z","name":"Jordan"},"gr":{"path":"m449.88,508.26c-1.41,-0.44 -0.91,-2.43 -2.98,-2.05 -2.92,-1.02 -4.66,0.87 -7.49,-0.12 -2.89,2.86 -3.34,-3.03 -1.84,-3.28 2.13,1.48 4.85,0.78 6.99,2.27 2.66,-1.89 5.67,-2.41 8.68,-1.61 1.64,-0.07 3.7,-0.37 4.57,-0.83 -1.03,2.5 2.95,2.63 3.64,0.39 1.59,-1.01 2.86,-0.15 1.23,1.36 -4.14,0.67 -8.27,1.86 -12.04,3.72l-0.39,0.1 -0.37,0.03 0,0z m-26.29,-13.55c-0.61,-2.64 -1.46,-5.84 -4.37,-6.76 -3.02,-0.62 -1.68,2.8 -1.92,4.11 -2.48,0.25 -0.03,-2.58 -2.33,-3.13 -1.56,-1.69 2.11,-3.33 -0.42,-5.29 -1.75,-1.46 -3.48,-2.23 -4.88,-3.8 -1.71,-0.32 1.67,-2.18 0.95,-3.89 1.31,0.41 3.43,-0.58 4.2,-2.4 2.31,-0.03 5.27,1.8 8.03,2.01 1.1,0.72 3.08,0.98 3.24,1.46 1.77,0.36 1.5,3.47 4.29,3.78 1.97,0.86 -3.33,1.22 -3.75,-0.39 -3.29,-1.87 -3.6,3.04 -0.88,3.97 1.42,2.4 3.54,4.49 2.98,7.25 0.93,1.21 1.93,2.16 0.11,0.68 -1.13,-1.37 -3.59,-4.36 -5,-1.33 -0.38,1.2 -0.28,2.48 -0.25,3.72z m12.62,-17.67c-0.61,-1.76 -3.37,-2.18 -4.61,-3.83 -1.54,-1.35 -1.12,2.07 -3.22,1.63 -1.32,1.11 -3.33,0.37 -1.06,-0.31 2.53,-1.38 -0.23,-3.22 -1.98,-2.17 -2.19,0.64 -2.76,-3.59 -4.29,-0.5 0.28,-1.81 -1.78,-2.98 -1.95,-0.63 -1.85,0.67 -5.66,-0.17 -7.42,2.31 -1.43,-1.51 -2.69,-1.73 -3.58,0.32 -0.06,-3.13 -3.02,-4.71 -4.64,-5.97 -0.05,-3.03 -3.45,-4.15 -5.3,-5.69 0.58,-2.13 -4.66,-2.22 -1.22,-2.7 1.45,0.13 1.31,-1.81 1.97,-2.79 -2.74,-2.59 4.57,-2.51 2.29,-5.81 0.57,-2.27 3.93,-4.04 1.77,-6.57 2.29,-1.19 5.68,-0.59 7.21,-3.12 0.92,-4.2 5.51,-0.91 7.7,-3.66 0.88,-0.81 0.03,-3.12 2.26,-2.13 2.68,-1.49 5.94,-1.98 8.75,-3.4 1.35,-1.69 4.25,-2.43 5.72,-0.71 1.88,0.93 3.48,-0.95 5.39,0.66 2.83,0.48 5.06,-1.99 7.75,-2.56 2.63,-1.48 -0.92,-3.81 -0.19,-4.93 2.53,-0.82 6.54,2.78 3.07,4.45 -2.66,1.03 1.16,6.08 -1.92,6.2 -2.59,-1.16 -5.58,1.42 -8.08,-0.62 -2.31,-0.06 -3.98,4.61 -5.94,1.87 -2.75,-0.21 -2.93,5.39 -5.82,3.29 -2.56,0.13 -2.19,2.87 -0.61,3.88 1.51,1.31 -0.02,1.67 -0.46,3.12 -2.01,-0.91 -2.94,1.12 -4.72,-0.3 -3.05,1.25 -3.01,-2.2 -1.76,-3.97 -0.09,-0.54 -2.81,1.81 -3.44,2.49 -1.02,1.92 0.18,3.87 -0.21,6.03 1.55,1.98 3.8,3.4 4.84,5.84 0.92,0.8 4.25,2.4 3.42,2.64 -2.14,-2.19 -4.85,-0.02 -3.78,2.46 1.31,0.13 3.2,1.7 0.6,2.21 -1.13,0.04 -4.23,2.36 -2.68,2.49 2.62,-1.25 4.96,1.17 7.41,0.98 0.52,2.36 2.91,0.77 3.98,2.53 2.06,0.36 4.93,0.25 3.64,2.95 0.1,1.33 1.96,3.02 1.13,4.05z m-32.41,-12.35c-2.66,1.97 2.35,4.76 3.65,1.72 0.88,-3.08 -2.48,0.37 -3.25,-1.63l-0.4,-0.09 0,0z m1.2,12.17c-2.12,0.67 -3.94,-2.49 -2.24,-3.05 -0.52,2.11 1.79,2.11 2.24,3.05z m35.21,-4.75c-1.33,-0.45 -3.15,-2.25 -0.48,-1.45 1.91,-0.84 2.27,1.01 0.48,1.45z m-3.1,-3.76c-1.98,-1.68 -5.22,0.85 -5.86,-2.11 -1.43,-1.48 -5.05,-2.2 -5.77,-2.78 2.78,-2.67 4.14,2.1 7.15,1.68 1.66,0.78 3.06,-0.62 3.9,1.22 0.4,0.59 0.43,1.32 0.58,1.99z m-10.1,-17.81c-3.53,-1.73 2.32,0.07 0,0z m3.59,-1.57c-2.32,-1.62 -0.44,-1.62 0.45,0.12l-0.11,0.22 -0.34,-0.34z","name":"Greece"},"tm":{"path":"m679.06,344.59c-1.21,-0.72 -0.78,-2.05 -2.51,-2.48 -0.91,-2.53 -0.44,-5.74 -2.11,-7.9 1.43,2.3 3.65,0.44 4.81,-0.09 -0.04,3.47 0.02,6.95 -0.03,10.42l-0.16,0.04z m-9.11,-14.43c-1.83,0.29 -2,-1.85 -2.97,-2.07 -2.67,-0.77 0.57,-4.63 0.48,-6.52 1.65,-3.13 3.89,-6.16 6.88,-8.09 1.36,-0.18 5.09,-1.73 4.9,0.43 0,2.65 0,5.3 0,7.95 -2.35,-1.52 -3.83,-5.43 -6.79,-5.11 -2.41,2.22 -6.24,4.38 -5.17,8.26 -0.05,1.27 0.71,3.09 1.95,2.4 0.34,0.89 0.41,1.85 0.72,2.75z m9.29,-40.46c-2.98,-4.77 -6.29,-9.32 -9.41,-14 0.44,-3.11 3.69,-4.89 4.74,-7.82 1.56,-2.45 3.21,-4.85 4.68,-7.37 0,9.73 0,19.46 0,29.19z","name":"Turkmenistan"},"kz":{"path":"m665.18,326.25c-2.97,-1.86 -1.2,-5.67 -2.65,-8.21 0.53,-3.17 -3.51,-2.8 -4.88,-0.83 -1.79,-1.67 -2.48,2.95 -4.91,0.84 -1.43,-2.21 -3.22,-0.68 -4.76,0.52 -0.4,-3.09 -3.28,-5.18 -6.16,-5.75 -2.02,-1.36 -4.24,-5.19 -6.86,-2.37 -2.9,1.87 -4.15,-4.1 -0.51,-3.35 1.06,-1.32 1.8,-1.79 3.42,-0.84 1.53,-0.78 2.76,-2.24 4.06,-3.11 -1.44,-2.18 -5.78,0.43 -7.07,-2.22 0.12,-1.34 3.47,-2.2 0.83,-3.45 -1.26,-2.14 2.16,-2.43 1.45,-4.52 2.51,-0.62 4.01,-2.7 6.42,-3.67 1.55,-0.68 5.82,-1.56 4.27,-3.73 -2.44,0.42 -5.53,1.2 -4.64,-2.51 0.27,-3.12 -0.67,-6.7 -3.34,-8.56 -1.46,-0.11 0.78,-3.59 -1.86,-3.15 -1.5,-2.77 -4.84,0.02 -6.51,0.7 0.1,2.2 -0.93,4.69 -3.45,3.61 -2.4,0.56 -6.57,-0.38 -7.49,3.29 -0,2.58 -2.65,3.31 -2.68,6 -1.27,1.57 -1.07,5.37 -3.43,5.36 -2.12,-0.08 -2.2,2.62 -2.46,3.63 -1.26,0.74 -5.86,0.39 -4.64,-0.82 3.5,0.56 3.47,-4.4 0.06,-4.32 -3.14,-1.51 -5.73,-4.02 -8.93,-5.36 -2.47,-0.32 -4.25,2.11 -6.54,2.07 -0.12,1.28 0.37,2.59 -1.35,1.17 -1.8,-0.93 0.01,-2.79 -2.21,-3.3 0,-2.52 -4.2,-0.23 -5.74,-0.66 -0.96,-2.72 -0.8,-5.85 -0.41,-8.82 0.73,-3.23 -4.34,-1.07 -3.74,-4.61 -1.48,-2.21 -1.17,-5.16 0.32,-7.28 -2.58,-1.5 -1.53,-6.73 1.82,-4.04 2.29,0.54 4.78,3.98 7.13,1.98 1.97,-1.65 2.09,-5.06 -0.41,-5.79 -0.5,-2.08 -4.31,-2.93 -1.9,-4.7 0.1,-1.7 1.79,-4.1 2.05,-4.93 -2.7,-0.86 -1.25,-3.39 0.39,-3.59 0.3,-2.73 3.83,-4.97 2.24,-7.88 -1.16,-1.26 2.12,-0.49 0.87,-2.37 -0.73,-0.82 1.71,-0.82 1.99,-1.86 2.14,-0.45 -1.05,2.08 1.69,2.02 1.48,-0.55 1.41,-1.96 2.93,-1.7 0.29,-1.63 -1.06,-3.26 1.01,-4 0.5,-1.63 0.88,-2.2 1.87,-0.46 3.2,2.4 4.8,-3.1 7.46,-3.43 1.62,1.55 3.73,2.04 5.43,0.37 1.27,1.42 3.01,1.43 4.62,1.61 -0.26,2.56 4.05,4.44 3.68,0.87 -0.11,-2.04 -2.23,-3.06 -3.52,-3.49 2.49,-1.89 5.28,1.44 8.06,-0.13 2.65,1.71 2.89,-3.09 2.88,-4.82 -0.94,-1.46 1.32,-2.87 0.36,-4.29 1.64,0.4 1.75,-1.1 1.34,-1.85 1.08,-2.25 2.79,-1.39 4.44,-0.52 1,-0.8 1.78,-2.46 2.98,-2.01 -1.89,-1.21 -2.16,-3.64 0.61,-3.9 -0.26,-1.23 0.14,-1.29 1.28,-1.45 1.06,-0.94 2.07,2.58 4.01,1.26 1.98,1.74 4.96,-3.12 5.37,-1.36 0.29,1.89 3.37,-0.99 2.39,-2.55 -0.11,-1.94 -1.41,-4.21 1.46,-3.17 2.91,-0.36 4.26,-3.79 5.34,-6.17 1.47,-2.93 -2.47,-4.1 -2.09,-6.64 -1.36,-2.25 -4.48,-0.11 -5.91,0.2 -2.22,-2.09 -4.58,3.81 -4.91,0.16 -1.29,-0.68 -2.71,2.23 -3.65,0.73 1.29,-1.47 1.19,-4.25 2.39,-6.18 1.51,-3.13 -2.02,-3.28 -3.58,-4.22 -3.1,0.97 0.81,-3.99 -1.61,-4.03 1.01,-2.42 4.84,-2.6 5.47,-5.2 -0.01,-2.9 -4.66,-1.68 -5.74,0.02 -1.13,1.71 -4.5,-0.24 -1.75,-0.92 2.16,-2.49 -2.77,-3.66 -2.05,-1.2 -2.33,3.55 -0.85,-4.14 -3.83,-1.64 1.26,-0.48 -0.31,-3.76 1.92,-2.68 1.3,1.04 0.21,-2.26 2.14,-1.3 2.74,-0.21 -1.15,-2.68 1.49,-3.26 1.26,2.1 3.9,-0.29 1.53,-1.19 0.54,-2.35 2.7,-4.74 3.28,-7.51 1.48,-0.31 3.12,-1.58 1.37,-2.69 1.12,-2.77 3.18,-4.87 5.44,-6.15 -0.1,-1.8 -3.04,-1.6 -1.06,-3.51 0.73,-2.38 2.55,-3.81 3.48,-6.49 2.08,-2.53 2.36,-5.49 3.47,-8.34 0.29,-1.69 3.72,-3.96 0.35,-4.97 -1.01,-0.43 2.31,-2.04 0.29,-3.41 -1.75,-1.68 3.22,-0.78 0.65,-2.37 -1.73,-0.49 3.06,-0.82 1.8,-2.5 2.25,-1.54 6.79,-0.26 5.35,-4.64 -0.2,-2.91 3.08,-0.72 4.32,0.28 1.69,1.75 4.12,-0.2 4.78,2.52 1.5,0.9 1.01,3.62 3.74,3.35 2.67,0.01 -0.81,-3.38 2.11,-2.14 1.93,-0.51 -0.97,-4.41 1.41,-3.27 0,52.65 0,105.3 0,157.95 -2.28,4.16 -5.07,8.03 -7.49,12.09 -2.11,1.94 -4.29,5.26 -1.49,7.58 3.01,4.53 6.37,8.91 8.98,13.65 0.02,6.62 -0.04,13.29 0.04,19.87 -3.05,0.34 -6.58,0.54 -8.5,3.49 -2.48,2.8 -4.81,5.91 -5.35,9.73 -0.09,0.46 -0.18,0.92 -0.25,1.38z","name":"Kazakhstan"},"fi":{"path":"m382.62,208.07c0.7,-3.07 -2.78,1.32 -3.86,-1.32 0.05,-0.96 1.56,-3.75 -0.71,-2.21 -1.13,1.69 -1.33,-1.45 -2.92,-0.68 -0.94,0.89 -2.97,-0.9 -3.55,-0.42 -0.14,-2.36 -1.97,-0.15 -2.25,-0.03 -0.63,-1.67 -0.91,-3.6 -2.08,-5.17 1.86,-0.74 1.72,-4.06 0.26,-5.25 -0.34,-1.47 3.17,-0.38 1.07,-2.02 -1.2,-2.15 -2.78,-4.06 -3.52,-6.25 0.62,-2.08 -0.63,-3.97 -1.49,-4.42 0.49,-1.2 -0.5,-2.29 -0.95,-2.29 0.13,-1.71 3.82,-4.59 2.52,-5.52 -3.07,-0.18 0.32,-3.17 1.17,-0.45 1.02,-1.23 3.05,-2.66 2.12,-4.84 0.01,-1.7 0.15,-2.94 1.36,-1.21 0.12,-2.42 1.26,-4.91 3.64,-5.85 -0.72,-2.45 1.54,-4.8 2.24,-7.01 -0.27,-2.84 0.9,-5.24 3.71,-6.24 1.6,-1.13 1.77,-3.36 -0.51,-2.84 -0.44,-2.27 -0.12,-5.32 -2.74,-6.02 -2.3,1.99 -2.43,-3.68 -4.97,-1.88 -1.75,-2.03 -4.37,-4.52 -3.48,-7.48 1.52,-3.03 -0.83,-5.16 -2.34,-7.18 -0.2,-1.46 0.87,-4.46 -1.6,-3.74 -0.01,-2.39 -0.15,-4.83 -1.27,-7.01 -2.48,-1.84 -4.57,-4.14 -8.05,-4.18 -1.93,-1.7 -6.43,-2.88 -5.46,-6.12 -0.41,-2.16 1.14,-3.53 2.73,-1.48 2.59,1.31 1.85,6.17 5.39,5.44 2.27,0.35 4.34,-0.45 4.98,-2.51 2.4,-0.26 6.27,3.96 5.78,-0.87 -0.39,-2.02 3.32,-1.43 1.97,-3.98 -1.32,-3.02 -2.11,-7.03 -0.35,-9.99 -0.31,-2.74 4.21,-0.11 4.22,-3.35 1.47,-1.91 3.36,2.08 5.49,1.78 2.95,0.9 3.14,3.84 1.7,6.03 1.41,1.64 0.21,2.38 -0.46,3.84 1.14,0.8 2.75,1.02 1.72,2.87 -0.47,3.13 2.02,6.77 5.45,6.28 1.67,2.35 6.13,3.59 3.92,7.14 -0.75,2.27 -1.97,4.85 -0.96,7.21 3.59,3.29 6.5,7.25 9.05,11.36 0.06,1.49 -2.83,0.38 -0.84,2.06 -0.22,2.17 0.21,4.77 1.29,6.07 -1.26,3.74 5.08,3.34 3.58,6.82 0.48,3.1 6.13,1.5 4.41,5.52 -0.25,1.99 -2.95,4.48 0.53,5.03 2.93,1.69 6.43,2.67 8.87,5.07 1.06,2.48 -0.3,5.24 -0.57,7.75 -2.26,6.49 -4.21,13.14 -7.27,19.3 -1.55,2.69 -3.59,5.26 -4.3,8.32 -1.76,0.21 -3.5,-1.24 -4.38,1.19 1.52,0.77 -3.01,1.75 -1.49,-0.16 -0.76,-2.31 -1.99,0.16 -1.56,1.47 -1.82,-2.09 -4.5,1.44 -1.45,2.01 0.62,2.53 -3.67,-2.15 -3.14,-0.28 0.89,2.06 -2.52,3.25 -2.85,3.52 -2.72,0.33 -4.14,2.39 -6.64,3.79l-0.57,0.27 -0.58,0.1 0,0z","name":"Finland"},"de":{"path":"m302.45,372.15c0.39,-0.91 1.99,-2.77 0.16,-1.49 -1.57,0.93 -2.11,-2.91 -4.19,-2.08 -2.04,1.85 -3.44,-2.27 -6.01,-1.15 -2.15,0.46 -2.02,-2.87 -4.5,-1.23 -1.72,0.52 0.38,3.76 -1.44,1.73 -1.84,0.2 -4.84,0.84 -5.69,-0.07 -0.64,-1 1.16,-4.13 0.65,-5.99 1.9,-2.36 0.91,-6.25 3.86,-7.87 2.56,-1.63 0.59,-4.12 -1.86,-3.67 -2.56,0.2 -2.84,-3.15 -5.48,-1.32 -1.23,0.08 -2.11,-2.54 -3.28,-1.12 -0.17,-2.33 -4.09,-3.23 -1.38,-5.35 1.81,-3.01 -5.32,-3.18 -1.88,-6.63 1.67,-1.33 2.21,-2.89 0.22,-4.22 1.95,-2 -1.2,-0.75 -1.34,-2.77 1.01,-1.22 0.18,-2.51 -0.16,-3.21 1.78,-1.86 2.88,-5.05 1.22,-7.64 -2.19,-2.06 0.71,-2.52 2.29,-1.67 2.39,0.34 3.33,-2.08 3.64,-3.33 2.38,-1.19 2.15,-5.11 -0.59,-5.64 -0.03,-1.55 3.42,0.08 2.83,-2.66 0.31,-2.54 1.52,-4.9 2.38,-7.37 -0.34,-0.18 -3.53,0.96 -2.22,-1.41 0.9,-2.9 4.25,-1.28 6.2,-2.15 0.16,2.03 2.57,6.54 4.4,3.34 0.14,-1.85 -1,-6.59 2.18,-4.76 1.27,0.28 4.88,-0.75 2.09,-1.66 -3.15,0.44 1.18,-4.81 -1.98,-5.31 4.2,-1.72 -2.92,-4.5 -0.43,-6.3 2.37,1.37 6.56,0.38 7.64,2.55 -0.45,0.53 1.55,0.68 -0.04,1.71 -1.46,1.22 0.47,2.21 1.51,1.23 -1.09,2.31 1.04,2.07 1.81,0.68 1.67,1.18 3.81,1.56 5.14,0.49 0.21,1.77 -4.56,3.93 -2.04,5 1.38,0.2 3.65,-1.17 3.27,1.31 2.66,-0.01 2.46,-4.21 4.91,-4.12 1.43,1.57 3,-1.39 3.56,-2.49 0.61,-2.1 3.54,-0.7 4.16,-0.17 0.88,1.8 2.57,3.83 4.93,3.32 -0.95,4 4.51,3.57 4.6,6.93 3.14,3.28 -3.49,6.24 0.16,9.19 2.04,0.76 2.91,2.01 2.23,4.17 0.93,1.99 2.9,4.81 0.48,6.79 1.68,1.23 1.03,4.11 3.18,4.83 0.68,1.92 0.82,5.65 -0.66,6.5 -0.87,-1.78 -4.46,-3.53 -3.95,-0.41 1.16,0.88 -2.8,1.08 -3.3,2.22 -2.5,0.18 -3.71,2.69 -5.8,3.41 -0.73,-0.12 -0.57,1.65 -2.06,0.72 -2.78,-0.99 -2.28,4.11 -4.17,1.96 -3.51,0.44 1.56,4.5 2.19,5.46 -2.26,2.79 1.42,6 3.88,7.15 1.53,1.88 3.04,3.44 5.43,4.44 2.44,1.22 2.24,4.86 -1.02,3.8 -0.57,1.52 -0.37,3.53 -2.79,3.73 -3.29,0.46 -2.9,3.65 -1.01,5.5 0.76,1.93 -3,3.3 -3.36,1.75 -0.45,-0 -3.6,-1.29 -2.93,0.98 -3.48,-0.65 -5.56,1.87 -8.47,2.95 -1.59,-0.45 -2.06,-3.03 -4.27,-1.95 -2.85,-1.05 -0.37,3.13 -2.89,3.37z m-6.7,-79.27c-0.21,2.06 4.44,6.44 3.78,2.2 -1.59,0.14 -2.26,-2.95 -3.66,-2.25L295.75,292.88z m29,76.43c-1.59,-1.17 -0.3,-3.24 0.69,-1.13 -0.04,0.43 -0.23,0.99 -0.69,1.13z m-0.01,-83.07c-2.42,-0.16 -2.07,-4.22 0.32,-2.83 -1.17,-1.29 -0.5,-0.74 0.89,-0.58 -1.82,1.06 2.32,2.92 -0.86,3.34l-0.35,0.07 0,0z","name":"Germany"},"se":{"path":"m323.06,272.38c-2.85,0.68 -1.5,-2.92 -0.88,-3.47 -1.34,-1.73 -2.37,-3.77 -4.04,-5.01 0.79,-1.22 -1.53,-2.8 1.01,-1.48 2.77,0.18 -2.19,-2.84 0.98,-2.65 2.38,-2.15 -2.21,-3.59 -2.38,-5.5 -2.18,-0.93 -1.38,-4.24 -3.57,-5.03 -0.5,-2.35 -1.05,-4.69 -2.37,-6.57 0.36,-2.06 3.34,-6.36 -0.08,-6.96 -1.38,2.23 -3.39,1.39 -2.89,-1.18 0.66,-1.66 -0.9,-5.32 -0.3,-5.55 1.22,1.95 2.5,1.63 3.29,-0.5 0.91,-2.52 -0.9,-5.03 -0.38,-7.57 2.08,-1.14 -0.02,-3.96 3.05,-4 2.39,-1.51 1.37,-4.54 1.71,-6.85 0.8,-2.58 -4.53,-6.31 0,-6.91 1.04,-0.81 1.22,-3.31 1.37,-4.79 -1.12,-2.38 -6.01,-2.81 -4.1,-6.25 1.84,-3.74 -1.45,-6.92 -1.02,-10.47 0.52,-2.44 0.53,-5.73 -0.14,-7.32 0.64,-2.96 1.19,-6.43 4.34,-7.91 2.35,-0.49 6.23,1.31 6.51,-2.71 0.96,-3.43 -4.73,-4.28 -1.85,-7.71 0.9,-2.93 3.32,-5.66 2.42,-8.87 0.15,-1.92 0.67,-3.87 -0.11,-5.73 -1.01,-2.32 3.73,-0.74 3.99,-3.33 -0.13,-2.25 -0.54,-4.21 1.52,-5.81 2.69,-2.56 2.7,-6.48 0.46,-8.94 2.93,-1.39 1.66,-4.89 3.52,-7.09 1.35,-0.88 5.1,1.96 4.84,-1.65 -0.51,-1.95 -1.78,-6.23 1.75,-4.92 2.24,0.45 5.5,2.66 7.12,-0.07 1.29,-1.53 -2.75,-1.44 -0.66,-3.53 0.95,-1.42 0.76,-3.57 -0.83,-4.28 3.02,-0.52 2.64,2.5 5.35,3.5 2.17,2.8 6.24,2.01 8.45,4.17 1.81,1.26 3.78,2.76 3.22,5.22 1.03,1.27 -0.68,4.42 1.98,4.24 -0.85,2.83 1.11,4.63 2.62,6.51 0.04,2.86 -1.49,6.25 1.05,8.57 1.6,1.29 3.31,4.27 -0.1,3.45 -1.76,0.14 -2.91,-0.92 -2.17,1.42 -0.95,1.6 -5.22,-2.83 -4.14,0.58 0.84,1.65 -2.05,2.45 -1.57,1.13 -2.06,-0.65 -0.53,1.54 0.66,1.49 -0.6,0.2 -1.52,0.57 -0.3,1.82 -1.49,0.26 -4.7,1.58 -1.68,2.64 2.32,2.25 -3.2,4.64 -1.02,7.19 1.54,0.9 4.4,2.82 1.64,4.33 -1.68,2.21 -0.66,5.89 -3.12,7.17 -0.94,1.59 -3.16,2.96 -4.81,3.45 -0.21,1.34 -1.22,2.8 -1.35,4.54 -1.77,-1.72 -2.61,0.56 -2.76,1.85 -1.12,0.81 -2.56,2.13 0.01,2.01 -0.44,1.31 -4.33,0.73 -2.47,3.43 -0.06,0.73 -0.49,2.94 -1.88,1.95 -2.76,-0.24 -2.07,3.37 0.06,3.69 -0.77,1.95 -1.46,4.89 0.24,6.81 -3.74,-1.85 -2.36,2.41 -0.94,3.91 0.18,1.27 -3.07,0.5 -0.73,1.44 0.84,1.85 1.12,4.66 1.43,6.67 -0.32,2.79 5.02,-0.22 4.86,2.53 0.7,1.96 4.04,1.71 4.48,1.82 -3.19,-0.43 -0.28,3.53 1.17,3.32 1.13,1.08 3.55,2.93 0.69,3.17 -0.96,1.32 -2.08,3.54 -3.42,3.71 1.54,1.27 -2.79,1.25 -1.63,-0.68 0.49,-2.21 -4.13,-4.8 -3.64,-1.69 1.43,0.51 0.2,2.21 2.13,2.69 -1.79,0.21 -3.94,-2.79 -5.52,-0.41 -0.59,-1.15 -2.36,-1.3 -1.99,0.35 -2.53,-0.76 -3.68,2.49 -1.03,1.96 1.95,-0.49 4.14,0.17 6.05,0.67 -0.71,2.97 4.28,-1.28 2.88,1.93 -0.14,2.13 -0.95,4.88 -3.12,4.77 0.18,1.44 -0.14,1.56 -2.15,1.24 -1.48,-0.93 -5.69,1.16 -2.24,1.59 0.93,-0.93 4.88,0.08 2.51,0.95 -1.3,-0.74 -2.65,-1.15 -1.6,0.7 1.1,0.49 3.58,1.85 1.37,2.42 -0.48,1.93 2.49,4.34 -0.83,3.78 -1.22,1.55 3.46,2.55 0.79,3.59 -0.59,1.57 1.8,1.83 -0.1,3.07 -0.36,1.71 1.22,3.68 -0.24,4.3 0.8,1.29 0.72,4.62 -0.49,4.51 -0.92,1.99 -0.01,8.09 -3.9,5.74 -0.75,-0.04 -1.2,1.04 -1.28,-0.03 -1.81,1.13 -4.91,0.3 -5.24,2.54 -3.47,0.86 -2.77,5.15 -1.48,7.22 -1.25,2.12 -3.78,-0.71 -5.21,1.44 -0.58,0.2 -1.19,0.28 -1.8,0.28z m21.76,-13.69c-0.6,-1.64 -0.03,-5.51 0.58,-5.62 -0.47,1.84 -0.07,3.79 -0.58,5.62z m11.16,-10.28c-1.47,-2.04 -0.57,-3.97 -1.15,-6.17 0.13,-1.54 3.5,-5.82 3.93,-3.32 -1.59,1.67 -1.23,4.3 -0.42,5.29 -0.56,1.58 -2.33,2.58 -2.36,4.21z m-6.04,-22.62c-0.58,-0.9 -1.01,-2.64 0.37,-3.19 0.51,-2.57 3.62,1.5 0.73,1.06 -0.71,0.44 -0.93,1.57 -1.1,2.14z m3.41,-4.74c-1.71,-0.56 1.15,-0.98 0,0z","name":"Sweden"},"no":{"path":"m283.92,239.69c-2.05,0.82 -1.04,-2.38 -3.04,-0.45 -2.25,0.63 -2.45,-1.19 -0.48,-1.71 1.16,-1.98 -1.94,-1.69 -2.54,-0.89 -1.88,-1.69 -4.73,-3.13 -5.46,-5.54 0.16,-1.17 0.04,-2.84 1.26,-1.53 2.45,-0.31 0.5,-3.28 2.63,-3.15 -0.92,-1.74 3.6,-1.24 2.16,-3.19 -1.49,-0.01 -3.77,0.75 -1.5,-1.08 1.07,-1.87 -4.03,-2.48 -3.95,0.31 -0.43,1.99 -1.31,-1.27 0.03,-1.59 -0.59,-1.71 3.37,0.46 2.3,-1.73 2.11,-0.09 3.7,-3.31 0.62,-1.92 -2.12,1.06 -0.9,-1.62 0.69,-0.69 -1.77,-1.8 3.78,-2.21 0.57,-3.6 -0.56,-4.05 -3.61,3.53 -2.9,-0.4 -0.09,-1.07 2.45,-2.14 0.56,-2.38 1.23,-1.75 0.14,-1.45 -1.12,-1.67 -0.48,-2.03 3.39,-0.54 1.29,-2.62 -1.57,-0.11 -2.3,1.01 -2.92,1.83 0.23,-1.47 -0.96,-1.1 0.71,-1.97 1.17,-0.81 3,-0.92 0.68,-1.9 -1.68,1.41 -3.48,-0.55 -1.63,-1.27 2.35,2.15 4.25,-2.5 6.35,0.43 1.83,1.86 1.2,0.18 2.05,-1.15 2.54,-0.3 -0.18,4.44 3.17,3.6 2.08,-1.21 -0.36,-4.05 -1.72,-4.82 -1.87,-1.19 -2.86,1.17 -4.77,-0.24 -1.71,-0.32 -5.74,2.24 -5.21,-1.12 1.24,-0.84 -1.48,-1.91 1.02,-1.63 0.93,-0.21 -1.41,2 0.86,1.55 1.15,0.42 4.11,-2.74 2.32,-2.56 -1.17,0.24 -3.58,0.07 -2.04,-0.78 0.01,-1.15 -2.86,-0.72 -1.37,-2.6 1.92,-1.21 1.67,-2.06 2.44,-3.76 1.13,0.7 1.55,1.95 2.59,0.89 1.71,1.83 3.67,-1.21 0.78,-1.26 -1.72,-1.7 2.02,-2.98 1.47,-0.81 -0.08,1.94 2.1,2.28 1.49,0.15 -1.54,-0.73 -0.39,-3.26 1.26,-2.04 -0.9,2.54 1.99,2.46 3.2,1.29 -0.57,-1.07 -3.07,-0.84 -2.76,-2.61 -1.93,-0.78 -0.88,-1.18 0.63,-1.75 -0.31,2.53 1.54,0.84 1.46,0.89 0.76,2.66 4.97,0.16 2.35,-0.64 -1.68,1.13 0.97,-2.47 -1.62,-1.35 -1.33,0.1 -1.92,0.19 -0.62,-0.55 0.77,-1.45 -3.3,-3.11 -0.25,-2.56 1.36,2.34 4.5,0.23 4.77,-0.42 0.76,1.21 1.99,4.78 3.9,2.5 -0.19,-1.38 -1.61,-1.13 -0.15,-1.91 -0.52,-0.88 -3.96,-0.82 -1.31,-0.98 2.56,1.07 3.94,-2.68 1.6,-3.22 -2.38,3 -0.29,-2.57 1.23,-0.79 -1.13,2.54 3.47,1.05 2.52,-0.37 0.79,-1.1 1.41,-2.4 1.63,-0.68 1.42,0.16 -1.15,3.34 1.22,2.27 1.23,1.9 3.05,-0.32 1.25,-1.45 2.02,0.81 5.84,0.23 4.08,-2.68 2.55,-0.11 3.44,-2.71 1.89,-3.48 2.7,-0.44 1.04,-4.25 -0.61,-2.47 -0.94,0.99 -4.98,3.53 -3.32,4.59 1.36,-0.14 -3.55,4.36 -3.84,1.11 1.8,-0.4 1.59,-2.97 -0.14,-1.47 -1.54,1.59 -1.58,-0.15 0.05,-0.55 1.29,-0.12 3.11,-2.23 0.74,-1.96 0.49,-1.84 0.69,-1.57 2.55,-2.66 -0.01,-1.8 3.87,-1.75 1.44,-3.46 1.6,-3.11 2.62,3.25 4.94,0.36 -0.07,-0.91 1.83,-2.92 -0.44,-2.32 -1.97,0.37 0.51,-3.35 0.91,-3.77 2.46,-0.4 5.23,-2.14 6.04,-4.52 -0.69,-1.41 -1.97,0.46 -0.84,-1.25 0.83,-2.9 -4.58,-0.06 -1.84,-2.23 2.88,-0.42 -1.2,-4.08 2.2,-4.17 1.93,2.26 1.6,-1.88 -0.02,-2.41 1.79,-0.55 2.5,-1.55 4.25,-0.42 0.51,-2.76 -3.45,-2.33 -4.43,-3.58 -0.26,-3.01 2.59,-3.12 4.58,-3.67 0.29,-0.78 -0.81,-3.13 0.47,-2.48 2.46,0.65 2.45,-2.36 2.11,-3.23 1.27,-0.62 3.06,1.08 2.81,-1.49 0.06,-2.75 -4.88,2.23 -2.7,-0.53 -0.33,-1.84 3.17,-2.65 3.79,-1 0.44,2.38 2.69,0.96 0.74,-0.53 -0.37,-0.19 2.89,-3.12 0.16,-2.12 -1.52,1.62 -2.69,-1.67 -0.67,-0.49 2.18,0.6 1.78,-2.26 0.1,-2.63 1.64,-0.99 1.76,-1.25 3.09,0.31 2.65,0.05 -0.04,3.53 -1.13,3.83 -0.13,2.43 3.49,4.78 1.03,6.94 -1.52,2.38 -4.26,5.02 -2.96,8.1 -1.03,2.23 -5.62,0.34 -3.97,3.87 1.08,2.24 -0.41,4.62 0.29,6.91 -0.21,2.4 -1.5,4.65 -2.48,6.84 -1.89,2.33 -0.64,4.78 1.42,6.24 1.36,2.71 -1.06,4.75 -3.56,3.4 -3.47,0.13 -6.05,3.54 -6.55,6.75 -0.09,2.61 -2.39,4.76 -0.87,7.58 1.7,0.33 -0.26,3.51 0.65,5.09 0.93,2.11 2.11,4.27 1.04,6.66 -1.85,3.6 1.33,5.61 3.87,7.28 0.34,1.26 -0.49,2.52 -0.69,3.78 -4.37,0.5 -1.64,4.45 -0.68,6.73 -0.19,2.39 0.87,5.69 -1.37,7.29 -2.33,-0.08 -2.37,2.05 -2.44,3.42 -2.81,2.64 1.45,6.5 -0.89,9.33 -0.63,-0.51 -0.86,-4.28 -3.41,-3.07 -1.98,0.66 -1.1,-2.02 -2.18,-2.85 0.06,-1.66 0.25,-4.8 -1.34,-6.05 -1.51,0.96 0.6,3.37 -1.47,1.82 -1.6,1.08 1.29,3.05 0.43,4.75 1.82,1.57 -1.36,1.57 -0.61,3.28 -0.57,0.33 -1.78,3.28 -2.33,0.68 -1.69,-2.25 -3.03,0.06 -1.93,1.1 -2.37,0.2 -1.22,2.58 -3.27,2.72 0.26,1.74 0.63,2.15 -0.66,0.4 -0.55,-0.29 -0.31,3.24 -1.72,3.89 -1.13,1.13 -2.53,1.14 -2.96,2.81 -1.25,-1.4 -1.53,-2.14 -2.1,0.08 -0.58,1.07 -1.97,0.9 -2.97,1.19z m1.79,-42.62c-2.02,0.59 -1.81,3.69 -1.92,5.35 2.29,1.58 5.16,-1.56 2.82,-2.47 -2.51,1.62 -0.41,-2.26 1.2,-2.22 -0.69,-0.24 -1.35,-0.63 -2.1,-0.66z m-8.26,-3.48c1.26,1.05 1.96,-0.59 3.75,0.18 2.86,-0.7 0.32,-3.31 -1.23,-1.63 -0.54,1.11 -4.66,-2.16 -3.53,0.83 -0.64,0.74 0.98,1.54 1.01,0.63z m-1.56,-1.31c1.64,-1.54 -2.29,-0.9 0,0l0,0z m-3.39,20.54c-1.15,-1.48 -0.79,-2.31 1.27,-2.09 -0.5,0.65 -0.76,1.45 -1.27,2.09z m20.58,-43.12c1.89,-0.99 1.05,0.09 0,0z m18.74,-19.12c-0.11,-1.35 1.21,-2.72 0.71,-0.65l-0.24,0.29 -0.47,0.36 0,0z m7.46,-19.18c-1.61,-0.55 0.1,-1.14 0,0l0,0z m3.95,-10.61c-1.42,-0.85 2.16,-3.22 0.98,-0.56 -0.23,0.31 -0.59,0.56 -0.98,0.56z m8.03,-3.21c-0.35,-1.4 -4.22,-5.53 -0.69,-3.55 1.98,-0.66 -2.87,-2.41 0.24,-2.21 2.34,-1.07 1.29,3.96 3.81,2.24 0.12,-1.58 -1.95,-2.83 0.76,-2.09 1.98,-2.01 2.51,5.82 -0.36,3.01 -2.2,-1.1 -3.01,1.06 -3.76,2.6z m-5.57,-1.57c-2.14,-0.36 2.05,-0.11 0,0z m-7.93,-1.09c-0.6,-2.04 2.47,-0.64 0,0z m7.12,-4.13c0.59,-2.37 4.58,-1.01 4.01,-4.46 0.66,-1.69 0.95,3.05 2.77,1.99 1.53,1.25 -2.5,3.06 -1.7,0.6 -1.05,-1.01 -2.27,1.66 -3.77,0.7 -0.56,0.22 -0.96,0.7 -1.3,1.17z m7.58,-0.78c-1.19,-2.28 3.86,-0.43 2.34,-2.88 -3.7,-0.04 1.43,-1.56 0.6,-2.56 -2.52,-1.2 0.41,-2.37 1.15,-2.81 0.41,-3.22 -2.85,-1.84 -4.06,-0.47 -1.59,-2.04 2.26,-2.36 2.32,-4.57 0.14,1.33 0.46,2.85 1.65,2.42 0.8,1.52 3.32,1.84 3.24,-0.37 1.68,1.68 2.77,1.67 2.31,-0.48 0.79,-1.17 0.35,-2.79 1.61,-3.02 -0.4,-0.66 -1.42,-3.92 0.2,-3.31 0.95,2.39 -0.14,5.28 -0.89,7.26 2.94,1.88 1.55,-3.57 4.12,-3.05 0.22,-1.76 -3.3,-2.79 -1.17,-4.59 1.11,2.64 2.9,-1.39 2.9,-1.08 0.95,0.44 4.33,3.19 2.86,0.58 0.52,-1.54 -0.4,-5.86 -2.92,-3.36 -3.05,-0.22 1.04,-4.05 2.23,-1.43 1.8,-0.47 3.36,-0.55 3.65,1.78 1.6,2.82 3.68,-1.17 2.1,-1.52 0.07,-0.51 -0.69,-2.47 -0.41,-3.71 -0.86,-0.45 -2.21,1.67 -1.86,-0.59 0.28,-1.23 2.77,-3.11 1.94,-0.75 0.94,1.47 4.41,-0.15 2,-1.03 0.6,-1.49 3.48,0.04 1.97,-2.16 -0.79,-0.71 -2.04,-3.95 0.25,-3.13 1.93,-0.42 3.84,0.45 2.02,2.21 -1.75,1.98 -0.56,3.61 -0.42,5.65 -2.28,2.68 3.1,3.87 2.24,0.45 -0.18,-2.74 0.93,-5.32 1.76,-8.05 1.89,-3.05 -1.06,3.6 0.33,2.81 1.3,-1.62 0.64,3.35 2.9,1.4 2.12,-1.22 -1.68,-4.46 1.77,-4.91 0.72,-1.47 -2.34,-1.18 -0.57,-2.18 -0.51,-2.17 4.79,-1.62 2.39,1.11 -1.65,1.09 -1.95,4.14 -0.56,3.08 -0.4,2.24 2.84,0.85 3.62,0.4 -0.89,-1.13 -1.79,-4.79 0.32,-4.87 0.09,2.52 4.6,3.29 3.84,0.25 1.3,0.25 1.81,0.78 0.68,1.44 0.12,2.4 2.78,-0.68 3.9,1.46 2.08,1.26 -1.72,0.74 -1.03,2.68 -0.51,3.31 -7.08,0.08 -6.25,3.51 1.53,-0.19 4.57,0.06 4.67,1.27 -0.73,2.54 2.28,1.63 2.62,2.01 1.41,2.24 -3.5,3.67 -1.9,6.17 0.12,3.04 -1.51,0.49 -0.35,-1.03 0.73,-2.35 -0.61,-5.22 -3.22,-5.51 -2.52,-0.23 -4.95,-4.8 -6.83,-0.86 -0.98,2.59 -3.07,-0.98 -3.73,2.03 -1.82,2.85 -1.43,6.39 -0.81,9.47 1.12,1.85 1.17,3.38 -0.82,4.1 -0.7,1.31 0.29,4.41 -1.67,2.5 -2.14,-1.69 -5.02,-0.86 -5.85,1.4 -2.54,0.85 -4.72,0.04 -5.34,-2.66 -0.99,-2.14 -5.91,-6.2 -6.14,-1.61 0.57,2.13 -0.39,0.96 -1.13,1.23 -0.7,0.99 -4.96,0.92 -2.14,2.3 2.85,1.94 -1.88,4.5 0.34,5.92 1.59,3.24 -4.12,0.39 -5.68,0.21 -2.06,-1.04 -3.15,2.55 -4.42,0.38 -1.01,-0.36 -2.16,1.19 -2.67,1.07z m-9.01,-1c0.11,-2.56 2.91,0.13 0,0z m-1.13,-1.28c-0.8,-1.29 3.49,-1.49 0.69,-0.52l-0.34,0.34 -0.36,0.18 0,0z m4.3,-0.48c-1.71,-0.47 -0.9,-2.93 0.17,-2.2 -0,0.74 -0.11,1.47 -0.17,2.2z m4.79,-4.64c0.18,-0.78 1.29,-1.07 0,0z m7.64,-3.83c-2.24,0.29 -1.11,-3.47 -0.22,-0.75 0.06,0.35 1.74,0.98 0.22,0.75z m2.2,-0.62c-2.38,-0.91 -2.84,-5.4 0.1,-4.68 0.37,1.54 -0.1,3.12 -0.1,4.68z m-1.72,-6.1c-4,-0.97 3.45,-2.52 1.03,-0.52 -0.42,0.05 -0.59,0.56 -1.03,0.52z m5.27,-4.48c-0.27,-0.28 0.7,-0.67 0,0z m42.25,-2.91c-1.73,0.39 -2.88,-3.16 -0.45,-1.74 1.34,-0.78 2.3,1.96 0.45,1.74z m-35.9,-2.93c0.17,-2 2.33,-0.17 0,0z m1.12,-1.12c1.6,0.69 0.37,-2.16 2.16,-2.14 -0.43,0.5 -1.9,3.93 -2.16,2.14z m20.87,-4.79c0.68,-1.68 0.54,-0.43 0,0z m-9.67,-2.21c-2.58,-0.52 -0.4,-3.09 0.65,-0.8 -0.07,0.3 -0.24,0.8 -0.65,0.8z M319.32,12.08c-0.3,-1.14 -1.45,-2.77 -2.39,-2.03 -1.57,-1.66 3.97,-2.79 -0.11,-4.02 -1.19,0.78 -1.7,1.41 -2.54,-0.32 -1.8,0.29 -3.52,-4 -2,-4.15 0.28,2.4 2.41,-1.85 3.57,0.39 1.62,1.46 1.99,-0.61 1.81,-1.03 1.1,0 2.2,0 3.3,0 -1.65,1.5 0.79,4.98 -1.45,5.97 1.81,0.96 -0.87,3.73 0.84,4.72 -0.27,0.27 -0.64,0.46 -1.03,0.47z M334.56,1.41c-0.71,-0.78 1.26,-0.59 0,0z","name":"Norway"},"ua":{"path":"m458.88,376.43c-1.65,0.13 -4.78,-1.76 -1.5,-2.12 1.11,-0.94 -0.88,-2.9 1.02,-4.06 0.62,-1.77 2.75,-4.95 1.17,-6.55 -2.35,-0.6 0.77,-4.92 0.58,-1.37 1.22,0.09 1.33,-0.46 2.29,-1.4 1.42,1.03 2.11,1.68 2.01,-0.49 0.8,-0.31 0.98,2.31 1.91,0.48 2.09,-0.77 2.07,-2.38 0.02,-2.62 0.48,-3.05 -2.01,-4.08 -4.34,-4.76 -1.03,-1.35 0.14,-4.1 -2.32,-4.58 -0.19,2.48 -3.85,-0.68 -2.94,-2.62 0.58,-1.57 -1.58,-5.77 -2.62,-3.02 -1.32,-0.9 -3.45,-3.78 -4.76,-1.05 -0.61,-1.26 -0.31,-1.31 -2.39,-0.85 -1.59,-0.19 -3.7,-2.91 -5.96,-1.05 -1.9,1.41 -4.52,1.99 -6.34,2.49 -0.3,1.21 -2.98,2.87 -3.26,4.06 0.69,2.88 -3.92,2.94 -5.88,3.36 -1.91,1.06 -2.85,5.5 -5.12,2.22 -2.55,-1.4 -4.85,1.16 -7.45,0.17 -2.78,0.68 -6.22,-1.81 -7.42,1.27 -1.7,-1.79 -4.36,-1.99 -6.08,-3.8 -1.69,-1.99 1.67,-4.76 1.1,-7.32 0.71,-2.08 3.89,1.72 3.03,-0.71 -0.43,-1.86 -2.14,-2.21 -2.09,-4.41 -1.6,-2.52 1.02,-5.01 1.85,-7.4 1.48,-2.09 2.06,-5.46 4.76,-6.09 3,-1.14 0.85,-4.79 0.14,-5.51 2.5,-2.1 -3.76,-3.23 -3.93,-5.84 -0.3,-1.41 -1.88,-4.75 0.96,-3.25 2.78,-0.65 2.08,-4.77 5.31,-4.83 2.44,-2.13 5.65,-1.09 8.41,-2.29 2.86,0.12 5.82,0.8 8.71,-0.13 1.44,0.02 2.96,3.43 4.46,0.67 0.48,-0.61 1.02,3.11 2.27,0.92 -0.68,-2.01 1.68,-0.28 2.33,-1.83 1.72,1.64 3.14,-2.06 4.36,1.19 0.98,-0.83 1.53,-5.36 3.12,-2.13 0.91,1.83 2.9,1.59 3.18,-0.37 1.11,-0.89 4.84,0.77 2.92,-1.35 2.22,-0.55 3.94,4.29 5.74,0.82 -0.53,-2.27 -3.24,-4.21 -1.65,-7.03 0.3,-2.91 3.55,-3.36 5.73,-4.62 2.8,0.98 5.55,-1.1 4.6,-3.99 2.15,-0.59 4.74,-0.01 5.62,-2.79 1.28,-1.72 2.08,2.03 2.83,-0.54 3.15,-1.7 3.09,3.74 6.17,3.78 2.69,0.81 -2.77,1.83 -0.06,3.34 0.97,1.1 0.27,1.92 1.66,2.64 0.13,1.93 0.76,2.76 1.8,0.93 1.75,0.21 3.63,-0.42 4.86,-1.04 1.22,1.6 2.86,1.33 3.58,3.44 0.66,2.12 2.97,6.38 5.86,3.86 0.95,-2.66 2.98,0.62 4.61,-0.26 2.96,0.38 3.76,-3.58 5.99,-4.66 2.15,1.36 3.87,3.07 6.32,3.78 2.39,1.73 1.46,-2.06 1.83,-2.22 2.04,0.83 3.63,-0.35 5.65,0.78 1.64,-1.06 3.29,-0.67 5.4,-0.98 -0.34,2.96 3.78,0.35 3.93,-0.21 -1.54,1.79 2.89,1.91 1.36,4.34 -0.91,1.71 -3.3,4.32 0.42,4.36 1.34,-0.17 -2.51,1.76 -0.87,3.22 0.73,1.16 4.31,0.82 2.94,3.4 -1.12,2.14 2.56,-1.79 1.05,1.32 0.04,1.92 1.74,4.67 -1.56,4.6 -2.59,0.04 -5.57,1.58 -4.88,4.34 -1.93,1.59 -3.46,4.3 -2.04,6.74 1.21,-0.9 1.4,3.27 -0.48,2.33 -2.61,-0.17 -4.34,2.86 -4.47,4.25 -3.32,-0.37 -1.93,5.58 -4.94,3.83 -1.97,0.68 -1.55,3.31 -3.9,2.83 -2.31,2.16 -4.28,4.87 -4.46,8.16 0.05,2.37 -1.89,1.63 -2.69,0.94 -1.43,2.66 1.92,4.83 3.49,6.52 1.72,1.52 4.3,4.21 6.67,2.42 1.12,-1.05 0.41,-2.57 2.09,-1.56 1.41,-0.15 1,-2.82 3.17,-2.37 1.15,-0 0.13,2.98 0.5,4.21 -1.72,0.79 -3.13,2.24 -5.41,1.17 -2.72,0.19 -1.51,3.05 -3.33,4.45 -1.46,1.36 -5.27,2.16 -5.39,5.34 -0.65,2.52 -2.91,5.33 -5.63,3.62 -2.92,-0.52 2.13,-0.53 -0.45,-1.77 -0.6,-1.76 -0.24,-6.9 -3.31,-5.63 -2.51,0.74 -5.09,-2.4 -7.49,-0.19 -0.84,-1.11 2.17,-2.44 2.5,-3.9 1.15,-2.11 4.76,-3.17 5,-5.4 -1.21,-0.47 -1.1,-4.45 -2.98,-2.14 -0.01,2.53 -3.55,-2.55 -3,-0.06 -1.18,1.35 -4.02,3.26 -6.29,3.26 -0.55,-2.41 -5.82,0.8 -2.84,-2.01 -2.07,-2.11 3.13,-0.37 2.51,-2.12 0.43,-0.87 2.54,-3.83 0.04,-2.33 -1.67,2.49 -5.64,0.74 -4.34,-2.2 -3.44,-0.71 0.17,4.67 -3.05,4.35 -0.95,0.4 -1.24,-2.89 -2.18,-0.81 1.19,3.1 -5.65,1.69 -4.31,5.43 -0.19,2.64 -0.71,6.16 -2.65,8.5 -1.92,0.15 -2.28,-0.37 -1.97,1.56 1.06,2.6 -1.47,1.65 -1.44,-0.04 -3.03,0.54 1.86,5.97 -1.63,4.84 -1.69,1.04 -2.76,2.58 -4.85,3.23 -0.33,0.68 0.22,1.06 -0.9,0.94z m8.84,-3.13c-1.24,-0.5 0.31,-1.59 0,0z M480,354.71c-2.02,-0.24 1.4,-0.94 0,0z","name":"Ukraine"},"il":{"path":"m564.91,519.32c-2.79,-0.13 -5.59,-0.02 -8.39,-0.06 1.03,-3 0.55,-6.35 0.36,-9.47 -0.77,-1.89 -0.08,-3.97 0.69,-5.38 -2.21,-3.68 3.62,-1.36 3.34,-4.63 0.16,-2.5 0.5,0.45 0.78,1.3 0.41,1.74 0.97,3.45 0.64,5.26 0.64,4.15 2.85,8.05 2.93,12.32 -0.33,0.17 0.28,0.88 -0.36,0.66z","name":"Israel"},"sa":{"path":"m593.15,519.31c-2.83,-0.62 -5.1,-2.77 -7.77,-3.86 -1.58,-0.98 -5.22,-1.86 -2.02,-3.26 5.2,-3.81 10.77,-7.23 15.26,-11.9 1.43,-2.99 4.63,-3.12 7.49,-3.98 3.73,-1.26 7.76,-1.54 11.57,-0.41 3.34,1.04 6.79,1.79 10.32,1.49 3.1,-0.23 6.16,0.27 9.07,1.36 7.05,2.14 14.23,3.86 21.25,6.06 3.22,1.22 7.13,2.8 10.33,0.7 3.47,-1.54 7.12,-2.66 10.59,-4.19 0,5.98 0,11.96 0,17.94 -28.52,0 -57.04,0 -85.55,0l-0.54,0.05z","name":"Saudi Arabia"},"iq":{"path":"m665.09,505.54c-3.93,-0.14 -7.37,-2.41 -11.2,-3.08 -6.98,-1.9 -13.93,-3.92 -20.88,-5.88 -4.51,-0.55 -9.21,0.46 -13.56,-1.25 -4.06,-1.23 -8.45,-1.67 -12.53,-0.27 -2.28,0.01 -6.14,3.28 -6.23,-0.28 -1.25,-1.52 -3.9,2.58 -3.26,-0.38 2.09,0.09 -1.51,-3.02 -1.67,-4.04 -1.32,-2.57 -5.49,-5.02 -2.13,-7.49 4.5,-5.84 9.16,-11.56 13.6,-17.45 2.04,-3.07 2.39,-7.4 0.02,-10.4 -1.41,-3.28 0.38,-7.66 -2.62,-10.31 -3.09,-2.29 -2.71,-6.73 0.85,-8.16 2.5,-2.92 2.33,-7.04 4.39,-10.19 0.66,-2.04 0.93,-3.47 3.19,-3.89 2.1,-2.75 5.72,-0.13 8.03,-2.44 0.9,-1.04 2.2,-3.85 2.95,-0.99 0.24,2.01 2.47,2.98 2.75,0.39 0.38,-1.99 1.84,-3.41 3.5,-1.73 2.25,0.16 -1.13,2.67 1.73,2.71 2.42,-0.18 1.65,4.3 5.21,2.73 1.14,1.18 1.93,5.76 4.16,3.01 2.6,0.76 5.25,0.47 7.14,-1.59 0.61,0.22 -3.19,2.13 -1.4,3.83 1.09,1.94 5.9,4.19 1.79,5.59 0.41,2.25 -2.38,5.11 0.78,6.65 -2.86,-0.58 -2.74,5.86 0.16,4.24 -0.52,2.48 -0.45,5.39 2.6,5.52 0.99,0.71 1.98,1.43 2.96,2.14 0.34,-1.31 1.06,-1.78 0.88,-0.17 1.65,-0.62 3.99,0.32 4.03,2.59 0.12,1.35 0.91,3.75 2.75,1.76 3.33,-1.46 6.61,1.38 9.97,1.03 2.56,-1.77 4.83,0.86 6.18,2.91 0,13.19 0,26.38 0,39.57 -4.3,1.87 -8.8,3.32 -13.06,5.23 -0.36,0.05 -0.72,0.08 -1.09,0.08z","name":"Iraq"},"az":{"path":"m625.84,392.01c-2.29,-1.74 -6.12,-1.39 -7.67,-4.17 -2.87,-0.9 2.82,-3.1 1.5,0.21 -0.29,2.16 0.66,-0.38 1.38,-0.86 1.98,0.67 2.99,-0.38 4.14,-1.97 0.78,0.36 1.17,3.12 3.09,2.25 0.41,1.86 5.4,3.6 1.25,3.88 -1.24,0.15 -2.44,0.52 -3.69,0.66z m9.25,-4.53c-1.22,-1.31 -1.37,-1.74 -0.58,-3.22 -0.7,-1.79 -4.05,0.28 -2.18,-2.45 -0.71,-3.07 -3.86,1.6 -5.74,-0.73 -1.12,-1.04 -4.8,-0.64 -2.24,-1.72 1.66,-3.91 -3.46,-4.05 -5.96,-4.45 -3.06,-0.54 1.31,-0.13 -0.04,-1.79 -1.74,-0.11 0.76,-3.32 -2.15,-2.78 -1.13,-2.07 -3.77,1.24 -3.43,-1.3 -3.83,0.78 -1.14,-4.07 1.25,-3.79 1.55,-0.11 2.45,2.19 4.64,1.11 1.17,-0.47 1.66,-2.32 3.53,-1.24 4.04,0.44 2.81,-5.63 -0.82,-5.09 -1.19,-0.23 -4.57,-0.92 -2.6,-1.97 -1.03,-3.22 2.59,-2.79 4.29,-1.55 1.8,0.76 4.71,-0.66 4.29,1.94 2.3,1.27 5.96,-0.02 6.83,-2.57 -0.51,-2.81 0.78,-5.44 1.5,-8.17 0.77,-1.87 3.93,1.21 5.57,1.75 2.04,2.28 4.63,3.86 7.4,4.84 2.72,2.9 5,-2.29 8.05,-0.66 2.42,0.7 -1.69,0.86 -2.16,1.8 -1.58,1 -0.94,2.98 -2.64,4.05 -0.87,2.65 2.35,4.7 1.48,7.28 0.01,2.24 2,3.06 1.53,5.18 2.05,2.31 -2.94,0.21 -1.67,3.07 0.41,2.71 2.06,5.63 2.66,7.96 -1.4,1.58 -3.89,-2.8 -4.72,-0.12 -0.51,-2.33 -5.01,-0.05 -2.24,-2.75 1.89,-2.25 -0.89,-2.79 -2.14,-3.4 -0.39,-1.7 3.13,-2.19 0.43,-2.98 -2.55,-2.17 -6.8,-1.82 -7.18,2.01 -1.56,2.2 -2.45,4.87 -3.2,7.25 -1.02,1.28 -1.42,2.9 -1.76,4.47z","name":"Azerbaijan"},"ir":{"path":"m679.21,458.81c-1.85,-0.64 -2.96,-4.67 -5.07,-2.4 -2.51,1.13 -4.99,-0.69 -7.5,-0.94 -1.54,-1.25 -4.65,1.4 -4.88,0.3 -0.35,-2 -1.76,-5.08 -4.31,-4.59 -0.55,-2.48 -2.8,0.93 -4,-1.28 -1.15,-1.36 -3.82,-0.5 -2.7,-3.18 1.2,-2.24 -1.18,-2.93 -1.92,-2.92 -0.76,-2.14 0.85,-1.8 1.93,-2.95 -0.87,-1.54 -2.25,-2.23 -1.18,-3.98 1.41,-1.22 -0.93,-2.74 1.62,-3.12 2.22,-2.84 -3.32,-4.02 -3.44,-6.68 1.23,-0.62 3.69,-3.96 0.62,-3.5 -2.16,1.88 -4.6,2.34 -7.4,1.61 -2.13,2.68 -1.52,-4.01 -4.35,-3.02 -2.59,1.12 -1.74,-3.71 -4.6,-2.9 0.47,-2.81 -2.6,-2.62 -3.34,-4.74 -3.51,-0.37 -2.73,-5.88 -6.79,-4.9 -2.43,-0.23 0.88,-4.74 -1.15,-6.42 -2.63,1.81 -2.65,-3.09 -4,-4.32 -2.26,0.51 -1.17,-4.01 -3.82,-4.01 -1.08,-1.34 3.43,-0.98 2.24,-3.41 -0.62,-1.73 -1.46,-4.27 1.42,-2.93 2.06,1.49 5.14,2.91 7.63,3.88 2.25,1.24 5.18,-0.04 7.5,-0.74 2.07,-1.71 5.07,-2.61 4.75,-5.97 2.3,-2.33 1.71,-5.53 3.7,-8.09 0.98,-2.61 2.58,-5.68 5.71,-3.44 1.82,0.32 -1.95,3.66 1.08,3.95 4.06,-0.35 -2.73,4.32 1.52,4.83 1.27,-1.49 2.59,2.44 3.8,0.15 1.45,1.58 3.99,1.1 4.87,0.71 1.82,2.85 3.68,6.92 7.62,6.9 3.17,0.36 5.34,-2.56 8.13,-3.02 2.01,0.9 4.99,2.01 6.34,2.88 -0.02,22.74 0.03,45.49 -0.03,68.23z","name":"Iran"},"ge":{"path":"m581.92,380.27c-2.26,-0.5 1.41,-3.83 -0.72,-5.4 -1.82,-2.3 -4.05,-4.17 -5.45,-6.77 -1.72,-2.18 -4.46,-0.36 -5.95,-2.58 -2.48,-1.15 -5.99,1.77 -7.69,-0.38 -1.24,-0.61 -3.4,-1.34 -1.11,-2.52 2.92,-1.18 5.31,-0.74 8.31,-1.17 2.62,-0.64 4.81,0.81 7.27,-1.05 1.64,-1.03 2.03,-2.53 4.37,-2.32 3.09,-1.55 5.23,0.93 8.34,0.23 1.97,-0.34 3.8,-1.06 3.76,1.37 3.33,1.16 4.09,-3.43 6.09,-4.97 1.82,1.19 3.56,0.44 3.29,-1.84 2.38,1.1 4.89,0.94 6.98,-0.29 0.1,2.19 0.6,4.52 3.44,3.9 1.82,0.87 6.7,-2.08 4.44,1.62 -1.04,4.09 6.18,1.33 6.51,4.88 -0.55,2.71 -3.63,-0.63 -4.78,1.93 -2.42,2.07 -3.95,-2.25 -6.59,-0.28 -2.88,0.84 -1.75,4.15 -4.11,5.26 -2.15,1.64 -6.02,2.97 -7.99,5.72 -1.4,1.55 -3.24,0.61 -4.57,1.11 -0.32,-2.7 -4.41,-0.39 -5.08,-2.59 -2.74,0.39 -1.4,4.41 -4.46,3.55 -2.08,-0.04 -2.63,2.5 -4.3,2.58z","name":"Georgia"},"sy":{"path":"m570.98,505.1c-2.37,-0.06 -4.22,-2.23 -6.66,-1.9 -1.76,1.54 -0.95,-3.61 -2.17,-4.66 0.26,-2.1 3.06,-4.25 2.48,-6.23 -2.86,0.37 -0.12,-3.18 1.61,-2.81 1.41,-1.1 -2.08,-2 0.23,-3.24 2.46,-1.85 0.82,-6.41 -2.32,-5.73 1.74,-2.54 -3.41,-1.48 -4.52,-0.5 -2.16,-1.45 -1.71,-4.59 -2.2,-6.89 -0.72,-2.13 -3.63,-2.2 -2.69,-4.95 -1.91,-3.07 4.61,0.44 2.96,-3.37 1.96,-1.34 -0.54,-4.12 2.56,-4.37 1.92,-1.95 -2.9,-3.08 -1.96,-5.67 -0.17,-2.68 3.53,-1.88 4.07,-0.24 2.8,-1.4 6.26,-2.87 7.96,-6.08 1.77,-3.87 6.01,-0.57 8.96,-1.32 4.89,-1.98 9.3,-5.28 12.15,-9.78 2.06,-3.09 5.52,-4.42 8.88,-5.51 3.15,-0.62 4.71,-4.01 6.68,-5.54 2.16,2.06 -0.35,4.49 -0.71,6.75 -0.34,2.94 -3.64,3.54 -4.67,5.93 -0.77,2.72 0.96,5.34 2.92,7.06 1.91,2.86 0.25,6.61 2.05,9.52 1.43,2.7 2.07,6.08 0.11,8.71 -2.41,4.04 -5.84,7.35 -8.54,11.19 -6.92,8.84 -13.8,17.72 -20.31,26.87 -1.64,2.62 -4.19,2.66 -6.86,2.76z","name":"Syrian Arab Republic"},"tr":{"path":"m494.91,482.2c-2.64,-0.83 -6.61,0.7 -6.69,-3.38 -0.28,-2.26 -4.06,-2.7 -3.32,0.14 -2.13,0.72 -2.01,-4.36 -4.24,-2.06 -1.1,1.64 -1.71,4.09 -2.75,1.3 -0.06,-0.7 3.87,-0.84 1.58,-2.85 -2.66,-0.75 -4.9,2.05 -7.56,2.3 -3.22,0.12 2.63,-2.09 -0.16,-3.58 -1.02,-1.26 -2.59,-1.78 -3.85,-0.25 0.8,-2.14 -2.11,-2.59 -0.3,-4.42 0.7,-2.91 -3.46,-4.14 -4.72,-3.08 -0.35,-2.13 -2.41,-1.66 -2.94,-0.12 -0.96,-0.52 -4.49,-1.13 -1.65,-1.67 1.95,-1.12 -0.35,-1.93 -0.64,-2.3 -0.1,-2.91 1.76,1.21 2.44,2.3 1.21,0.53 0.61,-1.54 2.32,-0.91 2.14,0.31 3.08,-4.19 0.9,-2.3 -2.98,0.71 -3.35,-2.88 -0.63,-3.63 1.42,-2.31 -2.41,-1.49 -2.02,-3.47 -1.48,-1.26 -3.08,-1.7 -1.12,-3.61 1.88,-4.06 -3.41,-1.44 -4.89,-0.21 -3.22,2.13 -1.41,-2.71 -2.53,-4.43 0.27,-1.5 2.4,-1.02 1.65,-3 1.08,-2.79 3.49,-3.54 5.85,-4.95 1.33,-0.2 3.18,2.13 5.06,0.5 2.19,-0.32 0.53,-4.12 2.21,-2.66 -1.01,2.78 3.65,-0.5 5.07,-0.34 1.73,-0.22 7.01,-0.13 5.15,-2.97 -1.48,-0.21 -3.18,0.39 -0.99,-0.95 1.96,-1.62 4.19,-2.4 6.66,-2.8 2.77,-0.54 1.2,-2.91 -0.89,-1.86 -1.93,1.45 -3.4,0.81 -4.38,0.32 -3.58,0.35 -2.31,-4.79 0.81,-3.52 2.71,0.01 5.57,-0.39 7.64,-2.28 2.46,-0.32 5.31,1.16 7.39,-0.69 2.9,-0.41 1.41,-4.52 4.23,-5.54 2.71,-2.98 4.61,-6.84 8.39,-8.68 2.29,-1.78 4.29,-3.83 7.39,-4.02 3.16,-0.7 6.47,-1.22 9.26,-2.97 -0.18,-2.01 2.92,-3.03 2.12,-0.46 1.09,2.77 5.37,3.22 7.04,0.72 1.14,-1.37 -0.27,2.45 1.16,0.14 2.04,-1.94 2.88,3.79 5.57,2.83 1.27,-1.86 4.62,-3.78 5.67,-1.09 1.67,-0.99 4.1,0.27 5.52,-0.17 -0.07,-1.45 1.44,-1.93 0.76,-0.72 3.48,0.31 7.66,-0.08 9.71,-3.32 2.34,-1.18 4.33,-4.18 7.15,-3.36 2.71,-0.07 6.67,-0.67 7.5,-3.83 1.38,-2.88 4.81,-4.34 5.49,-7.63 0.34,-3.02 3.69,-0.01 3.89,-2.79 0.79,-1.71 6.06,-0.8 5.2,-2.54 -0.27,-1.98 1.64,-2.11 0.91,-0.61 1.97,-1.13 4.24,-0.33 5.11,0.95 0.95,1.76 2.34,-1.7 3.43,0.93 2.07,0.94 4.5,1.8 3.64,4.81 0.12,2.83 2.56,6.38 5.64,4.35 1.45,-1.61 6.05,-1.12 6.12,-0.28 -2.87,1.25 2.28,4.65 -1.45,5.76 -2.31,0.86 -1.86,1.74 0.02,2.55 2.07,1.41 1.16,4.02 3.6,4.69 1.23,1.57 1.59,5.71 3.8,4.2 0.43,2.37 -1.79,7.52 2.74,6.05 2.64,-0.44 0.94,3.97 3.94,4.02 3.58,1.02 -1.74,2.3 -1.12,4.76 -1.2,0.98 -0.5,-3.85 -3.12,-2.67 -1.98,1.2 -2.57,4.14 -5.61,3.29 -2.88,-0.31 -4.84,1.72 -7.02,2.7 -0.69,1.88 -0.86,5.21 -2.91,2.44 -2.75,-0.22 -2.61,4.46 -5.58,4.92 -2.98,1.72 -6.75,1.93 -9.15,4.66 -2.61,2.66 -4.36,6.14 -7.61,8.16 -2.25,1.32 -4.52,3.36 -7.26,3.28 -3.54,-1.52 -7.49,-0.78 -9.08,3.03 -1.68,2.28 -5.43,4.75 -7.39,2.82 -3.82,-1.14 -4.64,3.62 -2.75,6 0.73,1.14 2.5,1.57 0.17,2.12 -3,0.1 0.83,3.76 -2.09,4.07 1.59,1.89 -1.39,2.48 -1.35,0.31 -1.32,-1.73 -3.85,-3.07 -1.43,-5.18 3.46,-2.09 -0.87,-8.48 -3.12,-4.45 -0.21,1.09 -4.52,4.06 -1.07,3.29 -0.14,0.32 -3.7,3.62 -5.39,1.57 -3.14,-1.5 -6.7,0.91 -7.75,3.93 -2.31,1.12 0.64,5.77 -2.52,4.44 -0.89,2.68 -3.25,3.27 -5.84,4.06 -1.96,1.06 -3.83,3.65 -6.37,2.47 -2.84,-1.55 -5.07,-4.65 -8.7,-4.14 -2.94,-0.38 -6,-0.94 -8.9,-0.06 -3.48,-0.29 -3.26,3.57 -2.85,5.62 -0.19,1.75 1.15,3.5 -1.34,2.67 -2.13,0.36 -2.94,2.88 -4.85,3.38z m-22.48,-0.92c1.54,-1.56 1.67,0.46 0,0z m4.91,-2.51c-0.79,-0.93 0.97,-1.15 0,0z m-7.81,-0.87c-2.21,-0.79 -0.04,-1.14 0.54,-0.39 -0.12,0.2 -0.29,0.4 -0.54,0.39z m-17.07,-35.78c-2.05,-1.66 3.84,-4.8 1.02,-1.64 -0.17,0.27 -1.7,3.54 -1.02,1.64z m-2.5,-4.63c-2.27,-0.95 2.99,-3.59 0.8,-5.77 -1.18,-2.59 4.67,-3.55 1.64,-6.24 -1.25,-1.27 -3.7,-1.75 -1.56,-3.41 0.31,-2.43 2.93,-0.92 3.7,-3.21 1.99,-1.8 4.08,2.49 6.12,-0.22 3,-2.82 1.8,3.03 4.59,3.75 2.54,1.72 5.71,1.31 8.59,1.46 1.59,1.71 -1.83,5.17 -3.31,2.87 -1.59,0.83 -4.21,-0.49 -5.46,2.07 -2.23,0.06 -4.36,0.17 -4.68,3.06 -0.43,2.55 -2.87,5.66 -5.23,3.75 -1.9,0.1 -3.3,1.78 -5.2,1.9z","name":"Turkey"},"am":{"path":"m631.96,389.85c-1.96,-0.78 -2.5,-4.05 -4.9,-3.4 0,-2.98 -2.99,-2.85 -3.89,-0.42 -0.72,0.59 -2.05,-1 -2.73,0.47 -1.44,-4.24 -3.82,2.15 -6.08,-0.34 -2.43,-1.36 -5.05,-0.13 -7.33,0.88 -1.6,1.02 -2.24,-1.35 -3.25,-2.19 -0.22,-2.63 -0.35,-6.8 -3.95,-6.8 -1.56,-1.33 3.34,-2.22 3.67,-4.1 2.01,-1.81 4.84,-2.17 7,-3.75 -1.93,-0.72 2.92,-0.35 0.29,0.72 0.12,2.73 3.55,-1.6 5.25,0.33 2.07,0.17 -1.51,3.12 1.09,4.06 1.57,1.97 7.78,-0.09 6.04,3.56 -1.81,0.88 -2.21,2.81 0.36,2.27 2.62,0.26 4.73,3.06 7.3,0.67 1.25,-0.38 -1.56,2.52 0.95,2.4 1.37,0.14 2.22,0.32 0.58,1.07 -0.16,1.55 3.78,3 0.58,4.04l-0.53,0.37 -0.44,0.16 0,0z","name":"Armenia"},"cy":{"path":"m527.35,491.44c-2,0.03 -5.42,-2.87 -2.34,-3.85 0.27,-2.84 4.77,-0.45 3.78,-3.88 -1.1,-2.02 2.82,-0.4 4.03,-1.67 3.21,-1.08 5.34,-3.84 7.9,-5.9 -1.85,1.69 -5.66,5.67 -1.55,7.09 -1.16,0.96 -4.02,1.69 -3.88,3.92 -1.79,0.94 -4.14,2.55 -4.75,3.95 -1.18,-1.33 -2.1,0.23 -3.19,0.34z","name":"Cyprus"},"ie":{"path":"m160.13,300.45c-1.94,-0.73 -5.41,-0.29 -5.93,-1.1 2.68,-0.96 1.02,-3.47 -1.27,-2.29 -2.17,-0.03 4.61,-0.27 1.86,-1.87 -1.29,0.35 -5.82,0.84 -4.6,-0.88 0.33,-2.41 5.15,0.07 4.57,-2.91 -1.5,-0.99 -3.62,0.6 -3.81,-1.26 1.2,-0.91 6.26,2.54 3.91,-0.67 0.38,-1.38 3.44,-1.82 5,-1.34 1.1,0.96 5.65,0.21 3.16,-0.84 -0.11,-2.83 -2.54,-0.03 -3.01,-0.47 -0.23,-0.23 -3.43,-0.5 -1.1,-1.34 2.22,-1.01 0.54,-4 2.82,-3.42 2.56,1.02 3.91,-3.17 0.52,-2.46 -1.68,0.14 -2.56,-0.23 -2,-1.83 -0.18,-2.01 -5.12,-1.21 -3.94,-2.82 2.15,0.5 2.19,-2.65 4.57,-1.69 2.67,-0.16 1.13,-2.7 -0.21,-3.26 0.29,-1.31 0.02,-3.18 -0.75,-3.28 2.65,-0.82 4.91,0.87 5.93,2.56 1.46,-1.86 3.2,1.45 5.23,1.05 -1.45,-1.4 -1.04,-3.03 1.32,-2.78 1.21,-0.78 -0.05,1.72 1.32,2.45 1.11,1.84 4.55,5.05 6.16,2.17 -0.49,-1.92 2.26,-1.77 1.43,0.13 0.94,1.15 1.06,2.27 0.8,3.26 0.63,1.48 4.47,-0.64 2.75,0.86 -2.34,0.42 -0.05,3.2 -0.77,4.83 0.46,1.62 -0.08,2.98 -1.28,2.32 1.02,2.41 1.46,5.54 -0.48,7.61 -1.25,2.01 -3.34,4.38 -4.14,6.02 -2.56,-0.85 -5.09,-0.34 -7.67,-1.06 -1.16,0.41 -0.62,2.52 -2.3,1.42 -1.5,0.14 -2.91,2.49 -3.4,0.19 -2.29,-1.05 -1.04,2.27 -2.69,2.29 -0.11,0.95 -1.6,-1.12 -2.01,0.4z m13.73,-33.46c2.33,-2.06 -0.9,-1.95 -2,-2.14 -1.29,-0.53 -2.55,-1.96 -0.25,-1.08 1.89,0.69 2.47,-1.66 2.15,-3.1 -1.16,-1.71 7.03,-1.16 4.23,1.31 -0.31,1.85 2.66,-0.08 1.09,1.63 -0.53,1.73 -5.09,0.69 -2.83,2.72 -0.77,0.31 -1.61,0.36 -2.38,0.64z m6.45,-5.05c0.02,-0.88 0.61,0.23 0,0z","name":"Ireland"},"gb":{"path":"m182.64,325.46c0.06,-1.95 -4.47,-2.09 -0.74,-2.3 2.67,-0.61 3.94,-3.31 6.49,-4.14 2.12,-0.77 1.4,-4.5 3.94,-3.31 1.45,-3.67 5.43,-1.45 8.06,-0.26 2.91,0.6 2.6,-3.72 5.07,-4.06 1.35,-0.1 4.35,-3.93 1.42,-2.57 -1.86,1.99 -5.05,0.84 -6.82,2.84 -2.27,-0.51 -2.72,-5.62 -5.77,-3.31 0.24,-2.37 -1.53,-4.27 -3.69,-2.44 -0.87,0.75 -2.94,0.79 -1.58,-0.17 0.16,-1.27 -3.6,-0.88 -1.52,-2.98 1.52,-0.74 3.44,0.29 4.82,-1.36 2.13,0.95 4.49,-1.92 5.83,-3.38 1.68,-2.26 0.05,-8.36 -3.37,-5.58 -1.46,1.33 -0.19,-1.41 0.97,-0.91 1.28,-1.84 2.91,-2.79 5,-2.8 1.2,0.32 4.62,-0.54 5.23,2.01 0.71,1.84 0.61,0.28 0.62,-0.81 -0.49,-1.45 0.01,-1.88 0.83,-1.63 -1.44,-2.21 1.58,-2.99 1.67,-4.6 -1.45,-0.49 -1.63,-2.14 0.09,-1.51 0.69,-1.16 0.79,-2.38 1.37,-3.56 -0.63,-2.27 -3.62,2.01 -2.38,-1.12 -0.36,-1.35 -2.39,0.41 -1.46,-1.51 -2.08,-2.31 0.12,-6.19 3.07,-5.98 2.74,-1.73 -0.83,-1.86 -2.08,-2.37 -0.92,0.48 -3.28,2.29 -4.42,1.19 -1.32,1.2 -1.79,-3.4 -3.43,-0.83 0.32,2.13 0.14,1.46 -0.76,0.01 -1.33,-0.68 -2.66,-1.39 -1.32,-3.18 1.13,-2.26 5.13,-4.6 2.33,-7.17 0.52,-2.42 1.47,-4.31 0.99,-6.83 -1.19,-2.25 -5.91,3.7 -3.96,0.19 -1.17,-1.95 1,-2.29 1.54,-3.39 -1.93,-1.31 3.92,-1.92 1.97,-3.06 1.93,-2.14 -1.4,-1.12 -1.91,0.17 -2.64,0.37 -2.78,2.95 -5.17,3.25 1.64,-1.88 1.56,-3.32 4.36,-3.1 0.45,-1.67 -5.98,-1.25 -1.81,-1.19 1.82,-0.7 -1.08,-3.69 1.83,-2.58 2.2,1.18 2.55,-1.86 1.62,-2.28 3.21,-0.32 0.94,-5 -0.12,-6.67 -1.49,-3.19 1.62,1.59 1.66,-1.31 -0.16,-0.99 3.11,1.17 2.06,-1.21 -1.02,-1.19 -0.29,-1.17 0.73,-0.82 0.07,-1.49 0.01,-1.71 1.64,-1.31 1.56,-1.15 -0.74,-2.21 0.86,-3.26 -0.88,-3.08 1.49,-0.59 1.87,-0.27 0.74,0.04 0.92,2.92 2,0.79 2.21,-0.9 6.43,0.18 7.86,0.3 -1.51,1.12 -1.16,3.83 -3.76,4.28 -1.25,1.24 -5.25,2.21 -4.45,4.19 2.02,-0.77 1.46,0.73 0.51,0.2 -2.65,-1.31 -3.91,3.83 -0.65,3.27 1.6,-1 4.76,-1.27 6.96,-0.43 2.15,0.77 9,0.4 6.36,4.13 -2.17,1.32 -1.95,4.3 -3.79,5.88 -1.36,2.24 -3.73,4.99 -6.67,3.85 -2.54,0.88 -0.66,2.52 1.1,1.38 0.78,-0.5 3.15,3.35 0.84,1.99 -2.07,-0.28 -3.16,1.31 -5.18,1.63 -0.02,2.53 4.56,1.95 5.82,1.47 2.3,1.2 3.8,3.55 4.55,5.85 2,2.23 0.13,5.79 1.35,8.49 -0.45,3.02 1.26,4.86 3.81,6.01 1.66,1.49 2.34,4.19 3.57,5.37 -2.57,1.95 1.1,5.12 0.44,6.31 -2.04,-0.08 1.34,3.78 1.3,5.11 0.78,2.24 -5.08,2.32 -2.09,4.71 1.56,2.69 3.3,0.05 4.83,-1 2.51,1.1 6.37,1.79 6.61,5.25 -0.28,2.6 -1.71,7.67 -4.87,6.84 -2.14,0.29 1.39,3.23 -1.35,2.01 -1.64,-1.62 -4.38,2.64 -1.7,1.39 1.98,0.5 -1.21,2.23 -2.35,1.41 -3.04,0.03 -0.52,3.18 1.11,2.57 2.13,-1.55 -0.82,1.67 1.85,1 1.37,0.01 4.16,-1.13 2.4,1.04 0.18,1.94 -3.04,1.77 -3.79,3.01 -3.03,-0.26 -5.14,2.46 -7.81,0.22 -2.14,-0.87 -5.12,1.06 -5.71,-1.04 -0.97,0.35 -1.61,-1.39 -2.37,0.11 -0.34,-1.96 -3.3,-2.15 -1.9,0.13 -1.76,0.29 -4.97,-1.2 -5.38,0.98 -2.03,-0.7 -3.26,-0.69 -4.99,-2.14 -2.67,-1.4 -6.68,-1.13 -6.68,2.71 -0.68,3.61 -3.23,0.34 -4.72,-0.57 -1.81,-0.09 -4.28,-1.13 -5.91,0.19 -1.52,-0.34 -2.18,1.47 -2.78,2.5z m18.76,-70.13c1.65,1.54 3.03,-0.19 0.57,-0.92 -0.47,-0.23 -0.39,0.68 -0.57,0.92z m-3.12,31.93c0.55,0.53 0.27,0.88 0,0z m-1.17,-10.07c0.02,-1.53 3.39,-4.02 1.66,-1.22 -0.39,0.58 -0.96,1.08 -1.66,1.22z m-10.63,-1.73c-1.59,-0.31 -2.08,-2.29 -3.03,-0.36 -1.91,-0.73 1.49,-2.2 -1,-2.29 0.13,-2.31 -2.8,-4.88 -3.79,-2.04 0.08,3.32 -3.97,-0.09 -4.6,-1.78 -1.85,-2.46 4.1,-0.54 2.7,-3.31 3.07,0.55 2.59,-4.32 5.36,-2.92 1.06,-1.19 2,-1.61 3.15,-1.03 2.23,-0.98 4.88,1.21 3.52,3.35 -0.19,2.26 3.15,1.24 0.87,3.27 -2.06,1.44 -0.04,2.03 1.25,1.47 1.84,1.95 -0.91,4.87 -2.77,3.75 -0.28,0.8 -0.67,1.84 -1.67,1.88z m10.61,-7.92c-1.67,-0.09 0.88,-0.41 0,0z m-4.29,-6.97c1.08,-0.83 2.3,-4.85 2.33,-3.8 -0.86,1.14 -0.52,3.62 -2.33,3.8z m2.73,-6.13c0.35,-1.24 0.97,-0.17 0,0l0,0z m-3.97,-25.03c-1.05,-1.04 1.79,-1.33 0,0z m1.85,-1.48c-0.51,-1.01 -1.32,-1.32 -0.4,-1.6 -1.54,-1.3 0.12,-2.32 1.22,-0.9 1.22,-0.53 0.35,-2.59 1.9,-1.78 0.84,-0.86 3.02,-1.98 1.27,-0.28 -1.41,1.61 -1.17,5.41 -3.42,2.95 -0.74,0.32 -0.1,1.35 -0.58,1.61z m38.33,-20.76c-1.93,-1.65 4.17,-0.89 0.99,-0.51l-0.47,0.12 -0.53,0.39 0,0z","name":"United Kingdom"},"ch":{"path":"m292.05,389.98c-1.12,-2.03 -1.49,-3.96 -4.14,-4.68 0.24,-1.27 0.28,-4.19 -2.02,-2.48 -2.76,1.07 -0.98,6.19 -4.8,5.6 -1.34,-2.05 -4.35,2.18 -5.85,-0.49 -0.66,-1.9 -1.54,-2.82 -1.22,-5.23 -0.26,-1.58 -4.49,-1.34 -5.35,0.35 0,0.96 -0.92,3.04 -1.36,2.14 2.08,-0.65 -0.4,-3.99 1.78,-5.21 1.94,-0.57 2.18,-1.6 2.3,-3.5 2.42,-0.82 3.23,-3.53 5.4,-5.02 0.92,-1.36 3.51,-0.53 3.7,-1.93 2.51,-0.36 5.31,-0.33 7.48,-0.01 1.57,-0.63 0.5,-2.03 0.36,-2.23 1.31,-1.57 1.36,1.33 2.5,0.98 1.1,0.96 4.91,-0.68 5.97,2.04 0.36,1.7 -2.95,6.33 1.28,6.08 1.9,0.87 4.09,3.47 5.78,0.3 -0.28,1.18 -0.17,4.33 -0.42,4.42 -1.87,-2.39 -4.17,0.79 -2.27,2.33 0.4,3.64 -0.7,-1.85 -2.69,-0.06 -1.62,2.46 -2.25,-1.46 -3.43,-1.76 -2.43,0.76 -0.07,4.33 -2.78,4.97 -1.02,0.89 -0.72,2.33 -0.22,3.4z M275.63,370.8c0.49,-1.83 2.92,0.14 0.45,0.04l-0.53,0.11 0.08,-0.14 0,0z","name":"Switzerland"},"at":{"path":"m338.89,381.72c-2.92,-0.37 -5.68,-0.8 -8.68,-1.29 -3.41,-0.44 -7.47,0 -10.13,-2.59 -0.49,-1.79 -2.01,-0.99 -0.74,-2.9 -1.54,-1.34 -4.15,1.63 -6.36,0.74 -2.58,-0.56 -3.71,1.14 -4.67,3.02 -0.77,-1.61 -4.07,-0.58 -3.15,-2.45 -2.02,-1.72 -4.43,3.34 -5.34,-0.45 -2.71,0.05 -3.32,-2.5 -1.76,-4.48 -0.11,-1.92 0.65,-1.26 2.03,-1.24 0.77,2.34 2.91,4.54 4.57,1.3 -0.46,-2.13 1.09,-1.56 2.51,-1.62 1.01,3.44 4.52,1.32 6.34,0.3 1.07,-2.1 5.55,-0.39 5.96,-2.32 1.02,0.88 3.01,0.37 3.69,0.59 0.18,3.89 5.07,0.73 2.69,-1.53 -0.2,-1.43 -1.39,-3.39 -2.11,-5.03 1.93,-1.47 5.36,-2.58 5.54,-5.05 1.88,0.9 2.55,-1.98 3.13,-1.73 2,1.9 4.33,0.91 6.33,0.45 0.7,-1.97 2.92,-2.39 2.31,-5.03 1.96,0.92 4.91,0.17 6.97,1.75 1.9,2.39 4.37,-0.77 6.11,0.38 1.43,-0.03 2.77,1.31 1.21,2.94 -0.45,2.79 3.86,4.35 2.35,7.1 1.97,3.48 -4.51,0.08 -4.56,2.79 1.63,1.11 3.27,1.96 0.42,2.95 -0.98,1.81 1.97,4.01 -0.88,5.49 -1.01,1.14 -3.1,1.64 -2.24,3.63 -2.75,-0.79 -4.87,2.27 -7.7,0.89 -1.89,0.31 -2.39,2.61 -3.87,3.38z","name":"Austria"},"cz":{"path":"m335.18,355.05c-3.65,-0.41 -4.96,-4.57 -8.41,-5.66 -1.31,-1.75 -2.19,-2.91 -4.32,-3.66 -1.8,-1.56 -2.64,-3.53 -1.6,-5.57 -0.16,-1.57 -4.02,-3.53 -3.2,-4.17 1.42,3.2 2.44,-2.24 4.26,-2.25 1.35,1.3 3.09,-0.63 3.77,-1.12 1.58,-1.86 4.18,-2.74 6.59,-3.91 1.63,-0.69 3.11,-2.35 4.59,-0.56 2.65,1.13 2.61,-4.69 4.17,-1.06 1.38,1.66 3.64,0.69 5.11,2.36 0.67,1.75 5.33,-1.17 2.84,1.24 -1.67,2.06 2.09,2.81 2.61,4.74 2.09,1.86 2.12,-0.93 3.96,-1.42 0.43,-1.39 -1.9,-2.7 0.65,-1.55 1.23,1.3 3.29,0.96 4.4,0.53 -3.27,0.95 2.17,5.16 3.09,2.65 2.93,0.44 4.53,2.63 6.07,4.63 -2.15,1.71 -4.92,3.04 -5,6.15 -1.22,2.56 -3.35,3.75 -6.24,3.67 -1.85,1 -3.16,2.67 -5.05,0.79 -2.11,1.83 -4.69,0.96 -6.9,-0.42 -1.92,-1.1 -4.07,-0.45 -5.85,-0.93 -0.34,2.31 -2.03,3.48 -2.87,5.34 -1.07,-1.47 -1.28,0.34 -2.66,0.17z m-0.68,-28.45c-2.43,-2.03 2.32,0.24 0,0z","name":"Czech Republic"},"sk":{"path":"m364.44,362.94c-2.39,-2.37 -6.56,-2.63 -7.73,-6.02 -0.46,-2.43 0.4,-6.56 3.64,-6.16 3.23,0.29 4.91,-3 5.9,-5.48 0.17,-1.96 3.95,-5.08 5.19,-3.02 2.43,1.82 3.49,-4.97 4.66,-0.89 1.56,0.35 1.91,0.85 1.91,2.52 2.64,1.02 3.89,-1.84 5.57,-3.22 1.58,-0.07 4.26,1.88 5.1,-0.34 0.99,-1.59 4.74,-1.57 6.47,-0.13 1.28,2.35 6.24,0.73 4.22,4.32 -1.5,2.17 -0.53,7.67 -4.43,6.22 -0.53,-3.18 -3.88,-1.31 -5.83,-0.46 -2.77,-2.02 -4.98,0.68 -5.07,3.51 -1.08,0.67 -2.09,-0.14 -2.29,1.79 -1.29,1.17 -3.96,-2.16 -4.46,1.1 -0.72,2.43 -5.78,-0.07 -5.66,3.66 1.11,2.54 -4.04,1.94 -5.84,2.51 -0.44,0.04 -0.88,0.07 -1.32,0.1z","name":"Slovakia"},"hu":{"path":"m369.77,387.01c-2.75,-0.58 -5.39,-1.37 -7.78,-2.73 -2.27,-2.63 -5.77,-3.91 -7.5,-7.04 -1.21,-1.85 -2.06,-2.65 0.1,-3.74 1.43,-1.97 -1.64,-4.55 1.32,-5.48 2.04,-1.7 -3.3,-3.48 -0.09,-2.71 2.81,1.04 3.86,-1.91 3.11,-3.93 1.93,-1.05 3.43,2.43 5.44,2.58 3.24,-0.18 6.53,-0.68 9.48,-2.09 -2.94,-1.84 0.68,-3.88 2.85,-2.99 1.75,-0.27 1.26,-4.31 3.33,-2 2.26,0.8 3.01,-1.99 4.8,-2.5 0.41,-2.48 1.52,-4.92 4.25,-3.08 1.93,-0.18 4.28,-2.95 5.05,0.14 2.1,1.7 4.8,-1.81 6.38,0.84 2.12,-0.07 1.45,3.23 3.34,1.35 3.46,3.21 -4.18,3.49 -4.55,6.38 0.35,2.87 -2.65,4.72 -2.5,7.52 0.37,3.17 -2.46,5.43 -2.51,8.54 0.01,3.02 -4.16,0.17 -4.1,3.12 -3.14,1.57 -7.09,0.21 -9.73,1.82 -1.24,2.36 -3.12,1.16 -4.53,3 -2.57,0.36 -3.31,3.42 -6.16,3.01z","name":"Hungary"},"lt":{"path":"m397.76,280.99c-1.28,-1.32 -1.63,-4.58 -4.11,-3.7 -1.13,-2.07 -4.01,-0.28 -3.26,-3.14 1.62,-3.48 -2.4,-7.19 -5.64,-5.13 -2.28,0.26 -5.13,-1.48 -6.05,-2.17 -0.51,-2.23 -1.53,-3.51 -2.2,-5.4 -1.37,-2.68 1.24,-5.63 3.5,-7 1.88,-1.44 4.85,-0.65 6.6,-1.37 0.56,-1.26 2.33,2.09 2.82,-0.31 2.06,-0.86 4.97,0.1 6.62,-0.3 1.76,-0.28 3.35,-0.61 3.78,-2.83 1.19,2.4 3.3,3.12 5.7,2.26 2.79,0.52 4.16,3.86 7.04,4.08 1.64,1.42 -0.82,5.15 2.39,4.69 0.41,1.84 -3.75,0.79 -2.82,3.52 -2.05,1.6 -2.93,3.79 -1.88,6.23 -0.12,2.13 -0.68,3.69 -2.75,4.26 -0.43,1.13 -0.04,1.82 -1.97,2.11 -0.51,1.51 -1.38,2.09 -2.67,3.35 -1.72,-1.32 -3.41,0.53 -5.09,0.87z m13.27,-5.67c-0.11,-1.17 -1.77,-2.09 0.31,-1.22 0.43,0.34 0.36,1.19 -0.31,1.22z","name":"Lithuania"},"lv":{"path":"m375.49,257.31c-1.25,-2.79 -1.57,-6.54 -0.19,-9.24 2.63,-2.07 -0.8,-6.67 2.34,-8.6 1.69,0.07 4.11,-4.27 4.4,-1.32 2.44,1.48 4.79,3.19 5.76,5.78 2.55,1.96 6.17,0.07 7.13,-2.71 1.39,-2.75 -1.14,-5.3 -1.86,-7.82 1.34,-1.86 3.66,-3.57 5.64,-3.47 0.08,-0.9 1.63,1.08 2.69,0.67 1.72,0.06 3.13,2.25 4.97,3.22 2.21,0.36 3.53,-2.11 5.72,-1.12 1.76,-0.72 2.78,1.38 4.4,2.33 -0.55,1.5 -1.61,1.77 0.06,2.4 -0.17,1.1 -0.46,3.72 1.44,2.57 1.53,2.66 6.04,5.32 2.65,8.5 -1.42,1.56 -0.49,4.51 -3.48,3.69 -2.28,0.64 -3.94,4.9 -6.51,1.93 -2.03,-2.26 -5.06,-3.95 -7.91,-2.78 -1.1,-1.49 -3.6,-4.26 -4.46,-0.94 -1.47,1.77 -5.35,0.57 -7.87,1.17 -1.87,0.26 -2.16,0.89 -3.44,-0.06 -2.37,1.98 -6.1,0.17 -8.37,2.54 -1.6,0.14 -2,4.17 -3.11,3.25z","name":"Latvia"},"md":{"path":"m454.92,374.42c-0.33,-2.09 -1.86,-4.78 -2.23,-7.4 0.38,-3.56 0.07,-7.47 -2.96,-9.91 -3.2,-3.43 -7.96,-5.44 -9.93,-9.93 -0.24,-2.34 -6.31,-3.34 -2.39,-4.03 2.67,0.33 3.73,-3.48 6.57,-2.14 1.32,0.97 1.83,2.54 3.78,1.18 -0.02,0.82 2.42,2.73 2.56,0.37 1.33,-1.44 3.96,3.6 4.43,1.55 1.2,-1.55 0.65,3.03 1.22,3.93 0.07,2.32 4.57,4.13 4.42,2.59 -0.43,1.81 0.64,4.31 3.01,4.64 2.61,-0.41 1.35,4.32 2.84,4.34 -0.24,1.12 -3.35,-2.1 -2.5,0.78 -1.04,0.18 -2.3,-2.64 -2.02,-0.03 -1.22,0.21 -2.31,-1.71 -3.62,0.36 -1.34,1.85 1.39,3.73 0.77,5.48 -0.5,2.25 -2.95,4.34 -2.23,7.32 -0.82,-0.46 -1.48,0.35 -1.72,0.91z","name":"Moldova"},"ro":{"path":"m414.71,404.53c-2.94,-0.37 2.3,-2.82 -0.89,-3.86 -1.36,-0.38 -6.12,-1.72 -3.63,-3.39 3.62,-1.4 -2.29,-3.42 -3.82,-3.63 -1.25,0.73 1.78,4.33 -1.06,3.46 -0.47,-2.42 -4.24,0.23 -4.49,-2.27 -1.54,0.07 -1.87,0.1 -0.31,-0.74 0.46,-1.41 -2.15,-1.17 -0.71,-2.27 0.07,-4.02 -6.25,-1.24 -6.86,-4.86 0.56,-2.93 -2.25,-4.23 -4.45,-5.46 -1.23,-1.35 3.36,-1.23 3.59,-2.71 4.37,0.45 2.54,-4.6 4.68,-6.55 1.28,-2.95 0.7,-6.3 2.76,-8.97 0.62,-2.75 1.58,-5.21 4.69,-5.79 2.24,-1.25 2.4,-5.8 5.34,-3.67 2.44,-0.6 4.8,0.38 7.17,-0.21 2.51,-1.94 3.7,1.15 5.91,1.18 2.03,-1.31 2.68,-4.39 5.67,-3.96 2.31,-0.28 4.86,-1.95 4.49,-4.32 1.75,-2.97 4.98,-1.01 6.29,1.29 1.93,4.74 7.06,6.72 10.28,10.39 2.93,2.37 2.34,6.09 2.36,9.35 0.53,2.52 1.69,4.86 1.92,7.13 1.82,1.67 4.12,3.74 6.83,2.36 1.37,-1.24 4.51,-5.35 6.51,-2.84 1.18,1.97 2.1,5.63 -1.2,6.33 -1.85,1.04 -1.42,-3.67 -3.88,-1.61 -1.51,1.92 1.84,2.51 -0.11,4.51 -0.61,2.57 2.04,-0.86 0.82,1.98 -2.28,2.63 -0.38,5.59 -0.04,8.5 -1.15,2.51 -5.2,-0 -6.02,-1.11 -1.09,1.46 -1.67,-0.92 -3.54,0.54 -1.82,0.49 -3.31,-1.46 -5.44,0.01 -3.08,1.35 -6.52,2.81 -8.17,5.95 -1.31,3.55 -4.97,3.29 -8.01,2.77 -2.75,-0.48 -4.92,1.71 -7.44,1.75 -2.74,-0.25 -5.83,-1.37 -8.31,0.42l-0.52,0.24 -0.43,0.06 0,0z","name":"Romania"},"bg":{"path":"m419.98,434.43c-0.77,-1.6 0.33,-5.03 -1.67,-6.74 -1.14,-2.34 -7.05,-2.04 -4.41,-5.19 -0.49,-1.45 -2.46,-4.37 -1,-5.23 2.16,0.54 4.75,-3.78 2.92,-5.59 -2.57,-1.55 -5.66,-2.78 -5.98,-6.24 -0.97,-2.47 2.74,-1.99 1.69,-4.32 2.08,-0.06 3.2,1.11 1.22,2.59 -0.15,3.28 3.83,0.6 5.65,0.71 2.58,-0.64 5.13,0.94 7.65,0.08 2.61,-1.18 5.46,-2.28 8.27,-1.01 3.32,0.37 5.6,-2.51 6.93,-5.13 2.16,-2.35 5.29,-3.61 8.27,-4.56 1.69,0.75 3.92,0.92 5.2,0.32 0.77,1.61 2.46,-1.39 3.17,1.07 1.58,2.18 6.09,-1.71 5.26,2.45 0.21,2.63 -4.48,0.38 -4.02,3.94 -1.88,1.85 1.39,5.32 -0.17,7.14 -1.24,1.25 -1.7,3.03 -2.93,4.26 0.82,1.66 4.27,-0.37 3.64,2.02 1.44,0.86 3.71,1.89 1.23,2.18 -1.9,3.08 -4.18,-1.08 -6.49,0.5 -1.52,1.95 -4.37,1.58 -4.82,4.55 -1.37,1.04 -4.43,1.49 -2.91,4.13 3.08,3.26 -3.78,2.7 -5.13,4.68 -1.95,0.62 -4.22,-2.41 -5.93,-0.29 -2.04,-2.63 -5.18,-1.43 -7.46,0.15 -2.06,2.52 -5.54,1.17 -7.76,3.47l-0.43,0.06 0,0z","name":"Bulgaria"},"al":{"path":"m396.5,458.88c-2.16,0.08 -0.81,-2.55 -2.74,-3.41 -0.91,-2.13 -5.81,-2.06 -5.48,-3.81 2.36,-1.04 -1.62,-3.19 -0.48,-4.99 0.36,-1.26 2.66,-2.2 0.57,-3.3 1.39,-2.49 -3.57,-5.96 0.77,-6.52 2.37,-0.03 -1.92,-0.89 -0.55,-2.51 -0.14,-2.15 -3.24,-0.23 -2.21,-2.9 -1.48,-2.28 0.07,-4.41 1.36,-6.71 1.01,3.42 4.23,-2.13 4.66,1.78 1.21,1.69 4.6,1.07 3.88,4.25 -0.33,2.87 -0.02,5.6 0.51,8.19 0.21,1.77 2.38,5.51 4.15,4.74 1.69,-0.32 2.5,4.45 0.05,5.02 -0.86,1.75 -0.27,5.37 -3.24,5.56 -2.01,1.26 1.3,2.75 -0.81,3.98l-0.23,0.5 -0.19,0.12 0,0z","name":"Albania"},"ee":{"path":"m378.18,234.33c-0.29,-1.42 0.77,-0.85 0,0z m29.34,-1.46c-2.55,-0.18 -3.15,-3.15 -5.39,-3.23 -0.21,-1.76 -1.21,1.44 -2.27,-0.65 -2.12,-1.63 -4.52,1.21 -6.27,2.48 -1.26,-0.67 1.67,-5.98 -1.81,-5.74 -1.1,1.92 -1.82,2.36 -3.83,1.3 -0.08,-2.54 -3.43,-2.95 -2.01,-5.67 0.96,-2.03 -3.8,-2.6 -0.62,-3.95 1.35,-0.61 4.23,-0.97 2.3,-2.67 2.82,-0.9 4.5,-2.4 7.47,-2.41 1.66,-0.56 1.5,-2.75 3.42,-1.67 0.91,-1.72 4.64,0.07 6.63,-0.66 2.13,-0.1 4.26,0.22 6.03,-1.29 -1.43,2.67 -1.02,5.84 -2.24,8.62 2.11,2.2 1.2,5.64 3.15,7.83 0.24,0.52 1.89,2.24 1.35,2.38 -0.73,0.83 -0.81,2.27 -1.35,2.68 1.66,2.85 -2.28,0.25 -2.89,1.26 -0.29,0.68 -0.83,1.4 -1.65,1.38z m-28.89,-1.28c-1.29,-0.43 -2.59,-1.4 -0.92,-2.29 -0.22,-0.67 0.59,-1.5 0.99,-0.78 -0.53,-2.4 4.69,-3.37 4.19,-1.27 0.07,2.48 -3,2.5 -4.26,4.33z m1.02,-7.14c-0.54,-0.34 -0.96,-2.14 -1.01,-2.27 0.8,-1.29 0.79,-1.32 2,-0.55 1.89,-0.4 1.35,1.06 -0.17,0.69 0.83,0.84 0.55,2.1 -0.81,2.14z","name":"Estonia"},"lb":{"path":"m557.2,501.39c0.58,-2.8 0.32,-5.88 1.17,-8.53 -0.92,-2.02 1.77,-3.87 0.09,-5.88 -0.28,-2.6 2.65,-3.83 2.23,-6.01 1.03,-0.93 3.35,-2.1 2.42,0.09 1.64,0.57 3.96,0.89 3.49,3.25 -1.11,1.34 -2.61,3.51 -1.84,4.51 -2.48,0.69 -2.89,3.8 -1.53,5.08 -0.04,2.15 -2.43,3.34 -3.12,4.26 0.57,1.87 -1.28,3.1 -2.91,3.25z","name":"Lebanon"},"ad":{"path":"m225.99,427.08c-4.4,2.06 -0.81,-5.33 0.49,-0.98l-0.2,0.53 -0.29,0.45z","name":"Andorra"},"sm":{"path":"m321.66,413.68c0.71,-2.83 1.59,1.21 0,0z","name":"San Marino"},"mc":{"path":"m273.92,416.64c-2.8,-1.65 2.23,-1.64 0.39,-0.13l-0.39,0.13 0,0z","name":"Monaco"},"lu":{"path":"m268.7,344.38c-1.34,-0.37 0.48,-2.79 -0.9,-3.99 -1.47,-1.94 2.76,-5.38 1.98,-1.49 0.37,1.78 4.79,2.33 1.84,4.09 -0.47,1.66 -1.49,1.22 -2.93,1.39z","name":"Luxembourg"},"fr":{"path":"m292.72,444.55c-0.12,-2 -3.86,-0.94 -2.75,-2.99 -2.34,-0.62 -0.11,-2.51 0.75,-3.57 0.35,-0.55 -3.76,1.07 -1.24,-0.63 0.32,-1.34 -2.6,-2.05 -0.51,-3.01 -0.25,-1.14 -1.13,-1.51 -0.02,-1.71 -0.89,-2.66 3.14,-1.71 3.48,-3.51 1.94,0.96 2.98,-0.2 2.33,-2.11 1.79,-2.18 -0.99,3.51 1.02,4.43 1.2,3.29 -2.09,6.35 -1.33,9.73 -0.95,0.89 -1.15,2.64 -1.75,3.36z m-58.87,-15.16c-2.27,-2.01 -5.59,-0.28 -7.2,-2.87 1.48,-2.11 -2.14,-2.13 -2.92,-2.19 -1.78,-1.34 -3.82,-2.36 -5.67,-3.53 -1.54,0.58 -1.53,2.27 -3.51,1.46 -1.54,0.07 -2.66,-0.59 -3.93,-0.35 -0.8,-2.33 -2.93,-1.69 -4.53,-2.09 -1.06,-2 -2.81,-3.32 -5.06,-3.18 -1.57,-1.15 -1.33,-1.7 -1.45,-3.5 -1.23,-0.24 -3.44,-0.96 -1.02,-1.55 3.04,-3.75 2.96,-8.84 4.5,-13.21 0.85,-1.4 2.99,0.68 2.08,-1.85 -1.2,-1.06 -2.14,-0.84 -1.15,-2.81 1.1,-1.59 0.63,-5.99 2.35,-6.1 1.89,1.55 0.82,3.87 1.88,5.79 -0.05,2.01 2.7,3.12 1.93,0.38 -2.25,-2.11 -0.08,-5.11 -2.23,-7.23 -1.52,-1.07 -0.74,-1.21 -0.52,-2.39 -2.12,-1.87 0.87,-2.79 -0.3,-5.08 -0.91,-0.78 2.06,-4.15 0.31,-2.92 -1.7,1.58 -2.8,-0.99 -4.34,-1.54 -1.66,-0.48 -1.34,-4.04 -3.07,-5.27 1.45,-1.37 2.03,-3.5 -0.17,-4.21 -1.28,-1.38 -1.85,-1.7 -0.64,-3.42 1.28,-3.05 -5.85,-0.88 -2.14,-2.3 -0.4,-2.26 -4.49,0.28 -3.4,-2.31 -0.36,-2.67 -3.56,0.62 -4,-1.74 -2.28,-0.09 -2.42,-4.2 -4.81,-1.84 -1.78,1.57 -0.33,-2.39 -2.37,-2.56 1.59,0.62 3.87,-0.51 1.92,-2.13 1.84,1.1 2.88,-0.7 0.65,-1.01 0.13,0.05 1.59,-2.28 -0.46,-1.5 -1.34,1.45 -4.19,-0.07 -1.73,-1.25 1.3,-0.76 2.79,-0.81 2.95,-0 1.4,-0.85 2.87,-0.97 3.66,0.09 0.65,-1.02 3.21,1.35 3.19,-1.26 2.43,-1.62 2.22,2.03 2.47,2.06 1.69,-2.75 1.86,2.19 3.17,3.11 1.26,-0.74 3.83,-3.16 3.73,-0.14 1.62,2.63 2.82,-1.65 4.78,0.11 0.83,-0.47 4.32,1.06 3.36,-0.07 -1.65,-1.65 -2.42,-4.02 -1.35,-6.19 0.76,-2.4 -2.42,-4.6 -1.19,-7.04 1.21,1.81 5.2,-0.98 3.31,2.03 -0.19,2.43 1.93,3.76 3.68,2.84 2.59,0.56 5.12,3.56 7.68,1.11 2.16,-0.17 1.32,-1.39 0.53,-2.64 1.54,-3 5.41,-2.03 8.05,-3.16 1.81,-0.67 4.58,-1.88 5.31,-3.4 -1.75,-1.03 0.04,-4.18 -0.3,-6.15 0.44,-3.1 4.2,-2.36 6.44,-2.8 0.98,0.77 1.49,6.24 4.58,4.17 1.46,-0.35 0.7,4.82 3.67,3.62 -0.14,3.07 3.12,1.53 4.18,2.82 -0.64,1.44 -0.56,1.83 -0.25,2.78 -0.88,2.67 3.93,2.4 4.83,0.49 0.88,1.69 -1.1,3.55 1.66,3.61 2.55,0.29 2.49,4.49 5.21,3.37 2.65,1.52 6.43,-0.33 7.5,3.53 0.45,0.9 2.96,3.41 2.01,0.96 0.54,-1.16 0.79,1.42 0.5,1.49 1.47,-0.3 3.92,-1.81 4.53,0.32 1.92,0.28 7.08,0.84 3.22,2.94 -2.39,2.02 -1.66,5.55 -3.51,7.88 -0.4,2.45 -0.29,5.21 -1.25,7.67 -1.85,0.33 -4.65,-1.22 -4.94,2.33 0.2,1.24 -1.59,3.49 -3.64,4.12 -0.97,0.48 0.4,3.01 -1.75,3.44 -3.21,1.4 -0.53,4.69 -2.87,6.5 1.14,2.08 4.46,-0.29 3.63,-2.44 2.64,-1.79 4.27,0.65 3.32,3.02 0.97,1.33 2.7,2.42 0.16,3.24 -1.7,2.56 4.01,4.8 1.9,7.11 -0.78,1.84 -6.17,0.54 -3.47,3.57 1.68,1.38 4.39,3.16 1.43,4.85 -1.24,3.13 2.12,7 5.6,6.15 2.64,-0.69 -0.62,4.28 -2,4.64 -1.17,-0.72 -4.03,-3.03 -4.38,0.05 0.55,1.28 1.71,2.84 -0.72,3.26 -2.25,0.54 -0.87,3.61 -3.15,2.9 -1.62,1.27 -2.66,0.82 -4.12,0.04 -1.35,1.82 -1.33,-1.1 -3.38,-0.87 -2.84,0.75 -0.64,-3.44 -1.53,-2.84 -0.63,0.89 -3.09,1.3 -1.09,0.56 1.49,-2.74 -3.49,-2.8 -2.54,-0.31 -2.24,0.5 -1.46,-2.79 -1.57,-3.36 -1.08,1.05 -1.96,2.65 -0.52,3.91 -1.04,-0.28 -1.31,-2.83 -3.36,-2.08 -2.5,-1.7 -5.52,-1.71 -6.96,1.2 -2.68,0.79 -5.03,2.02 -5.69,4.77 0.13,1.89 -0.47,3.75 0.65,5.49 -1.42,-0.84 -3.32,-0.38 -4.33,0.88z","name":"France"},"li":{"path":"m296.51,373.48c1.45,1.4 -0.83,3.11 -0.11,0.58 0.04,-0.19 0.08,-0.38 0.11,-0.58z","name":"Liechtenstein"},"nl":{"path":"m269.04,328.72c-2.4,0.87 -0.84,-4.47 0.3,-2.01 0.8,0.23 0,1.75 -0.3,2.01z m-0.07,-3.78c0.6,-3.32 -5.02,-1.6 -5.27,-4.51 -0.12,-2.74 -3.14,1.24 -2.06,-1.29 -0.99,-0.79 -2.22,1.2 -3.22,-0.45 -0.9,0.27 -1.14,2.68 -1.08,0.81 0.68,-2.17 -1.32,-2.87 -3.53,-3.17 2.34,0.11 2.58,-2.07 3,-3.35 2.89,-2.17 4.59,-5.57 4.61,-9.18 -0.19,-3.29 4.06,-0.89 5.3,-3.43 1.14,-2.76 4.56,-2.87 7.04,-3.65 2.21,-0.91 4.28,0.51 5.07,2.25 2.56,1.19 -1.21,4.26 -0.45,6.54 -1.09,0.31 -2.87,-0.17 -2.83,1.81 -1.46,0.58 -1.58,0.91 0.09,0.93 3.35,-0.05 2.57,4.59 -0.38,4.58 -2.35,0.19 2.62,1.25 -0.12,2.19 -2.05,1.07 -3.43,-1.35 -5.33,0.59 -1.38,2.19 2.97,4.39 0.94,6.8 -0.8,0.77 -1.72,1.2 -0.27,1.66 -0.44,0.36 -0.82,1.02 -1.51,0.87z m-14.99,-3c-0.33,-1.2 -5.07,-0.99 -2.8,-1.87 1.14,1.13 2.85,1.22 3.93,0.81 -0.06,0.56 -0.57,1.04 -1.13,1.06z m0.03,-2.7c-1.37,-0.05 -4.02,-1.94 -1,-1.43 0.49,-0.33 2.23,1.73 1,1.43z","name":"Netherlands"},"ba":{"path":"m376.75,425.9c-1.98,-1.6 -4.83,-1.93 -6.41,-4.05 -1.67,0.65 -0.52,0.38 -0.54,-0.48 -1.09,-2.31 -4.84,-2.74 -4.68,-5.7 -3.06,-0.33 -4.09,-3.71 -6.36,-5.29 -1.63,-1.9 -4.06,-2.19 -3.82,-4.87 -1.04,-2.44 -3.06,-3.46 -4.21,-5.63 -0.7,-2.04 0.84,-4.87 2.73,-2.36 1.15,1.84 2.68,1.49 3.04,-0.59 0.75,-2.51 2.6,0.54 3.87,-1.57 1.61,1.11 3.76,0.32 5.58,0.98 1.67,0.69 2.8,0.63 3.98,-0.64 1.28,0.32 2.43,1.79 1.94,-0.33 2.34,0.41 3.8,0.76 5.26,2.77 1.51,0.59 4.58,-2.46 3.33,0.9 -1.48,2.62 -1.55,6.27 2.2,6.4 -0.16,1.48 3,1.5 0.7,2.04 -2.41,-1.63 -1.77,2 -0.04,2.77 1.22,1.2 1.32,2.1 -0.54,1.97 -0.8,1.43 -2.82,1.15 -3.55,0.9 0.15,1.26 1.77,2.85 -0.32,2.67 -1.22,1.98 -1.74,4.24 -3.03,5.92 0.2,1.48 1.25,2.79 0.88,4.2z","name":"Bosnia and Herzegovina"},"si":{"path":"m332.96,393.93c-2.25,0.07 3.69,-1.78 0.33,-3.25 -2.05,-0.05 -1.39,-3.19 -2.18,-3.5 2.21,-1.77 -0.2,-2.6 -1.36,-3.11 1.58,-3.35 4.85,-1.64 7.7,-1.58 3.3,1.9 3.73,-4.65 7.02,-2.86 2.43,0.1 4.45,-1.78 6.8,-1.33 -0.07,-1.25 0.26,-3.28 1.79,-1.82 0.58,1.34 2.29,2.96 -0.11,2.97 0.07,3.17 -6.44,2.43 -4.97,6.04 0.89,1.87 0.62,3.86 -1.85,3.13 -2.37,0.85 1.33,6.35 -2.15,4.17 -1.76,0.02 -2.78,0.57 -3.81,-1.48 -1.83,-1 -1.59,2.92 -3.88,1.76 -1.41,-0.46 -2.2,0.65 -3.34,0.85z","name":"Slovenia"},"mk":{"path":"m403.18,443.19c-1.28,-0.84 -1.77,-0.72 -3.14,-0.4 -2.27,-2.33 -2.73,-5.58 -2.85,-8.64 -1.26,-2.44 2.39,-0.6 1.33,-3.13 0.23,-2.42 3.43,-3.85 5.06,-1.8 1.38,1.18 -1.35,-3.28 1.33,-2.73 2.83,0.6 4.67,-2.89 7.49,-1.79 1.51,2.18 4.77,1.95 5.79,4.72 1.29,2.63 0.37,4.95 -1.12,7.01 -1.05,2.69 -5.33,0.11 -7.05,2.7 -0.97,2.88 -4.09,3.39 -6.84,4.04z","name":"Macedonia"},"hr":{"path":"m375.93,426.49c-1.17,-0.64 -1.03,-0.77 0,0z m-5.08,-2.9c-0.73,0.27 -1.25,-2.08 0,0z m-2.28,-1.81c-3.23,-1.04 -5.06,-4.7 -8.53,-5.08 -1.74,-1.23 -4.13,-1.36 -6.19,-0.38 -0.54,-3.7 -5.51,-3.9 -7.37,-6.92 -1.68,-2.86 2.16,-0.38 2.91,-1.43 -1.18,-2.05 -5.06,-2.05 -5.62,-5.05 0.07,-2.45 -0.12,-5.23 -2.77,-6.41 -1.46,-3.02 -5.35,-1.33 -4.75,1.8 -0.1,1.22 -1.81,1.15 -1.78,3.18 -0.42,-0.02 -2.43,-3.25 -2.8,-4.77 0.5,-1.41 -1.33,-2.59 0.97,-1.85 1.93,-0.05 3.32,-1.26 5.49,-0.87 1.75,-0.28 1.19,-2.99 2.55,-0.54 1.83,1.65 2.98,0.1 5.14,0.7 1.63,-0.59 0.6,-2.35 1.05,-3.41 -2.13,-1.84 3.84,-0.57 2.93,-3.42 -1.1,-1.62 -1.88,-3.53 0.82,-4.04 1.16,-1.26 3.54,-0.9 3.14,-3.3 3.59,0.79 6.21,3.61 8.62,6.19 2.91,-0.18 5.33,2.55 8.31,1.69 2.32,0.95 5.06,-5.2 5.33,-0.4 0.15,1.9 1.2,2.64 1.4,4.46 1.55,0.76 2.24,0.37 1.04,2.01 -0.17,1.69 1.08,1.86 -0.44,2.99 -1.42,0.96 -2.53,-3.66 -4.34,-2.06 -2.98,-1.4 -5.14,1.63 -8.13,0.38 -2.22,0.17 -4.52,-1.28 -6.44,-0.34 -1.8,-0.84 -3.54,0.72 -3.99,2.64 -1.51,-1.59 -4.97,-3.78 -5.35,0.02 -1.16,3.92 2.99,5.58 4.38,8.58 -0.13,1.41 -1.05,2.05 0.83,2.59 2.9,1.5 4.8,4.21 6.98,6.53 2.65,1.59 3.98,4.49 6.78,6.28l-0.16,0.23 0,0z","name":"Croatia"},"dk":{"path":"m311.37,281.37c-1.81,-0.13 -3.63,-2.95 -0.99,-2.75 0.71,0.89 2.21,0.72 1.2,1.27 0.93,0.68 0.95,1.07 -0.21,1.48z m2.12,-1.04c1.35,-0.18 -0.34,1.13 0,0z m0.84,-0.24c-0.07,-1 -2.35,-2.59 0.16,-1.62 2.08,0.28 -0.51,1.71 -0.16,1.62z m-17.99,-0.84c-2.31,-0.88 -6.15,-0.22 -4.5,-3.71 0.81,-2.84 -1.69,-4.3 -3.84,-4.7 -1.19,-2.12 0.77,-2.92 1.79,-2.7 1.1,-1.9 -0.71,-4.04 -1.69,-4.68 0.35,-1.37 0.2,-5.41 0.68,-4.97 1.59,3.78 6.34,-5.25 4.96,-0.56 0.24,2.86 4.45,-0.07 2.01,-1.61 0.04,-2.03 -0.06,-3.57 2.27,-2.05 0.18,-1.79 3.93,-0.45 2.6,-2.4 -2.36,-1.07 -4.97,1.4 -7.44,0.51 -0.9,0.41 -2.06,0.6 -1.03,-0.46 2.89,0.74 6.43,-0.56 7.07,-3.76 0.42,-1.7 4.2,-3.59 3.75,-0.9 2.01,1.66 -0.21,4.73 -1.55,6.01 0.4,0.87 0.32,2.52 0.39,3.1 -1.16,1.34 2.36,4.31 4.12,3.09 1.32,1.67 -1.85,5.56 -2.69,2.65 -3.21,0.21 -0.77,4.74 -2.69,6.35 -0.74,1.02 -5.24,-0.82 -2.77,1.37 1.61,1.85 3.89,1.32 5.37,0.39 1.04,1.32 2.66,0.54 1.88,1.61 2.2,1.44 0.71,6.32 -1.89,3.8 -0.99,-0.9 -2.97,-2.42 -3.55,-4.38 -0.8,-2.14 -4.39,1.02 -3.28,1.06 2.19,-0.86 -0.04,1.87 1.38,2.68 -1.87,1.01 -1.25,3.06 -0.58,3.35 -0.3,0.27 -0.55,0.59 -0.78,0.92z m18.96,-2.29c-1.92,-0.02 -1.04,-3.7 -3.92,-2.81 -3.51,-0.09 0.22,-3.64 -2.76,-5.02 -1.79,-1.21 3.2,0.15 3.13,-2.28 0.04,-2.46 4.91,0.23 1.92,1.9 1.06,2.45 3.33,-0.76 2,-2.36 -0.51,-1.34 -2.25,-2.02 0.21,-1.96 2.33,-0.37 1.21,1.23 1.29,2.13 2.22,2.03 -1.98,3.78 -1.88,4.86 2.05,0.87 2.04,2.76 -0.28,2.66 -0.97,0.83 0.11,2.08 0.29,2.88z m-25.23,-19.54c-1.89,-1.51 1.09,-5.6 1.21,-4.99 -1.52,1.21 -1.11,3.3 -1.21,4.99z","name":"Denmark"},"ru":{"path":"m558.98,364.3c-2.56,-0.91 -4.97,-2.14 -7.36,-3.43 -2.39,-1.15 -4.94,-2.06 -7.59,-2.35 -2.81,2.28 -5.5,-0.94 -8.06,-1.85 -1.23,0.3 0.78,2.15 -1.52,1.8 -2.42,-0.25 -3.69,-3.69 -6.4,-2.82 -1.31,0.16 -4.41,0.18 -1.55,-0.66 1.64,-0.7 0.81,-3.34 -0.75,-1.74 0.37,-1.63 2.93,0.94 3.87,-1 1.25,-0.31 2.74,-1.24 3.63,-1.06 1.16,-2.32 -3.44,-3.39 -1.08,-5.92 0.57,-0.81 -0.94,-4.08 0.12,-2.72 0.39,2.37 2.24,1.11 1.25,-0.78 -1.26,-3.41 3.86,0.53 3.04,-2.81 -1.97,-1.81 -4.99,-1.7 -7.55,-2.54 -2.06,-0.94 2.06,-1.24 1.86,-3.16 2.06,1.7 4.87,-1.76 1.32,-1.4 -0.21,-1.02 3.11,-2.69 3.56,-4.64 3.16,0.27 3.03,-5.1 -0.28,-4.48 -2.62,0.21 -2.08,3.91 -4.95,4.14 -2.31,1.85 -0.59,-0.97 -1.26,-1.15 -2.27,0.02 -1.28,-3.82 0.48,-4.34 1.4,-2.13 0.73,-5.08 4.3,-4.68 2.91,0.1 4.24,-2.66 2.99,-5.05 -0.44,-0.81 1.31,-4.54 -0.5,-3.12 -0.89,0.38 -1.08,-3.79 -3.06,-2.28 -2.61,-1.85 3.34,-2.5 1.03,-4.59 -1.03,0.14 -4.3,0.91 -2.02,-0.74 1.96,-2.14 1.02,-4.53 -0.68,-6.4 1.16,-2.59 -2.93,-0.35 -3.64,0.61 0.41,-2.95 -3.61,-0.32 -4.74,-2.01 -1.3,0.69 -2.17,2.73 -3.44,0.57 -1.62,0.46 -2.9,0.42 -4.52,-0.03 -1.18,0.97 0.35,3.57 -1.91,1.94 -2.66,-0.03 -3.84,-4.48 -6.19,-3.24 -2.12,0.99 -3.16,6.03 -6.01,3.79 -0.55,1.88 -3.23,-1.75 -4.12,0.93 -2.26,2.15 -4.17,-0.6 -4.14,-2.64 -1.31,-0.74 -1.67,-2.47 -1.76,-3.17 -1.84,0.68 -2.55,-1.54 -3.04,-1.81 -1.53,1.29 -5.9,2.64 -6.27,0.53 -0.46,-1.43 -3.35,-2.71 -0.58,-3.43 0.87,-2.91 -3.85,-2.55 -4.29,-5.27 -1.34,-1.28 -2.82,-2.7 -4.07,-0.62 -2.6,-1.29 -3.34,1.16 -4.86,2.57 -2.29,-0.64 -4.88,0.47 -3.99,3.28 -1.64,3.09 -5.33,-1.16 -5.28,-3.38 0.29,-1.54 -1.99,-0.85 -0.93,-2.73 -1.04,-1.23 -5.06,-2.53 -2.44,-4.58 2.85,1.31 6.86,-0.11 6.98,-3.34 2.36,-1.51 -0.16,-3.89 -1.6,-4.2 -0.58,-2.91 -4.71,-0.88 -5.61,-1.07 0.65,-2.69 -1.62,-3.41 -3.71,-3.4 -2.11,-1.16 -3.32,-2.8 -3.81,-4.83 -2.42,0.17 -3.41,-1.67 -2.18,-3.83 -0.02,-1.71 -2.9,-2.44 -1.99,-4.84 -0.01,-1.79 -0.45,-2.87 -2.15,-2.08 -2.12,-2.07 -5.85,-2.66 -7.51,0.31 -0.95,2.92 -2.17,-0.33 -1.92,-1.55 -1.94,-2.34 -4.43,2.65 -5.64,-0.22 -1.71,0.04 -3.09,1.26 -3.28,-1.31 -0.9,-2.65 -2.85,-5.01 -4.71,-6.53 -1.83,-1.02 1.04,-5.27 -2.45,-5.76 -1.67,-0.51 -0.04,-2.71 -2.19,-1.57 0.05,-1.42 0.26,-2.99 1.68,-3.72 -0.54,-0.99 -1.34,-2.16 -1.45,-2.96 -2.84,-0.69 -1.01,-4.26 -2.77,-5.86 -2.08,-2.24 0.85,-4.53 0.39,-6.92 -1.01,-2.41 3.22,-2.6 0.55,-4.16 -0.83,-1.3 -2.35,-4.31 0.18,-2.28 1.51,-0.56 0.02,-3.79 2.55,-2.16 2.03,-0.4 0.55,-4.34 3.6,-3.39 1.61,0.41 6.06,0.64 4.72,-1.87 -2.47,0.38 -3.46,-3.31 -5.66,-1.7 -1.73,1.59 -3.35,0.22 -4.28,-0.75 -2.83,1.04 -0.5,-5.97 -3.43,-3.33 -0.79,1.95 -3.72,3.09 -1.67,0.48 4.94,-7.07 7.08,-15.55 9.98,-23.55 0.44,-3.03 2.51,-7.51 -0.31,-9.8 -2.38,-1.89 -5.29,-2.93 -7.96,-4.32 -3.88,-1.06 2.38,-6.07 -1.12,-8.02 -2.45,-0.36 -4.96,-1.94 -3.33,-4.47 -1.48,-1.21 -6.02,-2.28 -3.05,-4.86 0.42,-0.7 -3.23,-0.64 -2.08,-2.79 0.39,-2.06 -0.85,-2.94 1.09,-3.89 -0.82,-2.4 -2.73,-4.51 -4.14,-6.68 -1.51,-2.32 -3.78,-4.06 -5.41,-6.21 -0.98,-3.34 2.21,-6.3 1.62,-9.59 -0.91,-2.31 -3.95,-2.73 -4.86,-5.04 -3.1,0.98 -6.11,-2.82 -4.58,-5.63 1.26,-2.13 -3.52,-2.39 -0.66,-3.49 1.51,-2.49 0.64,-5.59 3.12,-7.72 -0.6,-2.56 3.46,0.62 3.16,-2.41 -2.11,-2.17 1.85,-1.54 2.99,-1.35 2.03,1.63 4.11,1.29 6.52,0.08 0.37,0.23 -0.76,2.57 1.13,2.81 -1.22,0.77 -1.32,4.65 0.4,2.88 0.2,-1.73 1.36,-3.42 1.9,-5.04 3.21,0.08 6.07,-1.95 9.29,-1.34 2.75,0.76 5.58,1.26 8.28,2.2 2.14,0.82 4.03,2.32 6.18,3.01 2,-1.35 5.54,1.61 7.21,-0.07 2.23,0.7 3.31,3.46 5.54,1.69 1.16,1.01 0.65,2.43 2.18,2.82 1.01,2.1 3.8,2.21 3.29,5.21 -0.09,3.44 0.15,7.2 -2.11,10.07 -2.26,3.09 -6,5.79 -10.02,4.97 -2.84,-0.74 -5.34,0.99 -8.08,1.16 -2.01,0.97 -5.49,-2.15 -6.54,-0.13 -1.33,0.97 -2.24,-0.89 -2.89,-1.46 -1,2.57 -7.21,1.52 -6.06,-1.62 -0.53,-0.64 -4.07,0.19 -5.44,0.48 -1.33,1.22 -0,2.41 1.25,1.32 2.16,-0.38 0.62,2.19 3.06,2.74 1.23,1.53 6.57,0.25 5.42,2.51 -1.91,3.1 2.22,0.91 3.81,1.72 2.09,0.58 5.78,2.19 4.56,4.13 2.75,1.59 0.23,3.96 -0.48,5.25 2.3,-0.18 4.43,1.99 4.35,4.27 2,-0.84 0.78,1.8 1.68,2.47 0.1,3.23 4.49,3.53 6.69,2.22 2.28,0.22 3.06,3.83 6.02,2.68 3.14,0.7 6.51,-0.4 7.17,-3.81 0.24,-2.71 -4.02,-6.69 -5.49,-3.3 -2.65,0.34 -5.44,-2.93 -6.7,-4.13 2.45,-0.62 0.68,-2.65 0.87,-3.74 2.98,-0.53 5.18,2.7 8.25,1.24 2.42,-0.59 5.57,1.81 7.6,-0.26 0.47,-1.42 5.9,0.3 3.69,-2.76 -1.12,-2.61 -3.65,-4.39 -6.37,-5.3 -3.26,-1.55 -1.48,-4.68 -0.67,-7 0.13,-2.98 3,-4.72 3.48,-7.44 -0.29,-1.95 -0.01,-6.22 2.42,-3.58 1.94,-2.25 5.82,-1.29 7.83,0.68 1.2,2.1 3.32,0.53 1.22,-1.06 -2.48,-1.87 -1.81,-4.87 -2.24,-7.47 -1.88,-1.57 -2.53,-5.38 -5.87,-5.07 -3.66,0.72 -1.05,-5.18 -3.4,-6.67 -1.19,-0.92 0.46,-3.75 -1.48,-3.55 -1.01,-2.39 -5.64,-2.94 -6.17,-3.55 2.64,0.97 4.98,-0.76 6.95,-2.52 2.55,-2.21 4.69,1.32 7.17,1.82 2.66,0.14 2.98,2.58 0.58,3.55 -1.44,1.01 -3.37,2.5 -1.86,4.15 -2.05,2.82 1.45,5.04 4.18,4.46 2.24,0.66 3.9,4.74 5.89,0.83 -0.45,2.74 1.7,0.82 1.6,-0.76 0.67,-1.92 4.97,-2.44 2.12,-4.7 -0.88,-2.08 -0.93,-5.08 -2.83,-6.29 1.51,-0.41 1.74,-3.36 4.33,-3.14 0.74,-1.52 -4.26,-0.47 -1.65,-2.01 1.38,-2.03 1.95,-4.13 2.25,-6.48 -0.71,-3 2.32,-4.04 2.61,-6.78 0.79,-1.07 0.87,-3.3 2.02,-0.85 0.37,3.39 3.79,-1.54 1.28,-2.71 -2.87,-0.55 -1.44,-3.38 -0.47,-5.41 0.59,0.58 1.75,-1.54 1.49,0.66 0.07,2.26 4.9,2.03 2.07,4.51 -3.06,1.89 2.52,2.73 3.16,0.29 0.8,-0.58 2.28,-0.85 1.45,-2.12 2.18,1.11 3.08,-1.11 1.14,-2.24 -0.63,-3.15 1.27,-6.2 4.04,-7.12 3.15,-0.33 1.76,-4.5 2.46,-6.7 2.68,1.91 1.44,-1.23 0.17,-1.57 -0.24,-1.73 3.07,-1.64 3.49,-0.99 -0.52,3.68 4.93,5.45 5.98,1.6 -0.74,-2.19 -4.02,-2.52 -1.51,-4.94 1.37,-2.71 -0.97,-5.14 -3.64,-5.47 -2.06,-0.69 -6.98,-0.83 -4,-3.86 -2.84,-2.24 1.77,-2.66 3.14,-4.1 2.67,-3.27 6.84,-5.01 10.97,-5.41 2.08,0.66 3.04,-0.42 5.04,-0.78 3.26,-0.69 5.53,-2.7 8.88,-1.89 1.83,0.09 3.72,-0.92 5.18,-0.23 3.3,-0.51 -0.59,-3.78 0.31,-4.05 7.13,0.01 14.26,-0.01 21.38,0.01 2.09,0.14 -2,3.01 0.93,2.93 1.33,0.5 2.97,0.39 1.78,1.28 0.04,1.2 -0.09,5.95 -1.36,3.75 0.88,-1.97 -1.47,-3.03 -1.4,-0.65 -0.13,1.49 -3.77,0.21 -3.69,2.55 -3.37,1.5 0.23,4.73 2.72,4.05 3.82,-0.71 6.21,-3.84 8.09,-6.94 1.84,-0.32 4.98,-2.24 2.66,-4.31C557.34,3.94 555.66,1.55 558.62,2.18c40.17,0 80.35,0 120.52,0 0,32.42 0,64.83 0,97.25 -2.09,0.36 -2.95,2.3 -1.54,3.74 -2.44,-1.53 -2.16,1.82 -2.17,2.03 -1.83,-0.06 -0.41,-2.79 -2.86,-3.06 -0.55,-1.54 -1.56,-2.65 -3.54,-1.77 -1.52,-1.23 -4.42,-2.86 -6,-3.08 -2.3,1.54 0.4,6.71 -3.71,5.55 -1.63,0.21 -3.74,1.9 -3.4,2.86 -1.22,-0.25 -2.92,1.14 -1.43,2.07 -2.82,1.19 1.7,2.9 -0.94,4.55 -2.72,2.09 2.48,0.44 1.29,3.06 -2.53,0.4 -0.3,2.61 -2.09,4 -0.4,3.26 -2.41,5.93 -3.86,8.82 0.28,0.79 -3.1,0.12 -1.27,1.6 -1.02,2.01 -3.11,4.53 -0.2,6.39 -2.52,0.22 -3.43,3.38 -5,5.17 -0.91,1.5 1.12,2.54 -1.32,2.93 -1.23,2.37 -2.15,5.27 -3.97,7.32 1.46,1.7 -3.54,1.33 -2.2,4 0.89,0.84 -2.06,0.35 -2,1.51 -2.16,-0.19 -3.58,4.12 -1.57,4.8 2.75,-1.67 -0.46,5.07 2.92,2.57 1.47,-1.64 1.11,3.68 3.89,2.06 1.15,-1.3 4.64,-3.43 5.55,-1.97 -0.97,2.34 -5.83,2.91 -5.32,5.59 1.65,1.51 -1.67,5.32 2.05,4.87 0.58,1.25 3.67,-0.2 3.17,2.56 -0.46,2.07 -2.09,3.57 -1.96,5.92 -2.28,1.79 1.99,3.07 3.27,1.27 1.22,3.88 3.54,-2.53 5.73,-0.07 1.71,0.15 3.48,-3.04 4.82,-0.75 0.7,2.54 3.93,4.85 1.33,7.39 -0.96,2.05 -3.49,5.21 -5.83,2.98 -2.18,1.39 0.8,4.71 -0.35,6.74 -1.64,-3.35 -4.19,2.67 -7,1.13 -1.58,0.37 -1.77,-1.65 -2.62,-1.81 -0.7,0.72 -4.76,0.36 -3.34,1.66 -0.36,0.87 -3.77,2.22 -1.73,4.23 -0.31,2.89 -2.88,-1.51 -4.31,1.09 -1.46,1.61 -3.55,2.49 -3.46,4.75 -0.41,1.43 -0.54,3.48 -0.05,5.34 -0.27,1.74 -0.64,1.81 -2.46,1.7 -2.35,1.24 -5.67,-2 -7.94,0.36 -1.02,1.19 0.11,2.72 -2.11,2.54 -1.91,-2.74 -5.13,1.42 -6.94,-1.53 -3.68,-1.24 -4.83,6.16 -8.08,2.91 -0.68,-0.31 -3.05,-3.22 -2.23,-1.07 0.44,2 -3.21,4.32 -1.91,5.59 -1.58,-0.54 -1.24,3.52 -1.64,0.7 -1.39,-2.07 -3.9,0.94 -5.63,0.87 0.37,1.37 0.82,0.9 -0.34,1.77 -0.21,2.03 1.56,4.11 -0.43,6.09 -0.26,2.82 -3.85,3.15 -3.39,6.04 1.82,1.79 -0.1,4.43 -1.07,6.43 -3.76,0.87 1.99,2.12 2.03,4.1 0.89,1.78 3.76,2.19 1.71,4.57 -2.3,2.9 -5.15,-1.81 -7.83,-2.01 -3.78,-1.12 -4.32,3.77 -2.19,5.82 -2.31,2.78 -0.33,6.19 0.38,9.1 0.77,1.86 4.43,0.77 3.16,3.54 -0.62,2.49 -0.11,4.99 0.21,7.43 1.17,3.44 5.88,-1.22 6.9,2.2 0.63,0.39 -1.33,1.3 0.64,1.71 0.61,2 4.71,2.89 4.1,0.07 2.42,-0.19 4.16,-3.38 6.65,-1.26 2.61,1.3 4.67,3.68 7.51,4.49 2.44,-0.41 2.29,3.63 -0.15,2.17 -3.16,1.33 0.69,4.72 2.95,3.33 2.69,-1.74 4.67,2.16 2.98,3.28 -1.53,-1.48 -3.23,1.37 -1.51,2.46 -1.66,0.09 -1.17,4.59 -3.15,5.57 -2.16,-0.57 -0.01,3.21 -2.03,1.18 -1.51,-0.51 -1.63,0.74 -2.82,1.17 0.46,1.78 3.76,-0.82 2.44,1.78 0.45,1.46 -0.73,2.48 0.5,3.94 -0.91,1.42 1.06,4.29 -0.87,5.01 0.89,2.05 -1.39,4.46 -0.11,6.57 1.6,2.36 2.84,-1.08 4.63,0.84 2.19,0.61 6.36,2.5 5.42,5.48 1.51,1.9 3.6,2.8 3.89,5.79 1.08,1.98 3.28,1.24 4.3,3.24 2.25,0.68 4.45,1.39 6.37,2.79 1.16,1.48 3.78,2.23 4.69,2.86 -0.38,2.65 -2.37,5.25 -1.49,7.93 0.05,2.46 -6.1,4.34 -5.15,1.14 -2.52,-0.74 -5.24,-0.5 -7.55,-1.88 -1.49,0.54 -3.24,0.69 -4.5,0.55 -1.71,1.13 -6.19,1.11 -5.4,-1.84 -0.88,-3.94 -4.63,1.38 -6.95,-0.97 -1.81,-1.22 -2.73,1 -2.64,2.13 -3.4,-2.47 -4.1,3.12 -6.37,4.33 -1.56,1.14 -0.42,-3.07 -2.75,-1.69 -2.4,0.37 -5.28,1.01 -7,-0.66 -2.78,0.67 -5.63,0.98 -8.42,1.61 1.94,1.66 -2.76,2.56 -3.79,2.43 -2.67,-0.72 -5.06,0.99 -7.69,0.02 -2.34,1.37 -6.27,0.31 -6.05,4.11l-0.04,0.01 0,0z m57.81,-33.85c-0.89,-1.57 0.49,-2.17 0,0z m-241.23,-51.26c-1.5,-0.26 -4.88,0.4 -5.3,-0.46 2.59,-1.58 -0.9,-5.56 2.71,-5.44 2.09,-0.97 5.31,1.36 6.88,-1.15 -0.17,-1.75 -1.39,-4.59 1.04,-3 2.58,1.66 5.83,-0.05 8.09,1.03 2.4,1.17 -0.19,4.14 1.51,6.12 -0.91,2.05 -4.72,1.7 -6.85,2.38 -2.67,0.39 -5.38,0.53 -8.08,0.53z m245.17,-54.27c-0.96,-0.5 -1.79,-4.14 -0.7,-1.7 0.41,0.34 1.1,1.13 0.7,1.7z m15.47,-62.08c-0.5,-1.68 1.86,0.26 0,0z M392.43,81.96c-1.18,-1.24 -0.52,-3.74 1,-1.58 0.97,0.64 4.51,-0.85 3.11,1.22 -1.28,-0.1 -4.06,-2.2 -4.11,0.36z m69.72,-22.48c-3.13,-0.37 -5.18,-4.96 -3.51,-7.6 1.49,-0.95 5.9,-1.19 6.08,0.31 -0.75,2.23 0.93,5.01 -1.2,6.83 -0.37,0.32 -0.88,0.46 -1.36,0.46z m1.2,-32.66c0.64,-1.98 -0.94,-1.7 -1.81,-2.37 0.83,-0.97 3.57,-1.76 1.01,-2.23 -1.29,0.52 -2.78,0.7 -3.28,0.14 -1.2,0.89 -3.04,-4.18 -2.96,-0.9 1.94,3.97 -3.66,-2.01 -2.98,1.25 2.3,2.87 -2.86,2.37 -3.53,0.29 -1.84,-1.41 -2.9,-5.04 0.07,-4.98 -0.36,-1.21 -1.52,-2.86 -0.18,-4.45 -3.01,0.94 -0.61,-2.79 -2.49,-3.65 -1.26,2.21 -4.03,0.25 -1.58,-1.13 2.3,-1.91 -4.09,-1.91 -1.43,-4.6 0.66,-1.81 2.03,-2.29 3.79,-2.01 1.73,-0.33 3.25,0.66 4.85,0.17 2.53,-1.3 -3.03,3.08 0.48,2.2 3.11,-1.44 -1.22,5.41 2.65,3.83 2.34,0.52 1.33,4.72 3.21,4.64 2.81,0.65 4.59,3.49 7.55,3.98 2.95,1.5 6.52,1.02 9.42,1.43 -0.95,0.85 -5.31,2.46 -4.34,3.45 -1.86,0.24 -4.2,1.89 -2.01,3.36 -1.56,0.82 -3.63,-0.42 -4.9,1.06 -0.87,-0.61 -1.05,-0.3 -1.52,0.53z m23.35,-5.93c-1.68,-0.42 -4.33,-0.5 -2.76,-2.36 -1.89,0.07 -1.65,-3.14 0.36,-1.62 2.48,0.8 5.12,0.27 7.63,0.6 2.21,1.62 -2.46,4.83 -3.16,1.83 -0.45,0.12 -0.96,1.84 -2.07,1.55z","name":"Russian Federation"},"mt":{"path":"m343.65,509.08c-1.52,-0.23 -1.75,-0.24 0,0z m1.95,2.72c-1.32,-0.63 -1.5,-0.7 0,0z","name":"Malta"},"me":{"path":"m385.29,433.13c-1.98,-1.45 -3.12,-5.3 -6.16,-4.27 -0.68,-0.6 -0.46,-1.87 -1.44,-2.17 0.16,-1.66 0.06,-3.3 -0.89,-4.86 1.96,-1.05 1.28,-4.74 3.12,-5.09 1.81,3.01 2.14,-1.15 0.71,-2.43 2.24,-0.2 3.4,-2.11 5.57,-0.36 3.49,0.56 2.95,4.72 6.22,5.9 -2.5,0.45 -0.84,6.17 -3.72,4.67 0.19,-3.37 -2.81,0.5 -2.99,1.87 -0.8,1.83 -2.3,3.26 -0.46,4.87 0.08,0.47 0.4,1.59 0.03,1.87z","name":"Montenegro"},"rs":{"path":"m397.48,431.57c-0.16,-2.49 -1.05,-5.46 -3.99,-5.18 -0.83,-1.86 -3.16,-3.89 -0.74,-5.1 2.42,-2.35 -3,-3.15 -2.73,-5.8 -1.28,-2.34 -5.16,-1.7 -5.47,-5.07 -0.61,-1.48 -2.43,-2.36 0.08,-2.14 2.37,-1.69 -1.79,-3.25 -2.79,-4.49 -3.49,-0.35 0.76,-4.99 -0.07,-7.08 -1.54,-0.41 -2.38,-0.6 -2.22,-2.53 -0.29,-0.9 3.52,-0.03 1.84,-1.89 -1.99,-0.46 -4.18,-1.03 -2.61,-2.61 0.5,-1.92 -2.64,0.29 -1.69,-2.2 -0.12,-1.58 -1.93,-2.81 0.65,-3.27 2.64,-1.35 4.3,-3.64 7.52,-3.04 2.34,-0.11 4.56,2.67 6.11,3.82 1,0.92 0.22,4.94 3.24,4.94 1.65,0.3 5.5,0.5 3.47,2.78 1.27,1.27 0.97,1.07 -0.4,2.22 0.32,1.47 3.21,0.4 3.09,2.01 1.78,0.14 4.21,-0.13 4.93,1.74 2.85,0.45 1.17,-3.79 1.99,-3.56 1.66,0.7 3.37,1 1.04,1.99 -1.64,2.21 4.19,3.86 0.86,5.71 -2.2,2.75 0.34,6.72 2.98,8.19 2.92,0.51 3.82,2.98 1.52,5.06 -0.82,0.05 -2.7,-0.25 -2.65,1.85 -1.23,2.37 3.66,5.04 -0.48,5.54 -2.42,1.11 -4.61,2.18 -7.35,2.39 -1.32,2.74 -6.31,0.55 -6.16,5.74z","name":"Serbia"}}}); diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.france.js b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.france.js new file mode 100644 index 0000000..2f7c2d7 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.france.js @@ -0,0 +1,98 @@ +jQuery.fn.vectorMap('addMap', 'france_fr', {"width": 520, "height": 550, "pathes":{ + "FR-01" : {"path": "M 383.28125,262.59375 L 381.125,262.8125 L 379.75,265.34375 L 376.0625,279.78125 L 375.53125,280.96875 L 375.15625,285.53125 L 374.09375,287 L 374.09375,293.59375 L 373.46875,295.09375 L 377.28125,297.40625 L 378.78125,297.625 L 381.125,299.75 L 381.53125,303.15625 L 384.09375,302.3125 L 388.0625,303.46875 L 388.125,302.71875 L 390.03125,302.71875 L 392.78125,305.28125 L 395.34375,304 L 396.625,300.1875 L 397.90625,298.6875 L 399.59375,298.90625 L 401.28125,300.40625 L 402.15625,303.15625 L 410,312.71875 L 412.34375,311.03125 L 412.75,307.40625 L 415.3125,306.96875 L 415.3125,300.59375 L 416.59375,299.53125 L 417,293.8125 L 417.5,294.21875 L 417.4375,292.125 L 416.375,290.1875 L 416.8125,284.6875 L 418.71875,285.75 L 419.78125,283.8125 L 421.6875,283.1875 L 423.65625,281.625 L 421.53125,281.625 L 421.53125,277.90625 L 423.875,276.53125 L 427.375,276.15625 L 427.59375,274.1875 L 426.40625,273.40625 L 429.34375,269.6875 L 428.9375,268.53125 L 425.59375,266.75 L 417.46875,275.6875 L 411.8125,275.6875 L 411.8125,273.34375 L 408.6875,271.78125 L 404.96875,275.875 L 402.03125,276.28125 L 402.03125,273.53125 L 399.5,272.375 L 395.59375,266.90625 L 392.0625,265.53125 L 390.90625,263 L 388.9375,262.59375 L 387,263.96875 L 385.4375,264.375 L 383.28125,262.59375 z ", "name" : "Ain"}, + "FR-02" : {"path": "M 328.40625,62.21875 L 325.28125,64.375 L 323.71875,63 L 322.34375,63 L 319.21875,65.15625 L 316.875,63.78125 L 314.53125,65.15625 L 313.75,65.34375 L 313.15625,64.15625 L 311,64.15625 L 309.4375,65.15625 L 309.375,65.15625 L 309.84375,67.90625 L 307.28125,70.6875 L 307.28125,73.25 L 305.5,75.25 L 305.90625,77.625 L 306.875,81.59375 L 308.0625,88.34375 L 307.6875,94.28125 L 306.875,96.0625 L 309.25,97.84375 L 307.46875,98.65625 L 306.28125,103.40625 L 302.90625,104.1875 L 301.71875,106.1875 L 304.09375,106.59375 L 304.5,109.34375 L 302.71875,109.75 L 302.90625,112.71875 L 303.5,112.53125 L 304.5,110.9375 L 306.875,112.53125 L 308.28125,114.125 L 307.875,116.78125 L 309.65625,118.0625 L 310.25,122.375 L 315.5,127.4375 L 317.25,128.03125 L 318.25,130.375 L 321.53125,131.0625 L 321.9375,130.5625 L 322.9375,128.4375 L 325.875,127.0625 L 327.4375,122.96875 L 329.1875,121.78125 L 328.1875,120.40625 L 325.65625,120.40625 L 325.28125,119.0625 L 327.03125,118.28125 L 327.8125,117.09375 L 326.0625,115.9375 L 326.625,114.15625 L 331.125,113.78125 L 330.34375,112.03125 L 327.625,110.25 L 327.625,105 L 331.3125,102.25 L 335.4375,102.25 L 335.03125,100.3125 L 337.375,99.3125 L 340.6875,101.46875 L 342.0625,101.09375 L 341.875,94.4375 L 342.46875,92.09375 L 343.25,89.375 L 340.6875,88 L 341.28125,86.4375 L 345,85.65625 L 345,83.125 L 347.9375,81.5625 L 348.71875,79.21875 L 347.75,77.65625 L 347.9375,74.71875 L 349.6875,73.15625 L 347.9375,69.84375 L 348.46875,66.375 L 344.5,66.375 L 343.4375,67.09375 L 339.71875,66.125 L 338.9375,63.59375 L 337.78125,63.59375 L 335.625,65.53125 L 335.25,63.78125 L 330.9375,63.375 L 329.75,62.40625 L 328.40625,62.21875 z ", "name" : "Aisne"}, + "FR-03" : {"path": "M 301.625,247.96875 L 298.90625,251.46875 L 297.34375,251.65625 L 295.59375,253.4375 L 293.625,251.28125 L 288.375,256.5625 L 288.375,259.6875 L 289.34375,260.46875 L 289.53125,262.03125 L 286.8125,264.15625 L 284.25,263.375 L 279.375,264.375 L 276.84375,267.28125 L 275.90625,269.28125 L 276.0625,269.25 L 278.40625,272.5625 L 278.40625,274.90625 L 279.75,276.65625 L 281.125,274.90625 L 282.6875,277.65625 L 284.84375,278.4375 L 287,283.5 L 287.09375,284.96875 L 290.0625,287.28125 L 291.65625,286.5625 L 292.90625,283.5625 L 294.125,283.21875 L 294.125,281.625 L 296.25,281.4375 L 296.4375,282.5 L 299.09375,279.5 L 302.09375,279.5 L 302.625,280.5625 L 301.21875,282.5 L 303.3125,284.8125 L 303.6875,286.21875 L 308.625,289.0625 L 314.625,289.9375 L 316.40625,289.75 L 319.0625,290.28125 L 321.34375,288.875 L 323.125,289.75 L 323.46875,292.21875 L 325.78125,292.75 L 328.78125,292.59375 L 329.65625,294.71875 L 332.40625,295.8125 L 332.5,294.84375 L 337.1875,294.625 L 336.8125,283.5 L 335.4375,280.78125 L 336,278.625 L 339.25,278.0625 L 339.34375,277.84375 L 343.4375,274.71875 L 343.625,267.09375 L 342.25,265.15625 L 339.125,265.15625 L 337.96875,263.59375 L 334.65625,263.59375 L 333.6875,262.40625 L 333.6875,259.46875 L 329.75,252.0625 L 327.8125,250.6875 L 324.09375,255.78125 L 322.53125,256.15625 L 321.9375,253.625 L 320.1875,252.84375 L 319.40625,254.40625 L 316.5,254.40625 L 316.09375,252.65625 L 314.125,253.8125 L 312,255 L 309.65625,252.4375 L 306.3125,250.875 L 306.125,248.34375 L 301.625,247.96875 z ", "name" : "Allier"}, + "FR-04" : {"path": "M 463.84375,364.34375 L 461.71875,367.53125 L 458.71875,369.3125 L 457.65625,371.4375 L 455,371.59375 L 455,373.53125 L 454.28125,374.59375 L 453.21875,377.25 L 446.875,377.09375 L 443.875,375.5 L 441.90625,376.90625 L 438.21875,376.71875 L 437.3125,377.96875 L 438.21875,377.96875 L 438.75,381.3125 L 437.84375,381.6875 L 434.5,379.5625 L 434.5,378.3125 L 432.5625,376.71875 L 431.5,376.71875 L 431.5,378.5 L 429.90625,378.84375 L 426.53125,380.78125 L 424.40625,384.34375 L 423.875,386.09375 L 425.125,386.4375 L 425.3125,389.28125 L 424.0625,389.28125 L 422.125,387.5 L 421.0625,387.6875 L 421.59375,389.28125 L 424.59375,392.625 L 422.65625,393.34375 L 421.25,392.46875 L 417.6875,392.46875 L 414.6875,395.28125 L 414.65625,395.25 L 414.53125,396.40625 L 413.375,395.03125 L 411.8125,393.65625 L 410.8125,396.59375 L 409.0625,398.15625 L 408.3125,398.09375 L 408.34375,398.28125 L 408.5,400.9375 L 410.625,401.3125 L 410.625,403.78125 L 408.6875,404.65625 L 409.03125,407.5 L 412.5625,409.25 L 412.5625,411.1875 L 410.96875,412.96875 L 410.96875,414.5625 L 415.40625,414.5625 L 419.46875,419.15625 L 419.4375,419.25 L 424.59375,417.5625 L 430.96875,421.8125 L 434.5,419.15625 L 435.375,417.375 L 440.34375,415.78125 L 443.5,417.90625 L 448.09375,414.5625 L 453.40625,414.75 L 454.8125,413.3125 L 457.78125,413.1875 L 457.84375,413.15625 L 457.125,411.375 L 458,410.3125 L 457.65625,408.90625 L 460.46875,408.90625 L 461.1875,408.03125 L 463.84375,406.59375 L 465.96875,408.03125 L 467.375,407.125 L 464.03125,404.125 L 460.46875,400.78125 L 459.25,400.40625 L 459.0625,397.75 L 456.9375,394.59375 L 457.65625,390 L 458.71875,387.5 L 460.65625,385.90625 L 460.84375,383.4375 L 463.5,382.03125 L 463.90625,381.875 L 463.90625,378.09375 L 466.65625,377.71875 L 465.09375,376.34375 L 463.125,375.75 L 462.15625,373.21875 L 462.9375,371.46875 L 466.4375,367.75 L 465.875,365 L 466.375,364.46875 L 463.84375,364.34375 z ", "name" : "Alpes de Haute Provence"}, + "FR-05" : {"path": "M 447.34375,339.15625 L 445.59375,339.9375 L 445.1875,342.875 L 441.6875,343.28125 L 441.09375,340.53125 L 439.9375,339.375 L 436.40625,339.75 L 435.03125,340.9375 L 434.25,345.03125 L 434.84375,346 L 438.9375,346.40625 L 439.71875,348.9375 L 441.28125,349.71875 L 441.28125,354 L 437.5625,353.8125 L 436,355.5625 L 431.53125,354.78125 L 429,356.9375 L 427.21875,356.15625 L 424.6875,358.125 L 425.65625,359.875 L 424.09375,361.4375 L 419.21875,361.4375 L 419.21875,363.78125 L 420.78125,364.5625 L 420.1875,365.9375 L 416.875,367.28125 L 412.78125,367.6875 L 411.59375,371.40625 L 411.40625,373.75 L 413.5625,375.5 L 411.40625,378.03125 L 408.6875,376.65625 L 405.5625,376.46875 L 405.15625,378.21875 L 407.125,379.59375 L 404.75,381.15625 L 405.5625,384.46875 L 412.1875,386.25 L 413.375,388.78125 L 415.3125,389.15625 L 414.65625,395.25 L 414.6875,395.28125 L 417.6875,392.46875 L 421.25,392.46875 L 422.65625,393.34375 L 424.59375,392.625 L 421.59375,389.28125 L 421.0625,387.6875 L 422.125,387.5 L 424.0625,389.28125 L 425.3125,389.28125 L 425.125,386.4375 L 423.875,386.09375 L 424.40625,384.34375 L 426.53125,380.78125 L 429.90625,378.84375 L 431.5,378.5 L 431.5,376.71875 L 432.5625,376.71875 L 434.5,378.3125 L 434.5,379.5625 L 437.84375,381.6875 L 438.75,381.3125 L 438.21875,377.96875 L 437.3125,377.96875 L 438.21875,376.71875 L 441.90625,376.90625 L 443.875,375.5 L 446.875,377.09375 L 453.21875,377.25 L 454.28125,374.59375 L 455,373.53125 L 455,371.59375 L 457.65625,371.4375 L 458.71875,369.3125 L 461.71875,367.53125 L 463.84375,364.34375 L 466.375,364.46875 L 468.21875,362.46875 L 470.34375,362.65625 L 470.34375,360.90625 L 467.625,359.53125 L 467.03125,353.875 L 464.875,353.09375 L 462.15625,353.5 L 457.0625,350.9375 L 456.28125,345.09375 L 453.375,344.125 L 452.375,342.15625 L 451.09375,339.34375 L 447.34375,339.15625 z ", "name" : "Hautes Alpes"}, + "FR-06" : {"path": "M 463.90625,381.875 L 463.5,382.03125 L 460.84375,383.4375 L 460.65625,385.90625 L 458.71875,387.5 L 457.65625,390 L 456.9375,394.59375 L 459.0625,397.75 L 459.25,400.40625 L 460.46875,400.78125 L 464.03125,404.125 L 467.375,407.125 L 465.96875,408.03125 L 463.84375,406.59375 L 461.1875,408.03125 L 460.46875,408.90625 L 457.65625,408.90625 L 458,410.3125 L 457.125,411.375 L 457.84375,413.15625 L 455.53125,414.5625 L 456.40625,416.6875 L 458.71875,416.84375 L 461,417.90625 L 461.375,421.625 L 463.5,423.75 L 464.71875,423.75 L 467.03125,424.625 L 467.375,426.59375 L 465.96875,427.8125 L 467.03125,428.875 L 467.03125,430.125 L 469.21875,432.375 L 469.375,432.1875 L 469.5625,427.71875 L 473.46875,428.5 L 474.84375,426.71875 L 476.8125,427.125 L 477,421.0625 L 481.5,420.6875 L 485.40625,417.15625 L 488.90625,417.15625 L 489.09375,415 L 492.625,412.875 L 490.65625,408.375 L 493.59375,405.84375 L 493,402.90625 L 497.3125,401.53125 L 498.46875,397.25 L 497.90625,394.3125 L 496.90625,392.5625 L 496.125,390 L 493.21875,390.21875 L 484.03125,393.53125 L 481.09375,393.53125 L 476.03125,389.4375 L 470.9375,388.0625 L 468,388.0625 L 468,384.53125 L 463.90625,382 L 463.90625,381.875 z ", "name" : "Alpes Maritimes"}, + "FR-07" : {"path": "M 375.25,328.5 L 370.71875,331.1875 L 369.84375,335.03125 L 366.46875,335.65625 L 364.65625,336.15625 L 364.71875,336.25 L 363.5625,340.9375 L 360.8125,342.09375 L 359.65625,344.0625 L 360.4375,346.59375 L 361,347.96875 L 358.09375,347.96875 L 357.875,351.65625 L 354.75,351.875 L 353.1875,356.75 L 348.5,356.75 L 343.4375,360.46875 L 340.625,364.9375 L 341.09375,365.53125 L 342.46875,372.71875 L 345.78125,376.3125 L 345.21875,380.4375 L 349.375,382.9375 L 349.375,388.46875 L 351.59375,387.34375 L 356.28125,390.40625 L 358.5,391.21875 L 359.03125,387.34375 L 361.8125,386.8125 L 362.625,389.84375 L 365.40625,389.5625 L 365.9375,386.53125 L 372.28125,390.09375 L 373.3125,388 L 376,387.59375 L 376.21875,383.46875 L 375.59375,382.59375 L 374.75,382.40625 L 374.75,380.90625 L 375.375,379.40625 L 374.3125,377.71875 L 374.9375,373.90625 L 377.5,370.90625 L 377.5,366.6875 L 376.4375,361.78125 L 378.34375,361.375 L 378.78125,359.25 L 380.6875,355.625 L 381.75,352.875 L 380.0625,348.625 L 379,345.21875 L 377.5,339.28125 L 377.5,331.3125 L 376.4375,330.96875 L 375.25,328.5 z ", "name" : "Ardèche"}, + "FR-08" : {"path": "M 367.625,55.84375 L 365.65625,58.75 L 363.90625,60.53125 L 363.90625,62.28125 L 363.90625,64.625 L 361.5625,66.1875 L 357.28125,67.5625 L 354.9375,68.53125 L 352.1875,66.375 L 348.46875,66.375 L 347.9375,69.84375 L 349.6875,73.15625 L 347.9375,74.71875 L 347.75,77.65625 L 348.71875,79.21875 L 347.9375,81.5625 L 345,83.125 L 345,85.65625 L 341.28125,86.4375 L 340.6875,88 L 343.25,89.375 L 342.46875,92.09375 L 341.875,94.4375 L 342,99.3125 L 346.75,99.4375 L 350.90625,102.03125 L 351.6875,103.21875 L 353.875,103.8125 L 357.0625,106.1875 L 359.625,106.375 L 360.21875,105.78125 L 362.8125,105.78125 L 364,108.375 L 365.375,108.375 L 366.1875,107.1875 L 370.9375,107.375 L 371.71875,108.375 L 372.3125,108.375 L 374.3125,106.375 L 376.09375,107.96875 C 376.09375,107.96875 376.33461,107.94351 376.375,107.9375 L 376.25,107.125 L 378.59375,105.96875 L 379.75,104.78125 L 379,102.84375 L 378.78125,101.46875 L 380.9375,99.71875 L 381.71875,95.8125 L 379.375,92.875 L 380.15625,91.5 L 382.125,87.8125 L 382.6875,88.59375 L 385.625,88.59375 L 387,89.9375 L 388.75,88.78125 L 390.125,86.53125 L 388.71875,86.3125 L 387.9375,82.40625 L 386.375,81.21875 L 380.90625,80.625 L 379.9375,78.09375 L 378.15625,76.9375 L 371.90625,76.15625 L 371.53125,71.65625 L 372.3125,70.875 L 372.3125,69.125 L 369.1875,67.15625 L 369.78125,65 L 370.5625,63.0625 L 369.1875,61.875 L 371.34375,59.9375 L 371.34375,56.40625 L 370.5625,55.84375 L 367.625,55.84375 z ", "name" : "Ardennes"}, + "FR-09" : {"path": "M 237.21875,446.375 L 235.96875,447.25 L 235.4375,448.3125 L 237.90625,450.09375 L 238.625,451.34375 L 238.09375,452.375 L 233.84375,452.75 L 232.625,454.5 L 232.78125,455.03125 L 234.375,455.5625 L 235.28125,456.8125 L 234.21875,458.5625 L 232.96875,458.40625 L 231.03125,456.625 L 228.71875,455.9375 L 226.4375,456.09375 L 222.375,458.5625 L 222.53125,461.9375 L 223.59375,462.65625 L 222.90625,465.28125 L 218.28125,466.53125 L 216.53125,468.65625 L 216.53125,472.1875 L 217.25,473.25 L 215.59375,474.78125 L 216.65625,475.375 L 222.6875,476.53125 L 225.25,476.53125 L 228.5625,480.84375 L 236.96875,480.4375 L 240.28125,485.71875 L 243.21875,484.53125 L 251.8125,485.71875 L 252.4375,489.3125 L 258.5,487.90625 L 260.71875,485.96875 L 264.03125,485.125 L 264.84375,483.46875 L 272.03125,482.9375 L 267.625,477.6875 L 264.03125,479.625 L 257.6875,474.375 L 259.0625,472.4375 L 264.03125,472.4375 L 263.46875,467.75 L 263.46875,464.15625 L 262.65625,457.5 L 252.96875,452.8125 L 253.53125,451.15625 L 251.6875,449.09375 L 250.125,449.75 L 248,450.09375 L 244.09375,448.3125 L 243.03125,447.96875 L 244.625,449.90625 L 243.9375,451.5 L 240.5625,451.15625 L 240.40625,449.375 L 238.4375,446.71875 L 237.21875,446.375 z ", "name" : "Ariège"}, + "FR-10" : {"path": "M 349.3125,138.6875 L 345.34375,140.875 L 341.96875,143.25 L 338.625,143.25 L 333.0625,147.03125 L 328.3125,147.8125 L 324.9375,144.25 L 324.09375,144.4375 L 324.09375,145.03125 L 321.375,146.1875 L 321.1875,148.53125 L 319.8125,150.3125 L 319.03125,154.21875 L 318.59375,157.5 L 319.8125,158.5 L 322.15625,158.5 L 327.21875,163.78125 L 326.625,169.0625 L 330.15625,171.78125 L 332.125,170.40625 L 335.25,174.125 L 335.625,177.65625 L 337.78125,180.5625 L 338.75,182.71875 L 346.5625,183.125 L 350.46875,181.15625 L 351.625,183.3125 L 353,183.5 L 354,181.34375 L 360.4375,181.15625 L 362.96875,179.78125 L 363.375,177.25 L 369.03125,177.25 L 369.8125,177.6875 L 369.15625,175.1875 L 367.5625,174.1875 L 369.75,172.21875 L 373.125,172 L 374.3125,170.21875 L 374.09375,163.09375 L 373.3125,158.9375 L 369.9375,157.75 L 366.375,152.78125 L 366.5625,149.8125 L 367.59375,147.65625 L 365.78125,147.03125 L 360.21875,148.21875 L 356.25,148.21875 L 352.6875,142.875 L 352.28125,138.90625 L 349.3125,138.6875 z ", "name" : "Aube"}, + "FR-11" : {"path": "M 274.25,438.46875 L 273.96875,442.0625 L 270.375,440.9375 L 266.5,440.9375 L 266.78125,439.5625 L 264.84375,439.84375 L 260.71875,441.21875 L 259.34375,438.71875 L 256.5625,441.21875 L 257.40625,443.15625 L 254.34375,444.53125 L 253.8125,447.5625 L 251.3125,448.6875 L 253.53125,451.15625 L 252.96875,452.8125 L 262.65625,457.5 L 263.46875,464.15625 L 263.46875,467.75 L 264.03125,472.4375 L 259.0625,472.4375 L 257.6875,474.375 L 264.03125,479.625 L 267.625,477.6875 L 272.03125,482.9375 L 271.375,483 L 272.21875,483.5 L 280.15625,479.625 L 278.21875,476.78125 L 278.0625,473.4375 L 296.59375,473.4375 L 296.25,470.9375 L 300.5,468.65625 L 305.4375,472.53125 L 308,473.71875 L 307.84375,468.125 L 308.0625,461.6875 L 305.71875,461.875 L 303.75,458.96875 L 305.3125,456.40625 L 308.625,459.53125 L 311.5625,457.1875 L 313.53125,455.25 L 313.78125,453.1875 L 311.28125,453.09375 L 310.40625,450.28125 L 307.9375,450.09375 L 305.625,446.71875 L 303.84375,446.90625 L 301.75,445.65625 L 301.375,442.65625 L 300.3125,443.1875 L 300.84375,445.3125 L 298.375,445.3125 L 298.1875,448.84375 L 294.5,450.09375 L 292.71875,446.375 L 290.25,447.96875 L 288.125,446.375 L 287.0625,443.90625 L 288.84375,441.78125 L 288,439.5 L 287.78125,439.5625 L 281.96875,439.5625 L 275.90625,438.46875 L 274.25,438.46875 z ", "name" : "Aude"}, + "FR-12" : {"path": "M 294.6875,353.375 L 289.15625,358.09375 L 289.15625,362.78125 L 287.78125,362.78125 L 287.21875,367.1875 L 285.84375,367.75 L 284.75,370.21875 L 278.65625,370.21875 L 278.125,369.40625 L 275.34375,369.40625 L 273.6875,372.15625 L 273.09375,372.09375 L 272.75,373.1875 L 271.5,374.59375 L 267.96875,374.59375 L 267.25,375.5 L 265.5,375.3125 L 262.3125,378.84375 L 261.25,378.5 L 258.96875,380.4375 L 259.65625,383.96875 L 261.4375,386.625 L 260.0625,388.0625 L 260.375,392.09375 L 263.1875,392.28125 L 261.59375,395.46875 L 262.84375,398.65625 L 264.4375,397.75 L 265.15625,399.34375 L 267.4375,397.0625 L 270.8125,396.875 L 274.15625,399.34375 L 280,400.40625 L 282.125,404.125 L 285.125,405.53125 L 286.71875,409.59375 L 286.53125,411.1875 L 288.46875,414.75 L 288.46875,416.6875 L 292,421.28125 L 295.375,423.03125 L 297.5,422.5 L 298.5625,421.09375 L 300.15625,421.46875 L 303.8125,423.8125 L 303.84375,423.8125 L 305.46875,423.8125 L 308.78125,423.8125 L 308.5,418.03125 L 308.5,416.09375 L 310.15625,416.09375 L 313.1875,417.75 L 316.21875,417.75 L 315.6875,414.4375 L 317.34375,413.03125 L 320.65625,412.5 L 320.65625,409.71875 L 324.25,408.0625 L 323.40625,404.21875 L 320.375,404.21875 L 317.625,403.65625 L 317.0625,401.4375 L 319.28125,400.90625 L 319.28125,398.125 L 321.46875,396.1875 L 319.8125,395.375 L 315.125,396.1875 L 315.40625,394 L 312.09375,392.59375 L 311.25,385.96875 L 311.25,381.28125 L 308.5,379.34375 L 308.78125,375.46875 L 302.96875,368.3125 L 302.40625,362.78125 L 300.5,362.78125 L 299.65625,357.25 L 295.78125,357.8125 L 295.25,354.21875 L 294.6875,353.375 z ", "name" : "Aveyron"}, + "FR-13" : {"path": "M 379.71875,409.90625 L 374.25,413.03125 L 372.84375,423.53125 L 367.0625,422.71875 L 365.40625,427.125 L 366.78125,429.0625 L 360.4375,432.9375 L 358.6875,437 L 364.875,437.28125 L 373.09375,437.875 L 374.65625,439.4375 L 371.71875,439.4375 L 369.78125,442.75 L 378.15625,444.5 L 384.8125,443.34375 L 381.28125,440 L 383.625,438.0625 L 387.34375,439.625 L 389.09375,443.34375 L 400.25,443.53125 L 403.15625,442.34375 L 403.75,444.125 L 400.625,446.84375 L 404.9375,447.03125 L 404.15625,449 L 402.96875,450.375 L 412.53125,450.375 L 417.21875,451.9375 L 417.6875,452.5625 L 417.875,448.6875 L 419.28125,447.09375 L 421.0625,446.03125 L 420.875,444.96875 L 419.46875,443.5625 L 418.0625,443.5625 L 417.15625,442.5 L 418.75,441.0625 L 418.75,440.53125 L 417,439.65625 L 417,438.25 L 420.875,438.4375 L 421.78125,437.71875 L 418.40625,434.53125 L 418.59375,430.8125 L 416.46875,429.0625 L 418.21875,425.53125 L 422.46875,422.6875 L 419.28125,420.5625 L 417,422.34375 L 411.6875,423.5625 L 407.4375,423.03125 L 399.84375,419.875 L 395.25,420.03125 L 391.375,418.28125 L 389.9375,416.3125 L 386.9375,412.96875 L 379.875,409.96875 L 379.71875,409.90625 z ", "name" : "Bouches du Rhône"}, + "FR-14" : {"path": "M 202.65625,97.78125 L 198.09375,98.59375 L 190.65625,102.90625 L 182.28125,106.21875 L 175.625,102.5 L 159.625,100.15625 L 155.90625,98.21875 L 150.125,99.6875 L 150.46875,101.84375 L 149.34375,102.96875 L 149.5,104.5625 L 153.21875,108.28125 L 155.46875,109.5625 L 157.09375,107.46875 L 158.375,109.09375 L 156.75,111.1875 L 158.21875,113.59375 L 157.5625,114.40625 L 158.6875,116.6875 L 158.0625,119.25 L 156.4375,121.84375 L 153.84375,123.4375 L 152.40625,122.3125 L 150.96875,123.59375 L 152.5625,125.0625 L 151.28125,127.46875 L 148.21875,128.59375 L 151.9375,133.28125 L 155.625,133.59375 L 158.46875,135.4375 L 162.40625,134.25 L 165.3125,130.875 L 169.34375,132 L 172.875,129.5625 L 175,128.78125 L 177.25,131.03125 L 180.96875,130.375 L 184.1875,132.15625 L 188.21875,130.875 L 191.90625,128.125 L 194.34375,125.375 L 195.96875,125.0625 L 196.4375,127.15625 L 197.71875,126.84375 L 197.875,125.375 L 201.59375,124.75 L 202.875,125.53125 L 206.84375,124.65625 L 207.5,122.75 L 207.3125,121 L 205.34375,120.21875 L 205.15625,118.84375 L 206.90625,117.6875 L 207.125,115.71875 L 205.9375,111.03125 L 203.59375,107.71875 L 205.5625,106.5625 L 205.5625,105.78125 L 203.59375,105.1875 L 202.65625,97.78125 z ", "name" : "Calvados"}, + "FR-15" : {"path": "M 285.84375,323.71875 L 285.25,325.875 L 286.21875,328.21875 L 285.03125,329.59375 L 283.09375,329.59375 L 281.125,327.4375 L 279.375,326.46875 L 279.1875,331.9375 L 275.65625,334.09375 L 273.125,337.59375 L 273.71875,341.125 L 272.9375,342.6875 L 271.9375,345.8125 L 270.375,345.8125 L 268.8125,347.75 L 270,348.9375 L 270.78125,350.875 L 268.25,352.65625 L 269.28125,359.1875 L 272.59375,361.65625 L 270.09375,367.46875 L 272.59375,368.5625 L 271.5,371.875 L 273.6875,372.15625 L 275.34375,369.40625 L 278.125,369.40625 L 278.65625,370.21875 L 284.75,370.21875 L 285.84375,367.75 L 287.21875,367.1875 L 287.78125,362.78125 L 289.15625,362.78125 L 289.15625,358.09375 L 294.6875,353.375 L 295.25,354.21875 L 295.78125,357.8125 L 299.65625,357.25 L 300.5,362.78125 L 302.40625,362.78125 L 302.96875,368.3125 L 304.6875,370.4375 L 307.5,363.96875 L 310.25,355.375 L 313.75,357.71875 L 315.3125,354.21875 L 320.3125,352.40625 L 320.3125,350.75 L 319.25,349.15625 L 317.125,347.90625 L 318.1875,346.3125 L 317.28125,345.4375 L 318.34375,345.09375 L 319.59375,344.03125 L 317.46875,343.84375 L 316.40625,342.4375 L 316.0625,338.71875 L 314.8125,337.46875 L 313.9375,334.3125 L 309.5,334.3125 L 308.625,331.8125 L 307.21875,331.65625 L 306.5,333.0625 L 303.6875,332.875 L 301.03125,328.8125 L 299.96875,328.65625 L 297.84375,327.59375 L 296.59375,328.8125 L 293.4375,328.8125 L 291.84375,325.46875 L 285.84375,323.71875 z ", "name" : "Cantal"}, + "FR-16" : {"path": "M 206.28125,284.875 L 204.59375,286.15625 L 204.8125,288.9375 L 203.75,289.78125 L 200.75,288.0625 L 197.78125,289.125 L 194.375,289.34375 L 191.8125,286.21875 L 191,286.375 L 187.59375,288.0625 L 185.03125,288.71875 L 185.03125,290.1875 L 183.5625,291.90625 L 183.96875,292.96875 L 182.0625,294.03125 L 180.375,300.1875 L 179.9375,304.21875 L 178.46875,304.84375 L 176.34375,304.65625 L 175.90625,303.59375 L 173.5625,303.59375 L 172.3125,304.65625 L 169.53125,304.65625 L 167.1875,305.90625 L 168.90625,306.5625 L 169.125,311.03125 L 169.96875,311.21875 L 168.46875,312.9375 L 170.1875,314 L 172.5,316.125 L 173.78125,318.25 L 175.28125,319.71875 L 174.84375,321.84375 L 174,322.6875 L 175.28125,323.96875 L 175.28125,325.46875 L 172.71875,327.59375 L 173.78125,328.4375 L 175.28125,328.875 L 175.28125,329.28125 L 173.15625,330.125 L 173.34375,331.1875 L 174.625,331.84375 L 178.65625,331.1875 L 180.375,333.09375 L 181.65625,334.8125 L 185.8125,337.625 L 186.40625,336.625 L 190.3125,337.03125 L 192.25,335.25 L 195.78125,331.75 L 195.96875,324.90625 L 205.15625,318.65625 L 205.34375,313.96875 L 208.09375,313.59375 L 209.84375,310.46875 L 210.9375,310.5 L 211.59375,307.53125 L 213.15625,307.34375 L 214.125,304.59375 L 216.09375,304 L 218.4375,302.4375 L 218.0625,297.5625 L 219.8125,296.96875 L 223.3125,296.1875 L 223.125,294.4375 L 222.53125,291.71875 L 219.8125,291.5 L 218.25,289.75 L 219.21875,288 L 219.28125,286.40625 L 217.53125,285.53125 L 214.15625,285.53125 L 212.65625,287.21875 L 209.03125,288.71875 L 207.78125,287.4375 L 206.28125,284.875 z ", "name" : "Charente"}, + "FR-17" : {"path": "M 149.3125,270.625 L 146.5625,270.8125 L 140.59375,274.4375 L 142.03125,275.75 L 138.90625,278.28125 L 138.53125,280.25 L 135.59375,280.625 L 134.03125,278.875 L 130.125,278.5 L 129.71875,276.53125 L 127.375,274.96875 L 124.0625,276.15625 L 126.21875,279.28125 L 128.9375,279.28125 L 131.6875,281.03125 L 133.84375,282.78125 L 137.9375,282.59375 L 138.71875,284.34375 L 141.4375,284.9375 L 142.4375,287.65625 L 144.1875,288.4375 L 144,290.59375 L 141.65625,290.21875 L 140.875,291.375 L 142.625,293.90625 L 141.65625,298.21875 L 139.3125,298.03125 L 139.5,300.75 L 140.09375,301.71875 L 137.34375,301.71875 L 136.96875,300.15625 L 138.71875,297.8125 L 138.125,296.46875 L 137.15625,295.6875 L 136.75,291 L 133.4375,290.59375 L 130.71875,287.28125 L 130.3125,294.125 L 134.8125,297.4375 L 135.1875,301.15625 L 135.96875,305.4375 L 136.375,309.75 L 138.71875,309.53125 L 142.8125,312.875 L 145.5625,314.4375 L 145.75,316.375 L 147.90625,316.78125 L 154.15625,323.03125 L 155.625,329.78125 L 161.40625,329.78125 L 162.375,328.8125 L 162.5625,331.75 L 167.65625,332.34375 L 168.4375,338.59375 L 171.1875,338.78125 L 175.65625,343.28125 L 178,343.65625 L 180.75,342.28125 L 182.6875,343.65625 L 184.25,340.34375 L 185.8125,337.625 L 181.65625,334.8125 L 180.375,333.09375 L 178.65625,331.1875 L 174.625,331.84375 L 173.34375,331.1875 L 173.15625,330.125 L 175.28125,329.28125 L 175.28125,328.875 L 173.78125,328.4375 L 172.71875,327.59375 L 175.28125,325.46875 L 175.28125,323.96875 L 174,322.6875 L 174.84375,321.84375 L 175.28125,319.71875 L 173.78125,318.25 L 172.5,316.125 L 170.1875,314 L 168.46875,312.9375 L 169.96875,311.21875 L 169.125,311.03125 L 168.90625,306.5625 L 167.1875,305.90625 L 169.53125,304.65625 L 172.3125,304.65625 L 173.5625,303.59375 L 175.90625,303.59375 L 176.34375,304.65625 L 178.46875,304.84375 L 179.9375,304.21875 L 180.375,300.1875 L 182.0625,294.03125 L 182.125,294 L 180.59375,292.53125 L 180.15625,290.40625 L 177.40625,289.125 L 173.78125,286.59375 L 169.3125,287 L 166.5625,283.40625 L 162.53125,283.1875 L 159.34375,280.84375 L 159.34375,279.5625 L 157.21875,277.25 L 157.125,274.375 L 154.1875,272.1875 L 150.46875,273.75 L 149.3125,270.625 z ", "name" : "Charente Maritime"}, + "FR-18" : {"path": "M 275.53125,200.84375 L 272.6875,202.25 L 270.15625,204.34375 L 270.28125,205.1875 L 272.8125,205.875 L 273.8125,208 L 275.34375,208.5625 L 274.78125,209.8125 L 274.78125,211.90625 L 272.40625,212.90625 L 270.5625,216.25 L 270.4375,218.09375 L 271.125,218.9375 L 271.40625,219.90625 L 268.90625,221.3125 L 264.96875,221.71875 L 264,220.625 L 262.875,220.75 L 261.75,222 L 261.875,224.53125 L 259.375,224.6875 L 259.21875,226.90625 L 256.96875,228.75 L 257.25,229.59375 L 258.65625,230.71875 L 261.46875,231.125 L 263.5625,230.28125 L 266.21875,230.15625 L 267.5,231.125 L 267.0625,233.78125 L 269.3125,236.75 L 269.3125,238 L 268.34375,239.6875 L 268.34375,240.375 L 269.46875,241.65625 L 271.28125,241.65625 L 271.40625,242.46875 L 269.1875,244.3125 L 269.3125,245.5625 L 267.90625,246.28125 L 268.46875,247.25 L 270.28125,248.78125 L 270.28125,249.90625 L 268.34375,251.03125 L 268.34375,252.71875 L 271,254.125 L 271.5625,256.09375 L 273.25,257.625 L 273.09375,258.1875 L 272.40625,259.03125 L 272.25,261.5625 L 271.84375,262.40625 L 272.96875,264.625 L 273.375,266.3125 L 271.40625,268.28125 L 271.3125,269.84375 L 275.90625,269.28125 L 276.84375,267.28125 L 279.375,264.375 L 284.25,263.375 L 286.8125,264.15625 L 289.53125,262.03125 L 289.34375,260.46875 L 288.375,259.6875 L 288.375,256.5625 L 293.625,251.28125 L 295.59375,253.4375 L 297.34375,251.65625 L 298.90625,251.46875 L 301.625,247.96875 L 306.125,248.34375 L 306.1875,249.40625 L 307.6875,244.625 L 306.71875,242.875 L 306.90625,240.34375 L 307.5,235.25 L 305.34375,233.125 L 305.75,228.4375 L 303.78125,224.3125 L 303.59375,221.59375 L 300.0625,218.84375 L 299.5,216.5 L 301.25,213.96875 L 301.25,210.25 L 299.21875,207.875 L 297.21875,208.6875 L 296.25,208.28125 L 294.84375,206.4375 L 294,206.3125 L 293.4375,206.59375 L 293.28125,209.40625 L 292.03125,209.53125 L 291.0625,208.6875 L 288.8125,205.59375 L 287.96875,204.5 L 284.75,204.34375 L 283.1875,202.375 L 281.9375,202.375 L 281.375,203.09375 L 279.28125,203.375 L 277.59375,201.8125 L 275.625,200.96875 L 275.53125,200.84375 z ", "name" : "Cher"}, + "FR-19" : {"path": "M 265.75,307.625 L 264.90625,309.75 L 261.71875,310.375 L 260.46875,312.5 L 258.96875,312.5 L 256.84375,311.875 L 255.34375,314.40625 L 253.03125,314.625 L 251.53125,317.375 L 249.625,317.375 L 248.125,318.875 L 244.3125,318.4375 L 243.03125,320.5625 L 241.5625,320.375 L 239,323.5625 L 236.65625,322.6875 L 235.5625,324.90625 L 236.40625,327.0625 L 238.5625,328.8125 L 234.65625,332.34375 L 234.65625,335.0625 L 236.21875,335.84375 L 234.65625,337.8125 L 236.8125,339.5625 L 235.25,341.5 L 237,342.6875 L 241.28125,342.5 L 241.09375,346.78125 L 242.71875,349.34375 L 243.3125,349.25 L 247.46875,347.3125 L 252.4375,349.53125 L 256.28125,355.03125 L 258.5,354.75 L 261.8125,351.4375 L 262.90625,353.375 L 265.125,351.1875 L 268.15625,352 L 268.25,352.65625 L 270.78125,350.875 L 270,348.9375 L 268.8125,347.75 L 270.375,345.8125 L 271.9375,345.8125 L 272.9375,342.6875 L 273.71875,341.125 L 273.125,337.59375 L 275.65625,334.09375 L 279.1875,331.9375 L 279.375,326.46875 L 281.125,327.4375 L 283.09375,329.59375 L 285.03125,329.59375 L 286.21875,328.21875 L 285.25,325.875 L 286.21875,322.375 L 285.625,319.0625 L 284.4375,317.6875 L 284.4375,314.9375 L 286.21875,312.03125 L 285.8125,309.28125 L 285.375,308.84375 L 283.40625,310.375 L 279.5625,310.375 L 278.3125,312.28125 L 275.96875,312.28125 L 274.0625,310.375 L 273.1875,309.09375 L 268.3125,309.09375 L 267.25,307.625 L 265.75,307.625 z ", "name" : "Corrèze"}, + "FR-2A" : {"path": "M 445.33847,488.9562 L 445.33847,491.11245 L 447.30722,492.48745 L 450.61972,494.42495 L 450.83847,495.98745 L 448.86972,496.5812 L 445.74472,497.17495 L 445.74472,498.5187 L 446.90097,499.7062 L 447.11972,503.61245 L 451.40097,504.98745 L 452.96347,505.36245 L 454.33847,507.5187 L 453.36972,508.8937 L 451.80722,509.4562 L 450.61972,511.61245 L 449.46347,512.98745 L 450.02597,516.48745 L 452.96347,516.29995 L 453.74472,516.8937 L 456.49472,515.5187 L 457.27597,516.29995 L 455.90097,519.23745 L 457.27597,520.61245 L 454.93222,522.36245 L 453.36972,525.86245 L 457.65097,526.86245 L 463.71347,527.42495 L 461.18222,530.36245 C 461.18222,530.36245 459.99289,529.90364 459.46347,530.1437 C 459.44782,530.15141 459.41536,530.16589 459.40097,530.17495 C 459.39647,530.17828 459.37406,530.20271 459.36972,530.2062 C 459.36553,530.20986 459.34249,530.23363 459.33847,530.23745 C 459.33478,530.24161 459.31073,530.26437 459.30722,530.2687 C 459.30054,530.27771 459.28192,530.29022 459.27597,530.29995 C 459.27319,530.30499 459.27856,530.32597 459.27597,530.3312 C 459.27118,530.34203 459.24871,530.38211 459.24472,530.3937 C 459.24293,530.39969 459.2463,530.41876 459.24472,530.42495 C 459.24199,530.43772 459.21532,530.47387 459.21347,530.48745 C 459.21207,530.50144 459.21394,530.53512 459.21347,530.54995 C 459.21348,531.52651 457.86972,533.8937 457.86972,533.8937 L 459.80722,536.0187 L 463.33847,538.17495 L 469.96347,539.92495 L 471.90097,540.7062 L 473.68222,541.48745 L 472.49472,543.6437 L 475.61972,543.4562 L 476.21347,544.8312 L 479.33847,544.8312 L 480.11972,541.11245 L 478.15097,540.7062 L 480.90097,537.79995 L 479.93222,536.79995 L 480.11972,535.04995 L 483.65097,533.11245 L 483.83847,530.9562 L 481.49472,530.7687 L 479.93222,532.11245 L 479.93222,530.17495 L 483.05722,529.98745 L 484.02597,527.6437 L 484.80722,520.79995 L 484.21347,517.86245 L 484.15097,515.04995 L 480.74472,517.29995 L 476.68222,517.4562 L 476.33847,514.6437 L 476.86972,513.92495 L 475.61972,513.04995 L 475.27597,508.2687 L 474.74472,507.3937 L 472.61972,507.3937 L 471.55722,506.5187 L 471.55722,503.1437 L 470.15097,502.2687 L 469.08847,501.73745 L 466.96347,499.0812 L 467.11972,497.48745 L 464.49472,497.48745 L 463.58847,494.8312 L 459.86972,494.8312 L 457.93222,492.17495 L 458.46347,491.29995 L 457.24472,490.5812 L 454.40097,491.11245 L 453.33847,490.42495 L 449.46347,490.42495 L 449.08847,489.36245 L 446.90097,488.9562 L 445.33847,488.9562 z ", "name" : "Corse du Sud"}, + "FR-2B" : {"path": "M 477.96347,449.8937 L 475.02597,451.86245 L 475.43222,453.79995 L 476.99472,455.7687 L 475.24472,457.11245 L 476.02597,458.67495 L 474.83847,460.04995 L 474.83847,461.79995 L 476.80722,463.5812 L 476.80722,466.29995 L 475.61972,468.8312 L 474.27597,469.42495 L 472.71347,467.2687 L 469.96347,467.48745 L 469.36972,467.0812 L 467.02597,467.0812 L 464.90097,469.04995 L 464.08847,472.36245 L 459.02597,473.3312 L 455.11972,476.6437 L 454.33847,478.79995 L 452.40097,478.61245 L 451.40097,477.42495 L 450.83847,480.7687 L 449.46347,481.3312 L 449.05722,484.4562 L 449.65097,485.8312 L 447.49472,487.3937 L 446.90097,488.9562 L 449.08847,489.36245 L 449.46347,490.42495 L 453.33847,490.42495 L 454.40097,491.11245 L 457.24472,490.5812 L 458.46347,491.29995 L 457.93222,492.17495 L 459.86972,494.8312 L 463.58847,494.8312 L 464.49472,497.48745 L 467.11972,497.48745 L 466.96347,499.0812 L 469.08847,501.73745 L 470.15097,502.2687 L 471.55722,503.1437 L 471.55722,506.5187 L 472.61972,507.3937 L 474.74472,507.3937 L 475.27597,508.2687 L 475.61972,513.04995 L 476.86972,513.92495 L 476.33847,514.6437 L 476.68222,517.4562 L 480.74472,517.29995 L 484.15097,515.04995 L 484.02597,509.2687 L 488.71347,502.6437 L 488.71347,491.7062 L 486.77597,487.98745 L 486.18222,476.2687 L 484.80722,474.11245 L 482.27597,472.17495 L 481.86972,464.92495 L 483.05722,461.61245 L 481.49472,456.3312 L 480.52597,452.04995 L 479.71347,450.86245 L 477.96347,449.8937 z ", "name" : "Haute-Corse"}, + "FR-21" : {"path": "M 363.375,177.25 L 362.96875,179.78125 L 360.4375,181.15625 L 354,181.34375 L 354.28125,182.75 L 354.4375,184.15625 L 352.46875,185.5625 L 352.46875,187.9375 L 352.875,188.375 L 354.4375,188.375 L 355.40625,190.03125 L 354.84375,192.84375 L 352.59375,194.53125 L 352.59375,196.21875 L 353.3125,196.78125 L 353.15625,197.1875 L 351.75,197.75 L 351.34375,199.84375 L 349.09375,204.625 L 347.5625,206.875 L 347.5625,209.125 L 348.125,210.09375 L 347.28125,211.21875 L 345.3125,212.1875 L 345.4375,214.15625 L 347.28125,215.28125 L 347.96875,216.8125 L 347.6875,218.9375 L 347.28125,220.46875 L 348.25,222.15625 L 351.0625,222.71875 L 352.3125,224.6875 L 352.3125,225.53125 L 351.46875,225.8125 L 351.46875,227.84375 L 351.625,227.90625 L 355.40625,231.8125 L 359.34375,231.6875 L 362.84375,234.34375 L 365.375,236.1875 L 365.5,238.5625 L 368.15625,239.125 L 370.40625,240.9375 L 376.3125,238.84375 L 380.375,237.5625 L 382.1875,237.28125 L 382.75,236.46875 L 384.71875,236.59375 L 386.25,237.5625 L 388.5,237 L 390.75,235.46875 L 392.4375,235.65625 L 392.46875,235.46875 L 393.8125,234.6875 L 393.625,233.6875 L 393.25,232.53125 L 394.21875,230.96875 L 397.53125,229.40625 L 397.53125,227.84375 L 398.71875,226.28125 L 399.875,224.71875 L 399.5,223.34375 L 400.0625,221.1875 L 400.46875,218.0625 L 401.25,218.0625 L 401.0625,216.90625 L 400.28125,216.125 L 400.0625,212.21875 L 398.3125,212.03125 L 397.9375,208.90625 L 395.78125,207.90625 L 396.5625,206.9375 L 397.75,206.5625 L 400.28125,203.625 L 400.0625,202.0625 L 398.5,198.9375 L 396.1875,198.53125 L 395.375,200.5 L 391.09375,201.46875 L 390.6875,200.5 L 387.5625,196.59375 L 385.8125,197.5625 L 383.46875,197.375 L 382.6875,195.8125 L 379.5625,196 L 379.375,192.6875 L 377.625,191.5 L 380.15625,188.78125 L 375.65625,182.71875 L 372.15625,179 L 369.03125,177.25 L 363.375,177.25 z ", "name" : "Côte d'Or"}, + "FR-22" : {"path": "M 69.78125,123.21875 L 68,124.59375 L 63.53125,125.15625 L 62.53125,126.53125 L 59.40625,124.1875 L 55.3125,126.9375 L 56.875,129.0625 L 54.15625,132.78125 L 54.03125,132.71875 L 52.90625,137.96875 L 55.3125,138.125 L 55.15625,140.21875 L 56.9375,141.34375 L 55.3125,142.96875 L 54.1875,143.78125 L 54.34375,145.6875 L 56.78125,146.5 L 54.5,147.15625 L 54.5,149.5625 L 55.96875,151.5 L 56.28125,157.15625 L 55.3125,158.125 L 56.125,161.03125 L 59.1875,161.84375 L 59.5,163.4375 L 61.4375,163.59375 L 63.0625,162.46875 L 64.03125,163.4375 L 67.75,165.0625 L 70.8125,163.4375 L 71.59375,161.84375 L 74.1875,161.65625 L 77.09375,164.25 L 79.84375,163.59375 L 82.25,166.03125 L 83.375,166.03125 L 84.5,167.46875 L 86.78125,167.46875 L 87.5625,166.34375 L 88.53125,168.4375 L 90.96875,169.40625 L 94.03125,167.46875 L 94.03125,165.375 L 96.28125,164.5625 L 97.71875,164.5625 L 99.5,167.8125 L 103.375,168.125 L 105.3125,165.6875 L 107.40625,161.1875 L 110.15625,160.21875 L 111.59375,158.125 L 113.0625,159.5625 L 116.125,158.9375 L 117.09375,150.0625 L 118.0625,146.5 L 117.09375,144.5625 L 115.46875,143.9375 L 114.375,138.03125 L 113.125,139.4375 L 109.40625,139.03125 L 109.03125,141.1875 L 106.6875,141.375 L 106.5,138.65625 L 104.53125,138.0625 L 103.15625,139.625 L 103.15625,135.71875 L 100.8125,137.46875 L 97.3125,136.875 L 96.125,139.21875 L 88.90625,143.125 L 88.90625,145.09375 L 87.34375,145.09375 L 87.34375,141.5625 L 83.25,139.625 L 83.625,136.09375 L 79.9375,133.375 L 79.9375,130.0625 L 77.1875,129.46875 L 77.375,126.34375 L 75.25,126.15625 L 75.4375,124 L 71.53125,124 L 70.9375,125.9375 L 69.78125,123.21875 z ", "name" : "Côtes d'Armor"}, + "FR-23" : {"path": "M 256.125,267.875 L 254.96875,271 L 251.4375,270.8125 L 250.65625,270.40625 L 248.3125,270.625 L 246.5625,269.4375 L 243.1875,273.3125 L 243.25,276.1875 L 240.90625,280.84375 L 241.34375,283.1875 L 243.875,283.8125 L 245.59375,288.0625 L 247.28125,289.78125 L 246.65625,297.84375 L 250.25,296.78125 L 251.75,298.6875 L 249.40625,300.59375 L 249.40625,302.53125 L 251.3125,302.71875 L 254.71875,302.53125 L 255.78125,301.03125 L 256.625,301.03125 L 256.21875,303.59375 L 258.96875,304.84375 L 261.53125,306.5625 L 261.53125,307.625 L 260.03125,307.625 L 260.46875,310.15625 L 261.46875,310.78125 L 261.71875,310.375 L 264.90625,309.75 L 265.75,307.625 L 267.25,307.625 L 268.3125,309.09375 L 273.1875,309.09375 L 274.0625,310.375 L 275.96875,312.28125 L 278.3125,312.28125 L 279.5625,310.375 L 283.40625,310.375 L 285.375,308.84375 L 281.3125,304.78125 L 280.9375,303.03125 L 284.65625,300.875 L 286.8125,299.71875 L 287.375,296.96875 L 289.71875,295.21875 L 288.9375,291.5 L 287.375,289.5625 L 287,283.5 L 284.84375,278.4375 L 282.6875,277.65625 L 281.125,274.90625 L 279.75,276.65625 L 278.40625,274.90625 L 278.40625,272.5625 L 276.0625,269.25 L 269.625,270.03125 L 265.90625,269.0625 L 256.125,267.875 z ", "name" : "Creuse"}, + "FR-24" : {"path": "M 209.84375,310.46875 L 208.09375,313.59375 L 205.34375,313.96875 L 205.15625,318.65625 L 195.96875,324.90625 L 195.78125,331.75 L 192.25,335.25 L 190.3125,337.03125 L 186.40625,336.625 L 184.25,340.34375 L 183.6875,341.5625 L 184.71875,342.78125 L 186.65625,342.78125 L 187.71875,344.375 L 186.65625,347.21875 L 186.125,350.375 L 184.34375,351.4375 L 184.34375,352.5 L 185.0625,353.5625 L 185.0625,355.5 L 183.65625,357.28125 L 185.40625,358.15625 L 185.9375,359.59375 L 191.96875,359.40625 L 194.4375,356.40625 L 196.90625,358 L 194.96875,359.40625 L 195.125,363.28125 L 197.96875,365.25 L 198.3125,368.9375 L 201.3125,370 L 203.09375,368.40625 L 206.96875,368.40625 L 209.09375,366.65625 L 210.34375,366.84375 L 210.6875,368.25 L 214.59375,368.25 L 215.46875,367.1875 L 216.875,367.375 L 218.46875,369.125 L 218.46875,370.375 L 217.0625,371.25 L 217.59375,372.5 L 219.53125,372.65625 L 222,370.375 L 224.125,370.375 L 225.53125,371.96875 L 228.59375,373.25 L 228.78125,372.75 L 230.5625,371 L 230.75,368.0625 L 235.03125,367.6875 L 237.78125,363.78125 L 236.59375,363.375 L 236.40625,361.25 L 239.71875,360.84375 L 239.9375,358.90625 L 241.5,357.90625 L 243.25,354.78125 L 241.5,352.84375 L 241.5,350.6875 L 242.84375,349.53125 L 241.09375,346.78125 L 241.28125,342.5 L 237,342.6875 L 235.25,341.5 L 236.8125,339.5625 L 234.65625,337.8125 L 236.21875,335.84375 L 234.65625,335.0625 L 234.65625,332.34375 L 238.5625,328.8125 L 236.40625,327.0625 L 235.25,324.125 L 231.125,323.53125 L 229.75,322.5625 L 232.6875,321.1875 L 231.71875,319.84375 L 227.4375,319.25 L 226.4375,315.34375 L 220.1875,314.75 L 218.8125,316.71875 L 217.46875,317.09375 L 215.6875,314.75 L 216.5,312.59375 L 215.5,310.65625 L 209.84375,310.46875 z ", "name" : "Dordogne"}, + "FR-25" : {"path": "M 447.40625,199.71875 L 447.21875,199.9375 L 444.96875,199.9375 L 443.8125,201.53125 L 442.34375,202.375 L 442.34375,204.34375 L 438.6875,204.78125 L 436.71875,203.375 L 434.0625,203.78125 L 431.53125,205.75 L 429.71875,208.84375 L 427.90625,209.40625 L 427.0625,211.5 L 424.8125,211.90625 L 421.71875,214.4375 L 417.65625,214.3125 L 416.40625,215.28125 L 415.28125,215.28125 L 411.34375,218.5 L 409.5625,218.4375 L 409.53125,219.625 L 409.8125,221.71875 L 412.34375,223.40625 L 413.75,225.25 L 413.3125,227.1875 L 412.0625,230.15625 L 411.21875,232.09375 L 416.6875,233.9375 L 420.1875,233.65625 L 420.46875,236.59375 L 420.46875,240.53125 L 424.8125,241.9375 L 426.78125,242.46875 L 429.59375,245.15625 L 429.3125,247.40625 L 428.03125,249.21875 L 424.53125,250.34375 L 425.375,252.3125 L 425.78125,253.84375 L 424.25,255.375 L 424.40625,256.78125 L 426.78125,257 L 426.8125,256.8125 L 438.90625,245.46875 L 438.53125,236.09375 L 442.8125,233.96875 L 445.75,232.59375 L 448.46875,230.0625 L 448.6875,226.34375 L 451.40625,224.96875 L 457.65625,217.75 L 456.6875,215.40625 L 458.84375,214.4375 L 461.375,211.3125 L 460,209.9375 L 455.3125,210.90625 L 455.125,210.125 L 459.4375,205.15625 L 447.40625,199.71875 z ", "name" : "Doubs"}, + "FR-26" : {"path": "M 384.9375,329.28125 L 382.1875,331.1875 L 379.84375,332.03125 L 377.5,331.3125 L 377.5,339.28125 L 379,345.21875 L 380.0625,348.625 L 381.75,352.875 L 380.6875,355.625 L 378.78125,359.25 L 378.34375,361.375 L 376.4375,361.78125 L 377.5,366.6875 L 377.5,370.90625 L 374.9375,373.90625 L 374.3125,377.71875 L 375.375,379.40625 L 374.75,380.90625 L 374.75,382.40625 L 375.59375,382.59375 L 376.21875,383.46875 L 376,387.59375 L 378.59375,387.21875 L 379.75,388.59375 L 379.1875,392.5 L 379.96875,393.46875 L 382.875,390.53125 L 385.4375,390.34375 L 386,388.78125 L 382.6875,388.375 L 382.125,384.875 L 384.25,381.5625 L 387,381.34375 L 389.71875,383.90625 L 387,387.59375 L 387.78125,388.96875 L 391.6875,389.375 L 394.21875,387.21875 L 392.84375,390.15625 L 393.25,392.5 L 397.34375,392.875 L 402.8125,393.28125 L 403.59375,395.8125 L 406.53125,397.96875 L 409.0625,398.15625 L 410.8125,396.59375 L 411.8125,393.65625 L 413.375,395.03125 L 414.53125,396.40625 L 415.3125,389.15625 L 413.375,388.78125 L 412.1875,386.25 L 405.5625,384.46875 L 404.75,381.15625 L 407.125,379.59375 L 405.15625,378.21875 L 405.5625,376.46875 L 408.6875,376.65625 L 411.40625,378.03125 L 413.5625,375.5 L 411.40625,373.75 L 411.59375,371.40625 L 412.78125,367.6875 L 416.875,367.28125 L 420.1875,365.9375 L 420.53125,365.15625 L 417,364.75 L 415.75,363.6875 L 413.8125,363.5 L 411.90625,362 L 409.375,360.5 L 406.59375,360.5 L 405.53125,359.4375 L 405.34375,343.53125 L 404.6875,343.53125 L 403.84375,345 L 401.9375,346.28125 L 397.46875,345 L 394.0625,343.9375 L 392.59375,344.375 L 392.15625,343.3125 L 393.21875,340.34375 L 392.78125,337.34375 L 393.65625,335.21875 L 391.53125,332.25 L 388.5625,332.25 L 384.9375,329.28125 z ", "name" : "Drôme"}, + "FR-27" : {"path": "M 211,94.5625 L 209.3125,94.96875 L 207.0625,97.375 L 202.6875,97.9375 L 203.59375,105.1875 L 205.5625,105.78125 L 205.5625,106.5625 L 203.59375,107.71875 L 205.9375,111.03125 L 207.125,115.71875 L 206.90625,117.6875 L 205.15625,118.84375 L 205.34375,120.21875 L 207.3125,121 L 207.5,122.75 L 205.9375,127.25 L 207.5,129.21875 L 212.96875,129.40625 L 214.125,132.125 L 216.09375,134.09375 L 218.8125,135.0625 L 219.625,138 L 218.25,139.9375 L 221.09375,141.84375 L 223.90625,139.15625 L 226.625,139.15625 L 233.6875,135.46875 L 236,136.4375 L 240.90625,136.4375 L 242.0625,135.0625 L 242.0625,132.125 L 245.96875,130.1875 L 245.96875,127.0625 L 247.03125,126.1875 L 246.9375,125.3125 L 247.9375,124.3125 L 246.1875,123.9375 L 246.1875,122.375 L 245.1875,120.8125 L 245.96875,119.84375 L 251.4375,118.28125 L 252.8125,115.9375 L 254,111.625 L 255.4375,109.84375 L 255.75,107.53125 L 257.5,108.5 L 258.875,108.125 L 257.875,106.5625 L 257.3125,102.0625 L 255.5625,100.5 L 255.59375,100.375 L 252.5,100.03125 L 247.3125,97.375 L 242.8125,97.5 L 240.4375,99.59375 L 239.15625,103.25 L 234.125,103.8125 L 229.34375,105.21875 L 231.03125,106.34375 L 230.34375,108.03125 L 228.09375,108.03125 L 226.84375,105.34375 L 225.4375,105.34375 L 223.1875,103.65625 L 226.28125,102.6875 L 221.5,99.3125 L 216.75,99.59375 L 215.625,97.65625 L 212.9375,97.9375 L 211,94.5625 z ", "name" : "Eure"}, + "FR-28" : {"path": "M 247.15625,126.09375 L 245.96875,127.0625 L 245.96875,130.1875 L 242.0625,132.125 L 242.0625,135.0625 L 240.90625,136.4375 L 236,136.4375 L 233.6875,135.46875 L 226.625,139.15625 L 223.90625,139.15625 L 221.09375,141.84375 L 221.75,142.28125 L 221.9375,145.625 L 226.0625,149.125 L 226.4375,156.34375 L 224.5,158.6875 L 221.5625,159.28125 L 218.625,161.03125 L 219.03125,162.59375 L 220.375,164.375 L 220.375,169 L 220.78125,169.0625 L 223.5,171 L 222.5,172.25 L 224.4375,173.21875 L 227.53125,172.65625 L 229.34375,172.65625 L 229.21875,173.5 L 227.53125,174.46875 L 228.65625,175.3125 L 231.46875,175.3125 L 232.4375,177.5625 L 234.125,178.53125 L 235.375,181.34375 L 239.71875,182.46875 L 242.40625,182.1875 L 244.78125,179.9375 L 246.90625,180.53125 L 247.4375,179.375 L 247.3125,178.125 L 248.4375,177.28125 L 250.25,178.40625 L 251.375,177.5625 L 251.375,176.03125 L 252.90625,175.03125 L 254.3125,175.59375 L 255.5625,177 L 257.8125,175.75 L 260.1875,175.75 L 261.875,173.90625 L 262.875,170.28125 L 264.40625,170 L 264,166.34375 L 265.8125,164.8125 L 265.25,163.6875 L 265.46875,163.3125 L 264.9375,163.375 L 264.53125,158.125 L 264.125,157.53125 L 263.75,155 L 259.65625,154.21875 L 257.875,152.0625 L 257.3125,147.75 L 254.96875,147.375 L 254.5625,145.21875 L 251.84375,143.28125 L 250.46875,139.9375 L 251.84375,137.59375 L 250.46875,136.03125 L 250.46875,134.09375 L 251.25,131.9375 L 249.6875,130.375 L 249.09375,128.03125 L 247.15625,126.09375 z ", "name" : "Eure et Loir"}, + "FR-29" : {"path": "M 40.65625,129.0625 L 38.53125,131.40625 L 36.1875,130.4375 L 31.875,130.84375 L 31.09375,132.78125 L 28.5625,133.375 L 28.15625,131.21875 L 23.6875,131.8125 L 23.6875,133.1875 L 20.5625,133.375 L 19.1875,132.40625 L 17.625,133.1875 L 17.21875,135.53125 L 11.96875,135.71875 L 9.21875,139.03125 L 11.5625,140.78125 L 8.4375,143.34375 L 9.40625,145.09375 L 8.625,149.375 L 11.75,149.78125 L 12.9375,148.59375 L 13.53125,149.375 L 20.9375,148.40625 L 25.8125,144.90625 L 21.53125,149 L 21.90625,150.9375 L 25.8125,149.1875 L 25.03125,151.9375 L 29.34375,152.125 L 29.15625,153.28125 L 24.46875,153.09375 L 20.75,152.125 L 16.25,149.96875 L 13.53125,153.09375 L 17.03125,154.28125 L 16.84375,159.53125 L 17.8125,158.75 L 19.96875,155.4375 L 24.0625,157.78125 L 26.03125,158.1875 L 26.8125,161.3125 L 25.625,163.4375 L 23.09375,163.25 L 20.75,163.25 L 16.84375,163.84375 L 10.1875,164.21875 L 8.84375,166 L 10.78125,167.15625 L 12.9375,166.96875 L 14.6875,168.53125 L 17.21875,168.34375 L 21.34375,173.03125 L 22.3125,178.09375 L 20.9375,180.84375 L 25.03125,181.625 L 29.53125,181.40625 L 30.5,179.65625 L 28.75,177.3125 L 30.5,178.09375 L 32.28125,177.90625 L 35.40625,179.65625 L 37.34375,179.28125 L 37.34375,175.9375 L 38.125,179.28125 L 40.65625,183.375 L 46.125,183.75 L 46.34375,182.59375 L 47.6875,184.53125 L 51.03125,185.125 L 53.5625,185.125 L 53.71875,185.34375 L 54.65625,181.5 L 56.9375,181.5 L 58.0625,179.71875 L 59.5,179.71875 L 59.65625,176.84375 L 60.46875,175.875 L 58.875,173.75 L 57.90625,174.90625 L 55.46875,172.96875 L 50.46875,172.15625 L 49.65625,169.25 L 48.21875,165.53125 L 48.0625,164.09375 L 50.46875,162.15625 L 52.75,162.15625 L 56,160.59375 L 55.3125,158.125 L 56.28125,157.15625 L 55.96875,151.5 L 54.5,149.5625 L 54.5,147.15625 L 56.78125,146.5 L 54.34375,145.6875 L 54.1875,143.78125 L 55.3125,142.96875 L 56.9375,141.34375 L 55.15625,140.21875 L 55.3125,138.125 L 52.90625,137.96875 L 54.03125,132.71875 L 50.8125,130.84375 L 45.34375,131.03125 L 45.34375,134.9375 L 43.78125,134.9375 L 43.40625,133.1875 L 41.0625,133.5625 L 40.65625,129.0625 z ", "name" : "Finistère"}, + "FR-30" : {"path": "M 346.1875,381.03125 L 345.21875,382.90625 L 344,383.96875 L 341.6875,384.34375 L 344.5,387.34375 L 344.5,391.40625 L 345.75,391.75 L 344.34375,393.34375 L 344.34375,396.34375 L 342.03125,399.875 L 336.90625,399.34375 L 333.90625,396.53125 L 331.78125,397.0625 L 332.5,398.8125 L 331.625,400.0625 L 326.46875,401.125 L 320.4375,397.09375 L 319.28125,398.125 L 319.28125,400.90625 L 317.0625,401.4375 L 317.625,403.65625 L 320.375,404.21875 L 323.40625,404.21875 L 324.25,408.0625 L 320.65625,409.71875 L 320.65625,411.46875 L 323.46875,412.4375 L 323.46875,414.03125 L 324.71875,414.75 L 325.78125,413.84375 L 327.1875,413.84375 L 327.90625,415.4375 L 330.03125,415.4375 L 331.09375,411.71875 L 332.84375,411.71875 L 335.5,408.375 L 338.6875,408.71875 L 339.21875,413.3125 L 340.4375,414.75 L 342.40625,413.6875 L 345.75,415.4375 L 347,417.5625 L 352.8125,421.09375 L 354.9375,426.0625 L 354.9375,428.6875 L 351.21875,430.8125 L 348.8125,432.96875 L 351.8125,433.1875 L 351.8125,437.09375 L 356.28125,436.875 L 358.6875,437 L 360.4375,432.9375 L 366.78125,429.0625 L 365.40625,427.125 L 367.0625,422.71875 L 372.84375,423.53125 L 374.25,413.03125 L 381.96875,408.625 L 381.96875,406.125 L 376.15625,400.34375 L 376.15625,395.90625 L 372.84375,390.40625 L 365.9375,386.53125 L 365.40625,389.5625 L 362.625,389.84375 L 361.8125,386.8125 L 359.03125,387.34375 L 358.5,391.21875 L 356.28125,390.40625 L 351.59375,387.34375 L 349.375,388.46875 L 349.375,382.9375 L 346.1875,381.03125 z ", "name" : "Gard"}, + "FR-31" : {"path": "M 245,412.4375 L 242.15625,413.5 L 241.28125,414.90625 L 240.21875,413.6875 L 238.28125,413.5 L 237.90625,415.28125 L 236.6875,415.78125 L 238.4375,416.6875 L 237.21875,418.625 L 232.78125,419.875 L 230.84375,417.5625 L 229.09375,417.5625 L 227.65625,418.4375 L 222.53125,418.4375 L 222,418.65625 L 222.53125,420.5625 L 225.53125,423.5625 L 225.375,425.15625 L 227.65625,427.46875 L 229.09375,427.46875 L 229.78125,429.21875 L 231.5625,429.40625 L 232.09375,431 L 230.3125,431.71875 L 226.59375,433.3125 L 224.84375,437.375 L 223.4375,441.59375 L 222.53125,442.84375 L 219.71875,440.90625 L 213.15625,440.375 L 209.625,444.96875 L 207.6875,446.03125 L 206.4375,447.78125 L 205.03125,449.90625 L 205.03125,451.15625 L 202.75,452.03125 L 200.96875,455.03125 L 200.78125,456.625 L 203.96875,458.9375 L 204.5,461.21875 L 203.4375,463 L 205.5625,462.28125 L 206.625,463.1875 L 207.5,466.875 L 205.03125,468.3125 L 205.21875,470.25 L 203.96875,471.46875 L 202.21875,470.59375 L 200.25,470.59375 L 200.5,481.09375 L 208.4375,481.625 L 208.84375,472.03125 L 211.5625,472.4375 L 215.59375,474.78125 L 217.25,473.25 L 216.53125,472.1875 L 216.53125,468.65625 L 218.28125,466.53125 L 222.90625,465.28125 L 223.59375,462.65625 L 222.53125,461.9375 L 222.375,458.5625 L 226.4375,456.09375 L 228.71875,455.9375 L 231.03125,456.625 L 232.96875,458.40625 L 234.21875,458.5625 L 235.28125,456.8125 L 234.375,455.5625 L 232.78125,455.03125 L 232.625,454.5 L 233.84375,452.75 L 238.09375,452.375 L 238.625,451.34375 L 237.90625,450.09375 L 235.4375,448.3125 L 235.96875,447.25 L 237.21875,446.375 L 238.4375,446.71875 L 240.40625,449.375 L 240.5625,451.15625 L 243.9375,451.5 L 244.625,449.90625 L 243.03125,447.96875 L 244.09375,448.3125 L 248,450.09375 L 250.125,449.75 L 251.6875,449.09375 L 251.3125,448.6875 L 253.8125,447.5625 L 254.34375,444.53125 L 257.40625,443.15625 L 256.5625,441.21875 L 259.34375,438.71875 L 260.71875,441.21875 L 264.84375,439.84375 L 265.625,439.71875 L 265.6875,438.4375 L 265.6875,435.9375 L 263.5625,436.3125 L 260.90625,435.59375 L 258.59375,432.78125 L 257.71875,431.53125 L 253.125,429.59375 L 252.0625,428 L 253.46875,427.46875 L 253.46875,425.53125 L 252.0625,423.9375 L 250.28125,421.09375 L 250.125,418.625 L 249.59375,418.28125 L 247.46875,415.78125 L 246.59375,413.15625 L 245,412.4375 z ", "name" : "Haute Garonne"}, + "FR-32" : {"path": "M 207.875,401.875 L 202.03125,402.4375 L 200.46875,405.1875 L 196.9375,405.5625 L 193.625,406.15625 L 192.25,404.21875 L 189.125,407.34375 L 186.8125,405.375 L 185.4375,408.3125 L 185.625,410.84375 L 183.46875,411.4375 L 182.5,410.0625 L 181.53125,407.125 L 178.78125,409.46875 L 176.84375,408.6875 L 174.6875,409.09375 L 172.75,411.4375 L 175.0625,415.34375 L 173.5,416.90625 L 174.09375,420.21875 L 172.15625,422.75 L 170.78125,426.46875 L 172.34375,429.21875 L 177.28125,429.5625 L 179.21875,428.53125 L 182.21875,428.53125 L 182.0625,431.875 L 184.34375,433.125 L 186.65625,433.46875 L 187.71875,436.3125 L 188.25,436.84375 L 187.90625,438.59375 L 187.1875,439.3125 L 189.3125,440.71875 L 189.46875,442.3125 L 192.125,442.3125 L 192.84375,441.59375 L 195.125,441.59375 L 195.84375,443.1875 L 198.3125,443.1875 L 199.03125,444.625 L 203.8125,444.625 L 207.375,446.46875 L 207.6875,446.03125 L 209.625,444.96875 L 213.15625,440.375 L 219.71875,440.90625 L 222.53125,442.84375 L 223.4375,441.59375 L 224.84375,437.375 L 226.59375,433.3125 L 230.3125,431.71875 L 232.09375,431 L 231.5625,429.40625 L 229.78125,429.21875 L 229.09375,427.46875 L 227.65625,427.46875 L 225.375,425.15625 L 225.53125,423.5625 L 222.53125,420.5625 L 222,418.65625 L 220.0625,419.5 L 219.53125,418.4375 L 220.78125,416.5 L 219.34375,415.09375 L 219.34375,412.625 L 218.125,411.375 L 214.21875,411.1875 L 214.21875,408.90625 L 216.34375,407.3125 L 216.34375,405.53125 L 218.65625,404.46875 L 217.40625,403.78125 L 216,404.46875 L 213.15625,404.46875 L 212.28125,403.65625 L 211.8125,403.8125 L 210.8125,404.78125 L 207.875,401.875 z ", "name" : "Gers"}, + "FR-33" : {"path": "M 141.25,315.21875 L 138.125,319.90625 L 137.15625,336.3125 L 134.625,352.90625 L 132.84375,365.78125 L 132.65625,369.125 L 134.03125,364.625 L 136.75,361.09375 L 140.65625,364.625 L 141.0625,365.78125 L 142.21875,367.34375 L 137.34375,367.5625 L 136.5625,366.375 L 134.625,367.15625 L 134.21875,370.09375 L 132.0625,373.03125 L 132.0625,377.5 L 132.03125,377.6875 L 133.625,377.625 L 139.8125,374.4375 L 143.15625,375.65625 L 143,377.96875 L 141.5625,379.71875 L 143.15625,380.78125 L 146.53125,379.375 L 148.8125,380.96875 L 150.25,380.78125 L 152.34375,379.03125 L 155.90625,378.5 L 157.125,379.5625 L 158.1875,380.4375 L 158.1875,381.5 L 157.3125,382.5625 L 160.5,383.4375 L 162.4375,384.6875 L 162.625,386.28125 L 164.375,386.4375 L 166.84375,389.09375 L 167.5625,393.53125 L 171.09375,394.75 L 174.46875,394.59375 L 174.46875,393.53125 L 174.09375,390 L 175.15625,390.34375 L 177.15625,392.78125 L 180.28125,392.28125 L 181.71875,390.875 L 181.53125,388.9375 L 180.28125,387.875 L 180.65625,385.90625 L 182.59375,385.90625 L 184.53125,384.6875 L 183.65625,382.90625 L 183.125,380.25 L 184.53125,377.78125 L 187.53125,373.1875 L 189.3125,371.0625 L 190.90625,370.53125 L 191.25,368.78125 L 189.125,368.59375 L 188.25,366.65625 L 188.9375,364.71875 L 191.4375,364.1875 L 193.1875,363.65625 L 195.25,363.375 L 195.125,363.28125 L 194.96875,359.40625 L 196.90625,358 L 194.4375,356.40625 L 191.96875,359.40625 L 185.9375,359.59375 L 185.40625,358.15625 L 183.65625,357.28125 L 185.0625,355.5 L 185.0625,353.5625 L 184.34375,352.5 L 184.34375,351.4375 L 186.125,350.375 L 186.65625,347.21875 L 187.71875,344.375 L 186.65625,342.78125 L 184.71875,342.78125 L 183.6875,341.5625 L 182.6875,343.65625 L 180.75,342.28125 L 178,343.65625 L 175.65625,343.28125 L 171.1875,338.78125 L 168.4375,338.59375 L 167.65625,332.34375 L 162.5625,331.75 L 162.375,328.8125 L 161.40625,329.78125 L 155.625,329.78125 L 155.90625,331.03125 L 157.28125,336.6875 L 157.65625,342.34375 L 156.6875,343.90625 L 155.71875,339.21875 L 152.96875,328.5 L 143,319.5 L 143.21875,315.40625 L 141.25,315.21875 z ", "name" : "Gironde"}, + "FR-34" : {"path": "M 335.5,408.375 L 332.84375,411.71875 L 331.09375,411.71875 L 330.03125,415.4375 L 327.90625,415.4375 L 327.1875,413.84375 L 325.78125,413.84375 L 324.71875,414.75 L 323.46875,414.03125 L 323.46875,412.4375 L 320.65625,411.46875 L 320.65625,412.5 L 317.34375,413.03125 L 315.6875,414.4375 L 316.21875,417.75 L 313.1875,417.75 L 310.15625,416.09375 L 308.5,416.09375 L 308.5,418.03125 L 308.78125,423.8125 L 305.46875,423.8125 L 303.8125,423.8125 L 302.6875,426.03125 L 295.5,428.5 L 292.75,426.59375 L 291.09375,429.0625 L 290.28125,431.8125 L 293.3125,434.59375 L 292.1875,438.1875 L 288,439.5 L 288.84375,441.78125 L 287.0625,443.90625 L 288.125,446.375 L 290.25,447.96875 L 292.71875,446.375 L 294.5,450.09375 L 298.1875,448.84375 L 298.375,445.3125 L 300.84375,445.3125 L 300.3125,443.1875 L 301.375,442.65625 L 301.75,445.65625 L 303.84375,446.90625 L 305.625,446.71875 L 307.9375,450.09375 L 310.40625,450.28125 L 311.28125,453.09375 L 313.78125,453.1875 L 313.90625,452.125 L 320.9375,449.96875 L 321.71875,448.21875 L 327.1875,448.03125 L 328.9375,445.875 L 339.5,437.46875 L 346.125,432.78125 L 348.8125,432.96875 L 351.21875,430.8125 L 354.9375,428.6875 L 354.9375,426.0625 L 352.8125,421.09375 L 347,417.5625 L 345.75,415.4375 L 342.40625,413.6875 L 340.4375,414.75 L 339.21875,413.3125 L 338.6875,408.71875 L 335.5,408.375 z ", "name" : "Hérault"}, + "FR-35" : {"path": "M 116.25,135.90625 L 114.375,138.03125 L 115.46875,143.9375 L 117.09375,144.5625 L 118.0625,146.5 L 117.09375,150.0625 L 116.125,158.9375 L 113.0625,159.5625 L 111.59375,158.125 L 110.15625,160.21875 L 107.40625,161.1875 L 105.3125,165.6875 L 104.03125,167.3125 L 104.5,169.40625 L 103.6875,172.625 L 102.25,173.9375 L 102.25,175.21875 L 103.21875,175.53125 L 105.96875,175.53125 L 108.375,177 L 110,179.90625 L 108.53125,181.84375 L 109.03125,183.75 L 111.125,183.75 L 111.28125,185.6875 L 109.65625,187.625 L 107.90625,188.4375 L 109.03125,189.09375 L 109.34375,190.0625 L 107.5625,191.5 L 109.625,195.375 L 113.5625,193.28125 L 125.65625,192.6875 L 126.4375,190.53125 L 128.40625,188.59375 L 132.6875,188 L 132.875,185.84375 L 135.8125,186.25 L 137.5625,188.59375 L 141.5,189.5625 L 142.25,188 L 143.25,184.46875 L 145.78125,178.21875 L 147.15625,177.4375 L 150.46875,177.84375 L 150.46875,172.5625 L 149.09375,171.1875 L 149.09375,165.53125 L 148.5,163.59375 L 148.5,160.46875 L 150.46875,158.5 L 150.46875,154.59375 L 149.5,153.8125 L 149.6875,148.34375 L 148.125,147.5625 L 145.78125,147.5625 L 143.8125,146 L 141.6875,148.53125 L 139.9375,148.75 L 138.375,150.875 L 136.8125,150.5 L 133.46875,147.5625 L 132.3125,143.84375 L 131.71875,141.375 L 122.125,141.375 L 118.59375,139.21875 L 120.9375,136.09375 L 116.25,135.90625 z ", "name" : "Ille et Vilaine"}, + "FR-36" : {"path": "M 254.71875,221.4375 L 253.46875,221.875 L 250.9375,221.71875 L 248,222.71875 L 247.3125,224.25 L 247.03125,223.6875 L 243.65625,223.84375 L 241.96875,225.25 L 240,225.53125 L 239.71875,226.5 L 241.28125,228.59375 L 240.84375,230.4375 L 239.03125,230.5625 L 239.03125,232.09375 L 237.625,233.375 L 236.09375,235.90625 L 234.6875,234.625 L 232.59375,234.21875 L 229.5,235.34375 L 228.78125,238.84375 L 227.8125,241.65625 L 226.28125,249.625 L 224.15625,251.59375 L 222.4375,251.75 L 222.9375,252.25 L 222.9375,255.96875 L 222.15625,258.3125 L 225.875,261.25 L 227.8125,263.1875 L 230.9375,263.59375 L 232.125,267.6875 L 234.25,268.84375 L 233.875,271.78125 L 232.3125,272.0625 L 232.875,272.1875 L 237.78125,272.5625 L 239.53125,270.8125 L 242.65625,273.9375 L 246.5625,269.4375 L 248.3125,270.625 L 250.65625,270.40625 L 251.4375,270.8125 L 254.96875,271 L 256.125,267.875 L 265.90625,269.0625 L 269.625,270.03125 L 271.3125,269.84375 L 271.40625,268.28125 L 273.375,266.3125 L 272.96875,264.625 L 271.84375,262.40625 L 272.25,261.5625 L 272.40625,259.03125 L 273.09375,258.1875 L 273.25,257.625 L 271.5625,256.09375 L 271,254.125 L 268.34375,252.71875 L 268.34375,251.03125 L 270.28125,249.90625 L 270.28125,248.78125 L 268.46875,247.25 L 267.90625,246.28125 L 269.3125,245.5625 L 269.1875,244.3125 L 271.40625,242.46875 L 271.28125,241.65625 L 269.46875,241.65625 L 268.34375,240.375 L 268.34375,239.6875 L 269.3125,238 L 269.3125,236.75 L 267.0625,233.78125 L 267.5,231.125 L 266.21875,230.15625 L 263.5625,230.28125 L 261.46875,231.125 L 258.65625,230.71875 L 257.25,229.59375 L 256.96875,228.75 L 259.21875,226.90625 L 259.375,224.6875 L 256.40625,223 L 254.71875,221.4375 z ", "name" : "Indre"}, + "FR-37" : {"path": "M 212.1875,196.875 L 212.5625,197.75 L 206.90625,199.3125 L 205.5625,201.28125 L 203.1875,199.71875 L 204.375,203.625 L 202.21875,203.625 L 198.3125,200.875 L 196.375,204.78125 L 197.34375,205.96875 L 197.34375,207.125 L 195.375,209.6875 L 195.59375,213.96875 L 192.46875,217.6875 L 190.25,225.6875 L 190.5,225.6875 L 191.28125,228.8125 L 195,229.59375 L 195,231.9375 L 199.6875,233.3125 L 199.6875,237.03125 L 199.5,239.375 L 205.34375,239.375 L 210.4375,238.1875 L 210.03125,236.03125 L 211.59375,235.0625 L 213.15625,237.21875 L 214.53125,237.8125 L 215.6875,242.5 L 219.03125,246 L 219.40625,248.75 L 222.4375,251.75 L 224.15625,251.59375 L 226.28125,249.625 L 227.8125,241.65625 L 228.78125,238.84375 L 229.5,235.34375 L 232.59375,234.21875 L 234.6875,234.625 L 236.09375,235.90625 L 237.625,233.375 L 239.03125,232.09375 L 239.03125,230.5625 L 240.84375,230.4375 L 241.28125,228.59375 L 239.71875,226.5 L 239.96875,225.625 L 238.875,224.6875 L 235.9375,220.34375 L 232.15625,220.34375 L 231.03125,218.65625 L 231.03125,211.625 L 229.5,207.5625 L 229.21875,202.53125 L 227.25,202.375 L 225,200.6875 L 224.4375,200.6875 L 222.46875,202.09375 L 221.21875,201.25 L 220.9375,199.3125 L 222.34375,198.59375 L 222.46875,197.90625 L 221.65625,197.1875 L 212.1875,196.875 z ", "name" : "Indre et Loire"}, + "FR-38" : {"path": "M 397.90625,298.6875 L 396.625,300.1875 L 395.34375,304 L 392.78125,305.28125 L 390.03125,302.71875 L 388.125,302.71875 L 387.90625,305.5 L 390.6875,307.84375 L 386.4375,313.34375 L 380.90625,314.625 L 376.65625,316.125 L 379.40625,318.875 L 380.0625,320.15625 L 375.8125,322.28125 L 375.375,328.4375 L 375.25,328.5 L 376.4375,330.96875 L 379.84375,332.03125 L 382.1875,331.1875 L 384.9375,329.28125 L 388.5625,332.25 L 391.53125,332.25 L 393.65625,335.21875 L 392.78125,337.34375 L 393.21875,340.34375 L 392.15625,343.3125 L 392.59375,344.375 L 394.0625,343.9375 L 397.46875,345 L 401.9375,346.28125 L 403.84375,345 L 404.6875,343.53125 L 405.34375,343.53125 L 405.53125,359.4375 L 406.59375,360.5 L 409.375,360.5 L 411.90625,362 L 413.8125,363.5 L 415.75,363.6875 L 417,364.75 L 420.53125,365.15625 L 420.78125,364.5625 L 419.21875,363.78125 L 419.21875,361.4375 L 424.09375,361.4375 L 425.65625,359.875 L 424.6875,358.125 L 427.21875,356.15625 L 429,356.9375 L 431.53125,354.78125 L 436,355.5625 L 437.5625,353.8125 L 441.28125,354 L 441.28125,349.71875 L 439.71875,348.9375 L 438.9375,346.40625 L 434.84375,346 L 434.25,345.03125 L 435.03125,340.9375 L 436.40625,339.75 L 435.28125,338.21875 L 433.15625,336.9375 L 431.875,338.21875 L 432.3125,336.5 L 432.3125,334.8125 L 430.59375,333.09375 L 431.46875,329.0625 L 433.375,328 L 433.15625,325.25 L 429.125,321.21875 L 427.625,321.21875 L 426.5625,322.6875 L 424.03125,319.3125 L 422.53125,319.5 L 421.25,322.28125 L 422.125,323.96875 L 421.46875,324.625 L 419.78125,323.34375 L 414.875,322.28125 L 412.5625,318.03125 L 412.5625,316.3125 L 410.21875,313.78125 L 409.96875,312.6875 L 402.15625,303.15625 L 401.28125,300.40625 L 399.59375,298.90625 L 397.90625,298.6875 z ", "name" : "Isère"}, + "FR-39" : {"path": "M 401.15625,217.53125 L 401.25,218.0625 L 400.46875,218.0625 L 400.0625,221.1875 L 399.5,223.34375 L 399.875,224.71875 L 398.71875,226.28125 L 397.53125,227.84375 L 397.53125,229.40625 L 394.21875,230.96875 L 393.25,232.53125 L 393.625,233.6875 L 393.8125,234.6875 L 392.46875,235.46875 L 392.25,238 L 393.8125,238.1875 L 395.59375,241.125 L 397.75,241.125 L 398.90625,242.5 L 400.28125,242.5 L 399.875,244.0625 L 395.375,244.625 L 395.78125,246.1875 L 397.34375,247.1875 L 397.34375,249.125 L 396.75,249.71875 L 397.9375,251.28125 L 399.6875,254.40625 L 398.90625,257.71875 L 396.9375,259.09375 L 397.15625,261.8125 L 399.5,262.59375 L 400.28125,263.78125 L 398.3125,265.34375 L 393.1875,265.96875 L 395.59375,266.90625 L 399.5,272.375 L 402.03125,273.53125 L 402.03125,276.28125 L 404.96875,275.875 L 408.6875,271.78125 L 411.8125,273.34375 L 411.8125,275.6875 L 417.46875,275.6875 L 425.59375,266.75 L 425.25,266.5625 L 425.625,262.46875 L 428.5625,258.96875 L 426.59375,258.1875 L 426.78125,257 L 424.40625,256.78125 L 424.25,255.375 L 425.78125,253.84375 L 425.375,252.3125 L 424.53125,250.34375 L 428.03125,249.21875 L 429.3125,247.40625 L 429.59375,245.15625 L 426.78125,242.46875 L 424.8125,241.9375 L 420.46875,240.53125 L 420.46875,236.59375 L 420.1875,233.65625 L 416.6875,233.9375 L 411.21875,232.09375 L 412.0625,230.15625 L 413.3125,227.1875 L 413.75,225.25 L 412.34375,223.40625 L 409.8125,221.71875 L 409.53125,219.625 L 409.5625,218.4375 L 407.84375,218.375 L 406.875,219.34375 L 404.34375,219.34375 L 402.65625,217.9375 L 401.15625,217.53125 z ", "name" : "Jura"}, + "FR-40" : {"path": "M 139.8125,374.4375 L 133.625,377.625 L 132.03125,377.6875 L 128.5625,396.25 L 124.0625,413.4375 L 122.6875,420.09375 L 121.53125,424.78125 L 118.625,429.78125 L 124.25,432.59375 L 129.375,432.25 L 132.375,429.59375 L 134.84375,431.53125 L 133.4375,432.9375 L 134.5,433.3125 L 135.375,432.0625 L 139.8125,432.40625 L 142.28125,430.46875 L 146.875,430.65625 L 148.65625,429.75 L 151.46875,429.75 L 152.1875,430.65625 L 154.46875,429.9375 L 156.59375,431.53125 L 159.4375,430.65625 L 163.15625,429.40625 L 163.6875,430.28125 L 169.34375,430.46875 L 172.15625,428.875 L 170.78125,426.46875 L 172.15625,422.75 L 174.09375,420.21875 L 173.5,416.90625 L 175.0625,415.34375 L 172.75,411.4375 L 174.6875,409.09375 L 176.84375,408.6875 L 178.78125,409.46875 L 181.53125,407.125 L 182.5,410.0625 L 183.46875,411.4375 L 185.625,410.84375 L 185.4375,408.3125 L 186.0625,406.9375 L 185.59375,405.71875 L 186.125,401.84375 L 188.25,399.71875 L 187.1875,398.46875 L 184.875,398.28125 L 182.21875,397.25 L 178.34375,397.59375 L 177.625,393.34375 L 175.15625,390.34375 L 174.09375,390 L 174.46875,393.53125 L 174.46875,394.59375 L 171.09375,394.75 L 167.5625,393.53125 L 166.84375,389.09375 L 164.375,386.4375 L 162.625,386.28125 L 162.4375,384.6875 L 160.5,383.4375 L 157.3125,382.5625 L 158.1875,381.5 L 158.1875,380.4375 L 157.125,379.5625 L 155.90625,378.5 L 152.34375,379.03125 L 150.25,380.78125 L 148.8125,380.96875 L 146.53125,379.375 L 143.15625,380.78125 L 141.5625,379.71875 L 143,377.96875 L 143.15625,375.65625 L 139.8125,374.4375 z ", "name" : "Landes"}, + "FR-41" : {"path": "M 222.5,172.25 L 221.1875,173.9375 L 219.625,176.65625 L 221.5625,178.4375 L 221.375,182.53125 L 220.59375,185.25 L 218.625,185.25 L 218.625,188.96875 L 215.90625,192.5 L 212.96875,193.65625 L 211.59375,195.40625 L 212.1875,196.875 L 221.65625,197.1875 L 222.46875,197.90625 L 222.34375,198.59375 L 220.9375,199.3125 L 221.21875,201.25 L 222.46875,202.09375 L 224.4375,200.6875 L 225,200.6875 L 227.25,202.375 L 229.21875,202.53125 L 229.5,207.5625 L 231.03125,211.625 L 231.03125,218.65625 L 232.15625,220.34375 L 235.9375,220.34375 L 238.875,224.6875 L 239.96875,225.625 L 240,225.53125 L 241.96875,225.25 L 243.65625,223.84375 L 247.03125,223.6875 L 247.3125,224.25 L 248,222.71875 L 250.9375,221.71875 L 253.46875,221.875 L 254.71875,221.4375 L 256.40625,223 L 259.375,224.6875 L 261.875,224.53125 L 261.75,222 L 262.875,220.75 L 264,220.625 L 264.96875,221.71875 L 268.90625,221.3125 L 271.40625,219.90625 L 271.125,218.9375 L 270.4375,218.09375 L 270.5625,216.25 L 272.40625,212.90625 L 274.78125,211.90625 L 274.78125,209.8125 L 275.34375,208.5625 L 273.8125,208 L 272.8125,205.875 L 270.28125,205.1875 L 270.15625,204.34375 L 272.6875,202.25 L 275.53125,200.84375 L 273.9375,198.46875 L 266.78125,198.1875 L 265.8125,199.3125 L 263.84375,199.3125 L 263.15625,198.59375 L 260.0625,198.1875 L 259.21875,200 L 257.25,200.5625 L 255.4375,198.46875 L 255,196.0625 L 253.34375,194.65625 L 250.8125,194.375 L 248.96875,193.125 L 248.96875,191.875 L 247.875,189.1875 L 250.09375,186.96875 L 249.8125,185.84375 L 248.84375,184.71875 L 247.71875,184.71875 L 247.71875,183.71875 L 248.84375,181.78125 L 248.96875,180.65625 L 247.3125,180.65625 L 244.78125,179.9375 L 242.40625,182.1875 L 239.71875,182.46875 L 235.375,181.34375 L 234.125,178.53125 L 232.4375,177.5625 L 231.46875,175.3125 L 228.65625,175.3125 L 227.53125,174.46875 L 229.21875,173.5 L 229.34375,172.65625 L 227.53125,172.65625 L 224.4375,173.21875 L 222.5,172.25 z ", "name" : "Loir et Cher"}, + "FR-42" : {"path": "M 339.53125,278.03125 L 336,278.625 L 335.4375,280.78125 L 336.8125,283.5 L 337.1875,294.625 L 332.5,294.84375 L 332.3125,296.59375 L 335.4375,299.125 L 333.6875,300.875 L 333.09375,305.1875 L 335.4375,308.3125 L 337.5625,313.375 L 342.65625,316.71875 L 344.40625,323.15625 L 340.6875,326.65625 L 341.28125,329 L 346.75,330.78125 L 351.0625,327.25 L 353.1875,327.0625 L 359.4375,329.78125 L 359.0625,333.5 L 362.1875,333.3125 L 364.65625,336.15625 L 366.46875,335.65625 L 369.84375,335.03125 L 370.71875,331.1875 L 375.375,328.4375 L 375.8125,322.28125 L 375.96875,322.1875 L 373.6875,321.84375 L 371.5625,322.6875 L 369.84375,321.625 L 371.96875,319.09375 L 371.34375,317.1875 L 364.75,316.125 L 359.21875,311.03125 L 359.21875,309.3125 L 360.5,308.25 L 360.5,306.78125 L 359.03125,305.90625 L 360.28125,304 L 360.28125,301.25 L 357.75,298.90625 L 357.75,296.5625 L 356.03125,294.875 L 356.03125,292.96875 L 355.1875,289.78125 L 356.46875,288.5 L 356.6875,284.6875 L 360.71875,284.6875 L 361.78125,283.40625 L 360.5,281.28125 L 360.5,279.375 L 359.4375,278.53125 L 358.6875,282.53125 L 356.53125,282.53125 L 354.96875,284.09375 L 353.78125,282.90625 L 347.53125,281.9375 L 345.1875,283.3125 L 343.625,283.3125 L 343.25,281.9375 L 340.3125,281.34375 L 340.125,278.21875 L 339.53125,278.03125 z ", "name" : "Loire"}, + "FR-43" : {"path": "M 317.8125,326.34375 L 316.40625,327.0625 L 316.40625,328.28125 L 314.28125,328.46875 L 312.34375,330.0625 L 308.8125,330.59375 L 308,331.75 L 308.625,331.8125 L 309.5,334.3125 L 313.9375,334.3125 L 314.8125,337.46875 L 316.0625,338.71875 L 316.40625,342.4375 L 317.46875,343.84375 L 319.59375,344.03125 L 318.34375,345.09375 L 317.28125,345.4375 L 318.1875,346.3125 L 317.125,347.90625 L 319.25,349.15625 L 320.3125,350.75 L 320.3125,352.40625 L 320.78125,352.25 L 324.3125,361.25 L 329.375,359.6875 L 329.75,357.34375 L 331.71875,357.34375 L 332.5,360.0625 L 336.125,359.1875 L 340.625,364.9375 L 343.4375,360.46875 L 348.5,356.75 L 353.1875,356.75 L 354.75,351.875 L 357.875,351.65625 L 358.09375,347.96875 L 361,347.96875 L 360.4375,346.59375 L 359.65625,344.0625 L 360.8125,342.09375 L 363.5625,340.9375 L 364.71875,336.25 L 362.1875,333.3125 L 359.0625,333.5 L 359.4375,329.78125 L 353.1875,327.0625 L 351.0625,327.25 L 346.75,330.78125 L 342.8125,329.5 L 342.03125,330.25 L 339.5625,329.53125 L 337.8125,327.75 L 336.75,329.875 L 333.71875,329.71875 L 332.3125,328.46875 L 331.25,330.9375 L 329.3125,330.0625 L 328.0625,327.75 L 326.46875,327.75 L 325.0625,326.53125 L 322.9375,327.40625 L 320.46875,327.59375 L 319.0625,326.6875 L 318.1875,327.21875 L 317.8125,326.34375 z ", "name" : "Haute Loire"}, + "FR-44" : {"path": "M 132.875,185.84375 L 132.6875,188 L 128.40625,188.59375 L 126.4375,190.53125 L 125.65625,192.6875 L 113.5625,193.28125 L 108.46875,196 L 108.28125,201.46875 L 102.8125,203.625 L 99.09375,205.5625 L 95.96875,205.5625 L 94.8125,204.21875 L 93.0625,205.96875 L 92.21875,206.125 L 93.21875,206.8125 L 89.5,210.125 L 90.28125,210.90625 L 91.0625,212.46875 L 89.09375,215.21875 L 91.25,216.375 L 94.96875,217.15625 L 95.34375,215.59375 L 97.5,218.34375 L 101.03125,218.34375 L 103.5625,215.59375 L 106.875,215.59375 L 103.375,217.34375 L 103.5625,219.3125 L 104.34375,221.0625 L 102.1875,223.21875 L 99.84375,223.21875 L 100.25,226.15625 L 104.53125,225.375 L 109.625,230.0625 L 109.375,230.375 L 113.0625,232.78125 L 113.875,234.71875 L 117.25,236.1875 L 119.84375,236.5 L 120.96875,239.5625 L 125,240.53125 L 127.71875,241.03125 L 129.1875,239.40625 L 127.71875,237.3125 L 127.09375,232.78125 L 128.375,231.34375 L 130.15625,231.34375 L 130.96875,233.125 L 130.46875,236.34375 L 131.59375,237.15625 L 134.5,236.1875 L 135.46875,232.96875 L 134.1875,231.65625 L 137.40625,231.65625 L 138.53125,229.5625 L 139.65625,229.71875 L 142.25,232.15625 L 144.125,232.40625 L 144.1875,230.375 L 142.5625,228.28125 L 141.125,228.28125 L 140.625,228.4375 L 139.65625,227.96875 L 140.46875,227.15625 L 140.46875,225.6875 L 142.09375,225.21875 L 143.0625,222.96875 L 142.25,222.15625 L 142.09375,219.40625 L 140,219.40625 L 137.90625,216.8125 L 137.90625,214.90625 L 140.15625,213.75 L 144.1875,212.96875 L 150.46875,213.125 L 152.40625,211.8125 L 151.75,207.78125 L 148.84375,205.0625 L 145.3125,205.53125 L 144.34375,204.71875 L 144.1875,201.84375 L 146.75,199.5625 L 144.8125,197.15625 L 143.53125,193.75 L 141.4375,192.46875 L 141.4375,190.21875 L 141.21875,189.5 L 137.5625,188.59375 L 135.8125,186.25 L 132.875,185.84375 z ", "name" : "Loire Atlantique"}, + "FR-45" : {"path": "M 273.71875,160.46875 L 271.1875,162.8125 L 265.46875,163.3125 L 265.25,163.6875 L 265.8125,164.8125 L 264,166.34375 L 264.40625,170 L 262.875,170.28125 L 261.875,173.90625 L 260.1875,175.75 L 257.8125,175.75 L 255.5625,177 L 254.3125,175.59375 L 252.90625,175.03125 L 251.375,176.03125 L 251.375,177.5625 L 250.25,178.40625 L 248.4375,177.28125 L 247.3125,178.125 L 247.4375,179.375 L 246.90625,180.53125 L 247.3125,180.65625 L 248.96875,180.65625 L 248.84375,181.78125 L 247.71875,183.71875 L 247.71875,184.71875 L 248.84375,184.71875 L 249.8125,185.84375 L 250.09375,186.96875 L 247.875,189.1875 L 248.96875,191.875 L 248.96875,193.125 L 250.8125,194.375 L 253.34375,194.65625 L 255,196.0625 L 255.4375,198.46875 L 257.25,200.5625 L 259.21875,200 L 260.0625,198.1875 L 263.15625,198.59375 L 263.84375,199.3125 L 265.8125,199.3125 L 266.78125,198.1875 L 273.9375,198.46875 L 275.625,200.96875 L 277.59375,201.8125 L 279.28125,203.375 L 281.375,203.09375 L 281.9375,202.375 L 283.1875,202.375 L 284.75,204.34375 L 287.96875,204.5 L 288.8125,205.59375 L 291.0625,208.6875 L 292.03125,209.53125 L 293.28125,209.40625 L 293.4375,206.59375 L 294,206.3125 L 294.84375,206.4375 L 296.25,208.28125 L 297.21875,208.6875 L 299.21875,207.875 L 298.90625,207.53125 L 298.71875,205.5625 L 302.625,204.40625 L 302.03125,202.25 L 301.4375,199.125 L 298.90625,195.625 L 298.3125,193.46875 L 302.21875,193.46875 L 304.96875,191.5 L 305.34375,188.59375 L 303.59375,186.625 L 308.6875,182.34375 L 308.6875,178.8125 L 306.125,176.09375 L 305.15625,172.96875 L 301.625,169.625 L 296.75,172.375 L 296.375,170.8125 L 294.21875,170.625 L 293.625,172.1875 L 291.6875,172.5625 L 286.40625,172.375 L 284.25,173.75 L 282.5,172.1875 L 285.625,170.03125 L 285.4375,166.71875 L 283.09375,165.53125 L 281.125,162.59375 L 275.875,162.21875 L 273.71875,160.46875 z ", "name" : "Loiret"}, + "FR-46" : {"path": "M 247.46875,347.3125 L 243.3125,349.25 L 242.71875,349.34375 L 242.84375,349.53125 L 241.5,350.6875 L 241.5,352.84375 L 243.25,354.78125 L 241.5,357.90625 L 239.9375,358.90625 L 239.71875,360.84375 L 236.40625,361.25 L 236.59375,363.375 L 237.78125,363.78125 L 235.03125,367.6875 L 230.75,368.0625 L 230.5625,371 L 228.78125,372.75 L 227.8125,375.3125 L 223.90625,375.5 L 225.46875,381.34375 L 227.125,384.96875 L 229.625,384.875 L 229.78125,385.90625 L 228.375,387.5 L 229.4375,389.625 L 231.03125,389.625 L 232.78125,391.5625 L 234.375,391.5625 L 235.625,390.15625 L 235.96875,390.53125 L 235.96875,392.28125 L 236.5,394.59375 L 240.21875,394.75 L 243.21875,391.5625 L 244.8125,391.40625 L 245.34375,392.28125 L 246.21875,394.21875 L 247.65625,394.21875 L 248.1875,390.6875 L 251.1875,391.0625 L 252.9375,388.9375 L 255.78125,389.625 L 260.03125,387.6875 L 260.0625,388.0625 L 261.4375,386.625 L 259.65625,383.96875 L 258.96875,380.4375 L 261.25,378.5 L 262.3125,378.84375 L 265.5,375.3125 L 267.25,375.5 L 267.96875,374.59375 L 271.5,374.59375 L 272.75,373.1875 L 273.09375,372.09375 L 271.5,371.875 L 272.59375,368.5625 L 270.09375,367.46875 L 272.59375,361.65625 L 269.28125,359.1875 L 268.15625,352 L 265.125,351.1875 L 262.90625,353.375 L 261.8125,351.4375 L 258.5,354.75 L 256.28125,355.03125 L 252.4375,349.53125 L 247.46875,347.3125 z ", "name" : "Lot"}, + "FR-47" : {"path": "M 195.25,363.375 L 193.1875,363.65625 L 191.4375,364.1875 L 188.9375,364.71875 L 188.25,366.65625 L 189.125,368.59375 L 191.25,368.78125 L 190.90625,370.53125 L 189.3125,371.0625 L 187.53125,373.1875 L 184.53125,377.78125 L 183.125,380.25 L 183.65625,382.90625 L 184.53125,384.6875 L 182.59375,385.90625 L 180.65625,385.90625 L 180.28125,387.875 L 181.53125,388.9375 L 181.71875,390.875 L 180.28125,392.28125 L 177.15625,392.78125 L 177.625,393.34375 L 178.34375,397.59375 L 182.21875,397.25 L 184.875,398.28125 L 187.1875,398.46875 L 188.25,399.71875 L 186.125,401.84375 L 185.59375,405.71875 L 186.0625,406.9375 L 186.8125,405.375 L 189.125,407.34375 L 192.25,404.21875 L 193.625,406.15625 L 196.9375,405.5625 L 200.46875,405.1875 L 202.03125,402.4375 L 207.875,401.875 L 210.8125,404.78125 L 211.8125,403.8125 L 213.75,403.21875 L 212.96875,400.5 L 215.90625,399.71875 L 219.625,398.9375 L 218.8125,396.59375 L 220,395.21875 L 220.96875,391.5 L 218.8125,389.15625 L 220.1875,384.6875 L 223.125,386.4375 L 227.4375,385.65625 L 225.46875,381.34375 L 223.90625,375.5 L 227.8125,375.3125 L 228.59375,373.25 L 225.53125,371.96875 L 224.125,370.375 L 222,370.375 L 219.53125,372.65625 L 217.59375,372.5 L 217.0625,371.25 L 218.46875,370.375 L 218.46875,369.125 L 216.875,367.375 L 215.46875,367.1875 L 214.59375,368.25 L 210.6875,368.25 L 210.34375,366.84375 L 209.09375,366.65625 L 206.96875,368.40625 L 203.09375,368.40625 L 201.3125,370 L 198.3125,368.9375 L 197.96875,365.25 L 195.25,363.375 z ", "name" : "Lot et Garonne"}, + "FR-48" : {"path": "M 320.78125,352.25 L 315.3125,354.21875 L 313.75,357.71875 L 310.25,355.375 L 307.5,363.96875 L 304.6875,370.4375 L 308.78125,375.46875 L 308.5,379.34375 L 311.25,381.28125 L 311.25,385.96875 L 312.09375,392.59375 L 315.40625,394 L 315.125,396.1875 L 319.8125,395.375 L 321.46875,396.1875 L 320.4375,397.09375 L 326.46875,401.125 L 331.625,400.0625 L 332.5,398.8125 L 331.78125,397.0625 L 333.90625,396.53125 L 336.90625,399.34375 L 342.03125,399.875 L 344.34375,396.34375 L 344.34375,393.34375 L 345.75,391.75 L 344.5,391.40625 L 344.5,387.34375 L 341.6875,384.34375 L 344,383.96875 L 345.21875,382.90625 L 346.1875,381.03125 L 345.21875,380.4375 L 345.78125,376.3125 L 342.46875,372.71875 L 341.09375,365.53125 L 336.125,359.1875 L 332.5,360.0625 L 331.71875,357.34375 L 329.75,357.34375 L 329.375,359.6875 L 324.3125,361.25 L 320.78125,352.25 z ", "name" : "Lozère"}, + "FR-49" : {"path": "M 141.9375,188.6875 L 141.5,189.5625 L 141.21875,189.5 L 141.4375,190.21875 L 141.4375,192.46875 L 143.53125,193.75 L 144.8125,197.15625 L 146.75,199.5625 L 144.1875,201.84375 L 144.34375,204.71875 L 145.3125,205.53125 L 148.84375,205.0625 L 151.75,207.78125 L 152.40625,211.8125 L 150.46875,213.125 L 144.1875,212.96875 L 140.15625,213.75 L 137.90625,214.90625 L 137.90625,216.8125 L 140,219.40625 L 142.09375,219.40625 L 142.25,222.15625 L 143.0625,222.96875 L 142.09375,225.21875 L 140.46875,225.6875 L 140.46875,227.15625 L 139.65625,227.96875 L 140.625,228.4375 L 141.125,228.28125 L 142.5625,228.28125 L 144.1875,230.375 L 144.125,232.40625 L 144.5,232.46875 L 146.125,233.4375 L 151.125,233.4375 L 153.78125,235.6875 L 157.5,234.09375 L 163.5625,235.46875 L 166.28125,233.6875 L 166.28125,230.96875 L 171.5625,230.5625 L 176.4375,229.59375 L 181.71875,229.40625 L 182.3125,230.78125 L 183.6875,231.9375 L 185.03125,229.59375 L 188.75,225.6875 L 190.25,225.6875 L 192.46875,217.6875 L 195.59375,213.96875 L 195.375,209.6875 L 197.34375,207.125 L 197.34375,205.96875 L 196.375,204.78125 L 197,203.5 L 194.34375,202.46875 L 186.125,197.46875 L 178.53125,195.21875 L 175.625,195.0625 L 175.625,193.125 L 173.84375,191.65625 L 171.9375,191.65625 L 168.375,190.53125 L 166.125,192.78125 L 160.96875,192.96875 L 158.6875,191.65625 L 152.90625,189.90625 L 151.59375,191.5 L 148.375,189.40625 L 145.46875,189.40625 L 141.9375,188.6875 z ", "name" : "Maine et Loire"}, + "FR-50" : {"path": "M 119.5625,77.5 L 118.78125,79.46875 L 122.90625,82.78125 L 122.90625,87.09375 L 121.34375,89.03125 L 122.3125,90 L 122.90625,90.40625 L 122.5,94.125 L 123.875,97.25 L 128.375,102.3125 L 129.34375,106.8125 L 130.3125,108.1875 L 130.3125,115.21875 L 132.65625,119.90625 L 132.65625,125.375 L 130.125,130.4375 L 132.84375,137.46875 L 137.15625,138.4375 L 137.53125,140.40625 L 135.40625,141.375 L 131.71875,141.375 L 132.3125,143.84375 L 133.46875,147.5625 L 136.8125,150.5 L 138.375,150.875 L 139.9375,148.75 L 141.6875,148.53125 L 143.8125,146 L 145.78125,147.5625 L 148.125,147.5625 L 149.6875,148.34375 L 149.6875,148.71875 L 153,149.125 L 154.96875,147.5625 L 157.875,148.75 L 157.9375,148.875 L 161.28125,146.03125 L 162.40625,142.3125 L 162.09375,140.6875 L 162.5625,138.78125 L 160.625,136.84375 L 155.625,133.59375 L 151.9375,133.28125 L 148.21875,128.59375 L 151.28125,127.46875 L 152.5625,125.0625 L 150.96875,123.59375 L 152.40625,122.3125 L 153.84375,123.4375 L 156.4375,121.84375 L 158.0625,119.25 L 158.6875,116.6875 L 157.5625,114.40625 L 158.21875,113.59375 L 156.75,111.1875 L 158.375,109.09375 L 157.09375,107.46875 L 155.46875,109.5625 L 153.21875,108.28125 L 149.5,104.5625 L 149.34375,102.96875 L 150.46875,101.84375 L 150.125,99.6875 L 148.28125,100.15625 L 148.09375,95.46875 L 143,89.4375 L 144.5625,85.53125 L 146.71875,85.53125 L 144.78125,80.25 L 136.375,79.84375 L 131.875,82.96875 L 126.8125,79.65625 L 119.5625,77.5 z ", "name" : "Manche"}, + "FR-51" : {"path": "M 337.375,99.3125 L 335.03125,100.3125 L 335.4375,102.25 L 331.3125,102.25 L 327.625,105 L 327.625,110.25 L 330.34375,112.03125 L 331.125,113.78125 L 326.625,114.15625 L 326.0625,115.9375 L 327.8125,117.09375 L 327.03125,118.28125 L 325.28125,119.0625 L 325.65625,120.40625 L 328.1875,120.40625 L 329.1875,121.78125 L 327.4375,122.96875 L 325.875,127.0625 L 322.9375,128.4375 L 321.9375,130.5625 L 320.96875,131.75 L 321.1875,132.90625 L 319.625,133.90625 L 319.21875,136.625 L 320.78125,137.59375 L 321.5625,140.53125 L 320.59375,142.28125 L 321.1875,143.65625 L 324.09375,143.46875 L 324.09375,144.4375 L 324.9375,144.25 L 328.3125,147.8125 L 333.0625,147.03125 L 338.625,143.25 L 341.96875,143.25 L 345.34375,140.875 L 349.3125,138.6875 L 352.28125,138.90625 L 352.6875,142.875 L 356.25,148.21875 L 360.21875,148.21875 L 365.78125,147.03125 L 369.75,148.40625 L 373.90625,145.4375 L 374.5,140.5 L 379.09375,139.71875 L 379,136.625 L 375.28125,133.6875 L 374.875,132.125 L 376.25,129.78125 L 375.0625,128.8125 L 376.25,125.875 L 378.40625,124.90625 L 379.96875,120.03125 L 376.84375,120.21875 L 378.59375,118.28125 L 377.21875,113.96875 L 375.875,111.03125 L 377.625,109.46875 L 376.625,109.28125 L 376.375,107.9375 C 376.33461,107.94351 376.09375,107.96875 376.09375,107.96875 L 374.3125,106.375 L 372.3125,108.375 L 371.71875,108.375 L 370.9375,107.375 L 366.1875,107.1875 L 365.375,108.375 L 364,108.375 L 362.8125,105.78125 L 360.21875,105.78125 L 359.625,106.375 L 357.0625,106.1875 L 353.875,103.8125 L 351.6875,103.21875 L 350.90625,102.03125 L 346.75,99.4375 L 342,99.3125 L 342.0625,101.09375 L 340.6875,101.46875 L 337.375,99.3125 z ", "name" : "Marne"}, + "FR-52" : {"path": "M 379.09375,139.71875 L 374.5,140.5 L 373.90625,145.4375 L 369.75,148.40625 L 367.59375,147.65625 L 366.5625,149.8125 L 366.375,152.78125 L 369.9375,157.75 L 373.3125,158.9375 L 374.09375,163.09375 L 374.3125,170.21875 L 373.125,172 L 369.75,172.21875 L 367.5625,174.1875 L 369.15625,175.1875 L 369.8125,177.6875 L 372.15625,179 L 375.65625,182.71875 L 380.15625,188.78125 L 377.625,191.5 L 379.375,192.6875 L 379.5625,196 L 382.6875,195.8125 L 383.46875,197.375 L 385.8125,197.5625 L 387.5625,196.59375 L 390.6875,200.5 L 391.09375,201.46875 L 395.375,200.5 L 396.1875,198.53125 L 396.375,198.5625 L 396.375,196.59375 L 399.09375,195.40625 L 402.21875,196.59375 L 405.15625,195.40625 L 406.90625,195.40625 L 407.5,191.5 L 408.46875,190.34375 L 406.71875,190.15625 L 406.53125,187.8125 L 409.25,187.21875 L 409.4375,185.65625 L 412.1875,185.65625 L 412.1875,183.125 L 414.34375,182.34375 L 413.75,180.78125 L 414.34375,180.40625 L 412.5625,179 L 410.4375,179.78125 L 410.4375,175.6875 L 404.96875,172.96875 L 406.125,167.6875 L 407.875,166.5 L 407.3125,164.75 L 404.75,164.375 L 404.1875,161.8125 L 401.84375,161.8125 L 399.09375,158.125 L 395.96875,157.90625 L 394.625,155.96875 L 396.375,154.21875 L 392.25,149.71875 L 390.5,149.125 L 385.8125,146.78125 L 383.28125,144.0625 L 379.1875,143.46875 L 379.09375,139.71875 z ", "name" : "Haute Marne"}, + "FR-53" : {"path": "M 182.5,146.40625 L 180.5625,146.59375 L 179.75,148.53125 L 176.84375,149.71875 L 171.5625,148.9375 L 166.28125,152.0625 L 164.34375,150.6875 L 161.40625,152.65625 L 159.25,151.09375 L 157.875,148.75 L 154.96875,147.5625 L 153,149.125 L 149.6875,148.71875 L 149.5,153.8125 L 150.46875,154.59375 L 150.46875,158.5 L 148.5,160.46875 L 148.5,163.59375 L 149.09375,165.53125 L 149.09375,171.1875 L 150.46875,172.5625 L 150.46875,177.84375 L 147.15625,177.4375 L 145.78125,178.21875 L 143.25,184.46875 L 142.25,188 L 141.9375,188.6875 L 145.46875,189.40625 L 148.375,189.40625 L 151.59375,191.5 L 152.90625,189.90625 L 158.6875,191.65625 L 160.96875,192.96875 L 166.125,192.78125 L 168.375,190.53125 L 171.9375,191.65625 L 173.84375,191.65625 L 173.875,191.6875 L 174.5,190.21875 L 174.5,184.40625 L 173.84375,183.4375 L 174.1875,182.46875 L 176.9375,182.3125 L 178.21875,181.1875 L 178.375,180.21875 L 176.9375,176.65625 L 177.40625,175.21875 L 180.625,174.90625 L 180.3125,174.09375 L 181.125,172.15625 L 180.46875,170.6875 L 181.28125,169.09375 L 184.1875,166.65625 L 183.84375,164.09375 L 184.34375,159.90625 L 185.46875,157.96875 L 189.125,156.78125 L 188.5625,156.75 L 187.5625,153.21875 L 185.03125,152.25 L 184.25,147.96875 L 182.5,146.40625 z ", "name" : "Mayenne"}, + "FR-54" : {"path": "M 401.59375,88.4375 L 399.25,90.59375 L 395.9375,90.78125 L 394.78125,91.96875 L 394.53125,91.96875 L 394.40625,94.3125 L 395.5625,96.21875 L 395.15625,97.375 L 394.78125,98.71875 L 394.96875,99.46875 L 395.9375,98.71875 L 396.875,97 L 398.8125,96.8125 L 402.0625,95.84375 L 403.78125,97.1875 L 404.53125,98.71875 L 405.125,100.4375 L 405.125,102.15625 L 406.0625,102.9375 L 406.0625,104.25 L 405.125,105.40625 L 404.9375,107.90625 L 405.6875,109.0625 L 405.875,110.59375 L 406.0625,113.0625 L 407.21875,114.03125 L 408.9375,114.78125 L 408.1875,116.3125 L 410.28125,118.25 L 408.375,120.34375 L 408.75,121.6875 L 410.65625,122.625 L 410.65625,123.59375 L 408.375,123.59375 L 407.40625,124.9375 L 407.59375,125.90625 L 409.125,127.4375 L 407.8125,131.0625 L 406.28125,134.5 L 407.03125,136.625 L 407.03125,140.0625 L 407.8125,141.78125 L 408.9375,141.78125 L 409.53125,142.75 L 407.8125,142.75 L 406.28125,143.5 L 406.28125,144.65625 L 408.1875,146.375 L 408.1875,149.0625 L 410.09375,148.46875 L 412.96875,148.65625 L 413.15625,151.71875 L 414.3125,152.125 L 412.96875,153.0625 L 412.78125,154.03125 L 414.875,154.40625 L 416.21875,156.125 L 422.53125,155.75 L 423.875,153.25 L 426.75,153.25 L 427.90625,152.3125 L 429.8125,153.46875 L 431.53125,152.875 L 434.03125,153.0625 L 436.125,152.3125 L 438.21875,150.78125 L 439.375,151.9375 L 439.5625,149.25 L 441.09375,148.65625 L 441.875,151.15625 L 444.15625,151.34375 L 446.46875,151.9375 L 447.40625,152.125 L 450.6875,150.59375 L 452.40625,149.4375 L 453.9375,147.53125 L 457,146.375 L 459,145.9375 L 457.875,144.84375 L 460.03125,145.03125 L 460.4375,144.625 L 458.125,143.875 L 454.875,141.59375 L 452,139.46875 L 448.5625,139.46875 L 444.9375,137.375 L 442.0625,137.1875 L 442.0625,136.40625 L 437.65625,133.75 L 432.6875,131.625 L 430.1875,131.625 L 429.25,128.96875 L 425.40625,124.15625 L 421.59375,124.15625 L 420.0625,122.0625 L 417,122.0625 L 417.1875,119 L 413.15625,116.5 L 413.34375,114.03125 L 415.46875,114.03125 L 415.46875,111.90625 L 416.21875,110.375 L 414.5,108.65625 L 416.03125,106 L 414.875,102.9375 L 413.9375,102.15625 L 411.4375,96.8125 L 412.40625,95.28125 C 412.40625,95.28125 412.32712,94.02401 412.25,92.34375 L 409.625,92.34375 L 406.09375,88.4375 L 401.59375,88.4375 z ", "name" : "Meurthe et Moselle"}, + "FR-55" : {"path": "M 390.125,86.53125 L 388.75,88.78125 L 387,89.9375 L 385.625,88.59375 L 382.6875,88.59375 L 382.125,87.8125 L 380.15625,91.5 L 379.375,92.875 L 381.71875,95.8125 L 380.9375,99.71875 L 378.78125,101.46875 L 379,102.84375 L 379.75,104.78125 L 378.59375,105.96875 L 376.25,107.125 L 376.625,109.28125 L 377.625,109.46875 L 375.875,111.03125 L 377.21875,113.96875 L 378.59375,118.28125 L 376.84375,120.21875 L 379.96875,120.03125 L 378.40625,124.90625 L 376.25,125.875 L 375.0625,128.8125 L 376.25,129.78125 L 374.875,132.125 L 375.28125,133.6875 L 379,136.625 L 379.1875,143.46875 L 383.28125,144.0625 L 385.8125,146.78125 L 390.5,149.125 L 392.25,149.71875 L 396.375,154.21875 L 395.9375,154.65625 L 399.375,154.21875 L 399.375,152.5 L 403.21875,151.71875 L 403.21875,150.40625 L 404.15625,150.40625 L 404.15625,151.53125 L 407.21875,150.59375 L 408.40625,149 L 408.1875,149.0625 L 408.1875,146.375 L 406.28125,144.65625 L 406.28125,143.5 L 407.8125,142.75 L 409.53125,142.75 L 408.9375,141.78125 L 407.8125,141.78125 L 407.03125,140.0625 L 407.03125,136.625 L 406.28125,134.5 L 407.8125,131.0625 L 409.125,127.4375 L 407.59375,125.90625 L 407.40625,124.9375 L 408.375,123.59375 L 410.65625,123.59375 L 410.65625,122.625 L 408.75,121.6875 L 408.375,120.34375 L 410.28125,118.25 L 408.1875,116.3125 L 408.9375,114.78125 L 407.21875,114.03125 L 406.0625,113.0625 L 405.875,110.59375 L 405.6875,109.0625 L 404.9375,107.90625 L 405.125,105.40625 L 406.0625,104.25 L 406.0625,102.9375 L 405.125,102.15625 L 405.125,100.4375 L 404.53125,98.71875 L 403.78125,97.1875 L 402.0625,95.84375 L 398.8125,96.8125 L 396.875,97 L 395.9375,98.71875 L 394.96875,99.46875 L 394.78125,98.71875 L 395.15625,97.375 L 395.5625,96.21875 L 394.40625,94.3125 L 394.53125,91.96875 L 393.59375,91.96875 L 392.8125,88.25 L 391.25,86.6875 L 390.125,86.53125 z ", "name" : "Meuse"}, + "FR-56" : {"path": "M 56,160.59375 L 52.75,162.15625 L 50.46875,162.15625 L 48.0625,164.09375 L 48.21875,165.53125 L 49.65625,169.25 L 50.46875,172.15625 L 55.46875,172.96875 L 57.90625,174.90625 L 58.875,173.75 L 60.46875,175.875 L 59.65625,176.84375 L 59.5,179.71875 L 58.0625,179.71875 L 56.9375,181.5 L 54.65625,181.5 L 53.71875,185.34375 L 55.90625,188.84375 L 59.03125,189.625 L 60.1875,187.875 L 59.625,190 L 62.34375,191.1875 L 65.875,194.6875 L 67.03125,196.84375 L 66.65625,199.375 L 66.25,201.9375 L 68.59375,203.6875 L 69.78125,202.3125 L 68.59375,200.75 L 68.59375,197.25 L 70.9375,197.8125 L 71.71875,195.46875 L 72.3125,196.84375 L 74.84375,199 L 76.03125,197.03125 L 74.84375,194.3125 L 77,197.25 L 79.71875,196.84375 L 79.15625,195.46875 L 81.6875,196.0625 L 83.625,198.40625 L 82.65625,199.96875 L 80.125,199.1875 L 77.1875,197.8125 L 75.625,199.78125 L 77.96875,200.5625 L 79.71875,203.28125 L 90.28125,202.3125 L 93,202.90625 L 91.65625,204.0625 L 91.84375,205.84375 L 92.21875,206.125 L 93.0625,205.96875 L 94.8125,204.21875 L 95.96875,205.5625 L 99.09375,205.5625 L 102.8125,203.625 L 108.28125,201.46875 L 108.46875,196 L 109.625,195.375 L 107.5625,191.5 L 109.34375,190.0625 L 109.03125,189.09375 L 107.90625,188.4375 L 109.65625,187.625 L 111.28125,185.6875 L 111.125,183.75 L 109.03125,183.75 L 108.53125,181.84375 L 110,179.90625 L 108.375,177 L 105.96875,175.53125 L 103.21875,175.53125 L 102.25,175.21875 L 102.25,173.9375 L 103.6875,172.625 L 104.5,169.40625 L 104.03125,167.3125 L 103.375,168.125 L 99.5,167.8125 L 97.71875,164.5625 L 96.28125,164.5625 L 94.03125,165.375 L 94.03125,167.46875 L 90.96875,169.40625 L 88.53125,168.4375 L 87.5625,166.34375 L 86.78125,167.46875 L 84.5,167.46875 L 83.375,166.03125 L 82.25,166.03125 L 79.84375,163.59375 L 77.09375,164.25 L 74.1875,161.65625 L 71.59375,161.84375 L 70.8125,163.4375 L 67.75,165.0625 L 64.03125,163.4375 L 63.0625,162.46875 L 61.4375,163.59375 L 59.5,163.4375 L 59.1875,161.84375 L 56.125,161.03125 L 56,160.59375 z ", "name" : "Morbihan"}, + "FR-57" : {"path": "M 423.09375,90.40625 L 420.15625,90.59375 L 417.8125,92.5625 L 417.21875,93.53125 L 413.90625,93.53125 L 412.75,92.34375 L 412.25,92.34375 C 412.32712,94.02401 412.40625,95.28125 412.40625,95.28125 L 411.4375,96.8125 L 413.9375,102.15625 L 414.875,102.9375 L 416.03125,106 L 414.5,108.65625 L 416.21875,110.375 L 415.46875,111.90625 L 415.46875,114.03125 L 413.34375,114.03125 L 413.15625,116.5 L 417.1875,119 L 417,122.0625 L 420.0625,122.0625 L 421.59375,124.15625 L 425.40625,124.15625 L 429.25,128.96875 L 430.1875,131.625 L 432.6875,131.625 L 437.65625,133.75 L 442.0625,136.40625 L 442.0625,137.1875 L 444.9375,137.375 L 448.5625,139.46875 L 452,139.46875 L 454.875,141.59375 L 458.125,143.875 L 460.4375,144.625 L 463.9375,141.125 L 465.125,137.03125 L 463.5625,135.46875 L 463.375,134.09375 L 465.6875,129.78125 L 460.25,126.65625 L 457.125,129 L 455.34375,127.84375 L 456.125,126.09375 L 454.1875,124.71875 L 451.625,123.53125 L 451.625,121 L 454.1875,120.21875 L 455.15625,115.71875 L 456.90625,113.78125 L 457.6875,116.71875 L 459.84375,117.6875 L 463.5625,118.28125 L 465.5,120.21875 L 467.84375,120.21875 L 469.8125,118.84375 L 472.34375,120.625 L 473.71875,120.625 L 475.28125,119.25 L 475.28125,116.3125 L 477,113.3125 L 476.59375,113.4375 L 475.25,111.5 L 471.34375,109.15625 L 469.96875,107 L 465.28125,107.40625 L 462.53125,109.9375 L 455.90625,110.125 L 453.9375,108.75 C 453.80551,108.51057 452.84437,106.81438 452,106.34375 C 451.96729,106.32639 451.91355,106.29802 451.875,106.28125 C 451.84646,106.26959 451.80512,106.25698 451.78125,106.25 C 451.77058,106.24458 451.73002,106.22452 451.71875,106.21875 C 451.71591,106.21876 451.69093,106.21861 451.6875,106.21875 C 451.66248,106.21745 451.61378,106.21875 451.59375,106.21875 C 450.67823,106.21876 448.90565,105.19125 448.6875,105.0625 L 445.9375,106.21875 L 445.75,108.5625 L 442.4375,108.96875 L 440.46875,105.25 L 439.3125,104.84375 L 439.3125,102.125 L 436.5625,100.9375 L 436.375,96.25 L 434.40625,94.3125 L 430.3125,92.34375 L 428.375,92.34375 L 427.78125,92.75 L 425.8125,92.75 L 423.09375,90.40625 z ", "name" : "Moselle"}, + "FR-58" : {"path": "M 306.75,203.78125 L 305.78125,205.3125 L 303.9375,205.3125 L 301.46875,204.75 L 298.71875,205.5625 L 298.90625,207.53125 L 301.25,210.25 L 301.25,213.96875 L 299.5,216.5 L 300.0625,218.84375 L 303.59375,221.59375 L 303.78125,224.3125 L 305.75,228.4375 L 305.34375,233.125 L 307.5,235.25 L 306.90625,240.34375 L 306.71875,242.875 L 307.6875,244.625 L 306.1875,249.40625 L 306.3125,250.875 L 309.65625,252.4375 L 312,255 L 314.125,253.8125 L 316.09375,252.65625 L 316.5,254.40625 L 319.40625,254.40625 L 320.1875,252.84375 L 321.9375,253.625 L 322.53125,256.15625 L 324.09375,255.78125 L 327.8125,250.6875 L 329.75,252.0625 L 330.0625,252.65625 L 333.125,250.75 L 334.375,250.90625 L 335.34375,253.28125 L 337.1875,253 L 338.59375,251.59375 L 340.40625,251.59375 L 341.8125,249.78125 L 343.21875,249.5 L 343.5,248.5 L 346.5625,248.65625 L 346.71875,247.9375 L 345.3125,246.6875 L 345.3125,245.4375 L 347.28125,244.3125 L 347.28125,243.46875 L 345.4375,242.34375 L 345.15625,240.25 L 345.3125,238.28125 L 344.0625,237.4375 L 345.15625,235.90625 L 346.15625,235.34375 L 346.84375,233.65625 L 345.875,233.09375 L 344.75,231.40625 L 346.15625,229.4375 L 348.53125,228.03125 L 351.46875,228.03125 L 351.46875,225.8125 L 352.3125,225.53125 L 352.3125,224.6875 L 351.0625,222.71875 L 348.25,222.15625 L 347.28125,220.46875 L 347.6875,218.9375 L 347.96875,216.8125 L 347.46875,215.6875 L 344.34375,217.8125 L 343.0625,218.375 L 341.375,217.25 L 341.53125,214.4375 L 339.6875,214.4375 L 338.15625,215.4375 L 337.75,214.15625 L 338.59375,212.75 L 337.59375,211.5 L 336.46875,213.1875 L 336.625,214.4375 L 333.96875,214.3125 L 329.75,210.375 L 326.53125,210.25 L 326.53125,208.125 L 324.28125,206.71875 L 323.84375,204.90625 L 323.15625,204.78125 L 323.15625,208.28125 L 321.90625,208.5625 L 320.0625,208 L 318.125,209.25 L 317,209.53125 L 315.875,208.5625 L 314.75,209.125 L 312.21875,207.4375 L 310.40625,207.4375 L 309.125,206.59375 L 309.40625,205.03125 L 308,203.78125 L 306.75,203.78125 z ", "name" : "Nièvre"}, + "FR-59" : {"path": "M 285.78125,4.0625 L 279.53125,7 L 269.78125,8.5625 L 269.25,8.65625 L 272.96875,14.5625 L 275.5625,21.125 L 279.90625,21.3125 L 281.6875,22.6875 L 279.53125,23.6875 L 279.53125,26.0625 L 282.28125,29.03125 L 287.25,30.25 L 293.40625,30.625 L 294.78125,28.4375 L 296.78125,28.4375 L 297.75,30.4375 L 295.1875,32.03125 L 295.59375,36 L 299.15625,36.96875 L 302.71875,37.375 L 303.71875,39.9375 L 305.5,40.75 L 305.09375,42.125 L 302.53125,43.3125 L 302.3125,44.5 L 304.3125,46.90625 L 305.6875,47.875 L 305.3125,49.0625 L 303.71875,50.25 L 304.3125,50.65625 L 306.875,50.84375 L 309.0625,52.25 L 308.875,54.03125 L 307.6875,54.8125 L 307.46875,58 L 305.6875,58.1875 L 303.90625,58 L 301.9375,59.1875 L 303.125,59.59375 L 305.09375,59.59375 L 306.875,59.96875 L 307.46875,60.96875 L 306.3125,63.1875 L 307.875,64.75 L 309.4375,65.15625 L 311,64.15625 L 313.15625,64.15625 L 313.75,65.34375 L 314.53125,65.15625 L 316.875,63.78125 L 319.21875,65.15625 L 322.34375,63 L 323.71875,63 L 325.28125,64.375 L 328.40625,62.21875 L 329.75,62.40625 L 330.9375,63.375 L 335.25,63.78125 L 335.625,65.53125 L 337.78125,63.59375 L 338.9375,63.59375 L 339.71875,66.125 L 343.4375,67.09375 L 344.5,66.375 L 344.1875,66.375 L 344,64.4375 L 347.90625,62.09375 L 347.3125,58.375 L 343.59375,57.40625 L 344.5625,56.40625 L 344.5625,53.6875 L 347.5,51.53125 L 346.71875,49.96875 L 340.46875,45.09375 L 329.53125,45.6875 L 328.375,47.625 L 327,47.625 L 327.1875,40.78125 L 324.0625,37.09375 L 321.71875,37.46875 L 320.34375,35.90625 L 316.4375,37.65625 L 315.09375,36.3125 L 312.34375,35.90625 L 311.5625,33.375 L 311.375,25.5625 L 309.625,24.78125 L 309.40625,23.59375 L 308.25,23.59375 L 307.84375,21.25 L 305.3125,21.46875 L 300.4375,23.03125 L 298.09375,25.9375 L 295.75,25.9375 L 294.1875,24 L 293.59375,21.84375 L 291.65625,19.6875 L 288.90625,19.6875 L 287.75,17.5625 L 287.75,14.21875 L 289.09375,12.09375 L 288.3125,9.15625 L 285.78125,4.0625 z ", "name" : "Nord"}, + "FR-60" : {"path": "M 257.21875,80.21875 L 255.9375,81.75 L 255.15625,83.6875 L 256.71875,83.6875 L 255.9375,85.65625 L 255.15625,89.5625 L 256.3125,91.5 L 256.3125,94.84375 L 258.28125,94.84375 L 257.5,96.1875 L 256.125,98.75 L 255.5625,100.5 L 257.3125,102.0625 L 257.875,106.5625 L 258.875,108.125 L 257.5,108.5 L 255.75,107.53125 L 255.4375,109.84375 L 255.5625,109.6875 L 256.3125,111.4375 L 257.5,113.375 L 262.78125,113.78125 L 266.5,113.375 L 269.03125,111.4375 L 272.15625,113.375 L 273.71875,114.5625 L 276.0625,113.96875 L 278.1875,113 L 282.3125,115.15625 L 286.59375,117.6875 L 287.96875,119.0625 L 290.3125,117.5 L 292.25,118.65625 L 293.4375,119.625 L 295.1875,119.4375 L 296.375,117.875 L 299.09375,119.4375 L 302.4375,118.0625 L 304.375,118.65625 L 306.3125,117.09375 L 307.5,116.5 L 307.875,116.78125 L 308.28125,114.125 L 306.875,112.53125 L 304.5,110.9375 L 303.5,112.53125 L 302.90625,112.71875 L 302.71875,109.75 L 304.5,109.34375 L 304.09375,106.59375 L 301.71875,106.1875 L 302.90625,104.1875 L 306.28125,103.40625 L 307.46875,98.65625 L 309.25,97.84375 L 306.875,96.0625 L 307.6875,94.28125 L 308.0625,88.34375 L 307.25,83.75 L 303.125,84.15625 L 300.34375,83.78125 L 295.1875,85.15625 L 290.8125,89.3125 L 287.25,88.125 L 283.6875,87.75 L 280.90625,84.96875 L 275.9375,83.5625 L 269.21875,84.15625 L 267.4375,82.78125 L 263.84375,82.78125 L 261.28125,83.78125 L 260.09375,82.96875 L 260.09375,80.8125 L 259.6875,80.21875 L 257.21875,80.21875 z ", "name" : "Oise"}, + "FR-61" : {"path": "M 206.84375,124.65625 L 202.875,125.53125 L 201.59375,124.75 L 197.875,125.375 L 197.71875,126.84375 L 196.4375,127.15625 L 195.96875,125.0625 L 194.34375,125.375 L 191.90625,128.125 L 188.21875,130.875 L 184.1875,132.15625 L 180.96875,130.375 L 177.25,131.03125 L 175,128.78125 L 172.875,129.5625 L 169.34375,132 L 165.3125,130.875 L 162.40625,134.25 L 158.46875,135.4375 L 160.625,136.84375 L 162.5625,138.78125 L 162.09375,140.6875 L 162.40625,142.3125 L 161.28125,146.03125 L 157.9375,148.875 L 159.25,151.09375 L 161.40625,152.65625 L 164.34375,150.6875 L 166.28125,152.0625 L 171.5625,148.9375 L 176.84375,149.71875 L 179.75,148.53125 L 180.5625,146.59375 L 182.5,146.40625 L 184.25,147.96875 L 185.03125,152.25 L 187.5625,153.21875 L 188.5625,156.75 L 191.875,156.9375 L 197.15625,152.0625 L 202.4375,151.875 L 204,154 L 204.96875,161.03125 L 208.28125,162.21875 L 210.25,165.15625 L 214.34375,165.15625 L 214.53125,166.5 L 214.71875,164.5625 L 215.5,164.5625 L 218.25,168.65625 L 220.375,169 L 220.375,164.375 L 219.03125,162.59375 L 218.625,161.03125 L 221.5625,159.28125 L 224.5,158.6875 L 226.4375,156.34375 L 226.0625,149.125 L 221.9375,145.625 L 221.75,142.28125 L 218.25,139.9375 L 219.625,138 L 218.8125,135.0625 L 216.09375,134.09375 L 214.125,132.125 L 212.96875,129.40625 L 207.5,129.21875 L 205.9375,127.25 L 206.84375,124.65625 z ", "name" : "Orne"}, + "FR-62" : {"path": "M 269.25,8.65625 L 258.4375,10.71875 L 249.84375,17.34375 L 249.84375,43.71875 L 249.78125,44.5 L 252.8125,45.21875 L 253.78125,47.375 L 256.125,46.78125 L 257.5,45.03125 L 259.25,45.625 L 262.96875,48.53125 L 264.34375,47.96875 L 265.3125,50.3125 L 268.8125,51.875 L 268.8125,53.8125 L 271.375,54.78125 L 273.90625,53.8125 L 278.78125,53.21875 L 279.96875,54.21875 L 282.3125,53.21875 L 283.46875,55.1875 L 280.5625,57.125 L 280.5625,59.875 L 281.53125,60.84375 L 282.3125,60.65625 L 282.875,59.09375 L 284.65625,57.90625 L 286.40625,59.28125 L 290.5,60.65625 L 292.25,60.65625 L 292.25,58.6875 L 294.8125,60.46875 L 295,62.03125 L 293.8125,63.78125 L 295.96875,62.59375 L 297.75,61.8125 L 298.5,63.1875 L 298.5,64.5625 L 301.4375,63 L 306.125,63 L 306.3125,63.1875 L 307.46875,60.96875 L 306.875,59.96875 L 305.09375,59.59375 L 303.125,59.59375 L 301.9375,59.1875 L 303.90625,58 L 305.6875,58.1875 L 307.46875,58 L 307.6875,54.8125 L 308.875,54.03125 L 309.0625,52.25 L 306.875,50.84375 L 304.3125,50.65625 L 303.71875,50.25 L 305.3125,49.0625 L 305.6875,47.875 L 304.3125,46.90625 L 302.3125,44.5 L 302.53125,43.3125 L 305.09375,42.125 L 305.5,40.75 L 303.71875,39.9375 L 302.71875,37.375 L 299.15625,36.96875 L 295.59375,36 L 295.1875,32.03125 L 297.75,30.4375 L 296.78125,28.4375 L 294.78125,28.4375 L 293.40625,30.625 L 287.25,30.25 L 282.28125,29.03125 L 279.53125,26.0625 L 279.53125,23.6875 L 281.6875,22.6875 L 279.90625,21.3125 L 275.5625,21.125 L 272.96875,14.5625 L 269.25,8.65625 z ", "name" : "Pas de Calais"}, + "FR-63" : {"path": "M 299.09375,279.5 L 296.4375,282.5 L 296.25,281.4375 L 294.125,281.625 L 294.125,283.21875 L 292.90625,283.5625 L 291.65625,286.5625 L 290.0625,287.28125 L 287.09375,284.96875 L 287.375,289.5625 L 288.9375,291.5 L 289.71875,295.21875 L 287.375,296.96875 L 286.8125,299.71875 L 284.65625,300.875 L 280.9375,303.03125 L 281.3125,304.78125 L 285.8125,309.28125 L 286.21875,312.03125 L 284.4375,314.9375 L 284.4375,317.6875 L 285.625,319.0625 L 286.21875,322.375 L 285.84375,323.71875 L 291.84375,325.46875 L 293.4375,328.8125 L 296.59375,328.8125 L 297.84375,327.59375 L 299.96875,328.65625 L 301.03125,328.8125 L 303.6875,332.875 L 306.5,333.0625 L 307.21875,331.65625 L 308,331.75 L 308.8125,330.59375 L 312.34375,330.0625 L 314.28125,328.46875 L 316.40625,328.28125 L 316.40625,327.0625 L 317.8125,326.34375 L 318.1875,327.21875 L 319.0625,326.6875 L 320.46875,327.59375 L 322.9375,327.40625 L 325.0625,326.53125 L 326.46875,327.75 L 328.0625,327.75 L 329.3125,330.0625 L 331.25,330.9375 L 332.3125,328.46875 L 333.71875,329.71875 L 336.75,329.875 L 337.8125,327.75 L 339.5625,329.53125 L 342.03125,330.25 L 342.8125,329.5 L 341.28125,329 L 340.6875,326.65625 L 344.40625,323.15625 L 342.65625,316.71875 L 337.5625,313.375 L 335.4375,308.3125 L 333.09375,305.1875 L 333.6875,300.875 L 335.4375,299.125 L 332.3125,296.59375 L 332.40625,295.8125 L 329.65625,294.71875 L 328.78125,292.59375 L 325.78125,292.75 L 323.46875,292.21875 L 323.125,289.75 L 321.34375,288.875 L 319.0625,290.28125 L 316.40625,289.75 L 314.625,289.9375 L 308.625,289.0625 L 303.6875,286.21875 L 303.3125,284.8125 L 301.21875,282.5 L 302.625,280.5625 L 302.09375,279.5 L 299.09375,279.5 z ", "name" : "Puy de Dôme"}, + "FR-64" : {"path": "M 172.15625,428.875 L 169.34375,430.46875 L 163.6875,430.28125 L 163.15625,429.40625 L 159.4375,430.65625 L 156.59375,431.53125 L 154.46875,429.9375 L 152.1875,430.65625 L 151.46875,429.75 L 148.65625,429.75 L 146.875,430.65625 L 142.28125,430.46875 L 139.8125,432.40625 L 135.375,432.0625 L 134.5,433.3125 L 133.4375,432.9375 L 134.84375,431.53125 L 132.375,429.59375 L 129.375,432.25 L 124.25,432.59375 L 118.625,429.78125 L 117.8125,431.21875 L 113.3125,436.6875 L 109.8125,438.0625 L 107.28125,438.4375 L 107.28125,440.59375 L 109.625,442.75 L 113.125,442.9375 L 113.3125,445.46875 L 116.0625,445.6875 L 116.84375,443.90625 L 120.5625,445.46875 L 122.90625,446.0625 L 123.46875,448.40625 L 122.125,449.59375 L 122.125,453.28125 L 119.375,454.65625 L 119.1875,456.40625 L 120.9375,458.375 L 124.0625,459.34375 L 124.65625,456.40625 L 126.40625,454.46875 L 126.21875,457 L 127.59375,458.96875 L 131.09375,458.96875 L 132.65625,461.09375 L 137.34375,461.875 L 141.84375,464.625 L 149.25,464.625 L 149.65625,468.71875 L 154.71875,472.625 L 156.6875,474.96875 L 158.84375,473.8125 L 160.78125,473.40625 L 161.75,474.375 L 163.53125,473.40625 L 166.9375,471.53125 L 167.25,467.5 L 168.8125,466.3125 L 169.625,459.875 L 172.53125,460.46875 L 173.71875,459.6875 L 172.34375,456.9375 L 177.625,452.4375 L 180.75,445.40625 L 182.6875,442.875 L 180.34375,439.375 L 178.78125,437.03125 L 180.9375,435.0625 L 177.625,429.59375 L 172.34375,429.21875 L 172.15625,428.875 z ", "name" : "Pyrénées Atlantiques"}, + "FR-65" : {"path": "M 179.21875,428.53125 L 177.28125,429.5625 L 177.625,429.59375 L 180.9375,435.0625 L 178.78125,437.03125 L 180.34375,439.375 L 182.6875,442.875 L 180.75,445.40625 L 177.625,452.4375 L 172.34375,456.9375 L 173.71875,459.6875 L 172.53125,460.46875 L 169.625,459.875 L 168.8125,466.3125 L 167.25,467.5 L 166.9375,471.53125 L 167.4375,471.25 L 170.75,473.21875 L 174.65625,476.15625 L 175.03125,478.5 L 178.15625,481.03125 L 180.71875,481.03125 L 187.15625,478.28125 L 189.875,481.40625 L 193.59375,482.40625 L 194.96875,480.0625 L 196.71875,480.84375 L 200.5,481.09375 L 200.25,470.59375 L 202.21875,470.59375 L 203.96875,471.46875 L 205.21875,470.25 L 205.03125,468.3125 L 207.5,466.875 L 206.625,463.1875 L 205.5625,462.28125 L 203.4375,463 L 204.5,461.21875 L 203.96875,458.9375 L 200.78125,456.625 L 200.96875,455.03125 L 202.75,452.03125 L 205.03125,451.15625 L 205.03125,449.90625 L 206.4375,447.78125 L 207.375,446.46875 L 203.8125,444.625 L 199.03125,444.625 L 198.3125,443.1875 L 195.84375,443.1875 L 195.125,441.59375 L 192.84375,441.59375 L 192.125,442.3125 L 189.46875,442.3125 L 189.3125,440.71875 L 187.1875,439.3125 L 187.90625,438.59375 L 188.25,436.84375 L 187.71875,436.3125 L 186.65625,433.46875 L 184.34375,433.125 L 182.0625,431.875 L 182.21875,428.53125 L 179.21875,428.53125 z ", "name" : "Hautes Pyrénées"}, + "FR-66" : {"path": "M 300.5,468.65625 L 296.25,470.9375 L 296.59375,473.4375 L 278.0625,473.4375 L 278.21875,476.78125 L 280.15625,479.625 L 272.21875,483.5 L 271.375,483 L 264.84375,483.46875 L 264.03125,485.125 L 260.71875,485.96875 L 258.5,487.90625 L 252.4375,489.3125 L 252.78125,491.375 L 255.71875,494.125 L 261.5625,495.6875 L 261.75,499.1875 L 264.875,501.9375 L 267.21875,501.53125 L 270.5625,497.4375 L 274.65625,496.65625 L 281.09375,498.8125 L 286.5625,503.5 L 288.125,501.53125 L 289.5,501.53125 L 290.875,502.5 L 292.03125,501.9375 L 292.21875,499.1875 L 298.09375,497.8125 L 300.03125,495.28125 L 302.96875,494.3125 L 307.0625,494.3125 L 309.625,497.03125 L 312.75,497.25 L 312.75,494.125 L 311.1875,491.96875 L 308.4375,490.78125 L 308,473.71875 L 305.4375,472.53125 L 300.5,468.65625 z ", "name" : "Pyrénées Orientales"}, + "FR-67" : {"path": "M 480.71875,112.28125 L 477,113.3125 L 475.28125,116.3125 L 475.28125,119.25 L 473.71875,120.625 L 472.34375,120.625 L 469.8125,118.84375 L 467.84375,120.21875 L 465.5,120.21875 L 463.5625,118.28125 L 459.84375,117.6875 L 457.6875,116.71875 L 456.90625,113.78125 L 455.15625,115.71875 L 454.1875,120.21875 L 451.625,121 L 451.625,123.53125 L 454.1875,124.71875 L 456.125,126.09375 L 455.34375,127.84375 L 457.125,129 L 460.25,126.65625 L 465.6875,129.78125 L 463.375,134.09375 L 463.5625,135.46875 L 465.125,137.03125 L 463.9375,141.125 L 460.03125,145.03125 L 457.875,144.84375 L 459.25,146.1875 L 458.46875,149.71875 L 459.25,155 L 462.96875,155.96875 L 462.65625,156.6875 L 465.59375,156.53125 L 467.3125,158.625 L 468.84375,160.53125 L 472.6875,160.34375 L 474.40625,165.3125 L 477.40625,166.625 L 477.375,166 L 482.46875,156.03125 L 481.875,150.375 L 484.21875,142.75 L 484.8125,136.09375 L 489.875,132.40625 L 489.875,130.0625 L 491.84375,127.5 L 493.40625,127.5 L 495.15625,125.75 L 494.78125,122.4375 L 496.53125,117.75 L 499.25,117.15625 L 496.53125,115 L 491.65625,114.4375 L 487.34375,112.28125 L 484.40625,114.03125 L 482.84375,112.28125 L 480.71875,112.28125 z ", "name" : "Bas-Rhin"}, + "FR-68" : {"path": "M 465.59375,156.53125 L 462.65625,156.6875 L 460.8125,160.84375 L 458.46875,165.53125 L 459.0625,168.46875 L 457.125,172.96875 L 453.78125,175.875 L 453.59375,183.5 L 451.15625,185.59375 L 451.25,185.65625 L 452.03125,187.21875 L 455.15625,187.40625 L 458.6875,190.15625 L 459.25,191.5 L 459.0625,193.84375 L 458.09375,195.625 L 458.46875,197.96875 L 461.21875,197.5625 L 461.8125,199.71875 L 462.78125,203.875 L 465.09375,203.5 L 464.6875,205.625 L 466.0625,206.8125 L 473.28125,206.625 L 477,203.6875 L 477.1875,199.375 L 479.15625,196.84375 L 476.59375,193.90625 L 475.25,190.78125 L 476.8125,188.65625 L 476.8125,183.75 L 477.78125,181.40625 L 477.78125,177.5 L 479.53125,174.96875 L 477.59375,172.25 L 477.40625,166.625 L 474.40625,165.3125 L 472.6875,160.34375 L 468.84375,160.53125 L 467.3125,158.625 L 465.59375,156.53125 z ", "name" : "Haut Rhin"}, + "FR-69" : {"path": "M 371.75,275.3125 L 369.625,275.5 L 367.84375,277.25 L 366.6875,275.6875 L 364.9375,277.25 L 362.5625,275.6875 L 360.625,275.6875 L 359.84375,276.28125 L 359.4375,278.53125 L 360.5,279.375 L 360.5,281.28125 L 361.78125,283.40625 L 360.71875,284.6875 L 356.6875,284.6875 L 356.46875,288.5 L 355.1875,289.78125 L 356.03125,292.96875 L 356.03125,294.875 L 357.75,296.5625 L 357.75,298.90625 L 360.28125,301.25 L 360.28125,304 L 359.03125,305.90625 L 360.5,306.78125 L 360.5,308.25 L 359.21875,309.3125 L 359.21875,311.03125 L 364.75,316.125 L 371.34375,317.1875 L 371.96875,319.09375 L 369.84375,321.625 L 371.5625,322.6875 L 373.6875,321.84375 L 375.96875,322.1875 L 380.0625,320.15625 L 379.40625,318.875 L 376.65625,316.125 L 380.90625,314.625 L 386.4375,313.34375 L 390.6875,307.84375 L 387.90625,305.5 L 388.0625,303.46875 L 384.09375,302.3125 L 381.53125,303.15625 L 381.125,299.75 L 378.78125,297.625 L 377.28125,297.40625 L 373.46875,295.09375 L 374.09375,293.59375 L 374.09375,287 L 375.15625,285.53125 L 375.53125,280.96875 L 374.875,282.53125 L 373.5,282.34375 L 372.75,278.4375 L 371.75,275.3125 z ", "name" : "Rhône"}, + "FR-70" : {"path": "M 423.5,175.5 L 419.8125,176.09375 L 419.21875,178.03125 L 417.25,179.40625 L 415.90625,177.84375 L 414.9375,178.4375 L 415.6875,179.59375 L 413.75,180.78125 L 414.34375,182.34375 L 412.1875,183.125 L 412.1875,185.65625 L 409.4375,185.65625 L 409.25,187.21875 L 406.53125,187.8125 L 406.71875,190.15625 L 408.46875,190.34375 L 407.5,191.5 L 406.90625,195.40625 L 405.15625,195.40625 L 402.21875,196.59375 L 399.09375,195.40625 L 396.375,196.59375 L 396.375,198.5625 L 398.5,198.9375 L 400.0625,202.0625 L 400.28125,203.625 L 397.75,206.5625 L 396.5625,206.9375 L 395.78125,207.90625 L 397.9375,208.90625 L 398.3125,212.03125 L 400.0625,212.21875 L 400.28125,216.125 L 401.0625,216.90625 L 401.15625,217.53125 L 402.65625,217.9375 L 404.34375,219.34375 L 406.875,219.34375 L 407.84375,218.375 L 409.5625,218.4375 L 411.34375,218.5 L 415.28125,215.28125 L 416.40625,215.28125 L 417.65625,214.3125 L 421.71875,214.4375 L 424.8125,211.90625 L 427.0625,211.5 L 427.90625,209.40625 L 429.71875,208.84375 L 431.53125,205.75 L 434.0625,203.78125 L 436.71875,203.375 L 438.6875,204.78125 L 442.34375,204.34375 L 442.34375,202.375 L 443.8125,201.53125 L 444.96875,199.9375 L 447.21875,199.9375 L 448.46875,198.625 L 448.9375,195.5 L 448.9375,193.5625 L 448.09375,190.59375 L 448.09375,188.09375 L 449.625,186.96875 L 451.4375,186.03125 L 451.25,185.65625 L 445,182.34375 L 443.25,180.375 L 441.5,179.21875 L 439.9375,180 L 439.71875,181.15625 L 438.15625,182.125 L 437.1875,182.125 L 434.25,178.8125 L 430.15625,178.8125 L 428.40625,180.1875 L 426.84375,180.375 L 424.3125,178.4375 L 424.5,176.28125 L 423.5,175.5 z ", "name" : "Haute Saône"}, + "FR-71" : {"path": "M 351.46875,227.84375 L 351.46875,228.03125 L 348.53125,228.03125 L 346.15625,229.4375 L 344.75,231.40625 L 345.875,233.09375 L 346.84375,233.65625 L 346.15625,235.34375 L 345.15625,235.90625 L 344.0625,237.4375 L 345.3125,238.28125 L 345.15625,240.25 L 345.4375,242.34375 L 347.28125,243.46875 L 347.28125,244.3125 L 345.3125,245.4375 L 345.3125,246.6875 L 346.71875,247.9375 L 346.5625,248.65625 L 343.5,248.5 L 343.21875,249.5 L 341.8125,249.78125 L 340.40625,251.59375 L 338.59375,251.59375 L 337.1875,253 L 335.34375,253.28125 L 334.375,250.90625 L 333.125,250.75 L 330.0625,252.65625 L 333.6875,259.46875 L 333.6875,262.40625 L 334.65625,263.59375 L 337.96875,263.59375 L 339.125,265.15625 L 342.25,265.15625 L 343.625,267.09375 L 343.4375,274.71875 L 339.34375,277.84375 L 339.25,278.0625 L 339.53125,278.03125 L 340.125,278.21875 L 340.3125,281.34375 L 343.25,281.9375 L 343.625,283.3125 L 345.1875,283.3125 L 347.53125,281.9375 L 353.78125,282.90625 L 354.96875,284.09375 L 356.53125,282.53125 L 358.6875,282.53125 L 359.84375,276.28125 L 360.625,275.6875 L 362.5625,275.6875 L 364.9375,277.25 L 366.6875,275.6875 L 367.84375,277.25 L 369.625,275.5 L 371.75,275.3125 L 372.75,278.4375 L 373.5,282.34375 L 374.875,282.53125 L 376.0625,279.78125 L 379.75,265.34375 L 381.125,262.8125 L 383.28125,262.59375 L 385.4375,264.375 L 387,263.96875 L 388.9375,262.59375 L 390.90625,263 L 392.0625,265.53125 L 393.1875,265.96875 L 398.3125,265.34375 L 400.28125,263.78125 L 399.5,262.59375 L 397.15625,261.8125 L 396.9375,259.09375 L 398.90625,257.71875 L 399.6875,254.40625 L 397.9375,251.28125 L 396.75,249.71875 L 397.34375,249.125 L 397.34375,247.1875 L 395.78125,246.1875 L 395.375,244.625 L 399.875,244.0625 L 400.28125,242.5 L 398.90625,242.5 L 397.75,241.125 L 395.59375,241.125 L 393.8125,238.1875 L 392.25,238 L 392.4375,235.65625 L 390.75,235.46875 L 388.5,237 L 386.25,237.5625 L 384.71875,236.59375 L 382.75,236.46875 L 382.1875,237.28125 L 380.375,237.5625 L 376.3125,238.84375 L 370.40625,240.9375 L 368.15625,239.125 L 365.5,238.5625 L 365.375,236.1875 L 362.84375,234.34375 L 359.34375,231.6875 L 355.40625,231.8125 L 351.625,227.90625 L 351.46875,227.84375 z ", "name" : "Saône et Loire"}, + "FR-72" : {"path": "M 202.4375,151.875 L 197.15625,152.0625 L 191.875,156.9375 L 189.125,156.78125 L 185.46875,157.96875 L 184.34375,159.90625 L 183.84375,164.09375 L 184.1875,166.65625 L 181.28125,169.09375 L 180.46875,170.6875 L 181.125,172.15625 L 180.3125,174.09375 L 180.625,174.90625 L 177.40625,175.21875 L 176.9375,176.65625 L 178.375,180.21875 L 178.21875,181.1875 L 176.9375,182.3125 L 174.1875,182.46875 L 173.84375,183.4375 L 174.5,184.40625 L 174.5,190.21875 L 173.875,191.6875 L 175.625,193.125 L 175.625,195.0625 L 178.53125,195.21875 L 186.125,197.46875 L 194.34375,202.46875 L 197,203.5 L 198.3125,200.875 L 202.21875,203.625 L 204.375,203.625 L 203.1875,199.71875 L 205.5625,201.28125 L 206.90625,199.3125 L 212.5625,197.75 L 211.59375,195.40625 L 212.96875,193.65625 L 215.90625,192.5 L 218.625,188.96875 L 218.625,185.25 L 220.59375,185.25 L 221.375,182.53125 L 221.5625,178.4375 L 219.625,176.65625 L 221.1875,173.9375 L 223.5,171 L 220.78125,169.0625 L 218.25,168.65625 L 215.5,164.5625 L 214.71875,164.5625 L 214.53125,166.5 L 214.34375,165.15625 L 210.25,165.15625 L 208.28125,162.21875 L 204.96875,161.03125 L 204,154 L 202.4375,151.875 z ", "name" : "Sarthe"}, + "FR-73" : {"path": "M 417,293.8125 L 416.59375,299.53125 L 415.3125,300.59375 L 415.3125,306.96875 L 412.75,307.40625 L 412.34375,311.03125 L 410,312.71875 L 409.96875,312.6875 L 410.21875,313.78125 L 412.5625,316.3125 L 412.5625,318.03125 L 414.875,322.28125 L 419.78125,323.34375 L 421.46875,324.625 L 422.125,323.96875 L 421.25,322.28125 L 422.53125,319.5 L 424.03125,319.3125 L 426.5625,322.6875 L 427.625,321.21875 L 429.125,321.21875 L 433.15625,325.25 L 433.375,328 L 431.46875,329.0625 L 430.59375,333.09375 L 432.3125,334.8125 L 432.3125,336.5 L 431.875,338.21875 L 433.15625,336.9375 L 435.28125,338.21875 L 436.40625,339.75 L 439.9375,339.375 L 441.09375,340.53125 L 441.6875,343.28125 L 445.1875,342.875 L 445.59375,339.9375 L 447.34375,339.15625 L 451.09375,339.34375 L 451.03125,339.21875 L 456.875,336.875 L 459.03125,338.25 L 461.1875,338.25 L 461.375,335.90625 L 463.90625,334.53125 L 464.875,333.375 L 469.96875,331.40625 L 470.5625,328.09375 L 469.5625,326.53125 L 472.3125,321.84375 L 469.78125,320.875 L 469,318.125 L 463.71875,315 C 463.71875,315 464.03377,309.01275 463.53125,307.9375 C 463.51544,307.91055 463.48155,307.86019 463.46875,307.84375 C 463.46374,307.8383 463.44264,307.81713 463.4375,307.8125 C 463.43393,307.81272 463.4091,307.81243 463.40625,307.8125 C 463.4062,307.80552 463.40608,307.78312 463.40625,307.78125 C 463.40269,307.78137 463.37784,307.78121 463.375,307.78125 C 463.37209,307.7811 463.3467,307.78118 463.34375,307.78125 C 463.34022,307.78117 463.31534,307.78126 463.3125,307.78125 C 462.53125,307.97657 459.625,308.1875 459.625,308.1875 L 456.6875,304.84375 L 456.78125,301.625 L 455.46875,301.46875 L 453.96875,303.15625 L 452.0625,304.4375 L 452.5,303.375 L 450.5625,300.1875 L 447.375,300.1875 L 445.46875,297.84375 L 446.53125,296.5625 L 446.125,295.28125 L 444.625,294.875 L 442.71875,296.15625 L 441.21875,300.59375 L 439.3125,302.09375 L 438.46875,305.5 L 437.625,307.1875 L 434.21875,307.84375 L 433.15625,306.78125 L 430.1875,303.59375 L 428.46875,303.59375 L 427.84375,304.84375 L 424.4375,304.4375 L 422.96875,301.65625 L 419.125,301.03125 L 419.125,295.5 L 417,293.8125 z ", "name" : "Savoie"}, + "FR-74" : {"path": "M 446.125,266.1875 L 441.65625,266.96875 L 437.34375,270.46875 L 436.1875,268.71875 L 434.03125,268.90625 L 432.0625,273.21875 L 432.28125,274.96875 L 434.40625,276.71875 L 430.5,279.28125 L 427.96875,281.625 L 423.65625,281.625 L 421.6875,283.1875 L 419.78125,283.8125 L 418.71875,285.75 L 416.8125,284.6875 L 416.375,290.1875 L 417.4375,292.125 L 417.5,294.21875 L 419.125,295.5 L 419.125,301.03125 L 422.96875,301.65625 L 424.4375,304.4375 L 427.84375,304.84375 L 428.46875,303.59375 L 430.1875,303.59375 L 433.15625,306.78125 L 434.21875,307.84375 L 437.625,307.1875 L 438.46875,305.5 L 439.3125,302.09375 L 441.21875,300.59375 L 442.71875,296.15625 L 444.625,294.875 L 446.125,295.28125 L 446.53125,296.5625 L 445.46875,297.84375 L 447.375,300.1875 L 450.5625,300.1875 L 452.5,303.375 L 452.0625,304.4375 L 453.96875,303.15625 L 455.46875,301.46875 L 456.78125,301.625 L 456.875,298.21875 L 463.53125,295.46875 L 464.3125,293.53125 L 463.90625,289.21875 L 459.625,284.75 L 458.25,285.53125 L 458.25,283.75 L 458.25,280.84375 L 454.53125,279.0625 L 454.34375,277.5 L 456.5,275.15625 L 456.5,272.4375 L 452.96875,268.71875 L 452.78125,266.1875 L 446.125,266.1875 z ", "name" : "Haute Savoie"}, + "FR-75" : {"path": "M 280.28125,129.0625 L 277.75,129.09375 L 276.625,129.59375 L 276.15625,130.21875 L 275.125,130.28125 L 274.1875,131.34375 L 274.21875,131.9375 L 274.4375,132.625 L 276,133.0625 L 277.90625,134.03125 L 279.125,134.09375 L 279.9375,133.875 L 280.78125,133.28125 L 281.0625,133.53125 L 282.875,133.78125 L 283.1875,133.125 L 283.1875,132.46875 L 282.875,132.34375 L 281.625,132.40625 L 281.71875,132.71875 L 281.5,132.90625 L 281.09375,132.90625 L 281.25,132.5 L 281.3125,132.0625 L 281.25,132.0625 L 281.09375,130.3125 L 280.28125,129.0625 z ", "name" : "Paris"}, + "FR-76" : {"path": "M 241.9375,61.5 L 240.65625,63.0625 L 232.28125,69.5 L 217.4375,73.21875 L 207.65625,76.71875 L 199.65625,81.03125 L 194.96875,88.0625 L 194,93.53125 L 197.90625,96.46875 L 203.5625,97.625 L 202.65625,97.78125 L 202.6875,97.9375 L 207.0625,97.375 L 209.3125,94.96875 L 211,94.5625 L 212.9375,97.9375 L 215.625,97.65625 L 216.75,99.59375 L 221.5,99.3125 L 226.28125,102.6875 L 223.1875,103.65625 L 225.4375,105.34375 L 226.84375,105.34375 L 228.09375,108.03125 L 230.34375,108.03125 L 231.03125,106.34375 L 229.34375,105.21875 L 234.125,103.8125 L 239.15625,103.25 L 240.4375,99.59375 L 242.8125,97.5 L 247.3125,97.375 L 252.5,100.03125 L 255.59375,100.375 L 256.125,98.75 L 257.5,96.1875 L 258.28125,94.84375 L 256.3125,94.84375 L 256.3125,91.5 L 255.15625,89.5625 L 255.9375,85.65625 L 256.71875,83.6875 L 255.15625,83.6875 L 255.9375,81.75 L 257.875,79.40625 L 255.9375,75.875 L 255.34375,72.375 L 246.75,63.96875 L 245.78125,62.03125 L 243.625,62.21875 L 241.9375,61.5 z ", "name" : "Seine Maritime"}, + "FR-77" : {"path": "M 307.5,116.5 L 306.3125,117.09375 L 304.375,118.65625 L 302.4375,118.0625 L 299.09375,119.4375 L 296.375,117.875 L 295.1875,119.4375 L 293.4375,119.625 L 292.25,118.65625 L 290.3125,117.5 L 287.96875,119.0625 L 287.875,118.96875 L 287.03125,124.375 L 288.1875,131.25 L 288.1875,135.84375 L 286.65625,139.6875 L 287.03125,142.34375 L 285.3125,143.6875 L 286.25,148.875 L 285.5,150 L 284.9375,155.1875 L 286.25,156.90625 L 281.875,159.78125 L 281.875,163.71875 L 283.09375,165.53125 L 285.4375,166.71875 L 285.625,170.03125 L 282.5,172.1875 L 284.25,173.75 L 286.40625,172.375 L 291.6875,172.5625 L 293.625,172.1875 L 294.21875,170.625 L 296.375,170.8125 L 296.75,172.375 L 301.625,169.625 L 303.40625,167.5 L 305.75,164.75 L 304.1875,163 L 305.5625,160.0625 L 309.0625,158.3125 L 316.6875,158.6875 L 318.4375,157.34375 L 318.59375,157.5 L 319.03125,154.21875 L 319.8125,150.3125 L 321.1875,148.53125 L 321.375,146.1875 L 324.09375,145.03125 L 324.09375,143.46875 L 321.1875,143.65625 L 320.59375,142.28125 L 321.5625,140.53125 L 320.78125,137.59375 L 319.21875,136.625 L 319.625,133.90625 L 321.1875,132.90625 L 320.96875,131.75 L 321.53125,131.0625 L 318.25,130.375 L 317.25,128.03125 L 315.5,127.4375 L 310.25,122.375 L 309.65625,118.0625 L 307.5,116.5 z ", "name" : "Seine et Marne"}, + "FR-78" : {"path": "M 251.5,118.15625 L 251.4375,118.28125 L 245.96875,119.84375 L 245.1875,120.8125 L 246.1875,122.375 L 246.1875,123.9375 L 247.9375,124.3125 L 246.9375,125.3125 L 247.03125,126.1875 L 247.15625,126.09375 L 249.09375,128.03125 L 249.6875,130.375 L 251.25,131.9375 L 250.46875,134.09375 L 250.46875,136.03125 L 251.84375,137.59375 L 250.46875,139.9375 L 251.84375,143.28125 L 254.5625,145.21875 L 254.96875,147.375 L 257.3125,147.75 L 257.875,152.0625 L 259.65625,154.21875 L 262.8125,154.8125 L 263.28125,151.71875 L 264.625,150.1875 L 263.5,148.46875 L 266.34375,148.46875 L 268.28125,145.8125 L 266.9375,143.5 L 267.3125,141.40625 L 270.1875,140.0625 L 270.5625,137.9375 L 272.46875,137.1875 L 274.21875,136.40625 L 274.5625,136.625 L 274.5625,136.40625 L 272.8125,134.4375 L 271.71875,131.46875 L 273.46875,127.65625 L 272.59375,124.78125 L 269.1875,122.71875 L 264.375,122.5 L 259.875,119.625 L 256.25,120.28125 L 251.5,118.15625 z ", "name" : "Yvelines"}, + "FR-79" : {"path": "M 181.71875,229.40625 L 176.4375,229.59375 L 171.5625,230.5625 L 166.28125,230.96875 L 166.28125,233.6875 L 163.5625,235.46875 L 157.5,234.09375 L 153.40625,235.84375 L 155.34375,238.59375 L 155.34375,240.9375 L 160.03125,244.84375 L 158.875,247.375 L 162,250.875 L 160.625,252.65625 L 162.5625,255.5625 L 163.15625,261.03125 L 162,262.59375 L 163.375,264.9375 L 162,267.5 L 162.1875,269.0625 L 163.75,267.875 L 165.6875,269.84375 L 162.96875,271.59375 L 162,272.75 L 159.84375,273.34375 L 157.3125,274.53125 L 157.125,274.375 L 157.21875,277.25 L 159.34375,279.5625 L 159.34375,280.84375 L 162.53125,283.1875 L 166.5625,283.40625 L 169.3125,287 L 173.78125,286.59375 L 177.40625,289.125 L 180.15625,290.40625 L 180.59375,292.53125 L 182.125,294 L 183.96875,292.96875 L 183.5625,291.90625 L 185.03125,290.1875 L 185.03125,288.71875 L 187.59375,288.0625 L 191,286.375 L 194.59375,285.75 L 195.25,283.8125 L 192.25,282.96875 L 190.78125,280.625 L 191.84375,278.09375 L 193.125,276.59375 L 193.125,273.40625 L 191.84375,272.5625 L 190.15625,273.40625 L 190.15625,274.46875 L 189.28125,275.75 L 187.59375,273.84375 L 187.375,272.5625 L 188.03125,271.09375 L 186.53125,270.03125 L 186.53125,265.5625 L 185.6875,265.34375 L 185.6875,263.84375 L 186.96875,261.71875 L 187.15625,260.65625 L 188.03125,258.34375 L 187.375,256.84375 L 185.25,256 L 187.375,252.8125 L 188.03125,251.125 L 188.03125,250.0625 L 186.53125,248.34375 L 186.53125,247.71875 L 187.375,246.21875 L 186.75,245.15625 L 188.03125,243.6875 L 186.96875,241.34375 L 186.3125,237.9375 L 186.09375,235.8125 L 184.40625,236.03125 L 184.09375,231.21875 L 183.6875,231.9375 L 182.3125,230.78125 L 181.71875,229.40625 z ", "name" : "Deux Sèvres"}, + "FR-80" : {"path": "M 249.78125,44.5 L 249.25,50.9375 L 253.5625,54.84375 L 253.5625,56.8125 L 248.28125,53.6875 L 241.9375,61.5 L 243.625,62.21875 L 245.78125,62.03125 L 246.75,63.96875 L 255.34375,72.375 L 255.9375,75.875 L 257.875,79.40625 L 257.21875,80.21875 L 259.6875,80.21875 L 260.09375,80.8125 L 260.09375,82.96875 L 261.28125,83.78125 L 263.84375,82.78125 L 267.4375,82.78125 L 269.21875,84.15625 L 275.9375,83.5625 L 280.90625,84.96875 L 283.6875,87.75 L 287.25,88.125 L 290.8125,89.3125 L 295.1875,85.15625 L 300.34375,83.78125 L 303.125,84.15625 L 307.25,83.75 L 306.875,81.59375 L 305.90625,77.625 L 305.5,75.25 L 307.28125,73.25 L 307.28125,70.6875 L 309.84375,67.90625 L 309.375,65.15625 L 307.875,64.75 L 306.125,63 L 301.4375,63 L 298.5,64.5625 L 298.5,63.1875 L 297.75,61.8125 L 295.96875,62.59375 L 293.8125,63.78125 L 295,62.03125 L 294.8125,60.46875 L 292.25,58.6875 L 292.25,60.65625 L 290.5,60.65625 L 286.40625,59.28125 L 284.65625,57.90625 L 282.875,59.09375 L 282.3125,60.65625 L 281.53125,60.84375 L 280.5625,59.875 L 280.5625,57.125 L 283.46875,55.1875 L 282.3125,53.21875 L 279.96875,54.21875 L 278.78125,53.21875 L 273.90625,53.8125 L 271.375,54.78125 L 268.8125,53.8125 L 268.8125,51.875 L 265.3125,50.3125 L 264.34375,47.96875 L 262.96875,48.53125 L 259.25,45.625 L 257.5,45.03125 L 256.125,46.78125 L 253.78125,47.375 L 252.8125,45.21875 L 249.78125,44.5 z ", "name" : "Somme"}, + "FR-81" : {"path": "M 270.8125,396.875 L 267.4375,397.0625 L 265.15625,399.34375 L 264.4375,397.75 L 262.84375,398.65625 L 262.6875,398.28125 L 261.78125,399.1875 L 258.96875,400.25 L 256.65625,401.65625 L 250.65625,402.375 L 249.9375,405.375 L 252.25,405.375 L 249.9375,407.5 L 248.875,409.4375 L 245.53125,409.4375 L 247.28125,411.375 L 246.28125,413.03125 L 246.59375,413.15625 L 247.46875,415.78125 L 249.59375,418.28125 L 250.125,418.625 L 250.28125,421.09375 L 252.0625,423.9375 L 253.46875,425.53125 L 253.46875,427.46875 L 252.0625,428 L 253.125,429.59375 L 257.71875,431.53125 L 258.59375,432.78125 L 260.90625,435.59375 L 263.5625,436.3125 L 265.6875,435.9375 L 265.6875,438.4375 L 265.625,439.71875 L 266.78125,439.5625 L 266.5,440.9375 L 270.375,440.9375 L 273.96875,442.0625 L 274.25,438.46875 L 275.90625,438.46875 L 281.96875,439.5625 L 287.78125,439.5625 L 292.1875,438.1875 L 293.3125,434.59375 L 290.28125,431.8125 L 291.09375,429.0625 L 292.75,426.59375 L 295.5,428.5 L 302.6875,426.03125 L 303.8125,423.8125 L 300.15625,421.46875 L 298.5625,421.09375 L 297.5,422.5 L 295.375,423.03125 L 292,421.28125 L 288.46875,416.6875 L 288.46875,414.75 L 286.53125,411.1875 L 286.71875,409.59375 L 285.125,405.53125 L 282.125,404.125 L 280,400.40625 L 274.15625,399.34375 L 270.8125,396.875 z ", "name" : "Tarn"}, + "FR-82" : {"path": "M 220.1875,384.6875 L 218.8125,389.15625 L 220.96875,391.5 L 220,395.21875 L 218.8125,396.59375 L 219.625,398.9375 L 215.90625,399.71875 L 212.96875,400.5 L 213.75,403.21875 L 212.28125,403.65625 L 213.15625,404.46875 L 216,404.46875 L 217.40625,403.78125 L 218.65625,404.46875 L 216.34375,405.53125 L 216.34375,407.3125 L 214.21875,408.90625 L 214.21875,411.1875 L 218.125,411.375 L 219.34375,412.625 L 219.34375,415.09375 L 220.78125,416.5 L 219.53125,418.4375 L 220.0625,419.5 L 222.53125,418.4375 L 227.65625,418.4375 L 229.09375,417.5625 L 230.84375,417.5625 L 232.78125,419.875 L 237.21875,418.625 L 238.4375,416.6875 L 236.6875,415.78125 L 237.90625,415.28125 L 238.28125,413.5 L 240.21875,413.6875 L 241.28125,414.90625 L 242.15625,413.5 L 245,412.4375 L 246.28125,413.03125 L 247.28125,411.375 L 245.53125,409.4375 L 248.875,409.4375 L 249.9375,407.5 L 252.25,405.375 L 249.9375,405.375 L 250.65625,402.375 L 256.65625,401.65625 L 258.96875,400.25 L 261.78125,399.1875 L 262.6875,398.28125 L 261.59375,395.46875 L 263.1875,392.28125 L 260.375,392.09375 L 260.03125,387.6875 L 255.78125,389.625 L 252.9375,388.9375 L 251.1875,391.0625 L 248.1875,390.6875 L 247.65625,394.21875 L 246.21875,394.21875 L 245.34375,392.28125 L 244.8125,391.40625 L 243.21875,391.5625 L 240.21875,394.75 L 236.5,394.59375 L 235.96875,392.28125 L 235.96875,390.53125 L 235.625,390.15625 L 234.375,391.5625 L 232.78125,391.5625 L 231.03125,389.625 L 229.4375,389.625 L 228.375,387.5 L 229.78125,385.90625 L 229.625,384.875 L 227.125,384.96875 L 227.4375,385.65625 L 223.125,386.4375 L 220.1875,384.6875 z ", "name" : "Tarn et Garonne"}, + "FR-83" : {"path": "M 457.78125,413.1875 L 454.8125,413.3125 L 453.40625,414.75 L 448.09375,414.5625 L 443.5,417.90625 L 440.34375,415.78125 L 435.375,417.375 L 434.5,419.15625 L 430.96875,421.8125 L 424.59375,417.5625 L 419.4375,419.25 L 419.1875,420.625 L 419.28125,420.5625 L 422.46875,422.6875 L 418.21875,425.53125 L 416.46875,429.0625 L 418.59375,430.8125 L 418.40625,434.53125 L 421.78125,437.71875 L 420.875,438.4375 L 417,438.25 L 417,439.65625 L 418.75,440.53125 L 418.75,441.0625 L 417.15625,442.5 L 418.0625,443.5625 L 419.46875,443.5625 L 420.875,444.96875 L 421.0625,446.03125 L 419.28125,447.09375 L 417.875,448.6875 L 417.6875,452.5625 L 418.21875,453.28125 L 421.71875,454.84375 L 422.6875,458.75 L 424.84375,459.15625 L 426.8125,457.78125 L 430.3125,455.625 L 436.375,456.21875 L 436.1875,457.78125 L 434.21875,458.75 L 438.90625,458.96875 L 437.75,457.78125 L 437.34375,455.25 L 439.875,453.5 L 442.8125,454.46875 L 444,454.84375 L 444.96875,456.03125 L 446.34375,455.0625 L 446.71875,452.5 L 448.28125,451.15625 L 452.375,451.15625 L 453.5625,449.375 L 456.28125,450.15625 L 459.40625,448.8125 L 459.40625,443.71875 L 455.3125,443.90625 L 458.4375,441.96875 L 460,439.8125 L 460.40625,436.6875 L 466.0625,435.90625 L 469.21875,432.375 L 467.03125,430.125 L 467.03125,428.875 L 465.96875,427.8125 L 467.375,426.59375 L 467.03125,424.625 L 464.71875,423.75 L 463.5,423.75 L 461.375,421.625 L 461,417.90625 L 458.71875,416.84375 L 456.40625,416.6875 L 455.53125,414.5625 L 457.78125,413.1875 z ", "name" : "Var"}, + "FR-84" : {"path": "M 387,381.34375 L 384.25,381.5625 L 382.125,384.875 L 382.6875,388.375 L 386,388.78125 L 385.4375,390.34375 L 382.875,390.53125 L 379.96875,393.46875 L 379.1875,392.5 L 379.75,388.59375 L 378.59375,387.21875 L 373.3125,388 L 372.28125,390.09375 L 372.84375,390.40625 L 376.15625,395.90625 L 376.15625,400.34375 L 381.96875,406.125 L 381.96875,408.625 L 379.71875,409.90625 L 379.875,409.96875 L 386.9375,412.96875 L 389.9375,416.3125 L 391.375,418.28125 L 395.25,420.03125 L 399.84375,419.875 L 407.4375,423.03125 L 411.6875,423.5625 L 417,422.34375 L 419.1875,420.625 L 419.46875,419.15625 L 415.40625,414.5625 L 410.96875,414.5625 L 410.96875,412.96875 L 412.5625,411.1875 L 412.5625,409.25 L 409.03125,407.5 L 408.6875,404.65625 L 410.625,403.78125 L 410.625,401.3125 L 408.5,400.9375 L 408.34375,398.28125 L 408.3125,398.09375 L 406.53125,397.96875 L 403.59375,395.8125 L 402.8125,393.28125 L 397.34375,392.875 L 393.25,392.5 L 392.84375,390.15625 L 394.21875,387.21875 L 391.6875,389.375 L 387.78125,388.96875 L 387,387.59375 L 389.71875,383.90625 L 387,381.34375 z ", "name" : "Vaucluse"}, + "FR-85" : {"path": "M 138.53125,229.5625 L 137.40625,231.65625 L 134.1875,231.65625 L 135.46875,232.96875 L 134.5,236.1875 L 131.59375,237.15625 L 130.46875,236.34375 L 130.96875,233.125 L 130.15625,231.34375 L 128.375,231.34375 L 127.09375,232.78125 L 127.71875,237.3125 L 129.1875,239.40625 L 127.71875,241.03125 L 125,240.53125 L 120.96875,239.5625 L 119.84375,236.5 L 117.25,236.1875 L 113.875,234.71875 L 113.0625,232.78125 L 109.375,230.375 L 103.5625,237.875 L 103.375,242.5625 L 109.40625,248.40625 L 109.21875,250.15625 L 110.96875,250.15625 L 114.6875,261.3125 L 118.59375,263.25 L 122.5,267.15625 L 127,267.15625 L 128.75,271.0625 L 133.0625,271.0625 L 135,274 L 139.3125,276.15625 L 139.5,273.40625 L 140.59375,274.4375 L 146.5625,270.8125 L 149.3125,270.625 L 150.46875,273.75 L 154.1875,272.1875 L 157.3125,274.53125 L 159.84375,273.34375 L 162,272.75 L 162.96875,271.59375 L 165.6875,269.84375 L 163.75,267.875 L 162.1875,269.0625 L 162,267.5 L 163.375,264.9375 L 162,262.59375 L 163.15625,261.03125 L 162.5625,255.5625 L 160.625,252.65625 L 162,250.875 L 158.875,247.375 L 160.03125,244.84375 L 155.34375,240.9375 L 155.34375,238.59375 L 153.40625,235.84375 L 153.78125,235.6875 L 151.125,233.4375 L 146.125,233.4375 L 144.5,232.46875 L 142.25,232.15625 L 139.65625,229.71875 L 138.53125,229.5625 z ", "name" : "Vendée"}, + "FR-86" : {"path": "M 188.75,225.6875 L 185.03125,229.59375 L 184.09375,231.21875 L 184.40625,236.03125 L 186.09375,235.8125 L 186.3125,237.9375 L 186.96875,241.34375 L 188.03125,243.6875 L 186.75,245.15625 L 187.375,246.21875 L 186.53125,247.71875 L 186.53125,248.34375 L 188.03125,250.0625 L 188.03125,251.125 L 187.375,252.8125 L 185.25,256 L 187.375,256.84375 L 188.03125,258.34375 L 187.15625,260.65625 L 186.96875,261.71875 L 185.6875,263.84375 L 185.6875,265.34375 L 186.53125,265.5625 L 186.53125,270.03125 L 188.03125,271.09375 L 187.375,272.5625 L 187.59375,273.84375 L 189.28125,275.75 L 190.15625,274.46875 L 190.15625,273.40625 L 191.84375,272.5625 L 193.125,273.40625 L 193.125,276.59375 L 191.84375,278.09375 L 190.78125,280.625 L 192.25,282.96875 L 195.25,283.8125 L 194.59375,285.75 L 191.8125,286.21875 L 194.375,289.34375 L 197.78125,289.125 L 200.75,288.0625 L 203.75,289.78125 L 204.8125,288.9375 L 204.59375,286.15625 L 206.28125,284.875 L 207.78125,287.4375 L 209.03125,288.71875 L 212.65625,287.21875 L 214.15625,285.53125 L 217.53125,285.53125 L 219.28125,286.40625 L 219.40625,282.71875 L 218.0625,281.15625 L 219.625,280 L 222.15625,277.0625 L 226.4375,276.875 L 226.4375,274.53125 L 228.59375,272.75 L 233.875,271.78125 L 234.25,268.84375 L 232.125,267.6875 L 230.9375,263.59375 L 227.8125,263.1875 L 225.875,261.25 L 222.15625,258.3125 L 222.9375,255.96875 L 222.9375,252.25 L 219.40625,248.75 L 219.03125,246 L 215.6875,242.5 L 214.53125,237.8125 L 213.15625,237.21875 L 211.59375,235.0625 L 210.03125,236.03125 L 210.4375,238.1875 L 205.34375,239.375 L 199.5,239.375 L 199.6875,237.03125 L 199.6875,233.3125 L 195,231.9375 L 195,229.59375 L 191.28125,228.8125 L 190.5,225.6875 L 188.75,225.6875 z ", "name" : "Vienne"}, + "FR-87" : {"path": "M 239.53125,270.8125 L 237.78125,272.5625 L 232.875,272.1875 L 232.3125,272.0625 L 228.59375,272.75 L 226.4375,274.53125 L 226.4375,276.875 L 222.15625,277.0625 L 219.625,280 L 218.0625,281.15625 L 219.40625,282.71875 L 219.21875,288 L 218.25,289.75 L 219.8125,291.5 L 222.53125,291.71875 L 223.125,294.4375 L 223.3125,296.1875 L 219.8125,296.96875 L 218.0625,297.5625 L 218.4375,302.4375 L 216.09375,304 L 214.125,304.59375 L 213.15625,307.34375 L 211.59375,307.53125 L 210.9375,310.5 L 215.5,310.65625 L 216.5,312.59375 L 215.6875,314.75 L 217.46875,317.09375 L 218.8125,316.71875 L 220.1875,314.75 L 226.4375,315.34375 L 227.4375,319.25 L 231.71875,319.84375 L 232.6875,321.1875 L 229.75,322.5625 L 231.125,323.53125 L 235.25,324.125 L 235.5625,324.90625 L 236.65625,322.6875 L 239,323.5625 L 241.5625,320.375 L 243.03125,320.5625 L 244.3125,318.4375 L 248.125,318.875 L 249.625,317.375 L 251.53125,317.375 L 253.03125,314.625 L 255.34375,314.40625 L 256.84375,311.875 L 258.96875,312.5 L 260.46875,312.5 L 261.46875,310.78125 L 260.46875,310.15625 L 260.03125,307.625 L 261.53125,307.625 L 261.53125,306.5625 L 258.96875,304.84375 L 256.21875,303.59375 L 256.625,301.03125 L 255.78125,301.03125 L 254.71875,302.53125 L 251.3125,302.71875 L 249.40625,302.53125 L 249.40625,300.59375 L 251.75,298.6875 L 250.25,296.78125 L 246.65625,297.84375 L 247.28125,289.78125 L 245.59375,288.0625 L 243.875,283.8125 L 241.34375,283.1875 L 240.90625,280.84375 L 243.25,276.1875 L 243.1875,273.3125 L 242.65625,273.9375 L 239.53125,270.8125 z ", "name" : "Haute Vienne"}, + "FR-88" : {"path": "M 459,145.9375 L 457,146.375 L 453.9375,147.53125 L 452.40625,149.4375 L 450.6875,150.59375 L 447.40625,152.125 L 446.46875,151.9375 L 444.15625,151.34375 L 441.875,151.15625 L 441.09375,148.65625 L 439.5625,149.25 L 439.375,151.9375 L 438.21875,150.78125 L 436.125,152.3125 L 434.03125,153.0625 L 431.53125,152.875 L 429.8125,153.46875 L 427.90625,152.3125 L 426.75,153.25 L 423.875,153.25 L 422.53125,155.75 L 416.21875,156.125 L 414.875,154.40625 L 412.78125,154.03125 L 412.96875,153.0625 L 414.3125,152.125 L 413.15625,151.71875 L 412.96875,148.65625 L 410.09375,148.46875 L 408.40625,149 L 407.21875,150.59375 L 404.15625,151.53125 L 404.15625,150.40625 L 403.21875,150.40625 L 403.21875,151.71875 L 399.375,152.5 L 399.375,154.21875 L 395.9375,154.65625 L 394.625,155.96875 L 395.96875,157.90625 L 399.09375,158.125 L 401.84375,161.8125 L 404.1875,161.8125 L 404.75,164.375 L 407.3125,164.75 L 407.875,166.5 L 406.125,167.6875 L 404.96875,172.96875 L 410.4375,175.6875 L 410.4375,179.78125 L 412.5625,179 L 414.34375,180.40625 L 415.6875,179.59375 L 414.9375,178.4375 L 415.90625,177.84375 L 417.25,179.40625 L 419.21875,178.03125 L 419.8125,176.09375 L 423.5,175.5 L 424.5,176.28125 L 424.3125,178.4375 L 426.84375,180.375 L 428.40625,180.1875 L 430.15625,178.8125 L 434.25,178.8125 L 437.1875,182.125 L 438.15625,182.125 L 439.71875,181.15625 L 439.9375,180 L 441.5,179.21875 L 443.25,180.375 L 445,182.34375 L 451.15625,185.59375 L 453.59375,183.5 L 453.78125,175.875 L 457.125,172.96875 L 459.0625,168.46875 L 458.46875,165.53125 L 460.8125,160.84375 L 462.96875,155.96875 L 459.25,155 L 458.46875,149.71875 L 459.25,146.1875 L 459,145.9375 z ", "name" : "Vosges"}, + "FR-89" : {"path": "M 318.4375,157.34375 L 316.6875,158.6875 L 309.0625,158.3125 L 305.5625,160.0625 L 304.1875,163 L 305.75,164.75 L 303.40625,167.5 L 301.625,169.625 L 305.15625,172.96875 L 306.125,176.09375 L 308.6875,178.8125 L 308.6875,182.34375 L 303.59375,186.625 L 305.34375,188.59375 L 304.96875,191.5 L 302.21875,193.46875 L 298.3125,193.46875 L 298.90625,195.625 L 301.4375,199.125 L 302.03125,202.25 L 302.625,204.40625 L 301.46875,204.75 L 303.9375,205.3125 L 305.78125,205.3125 L 306.75,203.78125 L 308,203.78125 L 309.40625,205.03125 L 309.125,206.59375 L 310.40625,207.4375 L 312.21875,207.4375 L 314.75,209.125 L 315.875,208.5625 L 317,209.53125 L 318.125,209.25 L 320.0625,208 L 321.90625,208.5625 L 323.15625,208.28125 L 323.15625,204.78125 L 323.84375,204.90625 L 324.28125,206.71875 L 326.53125,208.125 L 326.53125,210.25 L 329.75,210.375 L 333.96875,214.3125 L 336.625,214.4375 L 336.46875,213.1875 L 337.59375,211.5 L 338.59375,212.75 L 337.75,214.15625 L 338.15625,215.4375 L 339.6875,214.4375 L 341.53125,214.4375 L 341.375,217.25 L 343.0625,218.375 L 344.34375,217.8125 L 347.46875,215.6875 L 347.28125,215.28125 L 345.4375,214.15625 L 345.3125,212.1875 L 347.28125,211.21875 L 348.125,210.09375 L 347.5625,209.125 L 347.5625,206.875 L 349.09375,204.625 L 351.34375,199.84375 L 351.75,197.75 L 353.15625,197.1875 L 353.3125,196.78125 L 352.59375,196.21875 L 352.59375,194.53125 L 354.84375,192.84375 L 355.40625,190.03125 L 354.4375,188.375 L 352.875,188.375 L 352.46875,187.9375 L 352.46875,185.5625 L 354.4375,184.15625 L 354.28125,182.75 L 354,181.34375 L 353,183.5 L 351.625,183.3125 L 350.46875,181.15625 L 346.5625,183.125 L 338.75,182.71875 L 337.78125,180.5625 L 335.625,177.65625 L 335.25,174.125 L 332.125,170.40625 L 330.15625,171.78125 L 326.625,169.0625 L 327.21875,163.78125 L 322.15625,158.5 L 319.8125,158.5 L 318.4375,157.34375 z ", "name" : "Yonne"}, + "FR-90" : {"path": "M 451.4375,186.03125 L 449.625,186.96875 L 448.09375,188.09375 L 448.09375,190.59375 L 448.9375,193.5625 L 448.9375,195.5 L 448.46875,198.625 L 447.40625,199.71875 L 459.4375,205.15625 L 460.1875,204.28125 L 462.78125,203.875 L 461.8125,199.71875 L 461.21875,197.5625 L 458.46875,197.96875 L 458.09375,195.625 L 459.0625,193.84375 L 459.25,191.5 L 458.6875,190.15625 L 455.15625,187.40625 L 452.03125,187.21875 L 451.4375,186.03125 z ", "name" : "Territoire de Belfort"}, + "FR-91" : {"path": "M 274.21875,136.40625 L 272.46875,137.1875 L 270.5625,137.9375 L 270.1875,140.0625 L 267.3125,141.40625 L 266.9375,143.5 L 268.28125,145.8125 L 266.34375,148.46875 L 263.5,148.46875 L 264.625,150.1875 L 263.28125,151.71875 L 262.8125,154.8125 L 263.75,155 L 264.125,157.53125 L 264.53125,158.125 L 264.9375,163.375 L 271.1875,162.8125 L 273.71875,160.46875 L 275.875,162.21875 L 281.125,162.59375 L 281.875,163.71875 L 281.875,159.78125 L 286.25,156.90625 L 284.9375,155.1875 L 285.5,150 L 286.25,148.875 L 285.3125,143.6875 L 287.03125,142.34375 L 286.6875,139.90625 L 284.53125,138.90625 L 280.90625,138.90625 L 278.8125,137.75 L 277.28125,138.53125 L 274.21875,136.40625 z ", "name" : "Essonne"}, + "FR-92" : {"path": "M 277.3125,125.78125 L 273.8125,127.65625 L 273.4375,127.71875 L 271.71875,131.46875 L 272.8125,134.4375 L 274.5625,136.40625 L 274.5625,136.625 L 277.28125,138.53125 L 277.9375,138.1875 L 277.4375,137.25 L 277.9375,135.78125 L 277.625,135.25 L 277.96875,134.03125 L 277.90625,134.03125 L 276,133.0625 L 274.4375,132.625 L 274.21875,131.9375 L 274.1875,131.34375 L 275.125,130.28125 L 276.15625,130.21875 L 276.625,129.59375 L 277.75,129.09375 L 277.375,128.1875 L 277.90625,128.09375 L 278.3125,127.21875 L 277.90625,126.59375 L 277.46875,126.5 L 277.3125,125.78125 z ", "name" : "Hauts de Seine"}, + "FR-93" : {"path": "M 287.28125,122.8125 L 285.4375,124.125 L 282.5625,125.4375 L 277.3125,125.78125 L 277.46875,126.5 L 277.90625,126.59375 L 278.3125,127.21875 L 277.90625,128.09375 L 277.375,128.1875 L 277.75,129.09375 L 280.28125,129.0625 L 281.09375,130.3125 L 281.25,132.0625 L 282.125,131.9375 L 282.9375,131.28125 L 284.15625,131.34375 L 285.6875,132.21875 L 286.5625,133.1875 L 286.96875,133.375 L 287.21875,133.84375 L 288.1875,134.09375 L 288.1875,131.25 L 287.03125,124.375 L 287.28125,122.8125 z ", "name" : "Seine Saint-Denis"}, + "FR-94" : {"path": "M 282.9375,131.28125 L 282.125,131.9375 L 281.3125,132.0625 L 281.25,132.5 L 281.09375,132.90625 L 281.5,132.90625 L 281.71875,132.71875 L 281.625,132.40625 L 282.875,132.34375 L 283.1875,132.46875 L 283.1875,133.125 L 282.875,133.78125 L 281.0625,133.53125 L 280.78125,133.28125 L 279.9375,133.875 L 279.125,134.09375 L 277.96875,134.03125 L 277.625,135.25 L 277.9375,135.78125 L 277.4375,137.25 L 277.9375,138.1875 L 278.8125,137.75 L 280.90625,138.90625 L 284.53125,138.90625 L 286.6875,139.90625 L 286.65625,139.6875 L 288.1875,135.84375 L 288.1875,134.09375 L 287.21875,133.84375 L 286.96875,133.375 L 286.5625,133.1875 L 285.6875,132.21875 L 284.15625,131.34375 L 282.9375,131.28125 z ", "name" : "Val de Marne"}, + "FR-95" : {"path": "M 255.5625,109.6875 L 254,111.625 L 252.8125,115.9375 L 251.5,118.15625 L 256.25,120.28125 L 259.875,119.625 L 264.375,122.5 L 269.1875,122.71875 L 272.59375,124.78125 L 273.46875,127.65625 L 273.4375,127.71875 L 273.8125,127.65625 L 277.3125,125.78125 L 282.5625,125.4375 L 285.4375,124.125 L 287.28125,122.8125 L 287.875,118.96875 L 286.59375,117.6875 L 282.3125,115.15625 L 278.1875,113 L 276.0625,113.96875 L 273.71875,114.5625 L 272.15625,113.375 L 269.03125,111.4375 L 266.5,113.375 L 262.78125,113.78125 L 257.5,113.375 L 256.3125,111.4375 L 255.5625,109.6875 z ", "name" : "Val d'Oise"} +}}); diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.germany.js b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.germany.js new file mode 100644 index 0000000..0acff38 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.germany.js @@ -0,0 +1,2 @@ +/** Add Germany Map Data Points */ +jQuery.fn.vectorMap('addMap', 'germany_en', {"width":592,"height":801,"pathes":{"th":{"path":"m312.19,352.19c-2.73,0.22 -2.22,4.11 -3.64,5.97 -1.01,2.7 -4.71,2.26 -7.13,2.91 -2.52,0.84 -2.65,-2.93 -5,-3.11 -2.02,-1.67 -5.36,0.2 -4.98,2.55 -0.62,4.82 -6.22,6.91 -9.72,9.65 -2.98,3.28 -7.8,2.07 -11.1,4.73 -2.55,1.59 -5.81,3.14 -7.87,5.03 0.64,3.74 1.96,8.43 6.44,8.84 3.41,0.33 2.07,4.91 5.71,5.17 2.12,1.11 4.61,1.57 6.04,3.67 2.61,-0.18 1.95,2.83 0.13,3.41 -0.75,1.55 1.21,2.98 -0.06,4.88 -2.65,1.33 -1.59,-4.91 -4.58,-2.96 -2.15,1.14 2.24,4.28 1.18,6.62 -0.73,2.87 3.35,2.38 3.93,4.97 0.22,2.4 -1.82,4.2 -4.4,4.04 -1.89,0.05 -3.04,-2.14 -5.19,-1.69 -2.29,-1.13 -3.6,1.4 -2.29,3.19 0.92,3.27 2.06,6.86 1.64,10.24 -1.04,2.07 -1.35,6.09 -4.56,5.07 -2.5,-0.54 -3.05,2.78 -2.17,4.43 0.33,2.11 -1.94,1.58 -0.64,3.71 0.2,3.37 -2.96,5.74 -4.05,8.57 -1.46,3 3.1,3.73 4.61,2.61 -1.8,-1.67 -0.95,-4.04 1.83,-4.18 2.21,-0.46 5.52,-0.43 5.9,2.47 2.29,2.61 -2.68,2.96 -1.96,5.59 0.5,1.86 -0.79,8.31 0.95,7 1.72,-3.38 5.8,-2.18 8.88,-2.88 2.69,0.85 3.11,5.24 6.43,5.5 3.89,0.66 4.77,4.88 6.09,7.93 -0.55,3.14 2.45,3.82 4.54,1.98 0.31,5.02 5.89,6.45 10.06,7.19 -0.2,3.63 -1.27,7.43 0.53,10.84 2.35,0.1 5.18,2.71 7.07,1.85 0.03,-1.3 -1.32,-4.82 1.27,-4.26 2.07,-0.06 5.3,2.5 6.66,0.25 0.29,-2.71 -3.43,-1.58 -4.54,-3.52 -1.94,-1.64 -5.47,-2.54 -4.67,-5.79 -0.91,-3.55 3.89,-3.37 6.02,-4.77 2.87,-1.54 6.27,-0.65 9.38,-0.79 1.61,1.84 2.4,4.9 5.49,4.49 2.33,1.02 3.21,-1.38 4.71,-2.1 2.52,-0.39 4.79,2.85 4.64,5.17 -2.32,0.34 -2,2.87 -0.04,3.79 1.25,1.09 4.62,-1.62 5.78,-2.97 1.07,-2.95 1.98,-5.92 0.84,-9.01 0.33,-2.69 -1.49,-4.1 -2.06,-6.05 -0.35,-1.26 0.15,-3.52 1.89,-2.72 2.51,-0.54 3.16,-3.11 5.03,-4.31 2.41,-0.31 6.41,-0.25 6.75,2.81 -1.09,1.47 -1.71,2.75 -1.31,4.94 2.04,1.91 4.67,0.65 4.88,4.5 0.54,1.96 3.79,3.19 4.05,0.56 1.06,-1.74 3.34,-0.66 4.25,0.63 6.13,-1.07 12.67,-0.94 18.25,-3.97 -1.68,-0.65 -2.19,-2.46 -0.38,-3.31 1.4,-0.73 5.24,-2.7 2.32,-4.13 -1.1,-2.24 -4.24,-0.26 -4.55,-3.08 -1.3,-2.44 2.29,-4.28 3.11,-6.33 2.98,-0.71 2.97,-4.68 5.91,-5.31 1.95,1.54 1.58,4.54 1.16,6.72 1.66,-0.64 6.6,0.71 6.33,-0.74 -3.05,-0.17 -0.61,-3 1.2,-3.1 2.57,-1.22 5.33,-2.23 7.87,-3.14 1.72,-1.51 4.46,-4.54 0.25,-4.48 -1.74,-1.64 -3.31,-4.12 -3.69,-6.5 0.38,-2.82 0.28,-5.87 1.72,-8.41 0.89,2.58 5.82,0.77 5.81,-1.09 0.71,-1.83 4.18,-2.99 5.41,-0.97 2.56,-0.68 0.59,-4.69 3.44,-5.44 3.25,-1.87 7.85,-0.32 10.53,-2.97 -2.57,-1.55 -0.79,-6.34 -4.47,-6.16 -2.74,-0.84 -6.28,-2.6 -5.42,-6.03 0.8,-2.88 -3.5,-2.46 -5.15,-3.47 -2.87,-0.81 -6.3,-2.89 -8.61,0.02 -2.54,2.1 0.01,3.58 1.21,5.21 -0.17,3.21 -2.39,6.03 -3.68,8.9 -1.08,1.71 -2.42,1.35 -2.66,-0.64 -2.24,-4.02 -1.09,1.94 -3.66,-0.66 -2.71,-1.39 -5.95,-1.32 -8.59,0.19 -0.02,-4.6 -5.04,-6.77 -8.31,-9 -2.72,-0.06 -5.6,1.79 -8.33,0.1 -2.65,-0.52 -5.05,-1.27 -4.7,-4.45 -2.02,-1.11 -5.86,-2.21 -7.53,-1.16 -1.29,1.98 -3.84,1.06 -5.84,1.31 -1.81,-1.01 -2.04,-3.39 -2.5,-5.41 3.14,0.3 2.23,-3.59 0.51,-4.83 -1.37,-2.03 -4.15,0.89 -5.53,-1.6 -1.69,-0.96 1.02,-5.32 2.36,-2.94 1.62,-1.63 2.76,-3.73 4,-5.66 -0.78,-1.58 -4.12,-2.02 -3.47,-4.09 -2.15,-0.17 -2.01,-2.77 -1.75,-4.31 -4.91,-2.77 -10.54,-0.91 -15.84,-1.69 -2.69,-0.42 -5.41,-2.8 -8.03,-1.28 -1.99,0.45 -4.28,-1.52 -3.68,-3.5 0.86,-2.86 -0.76,-4.88 -2.35,-7.1 -1.55,-2.64 -4.98,-6.28 -2.16,-9.19 -2.47,-3.43 -7.17,-3.03 -10.89,-3.21 -0.41,0.09 -0.82,0.18 -1.23,0.27z m95.09,106.63c0.36,0.47 0.77,-0.65 0,0z","name":"Thüringen"},"sh":{"path":"m173.41,0.78c-1.96,2.02 -2.32,5.26 -3.72,7.72 0.61,-2.46 2.87,-3.44 4.94,-4.31 1.37,-2.31 1.87,-2.9 -1.22,-3.41z m-4.63,9.69c-1.37,3.14 -2.78,7.11 -2.63,10.16 1.42,-1.81 3.12,-2.33 4.66,-0.67 1.41,1.35 2.9,1.87 4.52,0.27 2.61,-1.53 -0.74,-0.41 -1.92,-1.16 -2.06,-1.81 -4.59,-3.55 -3.89,-6.71 -0.29,-0.68 0.25,-4.89 -0.73,-1.88z m16.78,8.5c-1.27,2.96 0.71,4.89 2.59,6.89 3.39,3 2.55,7.98 4.79,11.67 0.62,3.55 5.38,3.23 6.46,6.57 3.09,5.18 8.01,9.55 9.53,15.49 -0.32,3.65 -4.55,4.93 -6.72,7.41 -1.75,1.07 -3.73,2 -5.62,0.78 -2.44,0.59 -7.26,-0.45 -7.37,2.95 0.9,2.44 -1.97,3.88 -3.95,4.18 -1.94,-2.13 -2.52,-1.01 -2.77,1.45 -0.87,2.9 3.21,3.7 4.93,4.64 1.92,-3.3 6.38,-1.94 9.56,-2.06 2.21,2.21 1.18,5.9 0.57,8.61 -1.14,2.05 -2.44,4.23 -0.74,6.43 0.5,2.36 2.45,2.12 4.01,1.08 3.24,-0.45 3.19,4.26 4.78,6.16 2.07,2.16 -0.11,6.53 -3.11,5.16 -1.14,-1.75 -5.79,-1.46 -5.26,0.73 2.63,2.93 2.85,7.1 5.04,10.2 1.56,1.12 3.1,3.53 5.09,1.5 1.43,0.34 0.36,3.67 3.4,2.47 5.03,0.4 10.67,-0.76 14.8,2.92 4.21,3.5 4.64,9.55 8.23,13.45 3.79,1.81 5.25,6.01 5.59,9.84 1.82,3.22 5.7,4.78 8.7,6.74 2.98,1.76 2.45,-2.04 3.3,-3.87 0.32,-3.07 2.7,-3.68 2.95,-0.51 1.97,4.21 4.12,0.09 5.74,-1.98 1.13,-1.81 1.09,-3.61 3.84,-2.85 2.75,1.63 4.73,-1.94 6.94,-3.16 -0.04,-2.48 1.02,-3.47 3.73,-4.47 1.51,-1.18 4,-1.93 4.95,0.16 -0.92,3.02 -1.41,6.74 1.26,9.04 1.1,1.47 -0.59,3.76 -1.58,5.02 -3.72,1.55 -2.94,7.3 0.6,8.57 3.05,0.71 1.81,2.28 4.18,4.34 1.9,2.3 3.7,4.33 6.71,5.17 4.24,1.47 7.8,5.01 12.4,5.13 1.57,-2.96 0.71,-7.47 3.24,-9.94 1.76,-0.99 3.85,1.15 5.23,-1.34 4.78,-3.66 7.65,-9.11 11.5,-13.72 0.07,-2.89 2.79,-4.69 1.09,-7.69 -1.21,-2.36 -3.12,-1.39 -5.13,-1.38 -2.37,-1.11 -4.33,-3.37 -5.88,-5.25 0.57,-2.78 0.94,-5.55 -0.72,-8.01 -1.68,-4.33 3.4,-6.71 6.26,-8.75 2.76,0.39 4.62,-1.55 2.8,-4.28 -2.57,0.04 -0.18,-3.45 -2.47,-3.84 -2.6,1.03 -5.44,-0.16 -6.16,-2.94 -1.95,-2.52 -0.1,-5.31 2.05,-6.91 1.09,-2.74 3.32,0.44 5.2,-0.9 2.94,-4.13 6.93,-7.19 11.06,-10.05 2.63,-1.56 0.21,-5.06 0.5,-7.57 -0.21,-3.63 -1.2,-7.39 -0.01,-10.84 0.18,-2.96 -5.24,-0.47 -7.49,-1.07 -5.13,1.62 -7.3,9.04 -13.4,8.34 -3.13,0.69 -4.64,-2.86 -6.1,-4.84 -4.97,-2.87 -10.19,-5.54 -15.47,-7.76 -2.99,-1.52 -6.08,0.55 -8.5,2.13 -0.97,2.39 -2.38,4.59 -2.88,7.13 -1.56,-1.44 -3.01,-3.67 -0.84,-5.3 1.62,-1.77 -1.68,-4.84 0.9,-6.58 0.02,-1.27 -2.39,-3.21 -3.97,-2.94 -4.31,0.8 -8.65,1.68 -12.59,3.47 -2.43,1.23 -4.15,-0.86 -4.81,-2.94 1.24,-1.68 2.97,0.32 4.34,-1.22 3.92,-1.6 8.22,-4.79 7.48,-9.56 -0.08,-4.17 0.91,-8.43 -1.14,-12.32 -1.21,-3.12 -1.73,-8.59 -5.28,-9.18 -0.59,1.71 -1.3,5.52 -3.94,3.91 -3.94,-2.44 -5.62,-7.87 -10.62,-8.75 -2.4,-0.95 -5.92,-1.49 -2.94,-4.34 -2.83,-1.32 -4.46,2.91 -6.75,4.06 -1.81,0.77 -3.7,1.77 -5.55,1.1 -2.17,-0.1 -2.78,3.34 -5.32,2.53 -2.44,-0.17 -5.39,0.15 -5.47,-3.04 1.26,-2.25 -1.79,-2.35 -3.37,-3.29 -2.69,-1.82 -6.3,0.87 -8.88,-1.52 -3,-2.97 -8.01,-2.63 -12.09,-2.77 -2.73,-0.05 -5.94,1.35 -8.19,-0.63 -2.53,-0.79 -2.34,1.14 -3.28,2.91z M165.38,30.69c0.26,2.81 0.4,-8.09 0.17,-2.47 -0.06,0.82 -0.12,1.65 -0.17,2.47z m13.5,1.44c-2.38,0.11 -5.93,-0.19 -6.48,2.95 -0.84,2.31 2.84,2.19 4.01,3.33 2.08,0.12 5.59,1.6 6.02,-1.46 1.83,-2.49 -0.07,-5.86 -3.55,-4.82z m-11.97,6.41c-1.92,2.44 0.88,5.14 2.25,6.97 3.61,0.13 0.82,-1.45 -0.03,-3.16 -0.91,-0.75 -0.95,-5.89 -2.22,-3.81z M181.53,44c-3.16,2.07 3.2,-1.05 4.68,-0.94 3.57,-2.86 -4.04,0.86 -4.68,0.94z m-1.31,6.22c-3.19,-0.54 3.33,2.8 0.63,-0.13 -0.17,-0.12 -0.42,0.08 -0.63,0.13z m8.44,2.63c-1.5,0.95 -5.02,0.69 -5.3,2.69 0.04,2.05 2.12,3.65 4.01,2.44 0.45,-0.74 3.48,-5.42 1.28,-5.13z m142.28,2.25c-2.22,2.09 -3.42,5.93 -2.84,8.5 1.81,-1.93 6.45,-1.17 5.53,2.13 0.75,2.01 5.23,1.5 7.53,1.68 3.9,0.79 4.95,-0.34 2.64,-3.56 -1.78,-3.59 -4.09,-7.7 -8.61,-7.85 -1.38,-0.32 -3.03,-0.37 -4.25,-0.9z m-134.34,2.94c-1.42,2.56 1.08,4.09 3.5,3.69 1.95,-0.37 3.87,-2.9 3.63,-4.91 -2.37,-0.51 -4.91,-1.04 -6.76,0.98l-0.36,0.24z M140.06,88.88c-0.28,2.81 2.92,0.39 0,0z m48.13,13.38c-1.61,1.32 0.69,2.85 0.06,-0.03l-0.06,0.03z","name":"Schleswig-Holstein"},"st":{"path":"m367.5,207.72c-2.53,0.49 -2.68,6.11 -5.69,3.88 -1.54,-0.27 -2,4.74 -0.62,6.28 -1.83,0.03 -4.69,1.23 -5.84,3.45 -2.16,1.75 -5.06,2.95 -7.73,3.81 -1.55,-0.32 -3.98,0.25 -4.38,-1.66 -3.96,-2.32 -9.18,-1.22 -13.69,-1.78 -0.82,1.11 0.07,3.08 -1.73,3.89 -1.82,3.69 -6.1,1.61 -9.28,2.54 -2.64,-0.11 -4.45,1.7 -3.62,4.38 -0.45,3.07 1.59,5.83 2.38,8.76 4.58,2.95 6.91,8.32 9.22,13.03 -1.02,4.14 2.73,7.03 5,9.88 -2.35,-0.75 -6.67,0.93 -4.41,3.78 2.13,2.7 4,5.66 7.03,7.25 2.19,1.61 0.12,4.97 -2.22,4.59 -1.88,2.15 -0.66,5.73 1.52,7.3 1.12,1.37 4.12,3.9 1.64,5.39 -1.82,-0.07 -4.08,1.44 -3.31,3.44 0.85,1.22 3.42,-0.32 2.88,2 0.05,3.3 -3.89,4.53 -5.42,6.71 -0.9,2.3 0.67,6.76 -2.83,4.48 -2.5,-0.5 -4.36,0.86 -6.64,1.31 -3.5,0.14 -7.17,-0.75 -10.56,0.56 0.56,2.46 -2.44,4.29 -4.71,3.94 -2.29,1.2 4.79,4.03 4.2,5.21 -3.3,0.45 -2.03,3.05 0.01,3.98 1.13,2.32 -0.87,4.55 -2.86,5.36 -2.94,1.53 -1.17,5.3 -1.3,7.86 2.06,2.6 4.65,5.37 5.72,8.78 -0.64,2.04 0.85,6.26 3.56,4.75 3.65,0.5 8.21,-0.2 10.69,3.16 4.64,-2.48 0.38,1.08 -0.35,3.49 0.67,3.87 3.9,7.06 5.79,10.42 0.02,2.22 -1.14,5.56 1.78,6.09 2.2,-1.04 4.22,-0.48 6.44,0.45 5.84,2.46 12.54,-0.89 18.17,2.38 2.32,0.62 -0.45,4.34 2.28,4.54 1.79,0.31 -0.33,2.19 2.35,3 1.69,0.92 2.02,2.61 0.5,3.94 -1.45,1.35 -2.21,4.99 -4.56,4.59 -2.63,-0.91 0.09,3.99 2.28,1.66 2.83,0.66 5.62,4.8 3.25,7.41 -2.57,1.08 1.05,5.18 3.56,3.71 1.96,-0.79 2.91,-2.94 5.65,-1.43 2.6,0.08 6.05,0.91 5.78,4.15 1.33,1.52 4.58,2.03 6.72,2.37 2.49,-0.44 5.14,-1.91 7.2,0.43 2.77,1.74 6.17,3.82 6.94,7.21 2.79,-1.13 5.73,-0.73 8.41,0.53 1.23,-2 2.73,-1.49 3.69,0.66 0.59,3.07 2,-0.72 2.48,-1.83 0.83,-2.27 3.92,-5.75 0.2,-7.01 -1.99,-2.12 2.54,-4.35 -0.47,-5.52 -3.54,-1.32 0.06,-3.71 -3.77,-3.68 -1.13,-1.82 -0.14,-5.31 -0.45,-7.77 0.09,-3.62 -2.36,-6.17 -3.27,-9.5 -2.24,-2.8 3.78,-1.95 2.18,-4.77 -0.27,-3.83 -1.97,-7.24 -2.66,-10.91 1.12,-2.57 2.7,-5.07 2.75,-7.88 2.68,-2.78 6.09,-4.94 9.75,-6.06 4.81,0.08 9.58,-1.34 13.94,-3.25 0.29,-3.17 3.92,1.99 5.64,-1.8 0.58,-1.59 1.27,-4.54 3.8,-3.39 2.22,1.16 4.46,1.71 7.03,1.3 4.79,-0.31 9.85,0.27 14.45,-1.01 2.63,-2.16 7.03,-3.34 7.55,-7.13 -2.51,-3.21 -2.57,-7.84 -4.05,-11.66 -1.56,-2.32 0.46,-2.56 1.11,-3.49 -1.21,-1.69 -2.84,1.88 -4.93,0.87 -3.35,0.33 -4.21,-4.14 -7.34,-4.73 -1.95,-1.81 -4.21,-0.39 -6.46,-1.61 -1.95,-1.37 -5.09,-1.98 -5.86,-4.32 -2.25,-0.71 -4.5,-3.34 -6.75,-2.88 0.04,3.1 -4.02,3.62 -6.31,2.65 -6.29,-1.76 -13.04,-4.4 -16.59,-10.25 -1.82,-2.88 -4.27,-5.73 -5.88,-8.53 1.69,-2.65 1.92,-5.52 1.61,-8.56 0.08,-3.49 1.94,-6.54 3.57,-9.44 -0.44,-3.76 -2.35,-8 0.31,-11.34 1.69,-3.42 -2.77,-5.17 -4.84,-4.84 -0.77,1.84 -4.03,2.12 -4.73,-0.07 -3.16,-2.02 -0.66,-5.45 -0.28,-8.33 0.25,-2.72 1.68,-3.75 3.82,-4.6 0.52,-2.45 0.69,-5 -1.29,-6.86 -2,-2.13 -0.72,-5.29 -0.24,-7.76 2.19,-2.1 2.75,-4.3 1.28,-7.4 -0.37,-2.87 -3.52,-1.27 -5.2,-0.49 -2.2,0.23 -1.98,-4.35 -5.66,-2.08 -3.04,0.71 -6,0.64 -8.83,-0.79 -2.04,-1.1 -6.47,-1.05 -6.16,-4.18 0.48,-0.96 2.72,-2.17 0.45,-2.84 -2.36,-0.92 -4.97,-4.41 -7.35,-1.78 -2.26,0.12 -3.78,-2.34 -5.44,-3.56 -1.33,-1.14 2.25,-2.99 -0.03,-2.78z m-35.72,88.19c-0.1,0.03 0.04,0.06 0,0z","name":"Sachsen-Anhalt"},"sn":{"path":"m438.91,347.22c-0.71,1.7 -1.23,3.74 -3.22,4.5 -2.58,1.63 -3.52,-1.1 -5.94,1.53 -4.3,1.22 -8.55,2.77 -13.09,2.53 -3.01,1.74 -7.34,3.17 -8.45,6.62 0.03,3.26 -3.77,5.91 -1.75,9.19 1.33,3.2 1.78,6.8 2.19,10.31 -4.06,0.29 -2.18,3.87 -0.74,6.17 2.24,3.72 1.36,8.42 1.53,12.58 2.6,-0.28 2.73,2.06 3.18,3.2 1.51,2.44 3.44,1.13 5.41,0.39 3.7,1.5 8.18,1.88 11.41,4.16 0.74,1.94 -0.81,4.85 2,5.77 1.72,1.99 6.37,0.62 6.03,4.01 -0.35,2.66 3.75,3.98 1.22,5.97 -3.58,1.98 -8.34,0.37 -11.41,3.34 -0.07,2.05 -0.66,4.73 -3.19,4.69 -0.84,-2.38 -4.84,-0.74 -3.91,1.56 -2.16,0.55 -4.73,2.38 -6.75,1.41 -0.26,3.26 -1.99,6.93 0.66,9.67 0.13,3.51 6.2,1.64 4.46,5.11 -1.54,2.13 -3.26,4.42 -6.11,4.51 -2.19,1.15 -4.93,1.82 -6.85,3.17 1.14,0.4 3.92,-0.58 2.97,1.81 -1.3,0.56 -2.71,1.18 -4.15,1.04 -1.87,-0.95 -6.83,1.68 -5.71,-1.56 0.5,-1.28 0.39,-7.08 -1.74,-3.97 -0.56,2.99 -4.53,3.58 -5.56,6.44 -1.97,1.1 -1.24,4.78 1.19,3.64 1.33,1.03 5.21,3.22 2.79,5.13 -0.59,1.68 -5.69,2.39 -2.69,4 2.14,0.67 3.79,2.61 5.05,4.37 -0.72,2.68 -0.54,4.28 2.54,4.44 2.89,0.5 5.02,2.48 7.96,1.72 3.8,-1.14 4.85,3.42 6.85,5.61 1.23,2.16 4.76,5.08 2.59,7.58 -0.49,1.72 3.93,3.14 3.09,0.38 -2.48,-2.46 -0.08,-6.44 1.28,-8.97 2.86,-4.57 6.53,-8.74 9.94,-12.84 4.56,-2.02 9.99,-0.84 14.06,-4.03 2.14,-0.66 4.2,-3.73 6.38,-3.05 2.63,1.52 5.07,3.45 7.78,4.83 2.07,-1.12 5.11,-3.24 4.13,-5.91 0.2,-2.04 -0.2,-5.69 2.84,-5.24 2.59,-0.29 5.2,-0.72 7.63,0.55 2.91,-0.54 1.72,-4.96 3.88,-6.45 2.35,-2.97 5.63,-5.26 8.68,-7.26 2.67,-0.81 5.51,3.8 7.01,0.39 1.65,-1.64 3.72,-4.3 2.58,-6.74 3.93,-2.17 7.47,-5.47 12.25,-5.22 2.33,-0.49 4.94,-0.78 7,0.62 2.41,-0.15 5.15,-2.09 4.01,-4.81 -1.95,-3.53 3.27,-1.43 5.18,-3.05 2.77,-1.08 6.09,-1.25 7.96,-3.69 5.86,-2.9 11.49,-6.39 17.78,-8.32 1.88,-3.11 -0.76,-3.48 -3.2,-3.83 -2.51,-0.45 -4.28,-2.72 -5.9,-4.48 1.17,-2.33 1.01,-5.72 3,-7.44 2.01,-0.54 2.32,2.64 4.53,2.3 2.11,1.26 6.52,1.34 7.5,-0.58 -0.17,-3.74 3.64,0.67 5,1.7 3.7,2.16 4.3,6.67 5.45,10.42 1.49,2.62 -2.09,6.06 2.42,6.33 2.67,0.89 5.37,2.57 8.28,1.87 0.47,-3.78 1.26,-7.7 4.06,-10.39 2.84,-3.18 3.04,-7.91 3.71,-11.62 2.05,-4.17 1.85,-9.14 2.71,-13.74 0.26,-3.07 0.84,-6.1 1.99,-8.91 0.22,-5.15 -3.62,-9.39 -5.25,-14.09 -0.63,-2.47 0.48,-5.37 -1.69,-7.4 -2.96,-2 -6.81,-2.81 -10.16,-4.16 -2.63,0.45 -5.28,-0.92 -5.64,-3.77 -0.41,-2.32 0.72,-4.39 -0.77,-0.54 -0.78,2.23 -4.07,1.99 -5.91,1.44 -0.89,-2.72 -3.76,-2.22 -5.89,-1.05 -2.43,0.03 -4.2,1.93 -3.78,3.04 -2.98,-1.35 -5.85,1.55 -8.48,2.42 -3.55,-1.67 -7.51,-1.35 -11.28,-1.56 -3.58,3.73 -3.22,9.41 -5.54,13.67 -1.24,3.16 -4.34,3.42 -7.26,3.89 -3.26,1.02 -6.88,-0.1 -9.67,2.35 -1.59,0.79 -4,-0.13 -5.49,-0.56 -4.01,0.9 -8.8,0.36 -12.18,-2.44 -2.57,-1.34 -4.55,-3.47 -6.76,-5.28 -2.23,1.37 -5.63,2.37 -6.56,4.87 -0.02,1.86 -4.09,1.87 -5.44,1.29 -1.42,-2.13 -2.64,-3.94 -1.26,-6.61 0.56,-3.54 0.3,-7.09 -1.63,-10.2 -0.72,-1.89 -2.32,-5.98 -4.72,-4.31 -2.79,1.33 -2.48,-5.48 -5.68,-3.53 -5.59,0.15 -11.31,0.77 -16.84,0.31 -1.25,-0.57 -2.44,-1.63 -3.94,-1.22z","name":"Sachsen"},"sl":{"path":"m63.72,553.88c-2.9,2.18 -6.1,2.82 -9.5,4.44 -3.47,4.51 -10,4.1 -15.06,5.38 -4.6,0.18 -8.97,-1.26 -13.22,-2.78 -2.47,1.73 -0.51,5.04 -0.84,7.5 1.8,0.96 4.08,-1.32 5.97,0.4 2.44,1.62 5.28,3.2 6.78,5.81 -3.49,0.44 0.05,4.79 -0.09,6.94 1.05,3.41 4.13,4.95 6.56,7.16 1.79,1.94 0.3,5.34 3.04,6.13 2.43,1.92 -2.53,4.66 1.39,5.86 2.37,0.12 6.25,2.27 7.13,-1.09 -0.35,-2.25 -3.03,-3.71 0.38,-4.78 4.42,0.26 10.1,1.27 11.81,5.94 0.51,1.58 -0.22,5.5 1.56,5.84 2.33,-0.7 1.95,-7.32 3.65,-3.1 1.02,1.94 2.67,2.87 4.44,1.6 2.61,-0.08 5.35,0.47 7.44,1.84 0.63,-1.3 5.37,-2.76 3.56,-3.91 -1.62,-2.52 -4.36,-5.17 -3.81,-8.41 1.42,-2.72 5.03,-3.05 6.69,-5.31 0.32,-2.19 -0.19,-4.41 0.63,-6.91 -2.49,1.08 -4.55,-2.01 -6.84,-2.72 1.25,-2.57 -1.08,-3.33 -2.41,-4.88 -1.38,-2.57 3.05,-1.81 2.04,-4.46 0.15,-3.03 0.9,-7.08 -0.66,-9.48C81.13,563.37 78.01,559.23 75,558.25c-1.82,-1.1 -4.05,-5.12 -6.16,-3.76 -1.8,1.27 -2.93,1.15 -3.06,-0.42 -0.68,-0.01 -1.4,-0.33 -2.06,-0.19z","name":"Saarland"},"rp":{"path":"m124.22,422c-3.08,1.37 -2.76,4.11 -2.15,6.91 -0.74,2.27 -2.92,4.57 -5.35,5.28 1.82,2.98 -1.68,6.02 -4.55,6.28 -3.87,1.42 -8.15,2.76 -11.74,4.31 -2.53,-1.67 -5.28,-0.25 -4.24,2.84 0.38,2.78 -1.77,4.53 -4.33,4.8 -2.21,0.9 -4.57,1.03 -6.93,0.89 0.24,-3.01 0.16,-2.77 -0.66,-0.16 -2.61,2.5 -6.78,2.21 -10.16,3.14 -1.7,1.36 -3.59,4.13 -6.33,3.09 -1.84,0.93 -1.47,5.36 -2.5,7.61 -0.31,2 -3.88,3.46 -5.32,1.71 -2.49,-2.13 -5.07,1.92 -3.92,4.39 -1.32,2.14 3.87,6.32 1.33,6.03 -2.57,-0.38 -4.98,1.47 -7.53,-0.25 -1.87,-0.86 -4.14,-1.17 -5.28,-3.06 -3.07,1.11 -6.64,2.41 -9.75,2.06 -1.18,-2.88 -5.27,-3.74 -3.13,0.21 0.06,1.85 3.77,4.69 0.04,3.72 -2.34,1.34 -4.33,-0.2 -6.47,-0.11 -0.71,2.72 -2.48,4.43 -4.99,5.59 -1.73,1.37 -5.12,2.04 -4.14,4.93 1.73,3.46 -1.97,4.26 -2.68,6.98 -1.38,4.14 -2.64,8.53 -0.77,12.73 1.47,5.09 3.95,10.18 7.71,13.93 3.19,1.73 6.27,3.8 8.6,6.49 1.94,2.68 4.29,-1.39 6.06,0.93 1.74,1.25 1.47,4.34 1.36,6.37 -1,5.55 -4.71,9.97 -7.61,14.63 -1.1,1.62 -3.21,1.58 -3.81,3.7 1.32,3.4 5.62,2.86 8.44,4.25 6.02,0.99 12.25,-0.27 17.78,-2.55 1.84,-1.13 2.94,-3.18 5.35,-3.48 2.7,-0.62 4.85,-2.4 7.33,-3.4 2.47,-0.56 3.3,1.96 4.66,0.63 1.69,-1.87 4.4,2.01 6.06,3.12 2.19,1.85 4.96,3.22 7.6,4.23 2.08,-1.3 3.07,-1.77 3.74,1 0.63,3.7 0.2,7.6 -0.21,11.34 -3.62,0.15 -1.02,2.73 0.84,3.34 -0.88,3.1 1.79,3.86 4.18,5.17 2.7,-0.99 3.7,-0.04 2.19,2.5 -0.63,2.28 0.81,4.56 -1.1,6.61 -1.8,1.77 -5.4,2.25 -6.16,5.03 0.5,2.47 2.45,5.22 3.88,6.72 0.53,-2.07 4.25,-1.3 6.09,-2.06 2.18,0.88 4.73,2.02 3.59,4.81 0.57,4.16 4.15,6.47 7.58,8.3 4.06,2.82 9.28,1.81 13.75,1.03 5.57,0.87 11.49,1.89 16.04,5.46 1.5,1.92 4.34,2.91 6.75,3.03 1.44,0.1 3.88,-0.46 4.75,1.03 2.73,-1.42 4.25,-4.04 4.38,-7.03 0.97,-3.35 4.62,-5.13 4.47,-8.92 0.59,-3.28 2.22,-6.72 1.35,-9.86 0.74,-2.94 4.48,-3.42 5.84,-6.03 2.45,-0.61 0.47,-2.16 -0.81,-2.44 -2.02,-2.71 2.93,-3.58 2.9,-6.17 0.3,-2.2 -0.42,-4.5 0.69,-6.55 -1.31,-0.77 -4.55,0.38 -4.34,-2.22 1.3,-2.38 -0.67,-5.57 -0.94,-8.16 -1.05,-1.55 -0.56,-3.22 -0.06,-4.81 -2.06,-3.14 -3.58,-6.56 -4.31,-10.28 -0,-3.21 3.88,-3.16 5.84,-4.38 1.83,-1.95 0.9,-4.67 -1.26,-6.04 -2.48,-3.08 -4.3,-6.94 -4.99,-10.83 0.78,-1.71 1.4,-3.41 0.25,-5.25 -0.12,-3.38 -3.6,-5.04 -5.13,-7.75 -2.86,-3.27 -7.52,-1.08 -10.66,0.56 -4.69,1.79 -9.52,4.51 -14.68,3.47 -2.44,-2.49 -4.42,-5.7 -6.29,-8.66 -2.19,-2.94 2.65,-2.19 3.79,-4.33 1.44,-3.52 5.56,-1 5.95,-3.31 1.05,-2.62 -4.12,-2.88 -2.51,-5.79 1.38,-2.83 4.79,-3.85 7.44,-4.63 1.92,2.63 5.73,-0.22 2.09,-1.81 -1.3,-2.26 2.57,-3.89 4.23,-2.24 3.08,0.46 1.96,-3.71 0.96,-5.33 -1.37,-3.08 -3.17,-5.78 -6.33,-7.23 -3.79,-0.63 -1.12,-3.37 -0.49,-6.08 0.24,-1.88 -1.87,-3.91 -0.43,-6.13 1.19,-2.18 3.39,-6.07 6.28,-3.97 1.67,3.39 3.78,0.05 4.16,-2.21 1.81,-2.05 -0.69,-2.3 -1.07,-3.97 -0.17,-2.37 -1.93,-5.43 0.13,-7.42 -0.88,-3.78 -6.22,1.19 -5.36,-1.83 1.28,-4.22 -5.99,-5.38 -4.53,-9.85 1.32,-2 0.84,-5.3 -1.94,-5.86 -1.78,-2.03 -5.71,-1.54 -6.82,-3.48 -0.21,-1.96 2.71,-4.06 -0.25,-4.94C125.29,422.08 124.64,421.87 124.22,422z","name":"Rheinland-Pfalz"},"nw":{"path":"m177.25,263.34c-2.1,-1.63 -5.7,-1.31 -6.06,1.91 0.19,3.63 -4.48,4.11 -7,3.66 -1.11,-1.64 -4.06,-2.21 -2.35,0.66 0.52,3.14 4.56,4.05 6.57,6.26 1.92,1.46 2.52,4.49 2.62,6.8 0.18,2.64 0.19,5.1 -0.9,7.58 -1.32,1.99 0.48,3.83 2.46,3.92 3.25,0.58 0.3,2.71 -0.78,3.97 -1.55,0.88 -3.89,0.86 -4.75,2.84 1.66,2.95 -2.56,1.58 -4.29,1.1 -2.41,-0.95 -5.38,-1.98 -7.02,0.74 -2.16,1.92 -4.56,3.57 -7.26,4.5 -1.87,2.2 -2.96,-0.94 -5.46,-0.31 -2.18,0.39 -2.63,4.37 -4.84,2.75 -2.6,-0.41 -3.41,-2.28 -4.46,-4.35 -2.31,-1 2.21,-2.81 3.55,-2.98 3.51,0.2 5.07,-3.48 2.41,-5.69 -1.71,-1 -4.92,-1.05 -5.1,-3.81 -0.4,-2.56 2.07,-4.87 2.81,-7.19 0.91,-0.72 -1.83,-2.26 -0.5,-3.69 3.14,-1.64 1.45,-5.72 -1.26,-6.8 -2.05,-1.15 -4.05,1.71 -6.33,0.21 -2.51,-1.72 -6.07,-2.59 -6.27,-6.18 -0.22,-2.85 -2.57,-3.65 -4.96,-4.34 -1.35,-0.64 -3.78,3.65 -1.27,3.96 1.72,1.12 -0.74,4.19 -1.92,5.19 -4.58,2.06 -9.39,4.71 -12.83,8.28 -0.91,2.09 -3.91,0.71 -4.63,3.16 -3.68,0.16 -7.44,-1.07 -11.03,-0.19 -1.13,2.36 -3.53,1.5 -5.41,2.92 -3.3,2.56 -8.23,3.82 -10.15,7.67 -0.16,4.41 -5.85,3.29 -8.27,5.42 -1.07,1.95 -3.97,5.3 -0.36,6.02 2.12,2 6.43,3.97 4.59,7.5 -2.07,2.76 -4.18,5.76 -7.59,6.94 -1.43,-2.65 -3.58,-2.35 -5.97,-1.09 -2.93,0.68 -5.59,2.43 -8.37,3.24 -1.83,0.92 -6.4,-1.52 -6.2,0.14 1.25,2.44 1.32,5.11 -1.64,2.71 -2.84,-2.65 -6.23,-5.14 -10.34,-4.5 -2.26,1.13 -4.86,1.79 -7.57,1.91 -2.94,-0.3 -6.47,1.11 -7.66,3.97 0.91,4.49 1.78,9.09 3.5,13.31 3.65,0.48 3.87,3.28 3.59,6.38 -0.03,2.95 4.03,4.36 4.95,7.23 3.16,3.93 2.85,9.32 1.32,13.83 -1.07,2.64 2.37,5.59 -1.15,7.3 -2.71,3.53 -6.04,6.82 -8.16,10.71 -0.6,1.66 -1.81,5.57 0.42,6.15 1.79,-1.07 4.45,-3.48 6.03,-0.89 -1.83,0.74 -3.77,2.52 -4.63,4.79 -4.06,2.72 -7.88,5.86 -12.82,6.75 -2.54,0.57 -4.87,1.7 -3.17,4.63 0.65,3.73 2.86,3.68 5.9,3.34 1.73,-0.12 4.7,0.11 2.92,2.43 -1.62,2.73 0.97,3.7 3.18,4.3 2.89,0.68 -1.54,3.27 0.66,4.81 0.17,1.78 -1.03,5.56 -2.97,3.06 -2.7,0.41 -2.86,4.47 -3.11,6.49 1.25,3.17 3.86,4.98 6.86,6.32 1.73,2.64 2.03,6.34 4.88,8.31 -3.91,1.75 5.55,0.78 2.22,4.39 0.29,3.25 -5.37,3.94 -3.38,7.37 0.76,1.42 1.86,4.52 3.66,2.67 3.25,-0.44 6.22,1.26 7.36,4.35 2.36,2.77 -0.08,6.31 -0.45,9.15 2.56,4.82 -0.8,-1.03 2.06,-1.07 2.71,-1.06 3.44,4.11 6.19,2.53 2.75,0.37 5.82,-2.69 8.02,-1.5 1.92,2.23 5.39,3.01 8.14,3.37 3.72,-0.21 2.3,-1.41 1.51,-3.82 0.04,-2.95 -1.16,-6.55 2.63,-7.5 2,-1.69 3.89,3.12 6.16,0.31 1.15,-2.86 1.77,-6.3 2.41,-9.46 2.7,1.12 5.4,-0.08 6.75,-2.56 3.27,-1.13 7.52,-0.86 10.35,-2.91 0.37,-1.12 0.98,-4.32 2.62,-2.66 -0.82,3.1 2.33,2.44 4.39,1.84 2.3,-0.53 5.31,-1.22 4.81,-4.28 -0.51,-2.22 0.4,-5.33 3.3,-4.47 2.78,1.45 5.46,-1.31 8.27,-1.76 3.1,-1.68 7.91,-1.4 9.45,-5.05 -0.47,-2.98 -4.28,-3.7 0.44,-3.18 2.74,-1.08 5.31,-3.89 4.08,-6.99 -1.04,-2.52 1.87,-4.26 3.71,-5.24 2.21,0.36 5.37,2.16 3.03,4.28 -1.84,2.46 1.06,2.47 2.69,2.94 2.57,1.6 7.18,2.77 6.12,6.74 -0.22,1.83 -1.49,3.93 0.54,5.35 1.58,1.78 4.44,3.29 3.47,6.09 1.92,-1.91 4.28,0.75 5.25,0.78 1.15,-1.97 2.94,-4.17 0.84,-6.13 -1.97,-2.33 -1.27,-4.35 1.26,-5.9 2.67,-2.21 4.81,-5.42 7.75,-7.15 2.53,-0.53 5,4.12 6.81,1 1.81,-2.99 4.43,-5.63 4.94,-9.19 1.73,-1.11 2.77,-3.4 4.66,-4.63 0.39,-1.91 -1.57,-4.12 -1.75,-6.25 0.73,-3.23 4.88,-3.7 7.64,-2.9 1.98,0.85 4.51,0.77 5.94,-0.93 1.31,-3.2 3.81,-6.24 2.52,-9.88 -0.64,-1.84 0.53,-6.24 -2.48,-5.85 -2.48,0.46 -4.55,3.29 -7.13,2.53 -1.37,-1.68 -3.72,-3.65 -1.3,-5.48 2.34,-4.53 6.76,-7.46 11.73,-8.41 3.83,-1.47 7.94,-1.54 11.98,-1.11 1.92,-2.78 -0.9,-3.85 -1.9,-6.19 -1.82,-1.61 -1.41,-4.36 1.19,-4.68 3.14,-1.44 7.01,-2.83 10,-0.32 2.4,1.63 -0.27,3.86 1.25,5.59 1.92,0.62 4.04,0.65 4.63,-1.66 3.98,-3.61 9.19,-6.08 11.4,-11.26 1.23,-2.28 4.7,-5.14 4.82,-6.65 -1.68,0.55 -4.34,-0.05 -3.2,-2.36 0.05,-5.23 2.13,-10.09 3.74,-14.92 1,-2.69 -2.16,-5.66 -4.66,-4.72 -3.16,2.83 -0.64,-2.27 -0.81,-4.06 -0.05,-2.72 -2.54,-1.8 -3.99,-2.62 -2.61,-2.3 -7.4,-3.71 -6.62,-8.03 0.39,-2.34 -1.28,-5.79 0.83,-7.47 -2.23,-1.73 -1.62,-3.85 -2.5,-6.03 -2.65,-0.77 -5.5,-0.87 -7.39,-3.23 -1.18,-0.94 -5.31,-5.84 -2.07,-3.89 2.92,3.3 5.04,-1.41 4.58,-3.56 -1.6,-1.73 -4.39,-1.61 -6.02,-2.94 -1.48,-2.41 1.21,-4.72 1.94,-6.91 1.84,-2.01 5.4,-1.29 6.16,-4.38 1.42,-2.09 2.16,-4.3 0.81,-6.53 1.2,-2.26 2.95,-5.17 -0.91,-5.56 -3.17,-1.51 -3.6,3.21 -5.58,4.74 -1.93,2.12 -2.98,5.59 -6.39,5.38 -3.28,0.88 -6.88,0.85 -10.18,0.44 -3.79,-0.66 -2.03,-5.2 -2.58,-7.89 -0.63,-2.02 1.28,-4.76 -1.4,-5.81 -1.68,-1.96 -4.73,1.64 -6.71,2.05z m32.09,14.69c-0.04,0.06 0.1,0.03 0,0z","name":"Nordrhein-Westfalen"},"ni":{"path":"m186.44,120.91c-5.6,0.51 -6.88,7.11 -8.44,11.54 -1.55,4.84 -4.41,10.19 -1.33,15.08 0.62,2.76 4.51,0.93 6.62,1.66 3.74,-0.55 1.44,3.37 1.28,5.34 -0.09,2.27 2.07,5.17 -0.81,6.68 -0.57,2.01 -4.6,1.89 -4.47,0.01 0.2,-1.62 -2.19,-2.79 -1,-4.38 -2.39,-2.05 -5.8,-0.88 -8.29,-2.92 -3.19,-0.55 -3.1,-6.58 -7,-4.9 -3.25,1.5 -2.87,5.42 -3.31,8.39 1.73,1.09 4.31,-1.81 5,0.84 0.65,4.51 -0.3,10.35 -4.66,12.69 -2.05,0.33 -4.01,-0.7 -4.44,-2.75 -1.01,-1.99 -2.84,-4.1 -4.91,-2.06 -2.51,-1.99 -2.84,-5.26 -2.69,-8.25 1.7,2.41 4.86,0.82 6.63,-0.53 1,-2.85 -1.94,-5.58 -2.55,-8.38 -0.35,-2.68 -2.75,-3.1 -4.67,-3.53 -0.88,-2.07 -1.59,-4.78 -0.56,-6.72 -5.56,-1.98 -11.61,-0.89 -17.16,0.47 -4.67,-1.16 -9.01,2.41 -13.75,2.56 -2.64,-2.27 -6.36,-1.45 -9.63,-2 -6.44,-0.16 -11.29,4.48 -15.23,9 -2.96,1.82 0.86,2.65 1.75,4.06 2.29,2.26 -1.66,3.67 -2.74,5.44 -1.44,-2.96 -5.14,-3.8 -4.27,0.54 -0.65,3.9 -0.71,8.05 -1.52,11.83 -1.87,1.87 0.95,4.14 2.97,3.58 5.28,0.29 10.96,-0.24 15.72,2.42 -2.08,0.69 -5.45,-0.97 -5.28,2.53 -1.3,3.55 -0.88,7.6 -1.89,11.2 -1.02,2.31 -3.53,5.58 -0.77,7.39 -1.04,4.96 1.43,10.17 -1.09,14.86 -1.44,6.42 -8.35,10.37 -8.34,17.29 -0.73,5.37 -0.65,11.06 -2.02,16.22 -1.54,2.43 -4.12,-1.19 -6.18,-0.78 -4.31,-0.59 -8.85,-1.62 -13.15,-0.5 -3.28,1.5 -0.59,5.19 -1.65,7.89 0.05,2.71 -1.96,5.6 -1.13,7.99 3.96,3.35 9.48,3.72 14.25,5.18 1.32,-0.55 1.98,-4.64 3.66,-2.59 1.6,4.04 5.43,7.78 4.44,12.38 -1.84,2.71 -4.41,6.49 -1.89,9.57 1.86,2.89 3.08,-1.11 5.12,-1.16 3.32,-0.74 7.21,1.07 10.28,0.08 0.77,-2.08 3.82,-0.65 4.33,-3.02 3.95,-3.24 8.34,-6.11 13.06,-8 3.49,-2.99 -0.93,-3.55 0.23,-6.31 0.69,-1.71 1.95,-4.41 4.07,-2.55 2.19,0.59 4.44,1.49 4.69,4.05 0.24,3.46 3.25,4.66 5.87,6.2 2.49,1.33 5.1,-2.32 7.3,0.36 2.1,0.86 2.8,3.79 2.88,5.66 -2.14,1.36 -2.99,3.7 -0.25,5 -2.47,1.24 -2.71,4.41 -4.06,6.59 -0.13,3.3 3.86,2.19 5.28,4.24 1.61,1.34 2.29,6.23 -0.56,6.24 -2.12,1.03 -7.72,1.03 -4.44,4.18 0.32,1.52 3.77,3.35 4.41,1.19 1.64,-2.26 4.29,-2.15 6.63,-1.31 1.36,-0.07 3.99,-1.2 5.52,-2.37 2.72,-1.18 4.39,-5.59 7.79,-3.97 1.75,0 5.6,2.6 5.94,0.72 0.62,-2.2 3.26,-3.09 5.19,-3.63 2.15,-1.43 1.31,-2.65 -0.91,-2.81 -3.46,-2.11 -0.12,-6.05 -0.14,-8.9 -0.15,-3.52 0.05,-8 -3.58,-9.88 -2.14,-2.11 -6.14,-3.08 -5.9,-6.7 -1.51,-2.43 0.6,-3.29 2.77,-2.04 1.45,1.42 4.2,1.38 5.98,0.03 1.26,-1.81 0.54,-4.61 3.46,-5.43 2.32,-1.11 5.18,2.05 7.68,-1.07 2.13,-2.24 4.04,-0.2 5.66,1.43 0.57,2.57 -0.21,5.4 0.22,8.09 -0.93,3.21 1.85,4.85 4.75,4.17 3.21,-0.08 7.22,0.09 9.7,-1.99 2.54,-2.97 4.51,-6.31 6.89,-9.36 2.02,0.69 5.86,0.77 5.97,3.44 -1.73,2.35 -1.52,4.54 -0.97,7.06 -1.39,2.86 -2.39,6.91 -6.2,7.13 -2.4,1.05 -3.91,4.28 -3.71,6.63 1.97,1.04 4.71,1.6 6.53,3.33 0.07,1.63 -1.12,5.59 -2.84,6.05 -3.41,-0.73 1.6,2.55 2.84,3.1 2.26,0.15 6.09,0.95 5.15,4.09 -0.68,1.53 3.99,3.73 1.27,4.76 -0.76,2.74 -0.13,6 0.12,8.84 1.43,2.32 4.36,3.6 6.57,5.25 3.31,-0.99 4.48,3.42 3.35,5.85 0.3,0.17 2.48,-0.22 3.34,0.68 2.41,1.16 3.09,3.45 2.56,5.97 -2.13,4.96 -3.82,10.38 -3.75,15.72 2.51,0.18 4.77,-1.21 7.34,-1.06 0.61,1.51 -0.65,3.85 2.25,3.24 3.59,-0.55 6.83,1.47 9.03,4.14 1.86,0.23 1.58,3.6 -0.22,2.84 -1.35,2.17 -4.02,2.06 -5.22,4.59 1.78,2.73 3.46,5.34 3.51,8.74 1.02,2.35 -1.28,3.79 -3.38,3.42 -2.32,0.54 -3.56,5.32 -0.53,5.96 3.22,1.18 6.33,2.54 9.36,4.13 4.29,-2.82 0.47,-2.05 -1.06,-3.89 -2.77,-2.53 1.66,-4.59 3.28,-6.24 2.15,-2.54 5.98,-1.9 8.84,-2.34 2.08,1.35 1.61,5.72 4.21,2.64 3.91,-2.4 7.72,-5.21 12.48,-5.45 3.97,-2.72 8.84,-4.93 11.78,-8.85 1.12,-1.78 0.33,-3.88 2.39,-5.63 3.16,-1.67 6.79,0.6 8.47,3.25 2.88,-0.58 7.14,-0.26 7.76,-3.87 -0.05,-2.88 3.65,-4.47 1.75,-6.24 -1.57,-2.46 -0.32,-5.67 -2.8,-7.78 -1.09,-2.4 -4.13,-3.43 -3.79,-6.44 -0.16,-2.66 -0.99,-6.17 2.11,-7.49 1.53,-0.76 3.52,-2.56 1.95,-4.3 -2.69,0.07 -2.43,-3.84 -0.41,-4.53 -1.85,-1.14 -5.14,-4 -4.75,-5.49 2.09,-0.39 4.95,0.22 5.97,-2.13 -0.9,-2.87 3.5,-2.65 5.41,-2.71 2.87,-0.48 6.16,1.13 8.63,-0.98 1.86,-0.84 5.77,1.14 5.58,-1.56 -0.39,-2.88 1.81,-4.27 3.9,-5.7 0.91,-0.47 3.07,-3.7 1.17,-3.53 -3.44,0 -2.76,-5.19 0.13,-5.66 3.82,-0.08 0.19,-3.6 -1.09,-4.81 -2.24,-1.37 -1.88,-4.21 -1.94,-6.38 0.35,-2.73 4.31,-1.12 3.91,-4.03 -1.37,-1.84 -4.07,-2.33 -5.04,-4.76 -1.41,-2.15 -5.08,-4.85 -2.74,-7.55 3.42,-1.12 3.06,-1.7 0.77,-4.08 -1.69,-1.79 -1.55,-4.29 -1.69,-6.46 -2.28,-4.45 -4.68,-9.22 -8.86,-12.09 -1.05,-3.33 -3.02,-6.48 -2.57,-9.99 -0.32,-2.09 0.44,-4.42 2.92,-4.26 2.85,-1.12 6.27,-0.08 8.93,-1.09 1.55,-1.38 2.76,-2.68 2.6,-4.79 1.69,-2.11 5.13,-0.16 7.46,-0.64 2.96,0.35 7.54,-0.38 8.88,2.86 3.56,1.21 6.67,-1.39 9.63,-2.75 1.37,-1.79 3.07,-3.85 5.5,-3.97 -1.07,-2.07 -0.03,-4.66 0.75,-6.72 2.37,0.04 3.51,1.16 4.74,-2.15 -3.03,-0.57 -6.18,-1.13 -7.93,-4.01 -2.99,-1.28 -5.04,3.32 -7.81,2.09 -1.68,-2.2 -4.97,-3.78 -4.59,-6.94 -1.58,-2.26 -4.54,-2.52 -6.84,-3.72 3.01,-0.21 2.65,-3.1 -0.2,-2.77 -6.07,-2.31 -7.72,-9.29 -10.33,-14.6 -2.42,-1.1 -4.9,-1.16 -5.92,1.34 -1.84,1.96 -4.18,1.97 -6.29,0.43 -2.67,-1.78 -3.79,-6.4 -7.79,-5.36 -2.51,-0.77 -4.24,2.4 -6.66,0.76 -4.42,-0.95 -7.78,-4.07 -12.05,-5.47 -1.87,-1.32 -3.8,-1.77 -5.52,0.17 -0.27,2.44 -2.51,2.71 -4.5,2.22 -3.65,-0.29 -5.04,-4.84 -7.84,-6.5 -1.55,0.25 -1.89,4.05 -4.47,4.49 -2.08,0.15 -3.58,-2.52 -5.1,-3.8 -1.02,-1.09 -2.8,3.74 -4.07,0.89 -2.45,-1.59 -2.98,-4.24 -4.53,-6.41 -0.49,-1.9 1.56,-6.03 -2.15,-5.31 -4.45,-0.29 -7.84,-3.81 -11.28,-6.28 -1.97,-2.7 -0.94,-6.7 -3.64,-9.09 -3.37,-1.87 -5.18,-5.18 -6.46,-8.69 -1.64,-4.08 -4.33,-8.01 -8.9,-9 -3.99,-0.41 -8.13,-0.36 -12.15,-0.37 -3.37,0.14 1.11,4.61 0.44,4.78 -2.24,-0.97 -4.59,-0.85 -6.63,0.19 -3.12,0.32 -6.61,0.16 -9.54,-0.98 -2.08,-1.54 -4.86,-2.91 -5.69,-5.53l-0.44,0.03z m-49.34,8.94c-0.03,1.09 0.83,-0.73 0,0z m-9.69,0.88c-1.79,0.64 -2,2.84 -0.28,0.69 1.15,0.39 7.48,0.12 5.09,-0.5 -1.6,-0.1 -3.21,-0.36 -4.81,-0.19z m18.53,1.06c0.45,3.21 0.81,1.46 0,0z m-31.41,1c-2.03,0.59 -1.28,4.28 0.3,1.19 1.64,-1.6 4.48,-0.97 6.64,-1.09 -2.3,-0.17 -4.65,-0.31 -6.94,-0.09z M108.19,134.75c-2.3,1.14 5.75,0.85 0.38,-0.03 -0.12,0.04 -0.27,-0.05 -0.38,0.03z m-12.13,0.84c-3.52,0.44 -2.54,2.25 0.41,1.38 2.85,-0.48 5.82,-0.48 8.59,-1.28 -2.97,-0.23 -6.02,-0.18 -9,-0.09z m-32.28,11.06c-1.1,1.27 2.99,3.13 2.5,3.16 1.33,-1.35 0.17,-2.16 3.86,-2.62 3.23,0.07 0.14,-2.1 -1.3,-2.1 -1.69,0.52 -3.38,1.04 -5.06,1.56z M174.25,186.75c0.36,2.67 4.51,2.84 6.35,4.51 3.41,1.6 7.66,0.4 10.79,2.95 3.11,1.84 7.08,3.66 10.49,1.79 1.4,0.19 3.63,2.7 2.89,3.67 -2.99,0.4 -0.11,3.94 -0.78,6.22 0.86,2.85 -2.01,3.95 -3.7,5.61 -3.46,-0.92 -6.93,-3.62 -10.57,-2.86 -2.23,0.9 -3.13,-2.21 -2.65,-3.92 -0.64,-2.4 -4,-3.06 -3.74,-5.78 -0.67,-2.42 -1.42,-4.7 -4.2,-4.81 -3.28,-1.01 -7.24,-4.77 -5.34,-8.44 0.16,0.35 0.31,0.71 0.47,1.06z","name":"Niedersachsen"},"mv":{"path":"m468.38,35.5c-3.45,0.91 -7.31,1.41 -8.93,5.06 -0.26,1.49 -3.68,7.61 -2.06,6.34 1.83,-1.19 3.02,-3.21 2.21,-5.18 0.53,-1.31 3.04,-4.63 4,-2.16 0.98,2.93 -2.17,4.94 -1.91,7.78 2.5,-1.15 4.75,-3.34 7.37,-1.07 2.42,1.29 5.16,2.48 7.7,0.7 1.54,0.46 0.47,5.05 0.71,7.19 0.58,3.31 -4.03,1.68 -5.65,1 -1.59,-1.22 -4.83,-1.69 -5.19,-3.75 1.7,-4.11 -3.26,-1.94 -5.53,-2.31 -2.04,0.6 -6.23,0.55 -4.31,3.72 1.26,1.16 4.35,-0.42 5.38,2.04 2.76,1.44 -0.43,4.39 -2.54,4.37 -2.75,-0.56 -4.74,4.2 -0.71,3.48 2.64,0.57 6.65,0.82 2.18,2.56 -1.86,1.21 -4.55,1.66 -6,3.25 -1.1,2.82 0.47,5.48 1.28,8.13 5.01,1.69 10.02,3.38 15.03,5.06 2.12,-0.23 1.09,-3.14 0.16,-2.97 -0.76,1.88 -3.98,1.99 -3.25,-0.63 2.8,-3.12 5.65,-6.81 9.31,-9 3.6,-0.24 7.24,-1.3 10.81,-1.09 1.21,1.32 2.75,4.02 0.25,4.94 -1.68,2.68 3.83,-2.34 2.14,-4.14 -1.15,-2.6 -3.19,-5.78 -6.42,-4.67 -2.75,-1.52 -4.42,-5.28 -3.91,-8.38 1.26,-2.37 3.94,-3.83 5.78,-5.54 1.61,-2.97 -1.68,-6.36 -4.75,-5.02 -3.75,0.66 -8.71,3.63 -11.63,-0.19 -1.83,-1.92 -3.2,-6.71 0.31,-7.56 2.78,-1.63 0.58,-2.73 -1.84,-1.94z m-11.72,12.09c-0.08,-0.04 -0.09,0.18 0,0z m-4.56,2.28c1.4,-3.26 1.29,-4.92 0.11,-0.61l-0.09,0.49 -0.02,0.12z M457,55.72c-1,0.46 -3.54,5.14 -1.38,3.6 1.48,-0.87 6.21,-2.64 2.44,-3.69 -0.36,-0.17 -0.71,0.02 -1.06,0.09z m-41.09,7c-0.25,1.57 -4.9,6.97 -0.87,4.76 3.72,-1.22 7.4,-2.58 10.67,-4.69 2.93,-0.95 5.29,-0.58 1.12,-0.91 -3,-0.7 -6.71,0.09 -8.98,-2.44 -0.65,1.09 -1.29,2.19 -1.94,3.28z m31.25,-1.97c0.11,0.78 4.7,-2.13 0,0z m-5.81,0.66c-3.54,0.47 -7.66,0.41 -10.88,0.66 0.67,2.11 2.68,1.92 4.62,1.67 3.01,-0.17 6.3,-0.07 8.66,-2.29 -0.79,-0.19 -1.6,-0.03 -2.41,-0.03z m1.56,3.03c-2.88,1.13 -1.21,5.18 -4.19,6.34 -3.6,2.14 -6.72,-2.29 -10.47,-2.06 -3.01,-0.89 -5.76,1.74 -8.35,3.01 -2.71,2.18 -6.52,4.43 -7.27,7.96 0.18,1.51 4.13,0.67 2.84,2.66 -2.29,1.22 -5.24,-0.3 -6.59,-2.13 -0.64,-1.13 1.18,-6.54 -0.53,-3.19 -3.22,4.08 -9.79,4.87 -11.29,10.52 -1.07,2.64 -1.85,5.58 -5.3,3.89 -4.59,-1.7 -8.52,1.77 -12.84,2.72 -3.31,0.47 -6.17,-1.62 -9.5,-0.72 -2.97,1.63 -5.73,4.31 -8.33,6.62 -1.96,2.01 -2.68,5.33 -0.14,1.47 1.06,-1.2 2.41,-4.78 4.19,-3.41 2.37,2.62 -1.24,5.31 -2.34,7.63 -1.89,1.4 -5.07,1.98 -4.85,5.06 -0.11,3.13 -0.5,6.25 -2.62,8.72 -1.16,-0.88 -3.68,-1.23 -3.47,-3.09 -1.92,-1.17 -4.21,-1.95 -5.89,0 -2.35,1.65 -4.97,-1.81 -3.77,-4.13 -1.91,-1.96 -3.3,-5.2 -6.59,-3.87 -5.1,-0.35 -9.02,3.11 -13.04,5.78 1.53,2.15 0.81,6.74 -2.56,5.38 -2.64,1.41 -7.07,3.37 -6.72,7.09 1.31,2.5 2.06,5.12 1.15,7.92 0.24,2.24 3.08,3.96 4.95,5.27 1.49,-0.13 2.88,-0.94 4.38,0.28 1.77,1.48 2.91,4.8 1.54,6.72 -1.07,2.51 -1.74,5.18 -3.94,7.19 -3.45,4.41 -6.57,9.53 -11.63,12.13 -2.85,-1.67 -4.12,1.25 -4.21,3.8 -1.04,3.05 -1.35,4.72 2.28,3.81 4.38,-1.22 5.62,3.97 8.63,5.73 2.06,1.71 4.79,0.13 5.56,-2.03 1.66,-2.26 4.66,-0.28 6.53,0.28 2.66,5.4 4.35,13.11 11.13,14.56 1.97,-0.26 2.54,2.31 1.09,3.34 1.98,0.75 4.2,1.46 5.28,3.41 2.92,0.33 5.86,0.78 7.88,-1.84 2.53,-1.04 4.17,0.11 6.2,0.92 3.41,1.17 3.57,-3.72 2.91,-5.91 -1.19,-2.85 2.75,-4.04 4.19,-5.91 2.26,-0.57 6.06,-0.68 6.92,2.18 2.22,-0.82 7.58,-0.29 4.18,-3.52 1.89,-0.52 5.64,-0.7 8.01,-2.08 1.84,-1.16 5.37,-2.23 4.75,-4.82 0.89,-1.93 2.17,-4.64 4.7,-3.27 2.88,0.17 5.85,-1.68 8.79,-1.42 2.69,2.85 6.38,3.54 9.59,5.47 2.1,1.42 2.54,5.89 5.86,4.62 1.42,-1.54 4.52,-1.23 6.97,-0.84 2.64,0.11 5.42,0.12 6.99,2.65 1.76,1.23 2.9,3.74 4.81,4.36 3.51,-2.08 7.9,-1.79 11.85,-1.57 1.87,0.92 -0.02,2.26 -1.2,2.88 2.73,2.02 3.96,-3.02 6.01,-4.14 1.85,-2.5 5.05,-5.4 8.21,-4.51 0.4,1.63 2.6,4.73 2.69,1.53 -0.18,-4.03 4.85,-6.14 8.16,-4.72 0.92,1.02 1.13,4.66 2.78,2.25 1.94,-2.52 5.64,-4.66 5.83,-7.92 -0.98,-3.87 1.53,-7.87 4.55,-10.15 2.94,-2.19 5.03,-6.55 9.2,-6.14 3.13,-1.46 0.88,-2.47 0.94,-4.94 -0.47,-2.01 1.66,-5.18 3.04,-2.12 2.09,2.5 4.8,4.66 5.08,8.15 0.55,3.39 3.31,3.78 6.08,2.65 2.41,-0.3 6.44,1.78 7.55,-1.21 2.62,0.79 6.91,-0.99 8.25,2.06 1.49,6.11 -3.45,10.78 -7.19,14.78 -1.98,3.1 3.33,1.46 5.03,1.98 3.6,0.68 6.06,-2.53 6.41,-5.79 1,-1.79 6.72,-1.16 5.01,-3.95 -1.75,-4.35 -2.83,-9 -3.99,-13.46 -2.18,-2.83 -4,-6.6 -2.87,-10.22 -0.22,-5.43 -3.03,-10.29 -3.44,-15.72 -0.42,-2.28 -2.57,-2.04 -3.28,-0.22 -1.81,2.36 -5.39,1.17 -7.84,0.59 -3.37,-1.38 -7.23,-1.87 -9.74,-4.72 -2.44,-2.52 -7.36,-2.95 -8.1,-6.78 1.68,-2.2 3.24,-5.36 5.94,-6.13 0.44,-2.04 -2.63,-3.55 -3.67,-5.18 -2.27,-2.24 -3.02,-5.61 -4.55,-8.32 0.21,-2.8 0.27,-5.88 -2.37,-7.5 -1.78,-3.54 -4.86,-2.15 -7.78,-0.99 -2.53,1.08 -5.51,1.39 -7.79,2.9 0.14,1.21 2.98,3.43 0.56,3.84 -3.2,0.18 -3.78,-3.49 -4.59,-5.69 -0.99,-1.26 -3.18,1.08 -3.03,-1.66 3.36,-2.44 -2.45,-0.94 -3.09,-2.5 -1.56,-2.33 -1.97,-5.95 -5.39,-6.49 -2.15,-2.65 -4.68,-0.2 -6.44,-0.76 -2.83,-2.27 -3.42,-6.13 -4.17,-9.38 1.49,-2.52 -2.16,-5.5 -3.62,-7.17 -1.75,-0.48 -3.25,0.75 -4.88,1.21z m52.69,22.19c-3.16,0.36 -1.48,4.22 0.37,5.25 1.73,2.04 0.07,5.76 2.48,7.75 1.23,2.84 2.71,4.73 5.49,2.07 1.56,-1.43 -2.24,-3.39 -0.78,-5.26 2.84,0.22 4.58,0.55 1.09,-0.38 -3.78,-1.63 -6.46,-4.91 -7.63,-8.84 -0.21,-0.29 -0.58,-0.78 -1.03,-0.59z M508.81,98.25c2.29,2.13 4.59,4.76 3.68,8.19 1.29,3.82 -2.55,2.56 -4.59,1.72 -1.01,-1.74 -1.1,-5.02 -3.97,-3.22 -1.8,2.49 2.15,3.83 2.07,6.36 1.37,2.89 -1.67,5.12 -4.12,5.88 -2.51,0.31 -1.55,2.32 0.67,2.35 4.16,0.13 7.86,-2 11.53,-3.58 2.18,-0.69 5.82,0.22 7.3,-1.22 1.43,-3.32 1.05,-6.01 -2.4,-7.65 -4.01,-3.08 -7.07,-7.49 -11.49,-9.99 0.44,0.39 0.88,0.77 1.31,1.16z m-153.22,8.91c-2.07,0.65 -6.19,2.56 -3.84,5.09 3.14,1.72 4.9,-0.57 5.38,-3.56 0.63,-1.6 0.03,-1.86 -1.53,-1.53z","name":"Mecklenburg-Vorpommern"},"he":{"path":"m231.91,351.28c-2.52,4.22 -6.22,7.61 -8.38,12.09 -3.47,2.99 -7.81,5.31 -10.28,9.09 -2.28,0.4 -5.74,0.13 -5.5,-3 2,-3.26 -3.47,-5.21 -5.91,-3.76 -1.41,0.82 -5.95,0.93 -4.65,3.28 0.64,2.39 3.13,3.23 3.37,5.4 0.17,2.42 -1.34,4.44 -3.94,3.29 -5.15,-0.39 -10.41,1.05 -14.95,3.35 -3.17,1.4 -4.72,4.59 -6.61,7.28 0.84,1.05 2.01,4.06 3.59,2.09 2.37,-0.9 6.57,-4.19 7.88,-0.28 0.22,4.19 2.13,8.77 -0.72,12.51 -0.71,2.75 -2.31,4.62 -5.22,4.99 -3.14,-0.43 -7.52,-2.41 -9.63,1.09 0.39,2.15 1.85,4.24 2.13,6.19 -1,1.73 -3.4,2.91 -4,4.63 3.11,2.85 -2.97,-1.27 -1.76,3.31 -1.97,2.72 -3.4,6.11 -5.96,8.25 -2.51,0.68 -5.22,-4.25 -7.23,-1.05 -2.7,2.64 -5.41,5.28 -8.11,7.92 0.49,2.48 3.93,4.74 1.63,7.26 -0.76,2.71 -4.3,4.36 -2.78,7.49 -0.8,2.92 2.77,3.49 2.12,5.75 -1.13,1.85 -1.06,5.6 -3.44,5.9 -1.97,0.22 -2.63,-1.53 -4.06,-2.13 -2.8,1.41 -5.48,6.02 -2.56,8.66 -0.49,2.46 -3.67,5.82 0.27,6.82 3.67,1.53 5.25,5.3 6.61,8.75 0.92,2.04 1.08,4.85 -1.7,5.37 -1.07,-0.93 -5.7,-1.33 -3.5,1.11 2.47,0.99 0.89,3.49 -1,3.99 -2.32,-1.08 -4.25,-1.29 -6.55,0.33 -2.11,0.73 -3.8,3.88 -1.08,4.86 2.02,1.08 1.39,4.09 0.28,5.59 -2.84,-2.01 -4.64,0.94 -6.72,2.5 -3.14,0.7 -2.62,2.78 -0.67,4.69 1.7,1.7 2.49,4.75 4.7,5.72 7.32,0.54 13.26,-4.85 20.19,-5.97 3.41,-0.25 5.55,2.38 7.21,4.9 2.7,2.09 3.72,5.69 3.75,8.95 -2.21,2.91 0.93,6.19 1.75,9.06 1.22,3.02 5.3,4.54 4.69,8.16 -0.83,2.19 -2.69,3.5 -5.03,3.69 -3.67,1.29 -0.58,5.33 -0.19,7.78 1.19,1.23 1.73,4.58 3.56,3.47 2.87,-0.09 4.72,3.15 6.02,5.29 0.45,2.46 3.64,2.83 4.61,0.44 0.84,-1.91 -0.18,-4.52 -1.35,-5.64 -0.49,-3.07 3.89,-2.29 5.74,-3.3 2.12,-0.86 2.95,1.54 1.33,2.77 -0.13,1.19 0.36,6.2 2.44,7.44 3.73,1.71 7.96,2.48 12.06,2.41 0.3,2.37 -0.95,4.21 -3.22,5.14 -2.12,0.41 -4.13,4.05 -2.97,5.83 3.16,0.98 4.62,-3.02 6.97,-4.37 2.62,-1.23 -1.27,-2.95 1.23,-4.7 1.83,-3.04 5.68,-3.23 8.67,-4.31 2.07,1.28 4.67,2.3 1.65,-0.28 -2.77,-0.69 1.28,-2 0.17,-4.09 -1.83,-2.61 0.09,-5.95 0,-8.84 0.67,-3.72 4.45,-6.62 2.87,-10.6 0.27,-3.23 -3.17,-2.82 -4.5,-5.35 -1.88,-1.31 -2.94,-3.09 -2.59,-5.43 1.25,-0.49 -0.57,-3.68 -0.1,-5.19 -0.37,-2.39 0.26,-5.26 -1.15,-7.31 2.19,-0.29 2.3,-4.03 0.75,-4.91 -3.55,0.11 -2.06,-3.18 -1.51,-5.43 1.26,-3.72 6.02,-2.87 8.99,-4.29 3.44,-0.94 6.85,-2.48 10.38,-0.98 2.53,1.03 6.93,-0.17 7.36,3.51 0.22,3.77 3.72,2.22 6.1,1.81 3.18,-0.12 0.4,-3.63 0.68,-5.44 -0.84,-3.13 -0.37,-6.51 1.38,-9.24 2.02,0.57 4.63,1.89 6.47,0.94 0.86,-2.28 1.78,-5.61 4.88,-5.28 3,-1.1 4.77,-5.15 2.22,-7.63 2.46,-1.43 0.46,-5.9 4.2,-5.65 2.35,-1.65 4.24,2.19 6.72,0.64 3.67,-2.12 7.61,-4.88 9.17,-8.99 0.87,-4.15 -0.43,-8.59 0.34,-12.69 1.59,-1.67 2.87,-3.11 0.88,-5.25 -1.95,-0.3 -4.67,-0.51 -5.91,1.03 2.68,1.72 0.06,4.83 -2.4,3.41 -3.4,0.47 -3.73,-2.19 -3.1,-4.85 1.64,-2.54 4.97,-5.54 3.53,-8.77 -2.61,-1.88 3.02,-1.21 0.62,-3.76 -0.39,-2.4 1.7,-5.24 4.25,-4.19 2.32,-0.16 2.52,-3.78 3.13,-5.59 -0.42,-3.72 -1.44,-7.39 -2.41,-10.94 0.58,-3.37 4.7,-2.07 6.91,-1.42 1.33,1.43 3.54,1.27 4.93,0.14 1.65,-2.01 -0.8,-4 -2.88,-4.28 -0.73,-2.4 -0.28,-5.7 -2.15,-8.05 -1.81,-2.17 3.2,-3.84 4.13,-1.92 0.85,2.09 2.04,3.15 0.8,0.19 -0.79,-1.77 1.55,-2.57 1.81,-3.75 -2.16,-0.34 -3.1,-3.03 -5.47,-3.13 -2.41,-1.32 -5.66,-1.92 -5.69,-5.28 -2.73,-1.26 -6.43,-1.62 -7.14,-5.14 -0.93,-2.28 -2.35,-5.29 -0.96,-7.39 -0.41,-3.77 -4.2,-2.41 -6.91,-2.04 -2.44,0.91 -4.65,3.07 -6.27,5.16 0.26,3.75 3.81,-0.17 4,2.53 0.6,2.43 -1.31,3.7 -3.35,4.44 -2.57,-2.31 -6.46,-3.25 -9.7,-4.62 -2.11,-0.64 -2.73,-3.33 -1.64,-5.16 0.52,-2.33 2.7,-3.11 4.88,-2.75 1.13,-2.01 -0.13,-5.09 -0.97,-7.03 -0.84,-1.85 -3.71,-4.21 -0.9,-5.87 1.12,-2.04 3.33,-1.71 4.5,-3.66 2.57,-0.35 -1.93,-2.01 -2.09,-3.38 -2.42,-2.04 -5.4,-1.51 -8.28,-1.84 -2.56,-0.15 0.13,-3.78 -1.82,-2.9 -0.65,0.13 -1.3,0.26 -1.96,0.4z m48.47,53.75c-0.2,0.03 0.16,0.35 0,0z","name":"Hessen"},"hh":{"path":"m273.31,139.16c-1.5,1.09 -0.93,4.3 -3.67,5.06 -1.61,1.47 -3.71,3.26 -5.89,1.85 -2.33,-0.78 -1.81,2.21 -3.43,3.24 -1.3,1.52 -3.26,5.5 -5.37,2.78 -1.64,-2.73 -2.78,-2.89 -3.11,0.48 -1.95,3.52 3.88,1.56 2.16,5.63 -0.89,2.25 0.93,3.48 1.47,5.56 1.11,1.96 3.5,5.01 5.03,1.63 1.82,-0.66 3.1,2.78 4.87,3.63 1.74,1.19 3.59,-1.92 4.1,-3.57 1.25,-2.32 3.61,0.86 4.66,2.15 1.9,2.2 3.93,4.76 7.21,3.97 1.13,-0.62 1.01,-2.97 2.91,-3.07 2.93,-1.45 -2.65,-3.59 -2.97,-5.78 -1.42,-2.02 -5.31,-2.65 -5.35,-5.94 -0.83,-2.64 0.75,-4.88 3,-6.12 2.02,-2.17 0.93,-4.31 -0.94,-5.97 0.01,-2.33 -0.49,-4.73 0.53,-6.88 -1.59,-1.66 -3.52,1.07 -5.22,1.34z","name":"Hamburg"},"hb":{"path":"m177.13,149.91c-1.02,1.81 2,3.93 2.44,6 0.78,1.49 -1.36,2.66 0.47,3.7 0.36,2.05 1.77,2.73 3.27,0.5 2.31,-1.97 -1.15,-5.18 0.62,-7.7 1.79,-3.68 -3.69,-1.91 -5.73,-2.54 -0.36,-0.05 -0.71,0.02 -1.07,0.05z m-2.34,39.47c1.3,3.24 5.12,3.63 7.78,4.94 1.52,2.61 1.31,5.93 3.86,7.69 2.1,1.22 1.38,3.71 2.04,5.46 1.64,0.31 3.99,-0.68 5.77,0.73 2.5,0.16 5.45,3.63 7.38,0.87 2.63,-1.56 0.74,-5.04 0.98,-7.51 -2.78,-1.97 1.76,-2.01 0.87,-3.11 -1.26,-2.73 -3.93,0.26 -6.25,-0.86 -4.35,-0.36 -7.69,-4.63 -12.29,-4.36 -3.91,0.3 -6.92,-2.67 -10.15,-3.86z","name":"Bremen"},"bb":{"path":"m499.25,149.81c-0.84,1.88 -0.81,4.34 1.28,5.34 -1.74,2.06 -3.79,3.29 -6.37,3.46 -3.18,2.74 -6.61,5.55 -9.05,8.91 -1.36,2.25 -1.54,4.68 -0.87,7.16 -2.28,3.16 -4.83,6.45 -8.06,8.63 -2.41,-0.12 -1.19,-4.5 -3.97,-3.53 -3,-0.61 -5.44,2.28 -5,5.15 -0.4,2.7 -4.01,1.19 -3.97,-1.02 -0.57,-1.97 -3.52,0.03 -4.56,0.75 -2.74,2.49 -4.73,6.13 -7.88,8 -1.99,-0.23 -3.86,-2.04 -1.25,-3.16 1.45,-1.47 -4.76,-0.14 -6.18,-0.46 -2.13,-0.19 -5.04,3.22 -6.6,0.49 -2.73,-2.51 -5.01,-6.52 -9.27,-5.91 -2.13,0.04 -5.13,-1.3 -6.45,0.69 -2.87,1.21 -4.79,-0.3 -6.25,-2.72 -1.52,-3.98 -6.92,-3.25 -9.48,-6.32 -1.8,-2.15 -4.65,0.11 -6.93,0.1 -2.38,1.26 -5.39,-1.14 -6.32,2.55 0.99,3.09 -2.96,4.01 -4.77,5.61 -2.15,1.15 -6.11,1.77 -7.27,2.46 2,2.09 -1.36,2.73 -2.94,2.85 -3.43,2.16 -3.88,-1.29 -6.73,-1.81 -3.03,-0.86 -4.57,2.1 -6.63,3.69 0.64,2.72 1.23,7.08 -1.72,8.53 -1.68,-0.03 -3.77,-0.05 -4.75,-1.47 -3.21,-0.91 -4.58,3.15 -7.53,2.47 -2.88,-1 -5.03,0.48 -2.09,2.67 1.36,1.69 3.08,4 5.08,1.55 1.94,-1.5 5.34,-2.28 6.7,0.42 1.5,2.04 4.32,1.65 6.53,2.39 1.23,-1.43 4.73,-0.25 2.95,1.62 -1.67,1.72 2.21,2.59 2.91,3.81 1.43,1.12 2.93,-2.01 4.58,-0.33 1.76,1.64 5.48,1.89 6.03,4.47 0.12,1.23 -2.72,2.23 -0.94,3.16 4.27,1.68 8.68,4.08 13.38,2.66 2.5,1.2 6.82,-4.08 4.61,0.18 -0.35,3.68 2.96,0.6 4.61,0.47 3.29,0.55 2.92,4.31 3.72,6.78 0.37,2.84 -3.59,3.22 -2.84,6.46 -1.66,3.81 3.69,5.99 2.3,9.81 0.77,2.86 -2.32,3.27 -3.45,4.66 -0.54,2.65 -2.13,5.71 -1.65,8.26 0.83,2.24 4.39,3.7 4.36,0.28 2.12,1.42 6.84,0.74 6.61,4.02 1.02,3.09 -2.67,5.39 -1.23,8.53 0.24,2.83 1.88,6.06 -0.69,8.26 -2.05,3.4 -2.35,7.41 -1.88,11.28 -2.17,2.79 -1.48,5.22 1.03,7.44 3.11,5.22 7.1,10.36 13.17,12.16 3.29,1.01 7.58,3.94 10.7,1.22 -0.29,-3.23 3.4,-2.12 4.94,-0.75 2.81,1.03 3.99,2.78 6.11,4.39 2.08,1.33 4.66,2.82 7.04,1.98 3.14,1.39 6,3.2 8.16,5.88 3.11,1.39 3.63,-2.03 5.78,-1.38 1.85,0.64 2.36,3.88 -0.16,3.41 1.53,4.44 1.98,9.42 4.53,13.28 -0.28,4.36 -5.19,5.81 -8.13,8.16 1.38,4.17 2.89,2.17 5.54,3.45 2.71,1.73 3.05,5.69 4.55,8.42 0.92,3.28 0.16,6.97 -0.56,10.28 1.12,1.84 2.33,3.34 4.61,2.31 0.97,-1.14 2.38,-3.45 4.49,-4.31 2.22,-1.43 4.58,-3.03 6.29,-0.12 4.07,3.53 9.06,7.27 14.8,6.16 2.09,-1.58 2.79,0.71 5.58,0.52 2.7,-0.23 5.1,-3 8.17,-1.96 3.29,-1.1 7.81,-0.26 9.47,-3.95 2.24,-4.34 2.1,-9.97 5.65,-13.77 1.52,-0.92 3.97,-0 5.84,-0.31 2.67,-0.5 5.34,2.24 7.62,0.72 1.65,-1.85 4.86,-1.52 6.32,-2.54 1.7,-2.16 5.35,-2.05 7.75,-3.38 2.31,-0.33 2.58,2.04 4.09,2.56 2.19,0.22 4.28,-0.47 4.14,-3.06 1.18,-2.26 3.58,-0.39 3.55,-4.22 -0.1,-2.81 -0.47,-5.99 -3.36,-7.26 -3.75,-2.16 -4.56,-6.65 -6.42,-10.21 -2.9,-0.63 -3.35,-5.09 -0.55,-6.35 3.76,-2.93 5.89,-7.61 5.36,-12.4 -0.5,-2.47 -0,-3.76 1.5,-6 1.18,-2.51 -0.13,-5.99 -3.13,-5.94 -2.3,-1.74 -2.72,-5.61 -0.53,-7.63 -0.28,-2.81 1.52,-6.55 -1.09,-8.56 -2.6,-1.24 -6.3,-0.29 -7.81,-3.19 -1.11,-3.05 -1.39,-6.47 -2.42,-9.42 -1.68,-2.31 -0.63,-6.4 2.17,-7.48 1.98,-2.33 3.3,-5.1 2.57,-8.22 0.38,-2.83 -0.31,-5.28 -2.51,-7.19 -3.54,-2.79 -8.55,-3.73 -11.34,-7.59 -2.56,-5.3 -8.11,-8.18 -12.88,-11.28 -2.02,-1.42 -4.87,-0.97 -6.69,-2.38 -2.03,-2.63 3.01,-4.81 1.15,-7.48 -0.64,-2.66 -2.69,-6.39 0.67,-8.11 3.25,-1.9 6.37,-3.89 8.77,-6.91 3.06,-2.56 2.89,-6.96 3.39,-10.59 -1.83,-1.72 -1.71,-4.98 -0.47,-6.84 1.2,-1.67 4.41,-4.79 3.03,-6.69 -2.15,0.19 -2.35,-3.69 -2.22,-5.41 -2.44,1.01 -5.3,1.53 -5.5,4.63 -1.15,2.4 -3.02,3.91 -5.78,3.72 -2.22,-0.47 -6.15,0.62 -7.41,-0.9 0.47,-4.6 5.82,-6.58 7.23,-10.78 0.81,-2.01 1.54,-5.13 -0.2,-6.73 -3.16,-0.57 -5.69,-0.28 -7.87,1.03 -3.28,0.28 -6.64,-0.73 -9.75,0.5 -4.23,-1.06 -2.75,-6.98 -5.95,-9.24 -1.05,-1.15 -2.07,-2.54 -3.15,-3.54z M484.13,240.25c2.62,1.78 3.22,5.59 5.07,8.15 1.73,3.05 5.13,4.94 5.9,8.6 -0.13,3.15 2.96,3.88 5.31,4.97 3.02,1.16 1.5,3.96 0.62,6.15 -2.11,1.18 -0.3,2.41 -1.81,3.94 -3.37,1.44 -6.8,-1.31 -10.22,-1.72 -2.61,0.29 -4.02,-2.66 -5.44,-2.59 -3.39,0.13 0.93,5.86 -3.25,4.2 -2.15,-1.56 -3.93,-2.85 -6.03,-2.56 -2.2,-2.21 -6.14,-1.55 -8.26,0.46 3.07,1.05 -3.31,1.77 -4.27,0.08 -2.48,-1.03 -0.87,-2.57 0.43,-3.73 -0.55,-1.26 -1.2,-3.36 0.31,-4.63 3.03,-2.14 1.73,-3.7 -0.71,-3.56 0.04,-2.5 -0.02,-5.34 0.62,-7.66 1.31,-1.47 2.88,-1.58 4.41,-0.5 1.08,0.35 -1.33,-2.46 0.8,-3.32 1.36,-1.61 4.71,-0.61 6.85,-0.8 2.24,1.02 3.85,-0.76 4.63,-2.66 1.77,2.37 2.44,0.08 3.29,-1.66 0.36,-0.52 1.13,-1.47 1.74,-1.16z","name":"Brandenburg"},"be":{"path":"m483.38,241.69c-1,1.58 -1.61,5.27 -4.03,2.88 -0.91,2.64 -3.81,2.59 -6.06,2.05 -1.91,-0.31 -7.28,0.09 -4.84,2.79 1.38,2.14 -2.25,1.68 -3.34,0.78 -3.18,-0.15 -1.8,4.36 -2.36,6.45 -0.09,0.87 5.17,1.04 2.51,3.18 -1.16,1.75 -4.04,3.69 -1.89,5.83 0.53,1.82 -3.82,2.76 -0.54,3.7 2.29,1.61 3.52,-2 6.07,-2.2 2.07,-0.34 5.08,-0.28 6.25,1.69 2.29,-3.28 5.18,4.71 6.09,1.16 -1.15,-2.62 1.9,-3.14 3.66,-3.85 0.63,3.56 5.17,2.88 7.8,4.18 1.96,0.26 4.94,2.32 6.26,0.28 -2.5,-1.19 2.5,-2.95 2,-5.26 1.05,-2.66 -3.24,-2.9 -4.77,-4.37 -2.69,-0.38 -1.4,-4.38 -3.15,-6.05 -1.61,-3.03 -4.93,-4.88 -5.94,-8.38 -1.14,-0.99 -1.96,-6.07 -3.71,-4.88z","name":"Berlin"},"by":{"path":"m273.66,464.44c-1.31,1.91 -3.76,2.78 -3.5,5.34 -1.83,4.59 -6.12,7.95 -10.5,9.94 -2.67,1.02 -4.62,-2.49 -7.15,-0.61 -1.54,0.74 -0.64,3.49 -2.13,4.58 2.4,3.04 -0.04,7.53 -3.44,8.47 -3.38,-0.45 -3.01,4.07 -4.66,5.5 -2.16,0.47 -4.23,-0.33 -6.28,-0.91 -2.54,3.91 -0.46,8.53 0,12.63 -0.53,2.87 -4.66,1.74 -6.9,2.55 -3.16,0.27 -1.64,-5.68 -4.98,-5.22 -4.19,-0.72 -8.41,-2.46 -12.49,-0.42 -2.97,1.16 -6.84,1.23 -9.32,2.99 -0.59,1.48 -2.41,4.44 -0.69,5.28 3.02,-0.37 2.55,4.03 2.28,5.63 -2.37,0.86 0.17,4.18 -0.45,6.12 0.28,2.66 -0.27,5.78 1.89,7.78 -3.88,-0.85 0.14,3.73 1.52,4.58 0.84,1.94 3.96,0.92 3.59,3.64 1.27,2.88 0.6,5.62 -0.78,8.31 -2.26,2.93 -2.47,7.6 -2.42,11.23 1.24,2.27 4.6,0.89 6.75,1.12 2.16,0.04 4.75,-2.13 4.73,-4.03 -0.34,-2.04 2.18,-5.23 4.72,-3.63 1.87,0.74 5.34,1.32 4.23,-1.45 1.6,-1.24 -0.63,-7.5 -0.96,-4.79 0.79,2.49 -3.31,2.3 -3.52,0.13 -0.83,-1.56 -3.4,-4.82 -1.19,-6.09 3.07,-0.15 6.37,-1.05 9.34,-0.19 0.41,-2.46 4.94,-2.22 3.88,0.41 0.59,1.49 3.45,3.68 4.43,1.04 1.16,-1.1 4.96,-5.66 4.94,-1.88 -0.59,2.44 0.18,5.72 -1.59,7.45 0.33,2.92 3.79,0.57 5.16,-0.39 2.48,-0.32 5.61,-3.48 7.29,-0.3 2.99,3.39 2.07,8.94 5.01,12.52 2.18,0.31 2.43,3.58 2.41,5.6 0.45,1.81 -0.72,3.89 -0.34,5.16 2.77,0.82 6.24,0.65 7.69,-2.25 -0.15,-1.12 -1.91,-2.61 0.74,-3.68 2.83,-1.31 3.76,2.79 4.2,4.84 -1.95,1.56 1.87,3.4 1.31,5.57 0.26,2.1 4.02,5.65 0.6,6.68 -2.91,-0.9 -2.81,3.3 -1.87,5.04 0.96,2.51 3.11,4.68 1.16,7.27 0.44,2.52 -1.72,6.37 1.65,7.44 1.89,1.55 4.82,1.6 5.41,4.43 1.71,2.58 1.5,5.88 2.31,8.79 -2.03,1.94 3.23,2.14 4.31,3.59 2.13,2.06 5.86,2.95 6.29,6.28 3.84,2.87 1.91,8.3 2.08,12.46 0.25,2.64 -0.94,5.5 -2.07,7.44 -0.04,3.1 4.34,2.42 3.61,6.41 2.49,1.05 0.06,3.97 -1.86,4.33 -1.61,1.16 -4.23,0.12 -2.18,-1.56 2.29,-3.25 -3.46,-0.68 -4.81,-0.69 -2.23,0.84 -5.79,-3.18 -5.97,0.9 -0.14,3 3.91,4.63 3.42,7.93 0.53,2.67 0.99,5.81 0.27,8.32 -1.49,1.89 -3.93,-0.58 -5.06,1.19 0.32,2.29 -3.52,3.66 -4.94,5.41 -3.13,1.93 -4.28,-3.47 -7.13,-0.01 -2.35,0.12 -0.74,3.36 -2.58,4.82 -1.74,2.44 -2.43,5.75 -0.16,8.06 1.31,2.7 4.08,4.51 3.75,7.78 0.56,4.38 1.13,8.84 2.71,12.9 2.91,1.82 1.6,5.52 2,8.41 0.45,2.66 -1.86,4.17 -1.66,6.72 0.19,1.55 -3.47,0.81 -1.84,3.13 2.61,1.07 0.38,3.66 0.87,5.81 0.2,2.47 -0.14,5.78 2.07,7.38 0.5,2.56 -3.74,2.92 -1.81,6.18 1.02,3.01 3.86,6.55 1.16,9.46 -1.18,1.16 -3.19,0.63 -3.38,2.95 -1.52,3.81 -0.35,-4.27 -2.92,-3.81 -1.88,-0.93 -3.51,0.34 -4.08,2.09 -3.48,0.28 -7.46,-0.44 -10.66,0.7 -2.62,1.93 -4.17,6.22 -7.96,5.49 -1.72,0.26 -2.84,-2.34 -4.53,-0.51 -3.88,1.61 -1.7,3.37 1.37,4.04 3.22,2.32 4.79,-0.35 6.38,-2.97 2.19,-2.61 6.67,0.35 5.03,3.47 -1.46,1.59 3.12,2.56 4.5,2.46 2.2,0.75 5.22,-2.54 5.71,-2.37 -1.26,2.65 0.2,5.16 1.79,7.23 3.74,-0.93 5.96,3.27 7.63,5.97 -1.64,1.92 -2.48,3.42 -1,5.94 0.03,1.72 5.17,0.51 4.35,-1.56 0.81,-1.86 3.6,-1.1 5.09,-0.53 2.05,2.24 -1.68,3.98 -1.81,6.26 -0.21,1.48 -3.48,5.59 -1.04,5.45 5.9,-0.28 10.64,-4.27 13.65,-9.1 1.68,-2.49 4.2,-4.8 5.23,-7.51 -0.27,-1.73 0.37,-4.61 -1.96,-4.47 -1.78,-2.98 -0.76,-6.77 -1.03,-10.06 0.59,-1.59 4.6,-2.06 3.97,0.09 -1.67,2.23 -0.39,3.45 2.34,3.77 2.31,0.63 4.34,0.47 4.81,-2.09 1.65,-2.51 5.13,-0.08 7.59,-0.22 0.5,2.03 3.14,2.52 5.19,3.38 2.99,1.48 5.86,-2.19 8.72,-1.09 3.48,2.5 -1.05,3.09 -0.97,5.59 2.55,0.29 4.83,1.11 6.25,3.38 2.96,1.58 0.77,3.77 1.16,5.09 4.01,0.78 8.16,-0.05 11.5,-2.41 2.24,-1.08 5.28,-2.46 7.66,-1.16 -0.63,2.06 -2.84,4.65 1.39,2.92 0.99,-2.2 2.51,-4.2 4.63,-5.64 2.78,-1.69 3.97,-4.98 6.66,-6.66 2.2,2.25 6,0.82 8.75,0.25 1.72,-1.5 -0.11,-4.24 1.75,-6 1.27,-3.31 5.21,-1.69 7.87,-2.01 3.14,-0.06 6.26,-0.02 9.34,0.6 1.3,-3.59 5.97,-3.64 9.18,-3.87 2.61,1.43 5.36,-1.54 7.57,0.5 2.56,0.03 5.94,1.12 8.03,-0.19 -0.56,-3.08 -2.75,-5.66 -1.81,-8.97 1.68,-1.6 3.23,-4.06 5.5,-4.97 2.05,1.73 -0.97,3.82 0.9,5.81 0.74,1.55 6.18,-3.23 5.07,-0.41 2.78,1.55 7.13,-0.47 8.4,3.24 1.5,2.9 4.05,3.71 6.55,1.34 2.39,-0.55 1.97,-4.34 4.92,-3.93 3.45,-1.43 7.22,-0.35 10.38,1.04 0.63,2.57 4.26,5.4 1.53,7.59 -1.91,3.64 3.48,5.29 5.61,7.15 2.86,2.07 5.93,3.86 9.26,5.04 1.6,-1.29 3.65,-3.83 2,-5.66 -1.98,-1.39 0.16,-4.42 -0.13,-6.41 0.81,-2.05 3.05,-3.55 3.5,-5.53 -1.37,-2.88 -2.02,-7.29 -5.72,-7.94 -0.69,2.59 -4.42,1.51 -6.31,1.34 -1.86,-0.73 -2.16,-2.62 -0.73,-4.04 1.53,-3.69 4.03,-7.15 5.39,-10.77 -2.14,-3.41 -3.7,-7.7 -6.59,-10.34 -2.88,0.4 -3.64,-2.11 -3.9,-4.41 -1.24,-4.49 -8.32,-5.42 -8.04,-10.73 0.04,-2.8 4.04,-3.87 5.63,-5.89 1.81,-1.22 1.17,-3.89 2.78,-4.97 2.57,-0.91 6.07,0.24 7.47,-2.89 1.29,-1.84 2.29,-3.74 4.7,-4.4 2.08,-2 5.15,-0.22 7.17,-2.39 2.7,-1.73 6.58,0.63 8.88,-2.3 3.06,-1.95 5.85,-4.79 7.85,-7.65 0.43,-2.52 2.26,-5.13 0.38,-7.38 0.45,-3.1 3.3,-6.59 0.44,-9.38 -0.61,-1.41 4.07,-1.2 4.41,-3.5 -0.1,-4.04 4.08,-0.04 6.17,0.11 3.24,1.6 5.97,4.3 9.52,5.26 3.15,-4.15 7.21,-9.07 5.25,-14.64 0.5,-2.8 -3.41,-5.03 -1.06,-7.39 1.18,-2.53 1.51,-5.28 -0.56,-7.48 -1.75,-2.45 -3.35,-5.1 -5.19,-7.42 -2,1.56 -5.42,0.69 -5.99,-1.97 -0.86,-2.58 -2.84,-4.62 -4.76,-6.5 -2.32,-0.51 -5.25,-0.27 -4.06,2.66 -1.49,2 -4.02,-1.61 -5.78,-2.26 -3.51,-1.84 -1.34,-7.26 -4.67,-9.54 -1.77,-2.1 -3.92,-4.14 -6.4,-5.23 -2.11,1.09 -4.33,0.73 -6.1,-0.79 -2.35,-0.65 -1.29,-3.34 -2.28,-4.52 -5.62,-4.34 -8.22,-11.7 -13.85,-16.05 -0.96,-0.66 -5.12,-1.7 -4.56,-0.67 1,2.66 -3.26,0.86 -4.59,0.92 -2.67,0.16 -4.59,-1.69 -5.1,-4.2 0.33,-2.99 -3.95,-3.91 -5.58,-5.98 -1.3,-1.16 -4.06,-3.42 -2.45,-4.96 0.01,-2.41 0.31,-4 -2.29,-4.05 -2.07,-0.53 -1.46,-1.98 -2.8,-3.5 -2.08,-3.55 -3.13,-7.39 -3.48,-11.47 -1,-2.47 -5.61,-0.9 -6.56,-3.96 -1.46,-1.68 -3.4,-4.99 -0.08,-5.91 3.24,-0.92 2.39,-4.05 3.21,-6.53 0.88,-3.28 4.17,-5.56 3.4,-9.15 -1.69,-2.78 -3.02,-7.24 -7.16,-6.34 -2.89,-1.46 -5.43,-3.31 -7.5,-5.81 -4.37,0.47 -3.42,-1.95 -5.22,-4.41 -1.08,-0.95 -3.08,-0.2 -3.19,-2.3 -0.69,-1.94 -0.29,-3.97 0.91,-5.48 -1.13,-3.44 -4.24,-5.4 -7.25,-6.96 -2.59,-1.3 0.21,-3.74 1.9,-4.17 -1.15,-4.86 -6.38,-5.68 -10.5,-6.63 -1.66,-1.44 1.51,-4.7 -1.45,-5.85 -1.47,-2.96 -3.98,-0.6 -6.15,-0.03 -4.99,1.83 -10.54,1.94 -15.74,2.63 -0.77,-0.67 -2.77,-2.61 -3.03,-0.5 -0.96,2.08 -4.29,1.95 -5.15,-0.33 -1.46,-1.7 -1.05,-3.98 -3.62,-3.71 -2.87,-0.72 -2.28,-4.47 -1.51,-6.47 2.3,-1.83 -2.65,-2.89 -4.3,-2.43 -1.7,1.3 -2.92,3.72 -5.37,4.41 -1.61,-1.19 -1.85,2.9 -0.04,2.88 0.66,3.05 1.58,6.38 1.39,9.48 -1.36,2.21 -0.38,7.05 -3.72,7.01 -1.95,0.12 -2.86,4.45 -5,1.12 -2.19,-1.15 -2.98,-4.4 -0.24,-5.3 -0.32,-1.92 -3.58,-5.33 -4.44,-2.09 -2.92,1.68 -7.59,1.16 -8.96,-2.28 -0.97,-2.98 -4.83,-0.87 -7.1,-1.48 -2.57,0.83 -5.91,1.76 -7.83,3.43 -0.82,2.98 1.43,4.47 3.69,5.77 1.52,2.24 6.27,1.22 5.55,4.87 -1.22,3.47 -5.4,0.77 -7.88,0.59 -0.91,0.73 1.13,4.84 -1.63,4.69 -2.37,-0.99 -5.13,-1.74 -7.34,-2.66 -1.81,-3.33 -1.13,-7.07 -0.75,-10.66 -3.86,-0.79 -8.92,-2.08 -9.69,-6.56 -1.65,1.27 -4.99,0.71 -4.64,-1.87 -0.45,-2.76 -1.64,-5.72 -3.61,-7.69 -2.74,-0.99 -5.53,-1.93 -6.83,-4.79 -1.25,-3.09 -5.32,-0.4 -7.74,-0.8z m46.75,26.38c-0.1,0.03 0.04,0.06 0,0z","name":"Bayern"},"bw":{"path":"m233,542.31c-1,3.03 -3.8,0.55 -6.25,1.41 -1.85,0.3 -6.11,-0.67 -4.1,2.56 0.5,1.4 3.45,5.79 2.97,1.91 0.74,-2.88 3.54,0.29 3.5,2.12 -0.05,2.12 0.13,4.28 -0.67,5.91 -2.21,2.88 -6.93,-2.7 -8.36,1.34 0.26,1.89 -0.96,3.78 -2.66,5.38 -2.87,1.47 -6.48,1.36 -9.56,0.91 -0.14,1.71 -1.09,2.75 0.88,3.56 2.16,2.43 -1.84,4.61 -2.82,1.5 -2.24,-0.41 -4.9,0.87 -7.01,1.83 -1.86,1.31 -3.21,3.14 -1.07,4.79 -2.58,2.03 -4.76,4.93 -7.53,6.53 -2.28,0.77 -4.85,-1.67 -3.07,-3.7 0.44,-3.45 3.31,-3.76 5.49,-5.64 2.15,-2.77 -2.95,-1.33 -4.33,-2.33 -3.36,-0.68 -8.66,-1.27 -8.78,-5.66 -0.37,-2.27 -2.39,-6.18 0.16,-6.35 -1.56,0.22 -6.19,0.51 -5.66,2.03 1.02,1.01 1.63,3.91 1.34,5.81 -0.91,2.56 -4.61,4.01 -6.17,1.22 -1.23,-2.27 -2.8,-5.47 -5.58,-5.87 -1.35,0.5 -2.27,2.96 -1.13,4.34 0.64,2.82 1.72,5.99 1.41,8.75 -1.19,1.47 2.13,0.8 2.94,1.09 2.56,1.28 -0.68,4.01 0.44,6.03 0.58,2.78 -1.68,4.86 -3.44,6.5 -0.2,1.61 2.95,0.95 2.5,3.03 -0.5,1.7 -2.89,2.29 -3.8,3.97 -1.51,1 -4.09,2.21 -3,4.19 -0,4.19 -1.63,8.4 -2.57,12.44 -1.88,2.38 -4.07,4.74 -4.06,8 -0.94,3.32 -4.33,5.15 -7.25,6.25 -3.09,4.3 -5.58,9.02 -6.75,14.19 -2.02,2.94 -5.4,5.15 -8.91,5.69 -0.21,2.82 -1.4,5.14 -3.56,6.99 -1.36,2.17 -3.49,3.53 -5.66,4.61 -1.15,2.67 -3.64,5.13 -2.5,8.22 0.36,2.98 -0.28,5.69 -1.97,8.15 -1.95,4.34 -4.99,8.87 -3.01,13.76 0.98,2.33 -1.6,3.46 -3.29,4.06 -1.58,3.35 -1.03,7.85 -3.97,10.71 -3.45,3.81 -5.74,8.63 -5.57,13.85 -1.32,3.83 3.9,5.48 3.32,9.25 -1.3,3.08 -3.94,5.46 -4.57,8.93 -0.87,1.91 1.04,3.96 -0.54,5.81 -1.06,2.51 -2.87,5.19 -1.04,7.86 1.18,2.15 -0.92,4.15 -2.35,5.35 -0.31,3.89 3.1,6.22 5,9.16 2.34,1.03 6.63,0.35 6.5,3.84 -1.16,1.4 -4.38,2.08 -0.94,3.62 2.67,0.19 5.38,-1.24 7.85,-2.15 1.44,-1.71 2.81,-3.83 5.44,-3.09 2.67,-0.79 2.95,2.96 5.54,2.9 3.15,1.3 6.81,1.64 9.99,0.41 0.13,-3.3 4.53,-3.63 6.59,-5.48 2.38,-1.41 5.39,0.37 7.78,0.98 0.79,1.29 -0,3.08 2.19,3.78 3.61,0.25 7.37,1.32 10.72,-0.47 -3.18,-2.2 -0.41,-3.55 1.74,-5.09 1.44,-1.37 5.34,0.59 4.6,2.72 0.03,1.73 2.81,-2.43 2.91,-3.66 0.99,-2.17 -2.08,-3.31 -3.78,-2.38 -2.21,0.79 -3.16,2.58 -5.97,3.13 -1.88,-0.81 -4.32,-2.21 -5.31,-4.16 0.59,-3.61 2.99,-6.72 5.06,-9.63 1.63,-2.24 5.73,-0.38 6.44,-3.38 2.06,-2.35 5.55,0.44 4.49,3.47 2.07,0.67 0.21,-4.19 4.06,-1.25 1.57,1.2 4.32,3.45 2.25,5.23 0.1,2.76 1.41,4.58 4.22,5.01 1.74,-2.24 3.46,-0.92 5.76,1.59 2.1,2.97 5.8,0.78 7.96,-0.93 3.82,-2.7 8.65,-0.24 12.27,1.62 3.55,2.04 4.43,-1.99 2.13,-4.27 -0.59,-2.2 -2.12,-3.67 -4.12,-4.07 -2.4,-1.85 -6.01,-3.5 -6.96,-6.5 0.3,-2.1 3.03,-1.62 3.78,-0.16 3.5,2.46 7.48,4.47 10.66,7.31 -0.21,3.96 4.69,5.62 7.5,7.39 1.67,0.53 3.72,-1.14 5.59,-0.11 2.75,0.87 6.81,1.33 7.03,4.97 0.46,3.2 4.49,4.9 6.69,2.27 1.24,-1.5 4.61,-2.56 5.4,-0.7 4.17,1.33 6.15,-3.91 8.97,-5.72 3.32,-0.45 7.13,0.12 10.19,-0.66 1,-2.57 4.28,-2.37 6.22,-1.28 0.84,2.31 0.58,2.71 2.56,1.13 2.97,-0.39 2.03,-4.58 0.76,-6.39 -1.17,-2.02 -2,-5.8 -0.79,-7.3 3.32,-0.17 0.06,-2.21 -0,-3.93 -0.63,-3.04 -0.86,-6.31 0,-9.32 -2.23,-0.74 -2.32,-4.76 0.44,-4.66 -0.41,-2.68 2.08,-4.21 1.66,-6.88 -0.15,-2.82 0.59,-6.09 -1.94,-7.94 -2.26,-5.15 -1.96,-11.11 -3.49,-16.32 -1.93,-2.69 -4.53,-5.55 -4.67,-9 0.46,-2.92 3.93,-5.48 2.72,-8.47 0.1,-0.35 4.87,-3.47 6.42,-2.05 2,3.2 4.93,-0.95 6.82,-2.36 0.33,-1.38 1,-2.91 3.14,-2.96 3.03,1.76 2.98,-2.24 2.69,-4.25 -0.32,-3.5 -1.14,-6.78 -3.64,-9.37 -0.98,-1.42 0.15,-4.75 1.23,-5.16 3.02,1.48 6.11,1.47 9.25,0.41 2.37,-0.94 3.55,1.55 1.82,3.19 0.08,1.06 5.19,-1.87 2.3,-2.88 -0.25,-2.1 -0.85,-4.44 -3.47,-3.91 -1,-3.13 0.42,-4.65 1.54,-7.33 0.09,-4.38 1.32,-9.19 -0.13,-13.38 -2.03,-1.38 -1.82,-4.46 -4.4,-5.39 -2.47,-2.1 -5.26,-3.59 -8.29,-4.72 -0.45,-2.63 0.5,-4.11 -0.61,-6.97 -0.35,-3.23 -2.39,-5.85 -5.43,-6.81 -1.8,-1.05 -4.02,-2.25 -3.05,-4.75 -0.53,-2.57 0.99,-5.27 0.62,-7.5 -1.67,-2.84 -3.08,-6.33 -1.5,-9.56 2.72,0.17 4.05,-1.19 2,-3.69 -1.12,-2.08 -1.1,-4.65 -2.84,-6.37 -0.05,-1.52 1.05,-2.79 -0.28,-4.24 -1.33,-3.13 -3.46,0.38 -1.36,0.89 -1.36,2.26 -3.18,4.9 -6.23,4.2 -1.84,0.68 -5.99,-0.78 -4,-3.06 0.32,-2.43 0.8,-5.95 -0.91,-7.66 -1.91,-0.49 -2.69,-3.58 -3.13,-5.51 -1.12,-3.07 -1.07,-6.84 -4.03,-8.84 -3.37,0.71 -6.2,2.77 -9.34,3.81 -2.15,-0.26 -3.2,-3.12 -1.25,-4.19 -0.15,-1.71 1.98,-8.34 -1.11,-4.8 -1.56,1.02 -3.09,4.67 -5.17,2.44 -1.38,-0.64 -3.13,-1.84 -2.32,-3.58 -0.34,-0.5 -0.91,-0.09 -1.41,-0.13z m-57.69,212.03c0.26,4.67 5.28,-0.76 0,0z","name":"Baden-Württemberg"}}});
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.russia.js b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.russia.js new file mode 100644 index 0000000..1bce27f --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.russia.js @@ -0,0 +1,2 @@ +/** Add Russia Map Data Points */ +jQuery.fn.vectorMap('addMap','russia_en',{"width":959,"height":593,"pathes":{"da":{"path":"m34.939,403.74,2.6516,1.2627,3.6618,0.50507,1.7678-2.0203,2.1466,2.0203,2.3991-1.6415,0.25254-1.7678,1.6415-2.1466,3.0305,0.50508,3.7881-2.9042-0.50508-1.894-4.7982-0.50508,0.75762-3.1567-1.0102-0.63134,0.63135-2.2728-3.1567-2.7779,1.5152-0.50508,3.9143,0.88388,0-1.389-1.0102-1.2627,8.3338-0.25254,4.9245,5.4296,1.2627,1.894-0.37881,2.2728-5.3033-0.3788,0.50508,2.5254,1.5152,3.0304-1.0102,3.5355-2.3991,2.7779-1.2627,0.25254,4.5457,0.75761-5.5558,2.1466-0.50508,2.0203-0.75762,0.50508-3.0305,0.50507-0.25254,4.7982-1.2627,0.88388-1.1364,13.132-9.0914-0.12627-3.6618-2.2728-1.389-0.88388,0-11.617-3.283-5.9346,0.37881-2.9042,1.2627-0.37881z","name":"Republic of Dagestan"},"sa":{"path":"M671.25,126.75l-1.44,1.06-1.25,1.63s1.44,0.87,2.16,0.87c0.71,0,2.69-1.97,2.69-1.97l-2.16-1.59zm18.47,12.09c-0.18-0.01-0.4,0.02-0.63,0.07-1.78,0.35-4.81,1.93-4.81,1.93s-1.41,1.1-2.12,1.1c-0.72,0-2.35-0.38-2.35-0.38-0.71,0-2.5,1.25-2.5,1.25l-1.4,1.78s-1.1-0.51-1.1,0.38-0.35,1.96,0.72,2.5c1.07,0.53,1.61,1.06,2.5,1.06s3.22-0.72,3.22-0.72l1.97-0.87,1.97,1.06s0.51-0.9,1.4-1.44c0.9-0.53,3.4-2.31,3.75-3.03,0.36-0.71,0.72-3.22,0.72-3.22s-0.11-1.36-1.34-1.47zm-19.81,7.1c-0.15,0.01-0.29,0.05-0.44,0.09-1.25,0.36-2.85,0.19-3.56,0.19-0.72,0-0.91,0.19-0.91,0.19s-0.88,1.58-1.59,1.93c-0.72,0.36-1.99,0.74-3.07,0.57-1.07-0.18-3.75-1.25-3.75-1.25s-1.93-0.02-1.93,1.59,3.03,3.41,3.03,3.41l1.06,1.4s-2.51,0.73-3.41,0.38c-0.89-0.36-2.65-2.16-2.65-2.16l-3.22-0.72s-2.88,0.2-2.88,1.1c0,0.89-0.68,2.67-0.68,3.56s-0.9,3.04,0.53,3.94c1.43,0.89,1.79,3.03,1.97,3.75,0.17,0.71,0.7,1.77,2.84,2.31,2.14,0.53,4.29,0.53,5,1.06,0.71,0.54,1.77,1.07,2.84,0.53,1.08-0.53,1.82-2.65,1.82-2.65l2.12-1.97s1.61-1.44,2.5-2.16c0.89-0.71,2.7-0.54,4.13-1.44,1.42-0.89,2.31-3.75,2.31-3.75v-5l-0.38-4.43s-0.68-0.58-1.68-0.47zm106.25,5.62c-0.45,0.09-0.75,4.1-0.75,4.1l-7.32,1.65-3.28,0.63-4.53-6.06-7.84-0.13-0.38,0.87-5.68,1.66-1.76,2.13-6.06,6.31v2.78l-2.15,1.91-3.29,5.03-4.93-2.38-3.41-0.37-1.75,2h-4.56l-3.41,1.78-1.75-1.53,4.28-2.91-2.28-1.62-3.03-0.13-8.84,4.03,1.9,5.44-0.87,4.78-2.66,2.91-1.65-2.13,3.03-7.47-1.75-0.37-2.66,4.03-3.03,2.03-1-0.75,1-3.16,2.28-0.74,2.91-2.66-7.1,1.75-9.22,5.31-6.68,0.25,3.65,3.66-3.65,3.4-0.5,3.03,0.37,1.16,3.91-1.78-1,4.03,4.81,2.91-0.91,2.9-2-1.37-3.68,1,1.28,3.41,2.4-0.26-1.03,2.66-3.9-0.5-4.28-1.66-3.53,0.26-2.41,3.15-0.63,4.06h-6.46l-1.76-1.53-2.4-2-0.5,4.41,0.87,0.87-0.12,1.41,1.65,0.87-0.9,2.54,1.66,6.18-3.29-1.4-1,1.15-9.87-5.31v-4.94l-2.25,0.13-1.78,2.41-2-3.41,3.65-0.63-0.5-2.9-4.43-1.66,0.75-0.87,0.12-2.53-5.28-4.04-5.31-2.53-1,3.66-7.35,0.65-2.37-1.65-4.19,2.15v2.13l4.19,4.69-10.94,5.31-10.28-1.16,0.44-4.4-12.07,0.19-3.96,3.78h-2.85l-1.09,1.09,2.66,2.87h-2.13l-2.91-2.06,1.19-2.09-0.87-1.38-1.54-1.78,0.07,2.28-1.5,1.07-3.85-1.32s-2.9,3.53-2.84,3.78c0.06,0.26,2.66,3.29,2.66,3.29l-1.41,3.34,1.59,2.09,0.19,2.78,7.38,5.82-0.32,5.47,2.53,1.9,1.63,2.53-2.53,2.72-4.41,3.03-0.69,2.63-4.81,2.78,0.25,6.12-2.25,1.1-2.97-1.28-5.65,4.75-4.44,0.09,0.06,1.97,5.38,6.59,1.78,20.1-6.35,1.97,4.19,3.4-1.78,4.19v1.25l7.16,8.84-4.57,6.69,0.97,1.6-2.4,1.87,0.09,2.25,5.63,0.34,0.71,0.72,9.1,0.19,3.31,3.31-0.53,1.6-3.31,0.34,0.19,3.94,4.03-1.06,5.06,6.59-0.53,5.53,3.84,5.19-1.97,3.4,0.53,2.13,7.69,6.53v4.37l-3.75,6.44,0.28,10.78,3.85,4.13,3.37-3.94,3.75,0.09,1.88-1.34,2.68-0.62,2.41-2.07,3.56,3.85,0.38,2.31,4-5.06,0.09-4.13,5.38-2.75-0.29-6.25,2.32-4.12,3.84-1.5,4.91,1.06,6.15,4.91,0.57,3.84,1.31,0.87,4.03-1.4,2.5-2.06,2.69,1.06,0.87,4.47,3.13,4.56,2.15,1.78v3.03l2.32,1.35,0.71,4.71,3.94,0.19,0.97,1.35,1.53,4.09,8.38-0.25,3.31-1.97,5.53,1.16,3.56,1.97,11-0.72,5.54,3.75,2.21,0.53,5.19-2.6h2.6l3.03,2.26,2.78-0.19,3.22-3.94,5.68-0.06,2.5-1.97h7.88l0.19-3.75,10.68-5.09,0.82-3.04-4.28-4.12,2.31-1.69,0.62-4.03-1.34-1.69-2.41,0.38-2.03-1.44,2.75-4.03-2.84-1.6,0.25-1.87,1.53-1.97-1.44-1.44-3.47-1.15-0.53-1.6,3.38-1.43-1.88-0.91-0.19-5.25-0.87-0.62-0.19-1.88,2.78-1.25-1.62-1.25v-2.94l5.47-1.97,3.12,0.16,0.25-1.78,6.53,0.09v-2.75l-1.25-1.53,1.16-1.25,3.47-0.62,3.31-2.22,1.34-6,5-0.44,0.1-2.06s-5.29-4.9-5.47-5.25c-0.18-0.36-0.88-3.94-0.88-3.94l-3.56-2.59v-5.97l2.94-7.16-1.69-9.19,0.78-3.12,13.5,0.72,0.25-5.28,5.19-1.16,3.47,1.87,0.81-2.31-2.41-3.69,1.69-0.62,0.19-2.75-7.16-8.5,0.1-4.37-3.13-1.5-0.09-4.04-1.78-1.15,1.09-2.13,3.81-0.47,1.35-1.78,4.28,0.38,0.09-2.44-3.37-1.5,0.15-3.31,5.47-0.53v-3.57l5.63,0.44,5.62-8.03,0.44-2.5-6.06-6.06-0.19-1.88,2.31-3.4-0.97-1.79-3.31,0.19-1.5-2.34,4.72-1.41-0.09-1.53-2.07-0.97-0.25-1.34,2.13-3.75,5.72-1.97-0.78-3.56,5.15,0.68-0.62-5.43,1.34,0.28,0.19-3.59-2.69-0.63-2.94-4.53-7.59-0.28-4.19-1.88,0.72-3.47h-3.12l-0.19-1.62,8.12-10.44,1.07-7.84s-9.81-5.72-10.25-5.63zm-135.1,8.56c-0.12,0.03-0.23,0.08-0.34,0.19-0.89,0.9-1.07,1.79-0.53,2.5,0.53,0.72,1.06,1.63,1.78,2.35,0.71,0.71,2.31,1.25,2.31,1.25s0.71-1.1,0.53-1.82c-0.18-0.71-1.97-2.84-1.97-2.84s-0.94-1.78-1.78-1.63zm28.94,7.35l-2.31,0.34s-1.07,0.91-1.25,1.63c-0.18,0.71-0.9,1.24,0,1.78,0.89,0.53,3.75,1.25,3.75,1.25s1.6-0.02,1.78,0.87c0.18,0.9,0.18,1.8,0,2.69s-0.53,1.78-0.53,1.78l0.72,0.72,1.93-0.53s0.74-0.72,1.82-0.72h2.65s1.44-0.53,1.97-1.25c0.54-0.71,1.97-1.25,1.97-1.25h2.69s1.41-0.52,0.87-1.59c-0.53-1.07-1.76-1.62-2.65-2.16-0.9-0.53-3.22-2.31-3.22-2.31h-2.5l-3.6,0.34-2.84,0.38-1.25-1.97zm-17,10.15c-0.12,0-0.22,0.01-0.31,0.04-0.72,0.17-1.44,1.4-1.44,1.4s0.37,1.78,2.16,1.78c1.78,0,2.3,0.55,2.65-0.34,0.36-0.89-0.87-2.31-0.87-2.31s-1.37-0.55-2.19-0.57z","name":"Sakha Republic"},"so":{"path":"m45.583,387.43-2.2728,2.6516-4.1669-2.6516-2.0203,1.1364-0.37881,5.8084-1.1364,1.389-2.2728-0.12627-5.9346-2.6516-3.0305-3.283,0.12627-4.9245,4.672,0.75761,0.37881-0.88388,2.5254-0.12627,3.283,1.5152,4.0406-1.894s-0.12627-3.5355,0.75761-2.7779c0.88388,0.75762,1.389,1.2627,1.389,1.2627l0.25254,3.5355z","name":"Republic of North Ossetia–Alania"},"kb":{"path":"m20.982,375.86c0.26786,0.35715,2.5893,4.7322,2.5893,4.7322l0.98214,3.9286,4.6429,1.1607,2.8571-1.0714,3.2143,1.5179,4.375-1.875,0.26786-3.125-5.9821-2.3214-1.875-5.0893-2.2321-1.1607-4.375,0.71429z","name":"Kabardino-Balkar Republic"},"kc":{"path":"m13.482,361.39,2.2321,8.4821,5.0893,6.25,4.375-2.6786,5.3571-0.89286,0.08929-3.3928,3.75-1.0714-6.6964-7.2321-2.2321,2.4107-2.8571,0.26786-1.6071-4.5536,0.44643-2.1429z","name":"Karachay–Cherkess Republic"},"st":{"path":"m33.929,367.73-3.4821,0.98215,0.17857,3.75,1.5179,1.25,1.7857,4.6428,6.5179,3.0357,1.3393,1.3393,0.08929,3.0357,3.8393,1.7857,1.6071,2.5893,3.2143,0.625,0.71429-1.4286-2.8571-3.125,1.5179-0.53572,3.5714,0.80357,0.17857-1.1607-0.98214-1.3393,7.7679-0.0893,1.6964-1.5179,0.26786-3.5714-5.2679-7.5-0.17857-9.4643-3.4821-6.0714-4.9107-0.98214-1.5179-2.7679-5.0893-5.7143-0.98214-0.625-1.5179,1.3393-2.7679-2.0536-1.4286,0.80357-0.80357,1.0714-0.08929,1.6071,0.35714,1.3393,0.35714,1.1607-0.71429,1.6071-0.98214,1.4286-1.9643,2.2322-1.875,1.0714-0.71428,0.98214-0.98214,2.3214z","name":"Stavropol Krai"},"ks":{"path":"m21.607,356.48-0.08929,2.0536,0.98214,3.8393,0.35714,0.80357,2.2321,0.0893,3.75-4.5536,1.4286-1.9643,1.9643-1.0714,2.6786-4.0178-0.26786-3.3929,0.17857-1.6964,0.89286-1.5179,1.3393,0,1.7857,1.5179,1.3393,0,2.5893-3.0357,0.08929-1.9643-0.89286-0.98214-2.2321-1.3393,0.17857-2.9464,2.8571-3.125,0.08929-1.4286-2.7679-2.9464-3.75-0.71428-0.80357-0.89286,1.6071-1.25,0.17857-2.4107-2.1429-1.6072-2.5893-0.80357-1.6071-1.6964-1.25-0.98214-0.89286-0.0893-1.3393,2.2322-0.625,0.98214,1.0714,1.4286-0.35714,1.5179-0.80357,0.625-2.7679-0.26786-0.89286-0.89286-1.9643,0.0893-1.875,0.71429-3.0357,1.7857-1.6964,0-1.3393-1.4286-1.6071-0.625-1.1607-1.4286,0-2.6786-2.2321-0.26786-1.25,0.625-0.35714,2.9464-0.089286,13.214,0.71429,5.8929,0.98214,3.6607-0.089286,2.3214-0.625,2.7679-0.089286,2.4107,0.17857,2.0536,1.5179,0.89285,0.71429,0.625,1.6071,1.5179,0.89286,1.0714,0.89286,0.89286l7.947-4.27-0.804-1.25-0.357-1.43-5.089,2.68h-1.875l-1.25-1.875,0.35714-3.5714,6.25-1.4286,2.7679-2.3214,0.71429-2.5893-1.3393-0.80357-1.9643,0.44642-1.1607-1.5178-0.71429-2.6786-1.3393-1.7857-0.17857-1.25,0.08929-1.1607,1.3393-0.80357,1.3393,0.625,1.0714,1.3393,1.0714,1.9643,1.3393,1.7857,2.3214,1.3393,1.6964,0.89285s0.625,0.26786,0.71429,0.625c0.08929,0.35715,0.89286,2.6786,0.89286,2.6786v4.0178l-0.08929,1.3393-1.0714,1.0714-1.875,1.5178-1.6071,1.4286z","name":"Krasnodar Krai"},"ro":{"path":"m37.5,323.45,2.0536,0.98214,1.4286-0.17857,0.625-0.89286-0.44643-1.1607-1.25-0.89286-1.9643-1.3393-0.89286-1.1607-0.35714-0.71428,1.0714-1.4286l2.231-1.08,1.6071-0.26786,1.0714,0.35714,1.4286,1.3393,1.5179,0.35714,1.6964-0.89286,0.89286,0.44643,1.072,1.06,1.339,1.79,0.268,1.33,1.607-0.08,1.3393-0.80358,1.6964-0.0893,1.3393-0.0893,0.35714-1.5178,0.53571-1.4286,1.25-1.6071,1.3393-1.0714,1.6964,1.0714,0.71429,0.35714,0.89286-1.875,0.44643-0.71428,2.6786-0.26786,1.875-1.6964,2.3214-0.17857,2.0536,1.1607,2.1429,1.25,0.98214,0.53571,3.9286,0.0893h2.2321l1.5179-0.98215h1.3393l0.71429,0.625,0.26786,1.6964-0.08929,1.9643v1.875l-0.08929,1.0714-0.981,1.34-1.25,0.98214-1.25,0.71429-0.80357,0.35714-0.35714,1.25-0.44643,1.6072-0.08929,1.4286-0.44643,1.1607-0.625,1.4286-1.4286,1.5179-1.6964,0.53571h-3.125l-1.608-0.36-1.518,0.53-0.625,1.97-0.982,0.62-0.80357,0.53572,0.17857,0.89285,1.3393,1.4286,0.71429,1.4286-1.1607,1.4286-1.3393,0.89285-0.80357,1.7857-0.08929,0.80357,0.98214,0.53571,1.1607,1.1607,0.625,1.0714,0.80357,0.80357,0.71429,1.3393v1.0714l-0.71429,0.80357,0.53572,0.625,1.4286,0.35715,0.625-0.53572,0.71429-0.0893,0.35714,0.98214v1.4286l-1.3393,1.3393-2.1429,1.0714-2.0536,1.1607-3.3929,0.0893-0.80357,0.80357-1.3393,0.80357-1.696,0.46-1.429-0.71-1.696-0.71-0.893-0.9-0.178-2.23-0.179-1.52-1.696-2.14-1.1607-0.80357-0.17857-1.25-0.80357-0.89286-1.7857-0.0893h-2.7679l-2.8571-0.0893-1.3393-0.17857-1.6071-1.7857-0.98214-0.71429v-0.89286l1.3393-1.5178v-1.5179l-0.625-1.25-1.875-1.4286-0.71429-0.625,0.26786-2.2322,2.7679-3.2143,0.08928-1.6071-1.9643-2.2322-1.3393-0.89285-2.411-0.55-1.0714-0.35714-0.08929-0.71429,1.0714-1.0714,0.26786-1.1607z","name":"Rostov Oblast"},"kk":{"path":"m44.554,348.71,0.98214,1.6071,1.1607,1.0714,1.1607,1.6964,0.80357,1.1607,1.1607,0.71429,2.5893,0.44643,1.3393,0.625,0.98214,1.6071s0.98214,1.7857,1.25,2.2321c0.26786,0.44643,0.98214,2.4107,0.98214,2.4107l0.17857,4.9107v3.2143l0.89286,2.2321,3.3036,4.1964,1.25,2.0536-0.17857,2.5893-1.4286,1.875,0.89286,1.3393,4.375,4.7321,0.53571,1.25,0.35714,0.98215,0.89286,0.53571,1.4286,0.0893,1.6071-0.26786,1.7857-0.53572,2.2321-0.89285,2.3214-0.26786,0.713-0.71,0.625-2.15-0.268-1.16-2.232-1.34-0.982-0.71,0.08928-1.3393,1.0714-0.625,1.7857,0.0893,1.4286-1.25-0.53572-0.71428-0.71428-2.0536-0.268-1.7-0.179-1.16h1.0714l1.6964,1.25,1.7857,0.80357,2.6786-0.17857h0.89286l0.53571-1.1607-0.17857-2.4107-0.08929-3.8393v-6.3393-0.98214l-0.08929-2.2321,2.9464-2.8572,0.17857-1.3393-1.4286-0.625v-3.2143l-1.0714-1.1607-1.1607-0.35715-2.5-0.17857-0.625-1.4286-0.17857-0.80357-1.25,0.26786-0.625,1.0714h-1.3393l-1.25-0.0893-1.071-0.98-0.804-0.71-2.321-0.27-0.98214,0.35715-0.71429,0.80357-0.71429,0.35714-0.26786,1.1607-0.35714,0.80357,0.35714,0.625,1.0714,0.35714,1.0714-0.44643,0.89286,0.35714,0.08929,0.98215-0.44643,1.5178-5,3.125-3.3929,0.26786-2.3214,1.3393-1.5179,0.53571-3.8393-1.7857-0.53571-0.35715-0.08929-3.3928-0.71429-1.4286-2.3214-2.2322-0.625-1.25-1.9643-0.80357h-3.5714z","name":"Republic of Kalmykia"},"as":{"path":"m86.873,350.94,1.6415-1.389,1.1364-0.63135,1.7678,1.2627,2.0203,0.63135,2.2728,0.50508,0.88388,1.0102,2.1466,0.88388,0.75761,1.1364,0.63134,1.1364,0,1.389,0,0.88389-1.5152,0.3788-1.1364,1.389-0.12627,1.0102,0.63134,1.389,1.0102,1.1364-0.37881,2.1466-0.75762,1.0102-1.7678,0.88389-0.25254,1.1364,0.50508,0.88388,1.7678,1.1364,2.2728,1.5152,1.389,1.6415,0.63134,1.0102,0,1.5152-1.0102,1.1364-0.25254,2.0203-1.0102,1.0102,0,2.2728,0,2.7779-0.75761,0.3788-1.7678-0.3788-1.894-0.75762-0.63134,0.37881-0.37881,2.1466,1.6415,2.1466,1.1364,1.2627,0.88388,1.0102,0.50508,0.63134,0.12627,1.2627-3.9143,0.25253-3.0305,0.63135-2.1466,0-1.894-1.2627-2.0203-1.5152-5.4296,0-1.0102-0.37881-1.1364-1.1364,0.37881-2.9042-0.88388-1.0102-2.2728-1.6415,0-1.6415,1.0102-0.3788,1.5152,0,1.389-1.0102-0.63134-1.389-0.75761-4.0406,0.63134-0.3788,1.2627,0.75761,2.9042,1.389,2.0203-0.25254,1.2627-0.12627,0.50508-1.6415-0.25254-5.4296,0.12627-5.0508-0.25254-4.2931,2.1466-2.2728,1.0102-1.1364,0.12627-1.389-1.2627-0.50508-0.25254-2.1466z","name":"Astrakhan Oblast"},"ad":{"path":"m21.786,356.21,2.4107-1.4286,2.5-2.6786,0.35714-2.1428-0.26786-3.9286-1.0714-2.7679-2.9464-0.98214l-2.412-1.78-2.232-3.75-1.5179-1.1607-1.3393,0.71428-0.17857,2.1429,1.6071,1.875,0.80357,2.5893,1.1607,1.6964,1.6071-0.35714,1.5179,0.44643-0.44643,2.9464-2.9464,2.3214-3.394,0.71-2.8571,0.35715-0.17857,3.8393,1.0714,1.7857h1.7857l5.3571-2.9464,0.35714,1.7857z","name":"Republic of Adygea"},"vl":{"path":"m85.893,313.18,1.5179-0.98214,1.875-0.0893,1.1607-1.0714,1.1607-1.6072,0-1.25,1.1607-0.98214,1.9643,1.25,2.5,1.9643,3.3036,2.1428,3.9286,1.5179,1.4286,1.5179,0.625,2.1428,0.44643,1.4286,2.8571,0.35714,0.44643,1.4286,2.5893,0.80357,1.7857,1.7857,1.6964,1.6964,0.17857,2.2322-1.5179,1.25-1.6071,2.2321-1.4286,1.3393-0.26786,1.25,0.89286,2.2321,2.9464,1.875,1.6964,1.875,1.7857,1.1607,1.25,3.3036,1.0714,1.875,0.0893,1.25-0.71428,0.53572-1.3393,0.44643-0.71429,0.53571-2.8571,0.26786-4.6429-0.0893-1.6964,0.26786-0.71429,1.6071,0,2.8572-0.17857,1.1607-1.6964,1.25-1.3393,0.98214-4.0178-0.0893-1.0714-0.0893-1.3393-3.0357-1.4286-1.0714-1.875-1.0714-1.0714-0.625l-2.256-0.46-2.054-1.25-1.071-0.18-1.1607,0.625-0.98214,0.71429-1.25,0.26785-2.1429-0.0893-0.89286-1.1607-0.35714-1.25-1.4286,0.26786-0.89286,1.1607h-1.25l-1.875-0.71428-1.25-0.80357-1.3393-0.35715-1.4286,0.17858-1.4286,1.25h-0.89286l-1.4286-2.5-1.25-1.4286-1.0714-0.71428,0.448-1.44,0.893-1.52,1.607-1.43,0.179-0.89-1.6964-2.1429-0.44643-1.0714,1.4286-0.80358,0.625-1.875,0.625-0.53571,1.25-0.35714,1.6071,0.0893h3.0357l1.7857-0.625,1.9643-2.5893,0.89286-4.0179,0.625-1.4286,2.8571-2.0536,1.1607-1.6964,0.35714-3.3036v-2.2322z","name":"Volgograd Oblast"},"vn":{"path":"m70.089,310.77,0-6.0714,0.08929-1.1607,3.75-3.2143,2.5-3.6607,1.3393-1.4286,0.35714-1.875,2.4107-0.71428,0.35714-2.5893,0.625-1.7857,1.0714-0.35714,0.625-2.0536,1.3393-1.7857,1.1607-1.0714,0.98214-0.53571,0.89286,1.1607,0.44643,0,0.71429-1.0714,0.53571-0.71428,1.1607-0.17857,0.89286,0.89285,1.25,1.1607,1.4286,1.4286,1.1607,1.5179,0.80357,0.89285-0.26786,2.1429,0,1.6071,1.875,1.0714,2.3214,1.3393,0.80357,1.3393-0.0893,1.7857-0.89285,1.5178-0.44643,0.98215,1.5179,1.25,1.875,1.7857,1.9643,2.2321,1.3393,1.6964,1.1607,1.9643-0.26786,2.3214,0,2.0536-2.1429,1.0714-0.71428,0.17857-4.2857-1.875-2.6786-1.7857-2.1429-1.4286-1.6964-1.1607-0.53571-0.17857-0.71429,0.80357-0.44643,1.25-1.4286,1.9643-1.6964,0.44643-2.8571,0.80357-3.5714,1.1607-3.2143,0.0893-2.5-0.17857-2.3214-1.25-2.3214-1.0714z","name":"Voronezh Oblast"},"bl":{"path":"m63.304,272.29-5.4464,3.3036,0.08928,2.6786,1.6964,1.875,0.08929,3.125,0.44643,1.6964,2.8571,1.6071,2.8571,0.44643l1.608,2.23-2.5,3.3036-0.35714,2.1429,1.0714,1.6071,2.3214,1.5179,0.17857,2.9464,1.1607,1.5179,0.71428,0.89285,4.7321-4.375,3.75-5.4464,2.0536-0.89285,0.80357-4.1072,1.0714-0.89285,0.53571-1.3393-2.5-2.8571-3.5714-4.1071-2.7679-0.26786-2.9464-1.1607-2.6786-1.6964-2.5893-1.6072-1.9643-1.6071z","name":"Belgorod Oblast"},"ky":{"path":"m63.482,271.84,0-4.6429l-0.357-1.61-1.786-1.97-0.714-1.07,1.3393-1.0714,3.75-1.3393,2.7679-1.3393,2.6786,0.0893,0.53571,1.0714,1.25-0.0893,1.7857-1.1607h0.80357l0.98214,0.44643,1.4286,1.6071,0.53571,0.80357,0.08929,1.6964,1.0714,0.89286,1.0714,0.71428h0.89286l1.0714,1.25,0.17857,3.2143v2.4107l-0.89286,0.98214v1.5179,1.1607l1.0714,1.25,1.1607,0.98214,0.89286,0.17857,1.5179,0.53571,1.0714,1.6072,1.6071,1.5178-0.71429,1.1607-0.80357,0.89286-0.89286-0.80358-1.9643,1.25-1.4286,1.1607-0.53571,0.80357-3.4821-4.1071-2.2321-2.3214-0.98214-0.53572-3.3036-0.625-2.8571-1.5178-3.6607-2.1429-2.4107-1.9643z","name":"Kursk Oblast"},"or":{"path":"m74.732,258.27,1.0714-1.875,2.2321-0.26786,0.89286-1.6071,0.89286-0.53572,1.9643,0.89286,1.6964-0.0893,1.6071-0.71429,1.0714-1.5179,0.89286-0.53571,0.98214,0.17857,1.3393,0.98214,1.9643,0.89286,1.1607,0.89286,0.35714,0.89285,0.71429,1.3393,0.17857,2.0536,0,3.6607,0.98214,1.7857,1.4286,1.875,0.80357,1.25,0.71429,1.7857-0.26786,1.5179-3.9286,1.875-1.9643,0.98214-1.0714,2.1429-1.875,1.0714-1.875,1.0714-2.4107-0.89286-1.9643-1.6071-0.44643-1.6964,0.44643-1.9643,0.44643-0.89285,0.08928-4.4643-0.89286-1.6964-1.7857-0.53571-1.7857-1.4286-0.08929-1.6072-1.3393-1.5178-1.6071-1.6964z","name":"Oryol Oblast"},"lp":{"path":"m86.875,278.45,1.5179,1.875,1.0714,0.89286,1.1607,0.71428,1.1607,1.0714,2.5,2.2321,1.25,1.5179,0.625,1.4286-0.44643,2.5893,0.53572,0.625,2.5,1.3393,1.875,1.7857,1.0714-0.17857,1.0714-0.625,0.44643-0.80357,0.0893-5.8036,0.35714-0.71428,1.4286-0.80357,2.3214-0.17857,2.0536-1.1607,1.3393-0.44643,0.17857-1.6964,0.625-1.3393,1.25-1.5179-0.80357-1.1607-2.6786-0.98215-0.53571-0.53571-0.17858-0.71429,1.0714-1.3393,0-1.6071-2.1428-0.35715-1.0714,0.44643-1.6072,0.80357-0.98214,0.89286-1.1607,0.625-1.4286,0.0893-1.3393-1.5179-1.6964-1.6964-0.80357-0.98214-2.4107,0.89285-3.125,1.6964-1.1607,1.6072-1.6071,1.4286z","name":"Lipetsk Oblast"},"tl":{"path":"m93.482,256.3,3.2143-2.0536,0.98214-0.17857,1.6071,0.80357,0.98215-0.80357,0.71428-1.0714,3.125,0,1.6072,0.625,2.0536,0.35714,1.4286,0.80358,2.4107,0.35714,1.4286,0.71428,0.53572,1.0714,0.98214,1.0714,1.25,1.4286,0.71429,1.6072-0.35715,1.6964-0.98214,1.1607-0.71428,1.6964-1.3393,1.9643-1.6964,2.0536-1.0714,1.875-0.71428,0.98215-0.53572,0.35714-1.7857,0-2.5,0.89286-1.5179,1.0714-1.3393,0.26785-2.0536-1.3393-2.0536-2.5893-0.26786-2.0536-0.53571-1.4286-1.6071-2.5l-1.413-2.14-0.179-2.23z","name":"Tula Oblast"},"bn":{"path":"m67.679,258.62,0.26786-1.7857,2.3214-1.5179,0.44643-1.1607,0-1.4286-1.6071-1.9643-1.7857-2.1429-1.6964-1.9643-2.3214-1.875-1.5179-0.89286-1.6964-0.26786-0.89286-1.1607,0.17857-2.3214,1.3393-1.6071,3.125-2.1429,2.6786-1.875,0.89286-1.7857,0.98214-0.71428,1.6964,0.26786,0.625,1.25,0.625,1.5178,1.0714,2.2322,1.1607,0.80357,5.8929,0.26785,2.1429-0.35714,1.4286,0.53572,3.125,0.89285,2.3214,0,0.71429,1.9643,0,2.2321-0.17857,1.1607-0.98214,1.5178-0.71429,0.53572-0.26786,1.4286,0.26786,1.5179,0,1.25-0.80357,1.4286-1.4286,1.5178-1.7857,0.71429-1.6964,0.17857-1.7857-0.71428-1.4286,0.71428-0.26786,0.89286-2.4107,0.80357-1.0714,1.4286-1.3393,1.25-1.4286,0.17857-1.4286-0.71428z","name":"Bryansk Oblast"},"kj":{"path":"m89.196,239.61,1.6071-1.25,1.6071-1.3393l1.161-0.27,1.429,0.63,0.80357,1.4286,1.0714,1.25,1.7857,0.80357,1.7857,0.35715,3.125,0.0893,1.875-0.0893,1.6071-1.0714,2.4107-0.0893,1.4286,0.44643,0.98214,2.0536,0.26786,1.4286,1.25,0.625,1.6071,0.98215,0.98214,0.80357,0.53572,1.25-0.53572,2.0536-1.0714,1.7857-1.4286,1.9643-1.1607,1.25-0.89286,0.44643-3.75-1.25-2.6786-1.0714-2.6786,0.0893-1.875,0.44642-1.0714,1.25-1.5179-0.44642-1.0714,0.0893-1.0714,0.80357-2.0536,1.0714-0.89286-0.89286-1.0714-0.80357-1.9643-1.25-1.5179-0.89285-0.89286-0.44643v-1.0714-2.4107l-0.08929-0.625,1.1607-1.6964,1.0714-1.875v-1.7857l-0.26786-1.6071z","name":"Kaluga Oblast"},"sm":{"path":"M79.375,237.55,80,235.95,80.179,234.52,79.732,233l-0.08928-1.4286,1.5179-1.3393,0.71429-1.6071,0.08929-3.125,0.35714-1.875,2.4107-2.5,2.5-1.9643,1.875-1.7857s1.875-1.3393,2.2321-1.5179c0.35714-0.17857,2.5-1.5178,2.5-1.5178l2.5,0.0893,3.0357,3.4822,1.875,3.4821,2.5,3.6607,1.4286,0.89286,2.7679,0.53571h2.0536l0.80357,0.71429,1.1607,1.875,1.1607,1.3393,1.25,1.6071,1.0714,1.4286,0.17857,1.3393-0.98214,1.25-1.875,0.89285-1.875,0.53572-0.89286,1.25-0.44643,0.89285-1.875,0.44643-1.7857,0.625-1.6072,0.35715h-3.0357l-3.75-0.80358-1.7857-1.7857-1.4286-1.3393-1.1607-0.26785-1.1607,0.71428-2.2321,1.5179-1.1607,0.44643-1.7857-0.44643-4.1071-0.98214-2.4107-0.35715z","name":"Smolensk Oblast"},"mc":{"path":"m116.07,234.16,3.5714,0.26785,2.3214-0.89285,1.4286-0.44643,0.53571,0.625,0.0893,1.7857,0,1.1607-0.17857,1.3393,1.5178,0.89286,2.9464,0.44643,1.7857,0.89285,2.0536,0.89286,2.7678,0.89286,1.7857,0.26786,1.25,0.53571,0.26786,1.6071-0.0893,1.5179-0.44643,1.6964-1.5179,0.625-2.1428,1.1607-1.6072,1.3393-0.0893,1.25-0.625,1.7857-1.1607,1.5179-0.35714,1.6071,0.17857,1.6072,0.0893,0.89285,1.1607,1.0714,1.0714,0.625,1.1607-1.0714,0.625,0.44643,0,1.5179-0.0893,3.2143-0.44643,1.1607-1.3393-0.44643-1.875-0.17857-1.6072,0.17857-0.80357,0.89286-2.0536,0.0893-1.6071-0.35714-1.25-0.71429-1.0714-1.1607-1.6071-0.625-1.6964,0-0.44643,0.80357-0.17857,1.1607-1.0714,0.53571-1.4286,0.0893-0.80357-0.80358-0.17858-0.625,1.1607-2.4107,0.26786-1.9643-0.53572-1.6964-1.1607-1.5179-1.1607-1.5179-1.0714-0.89286,0.625-1.25,2.5-2.9464,1.1607-2.6786-0.71429-1.7857-1.6071-1.6071-1.6071-0.98215-0.53572-0.35714-0.625-1.875-0.80357-1.25-0.80357-0.80357,0.625-1.5179,2.5893-1.3393z","name":"Moscow Oblast"},"rz":{"path":"m114.55,265.59-1.9643,2.6786-2.1429,3.125-0.625,2.7679-0.80357,1.7857,0.17857,0.80357,1.6964,0.71429,1.9643,1.3393,0.44643,1.5179-0.26786,0.89286,1.4286,1.1607,1.9643,0,1.1607,0.71429,0.0893,1.875,0.44643,1.1607,1.25,0.44643,1.5179-0.625,1.9643,0,1.5179,0.98214,0.625,1.7857,1.0714,1.1607,2.6786-0.17857,3.125,0,2.9464-2.0536,3.0357-2.9464,1.5179-2.2321,1.0714-1.7857-0.98214-2.2321-0.53572-3.125-2.0536-2.0536-1.25-1.6964-0.44643-2.8571-0.53571-1.6072-0.35715-0.98214-2.1428-0.35714-3.4822,0.26786-0.625,0.80357-2.1428-0.17857-1.875-0.71429-1.875-1.0714-1.9643-0.89286-1.0714,0.35715-0.80357,1.4286-1.4286,0.89286-1.6071-0.44643z","name":"Ryazan Oblast"},"tb":{"path":"m112.77,279.43-1.6964,2.1429-0.35714,1.7857-0.80358,0.89286-2.6786,0.98214-1.875,0.44643-1.5178,0.71429-0.71429,1.4286,0,2.1429,0.26786,2.3214-0.71429,1.875-1.5179,0.53571-0.44642,1.4286-0.44643,1.6964-0.625,1.1607,0.08928,0.625,2.3214,2.1429,2.2321,2.1429,1.6072,2.2321,1.4286,2.0536,0.98214,0,2.1429,0,1.9643-1.25,2.5-1.25,1.6964-1.0714,4.0179-0.26785,1.0714-0.98215v-3.6607c0-0.35714,0.0893-2.3214,0.0893-2.3214l1.5179-1.1607s0.71429-0.71429,0.80357-1.0714c0.0893-0.35714-0.26785-4.6429-0.26785-4.6429l1.4286-1.0714-0.80357-2.1428-1.7857-1.4286-2.3214,0.26786-0.89285,0.625-1.1607-0.80357-0.89286-1.3393v-1.3393l-1.875-0.80357h-1.3393l-0.89286-1.0714-0.26786-1.3393z","name":"Tambov Oblast"},"kn":{"path":"m44.107,152.55,0,2.2322,0.53571,2.5,2.0536,5.1786,1.4286,3.4821,1.9643,3.6607,2.5,1.0714,3.75-0.44642,1.9643-1.3393,0.625-1.7857-0.44643-4.2857-0.89286-2.8571-1.5179-1.6071-2.4107-0.53572-0.98214-0.71428,0-3.0357-0.80357-1.4286-1.6964-1.6071-1.6071-0.26786-0.35714,1.25-0.625,1.3393-0.625,0.89285-1.4286-0.35714z","name":"Kaliningrad Oblast"},"ps":{"path":"m95.268,213.98,0.35714-2.1428-0.26786-2.1429-1.4286-1.875-1.3393-1.4286-0.08929-1.6964,0.98214-0.71429,0.17857-1.6964-0.89286-0.98215-1.25-1.875,0-4.1964,1.5179-0.89285,3.75-2.2322,0.80357-2.4107,0.53572-1.7857,1.875-1.25,2.4107-0.0893,1.3393-1.6071,0.98214-1.6964s1.25-0.625,1.6072-0.80357c0.35714-0.17857,2.8571-0.71429,2.8571-0.71429l1.5179-0.0893,1.0714,0.53571-0.625,1.5179-0.71428,0.89285-0.17857,0.98215,1.6071,0.26785,1.25-1.7857,0.98214-2.0536,1.1607-1.5179,1.6071-0.71428h1.6071l1.5179-1.5179,1.1607-0.625h1.4286l0.98214,0.98214,0.625,1.5179,0.98214,1.6071-0.26786,1.6964-0.89285,0.98214-0.35715,1.3393-0.80357,1.6071-0.17857,1.1607h-1.4286-0.80357l-0.71429-0.53572-0.80357,0.53572-0.625,0.80357-0.53571,1.5178-0.53572,2.1429-0.0893,2.5-0.35715,1.875-1.1607,1.25-1.3393,0.98214h-1.7857l-1.5179,1.3393-0.53571,1.7857-1.3393,0.53572-0.44643,1.0714-0.17857,1.4286-1.7857,0.89286-1.7857,0.80357-0.625,1.6964,0.625,1.5178,0.625,0.625-0.26785,1.4286s-0.0893,0.44643-0.44643,0.80358c-0.35714,0.35714-1.1607,1.3393-1.1607,1.3393l-1.4286,0.80357-2.3214,0.89286-1.0714,0.0893-1.1607-0.89286-0.89286-0.89286z","name":"Pskov Oblast"},"no":{"path":"m123.12,188.27,1.5179,1.25,2.1428,0.35714,2.1429,0.17857,1.25,1.1607,2.5,0.53571,2.3214-0.0893,1.0714-0.89286,0.44643,0.625,0.0893,1.7857,2.1429-0.53571,2.3214,0.0893,0.80357,0.80358,0.17857,2.5,0.17857,2.5,0.53572,1.0714,1.3393,0.17858,1.3393,0.44642,0.26785,2.1429,0.71429,1.6964,0.98214,0.80357,0.44643,2.9464,0.0893,2.2321,0.89285,1.4286-0.53571,0.98215-0.71429,0.53571,0,1.6071,0.17858,1.5179,1.4286,1.3393,0.625,0.53571,0.0893,1.9643,0,1.9643-0.17857,1.3393-1.25,0.53571-0.71428-0.26785-0.625-0.80358-0.71429-0.80357-0.17857-1.1607-0.98214-0.80357-0.80358-0.625-2.0536,0-1.5178-0.53572-0.53572-0.35714-1.5178-0.53571-0.71429-0.26786,0-0.44643s-0.26786-1.25-0.26786-1.6964c0-0.44643-0.0893-2.0536-0.0893-2.0536l-0.625-0.98214h-1.7857l-0.89285-0.44643-0.44643-0.98214-0.98215-0.625-0.53571,0.625-0.89286,1.0714-1.6964,1.4286h-2.1428c-0.35715,0-1.5179,0.0893-1.5179,0.0893l-0.71429-1.0714-1.0714-0.71428-2.3214-0.17857-2.6786-0.0893-1.5179-0.44643-1.3393-0.98214-2.3214-0.44643h-2.1428l-0.89286-1.1607-1.25-1.0714-0.53571-0.71429-1.1607-0.71428,0.98214-2.7679,0.71429-0.44643,1.1607-1.5179,1.0714-1.0714,2.0536-0.625,2.5-1.9643,0.625-1.9643,0.0893-3.5714,0.98214-2.5893,1.0714-1.25,1.1607,0.26786z","name":"Novgorod Oblast"},"tr":{"path":"m98.661,216.66,3.2143-0.625,2.2321-1.6072,1.3393-1.6071,0.17857-1.4286-0.80357-1.4286-0.26786-1.3393,0.35714-0.89286,1.4286-0.89285,1.6964-0.625,1.1607,0.44643,1.5179,1.5178,1.0714,0.98215,0.98215,0.53571,1.6964,0.17857,2.4107,0.35714,1.3393,0.98215,1.3393,0.26785,3.2143,0.44643,1.5178,0,1.25,0.71429,0.80358,0.71428,1.875,0.35715,1.7857-0.17857,1.875-1.6072,1.25-1.25,0.71429,0.44643,0.625,0.80357,1.4286,0.44643,1.4286,0.17857,0.53571,1.5179,0.17857,2.4107,0.35715,0.80358,1.1607,0.71428,1.4286,0.80357,1.0714,0.26786,1.875,0.35714,0.98214,0.26786,1.25,1.0714,0.44643,1.3393,0.98214,1.0714,0.80358,0.53572,1.7857-0.35715,1.3393,0.0893,1.25,0.71429,1.6071,0.89285,0,1.5179-0.625,1.6964-1.25,1.6071-1.6071,0.44643-1.25,0.98214-1.5179,1.3393-0.89286,1.0714-0.44643,0.71428-0.26785,1.5179-0.44643,1.0714-1.25,1.4286-0.53572,1.4286-0.35714,2.0536-2.0536,1.9643-2.0536,1.3393-1.0714,0.17858-0.53571-0.71429-0.26786-1.7857-1.6964-0.71429-3.8393-0.89286-3.8393-1.6071-3.0357-0.80357-1.5178-1.0714-0.0893-3.0357-0.35714-1.6964-3.3036,0.80357-3.4822,0.26786-1.3393-0.89286-3.4821-4.4643-1.5179-2.0536-3.3036-0.625-2.7679-0.53571-1.4286-1.7857z","name":"Tver Oblast"},"vm":{"path":"m137.41,247.73,1.6072,1.7857,2.0536,1.25,1.1607,1.0714,1.3393,0.35714,0.80357,0.89286,0.0893,1.5178-0.89285,1.7857-0.35715,1.0714,1.25,0.625,1.7857,0.26785,1.0714,1.1607,0.17857,1.9643,0.98214,1.875,1.0714,1.25,1.3393,1.25,1.3393,1.3393,1.3393,1.1607,1.7857,1.875,0.89286,1.3393-0.17857,0.98214-0.89286,0.71429l-0.18,0.98,0.53571,0.71429,0.44643,0.71428,0.0893,1.6072-1.7857,0.53571-2.2321-0.0893-1.1607-1.0714-4.4643-0.0893h-5.1786l-1.7857,0.53571-0.71429-1.6964-1.6964-1.9643-1.6071-2.6786-0.80357-4.1964-0.0893-4.1071-0.17857-2.0536-0.44643-0.44643-0.71428,0.44643-1.1607,0.26785-1.4286-1.25-0.26786-2.5893,0.71429-2.0536,1.1607-2.0536,0.44643-1.7857,1.3393-1.0714z","name":"Vladimir Oblast"},"pz":{"path":"m127.05,289.96,1.6964,1.7857,2.0536,1.5179,1.25,0.98214,1.6964,0.625,1.25,1.875,0.71429,1.6071,0.26785,1.9643,0.98215,0.98214,1.0714,1.0714,2.6786,0.17857,1.6964,0.0893,0.625,2.1429,0.89286,1.7857,1.6964,0.71429,2.1429,0.26785,1.4286,1.0714,0.625,1.0714-1.5179,0.89286-0.89286,0.98214,0.0893,4.1071-0.26786,3.4822-2.7679,1.25-1.0714-0.0893-0.89286,1.6071-1.9643,0.98215-1.1607-1.7857-0.98214-0.98214-5.9822-0.0893-1.1607-1.875-0.89286-0.89285-3.125-0.71429-0.98214-1.6071-1.25-1.6964-2.1429-0.71429-2.4107-1.3393-1.6071-1.0714-2.5,0.0893-0.71429-1.875,0.26786-2.5,1.1607-0.89285,3.8393-0.80357,0.89285-2.4107,0-3.4821,1.3393-1.6964,1.3393-1.6071-0.26786-2.5893,0-1.9643,1.1607-0.89286z","name":"Penza Oblast"},"sr":{"path":"m107.23,308.27-0.17857,3.0357-0.26786,1.25-2.2321,1.1607,1.4286,1.6964,1.0714,3.2143,2.2321,0.71429,0.98215,0.80357,0.89285,1.0714,1.7857,0.625,2.5893,2.5,0.89286,1.0714,0,1.875-1.5179,2.0536-2.4107,2.8571-0.44643,1.25,0.44643,1.6964,0.71429,0.89286,2.1428,1.1607,4.0179,3.9286,1.7857,4.5536,1.25,1.4286,1.25,1.3393,0.26786,1.9643-0.71428,2.5-0.53572,2.4107,0.26786,1.7857,0.89286,1.0714,1.6071,0.44643,1.6964,0,1.6964-1.1607,1.25-1.0714,0.44642-2.6786,0.0893-1.875,2.2321-0.625,3.3036,1.25,1.6964,0.35714,1.6072,0,1.3393-1.5179,0.44643-0.53571,1.6071,0.35714,1.3393,1.0714,1.5178,0.89286,4.6429,0,1.1607-1.1607,1.3393,0.17857,0.89286,0.80358,1.6071-0.53572,0-1.7857-0.89286-1.9643-0.35714-1.3393-0.17857-3.9286-0.0893-2.0536-0.71428-1.25,0.0893-2.8571-0.35714-1.6071,0-2.5-0.80357-1.3393-1.1607-1.6071-2.5-1.0714-1.6072-2.0536-2.5893-0.0893-1.0714-0.35714-1.7857-1.6964-0.625-1.25-0.44642-0.89286-1.7857-2.4107-5.625-0.26786-0.53571-0.17857-1.9643-2.5893-3.125-0.89286-2.2321-2.9464-6.1607-3.3036-2.3214,0-1.0714-1.6964,0.44643-2.5-0.80357-0.35714-3.8393,2.1428-1.5179,0.35715z","name":"Saratov Oblast"},"mr":{"path":"m127.59,290.05,1.875,2.1429,2.6786,1.7857,1.7857,1.1607,1.7857,2.7679,0.44642,2.4107,2.0536,2.1429,2.5893,0.0893,1.6071,0.26786,0.89286,2.2321,0.71429,1.4286,2.0536,0.89286,1.7857,0.35714,1.25,0.625,0.53572,0.80358,5.8928,0.17857,2.6786-3.5714,0.35715-0.53572,0.71428-1.3393,0.0893-2.1429-0.0893-1.9643-1.7857-0.98215-0.35714-2.5-0.0893-0.80357-1.6964,0,0,0.17857-0.80357,0.89286-1.3393,0.80357-5.2678,0-2.5893-2.3214,0.17857-3.5714-1.1607-1.0714-0.17857-0.80358,1.0714-1.0714,0-1.6072-2.5893-0.53571-1.7857-0.0893-0.80357-1.25-0.71429-1.6964-1.25,1.1607-2.1429,2.3214-2.4107,1.5178-1.5179,0.98215-2.9464,0.26785z","name":"Republic of Mordovia"},"cu":{"path":"m159.11,299.07,1.3393-0.89286,2.9464,0.44643,1.3393,0.44643,1.0714-1.3393,0.26786-1.7857,2.2321-1.1607,2.2321-2.2322,3.125,0.0893,2.6786,0,1.25,1.5179,0.35715,2.9464-0.17857,1.5179,0.35714,1.25,0.71428,1.1607-0.0893,0.71428-1.3393,0.625-4.1071-0.0893-1.3393,0.53571-0.80357,0.80357,0,0.89286,1.1607,0.71428-0.17857,0.89286-1.3393,1.1607-1.7857,1.25-2.1429,0.98214-1.3393,0.44643-1.3393-1.3393-2.5-0.44643-0.98215-0.625-0.98214-1.3393-0.80357-0.80357,0.80357-3.5714z","name":"Chuvash Republic"},"ul":{"path":"m158.57,305.32-1.875,2.6786-0.98215,1.4286-4.8214-0.26785-0.80358,0.26785-1.7857,1.4286-0.80357,1.1607,0,2.3214,0,2.5893,0,1.6964-1.7857,1.4286-1.0714,0.26786-0.89286,0-1.25,1.25-1.25,1.0714-0.625,0.26786,0.89286,1.9643,1.6071,1.6071,2.3214,0.44643,1.5178,0.17857,1.25,1.6072,1.5179,0.80357,2.1429,0.17857,0.89286-0.625,0.0893-1.875,0.17857-1.6964,1.0714-1.6964,0.35714-1.3393,1.3393-0.26786,0.80357,0.53571,1.3393,0.625,1.875-0.17857,1.3393-0.98214,1.0714,0.17857,1.6964,1.4286,2.0536,1.875,1.5179,1.6072,0.80357,1.4286,2.3214,0.17857,1.1607-1.5179,2.8572-2.0536,2.0536-1.1607,0.26785-2.3214,0-3.5714-1.875-1.1607-3.6607-0.0893-2.0536-1.4286-0.98214-1.1607-2.5-0.26785-0.98215-1.5179-3.0357-1.5179-0.80357-1.5179-0.625-2.0536z","name":"Ulyanovsk Oblast"},"ss":{"path":"m150.98,329.96,1.3393,2.1428,0.71428,2.8572,0.44643,2.8571,0,2.1429,0.625,2.3214-0.0893,2.8571,0.35714,2.4107,0.53571,2.1429,0.625,1.9643,0.71429,0.98214,5.8929,0.0893,3.0357-1.6071,1.25-1.9643,1.9643-0.35715,1.6964-0.0893,2.1429-1.4286,1.4286-0.89286,1.25-0.17857,1.6072,0.625,1.7857-0.17857,0.80357-1.875,1.0714-2.3214,4.375-2.5893,1.7857-1.4286,1.1607-2.0536-0.625-1.5179-0.80357-1.7857-0.35715-2.5-1.1607-1.25-0.71429-2.4107-3.6607-0.26785-2.3214-1.6964-1.4286-0.80357-3.5714,2.3214-1.9643,2.2322-2.4107,0.0893-0.98214-0.98214-2.2321-2.4107-2.4107-1.875-1.0714-1.0714-0.89285,0.26785-1.6072,0.71429-1.6964-0.0893-1.5178-0.80357-1.0714,0-0.625,0.98215-0.53572,1.0714-0.80357,1.5179-0.17857,1.3393,0,0.98214-0.0893,0.71429z","name":"Samara Oblast"},"ob":{"path":"m155.89,352.82,0.53571,1.4286,0.71429,1.6071-1.0714,1.6072,1.0714,1.4286,3.0357,0.17857,1.9643-0.35714,2.5,0,0.17857,2.3214-0.89286,2.6786,0.35714,1.0714,3.5714,1.6071,2.1429,1.4286,0.17857,3.5714,0,4.1071,0,1.4286-1.25,0.89286,0,1.9643,0,0.71428,0.71429,1.0714,1.0714,0.89286,1.7857-2.5,0-1.4286,0.89286-0.89286,1.4286,0,1.0714,2.3214-0.17858,1.4286-0.71428,1.25-0.35714,1.4286l0.36,1.43,1.25,0.89286,2.3214,1.25,1.7857,0.89286h1.9643,2.5l1.4286-1.0714,1.6071,0.17857,1.9643,1.0714,0.89285,1.6071,0.35715,1.7857,1.0714,1.25h1.7857l0.89286-0.89285h1.25l1.6071,0.53571,1.25,1.4286,0.53571,2.6786-0.17857,3.5714,1.7857,1.6072,1.4286,0.89285,1.0714,1.6072,1.0714,0.53571,1.6071-0.71429,1.4286-0.17857,1.6071,1.4286v1.25l1.9643,1.7857,1.25,0.71428,2.1429,0.35715h2.6786l1.4286-0.17857,1.25-0.89286,1.25-1.0714,0.89286-0.89286-0.17858-1.25-2.3214-3.2143-1.0714-1.25v-3.75l-0.71429-2.1429-0.17857-2.1429,1.0714-2.3214,1.9643-1.4286-1.4286-1.7857-3.0357-2.8571-1.9643,0.35714-1.4286-0.17857-0.89286-1.25h-2.3214l-1.4286,1.25-1.0714,1.25-0.53572,1.0714h-2.5l-1.0714-2.5-3.2143-0.17858-2.8572-0.35714-0.89285-2.5-1.08,0.33-1.79,0.89h-1.4286l-0.17857-1.0714,1.4286-1.7857,2.5-2.5-0.53-1.78-0.71-0.36v-0.89286l2.5-1.9643,0.35715-1.0714v-2.1429h-1.7857l-2.1429,0.71429-1.6071,0.17857-1.4286-1.9643-0.53571-2.3214,1.25-1.7857,1.0714-0.89286v-1.6071l-0.35714-2.3214,1.0714-0.89285,0.17857-3.0357-1.25-1.9643-1.7857-1.7857-0.17857-1.6071,1.0714-2.8571,1.6072-2.5,0.89285-1.7857-0.53571-1.25-2.1429-1.6071-1.4286-2.1429-1.25-1.4286-1.6071,1.7857-1.4286,1.4286-4.1072,2.5-1.4286,1.9643-0.35714,1.9643-0.53571,0.35714-1.9643,0.17857-2.1429-0.35714-1.9643,0.53571-1.9643,1.4286-2.8571,0.53572-1.0714,0.71428-1.4286,1.7857-2.1429,1.25h-2.5z","name":"Orenburg Oblast"},"nn":{"path":"m156.25,271.57,4.2857-0.53571,2.5-1.4286,3.5714-0.71428,2.6786-1.0714,1.25-0.17857,2.3214,1.25,1.7857,1.0714,2.6786-0.17857,1.4286,0,2.6786-1.0714,1.25,0.17857,1.4286,1.9643,1.0714,2.1429,2.5,0.17857,2.5,1.7857,1.0714,1.25,0.89286,2.5,1.25,1.4286-0.17858,1.6071-1.25,0.89286-1.7857,0.17857-0.71429,0.89286-1.6071,0-0.71428-0.89286-1.7857-1.0714-1.6071,0.71429,0,1.6071-1.25,1.4286-1.25,0.53572-2.1429-0.89286-2.1429-1.6071-3.0357-0.89286-1.7857,0-1.0714,0.89286-0.71429,1.7857,0,2.8571-0.17857,2.8572,0.53571,1.0714-1.0714,1.4286-2.3214,1.4286-1.4286,0.89285,0,1.4286-0.35715,0.89285-0.89285,0.71429-2.8572-0.35714-1.0714-0.17858-0.89285,0-0.71429,0.53572-0.38692,0.34215-0.69448-0.12626-0.44194-0.50508-0.50508-3.0936-1.5784-0.12627-1.5784,1.4521-2.2097,0.44194-3.9775-0.25253-2.0834-2.0203,0.1894-3.3461-1.2627-1.389-0.0631-0.75761,1.0102-1.4521-0.0631-1.0733-3.7249-0.63135-1.1996-0.75761-1.0733-2.7148,1.1364-2.336-1.1996-3.3461,2.0203-0.50507,3.283-0.12627,5.9978,0.12627,1.2627,0.88388,2.0203,0.1894,2.0203-0.75761,0.12627-1.5152-0.94702-1.4521,0.63135-1.0733z","name":"Nizhny Novgorod Oblast"},"ml":{"path":"m181.51,286.29,2.2728,2.336,2.4622,2.0834,2.7779,1.1364,2.9673,0.0631,2.4622,2.0834,1.5784,1.6415,0.44194,1.3258,0.63134,0.94702-0.3788,1.6415-0.56821,1.1364-0.0631,1.8309-1.5152,1.389-0.88388,0.56821-1.4521-0.12627-1.1996-1.5152-1.1996-0.44194-1.389-0.82075-1.7046-0.12627-0.50508,0.88389-1.7046,0.88388-2.5885,0.12627-1.9572-0.82075-1.1364-0.69448-0.88388-3.0305-0.37881-4.7351-1.1996-1.4521-4.0406-0.0631-1.3258-0.1894-0.63134-1.0733,0-2.0834,0.0631-3.0936,0.37881-1.8309,1.0102-1.0733,0.82075-0.63134,2.5885,0.3788,2.2728,0.88389,2.9673,1.7678z","name":"Mari El Republic"},"ta":{"path":"m160.93,308.14,0.0631,1.1364,0.44194,1.0733,0.88389,1.0102,1.5152,0.63134,1.8309,1.4521,1.5152,0.75762,1.389,0.44194,1.4521,1.0733,1.389,1.0102,2.4622,0.44194,1.4521,0.0631,1.7046,0.88388,0.12627,2.2097-0.37881,2.9042,0.44195,1.4521,2.0834,1.1996,1.0733,0.75761,2.9042,0.18941,0.82075,0.69448,0.56821,1.7046,1.3258,2.1466,0.63134,2.5885,0.88389,1.7678,1.6415,1.894,1.389,2.2728,1.6415,1.1364,0.88388,0.88388,1.1996,0.0631,2.9042-1.8309,2.9042-2.7148,0.44194-0.63135,0-1.894-1.0102-1.0102-0.0631-0.88388,1.8309-0.25254,1.2627,0.31567,0.75762,0.56822,1.3258,0.3788,1.6415-0.31567,1.1996-0.69448,2.9042-0.12627,1.5152-0.37881,0-0.94701-0.37881-1.2627-1.1996-1.5784-0.63134-1.2627-1.5152-0.44194-0.88389-1.2627s1.2627-1.0102,1.5784-1.1364c0.31567-0.12627,2.2728-0.75762,2.2728-0.75762l0.0631-1.4521s-1.1364-0.18941-1.389-0.50508c-0.25254-0.31567-0.69448-0.94702-0.69448-0.94702l2.0203-1.3258,2.0203-1.389,0.12626-1.1364-0.69447-0.82075h-1.5152l-0.69448,0.0631-1.1364,1.3258-0.56821,0.69448h-1.894l-0.12627,0.88388-0.12627,1.3258-0.82075,1.1364-1.5152-0.12627-0.75761-1.4521-1.1364-0.94702-0.82075,1.0102-1.7678-0.31567-0.56821-2.2728-1.4521-0.88388-0.63135-1.2627,0.12627-1.3258-1.1364-1.3258,0.0631-2.6516,0.12627-3.0936,0.63135-0.94702-0.25254-1.0102-0.69448-1.0733-0.56821-0.56821-1.0102,0.44194-0.88388,0.37881-1.0102-0.12627-1.0733-0.88389-0.88388-0.82074-1.8309-0.69448-1.4521-0.44195-0.94702,0.94702-1.8309,0.75762-1.8309,0.1894-1.6415-0.31567-1.9572-1.0733-1.389,0.50508h-2.7148l-2.0834,0.0631-1.389,1.1364-0.0631,0.88389,0.69448,0.50507,0.12627,0.82075-0.82075,1.0733-1.5152,1.2627-2.6516,1.0733-1.5784,0.69448-1.1364-0.75762-2.0834-0.82075z","name":"Republic of Tatarstan"},"iv":{"path":"m144.26,252.7,2.0203-1.1364s0.94702-0.50507,1.1996-0.50507c0.25254,0,2.5885,0.31567,2.5885,0.31567l2.7148,1.1364,2.3991,1.1364,1.2627,1.1996s1.4521,1.0102,1.7046,1.1996c0.25254,0.18941,1.4521,1.2627,1.4521,1.2627l1.7046,0.63135,1.1364-0.88388h0.88388l0.50508,0.82074,0.1894,1.1996,1.0102,0.75762,1.5152,0.82074,1.0102,0.63135,0.44194,1.0102-0.69448,1.0733-0.12626,0.88388,0.75761,0.37881,0.88388-0.56821,1.389,0.63134,0.69448,0.94702,0.25254,1.2627-0.25254,0.50508-1.894,0.69448-2.9673,0.82075-3.0936,0.50507-2.3991,1.5152-3.4724,0.50508-0.94702-0.12627-1.7678-2.3991-3.5987-3.4724-2.7148-3.3461-0.82075-2.7779-0.88388-1.0102-2.1466-0.44195-0.69448-0.56821,0.50507-1.4521,0.56821-1.3258z","name":"Ivanovo Oblast"},"yr":{"path":"m154.11,228.33,1.7678,1.5784,1.9572,0.50507,1.7678,0.50508,1.3258,1.6415,1.9572,1.5784,1.5784,0.0631,1.0733-0.69448,0.82075,0.31568,0.3788,1.4521,0.12627,3.4093-0.0631,2.6516,0.25254,1.5152,0.88388,1.0102,0.56821,0.94702-0.37881,1.0733-1.7046,1.1364-2.7148,1.3258-3.283,2.2097-1.6415,1.0733-3.3461,0.88388-2.4622-0.1894-2.1466-0.63135-2.6516-0.69448-2.1466,0.63135-1.8309,1.0733-1.7046-0.88388-1.4521-1.0102-1.894-1.1364-1.1364-1.1996-0.25254-1.3258,0.56821-1.4521,2.0203-0.88388,2.2097-1.1996,1.6415-2.7779,1.0102-2.9673,1.1996-1.2627,0.75762-2.4622,1.6415-1.8309,1.9572-1.8309,2.7148-1.5152z","name":"Yaroslavl Oblast"},"kt":{"path":"m168.7,245,1.389,0.12627,1.2627-0.75762,1.5152-1.389,1.894-0.75762,1.894,1.1364,1.894,1.5152,2.5254,0.12627,0.63135-0.75761,0.75761,0.50507,1.2627,2.1466,2.2728,2.2728,1.5152,1.5152,1.1364,1.894,0.3788,2.2728,1.2627,1.7678,1.5152,1.6415,2.5254,1.389,1.7678,1.5152,1.7678,1.894,2.0203,0.88388,1.894,0.12627,2.0203-2.0203,1.6415-0.3788,0.63135,1.894,1.1364,1.0102-0.12627,1.6415-1.6415,1.5152-0.12627,1.894-0.3788,2.5254s-1.7678,0.75761-2.3991,0.75761c-0.63134,0-6.3134-0.12626-6.3134-0.12626l-3.1567,0.12626-1.1364,1.1364-1.2627,0.50507-2.0203-0.75761-1.5152-0.75762-2.0203-0.3788-1.0102-1.5152-0.88388-1.6415-0.75762-0.63135-1.1364-0.12627-0.88388,0.50508-2.1466,0.75762-3.283-0.25254-1.7678-0.50508-2.0203-1.2627-0.50508-0.50508,0.25254-0.63134v-1.1364l-1.389-1.2627-0.88389-0.50508-0.63134,0.37881-0.38556,0.10695-0.53571-0.35714,0.0893-0.89286,0.71429-0.625,0.0893-0.98214-0.89285-0.71429-1.7857-1.0714-0.98214-0.98215-0.26786-0.98214-0.71428-0.89286h-0.98215l-0.89285,0.625-0.625,0.0893-1.25-0.71429-1.4286-0.80357-1.3393-1.25-1.7857-1.3393-0.69-0.57,1.07-0.71,2.05-0.54,2.3214-0.71428,2.8571-2.0536,3.3036-1.6964z","name":"Kostroma Oblast"},"le":{"path":"m123.49,177.57,1.7678-1.6415,1.5152,0,2.2728-1.894,2.5254-0.50507,2.2728,0.63134,2.9042,2.1466,2.7779,1.5152,0.75761,2.5254,0.12627,1.389,1.0102,1.1364,1.1364-0.37881,0.75761-2.0203-0.12627-2.3991-0.88388-1.6415-0.88388-1.894,0.12626-2.0203,1.1364-1.2627-0.25254-1.894-0.75762-1.0102,0-0.37881,1.2627-0.25254,3.283,0.25254,3.5355,1.2627,2.2728,0.12627,1.894,0.12627,1.2627,1.1364,0.63135,1.2627,0,1.7678-0.37881,1.6415-0.25254,2.1466-0.63134,1.7678-2.1466,1.2627-0.75761,1.0102-1.0102,1.894-1.0102,1.1364-1.7678,1.1364-0.63135,1.2627,0.25254,1.1364,1.389,0.75762,2.1466,0.25253,1.0102,0.88389,0.25254,1.6415,1.0102,0.75762,2.1466,0.12627,1.1364-0.50508,3.4093-0.25254,1.7678-0.63134,2.0203-0.25254,1.5152,0.75761,1.0102,1.6415,1.1364-1.2627,1.389-1.7678,0.75762,0.88388,0.50507,2.0203,0.63135,2.2728,2.1466,0.50507,1.2627,0.75762,1.1364,1.0102,0.12626,1.2627,0.12627,1.6415-0.12627,1.7678-1.2627,0.75761-2.2728-0.25254-1.389-0.88388-1.389-0.25254-0.75761,0.88388-1.5152,1.0102-3.0305,0-1.5152,0.3788-2.7779,3.0305-1.0102,1.389-0.37881,2.1466-1.6415,1.0102-1.1364,0.12627-0.3788,1.2627-1.2627,0.63134-0.63135-1.0102-1.1364-1.1364-2.2728-0.12627-0.75761,0-1.1364-3.0305,0-2.9042-1.0102-1.5152-0.88389-1.894-0.12627-1.6415-2.2728-0.88388-0.88388-0.63135s-0.37881-1.0102-0.37881-1.5152c0-0.50507-0.25254-3.4093-0.25254-3.4093l-0.75761-1.1364-2.3991-0.25254-1.389,0.75761-0.75762-0.50507-0.12627-1.2627-0.63134-0.88389-1.0102,0.63135-2.1466,0.3788-2.7779-0.88388-1.5152-0.88388-3.283-0.37881-1.2627-0.88388-1.0102-0.75762,0.63135-1.2627,0.88388-2.1466,0.88388-1.389,0.12627-1.2627z","name":"Leningrad Oblast"},"ki":{"path":"m207.59,265.33,1.2627-0.88388,0.12627-2.0203,0-2.0203-1.0102-1.389-0.12627-1.6415,1.5152-0.37881,3.9143,0.25254,2.5254-0.88388,2.6516-1.1364,0.63134-1.389,1.1364-0.63134,2.7779,0.25254,1.389,1.7678,0.12627,2.7779-0.63134,3.0305-1.0102,1.389-0.75761,2.7779-1.894,0.75762-2.0203,0.12626-1.6415,1.7678-0.63134,1.6415-1.0102,0.63134-0.75761,0.88389,0.75761,1.389,1.6415,0.88388,1.0102,1.389-1.6415,1.894,0.12626,1.894,1.1364,0.88389,1.2627,0.50507,0.88388-1.389,0.88388-1.894,2.7779,0,3.1567,0.3788,4.2932,1.2627,1.7678,2.2728,2.1466-0.12627,2.1466-1.6415,1.6415,0.37881,1.2627,1.0102,0.75762,1.894s1.0102,1.5152,1.389,1.7678c0.3788,0.25254,2.5254,1.894,2.5254,1.894l0.25254,1.5152-0.88389,2.0203-2.0203,1.1364-3.5355,0.25253-1.2627,0.63135-1.2627,1.5152-0.25254,1.389,1.0102,1.389,0.12627,1.1364-1.5152,1.1364-0.75762,1.389-0.12627,2.1466-1.2627,1.0102-2.7779,0.12627-1.1364-1.2627-1.0102-2.5254-2.0203-0.12627-1.389-0.3788v-1.894l-2.0203-1.1364-3.1567,0.75761-1.7678,1.389s-1.2627,1.0102-1.2627,1.5152c0,0.50508-0.3788,2.2728-0.50507,2.7779-0.12627,0.50508-1.6415,1.5152-1.6415,1.5152l-2.5254,1.1364-1.894-0.50507-1.2627-1.389-1.5152,0.25253s-0.75761,0.50508-1.0102,1.389c-0.25254,0.88389-0.12627,2.7779-0.12627,2.7779l0.12627,1.894-2.0203,0.63135-3.4093,0.3788-0.25254,1.1364v1.389l-0.3788,1.389-1.7678,0.88389h-0.63135l-0.63134-1.5152-0.50508-0.37881,0.12627-2.5254,0.25254-2.5254,0.50508-1.5152-0.88389-1.6415-0.25254-1.2627,0.75762-2.9042,0.63134-2.5254-1.0102-1.5152-1.6415-2.5254-2.1466-1.5152-0.88388-0.63134-3.9144-0.12627-1.7678-1.2627-1.6415-1.5152-1.6415-1.5152-0.50507-0.50508,0.50507-1.0102,1.2627-1.6415,0.25254-1.0102,1.1364-0.75761,1.5152,0.50507,1.894,1.389,1.389-0.75761,2.1466-0.63135,1.389-1.2627v-1.5152l-1.2627-1.894-0.63135-1.5152s-0.78918-1.1049-0.85231-1.2627c-0.0631-0.15784,0.56821-0.69448,0.56821-0.69448l0.97858-0.63135,0.75762-0.75761s2.2728-0.0316,2.8095-0.0316c0.53664,0,3.1567,0.0631,3.8828,0.0631,0.72605,0,3.7881-0.44194,3.7881-0.44194l1.4521-0.59978s0.12626-1.5784,0.15783-1.7993c0.0316-0.22097,0.47351-2.4938,0.47351-2.4938l2.0203-2.3991z","name":"Kirov Oblast"},"bs":{"path":"m211.5,329.86,2.3991-1.6415,2.5254-1.6415,1.5152-0.25254,1.894,2.6516,2.2728,2.2728,2.9042,0,2.6516,2.5254,1.7678,2.5254,1.1364,1.7678,1.7678,0,1.2627,2.1466,2.6517,2.3991,2.2728,1.6415,2.0203,1.7678,1.2627,1.1364,0.88389,1.389-0.37881,1.1364-1.6415,0.63134-0.88388,1.2627,0.25254,1.389,1.389,0.63135-0.63135,1.2627-1.5152,0.50508-1.2627-0.75762-2.3991,0.37881,0,1.0102-1.5152-0.25254-0.50508-0.88388-1.5152-1.0102-4.5457,0-1.1364-0.37881,0-1.2627,1.7678-1.2627,0.12627-1.389-1.0102-0.88389-1.6415-1.1364-2.5254,0.25254-1.0102,2.1466-1.7678,2.6516-0.88388,2.0203,0.50508,3.0305,1.894,1.0102,2.0203-0.75761,1.6415,0.75761,1.0102,2.0203,2.5254,0.12627,2.0203,0.75761,2.7779,0,1.7678-0.50508,1.5152,1.1364-0.63135,1.389-1.894,1.5152-1.2627,1.1364-1.0102,1.389-1.2627,0-1.2627-0.63134-2.1466-0.75762-1.6415-0.3788-1.6415,1.2627-0.3788,1.5152-0.63135,1.389-2.3991,2.6516-1.6415,2.3991-3.9143,3.6618-1.894,1.5152-0.25254,2.0203-0.63134,1.5152-2.9042-0.25254-1.6415,1.7678-1.2627,1.389-0.50507,0.63135-2.0203,0-1.1364-2.0203-0.50508-0.63134-5.4296-0.63135-1.389-2.1466-2.7779,0.88388-1.2627-0.12627,0-0.50507,3.4093-4.4194,0-1.6415-0.88389-0.63134,0-1.1364,1.7678-1.1364,1.0102-1.389,0-2.0203-0.25253-0.50508-1.894-0.12627-2.2728,1.2627-1.7678-1.1364-1.1364-2.3991,1.2627-2.3991,1.0102-1.894-0.25254-2.5254,0-0.75761,0.88389-1.5152,0-3.1567-2.5254-2.9042-0.12627-2.0203,1.0102-2.6516,2.0203-4.1669,2.9042-2.1466,3.9143-3.1567,1.0102-2.1466-0.88389-1.389-0.12627-0.12627,0-0.75761,1.389-0.25254,2.3991,0.75762,1.389,0.12626,1.7678-0.63134,2.6516-0.25254,1.7678-0.12627,0.88388-0.63134,0-1.7678z","name":"Republic of Bashkortostan"},"cl":{"path":"m242.18,347.66,1.7678-0.88388,2.7779,0.50507,2.3991,2.1466,2.3991,1.7678,3.0305,1.894,2.9042,0,1.5152,1.6415,1.6415,2.3991,0.75761,1.894-0.63135,3.1567,0,2.7779-0.88388,1.389-1.7678,0.63135-1.6415,1.1364-0.75762,1.2627-2.0203,0.63135-1.894,1.5152,0,1.1364,1.5152,1.5152,2.0203,2.0203,1.1364,2.3991-0.37881,2.7779-0.75762,1.7678-2.3991-0.63135-2.6516-0.50507-3.283-0.37881-2.0203-0.50508-1.5152-1.7678-2.0203-1.7678-1.1364-1.1364-1.1364,0.50508-1.5152,1.1364-0.88388,1.0102,0,1.894,1.6415,1.2627-0.37881,0.75761-2.2728,0.63135v1.0102c0,0.50508,0.75761,2.0203,0.75761,2.0203l2.0203,1.7678,0.12627,1.894-1.5152,0.63134-1.5152-1.5152-1.389-1.2627-2.2728-0.63134-3.283,0.12627-1.5152,0.25253-0.63134,1.2627,1.0102,1.389-0.37881,1.894-1.0102,1.6415-4.5457,0.25254-1.6415-0.88389-1.6415-0.63134,0.50507-2.0203,1.6415-0.88388-0.75761-1.7678-2.0203-2.3991-1.6415-1.0102-1.894,0.12627-1.389-0.63135,0.63134-2.7779,1.7678-2.6516,4.4194-4.1669,3.7881-4.672,1.2627-2.9042,1.389-0.88389,2.5254,0.25254,2.0203,1.0102h2.0203l1.894-2.2728,2.2728-1.894,0.50508-1.389-1.5152-1.2627-2.1466,0.50507h-3.0304l-2.7779-0.88388h-1.5152l-0.88388-1.894-1.389-0.50507-1.7678,0.63134-1.0102-0.37881-0.88389-0.63134-0.63134-1.894-0.12627-1.6415,3.6618-5.6821,0.75762-0.63135,1.7678,0.37881,1.7678,0.88388,0.63134,1.1364-0.3788,0.75762-1.2627,1.1364v1.1364l-0.12627,0.12627,0.75761,0.63135,2.6516,0.12627h2.2728l1.5152,1.0102,1.2627,1.1364,1.1364-0.63135,0.50507-0.75761,2.0203,0.12627,1.7678,0.37881,1.1364-1.2627-0.37881-1.0102-0.75761-0.88388,0.25253-1.5152,1.5152-1.0102,0.63135-1.1364z","name":"Chelyabinsk Oblast"},"ud":{"path":"m231.7,302.33-0.12627,1.389-2.0203,2.7779-1.5152,1.389,0.12626,1.389-1.6415,1.0102-1.1364,1.5152-1.5152,2.3991-0.50508,1.894-0.50508,3.1567-2.0203,1.0102-2.2728,0.12627-0.63135,1.1364-0.37881,3.0304-0.12627,1.389-3.0304,2.0203-2.2728,1.389-1.0102,0-1.2627-1.5152-1.7678-0.75762-0.63134-1.2627,1.389-1.1364,2.0203-0.75761,0.50508-1.1364-0.37881-0.50508-1.5152-0.88388,0.25254-0.88389,2.7779-1.7678,1.0102-1.1364-0.50507-1.0102-0.75762-0.63134-2.0203,0.63134-1.1364,1.389-1.5152,0.63135-1.0102,0.25253-0.3788,1.5152-0.63135,0.75762-0.88388,0.25254-0.75762-1.0102-1.389-1.2627-0.75761,0.37881-1.2627,0.37881-0.88388-0.88389-0.63135-1.1364-1.0102-1.0102-0.63135-1.0102,0-1.1364,1.6415-0.88389,1.1364-1.1364,0.25254-2.0203,0.25254-1.0102,3.1567-0.50507,1.6415-0.50508,0.37881-4.4194s0-1.2627,0.63135-1.5152c0.63134-0.25253,1.2627-0.3788,1.2627-0.3788l1.2627,0.63134s1.6415,1.894,2.3991,1.389c0.75761-0.50507,1.894-0.88388,1.894-0.88388s2.3991-1.0102,2.2728-1.6415c-0.12627-0.63134,0.25254-1.6415,0.25254-1.6415l0.3788-1.389,2.1466-2.2728,1.2627-0.75761,2.2728-0.50508,1.6415,0.37881,0.88388,1.1364v0.75761l0.25254,0.63135,1.0102,0.12627,1.6415,0.3788,0.63135,0.50508,0.63134,1.6415,0.75762,0.75761z","name":"Udmurt Republic"},"pe":{"path":"M242.06,274.03l-2.28,1.16,0.5,1.5-0.5,3.53,0.5,1.28,1.41,2.41,2.25,1.62,0.65,1.66-1.4,2.12-2.41,1.03-2.87,0.63-1.66,0.87-1.13,1.54,0.5,1.24,0.63,1.38-0.13,1.03-1.9,1.63-0.38,2.4-0.87,1.6-0.13-0.19-1,0.12-1.28,2.5-2,2.29-0.15,1.53-0.88,0.87-2,2.03-1.91,3.41-0.62,3.9-1.28,0.88-2.25,0.38-1.28,0.78-0.63,4.9,2.53,2.66,2.13,2.28,2.53,0.25,2.28,1.5,3.41,4.94,1,0.37,1.28-0.12,1.12-1.25,0.88-1.28,1.03-1.75,1.25-1.66,1.28,0.88,1.5,1.28h2.41l2.03-0.91,0.5-1.75,0.25-1.91,0.87-0.75,0.88-1,0.78-0.5,2.5,2.75h3.69l0.87-1,0.5-1.5,0.25-1.65,0.88-1.25,4.69-0.38,2.15-0.78,0.63-1.5-0.63-0.62-0.12-1.41,1.12-1.38,0.75-1.03v-1.37l-0.5-0.88-0.62-1.03,0.25-1.75,1-1.53,2.03-1.5,3.15-0.5,1.88-1.91,2.28-1.62,2.28-1.66,2.28-1.65,0.88-0.75,0.5-1.25,1-1.78s0.9-1.12,1.53-1.75c0.63-0.64,1.62-1.91,1.62-1.91l1.16-1.37,0.25-1.66-2.41-0.38-2.65-0.75-2.66-1.65-2.75-1.38-2.66-1.28-2.53,0.66-3.15,0.12-3.66-0.9-2.9-1.63-1.63,0.85-0.41-0.22-1.9-1.25-1.38-2.03-1.12-1.13-2.28-0.78-0.13-1.63-1.12-1.28-1.41-1.5-1.91-0.5-2.62-0.25-2.41-0.78z","name":"Perm Krai"},"sv":{"path":"m286.13,291.72,1.7678-1.1364,1.1364,1.389,0.88388,2.3991,2.6516,1.5152,2.9042,2.1466,1.2627,2.3991,2.2728,2.7779,0.12627,1.7678,0.63135,2.0203,0.75761,1.5152-0.63134,1.7678-1.894,1.894-0.63135,1.7678-0.25253,4.7982,0.3788,2.7779,0.63135,1.0102-1.0102,2.9042-1.5152,1.7678-0.37881,2.3991,2.0203,1.2627,2.3991,2.0203,0.75761,2.0203,0.12627,2.6516-0.63134,1.6415,0,2.9042,0.75761,2.3991-0.25254,1.894s-0.88388,0.88388-0.88388,1.389c0,0.50508-0.50508,2.7779-0.50508,2.7779l-1.2627,1.2627-2.0203,0.12627-1.1364,0.88388h-3.0304l-1.5152-0.88388-2.1466,0.25254-1.389,1.1364-0.88388,1.389-0.25254,2.9042-0.75761,1.1364-1.1364,1.0102-1.7678,0.50508-3.0305,0.25254-2.0203,0.25254-1.0102,0.88388-1.894-0.37881-1.389-1.1364-1.894-1.894-2.5254-1.6415-1.5152-0.63135-2.2728,0.37881-1.894,0.3788-1.389-0.12626-1.6415-1.389-1.894-2.2728h-2.2728c-0.50508,0-1.6415-0.75761-1.6415-0.75761l-4.672-3.1567-1.6415-1.7678-2.9042-0.3788-1.389,0.12627-0.88389,0.12627-1.2627-1.2627-3.9143-3.283-3.1567-3.0305-0.50507-1.389,2.0203-2.9042,1.389-2.7779,0.75762-0.25253,1.6415,1.1364,1.1364,0.75761h2.7779l1.5152-1.389,0.50507-1.7678,0.12627-1.7678,2.5254-1.7678,1.7678,2.0203,1.2627,0.63134h2.3991l1.6415-1.1364,0.75761-2.0203,0.50508-1.894,3.7881-0.75762,2.5254-0.3788,1.389-1.2627v-1.0102l-0.88388-1.389,1.7678-2.1466,0.25254-1.1364v-1.389l-1.0102-1.6415,1.0102-2.5254,2.1466-1.6415,3.283-0.88388,1.1364-0.75762,8.0812-6.1872,0.88388-1.6415,1.6415-2.7779,2.1466-2.5254z","name":"Sverdlovsk Oblast"},"ku":{"path":"m255.69,383.01,2.3991,1.894,3.283,0.88388,4.2932,1.2627,3.1567,0.75762,4.1669-0.50508,2.5254,0.25254,2.9042,1.0102,3.5355,1.1364,3.5355,0.88388,3.283,1.0102,3.4093-0.12627,2.3991-1.2627,3.6618,0,1.0102-1.5152,0-1.894-1.5152-2.1466-1.389-2.7779s-1.5152-0.12627-2.1466-0.37881c-0.63135-0.25254-2.2728-1.6415-2.2728-1.6415l-0.75761-3.1567-1.389-1.7678-2.6516-1.2627-1.5152-1.6415-1.2627-2.2728-1.6415-1.5152-1.389-1.2627-1.0102-1.389,0.50508-2.3991,1.389-1.2627,1.1364-1.894-2.5254,0.37881-3.0305,0.12627-1.389,0.50507-0.75762,0.50508-1.2627-0.37881-2.0203-1.0102-1.7678-1.7678-2.0203-1.389-1.7678-0.75761h-1.2627l-3.0305,0.63134-1.7678-0.12627v1.1364l0.63135,0.88388-0.50508,2.2728v2.2728l-0.25253,2.1466-0.88389,1.1364-2.5254,1.1364-1.389,1.1364-1.5152,1.2627-1.7678,0.88388-0.50507,1.2627,0.63134,1.1364,1.894,1.894,1.389,1.389,0.63134,1.7678v1.894l-0.50507,1.7678z","name":"Kurgan Oblast"},"ko":{"path":"m224.63,259.27,2.1466-0.63134,0.63134-0.88388,1.894,0.12627,1.6415,1.894,2.1466,0.25254,2.1466-0.50508,1.5152-1.894,0.50508-1.5152-0.63135-0.88389,0.63135-1.5152,2.1466-1.2627,4.5457-1.894,2.6516-1.1364,0.25254-1.5152-0.50508-2.5254-2.1466-0.88389-3.283,0.12627-2.3991,1.6415-2.3991-0.75761s-0.50508-1.0102-1.2627-1.0102-1.5152-0.25253-1.5152-0.25253l0.50507-3.0305,1.7678-0.37881,1.389-1.5152,0.50508-1.894,2.1466-0.50508,2.2728,0.12627,0.63135-1.7678-0.63135-0.63134-0.63134-2.1466,0.63134-1.389,4.5457-2.0203v-1.2627l-1.0102-2.5254-0.63135-1.6415-1.6415-1.7678-0.63134-1.1364,0.25254-1.6415,1.2627-0.63134,1.7678,0.75761,1.5152,2.1466,1.6415,1.5152,2.2728,1.894,2.6516,1.2627,1.7678,1.1364,0.50508,1.7678,1.5152,1.5152,3.1567,0.3788,1.894,1.2627,2.9042,0.50507,0.88388,1.2627h2.0203l1.0102-0.63134-0.25254-1.5152-0.75761-1.5152,0.50507-1.0102,0.88389-1.5152s0.25253-1.1364-0.12627-1.6415c-0.37881-0.50508-1.1364-1.1364-1.1364-1.1364v-0.88388l2.7779-3.283,3.1567-2.1466,1.894-2.0203,1.0102-0.88388,2.3991,0.63134,3.4093,0.12627,2.5254,0.75762,4.2932,0.50507,2.1466,0.63135,3.283,0.12627,2.3991-0.50508,1.5152,0.12627,0.12627,1.894,1.2627,1.0102,2.1466,2.1466,5.3033,4.672,7.4499,4.672,6.4397,3.7881,5.177,3.0305,5.5558,3.283,2.7779,1.894,2.2728,0.25254h3.283l2.1466-1.0102,2.5254-2.3991,1.6415-1.2627,2.7779,0.25253,2.3991-0.12626,2.0203-0.63135,1.5152-0.88388,1.6415-0.37881,3.1567,0.12627,1.6415,0.25254-0.50508,1.5152-0.88388,1.1364-1.1364,0.63134-0.50508,1.894,1.2627,1.7678,1.2627,1.389,0.12627,1.894-1.1364,1.389-0.88388,0.25254-0.75762,1.389-2.0203,0.25254-2.3991-0.12627-2.1466,0.88388-2.5254,1.389-1.389,1.1364-3.0305-0.12627-2.1466-0.50507h-3.1567-2.0203l-1.0102,0.3788-1.389,1.5152-0.75762,0.88389-2.1466,1.6415-1.5152,0.50508h-2.3991l-2.3991-0.25254-1.5152,0.50508-2.9042,2.0203-2.2728,1.2627-1.5152,1.0102-1.5152,0.3788-1.2627-0.12626-1.2627-1.0102-0.12626-1.894-0.63135-1.389-1.6415,0.88388-1.5152,1.389-1.0102,1.2627-0.88388,0.50508-1.2627,0.50507-0.75762,0.37881-0.12627,1.7678-0.3788,1.7678-0.63135,1.389-0.88388,1.1364-1.0102,1.6415-1.894,1.6415-1.6415,1.389-1.2627,0.75762-2.7779,3.283-1.894,2.6516-1.1364,3.0305-0.50507,1.6415-1.5152,1.6415-2.0203,0.88388-1.5152,0.63134-1.7678,1.0102h-2.2728l-3.1567-1.0102-3.1567-1.6415-4.4194-2.1466-0.75761-0.3788-2.5254,0.50507h-3.283l-3.0305-0.88388-2.9042-1.389-1.0102,0.25254-1.6415-0.12627-1.5152-1.2627-2.2728-2.3991-1.894-0.88388-0.63135-1.5152-2.2728-3.0305-5.8084-1.1364-1.389-0.63134-1.7678,0.63134-0.75761,0.75762v0.75761l0.37881,0.88389v1.6415,1.0102l-0.50508,0.3788-1.389-0.63134-0.88388-0.37881-1.1364,0.25254-1.5152,0.88388-1.5152,0.50508-1.1364-0.25254-0.88389-1.389-0.88388-0.63135-2.2728-0.88388-6.0609-1.1364-1.2627,0.25254-1.1364,1.1364-0.63135,1.5152-1.1364,0.37881-1.6415-1.389v-1.1364l1.0102-1.389,0.50507-0.75761-0.50507-1.0102-1.1364-1.0102-1.1364-1.0102-0.3788-0.75761,1.5152-1.2627,1.1364-2.5254,1.6415-1.0102,1.6415-0.3788,1.894-1.2627,0.88388-2.3991,1.2627-1.2627z","name":"Komi Republic"},"mu":{"path":"m217.31,136.92,1.1364-1.5152,1.5152-0.75761,2.9042,0,4.2932,0.12626,2.1466-0.50507,2.5254-1.6415,0.88388-2.0203,0.12627-3.5355,1.5152-3.4093,1.0102-1.0102,4.7982,0,2.3991-0.63134,1.0102-1.2627,1.7678-0.12627,2.3991,1.0102,3.0305,1.894,2.2728,1.894,2.6516,0,2.2728-0.25253,0.25254,2.3991,1.894,0.3788,1.7678,1.0102,0,2.2728,0,1.7678-1.0102,0.63134-1.5152-0.3788-0.75761-1.1364-0.25254-0.63134-0.88388,1.0102-0.25254,0.63135,0.50508,1.1364,1.1364,0.88388,0.50507,0.75762-0.3788,1.0102-1.0102,0.63134,0,0.75762,1.1364,1.2627,0.88388,1.5152,0.88388,1.7678,2.0203,2.1466,0.75761,1.7678,0,1.7678,0,1.1364-0.50507,1.1364-0.25254,2.0203-0.12627,5.5558,0,5.5558-0.75762,1.389-0.25253,1.894,0.63134,0.88389,0.63135,1.0102-0.12627,4.0406,0,3.5355-0.63135,1.389-1.7678,1.1364-0.88389,0.88388,0,1.0102-0.25254,0.88389-1.1364,0.88388-2.7779,0.75761-3.6618,0.12627-3.1567,0.50508-1.6415,0.37881-2.5254-0.50508-2.0203-0.75761-1.894-1.389-1.894-2.2728-1.7678-2.2728-1.1364-1.894-0.63135-2.2728-0.3788-2.3991-1.2627-2.6516-1.1364-2.0203-0.3788-1.6415-0.37881-3.9143,0-1.7678,0-1.389-0.88388-0.88389-0.12627-2.9042,0-2.1466,0.75761-1.5152,0.12627-1.1364,0-1.5152-0.88388,0-0.63135,0.88388-0.88388,1.389-0.75762,1.894-0.25253,0.63135-3.5355,0-2.6516-0.25254-0.75761-1.5152,1.389-2.0203,1.1364-0.75761,0.25254-1.0102-1.7678-2.2728-1.5152-1.7678-1.2627-2.7779-1.2627-1.2627z","name":"Murmansk Oblast"},"kl":{"path":"M216.94,136.91l-2.28,1.53,0.12,1.62-1,2.28-1.9,2.04-1.88,0.87-4.31-0.13-0.88,1-2.28,2.16h-2.91l-2.4,0.38-0.13,4.03-0.62,1.9-2.91,0.38-1.87,0.25,0.12,1.4,0.88,1.5-1.78,1.29-1.25,0.5-3.41-0.91-1.66,1.16-0.37,2.9-0.13,4.16-1.25,2.28-2.65,1.62-3.41,1.16-8.72-0.12-3.53-0.91-5.19-0.75-4.28-0.75,0.88,1.87-0.13,1.54,0.07,0.53-0.94,5.65-2.53,1.5-2.03,3.32-2.91,1.87-0.13,1.66,2.66,1.25,1.91,0.75,1,2.4,2.9,0.25,5.07-0.75,1.65-0.9,2.25,0.53,1.78,1.37,1.38-1.62,1.12-0.78,1.78,4.69,1.5,0.62,2.91,1.53,0.06,0.69-0.12,2.69,0.06,1.78-1.63,1.53,1,1.12,2.29,0.5,1.75-0.62,2.53-1,0.62-0.5,1.91,1.5,1,1.9,1.03,1.88,3.16,0.25,3.28-3.03,0.75-1.5,1.25-1.38,2.4-1.28,2.03-1.75,0.5-1.15-0.37-1.25-1.91-0.63-1-1.03,0.13-1.63,1.37-2.4,1.78-1.91,1.66-1.87,1.25-2.16,1.38,0.25,1.78,1.53h1.9l0.88-0.53,0.12-2,1.5-2.03,0.25-1.75-0.25-3.16-0.5-1.53,0.63-1.78,1.4-0.87,1.38-0.63,3.03-2.53,0.5-1.13,0.53-1.28h1.38l3.4-0.62,2.16-1,1.5-1.28v-1.88-3.4l0.25-2.54,1.03-0.87v-1.16l-0.12-2-0.78-1.15-2-0.38-1.41-0.37-0.63-0.88v-0.75l0.63-1.15,1.28-1,0.75-0.63-0.38-1.03-1.65-2.37-1.88-2.29-1.4-2.15-1.75-2.53z","name":"Republic of Karelia"},"vo":{"path":"m185.36,208.76c0.12627,2.5254-1.389,5.0508-1.389,5.0508l-1.5152,1.894s-0.3788,1.0102-0.3788,1.7678c0,0.75762,0.12626,1.389,0.12626,1.389s0.63135,1.389,1.894,2.1466c1.2627,0.75761,2.0203,2.7779,2.0203,2.7779l1.0102,1.894,1.5152,1.2627,1.2627,1.0102,1.1364,1.894,1.2627,0.37881,3.1567,0.50508,1.5152,2.2728,1.0102,1.894,1.7678,0.63135,0.25254,0.63135,1.0102,2.2728,1.2627,0.75761,2.6516,0.25254,1.5152,0.12627,0.50507,2.7779,1.2627,2.0203,2.7779,1.389,1.389,0.12627,1.0102-0.63134,1.389,0.12627,1.0102,0.50507,0.75761,1.0102-0.63134,1.5152-0.75762,1.389,0.25254,0.75762,1.2627,1.1364,0.75761,0.50508,1.0102,0.50507,0.3788,0.63135v1.0102l-1.5152,1.5152-2.0203,0.63135-2.0203,0.75761-4.2931-0.25254-1.2627,0.88389,0.25253,1.1364,0.88389,1.2627v2.6516,1.1364l-1.0102,1.1364-0.75761-0.63134-1.1364-1.0102-0.37881-1.5152-1.0102-0.12626-1.6415,1.0102-1.0102,1.0102h-1.7678l-3.0305-1.5152-2.1466-2.1466-2.0203-1.1364-1.894-1.6415-2.0203-2.7779v-1.894l-1.894-2.7779-2.5254-2.2728-1.5152-2.0203-1.2627-1.7678-0.63135,0.75761-1.6415,0.12627-1.6415-0.25254-2.2728-1.894-0.88388-0.50508-1.2627,0.63135-2.7779,1.7678-0.63135,0.37881-1.2627,0.12627-0.88388-0.50508-0.50508-1.2627-0.63134-1.894,0.25254-4.0406-0.50508-2.5254-0.50508-1.2627-1.2627,0.12627-1.2627,0.37881-0.88388-0.25254-1.389-1.2627-1.6415-1.7678-4.0406-1.0102-1.2627-1.1364-0.50508-1.0102,0.63135-2.0203-0.50508-0.88388-1.0102-0.75761-1.1364-0.63135-1.894-0.37881-0.25254-0.12627,0.50508-2.7779-0.50508-1.6415-0.63134-1.2627-0.88388-0.88389-0.37881-0.50507-0.12627-1.0102-0.25254-1.5152,0.63135-0.88388,0.75761-0.88388,1.389-0.25254h1.6415l0.88388,1.2627,1.0102,0.88388,1.1364-0.50507,0.25253-1.1364,1.2627-0.25254,1.1364-0.63135,0.75761-1.1364,0.12627-1.5152,3.283-3.6618,1.2627-0.88388h1.7678l2.0203-0.37881,1.389-0.75762,0.88388-0.63134h1.1364l1.5152,0.88388h1.2627l0.88389,0.75762,0.50507,0.88388,1.389,0.63134h1.1364l1.389-0.3788,1.5152-0.50508,1.1364-0.37881,0.63135-0.25253,0.88388,0.12627,1.0102,0.88388,1.2627,1.6415,0.50507,1.2627z","name":"Vologda Oblast"},"ar":{"path":"M391.06,151.03l-3.56,1.06-2.16,0.91-3.56,0.19-1.59,0.87s-1.26-1.07-1.97-1.25c-0.72-0.18-0.91,1.1-0.91,1.1l-1.78,2.65-2.69,1.63-3.03,0.87-2.31,1.78s-2.15,0.37-3.22,0.72c-1.07,0.36-2.5,0.19-2.5,0.19l-1.59,0.72,1.06,1.78-2.16,1.25,0.38,0.72,1.25,1.44,1.78,1.59,1.78,1.78,0.91,1.63,1.4-0.72,0.91-1.97,2.16-0.72,1.25-0.53,1.93-0.19,0.91-1.59h1.97l1.25,0.87,1.59-1.25,1.1-1.25,2.65-0.15,0.72-0.57,3.41,0.72,1.78-1.06,0.34-1.44,2.69-0.34s1.07-0.01,2.5-1.44l0.72,1.06,2.84-0.68s1.98-0.19,2.69-0.19,3.03-0.38,3.03-0.38h2.31l2.35,1.25,1.78,0.91,1.25-0.72,0.72-0.87,4.28,1.06,1.97-1.44,3.22,0.19,4.09-0.72,1.25-1.59,1.97-2.88s-1.26-0.89-1.97-1.25-2.69-1.44-2.69-1.44l-3.22,0.57-4.43,1.59-4.32-0.91-2.5-0.15-3.18-0.72-1.63-0.91-1.59-1.78-1.44,0.72-1.97,1.06-2.5-0.15-3.22-0.91-2.5-0.72zm-35.53,14.47l-2.5,0.53-1.78,1.63-2.5-0.38s-1.44-1.06-1.44-0.34v1.78l0.72,1.59-2.12,1.25-2.88,1.1-1.06,1.25h-2.16l-0.72-1.1-1.59-0.87-2.69,2.12-0.15,3.03,1.93,2.69,1.44,2.16s1.26,2.14,0.91,3.03c-0.36,0.89-4.28,2.5-4.28,2.5l1.06,2.5,1.25,1.59v1.97l2.31,0.53,2.88,1.97,2.12,2.31,1.97,0.38s1.06-1.07,1.06-1.78c0-0.72-0.15-4.48-0.15-5.38,0-0.89,1.59-8.37,1.59-8.37l0.34-1.44,4.13-2.69s0.88-1.07,2.31-1.97c1.43-0.89,4.66-3.03,4.66-3.03l1.78-1.4s0.71-1.64,0-1.82c-0.72-0.17-1.62-0.53-2.16-1.25-0.53-0.71-3.03-2.65-3.03-2.65l-1.25-1.44zm-132.28,14.34l-0.63,0.63-2.28,0.25-0.87-0.13-1.78,0.91v1.38l-0.63,1.65-1.15,0.75-0.13,1.38,0.91,0.78,0.87,0.87-0.12,1.25-1.25,1.28-1.66,1.5-1.65,0.13-1.38-1-0.62-1.53-1.41-2-1.25-1.03-2.03,0.53h-1l-2.41-1.66-1,0.38-1.66,2.15-1.37,2-1.66,1.78-1.25,2.66,0.38,1,1,1.28,1.78,0.25,0.12,1-0.12,1-2.78,2.41-2.16,0.87-1.87,3.03-2.53,2.53-2.91,0.5-1.13,0.13-0.5,0.91-0.28,1.87-0.87,2.16-1.75,2.03-0.13,1.87,1.25,2.79,1.5,1.28,2.04,3.53,3.78,4.15,1.28,0.75,3.15,0.38,0.38,0.65,1.37,1.38,1.66,2.53,1.38,0.5,0.5,1.66,0.9,1.5,3.28,0.5,1.63,0.25,0.78,1.4,0.37,2.13,0.75,1.15,2.41,0.88,1.5,0.75,1.28-0.5,1.13-0.25,1.37,0.75,0.91,1.66-1.03,1.25-0.13,1.53,0.66,1,1.25,0.75,1,1.03,1.03,0.62,0.75-0.37,1.25-0.25,1.41,0.5,1,1.37,0.5,0.91,0.24,2,0.26,1.03h0.65l0.88-0.16,0.87-0.5,0.63-0.37h1.03l0.75,0.75,0.62,0.91,0.88,0.25,1.4,0.25,1.88-0.5,1.41-0.5,1.37-1.79v-0.87l-0.37-0.66-0.26-0.5,0.26-1,0.5-0.5,2.78-1.28,2.4-1,1.66-1.12,1.87-0.78,0.5-0.75,0.13-1.38-0.75-1.53-1.13-0.87-2.15-0.13h-1.5l-1.53,0.5-1,0.75h-1.28l-0.63-0.12-1-1.13-1.53-0.37-0.75-0.38,0.25-1.53v-1.13l1.66-0.5,0.74-0.78,0.76-0.87,0.62-1.63,0.53-0.37,1.5-0.53,1.78,0.25,1-0.5-0.12-1.38-0.5-0.87-0.5-1.66,0.25-0.88,0.87-0.62,1-0.53,1.41-0.63,1.37-0.75,0.38-0.75v-0.5l-0.88-1.9-0.75-1.41-0.9-1.62-1-0.75-0.63-1.28,0.38-1.88,0.62-0.5h1.28l0.88,0.38,1,0.87,1.41,2.16,2.65,2.37,1,0.91s1.65,0.49,2.28,0.75c0.63,0.25,1.38,1,1.38,1l0.5,0.62,0.37,1.03,0.53,1,1,0.63,1.38,0.37h1.41l1.12,0.53,0.88,0.88,2.03,0.5h1.37l0.28,0.88,1,0.53,1,0.25,0.88-0.54,0.78-0.74-0.13-1.26-1.03-1.03,0.38-0.87,0.78-1,0.37-1.53-0.25-1-1.15-0.75-0.13-1.28,0.91-0.88,3.15-3.28,1.88-1.12,1.91-1.79,0.25-1.25-0.63-0.5-1.65-0.9-1.63-1-2.16-0.25-1.25,0.62h-1.4l-1.5-1.12-1.03-1.78-0.75-1.75-1.5-3.16-1.41-2.28-0.75-1.41-0.88-2.25-0.12-1.15-2.41,0.25-0.75-0.63-1.53-1.12s0.25-0.5,0.88-0.5,1.02-0.41,1.53-0.66c0.5-0.25,0.25-0.87,0.25-0.87s-0.37-1-0.88-1.76c-0.5-0.75-0.77-0.77-1.28-1.15-0.5-0.38-0.75-1.75-0.75-1.75l-1.25-0.41-2.03-0.5-1.66,0.13-1.5,0.53-1.9,0.12-0.88-0.65-1.62-1-2.03-0.13h-2.78-2.53l-1.63,0.75-0.91,0.75-0.37,1.66-1.13,1.37-1.12,2.04-1.28,0.87h-2.41c-0.63,0-1.75-1-1.75-1l-1.03-1c-0.51-0.51,0-2.03,0-2.03s0.13-1.53,0-2.16-1.5-1-1.5-1l-2.03-0.87s1.65-0.78,2.16-1.16c0.5-0.38,0.37-1,0.37-1v-2.28c0-0.63-0.25-2-0.25-2l-0.75-1.91zm110.16,1l-0.19,1.1,0.53,1.78,1.44,0.72,0.53-0.72v-1.63l-0.38-1.25h-1.93zm-28.22,6.19l-2.35,0.78-1.4,2.07-2.88,1.43-0.25,1.07,1.78,1.43,2.13,0.97,3.22-0.44,3.5-0.9,0.25-1.6-0.78-1.96-1.1-1.88-2.12-0.97z","name":"Arkhangelsk Oblast"},"tu":{"path":"m299.02,389.7,2.0536,0.80357,2.1428,1.1607,1.6072,1.3393,1.6071,1.5179,1.7857,0.71428,2.3214,0.17858,0.89286-1.0714,1.6071-1.875,0.53572-2.3214,0.625-2.1429,2.2321-1.7857,1.875-0.44643,1.25-2.5,1.6964-1.0714,2.9464,0.26786,1.6071-1.6072s0.625-2.3214,0.53571-2.6786c-0.0893-0.35714-0.80357-2.5893-0.80357-2.5893l-0.89285-1.875-0.625-3.3036-0.71429-2.2322v-1.7857l1.5179-1.9643,2.2321-2.5,1.4286-1.4286,3.125-0.26786,0.35714,1.4286-0.89285,1.6071-1.6964,1.6964-0.17857,1.25,2.5,0.35714,4.0178,0.35714,1.9643,1.6072,3.0357,1.7857,1.5179-1.25,2.9464-0.17857,2.1429,1.4286,3.3928,1.0714s2.5-0.98214,2.9464-1.1607c0.44643-0.17857,3.5714-0.44642,3.5714-0.44642l0.89286-0.98215-0.53572-1.0714-1.6964-1.25-2.9464-2.2321-1.0714-1.4286s-1.6964-0.44643-2.3214-0.44643-2.6786-0.80357-2.6786-0.80357l-0.17857-2.6786-0.26786-2.4107-1.3393-1.3393-0.44642-2.2321-0.53572-3.5714-0.35714-0.89286-2.4107-2.7679-1.1607-0.71428s-2.6786-0.26786-2.9464-0.26786h-5.0893l-0.98215-0.26786s-0.625-1.5178-0.625-1.875c0-0.35714-0.98214-1.5178-0.98214-1.5178l-1.875-0.35715-1.25,1.25-2.4107,1.875-2.1429,0.89286h-3.0357l-4.6428,0.0893-2.9464,0.26785s-1.4286,0.53572-1.7857,0.625c-0.35714,0.0893-4.375,0.0893-4.375,0.0893l-3.0357-0.0893-1.4286,0.35715-0.89286,1.5178-0.53571,2.3214-0.89286,1.3393-2.3214,0.71428-1.6071,0.53572-1.5179,0.35714-1.7857-0.17857-1.3393-0.625-1.4286,0.17857c-0.35714,0.17857-1.6964,1.0714-1.6964,1.0714l-1.1607,2.1429-0.35715,2.4107-1.6071,2.3214-2.1429,2.5893-0.98214,1.5179,0.26786,1.25,0.71428,1.3393,1.5179,1.25,1.25,1.6071,1.6964,1.875,1.0714,1.6964s3.0357,0.98214,3.0357,1.5179c0,0.53571,1.6964,2.9464,1.6964,2.9464l0.625,1.875,1.6071,1.4286,1.875,0.71428,1.0714,0.80357,1.4286,2.3214,1.0714,1.4286v1.6072z","name":"Tyumen Oblast"},"ne":{"path":"m260.27,198.54,1.6071-0.89286,1.4286-1.1607,2.0536-1.0714,1.1607-1.25,0.625-3.3929,1.1607-1.6071s1.4286-0.80358,2.4107-1.0714c0.98215-0.26786,2.3214-0.26786,2.6786-0.26786,0.35714,0,1.5178-0.98214,2.0536-1.5179,0.53571-0.53571,3.0357-2.5,3.0357-2.5l0.71429-1.0714v-2.2321l1.25-1.9643s0.89285,0.17857,0.98214,0.625c0.0893,0.44642,0.26786,1.5178,0.625,1.6964,0.35714,0.17858,1.875,1.4286,1.875,1.4286l1.6964,1.1607,0.98214,0.89286-0.0893,1.3393-0.625,1.4286-0.44643,1.7857v1.6964l-0.26786,1.0714-0.44643,0.80357-0.26786,1.25-1.25,0.71428-1.3393-0.625-1.25-0.98214-0.625-0.80357-2.3214-0.53572h-3.0357c-0.44643,0-2.1429,1.1607-2.1429,1.1607l-0.80357,1.4286,0.17857,1.0714s0.53571,0.89286,0.625,1.25c0.0893,0.35714-0.71429,1.1607-0.71429,1.1607l-0.89285,1.6072s-0.26786,1.1607-0.0893,1.4286c0.17857,0.26785,0.625,0.80357,1.1607,1.25,0.53572,0.44643,1.875,1.5178,2.1429,1.6964,0.26786,0.17857,1.875,0.89285,1.875,0.89285s2.3214,0.17857,2.8571,0.17857c0.53572,0,1.9643-0.26785,1.9643-0.26785s1.5179-0.98215,1.875-1.1607c0.35714-0.17857,1.9643-1.1607,1.9643-1.1607s1.0714-0.44643,1.4286-0.35714c0.35714,0.0893,1.3393,0.98214,1.3393,0.98214l2.3214,0.17857s0.35714-0.44643,0.71429-0.80357c0.35714-0.35714,0.53571-0.71429,0.98214-0.35714,0.44643,0.35714,1.875,1.3393,1.875,1.3393l1.7857,0.44643h5.0893l2.5893,0.0893s0.80357,0.80357,1.25,0.89285c0.44642,0.0893,3.3928,0.53572,3.3928,0.53572l1.5179,1.4286,0.71429,1.9643,1.1607,0.17858,0.71429-1.5179,0.89285-1.0714,1.875-0.17857,0.89286,0.53571,2.1429,0.17857,2.5893,0.44643-0.44643,0.80357-0.98214,0.80358-1.6964,0.625-0.80357,0.98214-0.71428,0.98214-1.6964,0.71429-0.26786,1.0714,1.3393,0.98214,1.25,0.53571,0.625,2.0536,0.71428,0.35715,1.6964-0.80357s1.3393-0.89286,1.6071-0.89286c0.26786,0,3.3036,0.53571,3.3036,0.53571l2.6786,1.3393,1.5178,1.3393,1.4286,0.89286,4.4643,0.17857,0.71429,0.71429,1.5178-0.26786,2.5893-0.35714,1.7857-1.3393,0.625-1.7857s0.53572,0.625,0.53572,1.1607c0,0.53572-1.6964,2.7679-1.6964,2.7679l-0.71429,1.7857v1.0714l-1.1607,1.1607-0.89286,0.625-0.44643,0.98214,0.44643,0.80357h1.4286l0.80357-1.6071,0.17858-0.53572,1.5178-0.0893,1.5179,1.25,2.3214,0.35714,1.1607-0.89286,1.3393-1.1607,0.53571-0.89286-0.71428-1.0714-0.35715-1.4286,1.5179-1.1607,0.71429-1.875-0.53572-1.6964-1.25-0.80357-0.71428-3.3929-0.26786-3.125s-0.26786-0.89286,0.0893-1.25c0.35714-0.35714,2.2321-1.6964,2.2321-1.6964l1.3393,0.17857,1.1607,1.4286,1.0714,1.9643,0.35714,2.1429-0.89286,3.3036,0.89286,1.0714,2.8571,2.4107,2.7679,2.8572,3.3929,2.5893,2.1428,3.3036,1.6964,3.3929,0.80357,1.875,0.17858,1.6071-1.0714,1.1607-0.98215,2.0536-0.98214,1.5179h-2.5c-0.44643,0-3.6607-0.17858-3.6607-0.17858l-2.1429,0.98215-2.7679,0.71428h-3.0357l-1.7857-0.17857-2.4107,1.875-3.0357,2.4107-1.6072,0.53571-2.7678-0.0893-2.0536-0.53571-4.2857-2.4107-23.036-13.929-7.6786-6.875-1.25-1.1607v-1.3393l-0.98214-0.625-2.4107,0.625-5.0893-0.44642-5.625-0.98215-5.1786-0.80357-3.125-0.26786-4.1071-2.3214-2.0536-0.44643-1.7857,0.625-1.7857-0.26786-1.5179-1.7857-4.2857-8.4822-0.98215-2.4107z","name":"Nenets Autonomous Okrug"},"om":{"path":"m358.39,368.89,0.71428,2.5-1.25,1.6071-1.25,1.9643,0.53572,1.6071,0.71428,1.9643-1.25,1.9643s-1.0714,1.25-1.0714,2.1429c0,0.89286,0.17857,3.0357,0.17857,3.0357l1.7857,1.6072,0.35714,2.3214-0.53571,3.3929-1.9643,0.89286-1.25,1.6071,0.71429,2.3214-0.35715,1.9643-3.9286,0.17857s-1.4286-0.89286-2.3214-1.0714c-0.89285-0.17857-3.3928,2.8571-3.3928,2.8571l-2.5,2.1429-0.89286,4.2857,0.53571,0.89286,1.9643,2.1429,0.35714,2.6786-1.6071,2.6786-1.0714,1.7857-0.17857,3.0357-2.5,2.1429s-2.3214,1.0714-3.0357,1.0714h-4.8214l-1.6072-0.71428c-2.1428,1.4286-3.75,0-3.75,0l-1.6071-0.71429-1.9643-0.35714h-1.0714l0.35714-1.7857,1.7857-1.0714,0.71429-1.4286-2.3214-1.25-2.1429-2.3214-1.9643,0.89285-0.89286-0.71428v-3.75l-1.4286-0.89286-2.8571,0.35714-2.8572-0.89285-0.89285-0.53572-0.17857-2.1428,2.1428-2.6786,0.71429-2.3214,0.35714-2.6786v-4.1071l0.71429-2.1429,1.4286-3.9286,1.6071-2.5,2.3214-0.53571,1.0714-1.25,1.0714-1.7857,1.6071-0.89285h2.6786l1.6071-1.4286,0.89286-3.9286-1.4286-3.2143-0.71429-3.0357-1.25-3.3928,0.35715-1.6072,4.4643-4.6428,1.0714-0.89286h2.6786l0.17857,1.6071-1.25,1.6072-1.7857,1.25-0.17857,1.4286,1.4286,0.35714,3.2143,0.35714,2.3214,0.17857,2.1429,1.4286,1.9643,1.4286,1.0714,0.35714,1.0714-0.71429,1.9643-0.35714,2.3214,0.35714,3.5714,1.6072h2.5l2.1428-1.0714h2.1429z","name":"Omsk Oblast"},"ht":{"path":"m329.64,260.32,0,3.75-0.53572,3.2143-1.6071,2.3214-2.3214,2.3214-0.89286,1.25,1.9643,1.9643,1.7857,2.3214,5,1.9643,4.8214,0.17857,3.5714,1.4286,2.3214,2.6786,0,1.4286-2.1429,1.7857,1.4286,1.4286,2.3214,2.8572,1.9643,1.0714,2.1428-1.0714,1.7857-0.89286s1.6071,0.71429,1.9643,0c0.35715-0.71429,0.89286-2.1429,0.89286-2.1429l1.6071,2.1429,1.4286,2.8571,1.9643,1.6072s0.35714,2.1428,0.35714,2.8571v4.6429l1.9643,3.3928s0.35714,0.17857,0.71429,0.89286c0.35714,0.71429,0,2.1429,0,2.1429l1.0714,1.25,2.5,0.53571,3.75,0.71429,1.4286,0.89285s2.8571,2.1429,3.5714,2.6786c0.71429,0.53571,1.25,1.6071,2.1429,1.9643,0.89286,0.35714,3.5714,0.53572,3.5714,0.53572l2.8571,0.35714,0.89286,1.0714s0.35714,1.6071,0.71428,2.6786c0.35715,1.0714,1.4286,1.7857,1.4286,1.7857l3.0357,0.17857,1.7857,0.53572,0.35715,1.9643,0.35714,1.4286,1.0714,2.5c1.9643,0.17857,2.5,0.17857,3.5714,0.17857s3.3928,1.0714,3.3928,1.0714l1.9643,0.71428,2.8571,0.35714,2.8572-1.0714,3.2143-1.9643,3.0357,0.53571,1.9643,2.6786s0.35714,1.7857,1.0714,2.1428c0.71429,0.35715,2.8571,0.53572,2.8571,0.53572l2.3214,1.6071,0.71429,2.3214,1.9643,0.71428,2.6786-0.89285,1.9643,1.6071,1.0714,3.0357v2.3214l-0.35714,1.6072-0.53572,1.9643,3.0357,1.9643,2.5,1.7857,0.35714,2.3214v1.0714l-3.75,1.7857-2.6786,0.53572-3.2143,0.17857-3,0.15-1.61-1.07-1.7857-0.71428-2.3214,0.35714-2.3214,1.6071-2.6786,1.0714-2.1429-1.9643s-2.8571-0.35714-3.5714-0.35714c-0.71429,0-2.3214-1.7857-2.3214-1.7857l-0.89286-1.25-3.9286,0.17857h-3.5714l-1.6071-2.5s-1.25-0.89286-2.1429-0.89286c-0.89286,0-4.4643-1.25-4.4643-1.25l-2.5-2.3214h-1.25c-0.71428,0-2.3214,1.25-2.3214,1.25l-2.5,2.1429-1.7857,2.6786-2.8571,2.5-1.6071,3.3929-4.4643,1.6071-3.5714,0.89286-0.35714,2.1429-0.71429,2.1428-2.6786,1.25h-2.8571l-5.8929-5.5357-3.9286-0.89286-1.0714-1.4286-0.53571-4.1071-1.0714-1.25-1.0714-5.3572-0.53571-1.7857-3.5714-3.2143h-5.5357l-3.0357-0.35714-1.9643-2.8571-1.6071-0.53572-4.4643,3.0357-3.3929,0.71428h-5.1786l-5,0.71429-4.2857,0.53571h-3.5714l-1.4286-0.17857-0.53571-2.8571-0.35714-3.2143,0.89285-3.2143-0.89285-3.2143-2.3214-2.1428-1.0714-0.89286-1.0714-1.0714,1.25-2.6786,1.4286-2.3214-0.17857-2.1429-0.71429-3.2143,0.71429-5.5357,1.4286-1.7857,1.4286-2.1429-0.71428-2.3214-1.0714-3.5714-1.9643-2.6786-2.3214-3.3928-3.3928-2.1429-1.7857-1.9643-1.0714-2.6786,3.3929-2.1429,1.6071-2.6786,2.3214-4.8214,2.1429-2.6786,2.5-1.9643,3.5714-3.3929,1.6071-1.7857,1.7857-3.3929-0.17858-1.7857,0.89286-1.0714,2.1429-1.0714,1.4286-1.9643,1.6071-1.0714,1.25,0.17857,0.89286,2.3214,0.35714,1.0714,1.4286,0.35714,2.5-0.71428,3.0357-1.6071,1.4286-1.25,1.25-1.0714,2.5-0.53572z","name":"Khanty–Mansi Autonomous Okrug"},"ya":{"path":"m366.25,234.25,1.4286,2.6786,1.6071,1.7857,1.6072,2.6786,1.0714,3.0357,0.89286,2.8572,3.0357,0.17857,1.7857-1.6072,1.4286-1.25-0.53571-3.2143s-0.89286-1.4286-0.53572-2.3214c0.35715-0.89286,1.7857-2.5,1.7857-2.5v-2.3214l-2.1429-1.6071-1.25-2.5s0.71429-1.6071,1.4286-1.9643c0.71429-0.35714,3.75-2.3214,3.75-2.3214s1.6071-3.75,1.9643-4.4643c0.35714-0.71429,0.35714-4.8214,0.35714-4.8214l0.89286-1.4286,7.5-2.1429,4.8214-3.5714,5.7143-6.0714,3.2143-2.1429,2.1428-0.71429,1.7857,2.3214,3.3928,0.35714,1.7857,1.25,1.0714,2.6786,0.17857,1.7857-0.89286,3.75-2.1429,2.6786-2.3214,2.8571-3.0357,1.6072-1.25,1.0714-0.35714,1.9643,1.0714,2.1429,0.17857,2.8571-0.89286,2.8571-2.1429,2.6786-1.7857,3.2143-2.6786,4.4643-1.25,3.5714-0.89286,2.1429-0.17857,2.5,0.35714,2.6786,0.71429,2.3214-0.71429,1.4286-3.0357,2.1429-1.0714,3.2143-0.89286,3.2143h-3.2143l-2.3214,1.25-2.1429,3.3929-3.5714,0.53571-2.3214,1.25-1.4286,1.4286h-3.5714l-1.4286-1.0714-1.0714-2.6786-0.71429,0.53572v1.6071l-1.9643-1.4286-0.71428-1.9643-1.0714,0.71429-0.17857,1.9643,1.7857,2.1428,2.5,2.1429,2.5,1.25,3.2143,1.0714,2.1429,1.25,2.1428-0.89286,3.5714-1.7857,3.0357-0.71429,3.75-1.0714,2.3214-3.0357,3.2143-2.6786,3.3929-1.6072,2.1428-1.7857-0.17857-2.1429-0.89286-2.3214-0.17857-1.7857,2.1429-2.1429,4.2857-0.89285h3.3929l1.4286,1.4286,1.25,3.0357v2.8571,3.0357l-1.6071,1.4286-1.25,2.5,0.17857,3.5714,1.7857,1.25,3.2143,0.71428,2.1429,2.8572,1.9643,3.2143,0.53572-0.71428-0.53572-4.1072-2.5-3.2143-3.75-1.0714v-2.8571l2.3214-3.0357s1.7857-0.35714,1.9643-1.0714c0.17857-0.71428,0.17857-3.5714,0.17857-3.5714l-0.89286-3.9286-2.6786-2.6786-2.6786-3.2143-0.89286-1.4286h-2.1428s-0.53572,1.25-1.4286,1.25c-0.89285,0-2.6786-1.25-2.6786-1.25l-1.6071-1.0714-0.53571-2.5,1.4286-3.75,2.3214-3.2143,2.1428-2.6786,3.0357-1.25,0.17857-4.4643-0.17857-3.0357v-3.0357l0.17857-2.3214,1.7857-2.3214,1.4286-1.4286,2.1429-0.35715,3.2143-0.53571,2.3214-2.5,1.7857-1.0714,1.25,2.1429-1.9643,2.3214-0.89285,1.4286-1.0714,4.4643-1.25,2.5,1.25,1.7857,2.6786,2.1429h2.8571l1.4286,2.1428,2.3214,2.5,1.7857,0.35715-1.4286-2.1429v-2.5s-1.25-1.25-1.9643-1.6071c-0.71429-0.35715-3.5714-2.8572-3.5714-2.8572l-1.25-3.5714-0.17857-1.4286s1.9643-0.71428,2.6786-0.71428c0.71429,0,3.2143,0.89285,3.2143,0.89285l0.89285,1.7857,1.6072,0.17857,1.25-0.71429-0.35715-1.9643,0.17858-1.9643,1.4286-0.35714,1.6071,0.71429,1.7857,1.4286,1.25,1.0714,0.89286,1.7857-0.35714,1.7857-2.3214,2.5-3.0357,1.25,1.0714,1.4286,2.6786,2.1428,0.35714,2.8572,0.17857,3.3928-0.71429,2.6786-2.5,1.4286-2.6786,1.4286-3.5714,1.7857-2.1428,2.1429,0.35714,2.6786,1.4286,2.5,1.25,2.5,1.6071,1.0714h3.3929,2.5l1.7857,1.6071,0.53571,3.0357,0.17857,3.3928v2.8572l-1.9643,3.2143-1.7857,2.5h-2.6786l-0.71429,0.53572,0.53572,1.9643,0.71428,1.7857-0.53571,2.5-0.89286,1.25,2.3214,3.3928,0.53572,1.7857,0.35714,1.7857-1.25,1.7857-1.0714,1.25,0.89286,2.1428-0.17857,2.5-1.6072,1.6072,1.6072,1.7857,2.1428,1.9643,1.6072,1.4286-0.17858,3.3928-1.4286,2.3214-0.17857,2.6786,2.3214,2.1429,4.6429,0.89286,0.89285,1.4286-1.4286,2.1429-0.53571,3.3928-0.89286,2.3214-2.6786,1.4286s-0.89286,0.53572-1.6071,1.0714c-0.71429,0.53572-1.7857,2.8572-1.7857,2.8572l1.9643,1.7857,0.17857,2.3214-1.4286,2.1429-1.25,2.5-2.6786,2.3214-2.8572,2.8572-0.89285-1.7857-1.6072-2.1428-1.7857-1.0714-1.9643,0.71428-1.9643-0.71428-0.71429-1.6072-1.25-1.25-2.5-0.89285-2.1428-0.89286-0.71429-1.6071-0.89286-1.7857-1.4286-1.4286-2.8571-0.17857-2.5,1.4286-2.5,1.0714-2.6786,0.17857-4.1072-1.6071-3.5714-0.35714-2.1429-0.17858-0.89286-1.9643-1.0714-2.3214v-1.4286l-3.3928-0.71429-2.3214-0.53571-0.89286-2.5-0.71429-2.3214s1.4286-0.17857-1.0714-0.35714-5.5357-1.0714-5.5357-1.0714l-1.4286-0.53572-3.2143-2.5-2.5-1.6071-2.8572-1.0714-3.2143-1.25-1.25-0.89285-0.17857-2.1429-2.8572-3.9286,0.17857-6.7857-1.25-1.7857-2.3214-2.8571-1.0714-2.1429-0.53572-0.53572-1.0714,1.25-0.53571,0.71429h-1.4286l-2.6786,0.89286-1.25,0.35714-1.6072-0.35714-2.1428-2.3214-1.7857-1.6071,0.53572-0.89286,1.4286-1.6071-0.35714-1.7857-2.5-2.3214-3.0357-1.4286-4.2857,0.35714-3.0357-1.25-2.6786-0.89285-3.3929-4.2857,2.3214-2.5,2.5-3.75,0.17857-5.3571,0.35715-1.4286,3.75-1.0714,2.6786-2.5,1.4286-1.4286h3.75,3.3929l3.9286,0.53571,1.7857-1.25,3.5714-1.6071,3.3929-0.53571,2.5-1.25,2.3214-1.25,0.35714-2.8572-2.1429-2.3214-0.71428-1.25,0.53571-1.6071,2.3214-1.4286,0.35714-1.25,1.92-2.87z","name":"Yamalo-Nenets Autonomous Okrug"},"kr":{"path":"M501.66,122.41c-0.45,0.04-1,0.37-1,0.37-0.9,0.72-1.25,0.77-0.94,1.13,0.31,0.35,0.19,0.55,0.9,0.78,0.72,0.22,0.91,0.49,1.44,0,0.54-0.49,0.77-1.24,0.41-1.69s-0.37-0.64-0.81-0.59zm11.56,0.65c-0.22,0.02-0.44,0.11-0.6,0.38-0.31,0.53-0.49,1.57-0.62,1.84s-0.2,0.74-0.78,0.88c-0.58,0.13-1.39,0.54-1.75,0.09s-1.03-1.51-1.25-1.69-1.04-0.74-1.13-0.03c-0.09,0.72,0.19,1.51,0.19,1.91s-0.18,0.99-0.4,1.12c-0.23,0.14-1.06,0.25-1.29,0.56-0.22,0.32-0.62,0.49-0.62,1.16s-0.27,1.67-0.31,1.94c-0.05,0.27-0.32,0.26-0.63,0.75s-1.09,1.87-1.09,1.87,0.89,0.62,1.15,0.85c0.27,0.22,0.42,0.77,0.38,1-0.05,0.22-0.13,1.05-0.53,1.19-0.4,0.13-1.43,0-1.78-0.13-0.36-0.13-1.01-0.48-1.5-0.44-0.49,0.05-1.01,0.23-1.19,0.63s-0.71,0.38-0.13,1.18c0.58,0.81,0.87,1.53,1,1.76,0.14,0.22,0.29,1.51,0.07,1.87-0.23,0.36-1,1.13-1.22,1.53-0.23,0.4-0.44,0.71-0.22,1.16,0.22,0.44,0.66,0.8,1.15,0.94,0.5,0.13,3.66,0.71,3.66,0.71s0.28-0.36,0.81-0.71c0.54-0.36,1.36-0.77,1.85-0.41s0.52,0.8,0.65,1.25c0.14,0.45,0.41,2.02,0.5,2.37,0.09,0.36,0.49,0.58,0.94,1.16s1.59,1.37,2.22,1.59c0.63,0.23,1.05,0.55,1.72,0.6,0.67,0.04,2.85,0.82,2.94,1.09s0.31,1,0.31,1,0.54,0.52,0.81,0.56c0.27,0.05,2.22,0.19,2.22,0.19,1.38-0.76,2.23-0.8,2.5-0.94,0.27-0.13,0.84-0.03,1.37-1.06,0.54-1.03,0.76-1.35,0.63-2.06-0.13-0.72-0.34-0.93-0.87-1.6-0.54-0.66-1.5-1.24-1.1-1.56,0.4-0.31,1.56-0.8,1.88-1.15,0.31-0.36,0.54-1.32,0.4-2.35-0.13-1.02-0.15-2.5-0.47-2.9-0.31-0.41-0.73-0.92-1.4-1.19s-1.23-0.67-1.81-0.53c-0.59,0.13-1.92,0.25-2.19,0.03s-0.62-0.83-0.85-1.5c-0.22-0.67-0.5-1.13-0.5-1.53s1.16-3.63,1.16-3.63,0.71-0.29,0.84-0.56c0.14-0.27,0.36-0.76,0.22-1.66-0.13-0.89-0.39-1.55-1.28-2.09s-2.09-1.72-2.09-1.72v-0.97c0-0.35-0.15-1.73-0.28-2-0.14-0.27-0.48-0.72-0.97-0.72-0.25,0-0.5-0.05-0.72-0.03zm17.72,22.91c-0.13,0.02-0.25,0.07-0.35,0.19-0.4,0.44-0.72,1.12-0.9,1.34s-0.51,0.09-0.91,0-0.89-0.43-1.16-0.03c-0.26,0.4-0.67,0.74-0.71,1.19-0.05,0.44,0.09,1.75,0.09,2.46,0,0.72,0.09,1.8,0,2.6s-0.2,1.3-0.78,1.66c-0.58,0.35-0.91,0.4-1.31,0.93-0.41,0.54-1.13,1.25-1.13,1.88,0,0.62,0.06,1.45-0.66,2.03-0.71,0.58-1.14,0.56-0.96,1.4,0.17,0.85,0.22,0.93,0.84,1.38s2.79,0.63,3.28,0.5,1.26-0.77,1.66-1.22,1.61-0.99,2.28-1.12c0.67-0.14,1.17-0.08,2.16-0.13,0.98-0.04,1.54-0.39,2.03-0.65,0.49-0.27,0.54-0.54,1.43-0.54,0.9,0,1.74,0,2.1-0.31,0.35-0.31,1.35-1.19,1.62-1.5s0.88-1.05,0.97-1.5,0.18-1.3,0-1.75,0.15-1.15-1.19-1.28-1.57,0.07-1.84-0.38c-0.27-0.44-1.03-0.88-1.03-1.37s0.08-1.02-0.19-1.37c-0.27-0.36-0.79-0.81-1.28-0.72s-1.31,0.58-1.53,0.62c-0.22,0.05-0.71-0.09-0.85-0.4-0.13-0.32-0.21-1.11-0.21-1.91s-0.25-1.63-0.25-1.63c-0.34-0.13-0.83-0.43-1.22-0.37zm5.22,20.03c-0.62,0.05-1.16,0.75-1.16,0.75s-1.62,1.95-2.16,2.84c-0.53,0.9-0.86,1.08-1.93,1.25-1.08,0.18-1.82,1.63-1.82,1.63s-0.51,1.23-0.68,2.12c-0.18,0.9-1.25,3.07-1.25,3.07v1.93l0.87,1.63s1.6,1.05,1.78,2.12c0.18,1.08-2.12-0.68-2.12-0.68s-2.14-0.73-3.03-0.91c-0.9-0.18-1.64,0.01-3.07,0.19-1.42,0.18-1.25,0.34-1.25,0.34l0.72,1.63s1.61,1.4,1.25,2.65c-0.35,1.25-1.4-0.53-1.4-0.53l-1.97-0.87s-1.98,0.16-2.88,0.87c-0.89,0.72-1.25,0.91-1.97,0.91-0.71,0-1.59-0.71-2.12-1.78-0.54-1.08-0.91-0.91-1.63-1.44-0.71-0.54-3.2,0-4.09,0s-2.32,1.79-3.75,1.97-1.78,0.53-1.78,0.53l0.34,2.12-1.97,1.1-2.12,0.53-2.16,0.53c-0.71,0.18-2.12-0.19-2.12-0.19l-1.97-0.34-1.44,0.87-0.53,0.57-2.84,0.15-2.16,0.91s-2.49,2.13-4.09,2.31c-1.61,0.18-0.19,0.53-0.19,0.53s1.06,0.91,1.06,1.63c0,0.71-0.7,0.87-0.87,1.4-0.18,0.54-1.45-0.33-2.35-0.68-0.89-0.36-1.25,0-1.25,0s0.2,1.04,0.38,1.93c0.18,0.9,1.06,1.28,1.06,2.35s-0.19,2.12-0.19,2.12,0.53,2.69,0.53,3.41v2.69c0,0.89-0.87,1.59-0.87,1.59s-1.25,0.72-3.03,0.72c-1.79,0-0.91-0.72-0.91-0.72l0.72-0.91-0.53-1.4-1.97-0.38-2.31,1.25-1.78-0.53h-3.22-3.94c-1.43,0-1.95-1.07-2.84-1.25-0.9-0.18-2.88-0.34-2.88-0.34s-2.14-0.02-3.03,0.34-1.97,1.06-1.97,1.06v3.07,3.03s-1.6,0.69-1.78,1.4c-0.18,0.72,0.01,2.68,0.19,3.75,0.18,1.08,1.05,0.72,2.12,1.25,1.07,0.54,2.16,1.25,2.16,1.25l0.53,0.57,0.34,1.78s0.57,1.94,0.57,2.65c0,0.72,1.25,1.97,1.25,1.97s0.68,1.63,0.68,2.35c0,0.71-0.51,1.22-0.87,1.93-0.36,0.72-0.73,1.61-0.91,2.5-0.18,0.9,0,2.16,0,2.16l0.38,2.84s-0.2,2.88-0.38,3.6c-0.18,0.71-0.89,1.42-1.78,1.78s-1.25,2.12-1.25,2.12,0.01,2.7,0.19,3.6c0.18,0.89,0.88,1.42,1.59,1.78,0.72,0.36,1.25,1.78,1.25,1.78l-0.87,1.78-1.78-0.34-1.44-1.78-0.91-1.82v-2.5s-0.54-1.76-1.97-2.65c-1.42-0.9,0.19-1.63,0.19-1.63s1.08-1.25,1.44-1.97c0.36-0.71,1.06-1.78,1.06-1.78s1.8-1.6,2.16-2.5c0.35-0.89-0.38-1.4-0.38-1.4l-1.06,0.68-1.78,1.82-1.78-0.91s0.69-1.25,0.87-1.78c0.18-0.54,0.54-1.79,0.72-2.5,0.18-0.72,0.35-1.6,1.06-2.31,0.72-0.72,2.35-0.19,2.35-0.19l1.25-1.25v-1.63l-1.1-1.59s-1.4-0.17-3.9-0.34c-2.5-0.18-0.72-1.25-0.72-1.25l-0.72-1.82s-0.72-1.76-1.44-2.12c-0.71-0.36-1.94-3.04-2.65-3.75-0.72-0.72-1.1-1.44-1.82-2.16-0.71-0.71-2.11-1.78-3.18-2.5-1.08-0.71-1.97-1.4-1.97-1.4l-1.63,0.34s-1.05,1.07-0.15,2.5c0.89,1.43,1.06,1.44,1.06,1.44l1.25-0.28,0.97,0.18,1.22,0.5,1.15,1.07,1.06,0.71,0.91,1.07,0.53,0.9,0.1,0.94-0.6,1.63-1.68,1.84-1.29,0.81-1.93,0.88,0.81,1.15s2.04,1.71,2.22,1.85c0.18,0.13,0.69,0.9,0.69,0.9l0.31,2.85,0.09,2.59s-0.33,2.1-0.37,2.28c-0.05,0.18-0.63,0.88-0.63,0.88l-7.09,3.97-1.44,0.9-1.25,0.94-0.66,0.81s0.3,2.37,0.35,2.6c0.04,0.22,0.64,1.18,0.69,1.4,0.04,0.23,1.28,2.69,1.28,2.69s1.15,1.2,1.46,1.69c0.32,0.49,2.16,0.31,2.16,0.31h3.44c0.4,0,1.34,0.5,1.34,0.5s1.3,0.98,1.35,1.16c0.04,0.17,0.37,1.31,0.37,1.31l0.38,3.34s0.09,3.42,0.09,3.69-0.5,1.56-0.5,1.56l-0.34,1.22c-0.04-0.01-0.07-0.03-0.1-0.06l-1.15,2.06-1.82,1.69-1.68,0.28-1.6,0.28,0.16,1.41s1,1.98,1,2.34-0.01,1.68-0.19,2.13c-0.18,0.44-0.81,1.68-0.81,1.68l0.47,1.19,1.15,1.69,0.88,2.41,0.47,1.68-1.16,1.97-1,1.63,0.72,1.93s0.08,1.53-0.09,1.97c-0.18,0.45-1.07,1.16-1.07,1.16l-0.43,1.19s4.1,3.63,5,4.53c0.89,0.89,0.15,1.52,0.15,2.06s-0.72,2.5-0.72,2.5l-1.25,2.22,0.1,1.87s1.54,1.46,1.72,1.82c0.17,0.35,1.68,0.78,2.22,0.87,0.53,0.09,2.78,0.38,2.78,0.38l1.25,1.31-0.19,0.81-1.16,1.63-0.72,3.28s-0.8,2.07-1.15,2.34c-0.36,0.27-1.44,1.16-1.44,1.16l-2.22,1.15-1.72,2.41,0.38,0.97,1.34,1,0.25,1.78-0.81,1.78-1.25,2.78-1.5,1.41-2.31,2.34-1.72,1.6-1.5,2.25s-0.9,2.92-0.81,4c0.08,1.07,0.96,0.72,0.96,0.72s1.62,1.07,2.16,1.34,1.51,0.99,1.78,1.34c0.27,0.36,1,1.24,1,1.69v1.53l-0.81,0.88-1.25,0.81-3.41,1.25-1.69,0.34-2.4-0.25s-1,0.43-0.91,0.78c0.09,0.36,0.72,1.63,0.72,1.63s0.45,1.24,0.63,1.69c0.17,0.44,0.27,0.88,0.72,1.06,0.44,0.18,0.09,2.97,0.09,2.97s-0.89,2.3-1.16,2.75c-0.27,0.44-0.46,1.25-0.37,1.87,0.09,0.63,0.72,1,0.72,1s1.7,0.69,2.06,0.78,2.94,1.1,2.94,1.1,3.13,0.72,3.84,0.72,2.58,0.06,3.56,0.15,2.5,1,2.5,1,1,0.87,1.53,1.41c0.54,0.53,0.25,4.64,0.25,5s2.88,0.19,3.5,0.28c0.63,0.09,2.32,0.81,2.32,0.81s0.43,1.33,0.43,1.69-0.43,1.88-0.43,1.88l-1.78,0.9-3.47,1.5-0.57,1.06s-1.13,4.74-1.4,5.19,0.53,1.88,0.53,1.88l1.5,0.62,2.25,1.06s3.47,2.25,4.09,2.79c0.63,0.53-0.09,0.96-0.09,0.96l-0.97,1.82-5.44,4.72-0.72,1.96-0.18,1.5s-0.44,3.58-0.44,3.94,0.34,1.53,0.34,1.53,1.81,1.15,2.25,1.5c0.45,0.36,1.88,1,1.88,1l0.72,1.41s0.79,1.54,1.06,2.34c0.27,0.81-0.72,0.97-0.72,0.97l-3.56,2.94-1.97,0.91s-1.35,1.33-1.44,1.87,0.81,0.97,0.81,0.97l0.97,1.44,1,1.34s1.95,0.73,2.75,0.91c0.81,0.17,1.63-0.57,1.63-0.57s1.42-1.95,2.4-2.22c0.99-0.26,0.53,0.46,1.07,0.72,0.53,0.27,1.96,0.61,2.59,0.88s2.22,1.34,2.22,1.34l0.81,2.06,1.78,7.41,0.82,2.5-1.26,4.13s0.1,2.05,0.19,2.4c0.09,0.36,0.8,1.24,1.07,1.6,0.26,0.35,0.43,2.15,0.43,2.15l-0.97,1.35-2.4,1.5-1.1,1.78s-2.3,3.32-2.65,3.59c-0.36,0.27-2.06,1.14-2.6,1.41-0.53,0.27-2.06,1.44-2.06,1.44s0.27,1.06,0.63,1.15c0.35,0.09,0.53,2.16,0.53,2.16l0.81,1.06,1.88-0.44,3.21,0.78,2.5,0.91s1.25,0.88,1.79,1.06c0.53,0.18,3.4-0.44,3.4-0.44s5.87-2.32,6.31-2.59c0.45-0.27,1.72-1.06,1.72-1.06s2.5-1.89,3.03-2.25c0.54-0.36,3.74-2.14,4.1-2.41,0.35-0.27,1.44-1.78,1.44-1.78l0.9-2.12s0.16-1.99,0.25-2.44,0.53-1.5,0.53-1.5l0.72-1.25,2.16-0.19,3.12,0.44,2.32,0.19s3.57,0.1,4.37-0.35c0.8-0.44,0.45-0.72,0.63-1.34,0.17-0.63-0.27-0.9-0.63-1.35-0.36-0.44-1-1.33-1.53-1.78-0.54-0.44-1.25-1.15-1.25-1.15s-2.31-4.22-2.31-4.75c0-0.54,0.81-1.15,2.15-1.69s3.91-0.97,3.91-0.97l2.06-1.19-0.09-2.65,0.47-1.78s1.16-2.8,1.25-3.07c0.09-0.26,1.51-2.93,1.68-3.56,0.18-0.62,0.62-1.79,1.07-2.59,0.44-0.81,1.62-1.68,2.15-2.03,0.54-0.36,1.68-1.91,2.13-2.44,0.44-0.54,1.09-2.22,1.09-2.22l-0.19-4.09s-2.13-2.42-2.4-3.22c-0.27-0.81,0.07-1.43,0.34-1.78,0.27-0.36,1.61-1.88,1.97-2.5,0.36-0.63,0.81-2.53,0.81-2.97,0-0.45,0.98-1.5,1.88-2.13,0.89-0.62,2.83-0.18,3.28,0s1.09,0.81,1.72,1.35c0.62,0.53,3.28,0.68,3.28,0.68s1.07-1.42,1.25-1.87,0.98-1.77,1.25-2.22,1.53-1.07,2.25-1.16c0.71-0.09,1.69,0.63,1.69,0.63s0.97,1.78,1.15,2.31c0.18,0.54,1.18,1.61,1.53,1.97,0.36,0.36,1.26,1.8,1.35,2.16,0.09,0.35,1.06,0.33,2.22,0.15s0.09-1.4,0.09-1.4v-2.16s-0.62-2.16-0.62-2.78c0-0.63,0.71-1.78,0.71-1.78s2.5-0.8,3.03-1.06c0.54-0.27-0.08-1.17,0.1-1.97,0.18-0.81,1.33-1.7,1.69-1.88,0.35-0.18,2.96-0.61,3.4-0.87,0.45-0.27,1.41-1.25,1.41-1.25l0.62-2.69,0.28-2.88s-0.02-0.11-0.03-0.12c0.09-0.06,0.32-0.22,0.32-0.22l1.31,0.19s0.6-0.58,1.31-0.94c0.72-0.36,0.79,0.03,0.97,0.03s0.68,1.11,0.81,1.47c0.14,0.36,0.36,1.26,0.41,1.53,0.04,0.27,1.38,0.68,1.56,0.72s1.55,0.47,1.81,0.56c0.27,0.09,1.66,1.08,1.97,1.44,0.32,0.36,1.04,0.45,2.38,0.94s1.53-0.28,1.53-0.28l0.65-0.63s0.23-1.4,0.32-1.94c0.09-0.53,0.72-0.87,0.72-0.87s1.51-1.22,1.87-1.63c0.36-0.4,0.5-0.87,0.5-0.87s0.34-2.99,0.16-3.13c-0.18-0.13-1.38-0.71-1.78-0.84-0.41-0.13-1.6-1.46-2-2.13-0.41-0.66,0.3-1.16,0.43-1.43,0.14-0.27,1.41-1.06,1.63-1.28,0.22-0.23,1.06-0.78,1.59-1,0.54-0.23,0.27-2.9,0.22-3.35-0.04-0.44-0.7-0.44-1.81-0.62-1.12-0.18-1.97-0.85-1.97-0.85s-1.52-1.52-2.19-2.28-0.22-2.76-0.22-3.03,0.17-4.1,0.13-4.9c-0.05-0.81,0.54-1.63,0.72-1.85s2.37-0.49,2.59-0.53,1.9-0.99,2.35-1.34c0.44-0.36,0.59-1.19,0.59-1.19s-0.37-1.3-0.5-1.75c-0.14-0.45,0.72-1.65,1.03-1.88,0.31-0.22,1.91-1.37,1.91-1.37s1.07-6.86,1.25-7.13c0.17-0.26-0.32-1.59-0.32-1.59s-1.19-3.62-1.28-3.84c-0.09-0.23-0.68-1.65-0.5-2.32s1.27-1.02,1.41-1.25c0.13-0.22,0.07-0.97-0.16-1.15-0.22-0.18-1.03-1.16-1.03-1.16s0.58-3.41,0.63-3.81c0.04-0.4,0.28-1.69,0.28-1.69l1.22-0.84s3.79-0.07,4.06-0.07,2.03-0.79,2.44-1.06c0.4-0.27,0.13-1.66,0-1.84-0.14-0.18-1.19-1.94-1.19-1.94h-2.28l-2.5,0.06-2.1-0.43-1.03-0.41s-2.49-0.25-2.72-0.25c-0.22,0-1.5-0.16-1.5-0.16l-0.65-0.25s-0.13-1.6-0.13-1.87,0.48-0.55,1.07-0.91c0.58-0.35,0.93-0.94,0.93-0.94s-0.17-0.98-0.43-1.34c-0.27-0.36-0.1-0.97-0.1-0.97s2.29-2.76,2.38-2.93c0.09-0.18,0.62-1.04,0.62-1.04s0.89-1.56,1.06-2.18c0.18-0.63-0.59-1.16-0.59-1.16s-3.42-4.04-3.78-4.44-1.14-1.64-1.31-1.9c-0.18-0.27-0.91-1.24-1-1.69s0.31-1.41,0.31-1.41l1.09-3.47-0.56-1.06s-1.07-0.96-1.16-1.09c-0.09-0.14-1-0.75-1-0.75s-0.63-0.55-0.5-0.91c0.14-0.36,1.36-0.56,1.63-0.56s2.31-0.69,2.31-0.69,1.39-0.56,1.56-0.78c0.18-0.22-0.03-1.16-0.03-1.16s-1.56-17.7-1.56-18.06-0.65-1.56-0.78-1.78c-0.14-0.22-2.19-2.34-2.19-2.34l-0.72-5.16h0.06s1.85,0.06,2.47,0.06c0.63,0,0.97-0.84,0.97-0.84l2.5-2.06,1.53-1.38s0.57-0.52,0.88-0.56c0.31-0.05,1.26,0.58,1.44,0.62,0.17,0.05,1.47,0.6,1.47,0.6s0.99-0.52,1.43-0.66c0.45-0.13,0.75-0.62,0.75-0.62l-0.31-5.94,4.16-2.16s0.93-1.1,0.93-1.28,0.57-1.87,0.57-1.87l4.47-3.1s1.78-2.23,2.18-2.5-0.03-0.62-0.03-0.62l-1.25-1.85s-1.07-1.29-1.78-1.47c-0.71-0.17-0.91-1.09-0.91-1.09l0.29-5-0.6-0.47-2.84-2.31-3.41-2.69-0.72-1.97-0.34-1.4-1.06-1.78,0.15-0.91,1.25-2.69-1.4-1.4-1.63-1.97-0.72,1.59s-1.43-0.53-2.5-0.53-1.06,1.44-1.06,1.44-1.95,0.71-2.84,1.25c-0.9,0.53-1.25,1.78-1.25,1.78s-1.45,1.25-2.16,1.25-2.14,0.01-3.03,0.19c-0.89,0.17-1.43,1.41-1.97,2.12-0.54,0.72-1.44,2.33-2.16,2.69-0.71,0.36-0.71,0.34-1.78,0.34s-0.16-0.7,0.38-2.31c0.53-1.61,1.95-1.79,2.31-2.5s0.72-1.78,0.72-1.78l2.5-0.91s0.54-3.02,1.44-3.37c0.89-0.36,3.75-0.53,3.75-0.53s1.22-1.63,1.4-2.35c0.18-0.71,1.44-1.58,1.97-2.65,0.54-1.08,0.72-1.79,0.72-2.5,0-0.72,0.91-1.82,0.91-1.82l2.5-2.12s1.58-1.6,1.93-2.31c0.36-0.72,2.16-1.97,2.16-1.97l2.16-1.97,2.31-2.5s0.19-1.44,0.19-2.16c0-0.71-0.72-1.78-0.72-1.78s-1.26-0.9-1.97-1.44c-0.72-0.53-1.78-0.7-1.78-1.59s0.16-0.72,0.34-1.44c0.18-0.71,0.72,0,0.72,0l1.44,1.1,0.15-1.25-0.15-2.35-0.53-1.97-2.69-0.68-1.78-1.1h-2.16c-0.71,0-0.52-0.69-0.87-1.4-0.36-0.72-0.37-1.62-0.91-2.69s-2.31-0.19-2.31-0.19l-1.78,0.91c-0.72,0.35-0.73,0.52-1.44,1.06-0.72,0.54-1.61-0.37-3.22-0.91-1.61-0.53-1.77,0.02-2.84,0.38-1.08,0.36,0.17,0.88,0.53,1.59,0.35,0.72,0,1.44,0,1.44l-2.35-0.19s-1.06-0.35-1.78-1.25c-0.71-0.89,0.19-1.06,0.19-1.06s1.25-1.43,1.25-2.5-0.72-1.25-0.72-1.25h-2.69c-1.25,0-1.96-0.17-3.03-0.34-1.07-0.18-1.25-0.37-1.97-1.44-0.71-1.07,0.57-0.53,0.57-0.53l1.4-1.25,1.25-0.72,2.69,0.34s0.9,0.56,1.97,0.38,0.19-0.72,0.19-0.72l-1.63-1.06s-1.77,0.34-2.84,0.34-2.16-0.72-2.16-0.72l-1.97-0.87s-1.41-1.45-2.12-1.63c-0.09-0.02-0.2-0.04-0.28-0.03zm-45.94,3.34c-0.85,0.32-1.23-0.03-1.5,0.82-0.27,0.84-0.34,0.96,0.16,1.18,0.49,0.23,0.87,0.53,1.4,0.44,0.54-0.09,1.24-0.47,1.06-1.09-0.17-0.63-1.12-1.35-1.12-1.35zm20.84,3.82c-0.33,0-0.47,0.12-0.94,0.56-0.62,0.58-1.62,1.37-1.71,1.9-0.09,0.54,0.12,0.96-0.19,1.54s-1.55,1.81-2,2.12-2.51,0.16-2.6,0.47c-0.08,0.31-0.37,0.52,0.04,0.87,0.4,0.36,2.91,0.63,3.72,0.54,0.8-0.09,3.3-0.3,3.74-0.35,0.45-0.04,0.71,0.28,0.66-0.43-0.04-0.72-0.72-1.36-0.4-1.85,0.31-0.49,0.6-0.65,0.78-0.97,0.17-0.31,0.49-1.06,0.31-1.47-0.18-0.4-0.72-0.95-0.72-1.53s-0.28-1.37-0.28-1.37c-0.18-0.01-0.3-0.04-0.41-0.03zm-45.53,6.62c-0.49,0-2.1,0.86-2.19,1.13-0.09,0.26-0.56,0.38,0.07,0.97,0.62,0.58,0.39,0.88,1.15,0.84,0.76-0.05,1.55-0.67,2.22-0.63,0.67,0.05,1,0.79,1.31,0.79,0.32,0,0.62-0.23,0.66-0.72s-0.42-0.89-0.59-1.07c-0.18-0.17-0.54-0.18-0.54-0.18-0.31-0.45-1.6-1.13-2.09-1.13zm-2.06,6.25c-0.54,0.18-1.01,0.45-1.5,0.63-0.49,0.17-0.81,0.17-1.13,0.43-0.31,0.27-0.72,0.46-0.72,0.82,0,0.35,0.15,0.5,0.6,0.81s0.52,0.62,1.19,0.62,1.89-0.5,2.03-0.81c0.13-0.31,0.48-0.94,0.53-1.25,0.04-0.31-1-1.25-1-1.25zm-51.31,9.13l-2.35,2.12-0.34,1.78,1.97,0.38,1.25,0.87h2.5l1.25-0.87v-1.78l-1.63-2.16-2.65-0.34zm59.09,4.4c-0.49,0.14-1.47,0.59-1.25,1.03,0.22,0.45,0.5,0.8,0.91,0.75,0.4-0.04,0.74-0.01,0.87-0.5,0.14-0.49-0.22-1.25-0.22-1.25l-0.31-0.03zm97.34,1.78c-0.09,0.01-0.18,0.07-0.28,0.22-0.38,0.6-0.53,1.69-0.4,2.1,0.12,0.41-0.42,0.87,0.12,1.31s0.62,1.22,1.53,1.25c0.92,0.03,1.9,0.47,2.63-0.06,0.72-0.54,1.43-1.69,1.65-2.19,0.22-0.51,0.32-1.22,0.07-1.53-0.26-0.32-0.62-0.81-1.13-0.88-0.5-0.06-1.19,0.16-1.19,0.16-1.07,0.31-0.99,0.66-1.78,0.31-0.59-0.26-0.92-0.72-1.22-0.69zm-135.37,0.22l-1.97,0.19-1.44,1.44,0.53,1.06,1.63-0.91,1.44,0.57,0.34,1.59,1.25,0.34,0.72-0.87-0.53-1.06-1.97-2.35zm27.09,1.13c-0.49,0.01-1.04,0.1-0.9,0.5,0.17,0.53,1.09,0.75,2.03,0.75s2.97,0.08,3.06,0.44c0.09,0.35,0.68,1.56,0.91,1.65,0.22,0.09,0.92,0.13,0.97-0.41,0.04-0.53-0.44-1.13-0.76-1.4-0.31-0.27-2.09-1.25-2.09-1.25-0.45-0.09-2.24-0.28-2.78-0.28-0.13,0-0.27-0.01-0.44,0zm10.31,1.12c-0.71,0.23-0.93,0.25-0.93,0.88,0,0.62-0.1,1.06,0.43,1.15,0.54,0.09,0.85,0.33,1.26,0.07,0.4-0.27,0.59-0.91,0.37-1.22s-1.13-0.88-1.13-0.88zm-44.71,1.16l-1.44,1.25,0.72,0.87,1.78-1.06-1.06-1.06zm6.4,2.31v1.78l2.35-0.53v-1.25h-2.35zm133.35,1.5c-1.05,0.29-1.25,0.28-2.07,0.6-0.82,0.31-1.49,0.24-1.87,0.74-0.38,0.51-0.44,0.28-0.66,1.29s-0.69,0.99,0.1,1.31c0.79,0.31,1.39,0.29,2.31-0.41,0.91-0.69,1.71-1.09,2.19-1.65,0.47-0.57,0.84-1.19,0.84-1.35s-0.84-0.53-0.84-0.53zm-122.41,0.5c-0.4,0.63-0.65,1.16-0.87,1.56-0.23,0.41-0.68,0.77-1.13,1.66s-0.81,1.32-0.81,2.03c0,0.72,0.24,1.18,0.68,1.41,0.45,0.22,0.34,0.5,0.57,0.5,0.22,0,0.82,0.09,1.31,0s1.03-0.19,1.03-0.5v-1.88c0-0.53-0.31-3.37-0.31-3.59s-0.47-1.19-0.47-1.19zm-16.47,0.69l-1.06,0.87v1.25l1.44,0.57,0.87-1.25-1.25-1.44z","name":"Krasnoyarsk Krai"},"tm":{"path":"m424.64,359.43,1.25,3.2143,1.25,2.3214s-0.53571,2.3214-0.71428,3.0357c-0.17857,0.71429-1.6071,3.0357-1.6071,3.0357s0.53571,1.25,1.6071,1.9643c1.0714,0.71429,5.8929,1.7857,5.8929,1.7857l5.3571,0.17857s3.75,0.89285,4.1071,1.6071c0.35714,0.71429,0.89286,1.0714,0.89286,2.1429,0,1.0714,0.35714,4.2857,0.35714,4.2857s1.25,0.35714,2.6786,0.35714,3.0357,0.35715,3.0357,0.35715,0.35714,2.1428,0.35714,2.6786c0,0.53571-0.89286,1.7857-1.9643,1.7857s-3.75,1.6072-3.75,1.6072-1.25,2.6786-1.25,3.75-0.89285,3.5714-0.53571,4.2857c0.35714,0.71429,4.4643,1.7857,5.1786,2.1429,0.71429,0.35714,3.2143,2.6786,3.2143,2.6786s-0.71429,1.6071-1.6072,2.6786c-0.89285,1.0714-4.1071,3.0357-5.3571,4.6429-1.25,1.6071-0.35714,2.8571-0.35714,2.8571l-0.71429,1.6071-3.2143,0.53572-3.2143,0.35714-1.4286-1.6071-1.9643-0.17857-4.66-0.57h-2.3214l-1.25,1.0714s-2.1429,1.0714-3.2143,1.25c-1.0714,0.17857-5.3571,1.25-6.0714,1.25-0.71428,0-6.4286,0.71429-6.4286,0.71429l-3.3928,1.4286h-2.3214l-0.35715-1.9643,0.71429-2.1429-0.35714-2.3214,1.7857-2.3214-0.53571-1.4286s-1.0714-0.17858-1.9643,0.53571c-0.89286,0.71429-4.4643,1.0714-4.4643,1.0714l-4.2857-0.17857-1.9643-2.3214-0.89286-3.0357s-1.25-1.0714-2.6786-0.71428c-1.4286,0.35714-1.6072,1.25-2.6786,1.25s-2.5,0-3.0357-0.89286c-0.53571-0.89286-0.89285-3.0357-0.89285-3.0357l-0.9-2.33s-1.6071-0.89286-2.5-1.6071c-0.89286-0.71429-3.2143-2.3214-3.2143-2.3214l-5.1786-2.3214-4.2857-1.9643-4.6429-1.7857-2.6786-1.0714-1.7857-2.5v-3.0357l1.6072-2.8572,0.35714-1.7857-0.53571-2.3214,1.25-3.0357,0.71428-3.3929,1.9643-1.0714,3.3928-2.8571s0-2.1429,0.71429-2.3214c0.71429-0.17857,5.7143-1.6071,5.7143-1.6071l1.9643-1.7857,1.25-2.6786,2.5-1.6071,1.6071-3.2143s1.0714-1.0714,1.7857-1.7857c0.71428-0.71429,2.1428-1.4286,2.1428-1.4286l1.9643-0.35715,2.1429,1.7857,2.1428,1.0714,2.5,0.35714,2.8572,1.4286,1.0714,1.6071,3.0357,0.89286h3.3929l2.1428,0.35714,1.25,1.6072,2.6786,0.71428,2.3214,0.71429,2.1429,1.7857,1.25-0.89286,1.7857-0.53571,2.1428-1.4286,2.1429-0.17857,1.6071,0.71428,1.7857,0.89286z","name":"Tomsk Oblast"},"nv":{"path":"m341.43,421.57,4.1071,0.71429l4.4643-0.17858c1.25-0.17857,2.1429-0.71428,2.1429-0.71428l-2.14,3.4h-3.0357l-0.89285,2.1428s1.0714,1.9643,1.7857,2.5c0.71429,0.53572,2.6786,3.0357,2.6786,3.0357l0.53572,2.1428,2.3214,0.35715h1.4286s2.6786,0.35714,3.3928,0.35714c0.71429,0,0.89286,0,1.9643-0.35714,1.0714-0.35715,3.2143-0.71429,4.6429-0.71429h3.5714s2.6786,0.17857,3.5714-0.35714c0.89286-0.53572,0.89286-1.0714,2.3214-1.25,1.4286-0.17857,3.0357-0.17857,3.9286-0.17857,0.89286,0,1.9643-0.17857,1.9643-0.17857s0,1.6071,0.89286,2.1428c0.89285,0.53572,4.1071,2.6786,4.1071,2.6786l0.71428,0.71429c0.17858,0.71429-0.17857,2.5-0.17857,3.2143,0,0.71428-1.0714,0.71428-0.17857,1.6071,0.89286,0.89286,1.9643,1.4286,1.9643,1.4286l2.3214-1.9643,2.3214-2.3214s2.1429-0.53572,2.8572-0.53572c0.71428,0,3.0357,0,3.75-0.17857,0.71428-0.17857,1.4286-0.71429,2.6786-0.17857,1.25,0.53571,2.3214,0.71428,3.3929,0.71428,1.0714,0,3.5714-1.25,3.5714-1.25s1.7857-2.1428,1.9643-2.8571c0.21-0.7-0.33-4.45-0.33-4.45v-3.75c0-0.71429,0.71428-2.3214,1.25-2.6786,0.53571-0.35714,1.7857-0.89285,1.7857-1.7857,0-0.89286-0.89286-1.6071-0.89286-1.6071s-0.89285-0.53572-0.89285-1.4286c0-0.89286,0.35714-3.2143-0.53572-3.0357-0.89285,0.17857-4.1071,1.7857-4.1071,1.7857s0,0.17857-1.4286,0.17857-2.5,0-2.6786-0.71429c-0.17857-0.71428,0.35714-5,0.35714-5l0.53571-2.6786,0.17858-2.1429-2.8572,1.4286s-1.6071,0.53572-2.5,0.71429c-0.9,0.18-4.47-0.71-4.47-0.71l-2.1429-0.71428-1.4286-2.1429-1.4286-2.8571s-2.5,0.53571-3.2143,0.71428c-0.71428,0.17858-1.9643,0.53572-1.9643,0.53572l-2.3214-1.25-1.0714-3.3929v-1.25l-3.0357-1.7857s-1.9643-1.6072-2.6786-2.1429c-0.71428-0.53571-3.3928-1.7857-3.3928-1.7857s-3.3929-1.25-4.1072-1.6072c-0.71428-0.35714-1.9643-1.25-2.6786-1.6071-0.71428-0.35714-3.9286-1.4286-3.9286-1.4286l-1.9643,0.17857s-0.35715,1.0714-0.53572,1.9643c-0.17857,0.89285-1.0714,2.3214-1.0714,2.3214l-1.4286,1.0714-0.89286,1.6072,0.17858,2.1428-0.71429,1.4286h-3.2143l-2.5-0.35714-2.1428,0.89286-2.1429,2.3214-1.4286,1.9643-0.71429,2.6786,0.71429,1.9643,1.7857,2.6786v1.7857l-2.1428,3.5714z","name":"Novosibirsk Oblast"},"al":{"path":"m351.25,435.14,1.7857,5,1.7857,5.1786,1.6071,6.7857,0.89286,8.5714,0.35714,8.2143,0.35714,2.8571,2.3214-0.53571,1.7857-0.53572,0.89285-0.53571,0.17857-1.9643,1.25-1.6071,1.25-0.35714,1.7857,0.53571,0.89286,1.9643,0.89285,2.8571,2.3214,2.8571,1.9643,1.6071,4.6428,0,3.3929-0.35714,2.5-0.89286,2.3214,0,3.3929,1.4286,1.0714,1.9643,2.3214,0.53572,2.3214-0.53572-0.17857-1.4286-1.6071-1.0714-1.0714-0.89286,0.35714-1.6071,0.71429-0.35714,2.5-0.35714,4.4643-0.71429,3.75-0.17857,2.6786-0.71429,2.3214-1.9643,1.0714-1.9643s0.53572-0.71428,1.25-0.71428c0.71429,0,3.3929-0.17858,3.3929-0.17858l1.9643-0.17857,1.0714-1.7857s0.53572-2.1429,1.25-2.5c0.71429-0.35714,0.89286-2.3214,0.89286-2.3214l0.71429-2.1429-0.35715-1.0714-0.71428-1.0714,0.71428-0.89286,1.25-0.53571-0.17857-1.0714-1.4286-1.6072-1.0714-1.0714c-0.17857-0.71429-0.89286-2.8572-0.89286-2.8572l-1.7857-1.7857-0.17857-0.89286-0.53572-2.1429-1.6071-1.4286-2.5-1.9643-1.74-1.79s-1.6072,1.0714-2.3214,1.4286c-0.71429,0.35715-1.7857,0.71429-1.7857,0.71429l-2.5,0.17857-2.5-0.35714-3.0357-0.17857-4.8214,0.71428-2.5,1.6072-1.6071,1.7857-1.0714,0.71429-0.89286,0.35714-1.4286-1.25-0.35714-0.89286,0.35714-0.89286,0.17857-1.7857-0.17857-1.4286-2.3214-1.6071-1.9643-1.25-1.0714-1.25-0.17857-0.89286-1.9643-0.17857-4.2857,0.17857-1.25,1.25-2.1429,0.53571-3.75-0.53571-4.2857,0.17857-2.6786,1.25h-2.5l-3.3929-0.17857z","name":"Altai Krai"},"km":{"path":"m442.14,414.79-0.71428,2.3214,0.89286,1.6072,2.5,1.4286,1.7857,1.6071,1.25,2.5,0.17857,0.89286s-0.89286,1.4286-1.6071,2.1429c-0.71429,0.71428-4.2857,2.3214-4.2857,2.3214l-1.7857,1.7857-1.7857,1.7857v1.6072l1.0714,1.7857,0.17858,1.7857-1.9643,2.5s-1.25,1.0714-1.0714,1.7857c0.17857,0.71428,1.0714,1.4286,1.7857,1.6071,0.71428,0.17857,2.8571,0.89286,2.8571,0.89286l-0.71429,1.4286-1.25,1.7857-0.53571,1.6072-1.7857,0.71428-1.4286,1.6072,0.71429,1.25,1.25,1.25-0.89286,2.5-1.25,1.6071,0.53572,1.25,1.7857,1.7857-0.35714,1.6072-1.6072,1.9643-2.5,2.1429h-1.9643l-0.71429-1.7857-1.9643-1.25-2.6786-0.35714-1.4286,1.0714-2.1428-1.4286-0.71429-2.3214-1.0714-0.71429,0.17857-2.5-0.53571-2.5,0.89286-1.9643,0.71428-1.6071-2.1428-2.6786-1.6072-2.6786-1.25-1.4286-0.71428-2.3214-0.89286-1.7857-2.3214-2.1429-1.7857-1.6071-0.71429-1.25v-1.7857l-0.35714-4.6428,0.17857-2.5,0.71429-2.3214,1.25-1.4286,0.71428-1.25-1.4286-1.9643v-0.89286l-0.35714-2.5,1.6071-0.35714,4.4643-0.53571,2.5-0.89286,3.0357-0.89286,1.0714-0.35714,0.71428-0.89286h1.6072,1.9643,2.5l1.7857,0.35715,1.4286,0.35714,0.89286,0.89286,1.9643,0.53571,1.6071-0.17857,2.5-0.71429z","name":"Kemerovo Oblast"},"lt":{"path":"m392.32,478.89-0.44643,2.1428s-0.17857,1.875,0,2.5893c0.17857,0.71429,1.1607,2.3214,1.1607,2.3214l3.3036,0.89286s0.98215,1.1607,1.0714,1.6071c0.0893,0.44643,0.0893,3.3036,0.0893,3.3036s0.17857,0.89286,0.53571,1.6071c0.35715,0.71429,1.25,1.875,1.7857,2.2322,0.53571,0.35714,1.6071,1.25,2.4107,1.3393,0.80357,0.0893,3.125,0.0893,3.5714,0.0893,0.44643,0,4.0179,0.0893,4.0179,0.0893s1.0714,0.53572,1.6071,0.89286c0.53571,0.35714,1.4286,1.25,1.7857,1.875,0.35715,0.625,1.5179,1.6964,2.0536,1.9643,0.53571,0.26785,1.1607,0.80357,1.7857,1.1607,0.625,0.35714,1.6964,0.71429,2.4107,0.80357,0.71429,0.0893,2.9464-0.44643,3.3929-0.71428,0.44643-0.26786,2.3214-0.89286,3.4821-0.89286s4.7322-0.35714,5-0.44643c0.26786-0.0893,3.5714-1.3393,4.1964-1.3393s1.4286-0.89285,1.6071-1.25c0.17858-0.35714,0.625-1.9643,0.17858-2.7678-0.44643-0.80357-0.80358-1.0714-1.4286-1.4286-0.625-0.35715-1.4286-1.25-1.25-1.7857,0.17858-0.53571,1.9643-1.1607,2.4107-1.1607,0.44643,0,2.5,1.0714,2.5,0.26785,0-0.80357-1.6964-2.2321-1.6964-2.2321s-0.98214-1.3393-1.25-1.7857c-0.26786-0.44643-1.875-1.9643-1.875-1.9643s-2.2321-2.7679-2.0536-4.1071c0.17857-1.3393-0.0893-3.3929-0.0893-3.3929s-0.625-1.3393-0.71428-1.6964c-0.0893-0.35714-1.3393-0.17857-1.3393-0.17857l-1.5179,1.5179s-1.4286-0.26786-1.5178-0.80357c-0.0893-0.53572-0.71429-2.5893-0.71429-2.5893s-0.35714-1.7857-0.44643-2.1429c-0.0893-0.35714-0.17857-1.9643-0.17857-1.9643l1.6964-1.3393,2.8571-1.3393,0.35715-1.1607-1.3393-1.6071-0.80357-0.625-2.1429-0.53571-1.9643,0.98214s-1.0714-0.625-1.4286-0.80357c-0.35714-0.17857-1.0714-0.89286-1.0714-0.89286l-0.89286-1.7857s0-1.0714-0.71429-0.89286c-0.71428,0.17857-0.89285,0.71428-0.89285,0.71428s-1.1607,1.1607-1.1607,1.5179c0,0.35714-0.625,1.4286-0.625,1.4286l-0.98214,1.0714s-1.6071,0.44643-1.9643,0.44643h-3.0357c-0.35714,0-1.1607,0.71429-1.5179,1.0714-0.35714,0.35714-1.1607,1.9643-1.1607,1.9643l-1.5179,1.0714-0.98214,0.625-2.3214,0.71429h-2.3214l-4.1071,0.71428-4.1071,0.625-1.0714,0.625-0.0893,0.98215s0.0893,0.89285,0.53572,0.98214c0.44642,0.0893,1.6071,0.80357,1.6071,0.80357l0.44643,0.89286-0.0893,0.89286-1.875,0.625z","name":"Altai Republic"},"tv":{"path":"m431.96,477.02,0.26786-1.6964s0.89286-0.625,1.6071-0.625c0.71429,0,1.6964,0.71428,2.4107,0.89286,0.71428,0.17857,2.7678,0.71428,3.0357,0.71428,0.26786,0,1.0714-0.80357,1.3393-1.25,0.26785-0.44643,1.9643-2.6786,1.9643-2.6786s0-1.25,0.625-1.6071c0.625-0.35715,1.875-0.35715,2.3214-0.35715,0.44643,0,1.6071-0.17857,2.3214,0.26786,0.71429,0.44643,1.1607,3.0357,1.1607,3.0357s0.89286,0.89285,1.1607,0.89285c0.26786,0,2.1429-0.80357,2.1429-0.80357s1.4286,0.17857,1.7857,0.44643c0.35714,0.26786,3.0357,0.89286,3.0357,0.89286s1.6964,1.6071,2.2322,1.6071c0.53571,0,1.6964,0.26786,2.6786-0.0893,0.98214-0.35714,2.8571-0.80357,3.3929-1.25,0.53571-0.44642,5.5357-1.9643,5.9821-2.5,0.44643-0.53571,7.0536-5.9821,7.0536-5.9821l2.1429-2.8571s-0.17857-1.875-0.17857-2.9464,1.0714-2.3214,1.4286-2.5893c0.35714-0.26785,2.8571,0.0893,3.3036,0.17858,0.44643,0.0893,4.375,0.89285,4.7321,0.80357,0.35714-0.0893,4.2857-0.44643,4.2857-0.44643l2.4107-2.2321s1.5179-0.35715,2.4107,0.0893c0.89286,0.44643,3.6607,2.5,4.1964,2.7679,0.53572,0.26786,3.75,2.3214,3.75,2.3214l1.6072,1.5178s1.25,0.71429,1.7857,0.44643c0.53571-0.26785,2.3214-0.89285,2.3214-0.89285l1.6071,0.53571,0.35714,1.25s0.53572,0.89286,0.53572,1.25-0.89286,1.6071-0.89286,1.6071-0.71428,0.53572-0.80357,1.1607c-0.0893,0.625-0.26786,4.1071-0.26786,4.1071s-0.0893,2.3214-0.0893,2.7679c0,0.44643-0.71429,2.1428-0.71429,2.1428l-1.4286,2.4107s-1.5179,1.3393-1.875,1.875c-0.35714,0.53571-2.2321,1.3393-2.4107,1.6964-0.17858,0.35714-0.71429,1.875-0.71429,1.875s-0.71429,1.875-0.71429,2.4107c0,0.53572-0.0893,3.3929-0.0893,3.9286,0,0.53572,0.53571,2.5,1.0714,3.2143,0.53571,0.71428,1.25,1.6071,1.25,2.0536,0,0.44643-0.80357,2.3214-1.1607,2.7679-0.35714,0.44643-4.8214,4.1964-4.8214,4.1964l-2.0536,1.25-2.1428,0.17857s-1.7857-0.98215-2.1429-0.89286c-0.35714,0.0893-2.3214,0.17857-2.6786,0.17857-0.35715,0-1.7857-0.89286-1.7857-0.89286s-1.6964-0.35714-2.1428-0.625c-0.44643-0.26785-1.7857-1.1607-1.7857-1.1607s-2.7679-0.26786-3.2143-0.26786c-0.44643,0-2.8572-0.17857-3.2143-0.53571l-2.0536-2.0536s-0.71429-1.4286-0.80357-1.9643c-0.0893-0.53571-0.17857-2.5-0.17857-2.5s-0.80358-0.80357-1.3393-1.25c-0.53571-0.44643-2.1429-0.89286-2.9464-0.89286-0.80357,0-3.9286,0.17858-3.9286,0.17858s-1.9643,0.53571-2.2321,0.625c-0.26786,0.0893-1.25,0.71428-1.875,0.80357-0.625,0.0893-2.0536,0.0893-1.9643-0.80357,0.0893-0.89286,1.25-1.6964,1.3393-2.0536,0.0893-0.35714-0.0893-1.0714-0.71429-1.3393-0.625-0.26786-2.1429-0.17857-3.0357,0.0893-0.89286,0.26786-2.3214,0.80358-2.8572,0.89286-0.53571,0.0893-3.3928,0.71429-3.3928,0.71429s-2.1429,0.89285-2.6786,1.0714c-0.53572,0.17857-3.8393,1.1607-3.8393,1.1607l-3.0357,1.5179-2.4107,1.1607-2.5893-0.26786-2.1429-0.98214-1.5179-0.71428-1.25-1.25c0-0.44643,0.35714-0.98215,0.35714-0.98215l2.4107-0.44643,1.7857,0.53572s1.25-0.35714,0.17857-1.0714c-1.0714-0.71429-4.4643-5.0893-4.4643-5.0893l-1.48-2.44s-1.0714-1.4286-1.0714-1.7857v-2.5893z","name":"Tuva Republic"},"hk":{"path":"m440.27,432.11c0.53572,0.35715,1.9643,1.875,1.9643,1.875l1.3393,1.6072s0.26785,0.625,1.1607,0.80357c0.89286,0.17857,2.0536,0.17857,2.0536,0.17857s0.35714-0.35714,0.80357-0.80357,0.625-0.98214,0.98215-1.25c0.35714-0.26786,0.89285-0.89286,1.3393-0.80357,0.44643,0.0893,0.71429,0.26785,1.3393,0.71428,0.625,0.44643,1.3393,1.25,2.2321,1.25,0.89286,0,2.5,0.80357,2.5,0.80357s0.44643,1.875,0.625,2.3214c0.17857,0.44643,0.53571,2.9464,0.53571,2.9464s0.35715,1.5179,0.71429,2.4107c0.35714,0.89285,0.98214,2.0536,1.0714,2.4107,0.0893,0.35714-0.0893,3.125-0.17857,3.3929-0.0893,0.26785-0.80357,1.875-0.89286,2.2321-0.0893,0.35714,0,2.5893,0,2.5893l1.5179,1.5179,0.625,1.875s-1.25,1.4286-1.4286,1.6964c-0.17858,0.26786-2.2322,1.3393-2.5893,1.875-0.35714,0.53571-1.4286,3.0357-1.4286,3.0357s-1.6071,1.9643-2.1429,2.2322c-0.53571,0.26785-2.8571,1.0714-3.125,1.5178-0.26786,0.44643-1.6964,1.6964-1.6964,1.6964l-2.7678,0.0893s-1.3393,0.17857-1.6072,0.625c-0.26785,0.44643-0.53571,1.4286-1.0714,1.875-0.53571,0.44643-1.0714,1.25-1.1607,1.6071-0.0893,0.35714-0.89286,1.0714-0.89286,1.0714s0.0893,0.71429-1.0714,0.625c-1.1607-0.0893-2.9464-0.35714-2.9464-0.35714l-1.7857-1.1607-1.6071,0.44643-0.625,0.80357-0.26786,0.89286-2.5,1.0714s-0.625,0.89286-1.1607,0.35714c-0.53572-0.53571-1.25-2.3214-1.25-2.3214l-0.625-2.5893v-1.5179s0.17857-1.0714,0.53571-1.25c0.35714-0.17857,2.5-1.6071,2.5-1.6071s1.3393-0.98215,1.6964-1.0714c0.35714-0.0893,2.1429-0.44643,2.1429-0.44643l1.9643-1.0714,1.5179-2.0536,1.3393-1.0714-0.44643-1.6071s-1.25-1.25-1.4286-1.6071c-0.17858-0.35715-0.44643-1.25-0.44643-1.25l1.6071-2.2322,0.0893-1.875s-1.0714-1.1607-1.1607-1.5178c-0.0893-0.35715-0.0893-1.25-0.0893-1.25l2.5893-1.5179,1.0714-1.875,1.1607-1.9643,0.53572-1.6964-3.5714-1.1607s-0.89286-1.25-0.71429-1.7857c0.17858-0.53572,1.7857-2.4107,1.7857-2.4107s0.89286-1.875,0.89286-2.3214c0-0.44642-1.0714-2.8571-1.0714-2.8571s0-0.71428,0.26785-1.1607c0.26786-0.44643,1.25-0.98215,1.25-0.98215z","name":"Republic of Khakassia"},"ir":{"path":"M569.41,325.78c-0.12,0.03-0.22,0.12-0.22,0.34,0,0.45,0.53,1.54,0.53,1.54l0.37,1.06s-0.26,0.88-0.62,1.06-1.78,0.63-1.78,0.63l-2.69,0.09s-1.61,0.26-1.88,0.44c-0.26,0.18-0.9,0.73-0.9,1.09s-0.44,1.96-0.53,2.31c-0.09,0.36-0.16,1.97-0.16,1.97s0.18,0.78,0.63,1.41c0.44,0.62,0.43,1.81,0.43,1.81l-1.25,1.16s0.26,1.67,0.35,2.03,1,3.4,1,3.4l0.43,2.5s-0.28,1.42-0.28,1.69-0.96,4.57-0.96,4.57-0.09,0.98-0.54,1.24c-0.44,0.27-2.06,1.88-2.06,1.88s-0.19,0.99-0.19,1.34c0,0.36,0.37,1.06,0.19,1.5-0.18,0.45-1.97,1.72-1.97,1.72l-2.59,0.72-1.31,0.88-0.29,3.84-0.09,2.22v1.81c0,0.36,0.27,1.34,0.72,1.78,0.45,0.45,2.16,1.97,2.16,1.97l2.21,0.53,1.16,0.78,0.1,2.25s-0.37,1.33-0.82,1.5c-0.44,0.18-2.75,1.82-2.75,1.82l-0.53,1.15,0.97,1.16,1.97,1.59s0.78,0.1,0.87,0.72c0.09,0.63-0.15,2.6-0.15,2.6l-0.47,1.43-1.25,1.07-1.41,1.43-0.19,1.6-1.24,0.81-2.79-0.28-1.59-1.35-1.78-0.68-2.25-0.63s-0.45-0.74-0.63-1.19c-0.17-0.44-0.34-1.68-0.34-1.68l-1.25-0.72-1.87,1-1.26,0.09-0.18,1.69-0.35,2.41-0.53,1.53-0.9,0.97-1.6,0.53s-1.89,0.28-2.25,0.37c-0.35,0.09-1.34,1.41-1.34,1.41s-0.53,0.8-0.44,1.15c0.09,0.36,0.19,1.25,0.19,1.25l-1.16,0.91-2.06,0.81s-0.44,0.9-0.44,1.25c0,0.36,0.16,1.97,0.16,1.97l0.37,1.5,0.1,1.63s0.7,0.7,0.43,1.06c-0.26,0.36-2.78,0.62-2.78,0.62l-1.93-2.78-1-1.5-1.07-2.34-1.06-0.69h-1.72l-1.59,1.69s-0.89,0.81-1.16,1.44c-0.27,0.62,0.01,1.78-1.15,1.78s-3.22-0.38-3.22-0.38l-1.25-1.15-1.97-0.44-1.34-0.19s-0.62,0.64-0.97,0.91c-0.36,0.27-1.35,1.25-1.35,1.25v0.62l-0.72,1.88-1.15,2.22-0.81,0.9-0.29,1.35,0.63,1.68s0.45,0.9,0.81,1.25c0.36,0.36,0.63,0.35,0.72,0.97,0.09,0.63,0.19,2.6,0.19,2.6l-0.38,2.4-0.97,1.88s-1.88,1.79-2.15,2.06-2.13,1.61-2.13,1.97-1.62,4.19-1.62,4.19l-1.25,2.25s-0.69,2.11-0.78,2.56-0.63,3.59-0.63,3.59-0.09,1.33-0.62,1.6c-0.54,0.26-3.69,0.81-3.69,0.81s-2.12,1.07-2.56,1.34c-0.45,0.27-0.72,0.63-0.72,0.63s-0.19,0.52-0.1,0.87c0.09,0.36,1.16,2.25,1.16,2.25l1.44,2.66,1.06,0.56,0.97,1.06,1.09,1.69v0.81l1.25-0.43s0.9-0.91,1.25-1c0.36-0.09,1.78,0.28,1.78,0.28l1.44,0.87s1.43,0.91,1.78,1c0.36,0.09,2.03,1.41,2.03,1.41l4.32,2.87s0.34,0.82,1.06,0.82c0.71,0,2.41-0.38,2.41-0.38l1.78-0.34,1.06,1.15,0.28,1.16,0.28,1.53,2.56-0.81,2.44-2.41s2.14-2.16,3.13-2.34c0.98-0.18,2.12,1.19,2.12,1.19s0.72,1.58,1.25,2.03c0.54,0.44,2.43,2.32,2.78,2.59,0.36,0.27,3.03,1.53,3.03,1.53l2.22,2.66c0.45,0.53,2.52,3.22,2.97,3.22s2.84,0.18,3.38,0.09c0.53-0.09,1.96,0.63,2.5,1.25,0.53,0.63,1.78,2.69,1.78,2.69s1.27,1.69,1.62,1.78c0.36,0.09,1.16,1.88,1.16,1.88s0.89,1.62,1.25,1.53,2.31-0.63,2.31-0.63,0.73,0.15,0.91,0.69c0.18,0.53,0.87,2.59,0.87,2.59s1.18,0.62,1.53,0.53c0.36-0.09,1.88-1.25,1.88-1.25s1.77-0.26,2.12-0.43c0.36-0.18,1.44-0.82,0.82-1.44-0.05-0.04-0.11-0.06-0.16-0.09,0.05-0.01,0.34-0.07,0.34-0.07l1.69-0.62,8.75-2.88s1-1.76,1-2.03,0.63-2.06,0.63-2.06l0.06-2.06,0.81-0.82,1.78-0.96,2.25-0.82,1.16-1.68,1.06-0.82,5.44-2.59,1.62-1.31,0.82-1.1,0.62-2.5,1.94-1.15s1.27-0.9,1.62-1.35c0.36-0.44,0.35-0.97,0.35-0.97l-0.63-0.81-1.25-1.25-0.34-0.81s0.18-0.96,0.62-1.41c0.45-0.44,0.71-0.63,1.07-0.72,0.35-0.09,1.25,0.35,1.25,0.35l1,1.09,0.87-0.47,0.63-1.78s0.81-2.14,0.9-2.5,0.25-1.69,0.25-1.69-0.25-3.05-0.25-3.5v-2.5s0.44-4.01,0.53-4.37,0.35-2.13,0.35-2.13l-0.1-1.87s-0.44-1.17-0.62-1.44-0.16-0.81-0.16-0.81,0.63-1.05,0.72-1.41c0.09-0.35-0.37-0.81-0.37-0.81s-0.54-0.71-0.72-1.06c-0.18-0.36-0.88,0.15-0.88,0.15l-1.44,0.91s-0.79,1.26-1.15,1.53-0.44,1.31-0.44,1.31l-0.28,4.38-0.81,1.34-1.53-0.09c-0.34-0.63-0.73-1.32-0.79-1.6-0.08-0.44-0.43-2.67-0.34-3.65s0.97-4.38,0.97-4.38l1.25-1.25s0.09-1.52-0.53-2.06c-0.63-0.53-1.87-1.07-2.41-1.34-0.53-0.27-1.72-1.35-1.72-1.97,0-0.63,0.92-1.77,1.19-2.13,0.27-0.35,3.93-1.51,4.28-1.78,0.36-0.27,3.57-2.15,3.57-2.15l3.65-1.07,2.78,0.25,2.13-0.34,1.34-2.5,2.88-0.81s1.87,1.25,2.4,1.25c0.54,0,2.22-0.72,2.22-0.72s1.07,0.64,1.25,1,1.63,1.34,1.63,1.34l1.93-0.37s1.35-0.44,2.07-0.35c0.71,0.09,1.7,0.98,2.06,1.07s2.75-0.72,2.75-0.72l1.09-1.5,2.5-1.16s1.35-1.08,1.35-1.53,0.15-3.22,0.15-3.22,1.25-0.61,1.88-0.97c0.62-0.35,2.15-0.18,2.15-0.18s0.17-1.34,0.35-1.79c0.18-0.44,1.33-1.34,1.78-1.43s2.44,0.37,2.44,0.37l1.15,0.97-1.34,1.44-0.72,1.15,0.72,0.72s2.31-0.45,2.94-0.72c0.62-0.26,2.24-0.44,2.78-0.53,0.53-0.09,2.84-1.15,2.84-1.15s0.91-1.08,0.91-1.44-0.2-1.71-0.38-2.16c-0.18-0.44-2.21-1.14-2.65-1.59-0.45-0.45-0.54-2.58-0.72-2.94s-0.9-1.9-0.63-2.44c0.27-0.53,1.06-1.78,1.06-1.78l-0.62-2.5s-0.01-2.48,0.34-2.84c0.36-0.36,2.07-1,2.07-1l2.93,0.81s0.9,1.15,1.35,1.06c0.44-0.09,2.15-0.53,2.15-0.53l0.25-3.56-0.87-1.16s-1.27-1.42-1.63-1.68c-0.35-0.27-1.25-1.25-1.25-1.25l-1.68-2.97-0.25-2.6-0.72-1.68-2.25-0.54-1.78,0.97-3.13,1.53-1.97,0.44-0.72-0.72-0.78-2.84-1-1.59-2.75-2.35-2.34-1.68-2.66-0.91-2.78-0.06s-2.49,0.8-2.84,1.15c-0.36,0.36-1.45,1.52-1.72,1.88-0.27,0.35-0.88,2.5-0.88,2.5l-0.28,2.12v2.5s-0.17,1.36-0.43,1.72c-0.27,0.36-3.94,2.03-3.94,2.03l-1.16,1.72-0.19,2.66-0.97,2.25-2.15,2.22s-0.6,0.63-0.69,0.09-0.62-2.22-0.62-2.22l-2.16-2.34s-0.44-1.23-1.06-0.78c-0.63,0.44-1.63,1.31-1.63,1.31l-3.28,1s-0.89,0.43-1.25,0.87c-0.36,0.45-2.97,0.72-2.97,0.72l-2.03,0.28-2.16,2.5s-0.62,1.26-1.24,0.82c-0.63-0.45-2.22-2.35-2.22-2.35l-0.82-1.59-0.53-2.94,0.16-5.56-0.06-2.56,1.5-2.6,1.87-3.03s0.44-1.61,0.44-2.06-0.53-3.03-0.53-3.03l-2.03-2.25-4.94-3.66s-0.63-0.71-0.63-1.25c0-0.53,0.1-2.31,0.1-2.31l1.15-1.97s0.63-0.35,0-1.06c-0.62-0.72-3.18-4.57-3.18-4.57l0.15-5.34s0.02-0.65-0.34-1.09c-0.36-0.45-2.59-3.28-2.59-3.28l-1.54-1.88s-0.24-0.62-0.68-0.62c-0.45,0-2.16,0.68-2.16,0.68s-1.17,0.82-1.44,0.29c-0.27-0.54-0.25-2.6-0.25-2.6s-0.29-1.16,0.16-1.25,1.62-0.44,1.62-0.44h1.5l0.29-1.43-1.79-1.97-1.53-1.35-1.4-0.06s-0.14-0.03-0.25,0z","name":"Irkutsk Oblast"},"br":{"path":"m513.39,476.39s1.6072,0.98214,2.3214,1.1607c0.71429,0.17857,2.8572,1.25,3.3929,1.3393,0.53571,0.0893,1.7857,0.71428,2.5,0.98214,0.71429,0.26786,1.875,0.98214,2.5893,1.3393,0.71428,0.35714,2.2321,0.53571,3.2143,0.625,0.98214,0.0893,2.8571,0.89285,3.4821,1.0714,0.625,0.17858,2.1429,1.0714,2.9464,1.1607,0.80357,0.0893,1.5179,0,2.7679,0.625s2.7679,1.3393,3.125,1.5179c0.35714,0.17857,0.71429,0.26785,0.80357,0.98214,0.0893,0.71428,0,2.6786,0.0893,3.0357,0.0893,0.35715,0.26785,1.6964,0.625,2.0536,0.35714,0.35715,1.6071,1.9643,2.5893,2.5893,0.98215,0.625,1.4286,1.6964,1.9643,2.1429,0.53571,0.44643,2.3214,1.875,2.8571,1.9643,0.53572,0.0893,2.3214,0.625,2.7679,0.625,0.44643,0,5.0893,0.44643,5.0893,0.44643s1.7857-0.80357,2.7679-1.25c0.98214-0.44643,4.0179-1.25,4.4643-1.5179,0.44643-0.26785,1.5178-0.98214,2.6786-1.0714,1.1607-0.0893,4.1964-0.0893,5.0893-0.0893,0.89286,0,4.1072,0.0893,4.1072,0.0893s2.3214-0.0893,3.125,0.44642c0.80357,0.53572,1.6071,1.6072,1.9643,2.1429,0.35715,0.53572,0.625,1.4286,1.0714,1.6071,0.44643,0.17858,1.4286,0.35715,1.875,0.35715,0.44643,0,2.1429-0.26786,2.5-0.35715,0.35714-0.0893,2.2321-0.44642,2.2321-0.44642l0.0893-2.6786s-0.0893-1.7857,0.53571-2.0536c0.625-0.26785,4.4643-1.5178,4.8214-1.6964,0.35715-0.17857,1.25-1.6071,1.25-1.6071s-2.5-0.625-3.3036-0.625c-0.80357,0-1.25-1.4286-1.25-1.4286l1.0714-1.5179,0.17857-1.9643,0.98214-1.0714,0.80358-1.3393s-0.625-0.98214-0.80358-1.3393c-0.17857-0.35715-0.0893-1.4286-0.0893-1.4286l2.2321-1.1607,3.125-0.35714,2.4107-1.1607,3.4821-2.4107,1.7857-0.625s1.4286,0.0893,1.875,0.26786c0.44643,0.17857,2.4107,0.53571,2.5893,0.17857,0.17857-0.35714,1.6071-1.9643,2.0536-2.3214,0.44643-0.35714,2.6786-2.1429,2.6786-2.1429l1.4286-1.1607s0.98215-1.25,1.4286-1.5179c0.44643-0.26786,1.875-1.0714,2.4107-1.0714,0.53571,0,0.98214,0,1.3393-0.26785,0.35715-0.26786,1.1607-1.25,1.3393-1.6072,0.17857-0.35714,1.0714-0.80357,1.6071-0.89285,0.53572-0.0893,5-1.3393,5-1.3393l2.6786-1.5179s1.875-1.5178,2.0536-1.875c0.17857-0.35714,1.6071-2.8571,1.6071-2.8571l0.98214-1.875s-0.26786-1.4286-0.71428-1.7857c-0.44643-0.35715-2.1429-1.6072-2.1429-1.6072l-2.5-1.25s-1.25-0.80357-1.1607-1.6071c0.0893-0.80357,7.5-5.625,7.5-5.625s0.98215-1.6964,1.0714-2.0536c0.0893-0.35714,0.89286-1.9643,1.25-2.3214,0.35715-0.35714,2.5-2.0536,2.5-2.0536s1.4286-0.625,1.875-0.71429c0.44643-0.0893,3.5714-1.5178,3.5714-1.5178l1.25-0.98215s0.44643-2.0536,0.44643-2.5893c0-0.53572-0.80357-3.8393-0.80357-3.8393s-1.0714-0.53571-1.4286-0.89285c-0.35715-0.35715-1.25-0.80358-2.1429-0.80358-0.89286,0-2.6786,0-3.125-0.625-0.44643-0.625-1.3393-1.25-1.6964-1.875-0.35714-0.625-1.1607-1.7857-1.25-2.2321-0.0893-0.44643-0.80357-2.4107-0.98214-2.7679-0.17857-0.35714-1.0714-2.3214-1.0714-2.3214l-2.0536-3.5714-1.0714-2.7679,0.26786-2.0536,1.0714-0.625,0.80357-1.25,1.4286-1.875,0.625-0.98214-2.3214-1.25s-1.875,0.44642-2.2321,0.71428c-0.35715,0.26786-0.98215,1.3393-0.98215,1.3393s0.35715,0.625,0,0.80357c-0.35714,0.17857-2.3214,0.44643-2.3214,0.44643l-1.25,0.89285-0.71429,1.9643v1.6071l-0.98214,0.98215-2.0536,1.0714-1.3393,0.98215-1.1607,1.3393s-1.6964,0.0893-2.0536,0.0893c-0.35714,0-2.0536-0.625-2.0536-0.625l-2.6786,0.17857-2.3214-0.0893-1.9643-1.4286-1.4286,0.26786-2.0536-0.35714s-0.80357-0.71429-1.1607-0.71429c-0.35714,0-2.1429,0.625-2.1429,0.625l-1.5178,1.3393-0.98215,1.0714-2.6786,0.26785-1.9643-0.0893-2.3214,0.44643-2.2322,1.1607-3.3928,1.7857-2.3214,0.98215-1.3393,0.89285-0.89285,1.1607s-0.0893,0.35714,0.0893,0.71428c0.17857,0.35715,0.98214,1.4286,0.98214,1.4286l1.6072,0.80357,0.98214,0.89285,0.83,0.91,0.0893,1.1607-1.6071,2.1428-0.35714,2.2322-0.35715,1.875v2.6786l0.80358,1.6071,1.1607,1.4286s0.26786-0.44643,0.71429-0.80357c0.44642-0.35714,1.1607-2.3214,1.1607-2.3214v-2.0536l0.0893-2.0536,0.98214-1.875,1.6964-1.25,1.1607-0.17857,0.89286,1.1607s-0.0893,1.25-0.26786,1.6964c-0.17857,0.44643-0.53571,0.98214-0.35714,1.3393,0.17857,0.35714,0.89286,1.4286,0.89286,1.4286l-0.17858,2.7678s-0.35714,2.3214-0.35714,2.6786c0,0.35714-0.26786,2.5893-0.26786,3.0357v2.5893c0,0.89285,0,1.5178,0.0893,2.1428s0.0893,1.6964-0.0893,2.1429c-0.17857,0.44643-0.44642,1.25-0.71428,1.9643-0.26786,0.71428-0.35714,1.25-0.44643,1.9643-0.0893,0.71429-1.0714,1.6964-1.0714,1.6964s-0.71428,0.26786-0.98214-0.625-1.6071-0.98214-1.6071-0.98214-0.71429,0.44642-1.0714,0.98214c-0.35715,0.53571-0.89286,1.25-0.35715,1.6964,0.53572,0.44643,1.5179,1.6071,1.5179,1.6071s0.625,0.35714,0.26786,1.1607c-0.35714,0.80358-1.1607,1.0714-1.6964,1.4286-0.53571,0.35714-1.5179,0.89285-1.6964,1.25-0.17857,0.35714-0.71428,1.4286-0.71428,1.7857,0,0.35714-0.44643,2.0536-0.44643,2.0536l-1.3393,0.98214-1.875,1.3393s-2.2321,0.71429-2.6786,0.98214c-0.44643,0.26786-2.5,1.4286-2.8571,1.7857-0.35715,0.35714-0.53572,1.25-1.4286,1.6071-0.89286,0.35714-3.125,1.3393-3.125,1.3393l-0.98215,0.26785s-0.35714,0.80357-0.35714,1.1607c0,0.35714-0.26786,2.2321-0.26786,2.7678,0,0.53572-0.26785,0.98215-0.625,1.6964-0.35714,0.71429-0.98214,1.6964-1.6071,1.7857-0.625,0.0893-2.7679,0.71428-3.2143,0.89285-0.44642,0.17858-2.5,0.89286-3.0357,0.98215-0.53571,0.0893-2.8571,1.0714-2.8571,1.0714l-0.71429,0.80357-1.5179,1.1607-2.0536,0.71429-1.4286,0.80357-1.6964-1.0714-0.35714-0.98214-0.44643-1.25s-0.35714-0.35715-1.25-0.26786c-0.89286,0.0893-2.0536,0.44643-2.0536,0.44643s-1.3393-1.4286-1.6071-1.875c-0.26786-0.44643-1.875-3.125-1.875-3.125l-1.54-1.99-1.34-1.61s-1.1607-0.71429-1.6964-0.71429c-0.53571,0-2.6786-0.17857-3.0357-0.17857-0.35715,0-1.6072-0.89285-1.7857-1.1607-0.17857-0.26786-3.4821-4.2857-3.4821-4.2857l-1.875-0.89285-2.8571-1.9643-1.9643-2.2321-1.0714-1.6964-0.89286-0.625s-0.89285-0.26786-1.25,0.0893c-0.35714,0.35714-0.80357,0.53571-1.3393,0.89285-0.53572,0.35715-1.875,1.4286-1.875,1.4286l-1.3393,1.25-1.9643,1.1607-1.4286,0.89286s-0.89286,1.0714-0.98215,1.6071c-0.0893,0.53571-0.26785,1.1607-0.26785,2.0536,0,0.89286-0.35715,3.3036-0.35715,3.3036z","name":"Buryat Republic"},"zb":{"path":"m588.41,500.07s1.1364,1.1364,1.6415,1.5152c0.50508,0.3788,1.6415,1.6415,2.2728,1.894,0.63134,0.25254,2.6516,1.6415,2.6516,1.6415s2.9042,1.0102,3.4093,1.0102h5.5558c1.1364,0,3.283,0.75762,3.283,0.75762s0.88388,0.63134,2.0203-0.25254c1.1364-0.88389,2.3991-1.6415,2.3991-1.6415s0.75762,0.25254,1.6415,0.63135c0.88388,0.3788,1.5152,1.2627,2.1466,1.2627,0.63135,0,3.4093-1.7678,3.4093-1.7678s2.6516-2.2728,3.1567-2.7779c0.50507-0.50508,2.5254-0.88388,3.5355-1.2627,1.0102-0.37881,5.4296-0.50508,5.4296-0.50508s1.894-1.2627,2.2728-1.894c0.37881-0.63135,1.7678-3.4093,1.894-3.9143,0.12627-0.50508,2.7779-2.3991,3.4093-2.9042,0.63135-0.50508,4.9245-2.5254,5.177-3.0305,0.25253-0.50508,2.0203-1.5152,2.0203-1.5152l3.1567,1.2627,2.9042,1.2627s2.2728,0.25254,2.9042,0.25254c0.63135,0,2.2728-0.50508,2.7779-0.88388,0.50508-0.37881,3.1567-1.7678,3.1567-1.7678s3.283,0.25254,3.7881,0.50508c0.50508,0.25253,1.7678,0.88388,2.3991,1.1364,0.63135,0.25254,3.9144,1.389,3.9144,1.389s3.6618,0.3788,4.4194,0.25254c0.75762-0.12627,2.5254-1.7678,2.7779-2.3991,0.25254-0.63134,0.75762-2.3991,1.6415-2.9042,0.88388-0.50507,4.2932-1.5152,4.2932-1.5152s1.389-0.12627,1.5152-1.6415c0.12627-1.5152,0.37881-2.9042-0.25254-3.5355-0.63135-0.63134-1.389-0.88388-1.7678-1.7678-0.3788-0.88389,0.88389-8.9651,0.88389-8.9651l1.6415-3.7881,1.2627-4.2932s1.389-2.2728,1.2627-2.9042c-0.12627-0.63134-0.37881-3.9143-0.37881-3.9143l-1-2.41s-1.1364-0.88388-1.5152-1.389c-0.37881-0.50507-1.0102-0.37881-1.5152-1.0102-0.50508-0.63135-1.7678-1.1364-1.7678-1.7678,0-0.63134-0.25254-1.5152,0.37881-2.0203,0.63134-0.50508,3.0305-3.0305,3.7881-3.4093,0.75761-0.37881,4.5457-2.5254,4.9245-3.0305,0.37881-0.50507,1.389-1.6415,1.7678-2.1466,0.37881-0.50508,0.88388-0.50508,0.63135-1.6415-0.25254-1.1364-2.6516-3.5355-2.6516-3.5355s-0.63135-0.88389-1.5152-0.88389c-0.88389,0-3.1567-0.3788-3.1567-1.0102,0-0.63134-0.37881-1.2627-0.12627-2.0203,0.25254-0.75762,2.0203-2.2728,2.2728-2.9042,0.25254-0.63135,0.37881-1.894,0.37881-1.894l-2.3991-1.6415-2.6516,0.12627s-0.25254-0.25253-0.25254-0.88388c0-0.63134,0.63135-2.7779,0.88388-3.283,0.25254-0.50507,0.50508-1.5152,0.63135-2.1466,0.12627-0.63134-0.25254-1.7678-0.75761-2.3991-0.50508-0.63135-1.5152-1.389-1.5152-1.389s-1.1364-0.50508-1.6415,0.12627c-0.50508,0.63134-1.1364,1.5152-1.1364,1.5152s-1.1364,0.12627-1.6415-0.25254c-0.50508-0.37881-0.88388-4.1669-0.88388-4.1669s-0.88389-1.2627-1.6415-1.389c-0.75762-0.12627-1.6415-0.12627-2.1466,0.50508-0.50507,0.63134-1.0102,1.0102-1.7678,1.5152-0.75762,0.50508-1.2627,1.1364-1.894,0.75762-0.63134-0.37881-1.389-0.75762-1.2627-1.389,0.12627-0.63135,0.75761-1.6415,0.88388-2.1466,0.12627-0.50507-1.7678-2.1466-1.7678-2.1466l-3.283-0.12627-1.1364-1.1364c-0.12627-0.75761,0.25254-2.5254,0.25254-2.5254l-1.389-1.5152-2.7779-4.0406-1.2627-1.894-3.1567-0.3788-1.1364-2.0203-0.25254-2.9042-1.2627-0.3788h-1.2627l-1.6415,0.63134-1.6415-1.0102-3.0304-0.63135-1.894,0.75762-0.37881,1.0102-0.12627,1.894,0.37881,1.894-0.25254,1.5152-0.50507,2.0203,0.75761,2.0203,0.50508,1.389,1.7678,1.5152,0.88389,0.88388,0.25254,1.894s-0.25254,1.0102-0.75762,1.389c-0.50507,0.37881-3.0305,1.2627-3.0305,1.2627s-2.3991,0.63134-2.9042,0.75761c-0.50508,0.12627-3.4093,0.75762-3.4093,0.75762l-1.389,1.5152-0.25254,1.6415,0.75762,2.5254,1.7678,3.283,1.6415,3.7881,0.75762,2.9042,2.0203,2.2728,1.2627,1.1364,2.1466,0.25254,2.2728,0.50507,1.7678,1.389,0.50507,1.6415,0.12627,1.894v2.3991l-1.894,1.6415-3.0305,1.2627-2.5254,1.2627-2.1466,2.0203-1.0102,1.7678-0.75761,2.1466-2.6516,1.6415-1.894,1.389-2.0203,1.5152-0.88388,0.88388v0.75762l0.88388,0.88388c0.50508,0.12627,2.1466,1.2627,2.1466,1.2627l1.894,1.0102s0.75762,0.88389,0.88389,1.389c0.12627,0.50508,0,1.5152-0.12627,2.1466-0.12627,0.63134-2.0203,3.6618-2.0203,3.6618l-1.894,1.6415-3.6618,2.0203-3.1567,0.63135-2.1466,1.0102s-0.75761,0.37881-1.1364,1.0102c-0.3788,0.63135-1.6415,1.2627-1.6415,1.2627l-2.2728,0.50507-1.0102,0.88388s-1.2627,0.88389-1.6415,1.389c-0.37881,0.50508-3.5355,2.9042-3.5355,2.9042l-0.88389,1.389s-0.75761,1.1364-1.389,1.2627c-0.63134,0.12627-2.2728,0.12627-2.2728,0.12627l-2.3991-0.88388-1.6415,1.389s-1.6415,0.37881-2.1466,0.88388c-0.50508,0.50508-2.7779,1.7678-2.7779,1.7678l-2.3991,0.63134s-1.894-0.25253-2.5254,0.12627c-0.63134,0.37881-1.2627,1.5152-1.2627,1.5152l0.63135,1.5152,0.25254,0.88388-0.88389,1.894s-1.0102,0.75762-1.0102,1.2627-0.88388,2.0203-0.88388,2.0203-0.50508,0.88388,0.25253,1.389c0.75762,0.50507,2.5254,0.88388,2.5254,0.88388s1.389-0.12627,1.5152,0.50508c0.12627,0.63134-1.1364,1.6415-1.1364,1.6415l-2.6516,0.75762-2.0203,1.2627-0.88389,1.6415z","name":"Zabaykalsky Krai"},"am":{"path":"m662.32,397.46,4.6429-0.17857,2.3214-0.17858,3.5714-1.7857,2.6786,0.35714,3.5714,1.0714,2.1429,1.0714,2.6786,0.53571,4.4643-0.53571,3.0357,0,2.3214,0.53571,2.8571,2.1429,2.1429,0.89286,2.8571,0.35714,2.3214-1.7857,2.3214-0.71429,1.9643,0,2.1429,1.4286,2.1429,0.71429,2.5-0.71429,1.7857-1.9643,1.7857-1.25,4.1072,0,2.5-1.4286,2.1428-0.89286,3.75,0,1.4286,0,1.25-0.71429,0.53571-2.5,1.6071-1.0714,4.2857-2.3214,2.3214-0.89286,3.5714-1.9643,2.8572-1.4286,5-0.89286,3.0357,0,1.6071,1.4286l-0.37,3.2s-1.25,1.6071-1.9643,2.6786c-0.71429,1.0714-1.6072,2.6786-1.9643,3.3929-0.35714,0.71429-1.25,2.1429-1.25,2.1429s-0.53571,2.8571-0.71429,3.5714c-0.17857,0.71428-1.0714,2.8571-1.0714,2.8571s-1.25,1.7857-1.0714,2.5c0.17857,0.71428,1.25,1.25,1.25,1.25l0.89285,0.71428,3.2143-0.71428s1.7857-0.17857,2.6786-0.17857c0.89286,0,2.5,0.89285,2.5,0.89285l0.53572,1.9643,0.89285,2.6786s0.17857,0.53572,1.6072,0.53572,2.6786-1.4286,2.6786-1.4286l0.17857-2.3214s1.0714-0.89286,1.9643-0.89286c0.89286,0,2.5-0.53572,2.5-0.53572l1.25-2.1428,0.35715-2.5,1.9643-1.7857,2.3214,0.17857c0.71,0.19,3.03-1.6,3.03-1.6l1.4286-1.4286s0.89285-1.0714,1.9643-0.35714c1.0714,0.71428,2.3214,2.5,2.3214,2.5v2.8571l0.53572,1.6071,1.9643,1.7857s1.6071,0.71428,1.25,1.6071c-0.35714,0.89286-2.8571,1.9643-3.5714,1.9643-0.71428,0-3.5714,0.89285-3.5714,0.89285l-1.6071,0.17857-1.96,0.89s-0.71429,0.17857-0.17858,1.0714c0.53572,0.89286,1.9643,1.7857,1.9643,1.7857l1.25,0.89286,0.35714,1.9643-3.2143,2.3214-1.6072,3.0357-0.17857,2.1429-1.6071,2.3214-2.6786,0.89285-1.6071,1.4286,1.9643,1.9643,0.35714,1.7857-2.3214,2.3214-1.25,3.5714,1.6071,2.8571s3.5714,1.4286,4.2857,1.6072c0.71429,0.17857,4.8214,0.71428,4.8214,0.71428s1.4286,0.71429,1.9643,1.25c0.53571,0.53572,0.71428,3.2143,0.71428,3.2143l0.35715,2.5s0,0.53571,0.71428,1.0714c0.71429,0.53571,0,3.5714,0,3.5714l-0.71428,2.8571-0.53572,1.7857-1.25,1.7857-3.2143,0.35714-4.1072-0.17857-2.8571-1.4286-1.77-0.53-3.04,1.07h-3.3929-2.5l-3.2143,0.89286s-2.6786-0.35714-3.5714-0.53572c-0.89286-0.17857-3.5714-2.1428-3.5714-2.1428l-3.22-2.67-1.07-2.15-1.43-2.14-1.7857-1.0714-1.0714-1.9643s0-1.0714-0.71428-1.6072c-0.71429-0.53571-2.6786-0.71428-2.6786-0.71428l-0.89286-1.25-1.7857-2.8571-1.9643-2.5s-1.25-1.4286-1.9643-1.6072c-0.72-0.18-1.79-0.36-2.15-1.43-0.35715-1.0714-2.3214-2.6786-2.3214-2.6786l-2.8572-1.4286-2.6786-1.4286-3.0357-0.17857-2.6786-0.17858s-0.71429,0.89286-1.6072,1.0714c-0.89285,0.17857-4.4643-0.35714-4.4643-0.35714l-3.5714-1.25-2.3214,0.35714-1.9643,0.89286-1.6072,1.4286-3.75,0.71429s-3.2143,0.71428-3.3928,0c-0.17858-0.71429-2.8572-4.1072-2.8572-4.1072l-1.7857-1.4286h-1.6071l-1.0714-1.0714v-2.1428l2.1428-2.1429,0.17858-1.4286-0.89286-1.4286-1.25-0.89286-2.1429-0.17857s-0.71428,1.0714-0.71428,0,0.71428-3.3929,0.71428-3.3929l0.89286-2.3214-0.35714-1.9643-1.25-1.7857-1.7857-0.71428-1.25,0.71428-1.25,0.71429-1.25-0.17857s-0.35714-0.71429-0.35714-1.4286c0-0.71429-1.25-2.6786-1.25-2.6786l-0.71429-0.71428-1.7857-0.17857-0.89286,0.89285-1.4286,0.89286-2.5,0.53572s-0.35714-0.35715-0.17857-1.0714c0.17857-0.71429,0.71428-2.5,0.71428-2.5l-1.25-1.4286-0.51-0.52-1.79-0.18h-2.1429l-0.35714-1.0714v-2.1429z","name":"Amur Oblast"},"ch":{"path":"M876.72,53.094c-0.34,0-0.66,0.094-0.66,0.094l-1.78,2.124-4.47,1.969s-6.05,2.853-7.12,3.031c-1.07,0.179-1.44,1.969-1.44,1.969s0.37,2.514,0.19,3.407c-0.18,0.892-1.44,1.406-1.44,1.406s-2.32,1.428-2.5,2.5c-0.18,1.071,0.91,2.156,0.91,2.156s2.66,0.906,3.37,0.906c0.72,0,2.85-0.375,3.56-0.375,0.72,0-0.34,1.625-0.34,1.625l-0.91,1.782-2.31-0.907-3.03-0.719s-2.14,0.554-3.03,0.376c-0.89-0.179-2.31-1.438-2.31-1.438l-2.69,0.531-2.88,0.375h-1.06s-0.53,2.656-1.25,2.656c-0.71,0-2.12,1.782-2.12,1.782l-3.41,0.187-2.84,2.875s-2.86,2.496-3.75,3.032c-0.9,0.535-1.61,0.531-2.5,0.531-0.9,0-2.5,1.062-2.5,1.062l-4.85,3.219-5.15,1.062-3.07,0.907s-1.04,2.861-1.93,3.219c-0.9,0.357-2.88,1.968-2.88,1.968l-3.22,1.938-2.12,1.966-2.16,3.03-1.25,1.97-1.06,2.5v3.22s-0.91,0.72-1.63,0.72c-0.71,0-2.84,1.25-2.84,1.25s-0.9,2.51-1.44,3.41c-0.53,0.89-2.85,1.76-3.56,2.12s0.34,1.25,0.34,1.25l2.35,0.53,0.53,2.16,2.69,0.53h2.65,3.75s1.44,1.07,1.97,1.78c0.54,0.72,1.63,1.78,1.63,1.78l-1.82,2.5-2.5,1.1-2.31-0.72s-1.6,1.25-2.31,1.25c-0.72,0-2.16,1.59-2.16,1.59s-1.42-0.71-2.31-1.25c-0.89-0.53-1.96,0-3.03,0s-1.26,1.26-1.44,1.97-0.87,2.84-0.87,2.84-1.09,1.79-1.63,2.5c-0.53,0.72-2.66,2.69-3.37,3.22-0.72,0.54-1.81,0.54-4.13,0.72s-1.07,1.26-1.25,2.16c-0.18,0.89-1.06,3.03-1.06,3.03s-2.15,1.24-2.69,2.31c-0.53,1.07-0.53,2.67-0.53,3.56,0,0.9,0.53,1.82,0.53,1.82h1.06l0.19-0.72,0.19-1.97,0.72-1.06,0.72,0.53,3.9,1.59,5,3.41,0.38,0.87-0.38,5.19-1.06,2.84-4.09,4.47-2.88,3.94-0.34,2.5,1.25,0.19h1.59s-0.17,1.42-0.53,2.31,0.34,1.59,0.34,1.59l2.88,1.25,3.75,0.38,4.62-0.19,2.69,3.41,2.16,1.78h4.47c1.25,0,1.06,2.5,1.06,2.5l1.06,1.59,3.94-0.34s5.36-1.44,6.25-1.44,3.2-0.53,3.56-1.25c0.36-0.71,2.69-1.59,2.69-1.59l1.97-0.91h3.75s2.66-1.24,3.37-1.59c0.72-0.36,0.74-1.98,1.1-2.69,0.35-0.71,0.87-3.03,0.87-3.03l1.25-2.5h1.63l1.78-1.06,1.06-1.63,1.44-0.34,2.31-1.44,1.06-1.25s0.91-0.89,1.63-1.78c0.71-0.89,0.87-1.6,1.4-2.31,0.54-0.72,2.51-1.44,3.22-1.97,0.72-0.54,2.15-2.14,2.5-3.03,0.36-0.9,1.63,0,1.63,0l4.09,0.68s3.22-1.04,5.72-1.93c2.5-0.9,1.08,1.06,0.91,1.78-0.18,0.71,0,3.2,0,4.09s0.88,3.22,1.78,4.47c0.89,1.25,3.9-1.44,3.9-1.44s3.05-1.78,3.94-2.5c0.89-0.71,3.94,0,3.94,0h6.06v-2.84c0-0.72,1.43-3.23,1.97-4.13,0.54-0.89,1.25-3.56,1.25-3.56l0.72-2.5-0.19-4.81s1.79-1.97,3.22-1.97,2.69,1.59,2.69,1.59l4.28,0.91,1.44-0.53s-0.19-3.22-0.19-3.94c0-0.71-0.19-2.84-0.19-2.84l-0.53-3.22s-0.54-2.51-0.72-3.41c-0.18-0.89-0.87-2.12-0.87-2.12l-2.5-1.63,1.25-0.87,4.09-0.38s1.96-2.66,2.5-3.37c0.54-0.72,2.84-2.35,2.84-2.35v-2.5s-1.04-2.13-1.93-3.03c-0.9-0.89-2.35,0.18-3.07,0.53-0.71,0.36-3.03-0.34-3.03-0.34s-1.41-0.88-2.12-0.34c-0.72,0.53-1.63,1.06-1.63,1.06l-1.4-1.06-1.97,1.78-1.44-0.72s-2.84-1.79-4.09-1.25c-1.25,0.53-1.97-0.72-1.97-0.72h-2.5s-0.56,1.25-1.1,1.97c-0.53,0.71-3.03,0.87-3.03,0.87l-2.84,0.91-2.69,3.75-2.69,0.53,1.25-2.5,0.19-1.59-3.03-0.38s2.13-0.88,2.84-1.06c0.72-0.18,3.41-1.06,3.41-1.06l1.97-0.91,0.34-1.59s1.78-3.41,1.78-4.13c0-0.71-0.68-3.22-0.68-3.22l-0.91-2.31s-2.5-4.63-3.22-5.34c-0.71-0.72-1.05-1.78-2.12-1.78-1.08,0-3.07,0.68-3.07,0.68l-1.4,0.91-1.25-1.06s-2.17-1.98-3.6-2.159c-1.42-0.178,0.38-0.719,0.38-0.719l0.87-1.593s-0.16-1.973,0.38-2.688c0.53-0.714,1.97,1.25,1.97,1.25s2.67,1.438,3.56,1.438,1.78,0.531,1.78,0.531,3.41-0.371,4.13-0.906c0.71-0.536,0.68-2.313,0.68-2.313l0.19-2.687,0.72-1.25,1.25-1.782s0.36-1.964,1.25-2.5c0.89-0.535,1.79,0,2.69,0,0.89,0,2.31,1.626,2.31,1.626l1.59,0.718,2.5-1.437s1.28-2.139,1.82-3.031c0.53-0.893,2.84-1.782,2.84-1.782l2.84-2.156,1.44-3.219s2.14-1.973,2.5-2.687c0.36-0.715-0.34-1.782-1.59-1.782h-1.78l-1.82-1.062-1.93-0.188-3.07-1.781-3.18-0.187h-3.75c-0.9,0,0-0.875,0-0.875l2.5-1.625,0.68-2.5-1.06-1.25-2.5-0.532,1.78-1.25,0.53-1.25-2.31-0.531v-2.5s-0.35-1.785-0.53-2.5c-0.09-0.357-0.45-0.437-0.78-0.437zm-77.19,16.062c-0.22-0.01-0.48,0.081-0.78,0.282-1.61,1.071-3.94,2.312-3.94,2.312-1.07,0.357-1.79,1.42-1.97,2.312-0.17,0.893-0.53,2.88-0.53,3.594,0,0.715,0.2,2.496,1.1,3.032,0.89,0.535,3.03,1.598,3.03,2.312s-0.56,2.321,0.15,2.5c0.72,0.179,1.44-0.522,1.97-1.594,0.54-1.071,0.36-3.419,0.72-4.312s1.45-2.491,1.63-3.563c0.17-1.071-0.19-5.187-0.19-5.187s-0.24-1.644-1.19-1.688z","name":"Chukotka Autonomous Okrug"},"ha":{"path":"m779.82,276.93c0.53572-0.71428,1.4286-1.4286,1.9643-2.3214,0.53571-0.89285,1.7857-2.5,1.7857-2.5s1.7857-0.17857,4.1072,0.17858c2.3214,0.35714,4.4643,1.4286,5.7143,2.1428,1.25,0.71429,2.6786,1.25,3.0357,2.3214,0.35714,1.0714,1.6071,2.1429,1.6071,3.3929s-1.4286,3.5714-1.4286,4.2857c0,0.71429-0.17857,2.5,0.71428,3.3929,0.89286,0.89286,0.71429,1.6071,1.7857,1.4286,1.0714-0.17857,3.9286-1.0714,5-1.25,1.0714-0.17857,3.3929,0,5,0.53572,1.6071,0.53571,2.8571,0.89285,3.2143,1.6071,0.35715,0.71428,1.0714,1.4286,0.89286,2.5-0.17857,1.0714-2.5,2.8571-2.5,2.8571l0.17857,1.4286,0.89286,1.6072s1.6071,0.71428-0.35714,0.89285c-1.9643,0.17857-3.0357-0.71428-3.0357-0.71428s0.17857-0.17857,0-1.0714c-0.17857-0.89286-0.71428-1.7857-1.7857-1.4286-1.0714,0.35714-2.3214,1.9643-3.0357,2.5-0.71428,0.53571-2.8571,3.0357-2.8571,3.0357s-1.9643,0.71429-2.8571,1.7857c-0.89286,1.0714-4.1071,4.6428-4.1071,4.6428s-0.17858,1.25-1.0714,2.5c-0.89286,1.25-2.3214,2.3214-2.5,3.5714-0.17857,1.25,0,4.1071,0,4.1071s1.4286,1.0714,1.6071,2.3214c0.17857,1.25-0.89286,1.9643-1.25,2.8572-0.35714,0.89285-1.4286,0.53571-1.4286,1.7857s0.17857,5.7143,0.17857,5.7143l-0.35714,4.8214-0.35715,4.1072s-1.0714,1.9643-1.25,3.2143c-0.17857,1.25-0.35714,2.6786-0.35714,3.3929,0,0.71429-0.17857,3.0357-0.17857,3.75,0,0.71429-0.71429,1.9643-0.89286,2.6786-0.17857,0.71429-1.0714,1.25-0.17857,1.9643,0.89286,0.71428,1.9643,1.9643,1.9643,1.9643l-1.7857,3.3929-0.17857,1.9643-1.7857,3.3928-1.25,3.75-0.35715,4.1072-0.71428,1.6071-3.2143,4.1071,0.35715,2.6786s2.1428,1.0714,2.8571,1.0714c0.71428,0,3.3929,0.53572,4.4643-0.17857s2.5-1.4286,3.2143-1.7857c0.71429-0.35715,1.6071-0.89286,2.8571,0.35714s2.5,4.4643,2.5,4.4643,0.17857,1.4286,1.4286,1.0714c1.25-0.35714,1.9643-2.1428,1.9643-2.1428l-1.0714-2.1429,0.53572-2.6786-0.53572-1.7857-1.6071-2.5s-1.7857-1.4286-2.5-1.4286c-0.71429,0-3.75,1.4286-3.75,1.4286s-1.9643,2.3214-1.6071,1.4286c0.35714-0.89285,1.9643-3.3928,1.9643-3.3928l1.6071-0.35715,1.25-1.7857s0.89286-0.71429,1.9643-0.71429,3.2143-1.25,3.2143-1.25,1.25-2.6786,1.0714-0.89285c-0.12,1.78-1.72,4.28-1.72,4.28l1.0714,2.1429,1.9643,2.1429,0.53572,1.7857-0.17857,2.6786,2.3214,1.4286v1.6072,2.8571l1.7857-0.71429c0.71429-0.71428,2.1429-4.2857,2.1429-4.2857l0.89285-3.2143v-2.1428s-1.6071-1.7857-0.89285-1.9643c0.71428-0.17857,4.6428-2.1429,4.6428-2.1429s2.1429-0.53571,3.0357-0.53571c0.89286,0,4.1071,0.17857,4.8214,0.35714,0.71428,0.17857,4.4643,1.6071,4.4643,1.6071s4.4643,1.25,5.1786,1.25c0.71429,0,1.9643,1.7857,1.9643,1.7857s-0.89286,1.9643,0.53571,2.8571c1.4286,0.89286,4.8214,3.0357,4.8214,3.0357l3.75,2.1428s1.4286,3.3929,1.4286,4.2857c0,0.89285-0.17857,4.6428-0.17857,5.7143,0,1.0714,0,5,0.53572,5.7143,0.53571,0.71428,1.0714,2.3214,2.1428,3.2143,1.0714,0.89286,3.2143,4.2857,3.2143,4.2857l2.5,1.25,3.0357,6.9643s1.4286,1.4286,1.6072,2.3214c0.17857,0.89286,1.6071,3.0357,1.7857,3.75,0.17857,0.71429,1.6071,5,1.7857,5.7143,0.17857,0.71428-0.53572,8.5714-0.53572,8.5714l0.53572,3.3928s0,1.25-0.89286,1.9643c-0.89286,0.71429-3.5714,1.6071-3.5714,1.6071l-1.4286,0.17857-1.4286-1.7857-0.53572-2.6786-3.0357-3.0357s-1.9643-1.25-2.6786-0.71428c-0.71429,0.53571-2.3214,1.9643-2.3214,1.9643s-0.89286,1.7857-1.25,2.5c-0.35714,0.71429-1.4286,1.25-0.89286,2.3214,0.53572,1.0714,1.9643,2.6786,1.9643,2.6786s0.35714-0.71428,2.1428-0.53571c1.79,0.18,2.14,2.68,2.14,2.68l-0.89286,3.2143s-1.9643,1.25-2.6786,1.6071c-0.71428,0.35714-2.8571,1.25-1.7857,2.1429,1.0714,0.89285,2.3214,1.25,2.3214,1.25s0.71428,1.25,0,1.9643c-0.71429,0.71429-2.3214,2.1429-2.3214,2.1429s-1.7857,0.35714-3.0357,1.25-3.2143,1.4286-4.2857,1.6071c-1.0714,0.17857-2.8571,1.25-4.1071,0s-2.1429-0.89285-2.5,0.17857c-0.35715,1.0714-1.6072,0.89286-1.7857,1.9643-0.17857,1.0714,0,2.8571,0.35715,3.5714,0.35714,0.71428,0,3.0357,0,3.0357s-2.3214,1.9643-2.5,1.25c-0.17858-0.71428,0.17857-2.3214-0.35715-3.2143-0.53571-0.89286-2.3214-2.5-2.3214-2.5s-2.8571-1.4286-1.7857-2.3214c1.0714-0.89286,2.8571-2.6786,3.2143-3.2143,0.35714-0.53571,0.35714-3.0357,0.35714-3.0357s-2.1429-0.89286-2.6786-1.7857c-0.53572-0.89285-1.0714-3.3928-1.0714-4.1071,0-0.71428-0.71429-3.3929,0.17857-3.75,0.89286-0.35714,2.8571-1.9643,2.8571-1.9643l0.53572-1.9643s-0.53572-0.35714-2.1429-0.35714c-1.6071,0-2.5-0.17857-3.9286,0.89285s-1.4286,1.0714-2.5,2.5-2.1429,2.6786-3.2143,3.2143c-1.0714,0.53571-2.6786,0.71429-2.6786,0.71429s-4.1071-0.71429-4.2857-1.4286c-0.17857-0.71428-1.6072-1.9643-2.5-1.9643-0.89286,0-2.1429,0.35714-3.2143,0.89286-1.06,0.55-1.95,0.73-2.84,0.73-0.89286,0-4.2857,1.0714-4.2857,1.0714s-2.1428,1.7857-3.2143,1.7857c-1.0714,0-2.1014,0.40945-2.28-0.66198-0.17857-1.0714-1.0823-3.4216-1.0823-3.4216l-1.5332-4.3507s-2.6677-0.69261-3.7392-0.87119c-1.0714-0.17857-3.8221-0.85138-3.8221-0.85138l-2.4892-1.1525s-2.1249-2.2078-1.7678-2.9221c0.35714-0.71428,1.7028-4.0044,2.4171-4.5401,0.71428-0.53572,1.2608-1.4069,1.2608-1.4069l-1.25-2.3214s-1.7965-1.2085-0.90368-1.7442c0.89286-0.53571,3.7608-2.0058,3.7608-2.0058l2.0906-4.0892,1.5025-3.2341,3.5498-2.6767-0.89285-1.9643-2.4171-1.7118-0.11357-1.6288,2.5306-1.1237,4.1071-0.71428,2.6786-0.89286,1.0714-1.25-0.53571-1.6071-1.986-1.47-1.0083-2.5108-0.0631-2.4477-1.47-2.0058-1.7226-0.67282-2.2583,1.7442s-1.6703,1.0823-2.3846,1.4394c-0.73,0.34-2.87,0.19-2.87,0.19l-2.3214,1.25-0.44008,2.5-0.80992,2.3214-2.5,1.0714-2.1429,0.53571-0.53571,2.4585-1.4809,1.4286-2.3431-0.17857-0.99746-2.4585-1.0714-2.5s-1.2608-0.51404-1.9751-0.69262c-0.71428-0.17857-4.4534,0.51405-4.4534,0.51405l-1.7857-0.17857-1.7857-1.25,1.9643-5.5357,0.89286-4.1072s1.25-2.3214,1.9643-3.0357c0.71428-0.71429,3.0357-5,3.0357-5l0.35714-2.6786s-0.53571-1.25-1.6071-1.6072c-1.0714-0.35714-5.3571,0.17858-5.3571,0.17858l-2.6786,0.53571s-3.3424,2.5325-4.0567,1.8182c-0.71428-0.71429-1.1219-3.9611-1.1219-3.9611s-3.0376-1.6288-3.0376-2.5217c0-0.89286,1.9662-1.5855,1.9662-1.5855s0.53571-1.0714,0.71428-2.1429c0.17857-1.0714-0.20024-2.8138-0.20024-2.8138l-2.6281-0.77741s-1.4069-0.89472-2.1212-1.0733c-0.71428-0.17857,1.1996-2.2998,1.1996-2.2998l0.89286-1.6072-0.35714-1.0714s-2.2493-0.54655-2.2493-1.2608c0-0.71429,1.6505-3.3604,1.6505-3.3604l-1.5873-1.6703-2.5415-0.82971-0.80806-1.618s0.69262-0.73594,1.5855-1.0931c0.89286-0.35714,1.0498-0.61866,1.0498-0.61866l-1.3852-0.89286v-2.4062c0-0.71429-0.074-2.3304-0.074-2.3304s-1.2718-1.1078-1.4502-2.345c-0.1894-1.3131,2.6371-1.7532,2.6371-1.7532l-0.93619-0.82972-0.49238-1.4917,0.2417-2.1339,2.7525-0.86037,2.9094-0.89285,2.4477,0.1371,0.70345-1.8922,3.2034,0.21106,2.9203,0.0108s0.35715-1.7749,0.35715-2.4892c0-0.71428-1.8705-1.618-1.4286-2.2691,0.40112-0.59101,1.5657-0.89285,2.4585-1.0714,0.89286-0.17858,3.9286-0.71429,4.1072-1.4286,0.17857-0.71428,2.5829-6.1562,2.5829-6.1562s0.96683-1.0083,1.6811-1.1869c0.71429-0.17857,3.9286-0.93432,3.9286-0.93432l-1.764-2.794-3.0051-2.8246-1.6378-4.8539-2.3214-2.1428-1.4286-1.7857v-5.3571l3.0357-6.7857-1.0714-3.2143-0.72512-5.8585,0.81889-2.85s3.5498,0.11543,4.264,0.29401c0.71428,0.17857,7.7634,0.22004,7.7634,0.22004s0.95599-4.0152,1.3131-4.7295c0.35714-0.71428,1.3871-0.826,2.28-1.0046,0.89286-0.17857,3.3495-0.62051,3.3495-0.62051l2.5433,1.1562,1.6071-1.0714z","name":"Khabarovsk Krai"},"eu":{"path":"m781.96,462.82c0.98214,1.875,1.1607,1.875,1.875,2.5893l2.6786,2.6786s0.80357,1.1607,1.0714,1.7857c0.26786,0.625-0.0893,1.6964,0.625,1.9643,0.71429,0.26785,2.3214,0.53571,2.7679,0.625,0.44643,0.0893,1.4286,1.0714,2.3214,1.1607,0.89285,0.0893,1.6071,0.0893,2.1428-0.35714,0.53572-0.44643,1.0714-1.25,1.6964-1.7857,0.625-0.53571,2.5893-1.4286,3.125-1.6964,0.53572-0.26785,1.875-0.625,2.3214-1.0714,0.44643-0.44643,1.1607-0.98215,1.1607-2.0536s0.26785-2.7678,0.71428-3.125c0.44643-0.35714,2.9464-1.9643,3.5714-2.5,0.625-0.53571,1.6964-2.2321,2.1429-2.8571,0.44643-0.625,1.875-2.6786,2.2321-3.2143,0.35714-0.53572,2.1429-2.0536,2.1429-2.0536l2.0536-2.3214,0.98214-1.0714,2.6786-1.875,0.71429-0.80357,0.17857-1.1607,0.0893-0.35714-1.5179-0.17857-1.875-0.0893-1.6964,0.44643-1.6964,1.1607-1.3393,1.25-0.80358,1.0714-1.25,1.6072-1.4286,0.98214-1.7857,0.625s-1.25,0.17857-1.7857,0c-0.53571-0.17857-2.1428-0.71429-2.1428-0.71429l-1.4286-0.625-0.80358-0.98214-0.89285-0.625s-0.80357-0.26786-1.1607-0.17857c-0.35714,0.0893-1.7857,0.625-1.7857,0.625l-2.0536,0.71429-2.4107,0.17857s-1.0714,0.44643-1.7857,0.625c-0.71429,0.17857-2.4107,0.80357-2.4107,0.80357l-1.4286,0.89285-1.875,0.26786-0.80357,0.17857-0.35714,0.98215-0.0893,1.4286s-0.44643,1.1607-0.44643,1.5178c0,0.35715-0.53571,1.875-0.53571,1.875l-0.53571,1.1607-0.71429,1.4286z","name":"Jewish Autonomous Oblast"},"pr":{"path":"m822.68,473.71c0,0.53571,0.53571,1.25,0.53571,1.25l1.4286,1.4286s0.35715,1.0714,0.44643,1.4286c0.0893,0.35714-0.625,2.0536-0.625,2.0536l-1.1607,2.7679s-0.0893,2.2321,0,2.5893c0.0893,0.35715,0.625,1.0714,0.89285,1.5179,0.26786,0.44643,0.80358,1.1607,0.80358,1.5179,0,0.35714-0.80358,1.9643-0.80358,1.9643v1.9643c0,0.44643-0.44642,1.9643-0.44642,1.9643s-0.17858,0.0893-0.17858,1.0714v2.7679c0,0.71429-0.26785,3.0357-0.35714,3.3929-0.0893,0.35714-1.9643,0.53571-2.3214,0.53571-0.35714,0-1.3393-0.98214-1.3393-0.98214s-0.98215-1.6071-1.1607-2.0536c-0.17857-0.44643-1.3393-1.5179-1.3393-1.875,0-0.35715-0.26786-1.6072-0.89286-1.7857-0.625-0.17857-1.5179,0.26786-1.5179,0.26786s-0.53571,0.89286-0.625,1.25c-0.0893,0.35714,0,0.98214-0.0893,1.4286-0.0893,0.44643-0.71429,2.5-0.71429,2.5s-0.625,0.625-1.1607,0.89286c-0.53572,0.26786-2.2322,1.0714-2.2322,1.6071,0,0.53572,1.0714,0.71429,2.1429,2.0536,1.0714,1.3393,3.125,4.6429,3.125,4.6429l2.5,4.2857,1.4286,4.9107s0.44643,1.6071,0.625,2.1429c0.17857,0.53571,0.89286,1.1607,0.98215,1.9643,0.0893,0.80357,0.53571,2.5-0.35715,2.8571-0.89285,0.35715-4.0178,1.0714-4.0178,1.0714l-0.71429,0.625,1.1607,0.71429s0.625,0.44643,1.0714,0.53571c0.44643,0.0893,0.53572,1.4286,0.98215,1.4286,0.44642,0,1.875-0.35714,2.4107-0.71428,0.53571-0.35714,1.3393-0.625,2.1429-0.625,0.80357,0,1.4286-0.44643,1.4286-1.0714,0-0.625-0.625-3.3929-0.625-3.8393,0-0.44642,1.5179-2.5893,1.5179-2.5893v-2.1429c0-0.35714-0.17858-1.4286,0.35714-1.5179,0.53571-0.0893,2.9464-0.71428,2.9464-0.71428s0-1.1607,1.0714-0.26786c1.0714,0.89286,1.5178,2.9464,1.5178,2.9464s1.875,0.35714,2.2322,0.17857c0.35714-0.17857,0.98214-0.625,1.5178-0.98214,0.53572-0.35714,2.5893-0.53572,3.3929-0.53572,0.80357,0,2.1429-0.44642,2.1429-0.44642l-0.26786-1.1607s2.0536-1.25,2.5-1.5179c0.44643-0.26785,2.2321-1.1607,2.8571-1.7857s1.5179-1.4286,1.9643-2.4107c0.44643-0.98215,1.3393-3.125,1.5179-3.4822,0.17857-0.35714,1.1607-2.5,1.4286-3.2143,0.26785-0.71429,0.89285-2.3214,1.3393-3.125,0.44643-0.80357,1.5179-2.8572,1.5179-2.8572s-0.0893-2.3214-0.0893-2.8571c0-0.53571-0.26785-1.875-0.625-2.8571-0.35714-0.98214-0.53571-1.1607-0.44642-2.1429,0.0893-0.98214,0.98214-1.6071,1.6071-2.0536,0.625-0.44643,1.0714-1.4286,1.0714-1.9643,0-0.53571-1.25-2.9464-1.25-2.9464s0.0893-1.1607,0.35714-1.6964c0.26786-0.53572,1.5179-1.7857,1.5179-1.7857l0.17857-2.9464s0.80357-2.2321,0.80357-2.6786c0-0.44643,0.26786-3.9286,0.26786-3.9286l0.89285-2.1429s0.26786-3.3928,0.26786-3.9286c0-0.53571-0.53571-5-0.53571-5.5357,0-0.53572-0.17857-4.1071-0.17857-4.7321s-0.71429-2.1429-0.71429-2.5893c0-0.44643,0.0893-2.1429,0.26786-2.5893,0.17857-0.44643,0.98214-1.9643,0.98214-1.9643s-0.0893-2.0536-0.0893-2.5893c0-0.53571,0.17858-1.6964-0.44642-1.7857s-2.3214,0.80357-2.3214,0.80357l-1.7857,0.71429-1.5178,0.17857-0.71429-0.44643-1.0714-1.4286s-0.26786-1.4286-0.26786-1.7857c0-0.35714-0.53571-1.1607-0.53571-1.1607l-1.25-1.3393-1.3393-1.3393-1.4286-0.71429-1.0714,0.17857s-0.98214,0.17858-1.0714,0.53572c-0.0893,0.35714-0.53572,0.44643-0.80358,0.80357-0.26785,0.35714-1.1607,1.3393-1.1607,1.3393l-0.53571,1.0714-0.44643,1.0714-0.80357,0.80357-0.17858,0.71429,0.35715,0.80357,0.89285,0.98214s0,0.71429,0.53572,0.80358c0.53571,0.0893,1.0714,0.0893,1.0714,0.0893h1.3393l1.25,0.625,0.71429,0.80357,0.0893,1.3393-0.26785,1.4286-0.44643,1.25-0.53572,0.71429-1.5178,0.89285-1.7857,0.89286-0.89285,0.89286,0.26785,0.80357,1.9643,0.80357,0.80357,0.98214-0.0893,0.71429-0.80357,1.0714-1.0714,1.0714-1.875,0.89286-1.7857,0.98214-3.64,1.44-1.6964,0.44643-1.9643,0.26786-0.89286-0.44643-1.25-0.71429s-0.53571-0.26786-0.89285,0c-0.35715,0.26786-0.625,0.98214-0.625,0.98214l-1.5179,1.0714-0.53571,1.6964,0.0893,1.3393s0.35714,0.71428,0.44643,1.1607c0.08,0.44,0.08,1.33,0.08,1.33l-0.0893,1.6071-0.98214,1.0714z","name":"Primorsky Krai"},"ma":{"path":"m829.64,182.46s1.0714,0.71428,2.1429,1.25c1.0714,0.53571,3.0357,2.1429,3.2143,2.8571,0.17857,0.71429,0.17857,2.3214,1.0714,2.8571,0.89286,0.53572,3.5714,1.0714,3.5714,1.0714l1.9643,0.89286,1.0714,1.7857,3.0357,1.6072s0.71429,1.0714,0.17857,1.9643c-0.53571,0.89286,0,2.6786,0,2.6786l2.5-0.35714,2.8572,0.35714,1.6071,2.3214,1.9643,2.6786,2.1429,1.0714,1.9643,2.1429,1.0714,1.9643,0.17857,2.5s-0.35715,2.5,0,3.2143c0.35714,0.71429,1.0714,3.75,1.0714,3.75l1.0714,1.7857s0.53572,1.0714,0.53572,1.7857c0,0.71428-0.89286,2.1429-0.89286,2.1429l0.17857,1.7857-1.9643-0.53571-0.35715-1.9643s0.35715-0.71429-0.53571-0.35714c-0.89286,0.35714-1.7857,1.4286-1.7857,1.4286s-0.35715,0.89286-1.0714-0.53572c-0.71429-1.4286-1.7857-1.9643-1.7857-1.9643s-1.6071-0.71429-1.6071-1.9643-1.7857-2.3214-1.7857-2.3214l-1.6072-1.4286s-0.35714,1.7857-0.35714,2.5c0,0.71429,1.4286,1.4286-0.35714,1.4286s-4.1072,0.71429-4.1072,0.71429l-0.89285,1.0714-0.35715,2.6786-1.25,1.25-2.6786,2.8571-0.35714,2.3214-1.0714,1.9643,0.53572,2.3214,1.4286,1.4286s0.53571,0.71428,0.53571,1.4286v2.6786l0.17857,1.6071,1.6072,1.4286,0.17857,4.4643v4.4643l0.17857,3.0357,1.7857,2.6786,1.0714,3.0357,0.35714,0.89285,1.9643,0.35715,1.0714-1.25,1.9643-1.0714s1.6072-0.17857,2.3214-0.17857c0.71429,0,1.6072,0.89285,1.6072,0.89285l0.17857,0.89286-1.7857,1.4286-1.7857,0.71429v1.0714l-0.71429,0.89285-1.7857,0.89286-1.25,0.53571-0.53572,0.71429-0.17857,2.6786v2.3214l-0.89285,0.71429-1.7857-0.89286-0.71428,1.4286-0.53572,2.5-1.0714,1.25-3.2143,0.71429-1.25-0.17858-0.53572-1.6071,2.5-1.6071,1.25-1.9643s1.9643-1.7857,0.53572-1.7857-2.6786,1.0714-2.6786,1.0714l-0.89286,1.25-0.89286,0.53571s-0.89286,0.35714-1.7857-0.17857c-0.89286-0.53571-2.3214-0.71429-2.3214-0.71429s-1.25,0.89286-1.25,1.4286c0,0.53571,0.35714,1.4286-0.53572,1.4286-0.89285,0-3.2143,0.17857-3.2143,0.17857l-2.5,1.6071-2.5,0.89286-1.0714,2.1429,0.35714,1.7857,0.53572,1.9643,0.35714,0.89285,1.6071,1.0714s0.17857,0.89286-1.7857,0.89286h-4.4643l-1.0714,2.1429-1.0714,1.25-2.5,0.35714-2.1429-2.8571-2.6786-1.25s-1.9643-0.71429-2.6786-0.71429c-0.71429,0-3.3929,0.17857-3.3929,0.17857l-2.1429,0.89286-1.7857,0.17857-1.25-0.89286-1.0714-1.7857-0.17857-2.3214,1.25-1.9643,0.17857-2.5-2.5-3.9286-2.3214-1.4286-2.3214-1.25-2.6786-0.71428-2.6786-0.71429-2.1429,0.71429-1.0714,1.4286-1.0714,1.9643-0.89285,1.25h-1.25l-1.25-1.9643-0.17857-0.89286,1.25-0.71429,0.35714-1.4286v-1.25l-1.25-1.25-5.7143-6.7857s-0.35714-1.0714-0.35714-1.7857v-3.2143l-1.78-0.88-0.89286-0.35714-0.17857-3.0357-0.53572-1.4286-1.0714-0.35714-0.35714-1.25,1.6071-1.4286,2.1429-0.17857,1.0714-0.53572,1.0714-1.0714,2.1429-0.17857,1.9643,0.17857,0.53572-1.0714-1.25-1.9643-1.4286-1.25-0.35714-2.1429s1.25-0.53571,1.9643-0.53571c0.71428,0,3.5714-1.0714,3.5714-1.0714l-0.17858-2.6786s0.53572-0.35714,1.25-0.35714c0.71429,0,3.9286,0.35714,3.9286,0.35714l2.1428-1.7857,4.1072-6.4286-0.17858-3.0357-1.4286-1.4286-2.6786-2.8572s-1.25-0.89285-1.4286-1.6071c-0.17857-0.71428-0.35714-1.7857-0.35714-1.7857l2.1428-2.3214,0.17858-1.6071-1.25-1.25-2.5,0.17857-0.71429-0.53572-1.0714-1.0714v-0.71429l3.06-0.86,1.25-1.0714-0.53572-1.4286-1.25-0.89285-0.17857-1.6072,2.1429-3.0357,3.75-1.25,2.1428-1.25-1.25-2.5s0.17858-0.35714,0.89286-0.35714c0.71429,0,3.3929,0.71428,3.3929,0.71428l1.0714-0.17857-0.53572-3.5714v-1.6071l1.4286-0.53572,0.2-2.66-0.17858-0.53571h2.5l1.6072,0.53571,0.53571,1.9643,1.0714,1.0714s0.53571,0.53571,1.25,0.53571,3.75-0.71428,3.75-0.71428l3.5714-0.71429,2.3214-0.35714,2.6786-1.0714,2.3214-1.4286,2.3214-0.89286,1.9643-0.17857,2.8571-0.35714,2.5-1.6072z","name":"Magadan Oblast"},"sh":{"path":"M943.16,321.59c-0.45,0.19-0.81,0.37-1.19,0.94s-0.31,1.53-0.5,1.85c-0.19,0.31-1.53,1.12-1.53,1.12-0.51,0.51-0.87,1.06-2,1.25-1.14,0.19-2.59-0.23-2.85,0.66-0.25,0.88,0.06,2.12,0.69,2.25,0.63,0.12,1.53,0.44,2.1,0.25,0.56-0.19,1.56-1.25,1.56-1.25s0.62,0.3,1,0.93c0.38,0.64,0.97,1.78,0.97,2.03,0,0.26,0.19,1.06-0.07,1.57-0.25,0.5-0.81,2.78-0.56,3.03s1.24,0.9,1.94,0.9c0.69,0,1.09,0.17,1.78-0.78,0.69-0.94,0.93-1.74,1.25-2.56s0.78-1.9,1.09-2.16c0.32-0.25,0.48-1.02-0.22-1.65-0.69-0.63-0.93-1.75-1-2.06-0.06-0.32-0.56-1.09-0.24-1.53,0.31-0.45,1.12-1.31,1-1.69-0.13-0.38-1.38-1.09-1.82-1.47s-0.96-1.82-1.4-1.63zm2.15,20.44s-0.43,0.15-0.69,0.85c-0.25,0.69-0.5,1.74-0.31,2.31s0.56,1.4,0.81,1.78c0.26,0.38,0.75,1.31,0.88,1.62,0.13,0.32,0.53,0.72,1.03,0.91,0.51,0.19,1.12,0.07,1.25-0.44,0.13-0.5,0.19-1.4,0.19-2.03s-0.19-2.15-0.19-2.53,0.07-0.87-0.31-1.31-2.66-1.16-2.66-1.16zm2.53,9.22c-0.56,0.19-1.9,0.5-2.15,0.69-0.26,0.19-0.63,0.52-0.5,1.03,0.12,0.5-0.2,1.24,0.5,1.69,0.69,0.44,2.15,0.96,2.53,1.09s0.55,0.44,1.19,0.13c0.63-0.32,1.09-0.59,1.03-1.41-0.07-0.82-0.59-1.62-0.78-1.88-0.19-0.25-1.5-1.34-1.5-1.34h-0.32zm-117,4.5l-1.87,1.25s0.5,1.12,0,1.12h-1.78s-1.26,0.78-0.5,1.29c0.76,0.5,2.4,0.87,3.03,1,0.63,0.12,1.52,0.65,2.16,1.15,0.63,0.51,1.49,0.87,1.74,1.63,0.26,0.76,0.63,2.28,0.63,2.28l0.91,1.62-0.54,2.16-1.74,0.13s-0.91-1.14-1.41-0.13c-0.51,1.01-0.5,1.77-0.5,2.41,0,0.63,0.27,1.24,0.91,1.37,0.63,0.13,1.48,0.4,2.74,1.41,1.27,1.01,2.03,2.9,2.29,3.53,0.25,0.63,0.24,2.65,0.5,3.41,0.25,0.75,1.4,2.02,2.03,2.53,0.63,0.5,2.03,2.52,2.28,3.03,0.25,0.5,1.25,2.4,1.5,2.9,0.25,0.51,1.78,1.75,1.78,1.75s1.24,1.15,2,1.66,3.8,1.37,4.56,1.37,3.03,0.66,3.28,1.16c0.26,0.51,2.78,5.66,2.78,5.66l5.57,8.34s2.52,2.15,3.15,2.66c0.64,0.5,2.4,3.9,2.91,4.65,0.51,0.76,2.12,4.44,2.5,4.94,0.38,0.51,3.69,5.06,3.69,5.06s2.77,1.88,3.4,2c0.64,0.13,3.41,1.91,3.41,1.91s2.65,2.9,2.78,3.41c0.13,0.5,0.75,3.53,0.75,3.53l2.16,3.4,3.15,2.66,2.5,5.19,0.53,2.25s0,2.15,0.5,2.53c0.51,0.38,5.29,4.06,5.29,4.06l1.65,0.88,1.78,0.25v-2.54s-0.9-1.65-1.15-2.15c-0.26-0.51-0.88-3.03-0.88-3.03s-0.5-0.74-0.5-1.63c0-0.88,0.75-2.4,0.75-2.4s1.53-0.25,2.16-0.25,1.24-0.12,2.25-0.63c1.01-0.5,2.41-0.37,2.41-0.37l2.28,2,1.37,0.78s0.5-1.4,0.5-2.03c0-0.64,0.01-1.53-0.62-2.41-0.64-0.88-1.63-1.88-1.63-1.88l-2.03-1.65s-0.99-1.38-1.75-1.25-1.15,0.24-1.41,0.75c-0.25,0.5,1.52,2.66,0,2.28-1.51-0.38-2.4-0.9-2.78-1.41-0.38-0.5-1.62-1.87-1.62-1.87s-2.4-1.28-3.03-1.53c-0.64-0.26-2.4-0.88-3.04-0.88-0.63,0-4.06-1.15-4.06-1.15l-2.12-2.38-2.41-6.31s-1.12-1.65-1.25-2.41-1.03-3.15-1.16-3.65c-0.12-0.51-0.37-2.28-0.62-2.78-0.25-0.51-1-2.29-1-2.29l-0.53-3.28,1.78-1.62s2.77-1.03,3.41-1.03c0.63,0,5.06-0.13,5.06-0.13l2.4,0.63s2,0.25,2.5,0.25c0.51,0,1.03,0.51,1.16-0.5s-1.53-2-1.53-2l-3.53-0.53-3.66-1.26-2.4-1.78-18.57-15.25-1.5-1.28-1.78-0.12s-0.87,0.13-1.25-0.63-0.4-1.27-1.15-1.9c-0.76-0.64-2.5-1.88-2.5-1.88s-1.52-0.25-2.66-0.5-3.66-1.4-3.66-1.4l-0.4-2.79-1.38-1.25-0.62-1.28,1.25-1.62-0.25-1.91-2.53-2.12-3.54-0.79s-2.4-0.99-2.65-1.5c-0.25-0.5,0.12-2.15,0.12-2.15s-0.62-1.12-1.12-1.5c-0.51-0.38-4.28-1.91-4.28-1.91l-2.91-1.9-1.03-2.63s0.01-1.91-0.63-1.91c-0.63,0-2.78-0.87-2.78-0.87zm119.16,7.94c-0.88,0.25-1.53,0.4-1.72,0.97-0.19,0.56,0.06,1.24,0.31,1.43,0.26,0.19,0.84,0.69,1.47,0.57,0.63-0.13,1.56-0.19,1.82-0.57,0.25-0.38-1.13-1.46-1.32-1.78-0.19-0.31-0.56-0.62-0.56-0.62zm1.75,4.06c-0.51,0.25-1.19,0.56-1.37,1.06-0.19,0.51,0.36,1.37,1,1.75,0.63,0.38,1.05,0.63,1.56,0.06,0.5-0.56,1.09-1.62,1.03-1.93-0.06-0.32-2.22-0.94-2.22-0.94zm0.19,6.97c-0.18,0.01-0.34,0.06-0.5,0.16-0.63,0.37-0.82,1.18-0.82,1.56s0.88,3.09,0.88,3.47-0.87,2.4-1,2.9c-0.13,0.51-0.01,1.33,0.62,2.6,0,0,1.13-0.25,1.38-0.25s1.72-0.94,1.84-1.19c0.13-0.25,0.44-2.28,0.44-2.91s-0.06-2.02-0.12-2.47c-0.07-0.44-0.63-1.4-0.63-1.78s-0.31-1.43-0.69-1.69c-0.28-0.18-0.87-0.44-1.4-0.4zm-4.41,14.53s-1.28,0.03-1.53,0.16c-0.25,0.12-0.69,0.49-0.81,0.75-0.13,0.25-0.57-0.07,0.06,0.62,0.63,0.7,1.02,1.38,1.66,1.38,0.63,0,2.06,0.65,2.31,0.65s1.03-0.21,1.22-0.47c0.19-0.25,0.75-0.49,0.31-1.18-0.44-0.7-0.97-1.06-1.22-1.19s-2-0.72-2-0.72zm1.81,6.47c-0.19,0.31-1.37,1.18-1.43,1.44-0.07,0.25-0.32,0.74-0.38,1.25-0.06,0.5-0.31,1.77-0.31,2.09s-0.53,1.59-0.78,2.16c-0.26,0.56-0.5,1.49-0.44,2.12s-0.07,1.09,0.19,1.66c0.25,0.57,0.24,1.18,0.56,1.37s-0.04,1.29,1.09,0.6c1.14-0.7,1.63-1.34,1.82-1.79,0.19-0.44,0.53-2.09,0.72-2.34,0.18-0.25,0.56-1.43,0.68-1.81,0.13-0.38,0.63-1.9,0.63-2.22s0.06-1.59-0.25-2.22c-0.32-0.63-1.19-1.31-1.19-1.31l-0.91-1zm-4.9,15.4c-0.26,0.07-0.97,0.19-1.28,0.44-0.32,0.26-0.63,0.56-0.69,0.75s-0.5,0.94-0.5,1.19,0.06,1.15,0,1.41c-0.06,0.25,0,0.56-0.56,0.81-0.57,0.25-1.22,0.43-1.6,0.56s-0.81,0.44-1.06,0.69-0.94,0.72-0.94,0.72-0.53,0.18-0.53,0.5c0,0.31,0.41,0.99,0.53,1.25,0.13,0.25,0.75,1.22,0.75,1.22l-0.18,0.75s-1.04,0.74-1.1,1.06c-0.06,0.31-0.12,1.59-0.12,1.97s0.06,1.74,0.06,2c0,0.25,0.19,1.84,0.19,2.09s0.15,1.34,0.28,1.97c0.12,0.63,0.12,1.06,0.43,1.44,0.32,0.38,0.56,1.03,0.88,1.22s0.5,0.68,0.88,0.62c0.37-0.06,1.71-1.03,1.71-1.03s0.63-0.62,0.75-1.06c0.13-0.44,0.44-2.16,0.44-2.16s0.19-1.37,0.13-1.69c-0.07-0.31-0.69-0.65-0.75-1.22-0.07-0.56-0.07-0.8,0-1.68,0.06-0.89,0.87-2.09,1.06-2.35,0.19-0.25,0.84-1.18,0.97-1.93,0.12-0.76-0.07-1.84,0.19-2.16,0.25-0.32,0.8-0.75,1.06-1.06,0.25-0.32,1.06-1.65,1.18-2.03,0.13-0.38,0.13-1.4,0.13-1.91s-0.31-1.37-0.56-1.56c-0.26-0.19-1.75-0.82-1.75-0.82zm-8.35,23.69c-0.31-0.01-0.62,0-0.75,0.03-0.25,0.07-0.56,0-0.81,0.32-0.25,0.31-0.78,0.71-1.22,0.84s-0.87,0-0.93,0.31c-0.07,0.32-0.26,0.87-0.26,1.13,0,0.25,0.06,0.74,0.32,1,0.25,0.25,0.62,0.21,0.75,0.78,0.12,0.57,0.19,1.18,0.12,1.44-0.06,0.25-0.31,1.12-0.37,1.43-0.07,0.32-0.19,0.4-0.38,1.03-0.19,0.64-0.31,1.38-0.31,1.76v1.15c0,0.38-0.06,1.19,0.13,1.44,0.18,0.25,0.62,0.56,0.87,0.81s1.47,0.47,1.72,0.47,0.5-0.28,0.75-0.66,0.56-0.99,0.56-1.56-0.12-2.96-0.06-3.28,1.12-0.84,1.19-1.41c0.06-0.56,0.03-1.74,0.09-2,0.06-0.25,0.31-1.15,0.31-1.15s0.75-0.44,0.88-0.81c0.12-0.38,0.25-1.13,0.25-1.5,0-0.38-0.19-1.54-0.19-1.54h-1.84c-0.19,0-0.5-0.02-0.82-0.03zm7.85,1.88c-0.57,1.01-0.72,0.99-0.78,1.75-0.07,0.76-0.88,1.53-0.88,1.53s-0.31,0.31-0.44,0.62c-0.12,0.32-0.69,0.81-0.06,1s1.72,0.19,1.97,0.07c0.25-0.13,0.75-0.69,1-0.82,0.25-0.12,0.44-0.49,0.44-1.37,0-0.89-0.19-1.9-0.31-2.16-0.13-0.25-0.94-0.62-0.94-0.62z","name":"Sakhalin Oblast"},"ka":{"path":"M888.56,146.75l-1.65,0.84c-0.26,0.13-1.25,0.88-1.25,0.88l-0.13,1,0.13,2.78,0.25,1.16-0.88,2.43-1.72,4.69-0.93,1.56-0.44,1.41-0.06,1.81s-0.22,1.03-0.47,1.22c-0.26,0.19-0.82,0.13-0.82,0.13h-1.81-2.59l-1.6-0.19-1.68-0.31s-0.53,0.25-0.85,0.25c-0.31,0-0.68,0.56-1,0.75-0.31,0.19-1.37,0.74-1.56,1-0.19,0.25-1.28,0.78-1.59,0.9-0.32,0.13-1.38,1-1.63,1.19s-0.78,0.56-1.22,0.63c-0.44,0.06-0.94-0.32-0.94-0.32s-0.62-0.99-0.74-1.25c-0.13-0.25-0.97-1.72-0.97-1.72s-0.07-1.31-0.13-1.62c-0.06-0.32-0.06-1.47-0.12-1.72-0.07-0.25-0.13-1.06-0.13-1.06s0.25-1.22,0.31-1.66c0.07-0.44,0.38-0.75,0.38-0.75s0-0.56-0.19-0.87c-0.19-0.32-0.81,0.06-0.81,0.06l-1.75,0.44-1.97,0.81-1.66,0.5-1.18,0.19-2.04-0.25s-1.62-0.38-1.87-0.57-1.03-0.12-1.03-0.12l-0.63,0.56-0.87,1.16-0.63,0.81-0.84,0.88s-1.31,0.74-1.56,0.87c-0.26,0.13-0.94,0.59-0.94,0.59l-1.22,1.32-1.44,2.28s-2.27,2.28-2.59,2.47-1.18,0.87-1.44,1.12c-0.25,0.25-1.34,0.38-1.72,0.44s-0.74,0.62-1,0.94c-0.25,0.31-1.15,1.28-1.15,1.28l-0.81,0.56s-0.75-0.31-1.13-0.31-0.44,0.31-0.44,0.31l-0.97,1.91-1,2.18s-0.5,1.59-0.5,1.91,0.63,0.44,0.88,0.63c0.25,0.18,1.65,0.8,2.03,1.06,0.38,0.25,1,0.84,1.31,1.15,0.32,0.32,1.41,1.32,1.41,1.32s-0.13,0.43-0.06,0.68c0.06,0.26,0.37,1.15,0.68,1.66,0.32,0.51,0.94,0.81,0.94,0.81s4.09,1.16,4.35,1.28c0.25,0.13,1.09,1.32,1.09,1.32l0.37,0.68s1.13,0.85,1.44,1.04c0.32,0.18,1.22,0.31,1.22,0.31l0.62,0.62,0.44,1.19s-0.31,1.59-0.37,1.97c-0.07,0.38-0.07,0.99,0,1.37,0.06,0.38,1.12-0.06,1.12-0.06s1.4-0.31,1.97-0.25,1.56,0.25,1.56,0.25,1.22,0.4,1.35,0.66c0.12,0.25,0.75,1.18,0.75,1.18l1.15,1.5,1.25,1.72,1.85,1.32,2,1.65,1,1.31s0.84-0.99,1.03-1.31c0.19-0.31,0-0.74,0-1.19,0-0.44-0.37-0.71-0.75-0.96-0.38-0.26-0.97-1.19-1.35-1.63-0.37-0.44-0.56-0.84-0.56-0.84s-0.81-1.06-1.06-1.31c-0.25-0.26-1.09-0.94-1.34-1.19-0.26-0.26-1.25-1.34-1.69-1.97s0-0.75,0-1.06c0-0.32,0.87-1.04,0.87-1.04s0.94-1.3,1.19-1.62,0.44-1.21,0.5-1.59,0.47-1.31,0.85-1.5c0.37-0.19,1.18-0.38,1.68-0.44,0.51-0.06,1.84,0.5,1.97,0.81,0.13,0.32-0.62,0.69-0.75,0.94-0.12,0.25,0,1.59-0.06,2.16-0.06,0.56,0.12,1.71,0.12,2.28,0,0.56,0.75,1.37,0.75,1.37s1.13,1.4,1.44,1.72c0.32,0.32,1.28,0.93,1.59,1.19,0.32,0.25,1.57,1.65,1.57,1.65l3.34,2.32,0.97,0.59s0.75,1.25,0.81,1.69c0.07,0.44,0.44,0.93,0.44,0.93s1.03,0.22,1.34,0.47c0.32,0.26,0.63,1.31,0.63,1.69s-0.12,1.03-0.44,1.47c-0.31,0.44-1.21,0.93-1.53,1.25s-0.69,0.75-0.69,0.75-0.06,5.68-0.06,6.25,0.75,1.78,1,2.16,1.21,2.14,1.72,2.9c0.5,0.76,0.69,1.12,0.69,1.44s0.25,1.66,0.25,1.66,0.56,10.46,0.62,11.09,0.59,1.03,0.78,1.41,0.75,0.93,1,1.18c0.26,0.26,0.75,0.84,0.88,1.16,0.12,0.32,0.97,1.62,0.97,1.62s0.74,2.78,0.87,3.54c0.13,0.75,0.13,1.72,0.13,1.72s1.31,3.96,1.31,4.4v1.47s-0.81,1.75-1.13,2.13c-0.31,0.37-0.06,1.77-0.06,2.09,0,0.31-1.34,2.46-1.84,2.84-0.51,0.38-1.31,1-1.44,1.38s0.25,1.03,0.25,1.03l1.81,0.87,2.28,0.94s1.09,2.15,1.47,2.66c0.38,0.5,0.56,1.59,0.56,1.9,0,0.32,0.32,3.47,0.44,4.16,0.13,0.69,0.38,1.65,0.56,2.09,0.19,0.45,1.79,1.5,1.79,1.5s2.21,3.94,2.34,4.25c0.13,0.32,0.81,1.69,1.06,2,0.08,0.1,0.29,0.25,0.53,0.41,0.62,0.78,3.07,1.94,3.07,1.94l0.93,0.62s4.63,4.25,4.69,4.5c0.06,0.26,2.78,2.32,2.78,2.32s2.34,0.84,2.6,1.03c0.25,0.19,1.68,0.75,1.68,0.75l14.91,10.22,2.03,1.21,3.03,0.94s1.19,1.59,1.44,1.72,3.15,1.19,3.59,1.19c0.45,0,1.47,1,1.47,1s2.59,2.78,2.97,3.03,2.56,1.91,2.56,1.91,2.09,1.18,2.47,1.18,2.85-0.5,2.85-0.5l0.68-0.62v-2.03s-0.06-1.69-0.06-1.88,0-1.21-0.25-1.53-0.81-0.88-0.81-0.88,0.18-1.52,0.44-1.96c0.25-0.45,0.43-0.69,0.43-1.07s-0.31-1.15-0.56-1.4c-0.25-0.26-0.5-1.19-0.5-1.19s-0.06-2.34-0.31-2.66c-0.25-0.31-1.09-0.99-1.28-1.62s-0.5-1.03-0.63-1.41c-0.12-0.38-1.37-1.62-1.62-2.06-0.26-0.44-1.53-1.59-1.72-1.84-0.19-0.26-0.31-1.28-0.5-2.1s-1.02-0.75-1.78-0.75-1.12-0.06-1.38-0.25c-0.25-0.19,0.5-0.43,0.75-0.56,0.26-0.13,1.09-0.9,1.28-1.22,0.19-0.31,0.5-1.37,0.5-1.37l0.69-4.22,1.91-1.6c0.38-0.31,0.25-0.93-0.19-1.31s-1.09-0.25-1.41-0.31c-0.31-0.06-0.8-0.84-1.31-1.16-0.5-0.31-0.84-0.81-1.28-1s-1.24-0.31-2.06-0.56-1.4-1.03-1.91-1.47c-0.5-0.44-0.44-1-0.5-1.25s-0.06-1.96-0.06-2.84v-1.22s-0.97-2.78-0.97-3.1c0-0.31,0.03-1.05,0.16-1.43,0.12-0.38,0.49-0.69,0.75-0.94,0.25-0.25,1.43-0.78,1.43-0.78l1.47-0.88s0.38-1.71,0.38-2.59-0.5-2.25-0.63-2.56c-0.12-0.32-1.34-0.72-1.34-0.72s-1.5-1.19-1.94-1.19-2.46-0.56-2.9-0.69c-0.45-0.12-1.6-0.78-1.85-0.9-0.25-0.13-1.71-1.25-2.09-1.56-0.38-0.32-1.25-1.1-1.5-1.41-0.26-0.32-0.75-1.44-0.88-1.75-0.12-0.32-0.84-1.66-0.84-1.66s0-0.55-0.13-1.12c-0.12-0.57-0.18-1.65-0.18-2.41s1.02-0.62,1.28-0.62c0.25,0,1.68-0.25,2-0.32,0.31-0.06,1.03-0.74,1.22-1,0.19-0.25,0.37-1.77,0.31-2.09s-0.65-0.81-1.22-1-0.94-0.78-1.12-0.84c-0.19-0.07-2.16-0.88-2.16-0.88s-2.06-0.69-2.5-0.75-0.59,0.44-0.84,0.63c-0.26,0.19-0.5,0.37-1.32,0.37s-1.22-0.44-1.22-0.44l-0.87-1.18s-1.18,0.06-1.81,0.06c-0.64,0-0.91-0.59-1.16-0.91-0.25-0.31-1.06-0.56-1.06-0.56s-0.47-0.19-0.69-0.28c0-0.06,0.19-3.44,0.13-3.69-0.07-0.25-0.66-1.21-0.91-1.47-0.25-0.25-1.37-0.44-1.94-0.44s-1.4,0.6-1.84,0.85-1.06,0.75-1.31,0.94c-0.26,0.19-0.13,1.12-0.13,1.68,0,0.57-0.34,1.03-0.72,1.35-0.38,0.31-0.68,0.25-1.31,0.25s-1.12-0.19-1.63-0.31c-0.5-0.13-0.77-0.56-1.03-0.82-0.25-0.25-1.06-0.96-1.37-1.47-0.32-0.5-0.19-1.05-0.25-1.62-0.07-0.57-0.84-1.65-1.1-2.16-0.25-0.5-1.24-2.34-1.37-2.59s-0.56-1.28-1-1.91-0.9-1.99-1.28-2.62-0.74-1.09-1.5-2.1-0.78-0.56-1.35-0.68c-0.56-0.13-0.99-0.78-1.5-1.35-0.5-0.57-0.84-0.93-1.15-1.75-0.32-0.82-0.37-0.83-0.94-2.15-0.57-1.33-0.07-1.09,0.19-1.66,0.25-0.57,1.06-0.62,1.06-0.62l0.47-0.88s-0.38-1.59-0.31-2.09c0.06-0.51,0.36-0.56,1.06-0.75,0.69-0.19,1.56,0.75,1.94,0.75s1.59-0.5,1.9-0.82c0.32-0.31,0.32-1.08,0.32-1.71,0-0.64-0.62-1-1.13-1.13s-0.94-0.56-0.94-1.06c0-0.51,0.25-1.21,0.25-1.91,0-0.69,0-0.74-0.06-1.25-0.06-0.5-0.12-0.53-0.25-0.91-0.13-0.37,0.06-1.18,0.19-1.68,0.12-0.51,0.56-0.44,0.94-0.38,0.37,0.07,1.24,0.69,1.62,0.94s0.65,0.62,0.84,1,1,1.09,1.63,1.16c0.63,0.06,1.15-0.38,1.15-0.38s-0.09-0.52-0.34-1.09-0.81-1.44-1-1.81c-0.19-0.38-0.5-1.22-0.75-1.6s-0.44-0.5-0.44-0.75,0.69-2.09,0.69-2.41v-3.78c0-0.82,0.19-1.4,0.38-1.72,0.19-0.31,0.87-1.24,1.25-2.06s0.84-1.15,1.09-1.9c0.25-0.76,0.87-1.4,1.44-2.16s0.77-1,1.15-1.12c0.38-0.13,2.91,0.06,3.29,0.06,0.37,0,1.96-0.44,2.65-0.56,0.7-0.13,2.71-0.31,3.41-0.57,0.69-0.25,0.25-0.59,0.18-0.84-0.06-0.25-1.27-0.94-1.65-1.06-0.38-0.13-1.12-0.69-1.38-0.94-0.25-0.25-0.5-1.16-0.5-1.16s-0.59-2.96-0.65-3.28c-0.07-0.31-0.75-1.56-0.75-1.56s-0.13-5.18-0.13-5.63c0-0.44-0.68-2.02-1.37-2.34-0.7-0.32-0.91-0.99-0.91-1.5s0-0.96-0.12-1.59c-0.13-0.64-0.75-1.37-1-1.88-0.26-0.5,0.12-0.78,0.12-1.22s-0.12-1.18-0.5-1.5c-0.38-0.31-0.68-0.49-0.94-0.75-0.25-0.25-0.46-0.9-0.46-1.53s0.28-1,0.34-1.31c0.06-0.32,0.06-1.09-0.06-1.53-0.13-0.44-0.35-1.06-0.41-1.31-0.06-0.26-0.37-1.22-0.37-1.22s-0.5-0.44-0.69-0.44-0.94-0.19-0.94-0.19l-1.78-0.31s-1.69-0.44-1.81-0.69c-0.13-0.25-1.04-0.69-1.04-0.69l-1.56-0.59zm7.25,70.22c-0.88,0.44-1.12,0.43-1.06,1s0.37,1.09,0.63,1.47c0.25,0.38,0.44,0.93,0,1.44-0.45,0.5-1.45,0.52-1.19,1.15,0.25,0.63,0.49,1.06,0.75,1.31,0.25,0.26,0.81,0.9,0.94,1.41,0.12,0.51-0.01,1.06,0.31,1.56,0.31,0.51,0.31,0.69,0.69,0.69,0.37,0,0.59,0.32,0.65-0.5s-0.06-0.95,0-2.84c0.06-1.9,0-2.84,0.06-3.41,0.07-0.57,0.26-1.37,0-1.75-0.25-0.38-1.28-0.9-1.4-1.22-0.13-0.31-0.38-0.31-0.38-0.31zm58.91,12.47c-1.07,0.71-1.16,0.62-1.16,1.15,0,0.54-0.18,0.9,0.53,0.72,0.72-0.18,0.91-0.18,1-0.62,0.09-0.45-0.37-1.25-0.37-1.25zm-10.97,4.53c-0.63,0.45-1.08,0.2-0.81,1.09,0.27,0.9,0.44,1.16,1.15,1.25,0.72,0.09,0.73,0.1,2.07,0.1s2.31,0.06,3.03,0.06c0.71,0,0.99,0.36,1.43,0,0.45-0.36,0.63-0.07,0.54-0.78-0.09-0.72-1.24-0.9-2.22-0.81-0.98,0.08-1.52,0.34-3.13-0.19-1.6-0.54-2.06-0.72-2.06-0.72z","name":"Kamchatka Krai"},"in":{"path":"m33.393,395.68,0.08929,5.2679,17.946-8.5714-1.3393-1.25-2.9464-1.25-1.5179-1.9643-2.4107,2.4107-4.1071-2.6786-1.875,1.0714,0.08929,5.8929-1.5179,1.0714z","name":"Republic of Ingushetia"},"cc":{"path":"m33.482,401.04,1.0714,2.5,3.125,1.6964,3.4821,0.44642,2.1429-1.9643,2.1429,1.7857,2.5-1.5178-0.08929-1.6072,1.875-2.1428,2.8571,0.44642,3.8393-2.8571-0.625-1.9643-4.4643-0.53572,0.44643-2.7679z","name":"Chechen Republic"}}});
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.usa.js b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.usa.js new file mode 100644 index 0000000..8c9d989 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.usa.js @@ -0,0 +1,2 @@ +/** Add USA Map Data Points */ +jQuery.fn.vectorMap('addMap', 'usa_en', {"width":959,"height":593,"pathes":{"hi":{"path":"m244.66,512.25c-2.48,3.8 2.23,4.04 4.74,5.38 3.06,0.16 3.51,-4.28 2.66,-6.56 -2.72,-0.77 -5.01,-0.19 -7.41,1.19z m-9.31,3.97c-4.02,5.11 3.64,0.48 0.63,-0.09l-0.5,0.07 -0.14,0.02z m39.69,7.97c-0.62,2.09 1.91,6.73 4.39,6.2 2.41,-1.46 3.73,1.73 6.48,0.56 1.23,-1.48 -3.77,-3.2 -3.7,-6.08 -0.95,-3.8 -3.28,-3.2 -5.96,-1.28 -0.41,0.2 -0.81,0.4 -1.22,0.6z m19.94,10.03c3.58,0.95 7.91,2.99 11.25,0.47 -1.05,-1.63 -5.06,-0.59 -7.1,-0.86 -1.44,0.01 -3.54,-1.63 -4.15,0.39z m12.13,4.38c2.33,2.45 3.64,6.83 7.24,7.4 2.36,-0.69 6.84,-0.66 7.32,-3.43 -2.09,-2.51 -5.77,-3.35 -8.88,-4.29 -2.53,-1.2 -4.11,-3.25 -5.68,0.33z m-7.06,1c-0.29,3.69 5.55,3.98 3.67,0.55 -0.27,-1.25 -3.83,-1.74 -3.67,-0.55z m23.66,14.69c0.27,2.45 3.18,3.93 0.47,6.15 -0.65,2.42 -5.54,2.87 -2.52,5.53 2.36,1.46 2.01,4.85 2.92,7.14 -0.72,2.69 -1.43,6.78 1.72,8.06 2.8,2.95 4.5,-1.93 6.19,-3.68 1.27,-1.69 3.85,-4.1 5.94,-2.59 3.04,-0.81 6.3,-2.42 7.78,-5.22 -2.79,-1.31 -4.88,-3.19 -5.57,-6.29 -2.4,-5.33 -8.95,-6.26 -13.58,-8.98 -1.29,-0.52 -2.26,-1.62 -3.34,-0.11z","name":"Hawaii"},"ak":{"path":"m107.84,436.56c-2.27,0.55 -4.87,0.32 -6.84,-0.34 -2.41,1.22 -5.63,4.03 -8.25,1.88 -3.1,0.93 -3.51,3.84 -5.22,5.97 -1.82,2.52 -4.21,3.65 -7.31,3.14 -2.5,-0.94 -5.49,-1.15 -7.5,0.98 2.03,4.34 6.39,8.13 5.82,13.23 -1.85,2.94 6.31,2.99 2.68,5.02 0.15,2.8 3.07,5.68 2.91,7.88 -2.35,2.21 -5.24,-0.38 -7.71,-1.06 -3.24,-0.64 -2.73,-3.35 -0.82,-5.22 -1.57,-1.51 -7.35,-1.81 -6.51,1.12 -2.01,0.04 -3.81,-1.66 -6.27,-0.77 -3.72,-0.44 -5.97,0.65 -2.94,4.05 3.68,1.45 1.06,4.72 1.17,7.57 0.76,2.63 3.66,4.89 6.67,4.17 3.2,-0.06 5.87,3.59 9.21,1.65 2.16,-1.3 5.33,-0.99 4.79,1.89 -2.53,2.07 -1.36,6.13 -2.78,8.75 -1.96,1.88 -4.53,1.59 -6.59,0.16 -1.52,1.37 -4.7,3.68 -6.28,2.22 0.72,-3.71 -4.77,-3.63 -5.51,-0.61 -1.21,3.97 -6.27,4.46 -8.31,7.63 -0.7,2.42 -1.55,6.7 1.74,6.3 1.26,1.11 -1.2,4.8 -2.77,5.52 1.62,2.19 2.65,4.59 2.72,7.34 1.71,1.55 6.35,1.98 7.5,-0.16 2.45,-0.95 1.79,4.1 2.08,5.97 2.47,2.95 -4.02,1.28 -1.61,4.56 -0.85,2.93 -1.76,5.02 2,2.72 2.76,-0.47 5.11,-0.69 5.66,2.09 2.59,-3.91 2.26,2.78 3.25,4.66 0.59,-0.75 1.3,-5.69 3.94,-3.06 -0.17,4.52 5.33,-0.45 5.78,-0.04 0.54,2.92 -1.63,4.24 -2.86,6.41 -1.51,2.24 -2.07,5.63 -4.21,7.17 -3.87,-0.42 -3.37,4.1 -5.5,5.02 -2.65,-0.72 -5.73,0.71 -8.44,1.41 -1.35,2.41 -3.61,4.2 -5.78,1.81 -2.56,0.05 -5.63,0.68 -7.63,2.33 -2.48,2.43 -6.32,3.11 -9.66,2.29 -2.78,-1.91 -7.11,3.41 -3.11,2.31 2.5,-1.91 4.66,0.64 7.25,0.63 2.21,-1.15 4.17,-2.75 6.84,-2.06 2.32,-3.35 5.1,-0.32 7.92,-1.16 2.31,-0.39 7.01,-3.91 5.26,0.66 0.09,-2.91 3.42,-2.73 5.54,-2.04 4.21,0.96 0.29,-3.16 2.08,-3.43 3.47,-2.05 7.52,-2.41 11.2,-3.72 5.48,-3.19 11.62,-5.7 16.21,-10.1 4.27,-2.97 -2.78,-3.48 -1.21,-6.32 1.68,-2.43 4.58,-3.81 7.47,-4.5 1.5,-3.07 3.53,-6.11 5.88,-8.52 2.49,-1.32 4.83,-3.39 7.83,-2.32 2.67,0.71 3.74,5.32 -0.52,3.66 -1.27,-1.88 -5.56,-0.09 -5.25,2.41 -0.21,2.44 -2.56,4.22 -3.06,6.66 4.79,0.85 0.24,3.54 -1.38,3.8 1.67,1.91 5.66,0.6 7.57,-1.14 1.25,-1.85 3.43,-3.8 5.41,-4.22 1.81,2.8 5.1,-1.16 5.74,2.72 0.71,2.78 6.02,-4.86 3.34,-3.1 -3.03,3.11 -3.78,2.86 -1.94,-1.24 1.43,-4.85 -1.76,6.17 -1.45,0.81 -0.81,-3.19 -0.93,-6.03 3.05,-6.4 2.7,-0.86 5.37,-0.87 5.79,2.52 0.42,3.48 3.8,2.84 5.95,4.76 2.41,2.2 4.76,1.95 7.8,1.78 4.34,-0.47 8.01,4.04 12.28,3.17 2.49,-0.42 5.1,-5.2 4.29,-0.23 -2.26,2.83 -0.02,4.12 2.5,5.41 3.13,1.35 5.87,3.14 7.94,5.85 1.31,3.02 6.05,0.28 6.18,2.43 -3.83,1.25 -1.23,3.54 0.21,5.47 1.81,1.95 0.33,5.72 3.64,5.82 1.14,1.28 3.49,7.44 4.01,5.38 -0.35,-2.32 -0.7,-7.86 1.61,-3.76 0.37,1.42 1.04,8.7 2.07,4.74 1.07,-4.88 3.18,0.18 2.22,2.93 3.33,1.69 -1.23,3.33 0.69,4.88 0.69,-3.24 1.31,-0.36 2.16,1.56 1.05,1 1.54,3.94 3.13,3.72 -1.68,-1.72 -2.94,-6.23 0.4,-3 2.42,2.79 4.05,2.12 2.74,-1.66 -2.65,-2.66 0.28,-4.96 2.58,-2.29 3.12,-0.05 2.84,5.21 5.28,4.53 3.31,-3.17 1.5,-7.87 0.69,-11.7 -3.3,-1.55 -7.04,-2.54 -10.22,-4.06 -1.5,-5.33 -6.29,-8.69 -8.4,-13.77 -0.44,-3.33 -4.71,-2.62 -5.75,-5.23 -2.32,-1.72 -2.7,-4.4 -4.56,-6.35 -1.65,-1.53 -5.22,0.95 -5.51,2.94 0.59,3.09 -3.23,3.04 -5.06,4.72 0.05,-4.27 -4.3,-6.15 -6.7,-9.1 -1.33,-1.99 -1.32,-5.36 -4.45,-2.34 -2.37,0.24 -6.38,-0.31 -5.34,-3.62 0.1,-27.7 0.2,-55.4 0.31,-83.09 -2.75,-1.88 -5.88,-4.17 -9.15,-4.4 -2.52,1.72 -5.07,1.09 -7.39,-0.62 -2.72,0.23 -5.12,-0.65 -7.7,-2.89 -3.08,-2.74 -8.58,0.17 -10.98,-3.65 1.13,-3.56 -3.22,-4.83 -5,-2.09 -2.09,0.26 -0.65,-4.31 -3.64,-4.93 -2.57,-2.85 -4.01,-1.28 -5.86,1.21z M36.38,480.63c-0.67,3.11 4.27,1.31 4.72,4.66 0.24,3.82 5.37,3.9 2.34,-0.08 -0.1,-3.22 -3.92,-1.83 -5.06,-4.43 -0.76,-2.02 -0.9,-1.86 -2,-0.16z m-17.16,23.16c2.57,4.06 1.45,1.37 0.13,-1.28 -0.36,0.01 0,1 -0.13,1.28z m21.84,14.81c1.27,1.79 4.99,5.58 6.22,2.03 2.26,-3.3 -3.27,-2.89 -5.23,-3.68 -1.83,-0.9 -0.88,0.54 -0.99,1.65z m91.72,18.78c0.06,3.21 2.81,-1.98 0,0z m-31.47,14.69c-3.2,2.91 -7.24,4.67 -10.56,7.38 0.22,2.75 0.99,7.64 4.67,5.15 2.5,-1.44 4.98,-2.9 7.45,-4.37 -1.84,-3.31 -0.81,-3.15 -4.55,-3.48 -4.15,0.09 1.06,-3.73 2.64,-1.62 3.74,-1.04 3.95,-2.36 1.5,-3.66 0.7,-1.08 -1,0.61 -1.16,0.59z M55.75,570.75c1.42,2.83 3.53,-1.99 0,0z m-35.78,0.34c0.53,2.46 -4.04,4.84 1.05,3.59 4.2,0.47 3.46,-4.35 0.01,-3.84 -0.35,0.08 -0.7,0.16 -1.06,0.24z m62.19,0.69c1.57,2.91 1.31,-2.03 0,0z M58.63,573.13c3.23,0.49 0.99,-3.05 0,0z m-49,0.09c-4.84,2.56 -0.44,1.81 2.29,0.58 2.89,0.16 5.05,-0.48 0.84,-1.46 -1.04,0.29 -2.08,0.58 -3.13,0.88z m7.25,1.38c1.28,0.21 -2.23,-0.59 0,0z","name":"Alaska"},"fl":{"path":"m748.38,439.94c1.69,2.92 1.5,6.12 1.16,9.34 -4.12,0.54 -2.15,-4.69 -5.56,-3.99 -6.18,-0.07 -12.34,1.13 -18.54,1.19 -10.09,0.29 -20.37,2.14 -30.33,0.64 -2.57,-1.57 -2.84,-6.15 -6.5,-5.33 -9.12,-0.12 -18.18,1.79 -27.26,2.55 -5.82,0.63 -11.62,1.37 -17.43,2.12 -1.42,3.25 2.6,4.37 4.06,6.34 0.8,2.28 -1.56,8.42 2.19,7.1 4.11,-1.2 8.08,-2.93 12.48,-2.72 3.34,-0.82 6.63,-0.73 9.89,0.45 4.09,0.8 7.77,3.09 11.41,4.98 1.77,1.94 5.5,1.87 5.97,5 -0.14,3.27 4.32,-0.94 6.5,0.53 3.19,-0.8 5.24,-3.68 7.69,-5.5 4.86,1.69 0.62,-2.9 3.27,-3.97 3.13,-0.83 6.62,-1.39 9.35,0.79 3.04,0.57 5.43,2 6.57,4.99 3.68,0.02 2.88,4.13 5.48,5.3 2.96,0.49 2.98,4.52 6.3,4.3 2.91,0.36 5.45,1.15 5.84,4.45 2.05,2.11 3.92,4.26 3.09,7.41 0.18,3.68 0.12,7.33 -1.44,10.75 0.39,3.68 1.37,7.94 3.28,10.78 2.25,-3.46 0.17,-3.87 -1.74,-6.03 2.19,-1.76 4.86,-0.22 7.3,0.16 0.82,3.15 -2.16,5.6 -3.48,8.19 -3.3,2.21 1.65,4.09 2.73,6.3 3.11,3.34 4.35,7.94 7.53,11.26 0.78,2.29 2.51,7.47 4.63,3.09 2.54,-0.24 3.88,3.44 5.28,5.41 -0.02,2.26 1.93,7.04 3.59,6.44 2.88,-0.8 6.04,0.65 8.28,2.59 2.56,3.3 4.58,6.98 4.56,11.27 1.37,2.73 4.55,0.44 5.81,-1.14 3.74,0.45 7.26,-1.25 9.22,-4.47 -1.01,-2.36 -0.57,-4.83 -0.32,-7.17 -0.04,-2.18 4.33,-3.19 2.25,-6.51 -0.98,-6.33 -0.19,-12.96 -1.87,-19.25 -2.46,-6.93 -7.54,-12.74 -10.4,-19.56 -1.51,-2.41 -4.24,-3.92 -4.62,-7.04 -0.94,-2.28 -2.67,-4.95 -0.07,-6.71 -0.39,-3.56 -4.86,-5.42 -6.84,-8.41 -5.38,-5.57 -8.29,-12.94 -12.35,-19.44 -2.15,-5.53 -4.29,-11.07 -5.91,-16.78 -3.43,0.07 -7.3,-1.03 -10.46,-0.35l-0.34,0.37 -0.26,0.29z m52.91,109.22c-1.9,4.58 0.72,0.38 0.66,-1.91 -0.22,0.64 -0.44,1.27 -0.66,1.91z m-4.69,9.91c2.56,-1.97 3.68,-6.84 1.04,-1.68 -0.35,0.56 -0.69,1.12 -1.04,1.68z m-2.25,2.22c1.46,-1.22 2.04,-2.07 0.18,-0.18l-0.18,0.18z m-5.72,4.16c-5.23,3.69 4.03,-2.14 0.33,-0.19l-0.33,0.19z m-10.72,3.22c-3.41,3.16 5.71,-0.32 4.1,-0.81 -1.8,-0.56 -2.56,-0.71 -4.1,0.81z m-4.59,3.16c0.08,0.16 0.4,-0.3 0,0z","name":"Florida"},"nh":{"path":"m862.56,94c-1.4,-0.41 -3.87,-0.72 -3.05,3 0.22,3.63 -0.73,7.84 2.23,10.59 0.33,2.78 0.08,5.36 -2.17,7.29 -0.19,2.83 -5.98,2.58 -3.35,5.32 1.16,7.35 -0.56,15.03 -0.62,22.51 1.2,1.95 0.98,4.39 0.76,6.75 -1.07,3.79 4.84,-0.05 6.89,0.06 3.93,-1.29 8.46,-1.74 12.04,-3.54 0.77,-3.1 4.37,-2.75 5.94,-4.96 2.59,-3.52 -3.01,-2.73 -2,-6.59 -3.83,0.01 -4.27,-2.46 -4.66,-5.62 -3.84,-11.98 -7.32,-24.45 -11.49,-36.1 -0.18,0.43 -0.35,0.85 -0.53,1.28z","name":"New Hampshire"},"mi":{"path":"M697.86,177.24L694.63,168.99L692.36,159.94L689.94,156.71L687.35,154.93L685.74,156.06L681.86,157.84L679.92,162.85L677.17,166.57L676.04,167.21L674.58,166.57C674.58,166.57 671.99,165.11 672.16,164.47C672.32,163.82 672.64,159.45 672.64,159.45L676.04,158.16L676.84,154.77L677.49,152.18L679.92,150.56L679.59,140.54L677.98,138.28L676.68,137.47L675.87,135.37L676.68,134.56L678.3,134.88L678.46,133.27L676.04,131L674.74,128.42L672.16,128.42L667.63,126.96L662.13,123.57L659.38,123.57L658.74,124.21L657.77,123.73L654.7,121.46L651.79,123.24L648.88,125.51L649.2,129.06L650.17,129.39L652.27,129.87L652.76,130.68L650.17,131.49L647.58,131.81L646.13,133.59L645.81,135.69L646.13,137.31L646.45,142.8L642.9,144.9L642.25,144.74L642.25,140.54L643.54,138.12L644.19,135.69L643.38,134.88L641.44,135.69L640.47,139.89L637.72,141.02L635.94,142.96L635.78,143.93L636.43,144.74L635.78,147.33L633.52,147.81L633.52,148.95L634.33,151.37L633.2,157.51L631.58,161.56L632.23,166.24L632.71,167.38L631.9,169.8L631.58,170.61L631.26,173.36L634.81,179.34L637.72,185.8L639.18,190.65L638.37,195.34L637.4,201.32L634.97,206.5L634.65,209.25L631.39,212.33L635.8,212.17L657.22,209.91L664.5,208.92L664.59,210.58L671.45,209.37L681.74,207.87L685.6,207.41L685.74,206.82L685.9,205.37L688,201.65L690,199.91L689.78,194.86L691.37,193.26L692.46,192.92L692.69,189.36L694.22,186.33L695.27,186.94L695.44,187.58L696.24,187.74L698.18,186.77L697.86,177.24z M581.62,82.06L583.45,80L585.62,79.2L590.99,75.31L593.28,74.74L593.74,75.2L588.59,80.34L585.28,82.29L583.22,83.2L581.62,82.06z M667.79,114.19L668.44,116.69L671.67,116.85L672.97,115.64C672.97,115.64 672.89,114.19 672.56,114.03C672.24,113.86 670.95,112.17 670.95,112.17L668.76,112.41L667.15,112.57L666.82,113.7L667.79,114.19z M567.49,111.21L568.21,110.63L570.96,109.82L574.51,107.56L574.51,106.59L575.16,105.94L581.14,104.97L583.57,103.03L587.93,100.93L588.09,99.64L590.03,96.73L591.81,95.92L593.1,94.14L595.37,91.88L599.73,89.46L604.42,88.97L605.55,90.1L605.23,91.07L601.51,92.04L600.06,95.11L597.79,95.92L597.31,98.35L594.88,101.58L594.56,104.17L595.37,104.65L596.34,103.52L599.89,100.61L601.19,101.9L603.45,101.9L606.68,102.87L608.14,104L609.59,107.08L612.34,109.82L616.22,109.66L617.68,108.69L619.29,109.99L620.91,110.47L622.2,109.66L623.33,109.66L624.95,108.69L628.99,105.14L632.39,104L639.02,103.68L643.54,101.74L646.13,100.45L647.58,100.61L647.58,106.27L648.07,106.59L650.98,107.4L652.92,106.91L659.06,105.3L660.19,104.17L661.65,104.65L661.65,111.6L664.88,114.67L666.17,115.32L667.47,116.29L666.17,116.61L665.37,116.29L661.65,115.81L659.55,116.45L657.28,116.29L654.05,117.75L652.27,117.75L646.45,116.45L641.28,116.61L639.34,119.2L632.39,119.85L629.96,120.66L628.83,123.73L627.54,124.86L627.05,124.7L625.6,123.08L621.07,125.51L620.42,125.51L619.29,123.89L618.48,124.05L616.54,128.42L615.57,132.46L612.39,139.46L611.22,138.42L609.85,137.39L607.9,127.1L604.36,125.73L602.31,123.45L590.19,120.7L587.33,119.67L579.1,117.5L571.21,116.36L567.49,111.21z","name":"Michigan"},"vt":{"path":"m833.16,106.59c0.19,6 4.65,11.21 3.72,17.28 -2.48,4.23 4.52,7.29 2.22,11.58 0.9,1.59 4.66,1.96 4.06,5.25 1.08,4.21 2.86,8.34 1.84,12.76 3.35,-0.51 7.06,-1.17 10.13,-1.97 -0.21,-2.13 1.51,-5.75 -0.53,-7.81 0.2,-7.64 1.01,-15.26 1.13,-22.91 -3.25,-2.41 0.32,-3.79 2.12,-5.18 1.96,-2.28 3.9,-5.07 2.6,-8.1 -2.62,-1.63 -1.02,-5.94 -2.39,-7.22 -8.3,2.1 -16.59,4.21 -24.89,6.31z","name":"Vermont"},"me":{"path":"m889.88,40.22c-2.16,1.31 -3.69,2.74 -4.84,4.69 -2.29,0.6 -4.99,-1.37 -4.88,-3.94 -2.97,-0.82 -3.33,3.68 -4.37,5.71 -1.09,4.29 -3.27,8.39 -3.97,12.69 -0.06,3.04 1,6.63 -1.35,9.09 0.08,2.92 -0.75,6.18 2,8.16 -1.37,5.7 -6.23,10.36 -5.41,16.56 -4.27,-2.21 -1.74,2.47 -1.09,4.73 3.51,11.08 7.19,22.16 10.25,33.35 0.21,3.01 5.81,1.35 4.53,5.7 2.9,2 2.06,-3.92 2.66,-5.87 -1.01,-3.29 2.7,-4.63 0.66,-7.62 0.94,-1.05 2.92,-5.9 4.61,-3.46 2.03,1.03 5.28,-1.89 6.74,-3.19 -0.98,-4.02 4.21,-1.75 4.73,-5.32 -1.11,-2.61 0.74,-5.45 -0.57,-7.44 -2.42,-1.59 3.53,-4.63 3.31,-0.78 2.27,0.48 2.15,2.8 3.66,3.93 1.94,-2.82 -2.15,-3.81 0.35,-6.03 2.43,-0.81 3.1,-3.96 6,-3.31 -0.17,1.46 1.03,3.34 2.26,1.38 2.94,-2.9 5.24,-7.08 9.37,-8.34 1.17,-2.61 3.34,-5.74 0.71,-8.24 -0.55,-1.64 -3.68,-4.84 -4.15,-2.58 -0.75,2.6 -4.66,-0.65 -4.92,-2.22 0.1,-2.8 0.29,-7.17 -3.8,-5.81 -3.96,1.36 -3.64,-3.04 -4.69,-5.61C905.22,58.3 902.75,50.15 900.28,42c-2.86,-1.25 -5.71,-2.92 -8.81,-3.38 -0.53,0.53 -1.06,1.06 -1.59,1.59z m20.47,61c-2.81,1.7 1.87,5.16 1.13,1.22 1.48,-0.9 0.13,-2.4 -1.13,-1.22z m-7.81,7.81c3.16,6.67 2.63,-3.59 0,0z","name":"Maine"},"ri":{"path":"m871,164.28c1.15,4.66 2.29,9.31 3.44,13.97 2.56,-0.49 4.66,-2.29 5.84,-4.56 4.17,0.76 4,-2.64 1.51,-4.97 -1.79,-1.94 -3.16,-5.31 -5.74,-5.92 -1.68,0.49 -3.37,0.99 -5.05,1.48z","name":"Rhode Island"},"ny":{"path":"m825.56,108.66c-2.7,1.12 -5.45,1.68 -8.33,1.43 -5.07,0.72 -10.17,2.73 -12.92,7.31 -2.84,3.43 -4.89,7.49 -7.18,11.2 -1.65,2.36 -5.82,3.73 -5.55,6.84 -0.17,3.56 5.77,0.73 4.43,4.38 -2.69,2.3 0.8,4.23 0.56,6.59 0.5,3.47 -4.26,1.99 -5.36,4 -1.62,2.71 -3.35,6.62 -7.22,6.05 -3.04,-0.43 -5.35,2.05 -7.98,2.63 -2.5,-0.75 -4.7,-2.05 -7.59,-1.31 -5.31,0.21 -10.62,1.98 -15.23,4.53 -0.29,1.77 0.61,6.25 3.17,6.14 1.55,2.48 2.09,4.96 -0.63,6.72 -1.51,1.76 -1.8,4.25 -4.16,5.3 -1.93,1.14 -2.68,3.51 -4.8,4.54 0.33,3.07 -0.22,7.29 4.08,5.12 22.14,-4.26 44.26,-8.68 66.23,-13.74 0.98,3.85 5.67,1.32 6.44,4 0.64,2.93 1.36,7.4 5.33,6.88 3.14,1.9 6.9,3.68 10.69,4.22 2.71,0.47 7.18,1.43 6.44,5.06 -0.33,1.97 -1.62,7.56 1.97,5.93 5.3,-1.65 10.96,-2.84 15.06,-6.85 3.23,-2.49 6.76,-4.64 9.35,-7.86 -2.99,-2.44 -4.65,0.46 -6.81,2.42 -2.91,1.56 -6.01,3.51 -9.16,4.32 -2.6,-0.63 -4.83,-0.86 -6.18,2.07 -1.03,2.04 -4.86,2.98 -3.98,-0.15 4.26,-1.87 -2.17,-3.97 -0.33,-6.21 1.19,-3.13 0.56,-6.87 0.42,-10.21 -1.43,-7.38 -3.69,-14.76 -2.54,-22.36 -0.08,-4.46 1.55,-8.97 -0.51,-13.21 -1.22,-2.56 -0.47,-6.83 -4.05,-7.34 -2.99,-0.66 0.75,-4.31 -1.57,-6.2 -1.7,-2.43 -3.17,-4.91 -1.54,-7.81 0.38,-5.77 -3.83,-10.57 -3.55,-16.35 -2.32,0.65 -4.65,1.29 -6.97,1.94z","name":"New York"},"pa":{"path":"m798.88,181.63c-17.5,3.38 -34.87,7.42 -52.47,10.28 -0.61,-2 0.48,-8.42 -2.41,-4.31 -2.18,2.73 -5.48,3.74 -8.09,5.97 1.52,9.75 2.63,19.57 5.44,29.05 1.14,6.09 2.27,12.17 3.41,18.26 8.85,-1.42 17.79,-2.25 26.51,-4.41 16.39,-3.45 33.03,-6.46 49.33,-9.87 2.48,-3.07 8.03,-1.69 8.97,-6.19 0.64,-2.36 4.86,-3.99 4.33,-5.9 -2.3,-1.89 -5.94,-2.77 -6.39,-6.13 -3.14,1.09 -4.42,-3.94 -3.12,-5.32 3.86,-1.1 -0.49,-3.68 0.55,-5.96 2.52,-1.88 1.12,-5.15 2.81,-7.07 3.87,-2.7 -2.98,-1.1 -3.72,-3.99 -1.35,-2.18 -0.28,-7.24 -4.16,-5.92 -2.34,-1.13 -3.87,-3.75 -7.09,-1.7 -4.64,1.07 -9.28,2.15 -13.92,3.22z","name":"Pennsylvania"},"nj":{"path":"m827.84,191.34c1.03,2.99 -1.82,4.8 -2.06,7.47 2.86,1.63 0.49,4.87 -0.92,5.73 -0.41,3.86 4.01,1.68 4.16,5.14 1.37,2.19 4.72,3.02 6.26,4.94 -0.15,2.61 -3.85,3.5 -4.69,6.06 -0.26,3.07 -4.09,3.19 -4.18,5.96 -0.99,2.38 -0.74,5.09 1.7,6.47 2.85,2.76 6.86,3.99 10.73,4.38 0.48,1.55 -1.84,7.18 1.1,3.59 1.5,-2.42 0.59,-5.95 3.11,-8.01 2.5,-4.08 5.03,-8.84 4.88,-13.61 -1.35,-4.07 0.8,-9.01 -1.81,-12.82 -1.1,1.32 -6.17,1.23 -4.13,-0.8 2.39,-1.39 3.37,-3.62 2.39,-6.31 0.21,-2.31 1.58,-5.42 -1.69,-6.19 -4.35,-1.15 -8.82,-2.13 -12.88,-4.26 -0.66,0.75 -1.31,1.5 -1.97,2.25z","name":"New Jersey"},"de":{"path":"m824.88,225.34c-3.72,0.25 -3.47,3.52 -1.91,6.13 3.35,6.89 3.86,14.58 6.03,21.81 3.45,0.11 6.81,-0.49 10.16,-1.25 -1.2,-2.17 -0.68,-6.38 -3.32,-6.38 -2.9,-1.2 -4.17,-3.69 -4.9,-6.58 -0.91,-3.11 -3.62,-4.96 -5.48,-7.35 -1.85,-1.82 0.94,-5.5 -0.26,-6.47l-0.33,0.09z","name":"Delaware"},"md":{"path":"m813.59,229.19c-17.31,3.18 -34.53,6.83 -51.78,10.28 0.74,3.02 1.31,6.08 1.78,9.16 2.14,-1.9 3.29,-5.35 6.59,-5.34 2.14,-1.85 2.67,-5.25 5.77,-3.55 3.46,0.18 5.43,-5.35 9.01,-3.85 2.63,1.63 5.66,2.79 7.34,5.59 4.19,0.11 3.68,3.73 5.74,4.96 2.73,1.11 5.02,1.18 6.38,-0.53 4.29,1.38 2.24,3.74 1.44,6.9 0.09,2.97 -3.7,4.92 -1.66,7.97 3.1,1.31 6.4,1.2 9.63,1.4 2.17,1.58 6.83,1.03 3.79,-2.1 0.41,-2.74 -3.08,-3.35 -3.32,-6.04 -1.7,-2.67 -1.42,-5.47 -0.36,-8.32 1.68,-2.42 -2.83,-3.82 -0.4,-5.41 1.25,-1.53 0.43,-4.16 2.98,-4.7 1.62,-3.02 5.1,-1.45 2.35,1.02 -2.54,2.98 -0.81,4.5 0.57,6.3 1.41,3.55 -0.68,5.07 -1.53,7.31 -0.22,-0.81 3.62,-1.01 3.22,1.79 -3.15,1.64 -1.45,6.12 1.09,7.31 2.98,0.99 5.58,-1.8 6.98,2.14 1.5,3.75 4.92,0.81 7.41,-0.02 2.74,-1.21 3.47,-4.93 2.78,-7.7 -1.13,-1.58 -4.82,0.92 -7.13,0.4 -3.86,1.26 -4.9,-1.25 -5.28,-4.64 -1.68,-5.97 -2.14,-12.33 -5.16,-17.9 -0.04,-4.32 -2.71,-4.2 -6.07,-2.91 -0.73,0.16 -1.45,0.31 -2.18,0.47z m10.94,32.59c1.32,0.99 0.59,4.97 2.06,4.63 -0.48,-1.31 -0.36,-4.99 -2.06,-4.63z","name":"Maryland"},"va":{"path":"m792.88,242.88c-0.16,1.46 0.24,5.89 -2.4,4.29 -2.58,-0.67 -6.42,-3.2 -8.23,-2.73 0.7,3.72 -1.46,6.77 -2.99,9.94 -3.05,1.14 -2.29,5.83 -5.84,5.58 -1.62,1.74 -1.47,5.31 -2.45,7.73 -3.09,1.14 -5.37,-0.48 -7.28,-1.75 0.11,6.5 -3.72,11.95 -5.91,17.84 -1.69,1.73 1.19,3.8 -0.74,5.77 -1.35,3.56 -3.79,2.72 -6.19,4.19 -2.72,1.1 -4.9,0.5 -5.4,4.61 -2.07,1.14 -4.83,2.63 -6.91,0.47 -2.38,1.51 -5.02,3.21 -7.81,1.6 -2.69,-0.01 -3.9,-6.55 -6.07,-2.94 -3.27,4.09 -7.89,7.48 -10.21,12.09 0.43,3.25 -4.46,3.32 -6.42,5.15 -4.27,1.95 3.62,-0.11 5.16,-0.07 5.56,-0.79 11.14,-1.37 16.76,-1.36 1.95,-2.65 4.98,-1.81 7.77,-1.65 7.86,-0.32 15.65,-2.12 23.48,-2.99 12.85,-1.4 25.44,-4.27 38.04,-7.05 11.65,-2.52 23.3,-5.03 34.96,-7.55 -1.64,-2.66 -2.75,-6.67 -6.42,-4.14 -1.99,2.03 -6.61,-1.82 -2.7,-2.48 2.65,-1.62 -1.75,-4.07 -1.8,-5.97 -2.73,-0.62 -2.88,-5.12 0.54,-3.6 -0.17,-1.37 -1.24,-3.62 -1.62,-5.68 1.47,-3.51 -0.84,-4.97 -3.72,-5.16 0.31,-3.42 -2.9,-2.93 -5.22,-3.97 -3.33,0.21 -7.06,-0.25 -9.91,-1.66 -1.22,-2.41 -0.91,-5.12 1.25,-6.88 1.39,-2.83 -0.28,-5.7 -3.3,-6.27 -2.65,-0.83 -6.97,-0.29 -5.73,-4.3 -0.83,-0.3 -2.05,-1.06 -2.69,-1.06z m39.16,21.59c0.44,4.71 -3.15,8.7 -2.62,13.48 -0.34,4.11 2.64,5.72 3.48,0.92 1.71,-3.04 -0.23,-6.47 0.8,-9.73 0.4,-2.53 3.66,-3.88 3.52,-6.73 -1.73,0.69 -3.46,1.38 -5.19,2.06z","name":"Virginia"},"wv":{"path":"m739.75,223.25c-1.6,2.23 1.3,5.02 0.25,7.75 -0.18,4.04 -0.63,8.11 -0.84,12.13 -1.94,3.58 -4.43,7.35 -8.16,9.13 -3.15,-1.33 -3.92,3.25 -5.76,4.98 -1.56,2.28 2.64,4.93 -0.3,6.69 -2.57,3.58 -2.6,-4.8 -4.46,-0.71 -1.32,2.59 0.02,6.02 -1.35,8.33 -1.82,1.54 -0.53,5.19 -4.16,4.81 -2.23,0.13 -1.45,6.19 1,6.81 2.24,1.47 2.49,4.74 5.5,5.92 1.92,1.96 2.28,5.18 5.39,6.05 1.64,2.19 3.07,4.96 6.25,4.88 2.63,0.5 4.77,-3.86 7.22,-1.35 1.49,0.81 3.93,-0.57 4.58,-1.83 0.43,-4.57 3.42,-2.71 6.03,-4.39 2.39,-0.94 4.82,-0.98 5.62,-4.44 -1.26,-2.59 0.3,-5 1.56,-7.64 2.23,-4.81 4.72,-9.61 4.67,-15.05 2.65,-2.31 3.72,3.56 7.05,1.41 1.64,-1.77 1.12,-5.67 2.6,-7.59 3.47,0.39 2.97,-3.96 5.76,-5.21 2.29,-3.11 3.52,-6.8 3.06,-10.7 1.06,-1.29 5.1,1.62 7.23,2.15 3.3,3.35 4.34,-1.98 2.85,-4.05 -2,-2.28 -5.12,-3.7 -7.62,-4.75 -3.31,0.98 -5.44,5.47 -9.38,3.97 -1.86,-0.23 -2.38,3.98 -4.86,3.88 -2.89,0.71 -3.79,4.38 -6.03,6.22 -1.1,-0.06 -0.99,-4.82 -1.62,-6.64 -0.01,-3.93 -1.77,-5.3 -5.48,-3.82 -4.21,0.6 -8.41,1.23 -12.61,1.91 -1.17,-6.45 -2.29,-12.92 -3.44,-19.38l-0.35,0.35 -0.18,0.18z","name":"West Virginia"},"oh":{"path":"m729.5,197.78c-4.85,2.06 -7.38,6.9 -11.47,9.97 -4.08,0.86 -8.09,1.75 -11.72,3.88 -3.41,1.61 -4.39,-4.09 -7.67,-2.63 -3.13,1.35 -5.49,-1.1 -8.11,-2.41 -8.6,1.15 -17.15,2.64 -25.66,4.38 1.45,17.83 4.12,35.53 5.87,53.33 -0.69,3.82 4.06,2.26 6.23,1.48 2.74,0.41 4.83,2.16 5.48,4.94 1.26,2.48 5.82,-0.87 6.96,2.54 2.19,1.53 4.46,-2.33 7.03,-0.58 2.52,0.04 5.62,1.51 6.84,-1.56 1.49,-0.55 5.37,-3.85 5.41,-0.71 0.38,2.53 3.82,3.57 5.77,4.7 3.53,0.63 2.32,-3.91 4.21,-5.51 -0.11,-2.74 0.21,-5.73 1.39,-8.13 2.53,-2.81 3.8,4.53 4.98,0.39 -2.02,-2.27 -0.99,-5.41 0.93,-7.41 1.07,-4.06 4.05,-2.41 6.5,-4.39 2.93,-3.16 6.59,-6.57 5.97,-11.27 0.44,-4.71 1.18,-9.75 -0.53,-14.23 1.47,-2.48 2.58,-4.29 0.96,-7.33 -2.04,-7.53 -2.56,-15.37 -3.93,-23.04 -1.81,1.2 -3.63,2.4 -5.44,3.59z","name":"Ohio"},"in":{"path":"m658.66,210.31c-9.12,0.93 -18.35,1.98 -27.41,2.68 -2.6,0.39 -4.21,5.08 -6.89,2.98 -3.83,-2.84 -2.64,1.83 -2.41,4.45 1.1,14.81 2.73,29.61 3.44,44.42 -0.76,3.69 -1.39,7.89 1.36,10.91 0.1,2.99 1.4,6.28 -1.14,8.65 -1.83,2.73 -2.55,6.09 -5.02,8.42 0.09,2.08 -2.02,8.2 1.63,5.16 3.49,-0.6 7.25,-1.53 10.69,-1.34 2.36,4.08 2.67,-0.62 5.26,-1.29 2.03,-2.62 4.78,2.05 5.34,1.04 -1.26,-3.41 3.05,-3.77 5.1,-5.22 1.09,0.63 6.05,3.38 5.3,-0.64 -0.46,-2.47 2.02,-4.71 3.65,-6.34 3.11,-1.39 4.33,-3.9 4.16,-7.23 1.83,-1 4.93,-1.01 6.97,-2.47 4.23,-1.03 0.26,-3.48 1.22,-5.92 -0.83,-12.56 -2.8,-25.13 -4.08,-37.69 -0.85,-6.99 -1.44,-14.01 -2.14,-21.02 -1.68,0.16 -3.35,0.31 -5.03,0.47z","name":"Indiana"},"il":{"path":"m569.75,200.44c-0.29,2.58 4.2,1.83 3.73,5.07 2.07,2.09 5.71,4.21 4.38,7.77 -0.31,3.04 -2.61,5.44 -3.08,8.4 -2.38,2.71 -6.06,2.98 -9.31,3.94 -1.61,2.47 -1.05,4.91 1.28,6.47 0.63,3.25 -1.08,5.07 -2.74,7.38 1.41,3.63 -2.39,2.86 -3.56,5.02 1.08,3.12 -2.11,3.8 -2.53,6.64 0.19,3.95 1.33,8.21 3.28,11.58 3.68,3.96 7.38,7.9 12.21,10.47 -0.61,2.88 -0.64,6.7 3.43,5.71 2.05,0 6.18,0.38 6.26,2.68 -0.19,4.39 -3.6,8.24 -3.28,12.53 1.6,3.83 5.33,6.26 8.59,8.42 3.37,-0.29 5.36,1.27 5.9,4.6 1.01,2.64 3.84,4.73 1.73,7.67 0.55,1.74 2.58,7.7 4.31,4.05 1.21,-2.98 5.41,-4.78 8.07,-2.46 3.1,2.46 5.94,0.47 3.13,-2.8 -0.98,-3.39 2.61,-4.96 5.37,-5.33 1.01,-1.55 -1.6,-4.46 1.4,-5.97 1.8,-3.97 -0.56,-9.39 3.32,-12.49 1.43,-2.97 3.23,-5.97 4.4,-8.97 0.13,-3 -0.7,-5.7 -2.34,-8.16 -0.45,-4.59 1.31,-9.09 0.02,-13.65 -1.16,-15 -2.22,-30.05 -3.67,-45.01 -1.02,-3.1 -1.61,-6.46 -4.04,-8.77 -2.27,-1.83 -0.51,-5.93 -1.97,-7.32 -14.76,0.83 -29.52,1.67 -44.28,2.5z","name":"Illinois"},"ct":{"path":"m865.78,165.41c-6.91,1.54 -13.81,3.08 -20.72,4.63 2.17,6.2 2.74,12.83 2.44,19.34 -2.62,4.3 2.61,2.38 3.97,-0.21 2.09,-1.89 4.19,-3.71 5.99,-5.88 2.06,1.35 4.78,-1.86 7.44,-1.46 2.98,-0.68 5.69,-2.24 8.56,-3.26 -1.15,-4.67 -2.29,-9.33 -3.44,-14 -1.42,0.28 -2.83,0.56 -4.25,0.84z","name":"Connecticut"},"wi":{"path":"m559.53,104.97c-4.06,2.75 -8.71,4.92 -13.53,5.84 -2.88,-1.08 -5.54,-1.12 -5.57,2.68 -0.48,3.34 0.51,7.03 -0.47,10.17 -2.02,3.26 -6.91,4.03 -7.36,8.38 -2.63,2.78 2.21,3.06 2.23,5.53 1.79,2.9 -2.13,4.74 -1.33,7.65 0.29,2.93 -0.4,6.49 1.14,8.93 1.33,3.48 5.88,0.21 6.64,3.93 1.56,2.26 5.47,1.03 6.19,4.78 2.15,5.1 9.7,4.85 11.21,10.39 0.68,3.38 0.35,7.34 1.94,10.32 3.26,1.05 1.94,4.34 0.25,6.21 -0.79,3.96 2.53,8.34 6.75,8.25 2.28,1.6 4.86,1.65 7.83,1.19 13.03,-0.77 26.07,-1.53 39.1,-2.3 -0.02,-4.45 -1.98,-8.61 -1.86,-13.13 -1.7,-2.04 -0.86,-4.17 -0.04,-6.39 0.32,-2.84 3.07,-4.93 1.51,-7.87 -1.05,-2.94 -0.88,-6.21 1.73,-8.27 -0.2,-2.83 -0.5,-5.03 -0.16,-7.93 -1.14,-4.2 2.64,-7.5 3.69,-11.36 0.92,-1.13 3.15,-8.34 0.73,-4.93 -2.65,3.81 -4.99,8.01 -8.18,11.29 -0.86,2.06 -3.21,4.55 -5.21,4.5 -2.57,-1.26 0.28,-4.49 0.9,-6.41 0.47,-2.94 3.2,-4.25 4.09,-6.85 -3.31,-1.29 -2.77,-5.03 -3.54,-7.92 0.02,-3.09 -1.23,-5.08 -4.29,-5.57 -2.14,-3.67 -7.04,-2.78 -10.59,-4.12 -7.13,-1.87 -14.21,-4.39 -21.67,-4.99 -2.48,-0.54 -2.84,-5.51 -5.51,-4.73 -1.71,-1.54 -3.85,-0.7 -5.82,0.13 -2.8,-1.32 0.68,-4.59 1.5,-6.38 2.18,-1.34 -1.53,-2.14 -2.31,-1z","name":"Wisconsin"},"nc":{"path":"m830.06,295.97c-18.3,3.8 -36.53,8 -54.86,11.65 -12.74,1.51 -25.38,4.07 -38.18,4.94 -3.32,-0.82 -1.17,3.72 -2.5,5.53 -2.62,1.34 -3.49,4.59 -5.03,6.38 -3.24,-1.36 -5.07,1.46 -6.34,3.97 -1.09,-0.57 -2.96,0.03 -3.41,-1.41 -2.02,1.96 -4.37,3.73 -4.31,6.81 -3.66,1.1 -6.31,3.82 -9.28,5.96 -2.64,0.94 -5.76,2.16 -7.4,4.35 0.73,4.06 -2.98,3.3 -5.1,5.29 -1.98,4.69 2.74,2.66 5.58,2.5 6.41,-1.19 13.32,-0.49 19.18,-3.73 5.04,-1.9 9.41,-5.9 15.06,-5.67 6.5,-0.64 13.15,-0.6 19.62,-0.69 2.99,0.53 3.36,4.79 5.58,5.01 5.37,-0.81 10.87,-1.67 16.25,-1.79 5.38,1.36 9.61,5.45 14.52,7.93 3.59,2.64 6.93,5.66 10.43,8.44 3.15,-0.86 6.32,-1.58 9.59,-1.72 1.06,-4.55 2.04,-9.29 5.39,-12.78 4.2,-4.27 9.23,-8.29 15.33,-9.29 2.91,1.95 3.69,-2.9 5.27,-4.53 2.72,-5 -2.44,3.91 -2.46,-1.22 -3.87,0.7 -5.43,-0.26 -3.29,-4 2.77,-4.25 -2.73,-2.51 -2.12,-6.02 -1.42,-3.76 2.84,2.19 5.06,0.81 2.81,0.12 5.1,-1.87 5.59,-4.6 0.45,-2.9 4.59,-2.7 3.28,-6.48 -4.02,-2.43 4.25,-0.66 0.4,-3.93 -3.52,-3.44 -5.24,-8.33 -7.23,-12.76 -1.54,0.35 -3.08,0.71 -4.63,1.06z m17.13,23.72c1.55,2.61 -4.64,4.26 -0.52,2.69 1.38,-1.92 0.21,-5.22 0.24,-7.62 -0.74,-2.05 0.37,4.57 0.28,4.94z","name":"North Carolina"},"dc":{"path":"m803.44,248.16c2.67,3.43 3.85,-1.02 0.55,-0.75l-0.29,0.4 -0.25,0.35z","name":"District of Columbia"},"ma":{"path":"m877.59,144.41c-1.04,3.1 -4.01,3.5 -6.79,4.13 -8.62,2.32 -17.17,4.6 -25.96,6.12 -0.11,4.77 -1.17,9.59 -0.03,14.31 10.66,-2.6 21.54,-4.29 32,-7.44 3.57,2.81 6.01,6.73 8.28,10.59 2.13,-0.78 0.01,-5.15 3.77,-5.38 2.93,-3.28 1.83,4.78 3.17,2.62 2.13,-3.09 6.1,-3.9 9.41,-5.21 -0.11,-3.41 -2.21,-8.55 -6.38,-7.53 1.64,-0.1 4.89,0.87 4.91,3.82 0.85,2.24 -2.55,3.71 -4.35,4.24 -3.37,0.51 -4.99,-1.76 -6.32,-4.47 -1.38,-2.05 -3.58,-6.56 -6.3,-3.6 -1.89,-1.72 -3.13,-4.04 -1.33,-6.3 2.3,-2.34 1.23,-6.2 -1.28,-7.16 -0.93,0.41 -1.86,0.82 -2.79,1.24z M902.25,172.69c-1.6,2.76 3.05,-2.44 0.08,-0.32l-0.08,0.32z m-11.28,1.28c1.59,0.78 6.09,-2.26 1.78,-2.03 -0.59,0.68 -1.19,1.35 -1.78,2.03z","name":"Massachusetts"},"tn":{"path":"m730.41,314.34c-8.87,-0.11 -17.76,1.5 -26.57,2.73 -10.24,2.86 -20.99,2.66 -31.48,4.02 -16.34,1.45 -32.65,3.29 -48.96,4.95 -4.57,-1.71 -0.43,5.74 -5.06,4.14 -6.97,0.06 -13.87,1.23 -20.84,0.71 -0.95,4.26 -1.37,9.04 -3.6,12.76 -3.45,1.82 -4.01,5.81 -4.43,9.33 -3.1,1.1 -4.68,2.61 -2.53,5.59 -1.75,3.9 -0.58,5.24 3.51,3.98 33.91,-3.26 67.83,-6.53 101.74,-9.79 -0.23,-2.54 0.72,-5.31 3.53,-5.69 3.11,-0.4 0.99,-5.41 4.88,-5.81 2.77,-2.02 6.49,-2.19 8.62,-5.18 1.76,-2.26 6.31,-1.64 5.78,-5.38 1.19,-1.77 3.1,-3.84 5.03,-4.85 1.04,-0.39 0.28,1.78 1.72,1.19 2.38,0.56 2.2,-4.36 5.22,-3.86 3.3,1.27 2.68,-2.92 4.96,-4.18 2.05,-0.94 3.81,-6.68 0.92,-6.59 -0.81,0.64 -1.63,1.27 -2.44,1.91z","name":"Tennessee"},"ar":{"path":"m509.47,335.31c1.73,4.9 1.5,10.02 1.53,15.12 2.15,12.21 1.13,24.64 1.47,36.97 0.02,3.71 0.04,7.42 0.06,11.13 2.06,3.2 5.05,-1.45 7.69,1.47 1.53,1.76 -0.88,7.54 2.97,6.49 17.61,-0.36 35.23,-0.72 52.84,-1.08 1.97,-2.6 0.41,-5.9 -1.28,-8.22 3.3,-1.61 -1.59,-3.96 0.84,-6.53 0.75,-2.77 0.62,-6.34 3.78,-7.69 -1.88,-3.07 2.08,-5.24 3.19,-7.88 3.77,-0.38 1.58,-3.3 2.64,-5.42 1.12,-2.67 2.56,-5.28 4.85,-6.58 1.2,-4.12 0.21,-2.67 -1.53,-5.61 -2.76,-3.32 1.95,-3.96 2.36,-6.84 -0.05,-1.94 3.31,-6.69 1.22,-6.75 -2.65,0.85 -5.34,-0.18 -8.02,-0.33 -0.09,-3.38 4.4,-3.88 4.22,-7.3 0.58,-3.87 -3.58,-3.68 -6.34,-3.26 -24.17,0.77 -48.34,1.54 -72.5,2.31z","name":"Arkansas"},"mo":{"path":"m490.44,245.63c-2.39,-0.46 -0.19,4.05 0.07,5.6 2.45,3.32 4.51,7.86 8.55,9.22 2.81,-0.24 3.61,2.67 2.79,4.84 -3.22,1.64 -1.72,5.03 0.19,7.07 0.9,2.55 4.61,3.05 4.89,5.61 2.1,12.97 1.12,26.14 1.51,39.22 0,5.72 0.08,11.44 0.72,17.13 24.99,-0.94 49.98,-1.8 74.97,-2.51 3.02,-1.12 4.35,1.72 5.31,3.98 0.52,3.48 -2.86,4.46 -4.14,6.86 2.37,0.64 5.57,0.65 8.21,-0.08 1.46,-3.59 1.87,-7.45 2.38,-11.22 0.84,-2.83 5.27,-2.89 4.61,-6.03 1.37,-2.94 0.14,-4.6 -2.22,-4.28 -2.15,-1.81 -2.84,-5.03 -2.86,-7.6 1.45,-2.84 -2.08,-5.07 -2.44,-7.89 -0.66,-3.24 -5.34,-0.87 -6.89,-3.66 -2.64,-2.34 -6.24,-3.94 -6.91,-7.76 -0.94,-3.21 1.52,-6.47 2.17,-9.64 2.2,-3.53 -1.34,-4.7 -4.33,-4.5 -2.66,0.39 -5.34,-1.15 -4.81,-4.1 0.86,-4.07 -4.71,-4.05 -6.43,-6.93 -2.7,-3.4 -6.72,-6.05 -7.25,-10.67 -1.1,-3.16 -2.12,-6.86 -0.62,-10.06 -2.3,-1.34 -2.28,-5.77 -5.37,-4.89 -20.69,0.77 -41.38,1.53 -62.06,2.3z","name":"Missouri"},"ga":{"path":"m672.78,356c-0.74,7.06 4.28,12.69 5.29,19.4 1.36,6.57 3.44,12.96 5.03,19.44 0.94,4.88 2.17,9.95 5.53,13.75 -0.85,3.5 3.37,3.17 2.59,6.44 -1.89,4.45 -3.57,9.65 -0.84,14.13 0.05,2.63 0.94,5.4 -0.38,7.88 2.95,0.94 1.45,4.01 3.07,6.01 1.35,2.67 3.68,4.75 6.83,4 12.35,-0.01 24.69,-1.31 37.03,-1.92 3.32,-0.58 6.67,-0.74 10.04,-0.59 -0.78,4.24 3.04,4.15 2.09,-0.09 -0.9,-2.14 -2.94,-6.23 0.59,-6.62 3.2,0.5 6.42,0.91 9.66,1.02 -0.84,-3.8 -0.8,-7.57 0.5,-11.27 0.2,-3.54 2.62,-6.73 2.21,-10.21 -0.72,-2.93 3.26,-5.26 2.85,-8.05 -2.19,1.37 -5.29,-0.71 -5.34,-3.19 -0.56,-3.12 -2.71,-5.83 -6.03,-6.06 -1.33,-3.9 -2.62,-8.17 -4.99,-11.43 -3.12,-1.07 -6.13,-2.99 -7.17,-6.29 -2.06,-2.33 -5.23,-3.21 -6.66,-6.16 -2.08,-2.2 -5.24,-2.83 -7.66,-4.19 -0.76,-2.53 -3.21,-4.09 -3.94,-6.67 -1.36,-2.63 -2.97,-4.65 -6.15,-3.77 -2.33,-1.57 -7.15,-3.38 -5.31,-6.97 2.02,-2.01 3.76,-4.11 -0.8,-3.11 -12.68,1.51 -25.37,3.01 -38.05,4.52z","name":"Georgia"},"sc":{"path":"m737.03,343.19c-4.26,0.4 -8.64,0.43 -12.24,3.07 -3.2,1.75 -6.48,3.19 -9.88,4.49 2.21,3.31 -4.28,2.74 -2.34,6.44 2.27,2.24 5.2,4.13 8.5,3.28 2.53,3.15 3.83,6.94 6.53,9.88 0.91,2.76 5.13,2.06 6.85,4.46 2.18,1.38 2.96,4.25 5.62,5.01 2.99,1.95 3.36,6.38 7.26,7.24 3.61,0.62 3.77,4.77 5.34,7.38 0.38,3.35 2.02,4.84 4.79,5.96 3.36,1.79 1.76,7.23 5.67,8.16 3.63,-1.38 5.8,-4.63 8.38,-7.34 -2.35,-3.93 0.29,-3.32 3.01,-4.44 1.95,-2.4 5.02,-3.3 6.25,-6.28 2.17,-2 3.86,-4.52 5.4,-6.9 2.81,-0.17 3.42,-3.58 4.92,-5.03 -0.28,-4.13 1.3,-7.89 3.12,-11.47 1.03,-2.11 7.03,-4.5 3.47,-6.34 -5.97,-5.35 -12.78,-9.5 -19.71,-13.47 -4.45,-2.68 -9.74,-0.07 -14.57,-0.06 -2.57,-0.23 -6.63,2.48 -7.32,-1.28 -1.66,-4.5 -6.93,-2.82 -10.63,-2.96 -2.8,0.07 -5.61,0.14 -8.41,0.21z","name":"South Carolina"},"ky":{"path":"m675,267.5c-2.76,-0.77 -6,1.11 -3.38,3.78 1.52,3.15 -3.12,4.12 -5.19,5.27 -2.94,0.53 -4.71,1.29 -4.3,4.82 -1.15,2.66 -5.3,3.24 -6.32,6.32 -2.16,1.4 0.74,6.22 -2.84,5.92 -3.06,0.61 -4.36,-2.79 -7.09,0.11 -2.26,0.51 -1.1,6.98 -3.85,3.1 -2.27,-2.54 -5.57,0.14 -6.16,2.81 -1.91,1.07 -3.4,-3.73 -6.02,-1.91 -3.32,0.61 -7.48,0.47 -9.92,2.91 0.08,2.65 -3.39,3.78 -1.7,6.05 2.34,2.66 -2.23,2.68 -3.86,3.3 -3.57,1.35 -0.68,4.35 -0.76,6.72 0.33,3.45 -3.76,1.44 -5.49,0.72 -2.5,-2.29 -6.26,-0.38 -7.13,2.53 2.86,2.28 -0.04,4.76 0.41,7.66 -3.47,2.04 -3.19,2.73 0.94,2.35 5.84,0.01 11.64,-0.95 17.5,-0.76 -0.7,-3.74 0.98,-4.99 4.56,-4.19 24.33,-3.01 48.82,-4.7 73.16,-7.43 4.3,-0.7 8.2,-2.38 11.75,-4.88 3.3,-0.8 4.04,-2.71 5.12,-5.35 3.46,-4.09 7.13,-8.06 10.79,-12 -3.27,-1.24 -3.03,-5.51 -6.21,-6.95 -2.6,-1.25 -2.07,-4.66 -5.16,-5.36 -2.38,-2.64 0.8,-7.28 -3.02,-8.87 -3.02,-0.01 -2.37,-4.65 -4.57,-3.51 -2.95,0.61 -3.67,4.78 -7.02,3.29 -2.69,-0.23 -5.51,-1.19 -7.82,0.71 -3,0.83 -3.99,-3.61 -7.44,-2.06 -3.51,0.82 -2.17,-5.19 -5.65,-5.26C677.17,266.43 676.21,267.17 675,267.5z","name":"Kentucky"},"al":{"path":"m628.53,359.63c-0.2,14.37 0.12,28.75 -0.54,43.12 -0.04,9.01 -0.88,18.1 -0.07,27.07 1.55,10 2.94,20.01 3.85,30.09 3.07,1.09 3.69,-1.92 4.4,-4.18 -0.3,-3.89 4.27,-3.02 4.89,-0.04 0.72,2.06 4.08,5.27 0.77,6.65 -0.15,0.92 6.17,-0.9 5.88,-2.89 -0.44,-3.01 0.64,-6.86 -2.87,-8.19 -2.29,-0.88 -3.03,-5.59 -0.32,-5.67 14.08,-1.86 28.21,-3.59 42.35,-4.8 2.7,1.07 6.76,-0.25 2.97,-2.5 -1.8,-2 0.95,-5.03 -0.27,-7.65 -0.31,-3.1 -2.63,-5.9 -1.31,-9.15 0.01,-2.92 2.49,-5.36 1.93,-8.3 -3.52,-0.45 -1.34,-5.11 -4.26,-6.7 -3.48,-5.82 -3.36,-13.04 -5.96,-19.21 -2.02,-8.09 -3.34,-16.41 -7.25,-23.88 -0.51,-2.39 -1.08,-4.85 -0.72,-7.31 -14.49,1.18 -28.98,2.35 -43.47,3.53z","name":"Alabama"},"la":{"path":"m521.09,407.28c0.1,7.53 -0.24,15.32 1.67,22.61 2.08,2.49 2.82,5.51 3.15,8.67 1.87,2.78 5.27,4.95 4.59,8.72 1.61,2.18 -0.21,5.69 0.08,8.38 0.42,2.64 -4.36,4.89 -2.01,7.12 1.07,2.26 -0.92,5.31 -0.53,7.95 0.38,3.22 -2.37,5.7 -1.55,8.93 5.18,-2.4 10.98,-0.86 16.47,-1.09 5.72,1.7 11.56,4.87 17.56,4.26 2.93,-2.25 5.94,0.36 8.98,0.93 1.08,-3.4 -4.22,-0.81 -5.8,-2.2 -1.91,-0.36 -2.89,-2.3 -1.17,-3.4 2.08,-1.1 4.08,-1.09 5.66,0.04 2.15,-1.39 5.6,-0.24 6.26,2.38 -0.33,3.62 3.42,1.7 5.28,3.15 3.83,1.5 -1.41,4.07 0.83,5.37 2.88,0.97 5.73,2.94 8.62,3.29 3.51,-0.05 2.81,-4.53 6.47,-4.17 1.83,-2.9 4.44,-0.25 4.39,2.31 1.53,1.64 4,-3.68 1.98,-3.66 0.22,-3.37 2.17,-3.21 4.31,-5.41 1.59,0.95 0.91,2.82 1.41,4.16 3.33,0.39 7.44,1.09 9.34,4.06 2.79,0.08 5.17,1.1 5.56,-2.56 -2.68,-0.27 -4.15,-3.88 -7.35,-3.19 -2.31,0.06 -6.3,-1.62 -6.15,-3.77 1.62,-3.62 2.23,-1.74 2.03,-4.38 2.88,1.09 5.69,-2.27 3.22,-4.47 0.46,-4.62 -3.73,-0.15 -3.34,2.19 -1.36,1.21 -6.35,-0.96 -4.6,-3.27 1.71,-1.84 4.2,-4.5 2.19,-6.95 -0.13,-3.26 -2.69,-5.21 -4.47,-7.38 0.52,-2.7 2.26,-7.35 -2.36,-5.46 -10.43,1.28 -20.97,0.69 -31.45,1.12 -1.61,-3.72 -0.02,-7.76 0.16,-11.59 2.66,-4.86 5.46,-9.65 8.25,-14.44 -2.04,-2.82 3.52,-4.45 -0.74,-6.48 -0.53,-2.15 -1.29,-4.65 -2.32,-6.83 -0.08,-3.1 0.9,-7.3 -3.62,-5.79 -17,0.28 -34,0.57 -51,0.85z","name":"Louisiana"},"ms":{"path":"m591.03,363.5c-1.45,1.74 -4.03,3.15 -4.63,6.03 -1.4,2.22 1.43,5.74 -2.69,6.07 -1.48,1.97 -4.77,4.42 -3.4,7.17 -1.36,1.83 -3.59,3.95 -3.48,7.01 -2.16,2.66 1.55,5.28 -0.27,7.12 -0.45,1.84 2.25,4.42 1.35,7.03 -1.92,2.71 -1.63,6.55 -0.61,9.53 1.6,2.4 0.78,5.54 3.73,6.94 -0.95,2.53 -1.41,3.75 -1.87,6.31 -2.55,4.96 -6.07,9.62 -7.89,14.84 0.01,2.98 -1.44,6.14 -0.14,8.97 11.4,-0.36 22.87,0.25 34.19,-1.5 2.75,2.21 -2.19,6.39 1.33,8.15 2.82,1.62 2.28,5.18 3.89,7.63 2.07,-1.86 2.51,-6.19 5.82,-4.07 3.21,-0.67 6.85,-3.02 9.89,-0.64 3.62,0.73 6.01,-0.27 4.42,-4.26 -0.81,-10.1 -2.99,-20.07 -3.84,-30.15 0.14,-21.99 1.48,-43.98 0.64,-65.97 -12.15,1.26 -24.29,2.52 -36.44,3.78z","name":"Mississippi"},"ia":{"path":"m476.25,181.16c-3.42,-0.05 -2.16,5.68 0.72,6.29 0.54,2.07 -0.75,5.06 -1.41,7.35 -2.13,2.82 -0.93,5.45 1.04,7.92 1.22,4.34 2.24,8.85 4.05,13.06 0.6,3.22 1.29,6.38 3.41,9 0.02,3.49 1.27,6.69 2.3,9.91 -0.04,3.54 0.03,7.05 2.08,10.09 22.2,-1.02 44.44,-1.75 66.66,-2.63 0.77,1.43 3.25,7.11 4.37,4.25 -0.96,-2.5 1.19,-4.52 3.57,-4.72 -0.88,-2.62 1.19,-4.59 2.5,-6.28 1.27,-2.92 -1.39,-4.02 -2.41,-6.31 0.69,-2.9 1.79,-5.3 5.13,-5.46 2.88,-0.83 6.57,-1.81 6.65,-5.41 1.76,-3.04 3.73,-8.01 -0.26,-10.18 -2.74,-1.06 -1.75,-5.27 -5.21,-5.14 -0.64,-1.97 -0.85,-4.76 -4.19,-4.21 -2.75,-0.8 -4.55,-3.47 -5.37,-6 -1.36,-2.89 2.01,-4.72 1.65,-7.28 -3.82,-0.4 -1.19,-6.5 -5.03,-5.47 -26.75,0.41 -53.5,0.81 -80.25,1.22z","name":"Iowa"},"mn":{"path":"m497.03,53.84c-0.69,2.52 0.93,7.42 -1.31,8.34 -9.65,-0.01 -19.29,-0.02 -28.94,-0.03 1.16,2.87 2.18,5.76 0.97,8.81 0.05,5.74 -0.79,11.86 2.51,16.95 2.04,3.78 0.64,8.47 1.5,12.6 0.82,6.84 1.76,13.67 3.55,20.32 0.05,3.83 0.88,7.8 0.03,11.53 -1.57,1.74 -4.91,3.29 -2.22,5.78 1.89,1.83 5.05,2.94 4.58,6.1 0.28,11.9 0.25,23.83 0.42,35.75 26.72,-0.38 53.44,-0.75 80.16,-1.13 -0.15,-3.62 -0.46,-7.93 -4.36,-9.47 -3.02,-1.66 -6.24,-3.1 -7.63,-6.5 -0.72,-3.61 -5.32,-1.16 -6.05,-4.61 -1.56,-2.09 -5.29,-0.37 -6.57,-3.78 -1.66,-2.1 -0.52,-5.5 -1.1,-8.1 -1.34,-2.93 1.65,-4.99 1.47,-7.54 -0.2,-3.22 -5.36,-3.85 -2.24,-7.43 0.41,-4.47 5.39,-5.33 7.61,-8.59 0.24,-3.87 -0.73,-8.14 0.52,-11.77 1.76,-3.14 5.17,-5.1 8.28,-6.26 1.92,-2.08 3.66,-4.57 6.13,-5.81 2.54,-4.97 6.04,-9.99 11.81,-11.4 4.55,-1.98 9.12,-3.92 13.6,-6.04 0.73,-3.15 -3.7,-0.18 -5.06,0.03 -0.82,-3.87 -4.2,-3.09 -7.28,-2.87 -2.25,-0.87 -5.34,2.83 -6,-0.66 -1.13,-3.5 -4.51,0.72 -5.88,2.13 -2.33,1.63 -6.22,1.16 -8.06,-0.56 0.94,-3.05 -4.61,-0.39 -4.53,-3.96 -0.16,-2.3 -3.48,1.3 -5.77,-1.2 -3.04,-0.91 -5.5,-3.22 -8.29,-4.38 -2.49,0.4 -5.86,-2.38 -6.7,1.5 -1.17,0.79 -7.15,1.83 -5.93,-1.54 -2.99,0.03 -6.03,-0.05 -7.53,-1.75 -2.6,0.59 -5.72,-0.41 -5.9,-3.43 -0.88,-3.28 -1.44,-6.61 -1.88,-9.98 -1.23,-0.6 -2.54,-1.02 -3.91,-1.06z","name":"Minnesota"},"ok":{"path":"m363.31,330.03c17.51,1.12 35.04,1.73 52.56,2.47 -1.37,13.62 -2.89,27.23 -2.83,40.93 -0.92,3.93 3.48,5.78 6.14,7.66 0.56,-5.56 2.96,1.46 4.25,-1.31 0.93,-1.5 5.57,1.68 3.39,4.42 1.59,0.66 4.76,0.51 6.73,1.82 2.79,-0.99 5.16,3.32 7.03,1.26 1.82,-1.93 5.59,-0.31 6.5,2.02 2.44,0.79 1.71,5.84 4.76,3.05 1.39,-1.65 6.25,-1.17 6.69,1.21 1.28,1.5 5.69,3.72 7.39,1.92 0.33,-2.75 3.38,-5.95 4.59,-1.83 3.59,0.38 6.96,2 10.46,3 2.28,-1.86 2.44,-4.68 6.53,-3.41 2.53,1.92 3.8,-1.41 6.31,-1.16 0.85,2.42 5.2,2.41 6.19,-0.5 3.2,-0.2 3.66,3.71 6.55,4.35 1.86,0.4 6.31,3.63 5.36,0.18 -0.32,-12.27 0.1,-24.59 -0.7,-36.82 -1.15,-6.03 -1.01,-12.18 -1.43,-18.25 -1.32,-5.29 -2.05,-10.73 -2.07,-16.18 -20.01,0.66 -40.04,-0.04 -60.06,-0.22 -27.85,-1.32 -55.73,-2.3 -83.53,-4.56 -0.27,3.31 -0.54,6.63 -0.81,9.94z","name":"Oklahoma"},"tx":{"path":"m359.47,330.97c2.34,-0.11 -0.86,-1.81 0,0z m0.72,18.31c-1.64,20.84 -2.52,41.75 -4.68,62.55 -0.51,4.33 -0.99,8.66 -1.51,12.98 -17.84,-0.87 -35.67,-1.93 -53.42,-3.89 -4.16,-0.41 -8.32,-0.76 -12.48,-1.11 -0.67,3.74 2.27,3.68 4.04,6.12 2.26,1.83 1.13,6.03 4.65,6.5 3.52,0.48 2.9,4.6 5.45,6.34 3.38,3.15 5.5,7.91 10.27,9.06 1.91,1.27 4,3.22 4.53,5.46 0.69,3.96 4.53,7.02 3.47,11.33 -0.88,5.15 2.22,9.63 5.93,12.88 2.18,2.95 5.14,4.76 8.63,5.78 1.88,1.95 3.01,3.88 5.72,4.88 2.59,0.18 5.38,4.34 7.35,1.18 2.59,-3.14 5.48,-6.41 6.05,-10.55 1.26,-2.82 3.58,-4.32 6.5,-5.06 2.72,-1.59 5.32,-2.13 7.47,0.62 4.91,0.57 10.2,0.53 14.79,2.22 2.83,1.43 2.56,4.53 5.17,6.33 1.73,2.05 4.83,3.37 5.81,5.82 1.37,2.07 2.66,4.26 2.69,7.03 1.62,4.34 4.17,8.51 5.31,12.94 -0.24,2.77 4.65,2.49 4.95,5.51 2.24,4.08 4.37,9.17 9.21,10.49 3.28,2 0.03,5.04 0.91,7.5 3.28,0.87 -0.01,4.68 0.94,6.67 2.53,1.36 4.37,3.2 4.22,6.44 0.39,3.34 2.13,6.83 5.69,7.54 3.01,1.93 6.69,2.13 9.87,3.4 2.28,1.79 5.15,4.09 8.16,2.83 3.46,0.46 6.77,1.29 9.37,3.75 1.43,2.54 6.51,-0.91 4.31,-2.89 -2.04,-3.39 -1.3,-7.79 -2.83,-11.46 -0.63,-3.07 -2.39,-5.95 -0.99,-9.1 1.17,-4.9 2.87,-9.76 4.04,-14.71 -3.37,-1.01 -2.07,-5.47 1.21,-4.71 3.99,0.42 3.65,-6.43 7.81,-6.05 5.25,-1.56 9.07,-6 14.16,-8.05 6.91,-2.81 13.62,-6.46 18.72,-12.05 2.58,-2.98 7.09,-3.95 8.69,-7.75 5,-2.22 9.8,-4.93 15.22,-6 -0.97,-2.64 0.52,-4.86 1.32,-7.22 0.39,-2.99 0.19,-6.07 1.18,-8.94 -3.15,-2.27 0.38,-4.91 1.38,-7.41 -0.2,-2.8 1.42,-6.25 0.09,-8.66 0.3,-2.93 -1.49,-5.14 -3.35,-7.29 -2.46,-2.64 -1.11,-6.91 -3.87,-9.52 -2.53,-4.57 -1.59,-10.19 -2.25,-15.22 0.02,-5 0.19,-10 -0.5,-14.97 -2.63,-2.31 -5.52,2.33 -7.52,-1.37 -3.1,-2.07 -7.66,-2.1 -9.73,-5.68 -2.31,-2.48 -3.82,2.84 -7.18,0.96 -1.91,-2.73 -3.59,0.03 -5.98,0.18 -2.27,-1.15 -6.07,-1.48 -6.09,1.76 -2.76,2.37 -5.95,-0.93 -8.94,-1.28 -3,1.38 -5.23,-3.83 -6.3,-1.87 -0.15,2.66 -2.52,5.1 -5.13,3.34 -3.23,-0.15 -4.91,-2.49 -6.57,-3.89 -2.95,-1.74 -4.3,2.32 -6.94,0.88 -1.48,-1.39 -1.87,-3.6 -3.92,-5.65 -3.06,-2.83 -5.03,3.17 -7.13,0.23 -2.05,-2.11 -5.57,-0.83 -7.94,-2.69 -3.56,0.59 -5.54,-0.24 -4.13,-4.11 -1.89,-1.85 -2.28,1.21 -4.77,-0.14 -0.59,-0.41 -3.45,1.78 -5,-1.11 -1.9,-1.9 -5.13,-3.22 -4.18,-6.45 0.03,-10.58 0.25,-21.15 1.66,-31.65 0.3,-2.99 0.6,-5.98 0.89,-8.98 -17.65,-0.63 -35.3,-1.27 -52.94,-2.22 -0.52,6.07 -1.04,12.15 -1.56,18.22z M466.53,518.63c-5.2,7.17 2.93,-3.27 0,0z","name":"Texas"},"nm":{"path":"m242.72,428.78c4.82,0.63 9.65,1.25 14.47,1.88 0.43,-3.33 0.85,-6.67 1.28,-10 9.7,0.89 19.4,1.86 29.09,2.78 -0.9,-3.14 -1.39,-5.98 2.84,-4.5 18.29,1.28 36.48,3.79 54.81,4.49 2.45,-0.6 7.66,2.13 7.99,-1.01 3.06,-22.93 3.75,-46.09 5.59,-69.14 0.54,-7.79 1.39,-15.56 2.02,-23.34 3.21,0.65 1.17,-4.81 2.07,-6.86 1.79,-4.38 -2.87,-3.37 -5.73,-3.85 -32.35,-3.3 -64.71,-6.59 -97.06,-9.89 -5.79,39.81 -11.58,79.63 -17.38,119.44z","name":"New Mexico"},"ks":{"path":"m380.53,320.34c25.06,1.17 50.11,2.71 75.19,3.35 17.22,0.07 34.44,0.63 51.66,0.18 -0.25,-12.69 0.23,-25.42 -0.47,-38.08 -0.61,-2.83 -0.17,-6.27 -1.38,-8.74 -3.04,-2.03 -6.02,-5.19 -6.68,-8.77 -0.43,-2.51 4.3,-4.59 1.29,-6.64 -3.02,0.54 -4.05,-3.34 -7.17,-2.43 -36.21,-0.82 -72.43,-1.33 -108.63,-2.5 -1.27,21.21 -2.54,42.42 -3.81,63.63z","name":"Kansas"},"ne":{"path":"m353.38,230.59c10.76,0.96 21.27,2.72 32.03,3.66 -0.37,7.11 -0.71,14.23 -1.06,21.34 36.49,1.29 73,1.84 109.5,2.56 -0.31,-1.17 -3.13,-4.05 -4.03,-6.15 -1.99,-2.11 -0.36,-5.13 -2.45,-7.34 -2.42,-3.19 -1.66,-7.14 -2.2,-10.79 -1.66,-2.86 -1.45,-6.25 -2.29,-9.26 -2.94,-2.85 -2.34,-7.01 -3.95,-10.49 -1.13,-3.1 -2.18,-6.19 -2.62,-9.47 -3.51,1.32 -2.89,-3.07 -4.85,-4.29 -2.4,-1.68 -5.57,-1.85 -7.72,-3.93 -3.79,0.07 -7.65,1.04 -11.13,1.94 -2.52,-2.2 -6.03,-3.13 -7.91,-6.06 -13.61,0.96 -27.23,-0.49 -40.83,-1.11 -15.5,-1.05 -31.02,-1.79 -46.51,-2.86 -1.67,14.08 -2.83,28.17 -4,42.25z","name":"Nebraska"},"sd":{"path":"m357.44,187.41c25.68,1.58 51.37,3.15 77.06,4.26 3.58,-0.01 7.34,-0.51 10.81,-0.23 1.8,2.9 5.24,3.85 7.69,6 3.55,-1.45 7.52,-1.89 11.25,-1.91 2.45,2.67 7.26,2.29 9.15,5.33 1.32,4.76 3.27,1.86 0.18,-1.15 -1.53,-2.17 1.46,-4.6 1.56,-6.99 1.2,-2.87 1.38,-5.28 -1.58,-6.75 -0.5,-2.04 -0.73,-6.65 2.41,-5.84 2.62,-0.28 0.39,-5.28 1.06,-7.5 -0.32,-9.7 0.19,-19.47 -0.64,-29.13 -0.24,-3.58 -6.26,-4.19 -5.42,-8.4 1.09,-1.22 5.81,-4.38 2.75,-5.4 -27.23,-0.89 -54.5,-1.01 -81.67,-3.15 -9.79,-0.62 -19.57,-1.24 -29.36,-1.86 -1.75,20.91 -3.5,41.81 -5.25,62.72z","name":"South Dakota"},"nd":{"path":"m362.88,123.72c26.46,1.49 52.89,3.7 79.4,3.91 10.84,0.26 21.67,0.52 32.51,0.78 0.01,-5.53 -1.38,-10.82 -2.5,-16.17 -1.27,-7.42 -2.05,-14.89 -2.13,-22.42 -2.61,-4.16 -4.11,-9 -3.48,-13.94 -0.44,-3.25 0.67,-6.57 0.3,-9.7 -0.15,-4.01 -2.83,-4.61 -6.31,-4.12 -25.15,-0.47 -50.33,-1.05 -75.41,-3.06 -5.17,-0.49 -10.33,-0.98 -15.5,-1.47 -2.29,22.06 -4.58,44.13 -6.88,66.19z","name":"North Dakota"},"wy":{"path":"m240.16,217.84c37.4,4.49 74.29,8.23 111.69,12.72 2.5,-29.2 5.5,-57.65 8,-86.84 -35.26,-4.45 -70.52,-8.9 -105.78,-13.34 -4.64,29.16 -9.27,58.31 -13.91,87.47z","name":"Wyoming"},"mt":{"path":"m192.59,52.19c0.84,2.76 3.25,5.4 3.2,8.23 -1.5,2.79 -1,5.49 0.52,8.15 3.4,0.39 4.18,3.44 5.26,6.16 1.43,3.34 2.55,6.88 5.37,9.34 0.88,2.21 5.27,1.18 4.34,4.72 -2.23,6.21 -5.45,12.23 -7.06,18.56 0.02,3.34 3.4,5.25 5.73,2.22 1.61,-2.43 5.63,-3.04 4.69,0.97 -0.5,5.3 1.81,10.35 2.59,15.53 1.9,2 5.27,3.44 5.68,6.31 -0.71,1.91 -0.39,8.78 2.32,5.14 1.85,-1.89 4.93,-0.29 6.85,0.86 3.28,-1.63 7.26,-1.21 10.34,0.69 3.69,0.41 1.52,-5 5.95,-4.08 2.71,-0.42 2.01,6.69 3.21,4.1 0.56,-3.26 1.09,-6.54 1.68,-9.8 35.57,4.49 71.15,8.96 106.72,13.44 2.9,-28.44 5.79,-56.88 8.69,-85.31 -28.84,-2.29 -57.55,-5.91 -86.19,-9.99 -26.71,-4.12 -53.36,-8.71 -79.73,-14.68 -3.05,-0.61 -6.99,-2.59 -6.53,2.19 -1.21,5.75 -2.42,11.51 -3.62,17.26z","name":"Montana"},"co":{"path":"m260.17,308.53c39.89,4.09 79.51,8.26 119.39,11.91 1.61,-28.46 3.23,-56.92 4.84,-85.38 -37.47,-4.17 -74.94,-8.33 -112.41,-12.5 -4.03,28.98 -7.8,56.99 -11.83,85.97z","name":"Colorado"},"id":{"path":"m169.84,91.72c0.52,3.07 2.27,5.25 4.94,6.78 0.4,3.02 -0.61,5.46 -3.03,7.31 -2.3,2.7 -4.38,5.97 -6.09,8.83 0.39,2.93 -2.57,3.54 -4.23,4.8 -1.77,2.31 -4.28,4.3 -3.93,7.5 -0.64,2.43 4.69,0.57 4.09,4.34 -5.19,11.17 -6.78,23.51 -10.13,35.32 -0.79,3.16 -1.22,4.91 -2.01,8.08 56.92,12.84 62.26,13.45 93.58,19.41 2.75,-17.6 5.5,-35.21 8.25,-52.81 -2.66,-0.84 -0.58,-6.52 -4.23,-4.97 -1.24,1.7 -1.62,4.95 -5.17,3.47 -3.11,-1.99 -6.81,-1.34 -10.13,-0.56 -2.53,-1.76 -5.91,-2.01 -7.69,0.88 -1.75,-0.05 -3.29,-3.39 -2.79,-5.36 1.91,-3.98 -2.85,-5.89 -5.05,-8.27 -0.98,-5.88 -3.48,-11.64 -2.5,-17.69 -1.86,-0.01 -4.25,2.69 -6.47,3.63 -2.21,0.18 -4.52,-3.09 -4.1,-5.31 1.19,-5.37 4.07,-10.37 5.88,-15.6 1.95,-2.64 1.12,-5.57 -2.41,-5.62 -1.55,-3.37 -4.92,-5.66 -5.61,-9.53 -1.31,-2.63 -1.42,-6.47 -5.06,-6.76 -0.99,-1.85 -3.18,-4.47 -1.91,-6.73 2.09,-2.98 -0.34,-5.7 -1.53,-8.5 -2.13,-3.05 0.55,-6.68 0.67,-10.01 0.9,-4.35 1.8,-8.69 2.69,-13.04 -4.18,-0.78 -8.35,-1.56 -12.53,-2.34 -4.5,20.92 -9,41.83 -13.5,62.75z","name":"Idaho"},"ut":{"path":"m176.34,297.78c27.57,3.92 55.15,7.83 82.72,11.75 4.04,-29.08 8.08,-58.17 12.13,-87.25 -10.83,-1.14 -21.65,-2.33 -32.47,-3.59 1.43,-7.93 2.82,-15.85 3.84,-23.84 -15.27,-2.85 -30.54,-5.71 -45.81,-8.56 -6.8,37.17 -13.6,74.33 -20.41,111.5z","name":"Utah"},"az":{"path":"m173.19,314.66c-2.49,-0.06 -3.05,4.43 -6.38,2.94 -0.74,-2.87 -3.59,-2.82 -5.59,-4.22 -3.74,0.74 -2.37,4.58 -2.68,7.41 -0.52,5.04 -0.42,10.21 -0.89,15.22 -2.19,2.33 -2.44,5.78 -0.24,8.19 2.32,2.62 0.58,7.52 4.09,9.09 0.98,3.59 -2.89,4.83 -5.41,6.09 -3.29,2.46 -3.28,6.86 -3.88,10.47 -1.25,2.44 -4.81,2.39 -4.92,4.97 0.47,2.18 6.18,0.38 3.42,4.54 -0.65,2.75 -3.14,3.45 -5.62,3.78 -3.6,1.45 -2.69,4.7 0.77,5.44 14.69,7.84 28.52,17.13 43.01,25.32 5.79,3.19 11.27,7.21 17.27,9.88 11.71,2.83 23.75,3.45 35.68,4.87 5.71,-39.38 11.42,-78.75 17.13,-118.13 -27.58,-3.93 -55.17,-7.85 -82.75,-11.78 -1,5.31 -2,10.63 -3,15.94z","name":"Arizona"},"nv":{"path":"m84.84,232.41c22.96,34.61 45.92,69.23 68.88,103.84 3.66,2.65 3.19,-3.47 3.27,-5.71 0.37,-5.43 0.36,-11.24 1.08,-16.44 2.05,-2.03 4.26,-2 6.08,-0.39 2.62,-0.16 3.86,5.9 6.03,1.27 2.74,-0.82 2.66,-3.64 3.13,-6.41 7.5,-40.87 15,-81.75 22.51,-122.62 -30.72,-6.81 -61.44,-13.63 -92.16,-20.44 -6.27,22.3 -12.54,44.6 -18.81,66.91z","name":"Nevada"},"or":{"path":"M67.16,62.81C64.24,70.42 62.73,78.57 58.5,85.63c-2.86,8.53 -5.96,16.93 -10.17,24.89 -3.06,6.61 -8,12.31 -11.32,18.7 -1.03,6.5 -0.64,13.05 -0.36,19.6 37.23,8.7 74.46,16.69 111.69,25.39 3.45,-13.15 6.51,-25.75 10.19,-38.81 1.2,-2.48 3.15,-6.06 -1.1,-5.42 -2.58,-1.78 -0.23,-4.45 -0.38,-6.91 2.3,-2.82 4.36,-5.82 7.47,-7.75 1.75,-5.08 5.43,-9.19 9.03,-13.06 1.66,-3.48 -2.46,-3.92 -3.39,-6.47 -0.25,-3.79 -3.56,-4.26 -6.62,-4.99 -7.63,-2.2 -15.38,-4.2 -23.21,-5.54 -4.9,0.03 -9.79,0.06 -14.69,0.09 -0.95,-2.84 -4.67,1.86 -7.11,0.5 -2.61,0.82 -4.42,-2.63 -6.57,-1.28 -2.61,-0.06 -5.23,0.11 -7.15,-1.87 -3.09,-1.53 -6.33,-1.81 -9.5,-3.1 -1.87,3.03 -5.69,1.22 -8.53,1.31 -1.65,-1.64 -5.79,-3.02 -6.03,-4.81 1.1,-2.44 0.78,-5.93 0.53,-8.59 -0.42,-3.92 -4.72,-2.63 -6.25,-4.49C74.59,58.67 69.45,62.45 67.16,62.81z","name":"Oregon"},"wa":{"path":"m101.38,8.72c0.05,2.75 2.93,5.39 3.25,8.16 -1.92,2.33 -1.78,5.19 -1.32,7.71 -1.81,2.64 1.63,4.82 0.67,7.42 -3.6,1.52 -2.43,-3.7 -4.86,-4.99 -3.34,-2.24 1.47,-3.87 1.17,-5.42 -2.5,-1.11 -2.24,3.88 -3.69,4.17C92.33,26.39 88.86,23.04 84.76,22.57 79.82,20.66 75.28,17.69 72.25,13.25c-3.13,-0.98 -1.96,4.97 -3.25,6.95 -0.63,2.8 2.59,5.06 1.41,8.21 0.52,3.86 -1.29,7.55 0.18,11.29 -1.06,2.88 4.75,5.54 2.94,6.39 -3.45,-1.05 -6.2,3.2 -2.25,4.34 1.57,0.97 -0.61,6.32 -3.3,5.43 -1.83,2.15 1.28,6.86 4.14,4.17 3.77,-1.55 2.75,3.51 5.83,3.13 2.81,-0.24 4.26,3.31 4.54,5.61 0.04,2.48 -0.15,6.02 -0.26,7.78 2.63,1.76 5.01,4.26 8.46,3.62 3.2,0.66 4.7,-3.26 7.97,-0.5 3.01,0.48 6.37,1.55 8.79,3.66 3.03,0.92 6.02,-1.78 8.19,1.05 3.44,1.3 6.67,0.03 9.84,-1.4 0.99,1.78 4.42,1.32 7,1.3 5.35,-0.19 10.68,-0.16 15.82,1.55 6.99,1.44 13.78,3.45 20.65,5.4 4.47,-20.85 8.94,-41.71 13.41,-62.56 -19.81,-3.93 -39.37,-9.21 -58.73,-14.66 -7.27,-1.53 -14.4,-3.52 -21.46,-5.87L101.75,8.45 101.38,8.72z M95.5,15.16C94.05,13.72 92.15,14.26 94.72,17.63 94.39,13.84 99.19,18.11 98.98,14.18 98.24,12.75 96.05,14.08 95.5,15.16z m2.31,1.91c-3.13,3.04 1.36,2.18 0.16,-0.25l-0.16,0.25z","name":"Washington"},"ca":{"path":"m35.06,153.94c-0.1,4.04 0.4,8.21 -1.99,11.75 -1.86,3.68 -2.55,8.24 -6.48,10.38 -1.19,2.11 -3.49,3.38 -3.59,6.45 -1.94,3.49 2.49,5.65 2.91,8.98 1.54,3.39 2.34,6.94 1.63,10.65 0,2.92 -2.79,5.01 -2.24,8.14 0.05,2.97 -2.24,5.87 0.04,8.54 2.58,5 6.38,9.93 6.71,15.69 -0.54,2.77 -0.99,5.37 1.81,7.17 1.6,1.95 4.49,3.66 2.79,6.46 -1.73,3.87 -1.14,8.04 -1.09,12.16 1.68,2.67 2.83,6.76 6.66,6.53 1.48,2.33 0.97,4.84 -0.22,7.13 -2.5,1.53 -4.36,2.73 -3.66,6.08 0.27,3.49 4.27,5.34 4.36,9.01 1.46,6.2 4.13,11.92 7.59,17.25 0.71,2.57 2.16,4.34 2.9,6.41 -0.24,3.33 -1.93,6.49 -2.41,9.87 -1.66,2.61 1.19,5.52 3.99,5.12 4.03,0.15 7.27,3.31 11.01,4.04 3,-0.55 4.74,2.9 6.07,5.11 1.54,2.71 2.37,6 5.76,6.88 2.51,1.14 6.19,0.05 7.17,3.45 2.41,2.72 -2.39,5.05 1.41,5.17 2.73,1.87 5.56,-1.74 7.56,-0.74 2.13,2.06 4.05,4.2 4.93,7.05 4.3,4.9 1.44,11.77 2.79,17.52 14.73,1.94 29.44,4.72 44.27,5.38 2.78,1.19 6.19,-4.43 2.84,-4.65 -3.13,0.64 -2.83,-4.02 -1.36,-4.66 3.15,-0.88 4.92,-3.83 4.65,-7.04 0.47,-3.98 3.27,-7.43 7.22,-8.4 3.43,-2.04 -0.33,-3.58 -0.79,-5.79 -0.23,-3.65 -1.95,-6.81 -3.62,-9.89 2.02,-3.66 -2.22,-3.32 -3.16,-6.24 -22.6,-34.1 -45.2,-68.19 -67.81,-102.29 6.27,-22.44 12.54,-44.88 18.81,-67.31 -22.04,-5.16 -44.08,-10.31 -66.13,-15.47 -0.45,1.38 -0.9,2.75 -1.34,4.13z m24.13,184.72c-0.27,3.05 7.99,3.06 4.7,2.07 -1.63,-0.35 -3.17,-2.46 -4.7,-2.07z m-5.16,0.38c0.33,3.71 5.81,0.51 1.31,-0.04 -0.44,0.01 -0.88,0.02 -1.31,0.04z M79.69,357.5c-0.2,1.58 4.42,6 3.16,2.37C82.22,358.91 80.8,357.6 79.69,357.5z M77.75,369.13c-0.14,1.55 3.2,3.89 1.32,1.26C78.6,369.72 77.39,366.55 77.75,369.13z","name":"California"}}}); diff --git a/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.world.js b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.world.js new file mode 100644 index 0000000..12fff70 --- /dev/null +++ b/public/admin/view/javascript/jquery/jqvmap/maps/jquery.vmap.world.js @@ -0,0 +1,2 @@ +/** Add World Map Data Points */ +jQuery.fn.vectorMap('addMap', 'world_en', {"width":950,"height":550,"pathes":{"id":{"path":"M781.68,324.4l-2.31,8.68l-12.53,4.23l-3.75-4.4l-1.82,0.5l3.4,13.12l5.09,0.57l6.79,2.57v2.57l3.11-0.57l4.53-6.27v-5.13l2.55-5.13l2.83,0.57l-3.4-7.13l-0.52-4.59L781.68,324.4L781.68,324.4M722.48,317.57l-0.28,2.28l6.79,11.41h1.98l14.15,23.67l5.66,0.57l2.83-8.27l-4.53-2.85l-0.85-4.56L722.48,317.57L722.48,317.57M789.53,349.11l2.26,2.77l-1.47,4.16v0.79h3.34l1.18-10.4l1.08,0.3l1.96,9.5l1.87,0.5l1.77-4.06l-1.77-6.14l-1.47-2.67l4.62-3.37l-1.08-1.49l-4.42,2.87h-1.18l-2.16-3.17l0.69-1.39l3.64-1.78l5.5,1.68l1.67-0.1l4.13-3.86l-1.67-1.68l-3.83,2.97h-2.46l-3.73-1.78l-2.65,0.1l-2.95,4.75l-1.87,8.22L789.53,349.11L789.53,349.11M814.19,330.5l-1.87,4.55l2.95,3.86h0.98l1.28-2.57l0.69-0.89l-1.28-1.39l-1.87-0.69L814.19,330.5L814.19,330.5M819.99,345.45l-4.03,0.89l-1.18,1.29l0.98,1.68l2.65-0.99l1.67-0.99l2.46,1.98l1.08-0.89l-1.96-2.38L819.99,345.45L819.99,345.45M753.17,358.32l-2.75,1.88l0.59,1.58l8.75,1.98l4.42,0.79l1.87,1.98l5.01,0.4l2.36,1.98l2.16-0.5l1.97-1.78l-3.64-1.68l-3.14-2.67l-8.16-1.98L753.17,358.32L753.17,358.32M781.77,366.93l-2.16,1.19l1.28,1.39l3.14-1.19L781.77,366.93L781.77,366.93M785.5,366.04l0.39,1.88l2.26,0.59l0.88-1.09l-0.98-1.49L785.5,366.04L785.5,366.04M790.91,370.99l-2.75,0.4l2.46,2.08h1.96L790.91,370.99L790.91,370.99M791.69,367.72l-0.59,1.19l4.42,0.69l3.44-1.98l-1.96-0.59l-3.14,0.89l-1.18-0.99L791.69,367.72L791.69,367.72M831.93,339.34l-4.17,0.47l-2.68,1.96l1.11,2.24l4.54,0.84v0.84l-2.87,2.33l1.39,4.85l1.39,0.09l1.2-4.76h2.22l0.93,4.66l10.83,8.96l0.28,7l3.7,4.01l1.67-0.09l0.37-24.72l-6.29-4.38l-5.93,4.01l-2.13,1.31l-3.52-2.24l-0.09-7.09L831.93,339.34L831.93,339.34z","name":"Indonesia"},"pg":{"path":"M852.76,348.29l-0.37,24.44l3.52-0.19l4.63-5.41l3.89,0.19l2.5,2.24l0.83,6.9l7.96,4.2l2.04-0.75v-2.52l-6.39-5.32l-3.15-7.28l2.5-1.21l-1.85-4.01l-3.7-0.09l-0.93-4.29l-9.81-6.62L852.76,348.29L852.76,348.29M880.48,349l-0.88,1.25l4.81,4.26l0.66,2.5l1.31-0.15l0.15-2.57l-1.46-1.32L880.48,349L880.48,349M882.89,355.03l-0.95,0.22l-0.58,2.57l-1.82,1.18l-5.47,0.96l0.22,2.06l5.76-0.29l3.65-2.28l-0.22-3.97L882.89,355.03L882.89,355.03M889.38,359.51l1.24,3.45l2.19,2.13l0.66-0.59l-0.22-2.28l-2.48-3.01L889.38,359.51L889.38,359.51z","name":"Papua New Guinea"},"mx":{"path":"M137.49,225.43l4.83,15.21l-2.25,1.26l0.25,3.02l4.25,3.27v6.05l5.25,5.04l-2.25-14.86l-3-9.83l0.75-6.8l2.5,0.25l1,2.27l-1,5.79l13,25.44v9.07l10.5,12.34l11.5,5.29l4.75-2.77l6.75,5.54l4-4.03l-1.75-4.54l5.75-1.76l1.75,1.01l1.75-1.76h2.75l5-8.82l-2.5-2.27l-9.75,2.27l-2.25,6.55l-5.75,1.01l-6.75-2.77l-3-9.57l2.27-12.07l-4.64-2.89l-2.21-11.59l-1.85-0.79l-3.38,3.43l-3.88-2.07l-1.52-7.73l-15.37-1.61l-7.94-5.97L137.49,225.43L137.49,225.43z","name":"Mexico"},"ee":{"path":"M517.77,143.66l-5.6-0.2l-3.55,2.17l-0.05,1.61l2.3,2.17l7.15,1.21L517.77,143.66L517.77,143.66M506.76,147.64l-1.55-0.05l-0.9,0.91l0.65,0.96l1.55,0.1l0.8-1.16L506.76,147.64L506.76,147.64z","name":"Estonia"},"dz":{"path":"M473.88,227.49l-4.08-1.37l-16.98,3.19l-3.7,2.81l2.26,11.67l-6.75,0.27l-4.06,6.53l-9.67,2.32l0.03,4.75l31.85,24.35l5.43,0.46l18.11-14.15l-1.81-2.28l-3.4-0.46l-2.04-3.42v-14.15l-1.36-1.37l0.23-3.65l-3.62-3.65l-0.45-3.88l1.58-1.14l-0.68-4.11L473.88,227.49L473.88,227.49z","name":"Algeria"},"ma":{"path":"M448.29,232.28h-11.55l-2.26,5.02l-5.21,2.51l-4.3,11.64l-8.38,5.02l-11.77,19.39l11.55-0.23l0.45-5.7h2.94v-7.76h10.19l0.23-10.04l9.74-2.28l4.08-6.62l6.34-0.23L448.29,232.28L448.29,232.28z","name":"Morocco"},"mr":{"path":"M404.9,276.66l2.18,2.85l-0.45,12.32l3.17-2.28l2.26-0.46l3.17,1.14l3.62,5.02l3.4-2.28l16.53-0.23l-4.08-27.61l4.38-0.02l-8.16-6.25l0.01,4.06l-10.33,0.01l-0.05,7.75l-2.97-0.01l-0.38,5.72L404.9,276.66L404.9,276.66z","name":"Mauritania"},"sn":{"path":"M412.03,289.84L410.12,290.31L406.18,293.18L405.28,294.78L405,296.37L406.43,297.40L411.28,297.34L414.40,296.5L414.75,298.03L414.46,300.06L414.53,300.09L406.78,300.21L408.03,303.21L408.71,301.37L418,302.15L418.06,302.21L419.03,302.25L422,302.37L422.12,300.62L418.53,296.31L414.53,290.87L412.03,289.84z","name":"Senegal"},"gm":{"path":"M406.89,298.34l-0.13,1.11l6.92-0.1l0.35-1.03l-0.15-1.04l-1.99,0.81L406.89,298.34L406.89,298.34z","name":"Gambia"},"gw":{"path":"M408.6,304.53l1.4,2.77l3.93-3.38l0.04-1.04l-4.63-0.67L408.6,304.53L408.6,304.53z","name":"Guinea-Bissau"},"gn":{"path":"M410.42,307.94l3.04,4.68l3.96-3.44l4.06-0.18l3.38,4.49l2.87,1.89l1.08-2.1l0.96-0.54l-0.07-4.62l-1.91-5.48l-5.86,0.65l-7.25-0.58l-0.04,1.86L410.42,307.94L410.42,307.94z","name":"Guinea"},"sl":{"path":"M413.93,313.13l5.65,5.46l4.03-4.89l-2.52-3.95l-3.47,0.35L413.93,313.13L413.93,313.13z","name":"Sierra Leone"},"lr":{"path":"M420.17,319.19l10.98,7.34l-0.26-5.56l-3.32-3.91l-3.24-2.87L420.17,319.19L420.17,319.19z","name":"Liberia"},"ci":{"path":"M432.07,326.75l4.28-3.03l5.32-0.93l5.43,1.17l-2.77-4.19l-0.81-2.56l0.81-7.57l-4.85,0.23l-2.2-2.1l-4.62,0.12l-2.2,0.35l0.23,5.12l-1.16,0.47l-1.39,2.56l3.58,4.19L432.07,326.75L432.07,326.75z","name":"Cote d'Ivoire"},"ml":{"path":"M419.46,295.84l3.08-2.11l17.12-0.1l-3.96-27.54l4.52-0.13l21.87,16.69l2.94,0.42l-1.11,9.28l-13.75,1.25l-10.61,7.92l-1.93,5.42l-7.37,0.31l-1.88-5.41l-5.65,0.4l0.22-1.77L419.46,295.84L419.46,295.84z","name":"Mali"},"bf":{"path":"M450.59,294.28l3.64-0.29l5.97,8.44l-5.54,4.18l-4.01-1.03l-5.39,0.07l-0.87,3.16l-4.52,0.22l-1.24-1.69l1.6-5.14L450.59,294.28L450.59,294.28z","name":"Burkina Faso"},"ne":{"path":"M460.89,302l2.55-0.06l2.3-3.45l3.86-0.69l4.11,2.51l8.77,0.25l6.78-2.76l2.55-2.19l0.19-2.88l4.73-4.77l1.25-10.53l-3.11-6.52l-7.96-1.94l-18.42,14.36l-2.61-0.25l-1.12,9.97l-9.4,0.94L460.89,302L460.89,302z","name":"Niger"},"gh":{"path":"M444.34,317.05l1.12,2.63l2.92,4.58l1.62-0.06l4.42-2.51l-0.31-14.29l-3.42-1l-4.79,0.13L444.34,317.05L444.34,317.05z","name":"Ghana"},"tg":{"path":"M455.22,321.25l2.68-1.57l-0.06-10.35l-1.74-2.82l-1.12,0.94L455.22,321.25L455.22,321.25z","name":"Togo"},"bj":{"path":"M458.71,319.49h2.12l0.12-6.02l2.68-3.89l-0.12-6.77l-2.43-0.06l-4.17,3.26l1.74,3.32L458.71,319.49L458.71,319.49z","name":"Benin"},"ng":{"path":"M461.57,319.37l3.92,0.19l4.73,5.27l2.3,0.63l1.8-0.88l2.74-0.38l0.93-3.82l3.73-2.45l4.04-0.19l7.4-13.61l-0.12-3.07l-3.42-2.63l-6.84,3.01l-9.15-0.13l-4.36-2.76l-3.11,0.69l-1.62,2.82l-0.12,7.96l-2.61,3.7L461.57,319.37L461.57,319.37z","name":"Nigeria"},"tn":{"path":"M474.91,227.33l5.53-2.23l1.82,1.18l0.07,1.44l-0.85,1.11l0.13,1.97l0.85,0.46v3.54l-0.98,1.64l0.13,1.05l3.71,1.31l-2.99,4.65l-1.17-0.07l-0.2,3.74l-1.3,0.2l-1.11-0.98l0.26-3.8l-3.64-3.54l-0.46-3.08l1.76-1.38L474.91,227.33L474.91,227.33z","name":"Tunisia"},"ly":{"path":"M480.05,248.03l1.56-0.26l0.46-3.6h0.78l3.19-5.24l7.87,2.29l2.15,3.34l7.74,3.54l4.03-1.7l-0.39-1.7l-1.76-1.7l0.2-1.18l2.86-2.42h5.66l2.15,2.88l4.55,0.66l0.59,36.89l-3.38-0.13l-20.42-10.62l-2.21,1.25l-8.39-2.1l-2.28-3.01l-3.32-0.46l-1.69-3.01L480.05,248.03L480.05,248.03z","name":"Libya"},"eg":{"path":"M521.93,243.06l2.67,0.07l5.2,1.44l2.47,0.07l3.06-2.56h1.43l2.6,1.44h3.29l0.59-0.04l2.08,5.98l0.59,1.93l0.55,2.89l-0.98,0.72l-1.69-0.85l-1.95-6.36l-1.76-0.13l-0.13,2.16l1.17,3.74l9.37,11.6l0.2,4.98l-2.73,3.15L522.32,273L521.93,243.06L521.93,243.06z","name":"Egypt"},"td":{"path":"M492.79,296l0.13-2.95l4.74-4.61l1.27-11.32l-3.16-6.04l2.21-1.13l21.4,11.15l-0.13,10.94l-3.77,3.21v5.64l2.47,4.78h-4.36l-7.22,7.14l-0.19,2.16l-5.33-0.07l-0.07,0.98l-3.04-0.4l-2.08-3.93l-1.56-0.77l0.2-1.2l1.96-1.5v-7.02l-2.71-0.42l-3.27-2.43L492.79,296L492.79,296L492.79,296z","name":"Chad"},"sd":{"path":"M520.15,292.43l0.18-11.83l2.46,0.07l-0.28-6.57l25.8,0.23l3.69-3.72l7.96,12.73l-4.36,5.14v7.85l-6.86,14.75l-2.36,1.04l0.75,4.11h2.94l3.99,5.79l-3.2,0.41l-0.82,1.49l-0.08,2.15l-9.6-0.17l-0.98-1.49l-6.71-0.38l-12.32-12.68l1.23-0.74l0.33-2.98l-2.95-1.74l-2.69-5.31l0.15-4.94L520.15,292.43L520.15,292.43z","name":"Sudan"},"cm":{"path":"M477.82,324.28l3.22,2.96l-0.23,4.58l17.66-0.41l1.44-1.62l-5.06-5.45l-0.75-1.97l3.22-6.03l-2.19-4l-1.84-0.99v-2.03l2.13-1.39l0.12-6.32l-1.69-0.19l-0.03,3.32l-7.42,13.85l-4.54,0.23l-3.11,2.14L477.82,324.28L477.82,324.28z","name":"Cameroon"},"er":{"path":"M556.71,294.7l-0.25-5.89l3.96-4.62l1.07,0.82l1.95,6.52l9.36,6.97l-1.7,2.09l-6.85-5.89H556.71L556.71,294.7z","name":"Eritrea"},"dj":{"path":"M571.48,301.54l-0.57,3.36l3.96-0.06l0.06-4.94l-1.45-0.89L571.48,301.54L571.48,301.54z","name":"Djibouti"},"et":{"path":"M549.49,311.76l7.28-16.2l7.23,0.04l6.41,5.57l-0.45,4.59h4.97l0.51,2.76l8.04,4.81l4.96,0.25l-9.43,10.13l-12.95,3.99h-3.21l-5.72-4.88l-2.26-0.95l-4.38-6.45l-2.89,0.04l-0.34-2.96L549.49,311.76L549.49,311.76z","name":"Ethiopia"},"so":{"path":"M575.74,305.04l4.08,2.78l1.21-0.06l10.13-3.48l1.15,3.71l-0.81,3.13l-2.19,1.74l-5.47-0.35l-7.83-4.81L575.74,305.04L575.74,305.04M591.97,304.05l4.37-1.68l1.55,0.93l-0.17,3.88l-4.03,11.48l-21.81,23.36l-2.53-1.74l-0.17-9.86l3.28-3.77l6.96-2.15l10.21-10.78l2.67-2.38l0.75-3.48L591.97,304.05L591.97,304.05z","name":"Somalia"},"ye":{"path":"M599.62,299.65l2.13,2.38l2.88-1.74l1.04-0.35l-1.32-1.28l-2.53,0.75L599.62,299.65L599.62,299.65M571.99,289.23l1.44,4.28v4.18l3.46,3.14l24.38-9.93l0.23-2.73l-3.91-7.02l-9.81,3.13l-5.63,5.54l-6.53-3.86L571.99,289.23L571.99,289.23z","name":"Yemen"},"cf":{"path":"M495.66,324.05l4.66,5.04l1.84-2.38l2.93,0.12l0.63-2.32l2.88-1.8l5.98,4.12l3.45-3.42l13.39,0.59L519,311.18l1.67-1.04l0.23-2.26l-2.82-1.33h-4.14l-6.67,6.61l-0.23,2.72l-5.29-0.17l-0.17,1.16l-3.45-0.35l-3.11,5.91L495.66,324.05L495.66,324.05z","name":"Central African Republic"},"st":{"path":"M470.74,337.15l1.15-0.58l0.86,0.7l-0.86,1.33l-1.04-0.41L470.74,337.15L470.74,337.15M473.05,333.5l1.73-0.29l0.58,1.1l-0.86,0.93l-0.86-0.12L473.05,333.5L473.05,333.5z","name":"Sao Tome and Principe"},"gq":{"path":"M476.84,327.41l-0.46,1.97l1.38,0.75l1.32-0.99l-0.46-2.03L476.84,327.41L476.84,327.41M480.99,332.69l-0.06,1.39l4.54,0.23l-0.06-1.57L480.99,332.69L480.99,332.69z","name":"Equatorial Guinea"},"ga":{"path":"M486.39,332.63l-0.12,2.49l-5.64-0.12l-3.45,6.67l8.11,8.87l2.01-1.68l-0.06-1.74l-1.38-0.64v-1.22l3.11-1.97l2.76,2.09l3.05,0.06l-0.06-10.49l-4.83-0.23l-0.06-2.2L486.39,332.63L486.39,332.63z","name":"Gabon"},"cg":{"path":"M491,332.52l-0.06,1.45l4.78,0.12l0.17,12.41l-4.37-0.12l-2.53-1.97l-1.96,1.1l-0.09,0.55l1.01,0.49l0.29,2.55l-2.7,2.32l0.58,1.22l2.99-2.32h1.44l0.46,1.39l1.9,0.81l6.1-5.16l-0.12-3.77l1.27-3.07l3.91-2.9l1.05-9.81l-2.78,0.01l-3.22,4.41L491,332.52L491,332.52z","name":"Congo"},"ao":{"path":"M486.55,353.23l1.74,2.26l2.25-2.13l-0.66-2.21l-0.56-0.04L486.55,353.23L486.55,353.23M488.62,356.71l3.41,12.73l-0.08,4.02l-4.99,5.36l-0.75,8.71l19.2,0.17l6.24,2.26l5.15-0.67l-3-3.76l0.01-10.74l5.9-0.25v-4.19l-4.79-0.2l-0.96-9.92l-2.02,0.03l-1.09-0.98l-1.19,0.06l-1.58,3.06H502l-1.41-1.42l0.42-2.01l-1.66-2.43L488.62,356.71L488.62,356.71z","name":"Angola"},"cd":{"path":"M489.38,355.71l10.31-0.18l2.09,2.97l-0.08,2.19l0.77,0.7h5.12l1.47-2.89h2.09l0.85,0.86l2.87-0.08l0.85,10.08l4.96,0.16v0.78l13.33,6.01l0.62,1.17h2.79l-0.31-4.22l-5.04-2.42l0.31-3.2l2.17-5.08l4.96-0.16l-4.26-14.14l0.08-6.01l6.74-10.54l0.08-1.48l-1.01-0.55l0.04-2.86l-1.23-0.11l-1.24-1.58l-20.35-0.92l-3.73,3.63l-6.11-4.02l-2.15,1.32l-1.56,13.13l-3.86,2.98l-1.16,2.64l0.21,3.91l-6.96,5.69l-1.85-0.84l0.25,1.09L489.38,355.71L489.38,355.71z","name":"Congo"},"rw":{"path":"M537.82,339.9l2.81,2.59l-0.12,2.77l-4.36,0.09v-3.06L537.82,339.9L537.82,339.9z","name":"Rwanda"},"bi":{"path":"M536.21,346.21l4.27-0.09l-1.11,3.74l-1.08,0.94h-1.32l-0.94-2.53L536.21,346.21L536.21,346.21z","name":"Burundi"},"ug":{"path":"M538.3,339.09l3.03,2.84l1.9-1.21l5.14-0.84l0.88,0.09l0.33-1.95l2.9-6.1l-2.44-5.08l-7.91,0.05l-0.05,2.09l1.06,1.02l-0.16,2.09L538.3,339.09L538.3,339.09z","name":"Uganda"},"ke":{"path":"M550.83,326.52l2.66,5.19l-3.19,6.69l-0.42,2.03l15.93,9.85l4.94-7.76l-2.5-2.03l-0.05-10.22l3.13-3.42l-4.99,1.66l-3.77,0.05l-5.9-4.98l-1.86-0.8l-3.45,0.32l-0.61,1.02L550.83,326.52L550.83,326.52z","name":"Kenya"},"tz":{"path":"M550.57,371.42l17.47-2.14l-3.93-7.6l-0.21-7.28l1.27-3.48l-16.62-10.44l-5.21,0.86l-1.81,1.34l-0.16,3.05l-1.17,4.23l-1.22,1.45l-1.75,0.16l3.35,11.61l5.47,2.57l3.77,0.11L550.57,371.42L550.57,371.42z","name":"Tanzania"},"zm":{"path":"M514.55,384.7l3.17,4.4l4.91,0.3l1.74,0.96l5.14,0.06l4.43-6.21l12.38-5.54l1.08-4.88l-1.44-6.99l-6.46-3.68l-4.31,0.3l-2.15,4.76l0.06,2.17l5.08,2.47l0.3,5.37l-4.37,0.24l-1.08-1.81l-12.14-5.18l-0.36,3.98l-5.74,0.18L514.55,384.7L514.55,384.7z","name":"Zambia"},"mw":{"path":"M547.16,379.4l3.11,3.25l-0.06,4.16l0.6,1.75l4.13-4.46l-0.48-5.67l-2.21-1.69l-1.97-9.95l-3.41-0.12l1.55,7.17L547.16,379.4L547.16,379.4z","name":"Malawi"},"mz":{"path":"M541.17,413.28l2.69,2.23l6.34-3.86l1.02-5.73v-9.46l10.17-8.32l1.74,0.06l6.16-5.91l-0.96-12.18L552,372.17l0.48,3.68l2.81,2.17l0.66,6.63l-5.5,5.37l-1.32-3.01l0.24-3.98l-3.17-3.44l-7.78,3.62l7.24,3.68l0.24,10.73l-4.79,7.11L541.17,413.28L541.17,413.28z","name":"Mozambique"},"zw":{"path":"M524.66,392.3l8.97,10.13l6.88,1.75l4.61-7.23l-0.36-9.58l-7.48-3.86l-2.81,1.27l-4.19,6.39l-5.8-0.06L524.66,392.3L524.66,392.3z","name":"Zimbabwe"},"na":{"path":"M496.55,421.96l3.35,0.24l1.97,1.99l4.67,0.06l1.14-13.26v-8.68l2.99-0.6l1.14-9.1l7.6-0.24l2.69-2.23l-4.55-0.18l-6.16,0.84l-6.64-2.41h-18.66l0.48,5.3l6.22,9.16l-1.08,4.7l0.06,2.47L496.55,421.96L496.55,421.96z","name":"Namibia"},"bw":{"path":"M508.51,411.23l2.15,0.66l-0.3,6.15l2.21,0.3l5.08-4.58l6.1,0.66l1.62-4.1l7.72-7.05l-9.27-10.67l-0.12-1.75l-1.02-0.3l-2.81,2.59l-7.3,0.18l-1.02,9.1l-2.87,0.66L508.51,411.23L508.51,411.23z","name":"Botswana"},"sz":{"path":"M540.87,414l-2.51,0.42l-1.08,2.95l1.92,1.75h2.33l1.97-2.83L540.87,414L540.87,414z","name":"Swaziland"},"ls":{"path":"M527.41,425.39l3.05-2.35l1.44,0.06l1.74,2.17l-0.18,2.17l-2.93,1.08v0.84l-3.23-0.18l-0.78-2.35L527.41,425.39L527.41,425.39z","name":"Lesotho"},"za":{"path":"M534.16,403.63l-7.9,7.3l-1.88,4.51l-6.26-0.78l-5.21,4.63l-3.46-0.34l0.28-6.4l-1.23-0.43l-0.86,13.09l-6.14-0.06l-1.85-2.18l-2.71-0.03l2.47,7.09l4.41,4.17l-3.15,3.67l2.04,4.6l4.72,1.8l3.76-3.2l10.77,0.06l0.77-0.96l4.78-0.84l16.17-16.1l-0.06-5.07l-1.73,2.24h-2.59l-3.15-2.64l1.6-3.98l2.75-0.56l-0.25-8.18L534.16,403.63L534.16,403.63z M530.37,422.13l1.51-0.06l2.45,2.66l-0.07,3.08l-2.87,1.45l-0.18,1.02l-4.38,0.05l-1.37-3.3l1.25-2.42L530.37,422.13L530.37,422.13z","name":"South Africa"},"gl":{"path":"M321.13,50.07l-1.36,2.17l2.45,2.45l-1.09,2.45l3.54,4.62l4.35-1.36l5.71-0.54l6.53,7.07l4.35,11.69l-3.53,7.34l4.89-0.82l2.72,1.63l0.27,3.54l-5.98,0.27l3.26,3.26l4.08,0.82l-8.97,11.96l-1.09,7.34l1.9,5.98l-1.36,3.54l2.45,7.61l4.62,5.17l1.36-0.27l2.99-0.82l0.27,4.35l1.9,2.72l3.53-0.27l2.72-10.06l8.16-10.06l12.24-4.89l7.61-9.52l3.53,1.63h7.34l5.98-5.98l7.34-2.99l0.82-4.62l-4.62-4.08l-4.08-1.36l-2.18-5.71l5.17-2.99l8.16,4.35l2.72-2.99l-4.35-2.45l9.25-12.51l-1.63-5.44l-4.35-0.27l1.63-4.89l5.44-2.45l11.15-9.79l-3.26-3.53l-12.51,1.09l-6.53,6.53l3.81-8.43l-4.35-1.09l-2.45,4.35l-3.53-2.99l-9.79,1.09l2.72-4.35l16.04-0.54l-4.08-5.44l-17.4-3.26l-7.07,1.09l0.27,3.54l-7.34-2.45l0.27-2.45l-5.17,1.09l-1.09,2.72l5.44,1.9l-5.71,4.08l-4.08-4.62l-5.71-1.63l-0.82,4.35h-5.71l-2.18-4.62l-8.97-1.36l-4.89,2.45l-0.27,3.26l-6.25-0.82l-3.81,1.63l0.27,3.81v1.9l-7.07,1.36l-3.26-2.17l-2.18,3.53l3.26,3.54l6.8-0.82l0.54,2.18l-5.17,2.45L321.13,50.07L321.13,50.07M342.89,92.49l1.63,2.45l-0.82,2.99h-1.63l-2.18-2.45l0.54-1.9L342.89,92.49L342.89,92.49M410.87,85.69l4.62,1.36l-0.27,3.81l-4.89-2.45l-1.09-1.36L410.87,85.69L410.87,85.69z","name":"Greenland"},"au":{"path":"M761.17,427.98l-0.35,25.38l-3.9,2.86l-0.35,2.5l5.32,3.57l13.13-2.5h6.74l2.48-3.58l14.9-2.86l10.64,3.22l-0.71,4.29l1.42,4.29l8.16-1.43l0.35,2.14l-5.32,3.93l1.77,1.43l3.9-1.43l-1.06,11.8l7.45,5.72l4.26-1.43l2.13,2.14l12.42-1.79l11.71-18.95l4.26-1.07l8.51-15.73l2.13-13.58l-5.32-6.79l2.13-1.43l-4.26-13.23l-4.61-3.22l0.71-17.87l-4.26-3.22l-1.06-10.01h-2.13l-7.1,23.59l-3.9,0.36l-8.87-8.94l4.97-13.23l-9.22-1.79l-10.29,2.86l-2.84,8.22l-4.61,1.07l-0.35-5.72l-18.8,11.44l0.35,4.29l-2.84,3.93h-7.1l-15.26,6.43L761.17,427.98L761.17,427.98M825.74,496.26l-1.77,7.15l0.35,5l5.32-0.36l6.03-9.29L825.74,496.26L825.74,496.26z","name":"Australia"},"nz":{"path":"M913.02,481.96l1.06,11.8l-1.42,5.36l-5.32,3.93l0.35,4.65v5l1.42,1.79l14.55-12.51v-2.86h-3.55l-4.97-16.8L913.02,481.96L913.02,481.96M902.38,507.7l2.84,5.36l-7.81,7.51l-0.71,3.93l-5.32,0.71l-8.87,8.22l-8.16-3.93l-0.71-2.86l14.9-6.43L902.38,507.7L902.38,507.7z","name":"New Zealand"},"nc":{"path":"M906.64,420.47l-0.35,1.79l4.61,6.43l2.48,1.07l0.35-2.5L906.64,420.47L906.64,420.47z","name":"New Caledonia"},"my":{"path":"M764.14,332.92l3.02,3.49l11.58-4.01l2.29-8.84l5.16-0.37l4.72-3.42l-6.12-4.46l-1.4-2.45l-3.02,5.57l1.11,3.2l-1.84,2.67l-3.47-0.89l-8.41,6.17l0.22,3.57L764.14,332.92L764.14,332.92M732.71,315.45l2.01,4.51l0.45,5.86l2.69,4.17l6.49,3.94l2.46,0.23l-0.45-4.06l-2.13-5.18l-3.12-6.63l-0.26,1.16l-3.76-0.17l-2.7-3.88L732.71,315.45L732.71,315.45z","name":"Malaysia"},"bn":{"path":"M779.77,319.25l-2.88,3.49l2.36,0.74l1.33-1.86L779.77,319.25L779.77,319.25z","name":"Brunei Darussalam"},"tl":{"path":"M806.14,368.42l-5.11,4.26l0.49,1.09l2.16-0.4l2.55-2.38l5.01-0.69l-0.98-1.68L806.14,368.42L806.14,368.42z","name":"Timor-Leste"},"sb":{"path":"M895.43,364.65l0.15,2.28l1.39,1.32l1.31-0.81l-1.17-2.43L895.43,364.65L895.43,364.65M897.18,370.31l-1.17,1.25l1.24,2.28l1.46,0.44l-0.07-1.54L897.18,370.31L897.18,370.31M900.03,368.99l1.02,2.5l1.97,2.35l1.09-1.76l-1.46-2.5L900.03,368.99L900.03,368.99M905.14,372.74l0.58,3.09l1.39,1.91l1.17-2.42L905.14,372.74L905.14,372.74M906.74,379.65l-0.51,0.88l1.68,2.21l1.17,0.07l-0.73-2.87L906.74,379.65L906.74,379.65M903.02,384.05l-1.75,0.81l1.53,2.13l1.31-0.74L903.02,384.05L903.02,384.05z","name":"Solomon Islands"},"vu":{"path":"M920.87,397.22l-1.24,1.66l0.52,1.87l0.62,0.42l1.13-1.46L920.87,397.22L920.87,397.22M921.49,402.31l0.1,1.35l1.34,0.42l0.93-0.52l-0.93-1.46L921.49,402.31L921.49,402.31M923.45,414.37l-0.62,0.94l0.93,1.04l1.55-0.52L923.45,414.37L923.45,414.37z","name":"Vanuatu"},"fj":{"path":"M948.62,412.29l-1.24,1.66l-0.1,1.87l1.44,1.46L948.62,412.29L948.62,412.29z","name":"Fiji"},"ph":{"path":"M789.37,297.53l-0.86,1.64l-0.48,2.02l-4.78,6.07l0.29,1.25l2.01-0.29l6.21-6.94L789.37,297.53L789.37,297.53M797.11,295.22l-0.1,5.01l1.82,1.83l0.67,3.56l1.82,0.39l0.86-2.22l-1.43-1.06l-0.38-6.26L797.11,295.22L797.11,295.22M802.28,297.15l-0.1,4.43l1.05,1.73l1.82-2.12l-0.48-3.85L802.28,297.15L802.28,297.15M803.42,293.29l1.82,2.41l0.86,2.31h1.63l-0.29-3.95l-1.82-1.25L803.42,293.29L803.42,293.29M806.96,302.35l0.38,2.89l-3.35,2.7l-2.77,0.29l-2.96,3.18l0.1,1.45l2.77-0.87l1.91-1.25l1.63,4.14l2.87,2.02l1.15-0.39l1.05-1.25l-2.29-2.31l1.34-1.06l1.53,1.25l1.05-1.73l-1.05-2.12l-0.19-4.72L806.96,302.35L806.96,302.35M791.38,272.97l-2.58,1.83l-0.29,5.78l4.02,7.8l1.34,1.06l1.72-1.16l2.96,0.48l0.57,2.6l2.2,0.19l1.05-1.44l-1.34-1.83l-1.63-1.54l-3.44-0.38l-1.82-2.99l2.1-3.18l0.19-2.79l-1.43-3.56L791.38,272.97L791.38,272.97M792.72,290.21l0.76,2.7l1.34,0.87l0.96-1.25l-1.53-2.12L792.72,290.21L792.72,290.21z","name":"Philippines"},"cn":{"path":"M759.83,270.17l-2.39,0.67l-1.72,2.12l1.43,2.79l2.1,0.19l2.39-2.12l0.57-2.79L759.83,270.17L759.83,270.17M670.4,170.07l-3.46,8.7l-4.77-0.25l-5.03,11.01l4.27,5.44l-8.8,12.15l-4.52-0.76l-3.02,3.8l0.75,2.28l3.52,0.25l1.76,4.05l3.52,0.76l10.81,13.93v7.09l5.28,3.29l5.78-1.01l7.29,4.3l8.8,2.53l4.27-0.51l4.78-0.51l10.05-6.58l3.27,0.51l1.25,2.97l2.77,0.83l3.77,5.57l-2.51,5.57l1.51,3.8l4.27,1.52l0.75,4.56l5.03,0.51l0.75-2.28l7.29-3.8l4.52,0.25l5.28,5.82l3.52-1.52l2.26,0.25l1.01,2.79l1.76,0.25l2.51-3.54l10.05-3.8l9.05-10.89l3.02-10.38l-0.25-6.84l-3.77-0.76l2.26-2.53l-0.5-4.05l-9.55-9.62v-4.81l2.76-3.54l2.76-1.27l0.25-2.79h-7.04l-1.26,3.8l-3.27-0.76l-4.02-4.3l2.51-6.58l3.52-3.8l3.27,0.25l-0.5,5.82l1.76,1.52l4.27-4.3l1.51-0.25l-0.5-3.29l4.02-4.81l3.02,0.25l1.76-5.57l2.06-1.09l0.21-3.47l-2-2.1l-0.17-5.48l3.85-0.25l-0.25-14.13l-2.7,1.62l-1.01,3.62l-4.51-0.01l-13.07-7.35l-9.44-11.38l-9.58-0.1l-2.44,2.12l3.1,7.1l-1.08,6.66l-3.86,1.6l-2.17-0.17l-0.16,6.59l2.26,0.51l4.02-1.77l5.28,2.53v2.53l-3.77,0.25l-3.02,6.58l-2.76,0.25l-9.8,12.91l-10.3,4.56l-7.04,0.51l-4.77-3.29l-6.79,3.55l-7.29-2.28l-1.76-4.81l-12.31-0.76l-6.53-10.63h-2.76l-2.22-4.93L670.4,170.07z","name":"China"},"tw":{"path":"M787.46,248.31l-3.54,2.7l-0.19,5.2l3.06,3.56l0.76-0.67L787.46,248.31L787.46,248.31z","name":"Taiwan"},"jp":{"path":"M803.23,216.42l-1.63,1.64l0.67,2.31l1.43,0.1l0.96,5.01l1.15,1.25l2.01-1.83l0.86-3.28l-2.49-3.56L803.23,216.42L803.23,216.42M812.03,213.15l-2.77,2.6l-0.1,2.99l0.67,0.87l3.73-3.18l-0.29-3.18L812.03,213.15L812.03,213.15M808.2,206.98l-4.88,5.59l0.86,1.35l2.39,0.29l4.49-3.47l3.16-0.58l2.87,3.37l2.2-0.77l0.86-3.28l4.11-0.1l4.02-4.82l-2.1-8l-0.96-4.24l2.1-1.73l-4.78-7.22l-1.24,0.1l-2.58,2.89v2.41l1.15,1.35l0.38,6.36l-2.96,3.66l-1.72-1.06l-1.34,2.99l-0.29,2.79l1.05,1.64l-0.67,1.25l-2.2-1.83h-1.53l-1.34,0.77L808.2,206.98L808.2,206.98M816.43,163.44l-1.53,1.35l0.77,2.89l1.34,1.35l-0.1,4.43l-1.72,0.67l-1.34,2.99l3.92,5.39l2.58-0.87l0.48-1.35l-2.77-2.5l1.72-2.22l1.82,0.29l1.43,1.54l0.1-3.18l3.92-3.18l2.2-0.58l-1.82-3.08l-0.86-1.35l-1.43,0.96l-1.24,1.54l-2.68-0.58l-2.77-1.83L816.43,163.44L816.43,163.44z","name":"Japan"},"ru":{"path":"M506.61,151.72l-1.5-0.15l-2.7,3.23v1.51l0.9,0.35l1.75,0.05l2.9-2.37l0.4-0.81L506.61,151.72L506.61,151.72M830.86,160.45l-2.68,3.76l0.19,1.83l1.34-0.58l3.15-3.95L830.86,160.45L830.86,160.45M834.4,154.96l-0.96,2.6l0.1,1.73l1.63-1.06l1.53-3.08V154L834.4,154.96L834.4,154.96M840.04,132.03l-1.24,1.54l0.1,2.41l1.15-0.1l1.91-3.37L840.04,132.03L840.04,132.03M837.75,137.91v4.24l1.34,0.48l0.96-1.54v-3.27L837.75,137.91L837.75,137.91M798.64,122.59l-0.09,6.17l7.74,11.95l2.77,10.4l4.88,9.25l1.91,0.67l1.63-1.35l0.76-2.22l-6.98-7.61l0.19-3.95l1.53-0.67l0.38-2.31l-13.67-19.36L798.64,122.59L798.64,122.59M852.57,103.42l-1.91,0.19l1.15,1.64l2.39,1.64l0.67-0.77L852.57,103.42L852.57,103.42M856.29,104.58l0.29,1.64l2.96,0.87l0.29-1.16L856.29,104.58L856.29,104.58M547.82,38.79l1.72,0.69l-1.21,2.08v2.95l-2.58,1.56H543l-1.55-1.91l0.17-2.08l1.21-1.56h2.41L547.82,38.79L547.82,38.79M554.36,36.88v2.08l1.72,1.39l2.41-0.17l2.07-1.91v-1.39h-1.89l-1.55,0.52l-1.21-1.39L554.36,36.88L554.36,36.88M564.18,37.06l1.21,2.6l2.41,0.17l1.72-0.69l-0.86-2.43l-2.24-0.52L564.18,37.06L564.18,37.06M573.99,33.59l-1.89-0.35l-1.72,1.74l0.86,1.56l0.52,2.43l2.24-1.73l0.52-1.91L573.99,33.59L573.99,33.59M584.49,51.98l-0.52,2.43l-3.96,3.47l-8.44,1.91l-6.89,11.45l-1.21,3.3l6.89,1.74l1.03-4.16l2.07-6.42l5.34-2.78l4.48-3.47l3.27-1.39h1.72v-4.68L584.49,51.98L584.49,51.98M562.28,77.31l4.65,0.52l1.55,5.38l3.96,4.16l-1.38,2.78h-2.41l-2.24-2.6l-4.99-0.17l-2.07-2.78v-1.91l3.1-0.87L562.28,77.31L562.28,77.31M634.95,18.15l-2.24-1.39h-2.58l-0.52,1.56l-2.75,1.56l-2.07,0.69l-0.34,2.08l4.82,0.35L634.95,18.15L634.95,18.15M640.28,18.67l-1.21,2.6l-2.41-0.17l-3.79,2.78l-1.03,3.47h2.41l1.38-2.26l3.27,2.43l3.1-1.39l2.24-1.91l-0.86-2.95l-1.21-2.08L640.28,18.67L640.28,18.67M645.28,20.58l1.21,4.86l1.89,4.51l2.07-3.64l3.96-0.87v-2.6l-2.58-1.91L645.28,20.58L645.28,20.58M739.76,12.8l2.69,2.26l1.91-0.79l0.56-3.17L741,8.39l-2.58,1.7l-6.28,0.57v2.83l-6.62,0.11v4.63l7.74,5.76l2.02-1.47l-0.45-4.07l4.94-1.24l-1.01-1.92l-1.79-1.81L739.76,12.8L739.76,12.8M746.94,10.09l1.79,3.39l6.96-0.79l1.91-2.49l-0.45-2.15l-1.91-0.79l-1.79,1.36l-5.16,1.13L746.94,10.09L746.94,10.09M746.49,23.31l-3.48-0.9L741,24.56l-0.9,2.94l4.71-0.45l3.59-1.81L746.49,23.31L746.49,23.31M836.68,3.76l-2.92-0.9L830.4,4.1l-1.68,2.49l2.13,2.83l5.61-2.49l1.12-1.24L836.68,3.76L836.68,3.76M817.97,72.93l1.76,6.08l3.52,1.01l3.52-5.57l-2.01-3.8l0.75-3.29h5.28l-1.26,2.53l0.5,9.12l-7.54,18.74l0.75,4.05l-0.25,6.84l14.07,20.51l2.76,0.76l0.25-16.71l2.76-2.53l-3.02-6.58l2.51-2.79l-5.53-7.34l-3.02,0.25l-1-12.15l7.79-2.03l0.5-3.55l4.02-1.01l2.26,2.03l2.76-11.14l4.77-8.1l3.77-2.03l3.27,0.25v-3.8l-5.28-1.01l-7.29-6.08l3.52-4.05l-3.02-6.84l2.51-2.53l3.02,4.05l7.54,2.79l8.29,0.76l1.01-3.54l-4.27-4.3l4.77-6.58l-10.81-3.8l-2.76,5.57l-3.52-4.56l-19.85-6.84l-18.85,3.29l-2.76,1.52v1.52l4.02,2.03l-0.5,4.81l-7.29-3.04l-16.08,6.33l-2.76-5.82h-11.06l-5.03,5.32l-17.84-4.05l-16.33,3.29l-2.01,5.06l2.51,0.76l-0.25,3.8l-15.83,1.77l1.01,5.06l-14.58-2.53l3.52-6.58l-14.83-0.76l1.26,6.84l-4.77,2.28l-4.02-3.8l-16.33,2.79l-6.28,5.82l-0.25,3.54l-4.02,0.25l-0.5-4.05l12.82-11.14v-7.6l-8.29-2.28l-10.81,3.54l-4.52-4.56h-2.01l-2.51,5.06l2.01,2.28l-14.33,7.85l-12.31,9.37l-7.54,10.38v4.3l8.04,3.29l-4.02,3.04l-8.54-3.04l-3.52,3.04l-5.28-6.08l-1.01,2.28l5.78,18.23l1.51,0.51l4.02-2.03l2.01,1.52v3.29l-3.77-1.52l-2.26,1.77l1.51,3.29l-1.26,8.61l-7.79,0.76l-0.5-2.79l4.52-2.79l1.01-7.6l-5.03-6.58l-1.76-11.39l-8.04-1.27l-0.75,4.05l1.51,2.03l-3.27,2.79l1.26,7.6l4.77,2.03l1.01,5.57l-4.78-3.04l-12.31-2.28l-1.51,4.05l-9.8,3.54l-1.51-2.53l-12.82,7.09l-0.25,4.81l-5.03,0.76l1.51-3.54v-3.54l-5.03-1.77l-3.27,1.27l2.76,5.32l2.01,3.54v2.79l-3.77-0.76l-0.75-0.76l-3.77,4.05l2.01,3.54l-8.54-0.25l2.76,3.55l-0.75,1.52h-4.52l-3.27-2.28l-0.75-6.33l-5.28-2.03v-2.53l11.06,2.28l6.03,0.51l2.51-3.8l-2.26-4.05l-16.08-6.33l-5.55,1.38l-1.9,1.63l0.59,3.75l2.36,0.41l-0.55,5.9l7.28,17.1l-5.26,8.34l-0.36,1.88l2.67,1.88l-2.41,1.59l-1.6,0.03l0.3,7.35l2.21,3.13l0.03,3.04l2.83,0.26l4.33,1.65l4.58,6.3l0.05,1.66l-1.49,2.55l3.42-0.19l3.33,0.96l4.5,6.37l11.08,1.01l-0.48,7.58l-3.82,3.27l0.79,1.28l-3.77,4.05l-1,3.8l2.26,3.29l7.29,2.53l3.02-1.77l19.35,7.34l0.75-2.03l-4.02-3.8v-4.81l-2.51-0.76l0.5-4.05l4.02-4.81l-7.21-5.4l0.5-7.51l7.71-5.07l9.05,0.51l1.51,2.79l9.3,0.51l6.79-3.8l-3.52-3.8l0.75-7.09l17.59-8.61l13.53,6.1l4.52-4.05l13.32,12.66l10.05-1.01l3.52,3.54l9.55,1.01l6.28-8.61l8.04,3.55l4.27,0.76l4.27-3.8l-3.77-2.53l3.27-5.06l9.3,3.04l2.01,4.05l4.02,0.25l2.51-1.77l6.79-0.25l0.75,1.77l7.79,0.51l5.28-5.57l10.81,1.27l3.27-1.27l1-6.08l-3.27-7.34l3.27-2.79h10.3l9.8,11.65l12.56,7.09h3.77l0.5-3.04l4.52-2.79l0.5,16.46l-4.02,0.25v4.05l2.26,2.79l-0.42,3.62l1.67,0.69l1.01-2.53l1.51,0.51l1,1.01l4.52-1.01l4.52-13.17l0.5-16.46l-5.78-13.17l-7.29-8.86l-3.52,0.51v2.79l-8.54-3.29l3.27-7.09l2.76-18.74l11.56-3.54l5.53-3.54h6.03L805.86,96l1.51,2.53l5.28-5.57l3.02,0.25l-0.5-3.29l-4.78-1.01l3.27-11.9L817.97,72.93L817.97,72.93z","name":"Russian Federation"},"us":{"path":"M69.17,53.35l3.46,6.47l2.22-0.5v-2.24L69.17,53.35L69.17,53.35M49.66,110.26l-0.17,3.01l2.16-0.5v-1.34L49.66,110.26L49.66,110.26M46.34,111.6l-4.32,2.18l0.67,2.34l1.66-1.34l3.32-1.51L46.34,111.6L46.34,111.6M28.39,114.44l-2.99-0.67l-0.5,1.34l0.33,2.51L28.39,114.44L28.39,114.44M22.07,114.28l-2.83-1.17l-1,1.84l1.83,1.84L22.07,114.28L22.07,114.28M12.27,111.6l-1.33-1.84l-1.33,0.5v2.51l1.5,1L12.27,111.6L12.27,111.6M1.47,99.71l1.66,1.17l-0.5,1.34H1.47V99.71L1.47,99.71M10,248.7l-0.14,2.33l2.04,1.37l1.22-1.09L10,248.7L10,248.7M15.29,252.13l-1.9,1.37l1.63,2.05l1.9-1.64L15.29,252.13L15.29,252.13M19.1,255.41l-1.63,2.19l0.54,1.37l2.31-1.09L19.1,255.41L19.1,255.41M21.81,259.65l-0.95,5.47l0.95,2.05l3.12-0.96l1.63-2.74l-3.4-3.15L21.81,259.65L21.81,259.65M271.05,281.06l-2.64-0.89l-2.12,1.33l1.06,1.24l3.61,0.53L271.05,281.06L271.05,281.06M93.11,44.89l-8.39,1.99l1.73,9.45l9.13,2.49l0.49,1.99L82.5,65.04l-7.65,12.68l2.71,13.43L82,94.13l3.46-3.23l0.99,1.99l-4.2,4.97l-16.29,7.46l-10.37,2.49l-0.25,3.73l23.94-6.96l9.87-2.74l9.13-11.19l10.12-6.71l-5.18,8.7l5.68,0.75l9.63-4.23l1.73,6.96l6.66,1.49l6.91,6.71l0.49,4.97l-0.99,1.24l1.23,4.72h1.73l0.25-7.96h1.97l0.49,19.64l4.94-4.23l-3.46-20.39h-5.18l-5.68-7.21l27.89-47.25l-27.64-21.63l-30.85,5.97l-1.23,9.45l6.66,3.98l-2.47,6.47L93.11,44.89L93.11,44.89M148.76,158.34l-1,4.02l-3.49-2.26h-1.74l-1,4.27l-12.21,27.36l3.24,23.84l3.99,2.01l0.75,6.53h8.22l7.97,6.02l15.69,1.51l1.74,8.03l2.49,1.76l3.49-3.51l2.74,1.25l2.49,11.54l4.23,2.76l3.49-6.53l10.71-7.78l6.97,3.26l5.98,0.5l0.25-3.76l12.45,0.25l2.49,2.76l0.5,6.27l-1.49,3.51l1.74,6.02h3.74l3.74-5.77l-1.49-2.76l-1.49-6.02l2.24-6.78l10.21-8.78l7.72-2.26l-1-7.28l10.71-11.55l10.71-1.76L272.8,199l10.46-6.02v-8.03l-1-0.5l-3.74,1.25l-0.5,4.92l-12.43,0.15l-9.74,6.47l-15.29,5l-2.44-2.99l6.94-10.5l-3.43-3.27l-2.33-4.44l-4.83-3.88l-5.25-0.44l-9.92-6.77L148.76,158.34L148.76,158.34z","name":"United States of America"},"mu":{"path":"M613.01,398.99l-1.52,1.99l0.3,2.15l3.2-2.61L613.01,398.99L613.01,398.99z","name":"Mauritius"},"re":{"path":"M607.38,402.37l-2.28,0.15l-0.15,1.99l1.52,0.31l2.28-1.07L607.38,402.37L607.38,402.37z","name":"Reunion"},"mg":{"path":"M592.3,372.92l-2.13,5.06l-3.65,6.44l-6.39,0.46l-2.74,3.22l0.46,9.82l-3.96,4.6l0.46,7.82l3.35,3.83l3.96-0.46l3.96-2.92l-0.91-4.6l9.13-15.8l-1.83-1.99l1.83-3.83l1.98,0.61l0.61-1.53l-1.83-7.82l-1.07-3.22L592.3,372.92L592.3,372.92z","name":"Madagascar"},"km":{"path":"M577.69,371.23l0.46,1.53l1.98,0.31l0.76-1.99L577.69,371.23L577.69,371.23M580.58,374.3l0.76,1.69h1.22l0.61-2.15L580.58,374.3L580.58,374.3z","name":"Comoros"},"sc":{"path":"M602.35,358.34l-0.61,1.23l1.67,1.38l1.22-1.38L602.35,358.34L602.35,358.34M610.88,349.14l-1.83,1.23l1.37,2.15h1.83L610.88,349.14L610.88,349.14M611.64,354.51l-1.22,1.38l0.91,1.38l1.67,0.31l0.15-2.92L611.64,354.51L611.64,354.51z","name":"Seychelles"},"mv":{"path":"M656.4,320.76l0.3,2.61l1.67,0.61l0.3-2.3L656.4,320.76L656.4,320.76M658.53,326.28l-0.15,3.22l1.22,0.61l1.07-2.15L658.53,326.28L658.53,326.28M658.84,332.57l-1.07,1.07l1.22,1.07l1.52-1.07L658.84,332.57L658.84,332.57z","name":"Maldives"},"pt":{"path":"M372.64,217.02l-1.36,1.37l2.44,1.37l0.27-1.91L372.64,217.02L372.64,217.02M379.97,216.2l-1.63,1.09l1.36,1.09l2.17-0.55L379.97,216.2L379.97,216.2M381.05,220.03l-0.81,2.19l1.08,1.37l1.36-1.09L381.05,220.03L381.05,220.03M387.56,224.4l-0.54,1.37l0.81,0.82l2.17-1.37L387.56,224.4L387.56,224.4M408.18,236.42l-1.08,1.37l1.08,1.37l1.63-0.82L408.18,236.42L408.18,236.42M430.93,211.24l-0.62,8.65l-1.77,1.6l0.18,0.98l1.24,2.05l-0.8,2.5l1.33,0.45l3.1-0.36l-0.18-2.5l2.03-11.59l-0.44-1.6L430.93,211.24L430.93,211.24z","name":"Portugal"},"es":{"path":"M415.62,253.73l-1.75,1.01l0.81,0.82L415.62,253.73L415.62,253.73M409.54,253.92l-2.17,0.55l1.08,1.64h1.63L409.54,253.92L409.54,253.92M404.38,252.28l-1.36,1.37l1.9,1.64l1.08-2.46L404.38,252.28L404.38,252.28M448.36,205h-12.74l-2.57-1.16l-1.24,0.09l-1.5,3.12l0.53,3.21l4.87,0.45l0.62,2.05l-2.12,11.95l0.09,2.14l3.45,1.87l3.98,0.27l7.96-1.96l3.89-4.9l0.09-4.99l6.9-6.24l0.35-2.76l-6.28-0.09L448.36,205L448.36,205M461.1,217.21l-1.59,0.54l0.35,1.43h2.3l0.97-1.07L461.1,217.21L461.1,217.21z","name":"Spain"},"cv":{"path":"M387.56,290.54l-1.9,1.09l1.36,1.09l1.63-0.82L387.56,290.54L387.56,290.54M392.23,292.74l-1.24,1.1l0.88,1.63l2.12-0.95L392.23,292.74L392.23,292.74M389.52,295.83l-1.59,0.95l1.71,2.29l1.35-0.71L389.52,295.83L389.52,295.83z","name":"Cape Verde"},"pf":{"path":"M27.25,402.68l-1.9-0.14l-0.14,1.78l1.49,0.96l1.77-1.09L27.25,402.68L27.25,402.68M33.77,404.6l-2.72,1.78l2.04,2.46l1.77-0.41l0.95-1.23L33.77,404.6L33.77,404.6z","name":"French Polynesia"},"kn":{"path":"M276.6,283.37l-1.5,0.62l0.53,1.33l1.76-1.15l-0.35-0.36L276.6,283.37L276.6,283.37z","name":"Saint Kitts and Nevis"},"ag":{"path":"M279.07,284.88l-0.88,1.87l1.06,1.42l1.32-1.15L279.07,284.88L279.07,284.88z","name":"Antigua and Barbuda"},"dm":{"path":"M282.07,290.03l-1.06,0.98l0.79,1.6l1.5-0.44L282.07,290.03L282.07,290.03z","name":"Dominica"},"lc":{"path":"M281.98,294.03l-0.71,1.51l1.15,1.24l1.5-0.8L281.98,294.03L281.98,294.03z","name":"Saint Lucia"},"bb":{"path":"M282.07,297.85l-1.23,0.89l0.97,1.78l1.59-0.89L282.07,297.85L282.07,297.85z","name":"Barbados"},"gd":{"path":"M280.57,301.31l-1.15,1.15l0.44,0.71h1.41l0.44-1.16L280.57,301.31L280.57,301.31z","name":"Grenada"},"tt":{"path":"M282.24,304.78l-1.06,0.98l-1.15,0.18v1.42l2.12,1.95l0.88-1.42l0.53-1.6l-0.18-1.33L282.24,304.78L282.24,304.78z","name":"Trinidad and Tobago"},"do":{"path":"M263.11,280.44l-5.29-3.46l-2.5-0.85l-0.84,6l0.88,1.69l1.15-1.33l3.35-0.89l2.91,0.62L263.11,280.44L263.11,280.44z","name":"Dominican Republic"},"ht":{"path":"M250.86,275.38l3.44,0.36l-0.41,4.22l-0.34,2.22l-4.01-0.22l-0.71,1.07l-1.23-0.09l-0.44-2.31l4.23-0.35l-0.26-2.4l-1.94-0.8L250.86,275.38L250.86,275.38z","name":"Haiti"},"fk":{"path":"M307.95,508.18l-2.63-0.29l-2.62,1.76l1.9,2.06L307.95,508.18L307.95,508.18M310.57,506.86l-0.87,2.79l-2.48,2.2l0.15,0.73l4.23-1.62l1.75-2.2L310.57,506.86L310.57,506.86z","name":"Falkland Islands"},"is":{"path":"M406.36,117.31l-1.96-1.11l-2.64,1.67l-2.27,2.1l0.06,1.17l2.94,0.37l-0.18,2.1l-1.04,1.05l0.25,0.68l2.94,0.19v3.4l4.23,0.74l2.51,1.42l2.82,0.12l4.84-2.41l3.74-4.94l0.06-3.34l-2.27-1.92l-1.9-1.61l-0.86,0.62l-1.29,1.67l-1.47-0.19l-1.47-1.61l-1.9,0.18l-2.76,2.29l-1.66,1.79l-0.92-0.8l-0.06-1.98l0.92-0.62L406.36,117.31L406.36,117.31z","name":"Iceland"},"no":{"path":"M488.26,53.96l-1.65-1.66l-3.66,1.78h-6.72L475.17,58l3.77,3.33l1.65-0.24l2.36-4.04l2,1.43l-1.42,2.85l-0.71,4.16l1.65,2.61l3.54-5.94l4.6-5.59l-1.77-1.54L488.26,53.96L488.26,53.96M490.26,46.83l-2.95,2.73l1.77,2.73h3.18l1.3,1.78l3.89,2.02l4.48-2.61l3.07-2.61l-1.06-2.14l-3.07-1.78l-2.24,2.02l-1.53-1.9l-1.18,0.12l-1.53,3.33l-2.24-2.26l-0.24-1.54L490.26,46.83L490.26,46.83M496.98,59.07l-2.36,2.14l-2,1.54l0.94,1.66l1.89,0.59l3.07-1.43l1.42-1.78l-1.3-2.14L496.98,59.07L496.98,59.07M515.46,102.14l2.02-1.48L517.3,99l-1.28-0.74l0.18-2.03h1.1v-1.11l-4.77-1.29l-7.15,0.74l-0.73,3.14L503,97.16l-1.1-1.85l-3.49,0.18L498.04,99l-1.65,0.74l-0.92-1.85l-7.34,5.91l1.47,1.66l-2.75,1.29l-6.24,12.38l-2.2,1.48l0.18,1.11l2.2,1.11l-0.55,2.4l-3.67-0.19l-1.1-1.29l-2.38,2.77l-1.47,1.11l-0.37,2.59l-1.28,0.74l-3.3,0.74l-1.65,5.18l1.1,8.5l1.28,3.88l1.47,1.48l3.3-0.18l4.77-4.62l1.83-3.14l0.55,4.62l3.12-5.54l0.18-15.53l2.54-1.6l0.76-8.57l7.7-11.09l3.67-1.29l1.65-2.03l5.5,1.29l2.75,1.66l0.92-4.62l4.59-2.77L515.46,102.14L515.46,102.14z","name":"Norway"},"lk":{"path":"M680.54,308.05l0.25,2.72l0.25,1.98l-1.47,0.25l0.74,4.45l2.21,1.24l3.43-1.98l-0.98-4.69l0.25-1.73l-3.19-2.96L680.54,308.05L680.54,308.05z","name":"Sri Lanka"},"cu":{"path":"M220.85,266.92v1.27l5.32,0.1l2.51-1.46l0.39,1.07l5.22,1.27l4.64,4.19l-1.06,1.46l0.19,1.66l3.87,0.97l3.87-1.75l1.74-1.75l-2.51-1.27l-12.95-7.6l-4.54-0.49L220.85,266.92L220.85,266.92z","name":"Cuba"},"bs":{"path":"M239.61,259.13l-1.26-0.39l-0.1,2.43l1.55,1.56l1.06-1.56L239.61,259.13L239.61,259.13M242.12,262.93l-1.74,0.97l1.64,2.34l0.87-1.17L242.12,262.93L242.12,262.93M247.73,264.68l-1.84-0.1l0.19,1.17l1.35,1.95l1.16-1.27L247.73,264.68L247.73,264.68M246.86,262.35l-3-1.27l-0.58-3.02l1.16-0.49l1.16,2.34l1.16,0.88L246.86,262.35L246.86,262.35M243.96,256.21l-1.55-0.39l-0.29-1.95l-1.64-0.58l1.06-1.07l1.93,0.68l1.45,0.88L243.96,256.21L243.96,256.21z","name":"Bahamas"},"jm":{"path":"M238.93,279.59l-3.48,0.88v0.97l2.03,1.17h2.13l1.35-1.56L238.93,279.59L238.93,279.59z","name":"Jamaica"},"ec":{"path":"M230.2,335.85l-4.73,2.94l-0.34,4.36l-0.95,1.43l2.98,2.86l-1.29,1.41l0.3,3.6l5.33,1.27l8.07-9.55l-0.02-3.33l-3.87-0.25L230.2,335.85L230.2,335.85z","name":"Ecuador"},"ca":{"path":"M203.73,35.89l0.22,4.02l-7.98,8.27l2,6.7l5.76-1.56l3.33-4.92l8.42-3.13l6.87-0.45l-5.32-5.81l-2.66,2.01l-2-0.67l-1.11-2.46l-2.44-2.46L203.73,35.89L203.73,35.89M214.15,24.05l-1.77,3.13l8.65,3.13l3.1-4.69l1.33,3.13h2.22l4.21-4.69l-5.1-1.34l-2-1.56l-2.66,2.68L214.15,24.05L214.15,24.05M229.23,30.31l-6.87,2.9v2.23l8.87,3.35l-2,2.23l1.33,2.9l5.54-2.46h4.66l2.22,3.57l3.77-3.8l-0.89-3.58l-3.1,1.12l-0.44-4.47l1.55-2.68h-1.55l-2.44,1.56l-1.11,0.89l0.67,3.13l-1.77,1.34l-2.66-0.22l-0.67-4.02L229.23,30.31L229.23,30.31M238.32,23.38l-0.67,2.23l4.21,2.01l3.1-1.79l-0.22-1.34L238.32,23.38L238.32,23.38M241.64,19.58l-3.1,1.12l0.22,1.56l6.87-0.45l-0.22-1.56L241.64,19.58L241.64,19.58M256.5,23.38l-0.44,1.56l-1.11,1.56v2.23l4.21-0.67l4.43,3.8h1.55v-3.8l-4.43-4.92L256.5,23.38L256.5,23.38M267.81,27.85l1.77,2.01l-1.55,2.68l1.11,2.9l4.88-2.68v-2.01l-2.88-3.35L267.81,27.85L267.81,27.85M274.24,22.71l0.22,3.57h5.99l1.55,1.34l-0.22,1.56l-5.32,0.67l3.77,5.14l5.1,0.89l7.09-3.13l-10.2-15.42l-3.1,2.01l0.22,2.68l-3.55-1.34L274.24,22.71L274.24,22.71M222.58,47.96l-8.42,2.23l-4.88,4.25l0.44,4.69l8.87,2.68l-2,4.47l-6.43-4.02l-1.77,3.35l4.21,2.9l-0.22,4.69l6.43,1.79l7.76-0.45l1.33-2.46l5.76,6.48l3.99-1.34l0.67-4.47l2.88,2.01l0.44-4.47l-3.55-2.23l0.22-14.07l-3.1-2.46L231.89,56L222.58,47.96L222.58,47.96M249.63,57.79l-2.88-1.34l-1.55,2.01l3.1,4.92l0.22,4.69l6.65-4.02v-5.81l2.44-2.46l-2.44-1.79h-3.99L249.63,57.79L249.63,57.79M263.82,55.78l-4.66,3.8l1.11,4.69h2.88l1.33-2.46l2,2.01l2-0.22l5.32-4.47L263.82,55.78L263.82,55.78M263.37,48.4l-1.11,2.23l4.88,1.79l1.33-2.01L263.37,48.4L263.37,48.4M260.49,39.91l-4.88,0.67l-2.88,2.68l5.32,0.22l-1.55,4.02l1.11,1.79l1.55-0.22l3.77-6.03L260.49,39.91L260.49,39.91M268.92,38.35l-2.66,0.89l0.44,3.57l4.43,2.9l0.22,2.23l-1.33,1.34l0.67,4.47l17.07,5.58l4.66,1.56l4.66-4.02l-5.54-4.47l-5.1,1.34l-7.09-0.67l-2.66-2.68l-0.67-7.37l-4.43-2.23L268.92,38.35L268.92,38.35M282.88,61.59L278,61.14l-5.76,2.23l-3.1,4.24l0.89,11.62l9.53,0.45l9.09,4.47l6.43,7.37l4.88-0.22l-1.33,6.92l-4.43,7.37l-4.88,2.23l-3.55-0.67l-1.77-1.56l-2.66,3.57l1.11,3.57l3.77,0.22l4.66-2.23l3.99,10.28l9.98,6.48l6.87-8.71l-5.76-9.38l3.33-3.8l4.66,7.82l8.42-7.37l-1.55-3.35l-5.76,1.79l-3.99-10.95l3.77-6.25l-7.54-8.04l-4.21,2.9l-3.99-8.71l-8.42,1.12l-2.22-10.5l-6.87,4.69l-0.67,5.81h-3.77l0.44-5.14L282.88,61.59L282.88,61.59M292.86,65.61l-1.77,1.79l1.55,2.46l7.32,0.89l-4.66-4.92L292.86,65.61L292.86,65.61M285.77,40.36v2.01l-4.88,1.12l1.33,2.23l5.54,2.23l6.21,0.67l4.43,3.13l4.43-2.46l-3.1-3.13h3.99l2.44-2.68l5.99-0.89v-1.34l-3.33-2.23l0.44-2.46l9.31,1.56l13.75-5.36l-5.1-1.56l1.33-1.79h10.64l1.77-1.79l-21.51-7.6l-5.1-1.79l-5.54,4.02l-6.21-5.14l-3.33-0.22l-0.67,4.25l-4.21-3.8l-4.88,1.56l0.89,2.46l7.32,1.56l-0.44,3.57l3.99,2.46l9.76-2.46l0.22,3.35l-7.98,3.8l-4.88-3.8l-4.43,0.45l4.43,6.26l-2.22,1.12l-3.33-2.9l-2.44,1.56l2.22,4.24h3.77l-0.89,4.02l-3.1-0.45l-3.99-4.25L285.77,40.36L285.77,40.36M266.01,101.85l-4.23,5.32l-0.26,5.86l3.7-2.13h4.49l3.17,2.93l2.91-2.4L266.01,101.85L266.01,101.85M317.52,171.05l-10.57,10.12l1.06,2.4l12.94,4.79l1.85-3.19l-1.06-5.32l-4.23,0.53l-2.38-2.66l3.96-3.99L317.52,171.05L317.52,171.05M158.22,48.66l1.99,3.01l1,4.02l4.98,1.25l3.49-3.76l2.99,1.51l8.47,0.75l5.98-2.51l1,8.28h3.49V57.7l3.49,0.25l8.72,10.29l5.73,3.51l-2.99,4.77l1.25,1.25L219,80.03l0.25,5.02l2.99,0.5l0.75-7.53l4.73-1.25l3.49,5.27l7.47,3.51l3.74,0.75l2.49-3.01l0.25-4.77l4.48-2.76l1.49,4.02l-3.99,7.03l0.5,3.51l2.24-3.51l4.48-4.02l0.25-5.27l-2.49-4.02l0.75-3.26l5.98-3.01l2.74,2.01l0.5,17.57l4.23-3.76l2.49,1.51l-3.49,6.02l4.48,1l6.48-10.04l5.48,5.77l-2.24,10.29l-5.48,3.01l-5.23-2.51l-9.46,2.01l1,3.26l-2.49,4.02l-7.72,1.76l-8.72,6.78l-7.72,10.29l-1,3.26l5.23,2.01l1.99,5.02l7.22,7.28l11.46,5.02l-2.49,11.54l-0.25,3.26l2.99,2.01l3.99-5.27l0.5-10.04l6.23-0.25l2.99-5.77l0.5-8.78l7.97-15.56l9.96,3.51l5.23,7.28l-2.24,7.28l3.99,2.26l9.71-6.53l2.74,17.82l8.97,10.79l0.25,5.52l-9.96,2.51l-4.73,5.02l-9.96-2.26l-4.98-0.25l-8.72,6.78l5.23-1.25l6.48-1.25l1.25,1.51l-1.74,5.52l0.25,5.02l2.99,2.01l2.99-0.75l1.5-2.26h1.99l-3.24,6.02l-6.23,0.25l-2.74,4.02h-3.49l-1-3.01l4.98-5.02l-5.98,2.01l-0.27-8.53l-1.72-1l-5.23,2.26l-0.5,4.27h-11.96l-10.21,7.03l-13.7,4.52l-1.49-2.01l6.9-10.3l-3.92-3.77l-2.49-4.78l-5.07-3.87l-5.44-0.45l-9.75-6.83l-70.71-11.62l-1.17-4.79l-6.48-6.02v-5.02l1-4.52l-0.5-2.51l-2.49-2.51l-0.5-4.02l6.48-4.52l-3.99-21.58l-5.48-0.25l-4.98-6.53L158.22,48.66L158.22,48.66M133.83,128.41l-1.7,3.26l0.59,2.31l1.11,0.69l-0.26,0.94l-1.19,0.34l0.34,3.43l1.28,1.29l1.02-1.11l-1.28-3.34l0.76-2.66l1.87-2.49l-1.36-2.31L133.83,128.41L133.83,128.41M139.45,147.95l-1.53,0.6l2.81,3.26l0.68,3.86l2.81,3l2.38-0.43v-3.94l-2.89-1.8L139.45,147.95L139.45,147.95z","name":"Canada"},"gt":{"path":"M194.88,291.52l5.93,4.34l5.98-7.43l-1.02-1.54l-2.04-0.07v-4.35l-1.53-0.93l-4.63,1.38l1.77,4.08L194.88,291.52L194.88,291.52z","name":"Guatemala"},"hn":{"path":"M207.55,288.78l9.24-0.35l2.74,3.26l-1.71-0.39l-3.29,0.14l-4.3,4.04l-1.84,4.09l-1.21-0.64l-0.01-4.48l-2.66-1.78L207.55,288.78L207.55,288.78z","name":"Honduras"},"sv":{"path":"M201.65,296.27l4.7,2.34l-0.07-3.71l-2.41-1.47L201.65,296.27L201.65,296.27z","name":"El Salvador"},"ni":{"path":"M217.74,292.11l2.19,0.44l0.07,4.49l-2.55,7.28l-6.87-0.68l-1.53-3.51l2.04-4.26l3.87-3.6L217.74,292.11L217.74,292.11z","name":"Nicaragua"},"cr":{"path":"M217.38,304.98l1.39,2.72l1.13,1.5l-1.52,4.51l-2.9-2.04l-4.74-4.34v-2.87L217.38,304.98L217.38,304.98z","name":"Costa Rica"},"pa":{"path":"M220.59,309.61l-1.46,4.56l4.82,1.25l2.99,0.59l0.51-3.53l3.21-1.62l2.85,1.47l1.12,1.79l1.36-0.16l1.07-3.25l-3.56-1.47l-2.7-1.47l-2.7,1.84l-3.21,1.62l-3.28-1.32L220.59,309.61L220.59,309.61z","name":"Panama"},"co":{"path":"M253.73,299.78l-2.06-0.21l-13.62,11.23l-1.44,3.95l-1.86,0.21l0.83,8.73l-4.75,11.65l5.16,4.37l6.61,0.42l4.54,6.66l6.6,0.21l-0.21,4.99H256l2.68-9.15l-2.48-3.12l0.62-5.82l5.16-0.42l-0.62-13.52l-11.56-3.74l-2.68-7.28L253.73,299.78L253.73,299.78z","name":"Colombia"},"ve":{"path":"M250.46,305.92l0.44,2.59l3.25,1.03l0.74-4.77l3.43-3.55l3.43,4.02l7.89,2.15l6.68-1.4l4.55,5.61l3.43,2.15l-3.76,5.73l1.26,4.34l-2.15,2.66l-2.23,1.87l-4.83-2.43l-1.11,1.12v3.46l3.53,1.68l-2.6,2.81l-2.6,2.81l-3.43-0.28l-3.45-3.79l-0.73-14.26l-11.78-4.02l-2.14-6.27L250.46,305.92L250.46,305.92z","name":"Venezuela"},"gy":{"path":"M285.05,314.13l7.22,6.54l-2.87,3.32l-0.23,1.97l3.77,3.89l-0.09,3.74l-6.56,2.5l-3.93-5.31l0.84-6.38l-1.68-4.75L285.05,314.13L285.05,314.13z","name":"Guyana"},"sr":{"path":"M293.13,321.14l2.04,1.87l3.16-1.96l2.88,0.09l-0.37,1.12l-1.21,2.52l-0.19,6.27l-5.75,2.34l0.28-4.02l-3.71-3.46l0.19-1.78L293.13,321.14L293.13,321.14z","name":"Suriname"},"gf":{"path":"M302.13,321.8l5.85,3.65l-3.06,6.08l-1.11,1.4l-3.25-1.87l0.09-6.55L302.13,321.8L302.13,321.8z","name":"French Guiana"},"pe":{"path":"M225.03,349.52l-1.94,1.96l0.13,3.13l16.94,30.88l17.59,11.34l2.72-4.56l0.65-10.03l-1.42-6.25l-4.79-8.08l-2.85,0.91l-1.29,1.43l-5.69-6.52l1.42-7.69l6.6-4.3l-0.52-4.04l-6.72-0.26l-3.49-5.86l-1.94-0.65l0.13,3.52l-8.66,10.29l-6.47-1.56L225.03,349.52L225.03,349.52z","name":"Peru"},"bo":{"path":"M258.71,372.79l8.23-3.59l2.72,0.26l1.81,7.56l12.54,4.17l2.07,6.39l5.17,0.65l2.2,5.47l-1.55,4.95l-8.41,0.65l-3.1,7.95l-6.6-0.13l-2.07-0.39l-3.81,3.7l-1.88-0.18l-6.47-14.99l1.79-2.68l0.63-10.6l-1.6-6.31L258.71,372.79L258.71,372.79z","name":"Bolivia"},"py":{"path":"M291.76,399.51l2.2,2.4l-0.26,5.08l6.34-0.39l4.79,6.13l-0.39,5.47l-3.1,4.69l-6.34,0.26l-0.26-2.61l1.81-4.3l-6.21-3.91h-5.17l-3.88-4.17l2.82-8.06L291.76,399.51L291.76,399.51z","name":"Paraguay"},"uy":{"path":"M300.36,431.93l-2.05,2.19l0.85,11.78l6.44,1.87l8.19-8.21L300.36,431.93L300.36,431.93z","name":"Uruguay"},"ar":{"path":"M305.47,418.2l1.94,1.82l-7.37,10.95l-2.59,2.87l0.9,12.51l5.69,6.91l-4.78,8.34l-3.62,1.56h-4.14l1.16,6.51l-6.47,2.22l1.55,5.47l-3.88,12.38l4.79,3.91l-2.59,6.38l-4.4,6.91l2.33,4.82l-5.69,0.91l-4.66-5.73l-0.78-17.85l-7.24-30.32l2.19-10.6l-4.66-13.55l3.1-17.59l2.85-3.39l-0.7-2.57l3.66-3.34l8.16,0.56l4.56,4.87l5.27,0.09l5.4,3.3l-1.59,3.72l0.38,3.76l7.65-0.36L305.47,418.2L305.47,418.2M288.92,518.79l0.26,5.73l4.4-0.39l3.75-2.48l-6.34-1.3L288.92,518.79L288.92,518.79z","name":"Argentina"},"cl":{"path":"M285.04,514.1l-4.27,9.38l7.37,0.78l0.13-6.25L285.04,514.1L285.04,514.1M283.59,512.63l-3.21,3.55l-0.39,4.17l-6.21-3.52l-6.6-9.51l-1.94-3.39l2.72-3.52l-0.26-4.43l-3.1-1.3l-2.46-1.82l0.52-2.48l3.23-0.91l0.65-14.33l-5.04-2.87l-3.29-74.59l0.85-1.48l6.44,14.85l2.06,0.04l0.67,2.37l-2.74,3.32l-3.15,17.87l4.48,13.76l-2.07,10.42l7.3,30.64l0.77,17.92l5.23,6.05L283.59,512.63L283.59,512.63M262.28,475.14l-1.29,1.95l0.65,3.39l1.29,0.13l0.65-4.3L262.28,475.14L262.28,475.14z","name":"Chile"},"br":{"path":"M314.24,438.85l6.25-12.02l0.23-10.1l11.66-7.52h6.53l5.13-8.69l0.93-16.68l-2.1-4.46l12.36-11.28l0.47-12.45l-16.79-8.22l-20.28-6.34l-9.56-0.94l2.57-5.4l-0.7-8.22l-2.09-0.69l-3.09,6.14l-1.62,2.03l-4.16-1.84l-13.99,4.93l-4.66-5.87l0.75-6.13l-4.4,4.48l-4.86-2.62l-0.49,0.69l0.01,2.13l4.19,2.25l-6.29,6.63l-3.97-0.04l-4.02-4.09l-4.55,0.14l-0.56,4.86l2.61,3.17l-3.08,9.87l-3.6,0.28l-5.73,3.62l-1.4,7.11l4.97,5.32l0.91-1.03l3.49-0.94l2.98,5.02l8.53-3.66l3.31,0.19l2.28,8.07l12.17,3.86l2.1,6.44l5.18,0.62l2.47,6.15l-1.67,5.47l2.18,2.86l-0.32,4.26l5.84-0.55l5.35,6.76l-0.42,4.75l3.17,2.68l-7.6,11.51L314.24,438.85L314.24,438.85z","name":"Brazil"},"bz":{"path":"M204.56,282.4l-0.05,3.65h0.84l2.86-5.34h-1.94L204.56,282.4L204.56,282.4z","name":"Belize"},"mn":{"path":"M673.8,170.17l5.82-7.72l6.99,3.23l4.75,1.27l5.82-5.34l-3.95-2.91l2.6-3.67l7.76,2.74l2.69,4.41l4.86,0.13l2.54-1.89l5.23-0.21l1.14,1.94l8.69,0.44l5.5-5.61l7.61,0.8l-0.44,7.64l3.33,0.76l4.09-1.86l4.33,2.14l-0.1,1.08l-3.14,0.09l-3.27,6.86l-2.54,0.25l-9.88,12.91l-10.09,4.45l-6.31,0.49l-5.24-3.38l-6.7,3.58l-6.6-2.05l-1.87-4.79l-12.5-0.88l-6.4-10.85l-3.11-0.2L673.8,170.17L673.8,170.17z","name":"Mongolia"},"kp":{"path":"M778.28,194.27l1.84,0.77l0.56,6.44l3.65,0.21l3.44-4.03l-1.19-1.06l0.14-4.32l3.16-3.82l-1.61-2.9l1.05-1.2l0.58-3l-1.83-0.83l-1.56,0.79l-1.93,5.86l-3.12-0.27l-3.61,4.26L778.28,194.27L778.28,194.27z","name":"North Korea"},"kr":{"path":"M788.34,198.2l6.18,5.04l1.05,4.88l-0.21,2.62l-3.02,3.4l-2.6,0.14l-2.95-6.37l-1.12-3.04l1.19-0.92l-0.28-1.27l-1.47-0.66L788.34,198.2L788.34,198.2z","name":"South Korea"},"kz":{"path":"M576.69,188.62l4.1-1.75l4.58-0.16l0.32,7h-2.68l-2.05,3.34l2.68,4.45l3.95,2.23l0.36,2.55l1.45-0.48l1.34-1.59l2.21,0.48l1.11,2.23h2.84v-2.86l-1.74-5.09l-0.79-4.13l5.05-2.23l6.79,1.11l4.26,4.29l9.63-0.95l5.37,7.63l6.31,0.32l1.74-2.86l2.21-0.48l0.32-3.18l3.31-0.16l1.74,2.07l1.74-4.13l14.99,2.07l2.52-3.34l-4.26-5.25l5.68-12.4l4.58,0.32l3.16-7.63l-6.31-0.64l-3.63-3.5l-10,1.16l-12.88-12.45l-4.54,4.03l-13.77-6.25l-16.89,8.27l-0.47,5.88l3.95,4.61l-7.7,4.35l-9.99-0.22l-2.09-3.07l-7.83-0.43l-7.42,4.77l-0.16,6.52L576.69,188.62L576.69,188.62z","name":"Kazakhstan"},"tm":{"path":"M593.85,207.59l-0.62,2.63h-4.15v3.56l4.46,2.94l-1.38,4.03v1.86l1.85,0.31l2.46-3.25l5.54-1.24l11.84,4.49l0.15,3.25l6.61,0.62l7.38-7.75l-0.92-2.48l-4.92-1.08l-13.84-8.99l-0.62-3.25h-5.23l-2.31,4.34h-2.31L593.85,207.59L593.85,207.59z","name":"Turkmenistan"},"uz":{"path":"M628.92,219.06l3.08,0.16v-5.27l-2.92-1.7l4.92-6.2h2l2,2.33l5.23-2.01l-7.23-2.48l-0.28-1.5l-1.72,0.42l-1.69,2.94l-7.29-0.24l-5.35-7.57l-9.4,0.93l-4.48-4.44l-6.2-1.05l-4.5,1.83l2.61,8.68l0.03,2.92l1.9,0.04l2.33-4.44l6.2,0.08l0.92,3.41l13.29,8.82l5.14,1.18L628.92,219.06L628.92,219.06z","name":"Uzbekistan"},"tj":{"path":"M630.19,211.84l4.11-5.1h1.55l0.54,1.14l-1.9,1.38v1.14l1.25,0.9l6.01,0.36l1.96-0.84l0.89,0.18l0.6,1.92l3.57,0.36l1.79,3.78l-0.54,1.14l-0.71,0.06l-0.71-1.44l-1.55-0.12l-2.68,0.36l-0.18,2.52l-2.68-0.18l0.12-3.18l-1.96-1.92l-2.98,2.46l0.06,1.62l-2.62,0.9h-1.55l0.12-5.58L630.19,211.84L630.19,211.84z","name":"Tajikistan"},"kg":{"path":"M636.81,199.21l-0.31,2.53l0.25,1.56l8.7,2.92l-7.64,3.08l-0.87-0.72l-1.65,1.06l0.08,0.58l0.88,0.4l5.36,0.14l2.72-0.82l3.49-4.4l4.37,0.76l5.27-7.3l-14.1-1.92l-1.95,4.73l-2.46-2.64L636.81,199.21L636.81,199.21z","name":"Kyrgyz Republic"},"af":{"path":"M614.12,227.05l1.59,12.46l3.96,0.87l0.37,2.24l-2.84,2.37l5.29,4.27l10.28-3.7l0.82-4.38l6.47-4.04l2.48-9.36l1.85-1.99l-1.92-3.34l6.26-3.87l-0.8-1.12l-2.89,0.18l-0.26,2.66l-3.88-0.04l-0.07-3.55l-1.25-1.49l-2.1,1.91l0.06,1.75l-3.17,1.2l-5.85-0.37l-7.6,7.96L614.12,227.05L614.12,227.05z","name":"Afghanistan"},"pk":{"path":"M623.13,249.84l2.6,3.86l-0.25,1.99l-3.46,1.37l-0.25,3.24h3.96l1.36-1.12h7.54l6.8,5.98l0.87-2.87h5.07l0.12-3.61l-5.19-4.98l1.11-2.74l5.32-0.37l7.17-14.95l-3.96-3.11l-1.48-5.23l9.64-0.87l-5.69-8.1l-3.03-0.82l-1.24,1.5l-0.93,0.07l-5.69,3.61l1.86,3.12l-2.1,2.24l-2.6,9.59l-6.43,4.11l-0.87,4.49L623.13,249.84L623.13,249.84z","name":"Pakistan"},"in":{"path":"M670.98,313.01l4.58-2.24l2.72-9.84l-0.12-12.08l15.58-16.82v-3.99l3.21-1.25l-0.12-4.61l-3.46-6.73l1.98-3.61l4.33,3.99l5.56,0.25v2.24l-1.73,1.87l0.37,1l2.97,0.12l0.62,3.36h0.87l2.23-3.99l1.11-10.46l3.71-2.62l0.12-3.61l-1.48-2.87l-2.35-0.12l-9.2,6.08l0.58,3.91l-6.46-0.02l-2.28-2.79l-1.24,0.16l0.42,3.88l-13.97-1l-8.66-3.86l-0.46-4.75l-5.77-3.58l-0.07-7.37l-3.96-4.53l-9.1,0.87l0.99,3.96l4.46,3.61l-7.71,15.78l-5.16,0.39l-0.85,1.9l5.08,4.7l-0.25,4.75l-5.19-0.08l-0.56,2.36l4.31-0.19l0.12,1.87l-3.09,1.62l1.98,3.74l3.83,1.25l2.35-1.74l1.11-3.11l1.36-0.62l1.61,1.62l-0.49,3.99l-1.11,1.87l0.25,3.24L670.98,313.01L670.98,313.01z","name":"India"},"np":{"path":"M671.19,242.56l0.46,4.27l8.08,3.66l12.95,0.96l-0.49-3.13l-8.65-2.38l-7.34-4.37L671.19,242.56L671.19,242.56z","name":"Nepal"},"bt":{"path":"M695.4,248.08l1.55,2.12l5.24,0.04l-0.53-2.9L695.4,248.08L695.4,248.08z","name":"Bhutan"},"bd":{"path":"M695.57,253.11l-1.31,2.37l3.4,6.46l0.1,5.04l0.62,1.35l3.99,0.07l2.26-2.17l1.64,0.99l0.33,3.07l1.31-0.82l0.08-3.92l-1.1-0.13l-0.69-3.33l-2.78-0.1l-0.69-1.85l1.7-2.27l0.03-1.12h-4.94L695.57,253.11L695.57,253.11z","name":"Bangladesh"},"mm":{"path":"M729.44,303.65l-2.77-4.44l2.01-2.82l-1.9-3.49l-1.79-0.34l-0.34-5.86l-2.68-5.19l-0.78,1.24l-1.79,3.04l-2.24,0.34l-1.12-1.47l-0.56-3.95l-1.68-3.16l-6.84-6.45l1.68-1.11l0.31-4.67l2.5-4.2l1.08-10.45l3.62-2.47l0.12-3.81l2.17,0.72l3.42,4.95l-2.54,5.44l1.71,4.27l4.23,1.66l0.77,4.65l5.68,0.88l-1.57,2.71l-7.16,2.82l-0.78,4.62l5.26,6.76l0.22,3.61l-1.23,1.24l0.11,1.13l3.92,5.75l0.11,5.97L729.44,303.65L729.44,303.65z","name":"Myanmar"},"th":{"path":"M730.03,270.47l3.24,4.17v5.07l1.12,0.56l5.15-2.48l1.01,0.34l6.15,7.1l-0.22,4.85l-2.01-0.34l-1.79-1.13l-1.34,0.11l-2.35,3.94l0.45,2.14l1.9,1.01l-0.11,2.37l-1.34,0.68l-4.59-3.16v-2.82l-1.9-0.11l-0.78,1.24l-0.4,12.62l2.97,5.42l5.26,5.07l-0.22,1.47l-2.8-0.11l-2.57-3.83h-2.69l-3.36-2.71l-1.01-2.82l1.45-2.37l0.5-2.14l1.58-2.8l-0.07-6.44l-3.86-5.58l-0.16-0.68l1.25-1.26l-0.29-4.43l-5.14-6.51l0.6-3.75L730.03,270.47L730.03,270.47z","name":"Thailand"},"kh":{"path":"M740.48,299.47l4.09,4.37l7.61-5.64l0.67-8.9l-3.93,2.71l-2.04-1.14l-2.77-0.37l-1.55-1.09l-0.75,0.04l-2.03,3.33l0.33,1.54l2.06,1.15l-0.25,3.13L740.48,299.47L740.48,299.47z","name":"Cambodia"},"la":{"path":"M735.47,262.93l-2.42,1.23l-2.01,5.86l3.36,4.28l-0.56,4.73l0.56,0.23l5.59-2.71l7.5,8.38l-0.18,5.28l1.63,0.88l4.03-3.27l-0.33-2.59l-11.63-11.05l0.11-1.69l1.45-1.01l-1.01-2.82l-4.81-0.79L735.47,262.93L735.47,262.93z","name":"Lao People's Democratic Republic"},"vn":{"path":"M745.06,304.45l1.19,1.87l0.22,2.14l3.13,0.34l3.8-5.07l3.58-1.01l1.9-5.18l-0.89-8.34l-3.69-5.07l-3.89-3.11l-4.95-8.5l3.55-5.94l-5.08-5.83l-4.07-0.18l-3.66,1.97l1.09,4.71l4.88,0.86l1.31,3.63l-1.72,1.12l0.11,0.9l11.45,11.2l0.45,3.29l-0.69,10.4L745.06,304.45L745.06,304.45z","name":"Vietnam"},"ge":{"path":"M555.46,204.16l3.27,4.27l4.08,1.88l2.51-0.01l4.31-1.17l1.08-1.69l-12.75-4.77L555.46,204.16L555.46,204.16z","name":"Georgia"},"am":{"path":"M569.72,209.89l4.8,6.26l-1.41,1.65l-3.4-0.59l-4.22-3.78l0.23-2.48L569.72,209.89L569.72,209.89z","name":"Armenia"},"az":{"path":"M571.41,207.72l-1.01,1.72l4.71,6.18l1.64-0.53l2.7,2.83l1.17-4.96l2.93,0.47l-0.12-1.42l-4.82-4.22l-0.92,2.48L571.41,207.72L571.41,207.72z","name":"Azerbaijan"},"ir":{"path":"M569.65,217.95l-1.22,1.27l0.12,2.01l1.52,2.13l5.39,5.9l-0.82,2.36h-0.94l-0.47,2.36l3.05,3.9l2.81,0.24l5.63,7.79l3.16,0.24l2.46,1.77l0.12,3.54l9.73,5.67h3.63l2.23-1.89l2.81-0.12l1.64,3.78l10.51,1.46l0.31-3.86l3.48-1.26l0.16-1.38l-2.77-3.78l-6.17-4.96l3.24-2.95l-0.23-1.3l-4.06-0.63l-1.72-13.7l-0.2-3.15l-11.01-4.21l-4.88,1.1l-2.73,3.35l-2.42-0.16l-0.7,0.59l-5.39-0.35l-6.8-4.96l-2.53-2.77l-1.16,0.28l-2.09,2.39L569.65,217.95L569.65,217.95z","name":"Iran"},"tr":{"path":"M558.7,209.19l-2.23,2.36l-8.2-0.24l-4.92-2.95l-4.8-0.12l-5.51,3.9l-5.16,0.24l-0.47,2.95h-5.86l-2.34,2.13v1.18l1.41,1.18v1.3l-0.59,1.54l0.59,1.3l1.88-0.94l1.88,2.01l-0.47,1.42l-0.7,0.95l1.05,1.18l5.16,1.06l3.63-1.54v-2.24l1.76,0.35l4.22,2.48l4.57-0.71l1.99-1.89l1.29,0.47v2.13h1.76l1.52-2.95l13.36-1.42l5.83-0.71l-1.54-2.02l-0.03-2.73l1.17-1.4l-4.26-3.42l0.23-2.95h-2.34L558.7,209.19L558.7,209.19M523.02,209.7l-0.16,3.55l3.1-0.95l1.42-0.95l-0.42-1.54l-1.47-1.17L523.02,209.7L523.02,209.7z","name":"Turkey"},"om":{"path":"M598.38,280.84l7.39-4.26l1.31-6.25l-1.62-0.93l0.67-6.7l1.41-0.82l1.51,2.37l8.99,4.7v2.61l-10.89,16.03l-5.01,0.17L598.38,280.84L598.38,280.84z","name":"Oman"},"ae":{"path":"M594.01,264.94l0.87,3.48l9.86,0.87l0.69-7.14l1.9-1.04l0.52-2.61l-3.11,0.87l-3.46,5.23L594.01,264.94L594.01,264.94z","name":"United Arab Emirates"},"qa":{"path":"M592.63,259.02l-0.52,4.01l1.54,1.17l1.4-0.13l0.52-5.05l-1.21-0.87L592.63,259.02L592.63,259.02z","name":"Qatar"},"kw":{"path":"M583.29,247.17l-2.25-1.22l-1.56,1.57l0.17,3.14l3.63,1.39L583.29,247.17L583.29,247.17z","name":"Kuwait"},"sa":{"path":"M584,253.24l7.01,9.77l2.26,1.8l1.01,4.38l10.79,0.85l1.22,0.64l-1.21,5.4l-7.09,4.18l-10.37,3.14l-5.53,5.4l-6.57-3.83l-3.98,3.48L566,279.4l-3.8-1.74l-1.38-2.09v-4.53l-13.83-16.72l-0.52-2.96h3.98l4.84-4.18l0.17-2.09l-1.38-1.39l2.77-2.26l5.88,0.35l10.03,8.36l5.92-0.27l0.38,1.46L584,253.24L584,253.24z","name":"Saudi Arabia"},"sy":{"path":"M546.67,229.13l-0.35,2.54l2.82,1.18l-0.12,7.04l2.82-0.06l2.82-2.13l1.06-0.18l6.4-5.09l1.29-7.39l-12.79,1.3l-1.35,2.96L546.67,229.13L546.67,229.13z","name":"Syrian Arab Republic"},"iq":{"path":"M564.31,225.03l-1.56,7.71l-6.46,5.38l0.41,2.54l6.31,0.43l10.05,8.18l5.62-0.16l0.15-1.89l2.06-2.21l2.88,1.63l0.38-0.36l-5.57-7.41l-2.64-0.16l-3.51-4.51l0.7-3.32l1.07-0.14l0.37-1.47l-4.78-5.03L564.31,225.03L564.31,225.03z","name":"Iraq"},"jo":{"path":"M548.9,240.78l-2.46,8.58l-0.11,1.31h3.87l4.33-3.82l0.11-1.45l-1.77-1.81l3.17-2.63l-0.46-2.44l-0.87,0.2l-2.64,1.89L548.9,240.78L548.9,240.78z","name":"Jordan"},"lb":{"path":"M546.2,232.44l0.06,1.95l-0.82,2.96l2.82,0.24l0.18-4.2L546.2,232.44L546.2,232.44z","name":"Lebanon"},"il":{"path":"M545.32,238.06l-1.58,5.03l2.05,6.03l2.35-8.81v-1.89L545.32,238.06L545.32,238.06z","name":"Israel"},"cy":{"path":"M543.21,229.84l1.23,0.89l-3.81,3.61l-1.82-0.06l-1.35-0.95l0.18-1.77l2.76-0.18L543.21,229.84L543.21,229.84z","name":"Cyprus"},"gb":{"path":"M446.12,149.08l-1.83,2.77l0.73,1.11h4.22v1.85l-1.1,1.48l0.73,3.88l2.38,4.62l1.83,4.25l2.93,1.11l1.28,2.22l-0.18,2.03l-1.83,1.11l-0.18,0.92l1.28,0.74l-1.1,1.48l-2.57,1.11l-4.95-0.55l-7.71,3.51l-2.57-1.29l7.34-4.25l-0.92-0.55l-3.85-0.37l2.38-3.51l0.37-2.96l3.12-0.37l-0.55-5.73l-3.67-0.18l-1.1-1.29l0.18-4.25l-2.2,0.18l2.2-7.39l4.04-2.96L446.12,149.08L446.12,149.08M438.42,161.47l-3.3,0.37l-0.18,2.96l2.2,1.48l2.38-0.55l0.92-1.66L438.42,161.47L438.42,161.47z","name":"United Kingdom"},"ie":{"path":"M439.51,166.55l-0.91,6l-8.07,2.96h-2.57l-1.83-1.29v-1.11l4.04-2.59l-1.1-2.22l0.18-3.14l3.49,0.18l1.6-3.76l-0.21,3.34l2.71,2.15L439.51,166.55L439.51,166.55z","name":"Ireland"},"se":{"path":"M497.72,104.58l1.96,1.81h3.67l2.02,3.88l0.55,6.65l-4.95,3.51v3.51l-3.49,4.81l-2.02,0.18l-2.75,4.62l0.18,4.44l4.77,3.51l-0.37,2.03l-1.83,2.77l-2.75,2.4l0.18,7.95l-4.22,1.48l-1.47,3.14h-2.02l-1.1-5.54l-4.59-7.04l3.77-6.31l0.26-15.59l2.6-1.43l0.63-8.92l7.41-10.61L497.72,104.58L497.72,104.58M498.49,150.17l-2.11,1.67l1.06,2.45l1.87-1.82L498.49,150.17L498.49,150.17z","name":"Sweden"},"fi":{"path":"M506.79,116.94l2.07,0.91l1.28,2.4l-1.28,1.66l-6.42,7.02l-1.1,3.7l1.47,5.36l4.95,3.7l6.6-3.14l5.32-0.74l4.95-7.95l-3.67-8.69l-3.49-8.32l0.55-5.36l-2.2-0.37l-0.57-3.91l-2.96-4.83l-3.28,2.27l-1.29,5.27l-3.48-2.09l-4.84-1.18l-1.08,1.26l1.86,1.68l3.39-0.06l2.73,4.41L506.79,116.94L506.79,116.94z","name":"Finland"},"lv":{"path":"M518.07,151.37l-6.85-1.11l0.15,3.83l6.35,3.88l2.6-0.76l-0.15-2.92L518.07,151.37L518.07,151.37z","name":"Latvia"},"lt":{"path":"M510.81,154.7l-2.15-0.05l-2.95,2.82h-2.5l0.15,3.53l-1.5,2.77l5.4,0.05l1.55-0.2l1.55,1.87l3.55-0.15l3.4-4.33l-0.2-2.57L510.81,154.7L510.81,154.7z","name":"Lithuania"},"by":{"path":"M510.66,166.29l1.5,2.47l-0.6,1.97l0.1,1.56l0.55,1.87l3.1-1.76l3.85,0.1l2.7,1.11h6.85l2-4.79l1.2-1.81v-1.21l-4.3-6.05l-3.8-1.51l-3.1-0.35l-2.7,0.86l0.1,2.72l-3.75,4.74L510.66,166.29L510.66,166.29z","name":"Belarus"},"pl":{"path":"M511.46,174.76l0.85,1.56l0.2,1.66l-0.7,1.61l-1.6,3.08l-1.35,0.61l-1.75-0.76l-1.05,0.05l-2.55,0.96l-2.9-0.86l-4.7-3.33l-4.6-2.47l-1.85-2.82l-0.35-6.65l3.6-3.13l4.7-1.56l1.75-0.2l-0.7,1.41l0.45,0.55l7.91,0.15l1.7-0.05l2.8,4.29l-0.7,1.76l0.3,2.07L511.46,174.76L511.46,174.76z","name":"Poland"},"it":{"path":"M477.56,213.38l-2.65,1.34l0.35,5.17l2.12,0.36l1.59-1.52v-4.9L477.56,213.38L477.56,213.38M472.27,196.98l-0.62,1.57l0.17,1.71l2.39,2.79l3.76-0.13l8.3,9.64l5.18,1.5l3.06,2.89l0.73,6.59l1.64-0.96l1.42-3.59l-0.35-2.58l2.43-0.22l0.35-1.46l-6.85-3.28l-6.5-6.39l-2.59-3.82l-0.63-3.63l3.31-0.79l-0.85-2.39l-2.03-1.71l-1.75-0.08l-2.44,0.67l-2.3,3.22l-1.39,0.92l-2.15-1.32L472.27,196.98L472.27,196.98M492.44,223.02l-1.45-0.78l-4.95,0.78l0.17,1.34l4.45,2.24l0.67,0.73l1.17,0.17L492.44,223.02L492.44,223.02z","name":"Italy"},"fr":{"path":"M477.83,206.96l-1.95,1.96l-0.18,1.78l1.59,0.98l0.62-0.09l0.35-2.59L477.83,206.96L477.83,206.96M460.4,178.7l-2.21,0.54l-4.42,4.81l-1.33,0.09l-1.77-1.25l-1.15,0.27l-0.88,2.76l-6.46,0.18l0.18,1.43l4.42,2.94l5.13,4.1l-0.09,4.9l-2.74,4.81l5.93,2.85l6.02,0.18l1.86-2.14l3.8,0.09l1.06,0.98l3.8-0.27l1.95-2.5l-2.48-2.94l-0.18-1.87l0.53-2.05l-1.24-1.78l-2.12,0.62l-0.27-1.6l4.69-5.17v-3.12l-3.1-1.78l-1.59-0.27L460.4,178.7L460.4,178.7z","name":"France"},"nl":{"path":"M470.09,168.27l-4.53,2.23l0.96,0.87l0.1,2.23l-0.96-0.19l-1.06-1.65l-2.53,4.01l3.89,0.81l1.45,1.53l0.77,0.02l0.51-3.46l2.45-1.03L470.09,168.27L470.09,168.27z","name":"Netherlands"},"be":{"path":"M461.61,176.52l-0.64,1.6l6.88,4.54l1.98,0.47l0.07-2.15l-1.73-1.94h-1.06l-1.45-1.65L461.61,176.52L461.61,176.52z","name":"Belgium"},"de":{"path":"M471.14,167.88l3.57-0.58v-2.52l2.99-0.49l1.64,1.65l1.73,0.19l2.7-1.17l2.41,0.68l2.12,1.84l0.29,6.89l2.12,2.82l-2.79,0.39l-4.63,2.91l0.39,0.97l4.14,3.88l-0.29,1.94l-3.85,1.94l-3.57,0.1l-0.87,1.84h-1.83l-0.87-1.94l-3.18-0.78l-0.1-3.2l-2.7-1.84l0.29-2.33l-1.83-2.52l0.48-3.3l2.5-1.17L471.14,167.88L471.14,167.88z","name":"Germany"},"dk":{"path":"M476.77,151.5l-4.15,4.59l-0.15,2.99l1.89,4.93l2.96-0.56l-0.37-4.03l2.04-2.28l-0.04-1.79l-1.44-3.73L476.77,151.5L476.77,151.5M481.44,159.64l-0.93-0.04l-1.22,1.12l0.15,1.75l2.89,0.08l0.15-1.98L481.44,159.64L481.44,159.64z","name":"Denmark"},"ch":{"path":"M472.91,189.38l-4.36,4.64l0.09,0.47l1.79-0.56l1.61,2.24l2.72-0.96l1.88,1.46l0.77-0.44l2.32-3.64l-0.59-0.56l-2.29-0.06l-1.11-2.27L472.91,189.38L472.91,189.38z","name":"Switzerland"},"cz":{"path":"M488.43,184.87h2.97h1.46l2.37,1.69l4.39-3.65l-4.26-3.04l-4.22-2.04l-2.89,0.52l-3.92,2.52L488.43,184.87L488.43,184.87z","name":"Czech Republic"},"sk":{"path":"M495.84,187.13l0.69,0.61l0.09,1.04l7.63-0.17l5.64-2.43l-0.09-2.47l-1.08,0.48l-1.55-0.83l-0.95-0.04l-2.5,1l-3.4-0.82L495.84,187.13L495.84,187.13z","name":"Slovakia"},"at":{"path":"M480.63,190.12l-0.65,1.35l0.56,0.96l2.33-0.48h1.98l2.15,1.82l4.57-0.83l3.36-2l0.86-1.35l-0.13-1.74l-3.02-2.26l-4.05,0.04l-0.34,2.3l-4.26,2.08L480.63,190.12L480.63,190.12z","name":"Austria"},"hu":{"path":"M496.74,189.6l-1.16,1.82l0.09,2.78l1.85,0.95l5.69,0.17l7.93-6.68l0.04-1.48l-0.86-0.43l-5.73,2.6L496.74,189.6L496.74,189.6z","name":"Hungary"},"si":{"path":"M494.8,191.99l-2.54,1.52l-4.74,1.04l0.95,2.74l3.32,0.04l3.06-2.56L494.8,191.99L494.8,191.99z","name":"Slovenia"},"hr":{"path":"M495.62,195.16l-3.53,2.91h-3.58l-0.43,2.52l1.64,0.43l0.82-1.22l1.29,1.13l1.03,3.6l7.07,3.3l0.7-0.8l-7.17-7.4l0.73-1.35l6.81-0.26l0.69-2.17l-4.44,0.13L495.62,195.16L495.62,195.16z","name":"Croatia"},"ba":{"path":"M494.8,198.94l-0.37,0.61l6.71,6.92l2.46-3.62l-0.09-1.43l-2.15-2.61L494.8,198.94L494.8,198.94z","name":"Bosnia and Herzegovina"},"mt":{"path":"M492.61,230.47l-1.67,0.34l0.06,1.85l1.5,0.5l0.67-0.56L492.61,230.47L492.61,230.47z","name":"Malta"},"ua":{"path":"M515.57,173.15l-2.9,1.63l0.72,3.08l-2.68,5.65l0.02,2.49l1.26,0.8l8.08,0.4l2.26-1.87l2.42,0.81l3.47,4.63l-2.54,4.56l3.02,0.88l3.95-4.55l2.26,0.41l2.1,1.46l-1.85,2.44l2.5,3.9h2.66l1.37-2.6l2.82-0.57l0.08-2.11l-5.24-0.81l0.16-2.27h5.08l5.48-4.39l2.42-2.11l0.4-6.66l-10.8-0.97l-4.43-6.25l-3.06-1.05l-3.71,0.16l-1.67,4.13l-7.6,0.1l-2.47-1.14L515.57,173.15L515.57,173.15z","name":"Ukraine"},"md":{"path":"M520.75,187.71l3.1,4.77l-0.26,2.7l1.11,0.05l2.63-4.45l-3.16-3.92l-1.79-0.74L520.75,187.71L520.75,187.71z","name":"Moldova"},"ro":{"path":"M512.18,187.6l-0.26,1.48l-5.79,4.82l4.84,7.1l3.1,2.17h5.58l1.84-1.54l2.47-0.32l1.84,1.11l3.26-3.71l-0.63-1.86l-3.31-0.85l-2.26-0.11l0.11-3.18l-3-4.72L512.18,187.6L512.18,187.6z","name":"Romania"},"rs":{"path":"M505.55,194.54l-2.05,1.54h-1l-0.68,2.12l2.42,2.81l0.16,2.23l-3,4.24l0.42,1.27l1.74,0.32l1.37-1.86l0.74-0.05l1.26,1.22l3.84-1.17l-0.32-5.46L505.55,194.54L505.55,194.54z","name":"Serbia"},"bg":{"path":"M511.44,202.39l0.16,4.98l1.68,3.5l6.31,0.11l2.84-2.01l2.79-1.11l-0.68-3.18l0.63-1.7l-1.42-0.74l-1.95,0.16l-1.53,1.54l-6.42,0.05L511.44,202.39L511.44,202.39z","name":"Bulgaria"},"al":{"path":"M504.02,209.76v4.61l1.32,2.49l0.95-0.11l1.63-2.97l-0.95-1.33l-0.37-3.29l-1.26-1.17L504.02,209.76L504.02,209.76z","name":"Albania"},"mk":{"path":"M510.92,208.01l-3.37,1.11l0.16,2.86l0.79,1.01l4-1.86L510.92,208.01L510.92,208.01z","name":"Macedonia"},"gr":{"path":"M506.71,217.6l-0.11,1.33l4.63,2.33l2.21,0.85l-1.16,1.22l-2.58,0.26l-0.37,1.17l0.89,2.01l2.89,1.54l1.26,0.11l0.16-3.45l1.89-2.28l-5.16-6.1l0.68-2.07l1.21-0.05l1.84,1.48l1.16-0.58l0.37-2.07l5.42,0.05l0.21-3.18l-2.26,1.59l-6.63-0.16l-4.31,2.23L506.71,217.6L506.71,217.6M516.76,230.59l1.63,0.05l0.68,1.01h2.37l1.58-0.58l0.53,0.64l-1.05,1.38l-4.63,0.16l-0.84-1.11l-0.89-0.53L516.76,230.59L516.76,230.59z","name":"Greece"}}}); diff --git a/public/admin/view/javascript/jquery/magnific/jquery.magnific-popup.js b/public/admin/view/javascript/jquery/magnific/jquery.magnific-popup.js new file mode 100644 index 0000000..927b3c1 --- /dev/null +++ b/public/admin/view/javascript/jquery/magnific/jquery.magnific-popup.js @@ -0,0 +1,1860 @@ +/*! Magnific Popup - v1.1.0 - 2016-02-20 +* http://dimsemenov.com/plugins/magnific-popup/ +* Copyright (c) 2016 Dmitry Semenov; */ +;(function (factory) { +if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS + factory(require('jquery')); + } else { + // Browser globals + factory(window.jQuery || window.Zepto); + } + }(function($) { + +/*>>core*/ +/** + * + * Magnific Popup Core JS file + * + */ + + +/** + * Private static constants + */ +var CLOSE_EVENT = 'Close', + BEFORE_CLOSE_EVENT = 'BeforeClose', + AFTER_CLOSE_EVENT = 'AfterClose', + BEFORE_APPEND_EVENT = 'BeforeAppend', + MARKUP_PARSE_EVENT = 'MarkupParse', + OPEN_EVENT = 'Open', + CHANGE_EVENT = 'Change', + NS = 'mfp', + EVENT_NS = '.' + NS, + READY_CLASS = 'mfp-ready', + REMOVING_CLASS = 'mfp-removing', + PREVENT_CLOSE_CLASS = 'mfp-prevent-close'; + + +/** + * Private vars + */ +/*jshint -W079 */ +var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this' + MagnificPopup = function(){}, + _isJQ = !!(window.jQuery), + _prevStatus, + _window = $(window), + _document, + _prevContentType, + _wrapClasses, + _currPopupType; + + +/** + * Private functions + */ +var _mfpOn = function(name, f) { + mfp.ev.on(NS + name + EVENT_NS, f); + }, + _getEl = function(className, appendTo, html, raw) { + var el = document.createElement('div'); + el.className = 'mfp-'+className; + if(html) { + el.innerHTML = html; + } + if(!raw) { + el = $(el); + if(appendTo) { + el.appendTo(appendTo); + } + } else if(appendTo) { + appendTo.appendChild(el); + } + return el; + }, + _mfpTrigger = function(e, data) { + mfp.ev.triggerHandler(NS + e, data); + + if(mfp.st.callbacks) { + // converts "mfpEventName" to "eventName" callback and triggers it if it's present + e = e.charAt(0).toLowerCase() + e.slice(1); + if(mfp.st.callbacks[e]) { + mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]); + } + } + }, + _getCloseBtn = function(type) { + if(type !== _currPopupType || !mfp.currTemplate.closeBtn) { + mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) ); + _currPopupType = type; + } + return mfp.currTemplate.closeBtn; + }, + // Initialize Magnific Popup only when called at least once + _checkInstance = function() { + if(!$.magnificPopup.instance) { + /*jshint -W020 */ + mfp = new MagnificPopup(); + mfp.init(); + $.magnificPopup.instance = mfp; + } + }, + // CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr + supportsTransitions = function() { + var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist + v = ['ms','O','Moz','Webkit']; // 'v' for vendor + + if( s['transition'] !== undefined ) { + return true; + } + + while( v.length ) { + if( v.pop() + 'Transition' in s ) { + return true; + } + } + + return false; + }; + + + +/** + * Public functions + */ +MagnificPopup.prototype = { + + constructor: MagnificPopup, + + /** + * Initializes Magnific Popup plugin. + * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed + */ + init: function() { + var appVersion = navigator.appVersion; + mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener; + mfp.isAndroid = (/android/gi).test(appVersion); + mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion); + mfp.supportsTransition = supportsTransitions(); + + // We disable fixed positioned lightbox on devices that don't handle it nicely. + // If you know a better way of detecting this - let me know. + mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) ); + _document = $(document); + + mfp.popupsCache = {}; + }, + + /** + * Opens popup + * @param data [description] + */ + open: function(data) { + + var i; + + if(data.isObj === false) { + // convert jQuery collection to array to avoid conflicts later + mfp.items = data.items.toArray(); + + mfp.index = 0; + var items = data.items, + item; + for(i = 0; i < items.length; i++) { + item = items[i]; + if(item.parsed) { + item = item.el[0]; + } + if(item === data.el[0]) { + mfp.index = i; + break; + } + } + } else { + mfp.items = $.isArray(data.items) ? data.items : [data.items]; + mfp.index = data.index || 0; + } + + // if popup is already opened - we just update the content + if(mfp.isOpen) { + mfp.updateItemHTML(); + return; + } + + mfp.types = []; + _wrapClasses = ''; + if(data.mainEl && data.mainEl.length) { + mfp.ev = data.mainEl.eq(0); + } else { + mfp.ev = _document; + } + + if(data.key) { + if(!mfp.popupsCache[data.key]) { + mfp.popupsCache[data.key] = {}; + } + mfp.currTemplate = mfp.popupsCache[data.key]; + } else { + mfp.currTemplate = {}; + } + + + + mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); + mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos; + + if(mfp.st.modal) { + mfp.st.closeOnContentClick = false; + mfp.st.closeOnBgClick = false; + mfp.st.showCloseBtn = false; + mfp.st.enableEscapeKey = false; + } + + + // Building markup + // main containers are created only once + if(!mfp.bgOverlay) { + + // Dark overlay + mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() { + mfp.close(); + }); + + mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) { + if(mfp._checkIfClose(e.target)) { + mfp.close(); + } + }); + + mfp.container = _getEl('container', mfp.wrap); + } + + mfp.contentContainer = _getEl('content'); + if(mfp.st.preloader) { + mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading); + } + + + // Initializing modules + var modules = $.magnificPopup.modules; + for(i = 0; i < modules.length; i++) { + var n = modules[i]; + n = n.charAt(0).toUpperCase() + n.slice(1); + mfp['init'+n].call(mfp); + } + _mfpTrigger('BeforeOpen'); + + + if(mfp.st.showCloseBtn) { + // Close button + if(!mfp.st.closeBtnInside) { + mfp.wrap.append( _getCloseBtn() ); + } else { + _mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) { + values.close_replaceWith = _getCloseBtn(item.type); + }); + _wrapClasses += ' mfp-close-btn-in'; + } + } + + if(mfp.st.alignTop) { + _wrapClasses += ' mfp-align-top'; + } + + + + if(mfp.fixedContentPos) { + mfp.wrap.css({ + overflow: mfp.st.overflowY, + overflowX: 'hidden', + overflowY: mfp.st.overflowY + }); + } else { + mfp.wrap.css({ + top: _window.scrollTop(), + position: 'absolute' + }); + } + if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) { + mfp.bgOverlay.css({ + height: _document.height(), + position: 'absolute' + }); + } + + + + if(mfp.st.enableEscapeKey) { + // Close on ESC key + _document.on('keyup' + EVENT_NS, function(e) { + if(e.keyCode === 27) { + mfp.close(); + } + }); + } + + _window.on('resize' + EVENT_NS, function() { + mfp.updateSize(); + }); + + + if(!mfp.st.closeOnContentClick) { + _wrapClasses += ' mfp-auto-cursor'; + } + + if(_wrapClasses) + mfp.wrap.addClass(_wrapClasses); + + + // this triggers recalculation of layout, so we get it once to not to trigger twice + var windowHeight = mfp.wH = _window.height(); + + + var windowStyles = {}; + + if( mfp.fixedContentPos ) { + if(mfp._hasScrollBar(windowHeight)){ + var s = mfp._getScrollbarSize(); + if(s) { + windowStyles.marginRight = s; + } + } + } + + if(mfp.fixedContentPos) { + if(!mfp.isIE7) { + windowStyles.overflow = 'hidden'; + } else { + // ie7 double-scroll bug + $('body, html').css('overflow', 'hidden'); + } + } + + + + var classesToadd = mfp.st.mainClass; + if(mfp.isIE7) { + classesToadd += ' mfp-ie7'; + } + if(classesToadd) { + mfp._addClassToMFP( classesToadd ); + } + + // add content + mfp.updateItemHTML(); + + _mfpTrigger('BuildControls'); + + // remove scrollbar, add margin e.t.c + $('html').css(windowStyles); + + // add everything to DOM + mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) ); + + // Save last focused element + mfp._lastFocusedEl = document.activeElement; + + // Wait for next cycle to allow CSS transition + setTimeout(function() { + + if(mfp.content) { + mfp._addClassToMFP(READY_CLASS); + mfp._setFocus(); + } else { + // if content is not defined (not loaded e.t.c) we add class only for BG + mfp.bgOverlay.addClass(READY_CLASS); + } + + // Trap the focus in popup + _document.on('focusin' + EVENT_NS, mfp._onFocusIn); + + }, 16); + + mfp.isOpen = true; + mfp.updateSize(windowHeight); + _mfpTrigger(OPEN_EVENT); + + return data; + }, + + /** + * Closes the popup + */ + close: function() { + if(!mfp.isOpen) return; + _mfpTrigger(BEFORE_CLOSE_EVENT); + + mfp.isOpen = false; + // for CSS3 animation + if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) { + mfp._addClassToMFP(REMOVING_CLASS); + setTimeout(function() { + mfp._close(); + }, mfp.st.removalDelay); + } else { + mfp._close(); + } + }, + + /** + * Helper for close() function + */ + _close: function() { + _mfpTrigger(CLOSE_EVENT); + + var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' '; + + mfp.bgOverlay.detach(); + mfp.wrap.detach(); + mfp.container.empty(); + + if(mfp.st.mainClass) { + classesToRemove += mfp.st.mainClass + ' '; + } + + mfp._removeClassFromMFP(classesToRemove); + + if(mfp.fixedContentPos) { + var windowStyles = {marginRight: ''}; + if(mfp.isIE7) { + $('body, html').css('overflow', ''); + } else { + windowStyles.overflow = ''; + } + $('html').css(windowStyles); + } + + _document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS); + mfp.ev.off(EVENT_NS); + + // clean up DOM elements that aren't removed + mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style'); + mfp.bgOverlay.attr('class', 'mfp-bg'); + mfp.container.attr('class', 'mfp-container'); + + // remove close button from target element + if(mfp.st.showCloseBtn && + (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) { + if(mfp.currTemplate.closeBtn) + mfp.currTemplate.closeBtn.detach(); + } + + + if(mfp.st.autoFocusLast && mfp._lastFocusedEl) { + $(mfp._lastFocusedEl).focus(); // put tab focus back + } + mfp.currItem = null; + mfp.content = null; + mfp.currTemplate = null; + mfp.prevHeight = 0; + + _mfpTrigger(AFTER_CLOSE_EVENT); + }, + + updateSize: function(winHeight) { + + if(mfp.isIOS) { + // fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2 + var zoomLevel = document.documentElement.clientWidth / window.innerWidth; + var height = window.innerHeight * zoomLevel; + mfp.wrap.css('height', height); + mfp.wH = height; + } else { + mfp.wH = winHeight || _window.height(); + } + // Fixes #84: popup incorrectly positioned with position:relative on body + if(!mfp.fixedContentPos) { + mfp.wrap.css('height', mfp.wH); + } + + _mfpTrigger('Resize'); + + }, + + /** + * Set content of popup based on current index + */ + updateItemHTML: function() { + var item = mfp.items[mfp.index]; + + // Detach and perform modifications + mfp.contentContainer.detach(); + + if(mfp.content) + mfp.content.detach(); + + if(!item.parsed) { + item = mfp.parseEl( mfp.index ); + } + + var type = item.type; + + _mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]); + // BeforeChange event works like so: + // _mfpOn('BeforeChange', function(e, prevType, newType) { }); + + mfp.currItem = item; + + if(!mfp.currTemplate[type]) { + var markup = mfp.st[type] ? mfp.st[type].markup : false; + + // allows to modify markup + _mfpTrigger('FirstMarkupParse', markup); + + if(markup) { + mfp.currTemplate[type] = $(markup); + } else { + // if there is no markup found we just define that template is parsed + mfp.currTemplate[type] = true; + } + } + + if(_prevContentType && _prevContentType !== item.type) { + mfp.container.removeClass('mfp-'+_prevContentType+'-holder'); + } + + var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]); + mfp.appendContent(newContent, type); + + item.preloaded = true; + + _mfpTrigger(CHANGE_EVENT, item); + _prevContentType = item.type; + + // Append container back after its content changed + mfp.container.prepend(mfp.contentContainer); + + _mfpTrigger('AfterChange'); + }, + + + /** + * Set HTML content of popup + */ + appendContent: function(newContent, type) { + mfp.content = newContent; + + if(newContent) { + if(mfp.st.showCloseBtn && mfp.st.closeBtnInside && + mfp.currTemplate[type] === true) { + // if there is no markup, we just append close button element inside + if(!mfp.content.find('.mfp-close').length) { + mfp.content.append(_getCloseBtn()); + } + } else { + mfp.content = newContent; + } + } else { + mfp.content = ''; + } + + _mfpTrigger(BEFORE_APPEND_EVENT); + mfp.container.addClass('mfp-'+type+'-holder'); + + mfp.contentContainer.append(mfp.content); + }, + + + /** + * Creates Magnific Popup data object based on given data + * @param {int} index Index of item to parse + */ + parseEl: function(index) { + var item = mfp.items[index], + type; + + if(item.tagName) { + item = { el: $(item) }; + } else { + type = item.type; + item = { data: item, src: item.src }; + } + + if(item.el) { + var types = mfp.types; + + // check for 'mfp-TYPE' class + for(var i = 0; i < types.length; i++) { + if( item.el.hasClass('mfp-'+types[i]) ) { + type = types[i]; + break; + } + } + + item.src = item.el.attr('data-mfp-src'); + if(!item.src) { + item.src = item.el.attr('href'); + } + } + + item.type = type || mfp.st.type || 'inline'; + item.index = index; + item.parsed = true; + mfp.items[index] = item; + _mfpTrigger('ElementParse', item); + + return mfp.items[index]; + }, + + + /** + * Initializes single popup or a group of popups + */ + addGroup: function(el, options) { + var eHandler = function(e) { + e.mfpEl = this; + mfp._openClick(e, el, options); + }; + + if(!options) { + options = {}; + } + + var eName = 'click.magnificPopup'; + options.mainEl = el; + + if(options.items) { + options.isObj = true; + el.off(eName).on(eName, eHandler); + } else { + options.isObj = false; + if(options.delegate) { + el.off(eName).on(eName, options.delegate , eHandler); + } else { + options.items = el; + el.off(eName).on(eName, eHandler); + } + } + }, + _openClick: function(e, el, options) { + var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick; + + + if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) { + return; + } + + var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn; + + if(disableOn) { + if($.isFunction(disableOn)) { + if( !disableOn.call(mfp) ) { + return true; + } + } else { // else it's number + if( _window.width() < disableOn ) { + return true; + } + } + } + + if(e.type) { + e.preventDefault(); + + // This will prevent popup from closing if element is inside and popup is already opened + if(mfp.isOpen) { + e.stopPropagation(); + } + } + + options.el = $(e.mfpEl); + if(options.delegate) { + options.items = el.find(options.delegate); + } + mfp.open(options); + }, + + + /** + * Updates text on preloader + */ + updateStatus: function(status, text) { + + if(mfp.preloader) { + if(_prevStatus !== status) { + mfp.container.removeClass('mfp-s-'+_prevStatus); + } + + if(!text && status === 'loading') { + text = mfp.st.tLoading; + } + + var data = { + status: status, + text: text + }; + // allows to modify status + _mfpTrigger('UpdateStatus', data); + + status = data.status; + text = data.text; + + mfp.preloader.html(text); + + mfp.preloader.find('a').on('click', function(e) { + e.stopImmediatePropagation(); + }); + + mfp.container.addClass('mfp-s-'+status); + _prevStatus = status; + } + }, + + + /* + "Private" helpers that aren't private at all + */ + // Check to close popup or not + // "target" is an element that was clicked + _checkIfClose: function(target) { + + if($(target).hasClass(PREVENT_CLOSE_CLASS)) { + return; + } + + var closeOnContent = mfp.st.closeOnContentClick; + var closeOnBg = mfp.st.closeOnBgClick; + + if(closeOnContent && closeOnBg) { + return true; + } else { + + // We close the popup if click is on close button or on preloader. Or if there is no content. + if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) { + return true; + } + + // if click is outside the content + if( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) { + if(closeOnBg) { + // last check, if the clicked element is in DOM, (in case it's removed onclick) + if( $.contains(document, target) ) { + return true; + } + } + } else if(closeOnContent) { + return true; + } + + } + return false; + }, + _addClassToMFP: function(cName) { + mfp.bgOverlay.addClass(cName); + mfp.wrap.addClass(cName); + }, + _removeClassFromMFP: function(cName) { + this.bgOverlay.removeClass(cName); + mfp.wrap.removeClass(cName); + }, + _hasScrollBar: function(winHeight) { + return ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) ); + }, + _setFocus: function() { + (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus(); + }, + _onFocusIn: function(e) { + if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) { + mfp._setFocus(); + return false; + } + }, + _parseMarkup: function(template, values, item) { + var arr; + if(item.data) { + values = $.extend(item.data, values); + } + _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] ); + + $.each(values, function(key, value) { + if(value === undefined || value === false) { + return true; + } + arr = key.split('_'); + if(arr.length > 1) { + var el = template.find(EVENT_NS + '-'+arr[0]); + + if(el.length > 0) { + var attr = arr[1]; + if(attr === 'replaceWith') { + if(el[0] !== value[0]) { + el.replaceWith(value); + } + } else if(attr === 'img') { + if(el.is('img')) { + el.attr('src', value); + } else { + el.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) ); + } + } else { + el.attr(arr[1], value); + } + } + + } else { + template.find(EVENT_NS + '-'+key).html(value); + } + }); + }, + + _getScrollbarSize: function() { + // thx David + if(mfp.scrollbarSize === undefined) { + var scrollDiv = document.createElement("div"); + scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;'; + document.body.appendChild(scrollDiv); + mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + } + return mfp.scrollbarSize; + } + +}; /* MagnificPopup core prototype end */ + + + + +/** + * Public static functions + */ +$.magnificPopup = { + instance: null, + proto: MagnificPopup.prototype, + modules: [], + + open: function(options, index) { + _checkInstance(); + + if(!options) { + options = {}; + } else { + options = $.extend(true, {}, options); + } + + options.isObj = true; + options.index = index || 0; + return this.instance.open(options); + }, + + close: function() { + return $.magnificPopup.instance && $.magnificPopup.instance.close(); + }, + + registerModule: function(name, module) { + if(module.options) { + $.magnificPopup.defaults[name] = module.options; + } + $.extend(this.proto, module.proto); + this.modules.push(name); + }, + + defaults: { + + // Info about options is in docs: + // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options + + disableOn: 0, + + key: null, + + midClick: false, + + mainClass: '', + + preloader: true, + + focus: '', // CSS selector of input to focus after popup is opened + + closeOnContentClick: false, + + closeOnBgClick: true, + + closeBtnInside: true, + + showCloseBtn: true, + + enableEscapeKey: true, + + modal: false, + + alignTop: false, + + removalDelay: 0, + + prependTo: null, + + fixedContentPos: 'auto', + + fixedBgPos: 'auto', + + overflowY: 'auto', + + closeMarkup: '<button title="%title%" type="button" class="mfp-close">×</button>', + + tClose: 'Close (Esc)', + + tLoading: 'Loading...', + + autoFocusLast: true + + } +}; + + + +$.fn.magnificPopup = function(options) { + _checkInstance(); + + var jqEl = $(this); + + // We call some API method of first param is a string + if (typeof options === "string" ) { + + if(options === 'open') { + var items, + itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup, + index = parseInt(arguments[1], 10) || 0; + + if(itemOpts.items) { + items = itemOpts.items[index]; + } else { + items = jqEl; + if(itemOpts.delegate) { + items = items.find(itemOpts.delegate); + } + items = items.eq( index ); + } + mfp._openClick({mfpEl:items}, jqEl, itemOpts); + } else { + if(mfp.isOpen) + mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1)); + } + + } else { + // clone options obj + options = $.extend(true, {}, options); + + /* + * As Zepto doesn't support .data() method for objects + * and it works only in normal browsers + * we assign "options" object directly to the DOM element. FTW! + */ + if(_isJQ) { + jqEl.data('magnificPopup', options); + } else { + jqEl[0].magnificPopup = options; + } + + mfp.addGroup(jqEl, options); + + } + return jqEl; +}; + +/*>>core*/ + +/*>>inline*/ + +var INLINE_NS = 'inline', + _hiddenClass, + _inlinePlaceholder, + _lastInlineElement, + _putInlineElementsBack = function() { + if(_lastInlineElement) { + _inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach(); + _lastInlineElement = null; + } + }; + +$.magnificPopup.registerModule(INLINE_NS, { + options: { + hiddenClass: 'hide', // will be appended with `mfp-` prefix + markup: '', + tNotFound: 'Content not found' + }, + proto: { + + initInline: function() { + mfp.types.push(INLINE_NS); + + _mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() { + _putInlineElementsBack(); + }); + }, + + getInline: function(item, template) { + + _putInlineElementsBack(); + + if(item.src) { + var inlineSt = mfp.st.inline, + el = $(item.src); + + if(el.length) { + + // If target element has parent - we replace it with placeholder and put it back after popup is closed + var parent = el[0].parentNode; + if(parent && parent.tagName) { + if(!_inlinePlaceholder) { + _hiddenClass = inlineSt.hiddenClass; + _inlinePlaceholder = _getEl(_hiddenClass); + _hiddenClass = 'mfp-'+_hiddenClass; + } + // replace target inline element with placeholder + _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass); + } + + mfp.updateStatus('ready'); + } else { + mfp.updateStatus('error', inlineSt.tNotFound); + el = $('<div>'); + } + + item.inlineElement = el; + return el; + } + + mfp.updateStatus('ready'); + mfp._parseMarkup(template, {}, item); + return template; + } + } +}); + +/*>>inline*/ + +/*>>ajax*/ +var AJAX_NS = 'ajax', + _ajaxCur, + _removeAjaxCursor = function() { + if(_ajaxCur) { + $(document.body).removeClass(_ajaxCur); + } + }, + _destroyAjaxRequest = function() { + _removeAjaxCursor(); + if(mfp.req) { + mfp.req.abort(); + } + }; + +$.magnificPopup.registerModule(AJAX_NS, { + + options: { + settings: null, + cursor: 'mfp-ajax-cur', + tError: '<a href="%url%">The content</a> could not be loaded.' + }, + + proto: { + initAjax: function() { + mfp.types.push(AJAX_NS); + _ajaxCur = mfp.st.ajax.cursor; + + _mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest); + _mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest); + }, + getAjax: function(item) { + + if(_ajaxCur) { + $(document.body).addClass(_ajaxCur); + } + + mfp.updateStatus('loading'); + + var opts = $.extend({ + url: item.src, + success: function(data, textStatus, jqXHR) { + var temp = { + data:data, + xhr:jqXHR + }; + + _mfpTrigger('ParseAjax', temp); + + mfp.appendContent( $(temp.data), AJAX_NS ); + + item.finished = true; + + _removeAjaxCursor(); + + mfp._setFocus(); + + setTimeout(function() { + mfp.wrap.addClass(READY_CLASS); + }, 16); + + mfp.updateStatus('ready'); + + _mfpTrigger('AjaxContentAdded'); + }, + error: function() { + _removeAjaxCursor(); + item.finished = item.loadError = true; + mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src)); + } + }, mfp.st.ajax.settings); + + mfp.req = $.ajax(opts); + + return ''; + } + } +}); + +/*>>ajax*/ + +/*>>image*/ +var _imgInterval, + _getTitle = function(item) { + if(item.data && item.data.title !== undefined) + return item.data.title; + + var src = mfp.st.image.titleSrc; + + if(src) { + if($.isFunction(src)) { + return src.call(mfp, item); + } else if(item.el) { + return item.el.attr(src) || ''; + } + } + return ''; + }; + +$.magnificPopup.registerModule('image', { + + options: { + markup: '<div class="mfp-figure">'+ + '<div class="mfp-close"></div>'+ + '<figure>'+ + '<div class="mfp-img"></div>'+ + '<figcaption>'+ + '<div class="mfp-bottom-bar">'+ + '<div class="mfp-title"></div>'+ + '<div class="mfp-counter"></div>'+ + '</div>'+ + '</figcaption>'+ + '</figure>'+ + '</div>', + cursor: 'mfp-zoom-out-cur', + titleSrc: 'title', + verticalFit: true, + tError: '<a href="%url%">The image</a> could not be loaded.' + }, + + proto: { + initImage: function() { + var imgSt = mfp.st.image, + ns = '.image'; + + mfp.types.push('image'); + + _mfpOn(OPEN_EVENT+ns, function() { + if(mfp.currItem.type === 'image' && imgSt.cursor) { + $(document.body).addClass(imgSt.cursor); + } + }); + + _mfpOn(CLOSE_EVENT+ns, function() { + if(imgSt.cursor) { + $(document.body).removeClass(imgSt.cursor); + } + _window.off('resize' + EVENT_NS); + }); + + _mfpOn('Resize'+ns, mfp.resizeImage); + if(mfp.isLowIE) { + _mfpOn('AfterChange', mfp.resizeImage); + } + }, + resizeImage: function() { + var item = mfp.currItem; + if(!item || !item.img) return; + + if(mfp.st.image.verticalFit) { + var decr = 0; + // fix box-sizing in ie7/8 + if(mfp.isLowIE) { + decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10); + } + item.img.css('max-height', mfp.wH-decr); + } + }, + _onImageHasSize: function(item) { + if(item.img) { + + item.hasSize = true; + + if(_imgInterval) { + clearInterval(_imgInterval); + } + + item.isCheckingImgSize = false; + + _mfpTrigger('ImageHasSize', item); + + if(item.imgHidden) { + if(mfp.content) + mfp.content.removeClass('mfp-loading'); + + item.imgHidden = false; + } + + } + }, + + /** + * Function that loops until the image has size to display elements that rely on it asap + */ + findImageSize: function(item) { + + var counter = 0, + img = item.img[0], + mfpSetInterval = function(delay) { + + if(_imgInterval) { + clearInterval(_imgInterval); + } + // decelerating interval that checks for size of an image + _imgInterval = setInterval(function() { + if(img.naturalWidth > 0) { + mfp._onImageHasSize(item); + return; + } + + if(counter > 200) { + clearInterval(_imgInterval); + } + + counter++; + if(counter === 3) { + mfpSetInterval(10); + } else if(counter === 40) { + mfpSetInterval(50); + } else if(counter === 100) { + mfpSetInterval(500); + } + }, delay); + }; + + mfpSetInterval(1); + }, + + getImage: function(item, template) { + + var guard = 0, + + // image load complete handler + onLoadComplete = function() { + if(item) { + if (item.img[0].complete) { + item.img.off('.mfploader'); + + if(item === mfp.currItem){ + mfp._onImageHasSize(item); + + mfp.updateStatus('ready'); + } + + item.hasSize = true; + item.loaded = true; + + _mfpTrigger('ImageLoadComplete'); + + } + else { + // if image complete check fails 200 times (20 sec), we assume that there was an error. + guard++; + if(guard < 200) { + setTimeout(onLoadComplete,100); + } else { + onLoadError(); + } + } + } + }, + + // image error handler + onLoadError = function() { + if(item) { + item.img.off('.mfploader'); + if(item === mfp.currItem){ + mfp._onImageHasSize(item); + mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) ); + } + + item.hasSize = true; + item.loaded = true; + item.loadError = true; + } + }, + imgSt = mfp.st.image; + + + var el = template.find('.mfp-img'); + if(el.length) { + var img = document.createElement('img'); + img.className = 'mfp-img'; + if(item.el && item.el.find('img').length) { + img.alt = item.el.find('img').attr('alt'); + } + item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError); + img.src = item.src; + + // without clone() "error" event is not firing when IMG is replaced by new IMG + // TODO: find a way to avoid such cloning + if(el.is('img')) { + item.img = item.img.clone(); + } + + img = item.img[0]; + if(img.naturalWidth > 0) { + item.hasSize = true; + } else if(!img.width) { + item.hasSize = false; + } + } + + mfp._parseMarkup(template, { + title: _getTitle(item), + img_replaceWith: item.img + }, item); + + mfp.resizeImage(); + + if(item.hasSize) { + if(_imgInterval) clearInterval(_imgInterval); + + if(item.loadError) { + template.addClass('mfp-loading'); + mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) ); + } else { + template.removeClass('mfp-loading'); + mfp.updateStatus('ready'); + } + return template; + } + + mfp.updateStatus('loading'); + item.loading = true; + + if(!item.hasSize) { + item.imgHidden = true; + template.addClass('mfp-loading'); + mfp.findImageSize(item); + } + + return template; + } + } +}); + +/*>>image*/ + +/*>>zoom*/ +var hasMozTransform, + getHasMozTransform = function() { + if(hasMozTransform === undefined) { + hasMozTransform = document.createElement('p').style.MozTransform !== undefined; + } + return hasMozTransform; + }; + +$.magnificPopup.registerModule('zoom', { + + options: { + enabled: false, + easing: 'ease-in-out', + duration: 300, + opener: function(element) { + return element.is('img') ? element : element.find('img'); + } + }, + + proto: { + + initZoom: function() { + var zoomSt = mfp.st.zoom, + ns = '.zoom', + image; + + if(!zoomSt.enabled || !mfp.supportsTransition) { + return; + } + + var duration = zoomSt.duration, + getElToAnimate = function(image) { + var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'), + transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing, + cssObj = { + position: 'fixed', + zIndex: 9999, + left: 0, + top: 0, + '-webkit-backface-visibility': 'hidden' + }, + t = 'transition'; + + cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition; + + newImg.css(cssObj); + return newImg; + }, + showMainContent = function() { + mfp.content.css('visibility', 'visible'); + }, + openTimeout, + animatedImg; + + _mfpOn('BuildControls'+ns, function() { + if(mfp._allowZoom()) { + + clearTimeout(openTimeout); + mfp.content.css('visibility', 'hidden'); + + // Basically, all code below does is clones existing image, puts in on top of the current one and animated it + + image = mfp._getItemToZoom(); + + if(!image) { + showMainContent(); + return; + } + + animatedImg = getElToAnimate(image); + + animatedImg.css( mfp._getOffset() ); + + mfp.wrap.append(animatedImg); + + openTimeout = setTimeout(function() { + animatedImg.css( mfp._getOffset( true ) ); + openTimeout = setTimeout(function() { + + showMainContent(); + + setTimeout(function() { + animatedImg.remove(); + image = animatedImg = null; + _mfpTrigger('ZoomAnimationEnded'); + }, 16); // avoid blink when switching images + + }, duration); // this timeout equals animation duration + + }, 16); // by adding this timeout we avoid short glitch at the beginning of animation + + + // Lots of timeouts... + } + }); + _mfpOn(BEFORE_CLOSE_EVENT+ns, function() { + if(mfp._allowZoom()) { + + clearTimeout(openTimeout); + + mfp.st.removalDelay = duration; + + if(!image) { + image = mfp._getItemToZoom(); + if(!image) { + return; + } + animatedImg = getElToAnimate(image); + } + + animatedImg.css( mfp._getOffset(true) ); + mfp.wrap.append(animatedImg); + mfp.content.css('visibility', 'hidden'); + + setTimeout(function() { + animatedImg.css( mfp._getOffset() ); + }, 16); + } + + }); + + _mfpOn(CLOSE_EVENT+ns, function() { + if(mfp._allowZoom()) { + showMainContent(); + if(animatedImg) { + animatedImg.remove(); + } + image = null; + } + }); + }, + + _allowZoom: function() { + return mfp.currItem.type === 'image'; + }, + + _getItemToZoom: function() { + if(mfp.currItem.hasSize) { + return mfp.currItem.img; + } else { + return false; + } + }, + + // Get element postion relative to viewport + _getOffset: function(isLarge) { + var el; + if(isLarge) { + el = mfp.currItem.img; + } else { + el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem); + } + + var offset = el.offset(); + var paddingTop = parseInt(el.css('padding-top'),10); + var paddingBottom = parseInt(el.css('padding-bottom'),10); + offset.top -= ( $(window).scrollTop() - paddingTop ); + + + /* + + Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa. + + */ + var obj = { + width: el.width(), + // fix Zepto height+padding issue + height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop + }; + + // I hate to do this, but there is no another option + if( getHasMozTransform() ) { + obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)'; + } else { + obj.left = offset.left; + obj.top = offset.top; + } + return obj; + } + + } +}); + + + +/*>>zoom*/ + +/*>>iframe*/ + +var IFRAME_NS = 'iframe', + _emptyPage = '//about:blank', + + _fixIframeBugs = function(isShowing) { + if(mfp.currTemplate[IFRAME_NS]) { + var el = mfp.currTemplate[IFRAME_NS].find('iframe'); + if(el.length) { + // reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug + if(!isShowing) { + el[0].src = _emptyPage; + } + + // IE8 black screen bug fix + if(mfp.isIE8) { + el.css('display', isShowing ? 'block' : 'none'); + } + } + } + }; + +$.magnificPopup.registerModule(IFRAME_NS, { + + options: { + markup: '<div class="mfp-iframe-scaler">'+ + '<div class="mfp-close"></div>'+ + '<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>'+ + '</div>', + + srcAction: 'iframe_src', + + // we don't care and support only one default type of URL by default + patterns: { + youtube: { + index: 'youtube.com', + id: 'v=', + src: '//www.youtube.com/embed/%id%?autoplay=1' + }, + vimeo: { + index: 'vimeo.com/', + id: '/', + src: '//player.vimeo.com/video/%id%?autoplay=1' + }, + gmaps: { + index: '//maps.google.', + src: '%id%&output=embed' + } + } + }, + + proto: { + initIframe: function() { + mfp.types.push(IFRAME_NS); + + _mfpOn('BeforeChange', function(e, prevType, newType) { + if(prevType !== newType) { + if(prevType === IFRAME_NS) { + _fixIframeBugs(); // iframe if removed + } else if(newType === IFRAME_NS) { + _fixIframeBugs(true); // iframe is showing + } + }// else { + // iframe source is switched, don't do anything + //} + }); + + _mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() { + _fixIframeBugs(); + }); + }, + + getIframe: function(item, template) { + var embedSrc = item.src; + var iframeSt = mfp.st.iframe; + + $.each(iframeSt.patterns, function() { + if(embedSrc.indexOf( this.index ) > -1) { + if(this.id) { + if(typeof this.id === 'string') { + embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length); + } else { + embedSrc = this.id.call( this, embedSrc ); + } + } + embedSrc = this.src.replace('%id%', embedSrc ); + return false; // break; + } + }); + + var dataObj = {}; + if(iframeSt.srcAction) { + dataObj[iframeSt.srcAction] = embedSrc; + } + mfp._parseMarkup(template, dataObj, item); + + mfp.updateStatus('ready'); + + return template; + } + } +}); + + + +/*>>iframe*/ + +/*>>gallery*/ +/** + * Get looped index depending on number of slides + */ +var _getLoopedId = function(index) { + var numSlides = mfp.items.length; + if(index > numSlides - 1) { + return index - numSlides; + } else if(index < 0) { + return numSlides + index; + } + return index; + }, + _replaceCurrTotal = function(text, curr, total) { + return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total); + }; + +$.magnificPopup.registerModule('gallery', { + + options: { + enabled: false, + arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>', + preload: [0,2], + navigateByImgClick: true, + arrows: true, + + tPrev: 'Previous (Left arrow key)', + tNext: 'Next (Right arrow key)', + tCounter: '%curr% of %total%' + }, + + proto: { + initGallery: function() { + + var gSt = mfp.st.gallery, + ns = '.mfp-gallery'; + + mfp.direction = true; // true - next, false - prev + + if(!gSt || !gSt.enabled ) return false; + + _wrapClasses += ' mfp-gallery'; + + _mfpOn(OPEN_EVENT+ns, function() { + + if(gSt.navigateByImgClick) { + mfp.wrap.on('click'+ns, '.mfp-img', function() { + if(mfp.items.length > 1) { + mfp.next(); + return false; + } + }); + } + + _document.on('keydown'+ns, function(e) { + if (e.keyCode === 37) { + mfp.prev(); + } else if (e.keyCode === 39) { + mfp.next(); + } + }); + }); + + _mfpOn('UpdateStatus'+ns, function(e, data) { + if(data.text) { + data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length); + } + }); + + _mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) { + var l = mfp.items.length; + values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : ''; + }); + + _mfpOn('BuildControls' + ns, function() { + if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) { + var markup = gSt.arrowMarkup, + arrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS), + arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS); + + arrowLeft.click(function() { + mfp.prev(); + }); + arrowRight.click(function() { + mfp.next(); + }); + + mfp.container.append(arrowLeft.add(arrowRight)); + } + }); + + _mfpOn(CHANGE_EVENT+ns, function() { + if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout); + + mfp._preloadTimeout = setTimeout(function() { + mfp.preloadNearbyImages(); + mfp._preloadTimeout = null; + }, 16); + }); + + + _mfpOn(CLOSE_EVENT+ns, function() { + _document.off(ns); + mfp.wrap.off('click'+ns); + mfp.arrowRight = mfp.arrowLeft = null; + }); + + }, + next: function() { + mfp.direction = true; + mfp.index = _getLoopedId(mfp.index + 1); + mfp.updateItemHTML(); + }, + prev: function() { + mfp.direction = false; + mfp.index = _getLoopedId(mfp.index - 1); + mfp.updateItemHTML(); + }, + goTo: function(newIndex) { + mfp.direction = (newIndex >= mfp.index); + mfp.index = newIndex; + mfp.updateItemHTML(); + }, + preloadNearbyImages: function() { + var p = mfp.st.gallery.preload, + preloadBefore = Math.min(p[0], mfp.items.length), + preloadAfter = Math.min(p[1], mfp.items.length), + i; + + for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) { + mfp._preloadItem(mfp.index+i); + } + for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) { + mfp._preloadItem(mfp.index-i); + } + }, + _preloadItem: function(index) { + index = _getLoopedId(index); + + if(mfp.items[index].preloaded) { + return; + } + + var item = mfp.items[index]; + if(!item.parsed) { + item = mfp.parseEl( index ); + } + + _mfpTrigger('LazyLoad', item); + + if(item.type === 'image') { + item.img = $('<img class="mfp-img" />').on('load.mfploader', function() { + item.hasSize = true; + }).on('error.mfploader', function() { + item.hasSize = true; + item.loadError = true; + _mfpTrigger('LazyLoadError', item); + }).attr('src', item.src); + } + + + item.preloaded = true; + } + } +}); + +/*>>gallery*/ + +/*>>retina*/ + +var RETINA_NS = 'retina'; + +$.magnificPopup.registerModule(RETINA_NS, { + options: { + replaceSrc: function(item) { + return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; }); + }, + ratio: 1 // Function or number. Set to 1 to disable. + }, + proto: { + initRetina: function() { + if(window.devicePixelRatio > 1) { + + var st = mfp.st.retina, + ratio = st.ratio; + + ratio = !isNaN(ratio) ? ratio : ratio(); + + if(ratio > 1) { + _mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) { + item.img.css({ + 'max-width': item.img[0].naturalWidth / ratio, + 'width': '100%' + }); + }); + _mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) { + item.src = st.replaceSrc(item, ratio); + }); + } + } + + } + } +}); + +/*>>retina*/ + _checkInstance(); }));
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/magnific/jquery.magnific-popup.min.js b/public/admin/view/javascript/jquery/magnific/jquery.magnific-popup.min.js new file mode 100644 index 0000000..6ee3a3b --- /dev/null +++ b/public/admin/view/javascript/jquery/magnific/jquery.magnific-popup.min.js @@ -0,0 +1,4 @@ +/*! Magnific Popup - v1.1.0 - 2016-02-20 +* http://dimsemenov.com/plugins/magnific-popup/ +* Copyright (c) 2016 Dmitry Semenov; */ +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(a){var b,c,d,e,f,g,h="Close",i="BeforeClose",j="AfterClose",k="BeforeAppend",l="MarkupParse",m="Open",n="Change",o="mfp",p="."+o,q="mfp-ready",r="mfp-removing",s="mfp-prevent-close",t=function(){},u=!!window.jQuery,v=a(window),w=function(a,c){b.ev.on(o+a+p,c)},x=function(b,c,d,e){var f=document.createElement("div");return f.className="mfp-"+b,d&&(f.innerHTML=d),e?c&&c.appendChild(f):(f=a(f),c&&f.appendTo(c)),f},y=function(c,d){b.ev.triggerHandler(o+c,d),b.st.callbacks&&(c=c.charAt(0).toLowerCase()+c.slice(1),b.st.callbacks[c]&&b.st.callbacks[c].apply(b,a.isArray(d)?d:[d]))},z=function(c){return c===g&&b.currTemplate.closeBtn||(b.currTemplate.closeBtn=a(b.st.closeMarkup.replace("%title%",b.st.tClose)),g=c),b.currTemplate.closeBtn},A=function(){a.magnificPopup.instance||(b=new t,b.init(),a.magnificPopup.instance=b)},B=function(){var a=document.createElement("p").style,b=["ms","O","Moz","Webkit"];if(void 0!==a.transition)return!0;for(;b.length;)if(b.pop()+"Transition"in a)return!0;return!1};t.prototype={constructor:t,init:function(){var c=navigator.appVersion;b.isLowIE=b.isIE8=document.all&&!document.addEventListener,b.isAndroid=/android/gi.test(c),b.isIOS=/iphone|ipad|ipod/gi.test(c),b.supportsTransition=B(),b.probablyMobile=b.isAndroid||b.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),d=a(document),b.popupsCache={}},open:function(c){var e;if(c.isObj===!1){b.items=c.items.toArray(),b.index=0;var g,h=c.items;for(e=0;e<h.length;e++)if(g=h[e],g.parsed&&(g=g.el[0]),g===c.el[0]){b.index=e;break}}else b.items=a.isArray(c.items)?c.items:[c.items],b.index=c.index||0;if(b.isOpen)return void b.updateItemHTML();b.types=[],f="",c.mainEl&&c.mainEl.length?b.ev=c.mainEl.eq(0):b.ev=d,c.key?(b.popupsCache[c.key]||(b.popupsCache[c.key]={}),b.currTemplate=b.popupsCache[c.key]):b.currTemplate={},b.st=a.extend(!0,{},a.magnificPopup.defaults,c),b.fixedContentPos="auto"===b.st.fixedContentPos?!b.probablyMobile:b.st.fixedContentPos,b.st.modal&&(b.st.closeOnContentClick=!1,b.st.closeOnBgClick=!1,b.st.showCloseBtn=!1,b.st.enableEscapeKey=!1),b.bgOverlay||(b.bgOverlay=x("bg").on("click"+p,function(){b.close()}),b.wrap=x("wrap").attr("tabindex",-1).on("click"+p,function(a){b._checkIfClose(a.target)&&b.close()}),b.container=x("container",b.wrap)),b.contentContainer=x("content"),b.st.preloader&&(b.preloader=x("preloader",b.container,b.st.tLoading));var i=a.magnificPopup.modules;for(e=0;e<i.length;e++){var j=i[e];j=j.charAt(0).toUpperCase()+j.slice(1),b["init"+j].call(b)}y("BeforeOpen"),b.st.showCloseBtn&&(b.st.closeBtnInside?(w(l,function(a,b,c,d){c.close_replaceWith=z(d.type)}),f+=" mfp-close-btn-in"):b.wrap.append(z())),b.st.alignTop&&(f+=" mfp-align-top"),b.fixedContentPos?b.wrap.css({overflow:b.st.overflowY,overflowX:"hidden",overflowY:b.st.overflowY}):b.wrap.css({top:v.scrollTop(),position:"absolute"}),(b.st.fixedBgPos===!1||"auto"===b.st.fixedBgPos&&!b.fixedContentPos)&&b.bgOverlay.css({height:d.height(),position:"absolute"}),b.st.enableEscapeKey&&d.on("keyup"+p,function(a){27===a.keyCode&&b.close()}),v.on("resize"+p,function(){b.updateSize()}),b.st.closeOnContentClick||(f+=" mfp-auto-cursor"),f&&b.wrap.addClass(f);var k=b.wH=v.height(),n={};if(b.fixedContentPos&&b._hasScrollBar(k)){var o=b._getScrollbarSize();o&&(n.marginRight=o)}b.fixedContentPos&&(b.isIE7?a("body, html").css("overflow","hidden"):n.overflow="hidden");var r=b.st.mainClass;return b.isIE7&&(r+=" mfp-ie7"),r&&b._addClassToMFP(r),b.updateItemHTML(),y("BuildControls"),a("html").css(n),b.bgOverlay.add(b.wrap).prependTo(b.st.prependTo||a(document.body)),b._lastFocusedEl=document.activeElement,setTimeout(function(){b.content?(b._addClassToMFP(q),b._setFocus()):b.bgOverlay.addClass(q),d.on("focusin"+p,b._onFocusIn)},16),b.isOpen=!0,b.updateSize(k),y(m),c},close:function(){b.isOpen&&(y(i),b.isOpen=!1,b.st.removalDelay&&!b.isLowIE&&b.supportsTransition?(b._addClassToMFP(r),setTimeout(function(){b._close()},b.st.removalDelay)):b._close())},_close:function(){y(h);var c=r+" "+q+" ";if(b.bgOverlay.detach(),b.wrap.detach(),b.container.empty(),b.st.mainClass&&(c+=b.st.mainClass+" "),b._removeClassFromMFP(c),b.fixedContentPos){var e={marginRight:""};b.isIE7?a("body, html").css("overflow",""):e.overflow="",a("html").css(e)}d.off("keyup"+p+" focusin"+p),b.ev.off(p),b.wrap.attr("class","mfp-wrap").removeAttr("style"),b.bgOverlay.attr("class","mfp-bg"),b.container.attr("class","mfp-container"),!b.st.showCloseBtn||b.st.closeBtnInside&&b.currTemplate[b.currItem.type]!==!0||b.currTemplate.closeBtn&&b.currTemplate.closeBtn.detach(),b.st.autoFocusLast&&b._lastFocusedEl&&a(b._lastFocusedEl).focus(),b.currItem=null,b.content=null,b.currTemplate=null,b.prevHeight=0,y(j)},updateSize:function(a){if(b.isIOS){var c=document.documentElement.clientWidth/window.innerWidth,d=window.innerHeight*c;b.wrap.css("height",d),b.wH=d}else b.wH=a||v.height();b.fixedContentPos||b.wrap.css("height",b.wH),y("Resize")},updateItemHTML:function(){var c=b.items[b.index];b.contentContainer.detach(),b.content&&b.content.detach(),c.parsed||(c=b.parseEl(b.index));var d=c.type;if(y("BeforeChange",[b.currItem?b.currItem.type:"",d]),b.currItem=c,!b.currTemplate[d]){var f=b.st[d]?b.st[d].markup:!1;y("FirstMarkupParse",f),f?b.currTemplate[d]=a(f):b.currTemplate[d]=!0}e&&e!==c.type&&b.container.removeClass("mfp-"+e+"-holder");var g=b["get"+d.charAt(0).toUpperCase()+d.slice(1)](c,b.currTemplate[d]);b.appendContent(g,d),c.preloaded=!0,y(n,c),e=c.type,b.container.prepend(b.contentContainer),y("AfterChange")},appendContent:function(a,c){b.content=a,a?b.st.showCloseBtn&&b.st.closeBtnInside&&b.currTemplate[c]===!0?b.content.find(".mfp-close").length||b.content.append(z()):b.content=a:b.content="",y(k),b.container.addClass("mfp-"+c+"-holder"),b.contentContainer.append(b.content)},parseEl:function(c){var d,e=b.items[c];if(e.tagName?e={el:a(e)}:(d=e.type,e={data:e,src:e.src}),e.el){for(var f=b.types,g=0;g<f.length;g++)if(e.el.hasClass("mfp-"+f[g])){d=f[g];break}e.src=e.el.attr("data-mfp-src"),e.src||(e.src=e.el.attr("href"))}return e.type=d||b.st.type||"inline",e.index=c,e.parsed=!0,b.items[c]=e,y("ElementParse",e),b.items[c]},addGroup:function(a,c){var d=function(d){d.mfpEl=this,b._openClick(d,a,c)};c||(c={});var e="click.magnificPopup";c.mainEl=a,c.items?(c.isObj=!0,a.off(e).on(e,d)):(c.isObj=!1,c.delegate?a.off(e).on(e,c.delegate,d):(c.items=a,a.off(e).on(e,d)))},_openClick:function(c,d,e){var f=void 0!==e.midClick?e.midClick:a.magnificPopup.defaults.midClick;if(f||!(2===c.which||c.ctrlKey||c.metaKey||c.altKey||c.shiftKey)){var g=void 0!==e.disableOn?e.disableOn:a.magnificPopup.defaults.disableOn;if(g)if(a.isFunction(g)){if(!g.call(b))return!0}else if(v.width()<g)return!0;c.type&&(c.preventDefault(),b.isOpen&&c.stopPropagation()),e.el=a(c.mfpEl),e.delegate&&(e.items=d.find(e.delegate)),b.open(e)}},updateStatus:function(a,d){if(b.preloader){c!==a&&b.container.removeClass("mfp-s-"+c),d||"loading"!==a||(d=b.st.tLoading);var e={status:a,text:d};y("UpdateStatus",e),a=e.status,d=e.text,b.preloader.html(d),b.preloader.find("a").on("click",function(a){a.stopImmediatePropagation()}),b.container.addClass("mfp-s-"+a),c=a}},_checkIfClose:function(c){if(!a(c).hasClass(s)){var d=b.st.closeOnContentClick,e=b.st.closeOnBgClick;if(d&&e)return!0;if(!b.content||a(c).hasClass("mfp-close")||b.preloader&&c===b.preloader[0])return!0;if(c===b.content[0]||a.contains(b.content[0],c)){if(d)return!0}else if(e&&a.contains(document,c))return!0;return!1}},_addClassToMFP:function(a){b.bgOverlay.addClass(a),b.wrap.addClass(a)},_removeClassFromMFP:function(a){this.bgOverlay.removeClass(a),b.wrap.removeClass(a)},_hasScrollBar:function(a){return(b.isIE7?d.height():document.body.scrollHeight)>(a||v.height())},_setFocus:function(){(b.st.focus?b.content.find(b.st.focus).eq(0):b.wrap).focus()},_onFocusIn:function(c){return c.target===b.wrap[0]||a.contains(b.wrap[0],c.target)?void 0:(b._setFocus(),!1)},_parseMarkup:function(b,c,d){var e;d.data&&(c=a.extend(d.data,c)),y(l,[b,c,d]),a.each(c,function(c,d){if(void 0===d||d===!1)return!0;if(e=c.split("_"),e.length>1){var f=b.find(p+"-"+e[0]);if(f.length>0){var g=e[1];"replaceWith"===g?f[0]!==d[0]&&f.replaceWith(d):"img"===g?f.is("img")?f.attr("src",d):f.replaceWith(a("<img>").attr("src",d).attr("class",f.attr("class"))):f.attr(e[1],d)}}else b.find(p+"-"+c).html(d)})},_getScrollbarSize:function(){if(void 0===b.scrollbarSize){var a=document.createElement("div");a.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(a),b.scrollbarSize=a.offsetWidth-a.clientWidth,document.body.removeChild(a)}return b.scrollbarSize}},a.magnificPopup={instance:null,proto:t.prototype,modules:[],open:function(b,c){return A(),b=b?a.extend(!0,{},b):{},b.isObj=!0,b.index=c||0,this.instance.open(b)},close:function(){return a.magnificPopup.instance&&a.magnificPopup.instance.close()},registerModule:function(b,c){c.options&&(a.magnificPopup.defaults[b]=c.options),a.extend(this.proto,c.proto),this.modules.push(b)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">×</button>',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},a.fn.magnificPopup=function(c){A();var d=a(this);if("string"==typeof c)if("open"===c){var e,f=u?d.data("magnificPopup"):d[0].magnificPopup,g=parseInt(arguments[1],10)||0;f.items?e=f.items[g]:(e=d,f.delegate&&(e=e.find(f.delegate)),e=e.eq(g)),b._openClick({mfpEl:e},d,f)}else b.isOpen&&b[c].apply(b,Array.prototype.slice.call(arguments,1));else c=a.extend(!0,{},c),u?d.data("magnificPopup",c):d[0].magnificPopup=c,b.addGroup(d,c);return d};var C,D,E,F="inline",G=function(){E&&(D.after(E.addClass(C)).detach(),E=null)};a.magnificPopup.registerModule(F,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){b.types.push(F),w(h+"."+F,function(){G()})},getInline:function(c,d){if(G(),c.src){var e=b.st.inline,f=a(c.src);if(f.length){var g=f[0].parentNode;g&&g.tagName&&(D||(C=e.hiddenClass,D=x(C),C="mfp-"+C),E=f.after(D).detach().removeClass(C)),b.updateStatus("ready")}else b.updateStatus("error",e.tNotFound),f=a("<div>");return c.inlineElement=f,f}return b.updateStatus("ready"),b._parseMarkup(d,{},c),d}}});var H,I="ajax",J=function(){H&&a(document.body).removeClass(H)},K=function(){J(),b.req&&b.req.abort()};a.magnificPopup.registerModule(I,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){b.types.push(I),H=b.st.ajax.cursor,w(h+"."+I,K),w("BeforeChange."+I,K)},getAjax:function(c){H&&a(document.body).addClass(H),b.updateStatus("loading");var d=a.extend({url:c.src,success:function(d,e,f){var g={data:d,xhr:f};y("ParseAjax",g),b.appendContent(a(g.data),I),c.finished=!0,J(),b._setFocus(),setTimeout(function(){b.wrap.addClass(q)},16),b.updateStatus("ready"),y("AjaxContentAdded")},error:function(){J(),c.finished=c.loadError=!0,b.updateStatus("error",b.st.ajax.tError.replace("%url%",c.src))}},b.st.ajax.settings);return b.req=a.ajax(d),""}}});var L,M=function(c){if(c.data&&void 0!==c.data.title)return c.data.title;var d=b.st.image.titleSrc;if(d){if(a.isFunction(d))return d.call(b,c);if(c.el)return c.el.attr(d)||""}return""};a.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var c=b.st.image,d=".image";b.types.push("image"),w(m+d,function(){"image"===b.currItem.type&&c.cursor&&a(document.body).addClass(c.cursor)}),w(h+d,function(){c.cursor&&a(document.body).removeClass(c.cursor),v.off("resize"+p)}),w("Resize"+d,b.resizeImage),b.isLowIE&&w("AfterChange",b.resizeImage)},resizeImage:function(){var a=b.currItem;if(a&&a.img&&b.st.image.verticalFit){var c=0;b.isLowIE&&(c=parseInt(a.img.css("padding-top"),10)+parseInt(a.img.css("padding-bottom"),10)),a.img.css("max-height",b.wH-c)}},_onImageHasSize:function(a){a.img&&(a.hasSize=!0,L&&clearInterval(L),a.isCheckingImgSize=!1,y("ImageHasSize",a),a.imgHidden&&(b.content&&b.content.removeClass("mfp-loading"),a.imgHidden=!1))},findImageSize:function(a){var c=0,d=a.img[0],e=function(f){L&&clearInterval(L),L=setInterval(function(){return d.naturalWidth>0?void b._onImageHasSize(a):(c>200&&clearInterval(L),c++,void(3===c?e(10):40===c?e(50):100===c&&e(500)))},f)};e(1)},getImage:function(c,d){var e=0,f=function(){c&&(c.img[0].complete?(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("ready")),c.hasSize=!0,c.loaded=!0,y("ImageLoadComplete")):(e++,200>e?setTimeout(f,100):g()))},g=function(){c&&(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("error",h.tError.replace("%url%",c.src))),c.hasSize=!0,c.loaded=!0,c.loadError=!0)},h=b.st.image,i=d.find(".mfp-img");if(i.length){var j=document.createElement("img");j.className="mfp-img",c.el&&c.el.find("img").length&&(j.alt=c.el.find("img").attr("alt")),c.img=a(j).on("load.mfploader",f).on("error.mfploader",g),j.src=c.src,i.is("img")&&(c.img=c.img.clone()),j=c.img[0],j.naturalWidth>0?c.hasSize=!0:j.width||(c.hasSize=!1)}return b._parseMarkup(d,{title:M(c),img_replaceWith:c.img},c),b.resizeImage(),c.hasSize?(L&&clearInterval(L),c.loadError?(d.addClass("mfp-loading"),b.updateStatus("error",h.tError.replace("%url%",c.src))):(d.removeClass("mfp-loading"),b.updateStatus("ready")),d):(b.updateStatus("loading"),c.loading=!0,c.hasSize||(c.imgHidden=!0,d.addClass("mfp-loading"),b.findImageSize(c)),d)}}});var N,O=function(){return void 0===N&&(N=void 0!==document.createElement("p").style.MozTransform),N};a.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(a){return a.is("img")?a:a.find("img")}},proto:{initZoom:function(){var a,c=b.st.zoom,d=".zoom";if(c.enabled&&b.supportsTransition){var e,f,g=c.duration,j=function(a){var b=a.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),d="all "+c.duration/1e3+"s "+c.easing,e={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},f="transition";return e["-webkit-"+f]=e["-moz-"+f]=e["-o-"+f]=e[f]=d,b.css(e),b},k=function(){b.content.css("visibility","visible")};w("BuildControls"+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.content.css("visibility","hidden"),a=b._getItemToZoom(),!a)return void k();f=j(a),f.css(b._getOffset()),b.wrap.append(f),e=setTimeout(function(){f.css(b._getOffset(!0)),e=setTimeout(function(){k(),setTimeout(function(){f.remove(),a=f=null,y("ZoomAnimationEnded")},16)},g)},16)}}),w(i+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.st.removalDelay=g,!a){if(a=b._getItemToZoom(),!a)return;f=j(a)}f.css(b._getOffset(!0)),b.wrap.append(f),b.content.css("visibility","hidden"),setTimeout(function(){f.css(b._getOffset())},16)}}),w(h+d,function(){b._allowZoom()&&(k(),f&&f.remove(),a=null)})}},_allowZoom:function(){return"image"===b.currItem.type},_getItemToZoom:function(){return b.currItem.hasSize?b.currItem.img:!1},_getOffset:function(c){var d;d=c?b.currItem.img:b.st.zoom.opener(b.currItem.el||b.currItem);var e=d.offset(),f=parseInt(d.css("padding-top"),10),g=parseInt(d.css("padding-bottom"),10);e.top-=a(window).scrollTop()-f;var h={width:d.width(),height:(u?d.innerHeight():d[0].offsetHeight)-g-f};return O()?h["-moz-transform"]=h.transform="translate("+e.left+"px,"+e.top+"px)":(h.left=e.left,h.top=e.top),h}}});var P="iframe",Q="//about:blank",R=function(a){if(b.currTemplate[P]){var c=b.currTemplate[P].find("iframe");c.length&&(a||(c[0].src=Q),b.isIE8&&c.css("display",a?"block":"none"))}};a.magnificPopup.registerModule(P,{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){b.types.push(P),w("BeforeChange",function(a,b,c){b!==c&&(b===P?R():c===P&&R(!0))}),w(h+"."+P,function(){R()})},getIframe:function(c,d){var e=c.src,f=b.st.iframe;a.each(f.patterns,function(){return e.indexOf(this.index)>-1?(this.id&&(e="string"==typeof this.id?e.substr(e.lastIndexOf(this.id)+this.id.length,e.length):this.id.call(this,e)),e=this.src.replace("%id%",e),!1):void 0});var g={};return f.srcAction&&(g[f.srcAction]=e),b._parseMarkup(d,g,c),b.updateStatus("ready"),d}}});var S=function(a){var c=b.items.length;return a>c-1?a-c:0>a?c+a:a},T=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var c=b.st.gallery,e=".mfp-gallery";return b.direction=!0,c&&c.enabled?(f+=" mfp-gallery",w(m+e,function(){c.navigateByImgClick&&b.wrap.on("click"+e,".mfp-img",function(){return b.items.length>1?(b.next(),!1):void 0}),d.on("keydown"+e,function(a){37===a.keyCode?b.prev():39===a.keyCode&&b.next()})}),w("UpdateStatus"+e,function(a,c){c.text&&(c.text=T(c.text,b.currItem.index,b.items.length))}),w(l+e,function(a,d,e,f){var g=b.items.length;e.counter=g>1?T(c.tCounter,f.index,g):""}),w("BuildControls"+e,function(){if(b.items.length>1&&c.arrows&&!b.arrowLeft){var d=c.arrowMarkup,e=b.arrowLeft=a(d.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,"left")).addClass(s),f=b.arrowRight=a(d.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,"right")).addClass(s);e.click(function(){b.prev()}),f.click(function(){b.next()}),b.container.append(e.add(f))}}),w(n+e,function(){b._preloadTimeout&&clearTimeout(b._preloadTimeout),b._preloadTimeout=setTimeout(function(){b.preloadNearbyImages(),b._preloadTimeout=null},16)}),void w(h+e,function(){d.off(e),b.wrap.off("click"+e),b.arrowRight=b.arrowLeft=null})):!1},next:function(){b.direction=!0,b.index=S(b.index+1),b.updateItemHTML()},prev:function(){b.direction=!1,b.index=S(b.index-1),b.updateItemHTML()},goTo:function(a){b.direction=a>=b.index,b.index=a,b.updateItemHTML()},preloadNearbyImages:function(){var a,c=b.st.gallery.preload,d=Math.min(c[0],b.items.length),e=Math.min(c[1],b.items.length);for(a=1;a<=(b.direction?e:d);a++)b._preloadItem(b.index+a);for(a=1;a<=(b.direction?d:e);a++)b._preloadItem(b.index-a)},_preloadItem:function(c){if(c=S(c),!b.items[c].preloaded){var d=b.items[c];d.parsed||(d=b.parseEl(c)),y("LazyLoad",d),"image"===d.type&&(d.img=a('<img class="mfp-img" />').on("load.mfploader",function(){d.hasSize=!0}).on("error.mfploader",function(){d.hasSize=!0,d.loadError=!0,y("LazyLoadError",d)}).attr("src",d.src)),d.preloaded=!0}}}});var U="retina";a.magnificPopup.registerModule(U,{options:{replaceSrc:function(a){return a.src.replace(/\.\w+$/,function(a){return"@2x"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=b.st.retina,c=a.ratio;c=isNaN(c)?c():c,c>1&&(w("ImageHasSize."+U,function(a,b){b.img.css({"max-width":b.img[0].naturalWidth/c,width:"100%"})}),w("ElementParse."+U,function(b,d){d.src=a.replaceSrc(d,c)}))}}}}),A()});
\ No newline at end of file diff --git a/public/admin/view/javascript/jquery/magnific/magnific-popup.css b/public/admin/view/javascript/jquery/magnific/magnific-popup.css new file mode 100644 index 0000000..8561e18 --- /dev/null +++ b/public/admin/view/javascript/jquery/magnific/magnific-popup.css @@ -0,0 +1,351 @@ +/* Magnific Popup CSS */ +.mfp-bg { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1042; + overflow: hidden; + position: fixed; + background: #0b0b0b; + opacity: 0.8; } + +.mfp-wrap { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1043; + position: fixed; + outline: none !important; + -webkit-backface-visibility: hidden; } + +.mfp-container { + text-align: center; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + padding: 0 8px; + box-sizing: border-box; } + +.mfp-container:before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; } + +.mfp-align-top .mfp-container:before { + display: none; } + +.mfp-content { + position: relative; + display: inline-block; + vertical-align: middle; + margin: 0 auto; + text-align: left; + z-index: 1045; } + +.mfp-inline-holder .mfp-content, +.mfp-ajax-holder .mfp-content { + width: 100%; + cursor: auto; } + +.mfp-ajax-cur { + cursor: progress; } + +.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close { + cursor: -moz-zoom-out; + cursor: -webkit-zoom-out; + cursor: zoom-out; } + +.mfp-zoom { + cursor: pointer; + cursor: -webkit-zoom-in; + cursor: -moz-zoom-in; + cursor: zoom-in; } + +.mfp-auto-cursor .mfp-content { + cursor: auto; } + +.mfp-close, +.mfp-arrow, +.mfp-preloader, +.mfp-counter { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; } + +.mfp-loading.mfp-figure { + display: none; } + +.mfp-hide { + display: none !important; } + +.mfp-preloader { + color: #CCC; + position: absolute; + top: 50%; + width: auto; + text-align: center; + margin-top: -0.8em; + left: 8px; + right: 8px; + z-index: 1044; } + .mfp-preloader a { + color: #CCC; } + .mfp-preloader a:hover { + color: #FFF; } + +.mfp-s-ready .mfp-preloader { + display: none; } + +.mfp-s-error .mfp-content { + display: none; } + +button.mfp-close, +button.mfp-arrow { + overflow: visible; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + display: block; + outline: none; + padding: 0; + z-index: 1046; + box-shadow: none; + touch-action: manipulation; } + +button::-moz-focus-inner { + padding: 0; + border: 0; } + +.mfp-close { + width: 44px; + height: 44px; + line-height: 44px; + position: absolute; + right: 0; + top: 0; + text-decoration: none; + text-align: center; + opacity: 0.65; + padding: 0 0 18px 10px; + color: #FFF; + font-style: normal; + font-size: 28px; + font-family: Arial, Baskerville, monospace; } + .mfp-close:hover, + .mfp-close:focus { + opacity: 1; } + .mfp-close:active { + top: 1px; } + +.mfp-close-btn-in .mfp-close { + color: #333; } + +.mfp-image-holder .mfp-close, +.mfp-iframe-holder .mfp-close { + color: #FFF; + right: -6px; + text-align: right; + padding-right: 6px; + width: 100%; } + +.mfp-counter { + position: absolute; + top: 0; + right: 0; + color: #CCC; + font-size: 12px; + line-height: 18px; + white-space: nowrap; } + +.mfp-arrow { + position: absolute; + opacity: 0.65; + margin: 0; + top: 50%; + margin-top: -55px; + padding: 0; + width: 90px; + height: 110px; + -webkit-tap-highlight-color: transparent; } + .mfp-arrow:active { + margin-top: -54px; } + .mfp-arrow:hover, + .mfp-arrow:focus { + opacity: 1; } + .mfp-arrow:before, + .mfp-arrow:after { + content: ''; + display: block; + width: 0; + height: 0; + position: absolute; + left: 0; + top: 0; + margin-top: 35px; + margin-left: 35px; + border: medium inset transparent; } + .mfp-arrow:after { + border-top-width: 13px; + border-bottom-width: 13px; + top: 8px; } + .mfp-arrow:before { + border-top-width: 21px; + border-bottom-width: 21px; + opacity: 0.7; } + +.mfp-arrow-left { + left: 0; } + .mfp-arrow-left:after { + border-right: 17px solid #FFF; + margin-left: 31px; } + .mfp-arrow-left:before { + margin-left: 25px; + border-right: 27px solid #3F3F3F; } + +.mfp-arrow-right { + right: 0; } + .mfp-arrow-right:after { + border-left: 17px solid #FFF; + margin-left: 39px; } + .mfp-arrow-right:before { + border-left: 27px solid #3F3F3F; } + +.mfp-iframe-holder { + padding-top: 40px; + padding-bottom: 40px; } + .mfp-iframe-holder .mfp-content { + line-height: 0; + width: 100%; + max-width: 900px; } + .mfp-iframe-holder .mfp-close { + top: -40px; } + +.mfp-iframe-scaler { + width: 100%; + height: 0; + overflow: hidden; + padding-top: 56.25%; } + .mfp-iframe-scaler iframe { + position: absolute; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #000; } + +/* Main image in popup */ +img.mfp-img { + width: auto; + max-width: 100%; + height: auto; + display: block; + line-height: 0; + box-sizing: border-box; + padding: 40px 0 40px; + margin: 0 auto; } + +/* The shadow behind the image */ +.mfp-figure { + line-height: 0; } + .mfp-figure:after { + content: ''; + position: absolute; + left: 0; + top: 40px; + bottom: 40px; + display: block; + right: 0; + width: auto; + height: auto; + z-index: -1; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #444; } + .mfp-figure small { + color: #BDBDBD; + display: block; + font-size: 12px; + line-height: 14px; } + .mfp-figure figure { + margin: 0; } + +.mfp-bottom-bar { + margin-top: -36px; + position: absolute; + top: 100%; + left: 0; + width: 100%; + cursor: auto; } + +.mfp-title { + text-align: left; + line-height: 18px; + color: #F3F3F3; + word-wrap: break-word; + padding-right: 36px; } + +.mfp-image-holder .mfp-content { + max-width: 100%; } + +.mfp-gallery .mfp-image-holder .mfp-figure { + cursor: pointer; } + +@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { + /** + * Remove all paddings around the image on small screen + */ + .mfp-img-mobile .mfp-image-holder { + padding-left: 0; + padding-right: 0; } + .mfp-img-mobile img.mfp-img { + padding: 0; } + .mfp-img-mobile .mfp-figure:after { + top: 0; + bottom: 0; } + .mfp-img-mobile .mfp-figure small { + display: inline; + margin-left: 5px; } + .mfp-img-mobile .mfp-bottom-bar { + background: rgba(0, 0, 0, 0.6); + bottom: 0; + margin: 0; + top: auto; + padding: 3px 5px; + position: fixed; + box-sizing: border-box; } + .mfp-img-mobile .mfp-bottom-bar:empty { + padding: 0; } + .mfp-img-mobile .mfp-counter { + right: 5px; + top: 3px; } + .mfp-img-mobile .mfp-close { + top: 0; + right: 0; + width: 35px; + height: 35px; + line-height: 35px; + background: rgba(0, 0, 0, 0.6); + position: fixed; + text-align: center; + padding: 0; } } + +@media all and (max-width: 900px) { + .mfp-arrow { + -webkit-transform: scale(0.75); + transform: scale(0.75); } + .mfp-arrow-left { + -webkit-transform-origin: 0; + transform-origin: 0; } + .mfp-arrow-right { + -webkit-transform-origin: 100%; + transform-origin: 100%; } + .mfp-container { + padding-left: 6px; + padding-right: 6px; } } diff --git a/public/admin/view/javascript/openbay/js/faq.js b/public/admin/view/javascript/openbay/js/faq.js new file mode 100644 index 0000000..cfac6ce --- /dev/null +++ b/public/admin/view/javascript/openbay/js/faq.js @@ -0,0 +1,68 @@ +$.extend({ + getUrlVars: function(){ + var vars = [], hash; + var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); + for(var i = 0; i < hashes.length; i++) + { + hash = hashes[i].split('='); + vars.push(hash[0]); + vars[hash[0]] = hash[1]; + } + return vars; + }, + getUrlVar: function(name){ + return $.getUrlVars()[name]; + } +}); + +function faq(){ + var route = $.getUrlVar('route'); + var user_token = $.getUrlVar('user_token'); + + $.ajax({ + url: 'index.php?route=marketplace/openbay/faq&user_token=' + user_token + '&qry_route=' + route, + type: 'GET', + dataType: 'json', + success: function(data) { + if(data.faq_id){ + var html = ''; + + html += '<div class="container-fluid" id="faq" style="display:none;">'; + html += '<div class="alert alert-info">'; + html += '<div class="pull-right">'; + html += '<a class="btn btn-primary" href="' + data.link + '" target="_BLANK" data-toggle="tooltip" title="' + data.button_faq + '"><i class="fa fa-info-circle"></i></a> '; + html += '<button onclick="faqclose();" type="button" class="btn btn-danger" data-toggle="tooltip" title="' + data.button_close + '" id="faq-close"><i class="fa fa-minus-circle"></i></button>'; + html += '</div>'; + html += '<h5>' + data.title + '</h5>'; + html += '<p>' + data.message + '</p>'; + html += '</div>'; + html += '</div>'; + + $('.page-header:first').after(html); + + setTimeout(function() { + $('#faq').slideDown('slow'); + }, 2000); + } + } + }); +} + +function faqclose() { + var route = $.getUrlVar('route'); + var user_token = $.getUrlVar('user_token'); + + $('#faq').slideUp(); + + $.ajax({ + url: 'index.php?route=marketplace/openbay/faqdismiss&user_token=' + user_token + '&qry_route=' + route, + type: 'GET', + dataType: 'json', + success: function(data) {} + }); + return false; +} + +$(document).ready(function(){ + faq(); +}); diff --git a/public/admin/view/javascript/openbay/js/openbay.js b/public/admin/view/javascript/openbay/js/openbay.js new file mode 100644 index 0000000..359b3e6 --- /dev/null +++ b/public/admin/view/javascript/openbay/js/openbay.js @@ -0,0 +1,23 @@ +function showGreyScreen(boxDiv){ + $('#greyScreen').css({ "display": "block", opacity: 0.6, "width":$(document).width()+20,"height":$(document).height(), "z-index":99998}).show(); + $('#'+boxDiv).fadeIn().css({"display": "block", "z-index":99999}); + $('body').css({"overflow":"hidden"}); +} + +function hideGreyScreen(){ + $('#greyScreen').css("display", "none"); + $('.greyScreenBox').css("display", "none"); + $('body').css({"overflow":"scroll"}); +} + +$(window).resize(function(){ + $('#greyScreen').css("display") == 'block'?showGreyScreen():""; +}); + +$('.previewClose').bind('click', function(){ + hideGreyScreen(); +}); + +$(document).ready(function(){ + hideGreyScreen(); +});
\ No newline at end of file diff --git a/public/admin/view/javascript/summernote/font/summernote.eot b/public/admin/view/javascript/summernote/font/summernote.eot Binary files differnew file mode 100644 index 0000000..f2b6e3b --- /dev/null +++ b/public/admin/view/javascript/summernote/font/summernote.eot diff --git a/public/admin/view/javascript/summernote/font/summernote.ttf b/public/admin/view/javascript/summernote/font/summernote.ttf Binary files differnew file mode 100644 index 0000000..5cc1981 --- /dev/null +++ b/public/admin/view/javascript/summernote/font/summernote.ttf diff --git a/public/admin/view/javascript/summernote/font/summernote.woff b/public/admin/view/javascript/summernote/font/summernote.woff Binary files differnew file mode 100644 index 0000000..f30de73 --- /dev/null +++ b/public/admin/view/javascript/summernote/font/summernote.woff diff --git a/public/admin/view/javascript/summernote/lang/summernote-ar-AR.js b/public/admin/view/javascript/summernote/lang/summernote-ar-AR.js new file mode 100644 index 0000000..ac6e6b5 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-ar-AR.js @@ -0,0 +1,104 @@ +(function ($) { + $.extend($.summernote.lang, { + 'ar-AR': { + font: { + bold: 'عريض', + italic: 'مائل', + underline: 'تحته خط', + clear: 'مسح التنسيق', + height: 'إرتفاع السطر', + name: 'الخط', + strikethrough: 'فى وسطه خط', + size: 'الحجم' + }, + image: { + image: 'صورة', + insert: 'إضافة صورة', + resizeFull: 'الحجم بالكامل', + resizeHalf: 'تصغير للنصف', + resizeQuarter: 'تصغير للربع', + floatLeft: 'تطيير لليسار', + floatRight: 'تطيير لليمين', + floatNone: 'ثابته', + dragImageHere: 'إدرج الصورة هنا', + selectFromFiles: 'حدد ملف', + url: 'رابط الصورة', + remove: 'حذف الصورة' + }, + video: { + video: 'فيديو', + videoLink: 'رابط الفيديو', + insert: 'إدراج الفيديو', + url: 'رابط الفيديو', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' + }, + link: { + link: 'رابط رابط', + insert: 'إدراج', + unlink: 'حذف الرابط', + edit: 'تعديل', + textToDisplay: 'النص', + url: 'مسار الرابط', + openInNewWindow: 'فتح في نافذة جديدة' + }, + table: { + table: 'جدول' + }, + hr: { + insert: 'إدراج خط أفقي' + }, + style: { + style: 'تنسيق', + p: 'عادي', + blockquote: 'إقتباس', + pre: 'شفيرة', + h1: 'عنوان رئيسي 1', + h2: 'عنوان رئيسي 2', + h3: 'عنوان رئيسي 3', + h4: 'عنوان رئيسي 4', + h5: 'عنوان رئيسي 5', + h6: 'عنوان رئيسي 6' + }, + lists: { + unordered: 'قائمة مُنقطة', + ordered: 'قائمة مُرقمة' + }, + options: { + help: 'مساعدة', + fullscreen: 'حجم الشاشة بالكامل', + codeview: 'شفيرة المصدر' + }, + paragraph: { + paragraph: 'فقرة', + outdent: 'محاذاة للخارج', + indent: 'محاذاة للداخل', + left: 'محاذاة لليسار', + center: 'توسيط', + right: 'محاذاة لليمين', + justify: 'ملئ السطر' + }, + color: { + recent: 'تم إستخدامه', + more: 'المزيد', + background: 'لون الخلفية', + foreground: 'لون النص', + transparent: 'شفاف', + setTransparent: 'بدون خلفية', + reset: 'إعادة الضبط', + resetToDefault: 'إعادة الضبط' + }, + shortcut: { + shortcuts: 'إختصارات', + close: 'غلق', + textFormatting: 'تنسيق النص', + action: 'Action', + paragraphFormatting: 'تنسيق الفقرة', + documentStyle: 'تنسيق المستند' + }, + history: { + undo: 'تراجع', + redo: 'إعادة' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-bg-BG.js b/public/admin/view/javascript/summernote/lang/summernote-bg-BG.js new file mode 100644 index 0000000..daefd20 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-bg-BG.js @@ -0,0 +1,99 @@ +(function ($) { + $.extend($.summernote.lang, { + 'bg-BG': { + font: { + bold: 'Удебелен', + italic: 'Наклонен', + underline: 'Подчертан', + clear: 'Изчисти стиловете', + height: 'Височина', + name: 'Шрифт', + strikethrough: 'Задраскано', + subscript: 'Долен индекс', + superscript: 'Горен индекс', + size: 'Размер на шрифта' + }, + image: { + image: 'Изображение', + insert: 'Постави картинка', + resizeFull: 'Цял размер', + resizeHalf: 'Размер на 50%', + resizeQuarter: 'Размер на 25%', + floatLeft: 'Подравни в ляво', + floatRight: 'Подравни в дясно', + floatNone: 'Без подравняване', + dragImageHere: 'Пуснете изображението тук', + selectFromFiles: 'Изберете файл', + url: 'URL адрес на изображение', + remove: 'Премахни изображение' + }, + link: { + link: 'Връзка', + insert: 'Добави връзка', + unlink: 'Премахни връзка', + edit: 'Промени', + textToDisplay: 'Текст за показване', + url: 'URL адрес', + openInNewWindow: 'Отвори в нов прозорец' + }, + table: { + table: 'Таблица' + }, + hr: { + insert: 'Добави хоризонтална линия' + }, + style: { + style: 'Стил', + p: 'Нормален', + blockquote: 'Цитат', + pre: 'Код', + h1: 'Заглавие 1', + h2: 'Заглавие 2', + h3: 'Заглавие 3', + h4: 'Заглавие 4', + h5: 'Заглавие 5', + h6: 'Заглавие 6' + }, + lists: { + unordered: 'Символен списък', + ordered: 'Цифров списък' + }, + options: { + help: 'Помощ', + fullscreen: 'На цял екран', + codeview: 'Преглед на код' + }, + paragraph: { + paragraph: 'Параграф', + outdent: 'Намаляване на отстъпа', + indent: 'Абзац', + left: 'Подравняване в ляво', + center: 'Център', + right: 'Подравняване в дясно', + justify: 'Разтягане по ширина' + }, + color: { + recent: 'Последния избран цвят', + more: 'Още цветове', + background: 'Цвят на фона', + foreground: 'Цвят на шрифта', + transparent: 'Прозрачен', + setTransparent: 'Направете прозрачен', + reset: 'Възстанови', + resetToDefault: 'Възстанови оригиналните' + }, + shortcut: { + shortcuts: 'Клавишни комбинации', + close: 'Затвори', + textFormatting: 'Форматиране на текста', + action: 'Действие', + paragraphFormatting: 'Форматиране на параграф', + documentStyle: 'Стил на документа' + }, + history: { + undo: 'Назад', + redo: 'Напред' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-ca-ES.js b/public/admin/view/javascript/summernote/lang/summernote-ca-ES.js new file mode 100644 index 0000000..04978a1 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-ca-ES.js @@ -0,0 +1,147 @@ +(function ($) { + $.extend($.summernote.lang, { + 'ca-ES': { + font: { + bold: 'Negreta', + italic: 'Cursiva', + underline: 'Subratllat', + clear: 'Treure estil de lletra', + height: 'Alçada de línia', + name: 'Font', + strikethrough: 'Ratllat', + subscript: 'Subíndex', + superscript: 'Superíndex', + size: 'Mida de lletra' + }, + image: { + image: 'Imatge', + insert: 'Inserir imatge', + resizeFull: 'Redimensionar a mida completa', + resizeHalf: 'Redimensionar a la meitat', + resizeQuarter: 'Redimensionar a un quart', + floatLeft: 'Alinear a l\'esquerra', + floatRight: 'Alinear a la dreta', + floatNone: 'No alinear', + shapeRounded: 'Forma: Arrodonit', + shapeCircle: 'Forma: Cercle', + shapeThumbnail: 'Forma: Marc', + shapeNone: 'Forma: Cap', + dragImageHere: 'Arrossegueu una imatge o text aquí', + dropImage: 'Deixa anar aquí una imatge o un text', + selectFromFiles: 'Seleccioneu des dels arxius', + maximumFileSize: 'Mida màxima de l\'arxiu', + maximumFileSizeError: 'La mida màxima de l\'arxiu s\'ha superat.', + url: 'URL de la imatge', + remove: 'Eliminar imatge' + }, + video: { + video: 'Vídeo', + videoLink: 'Enllaç del vídeo', + insert: 'Inserir vídeo', + url: 'URL del vídeo?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)' + }, + link: { + link: 'Enllaç', + insert: 'Inserir enllaç', + unlink: 'Treure enllaç', + edit: 'Editar', + textToDisplay: 'Text per mostrar', + url: 'Cap a quina URL porta l\'enllaç?', + openInNewWindow: 'Obrir en una finestra nova' + }, + table: { + table: 'Taula' + }, + hr: { + insert: 'Inserir línia horitzontal' + }, + style: { + style: 'Estil', + p: 'p', + blockquote: 'Cita', + pre: 'Codi', + h1: 'Títol 1', + h2: 'Títol 2', + h3: 'Títol 3', + h4: 'Títol 4', + h5: 'Títol 5', + h6: 'Títol 6' + }, + lists: { + unordered: 'Llista desendreçada', + ordered: 'Llista endreçada' + }, + options: { + help: 'Ajut', + fullscreen: 'Pantalla sencera', + codeview: 'Veure codi font' + }, + paragraph: { + paragraph: 'Paràgraf', + outdent: 'Menys tabulació', + indent: 'Més tabulació', + left: 'Alinear a l\'esquerra', + center: 'Alinear al mig', + right: 'Alinear a la dreta', + justify: 'Justificar' + }, + color: { + recent: 'Últim color', + more: 'Més colors', + background: 'Color de fons', + foreground: 'Color de lletra', + transparent: 'Transparent', + setTransparent: 'Establir transparent', + reset: 'Restablir', + resetToDefault: 'Restablir per defecte' + }, + shortcut: { + shortcuts: 'Dreceres de teclat', + close: 'Tancar', + textFormatting: 'Format de text', + action: 'Acció', + paragraphFormatting: 'Format de paràgraf', + documentStyle: 'Estil del document', + extraKeys: 'Tecles adicionals' + }, + help : { + 'insertParagraph': 'Inserir paràgraf', + 'undo': 'Desfer l\'última acció', + 'redo': 'Refer l\'última acció', + 'tab': 'Tabular', + 'untab': 'Eliminar tabulació', + 'bold': 'Establir estil negreta', + 'italic': 'Establir estil cursiva', + 'underline': 'Establir estil subratllat', + 'strikethrough': 'Establir estil ratllat', + 'removeFormat': 'Netejar estil', + 'justifyLeft': 'Alinear a l\'esquerra', + 'justifyCenter': 'Alinear al centre', + 'justifyRight': 'Alinear a la dreta', + 'justifyFull': 'Justificar', + 'insertUnorderedList': 'Inserir llista desendreçada', + 'insertOrderedList': 'Inserir llista endreçada', + 'outdent': 'Reduïr tabulació del paràgraf', + 'indent': 'Augmentar tabulació del paràgraf', + 'formatPara': 'Canviar l\'estil del bloc com a un paràgraf (etiqueta P)', + 'formatH1': 'Canviar l\'estil del bloc com a un H1', + 'formatH2': 'Canviar l\'estil del bloc com a un H2', + 'formatH3': 'Canviar l\'estil del bloc com a un H3', + 'formatH4': 'Canviar l\'estil del bloc com a un H4', + 'formatH5': 'Canviar l\'estil del bloc com a un H5', + 'formatH6': 'Canviar l\'estil del bloc com a un H6', + 'insertHorizontalRule': 'Inserir una línia horitzontal', + 'linkDialog.show': 'Mostrar panel d\'enllaços' + }, + history: { + undo: 'Desfer', + redo: 'Refer' + }, + specialChar: { + specialChar: 'CARÀCTERS ESPECIALS', + select: 'Selecciona caràcters especials' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-cs-CZ.js b/public/admin/view/javascript/summernote/lang/summernote-cs-CZ.js new file mode 100644 index 0000000..14fc16c --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-cs-CZ.js @@ -0,0 +1,103 @@ +(function ($) { + $.extend($.summernote.lang, { + 'cs-CZ': { + font: { + bold: 'Tučné', + italic: 'Kurzíva', + underline: 'Podtržené', + clear: 'Odstranit styl písma', + height: 'Výška řádku', + strikethrough: 'Přeškrtnuté', + size: 'Velikost písma' + }, + image: { + image: 'Obrázek', + insert: 'Vložit obrázek', + resizeFull: 'Původní velikost', + resizeHalf: 'Poloviční velikost', + resizeQuarter: 'Čtvrteční velikost', + floatLeft: 'Umístit doleva', + floatRight: 'Umístit doprava', + floatNone: 'Neobtékat textem', + dragImageHere: 'Přetáhnout sem obrázek', + selectFromFiles: 'Vybrat soubor', + url: 'URL obrázku' + }, + video: { + video: 'Video', + videoLink: 'Odkaz videa', + insert: 'Vložit video', + url: 'URL videa?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion nebo Youku)' + }, + link: { + link: 'Odkaz', + insert: 'Vytvořit odkaz', + unlink: 'Zrušit odkaz', + edit: 'Upravit', + textToDisplay: 'Zobrazovaný text', + url: 'Na jaké URL má tento odkaz vést?', + openInNewWindow: 'Otevřít v novém okně' + }, + table: { + table: 'Tabulka' + }, + hr: { + insert: 'Vložit vodorovnou čáru' + }, + style: { + style: 'Styl', + p: 'Normální', + blockquote: 'Citace', + pre: 'Kód', + h1: 'Nadpis 1', + h2: 'Nadpis 2', + h3: 'Nadpis 3', + h4: 'Nadpis 4', + h5: 'Nadpis 5', + h6: 'Nadpis 6' + }, + lists: { + unordered: 'Odrážkový seznam', + ordered: 'Číselný seznam' + }, + options: { + help: 'Nápověda', + fullscreen: 'Celá obrazovka', + codeview: 'HTML kód' + }, + paragraph: { + paragraph: 'Odstavec', + outdent: 'Zvětšit odsazení', + indent: 'Zmenšit odsazení', + left: 'Zarovnat doleva', + center: 'Zarovnat na střed', + right: 'Zarovnat doprava', + justify: 'Zarovnat oboustranně' + }, + color: { + recent: 'Aktuální barva', + more: 'Další barvy', + background: 'Barva pozadí', + foreground: 'Barva písma', + transparent: 'Průhlednost', + setTransparent: 'Nastavit průhlednost', + reset: 'Obnovit', + resetToDefault: 'Obnovit výchozí' + }, + shortcut: { + shortcuts: 'Klávesové zkratky', + close: 'Zavřít', + textFormatting: 'Formátování textu', + action: 'Akce', + paragraphFormatting: 'Formátování odstavce', + documentStyle: 'Styl dokumentu' + }, + history: { + undo: 'Krok vzad', + redo: 'Krok vpřed' + } + + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-da-DK.js b/public/admin/view/javascript/summernote/lang/summernote-da-DK.js new file mode 100644 index 0000000..8f51774 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-da-DK.js @@ -0,0 +1,114 @@ +(function ($) { + $.extend($.summernote.lang, { + 'da-DK': { + font: { + bold: 'Fed', + italic: 'Kursiv', + underline: 'Understreget', + clear: 'Fjern formatering', + height: 'Højde', + name: 'Skrifttype', + strikethrough: 'Gennemstreget', + subscript: 'Sænket skrift', + superscript: 'Hævet skrift', + size: 'Skriftstørrelse' + }, + image: { + image: 'Billede', + insert: 'Indsæt billede', + resizeFull: 'Original størrelse', + resizeHalf: 'Halv størrelse', + resizeQuarter: 'Kvart størrelse', + floatLeft: 'Venstrestillet', + floatRight: 'Højrestillet', + floatNone: 'Fjern formatering', + shapeRounded: 'Form: Runde kanter', + shapeCircle: 'Form: Cirkel', + shapeThumbnail: 'Form: Miniature', + shapeNone: 'Form: Ingen', + dragImageHere: 'Træk billede hertil', + dropImage: 'Slip billede', + selectFromFiles: 'Vælg billed-fil', + maximumFileSize: 'Maks fil størrelse', + maximumFileSizeError: 'Filen er større end maks tilladte fil størrelse!', + url: 'Billede URL', + remove: 'Fjern billede' + }, + video: { + video: 'Video', + videoLink: 'Video Link', + insert: 'Indsæt Video', + url: 'Video URL?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)' + }, + link: { + link: 'Link', + insert: 'Indsæt link', + unlink: 'Fjern link', + edit: 'Rediger', + textToDisplay: 'Visningstekst', + url: 'Hvor skal linket pege hen?', + openInNewWindow: 'Åbn i nyt vindue' + }, + table: { + table: 'Tabel' + }, + hr: { + insert: 'Indsæt horisontal linje' + }, + style: { + style: 'Stil', + p: 'p', + blockquote: 'Citat', + pre: 'Kode', + h1: 'Overskrift 1', + h2: 'Overskrift 2', + h3: 'Overskrift 3', + h4: 'Overskrift 4', + h5: 'Overskrift 5', + h6: 'Overskrift 6' + }, + lists: { + unordered: 'Punktopstillet liste', + ordered: 'Nummereret liste' + }, + options: { + help: 'Hjælp', + fullscreen: 'Fuld skærm', + codeview: 'HTML-Visning' + }, + paragraph: { + paragraph: 'Afsnit', + outdent: 'Formindsk indryk', + indent: 'Forøg indryk', + left: 'Venstrestillet', + center: 'Centreret', + right: 'Højrestillet', + justify: 'Blokjuster' + }, + color: { + recent: 'Nyligt valgt farve', + more: 'Flere farver', + background: 'Baggrund', + foreground: 'Forgrund', + transparent: 'Transparent', + setTransparent: 'Sæt transparent', + reset: 'Nulstil', + resetToDefault: 'Gendan standardindstillinger' + }, + shortcut: { + shortcuts: 'Genveje', + close: 'Luk', + textFormatting: 'Tekstformatering', + action: 'Handling', + paragraphFormatting: 'Afsnitsformatering', + documentStyle: 'Dokumentstil' + }, + history: { + undo: 'Fortryd', + redo: 'Annuller fortryd' + } + + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-de-DE.js b/public/admin/view/javascript/summernote/lang/summernote-de-DE.js new file mode 100644 index 0000000..402caed --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-de-DE.js @@ -0,0 +1,110 @@ +(function ($) { + $.extend($.summernote.lang, { + 'de-DE': { + font: { + bold: 'Fett', + italic: 'Kursiv', + underline: 'Unterstreichen', + clear: 'Zurücksetzen', + height: 'Zeilenhöhe', + strikethrough: 'Durchgestrichen', + size: 'Schriftgröße' + }, + image: { + image: 'Grafik', + insert: 'Grafik einfügen', + resizeFull: 'Originalgröße', + resizeHalf: 'Größe 1/2', + resizeQuarter: 'Größe 1/4', + floatLeft: 'Linksbündig', + floatRight: 'Rechtsbündig', + floatNone: 'Kein Textfluss', + shapeRounded: 'Rahmen: Abgerundet', + shapeCircle: 'Rahmen: Kreisförmig', + shapeThumbnail: 'Rahmen: Thumbnail', + shapeNone: 'Kein Rahmen', + dragImageHere: 'Ziehen Sie ein Bild mit der Maus hierher', + selectFromFiles: 'Wählen Sie eine Datei aus', + maximumFileSize: 'Maximale Dateigröße', + maximumFileSizeError: 'Maximale Dateigröße überschritten', + url: 'Grafik URL', + remove: 'Grafik entfernen' + }, + video: { + video: 'Video', + videoLink: 'Video Link', + insert: 'Video einfügen', + url: 'Video URL?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion oder Youku)' + }, + link: { + link: 'Link', + insert: 'Link einfügen', + unlink: 'Link entfernen', + edit: 'Editieren', + textToDisplay: 'Anzeigetext', + url: 'Ziel des Links?', + openInNewWindow: 'In einem neuen Fenster öffnen' + }, + table: { + table: 'Tabelle' + }, + hr: { + insert: 'Eine horizontale Linie einfügen' + }, + style: { + style: 'Stil', + p: 'p', + blockquote: 'Zitat', + pre: 'Quellcode', + h1: 'Überschrift 1', + h2: 'Überschrift 2', + h3: 'Überschrift 3', + h4: 'Überschrift 4', + h5: 'Überschrift 5', + h6: 'Überschrift 6' + }, + lists: { + unordered: 'Aufzählung', + ordered: 'Nummerierung' + }, + options: { + help: 'Hilfe', + fullscreen: 'Vollbild', + codeview: 'HTML-Code anzeigen' + }, + paragraph: { + paragraph: 'Absatz', + outdent: 'Einzug vergrößern', + indent: 'Einzug verkleinern', + left: 'Links ausrichten', + center: 'Zentriert ausrichten', + right: 'Rechts ausrichten', + justify: 'Blocksatz' + }, + color: { + recent: 'Letzte Farbe', + more: 'Mehr Farben', + background: 'Hintergrundfarbe', + foreground: 'Schriftfarbe', + transparent: 'Transparenz', + setTransparent: 'Transparenz setzen', + reset: 'Zurücksetzen', + resetToDefault: 'Auf Standard zurücksetzen' + }, + shortcut: { + shortcuts: 'Tastenkürzel', + close: 'Schließen', + textFormatting: 'Textformatierung', + action: 'Aktion', + paragraphFormatting: 'Absatzformatierung', + documentStyle: 'Dokumentenstil' + }, + history: { + undo: 'Rückgängig', + redo: 'Wiederholen' + } + + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-es-ES.js b/public/admin/view/javascript/summernote/lang/summernote-es-ES.js new file mode 100644 index 0000000..b66a368 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-es-ES.js @@ -0,0 +1,147 @@ +(function ($) { + $.extend($.summernote.lang, { + 'es-ES': { + font: { + bold: 'Negrita', + italic: 'Cursiva', + underline: 'Subrayado', + clear: 'Quitar estilo de fuente', + height: 'Altura de línea', + name: 'Fuente', + strikethrough: 'Tachado', + superscript: 'Superíndice', + subscript: 'Subíndice', + size: 'Tamaño de la fuente' + }, + image: { + image: 'Imagen', + insert: 'Insertar imagen', + resizeFull: 'Redimensionar a tamaño completo', + resizeHalf: 'Redimensionar a la mitad', + resizeQuarter: 'Redimensionar a un cuarto', + floatLeft: 'Flotar a la izquierda', + floatRight: 'Flotar a la derecha', + floatNone: 'No flotar', + shapeRounded: 'Forma: Redondeado', + shapeCircle: 'Forma: Círculo', + shapeThumbnail: 'Forma: Marco', + shapeNone: 'Forma: Ninguna', + dragImageHere: 'Arrastrar una imagen o texto aquí', + dropImage: 'Suelta la imagen o texto', + selectFromFiles: 'Seleccionar desde los archivos', + maximumFileSize: 'Tamaño máximo del archivo', + maximumFileSizeError: 'Has superado el tamaño máximo del archivo.', + url: 'URL de la imagen', + remove: 'Eliminar imagen' + }, + video: { + video: 'Vídeo', + videoLink: 'Link del vídeo', + insert: 'Insertar vídeo', + url: '¿URL del vídeo?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)' + }, + link: { + link: 'Link', + insert: 'Insertar link', + unlink: 'Quitar link', + edit: 'Editar', + textToDisplay: 'Texto para mostrar', + url: '¿Hacia que URL lleva el link?', + openInNewWindow: 'Abrir en una nueva ventana' + }, + table: { + table: 'Tabla' + }, + hr: { + insert: 'Insertar línea horizontal' + }, + style: { + style: 'Estilo', + p: 'p', + blockquote: 'Cita', + pre: 'Código', + h1: 'Título 1', + h2: 'Título 2', + h3: 'Título 3', + h4: 'Título 4', + h5: 'Título 5', + h6: 'Título 6' + }, + lists: { + unordered: 'Lista desordenada', + ordered: 'Lista ordenada' + }, + options: { + help: 'Ayuda', + fullscreen: 'Pantalla completa', + codeview: 'Ver código fuente' + }, + paragraph: { + paragraph: 'Párrafo', + outdent: 'Menos tabulación', + indent: 'Más tabulación', + left: 'Alinear a la izquierda', + center: 'Alinear al centro', + right: 'Alinear a la derecha', + justify: 'Justificar' + }, + color: { + recent: 'Último color', + more: 'Más colores', + background: 'Color de fondo', + foreground: 'Color de fuente', + transparent: 'Transparente', + setTransparent: 'Establecer transparente', + reset: 'Restaurar', + resetToDefault: 'Restaurar por defecto' + }, + shortcut: { + shortcuts: 'Atajos de teclado', + close: 'Cerrar', + textFormatting: 'Formato de texto', + action: 'Acción', + paragraphFormatting: 'Formato de párrafo', + documentStyle: 'Estilo de documento', + extraKeys: 'Teclas adicionales' + }, + help : { + 'insertParagraph': 'Insertar párrafo', + 'undo': 'Deshacer última acción', + 'redo': 'Rehacer última acción', + 'tab': 'Tabular', + 'untab': 'Eliminar tabulación', + 'bold': 'Establecer estilo negrita', + 'italic': 'Establecer estilo cursiva', + 'underline': 'Establecer estilo subrayado', + 'strikethrough': 'Establecer estilo tachado', + 'removeFormat': 'Limpiar estilo', + 'justifyLeft': 'Alinear a la izquierda', + 'justifyCenter': 'Alinear al centro', + 'justifyRight': 'Alinear a la derecha', + 'justifyFull': 'Justificar', + 'insertUnorderedList': 'Insertar lista desordenada', + 'insertOrderedList': 'Insertar lista ordenada', + 'outdent': 'Reducir tabulación del párrafo', + 'indent': 'Aumentar tabulación del párrafo', + 'formatPara': 'Cambiar estilo del bloque a párrafo (etiqueta P)', + 'formatH1': 'Cambiar estilo del bloque a H1', + 'formatH2': 'Cambiar estilo del bloque a H2', + 'formatH3': 'Cambiar estilo del bloque a H3', + 'formatH4': 'Cambiar estilo del bloque a H4', + 'formatH5': 'Cambiar estilo del bloque a H5', + 'formatH6': 'Cambiar estilo del bloque a H6', + 'insertHorizontalRule': 'Insertar línea horizontal', + 'linkDialog.show': 'Mostrar panel enlaces' + }, + history: { + undo: 'Deshacer', + redo: 'Rehacer' + }, + specialChar: { + specialChar: 'CARACTERES ESPECIALES', + select: 'Selecciona Caracteres especiales' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-es-EU.js b/public/admin/view/javascript/summernote/lang/summernote-es-EU.js new file mode 100644 index 0000000..4681db0 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-es-EU.js @@ -0,0 +1,103 @@ +(function ($) { + $.extend($.summernote.lang, { + 'es-EU': { + font: { + bold: 'Lodia', + italic: 'Etzana', + underline: 'Azpimarratua', + clear: 'Estiloa kendu', + height: 'Lerro altuera', + name: 'Tipografia', + strikethrough: 'Marratua', + size: 'Letren neurria' + }, + image: { + image: 'Irudia', + insert: 'Irudi bat txertatu', + resizeFull: 'Jatorrizko neurrira aldatu', + resizeHalf: 'Neurria erdira aldatu', + resizeQuarter: 'Neurria laurdenera aldatu', + floatLeft: 'Ezkerrean kokatu', + floatRight: 'Eskuinean kokatu', + floatNone: 'Kokapenik ez ezarri', + dragImageHere: 'Irudi bat ezarri hemen', + selectFromFiles: 'Zure fitxategi bat aukeratu', + url: 'Irudiaren URL helbidea' + }, + video: { + video: 'Bideoa', + videoLink: 'Bideorako esteka', + insert: 'Bideo berri bat txertatu', + url: 'Bideoaren URL helbidea', + providers: '(YouTube, Vimeo, Vine, Instagram edo DailyMotion)' + }, + link: { + link: 'Esteka', + insert: 'Esteka bat txertatu', + unlink: 'Esteka ezabatu', + edit: 'Editatu', + textToDisplay: 'Estekaren testua', + url: 'Estekaren URL helbidea', + openInNewWindow: 'Leiho berri batean ireki' + }, + table: { + table: 'Taula' //Tabla + }, + hr: { + insert: 'Marra horizontala txertatu' //Insertar línea horizontal + }, + style: { + style: 'Estiloa', + p: 'p', + blockquote: 'Aipamena', + pre: 'Kodea', + h1: '1. izenburua', + h2: '2. izenburua', + h3: '3. izenburua', + h4: '4. izenburua', + h5: '5. izenburua', + h6: '6. izenburua' + }, + lists: { + unordered: 'Ordenatu gabeko zerrenda', + ordered: 'Zerrenda ordenatua' + }, + options: { + help: 'Laguntza', + fullscreen: 'Pantaila osoa', + codeview: 'Kodea ikusi' + }, + paragraph: { + paragraph: 'Paragrafoa', + outdent: 'Koska txikiagoa', + indent: 'Koska handiagoa', + left: 'Ezkerrean kokatu', + center: 'Erdian kokatu', + right: 'Eskuinean kokatu', + justify: 'Justifikatu' + }, + color: { + recent: 'Azken kolorea', + more: 'Kolore gehiago', + background: 'Atzeko planoa', + foreground: 'Aurreko planoa', + transparent: 'Gardena', + setTransparent: 'Gardendu', + reset: 'Lehengoratu', + resetToDefault: 'Berrezarri lehenetsia' + }, + shortcut: { + shortcuts: 'Lasterbideak', + close: 'Itxi', + textFormatting: 'Testuaren formatua', + action: 'Ekintza', + paragraphFormatting: 'Paragrafoaren formatua', + documentStyle: 'Dokumentuaren estiloa' + }, + history: { + undo: 'Desegin', + redo: 'Berregin' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-fa-IR.js b/public/admin/view/javascript/summernote/lang/summernote-fa-IR.js new file mode 100644 index 0000000..a9d1a2d --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-fa-IR.js @@ -0,0 +1,105 @@ +(function ($) { + $.extend($.summernote.lang, { + 'fa-IR': { + font: { + bold: 'درشت', + italic: 'خمیده', + underline: 'میان خط', + clear: 'پاک کردن فرمت فونت', + height: 'فاصله ی خطی', + name: 'اسم فونت', + strikethrough: 'Strike', + size: 'اندازه ی فونت' + }, + image: { + image: 'تصویر', + insert: 'وارد کردن تصویر', + resizeFull: 'تغییر به اندازه ی کامل', + resizeHalf: 'تغییر به اندازه نصف', + resizeQuarter: 'تغییر به اندازه یک چهارم', + floatLeft: 'چسباندن به چپ', + floatRight: 'چسباندن به راست', + floatNone: 'بدون چسبندگی', + dragImageHere: 'یک تصویر را اینجا بکشید', + selectFromFiles: 'فایل ها را انتخاب کنید', + url: 'آدرس تصویر', + remove: 'حذف تصویر' + }, + video: { + video: 'ویدیو', + videoLink: 'لینک ویدیو', + insert: 'افزودن ویدیو', + url: 'آدرس ویدیو ؟', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion یا Youku)' + }, + link: { + link: 'لینک', + insert: 'اضافه کردن لینک', + unlink: 'حذف لینک', + edit: 'ویرایش', + textToDisplay: 'متن جهت نمایش', + url: 'این لینک به چه آدرسی باید برود ؟', + openInNewWindow: 'در یک پنجره ی جدید باز شود' + }, + table: { + table: 'جدول' + }, + hr: { + insert: 'افزودن خط افقی' + }, + style: { + style: 'استیل', + p: 'نرمال', + blockquote: 'نقل قول', + pre: 'کد', + h1: 'سرتیتر 1', + h2: 'سرتیتر 2', + h3: 'سرتیتر 3', + h4: 'سرتیتر 4', + h5: 'سرتیتر 5', + h6: 'سرتیتر 6' + }, + lists: { + unordered: 'لیست غیر ترتیبی', + ordered: 'لیست ترتیبی' + }, + options: { + help: 'راهنما', + fullscreen: 'نمایش تمام صفحه', + codeview: 'مشاهده ی کد' + }, + paragraph: { + paragraph: 'پاراگراف', + outdent: 'کاهش تو رفتگی', + indent: 'افزایش تو رفتگی', + left: 'چپ چین', + center: 'میان چین', + right: 'راست چین', + justify: 'بلوک چین' + }, + color: { + recent: 'رنگ اخیرا استفاده شده', + more: 'رنگ بیشتر', + background: 'رنگ پس زمینه', + foreground: 'رنگ متن', + transparent: 'بی رنگ', + setTransparent: 'تنظیم حالت بی رنگ', + reset: 'بازنشاندن', + resetToDefault: 'حالت پیش فرض' + }, + shortcut: { + shortcuts: 'دکمه های میان بر', + close: 'بستن', + textFormatting: 'فرمت متن', + action: 'عملیات', + paragraphFormatting: 'فرمت پاراگراف', + documentStyle: 'استیل سند' + }, + history: { + undo: 'واچیدن', + redo: 'بازچیدن' + } + } + }); +})(jQuery); + diff --git a/public/admin/view/javascript/summernote/lang/summernote-fi-FI.js b/public/admin/view/javascript/summernote/lang/summernote-fi-FI.js new file mode 100644 index 0000000..22e7875 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-fi-FI.js @@ -0,0 +1,104 @@ +(function ($) { + $.extend($.summernote.lang, { + 'fi-FI': { + font: { + bold: 'Lihavoitu', + italic: 'Kursiivi', + underline: 'Alleviivaa', + clear: 'Tyhjennä muotoilu', + height: 'Riviväli', + name: 'Kirjasintyyppi', + strikethrough: 'Yliviivaus', + size: 'Kirjasinkoko' + }, + image: { + image: 'Kuva', + insert: 'Lisää kuva', + resizeFull: 'Koko leveys', + resizeHalf: 'Puolikas leveys', + resizeQuarter: 'Neljäsosa leveys', + floatLeft: 'Sijoita vasemmalle', + floatRight: 'Sijoita oikealle', + floatNone: 'Ei sijoitusta', + dragImageHere: 'Vedä kuva tähän', + selectFromFiles: 'Valitse tiedostoista', + url: 'URL-osoitteen mukaan', + remove: 'Poista kuva' + }, + video: { + video: 'Video', + videoLink: 'Linkki videoon', + insert: 'Lisää video', + url: 'Videon URL-osoite?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion tai Youku)' + }, + link: { + link: 'Linkki', + insert: 'Lisää linkki', + unlink: 'Poista linkki', + edit: 'Muokkaa', + textToDisplay: 'Näytettävä teksti', + url: 'Linkin URL-osoite?', + openInNewWindow: 'Avaa uudessa ikkunassa' + }, + table: { + table: 'Taulukko' + }, + hr: { + insert: 'Lisää vaakaviiva' + }, + style: { + style: 'Tyyli', + p: 'Normaali', + blockquote: 'Lainaus', + pre: 'Koodi', + h1: 'Otsikko 1', + h2: 'Otsikko 2', + h3: 'Otsikko 3', + h4: 'Otsikko 4', + h5: 'Otsikko 5', + h6: 'Otsikko 6' + }, + lists: { + unordered: 'Luettelomerkitty luettelo', + ordered: 'Numeroitu luettelo' + }, + options: { + help: 'Ohje', + fullscreen: 'Koko näyttö', + codeview: 'HTML-näkymä' + }, + paragraph: { + paragraph: 'Kappale', + outdent: 'Pienennä sisennystä', + indent: 'Suurenna sisennystä', + left: 'Tasaus vasemmalle', + center: 'Keskitä', + right: 'Tasaus oikealle', + justify: 'Tasaa' + }, + color: { + recent: 'Viimeisin väri', + more: 'Lisää värejä', + background: 'Taustaväri', + foreground: 'Tekstin väri', + transparent: 'Läpinäkyvä', + setTransparent: 'Aseta läpinäkyväksi', + reset: 'Palauta', + resetToDefault: 'Palauta oletusarvoksi' + }, + shortcut: { + shortcuts: 'Pikanäppäimet', + close: 'Sulje', + textFormatting: 'Tekstin muotoilu', + action: 'Toiminto', + paragraphFormatting: 'Kappaleen muotoilu', + documentStyle: 'Asiakirjan tyyli' + }, + history: { + undo: 'Kumoa', + redo: 'Toista' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-fr-FR.js b/public/admin/view/javascript/summernote/lang/summernote-fr-FR.js new file mode 100644 index 0000000..f6b7738 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-fr-FR.js @@ -0,0 +1,115 @@ +(function ($) { + $.extend($.summernote.lang, { + 'fr-FR': { + font: { + bold: 'Gras', + italic: 'Italique', + underline: 'Souligné', + clear: 'Effacer la mise en forme', + height: 'Interligne', + name: 'Famille de police', + strikethrough: 'Barré', + superscript: 'Exposant', + subscript: 'Indice', + size: 'Taille de police' + }, + image: { + image: 'Image', + insert: 'Insérer une image', + resizeFull: 'Taille originale', + resizeHalf: 'Redimensionner à 50 %', + resizeQuarter: 'Redimensionner à 25 %', + floatLeft: 'Aligné à gauche', + floatRight: 'Aligné à droite', + floatNone: 'Pas d\'alignement', + shapeRounded: 'Forme: Rectangle arrondie', + shapeCircle: 'Forme: Cercle', + shapeThumbnail: 'Forme: Vignette', + shapeNone: 'Forme: Aucune', + dragImageHere: 'Faites glisser une image ou un texte dans ce cadre', + dropImage: 'Lachez l\'image ou le texte', + selectFromFiles: 'Choisir un fichier', + maximumFileSize: 'Taille de fichier maximale', + maximumFileSizeError: 'Taille maximale du fichier dépassée', + url: 'URL de l\'image', + remove: 'Supprimer l\'image' + }, + video: { + video: 'Vidéo', + videoLink: 'Lien vidéo', + insert: 'Insérer une vidéo', + url: 'URL de la vidéo', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' + }, + link: { + link: 'Lien', + insert: 'Insérer un lien', + unlink: 'Supprimer un lien', + edit: 'Modifier', + textToDisplay: 'Texte à afficher', + url: 'URL du lien', + openInNewWindow: 'Ouvrir dans une nouvelle fenêtre' + }, + table: { + table: 'Tableau' + }, + hr: { + insert: 'Insérer une ligne horizontale' + }, + style: { + style: 'Style', + p: 'p', + blockquote: 'Citation', + pre: 'Code source', + h1: 'Titre 1', + h2: 'Titre 2', + h3: 'Titre 3', + h4: 'Titre 4', + h5: 'Titre 5', + h6: 'Titre 6' + }, + lists: { + unordered: 'Liste à puces', + ordered: 'Liste numérotée' + }, + options: { + help: 'Aide', + fullscreen: 'Plein écran', + codeview: 'Afficher le code HTML' + }, + paragraph: { + paragraph: 'Paragraphe', + outdent: 'Diminuer le retrait', + indent: 'Augmenter le retrait', + left: 'Aligner à gauche', + center: 'Centrer', + right: 'Aligner à droite', + justify: 'Justifier' + }, + color: { + recent: 'Dernière couleur sélectionnée', + more: 'Plus de couleurs', + background: 'Couleur de fond', + foreground: 'Couleur de police', + transparent: 'Transparent', + setTransparent: 'Définir la transparence', + reset: 'Restaurer', + resetToDefault: 'Restaurer la couleur par défaut' + }, + shortcut: { + shortcuts: 'Raccourcis', + close: 'Fermer', + textFormatting: 'Mise en forme du texte', + action: 'Action', + paragraphFormatting: 'Mise en forme des paragraphes', + documentStyle: 'Style du document', + extraKeys: 'Touches supplémentaires' + }, + history: { + undo: 'Annuler la dernière action', + redo: 'Restaurer la dernière action annulée' + } + + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-gl-ES.js b/public/admin/view/javascript/summernote/lang/summernote-gl-ES.js new file mode 100644 index 0000000..004af3c --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-gl-ES.js @@ -0,0 +1,147 @@ +(function ($) { + $.extend($.summernote.lang, { + 'gl-ES': { + font: { + bold: 'Negrita', + italic: 'Cursiva', + underline: 'Subliñado', + clear: 'Quitar estilo de fonte', + height: 'Altura de liña', + name: 'Fonte', + strikethrough: 'Riscado', + superscript: 'Superíndice', + subscript: 'Subíndice', + size: 'Tamaño da fonte' + }, + image: { + image: 'Imaxe', + insert: 'Inserir imaxe', + resizeFull: 'Redimensionar a tamaño completo', + resizeHalf: 'Redimensionar á metade', + resizeQuarter: 'Redimensionar a un cuarto', + floatLeft: 'Flotar á esquerda', + floatRight: 'Flotar á dereita', + floatNone: 'Non flotar', + shapeRounded: 'Forma: Redondeado', + shapeCircle: 'Forma: Círculo', + shapeThumbnail: 'Forma: Marco', + shapeNone: 'Forma: Ningunha', + dragImageHere: 'Arrastrar unha imaxe ou texto aquí', + dropImage: 'Solta a imaxe ou texto', + selectFromFiles: 'Seleccionar desde os arquivos', + maximumFileSize: 'Tamaño máximo do arquivo', + maximumFileSizeError: 'Superaches o tamaño máximo do arquivo.', + url: 'URL da imaxe', + remove: 'Eliminar imaxe' + }, + video: { + video: 'Vídeo', + videoLink: 'Ligazón do vídeo', + insert: 'Insertar vídeo', + url: 'URL do vídeo?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, o Youku)' + }, + link: { + link: 'Ligazón', + insert: 'Inserir Ligazón', + unlink: 'Quitar Ligazón', + edit: 'Editar', + textToDisplay: 'Texto para amosar', + url: 'Cara a que URL leva a ligazón?', + openInNewWindow: 'Abrir nunha nova xanela' + }, + table: { + table: 'Táboa' + }, + hr: { + insert: 'Inserir liña horizontal' + }, + style: { + style: 'Estilo', + normal: 'Normal', + blockquote: 'Cita', + pre: 'Código', + h1: 'Título 1', + h2: 'Título 2', + h3: 'Título 3', + h4: 'Título 4', + h5: 'Título 5', + h6: 'Título 6' + }, + lists: { + unordered: 'Lista desordenada', + ordered: 'Lista ordenada' + }, + options: { + help: 'Axuda', + fullscreen: 'Pantalla completa', + codeview: 'Ver código fonte' + }, + paragraph: { + paragraph: 'Parágrafo', + outdent: 'Menos tabulación', + indent: 'Máis tabulación', + left: 'Aliñar á esquerda', + center: 'Aliñar ao centro', + right: 'Aliñar á dereita', + justify: 'Xustificar' + }, + color: { + recent: 'Última cor', + more: 'Máis cores', + background: 'Cor de fondo', + foreground: 'Cor de fuente', + transparent: 'Transparente', + setTransparent: 'Establecer transparente', + reset: 'Restaurar', + resetToDefault: 'Restaurar por defecto' + }, + shortcut: { + shortcuts: 'Atallos de teclado', + close: 'Pechar', + textFormatting: 'Formato de texto', + action: 'Acción', + paragraphFormatting: 'Formato de parágrafo', + documentStyle: 'Estilo de documento', + extraKeys: 'Teclas adicionais' + }, + help : { + 'insertParagraph': 'Inserir parágrafo', + 'undo': 'Desfacer última acción', + 'redo': 'Refacer última acción', + 'tab': 'Tabular', + 'untab': 'Eliminar tabulación', + 'bold': 'Establecer estilo negrita', + 'italic': 'Establecer estilo cursiva', + 'underline': 'Establecer estilo subliñado', + 'strikethrough': 'Establecer estilo riscado', + 'removeFormat': 'Limpar estilo', + 'justifyLeft': 'Aliñar á esquerda', + 'justifyCenter': 'Aliñar ao centro', + 'justifyRight': 'Aliñar á dereita', + 'justifyFull': 'Xustificar', + 'insertUnorderedList': 'Inserir lista desordenada', + 'insertOrderedList': 'Inserir lista ordenada', + 'outdent': 'Reducir tabulación do parágrafo', + 'indent': 'Aumentar tabulación do parágrafo', + 'formatPara': 'Mudar estilo do bloque a parágrafo (etiqueta P)', + 'formatH1': 'Mudar estilo do bloque a H1', + 'formatH2': 'Mudar estilo do bloque a H2', + 'formatH3': 'Mudar estilo do bloque a H3', + 'formatH4': 'Mudar estilo do bloque a H4', + 'formatH5': 'Mudar estilo do bloque a H5', + 'formatH6': 'Mudar estilo do bloque a H6', + 'insertHorizontalRule': 'Inserir liña horizontal', + 'linkDialog.show': 'Amosar panel ligazóns' + }, + history: { + undo: 'Desfacer', + redo: 'Refacer' + }, + specialChar: { + specialChar: 'CARACTERES ESPECIAIS', + select: 'Selecciona Caracteres especiais' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-he-IL.js b/public/admin/view/javascript/summernote/lang/summernote-he-IL.js new file mode 100644 index 0000000..344d93b --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-he-IL.js @@ -0,0 +1,107 @@ +(function ($) { + $.extend($.summernote.lang, { + 'he-IL': { + font: { + bold: 'מודגש', + italic: 'נטוי', + underline: 'קו תחתון', + clear: 'נקה עיצוב', + height: 'גובה', + name: 'גופן', + strikethrough: 'קו חוצה', + subscript: 'כתב תחתי', + superscript: 'כתב עילי', + size: 'גודל גופן' + }, + image: { + image: 'תמונה', + insert: 'הוסף תמונה', + resizeFull: 'גודל מלא', + resizeHalf: 'להקטין לחצי', + resizeQuarter: 'להקטין לרבע', + floatLeft: 'יישור לשמאל', + floatRight: 'יישור לימין', + floatNone: 'ישר', + dragImageHere: 'גרור תמונה לכאן', + selectFromFiles: 'בחר מתוך קבצים', + url: 'נתיב לתמונה', + remove: 'הסר תמונה' + }, + video: { + video: 'סרטון', + videoLink: 'קישור לסרטון', + insert: 'הוסף סרטון', + url: 'קישור לסרטון', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion או Youku)' + }, + link: { + link: 'קישור', + insert: 'הוסף קישור', + unlink: 'הסר קישור', + edit: 'ערוך', + textToDisplay: 'טקסט להציג', + url: 'קישור', + openInNewWindow: 'פתח בחלון חדש' + }, + table: { + table: 'טבלה' + }, + hr: { + insert: 'הוסף קו' + }, + style: { + style: 'עיצוב', + p: 'טקסט רגיל', + blockquote: 'ציטוט', + pre: 'קוד', + h1: 'כותרת 1', + h2: 'כותרת 2', + h3: 'כותרת 3', + h4: 'כותרת 4', + h5: 'כותרת 5', + h6: 'כותרת 6' + }, + lists: { + unordered: 'רשימת תבליטים', + ordered: 'רשימה ממוספרת' + }, + options: { + help: 'עזרה', + fullscreen: 'מסך מלא', + codeview: 'תצוגת קוד' + }, + paragraph: { + paragraph: 'פסקה', + outdent: 'הקטן כניסה', + indent: 'הגדל כניסה', + left: 'יישור לשמאל', + center: 'יישור למרכז', + right: 'יישור לימין', + justify: 'מיושר' + }, + color: { + recent: 'צבע טקסט אחרון', + more: 'עוד צבעים', + background: 'צבע רקע', + foreground: 'צבע טקסט', + transparent: 'שקוף', + setTransparent: 'קבע כשקוף', + reset: 'איפוס', + resetToDefault: 'אפס לברירת מחדל' + }, + shortcut: { + shortcuts: 'קיצורי מקלדת', + close: 'סגור', + textFormatting: 'עיצוב הטקסט', + action: 'פעולה', + paragraphFormatting: 'סגנונות פסקה', + documentStyle: 'עיצוב המסמך', + extraKeys: 'קיצורים נוספים' + }, + history: { + undo: 'בטל פעולה', + redo: 'בצע שוב' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-hr-HR.js b/public/admin/view/javascript/summernote/lang/summernote-hr-HR.js new file mode 100644 index 0000000..8b0d8bf --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-hr-HR.js @@ -0,0 +1,104 @@ +(function ($) { + $.extend($.summernote.lang, { + 'hr-HR': { + font: { + bold: 'Podebljano', + italic: 'Kurziv', + underline: 'Podvučeno', + clear: 'Ukloni stilove fonta', + height: 'Visina linije', + strikethrough: 'Precrtano', + size: 'Veličina fonta' + }, + image: { + image: 'Slika', + insert: 'Ubaci sliku', + resizeFull: 'Puna veličina', + resizeHalf: 'Umanji na 50%', + resizeQuarter: 'Umanji na 25%', + floatLeft: 'Poravnaj lijevo', + floatRight: 'Poravnaj desno', + floatNone: 'Bez poravnanja', + dragImageHere: 'Povuci sliku ovdje', + selectFromFiles: 'Izaberi iz datoteke', + url: 'Adresa slike', + remove: 'Ukloni sliku' + }, + video: { + video: 'Video', + videoLink: 'Veza na video', + insert: 'Ubaci video', + url: 'URL video', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)' + }, + link: { + link: 'Veza', + insert: 'Ubaci vezu', + unlink: 'Ukloni vezu', + edit: 'Uredi', + textToDisplay: 'Tekst za prikaz', + url: 'Internet adresa', + openInNewWindow: 'Otvori u novom prozoru' + }, + table: { + table: 'Tablica' + }, + hr: { + insert: 'Ubaci horizontalnu liniju' + }, + style: { + style: 'Stil', + p: 'pni', + blockquote: 'Citat', + pre: 'Kôd', + h1: 'Naslov 1', + h2: 'Naslov 2', + h3: 'Naslov 3', + h4: 'Naslov 4', + h5: 'Naslov 5', + h6: 'Naslov 6' + }, + lists: { + unordered: 'Obična lista', + ordered: 'Numerirana lista' + }, + options: { + help: 'Pomoć', + fullscreen: 'Preko cijelog ekrana', + codeview: 'Izvorni kôd' + }, + paragraph: { + paragraph: 'Paragraf', + outdent: 'Smanji uvlačenje', + indent: 'Povećaj uvlačenje', + left: 'Poravnaj lijevo', + center: 'Centrirano', + right: 'Poravnaj desno', + justify: 'Poravnaj obostrano' + }, + color: { + recent: 'Posljednja boja', + more: 'Više boja', + background: 'Boja pozadine', + foreground: 'Boja teksta', + transparent: 'Prozirna', + setTransparent: 'Prozirna', + reset: 'Poništi', + resetToDefault: 'Podrazumijevana' + }, + shortcut: { + shortcuts: 'Prečice s tipkovnice', + close: 'Zatvori', + textFormatting: 'Formatiranje teksta', + action: 'Akcija', + paragraphFormatting: 'Formatiranje paragrafa', + documentStyle: 'Stil dokumenta', + extraKeys: 'Dodatne kombinacije' + }, + history: { + undo: 'Poništi', + redo: 'Ponovi' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-hu-HU.js b/public/admin/view/javascript/summernote/lang/summernote-hu-HU.js new file mode 100644 index 0000000..e732c94 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-hu-HU.js @@ -0,0 +1,135 @@ +(function ($) { + $.extend($.summernote.lang, { + 'hu-HU': { + font: { + bold: 'Félkövér', + italic: 'Dőlt', + underline: 'Aláhúzott', + clear: 'Formázás törlése', + height: 'Sorköz', + name: 'Betűtípus', + strikethrough: 'Áthúzott', + size: 'Betűméret' + }, + image: { + image: 'Kép', + insert: 'Kép beszúrása', + resizeFull: 'Átméretezés teljes méretre', + resizeHalf: 'Átméretezés felére', + resizeQuarter: 'Átméretezés negyedére', + floatLeft: 'Igazítás balra', + floatRight: 'Igazítás jobbra', + floatNone: 'Igazítás törlése', + dragImageHere: 'Ide húzhat képet vagy szöveget', + dropImage: 'Engedje el a képet vagy szöveget', + selectFromFiles: 'Fájlok kiválasztása', + url: 'Kép URL címe', + remove: 'Kép törlése' + }, + video: { + video: 'Videó', + videoLink: 'Videó hivatkozás', + insert: 'Videó beszúrása', + url: 'Videó URL címe', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion vagy Youku)' + }, + link: { + link: 'Hivatkozás', + insert: 'Hivatkozás beszúrása', + unlink: 'Hivatkozás megszüntetése', + edit: 'Szerkesztés', + textToDisplay: 'Megjelenítendő szöveg', + url: 'Milyen URL címre hivatkozzon?', + openInNewWindow: 'Megnyitás új ablakban' + }, + table: { + table: 'Táblázat' + }, + hr: { + insert: 'Elválasztó vonal beszúrása' + }, + style: { + style: 'Stílus', + p: 'Normál', + blockquote: 'Idézet', + pre: 'Kód', + h1: 'Fejléc 1', + h2: 'Fejléc 2', + h3: 'Fejléc 3', + h4: 'Fejléc 4', + h5: 'Fejléc 5', + h6: 'Fejléc 6' + }, + lists: { + unordered: 'Listajeles lista', + ordered: 'Számozott lista' + }, + options: { + help: 'Súgó', + fullscreen: 'Teljes képernyő', + codeview: 'Kód nézet' + }, + paragraph: { + paragraph: 'Bekezdés', + outdent: 'Behúzás csökkentése', + indent: 'Behúzás növelése', + left: 'Igazítás balra', + center: 'Igazítás középre', + right: 'Igazítás jobbra', + justify: 'Sorkizárt' + }, + color: { + recent: 'Jelenlegi szín', + more: 'További színek', + background: 'Háttérszín', + foreground: 'Betűszín', + transparent: 'Átlátszó', + setTransparent: 'Átlászóság beállítása', + reset: 'Visszaállítás', + resetToDefault: 'Alaphelyzetbe állítás' + }, + shortcut: { + shortcuts: 'Gyorsbillentyű', + close: 'Bezárás', + textFormatting: 'Szöveg formázása', + action: 'Művelet', + paragraphFormatting: 'Bekezdés formázása', + documentStyle: 'Dokumentumstílus' + }, + help: { + 'insertParagraph': 'Új bekezdés', + 'undo': 'Visszavonás', + 'redo': 'Újra', + 'tab': 'Behúzás növelése', + 'untab': 'Behúzás csökkentése', + 'bold': 'Félkövérre állítás', + 'italic': 'Dőltre állítás', + 'underline': 'Aláhúzás', + 'strikethrough': 'Áthúzás', + 'removeFormat': 'Formázás törlése', + 'justifyLeft': 'Balra igazítás', + 'justifyCenter': 'Középre igazítás', + 'justifyRight': 'Jobbra igazítás', + 'justifyFull': 'Sorkizárt', + 'insertUnorderedList': 'Számozatlan lista be/ki', + 'insertOrderedList': 'Számozott lista be/ki', + 'outdent': 'Jelenlegi bekezdés behúzásának megszüntetése', + 'indent': 'Jelenlegi bekezdés behúzása', + 'formatPara': 'Blokk formázása bekezdésként (P tag)', + 'formatH1': 'Blokk formázása, mint Fejléc 1', + 'formatH2': 'Blokk formázása, mint Fejléc 2', + 'formatH3': 'Blokk formázása, mint Fejléc 3', + 'formatH4': 'Blokk formázása, mint Fejléc 4', + 'formatH5': 'Blokk formázása, mint Fejléc 5', + 'formatH6': 'Blokk formázása, mint Fejléc 6', + 'insertHorizontalRule': 'Vízszintes vonal beszúrása', + 'linkDialog.show': 'Link párbeszédablak megjelenítése' + }, + history: { + undo: 'Visszavonás', + redo: 'Újra' + } + + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-id-ID.js b/public/admin/view/javascript/summernote/lang/summernote-id-ID.js new file mode 100644 index 0000000..8283107 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-id-ID.js @@ -0,0 +1,103 @@ +(function ($) { + $.extend($.summernote.lang, { + 'id-ID': { + font: { + bold: 'Tebal', + italic: 'Miring', + underline: 'Garis bawah', + clear: 'Bersihkan gaya', + height: 'Jarak baris', + strikethrough: 'Coret', + size: 'Ukuran font' + }, + image: { + image: 'Gambar', + insert: 'Sisipkan gambar', + resizeFull: 'Ukuran penuh', + resizeHalf: 'Ukuran 50%', + resizeQuarter: 'Ukuran 25%', + floatLeft: 'Rata kiri', + floatRight: 'Rata kanan', + floatNone: 'Tidak ada perataan', + dragImageHere: 'Tarik gambar pada area ini', + selectFromFiles: 'Pilih gambar dari berkas', + url: 'URL gambar', + remove: 'Hapus Gambar' + }, + video: { + video: 'Video', + videoLink: 'Link video', + insert: 'Sisipkan video', + url: 'Tautan video', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion atau Youku)' + }, + link: { + link: 'Tautan', + insert: 'Tambah tautan', + unlink: 'Hapus tautan', + edit: 'Edit', + textToDisplay: 'Tampilan teks', + url: 'Tautan tujuan', + openInNewWindow: 'Buka di jendela baru' + }, + table: { + table: 'Tabel' + }, + hr: { + insert: 'Masukkan garis horizontal' + }, + style: { + style: 'Gaya', + p: 'p', + blockquote: 'Kutipan', + pre: 'Kode', + h1: 'Heading 1', + h2: 'Heading 2', + h3: 'Heading 3', + h4: 'Heading 4', + h5: 'Heading 5', + h6: 'Heading 6' + }, + lists: { + unordered: 'Pencacahan', + ordered: 'Penomoran' + }, + options: { + help: 'Bantuan', + fullscreen: 'Layar penuh', + codeview: 'Kode HTML' + }, + paragraph: { + paragraph: 'Paragraf', + outdent: 'Outdent', + indent: 'Indent', + left: 'Rata kiri', + center: 'Rata tengah', + right: 'Rata kanan', + justify: 'Rata kanan kiri' + }, + color: { + recent: 'Warna sekarang', + more: 'Selengkapnya', + background: 'Warna latar', + foreground: 'Warna font', + transparent: 'Transparan', + setTransparent: 'Atur transparansi', + reset: 'Atur ulang', + resetToDefault: 'Kembalikan kesemula' + }, + shortcut: { + shortcuts: 'Jalan pintas', + close: 'Keluar', + textFormatting: 'Format teks', + action: 'Aksi', + paragraphFormatting: 'Format paragraf', + documentStyle: 'Gaya dokumen' + }, + history: { + undo: 'Kembali', + redo: 'Ulang' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-it-IT.js b/public/admin/view/javascript/summernote/lang/summernote-it-IT.js new file mode 100644 index 0000000..73f133c --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-it-IT.js @@ -0,0 +1,104 @@ +(function ($) { + $.extend($.summernote.lang, { + 'it-IT': { + font: { + bold: 'Testo in grassetto', + italic: 'Testo in corsivo', + underline: 'Testo sottolineato', + clear: 'Elimina la formattazione del testo', + height: 'Altezza della linea di testo', + name: 'Famiglia Font', + strikethrough: 'Testo barrato', + size: 'Dimensione del carattere' + }, + image: { + image: 'Immagine', + insert: 'Inserisci Immagine', + resizeFull: 'Dimensioni originali', + resizeHalf: 'Ridimensiona al 50%', + resizeQuarter: 'Ridimensiona al 25%', + floatLeft: 'Posiziona a sinistra', + floatRight: 'Posiziona a destra', + floatNone: 'Nessun posizionamento', + dragImageHere: 'Trascina qui un\'immagine', + selectFromFiles: 'Scegli dai Documenti', + url: 'URL dell\'immagine', + remove: 'Rimuovi immagine' + }, + video: { + video: 'Video', + videoLink: 'Collegamento ad un Video', + insert: 'Inserisci Video', + url: 'URL del Video', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)' + }, + link: { + link: 'Collegamento', + insert: 'Inserisci Collegamento', + unlink: 'Elimina collegamento', + edit: 'Modifica collegamento', + textToDisplay: 'Testo del collegamento', + url: 'URL del collegamento', + openInNewWindow: 'Apri in una nuova finestra' + }, + table: { + table: 'Tabella' + }, + hr: { + insert: 'Inserisce una linea di separazione' + }, + style: { + style: 'Stili', + p: 'pe', + blockquote: 'Citazione', + pre: 'Codice', + h1: 'Titolo 1', + h2: 'Titolo 2', + h3: 'Titolo 3', + h4: 'Titolo 4', + h5: 'Titolo 5', + h6: 'Titolo 6' + }, + lists: { + unordered: 'Elenco non ordinato', + ordered: 'Elenco ordinato' + }, + options: { + help: 'Aiuto', + fullscreen: 'Modalità a tutto schermo', + codeview: 'Visualizza codice' + }, + paragraph: { + paragraph: 'Paragrafo', + outdent: 'Diminuisce il livello di rientro', + indent: 'Aumenta il livello di rientro', + left: 'Allinea a sinistra', + center: 'Centra', + right: 'Allinea a destra', + justify: 'Giustifica (allinea a destra e sinistra)' + }, + color: { + recent: 'Ultimo colore utilizzato', + more: 'Altri colori', + background: 'Colore di sfondo', + foreground: 'Colore', + transparent: 'Trasparente', + setTransparent: 'Trasparente', + reset: 'Reimposta', + resetToDefault: 'Reimposta i colori' + }, + shortcut: { + shortcuts: 'Scorciatoie da tastiera', + close: 'Chiudi', + textFormatting: 'Formattazione testo', + action: 'Azioni', + paragraphFormatting: 'Formattazione paragrafo', + documentStyle: 'Stili' + }, + history: { + undo: 'Annulla', + redo: 'Ripristina' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-ja-JP.js b/public/admin/view/javascript/summernote/lang/summernote-ja-JP.js new file mode 100644 index 0000000..58ac5af --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-ja-JP.js @@ -0,0 +1,133 @@ +(function ($) { + $.extend($.summernote.lang, { + 'ja-JP': { + font: { + bold: '太字', + italic: '斜体', + underline: '下線', + clear: 'クリア', + height: '文字高', + name: 'フォント', + strikethrough: '取り消し線', + size: '大きさ' + }, + image: { + image: '画像', + insert: '画像挿入', + resizeFull: '最大化', + resizeHalf: '1/2', + resizeQuarter: '1/4', + floatLeft: '左寄せ', + floatRight: '右寄せ', + floatNone: '寄せ解除', + dragImageHere: 'ここに画像をドラッグしてください', + selectFromFiles: '画像ファイルを選ぶ', + url: 'URLから画像を挿入する', + remove: '画像を削除する' + }, + video: { + video: '動画', + videoLink: '動画リンク', + insert: '動画挿入', + url: '動画のURL', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku)' + }, + link: { + link: 'リンク', + insert: 'リンク挿入', + unlink: 'リンク解除', + edit: '編集', + textToDisplay: 'リンク文字列', + url: 'URLを入力してください', + openInNewWindow: '新しいウィンドウで開く' + }, + table: { + table: 'テーブル' + }, + hr: { + insert: '水平線の挿入' + }, + style: { + style: 'スタイル', + p: '標準', + blockquote: '引用', + pre: 'コード', + h1: '見出し1', + h2: '見出し2', + h3: '見出し3', + h4: '見出し4', + h5: '見出し5', + h6: '見出し6' + }, + lists: { + unordered: '通常リスト', + ordered: '番号リスト' + }, + options: { + help: 'ヘルプ', + fullscreen: 'フルスクリーン', + codeview: 'コード表示' + }, + paragraph: { + paragraph: '文章', + outdent: '字上げ', + indent: '字下げ', + left: '左寄せ', + center: '中央寄せ', + right: '右寄せ', + justify: '均等割付' + }, + color: { + recent: '現在の色', + more: 'もっと見る', + background: '背景色', + foreground: '文字色', + transparent: '透過率', + setTransparent: '透過率を設定', + reset: '標準', + resetToDefault: '標準に戻す' + }, + shortcut: { + shortcuts: 'ショートカット', + close: '閉じる', + textFormatting: '文字フォーマット', + action: 'アクション', + paragraphFormatting: '文章フォーマット', + documentStyle: 'ドキュメント形式' + }, + history: { + undo: '元に戻す', + redo: 'やり直す' + }, + help: { + 'insertParagraph': '改行挿入', + 'undo': '一旦、行った操作を戻す', + 'redo': '最後のコマンドをやり直す', + 'tab': 'Tab', + 'untab': 'タブ戻し', + 'bold': '太文字', + 'italic': '斜体', + 'underline': '下線', + 'strikethrough': '取り消し線', + 'removeFormat': '装飾を戻す', + 'justifyLeft': '左寄せ', + 'justifyCenter': '真ん中寄せ', + 'justifyRight': '右寄せ', + 'justifyFull': 'すべてを整列', + 'insertUnorderedList': '行頭に●を挿入', + 'insertOrderedList': '行頭に番号を挿入', + 'outdent': '字下げを戻す(アウトデント)', + 'indent': '字下げする(インデント)', + 'formatPara': '段落(P tag)指定', + 'formatH1': 'H1指定', + 'formatH2': 'H2指定', + 'formatH3': 'H3指定', + 'formatH4': 'H4指定', + 'formatH5': 'H5指定', + 'formatH6': 'H6指定', + 'insertHorizontalRule': '<hr />を挿入', + 'linkDialog.show': 'リンク挿入' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-ko-KR.js b/public/admin/view/javascript/summernote/lang/summernote-ko-KR.js new file mode 100644 index 0000000..28aa872 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-ko-KR.js @@ -0,0 +1,115 @@ +(function ($) { + $.extend($.summernote.lang, { + 'ko-KR': { + font: { + bold: '굵게', + italic: '기울임꼴', + underline: '밑줄', + clear: '글자 효과 없애기', + height: '줄간격', + name: '글꼴', + superscript: '위 첨자', + subscript: '아래 첨자', + strikethrough: '취소선', + size: '글자 크기' + }, + image: { + image: '사진', + insert: '사진 추가', + resizeFull: '100% 크기로 변경', + resizeHalf: '50% 크기로 변경', + resizeQuarter: '25% 크기로 변경', + floatLeft: '왼쪽 정렬', + floatRight: '오른쪽 정렬', + floatNone: '정렬하지 않음', + shapeRounded: '스타일: 둥근 모서리', + shapeCircle: '스타일: 원형', + shapeThumbnail: '스타일: 액자', + shapeNone: '스타일: 없음', + dragImageHere: '텍스트 혹은 사진을 이곳으로 끌어오세요', + dropImage: '텍스트 혹은 사진을 내려놓으세요', + selectFromFiles: '파일 선택', + url: '사진 URL', + remove: '사진 삭제' + }, + video: { + video: '동영상', + videoLink: '동영상 링크', + insert: '동영상 추가', + url: '동영상 URL', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku 사용 가능)' + }, + link: { + link: '링크', + insert: '링크 추가', + unlink: '링크 삭제', + edit: '수정', + textToDisplay: '링크에 표시할 내용', + url: '이동할 URL', + openInNewWindow: '새창으로 열기' + }, + table: { + table: '테이블' + }, + hr: { + insert: '구분선 추가' + }, + style: { + style: '스타일', + p: '본문', + blockquote: '인용구', + pre: '코드', + h1: '제목 1', + h2: '제목 2', + h3: '제목 3', + h4: '제목 4', + h5: '제목 5', + h6: '제목 6' + }, + lists: { + unordered: '글머리 기호', + ordered: '번호 매기기' + }, + options: { + help: '도움말', + fullscreen: '전체 화면', + codeview: '코드 보기' + }, + paragraph: { + paragraph: '문단 정렬', + outdent: '내어쓰기', + indent: '들여쓰기', + left: '왼쪽 정렬', + center: '가운데 정렬', + right: '오른쪽 정렬', + justify: '양쪽 정렬' + }, + color: { + recent: '마지막으로 사용한 색', + more: '다른 색 선택', + background: '배경색', + foreground: '글자색', + transparent: '투명', + setTransparent: '투명', + reset: '취소', + resetToDefault: '기본 값으로 변경' + }, + shortcut: { + shortcuts: '키보드 단축키', + close: '닫기', + textFormatting: '글자 스타일 적용', + action: '기능', + paragraphFormatting: '문단 스타일 적용', + documentStyle: '문서 스타일 적용' + }, + history: { + undo: '실행 취소', + redo: '다시 실행' + }, + specialChar: { + specialChar: '특수문자', + select: '특수문자를 선택하세요' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-lt-LT.js b/public/admin/view/javascript/summernote/lang/summernote-lt-LT.js new file mode 100644 index 0000000..6ed66a9 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-lt-LT.js @@ -0,0 +1,107 @@ +(function ($) { + $.extend($.summernote.lang, { + 'lt-LT': { + font: { + bold: 'Paryškintas', + italic: 'Kursyvas', + underline: 'Pabrėžtas', + clear: 'Be formatavimo', + height: 'Eilutės aukštis', + name: 'Šrifto pavadinimas', + strikethrough: 'Perbrauktas', + superscript: 'Viršutinis', + subscript: 'Indeksas', + size: 'Šrifto dydis' + }, + image: { + image: 'Paveikslėlis', + insert: 'Įterpti paveikslėlį', + resizeFull: 'Pilnas dydis', + resizeHalf: 'Sumažinti dydį 50%', + resizeQuarter: 'Sumažinti dydį 25%', + floatLeft: 'Kairinis lygiavimas', + floatRight: 'Dešininis lygiavimas', + floatNone: 'Jokio lygiavimo', + shapeRounded: 'Forma: apvalūs kraštai', + shapeCircle: 'Forma: apskritimas', + shapeThumbnail: 'Forma: miniatiūra', + shapeNone: 'Forma: jokia', + dragImageHere: 'Vilkite paveikslėlį čia', + selectFromFiles: 'Pasirinkite failą', + maximumFileSize: 'Maskimalus failo dydis', + maximumFileSizeError: 'Maskimalus failo dydis viršytas!', + url: 'Paveikslėlio URL adresas', + remove: 'Ištrinti paveikslėlį' + }, + link: { + link: 'Nuoroda', + insert: 'Įterpti nuorodą', + unlink: 'Pašalinti nuorodą', + edit: 'Redaguoti', + textToDisplay: 'Rodomas tekstas', + url: 'Koks URL adresas yra susietas?', + openInNewWindow: 'Atidaryti naujame lange' + }, + table: { + table: 'Lentelė' + }, + hr: { + insert: 'Įterpti horizontalią liniją' + }, + style: { + style: 'Stilius', + p: 'pus', + blockquote: 'Citata', + pre: 'Kodas', + h1: 'Antraštė 1', + h2: 'Antraštė 2', + h3: 'Antraštė 3', + h4: 'Antraštė 4', + h5: 'Antraštė 5', + h6: 'Antraštė 6' + }, + lists: { + unordered: 'Suženklintasis sąrašas', + ordered: 'Sunumeruotas sąrašas' + }, + options: { + help: 'Pagalba', + fullscreen: 'Viso ekrano režimas', + codeview: 'HTML kodo peržiūra' + }, + paragraph: { + paragraph: 'Pastraipa', + outdent: 'Sumažinti įtrauką', + indent: 'Padidinti įtrauką', + left: 'Kairinė lygiuotė', + center: 'Centrinė lygiuotė', + right: 'Dešininė lygiuotė', + justify: 'Abipusis išlyginimas' + }, + color: { + recent: 'Paskutinė naudota spalva', + more: 'Daugiau spalvų', + background: 'Fono spalva', + foreground: 'Šrifto spalva', + transparent: 'Permatoma', + setTransparent: 'Nustatyti skaidrumo intensyvumą', + reset: 'Atkurti', + resetToDefault: 'Atstatyti numatytąją spalvą' + }, + shortcut: { + shortcuts: 'Spartieji klavišai', + close: 'Uždaryti', + textFormatting: 'Teksto formatavimas', + action: 'Veiksmas', + paragraphFormatting: 'Pastraipos formatavimas', + documentStyle: 'Dokumento stilius', + extraKeys: 'Papildomi klavišų deriniai' + }, + history: { + undo: 'Anuliuoti veiksmą', + redo: 'Perdaryti veiksmą' + } + + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-lt-LV.js b/public/admin/view/javascript/summernote/lang/summernote-lt-LV.js new file mode 100644 index 0000000..e873d85 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-lt-LV.js @@ -0,0 +1,135 @@ +(function ($) { + $.extend($.summernote.lang, { + 'lv-LV': { + font: { + bold: 'Treknraksts', + italic: 'Kursīvs', + underline: 'Pasvītrots', + clear: 'Noņemt formatējumu', + height: 'Līnijas augstums', + name: 'Fonts', + strikethrough: 'Nosvītrots', + superscript: 'Augšraksts', + subscript: 'Apakšraksts', + size: 'Fonta lielums' + }, + image: { + image: 'Attēls', + insert: 'Ievietot attēlu', + resizeFull: 'Pilns izmērts', + resizeHalf: 'Samazināt 50%', + resizeQuarter: 'Samazināt 25%', + floatLeft: 'Līdzināt pa kreisi', + floatRight: 'Līdzināt pa labi', + floatNone: 'Nelīdzināt', + shapeRounded: 'Forma: apaļām malām', + shapeCircle: 'Forma: aplis', + shapeThumbnail: 'Forma: rāmītis', + shapeNone: 'Forma: orģināla', + dragImageHere: 'Ievēlciet attēlu šeit', + selectFromFiles: 'Izvēlēties failu', + maximumFileSize: 'Maksimālais faila izmērs', + maximumFileSizeError: 'Faila izmērs pārāk liels!', + url: 'Attēla URL', + remove: 'Dzēst attēlu' + }, + link: { + link: 'Saite', + insert: 'Ievietot saiti', + unlink: 'Noņemt saiti', + edit: 'Rediģēt', + textToDisplay: 'Saites saturs', + url: 'Koks URL adresas yra susietas?', + openInNewWindow: 'Atvērt jaunā logā' + }, + table: { + table: 'Tabula' + }, + hr: { + insert: 'Ievietot līniju' + }, + style: { + style: 'Stils', + p: 'Parasts', + blockquote: 'Citāts', + pre: 'Kods', + h1: 'Virsraksts h1', + h2: 'Virsraksts h2', + h3: 'Virsraksts h3', + h4: 'Virsraksts h4', + h5: 'Virsraksts h5', + h6: 'Virsraksts h6' + }, + lists: { + unordered: 'Nenumurēts saraksts', + ordered: 'Numurēts saraksts' + }, + options: { + help: 'Palīdzība', + fullscreen: 'Pa visu ekrānu', + codeview: 'HTML kods' + }, + paragraph: { + paragraph: 'Paragrāfs', + outdent: 'Samazināt atkāpi', + indent: 'Palielināt atkāpi', + left: 'Līdzināt pa kreisi', + center: 'Centrēt', + right: 'Līdzināt pa labi', + justify: 'Līdzināt gar abām malām' + }, + color: { + recent: 'Nesen izmantotās', + more: 'Citas krāsas', + background: 'Fona krāsa', + foreground: 'Fonta krāsa', + transparent: 'Caurspīdīgs', + setTransparent: 'Iestatīt caurspīdīgumu', + reset: 'Atjaunot', + resetToDefault: 'Atjaunot noklusējumu' + }, + shortcut: { + shortcuts: 'Saīsnes', + close: 'Aizvērt', + textFormatting: 'Teksta formatēšana', + action: 'Darbība', + paragraphFormatting: 'Paragrāfa formatēšana', + documentStyle: 'Dokumenta stils', + extraKeys: 'Citas taustiņu kombinācijas' + }, + history: { + undo: 'Atsauks (undo)', + redo: 'Atkārtot (redo)' + }, + help: { + insertParagraph: 'Ievietot Paragrāfu', + undo: 'Atcelt iepriekšējo darbību', + redo: 'Atkārtot atcelto darbību', + tab: 'Atkāpe', + untab: 'Samazināt atkāpi', + bold: 'Pārvērst tekstu treknrakstā', + italic: 'Pārvērst tekstu slīprakstā (kursīvā)', + underline: 'Pasvītrot tekstu', + strikethrough: 'Nosvītrot tekstu', + removeFormat: 'Notīrīt stilu no teksta', + justifyLeft: 'Līdzīnāt saturu pa kreisi', + justifyCenter: 'Centrēt saturu', + justifyRight: 'Līdzīnāt saturu pa labi', + justifyFull: 'Izlīdzināt saturu gar abām malām', + insertUnorderedList: 'Ievietot nenumurētu sarakstu', + insertOrderedList: 'Ievietot numurētu sarakstu', + outdent: 'Samazināt/noņemt atkāpi paragrāfam', + indent: 'Uzlikt atkāpi paragrāfam', + formatPara: 'Mainīt bloka tipu uz (p) Paragrāfu', + formatH1: 'Mainīt bloka tipu uz virsrakstu H1', + formatH2: 'Mainīt bloka tipu uz virsrakstu H2', + formatH3: 'Mainīt bloka tipu uz virsrakstu H3', + formatH4: 'Mainīt bloka tipu uz virsrakstu H4', + formatH5: 'Mainīt bloka tipu uz virsrakstu H5', + formatH6: 'Mainīt bloka tipu uz virsrakstu H6', + insertHorizontalRule: 'Ievietot horizontālu līniju', + 'linkDialog.show': 'Parādīt saites logu' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-nb-NO.js b/public/admin/view/javascript/summernote/lang/summernote-nb-NO.js new file mode 100644 index 0000000..c4c304d --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-nb-NO.js @@ -0,0 +1,104 @@ +(function ($) { + $.extend($.summernote.lang, { + 'nb-NO': { + font: { + bold: 'Fet', + italic: 'Kursiv', + underline: 'Understrek', + clear: 'Fjern formatering', + height: 'Linjehøyde', + name: 'Skrifttype', + strikethrough: 'Gjennomstrek', + size: 'Skriftstørrelse' + }, + image: { + image: 'Bilde', + insert: 'Sett inn bilde', + resizeFull: 'Sett full størrelse', + resizeHalf: 'Sett halv størrelse', + resizeQuarter: 'Sett kvart størrelse', + floatLeft: 'Flyt til venstre', + floatRight: 'Flyt til høyre', + floatNone: 'Fjern flyt', + dragImageHere: 'Dra et bilde hit', + selectFromFiles: 'Velg fra filer', + url: 'Bilde-URL', + remove: 'Fjern bilde' + }, + video: { + video: 'Video', + videoLink: 'Videolenke', + insert: 'Sett inn video', + url: 'Video-URL', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)' + }, + link: { + link: 'Lenke', + insert: 'Sett inn lenke', + unlink: 'Fjern lenke', + edit: 'Rediger', + textToDisplay: 'Visningstekst', + url: 'Til hvilken URL skal denne lenken peke?', + openInNewWindow: 'Åpne i nytt vindu' + }, + table: { + table: 'Tabell' + }, + hr: { + insert: 'Sett inn horisontal linje' + }, + style: { + style: 'Stil', + p: 'p', + blockquote: 'Sitat', + pre: 'Kode', + h1: 'Overskrift 1', + h2: 'Overskrift 2', + h3: 'Overskrift 3', + h4: 'Overskrift 4', + h5: 'Overskrift 5', + h6: 'Overskrift 6' + }, + lists: { + unordered: 'Punktliste', + ordered: 'Nummerert liste' + }, + options: { + help: 'Hjelp', + fullscreen: 'Fullskjerm', + codeview: 'HTML-visning' + }, + paragraph: { + paragraph: 'Avsnitt', + outdent: 'Tilbakerykk', + indent: 'Innrykk', + left: 'Venstrejustert', + center: 'Midtstilt', + right: 'Høyrejustert', + justify: 'Blokkjustert' + }, + color: { + recent: 'Nylig valgt farge', + more: 'Flere farger', + background: 'Bakgrunnsfarge', + foreground: 'Skriftfarge', + transparent: 'Gjennomsiktig', + setTransparent: 'Sett gjennomsiktig', + reset: 'Nullstill', + resetToDefault: 'Nullstill til standard' + }, + shortcut: { + shortcuts: 'Hurtigtaster', + close: 'Lukk', + textFormatting: 'Tekstformatering', + action: 'Handling', + paragraphFormatting: 'Avsnittsformatering', + documentStyle: 'Dokumentstil' + }, + history: { + undo: 'Angre', + redo: 'Gjør om' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-nl-NL.js b/public/admin/view/javascript/summernote/lang/summernote-nl-NL.js new file mode 100644 index 0000000..31f9d37 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-nl-NL.js @@ -0,0 +1,104 @@ +(function ($) { + $.extend($.summernote.lang, { + 'nl-NL': { + font: { + bold: 'Vet', + italic: 'Cursief', + underline: 'Onderstrepen', + clear: 'Stijl verwijderen', + height: 'Regelhoogte', + name: 'Lettertype', + strikethrough: 'Doorhalen', + size: 'Tekstgrootte' + }, + image: { + image: 'Afbeelding', + insert: 'Afbeelding invoegen', + resizeFull: 'Volledige breedte', + resizeHalf: 'Halve breedte', + resizeQuarter: 'Kwart breedte', + floatLeft: 'Links uitlijnen', + floatRight: 'Rechts uitlijnen', + floatNone: 'Geen uitlijning', + dragImageHere: 'Sleep hier een afbeelding naar toe', + selectFromFiles: 'Selecteer een bestand', + url: 'URL van de afbeelding', + remove: 'Verwijder afbeelding' + }, + video: { + video: 'Video', + videoLink: 'Video link', + insert: 'Video invoegen', + url: 'URL van de video', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion of Youku)' + }, + link: { + link: 'Link', + insert: 'Link invoegen', + unlink: 'Link verwijderen', + edit: 'Wijzigen', + textToDisplay: 'Tekst van link', + url: 'Naar welke URL moet deze link verwijzen?', + openInNewWindow: 'Open in nieuw venster' + }, + table: { + table: 'Tabel' + }, + hr: { + insert: 'Horizontale lijn invoegen' + }, + style: { + style: 'Stijl', + p: 'Normaal', + blockquote: 'Quote', + pre: 'Code', + h1: 'Kop 1', + h2: 'Kop 2', + h3: 'Kop 3', + h4: 'Kop 4', + h5: 'Kop 5', + h6: 'Kop 6' + }, + lists: { + unordered: 'Ongeordende lijst', + ordered: 'Geordende lijst' + }, + options: { + help: 'Help', + fullscreen: 'Volledig scherm', + codeview: 'Bekijk Code' + }, + paragraph: { + paragraph: 'Paragraaf', + outdent: 'Inspringen verkleinen', + indent: 'Inspringen vergroten', + left: 'Links uitlijnen', + center: 'Centreren', + right: 'Rechts uitlijnen', + justify: 'Uitvullen' + }, + color: { + recent: 'Recente kleur', + more: 'Meer kleuren', + background: 'Achtergrond kleur', + foreground: 'Tekst kleur', + transparent: 'Transparant', + setTransparent: 'Transparant', + reset: 'Standaard', + resetToDefault: 'Standaard kleur' + }, + shortcut: { + shortcuts: 'Toetsencombinaties', + close: 'sluiten', + textFormatting: 'Tekststijlen', + action: 'Acties', + paragraphFormatting: 'Paragraafstijlen', + documentStyle: 'Documentstijlen' + }, + history: { + undo: 'Ongedaan maken', + redo: 'Opnieuw doorvoeren' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-pl-PL.js b/public/admin/view/javascript/summernote/lang/summernote-pl-PL.js new file mode 100644 index 0000000..86068eb --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-pl-PL.js @@ -0,0 +1,112 @@ +(function ($) { + $.extend($.summernote.lang, { + 'pl-PL': { + font: { + bold: 'Pogrubienie', + italic: 'Pochylenie', + underline: 'Podkreślenie', + clear: 'Usuń formatowanie', + height: 'Interlinia', + name: 'Czcionka', + strikethrough: 'Przekreślenie', + size: 'Rozmiar' + }, + image: { + image: 'Grafika', + insert: 'Wstaw grafikę', + resizeFull: 'Zmień rozmiar na 100%', + resizeHalf: 'Zmień rozmiar na 50%', + resizeQuarter: 'Zmień rozmiar na 25%', + floatLeft: 'Po lewej', + floatRight: 'Po prawej', + floatNone: 'Równo z tekstem', + shapeRounded: 'Kształt: zaokrąglone', + shapeCircle: 'Kształt: okrąg', + shapeThumbnail: 'Kształt: miniatura', + shapeNone: 'Kształt: brak', + dragImageHere: 'Przeciągnij grafikę lub tekst tutaj', + dropImage: 'Przeciągnij grafikę lub tekst', + selectFromFiles: 'Wybierz z dysku', + maximumFileSize: 'Limit wielkości pliku', + maximumFileSizeError: 'Przekroczono limit wielkości pliku.', + url: 'Adres URL grafiki', + remove: 'Usuń grafikę' + }, + video: { + video: 'Wideo', + videoLink: 'Adres wideo', + insert: 'Wstaw wideo', + url: 'Adres wideo', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion lub Youku)' + }, + link: { + link: 'Odnośnik', + insert: 'Wstaw odnośnik', + unlink: 'Usuń odnośnik', + edit: 'Edytuj', + textToDisplay: 'Tekst do wyświetlenia', + url: 'Na jaki adres URL powinien przenosić ten odnośnik?', + openInNewWindow: 'Otwórz w nowym oknie' + }, + table: { + table: 'Tabela' + }, + hr: { + insert: 'Wstaw poziomą linię' + }, + style: { + style: 'Style', + p: 'pny', + blockquote: 'Cytat', + pre: 'Kod', + h1: 'Nagłówek 1', + h2: 'Nagłówek 2', + h3: 'Nagłówek 3', + h4: 'Nagłówek 4', + h5: 'Nagłówek 5', + h6: 'Nagłówek 6' + }, + lists: { + unordered: 'Lista wypunktowana', + ordered: 'Lista numerowana' + }, + options: { + help: 'Pomoc', + fullscreen: 'Pełny ekran', + codeview: 'Źródło' + }, + paragraph: { + paragraph: 'Akapit', + outdent: 'Zmniejsz wcięcie', + indent: 'Zwiększ wcięcie', + left: 'Wyrównaj do lewej', + center: 'Wyrównaj do środka', + right: 'Wyrównaj do prawej', + justify: 'Wyrównaj do lewej i prawej' + }, + color: { + recent: 'Ostani kolor', + more: 'Więcej kolorów', + background: 'Tło', + foreground: 'Czcionka', + transparent: 'Przeźroczysty', + setTransparent: 'Przeźroczyste', + reset: 'Reset', + resetToDefault: 'Domyślne' + }, + shortcut: { + shortcuts: 'Skróty klawiaturowe', + close: 'Zamknij', + textFormatting: 'Formatowanie tekstu', + action: 'Akcja', + paragraphFormatting: 'Formatowanie akapitu', + documentStyle: 'Styl dokumentu', + extraKeys: 'Dodatkowe klawisze' + }, + history: { + undo: 'Cofnij', + redo: 'Ponów' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-pt-BR.js b/public/admin/view/javascript/summernote/lang/summernote-pt-BR.js new file mode 100644 index 0000000..4b8efbb --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-pt-BR.js @@ -0,0 +1,132 @@ +(function ($) { + $.extend($.summernote.lang, { + 'pt-BR': { + font: { + bold: 'Negrito', + italic: 'Itálico', + underline: 'Sublinhado', + clear: 'Remover estilo da fonte', + height: 'Altura da linha', + name: 'Fonte', + strikethrough: 'Riscado', + size: 'Tamanho da fonte' + }, + image: { + image: 'Imagem', + insert: 'Inserir imagem', + resizeFull: 'Resize Full', + resizeHalf: 'Resize Half', + resizeQuarter: 'Resize Quarter', + floatLeft: 'Float Left', + floatRight: 'Float Right', + floatNone: 'Float None', + dragImageHere: 'Arraste uma imagem para cá', + selectFromFiles: 'Selecione a partir dos arquivos', + url: 'URL da imagem' + }, + video: { + video: 'Vídeo', + videoLink: 'Link para vídeo', + insert: 'Inserir vídeo', + url: 'URL do vídeo?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' + }, + link: { + link: 'Link', + insert: 'Inserir link', + unlink: 'Remover link', + edit: 'Editar', + textToDisplay: 'Texto para exibir', + url: 'Para qual URL esse link leva?', + openInNewWindow: 'Abrir em uma nova janela' + }, + table: { + table: 'Tabela' + }, + hr: { + insert: 'Inserir linha horizontal' + }, + style: { + style: 'Estilo', + normal: 'Normal', + blockquote: 'Citação', + pre: 'Código', + h1: 'Título 1', + h2: 'Título 2', + h3: 'Título 3', + h4: 'Título 4', + h5: 'Título 5', + h6: 'Título 6' + }, + lists: { + unordered: 'Lista com marcadores', + ordered: 'Lista numerada' + }, + options: { + help: 'Ajuda', + fullscreen: 'Tela cheia', + codeview: 'Ver código-fonte' + }, + paragraph: { + paragraph: 'Parágrafo', + outdent: 'Menor tabulação', + indent: 'Maior tabulação', + left: 'Alinhar à esquerda', + center: 'Alinhar ao centro', + right: 'Alinha à direita', + justify: 'Justificado' + }, + color: { + recent: 'Cor recente', + more: 'Mais cores', + background: 'Fundo', + foreground: 'Fonte', + transparent: 'Transparente', + setTransparent: 'Fundo transparente', + reset: 'Restaurar', + resetToDefault: 'Restaurar padrão' + }, + shortcut: { + shortcuts: 'Atalhos do teclado', + close: 'Fechar', + textFormatting: 'Formatação de texto', + action: 'Ação', + paragraphFormatting: 'Formatação de parágrafo', + documentStyle: 'Estilo de documento' + }, + history: { + undo: 'Desfazer', + redo: 'Refazer' + }, + help: { + 'insertParagraph': 'Inserir Parágrafo', + 'undo': 'Desfazer o último comando', + 'redo': 'Refazer o último comando', + 'tab': 'Tab', + 'untab': 'Desfazer tab', + 'bold': 'Colocar em negrito', + 'italic': 'Colocar em itálico', + 'underline': 'Sublinhado', + 'strikethrough': 'Tachado', + 'removeFormat': 'Remover estilo', + 'justifyLeft': 'Alinhar à esquerda', + 'justifyCenter': 'Centralizar', + 'justifyRight': 'Alinhar à esquerda', + 'justifyFull': 'Justificar', + 'insertUnorderedList': 'Lista não ordenada', + 'insertOrderedList': 'Lista ordenada', + 'outdent': 'Recuar parágrafo atual', + 'indent': 'Avançar parágrafo atual', + 'formatPara': 'Alterar formato do bloco para parágrafo(tag P)', + 'formatH1': 'Alterar formato do bloco para H1', + 'formatH2': 'Alterar formato do bloco para H2', + 'formatH3': 'Alterar formato do bloco para H3', + 'formatH4': 'Alterar formato do bloco para H4', + 'formatH5': 'Alterar formato do bloco para H5', + 'formatH6': 'Alterar formato do bloco para H6', + 'insertHorizontalRule': 'Inserir régua horizontal', + 'linkDialog.show': 'Inserir um Hiperlink' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-pt-PT.js b/public/admin/view/javascript/summernote/lang/summernote-pt-PT.js new file mode 100644 index 0000000..96e3104 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-pt-PT.js @@ -0,0 +1,103 @@ +(function ($) { + $.extend($.summernote.lang, { + 'pt-PT': { + font: { + bold: 'Negrito', + italic: 'Itálico', + underline: 'Sublinhado', + clear: 'Remover estilo da fonte', + height: 'Altura da linha', + name: 'Fonte', + strikethrough: 'Riscado', + size: 'Tamanho da fonte' + }, + image: { + image: 'Imagem', + insert: 'Inserir imagem', + resizeFull: 'Redimensionar Completo', + resizeHalf: 'Redimensionar Metade', + resizeQuarter: 'Redimensionar Um Quarto', + floatLeft: 'Float Esquerda', + floatRight: 'Float Direita', + floatNone: 'Sem Float', + dragImageHere: 'Arraste uma imagem para aqui', + selectFromFiles: 'Selecione a partir dos arquivos', + url: 'Endereço da imagem' + }, + video: { + video: 'Vídeo', + videoLink: 'Link para vídeo', + insert: 'Inserir vídeo', + url: 'URL do vídeo?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' + }, + link: { + link: 'Link', + insert: 'Inserir ligação', + unlink: 'Remover ligação', + edit: 'Editar', + textToDisplay: 'Texto para exibir', + url: 'Que endereço esta licação leva?', + openInNewWindow: 'Abrir numa nova janela' + }, + table: { + table: 'Tabela' + }, + hr: { + insert: 'Inserir linha horizontal' + }, + style: { + style: 'Estilo', + p: 'p', + blockquote: 'Citação', + pre: 'Código', + h1: 'Título 1', + h2: 'Título 2', + h3: 'Título 3', + h4: 'Título 4', + h5: 'Título 5', + h6: 'Título 6' + }, + lists: { + unordered: 'Lista com marcadores', + ordered: 'Lista numerada' + }, + options: { + help: 'Ajuda', + fullscreen: 'Janela Completa', + codeview: 'Ver código-fonte' + }, + paragraph: { + paragraph: 'Parágrafo', + outdent: 'Menor tabulação', + indent: 'Maior tabulação', + left: 'Alinhar à esquerda', + center: 'Alinhar ao centro', + right: 'Alinha à direita', + justify: 'Justificado' + }, + color: { + recent: 'Cor recente', + more: 'Mais cores', + background: 'Fundo', + foreground: 'Fonte', + transparent: 'Transparente', + setTransparent: 'Fundo transparente', + reset: 'Restaurar', + resetToDefault: 'Restaurar padrão' + }, + shortcut: { + shortcuts: 'Atalhos do teclado', + close: 'Fechar', + textFormatting: 'Formatação de texto', + action: 'Ação', + paragraphFormatting: 'Formatação de parágrafo', + documentStyle: 'Estilo de documento' + }, + history: { + undo: 'Desfazer', + redo: 'Refazer' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-ro-RO.js b/public/admin/view/javascript/summernote/lang/summernote-ro-RO.js new file mode 100644 index 0000000..70df177 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-ro-RO.js @@ -0,0 +1,102 @@ +(function ($) { + $.extend($.summernote.lang, { + 'ro-RO': { + font: { + bold: 'Îngroșat', + italic: 'Înclinat', + underline: 'Subliniat', + clear: 'Înlătură formatare font', + height: 'Înălțime rând', + strikethrough: 'Tăiat', + size: 'Dimensiune font' + }, + image: { + image: 'Imagine', + insert: 'Inserează imagine', + resizeFull: 'Redimensionează complet', + resizeHalf: 'Redimensionează 1/2', + resizeQuarter: 'Redimensionează 1/4', + floatLeft: 'Aliniere la stânga', + floatRight: 'Aliniere la dreapta', + floatNone: 'Fară aliniere', + dragImageHere: 'Trage o imagine aici', + selectFromFiles: 'Alege din fişiere', + url: 'URL imagine' + }, + video: { + video: 'Video', + videoLink: 'Link video', + insert: 'Inserează video', + url: 'URL video?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion sau Youku)' + }, + link: { + link: 'Link', + insert: 'Inserează link', + unlink: 'Înlătură link', + edit: 'Editează', + textToDisplay: 'Text ce va fi afişat', + url: 'Deschidere în fereastra nouă?' + }, + table: { + table: 'Tabel' + }, + hr: { + insert: 'Inserează o linie orizontală' + }, + style: { + style: 'Stil', + p: 'p', + blockquote: 'Citat', + pre: 'Preformatat', + h1: 'Titlu 1', + h2: 'Titlu 2', + h3: 'Titlu 3', + h4: 'Titlu 4', + h5: 'Titlu 5', + h6: 'Titlu 6' + }, + lists: { + unordered: 'Listă neordonată', + ordered: 'Listă ordonată' + }, + options: { + help: 'Ajutor', + fullscreen: 'Măreşte', + codeview: 'Sursă' + }, + paragraph: { + paragraph: 'Paragraf', + outdent: 'Creşte identarea', + indent: 'Scade identarea', + left: 'Aliniere la stânga', + center: 'Aliniere centrală', + right: 'Aliniere la dreapta', + justify: 'Aliniere în bloc' + }, + color: { + recent: 'Culoare recentă', + more: 'Mai multe culori', + background: 'Culoarea fundalului', + foreground: 'Culoarea textului', + transparent: 'Transparent', + setTransparent: 'Setează transparent', + reset: 'Resetează', + resetToDefault: 'Revino la iniţial' + }, + shortcut: { + shortcuts: 'Scurtături tastatură', + close: 'Închide', + textFormatting: 'Formatare text', + action: 'Acţiuni', + paragraphFormatting: 'Formatare paragraf', + documentStyle: 'Stil paragraf' + }, + history: { + undo: 'Starea anterioară', + redo: 'Starea ulterioară' + } + + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-ru-RU.js b/public/admin/view/javascript/summernote/lang/summernote-ru-RU.js new file mode 100644 index 0000000..f22737f --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-ru-RU.js @@ -0,0 +1,112 @@ +(function ($) { + $.extend($.summernote.lang, { + 'ru-RU': { + font: { + bold: 'Полужирный', + italic: 'Курсив', + underline: 'Подчёркнутый', + clear: 'Убрать стили шрифта', + height: 'Высота линии', + name: 'Шрифт', + strikethrough: 'Зачёркнутый', + subscript: 'Нижний индекс', + superscript: 'Верхний индекс', + size: 'Размер шрифта' + }, + image: { + image: 'Картинка', + insert: 'Вставить картинку', + resizeFull: 'Восстановить размер', + resizeHalf: 'Уменьшить до 50%', + resizeQuarter: 'Уменьшить до 25%', + floatLeft: 'Расположить слева', + floatRight: 'Расположить справа', + floatNone: 'Расположение по-умолчанию', + shapeRounded: 'Форма: Закругленная', + shapeCircle: 'Форма: Круг', + shapeThumbnail: 'Форма: Миниатюра', + shapeNone: 'Форма: Нет', + dragImageHere: 'Перетащите сюда картинку', + dropImage: 'Перетащите картинку', + selectFromFiles: 'Выбрать из файлов', + url: 'URL картинки', + remove: 'Удалить картинку' + }, + video: { + video: 'Видео', + videoLink: 'Ссылка на видео', + insert: 'Вставить видео', + url: 'URL видео', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)' + }, + link: { + link: 'Ссылка', + insert: 'Вставить ссылку', + unlink: 'Убрать ссылку', + edit: 'Редактировать', + textToDisplay: 'Отображаемый текст', + url: 'URL для перехода', + openInNewWindow: 'Открывать в новом окне' + }, + table: { + table: 'Таблица' + }, + hr: { + insert: 'Вставить горизонтальную линию' + }, + style: { + style: 'Стиль', + p: 'Нормальный', + blockquote: 'Цитата', + pre: 'Код', + h1: 'Заголовок 1', + h2: 'Заголовок 2', + h3: 'Заголовок 3', + h4: 'Заголовок 4', + h5: 'Заголовок 5', + h6: 'Заголовок 6' + }, + lists: { + unordered: 'Маркированный список', + ordered: 'Нумерованный список' + }, + options: { + help: 'Помощь', + fullscreen: 'На весь экран', + codeview: 'Исходный код' + }, + paragraph: { + paragraph: 'Параграф', + outdent: 'Уменьшить отступ', + indent: 'Увеличить отступ', + left: 'Выровнять по левому краю', + center: 'Выровнять по центру', + right: 'Выровнять по правому краю', + justify: 'Растянуть по ширине' + }, + color: { + recent: 'Последний цвет', + more: 'Еще цвета', + background: 'Цвет фона', + foreground: 'Цвет шрифта', + transparent: 'Прозрачный', + setTransparent: 'Сделать прозрачным', + reset: 'Сброс', + resetToDefault: 'Восстановить умолчания' + }, + shortcut: { + shortcuts: 'Сочетания клавиш', + close: 'Закрыть', + textFormatting: 'Форматирование текста', + action: 'Действие', + paragraphFormatting: 'Форматирование параграфа', + documentStyle: 'Стиль документа', + extraKeys: 'Дополнительные комбинации' + }, + history: { + undo: 'Отменить', + redo: 'Повтор' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-sk-SK.js b/public/admin/view/javascript/summernote/lang/summernote-sk-SK.js new file mode 100644 index 0000000..fa13ce0 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-sk-SK.js @@ -0,0 +1,102 @@ +(function ($) { + $.extend($.summernote.lang, { + 'sk-SK': { + font: { + bold: 'Tučné', + italic: 'Kurzíva', + underline: 'Podčiarknutie', + clear: 'Odstrániť štýl písma', + height: 'Výška riadku', + strikethrough: 'Prečiarknuté', + size: 'Veľkosť písma' + }, + image: { + image: 'Obrázok', + insert: 'Vložiť obrázok', + resizeFull: 'Pôvodná veľkosť', + resizeHalf: 'Polovičná veľkosť', + resizeQuarter: 'Štvrtinová veľkosť', + floatLeft: 'Umiestniť doľava', + floatRight: 'Umiestniť doprava', + floatNone: 'Bez zarovnania', + dragImageHere: 'Pretiahnuť sem obrázok', + selectFromFiles: 'Vybrať súbor', + url: 'URL obrázku' + }, + video: { + video: 'Video', + videoLink: 'Odkaz videa', + insert: 'Vložiť video', + url: 'URL videa?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion alebo Youku)' + }, + link: { + link: 'Odkaz', + insert: 'Vytvoriť odkaz', + unlink: 'Zrušiť odkaz', + edit: 'Upraviť', + textToDisplay: 'Zobrazovaný text', + url: 'Na akú URL adresu má tento odkaz viesť?', + openInNewWindow: 'Otvoriť v novom okne' + }, + table: { + table: 'Tabuľka' + }, + hr: { + insert: 'Vložit vodorovnú čiaru' + }, + style: { + style: 'Štýl', + p: 'Normálny', + blockquote: 'Citácia', + pre: 'Kód', + h1: 'Nadpis 1', + h2: 'Nadpis 2', + h3: 'Nadpis 3', + h4: 'Nadpis 4', + h5: 'Nadpis 5', + h6: 'Nadpis 6' + }, + lists: { + unordered: 'Odrážkový zoznam', + ordered: 'Číselný zoznam' + }, + options: { + help: 'Pomoc', + fullscreen: 'Celá obrazovka', + codeview: 'HTML kód' + }, + paragraph: { + paragraph: 'Odsek', + outdent: 'Zväčšiť odsadenie', + indent: 'Zmenšiť odsadenie', + left: 'Zarovnať doľava', + center: 'Zarovnať na stred', + right: 'Zarovnať doprava', + justify: 'Zarovnať obojstranne' + }, + color: { + recent: 'Aktuálna farba', + more: 'Dalšie farby', + background: 'Farba pozadia', + foreground: 'Farba písma', + transparent: 'Priehľadnosť', + setTransparent: 'Nastaviť priehľadnosť', + reset: 'Obnoviť', + resetToDefault: 'Obnoviť prednastavené' + }, + shortcut: { + shortcuts: 'Klávesové skratky', + close: 'Zavrieť', + textFormatting: 'Formátovanie textu', + action: 'Akcia', + paragraphFormatting: 'Formátovanie odseku', + documentStyle: 'Štýl dokumentu' + }, + history: { + undo: 'Krok vzad', + redo: 'Krok dopredu' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-sl-SI.js b/public/admin/view/javascript/summernote/lang/summernote-sl-SI.js new file mode 100644 index 0000000..330c212 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-sl-SI.js @@ -0,0 +1,106 @@ +(function ($) { + $.extend($.summernote.lang, { + 'sl-SI': { + font: { + bold: 'Krepko', + italic: 'Ležeče', + underline: 'Podčrtano', + clear: 'Počisti oblikovanje izbire', + height: 'Razmik med vrsticami', + name: 'Pisava', + strikethrough: 'Prečrtano', + subscript: 'Podpisano', + superscript: 'Nadpisano', + size: 'Velikost pisave' + }, + image: { + image: 'Slika', + insert: 'Vstavi sliko', + resizeFull: 'Razširi na polno velikost', + resizeHalf: 'Razširi na polovico velikosti', + resizeQuarter: 'Razširi na četrtino velikosti', + floatLeft: 'Leva poravnava', + floatRight: 'Desna poravnava', + floatNone: 'Brez poravnave', + dragImageHere: 'Sem povlecite sliko', + selectFromFiles: 'Izberi sliko za nalaganje', + url: 'URL naslov slike', + remove: 'Odstrani sliko' + }, + video: { + video: 'Video', + videoLink: 'Video povezava', + insert: 'Vstavi video', + url: 'Povezava do videa', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ali Youku)' + }, + link: { + link: 'Povezava', + insert: 'Vstavi povezavo', + unlink: 'Odstrani povezavo', + edit: 'Uredi', + textToDisplay: 'Prikazano besedilo', + url: 'Povezava', + openInNewWindow: 'Odpri v novem oknu' + }, + table: { + table: 'Tabela' + }, + hr: { + insert: 'Vstavi horizontalno črto' + }, + style: { + style: 'Slogi', + p: 'Navadno besedilo', + blockquote: 'Citat', + pre: 'Koda', + h1: 'Naslov 1', + h2: 'Naslov 2', + h3: 'Naslov 3', + h4: 'Naslov 4', + h5: 'Naslov 5', + h6: 'Naslov 6' + }, + lists: { + unordered: 'Označen seznam', + ordered: 'Oštevilčen seznam' + }, + options: { + help: 'Pomoč', + fullscreen: 'Celozaslonski način', + codeview: 'Pregled HTML kode' + }, + paragraph: { + paragraph: 'Slogi odstavka', + outdent: 'Zmanjšaj odmik', + indent: 'Povečaj odmik', + left: 'Leva poravnava', + center: 'Desna poravnava', + right: 'Sredinska poravnava', + justify: 'Obojestranska poravnava' + }, + color: { + recent: 'Uporabi zadnjo barvo', + more: 'Več barv', + background: 'Barva ozadja', + foreground: 'Barva besedila', + transparent: 'Brez barve', + setTransparent: 'Brez barve', + reset: 'Ponastavi', + resetToDefault: 'Ponastavi na privzeto' + }, + shortcut: { + shortcuts: 'Bljižnice', + close: 'Zapri', + textFormatting: 'Oblikovanje besedila', + action: 'Dejanja', + paragraphFormatting: 'Oblikovanje odstavka', + documentStyle: 'Oblikovanje naslova' + }, + history: { + undo: 'Razveljavi', + redo: 'Uveljavi' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-sr-RS-Latin.js b/public/admin/view/javascript/summernote/lang/summernote-sr-RS-Latin.js new file mode 100644 index 0000000..03ca108 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-sr-RS-Latin.js @@ -0,0 +1,104 @@ +(function ($) { + $.extend($.summernote.lang, { + 'sr-RS': { + font: { + bold: 'Podebljano', + italic: 'Kurziv', + underline: 'Podvučeno', + clear: 'Ukloni stilove fonta', + height: 'Visina linije', + strikethrough: 'Precrtano', + size: 'Veličina fonta' + }, + image: { + image: 'Slika', + insert: 'Umetni sliku', + resizeFull: 'Puna veličina', + resizeHalf: 'Umanji na 50%', + resizeQuarter: 'Umanji na 25%', + floatLeft: 'Uz levu ivicu', + floatRight: 'Uz desnu ivicu', + floatNone: 'Bez ravnanja', + dragImageHere: 'Prevuci sliku ovde', + selectFromFiles: 'Izaberi iz datoteke', + url: 'Adresa slike', + remove: 'Ukloni sliku' + }, + video: { + video: 'Video', + videoLink: 'Veza ka videu', + insert: 'Umetni video', + url: 'URL video', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)' + }, + link: { + link: 'Veza', + insert: 'Umetni vezu', + unlink: 'Ukloni vezu', + edit: 'Uredi', + textToDisplay: 'Tekst za prikaz', + url: 'Internet adresa', + openInNewWindow: 'Otvori u novom prozoru' + }, + table: { + table: 'Tabela' + }, + hr: { + insert: 'Umetni horizontalnu liniju' + }, + style: { + style: 'Stil', + p: 'pni', + blockquote: 'Citat', + pre: 'Kod', + h1: 'Zaglavlje 1', + h2: 'Zaglavlje 2', + h3: 'Zaglavlje 3', + h4: 'Zaglavlje 4', + h5: 'Zaglavlje 5', + h6: 'Zaglavlje 6' + }, + lists: { + unordered: 'Obična lista', + ordered: 'Numerisana lista' + }, + options: { + help: 'Pomoć', + fullscreen: 'Preko celog ekrana', + codeview: 'Izvorni kod' + }, + paragraph: { + paragraph: 'Paragraf', + outdent: 'Smanji uvlačenje', + indent: 'Povečaj uvlačenje', + left: 'Poravnaj u levo', + center: 'Centrirano', + right: 'Poravnaj u desno', + justify: 'Poravnaj obostrano' + }, + color: { + recent: 'Poslednja boja', + more: 'Više boja', + background: 'Boja pozadine', + foreground: 'Boja teksta', + transparent: 'Providna', + setTransparent: 'Providna', + reset: 'Opoziv', + resetToDefault: 'Podrazumevana' + }, + shortcut: { + shortcuts: 'Prečice sa tastature', + close: 'Zatvori', + textFormatting: 'Formatiranje teksta', + action: 'Akcija', + paragraphFormatting: 'Formatiranje paragrafa', + documentStyle: 'Stil dokumenta', + extraKeys: 'Dodatne kombinacije' + }, + history: { + undo: 'Poništi', + redo: 'Ponovi' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-sr-RS.js b/public/admin/view/javascript/summernote/lang/summernote-sr-RS.js new file mode 100644 index 0000000..d625e5b --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-sr-RS.js @@ -0,0 +1,104 @@ +(function ($) { + $.extend($.summernote.lang, { + 'sr-RS': { + font: { + bold: 'Подебљано', + italic: 'Курзив', + underline: 'Подвучено', + clear: 'Уклони стилове фонта', + height: 'Висина линије', + strikethrough: 'Прецртано', + size: 'Величина фонта' + }, + image: { + image: 'Слика', + insert: 'Уметни слику', + resizeFull: 'Пуна величина', + resizeHalf: 'Умањи на 50%', + resizeQuarter: 'Умањи на 25%', + floatLeft: 'Уз леву ивицу', + floatRight: 'Уз десну ивицу', + floatNone: 'Без равнања', + dragImageHere: 'Превуци слику овде', + selectFromFiles: 'Изабери из датотеке', + url: 'Адреса слике', + remove: 'Уклони слику' + }, + video: { + video: 'Видео', + videoLink: 'Веза ка видеу', + insert: 'Уметни видео', + url: 'URL видео', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)' + }, + link: { + link: 'Веза', + insert: 'Уметни везу', + unlink: 'Уклони везу', + edit: 'Уреди', + textToDisplay: 'Текст за приказ', + url: 'Интернет адреса', + openInNewWindow: 'Отвори у новом прозору' + }, + table: { + table: 'Табела' + }, + hr: { + insert: 'Уметни хоризонталну линију' + }, + style: { + style: 'Стил', + p: 'Нормални', + blockquote: 'Цитат', + pre: 'Код', + h1: 'Заглавље 1', + h2: 'Заглавље 2', + h3: 'Заглавље 3', + h4: 'Заглавље 4', + h5: 'Заглавље 5', + h6: 'Заглавље 6' + }, + lists: { + unordered: 'Обична листа', + ordered: 'Нумерисана листа' + }, + options: { + help: 'Помоћ', + fullscreen: 'Преко целог екрана', + codeview: 'Изворни код' + }, + paragraph: { + paragraph: 'Параграф', + outdent: 'Смањи увлачење', + indent: 'Повечај увлачење', + left: 'Поравнај у лево', + center: 'Центрирано', + right: 'Поравнај у десно', + justify: 'Поравнај обострано' + }, + color: { + recent: 'Последња боја', + more: 'Више боја', + background: 'Боја позадине', + foreground: 'Боја текста', + transparent: 'Провидна', + setTransparent: 'Провидна', + reset: 'Опозив', + resetToDefault: 'Подразумевана' + }, + shortcut: { + shortcuts: 'Пречице са тастатуре', + close: 'Затвори', + textFormatting: 'Форматирање текста', + action: 'Акција', + paragraphFormatting: 'Форматирање параграфа', + documentStyle: 'Стил документа', + extraKeys: 'Додатне комбинације' + }, + history: { + undo: 'Поништи', + redo: 'Понови' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-sv-SE.js b/public/admin/view/javascript/summernote/lang/summernote-sv-SE.js new file mode 100644 index 0000000..1fc63e6 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-sv-SE.js @@ -0,0 +1,104 @@ +(function ($) { + $.extend($.summernote.lang, { + 'sv-SE': { + font: { + bold: 'Fet', + italic: 'Kursiv', + underline: 'Understruken', + clear: 'Radera formatering', + height: 'Radavstånd', + name: 'Teckensnitt', + strikethrough: 'Genomstruken', + size: 'Teckenstorlek' + }, + image: { + image: 'Bild', + insert: 'Infoga bild', + resizeFull: 'Full storlek', + resizeHalf: 'Halv storlek', + resizeQuarter: 'En fjärdedel i storlek', + floatLeft: 'Vänsterjusterad', + floatRight: 'Högerjusterad', + floatNone: 'Ingen justering', + dragImageHere: 'Dra en bild hit', + selectFromFiles: 'Välj från filer', + url: 'Länk till bild', + remove: 'Ta bort bild' + }, + video: { + video: 'Filmklipp', + videoLink: 'Länk till filmklipp', + insert: 'Infoga filmklipp', + url: 'Länk till filmklipp', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)' + }, + link: { + link: 'Länk', + insert: 'Infoga länk', + unlink: 'Ta bort länk', + edit: 'Redigera', + textToDisplay: 'Visningstext', + url: 'Till vilken URL ska denna länk peka?', + openInNewWindow: 'Öppna i ett nytt fönster' + }, + table: { + table: 'Tabell' + }, + hr: { + insert: 'Infoga horisontell linje' + }, + style: { + style: 'Stil', + p: 'p', + blockquote: 'Citat', + pre: 'Kod', + h1: 'Rubrik 1', + h2: 'Rubrik 2', + h3: 'Rubrik 3', + h4: 'Rubrik 4', + h5: 'Rubrik 5', + h6: 'Rubrik 6' + }, + lists: { + unordered: 'Punktlista', + ordered: 'Numrerad lista' + }, + options: { + help: 'Hjälp', + fullscreen: 'Fullskärm', + codeview: 'HTML-visning' + }, + paragraph: { + paragraph: 'Justera text', + outdent: 'Minska indrag', + indent: 'Öka indrag', + left: 'Vänsterjusterad', + center: 'Centrerad', + right: 'Högerjusterad', + justify: 'Justera text' + }, + color: { + recent: 'Senast använda färg', + more: 'Fler färger', + background: 'Bakgrundsfärg', + foreground: 'Teckenfärg', + transparent: 'Genomskinlig', + setTransparent: 'Gör genomskinlig', + reset: 'Nollställ', + resetToDefault: 'Återställ till standard' + }, + shortcut: { + shortcuts: 'Kortkommandon', + close: 'Stäng', + textFormatting: 'Textformatering', + action: 'Funktion', + paragraphFormatting: 'Avsnittsformatering', + documentStyle: 'Dokumentstil' + }, + history: { + undo: 'Ångra', + redo: 'Gör om' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-th-TH.js b/public/admin/view/javascript/summernote/lang/summernote-th-TH.js new file mode 100644 index 0000000..47ae58c --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-th-TH.js @@ -0,0 +1,106 @@ +(function ($) { + $.extend($.summernote.lang, { + 'th-TH': { + font: { + bold: 'ตัวหนา', + italic: 'ตัวเอียง', + underline: 'ขีดเส้นใต้', + clear: 'ล้างรูปแบบตัวอักษร', + height: 'ความสูงบรรทัด', + name: 'แบบตัวอักษร', + strikethrough: 'ขีดฆ่า', + subscript: 'ตัวห้อย', + superscript: 'ตัวยก', + size: 'ขนาดตัวอักษร' + }, + image: { + image: 'รูปภาพ', + insert: 'แทรกรูปภาพ', + resizeFull: 'ปรับขนาดเท่าจริง', + resizeHalf: 'ปรับขนาดลง 50%', + resizeQuarter: 'ปรับขนาดลง 25%', + floatLeft: 'ชิดซ้าย', + floatRight: 'ชิดขวา', + floatNone: 'ไม่จัดตำแหน่ง', + dragImageHere: 'ลากรูปภาพที่ต้องการไว้ที่นี่', + selectFromFiles: 'เลือกไฟล์รูปภาพ', + url: 'ที่อยู่ URL ของรูปภาพ', + remove: 'ลบรูปภาพ' + }, + video: { + video: 'วีดีโอ', + videoLink: 'ลิงก์ของวีดีโอ', + insert: 'แทรกวีดีโอ', + url: 'ที่อยู่ URL ของวีดีโอ?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion หรือ Youku)' + }, + link: { + link: 'ตัวเชื่อมโยง', + insert: 'แทรกตัวเชื่อมโยง', + unlink: 'ยกเลิกตัวเชื่อมโยง', + edit: 'แก้ไข', + textToDisplay: 'ข้อความที่ให้แสดง', + url: 'ที่อยู่เว็บไซต์ที่ต้องการให้เชื่อมโยงไปถึง?', + openInNewWindow: 'เปิดในหน้าต่างใหม่' + }, + table: { + table: 'ตาราง' + }, + hr: { + insert: 'แทรกเส้นคั่น' + }, + style: { + style: 'รูปแบบ', + p: 'ปกติ', + blockquote: 'ข้อความ', + pre: 'โค้ด', + h1: 'หัวข้อ 1', + h2: 'หัวข้อ 2', + h3: 'หัวข้อ 3', + h4: 'หัวข้อ 4', + h5: 'หัวข้อ 5', + h6: 'หัวข้อ 6' + }, + lists: { + unordered: 'รายการแบบไม่มีลำดับ', + ordered: 'รายการแบบมีลำดับ' + }, + options: { + help: 'ช่วยเหลือ', + fullscreen: 'ขยายเต็มหน้าจอ', + codeview: 'ซอร์สโค้ด' + }, + paragraph: { + paragraph: 'ย่อหน้า', + outdent: 'เยื้องซ้าย', + indent: 'เยื้องขวา', + left: 'จัดหน้าชิดซ้าย', + center: 'จัดหน้ากึ่งกลาง', + right: 'จัดหน้าชิดขวา', + justify: 'จัดบรรทัดเสมอกัน' + }, + color: { + recent: 'สีที่ใช้ล่าสุด', + more: 'สีอื่นๆ', + background: 'สีพื้นหลัง', + foreground: 'สีพื้นหน้า', + transparent: 'โปร่งแสง', + setTransparent: 'ตั้งค่าความโปร่งแสง', + reset: 'คืนค่า', + resetToDefault: 'คืนค่ามาตรฐาน' + }, + shortcut: { + shortcuts: 'แป้นลัด', + close: 'ปิด', + textFormatting: 'การจัดรูปแบบข้อความ', + action: 'การกระทำ', + paragraphFormatting: 'การจัดรูปแบบย่อหน้า', + documentStyle: 'รูปแบบของเอกสาร' + }, + history: { + undo: 'ยกเลิกการกระทำ', + redo: 'ทำซ้ำการกระทำ' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-tr-TR.js b/public/admin/view/javascript/summernote/lang/summernote-tr-TR.js new file mode 100644 index 0000000..e9e21d4 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-tr-TR.js @@ -0,0 +1,147 @@ +(function ($) { + $.extend($.summernote.lang, { + 'tr-TR': { + font: { + bold: 'Kalın', + italic: 'İtalik', + underline: 'Altı çizili', + clear: 'Temizle', + height: 'Satır yüksekliği', + name: 'Yazı Tipi', + strikethrough: 'Üstü çizili', + subscript: 'Alt Simge', + superscript: 'Üst Simge', + size: 'Yazı tipi boyutu' + }, + image: { + image: 'Resim', + insert: 'Resim ekle', + resizeFull: 'Orjinal boyut', + resizeHalf: '1/2 boyut', + resizeQuarter: '1/4 boyut', + floatLeft: 'Sola hizala', + floatRight: 'Sağa hizala', + floatNone: 'Hizalamayı kaldır', + shapeRounded: 'Şekil: Yuvarlatılmış Köşe', + shapeCircle: 'Şekil: Daire', + shapeThumbnail: 'Şekil: K.Resim', + shapeNone: 'Şekil: Yok', + dragImageHere: 'Buraya sürükleyin', + dropImage: 'Resim veya metni bırakın', + selectFromFiles: 'Dosya seçin', + maximumFileSize: 'Maksimum dosya boyutu', + maximumFileSizeError: 'Maksimum dosya boyutu aşıldı.', + url: 'Resim bağlantısı', + remove: 'Resimi Kaldır' + }, + video: { + video: 'Video', + videoLink: 'Video bağlantısı', + insert: 'Video ekle', + url: 'Video bağlantısı?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion veya Youku)' + }, + link: { + link: 'Bağlantı', + insert: 'Bağlantı ekle', + unlink: 'Bağlantıyı kaldır', + edit: 'Bağlantıyı düzenle', + textToDisplay: 'Görüntülemek için', + url: 'Bağlantı adresi?', + openInNewWindow: 'Yeni pencerede aç' + }, + table: { + table: 'Tablo' + }, + hr: { + insert: 'Yatay çizgi ekle' + }, + style: { + style: 'Biçim', + p: 'p', + blockquote: 'Alıntı', + pre: 'Önbiçimli', + h1: 'Başlık 1', + h2: 'Başlık 2', + h3: 'Başlık 3', + h4: 'Başlık 4', + h5: 'Başlık 5', + h6: 'Başlık 6' + }, + lists: { + unordered: 'Madde işaretli liste', + ordered: 'Numaralı liste' + }, + options: { + help: 'Yardım', + fullscreen: 'Tam ekran', + codeview: 'HTML Kodu' + }, + paragraph: { + paragraph: 'Paragraf', + outdent: 'Girintiyi artır', + indent: 'Girintiyi azalt', + left: 'Sola hizala', + center: 'Ortaya hizala', + right: 'Sağa hizala', + justify: 'Yasla' + }, + color: { + recent: 'Son renk', + more: 'Daha fazla renk', + background: 'Arka plan rengi', + foreground: 'Yazı rengi', + transparent: 'Seffaflık', + setTransparent: 'Şeffaflığı ayarla', + reset: 'Sıfırla', + resetToDefault: 'Varsayılanlara sıfırla' + }, + shortcut: { + shortcuts: 'Kısayollar', + close: 'Kapat', + textFormatting: 'Yazı biçimlendirme', + action: 'Eylem', + paragraphFormatting: 'Paragraf biçimlendirme', + documentStyle: 'Biçim', + extraKeys: 'İlave anahtarlar' + }, + help: { + 'insertParagraph': 'Paragraf ekler', + 'undo': 'Son komudu geri alır', + 'redo': 'Son komudu yineler', + 'tab': 'Girintiyi artırır', + 'untab': 'Girintiyi azaltır', + 'bold': 'Kalın yazma stilini ayarlar', + 'italic': 'İtalik yazma stilini ayarlar', + 'underline': 'Altı çizgili yazma stilini ayarlar', + 'strikethrough': 'Üstü çizgili yazma stilini ayarlar', + 'removeFormat': 'Biçimlendirmeyi temizler', + 'justifyLeft': 'Yazıyı sola hizalar', + 'justifyCenter': 'Yazıyı ortalar', + 'justifyRight': 'Yazıyı sağa hizalar', + 'justifyFull': 'Yazıyı her iki tarafa yazlar', + 'insertUnorderedList': 'Madde işaretli liste ekler', + 'insertOrderedList': 'Numaralı liste ekler', + 'outdent': 'Aktif paragrafın girintisini azaltır', + 'indent': 'Aktif paragrafın girintisini artırır', + 'formatPara': 'Aktif bloğun biçimini paragraf (p) olarak değiştirir', + 'formatH1': 'Aktif bloğun biçimini başlık 1 (h1) olarak değiştirir', + 'formatH2': 'Aktif bloğun biçimini başlık 2 (h2) olarak değiştirir', + 'formatH3': 'Aktif bloğun biçimini başlık 3 (h3) olarak değiştirir', + 'formatH4': 'Aktif bloğun biçimini başlık 4 (h4) olarak değiştirir', + 'formatH5': 'Aktif bloğun biçimini başlık 5 (h5) olarak değiştirir', + 'formatH6': 'Aktif bloğun biçimini başlık 6 (h6) olarak değiştirir', + 'insertHorizontalRule': 'Yatay çizgi ekler', + 'linkDialog.show': 'Bağlantı ayar kutusunu gösterir' + }, + history: { + undo: 'Geri al', + redo: 'Yinele' + }, + specialChar: { + specialChar: 'ÖZEL KARAKTERLER', + select: 'Özel Karakterleri seçin' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-uk-UA.js b/public/admin/view/javascript/summernote/lang/summernote-uk-UA.js new file mode 100644 index 0000000..e210572 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-uk-UA.js @@ -0,0 +1,111 @@ +(function ($) { + $.extend($.summernote.lang, { + 'uk-UA': { + font: { + bold: 'Напівжирний', + italic: 'Курсив', + underline: 'Підкреслений', + clear: 'Прибрати стилі шрифту', + height: 'Висота лінії', + name: 'Шрифт', + strikethrough: 'Закреслений', + subscript: 'Нижній індекс', + superscript: 'Верхній індекс', + size: 'Розмір шрифту' + }, + image: { + image: 'Картинка', + insert: 'Вставити картинку', + resizeFull: 'Відновити розмір', + resizeHalf: 'Зменшити до 50%', + resizeQuarter: 'Зменшити до 25%', + floatLeft: 'Розташувати ліворуч', + floatRight: 'Розташувати праворуч', + floatNone: 'Початкове розташування', + shapeRounded: 'Форма: Заокруглена', + shapeCircle: 'Форма: Коло', + shapeThumbnail: 'Форма: Мініатюра', + shapeNone: 'Форма: Немає', + dragImageHere: 'Перетягніть сюди картинку', + dropImage: 'Перетягніть картинку', + selectFromFiles: 'Вибрати з файлів', + url: 'URL картинки', + remove: 'Видалити картинку' + }, + video: { + video: 'Відео', + videoLink: 'Посилання на відео', + insert: 'Вставити відео', + url: 'URL відео', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion чи Youku)' + }, + link: { + link: 'Посилання', + insert: 'Вставити посилання', + unlink: 'Прибрати посилання', + edit: 'Редагувати', + textToDisplay: 'Текст, що відображається', + url: 'URL для переходу', + openInNewWindow: 'Відкривати у новому вікні' + }, + table: { + table: 'Таблиця' + }, + hr: { + insert: 'Вставити горизонтальну лінію' + }, + style: { + style: 'Стиль', + p: 'Нормальний', + blockquote: 'Цитата', + pre: 'Код', + h1: 'Заголовок 1', + h2: 'Заголовок 2', + h3: 'Заголовок 3', + h4: 'Заголовок 4', + h5: 'Заголовок 5', + h6: 'Заголовок 6' + }, + lists: { + unordered: 'Маркований список', + ordered: 'Нумерований список' + }, + options: { + help: 'Допомога', + fullscreen: 'На весь екран', + codeview: 'Початковий код' + }, + paragraph: { + paragraph: 'Параграф', + outdent: 'Зменшити відступ', + indent: 'Збільшити відступ', + left: 'Вирівняти по лівому краю', + center: 'Вирівняти по центру', + right: 'Вирівняти по правому краю', + justify: 'Розтягнути по ширині' + }, + color: { + recent: 'Останній колір', + more: 'Ще кольори', + background: 'Колір фону', + foreground: 'Колір шрифту', + transparent: 'Прозорий', + setTransparent: 'Зробити прозорим', + reset: 'Відновити', + resetToDefault: 'Відновити початкові' + }, + shortcut: { + shortcuts: 'Комбінації клавіш', + close: 'Закрити', + textFormatting: 'Форматування тексту', + action: 'Дія', + paragraphFormatting: 'Форматування параграфу', + documentStyle: 'Стиль документу' + }, + history: { + undo: 'Відмінити', + redo: 'Повторити' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-vi-VN.js b/public/admin/view/javascript/summernote/lang/summernote-vi-VN.js new file mode 100644 index 0000000..917e629 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-vi-VN.js @@ -0,0 +1,104 @@ +(function ($) { + $.extend($.summernote.lang, { + 'vi-VN': { + font: { + bold: 'In Đậm', + italic: 'In Nghiêng', + underline: 'Gạch dưới', + clear: 'Bỏ định dạng', + height: 'Chiều cao dòng', + name: 'Phông chữ', + strikethrough: 'Gạch ngang', + size: 'Cỡ chữ' + }, + image: { + image: 'Hình ảnh', + insert: 'Chèn', + resizeFull: '100%', + resizeHalf: '50%', + resizeQuarter: '25%', + floatLeft: 'Trôi về trái', + floatRight: 'Trôi về phải', + floatNone: 'Không trôi', + dragImageHere: 'Thả Ảnh ở vùng này', + selectFromFiles: 'Chọn từ File', + url: 'URL', + remove: 'Xóa' + }, + video: { + video: 'Video', + videoLink: 'Link đến Video', + insert: 'Chèn Video', + url: 'URL', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion và Youku)' + }, + link: { + link: 'Link', + insert: 'Chèn Link', + unlink: 'Gỡ Link', + edit: 'Sửa', + textToDisplay: 'Văn bản hiển thị', + url: 'URL', + openInNewWindow: 'Mở ở Cửa sổ mới' + }, + table: { + table: 'Bảng' + }, + hr: { + insert: 'Chèn' + }, + style: { + style: 'Kiểu chữ', + p: 'Chữ thường', + blockquote: 'Đoạn trích', + pre: 'Mã Code', + h1: 'H1', + h2: 'H2', + h3: 'H3', + h4: 'H4', + h5: 'H5', + h6: 'H6' + }, + lists: { + unordered: 'Liệt kê danh sách', + ordered: 'Liệt kê theo thứ tự' + }, + options: { + help: 'Trợ giúp', + fullscreen: 'Toàn Màn hình', + codeview: 'Xem Code' + }, + paragraph: { + paragraph: 'Canh lề', + outdent: 'Dịch sang trái', + indent: 'Dịch sang phải', + left: 'Canh trái', + center: 'Canh giữa', + right: 'Canh phải', + justify: 'Canh đều' + }, + color: { + recent: 'Màu chữ', + more: 'Mở rộng', + background: 'Màu nền', + foreground: 'Màu chữ', + transparent: 'trong suốt', + setTransparent: 'Nền trong suốt', + reset: 'Thiết lập lại', + resetToDefault: 'Trở lại ban đầu' + }, + shortcut: { + shortcuts: 'Phím tắt', + close: 'Đóng', + textFormatting: 'Định dạng Văn bản', + action: 'Hành động', + paragraphFormatting: 'Định dạng', + documentStyle: 'Kiểu văn bản' + }, + history: { + undo: 'Lùi lại', + redo: 'Làm lại' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-zh-CN.js b/public/admin/view/javascript/summernote/lang/summernote-zh-CN.js new file mode 100644 index 0000000..99e5194 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-zh-CN.js @@ -0,0 +1,113 @@ +(function ($) { + $.extend($.summernote.lang, { + 'zh-CN': { + font: { + bold: '粗体', + italic: '斜体', + underline: '下划线', + clear: '清除格式', + height: '行高', + name: '字体', + strikethrough: '删除线', + subscript: '下标', + superscript: '上标', + size: '字号' + }, + image: { + image: '图片', + insert: '插入图片', + resizeFull: '缩放至 100%', + resizeHalf: '缩放至 50%', + resizeQuarter: '缩放至 25%', + floatLeft: '靠左浮动', + floatRight: '靠右浮动', + floatNone: '取消浮动', + shapeRounded: '形状: 圆角', + shapeCircle: '形状: 圆', + shapeThumbnail: '形状: 缩略图', + shapeNone: '形状: 无', + dragImageHere: '将图片拖拽至此处', + selectFromFiles: '从本地上传', + maximumFileSize: '文件大小最大值', + maximumFileSizeError: '文件大小超出最大值。', + url: '图片地址', + remove: '移除图片' + }, + video: { + video: '视频', + videoLink: '视频链接', + insert: '插入视频', + url: '视频地址', + providers: '(优酷, Instagram, DailyMotion, Youtube等)' + }, + link: { + link: '链接', + insert: '插入链接', + unlink: '去除链接', + edit: '编辑链接', + textToDisplay: '显示文本', + url: '链接地址', + openInNewWindow: '在新窗口打开' + }, + table: { + table: '表格' + }, + hr: { + insert: '水平线' + }, + style: { + style: '样式', + p: '普通', + blockquote: '引用', + pre: '代码', + h1: '标题 1', + h2: '标题 2', + h3: '标题 3', + h4: '标题 4', + h5: '标题 5', + h6: '标题 6' + }, + lists: { + unordered: '无序列表', + ordered: '有序列表' + }, + options: { + help: '帮助', + fullscreen: '全屏', + codeview: '源代码' + }, + paragraph: { + paragraph: '段落', + outdent: '减少缩进', + indent: '增加缩进', + left: '左对齐', + center: '居中对齐', + right: '右对齐', + justify: '两端对齐' + }, + color: { + recent: '最近使用', + more: '更多', + background: '背景', + foreground: '前景', + transparent: '透明', + setTransparent: '透明', + reset: '重置', + resetToDefault: '默认' + }, + shortcut: { + shortcuts: '快捷键', + close: '关闭', + textFormatting: '文本格式', + action: '动作', + paragraphFormatting: '段落格式', + documentStyle: '文档样式', + extraKeys: '额外按键' + }, + history: { + undo: '撤销', + redo: '重做' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/lang/summernote-zh-TW.js b/public/admin/view/javascript/summernote/lang/summernote-zh-TW.js new file mode 100644 index 0000000..775e217 --- /dev/null +++ b/public/admin/view/javascript/summernote/lang/summernote-zh-TW.js @@ -0,0 +1,113 @@ +(function ($) { + $.extend($.summernote.lang, { + 'zh-TW': { + font: { + bold: '粗體', + italic: '斜體', + underline: '底線', + clear: '清除格式', + height: '行高', + name: '字體', + strikethrough: '刪除線', + subscript: '下標', + superscript: '上標', + size: '字號' + }, + image: { + image: '圖片', + insert: '插入圖片', + resizeFull: '縮放至100%', + resizeHalf: '縮放至 50%', + resizeQuarter: '縮放至 25%', + floatLeft: '靠左浮動', + floatRight: '靠右浮動', + floatNone: '取消浮動', + shapeRounded: '形狀: 圓角', + shapeCircle: '形狀: 圓', + shapeThumbnail: '形狀: 縮略圖', + shapeNone: '形狀: 無', + dragImageHere: '將圖片拖曳至此處', + selectFromFiles: '從本機上傳', + maximumFileSize: '文件大小最大值', + maximumFileSizeError: '文件大小超出最大值。', + url: '圖片網址', + remove: '移除圖片' + }, + video: { + video: '影片', + videoLink: '影片連結', + insert: '插入影片', + url: '影片網址', + providers: '(優酷, Instagram, DailyMotion, Youtube等)' + }, + link: { + link: '連結', + insert: '插入連結', + unlink: '取消連結', + edit: '編輯連結', + textToDisplay: '顯示文字', + url: '連結網址', + openInNewWindow: '在新視窗開啟' + }, + table: { + table: '表格' + }, + hr: { + insert: '水平線' + }, + style: { + style: '樣式', + p: '一般', + blockquote: '引用區塊', + pre: '程式碼區塊', + h1: '標題 1', + h2: '標題 2', + h3: '標題 3', + h4: '標題 4', + h5: '標題 5', + h6: '標題 6' + }, + lists: { + unordered: '項目清單', + ordered: '編號清單' + }, + options: { + help: '幫助', + fullscreen: '全螢幕', + codeview: '原始碼' + }, + paragraph: { + paragraph: '段落', + outdent: '取消縮排', + indent: '增加縮排', + left: '靠右對齊', + center: '靠中對齊', + right: '靠右對齊', + justify: '左右對齊' + }, + color: { + recent: '字型顏色', + more: '更多', + background: '背景', + foreground: '前景', + transparent: '透明', + setTransparent: '透明', + reset: '重設', + resetToDefault: '默認' + }, + shortcut: { + shortcuts: '快捷鍵', + close: '關閉', + textFormatting: '文字格式', + action: '動作', + paragraphFormatting: '段落格式', + documentStyle: '文件格式', + extraKeys: '額外按鍵' + }, + history: { + undo: '復原', + redo: '取消復原' + } + } + }); +})(jQuery); diff --git a/public/admin/view/javascript/summernote/opencart.js b/public/admin/view/javascript/summernote/opencart.js new file mode 100644 index 0000000..64b90dc --- /dev/null +++ b/public/admin/view/javascript/summernote/opencart.js @@ -0,0 +1,85 @@ +$(document).ready(function() { + // Override summernotes image manager + $('[data-toggle=\'summernote\']').each(function() { + var element = this; + + if ($(this).attr('data-lang')) { + $('head').append('<script type="text/javascript" src="view/javascript/summernote/lang/summernote-' + $(this).attr('data-lang') + '.js"></script>'); + } + + $(element).summernote({ + lang: $(this).attr('data-lang'), + disableDragAndDrop: true, + height: 300, + emptyPara: '', + codemirror: { // codemirror options + mode: 'text/html', + htmlMode: true, + lineNumbers: true, + theme: 'monokai' + }, + fontsize: ['8', '9', '10', '11', '12', '14', '16', '18', '20', '24', '30', '36', '48' , '64'], + toolbar: [ + ['style', ['style']], + ['font', ['bold', 'underline', 'clear']], + ['fontname', ['fontname']], + ['fontsize', ['fontsize']], + ['color', ['color']], + ['para', ['ul', 'ol', 'paragraph']], + ['table', ['table']], + ['insert', ['link', 'image', 'video']], + ['view', ['fullscreen', 'codeview', 'help']] + ], + popover: { + image: [ + ['custom', ['imageAttributes']], + ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], + ['float', ['floatLeft', 'floatRight', 'floatNone']], + ['remove', ['removeMedia']] + ], + }, + buttons: { + image: function() { + var ui = $.summernote.ui; + + // create button + var button = ui.button({ + contents: '<i class="note-icon-picture" />', + tooltip: $.summernote.lang[$.summernote.options.lang].image.image, + click: function () { + $('#modal-image').remove(); + + $.ajax({ + url: 'index.php?route=common/filemanager&user_token=' + getURLVar('user_token'), + dataType: 'html', + beforeSend: function() { + $('#button-image i').replaceWith('<i class="fa fa-circle-o-notch fa-spin"></i>'); + $('#button-image').prop('disabled', true); + }, + complete: function() { + $('#button-image i').replaceWith('<i class="fa fa-upload"></i>'); + $('#button-image').prop('disabled', false); + }, + success: function(html) { + $('body').append('<div id="modal-image" class="modal">' + html + '</div>'); + + $('#modal-image').modal('show'); + + $('#modal-image').delegate('a.thumbnail', 'click', function(e) { + e.preventDefault(); + + $(element).summernote('insertImage', $(this).attr('href')); + + $('#modal-image').modal('hide'); + }); + } + }); + } + }); + + return button.render(); + } + } + }); + }); +});
\ No newline at end of file diff --git a/public/admin/view/javascript/summernote/plugin/hello/summernote-ext-hello.js b/public/admin/view/javascript/summernote/plugin/hello/summernote-ext-hello.js new file mode 100644 index 0000000..7c6434a --- /dev/null +++ b/public/admin/view/javascript/summernote/plugin/hello/summernote-ext-hello.js @@ -0,0 +1,82 @@ +(function (factory) { + /* global define */ + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof module === 'object' && module.exports) { + // Node/CommonJS + module.exports = factory(require('jquery')); + } else { + // Browser globals + factory(window.jQuery); + } +}(function ($) { + + // Extends plugins for adding hello. + // - plugin is external module for customizing. + $.extend($.summernote.plugins, { + /** + * @param {Object} context - context object has status of editor. + */ + 'hello': function (context) { + var self = this; + + // ui has renders to build ui elements. + // - you can create a button with `ui.button` + var ui = $.summernote.ui; + + // add hello button + context.memo('button.hello', function () { + // create button + var button = ui.button({ + contents: '<i class="fa fa-child"/> Hello', + tooltip: 'hello', + click: function () { + self.$panel.show(); + self.$panel.hide(500); + // invoke insertText method with 'hello' on editor module. + context.invoke('editor.insertText', 'hello'); + } + }); + + // create jQuery object from button instance. + var $hello = button.render(); + return $hello; + }); + + // This events will be attached when editor is initialized. + this.events = { + // This will be called after modules are initialized. + 'summernote.init': function (we, e) { + console.log('summernote initialized', we, e); + }, + // This will be called when user releases a key on editable. + 'summernote.keyup': function (we, e) { + console.log('summernote keyup', we, e); + } + }; + + // This method will be called when editor is initialized by $('..').summernote(); + // You can create elements for plugin + this.initialize = function () { + this.$panel = $('<div class="hello-panel"/>').css({ + position: 'absolute', + width: 100, + height: 100, + left: '50%', + top: '50%', + background: 'red' + }).hide(); + + this.$panel.appendTo('body'); + }; + + // This methods will be called when editor is destroyed by $('..').summernote('destroy'); + // You should remove elements on `initialize`. + this.destroy = function () { + this.$panel.remove(); + this.$panel = null; + }; + } + }); +})); diff --git a/public/admin/view/javascript/summernote/plugin/specialchars/summernote-ext-specialchars.js b/public/admin/view/javascript/summernote/plugin/specialchars/summernote-ext-specialchars.js new file mode 100644 index 0000000..230e750 --- /dev/null +++ b/public/admin/view/javascript/summernote/plugin/specialchars/summernote-ext-specialchars.js @@ -0,0 +1,315 @@ +(function (factory) { + /* global define */ + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof module === 'object' && module.exports) { + // Node/CommonJS + module.exports = factory(require('jquery')); + } else { + // Browser globals + factory(window.jQuery); + } +}(function ($) { + $.extend($.summernote.plugins, { + 'specialchars': function (context) { + var self = this; + var ui = $.summernote.ui; + + var $editor = context.layoutInfo.editor; + var options = context.options; + var lang = options.langInfo; + + var KEY = { + UP: 38, + DOWN: 40, + LEFT: 37, + RIGHT: 39, + ENTER: 13 + }; + var COLUMN_LENGTH = 15; + var COLUMN_WIDTH = 35; + + var currentColumn, currentRow, totalColumn, totalRow = 0; + + // special characters data set + var specialCharDataSet = [ + '"', '&', '<', '>', '¡', '¢', + '£', '¤', '¥', '¦', '§', + '¨', '©', 'ª', '«', '¬', + '®', '¯', '°', '±', '²', + '³', '´', 'µ', '¶', '·', + '¸', '¹', 'º', '»', '¼', + '½', '¾', '¿', '×', '÷', + 'ƒ', 'ˆ', '˜', '–', '—', + '‘', '’', '‚', '“', '”', + '„', '†', '‡', '•', '…', + '‰', '′', '″', '‹', '›', + '‾', '⁄', '€', 'ℑ', '℘', + 'ℜ', '™', 'ℵ', '←', '↑', + '→', '↓', '↔', '↵', '⇐', + '⇑', '⇒', '⇓', '⇔', '∀', + '∂', '∃', '∅', '∇', '∈', + '∉', '∋', '∏', '∑', '−', + '∗', '√', '∝', '∞', '∠', + '∧', '∨', '∩', '∪', '∫', + '∴', '∼', '≅', '≈', '≠', + '≡', '≤', '≥', '⊂', '⊃', + '⊄', '⊆', '⊇', '⊕', '⊗', + '⊥', '⋅', '⌈', '⌉', '⌊', + '⌋', '◊', '♠', '♣', '♥', + '♦' + ]; + + context.memo('button.specialCharacter', function () { + return ui.button({ + contents: '<i class="fa fa-font fa-flip-vertical">', + tooltip: lang.specialChar.specialChar, + click: function () { + self.show(); + } + }).render(); + }); + + /** + * Make Special Characters Table + * + * @member plugin.specialChar + * @private + * @return {jQuery} + */ + this.makeSpecialCharSetTable = function () { + var $table = $('<table/>'); + $.each(specialCharDataSet, function (idx, text) { + var $td = $('<td/>').addClass('note-specialchar-node'); + var $tr = (idx % COLUMN_LENGTH === 0) ? $('<tr/>') : $table.find('tr').last(); + + var $button = ui.button({ + callback: function ($node) { + $node.html(text); + $node.attr('title', text); + $node.attr('data-value', encodeURIComponent(text)); + $node.css({ + width: COLUMN_WIDTH, + 'margin-right': '2px', + 'margin-bottom': '2px' + }); + } + }).render(); + + $td.append($button); + + $tr.append($td); + if (idx % COLUMN_LENGTH === 0) { + $table.append($tr); + } + }); + + totalRow = $table.find('tr').length; + totalColumn = COLUMN_LENGTH; + + return $table; + }; + + this.initialize = function () { + var $container = options.dialogsInBody ? $(document.body) : $editor; + + var body = '<div class="form-group row-fluid">' + this.makeSpecialCharSetTable()[0].outerHTML + '</div>'; + + this.$dialog = ui.dialog({ + title: lang.specialChar.select, + body: body + }).render().appendTo($container); + }; + + this.show = function () { + var text = context.invoke('editor.getSelectedText'); + context.invoke('editor.saveRange'); + this.showSpecialCharDialog(text).then(function (selectChar) { + context.invoke('editor.restoreRange'); + + // build node + var $node = $('<span></span>').html(selectChar)[0]; + + if ($node) { + // insert video node + context.invoke('editor.insertNode', $node); + } + }).fail(function () { + context.invoke('editor.restoreRange'); + }); + }; + + /** + * show image dialog + * + * @param {jQuery} $dialog + * @return {Promise} + */ + this.showSpecialCharDialog = function (text) { + return $.Deferred(function (deferred) { + var $specialCharDialog = self.$dialog; + var $specialCharNode = $specialCharDialog.find('.note-specialchar-node'); + var $selectedNode = null; + var ARROW_KEYS = [KEY.UP, KEY.DOWN, KEY.LEFT, KEY.RIGHT]; + var ENTER_KEY = KEY.ENTER; + + function addActiveClass($target) { + if (!$target) { + return; + } + $target.find('button').addClass('active'); + $selectedNode = $target; + } + + function removeActiveClass($target) { + $target.find('button').removeClass('active'); + $selectedNode = null; + } + + // find next node + function findNextNode(row, column) { + var findNode = null; + $.each($specialCharNode, function (idx, $node) { + var findRow = Math.ceil((idx + 1) / COLUMN_LENGTH); + var findColumn = ((idx + 1) % COLUMN_LENGTH === 0) ? COLUMN_LENGTH : (idx + 1) % COLUMN_LENGTH; + if (findRow === row && findColumn === column) { + findNode = $node; + return false; + } + }); + return $(findNode); + } + + function arrowKeyHandler(keyCode) { + // left, right, up, down key + var $nextNode; + var lastRowColumnLength = $specialCharNode.length % totalColumn; + + if (KEY.LEFT === keyCode) { + + if (currentColumn > 1) { + currentColumn = currentColumn - 1; + } else if (currentRow === 1 && currentColumn === 1) { + currentColumn = lastRowColumnLength; + currentRow = totalRow; + } else { + currentColumn = totalColumn; + currentRow = currentRow - 1; + } + + } else if (KEY.RIGHT === keyCode) { + + if (currentRow === totalRow && lastRowColumnLength === currentColumn) { + currentColumn = 1; + currentRow = 1; + } else if (currentColumn < totalColumn) { + currentColumn = currentColumn + 1; + } else { + currentColumn = 1; + currentRow = currentRow + 1; + } + + } else if (KEY.UP === keyCode) { + if (currentRow === 1 && lastRowColumnLength < currentColumn) { + currentRow = totalRow - 1; + } else { + currentRow = currentRow - 1; + } + } else if (KEY.DOWN === keyCode) { + currentRow = currentRow + 1; + } + + if (currentRow === totalRow && currentColumn > lastRowColumnLength) { + currentRow = 1; + } else if (currentRow > totalRow) { + currentRow = 1; + } else if (currentRow < 1) { + currentRow = totalRow; + } + + $nextNode = findNextNode(currentRow, currentColumn); + + if ($nextNode) { + removeActiveClass($selectedNode); + addActiveClass($nextNode); + } + } + + function enterKeyHandler() { + if (!$selectedNode) { + return; + } + + deferred.resolve(decodeURIComponent($selectedNode.find('button').attr('data-value'))); + $specialCharDialog.modal('hide'); + } + + function keyDownEventHandler(event) { + event.preventDefault(); + var keyCode = event.keyCode; + if (keyCode === undefined || keyCode === null) { + return; + } + // check arrowKeys match + if (ARROW_KEYS.indexOf(keyCode) > -1) { + if ($selectedNode === null) { + addActiveClass($specialCharNode.eq(0)); + currentColumn = 1; + currentRow = 1; + return; + } + arrowKeyHandler(keyCode); + } else if (keyCode === ENTER_KEY) { + enterKeyHandler(); + } + return false; + } + + // remove class + removeActiveClass($specialCharNode); + + // find selected node + if (text) { + for (var i = 0; i < $specialCharNode.length; i++) { + var $checkNode = $($specialCharNode[i]); + if ($checkNode.text() === text) { + addActiveClass($checkNode); + currentRow = Math.ceil((i + 1) / COLUMN_LENGTH); + currentColumn = (i + 1) % COLUMN_LENGTH; + } + } + } + + ui.onDialogShown(self.$dialog, function () { + + $(document).on('keydown', keyDownEventHandler); + + self.$dialog.find('button').tooltip(); + + $specialCharNode.on('click', function (event) { + event.preventDefault(); + deferred.resolve(decodeURIComponent($(event.currentTarget).find('button').attr('data-value'))); + ui.hideDialog(self.$dialog); + }); + + }); + + ui.onDialogHidden(self.$dialog, function () { + $specialCharNode.off('click'); + + self.$dialog.find('button').tooltip('destroy'); + + $(document).off('keydown', keyDownEventHandler); + + if (deferred.state() === 'pending') { + deferred.reject(); + } + }); + + ui.showDialog(self.$dialog); + }); + }; + } + }); +})); diff --git a/public/admin/view/javascript/summernote/summernote-image-attributes.js b/public/admin/view/javascript/summernote/summernote-image-attributes.js new file mode 100644 index 0000000..d41587f --- /dev/null +++ b/public/admin/view/javascript/summernote/summernote-image-attributes.js @@ -0,0 +1,653 @@ +/** + * Summernote Image Attributes + * https://github.com/StudioJunkyard/summernote-image-attributes + */ +(function(factory){ + if(typeof define==='function'&&define.amd){ + define(['jquery'],factory); + }else if(typeof module==='object'&&module.exports){ + module.exports=factory(require('jquery')); + }else{ + factory(window.jQuery); + } +}(function($){ + var readFileAsDataURL=function(file){ + return $.Deferred(function(deferred){ + $.extend(new FileReader(),{ + onload:function(e){ + var sDataURL=e.target.result; + deferred.resolve(sDataURL); + }, + onerror:function(){ + deferred.reject(this); + } + }).readAsDataURL(file); + }).promise(); + }; + $.extend(true,$.summernote.lang,{ + 'en-US':{ /* English */ + imageAttributes:{ + dialogTitle:'Image Attributes', + tooltip:'Image Attributes', + pluginImageTitle:'Image Attributes', + pluginLinkTitle:'Link Attributes', + title:'Title', + src:'Source', + srcHelp:'Selecting an image will replace existing image with an Inlined Image.', + alt:'Alt', + class:'Class', + classSelect:'Select Class', + style:'Style', + role:'Role', + href:'URL', + target:'Target', + linkClass:'Class', + linkRole:'Role', + rel:'Rel', + relBlank:'Do not use Rel Attribute', + relAlternate:'Alternate: Links to an alternate version of the document', + relAuthor:'Author: Links to the Author of the Document', + relBookmark:'Bookmark: Permanent URL used for Bookmarking', + relHelp:'Help: Links to a Help Document', + relLicense:'License: Links to copyright information for the document', + relNext:'Next: The next document in a selection', + relNofollow:'NoFollow: Links to an unendorsed document, like a paid link, also stops Search Engines following this link', + relNoreferrer:'NoReferrer: Specifies that the browser should not send a HTTP Header', + relPrefetch:'PreFetch: Specifies that the target document should be cached', + relPrev:'Prev: The previous document in a selection', + relSearch:'Search: Links to a search tool for the document', + relTag:'Tag: A tag (Keyword) for the current document' + } + }, + 'es-ES':{ /* Spanish */ + imageAttributes:{ + dialogTitle:'Propiedades de la Imagen', + tooltip:'Propiedades de la Imagen', + pluginImageTitle:'Atributos de la Imagen', + pluginLinkTitle:'Atributos del Enlace', + title:'Titulo', + src:'Fuente', + srcHelp:'La selección de una imagen reemplazará la imagen existente con una imagen Inline.', + alt:'Alternativo', + class:'Clases', + classSelect:'Selecciona Forma', + style:'Estilo', + role:'Papel', + href:'URL', + target:'Destino', + linkClass:'Clase', + linkRole:'Papel', + rel:'Rel', + relBlank:'No usar atributo Rel', + relAlternate:'Alternate: Enlaza a una versión alternativa del documento', + relAuthor:'Author: Enlaza al autor del documento', + relBookmark:'Bookmark: URL permanente utilizada para enlazar', + relHelp:'Help: Enlaza a un documento de Ayuda', + relLicense:'License: Enlaza a un documento de información de Copyright', + relNext:'Next: Enlaza al siguiente documento en una selección', + relNofollow:'NoFollow: Enlaza a un documento no confirmado, como un enlace de pago, también evita que los buscadores sigan este enlace', + relNoreferrer:'NoReferrer: Specifies that the browser should not send a HTTP Header', + relPrefetch:'PreFetch: Specifies that the target document should be cached', + relPrev:'Prev: Enlaza al documento anterior en una selección', + relSearch:'Search: Enlaza a una herramienta de búsqueda para el documento', + relTag:'Tag: Un etiqueta (palabra clave) para el documento actual' + } + }, + 'pt-BR':{ /* Spanish */ + imageAttributes:{ + dialogTitle:'Propriedades da Imagem', + tooltip:'Propriedades da Imagem', + pluginImageTitle:'Propriedades da Imagem', + pluginLinkTitle:'Propriedades do Link', + title:'Título', + src:'Fonte', + srcHelp:'Selecionar uma imagem irá substituir a imagem existente com uma imagem inline.', + alt:'Alt', + class:'Class', + classSelect:'Selecione a Classe', + style:'Estilo', + role:'Papel', + href:'URL', + target:'Destino', + linkClass:'Classe', + linkRole:'Papel', + rel:'Rel', + relBlank:'Não use o atribudo Rel', + relAlternate:'Alternate: Links para uma versão alternativa do documento', + relAuthor:'Author: Links para o autor do documento', + relBookmark:'Bookmark: URL permanente usada para favoritos', + relHelp:'Help: Links para um documento de ajuda', + relLicense:'License: Links para a informação de copyright do documento', + relNext:'Next: O próximo documento em uma seleção', + relNofollow:'NoFollow: Links para um documento não confirmado, como um link pago, também impede mecanismos de busca de seguir esse link', + relNoreferrer:'NoReferrer: Especifica que o navegador não deve enviar um cabeçalho HTTP', + relPrefetch:'PreFetch: Especifica que o documento de destino deve ser cacheado', + relPrev:'Prev: O documento anterior em uma seleção', + relSearch:'Search: Links para um mecanismos de busca para o documento', + relTag:'Tag: Uma etiqueta (palavra-chave) para o documento atual' + } + }, + 'fr-FR':{ /* French */ + imageAttributes:{ + dialogTitle:'Attributs de l\'image', + tooltip:'Attributs de l\'image', + pluginImageTitle:'Attributs de l\'image', + pluginLinkTitle:'Attributs du lien', + title:'Titre', + src:'La source', + srcHelp:'La sélection d\'une image remplacera l\'image existante par une Image Inline.', + alt:'Alt', + class:'Class CSS', + classSelect:'Choisir une Class', + style:'Style', + role:'Rôle', + href:'URL', + target:'Cible', + linkClass:'Class CSS du lien', + linkRole:'Rôle', + rel:'Lien Rel', + relBlank:'Ne pas utiliser d\'attribut Rel', + relAlternate:'Alternate: Lien vers une autre version du document', + relAuthor:'Author: Lien vers l\'auteur du document', + relBookmark:'Bookmark: Lien permant utilisé pour les signets', + relHelp:'Help: Lien vers un document d\'aide', + relLicense:'License: Lien vers les informations de droits d\'auteur du document', + relNext:'Next: La page suivante de ce document', + relNofollow:'NoFollow: Empêcher les moteurs de recherche de suivre ce lien', + relNoreferrer:'NoReferrer: Précise que le navigateur ne doit pas envoyer d\'entête HTTP', + relPrefetch:'PreFetch: Précise que le document cible doit être mis en cache', + relPrev:'Prev: La page précédente de ce document', + relSearch:'Search: Lien vers un outil de recherche du document', + relTag:'Tag: Mot-clé du document' + } + }, + 'zh-TW':{ /* Chinese */ + imageAttributes:{ + dialogTitle:'圖片提示', + tooltip:'圖片提示', + pluginImageTitle:'圖片屬性', + pluginLinkTitle:'連結屬性', + title:'標題', + src:'資源', + srcHelp:'選擇圖像將用內聯圖像替換現有圖像.', + alt:'圖片說明', + class:'类', + classSelect:'選擇 类', + style:'样式', + role:'角色', + href:'URL', + target:'目標', + linkClass:'連結樣式', + linkRole:'角色', + rel:'描述', + relBlank:'不使用連結說明', + rel:'不使用鏈結說明', + relBlank:'不使用鏈結說明', + relAlternate:'替代說明: 連至替代說明文件', + relAuthor:'作者: 連至來源位置', + relBookmark:'書籤: 提供加入書籤', + relHelp:'幫助: 連結至幫助文件', + relLicense:'版權: 連結至版權宣告頁面', + relNext:'下一步: 連結至下一個被選擇的頁面', + relNofollow:'不追蹤: 連結設置取消追蹤選項, 例如付費頁面, 並且禁止搜尋引擎追蹤該頁面', + relNoreferrer:'NoReferrer: 指定發送時取消 HTTP 的開頭', + relPrefetch:'預存: 指定該頁面啟用預存瀏覽', + relPrev:'上一步: 上一個被選擇的頁面', + relSearch:'搜尋: 連至搜尋文件', + relTag:'標籤: 為該文件設定標籤(關鍵字)' + } + }, + 'it-IT':{ /* Italian */ + imageAttributes:{ + dialogTitle:'Attributi Immagine', + tooltip:'Attributi Immagine', + pluginImageTitle:'Attributi Immagine', + pluginLinkTitle:'Attributi Collegamento', + title:'Titolo', + src:'Fonte', + srcHelp:'elezione di un\'immagine sostituirà immagine esistente con un inline Immagine.', + alt:'Alt', + class:'Classe', + classSelect:'Seleziona Classe', + style:'Stile', + role:'Ruolo', + href:'URL', + target:'Bersaglio', + linkClass:'Classe per il collegamento', + linkRole:'Ruolo', + rel:'Link Rel', + relBlank:'Non usare attributo Rel', + relAlternate:'Alternate: Collegamento ad una versione alternativa del documento', + relAuthor:'Author: Collegamento all\'autore del documento', + relBookmark:'Bookmark: URL permanente per i preferiti', + relHelp:'Help: Collegamento ad una pagina di aiuto per questo documento', + relLicense:'License: Collegamento alle informazioni sul copyright di questo docuemnto', + relNext:'Next: Pagina successiva di questo documento', + relNofollow:'NoFollow: Impedisce ai motori di ricerca di seguire questo collegamento', + relNoreferrer:'NoReferrer: Specifica al browser di non inviare Header HTTP', + relPrefetch:'PreFetch: Specifica che il documento di destinazione deve essere memorizzato nella cache', + relPrev:'Prev: Pagina precedente di questo documento', + relSearch:'Search: Collegamenti a uno strumento di ricerca per questo documento', + relTag:'Tag: Un tag (parola chiave) per questo documento' + } + }, + 'de-DE':{ /* German */ + imageAttributes:{ + dialogTitle:'Bild Eigenschaften', + tooltip:'Bild Eigenschaften', + pluginImageTitle:'Bild Eigenschaften', + pluginLinkTitle:'Link Eigenschaften', + title:'Titel', + src:'Quelle', + srcHelp:'Wenn Sie ein Bild auswählen, wird das bestehende Bild durch ein Inlined Image ersetzt.', + alt:'Alt Tag', + class:'CSS Klasse', + classSelect:'wähle CSS Klasse', + style:'Stil', + role:'Rolle', + href:'URL', + target:'Ziel (target)', + linkClass:'CSS Link Klasse', + linkRole:'Ruolo', + rel:'Link Beziehung (Relation)', + relBlank:'Keine Link Beziehung', + relAlternate:'Alternate: Link zu einer alternativen Version', + relAuthor:'Author: Link zum Autor des Artikels', + relBookmark:'Bookmark: Permanent URL für Lesezeichen', + relHelp:'Help: Link zur Hilfe', + relLicense:'License: Link zu Urheber und Lizenzinformationen', + relNext:'Next: Die nächste aktive Seite', + relNofollow:'NoFollow: Suchmaschinen sollen dem Link nicht folgen', + relNoreferrer:'NoReferrer: Browser soll keinen HTTP Header senden', + relPrefetch:'PreFetch: Gibt an, dass die Seite gecacht werden soll', + relPrev:'Prev: Die zuletzt aktive Seite', + relSearch:'Search: Link zur Dokumentsuche', + relTag:'Tag: Ein Schlüsselwort (keyword) für diese Seite' + } + }, + 'tr-TR':{ /* Turkish */ + imageAttributes:{ + dialogTitle:'Resim Özellikleri', + tooltip:'Resim Özellikleri', + pluginImageTitle:'Resim Özellikleri', + pluginLinkTitle:'Bağlantı Özellikleri', + title:'Başlık', + src:'Kaynak', + srcHelp:'Bir görüntüyü seçmek, var olan resmi Inlined Image ile değiştirecektir.', + alt:'Alt. Metin', + class:'Sınıf', + classSelect:'Sınıf Seçin', + style:'Stil', + role:'Rol', + href:'URL', + target:'Hedef', + linkClass:'Bağlantı Sınıfı', + linkRole:'Rol', + rel:'Bağlantı İlişkisi(Rel)', + relBlank:'İlişki özelliğini kullanma', + relAlternate:'Alternatif: Belgenin farklı bir versiyonuna bağlantı', + relAuthor:'Yazar: Belgenin yazarına bağlantı', + relBookmark:'Yer İmi: Yer İmi eklemek için kalıcı adres', + relHelp:'Yardım: Yardım dökümanına giden bağlantı', + relLicense:'Lisans: Belgenin telif hakkı bilgisine bağlantı', + relNext:'Sonraki: Sıradaki belgeye giden bağlantı', + relNofollow:'Takip Etme (NoFollow): Arama motorlarının bu bağlantıyı takip etmemesini sağlar', + relNoreferrer:'Referanssız (NoReferrer): Tarayıcının bu bağlantıya referans adresi göndermemesi gerektiğini belirtir', + relPrefetch:'ÖnBellek(PreFetch): Hedef bağlantının ön belleğe alınması gerektiğini belirtir', + relPrev:'Önceki: Önceki belgeye giden bağlantı', + relSearch:'Arama: Belge için bir arama aracına bağlantı olduğunu belirtir.', + relTag:'Etiket: Belge için bir etiket olduğunu belirtir' + } + } + }); + $.extend($.summernote.options,{ + imageDialogLayout:'default', /* default|horizontal */ + imageAttributes:{ + icon:'<i class="note-icon-pencil"/>', + removeEmpty:true, + }, + displayFields:{ + imageBasic:true, + imageExtra:false, + linkBasic:true, + linkExtra:false + } + }); + $.extend($.summernote.plugins,{ + 'imageAttributes':function(context){ + var self=this; + var ui=$.summernote.ui; + var $note=context.layoutInfo.note; + var $editor=context.layoutInfo.editor; + var $editable=context.layoutInfo.editable; + var options=context.options; + var lang=options.langInfo; + var imageLimitation=''; + if(options.maximumImageFileSize){ + var unit=Math.floor(Math.log(options.maximumImageFileSize)/Math.log(1024)); + var readableSize=(options.maximumImageFileSize/Math.pow(1024,unit)).toFixed(2)*1+' '+' KMGTP'[unit]+'B'; + imageLimitation='<small>'+lang.image.maximumFileSize+' : '+readableSize+'</small>'; + } + context.memo('button.imageAttributes',function(){ + var button=ui.button({ + contents:options.imageAttributes.icon, + tooltip:lang.imageAttributes.tooltip, + click:function(e){ + context.invoke('imageAttributes.show'); + } + }); + return button.render(); + }); + this.initialize=function(){ + var $container=options.dialogsInBody?$(document.body):$editor; + if(options.imageDialogLayout=='horizontal'){ + var body='<dl class="dl-horizontal">'; + if (options.displayFields.imageBasic) { + body += '<dt><label for="note-image-attributes-title">'+lang.imageAttributes.title+'</label></dt>'+ + '<dd><input type="text" id="note-image-attributes-title" class="note-image-attributes-title form-control"></dd>'+ + '<dt><label for="note-image-attributes-src">'+lang.imageAttributes.src+'</label></dt>'+ + '<dd><input type="text" id="note-image-attributes-src" class="note-image-attributes-src form-control"></dd>'+ + '<dt><label for="note-group-select-from-files"></label></dt>'+ + '<dd><input type="file" id="note-group-select-from-files" name="file" accept="image/*" class="note-image-input form-control">'+imageLimitation+'</dd>'+ + '<dt></dt>'+ + '<dd><small class="help-block">'+lang.imageAttributes.srcHelp+'</small></dd>'+ + '<dt><label for="note-image-attributes-alt">'+lang.imageAttributes.alt+'</label></dt>'+ + '<dd><input type="text" id="note-image-attributes-alt" class="note-image-attributes-alt form-control"></dd>'; + } + if (options.displayFields.imageExtra) { + body += '<dt><label for="note-image-attributes-class">'+lang.imageAttributes.class+'</label></dt>'+ + '<dd><input type="text" id="note-image-attributes-class" class="note-image-attributes-class form-control"></dd>'+ + '<dt><label for="note-image-attributes-style">'+lang.imageAttributes.style+'</label></dt>'+ + '<dd><input type="text" id="note-image-attributes-style" class="note-image-attributes-style form-control"></dd>'+ + '<dt><label for="note-image-attributes-role">'+lang.imageAttributes.role+'</label></dt>'+ + '<dd><input type="text" id="note-image-attributes-role" class="note-image-attributes-role form-control"></dd>'; + } + body += '</dl>'+ + '<hr>'; + if (options.displayFields.linkBasic) { + body += '<h4>'+lang.imageAttributes.pluginLinkTitle+'</h4>'+ + '<dl class="dl-horizontal">'+ + '<dt><label for="note-image-attributes-link-href">'+lang.imageAttributes.href+'</label></dt>'+ + '<dd><input type="text" id="note-image-attributes-link-href" class="note-image-attributes-href form-control"></dd>'+ + '<dt><label for="note-image-attributes-link-target">'+lang.imageAttributes.target+'</label></dt>'+ + '<dd><select id="note-image-attributes-link-target" class="note-image-attributes-target form-control">'+ + '<option value="_self">Self</option>'+ + '<option value="_blank">Blank</option>'+ + '<option value="_top">Top</option>'+ + '<option value="_parent">Parent</option>'+ + '</select></dd>'; + } + if (options.displayFields.linkExtra) { + body += '<dt><label for="note-image-attributes-link-class">'+lang.imageAttributes.linkClass+'</label></dt>'+ + '<dd><input type="text" id="note-image-attributes-link-class" class="note-image-attributes-link-class form-control"></dd>'+ + '<dt><label for="note-image-attributes-link-rel">'+lang.imageAttributes.rel+'</label></dt>'+ + '<dd><select id="note-image-attributes-link-rel" class="note-image-attributes-link-rel form-control">'+ + '<option value="">'+lang.imageAttributes.relBlank+'</option>'+ + '<option value="alternate">'+lang.imageAttributes.relAlternate+'</option>'+ + '<option value="author">'+lang.imageAttributes.relAuthor+'</option>'+ + '<option value="bookmark">'+lang.imageAttributes.relBookmark+'</option>'+ + '<option value="help">'+lang.imageAttributes.relHelp+'</option>'+ + '<option value="license">'+lang.imageAttributes.relLicense+'</option>'+ + '<option value="next">'+lang.imageAttributes.relNext+'</option>'+ + '<option value="nofollow">'+lang.imageAttributes.relNofollow+'</option>'+ + '<option value="noreferrer">'+lang.imageAttributes.relNoreferrer+'</option>'+ + '<option value="prefetch">'+lang.imageAttributes.relPrefetch+'</option>'+ + '<option value="prev">'+lang.imageAttributes.relPrev+'</option>'+ + '<option value="search">'+lang.imageAttributes.relSearch+'</option>'+ + '<option value="tag">'+lang.imageAttributes.relTag+'</option>'+ + '</select></dd>'+ + '<dt><label for="note-image-attributes-link-role">'+lang.imageAttributes.linkRole+'</label></dt>'+ + '<dd><input type="text" id="note-image-attributes-link-role" class="note-image-attributes-link-role form-control"></dd>'; + } + body += '</dl>'; + }else{ + var body='<div class="form-group">'; + if (options.displayFields.imageBasic) { + body += '<label for="note-image-attributes-title" class="control-label col-xs-2">'+lang.imageAttributes.title+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<input type="text" id="note-image-attributes-title" class="note-image-attributes-title form-control">'+ + '</div>'+ + '</div>'+ + '<div class="form-group">'+ + '<label for="note-image-attributes-src" class="control-label col-xs-2">'+lang.imageAttributes.src+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<input type="text" id="note-image-attributes-src" class="note-image-attributes-src form-control">'+ + '</div>'+ + '</div>'+ + '<div class="form-group note-group-select-from-files">'+ + '<label class="control-label col-xs-2"></label>'+ + '<div class="input-group col-xs-10">'+ + '<input class="note-image-input form-control" type="file" name="file" accept="image/*" />'+imageLimitation+ + '<small class="help-block">'+lang.imageAttributes.srcHelp+'</small>'+ + '</div>'+ + '</div>'+ + '<div class="form-group">'+ + '<label for="note-image-attributes-alt" class="control-label col-xs-2">'+lang.imageAttributes.alt+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<input type="text" id="note-image-attributes-alt" class="note-image-attributes-alt form-control">'+ + '</div>'+ + '</div>'; + } + if (options.displayFields.imageExtra) { + body += '<div class="form-group">'+ + '<label for="note-image-attributes-class" class="control-label col-xs-2">'+lang.imageAttributes.class+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<input type="text" id="note-image-attributes-class" class="note-image-attributes-class form-control">'+ + '</div>'+ + '</div>'+ + '<div class="form-group">'+ + '<label for="note-image-attributes-style" class="control-label col-xs-2">'+lang.imageAttributes.style+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<input type="text" id="note-image-attributes-style" class="note-image-attributes-style form-control">'+ + '</div>'+ + '</div>'+ + '<div class="form-group">'+ + '<label for="note-image-attributes-role" class="control-label col-xs-2">'+lang.imageAttributes.role+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<input type="text" id="note-image-attributes-role" class="note-image-attributes-role form-control">'+ + '</div>'+ + '</div>'; + } + if (options.displayFields.linkBasic || options.displayFields.linkExtra) { + body += '<h4>'+lang.imageAttributes.pluginLinkTitle+'</h4>'+ + '<hr>'; + } + if (options.displayFields.linkBasic) { + body += '<div class="form-group">'+ + '<label for="note-image-attributes-link-href" class="control-label col-xs-2">'+lang.imageAttributes.href+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<input type="text" id="note-image-attributes-link-href" class="note-image-attributes-href form-control">'+ + '</div>'+ + '</div>'+ + '<div class="form-group">'+ + '<label for="note-image-attributes-link-target" class="control-label col-xs-2">'+lang.imageAttributes.target+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<select id="note-image-attributes-link-target" class="note-image-attributes-target form-control">'+ + '<option value="_self">Self</option>'+ + '<option value="_blank">Blank</option>'+ + '<option value="_top">Top</option>'+ + '<option value="_parent">Parent</option>'+ + '</select>'+ + '</div>'+ + '</div>'; + } + if (options.displayFields.linkExtra) { + body += '<div class="form-group">'+ + '<label for="note-image-attributes-link-class" class="control-label col-xs-2">'+lang.imageAttributes.linkClass+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<input type="text" id="note-image-attributes-link-class" class="note-image-attributes-link-class form-control">'+ + '</div>'+ + '</div>'+ + '<div class="form-group">'+ + '<label for="note-image-attributes-link-rel" class="control-label col-xs-2">'+lang.imageAttributes.rel+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<select id="note-image-attributes-link-rel" class="note-image-attributes-link-rel form-control">'+ + '<option value="">'+lang.imageAttributes.relBlank+'</option>'+ + '<option value="alternate">'+lang.imageAttributes.relAlternate+'</option>'+ + '<option value="author">'+lang.imageAttributes.relAuthor+'</option>'+ + '<option value="bookmark">'+lang.imageAttributes.relBookmark+'</option>'+ + '<option value="help">'+lang.imageAttributes.relHelp+'</option>'+ + '<option value="license">'+lang.imageAttributes.relLicense+'</option>'+ + '<option value="next">'+lang.imageAttributes.relNext+'</option>'+ + '<option value="nofollow">'+lang.imageAttributes.relNofollow+'</option>'+ + '<option value="noreferrer">'+lang.imageAttributes.relNoreferrer+'</option>'+ + '<option value="prefetch">'+lang.imageAttributes.relPrefetch+'</option>'+ + '<option value="prev">'+lang.imageAttributes.relPrev+'</option>'+ + '<option value="search">'+lang.imageAttributes.relSearch+'</option>'+ + '<option value="tag">'+lang.imageAttributes.relTag+'</option>'+ + '</select>'+ + '</div>'+ + '</div>'+ + '<div class="form-group">'+ + '<label for="note-image-attributes-link-role" class="control-label col-xs-2">'+lang.imageAttributes.linkRole+'</label>'+ + '<div class="input-group col-xs-10">'+ + '<input type="text" id="note-image-attributes-link-role" class="note-image-attributes-link-role form-control">'+ + '</div>'+ + '</div>'; + } + } + this.$dialog=ui.dialog({ + title:lang.imageAttributes.dialogTitle, + body:body, + footer:'<button href="#" class="btn btn-primary note-image-attributes-btn">OK</button>' + }).render().appendTo($container); + }; + this.destroy=function(){ + ui.hideDialog(this.$dialog); + this.$dialog.remove(); + }; + this.bindEnterKey=function($input,$btn){ + $input.on('keypress',function(event){ + if(event.keyCode===13)$btn.trigger('click'); + }); + }; + this.bindLabels=function(){ + self.$dialog.find('.form-control:first').focus().select(); + self.$dialog.find('label').on('click',function(){ + $(this).parent().find('.form-control:first').focus(); + }); + }; + this.show=function(){ + var $img=$($editable.data('target')); + var imgInfo={ + imgDom:$img, + title:$img.attr('title'), + src:$img.attr('src'), + alt:$img.attr('alt'), + role:$img.attr('role'), + class:$img.attr('class'), + style:$img.attr('style'), + imgLink:$($img.context).parent().is("a")?$($img.context).parent():null + }; + this.showLinkDialog(imgInfo) + .then(function(imgInfo){ + ui.hideDialog(self.$dialog); + var $img=imgInfo.imgDom; + if(options.imageAttributes.removeEmpty){ + if(imgInfo.alt)$img.attr('alt',imgInfo.alt);else $img.removeAttr('alt'); + if(imgInfo.title)$img.attr('title',imgInfo.title);else $img.removeAttr('title'); + if(imgInfo.src)$img.attr('src',imgInfo.src);else $img.attr('src', '#'); + if(imgInfo.class)$img.attr('class',imgInfo.class);else $img.removeAttr('class'); + if(imgInfo.style)$img.attr('style',imgInfo.style);else $img.removeAttr('style'); + if(imgInfo.role)$img.attr('role',imgInfo.role);else $img.removeAttr('role'); + }else{ + $img.attr('alt',imgInfo.alt); + $img.attr('title',imgInfo.title); + $img.attr('class',imgInfo.class); + $img.attr('style',imgInfo.style); + $img.attr('role',imgInfo.role); + } + if($img.parent().is("a"))$img.unwrap(); + var hrefRegex=new RegExp(/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi); + if(imgInfo.href.match(hrefRegex)){ + var lnktxt='<a'; + if(imgInfo.linkClass)lnktxt+=' class="'+imgInfo.linkClass+'"'; + lnktxt+=' href="'+imgInfo.href+'" target="'+imgInfo.target+'"'; + if(imgInfo.linkRel)lnktxt+=' rel="'+imgInfo.linkRel+'"'; + if(imgInfo.linkRole)lnktxt+=' role="'+imgInfo.linkRole+'"'; + lnktxt+='></a>'; + $img.wrap(lnktxt); + } + $note.val(context.invoke('code')); + $note.change(); + }); + }; + this.showLinkDialog=function(imgInfo){ + return $.Deferred(function(deferred){ + var $imageTitle=self.$dialog.find('.note-image-attributes-title'), + $imageInput=self.$dialog.find('.note-image-input'), + $imageSrc=self.$dialog.find('.note-image-attributes-src'), + $imageAlt=self.$dialog.find('.note-image-attributes-alt'), + $imageClass=self.$dialog.find('.note-image-attributes-class'), + $imageStyle=self.$dialog.find('.note-image-attributes-style'), + $imageRole=self.$dialog.find('.note-image-attributes-role'), + $linkHref=self.$dialog.find('.note-image-attributes-href'), + $linkTarget=self.$dialog.find('.note-image-attributes-target'), + $linkClass=self.$dialog.find('.note-image-attributes-link-class'), + $linkRel=self.$dialog.find('.note-image-attributes-link-rel'), + $linkRole=self.$dialog.find('.note-image-attributes-link-role'), + $editBtn=self.$dialog.find('.note-image-attributes-btn'); + if(imgInfo.imgLink){ + $linkHref.val(imgInfo.imgLink.attr('href')); + $linkClass.val(imgInfo.imgLink.attr('class')); + $linkRole.val(imgInfo.imgLink.attr('role')); + $linkTarget.find('option').each(function(){ + if($(this).val()==imgInfo.imgLink.attr('target'))$(this).attr('selected','selected'); + }); + $linkRel.find('option').each(function(){ + if($(this).val()==imgInfo.imgLink.attr('rel'))$(this).attr('selected','selected'); + }); + } + ui.onDialogShown(self.$dialog,function(){ + context.triggerEvent('dialog.shown'); + $imageInput.replaceWith( + $imageInput.clone() + .on('change',function(){ + var callbacks=options.callbacks; + if(callbacks.onImageUpload){ + context.triggerEvent('image.upload',this.files[0]); + }else{ + readFileAsDataURL(this.files[0]).then(function(dataURL){ + $imageSrc.val(dataURL) + }).fail(function(){ + context.triggerEvent('image.upload.error'); + }); + } + }).val('') + ); + $editBtn.click(function(e){ + e.preventDefault(); + deferred.resolve({ + imgDom:imgInfo.imgDom, + title:$imageTitle.val(), + src:$imageSrc.val(), + alt:$imageAlt.val(), + class:$imageClass.val(), + style:$imageStyle.val(), + role:$imageRole.val(), + href:$linkHref.val(), + target:$linkTarget.val(), + linkClass:$linkClass.val(), + linkRel:$linkRel.val(), + linkRole:$linkRole.val() + }); + }); + $imageTitle.val(imgInfo.title).focus; + $imageSrc.val(imgInfo.src) + $imageAlt.val(imgInfo.alt); + $imageClass.val(imgInfo.class); + $imageStyle.val(imgInfo.style); + $imageRole.val(imgInfo.role); + self.bindEnterKey($editBtn); + self.bindLabels(); + }); + ui.onDialogHidden(self.$dialog,function(){ + $editBtn.off('click'); + if(deferred.state()==='pending')deferred.reject(); + }); + ui.showDialog(self.$dialog); + }); + }; + } + }); +})); diff --git a/public/admin/view/javascript/summernote/summernote.css b/public/admin/view/javascript/summernote/summernote.css new file mode 100644 index 0000000..7b23e34 --- /dev/null +++ b/public/admin/view/javascript/summernote/summernote.css @@ -0,0 +1 @@ +@font-face{font-family:"summernote";font-style:normal;font-weight:normal;src:url("font/summernote.eot?ad8d7e2d177d2473aecd9b35d16211fb");src:url("font/summernote.eot?#iefix") format("embedded-opentype"),url("font/summernote.woff?ad8d7e2d177d2473aecd9b35d16211fb") format("woff"),url("font/summernote.ttf?ad8d7e2d177d2473aecd9b35d16211fb") format("truetype")}[class^="note-icon-"]:before,[class*=" note-icon-"]:before{display:inline-block;font:normal normal normal 14px summernote;font-size:inherit;-webkit-font-smoothing:antialiased;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;speak:none;-moz-osx-font-smoothing:grayscale}.note-icon-align-center:before{content:"\f101"}.note-icon-align-indent:before{content:"\f102"}.note-icon-align-justify:before{content:"\f103"}.note-icon-align-left:before{content:"\f104"}.note-icon-align-outdent:before{content:"\f105"}.note-icon-align-right:before{content:"\f106"}.note-icon-align:before{content:"\f107"}.note-icon-arrows-alt:before{content:"\f108"}.note-icon-bold:before{content:"\f109"}.note-icon-caret:before{content:"\f10a"}.note-icon-chain-broken:before{content:"\f10b"}.note-icon-circle:before{content:"\f10c"}.note-icon-close:before{content:"\f10d"}.note-icon-code:before{content:"\f10e"}.note-icon-eraser:before{content:"\f10f"}.note-icon-font:before{content:"\f110"}.note-icon-frame:before{content:"\f111"}.note-icon-italic:before{content:"\f112"}.note-icon-link:before{content:"\f113"}.note-icon-magic:before{content:"\f114"}.note-icon-menu-check:before{content:"\f115"}.note-icon-minus:before{content:"\f116"}.note-icon-orderedlist:before{content:"\f117"}.note-icon-pencil:before{content:"\f118"}.note-icon-picture:before{content:"\f119"}.note-icon-question:before{content:"\f11a"}.note-icon-redo:before{content:"\f11b"}.note-icon-special-character:before{content:"\f11c"}.note-icon-square:before{content:"\f11d"}.note-icon-strikethrough:before{content:"\f11e"}.note-icon-subscript:before{content:"\f11f"}.note-icon-summernote:before{content:"\f120"}.note-icon-superscript:before{content:"\f121"}.note-icon-table:before{content:"\f122"}.note-icon-text-height:before{content:"\f123"}.note-icon-trash:before{content:"\f124"}.note-icon-underline:before{content:"\f125"}.note-icon-undo:before{content:"\f126"}.note-icon-unorderedlist:before{content:"\f127"}.note-icon-video:before{content:"\f128"}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:white;opacity:.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:bold;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:0}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor.note-frame{border:1px solid #a9a9a9}.note-editor.note-frame.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;background-color:#fff}.note-editor.note-frame .note-editing-area .note-editable[contenteditable="false"]{background-color:#e5e5e5}.note-editor.note-frame .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor.note-frame.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%!important}.note-editor.note-frame.fullscreen .note-editable{background-color:white}.note-editor.note-frame.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-statusbar{background-color:#f5f5f5;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.note-editor.note-frame .note-statusbar .note-resizebar{width:100%;height:8px;padding-top:1px;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor.note-frame .note-placeholder{padding:10px}.note-popover.popover{max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover.popover .arrow{left:20px!important}.note-popover .popover-content,.panel-heading.note-toolbar{padding:0 0 5px 5px;margin:0}.note-popover .popover-content>.btn-group,.panel-heading.note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .popover-content .btn-group .note-table,.panel-heading.note-toolbar .btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute!important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative!important;z-index:1;width:5em;height:5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute!important;z-index:2;width:1em;height:1em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .note-style h1,.panel-heading.note-toolbar .note-style h1,.note-popover .popover-content .note-style h2,.panel-heading.note-toolbar .note-style h2,.note-popover .popover-content .note-style h3,.panel-heading.note-toolbar .note-style h3,.note-popover .popover-content .note-style h4,.panel-heading.note-toolbar .note-style h4,.note-popover .popover-content .note-style h5,.panel-heading.note-toolbar .note-style h5,.note-popover .popover-content .note-style h6,.panel-heading.note-toolbar .note-style h6,.note-popover .popover-content .note-style blockquote,.panel-heading.note-toolbar .note-style blockquote{margin:0}.note-popover .popover-content .note-color .dropdown-toggle,.panel-heading.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .dropdown-menu,.panel-heading.note-toolbar .note-color .dropdown-menu{min-width:340px}.note-popover .popover-content .note-color .dropdown-menu .btn-group,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group{margin:0}.note-popover .popover-content .note-color .dropdown-menu .btn-group:first-child,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group:first-child{margin:0 5px}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-palette-title,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset{width:100%;padding:0 3px;margin:3px;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-color-row,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-row{height:20px}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset:hover,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset:hover{background:#eee}.note-popover .popover-content .note-para .dropdown-menu,.panel-heading.note-toolbar .note-para .dropdown-menu{min-width:216px;padding:5px}.note-popover .popover-content .note-para .dropdown-menu>div:first-child,.panel-heading.note-toolbar .note-para .dropdown-menu>div:first-child{margin-right:5px}.note-popover .popover-content .dropdown-menu,.panel-heading.note-toolbar .dropdown-menu{min-width:90px}.note-popover .popover-content .dropdown-menu.right,.panel-heading.note-toolbar .dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .dropdown-menu.right::before,.panel-heading.note-toolbar .dropdown-menu.right::before{right:9px;left:auto!important}.note-popover .popover-content .dropdown-menu.right::after,.panel-heading.note-toolbar .dropdown-menu.right::after{right:10px;left:auto!important}.note-popover .popover-content .dropdown-menu.note-check li a i,.panel-heading.note-toolbar .dropdown-menu.note-check li a i{color:deepskyblue;visibility:hidden}.note-popover .popover-content .dropdown-menu.note-check li a.checked i,.panel-heading.note-toolbar .dropdown-menu.note-check li a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.panel-heading.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.panel-heading.note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.panel-heading.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #fff}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.panel-heading.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #000}.note-dialog>div{display:none}.note-dialog .form-group{margin-right:0;margin-left:0}.note-dialog .note-modal-form{margin:0}.note-dialog .note-image-dialog .note-dropzone{min-height:100px;margin-bottom:10px;font-size:30px;line-height:4;color:lightgray;text-align:center;border:4px dashed lightgray}@-moz-document url-prefix(){.note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid black}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:black;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:white;border:1px solid black}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:white;background-color:black;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{max-height:150px;padding:3px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block!important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:white;text-decoration:none;white-space:nowrap;cursor:pointer;background-color:#428bca;outline:0}
\ No newline at end of file diff --git a/public/admin/view/javascript/summernote/summernote.js b/public/admin/view/javascript/summernote/summernote.js new file mode 100644 index 0000000..a7cb3a7 --- /dev/null +++ b/public/admin/view/javascript/summernote/summernote.js @@ -0,0 +1,7046 @@ +/** + * Super simple wysiwyg editor v0.8.2 + * http://summernote.org/ + * + * summernote.js + * Copyright 2013-2016 Alan Hong. and other contributors + * summernote may be freely distributed under the MIT license./ + * + * Date: 2016-08-07T05:11Z + */ +(function (factory) { + /* global define */ + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof module === 'object' && module.exports) { + // Node/CommonJS + module.exports = factory(require('jquery')); + } else { + // Browser globals + factory(window.jQuery); + } +}(function ($) { + 'use strict'; + + /** + * @class core.func + * + * func utils (for high-order func's arg) + * + * @singleton + * @alternateClassName func + */ + var func = (function () { + var eq = function (itemA) { + return function (itemB) { + return itemA === itemB; + }; + }; + + var eq2 = function (itemA, itemB) { + return itemA === itemB; + }; + + var peq2 = function (propName) { + return function (itemA, itemB) { + return itemA[propName] === itemB[propName]; + }; + }; + + var ok = function () { + return true; + }; + + var fail = function () { + return false; + }; + + var not = function (f) { + return function () { + return !f.apply(f, arguments); + }; + }; + + var and = function (fA, fB) { + return function (item) { + return fA(item) && fB(item); + }; + }; + + var self = function (a) { + return a; + }; + + var invoke = function (obj, method) { + return function () { + return obj[method].apply(obj, arguments); + }; + }; + + var idCounter = 0; + + /** + * generate a globally-unique id + * + * @param {String} [prefix] + */ + var uniqueId = function (prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + /** + * returns bnd (bounds) from rect + * + * - IE Compatibility Issue: http://goo.gl/sRLOAo + * - Scroll Issue: http://goo.gl/sNjUc + * + * @param {Rect} rect + * @return {Object} bounds + * @return {Number} bounds.top + * @return {Number} bounds.left + * @return {Number} bounds.width + * @return {Number} bounds.height + */ + var rect2bnd = function (rect) { + var $document = $(document); + return { + top: rect.top + $document.scrollTop(), + left: rect.left + $document.scrollLeft(), + width: rect.right - rect.left, + height: rect.bottom - rect.top + }; + }; + + /** + * returns a copy of the object where the keys have become the values and the values the keys. + * @param {Object} obj + * @return {Object} + */ + var invertObject = function (obj) { + var inverted = {}; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + inverted[obj[key]] = key; + } + } + return inverted; + }; + + /** + * @param {String} namespace + * @param {String} [prefix] + * @return {String} + */ + var namespaceToCamel = function (namespace, prefix) { + prefix = prefix || ''; + return prefix + namespace.split('.').map(function (name) { + return name.substring(0, 1).toUpperCase() + name.substring(1); + }).join(''); + }; + + /** + * Returns a function, that, as long as it continues to be invoked, will not + * be triggered. The function will be called after it stops being called for + * N milliseconds. If `immediate` is passed, trigger the function on the + * leading edge, instead of the trailing. + * @param {Function} func + * @param {Number} wait + * @param {Boolean} immediate + * @return {Function} + */ + var debounce = function (func, wait, immediate) { + var timeout; + return function () { + var context = this, args = arguments; + var later = function () { + timeout = null; + if (!immediate) { + func.apply(context, args); + } + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + func.apply(context, args); + } + }; + }; + + return { + eq: eq, + eq2: eq2, + peq2: peq2, + ok: ok, + fail: fail, + self: self, + not: not, + and: and, + invoke: invoke, + uniqueId: uniqueId, + rect2bnd: rect2bnd, + invertObject: invertObject, + namespaceToCamel: namespaceToCamel, + debounce: debounce + }; + })(); + + /** + * @class core.list + * + * list utils + * + * @singleton + * @alternateClassName list + */ + var list = (function () { + /** + * returns the first item of an array. + * + * @param {Array} array + */ + var head = function (array) { + return array[0]; + }; + + /** + * returns the last item of an array. + * + * @param {Array} array + */ + var last = function (array) { + return array[array.length - 1]; + }; + + /** + * returns everything but the last entry of the array. + * + * @param {Array} array + */ + var initial = function (array) { + return array.slice(0, array.length - 1); + }; + + /** + * returns the rest of the items in an array. + * + * @param {Array} array + */ + var tail = function (array) { + return array.slice(1); + }; + + /** + * returns item of array + */ + var find = function (array, pred) { + for (var idx = 0, len = array.length; idx < len; idx ++) { + var item = array[idx]; + if (pred(item)) { + return item; + } + } + }; + + /** + * returns true if all of the values in the array pass the predicate truth test. + */ + var all = function (array, pred) { + for (var idx = 0, len = array.length; idx < len; idx ++) { + if (!pred(array[idx])) { + return false; + } + } + return true; + }; + + /** + * returns index of item + */ + var indexOf = function (array, item) { + return $.inArray(item, array); + }; + + /** + * returns true if the value is present in the list. + */ + var contains = function (array, item) { + return indexOf(array, item) !== -1; + }; + + /** + * get sum from a list + * + * @param {Array} array - array + * @param {Function} fn - iterator + */ + var sum = function (array, fn) { + fn = fn || func.self; + return array.reduce(function (memo, v) { + return memo + fn(v); + }, 0); + }; + + /** + * returns a copy of the collection with array type. + * @param {Collection} collection - collection eg) node.childNodes, ... + */ + var from = function (collection) { + var result = [], idx = -1, length = collection.length; + while (++idx < length) { + result[idx] = collection[idx]; + } + return result; + }; + + /** + * returns whether list is empty or not + */ + var isEmpty = function (array) { + return !array || !array.length; + }; + + /** + * cluster elements by predicate function. + * + * @param {Array} array - array + * @param {Function} fn - predicate function for cluster rule + * @param {Array[]} + */ + var clusterBy = function (array, fn) { + if (!array.length) { return []; } + var aTail = tail(array); + return aTail.reduce(function (memo, v) { + var aLast = last(memo); + if (fn(last(aLast), v)) { + aLast[aLast.length] = v; + } else { + memo[memo.length] = [v]; + } + return memo; + }, [[head(array)]]); + }; + + /** + * returns a copy of the array with all false values removed + * + * @param {Array} array - array + * @param {Function} fn - predicate function for cluster rule + */ + var compact = function (array) { + var aResult = []; + for (var idx = 0, len = array.length; idx < len; idx ++) { + if (array[idx]) { aResult.push(array[idx]); } + } + return aResult; + }; + + /** + * produces a duplicate-free version of the array + * + * @param {Array} array + */ + var unique = function (array) { + var results = []; + + for (var idx = 0, len = array.length; idx < len; idx ++) { + if (!contains(results, array[idx])) { + results.push(array[idx]); + } + } + + return results; + }; + + /** + * returns next item. + * @param {Array} array + */ + var next = function (array, item) { + var idx = indexOf(array, item); + if (idx === -1) { return null; } + + return array[idx + 1]; + }; + + /** + * returns prev item. + * @param {Array} array + */ + var prev = function (array, item) { + var idx = indexOf(array, item); + if (idx === -1) { return null; } + + return array[idx - 1]; + }; + + return { head: head, last: last, initial: initial, tail: tail, + prev: prev, next: next, find: find, contains: contains, + all: all, sum: sum, from: from, isEmpty: isEmpty, + clusterBy: clusterBy, compact: compact, unique: unique }; + })(); + + var isSupportAmd = typeof define === 'function' && define.amd; + + /** + * returns whether font is installed or not. + * + * @param {String} fontName + * @return {Boolean} + */ + var isFontInstalled = function (fontName) { + var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS'; + var $tester = $('<div>').css({ + position: 'absolute', + left: '-9999px', + top: '-9999px', + fontSize: '200px' + }).text('mmmmmmmmmwwwwwww').appendTo(document.body); + + var originalWidth = $tester.css('fontFamily', testFontName).width(); + var width = $tester.css('fontFamily', fontName + ',' + testFontName).width(); + + $tester.remove(); + + return originalWidth !== width; + }; + + var userAgent = navigator.userAgent; + var isMSIE = /MSIE|Trident/i.test(userAgent); + var browserVersion; + if (isMSIE) { + var matches = /MSIE (\d+[.]\d+)/.exec(userAgent); + if (matches) { + browserVersion = parseFloat(matches[1]); + } + matches = /Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(userAgent); + if (matches) { + browserVersion = parseFloat(matches[1]); + } + } + + var isEdge = /Edge\/\d+/.test(userAgent); + + var hasCodeMirror = !!window.CodeMirror; + if (!hasCodeMirror && isSupportAmd && typeof require !== 'undefined') { + if (typeof require.resolve !== 'undefined') { + try { + // If CodeMirror can't be resolved, `require.resolve` will throw an + // exception and `hasCodeMirror` won't be set to `true`. + require.resolve('codemirror'); + hasCodeMirror = true; + } catch (e) { + // Do nothing. + } + } else if (typeof eval('require').specified !== 'undefined') { + hasCodeMirror = eval('require').specified('codemirror'); + } + } + + /** + * @class core.agent + * + * Object which check platform and agent + * + * @singleton + * @alternateClassName agent + */ + var agent = { + isMac: navigator.appVersion.indexOf('Mac') > -1, + isMSIE: isMSIE, + isEdge: isEdge, + isFF: !isEdge && /firefox/i.test(userAgent), + isPhantom: /PhantomJS/i.test(userAgent), + isWebkit: !isEdge && /webkit/i.test(userAgent), + isChrome: !isEdge && /chrome/i.test(userAgent), + isSafari: !isEdge && /safari/i.test(userAgent), + browserVersion: browserVersion, + jqueryVersion: parseFloat($.fn.jquery), + isSupportAmd: isSupportAmd, + hasCodeMirror: hasCodeMirror, + isFontInstalled: isFontInstalled, + isW3CRangeSupport: !!document.createRange + }; + + + var NBSP_CHAR = String.fromCharCode(160); + var ZERO_WIDTH_NBSP_CHAR = '\ufeff'; + + /** + * @class core.dom + * + * Dom functions + * + * @singleton + * @alternateClassName dom + */ + var dom = (function () { + /** + * @method isEditable + * + * returns whether node is `note-editable` or not. + * + * @param {Node} node + * @return {Boolean} + */ + var isEditable = function (node) { + return node && $(node).hasClass('note-editable'); + }; + + /** + * @method isControlSizing + * + * returns whether node is `note-control-sizing` or not. + * + * @param {Node} node + * @return {Boolean} + */ + var isControlSizing = function (node) { + return node && $(node).hasClass('note-control-sizing'); + }; + + /** + * @method makePredByNodeName + * + * returns predicate which judge whether nodeName is same + * + * @param {String} nodeName + * @return {Function} + */ + var makePredByNodeName = function (nodeName) { + nodeName = nodeName.toUpperCase(); + return function (node) { + return node && node.nodeName.toUpperCase() === nodeName; + }; + }; + + /** + * @method isText + * + * + * + * @param {Node} node + * @return {Boolean} true if node's type is text(3) + */ + var isText = function (node) { + return node && node.nodeType === 3; + }; + + /** + * @method isElement + * + * + * + * @param {Node} node + * @return {Boolean} true if node's type is element(1) + */ + var isElement = function (node) { + return node && node.nodeType === 1; + }; + + /** + * ex) br, col, embed, hr, img, input, ... + * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements + */ + var isVoid = function (node) { + return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON/.test(node.nodeName.toUpperCase()); + }; + + var isPara = function (node) { + if (isEditable(node)) { + return false; + } + + // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph + return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase()); + }; + + var isHeading = function (node) { + return node && /^H[1-7]/.test(node.nodeName.toUpperCase()); + }; + + var isPre = makePredByNodeName('PRE'); + + var isLi = makePredByNodeName('LI'); + + var isPurePara = function (node) { + return isPara(node) && !isLi(node); + }; + + var isTable = makePredByNodeName('TABLE'); + + var isData = makePredByNodeName('DATA'); + + var isInline = function (node) { + return !isBodyContainer(node) && + !isList(node) && + !isHr(node) && + !isPara(node) && + !isTable(node) && + !isBlockquote(node) && + !isData(node); + }; + + var isList = function (node) { + return node && /^UL|^OL/.test(node.nodeName.toUpperCase()); + }; + + var isHr = makePredByNodeName('HR'); + + var isCell = function (node) { + return node && /^TD|^TH/.test(node.nodeName.toUpperCase()); + }; + + var isBlockquote = makePredByNodeName('BLOCKQUOTE'); + + var isBodyContainer = function (node) { + return isCell(node) || isBlockquote(node) || isEditable(node); + }; + + var isAnchor = makePredByNodeName('A'); + + var isParaInline = function (node) { + return isInline(node) && !!ancestor(node, isPara); + }; + + var isBodyInline = function (node) { + return isInline(node) && !ancestor(node, isPara); + }; + + var isBody = makePredByNodeName('BODY'); + + /** + * returns whether nodeB is closest sibling of nodeA + * + * @param {Node} nodeA + * @param {Node} nodeB + * @return {Boolean} + */ + var isClosestSibling = function (nodeA, nodeB) { + return nodeA.nextSibling === nodeB || + nodeA.previousSibling === nodeB; + }; + + /** + * returns array of closest siblings with node + * + * @param {Node} node + * @param {function} [pred] - predicate function + * @return {Node[]} + */ + var withClosestSiblings = function (node, pred) { + pred = pred || func.ok; + + var siblings = []; + if (node.previousSibling && pred(node.previousSibling)) { + siblings.push(node.previousSibling); + } + siblings.push(node); + if (node.nextSibling && pred(node.nextSibling)) { + siblings.push(node.nextSibling); + } + return siblings; + }; + + /** + * blank HTML for cursor position + * - [workaround] old IE only works with + * - [workaround] IE11 and other browser works with bogus br + */ + var blankHTML = agent.isMSIE && agent.browserVersion < 11 ? ' ' : '<br>'; + + /** + * @method nodeLength + * + * returns #text's text size or element's childNodes size + * + * @param {Node} node + */ + var nodeLength = function (node) { + if (isText(node)) { + return node.nodeValue.length; + } + + if (node) { + return node.childNodes.length; + } + + return 0; + + }; + + /** + * returns whether node is empty or not. + * + * @param {Node} node + * @return {Boolean} + */ + var isEmpty = function (node) { + var len = nodeLength(node); + + if (len === 0) { + return true; + } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) { + // ex) <p><br></p>, <span><br></span> + return true; + } else if (list.all(node.childNodes, isText) && node.innerHTML === '') { + // ex) <p></p>, <span></span> + return true; + } + + return false; + }; + + /** + * padding blankHTML if node is empty (for cursor position) + */ + var paddingBlankHTML = function (node) { + if (!isVoid(node) && !nodeLength(node)) { + node.innerHTML = blankHTML; + } + }; + + /** + * find nearest ancestor predicate hit + * + * @param {Node} node + * @param {Function} pred - predicate function + */ + var ancestor = function (node, pred) { + while (node) { + if (pred(node)) { return node; } + if (isEditable(node)) { break; } + + node = node.parentNode; + } + return null; + }; + + /** + * find nearest ancestor only single child blood line and predicate hit + * + * @param {Node} node + * @param {Function} pred - predicate function + */ + var singleChildAncestor = function (node, pred) { + node = node.parentNode; + + while (node) { + if (nodeLength(node) !== 1) { break; } + if (pred(node)) { return node; } + if (isEditable(node)) { break; } + + node = node.parentNode; + } + return null; + }; + + /** + * returns new array of ancestor nodes (until predicate hit). + * + * @param {Node} node + * @param {Function} [optional] pred - predicate function + */ + var listAncestor = function (node, pred) { + pred = pred || func.fail; + + var ancestors = []; + ancestor(node, function (el) { + if (!isEditable(el)) { + ancestors.push(el); + } + + return pred(el); + }); + return ancestors; + }; + + /** + * find farthest ancestor predicate hit + */ + var lastAncestor = function (node, pred) { + var ancestors = listAncestor(node); + return list.last(ancestors.filter(pred)); + }; + + /** + * returns common ancestor node between two nodes. + * + * @param {Node} nodeA + * @param {Node} nodeB + */ + var commonAncestor = function (nodeA, nodeB) { + var ancestors = listAncestor(nodeA); + for (var n = nodeB; n; n = n.parentNode) { + if ($.inArray(n, ancestors) > -1) { return n; } + } + return null; // difference document area + }; + + /** + * listing all previous siblings (until predicate hit). + * + * @param {Node} node + * @param {Function} [optional] pred - predicate function + */ + var listPrev = function (node, pred) { + pred = pred || func.fail; + + var nodes = []; + while (node) { + if (pred(node)) { break; } + nodes.push(node); + node = node.previousSibling; + } + return nodes; + }; + + /** + * listing next siblings (until predicate hit). + * + * @param {Node} node + * @param {Function} [pred] - predicate function + */ + var listNext = function (node, pred) { + pred = pred || func.fail; + + var nodes = []; + while (node) { + if (pred(node)) { break; } + nodes.push(node); + node = node.nextSibling; + } + return nodes; + }; + + /** + * listing descendant nodes + * + * @param {Node} node + * @param {Function} [pred] - predicate function + */ + var listDescendant = function (node, pred) { + var descendants = []; + pred = pred || func.ok; + + // start DFS(depth first search) with node + (function fnWalk(current) { + if (node !== current && pred(current)) { + descendants.push(current); + } + for (var idx = 0, len = current.childNodes.length; idx < len; idx++) { + fnWalk(current.childNodes[idx]); + } + })(node); + + return descendants; + }; + + /** + * wrap node with new tag. + * + * @param {Node} node + * @param {Node} tagName of wrapper + * @return {Node} - wrapper + */ + var wrap = function (node, wrapperName) { + var parent = node.parentNode; + var wrapper = $('<' + wrapperName + '>')[0]; + + parent.insertBefore(wrapper, node); + wrapper.appendChild(node); + + return wrapper; + }; + + /** + * insert node after preceding + * + * @param {Node} node + * @param {Node} preceding - predicate function + */ + var insertAfter = function (node, preceding) { + var next = preceding.nextSibling, parent = preceding.parentNode; + if (next) { + parent.insertBefore(node, next); + } else { + parent.appendChild(node); + } + return node; + }; + + /** + * append elements. + * + * @param {Node} node + * @param {Collection} aChild + */ + var appendChildNodes = function (node, aChild) { + $.each(aChild, function (idx, child) { + node.appendChild(child); + }); + return node; + }; + + /** + * returns whether boundaryPoint is left edge or not. + * + * @param {BoundaryPoint} point + * @return {Boolean} + */ + var isLeftEdgePoint = function (point) { + return point.offset === 0; + }; + + /** + * returns whether boundaryPoint is right edge or not. + * + * @param {BoundaryPoint} point + * @return {Boolean} + */ + var isRightEdgePoint = function (point) { + return point.offset === nodeLength(point.node); + }; + + /** + * returns whether boundaryPoint is edge or not. + * + * @param {BoundaryPoint} point + * @return {Boolean} + */ + var isEdgePoint = function (point) { + return isLeftEdgePoint(point) || isRightEdgePoint(point); + }; + + /** + * returns whether node is left edge of ancestor or not. + * + * @param {Node} node + * @param {Node} ancestor + * @return {Boolean} + */ + var isLeftEdgeOf = function (node, ancestor) { + while (node && node !== ancestor) { + if (position(node) !== 0) { + return false; + } + node = node.parentNode; + } + + return true; + }; + + /** + * returns whether node is right edge of ancestor or not. + * + * @param {Node} node + * @param {Node} ancestor + * @return {Boolean} + */ + var isRightEdgeOf = function (node, ancestor) { + if (!ancestor) { + return false; + } + while (node && node !== ancestor) { + if (position(node) !== nodeLength(node.parentNode) - 1) { + return false; + } + node = node.parentNode; + } + + return true; + }; + + /** + * returns whether point is left edge of ancestor or not. + * @param {BoundaryPoint} point + * @param {Node} ancestor + * @return {Boolean} + */ + var isLeftEdgePointOf = function (point, ancestor) { + return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor); + }; + + /** + * returns whether point is right edge of ancestor or not. + * @param {BoundaryPoint} point + * @param {Node} ancestor + * @return {Boolean} + */ + var isRightEdgePointOf = function (point, ancestor) { + return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor); + }; + + /** + * returns offset from parent. + * + * @param {Node} node + */ + var position = function (node) { + var offset = 0; + while ((node = node.previousSibling)) { + offset += 1; + } + return offset; + }; + + var hasChildren = function (node) { + return !!(node && node.childNodes && node.childNodes.length); + }; + + /** + * returns previous boundaryPoint + * + * @param {BoundaryPoint} point + * @param {Boolean} isSkipInnerOffset + * @return {BoundaryPoint} + */ + var prevPoint = function (point, isSkipInnerOffset) { + var node, offset; + + if (point.offset === 0) { + if (isEditable(point.node)) { + return null; + } + + node = point.node.parentNode; + offset = position(point.node); + } else if (hasChildren(point.node)) { + node = point.node.childNodes[point.offset - 1]; + offset = nodeLength(node); + } else { + node = point.node; + offset = isSkipInnerOffset ? 0 : point.offset - 1; + } + + return { + node: node, + offset: offset + }; + }; + + /** + * returns next boundaryPoint + * + * @param {BoundaryPoint} point + * @param {Boolean} isSkipInnerOffset + * @return {BoundaryPoint} + */ + var nextPoint = function (point, isSkipInnerOffset) { + var node, offset; + + if (nodeLength(point.node) === point.offset) { + if (isEditable(point.node)) { + return null; + } + + node = point.node.parentNode; + offset = position(point.node) + 1; + } else if (hasChildren(point.node)) { + node = point.node.childNodes[point.offset]; + offset = 0; + } else { + node = point.node; + offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1; + } + + return { + node: node, + offset: offset + }; + }; + + /** + * returns whether pointA and pointB is same or not. + * + * @param {BoundaryPoint} pointA + * @param {BoundaryPoint} pointB + * @return {Boolean} + */ + var isSamePoint = function (pointA, pointB) { + return pointA.node === pointB.node && pointA.offset === pointB.offset; + }; + + /** + * returns whether point is visible (can set cursor) or not. + * + * @param {BoundaryPoint} point + * @return {Boolean} + */ + var isVisiblePoint = function (point) { + if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) { + return true; + } + + var leftNode = point.node.childNodes[point.offset - 1]; + var rightNode = point.node.childNodes[point.offset]; + if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) { + return true; + } + + return false; + }; + + /** + * @method prevPointUtil + * + * @param {BoundaryPoint} point + * @param {Function} pred + * @return {BoundaryPoint} + */ + var prevPointUntil = function (point, pred) { + while (point) { + if (pred(point)) { + return point; + } + + point = prevPoint(point); + } + + return null; + }; + + /** + * @method nextPointUntil + * + * @param {BoundaryPoint} point + * @param {Function} pred + * @return {BoundaryPoint} + */ + var nextPointUntil = function (point, pred) { + while (point) { + if (pred(point)) { + return point; + } + + point = nextPoint(point); + } + + return null; + }; + + /** + * returns whether point has character or not. + * + * @param {Point} point + * @return {Boolean} + */ + var isCharPoint = function (point) { + if (!isText(point.node)) { + return false; + } + + var ch = point.node.nodeValue.charAt(point.offset - 1); + return ch && (ch !== ' ' && ch !== NBSP_CHAR); + }; + + /** + * @method walkPoint + * + * @param {BoundaryPoint} startPoint + * @param {BoundaryPoint} endPoint + * @param {Function} handler + * @param {Boolean} isSkipInnerOffset + */ + var walkPoint = function (startPoint, endPoint, handler, isSkipInnerOffset) { + var point = startPoint; + + while (point) { + handler(point); + + if (isSamePoint(point, endPoint)) { + break; + } + + var isSkipOffset = isSkipInnerOffset && + startPoint.node !== point.node && + endPoint.node !== point.node; + point = nextPoint(point, isSkipOffset); + } + }; + + /** + * @method makeOffsetPath + * + * return offsetPath(array of offset) from ancestor + * + * @param {Node} ancestor - ancestor node + * @param {Node} node + */ + var makeOffsetPath = function (ancestor, node) { + var ancestors = listAncestor(node, func.eq(ancestor)); + return ancestors.map(position).reverse(); + }; + + /** + * @method fromOffsetPath + * + * return element from offsetPath(array of offset) + * + * @param {Node} ancestor - ancestor node + * @param {array} offsets - offsetPath + */ + var fromOffsetPath = function (ancestor, offsets) { + var current = ancestor; + for (var i = 0, len = offsets.length; i < len; i++) { + if (current.childNodes.length <= offsets[i]) { + current = current.childNodes[current.childNodes.length - 1]; + } else { + current = current.childNodes[offsets[i]]; + } + } + return current; + }; + + /** + * @method splitNode + * + * split element or #text + * + * @param {BoundaryPoint} point + * @param {Object} [options] + * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false + * @param {Boolean} [options.isNotSplitEdgePoint] - default: false + * @return {Node} right node of boundaryPoint + */ + var splitNode = function (point, options) { + var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML; + var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint; + + // edge case + if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) { + if (isLeftEdgePoint(point)) { + return point.node; + } else if (isRightEdgePoint(point)) { + return point.node.nextSibling; + } + } + + // split #text + if (isText(point.node)) { + return point.node.splitText(point.offset); + } else { + var childNode = point.node.childNodes[point.offset]; + var clone = insertAfter(point.node.cloneNode(false), point.node); + appendChildNodes(clone, listNext(childNode)); + + if (!isSkipPaddingBlankHTML) { + paddingBlankHTML(point.node); + paddingBlankHTML(clone); + } + + return clone; + } + }; + + /** + * @method splitTree + * + * split tree by point + * + * @param {Node} root - split root + * @param {BoundaryPoint} point + * @param {Object} [options] + * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false + * @param {Boolean} [options.isNotSplitEdgePoint] - default: false + * @return {Node} right node of boundaryPoint + */ + var splitTree = function (root, point, options) { + // ex) [#text, <span>, <p>] + var ancestors = listAncestor(point.node, func.eq(root)); + + if (!ancestors.length) { + return null; + } else if (ancestors.length === 1) { + return splitNode(point, options); + } + + return ancestors.reduce(function (node, parent) { + if (node === point.node) { + node = splitNode(point, options); + } + + return splitNode({ + node: parent, + offset: node ? dom.position(node) : nodeLength(parent) + }, options); + }); + }; + + /** + * split point + * + * @param {Point} point + * @param {Boolean} isInline + * @return {Object} + */ + var splitPoint = function (point, isInline) { + // find splitRoot, container + // - inline: splitRoot is a child of paragraph + // - block: splitRoot is a child of bodyContainer + var pred = isInline ? isPara : isBodyContainer; + var ancestors = listAncestor(point.node, pred); + var topAncestor = list.last(ancestors) || point.node; + + var splitRoot, container; + if (pred(topAncestor)) { + splitRoot = ancestors[ancestors.length - 2]; + container = topAncestor; + } else { + splitRoot = topAncestor; + container = splitRoot.parentNode; + } + + // if splitRoot is exists, split with splitTree + var pivot = splitRoot && splitTree(splitRoot, point, { + isSkipPaddingBlankHTML: isInline, + isNotSplitEdgePoint: isInline + }); + + // if container is point.node, find pivot with point.offset + if (!pivot && container === point.node) { + pivot = point.node.childNodes[point.offset]; + } + + return { + rightNode: pivot, + container: container + }; + }; + + var create = function (nodeName) { + return document.createElement(nodeName); + }; + + var createText = function (text) { + return document.createTextNode(text); + }; + + /** + * @method remove + * + * remove node, (isRemoveChild: remove child or not) + * + * @param {Node} node + * @param {Boolean} isRemoveChild + */ + var remove = function (node, isRemoveChild) { + if (!node || !node.parentNode) { return; } + if (node.removeNode) { return node.removeNode(isRemoveChild); } + + var parent = node.parentNode; + if (!isRemoveChild) { + var nodes = []; + var i, len; + for (i = 0, len = node.childNodes.length; i < len; i++) { + nodes.push(node.childNodes[i]); + } + + for (i = 0, len = nodes.length; i < len; i++) { + parent.insertBefore(nodes[i], node); + } + } + + parent.removeChild(node); + }; + + /** + * @method removeWhile + * + * @param {Node} node + * @param {Function} pred + */ + var removeWhile = function (node, pred) { + while (node) { + if (isEditable(node) || !pred(node)) { + break; + } + + var parent = node.parentNode; + remove(node); + node = parent; + } + }; + + /** + * @method replace + * + * replace node with provided nodeName + * + * @param {Node} node + * @param {String} nodeName + * @return {Node} - new node + */ + var replace = function (node, nodeName) { + if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) { + return node; + } + + var newNode = create(nodeName); + + if (node.style.cssText) { + newNode.style.cssText = node.style.cssText; + } + + appendChildNodes(newNode, list.from(node.childNodes)); + insertAfter(newNode, node); + remove(node); + + return newNode; + }; + + var isTextarea = makePredByNodeName('TEXTAREA'); + + /** + * @param {jQuery} $node + * @param {Boolean} [stripLinebreaks] - default: false + */ + var value = function ($node, stripLinebreaks) { + var val = isTextarea($node[0]) ? $node.val() : $node.html(); + if (stripLinebreaks) { + return val.replace(/[\n\r]/g, ''); + } + return val; + }; + + /** + * @method html + * + * get the HTML contents of node + * + * @param {jQuery} $node + * @param {Boolean} [isNewlineOnBlock] + */ + var html = function ($node, isNewlineOnBlock) { + var markup = value($node); + + if (isNewlineOnBlock) { + var regexTag = /<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g; + markup = markup.replace(regexTag, function (match, endSlash, name) { + name = name.toUpperCase(); + var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && + !!endSlash; + var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name); + + return match + ((isEndOfInlineContainer || isBlockNode) ? '\n' : ''); + }); + markup = $.trim(markup); + } + + return markup; + }; + + var posFromPlaceholder = function (placeholder) { + var $placeholder = $(placeholder); + var pos = $placeholder.offset(); + var height = $placeholder.outerHeight(true); // include margin + + return { + left: pos.left, + top: pos.top + height + }; + }; + + var attachEvents = function ($node, events) { + Object.keys(events).forEach(function (key) { + $node.on(key, events[key]); + }); + }; + + var detachEvents = function ($node, events) { + Object.keys(events).forEach(function (key) { + $node.off(key, events[key]); + }); + }; + + return { + /** @property {String} NBSP_CHAR */ + NBSP_CHAR: NBSP_CHAR, + /** @property {String} ZERO_WIDTH_NBSP_CHAR */ + ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR, + /** @property {String} blank */ + blank: blankHTML, + /** @property {String} emptyPara */ + emptyPara: '<p>' + blankHTML + '</p>', + makePredByNodeName: makePredByNodeName, + isEditable: isEditable, + isControlSizing: isControlSizing, + isText: isText, + isElement: isElement, + isVoid: isVoid, + isPara: isPara, + isPurePara: isPurePara, + isHeading: isHeading, + isInline: isInline, + isBlock: func.not(isInline), + isBodyInline: isBodyInline, + isBody: isBody, + isParaInline: isParaInline, + isPre: isPre, + isList: isList, + isTable: isTable, + isData: isData, + isCell: isCell, + isBlockquote: isBlockquote, + isBodyContainer: isBodyContainer, + isAnchor: isAnchor, + isDiv: makePredByNodeName('DIV'), + isLi: isLi, + isBR: makePredByNodeName('BR'), + isSpan: makePredByNodeName('SPAN'), + isB: makePredByNodeName('B'), + isU: makePredByNodeName('U'), + isS: makePredByNodeName('S'), + isI: makePredByNodeName('I'), + isImg: makePredByNodeName('IMG'), + isTextarea: isTextarea, + isEmpty: isEmpty, + isEmptyAnchor: func.and(isAnchor, isEmpty), + isClosestSibling: isClosestSibling, + withClosestSiblings: withClosestSiblings, + nodeLength: nodeLength, + isLeftEdgePoint: isLeftEdgePoint, + isRightEdgePoint: isRightEdgePoint, + isEdgePoint: isEdgePoint, + isLeftEdgeOf: isLeftEdgeOf, + isRightEdgeOf: isRightEdgeOf, + isLeftEdgePointOf: isLeftEdgePointOf, + isRightEdgePointOf: isRightEdgePointOf, + prevPoint: prevPoint, + nextPoint: nextPoint, + isSamePoint: isSamePoint, + isVisiblePoint: isVisiblePoint, + prevPointUntil: prevPointUntil, + nextPointUntil: nextPointUntil, + isCharPoint: isCharPoint, + walkPoint: walkPoint, + ancestor: ancestor, + singleChildAncestor: singleChildAncestor, + listAncestor: listAncestor, + lastAncestor: lastAncestor, + listNext: listNext, + listPrev: listPrev, + listDescendant: listDescendant, + commonAncestor: commonAncestor, + wrap: wrap, + insertAfter: insertAfter, + appendChildNodes: appendChildNodes, + position: position, + hasChildren: hasChildren, + makeOffsetPath: makeOffsetPath, + fromOffsetPath: fromOffsetPath, + splitTree: splitTree, + splitPoint: splitPoint, + create: create, + createText: createText, + remove: remove, + removeWhile: removeWhile, + replace: replace, + html: html, + value: value, + posFromPlaceholder: posFromPlaceholder, + attachEvents: attachEvents, + detachEvents: detachEvents + }; + })(); + + /** + * @param {jQuery} $note + * @param {Object} options + * @return {Context} + */ + var Context = function ($note, options) { + var self = this; + + var ui = $.summernote.ui; + this.memos = {}; + this.modules = {}; + this.layoutInfo = {}; + this.options = options; + + /** + * create layout and initialize modules and other resources + */ + this.initialize = function () { + this.layoutInfo = ui.createLayout($note, options); + this._initialize(); + $note.hide(); + return this; + }; + + /** + * destroy modules and other resources and remove layout + */ + this.destroy = function () { + this._destroy(); + $note.removeData('summernote'); + ui.removeLayout($note, this.layoutInfo); + }; + + /** + * destory modules and other resources and initialize it again + */ + this.reset = function () { + var disabled = self.isDisabled(); + this.code(dom.emptyPara); + this._destroy(); + this._initialize(); + + if (disabled) { + self.disable(); + } + }; + + this._initialize = function () { + // add optional buttons + var buttons = $.extend({}, this.options.buttons); + Object.keys(buttons).forEach(function (key) { + self.memo('button.' + key, buttons[key]); + }); + + var modules = $.extend({}, this.options.modules, $.summernote.plugins || {}); + + // add and initialize modules + Object.keys(modules).forEach(function (key) { + self.module(key, modules[key], true); + }); + + Object.keys(this.modules).forEach(function (key) { + self.initializeModule(key); + }); + }; + + this._destroy = function () { + // destroy modules with reversed order + Object.keys(this.modules).reverse().forEach(function (key) { + self.removeModule(key); + }); + + Object.keys(this.memos).forEach(function (key) { + self.removeMemo(key); + }); + }; + + this.code = function (html) { + var isActivated = this.invoke('codeview.isActivated'); + + if (html === undefined) { + this.invoke('codeview.sync'); + return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html(); + } else { + if (isActivated) { + this.layoutInfo.codable.val(html); + } else { + this.layoutInfo.editable.html(html); + } + $note.val(html); + this.triggerEvent('change', html); + } + }; + + this.isDisabled = function () { + return this.layoutInfo.editable.attr('contenteditable') === 'false'; + }; + + this.enable = function () { + this.layoutInfo.editable.attr('contenteditable', true); + this.invoke('toolbar.activate', true); + }; + + this.disable = function () { + // close codeview if codeview is opend + if (this.invoke('codeview.isActivated')) { + this.invoke('codeview.deactivate'); + } + this.layoutInfo.editable.attr('contenteditable', false); + this.invoke('toolbar.deactivate', true); + }; + + this.triggerEvent = function () { + var namespace = list.head(arguments); + var args = list.tail(list.from(arguments)); + + var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')]; + if (callback) { + callback.apply($note[0], args); + } + $note.trigger('summernote.' + namespace, args); + }; + + this.initializeModule = function (key) { + var module = this.modules[key]; + module.shouldInitialize = module.shouldInitialize || func.ok; + if (!module.shouldInitialize()) { + return; + } + + // initialize module + if (module.initialize) { + module.initialize(); + } + + // attach events + if (module.events) { + dom.attachEvents($note, module.events); + } + }; + + this.module = function (key, ModuleClass, withoutIntialize) { + if (arguments.length === 1) { + return this.modules[key]; + } + + this.modules[key] = new ModuleClass(this); + + if (!withoutIntialize) { + this.initializeModule(key); + } + }; + + this.removeModule = function (key) { + var module = this.modules[key]; + if (module.shouldInitialize()) { + if (module.events) { + dom.detachEvents($note, module.events); + } + + if (module.destroy) { + module.destroy(); + } + } + + delete this.modules[key]; + }; + + this.memo = function (key, obj) { + if (arguments.length === 1) { + return this.memos[key]; + } + this.memos[key] = obj; + }; + + this.removeMemo = function (key) { + if (this.memos[key] && this.memos[key].destroy) { + this.memos[key].destroy(); + } + + delete this.memos[key]; + }; + + this.createInvokeHandler = function (namespace, value) { + return function (event) { + event.preventDefault(); + self.invoke(namespace, value || $(event.target).closest('[data-value]').data('value')); + }; + }; + + this.invoke = function () { + var namespace = list.head(arguments); + var args = list.tail(list.from(arguments)); + + var splits = namespace.split('.'); + var hasSeparator = splits.length > 1; + var moduleName = hasSeparator && list.head(splits); + var methodName = hasSeparator ? list.last(splits) : list.head(splits); + + var module = this.modules[moduleName || 'editor']; + if (!moduleName && this[methodName]) { + return this[methodName].apply(this, args); + } else if (module && module[methodName] && module.shouldInitialize()) { + return module[methodName].apply(module, args); + } + }; + + return this.initialize(); + }; + + $.fn.extend({ + /** + * Summernote API + * + * @param {Object|String} + * @return {this} + */ + summernote: function () { + var type = $.type(list.head(arguments)); + var isExternalAPICalled = type === 'string'; + var hasInitOptions = type === 'object'; + + var options = hasInitOptions ? list.head(arguments) : {}; + + options = $.extend({}, $.summernote.options, options); + options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); + options.icons = $.extend(true, {}, $.summernote.options.icons, options.icons); + + this.each(function (idx, note) { + var $note = $(note); + if (!$note.data('summernote')) { + var context = new Context($note, options); + $note.data('summernote', context); + $note.data('summernote').triggerEvent('init', context.layoutInfo); + } + }); + + var $note = this.first(); + if ($note.length) { + var context = $note.data('summernote'); + if (isExternalAPICalled) { + return context.invoke.apply(context, list.from(arguments)); + } else if (options.focus) { + context.invoke('editor.focus'); + } + } + + return this; + } + }); + + + var Renderer = function (markup, children, options, callback) { + this.render = function ($parent) { + var $node = $(markup); + + if (options && options.contents) { + $node.html(options.contents); + } + + if (options && options.className) { + $node.addClass(options.className); + } + + if (options && options.data) { + $.each(options.data, function (k, v) { + $node.attr('data-' + k, v); + }); + } + + if (options && options.click) { + $node.on('click', options.click); + } + + if (children) { + var $container = $node.find('.note-children-container'); + children.forEach(function (child) { + child.render($container.length ? $container : $node); + }); + } + + if (callback) { + callback($node, options); + } + + if (options && options.callback) { + options.callback($node); + } + + if ($parent) { + $parent.append($node); + } + + return $node; + }; + }; + + var renderer = { + create: function (markup, callback) { + return function () { + var children = $.isArray(arguments[0]) ? arguments[0] : []; + var options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0]; + if (options && options.children) { + children = options.children; + } + return new Renderer(markup, children, options, callback); + }; + } + }; + + var editor = renderer.create('<div class="note-editor note-frame panel panel-default"/>'); + var toolbar = renderer.create('<div class="note-toolbar panel-heading"/>'); + var editingArea = renderer.create('<div class="note-editing-area"/>'); + var codable = renderer.create('<textarea class="note-codable"/>'); + var editable = renderer.create('<div class="note-editable panel-body" contentEditable="true"/>'); + var statusbar = renderer.create([ + '<div class="note-statusbar">', + ' <div class="note-resizebar">', + ' <div class="note-icon-bar"/>', + ' <div class="note-icon-bar"/>', + ' <div class="note-icon-bar"/>', + ' </div>', + '</div>' + ].join('')); + + var airEditor = renderer.create('<div class="note-editor"/>'); + var airEditable = renderer.create('<div class="note-editable" contentEditable="true"/>'); + + var buttonGroup = renderer.create('<div class="note-btn-group btn-group">'); + var button = renderer.create('<button type="button" class="note-btn btn btn-default btn-sm" tabindex="-1">', function ($node, options) { + if (options && options.tooltip) { + $node.attr({ + title: options.tooltip + }).tooltip({ + container: 'body', + trigger: 'hover', + placement: 'bottom' + }); + } + }); + + var dropdown = renderer.create('<div class="dropdown-menu">', function ($node, options) { + var markup = $.isArray(options.items) ? options.items.map(function (item) { + var value = (typeof item === 'string') ? item : (item.value || ''); + var content = options.template ? options.template(item) : item; + return '<li><a href="#" data-value="' + value + '">' + content + '</a></li>'; + }).join('') : options.items; + + $node.html(markup); + }); + + var dropdownCheck = renderer.create('<div class="dropdown-menu note-check">', function ($node, options) { + var markup = $.isArray(options.items) ? options.items.map(function (item) { + var value = (typeof item === 'string') ? item : (item.value || ''); + var content = options.template ? options.template(item) : item; + return '<li><a href="#" data-value="' + value + '">' + icon(options.checkClassName) + ' ' + content + '</a></li>'; + }).join('') : options.items; + $node.html(markup); + }); + + var palette = renderer.create('<div class="note-color-palette"/>', function ($node, options) { + var contents = []; + for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) { + var eventName = options.eventName; + var colors = options.colors[row]; + var buttons = []; + for (var col = 0, colSize = colors.length; col < colSize; col++) { + var color = colors[col]; + buttons.push([ + '<button type="button" class="note-color-btn"', + 'style="background-color:', color, '" ', + 'data-event="', eventName, '" ', + 'data-value="', color, '" ', + 'title="', color, '" ', + 'data-toggle="button" tabindex="-1"></button>' + ].join('')); + } + contents.push('<div class="note-color-row">' + buttons.join('') + '</div>'); + } + $node.html(contents.join('')); + + $node.find('.note-color-btn').tooltip({ + container: 'body', + trigger: 'hover', + placement: 'bottom' + }); + }); + + var dialog = renderer.create('<div class="modal" aria-hidden="false" tabindex="-1"/>', function ($node, options) { + if (options.fade) { + $node.addClass('fade'); + } + $node.html([ + '<div class="modal-dialog">', + ' <div class="modal-content">', + (options.title ? + ' <div class="modal-header">' + + ' <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>' + + ' <h4 class="modal-title">' + options.title + '</h4>' + + ' </div>' : '' + ), + ' <div class="modal-body">' + options.body + '</div>', + (options.footer ? + ' <div class="modal-footer">' + options.footer + '</div>' : '' + ), + ' </div>', + '</div>' + ].join('')); + }); + + var popover = renderer.create([ + '<div class="note-popover popover in">', + ' <div class="arrow"/>', + ' <div class="popover-content note-children-container"/>', + '</div>' + ].join(''), function ($node, options) { + var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom'; + + $node.addClass(direction); + + if (options.hideArrow) { + $node.find('.arrow').hide(); + } + }); + + var icon = function (iconClassName, tagName) { + tagName = tagName || 'i'; + return '<' + tagName + ' class="' + iconClassName + '"/>'; + }; + + var ui = { + editor: editor, + toolbar: toolbar, + editingArea: editingArea, + codable: codable, + editable: editable, + statusbar: statusbar, + airEditor: airEditor, + airEditable: airEditable, + buttonGroup: buttonGroup, + button: button, + dropdown: dropdown, + dropdownCheck: dropdownCheck, + palette: palette, + dialog: dialog, + popover: popover, + icon: icon, + + toggleBtn: function ($btn, isEnable) { + $btn.toggleClass('disabled', !isEnable); + $btn.attr('disabled', !isEnable); + }, + + toggleBtnActive: function ($btn, isActive) { + $btn.toggleClass('active', isActive); + }, + + onDialogShown: function ($dialog, handler) { + $dialog.one('shown.bs.modal', handler); + }, + + onDialogHidden: function ($dialog, handler) { + $dialog.one('hidden.bs.modal', handler); + }, + + showDialog: function ($dialog) { + $dialog.modal('show'); + }, + + hideDialog: function ($dialog) { + $dialog.modal('hide'); + }, + + createLayout: function ($note, options) { + var $editor = (options.airMode ? ui.airEditor([ + ui.editingArea([ + ui.airEditable() + ]) + ]) : ui.editor([ + ui.toolbar(), + ui.editingArea([ + ui.codable(), + ui.editable() + ]), + ui.statusbar() + ])).render(); + + $editor.insertAfter($note); + + return { + note: $note, + editor: $editor, + toolbar: $editor.find('.note-toolbar'), + editingArea: $editor.find('.note-editing-area'), + editable: $editor.find('.note-editable'), + codable: $editor.find('.note-codable'), + statusbar: $editor.find('.note-statusbar') + }; + }, + + removeLayout: function ($note, layoutInfo) { + $note.html(layoutInfo.editable.html()); + layoutInfo.editor.remove(); + $note.show(); + } + }; + + $.summernote = $.summernote || { + lang: {} + }; + + $.extend($.summernote.lang, { + 'en-US': { + font: { + bold: 'Bold', + italic: 'Italic', + underline: 'Underline', + clear: 'Remove Font Style', + height: 'Line Height', + name: 'Font Family', + strikethrough: 'Strikethrough', + subscript: 'Subscript', + superscript: 'Superscript', + size: 'Font Size' + }, + image: { + image: 'Picture', + insert: 'Insert Image', + resizeFull: 'Resize Full', + resizeHalf: 'Resize Half', + resizeQuarter: 'Resize Quarter', + floatLeft: 'Float Left', + floatRight: 'Float Right', + floatNone: 'Float None', + shapeRounded: 'Shape: Rounded', + shapeCircle: 'Shape: Circle', + shapeThumbnail: 'Shape: Thumbnail', + shapeNone: 'Shape: None', + dragImageHere: 'Drag image or text here', + dropImage: 'Drop image or Text', + selectFromFiles: 'Select from files', + maximumFileSize: 'Maximum file size', + maximumFileSizeError: 'Maximum file size exceeded.', + url: 'Image URL', + remove: 'Remove Image' + }, + video: { + video: 'Video', + videoLink: 'Video Link', + insert: 'Insert Video', + url: 'Video URL?', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' + }, + link: { + link: 'Link', + insert: 'Insert Link', + unlink: 'Unlink', + edit: 'Edit', + textToDisplay: 'Text to display', + url: 'To what URL should this link go?', + openInNewWindow: 'Open in new window' + }, + table: { + table: 'Table' + }, + hr: { + insert: 'Insert Horizontal Rule' + }, + style: { + style: 'Style', + normal: 'Normal', + blockquote: 'Quote', + pre: 'Code', + h1: 'Header 1', + h2: 'Header 2', + h3: 'Header 3', + h4: 'Header 4', + h5: 'Header 5', + h6: 'Header 6' + }, + lists: { + unordered: 'Unordered list', + ordered: 'Ordered list' + }, + options: { + help: 'Help', + fullscreen: 'Full Screen', + codeview: 'Code View' + }, + paragraph: { + paragraph: 'Paragraph', + outdent: 'Outdent', + indent: 'Indent', + left: 'Align left', + center: 'Align center', + right: 'Align right', + justify: 'Justify full' + }, + color: { + recent: 'Recent Color', + more: 'More Color', + background: 'Background Color', + foreground: 'Foreground Color', + transparent: 'Transparent', + setTransparent: 'Set transparent', + reset: 'Reset', + resetToDefault: 'Reset to default' + }, + shortcut: { + shortcuts: 'Keyboard shortcuts', + close: 'Close', + textFormatting: 'Text formatting', + action: 'Action', + paragraphFormatting: 'Paragraph formatting', + documentStyle: 'Document Style', + extraKeys: 'Extra keys' + }, + help: { + 'insertParagraph': 'Insert Paragraph', + 'undo': 'Undoes the last command', + 'redo': 'Redoes the last command', + 'tab': 'Tab', + 'untab': 'Untab', + 'bold': 'Set a bold style', + 'italic': 'Set a italic style', + 'underline': 'Set a underline style', + 'strikethrough': 'Set a strikethrough style', + 'removeFormat': 'Clean a style', + 'justifyLeft': 'Set left align', + 'justifyCenter': 'Set center align', + 'justifyRight': 'Set right align', + 'justifyFull': 'Set full align', + 'insertUnorderedList': 'Toggle unordered list', + 'insertOrderedList': 'Toggle ordered list', + 'outdent': 'Outdent on current paragraph', + 'indent': 'Indent on current paragraph', + 'formatPara': 'Change current block\'s format as a paragraph(P tag)', + 'formatH1': 'Change current block\'s format as H1', + 'formatH2': 'Change current block\'s format as H2', + 'formatH3': 'Change current block\'s format as H3', + 'formatH4': 'Change current block\'s format as H4', + 'formatH5': 'Change current block\'s format as H5', + 'formatH6': 'Change current block\'s format as H6', + 'insertHorizontalRule': 'Insert horizontal rule', + 'linkDialog.show': 'Show Link Dialog' + }, + history: { + undo: 'Undo', + redo: 'Redo' + }, + specialChar: { + specialChar: 'SPECIAL CHARACTERS', + select: 'Select Special characters' + } + } + }); + + + /** + * @class core.key + * + * Object for keycodes. + * + * @singleton + * @alternateClassName key + */ + var key = (function () { + var keyMap = { + 'BACKSPACE': 8, + 'TAB': 9, + 'ENTER': 13, + 'SPACE': 32, + + // Arrow + 'LEFT': 37, + 'UP': 38, + 'RIGHT': 39, + 'DOWN': 40, + + // Number: 0-9 + 'NUM0': 48, + 'NUM1': 49, + 'NUM2': 50, + 'NUM3': 51, + 'NUM4': 52, + 'NUM5': 53, + 'NUM6': 54, + 'NUM7': 55, + 'NUM8': 56, + + // Alphabet: a-z + 'B': 66, + 'E': 69, + 'I': 73, + 'J': 74, + 'K': 75, + 'L': 76, + 'R': 82, + 'S': 83, + 'U': 85, + 'V': 86, + 'Y': 89, + 'Z': 90, + + 'SLASH': 191, + 'LEFTBRACKET': 219, + 'BACKSLASH': 220, + 'RIGHTBRACKET': 221 + }; + + return { + /** + * @method isEdit + * + * @param {Number} keyCode + * @return {Boolean} + */ + isEdit: function (keyCode) { + return list.contains([ + keyMap.BACKSPACE, + keyMap.TAB, + keyMap.ENTER, + keyMap.SPACE + ], keyCode); + }, + /** + * @method isMove + * + * @param {Number} keyCode + * @return {Boolean} + */ + isMove: function (keyCode) { + return list.contains([ + keyMap.LEFT, + keyMap.UP, + keyMap.RIGHT, + keyMap.DOWN + ], keyCode); + }, + /** + * @property {Object} nameFromCode + * @property {String} nameFromCode.8 "BACKSPACE" + */ + nameFromCode: func.invertObject(keyMap), + code: keyMap + }; + })(); + + var range = (function () { + + /** + * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js + * + * @param {TextRange} textRange + * @param {Boolean} isStart + * @return {BoundaryPoint} + * + * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx + */ + var textRangeToPoint = function (textRange, isStart) { + var container = textRange.parentElement(), offset; + + var tester = document.body.createTextRange(), prevContainer; + var childNodes = list.from(container.childNodes); + for (offset = 0; offset < childNodes.length; offset++) { + if (dom.isText(childNodes[offset])) { + continue; + } + tester.moveToElementText(childNodes[offset]); + if (tester.compareEndPoints('StartToStart', textRange) >= 0) { + break; + } + prevContainer = childNodes[offset]; + } + + if (offset !== 0 && dom.isText(childNodes[offset - 1])) { + var textRangeStart = document.body.createTextRange(), curTextNode = null; + textRangeStart.moveToElementText(prevContainer || container); + textRangeStart.collapse(!prevContainer); + curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild; + + var pointTester = textRange.duplicate(); + pointTester.setEndPoint('StartToStart', textRangeStart); + var textCount = pointTester.text.replace(/[\r\n]/g, '').length; + + while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) { + textCount -= curTextNode.nodeValue.length; + curTextNode = curTextNode.nextSibling; + } + + /* jshint ignore:start */ + var dummy = curTextNode.nodeValue; // enforce IE to re-reference curTextNode, hack + /* jshint ignore:end */ + + if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && + textCount === curTextNode.nodeValue.length) { + textCount -= curTextNode.nodeValue.length; + curTextNode = curTextNode.nextSibling; + } + + container = curTextNode; + offset = textCount; + } + + return { + cont: container, + offset: offset + }; + }; + + /** + * return TextRange from boundary point (inspired by google closure-library) + * @param {BoundaryPoint} point + * @return {TextRange} + */ + var pointToTextRange = function (point) { + var textRangeInfo = function (container, offset) { + var node, isCollapseToStart; + + if (dom.isText(container)) { + var prevTextNodes = dom.listPrev(container, func.not(dom.isText)); + var prevContainer = list.last(prevTextNodes).previousSibling; + node = prevContainer || container.parentNode; + offset += list.sum(list.tail(prevTextNodes), dom.nodeLength); + isCollapseToStart = !prevContainer; + } else { + node = container.childNodes[offset] || container; + if (dom.isText(node)) { + return textRangeInfo(node, 0); + } + + offset = 0; + isCollapseToStart = false; + } + + return { + node: node, + collapseToStart: isCollapseToStart, + offset: offset + }; + }; + + var textRange = document.body.createTextRange(); + var info = textRangeInfo(point.node, point.offset); + + textRange.moveToElementText(info.node); + textRange.collapse(info.collapseToStart); + textRange.moveStart('character', info.offset); + return textRange; + }; + + /** + * Wrapped Range + * + * @constructor + * @param {Node} sc - start container + * @param {Number} so - start offset + * @param {Node} ec - end container + * @param {Number} eo - end offset + */ + var WrappedRange = function (sc, so, ec, eo) { + this.sc = sc; + this.so = so; + this.ec = ec; + this.eo = eo; + + // nativeRange: get nativeRange from sc, so, ec, eo + var nativeRange = function () { + if (agent.isW3CRangeSupport) { + var w3cRange = document.createRange(); + w3cRange.setStart(sc, so); + w3cRange.setEnd(ec, eo); + + return w3cRange; + } else { + var textRange = pointToTextRange({ + node: sc, + offset: so + }); + + textRange.setEndPoint('EndToEnd', pointToTextRange({ + node: ec, + offset: eo + })); + + return textRange; + } + }; + + this.getPoints = function () { + return { + sc: sc, + so: so, + ec: ec, + eo: eo + }; + }; + + this.getStartPoint = function () { + return { + node: sc, + offset: so + }; + }; + + this.getEndPoint = function () { + return { + node: ec, + offset: eo + }; + }; + + /** + * select update visible range + */ + this.select = function () { + var nativeRng = nativeRange(); + if (agent.isW3CRangeSupport) { + var selection = document.getSelection(); + if (selection.rangeCount > 0) { + selection.removeAllRanges(); + } + selection.addRange(nativeRng); + } else { + nativeRng.select(); + } + + return this; + }; + + /** + * Moves the scrollbar to start container(sc) of current range + * + * @return {WrappedRange} + */ + this.scrollIntoView = function (container) { + var height = $(container).height(); + if (container.scrollTop + height < this.sc.offsetTop) { + container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop); + } + + return this; + }; + + /** + * @return {WrappedRange} + */ + this.normalize = function () { + + /** + * @param {BoundaryPoint} point + * @param {Boolean} isLeftToRight + * @return {BoundaryPoint} + */ + var getVisiblePoint = function (point, isLeftToRight) { + if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) || + (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) || + (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) || + (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) { + return point; + } + + // point on block's edge + var block = dom.ancestor(point.node, dom.isBlock); + if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) || + ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) { + + // returns point already on visible point + if (dom.isVisiblePoint(point)) { + return point; + } + // reverse direction + isLeftToRight = !isLeftToRight; + } + + var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : + dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint); + return nextPoint || point; + }; + + var endPoint = getVisiblePoint(this.getEndPoint(), false); + var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true); + + return new WrappedRange( + startPoint.node, + startPoint.offset, + endPoint.node, + endPoint.offset + ); + }; + + /** + * returns matched nodes on range + * + * @param {Function} [pred] - predicate function + * @param {Object} [options] + * @param {Boolean} [options.includeAncestor] + * @param {Boolean} [options.fullyContains] + * @return {Node[]} + */ + this.nodes = function (pred, options) { + pred = pred || func.ok; + + var includeAncestor = options && options.includeAncestor; + var fullyContains = options && options.fullyContains; + + // TODO compare points and sort + var startPoint = this.getStartPoint(); + var endPoint = this.getEndPoint(); + + var nodes = []; + var leftEdgeNodes = []; + + dom.walkPoint(startPoint, endPoint, function (point) { + if (dom.isEditable(point.node)) { + return; + } + + var node; + if (fullyContains) { + if (dom.isLeftEdgePoint(point)) { + leftEdgeNodes.push(point.node); + } + if (dom.isRightEdgePoint(point) && list.contains(leftEdgeNodes, point.node)) { + node = point.node; + } + } else if (includeAncestor) { + node = dom.ancestor(point.node, pred); + } else { + node = point.node; + } + + if (node && pred(node)) { + nodes.push(node); + } + }, true); + + return list.unique(nodes); + }; + + /** + * returns commonAncestor of range + * @return {Element} - commonAncestor + */ + this.commonAncestor = function () { + return dom.commonAncestor(sc, ec); + }; + + /** + * returns expanded range by pred + * + * @param {Function} pred - predicate function + * @return {WrappedRange} + */ + this.expand = function (pred) { + var startAncestor = dom.ancestor(sc, pred); + var endAncestor = dom.ancestor(ec, pred); + + if (!startAncestor && !endAncestor) { + return new WrappedRange(sc, so, ec, eo); + } + + var boundaryPoints = this.getPoints(); + + if (startAncestor) { + boundaryPoints.sc = startAncestor; + boundaryPoints.so = 0; + } + + if (endAncestor) { + boundaryPoints.ec = endAncestor; + boundaryPoints.eo = dom.nodeLength(endAncestor); + } + + return new WrappedRange( + boundaryPoints.sc, + boundaryPoints.so, + boundaryPoints.ec, + boundaryPoints.eo + ); + }; + + /** + * @param {Boolean} isCollapseToStart + * @return {WrappedRange} + */ + this.collapse = function (isCollapseToStart) { + if (isCollapseToStart) { + return new WrappedRange(sc, so, sc, so); + } else { + return new WrappedRange(ec, eo, ec, eo); + } + }; + + /** + * splitText on range + */ + this.splitText = function () { + var isSameContainer = sc === ec; + var boundaryPoints = this.getPoints(); + + if (dom.isText(ec) && !dom.isEdgePoint(this.getEndPoint())) { + ec.splitText(eo); + } + + if (dom.isText(sc) && !dom.isEdgePoint(this.getStartPoint())) { + boundaryPoints.sc = sc.splitText(so); + boundaryPoints.so = 0; + + if (isSameContainer) { + boundaryPoints.ec = boundaryPoints.sc; + boundaryPoints.eo = eo - so; + } + } + + return new WrappedRange( + boundaryPoints.sc, + boundaryPoints.so, + boundaryPoints.ec, + boundaryPoints.eo + ); + }; + + /** + * delete contents on range + * @return {WrappedRange} + */ + this.deleteContents = function () { + if (this.isCollapsed()) { + return this; + } + + var rng = this.splitText(); + var nodes = rng.nodes(null, { + fullyContains: true + }); + + // find new cursor point + var point = dom.prevPointUntil(rng.getStartPoint(), function (point) { + return !list.contains(nodes, point.node); + }); + + var emptyParents = []; + $.each(nodes, function (idx, node) { + // find empty parents + var parent = node.parentNode; + if (point.node !== parent && dom.nodeLength(parent) === 1) { + emptyParents.push(parent); + } + dom.remove(node, false); + }); + + // remove empty parents + $.each(emptyParents, function (idx, node) { + dom.remove(node, false); + }); + + return new WrappedRange( + point.node, + point.offset, + point.node, + point.offset + ).normalize(); + }; + + /** + * makeIsOn: return isOn(pred) function + */ + var makeIsOn = function (pred) { + return function () { + var ancestor = dom.ancestor(sc, pred); + return !!ancestor && (ancestor === dom.ancestor(ec, pred)); + }; + }; + + // isOnEditable: judge whether range is on editable or not + this.isOnEditable = makeIsOn(dom.isEditable); + // isOnList: judge whether range is on list node or not + this.isOnList = makeIsOn(dom.isList); + // isOnAnchor: judge whether range is on anchor node or not + this.isOnAnchor = makeIsOn(dom.isAnchor); + // isOnCell: judge whether range is on cell node or not + this.isOnCell = makeIsOn(dom.isCell); + // isOnData: judge whether range is on data node or not + this.isOnData = makeIsOn(dom.isData); + + /** + * @param {Function} pred + * @return {Boolean} + */ + this.isLeftEdgeOf = function (pred) { + if (!dom.isLeftEdgePoint(this.getStartPoint())) { + return false; + } + + var node = dom.ancestor(this.sc, pred); + return node && dom.isLeftEdgeOf(this.sc, node); + }; + + /** + * returns whether range was collapsed or not + */ + this.isCollapsed = function () { + return sc === ec && so === eo; + }; + + /** + * wrap inline nodes which children of body with paragraph + * + * @return {WrappedRange} + */ + this.wrapBodyInlineWithPara = function () { + if (dom.isBodyContainer(sc) && dom.isEmpty(sc)) { + sc.innerHTML = dom.emptyPara; + return new WrappedRange(sc.firstChild, 0, sc.firstChild, 0); + } + + /** + * [workaround] firefox often create range on not visible point. so normalize here. + * - firefox: |<p>text</p>| + * - chrome: <p>|text|</p> + */ + var rng = this.normalize(); + if (dom.isParaInline(sc) || dom.isPara(sc)) { + return rng; + } + + // find inline top ancestor + var topAncestor; + if (dom.isInline(rng.sc)) { + var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline)); + topAncestor = list.last(ancestors); + if (!dom.isInline(topAncestor)) { + topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so]; + } + } else { + topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0]; + } + + // siblings not in paragraph + var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse(); + inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline)); + + // wrap with paragraph + if (inlineSiblings.length) { + var para = dom.wrap(list.head(inlineSiblings), 'p'); + dom.appendChildNodes(para, list.tail(inlineSiblings)); + } + + return this.normalize(); + }; + + /** + * insert node at current cursor + * + * @param {Node} node + * @return {Node} + */ + this.insertNode = function (node) { + var rng = this.wrapBodyInlineWithPara().deleteContents(); + var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node)); + + if (info.rightNode) { + info.rightNode.parentNode.insertBefore(node, info.rightNode); + } else { + info.container.appendChild(node); + } + + return node; + }; + + /** + * insert html at current cursor + */ + this.pasteHTML = function (markup) { + var contentsContainer = $('<div></div>').html(markup)[0]; + var childNodes = list.from(contentsContainer.childNodes); + + var rng = this.wrapBodyInlineWithPara().deleteContents(); + + return childNodes.reverse().map(function (childNode) { + return rng.insertNode(childNode); + }).reverse(); + }; + + /** + * returns text in range + * + * @return {String} + */ + this.toString = function () { + var nativeRng = nativeRange(); + return agent.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text; + }; + + /** + * returns range for word before cursor + * + * @param {Boolean} [findAfter] - find after cursor, default: false + * @return {WrappedRange} + */ + this.getWordRange = function (findAfter) { + var endPoint = this.getEndPoint(); + + if (!dom.isCharPoint(endPoint)) { + return this; + } + + var startPoint = dom.prevPointUntil(endPoint, function (point) { + return !dom.isCharPoint(point); + }); + + if (findAfter) { + endPoint = dom.nextPointUntil(endPoint, function (point) { + return !dom.isCharPoint(point); + }); + } + + return new WrappedRange( + startPoint.node, + startPoint.offset, + endPoint.node, + endPoint.offset + ); + }; + + /** + * create offsetPath bookmark + * + * @param {Node} editable + */ + this.bookmark = function (editable) { + return { + s: { + path: dom.makeOffsetPath(editable, sc), + offset: so + }, + e: { + path: dom.makeOffsetPath(editable, ec), + offset: eo + } + }; + }; + + /** + * create offsetPath bookmark base on paragraph + * + * @param {Node[]} paras + */ + this.paraBookmark = function (paras) { + return { + s: { + path: list.tail(dom.makeOffsetPath(list.head(paras), sc)), + offset: so + }, + e: { + path: list.tail(dom.makeOffsetPath(list.last(paras), ec)), + offset: eo + } + }; + }; + + /** + * getClientRects + * @return {Rect[]} + */ + this.getClientRects = function () { + var nativeRng = nativeRange(); + return nativeRng.getClientRects(); + }; + }; + + /** + * @class core.range + * + * Data structure + * * BoundaryPoint: a point of dom tree + * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range + * + * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position + * + * @singleton + * @alternateClassName range + */ + return { + /** + * create Range Object From arguments or Browser Selection + * + * @param {Node} sc - start container + * @param {Number} so - start offset + * @param {Node} ec - end container + * @param {Number} eo - end offset + * @return {WrappedRange} + */ + create: function (sc, so, ec, eo) { + if (arguments.length === 4) { + return new WrappedRange(sc, so, ec, eo); + } else if (arguments.length === 2) { //collapsed + ec = sc; + eo = so; + return new WrappedRange(sc, so, ec, eo); + } else { + var wrappedRange = this.createFromSelection(); + if (!wrappedRange && arguments.length === 1) { + wrappedRange = this.createFromNode(arguments[0]); + return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML); + } + return wrappedRange; + } + }, + + createFromSelection: function () { + var sc, so, ec, eo; + if (agent.isW3CRangeSupport) { + var selection = document.getSelection(); + if (!selection || selection.rangeCount === 0) { + return null; + } else if (dom.isBody(selection.anchorNode)) { + // Firefox: returns entire body as range on initialization. + // We won't never need it. + return null; + } + + var nativeRng = selection.getRangeAt(0); + sc = nativeRng.startContainer; + so = nativeRng.startOffset; + ec = nativeRng.endContainer; + eo = nativeRng.endOffset; + } else { // IE8: TextRange + var textRange = document.selection.createRange(); + var textRangeEnd = textRange.duplicate(); + textRangeEnd.collapse(false); + var textRangeStart = textRange; + textRangeStart.collapse(true); + + var startPoint = textRangeToPoint(textRangeStart, true), + endPoint = textRangeToPoint(textRangeEnd, false); + + // same visible point case: range was collapsed. + if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && + dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && + endPoint.node.nextSibling === startPoint.node) { + startPoint = endPoint; + } + + sc = startPoint.cont; + so = startPoint.offset; + ec = endPoint.cont; + eo = endPoint.offset; + } + + return new WrappedRange(sc, so, ec, eo); + }, + + /** + * @method + * + * create WrappedRange from node + * + * @param {Node} node + * @return {WrappedRange} + */ + createFromNode: function (node) { + var sc = node; + var so = 0; + var ec = node; + var eo = dom.nodeLength(ec); + + // browsers can't target a picture or void node + if (dom.isVoid(sc)) { + so = dom.listPrev(sc).length - 1; + sc = sc.parentNode; + } + if (dom.isBR(ec)) { + eo = dom.listPrev(ec).length - 1; + ec = ec.parentNode; + } else if (dom.isVoid(ec)) { + eo = dom.listPrev(ec).length; + ec = ec.parentNode; + } + + return this.create(sc, so, ec, eo); + }, + + /** + * create WrappedRange from node after position + * + * @param {Node} node + * @return {WrappedRange} + */ + createFromNodeBefore: function (node) { + return this.createFromNode(node).collapse(true); + }, + + /** + * create WrappedRange from node after position + * + * @param {Node} node + * @return {WrappedRange} + */ + createFromNodeAfter: function (node) { + return this.createFromNode(node).collapse(); + }, + + /** + * @method + * + * create WrappedRange from bookmark + * + * @param {Node} editable + * @param {Object} bookmark + * @return {WrappedRange} + */ + createFromBookmark: function (editable, bookmark) { + var sc = dom.fromOffsetPath(editable, bookmark.s.path); + var so = bookmark.s.offset; + var ec = dom.fromOffsetPath(editable, bookmark.e.path); + var eo = bookmark.e.offset; + return new WrappedRange(sc, so, ec, eo); + }, + + /** + * @method + * + * create WrappedRange from paraBookmark + * + * @param {Object} bookmark + * @param {Node[]} paras + * @return {WrappedRange} + */ + createFromParaBookmark: function (bookmark, paras) { + var so = bookmark.s.offset; + var eo = bookmark.e.offset; + var sc = dom.fromOffsetPath(list.head(paras), bookmark.s.path); + var ec = dom.fromOffsetPath(list.last(paras), bookmark.e.path); + + return new WrappedRange(sc, so, ec, eo); + } + }; + })(); + + /** + * @class core.async + * + * Async functions which returns `Promise` + * + * @singleton + * @alternateClassName async + */ + var async = (function () { + /** + * @method readFileAsDataURL + * + * read contents of file as representing URL + * + * @param {File} file + * @return {Promise} - then: dataUrl + */ + var readFileAsDataURL = function (file) { + return $.Deferred(function (deferred) { + $.extend(new FileReader(), { + onload: function (e) { + var dataURL = e.target.result; + deferred.resolve(dataURL); + }, + onerror: function () { + deferred.reject(this); + } + }).readAsDataURL(file); + }).promise(); + }; + + /** + * @method createImage + * + * create `<image>` from url string + * + * @param {String} url + * @return {Promise} - then: $image + */ + var createImage = function (url) { + return $.Deferred(function (deferred) { + var $img = $('<img>'); + + $img.one('load', function () { + $img.off('error abort'); + deferred.resolve($img); + }).one('error abort', function () { + $img.off('load').detach(); + deferred.reject($img); + }).css({ + display: 'none' + }).appendTo(document.body).attr('src', url); + }).promise(); + }; + + return { + readFileAsDataURL: readFileAsDataURL, + createImage: createImage + }; + })(); + + /** + * @class editing.History + * + * Editor History + * + */ + var History = function ($editable) { + var stack = [], stackOffset = -1; + var editable = $editable[0]; + + var makeSnapshot = function () { + var rng = range.create(editable); + var emptyBookmark = {s: {path: [], offset: 0}, e: {path: [], offset: 0}}; + + return { + contents: $editable.html(), + bookmark: (rng ? rng.bookmark(editable) : emptyBookmark) + }; + }; + + var applySnapshot = function (snapshot) { + if (snapshot.contents !== null) { + $editable.html(snapshot.contents); + } + if (snapshot.bookmark !== null) { + range.createFromBookmark(editable, snapshot.bookmark).select(); + } + }; + + /** + * @method rewind + * Rewinds the history stack back to the first snapshot taken. + * Leaves the stack intact, so that "Redo" can still be used. + */ + this.rewind = function () { + // Create snap shot if not yet recorded + if ($editable.html() !== stack[stackOffset].contents) { + this.recordUndo(); + } + + // Return to the first available snapshot. + stackOffset = 0; + + // Apply that snapshot. + applySnapshot(stack[stackOffset]); + }; + + /** + * @method reset + * Resets the history stack completely; reverting to an empty editor. + */ + this.reset = function () { + // Clear the stack. + stack = []; + + // Restore stackOffset to its original value. + stackOffset = -1; + + // Clear the editable area. + $editable.html(''); + + // Record our first snapshot (of nothing). + this.recordUndo(); + }; + + /** + * undo + */ + this.undo = function () { + // Create snap shot if not yet recorded + if ($editable.html() !== stack[stackOffset].contents) { + this.recordUndo(); + } + + if (0 < stackOffset) { + stackOffset--; + applySnapshot(stack[stackOffset]); + } + }; + + /** + * redo + */ + this.redo = function () { + if (stack.length - 1 > stackOffset) { + stackOffset++; + applySnapshot(stack[stackOffset]); + } + }; + + /** + * recorded undo + */ + this.recordUndo = function () { + stackOffset++; + + // Wash out stack after stackOffset + if (stack.length > stackOffset) { + stack = stack.slice(0, stackOffset); + } + + // Create new snapshot and push it to the end + stack.push(makeSnapshot()); + }; + }; + + /** + * @class editing.Style + * + * Style + * + */ + var Style = function () { + /** + * @method jQueryCSS + * + * [workaround] for old jQuery + * passing an array of style properties to .css() + * will result in an object of property-value pairs. + * (compability with version < 1.9) + * + * @private + * @param {jQuery} $obj + * @param {Array} propertyNames - An array of one or more CSS properties. + * @return {Object} + */ + var jQueryCSS = function ($obj, propertyNames) { + if (agent.jqueryVersion < 1.9) { + var result = {}; + $.each(propertyNames, function (idx, propertyName) { + result[propertyName] = $obj.css(propertyName); + }); + return result; + } + return $obj.css.call($obj, propertyNames); + }; + + /** + * returns style object from node + * + * @param {jQuery} $node + * @return {Object} + */ + this.fromNode = function ($node) { + var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height']; + var styleInfo = jQueryCSS($node, properties) || {}; + styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10); + return styleInfo; + }; + + /** + * paragraph level style + * + * @param {WrappedRange} rng + * @param {Object} styleInfo + */ + this.stylePara = function (rng, styleInfo) { + $.each(rng.nodes(dom.isPara, { + includeAncestor: true + }), function (idx, para) { + $(para).css(styleInfo); + }); + }; + + /** + * insert and returns styleNodes on range. + * + * @param {WrappedRange} rng + * @param {Object} [options] - options for styleNodes + * @param {String} [options.nodeName] - default: `SPAN` + * @param {Boolean} [options.expandClosestSibling] - default: `false` + * @param {Boolean} [options.onlyPartialContains] - default: `false` + * @return {Node[]} + */ + this.styleNodes = function (rng, options) { + rng = rng.splitText(); + + var nodeName = options && options.nodeName || 'SPAN'; + var expandClosestSibling = !!(options && options.expandClosestSibling); + var onlyPartialContains = !!(options && options.onlyPartialContains); + + if (rng.isCollapsed()) { + return [rng.insertNode(dom.create(nodeName))]; + } + + var pred = dom.makePredByNodeName(nodeName); + var nodes = rng.nodes(dom.isText, { + fullyContains: true + }).map(function (text) { + return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName); + }); + + if (expandClosestSibling) { + if (onlyPartialContains) { + var nodesInRange = rng.nodes(); + // compose with partial contains predication + pred = func.and(pred, function (node) { + return list.contains(nodesInRange, node); + }); + } + + return nodes.map(function (node) { + var siblings = dom.withClosestSiblings(node, pred); + var head = list.head(siblings); + var tails = list.tail(siblings); + $.each(tails, function (idx, elem) { + dom.appendChildNodes(head, elem.childNodes); + dom.remove(elem); + }); + return list.head(siblings); + }); + } else { + return nodes; + } + }; + + /** + * get current style on cursor + * + * @param {WrappedRange} rng + * @return {Object} - object contains style properties. + */ + this.current = function (rng) { + var $cont = $(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc); + var styleInfo = this.fromNode($cont); + + // document.queryCommandState for toggle state + // [workaround] prevent Firefox nsresult: "0x80004005 (NS_ERROR_FAILURE)" + try { + styleInfo = $.extend(styleInfo, { + 'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal', + 'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal', + 'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal', + 'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal', + 'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal', + 'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal' + }); + } catch (e) {} + + // list-style-type to list-style(unordered, ordered) + if (!rng.isOnList()) { + styleInfo['list-style'] = 'none'; + } else { + var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square']; + var isUnordered = $.inArray(styleInfo['list-style-type'], orderedTypes) > -1; + styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered'; + } + + var para = dom.ancestor(rng.sc, dom.isPara); + if (para && para.style['line-height']) { + styleInfo['line-height'] = para.style.lineHeight; + } else { + var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10); + styleInfo['line-height'] = lineHeight.toFixed(1); + } + + styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor); + styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable); + styleInfo.range = rng; + + return styleInfo; + }; + }; + + + /** + * @class editing.Bullet + * + * @alternateClassName Bullet + */ + var Bullet = function () { + var self = this; + + /** + * toggle ordered list + */ + this.insertOrderedList = function (editable) { + this.toggleList('OL', editable); + }; + + /** + * toggle unordered list + */ + this.insertUnorderedList = function (editable) { + this.toggleList('UL', editable); + }; + + /** + * indent + */ + this.indent = function (editable) { + var self = this; + var rng = range.create(editable).wrapBodyInlineWithPara(); + + var paras = rng.nodes(dom.isPara, { includeAncestor: true }); + var clustereds = list.clusterBy(paras, func.peq2('parentNode')); + + $.each(clustereds, function (idx, paras) { + var head = list.head(paras); + if (dom.isLi(head)) { + self.wrapList(paras, head.parentNode.nodeName); + } else { + $.each(paras, function (idx, para) { + $(para).css('marginLeft', function (idx, val) { + return (parseInt(val, 10) || 0) + 25; + }); + }); + } + }); + + rng.select(); + }; + + /** + * outdent + */ + this.outdent = function (editable) { + var self = this; + var rng = range.create(editable).wrapBodyInlineWithPara(); + + var paras = rng.nodes(dom.isPara, { includeAncestor: true }); + var clustereds = list.clusterBy(paras, func.peq2('parentNode')); + + $.each(clustereds, function (idx, paras) { + var head = list.head(paras); + if (dom.isLi(head)) { + self.releaseList([paras]); + } else { + $.each(paras, function (idx, para) { + $(para).css('marginLeft', function (idx, val) { + val = (parseInt(val, 10) || 0); + return val > 25 ? val - 25 : ''; + }); + }); + } + }); + + rng.select(); + }; + + /** + * toggle list + * + * @param {String} listName - OL or UL + */ + this.toggleList = function (listName, editable) { + var rng = range.create(editable).wrapBodyInlineWithPara(); + + var paras = rng.nodes(dom.isPara, { includeAncestor: true }); + var bookmark = rng.paraBookmark(paras); + var clustereds = list.clusterBy(paras, func.peq2('parentNode')); + + // paragraph to list + if (list.find(paras, dom.isPurePara)) { + var wrappedParas = []; + $.each(clustereds, function (idx, paras) { + wrappedParas = wrappedParas.concat(self.wrapList(paras, listName)); + }); + paras = wrappedParas; + // list to paragraph or change list style + } else { + var diffLists = rng.nodes(dom.isList, { + includeAncestor: true + }).filter(function (listNode) { + return !$.nodeName(listNode, listName); + }); + + if (diffLists.length) { + $.each(diffLists, function (idx, listNode) { + dom.replace(listNode, listName); + }); + } else { + paras = this.releaseList(clustereds, true); + } + } + + range.createFromParaBookmark(bookmark, paras).select(); + }; + + /** + * @param {Node[]} paras + * @param {String} listName + * @return {Node[]} + */ + this.wrapList = function (paras, listName) { + var head = list.head(paras); + var last = list.last(paras); + + var prevList = dom.isList(head.previousSibling) && head.previousSibling; + var nextList = dom.isList(last.nextSibling) && last.nextSibling; + + var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last); + + // P to LI + paras = paras.map(function (para) { + return dom.isPurePara(para) ? dom.replace(para, 'LI') : para; + }); + + // append to list(<ul>, <ol>) + dom.appendChildNodes(listNode, paras); + + if (nextList) { + dom.appendChildNodes(listNode, list.from(nextList.childNodes)); + dom.remove(nextList); + } + + return paras; + }; + + /** + * @method releaseList + * + * @param {Array[]} clustereds + * @param {Boolean} isEscapseToBody + * @return {Node[]} + */ + this.releaseList = function (clustereds, isEscapseToBody) { + var releasedParas = []; + + $.each(clustereds, function (idx, paras) { + var head = list.head(paras); + var last = list.last(paras); + + var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : + head.parentNode; + var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, { + node: last.parentNode, + offset: dom.position(last) + 1 + }, { + isSkipPaddingBlankHTML: true + }) : null; + + var middleList = dom.splitTree(headList, { + node: head.parentNode, + offset: dom.position(head) + }, { + isSkipPaddingBlankHTML: true + }); + + paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : + list.from(middleList.childNodes).filter(dom.isLi); + + // LI to P + if (isEscapseToBody || !dom.isList(headList.parentNode)) { + paras = paras.map(function (para) { + return dom.replace(para, 'P'); + }); + } + + $.each(list.from(paras).reverse(), function (idx, para) { + dom.insertAfter(para, headList); + }); + + // remove empty lists + var rootLists = list.compact([headList, middleList, lastList]); + $.each(rootLists, function (idx, rootList) { + var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList)); + $.each(listNodes.reverse(), function (idx, listNode) { + if (!dom.nodeLength(listNode)) { + dom.remove(listNode, true); + } + }); + }); + + releasedParas = releasedParas.concat(paras); + }); + + return releasedParas; + }; + }; + + + /** + * @class editing.Typing + * + * Typing + * + */ + var Typing = function () { + + // a Bullet instance to toggle lists off + var bullet = new Bullet(); + + /** + * insert tab + * + * @param {WrappedRange} rng + * @param {Number} tabsize + */ + this.insertTab = function (rng, tabsize) { + var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR)); + rng = rng.deleteContents(); + rng.insertNode(tab, true); + + rng = range.create(tab, tabsize); + rng.select(); + }; + + /** + * insert paragraph + */ + this.insertParagraph = function (editable) { + var rng = range.create(editable); + + // deleteContents on range. + rng = rng.deleteContents(); + + // Wrap range if it needs to be wrapped by paragraph + rng = rng.wrapBodyInlineWithPara(); + + // finding paragraph + var splitRoot = dom.ancestor(rng.sc, dom.isPara); + + var nextPara; + // on paragraph: split paragraph + if (splitRoot) { + // if it is an empty line with li + if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) { + // toogle UL/OL and escape + bullet.toggleList(splitRoot.parentNode.nodeName); + return; + // if it is an empty line with para on blockquote + } else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) { + // escape blockquote + dom.insertAfter(splitRoot, splitRoot.parentNode); + nextPara = splitRoot; + // if new line has content (not a line break) + } else { + nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); + + var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor); + emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor)); + + $.each(emptyAnchors, function (idx, anchor) { + dom.remove(anchor); + }); + + // replace empty heading or pre with P tag + if ((dom.isHeading(nextPara) || dom.isPre(nextPara)) && dom.isEmpty(nextPara)) { + nextPara = dom.replace(nextPara, 'p'); + } + } + // no paragraph: insert empty paragraph + } else { + var next = rng.sc.childNodes[rng.so]; + nextPara = $(dom.emptyPara)[0]; + if (next) { + rng.sc.insertBefore(nextPara, next); + } else { + rng.sc.appendChild(nextPara); + } + } + + range.create(nextPara, 0).normalize().select().scrollIntoView(editable); + }; + }; + + /** + * @class editing.Table + * + * Table + * + */ + var Table = function () { + /** + * handle tab key + * + * @param {WrappedRange} rng + * @param {Boolean} isShift + */ + this.tab = function (rng, isShift) { + var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); + var table = dom.ancestor(cell, dom.isTable); + var cells = dom.listDescendant(table, dom.isCell); + + var nextCell = list[isShift ? 'prev' : 'next'](cells, cell); + if (nextCell) { + range.create(nextCell, 0).select(); + } + }; + + /** + * create empty table element + * + * @param {Number} rowCount + * @param {Number} colCount + * @return {Node} + */ + this.createTable = function (colCount, rowCount, options) { + var tds = [], tdHTML; + for (var idxCol = 0; idxCol < colCount; idxCol++) { + tds.push('<td>' + dom.blank + '</td>'); + } + tdHTML = tds.join(''); + + var trs = [], trHTML; + for (var idxRow = 0; idxRow < rowCount; idxRow++) { + trs.push('<tr>' + tdHTML + '</tr>'); + } + trHTML = trs.join(''); + var $table = $('<table>' + trHTML + '</table>'); + if (options && options.tableClassName) { + $table.addClass(options.tableClassName); + } + + return $table[0]; + }; + }; + + + var KEY_BOGUS = 'bogus'; + + /** + * @class Editor + */ + var Editor = function (context) { + var self = this; + + var $note = context.layoutInfo.note; + var $editor = context.layoutInfo.editor; + var $editable = context.layoutInfo.editable; + var options = context.options; + var lang = options.langInfo; + + var editable = $editable[0]; + var lastRange = null; + + var style = new Style(); + var table = new Table(); + var typing = new Typing(); + var bullet = new Bullet(); + var history = new History($editable); + + this.initialize = function () { + // bind custom events + $editable.on('keydown', function (event) { + if (event.keyCode === key.code.ENTER) { + context.triggerEvent('enter', event); + } + context.triggerEvent('keydown', event); + + if (!event.isDefaultPrevented()) { + if (options.shortcuts) { + self.handleKeyMap(event); + } else { + self.preventDefaultEditableShortCuts(event); + } + } + }).on('keyup', function (event) { + context.triggerEvent('keyup', event); + }).on('focus', function (event) { + context.triggerEvent('focus', event); + }).on('blur', function (event) { + context.triggerEvent('blur', event); + }).on('mousedown', function (event) { + context.triggerEvent('mousedown', event); + }).on('mouseup', function (event) { + context.triggerEvent('mouseup', event); + }).on('scroll', function (event) { + context.triggerEvent('scroll', event); + }).on('paste', function (event) { + context.triggerEvent('paste', event); + }); + + // init content before set event + $editable.html(dom.html($note) || dom.emptyPara); + + // [workaround] IE doesn't have input events for contentEditable + // - see: https://goo.gl/4bfIvA + var changeEventName = agent.isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input'; + $editable.on(changeEventName, func.debounce(function () { + context.triggerEvent('change', $editable.html()); + }, 250)); + + $editor.on('focusin', function (event) { + context.triggerEvent('focusin', event); + }).on('focusout', function (event) { + context.triggerEvent('focusout', event); + }); + + if (!options.airMode) { + if (options.width) { + $editor.outerWidth(options.width); + } + if (options.height) { + $editable.outerHeight(options.height); + } + if (options.maxHeight) { + $editable.css('max-height', options.maxHeight); + } + if (options.minHeight) { + $editable.css('min-height', options.minHeight); + } + } + + history.recordUndo(); + }; + + this.destroy = function () { + $editable.off(); + }; + + this.handleKeyMap = function (event) { + var keyMap = options.keyMap[agent.isMac ? 'mac' : 'pc']; + var keys = []; + + if (event.metaKey) { keys.push('CMD'); } + if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); } + if (event.shiftKey) { keys.push('SHIFT'); } + + var keyName = key.nameFromCode[event.keyCode]; + if (keyName) { + keys.push(keyName); + } + + var eventName = keyMap[keys.join('+')]; + if (eventName) { + event.preventDefault(); + context.invoke(eventName); + } else if (key.isEdit(event.keyCode)) { + this.afterCommand(); + } + }; + + this.preventDefaultEditableShortCuts = function (event) { + // B(Bold, 66) / I(Italic, 73) / U(Underline, 85) + if ((event.ctrlKey || event.metaKey) && + list.contains([66, 73, 85], event.keyCode)) { + event.preventDefault(); + } + }; + + /** + * create range + * @return {WrappedRange} + */ + this.createRange = function () { + this.focus(); + return range.create(editable); + }; + + /** + * saveRange + * + * save current range + * + * @param {Boolean} [thenCollapse=false] + */ + this.saveRange = function (thenCollapse) { + lastRange = this.createRange(); + if (thenCollapse) { + lastRange.collapse().select(); + } + }; + + /** + * restoreRange + * + * restore lately range + */ + this.restoreRange = function () { + if (lastRange) { + lastRange.select(); + this.focus(); + } + }; + + this.saveTarget = function (node) { + $editable.data('target', node); + }; + + this.clearTarget = function () { + $editable.removeData('target'); + }; + + this.restoreTarget = function () { + return $editable.data('target'); + }; + + /** + * currentStyle + * + * current style + * @return {Object|Boolean} unfocus + */ + this.currentStyle = function () { + var rng = range.create(); + if (rng) { + rng = rng.normalize(); + } + return rng ? style.current(rng) : style.fromNode($editable); + }; + + /** + * style from node + * + * @param {jQuery} $node + * @return {Object} + */ + this.styleFromNode = function ($node) { + return style.fromNode($node); + }; + + /** + * undo + */ + this.undo = function () { + context.triggerEvent('before.command', $editable.html()); + history.undo(); + context.triggerEvent('change', $editable.html()); + }; + context.memo('help.undo', lang.help.undo); + + /** + * redo + */ + this.redo = function () { + context.triggerEvent('before.command', $editable.html()); + history.redo(); + context.triggerEvent('change', $editable.html()); + }; + context.memo('help.redo', lang.help.redo); + + /** + * before command + */ + var beforeCommand = this.beforeCommand = function () { + context.triggerEvent('before.command', $editable.html()); + // keep focus on editable before command execution + self.focus(); + }; + + /** + * after command + * @param {Boolean} isPreventTrigger + */ + var afterCommand = this.afterCommand = function (isPreventTrigger) { + history.recordUndo(); + if (!isPreventTrigger) { + context.triggerEvent('change', $editable.html()); + } + }; + + /* jshint ignore:start */ + // native commands(with execCommand), generate function for execCommand + var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', + 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', + 'formatBlock', 'removeFormat', + 'backColor', 'foreColor', 'fontName']; + + for (var idx = 0, len = commands.length; idx < len; idx ++) { + this[commands[idx]] = (function (sCmd) { + return function (value) { + beforeCommand(); + document.execCommand(sCmd, false, value); + afterCommand(true); + }; + })(commands[idx]); + context.memo('help.' + commands[idx], lang.help[commands[idx]]); + } + /* jshint ignore:end */ + + /** + * handle tab key + */ + this.tab = function () { + var rng = this.createRange(); + if (rng.isCollapsed() && rng.isOnCell()) { + table.tab(rng); + } else { + beforeCommand(); + typing.insertTab(rng, options.tabSize); + afterCommand(); + } + }; + context.memo('help.tab', lang.help.tab); + + /** + * handle shift+tab key + */ + this.untab = function () { + var rng = this.createRange(); + if (rng.isCollapsed() && rng.isOnCell()) { + table.tab(rng, true); + } + }; + context.memo('help.untab', lang.help.untab); + + /** + * run given function between beforeCommand and afterCommand + */ + this.wrapCommand = function (fn) { + return function () { + beforeCommand(); + fn.apply(self, arguments); + afterCommand(); + }; + }; + + /** + * insert paragraph + */ + this.insertParagraph = this.wrapCommand(function () { + typing.insertParagraph(editable); + }); + context.memo('help.insertParagraph', lang.help.insertParagraph); + + this.insertOrderedList = this.wrapCommand(function () { + bullet.insertOrderedList(editable); + }); + context.memo('help.insertOrderedList', lang.help.insertOrderedList); + + this.insertUnorderedList = this.wrapCommand(function () { + bullet.insertUnorderedList(editable); + }); + context.memo('help.insertUnorderedList', lang.help.insertUnorderedList); + + this.indent = this.wrapCommand(function () { + bullet.indent(editable); + }); + context.memo('help.indent', lang.help.indent); + + this.outdent = this.wrapCommand(function () { + bullet.outdent(editable); + }); + context.memo('help.outdent', lang.help.outdent); + + /** + * insert image + * + * @param {String} src + * @param {String|Function} param + * @return {Promise} + */ + this.insertImage = function (src, param) { + return async.createImage(src, param).then(function ($image) { + beforeCommand(); + + if (typeof param === 'function') { + param($image); + } else { + if (typeof param === 'string') { + $image.attr('data-filename', param); + } + $image.css('width', Math.min($editable.width(), $image.width())); + } + + $image.show(); + range.create(editable).insertNode($image[0]); + range.createFromNodeAfter($image[0]).select(); + afterCommand(); + }).fail(function (e) { + context.triggerEvent('image.upload.error', e); + }); + }; + + /** + * insertImages + * @param {File[]} files + */ + this.insertImages = function (files) { + $.each(files, function (idx, file) { + var filename = file.name; + if (options.maximumImageFileSize && options.maximumImageFileSize < file.size) { + context.triggerEvent('image.upload.error', lang.image.maximumFileSizeError); + } else { + async.readFileAsDataURL(file).then(function (dataURL) { + return self.insertImage(dataURL, filename); + }).fail(function () { + context.triggerEvent('image.upload.error'); + }); + } + }); + }; + + /** + * insertImagesOrCallback + * @param {File[]} files + */ + this.insertImagesOrCallback = function (files) { + var callbacks = options.callbacks; + + // If onImageUpload options setted + if (callbacks.onImageUpload) { + context.triggerEvent('image.upload', files); + // else insert Image as dataURL + } else { + this.insertImages(files); + } + }; + + /** + * insertNode + * insert node + * @param {Node} node + */ + this.insertNode = this.wrapCommand(function (node) { + var rng = this.createRange(); + rng.insertNode(node); + range.createFromNodeAfter(node).select(); + }); + + /** + * insert text + * @param {String} text + */ + this.insertText = this.wrapCommand(function (text) { + var rng = this.createRange(); + var textNode = rng.insertNode(dom.createText(text)); + range.create(textNode, dom.nodeLength(textNode)).select(); + }); + + /** + * return selected plain text + * @return {String} text + */ + this.getSelectedText = function () { + var rng = this.createRange(); + + // if range on anchor, expand range with anchor + if (rng.isOnAnchor()) { + rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor)); + } + + return rng.toString(); + }; + + /** + * paste HTML + * @param {String} markup + */ + this.pasteHTML = this.wrapCommand(function (markup) { + var contents = this.createRange().pasteHTML(markup); + range.createFromNodeAfter(list.last(contents)).select(); + }); + + /** + * formatBlock + * + * @param {String} tagName + */ + this.formatBlock = this.wrapCommand(function (tagName) { + // [workaround] for MSIE, IE need `<` + tagName = agent.isMSIE ? '<' + tagName + '>' : tagName; + document.execCommand('FormatBlock', false, tagName); + }); + + this.formatPara = function () { + this.formatBlock('P'); + }; + context.memo('help.formatPara', lang.help.formatPara); + + /* jshint ignore:start */ + for (var idx = 1; idx <= 6; idx ++) { + this['formatH' + idx] = function (idx) { + return function () { + this.formatBlock('H' + idx); + }; + }(idx); + context.memo('help.formatH'+idx, lang.help['formatH' + idx]); + }; + /* jshint ignore:end */ + + /** + * fontSize + * + * @param {String} value - px + */ + this.fontSize = function (value) { + var rng = this.createRange(); + + if (rng && rng.isCollapsed()) { + var spans = style.styleNodes(rng); + var firstSpan = list.head(spans); + + $(spans).css({ + 'font-size': value + 'px' + }); + + // [workaround] added styled bogus span for style + // - also bogus character needed for cursor position + if (firstSpan && !dom.nodeLength(firstSpan)) { + firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR; + range.createFromNodeAfter(firstSpan.firstChild).select(); + $editable.data(KEY_BOGUS, firstSpan); + } + } else { + beforeCommand(); + $(style.styleNodes(rng)).css({ + 'font-size': value + 'px' + }); + afterCommand(); + } + }; + + /** + * insert horizontal rule + */ + this.insertHorizontalRule = this.wrapCommand(function () { + var hrNode = this.createRange().insertNode(dom.create('HR')); + if (hrNode.nextSibling) { + range.create(hrNode.nextSibling, 0).normalize().select(); + } + }); + context.memo('help.insertHorizontalRule', lang.help.insertHorizontalRule); + + /** + * remove bogus node and character + */ + this.removeBogus = function () { + var bogusNode = $editable.data(KEY_BOGUS); + if (!bogusNode) { + return; + } + + var textNode = list.find(list.from(bogusNode.childNodes), dom.isText); + + var bogusCharIdx = textNode.nodeValue.indexOf(dom.ZERO_WIDTH_NBSP_CHAR); + if (bogusCharIdx !== -1) { + textNode.deleteData(bogusCharIdx, 1); + } + + if (dom.isEmpty(bogusNode)) { + dom.remove(bogusNode); + } + + $editable.removeData(KEY_BOGUS); + }; + + /** + * lineHeight + * @param {String} value + */ + this.lineHeight = this.wrapCommand(function (value) { + style.stylePara(this.createRange(), { + lineHeight: value + }); + }); + + /** + * unlink + * + * @type command + */ + this.unlink = function () { + var rng = this.createRange(); + if (rng.isOnAnchor()) { + var anchor = dom.ancestor(rng.sc, dom.isAnchor); + rng = range.createFromNode(anchor); + rng.select(); + + beforeCommand(); + document.execCommand('unlink'); + afterCommand(); + } + }; + + /** + * create link (command) + * + * @param {Object} linkInfo + */ + this.createLink = this.wrapCommand(function (linkInfo) { + var linkUrl = linkInfo.url; + var linkText = linkInfo.text; + var isNewWindow = linkInfo.isNewWindow; + var rng = linkInfo.range || this.createRange(); + var isTextChanged = rng.toString() !== linkText; + + // handle spaced urls from input + if (typeof linkUrl === 'string') { + linkUrl = linkUrl.trim(); + } + + if (options.onCreateLink) { + linkUrl = options.onCreateLink(linkUrl); + } + + var anchors = []; + if (isTextChanged) { + rng = rng.deleteContents(); + var anchor = rng.insertNode($('<A>' + linkText + '</A>')[0]); + anchors.push(anchor); + } else { + anchors = style.styleNodes(rng, { + nodeName: 'A', + expandClosestSibling: true, + onlyPartialContains: true + }); + } + + $.each(anchors, function (idx, anchor) { + // if url doesn't match an URL schema, set http:// as default + linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(linkUrl) ? + linkUrl : 'http://' + linkUrl; + + $(anchor).attr('href', linkUrl); + if (isNewWindow) { + $(anchor).attr('target', '_blank'); + } else { + $(anchor).removeAttr('target'); + } + }); + + var startRange = range.createFromNodeBefore(list.head(anchors)); + var startPoint = startRange.getStartPoint(); + var endRange = range.createFromNodeAfter(list.last(anchors)); + var endPoint = endRange.getEndPoint(); + + range.create( + startPoint.node, + startPoint.offset, + endPoint.node, + endPoint.offset + ).select(); + }); + + /** + * returns link info + * + * @return {Object} + * @return {WrappedRange} return.range + * @return {String} return.text + * @return {Boolean} [return.isNewWindow=true] + * @return {String} [return.url=""] + */ + this.getLinkInfo = function () { + var rng = this.createRange().expand(dom.isAnchor); + + // Get the first anchor on range(for edit). + var $anchor = $(list.head(rng.nodes(dom.isAnchor))); + + return { + range: rng, + text: rng.toString(), + isNewWindow: $anchor.length ? $anchor.attr('target') === '_blank' : false, + url: $anchor.length ? $anchor.attr('href') : '' + }; + }; + + /** + * setting color + * + * @param {Object} sObjColor color code + * @param {String} sObjColor.foreColor foreground color + * @param {String} sObjColor.backColor background color + */ + this.color = this.wrapCommand(function (colorInfo) { + var foreColor = colorInfo.foreColor; + var backColor = colorInfo.backColor; + + if (foreColor) { document.execCommand('foreColor', false, foreColor); } + if (backColor) { document.execCommand('backColor', false, backColor); } + }); + + /** + * insert Table + * + * @param {String} dimension of table (ex : "5x5") + */ + this.insertTable = this.wrapCommand(function (dim) { + var dimension = dim.split('x'); + + var rng = this.createRange().deleteContents(); + rng.insertNode(table.createTable(dimension[0], dimension[1], options)); + }); + + /** + * float me + * + * @param {String} value + */ + this.floatMe = this.wrapCommand(function (value) { + var $target = $(this.restoreTarget()); + $target.css('float', value); + }); + + /** + * resize overlay element + * @param {String} value + */ + this.resize = this.wrapCommand(function (value) { + var $target = $(this.restoreTarget()); + $target.css({ + width: value * 100 + '%', + height: '' + }); + }); + + /** + * @param {Position} pos + * @param {jQuery} $target - target element + * @param {Boolean} [bKeepRatio] - keep ratio + */ + this.resizeTo = function (pos, $target, bKeepRatio) { + var imageSize; + if (bKeepRatio) { + var newRatio = pos.y / pos.x; + var ratio = $target.data('ratio'); + imageSize = { + width: ratio > newRatio ? pos.x : pos.y / ratio, + height: ratio > newRatio ? pos.x * ratio : pos.y + }; + } else { + imageSize = { + width: pos.x, + height: pos.y + }; + } + + $target.css(imageSize); + }; + + /** + * remove media object + */ + this.removeMedia = this.wrapCommand(function () { + var $target = $(this.restoreTarget()).detach(); + context.triggerEvent('media.delete', $target, $editable); + }); + + /** + * returns whether editable area has focus or not. + */ + this.hasFocus = function () { + return $editable.is(':focus'); + }; + + /** + * set focus + */ + this.focus = function () { + // [workaround] Screen will move when page is scolled in IE. + // - do focus when not focused + if (!this.hasFocus()) { + $editable.focus(); + } + }; + + /** + * returns whether contents is empty or not. + * @return {Boolean} + */ + this.isEmpty = function () { + return dom.isEmpty($editable[0]) || dom.emptyPara === $editable.html(); + }; + + /** + * Removes all contents and restores the editable instance to an _emptyPara_. + */ + this.empty = function () { + context.invoke('code', dom.emptyPara); + }; + }; + + var Clipboard = function (context) { + var self = this; + + var $editable = context.layoutInfo.editable; + + this.events = { + 'summernote.keydown': function (we, e) { + if (self.needKeydownHook()) { + if ((e.ctrlKey || e.metaKey) && e.keyCode === key.code.V) { + context.invoke('editor.saveRange'); + self.$paste.focus(); + + setTimeout(function () { + self.pasteByHook(); + }, 0); + } + } + } + }; + + this.needKeydownHook = function () { + return (agent.isMSIE && agent.browserVersion > 10) || agent.isFF; + }; + + this.initialize = function () { + // [workaround] getting image from clipboard + // - IE11 and Firefox: CTRL+v hook + // - Webkit: event.clipboardData + if (this.needKeydownHook()) { + this.$paste = $('<div tabindex="-1" />').attr('contenteditable', true).css({ + position: 'absolute', + left: -100000, + opacity: 0 + }); + $editable.before(this.$paste); + + this.$paste.on('paste', function (event) { + context.triggerEvent('paste', event); + }); + } else { + $editable.on('paste', this.pasteByEvent); + } + }; + + this.destroy = function () { + if (this.needKeydownHook()) { + this.$paste.remove(); + this.$paste = null; + } + }; + + this.pasteByHook = function () { + var node = this.$paste[0].firstChild; + + if (dom.isImg(node)) { + var dataURI = node.src; + var decodedData = atob(dataURI.split(',')[1]); + var array = new Uint8Array(decodedData.length); + for (var i = 0; i < decodedData.length; i++) { + array[i] = decodedData.charCodeAt(i); + } + + var blob = new Blob([array], { type: 'image/png' }); + blob.name = 'clipboard.png'; + + context.invoke('editor.restoreRange'); + context.invoke('editor.focus'); + context.invoke('editor.insertImagesOrCallback', [blob]); + } else { + var pasteContent = $('<div />').html(this.$paste.html()).html(); + context.invoke('editor.restoreRange'); + context.invoke('editor.focus'); + + if (pasteContent) { + context.invoke('editor.pasteHTML', pasteContent); + } + } + + this.$paste.empty(); + }; + + /** + * paste by clipboard event + * + * @param {Event} event + */ + this.pasteByEvent = function (event) { + var clipboardData = event.originalEvent.clipboardData; + if (clipboardData && clipboardData.items && clipboardData.items.length) { + var item = list.head(clipboardData.items); + if (item.kind === 'file' && item.type.indexOf('image/') !== -1) { + context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]); + } + context.invoke('editor.afterCommand'); + } + }; + }; + + var Dropzone = function (context) { + var $document = $(document); + var $editor = context.layoutInfo.editor; + var $editable = context.layoutInfo.editable; + var options = context.options; + var lang = options.langInfo; + var documentEventHandlers = {}; + + var $dropzone = $([ + '<div class="note-dropzone">', + ' <div class="note-dropzone-message"/>', + '</div>' + ].join('')).prependTo($editor); + + var detachDocumentEvent = function () { + Object.keys(documentEventHandlers).forEach(function (key) { + $document.off(key.substr(2).toLowerCase(), documentEventHandlers[key]); + }); + documentEventHandlers = {}; + }; + + /** + * attach Drag and Drop Events + */ + this.initialize = function () { + if (options.disableDragAndDrop) { + // prevent default drop event + documentEventHandlers.onDrop = function (e) { + e.preventDefault(); + }; + $document.on('drop', documentEventHandlers.onDrop); + } else { + this.attachDragAndDropEvent(); + } + }; + + /** + * attach Drag and Drop Events + */ + this.attachDragAndDropEvent = function () { + var collection = $(), + $dropzoneMessage = $dropzone.find('.note-dropzone-message'); + + documentEventHandlers.onDragenter = function (e) { + var isCodeview = context.invoke('codeview.isActivated'); + var hasEditorSize = $editor.width() > 0 && $editor.height() > 0; + if (!isCodeview && !collection.length && hasEditorSize) { + $editor.addClass('dragover'); + $dropzone.width($editor.width()); + $dropzone.height($editor.height()); + $dropzoneMessage.text(lang.image.dragImageHere); + } + collection = collection.add(e.target); + }; + + documentEventHandlers.onDragleave = function (e) { + collection = collection.not(e.target); + if (!collection.length) { + $editor.removeClass('dragover'); + } + }; + + documentEventHandlers.onDrop = function () { + collection = $(); + $editor.removeClass('dragover'); + }; + + // show dropzone on dragenter when dragging a object to document + // -but only if the editor is visible, i.e. has a positive width and height + $document.on('dragenter', documentEventHandlers.onDragenter) + .on('dragleave', documentEventHandlers.onDragleave) + .on('drop', documentEventHandlers.onDrop); + + // change dropzone's message on hover. + $dropzone.on('dragenter', function () { + $dropzone.addClass('hover'); + $dropzoneMessage.text(lang.image.dropImage); + }).on('dragleave', function () { + $dropzone.removeClass('hover'); + $dropzoneMessage.text(lang.image.dragImageHere); + }); + + // attach dropImage + $dropzone.on('drop', function (event) { + var dataTransfer = event.originalEvent.dataTransfer; + + if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { + event.preventDefault(); + $editable.focus(); + context.invoke('editor.insertImagesOrCallback', dataTransfer.files); + } else { + $.each(dataTransfer.types, function (idx, type) { + var content = dataTransfer.getData(type); + + if (type.toLowerCase().indexOf('text') > -1) { + context.invoke('editor.pasteHTML', content); + } else { + $(content).each(function () { + context.invoke('editor.insertNode', this); + }); + } + }); + } + }).on('dragover', false); // prevent default dragover event + }; + + this.destroy = function () { + detachDocumentEvent(); + }; + }; + + + var CodeMirror; + if (agent.hasCodeMirror) { + if (agent.isSupportAmd) { + require(['codemirror'], function (cm) { + CodeMirror = cm; + }); + } else { + CodeMirror = window.CodeMirror; + } + } + + /** + * @class Codeview + */ + var Codeview = function (context) { + var $editor = context.layoutInfo.editor; + var $editable = context.layoutInfo.editable; + var $codable = context.layoutInfo.codable; + var options = context.options; + + this.sync = function () { + var isCodeview = this.isActivated(); + if (isCodeview && agent.hasCodeMirror) { + $codable.data('cmEditor').save(); + } + }; + + /** + * @return {Boolean} + */ + this.isActivated = function () { + return $editor.hasClass('codeview'); + }; + + /** + * toggle codeview + */ + this.toggle = function () { + if (this.isActivated()) { + this.deactivate(); + } else { + this.activate(); + } + context.triggerEvent('codeview.toggled'); + }; + + /** + * activate code view + */ + this.activate = function () { + $codable.val(dom.html($editable, options.prettifyHtml)); + $codable.height($editable.height()); + + context.invoke('toolbar.updateCodeview', true); + $editor.addClass('codeview'); + $codable.focus(); + + // activate CodeMirror as codable + if (agent.hasCodeMirror) { + var cmEditor = CodeMirror.fromTextArea($codable[0], options.codemirror); + + // CodeMirror TernServer + if (options.codemirror.tern) { + var server = new CodeMirror.TernServer(options.codemirror.tern); + cmEditor.ternServer = server; + cmEditor.on('cursorActivity', function (cm) { + server.updateArgHints(cm); + }); + } + + // CodeMirror hasn't Padding. + cmEditor.setSize(null, $editable.outerHeight()); + $codable.data('cmEditor', cmEditor); + } + }; + + /** + * deactivate code view + */ + this.deactivate = function () { + // deactivate CodeMirror as codable + if (agent.hasCodeMirror) { + var cmEditor = $codable.data('cmEditor'); + $codable.val(cmEditor.getValue()); + cmEditor.toTextArea(); + } + + var value = dom.value($codable, options.prettifyHtml) || dom.emptyPara; + var isChange = $editable.html() !== value; + + $editable.html(value); + $editable.height(options.height ? $codable.height() : 'auto'); + $editor.removeClass('codeview'); + + if (isChange) { + context.triggerEvent('change', $editable.html(), $editable); + } + + $editable.focus(); + + context.invoke('toolbar.updateCodeview', false); + }; + + this.destroy = function () { + if (this.isActivated()) { + this.deactivate(); + } + }; + }; + + var EDITABLE_PADDING = 24; + + var Statusbar = function (context) { + var $document = $(document); + var $statusbar = context.layoutInfo.statusbar; + var $editable = context.layoutInfo.editable; + var options = context.options; + + this.initialize = function () { + if (options.airMode || options.disableResizeEditor) { + return; + } + + $statusbar.on('mousedown', function (event) { + event.preventDefault(); + event.stopPropagation(); + + var editableTop = $editable.offset().top - $document.scrollTop(); + + $document.on('mousemove', function (event) { + var height = event.clientY - (editableTop + EDITABLE_PADDING); + + height = (options.minheight > 0) ? Math.max(height, options.minheight) : height; + height = (options.maxHeight > 0) ? Math.min(height, options.maxHeight) : height; + + $editable.height(height); + }).one('mouseup', function () { + $document.off('mousemove'); + }); + }); + }; + + this.destroy = function () { + $statusbar.off(); + $statusbar.remove(); + }; + }; + + var Fullscreen = function (context) { + var $editor = context.layoutInfo.editor; + var $toolbar = context.layoutInfo.toolbar; + var $editable = context.layoutInfo.editable; + var $codable = context.layoutInfo.codable; + + var $window = $(window); + var $scrollbar = $('html, body'); + + /** + * toggle fullscreen + */ + this.toggle = function () { + var resize = function (size) { + $editable.css('height', size.h); + $codable.css('height', size.h); + if ($codable.data('cmeditor')) { + $codable.data('cmeditor').setsize(null, size.h); + } + }; + + $editor.toggleClass('fullscreen'); + if (this.isFullscreen()) { + $editable.data('orgHeight', $editable.css('height')); + + $window.on('resize', function () { + resize({ + h: $window.height() - $toolbar.outerHeight() + }); + }).trigger('resize'); + + $scrollbar.css('overflow', 'hidden'); + } else { + $window.off('resize'); + resize({ + h: $editable.data('orgHeight') + }); + $scrollbar.css('overflow', 'visible'); + } + + context.invoke('toolbar.updateFullscreen', this.isFullscreen()); + }; + + this.isFullscreen = function () { + return $editor.hasClass('fullscreen'); + }; + }; + + var Handle = function (context) { + var self = this; + + var $document = $(document); + var $editingArea = context.layoutInfo.editingArea; + var options = context.options; + + this.events = { + 'summernote.mousedown': function (we, e) { + if (self.update(e.target)) { + e.preventDefault(); + } + }, + 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function () { + self.update(); + } + }; + + this.initialize = function () { + this.$handle = $([ + '<div class="note-handle">', + '<div class="note-control-selection">', + '<div class="note-control-selection-bg"></div>', + '<div class="note-control-holder note-control-nw"></div>', + '<div class="note-control-holder note-control-ne"></div>', + '<div class="note-control-holder note-control-sw"></div>', + '<div class="', + (options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'), + ' note-control-se"></div>', + (options.disableResizeImage ? '' : '<div class="note-control-selection-info"></div>'), + '</div>', + '</div>' + ].join('')).prependTo($editingArea); + + this.$handle.on('mousedown', function (event) { + if (dom.isControlSizing(event.target)) { + event.preventDefault(); + event.stopPropagation(); + + var $target = self.$handle.find('.note-control-selection').data('target'), + posStart = $target.offset(), + scrollTop = $document.scrollTop(); + + $document.on('mousemove', function (event) { + context.invoke('editor.resizeTo', { + x: event.clientX - posStart.left, + y: event.clientY - (posStart.top - scrollTop) + }, $target, !event.shiftKey); + + self.update($target[0]); + }).one('mouseup', function (e) { + e.preventDefault(); + $document.off('mousemove'); + context.invoke('editor.afterCommand'); + }); + + if (!$target.data('ratio')) { // original ratio. + $target.data('ratio', $target.height() / $target.width()); + } + } + }); + }; + + this.destroy = function () { + this.$handle.remove(); + }; + + this.update = function (target) { + var isImage = dom.isImg(target); + var $selection = this.$handle.find('.note-control-selection'); + + context.invoke('imagePopover.update', target); + + if (isImage) { + var $image = $(target); + var pos = $image.position(); + + // include margin + var imageSize = { + w: $image.outerWidth(true), + h: $image.outerHeight(true) + }; + + $selection.css({ + display: 'block', + left: pos.left, + top: pos.top, + width: imageSize.w, + height: imageSize.h + }).data('target', $image); // save current image element. + + var sizingText = imageSize.w + 'x' + imageSize.h; + $selection.find('.note-control-selection-info').text(sizingText); + context.invoke('editor.saveTarget', target); + } else { + this.hide(); + } + + return isImage; + }; + + /** + * hide + * + * @param {jQuery} $handle + */ + this.hide = function () { + context.invoke('editor.clearTarget'); + this.$handle.children().hide(); + }; + }; + + var AutoLink = function (context) { + var self = this; + var defaultScheme = 'http://'; + var linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i; + + this.events = { + 'summernote.keyup': function (we, e) { + if (!e.isDefaultPrevented()) { + self.handleKeyup(e); + } + }, + 'summernote.keydown': function (we, e) { + self.handleKeydown(e); + } + }; + + this.initialize = function () { + this.lastWordRange = null; + }; + + this.destroy = function () { + this.lastWordRange = null; + }; + + this.replace = function () { + if (!this.lastWordRange) { + return; + } + + var keyword = this.lastWordRange.toString(); + var match = keyword.match(linkPattern); + + if (match && (match[1] || match[2])) { + var link = match[1] ? keyword : defaultScheme + keyword; + var node = $('<a />').html(keyword).attr('href', link)[0]; + + this.lastWordRange.insertNode(node); + this.lastWordRange = null; + context.invoke('editor.focus'); + } + + }; + + this.handleKeydown = function (e) { + if (list.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { + var wordRange = context.invoke('editor.createRange').getWordRange(); + this.lastWordRange = wordRange; + } + }; + + this.handleKeyup = function (e) { + if (list.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { + this.replace(); + } + }; + }; + + /** + * textarea auto sync. + */ + var AutoSync = function (context) { + var $note = context.layoutInfo.note; + + this.events = { + 'summernote.change': function () { + $note.val(context.invoke('code')); + } + }; + + this.shouldInitialize = function () { + return dom.isTextarea($note[0]); + }; + }; + + var Placeholder = function (context) { + var self = this; + var $editingArea = context.layoutInfo.editingArea; + var options = context.options; + + this.events = { + 'summernote.init summernote.change': function () { + self.update(); + }, + 'summernote.codeview.toggled': function () { + self.update(); + } + }; + + this.shouldInitialize = function () { + return !!options.placeholder; + }; + + this.initialize = function () { + this.$placeholder = $('<div class="note-placeholder">'); + this.$placeholder.on('click', function () { + context.invoke('focus'); + }).text(options.placeholder).prependTo($editingArea); + }; + + this.destroy = function () { + this.$placeholder.remove(); + }; + + this.update = function () { + var isShow = !context.invoke('codeview.isActivated') && context.invoke('editor.isEmpty'); + this.$placeholder.toggle(isShow); + }; + }; + + var Buttons = function (context) { + var self = this; + var ui = $.summernote.ui; + + var $toolbar = context.layoutInfo.toolbar; + var options = context.options; + var lang = options.langInfo; + + var invertedKeyMap = func.invertObject(options.keyMap[agent.isMac ? 'mac' : 'pc']); + + var representShortcut = this.representShortcut = function (editorMethod) { + var shortcut = invertedKeyMap[editorMethod]; + if (!options.shortcuts || !shortcut) { + return ''; + } + + if (agent.isMac) { + shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧'); + } + + shortcut = shortcut.replace('BACKSLASH', '\\') + .replace('SLASH', '/') + .replace('LEFTBRACKET', '[') + .replace('RIGHTBRACKET', ']'); + + return ' (' + shortcut + ')'; + }; + + this.initialize = function () { + this.addToolbarButtons(); + this.addImagePopoverButtons(); + this.addLinkPopoverButtons(); + this.fontInstalledMap = {}; + }; + + this.destroy = function () { + delete this.fontInstalledMap; + }; + + this.isFontInstalled = function (name) { + if (!self.fontInstalledMap.hasOwnProperty(name)) { + self.fontInstalledMap[name] = agent.isFontInstalled(name) || + list.contains(options.fontNamesIgnoreCheck, name); + } + + return self.fontInstalledMap[name]; + }; + + this.addToolbarButtons = function () { + context.memo('button.style', function () { + return ui.buttonGroup([ + ui.button({ + className: 'dropdown-toggle', + contents: ui.icon(options.icons.magic) + ' ' + ui.icon(options.icons.caret, 'span'), + tooltip: lang.style.style, + data: { + toggle: 'dropdown' + } + }), + ui.dropdown({ + className: 'dropdown-style', + items: context.options.styleTags, + template: function (item) { + + if (typeof item === 'string') { + item = { tag: item, title: (lang.style.hasOwnProperty(item) ? lang.style[item] : item) }; + } + + var tag = item.tag; + var title = item.title; + var style = item.style ? ' style="' + item.style + '" ' : ''; + var className = item.className ? ' class="' + item.className + '"' : ''; + + return '<' + tag + style + className + '>' + title + '</' + tag + '>'; + }, + click: context.createInvokeHandler('editor.formatBlock') + }) + ]).render(); + }); + + context.memo('button.bold', function () { + return ui.button({ + className: 'note-btn-bold', + contents: ui.icon(options.icons.bold), + tooltip: lang.font.bold + representShortcut('bold'), + click: context.createInvokeHandler('editor.bold') + }).render(); + }); + + context.memo('button.italic', function () { + return ui.button({ + className: 'note-btn-italic', + contents: ui.icon(options.icons.italic), + tooltip: lang.font.italic + representShortcut('italic'), + click: context.createInvokeHandler('editor.italic') + }).render(); + }); + + context.memo('button.underline', function () { + return ui.button({ + className: 'note-btn-underline', + contents: ui.icon(options.icons.underline), + tooltip: lang.font.underline + representShortcut('underline'), + click: context.createInvokeHandler('editor.underline') + }).render(); + }); + + context.memo('button.clear', function () { + return ui.button({ + contents: ui.icon(options.icons.eraser), + tooltip: lang.font.clear + representShortcut('removeFormat'), + click: context.createInvokeHandler('editor.removeFormat') + }).render(); + }); + + context.memo('button.strikethrough', function () { + return ui.button({ + className: 'note-btn-strikethrough', + contents: ui.icon(options.icons.strikethrough), + tooltip: lang.font.strikethrough + representShortcut('strikethrough'), + click: context.createInvokeHandler('editor.strikethrough') + }).render(); + }); + + context.memo('button.superscript', function () { + return ui.button({ + className: 'note-btn-superscript', + contents: ui.icon(options.icons.superscript), + tooltip: lang.font.superscript, + click: context.createInvokeHandler('editor.superscript') + }).render(); + }); + + context.memo('button.subscript', function () { + return ui.button({ + className: 'note-btn-subscript', + contents: ui.icon(options.icons.subscript), + tooltip: lang.font.subscript, + click: context.createInvokeHandler('editor.subscript') + }).render(); + }); + + context.memo('button.fontname', function () { + return ui.buttonGroup([ + ui.button({ + className: 'dropdown-toggle', + contents: '<span class="note-current-fontname"/> ' + ui.icon(options.icons.caret, 'span'), + tooltip: lang.font.name, + data: { + toggle: 'dropdown' + } + }), + ui.dropdownCheck({ + className: 'dropdown-fontname', + checkClassName: options.icons.menuCheck, + items: options.fontNames.filter(self.isFontInstalled), + template: function (item) { + return '<span style="font-family:' + item + '">' + item + '</span>'; + }, + click: context.createInvokeHandler('editor.fontName') + }) + ]).render(); + }); + + context.memo('button.fontsize', function () { + return ui.buttonGroup([ + ui.button({ + className: 'dropdown-toggle', + contents: '<span class="note-current-fontsize"/>' + ui.icon(options.icons.caret, 'span'), + tooltip: lang.font.size, + data: { + toggle: 'dropdown' + } + }), + ui.dropdownCheck({ + className: 'dropdown-fontsize', + checkClassName: options.icons.menuCheck, + items: options.fontSizes, + click: context.createInvokeHandler('editor.fontSize') + }) + ]).render(); + }); + + context.memo('button.color', function () { + return ui.buttonGroup({ + className: 'note-color', + children: [ + ui.button({ + className: 'note-current-color-button', + contents: ui.icon(options.icons.font + ' note-recent-color'), + tooltip: lang.color.recent, + click: function (e) { + var $button = $(e.currentTarget); + context.invoke('editor.color', { + backColor: $button.attr('data-backColor'), + foreColor: $button.attr('data-foreColor') + }); + }, + callback: function ($button) { + var $recentColor = $button.find('.note-recent-color'); + $recentColor.css('background-color', '#FFFF00'); + $button.attr('data-backColor', '#FFFF00'); + } + }), + ui.button({ + className: 'dropdown-toggle', + contents: ui.icon(options.icons.caret, 'span'), + tooltip: lang.color.more, + data: { + toggle: 'dropdown' + } + }), + ui.dropdown({ + items: [ + '<li>', + '<div class="btn-group">', + ' <div class="note-palette-title">' + lang.color.background + '</div>', + ' <div>', + ' <button type="button" class="note-color-reset btn btn-default" data-event="backColor" data-value="inherit">', + lang.color.transparent, + ' </button>', + ' </div>', + ' <div class="note-holder" data-event="backColor"/>', + '</div>', + '<div class="btn-group">', + ' <div class="note-palette-title">' + lang.color.foreground + '</div>', + ' <div>', + ' <button type="button" class="note-color-reset btn btn-default" data-event="removeFormat" data-value="foreColor">', + lang.color.resetToDefault, + ' </button>', + ' </div>', + ' <div class="note-holder" data-event="foreColor"/>', + '</div>', + '</li>' + ].join(''), + callback: function ($dropdown) { + $dropdown.find('.note-holder').each(function () { + var $holder = $(this); + $holder.append(ui.palette({ + colors: options.colors, + eventName: $holder.data('event') + }).render()); + }); + }, + click: function (event) { + var $button = $(event.target); + var eventName = $button.data('event'); + var value = $button.data('value'); + + if (eventName && value) { + var key = eventName === 'backColor' ? 'background-color' : 'color'; + var $color = $button.closest('.note-color').find('.note-recent-color'); + var $currentButton = $button.closest('.note-color').find('.note-current-color-button'); + + $color.css(key, value); + $currentButton.attr('data-' + eventName, value); + context.invoke('editor.' + eventName, value); + } + } + }) + ] + }).render(); + }); + + context.memo('button.ul', function () { + return ui.button({ + contents: ui.icon(options.icons.unorderedlist), + tooltip: lang.lists.unordered + representShortcut('insertUnorderedList'), + click: context.createInvokeHandler('editor.insertUnorderedList') + }).render(); + }); + + context.memo('button.ol', function () { + return ui.button({ + contents: ui.icon(options.icons.orderedlist), + tooltip: lang.lists.ordered + representShortcut('insertOrderedList'), + click: context.createInvokeHandler('editor.insertOrderedList') + }).render(); + }); + + var justifyLeft = ui.button({ + contents: ui.icon(options.icons.alignLeft), + tooltip: lang.paragraph.left + representShortcut('justifyLeft'), + click: context.createInvokeHandler('editor.justifyLeft') + }); + + var justifyCenter = ui.button({ + contents: ui.icon(options.icons.alignCenter), + tooltip: lang.paragraph.center + representShortcut('justifyCenter'), + click: context.createInvokeHandler('editor.justifyCenter') + }); + + var justifyRight = ui.button({ + contents: ui.icon(options.icons.alignRight), + tooltip: lang.paragraph.right + representShortcut('justifyRight'), + click: context.createInvokeHandler('editor.justifyRight') + }); + + var justifyFull = ui.button({ + contents: ui.icon(options.icons.alignJustify), + tooltip: lang.paragraph.justify + representShortcut('justifyFull'), + click: context.createInvokeHandler('editor.justifyFull') + }); + + var outdent = ui.button({ + contents: ui.icon(options.icons.outdent), + tooltip: lang.paragraph.outdent + representShortcut('outdent'), + click: context.createInvokeHandler('editor.outdent') + }); + + var indent = ui.button({ + contents: ui.icon(options.icons.indent), + tooltip: lang.paragraph.indent + representShortcut('indent'), + click: context.createInvokeHandler('editor.indent') + }); + + context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render')); + context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render')); + context.memo('button.justifyRight', func.invoke(justifyRight, 'render')); + context.memo('button.justifyFull', func.invoke(justifyFull, 'render')); + context.memo('button.outdent', func.invoke(outdent, 'render')); + context.memo('button.indent', func.invoke(indent, 'render')); + + context.memo('button.paragraph', function () { + return ui.buttonGroup([ + ui.button({ + className: 'dropdown-toggle', + contents: ui.icon(options.icons.alignLeft) + ' ' + ui.icon(options.icons.caret, 'span'), + tooltip: lang.paragraph.paragraph, + data: { + toggle: 'dropdown' + } + }), + ui.dropdown([ + ui.buttonGroup({ + className: 'note-align', + children: [justifyLeft, justifyCenter, justifyRight, justifyFull] + }), + ui.buttonGroup({ + className: 'note-list', + children: [outdent, indent] + }) + ]) + ]).render(); + }); + + context.memo('button.height', function () { + return ui.buttonGroup([ + ui.button({ + className: 'dropdown-toggle', + contents: ui.icon(options.icons.textHeight) + ' ' + ui.icon(options.icons.caret, 'span'), + tooltip: lang.font.height, + data: { + toggle: 'dropdown' + } + }), + ui.dropdownCheck({ + items: options.lineHeights, + checkClassName: options.icons.menuCheck, + className: 'dropdown-line-height', + click: context.createInvokeHandler('editor.lineHeight') + }) + ]).render(); + }); + + context.memo('button.table', function () { + return ui.buttonGroup([ + ui.button({ + className: 'dropdown-toggle', + contents: ui.icon(options.icons.table) + ' ' + ui.icon(options.icons.caret, 'span'), + tooltip: lang.table.table, + data: { + toggle: 'dropdown' + } + }), + ui.dropdown({ + className: 'note-table', + items: [ + '<div class="note-dimension-picker">', + ' <div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"/>', + ' <div class="note-dimension-picker-highlighted"/>', + ' <div class="note-dimension-picker-unhighlighted"/>', + '</div>', + '<div class="note-dimension-display">1 x 1</div>' + ].join('') + }) + ], { + callback: function ($node) { + var $catcher = $node.find('.note-dimension-picker-mousecatcher'); + $catcher.css({ + width: options.insertTableMaxSize.col + 'em', + height: options.insertTableMaxSize.row + 'em' + }).mousedown(context.createInvokeHandler('editor.insertTable')) + .on('mousemove', self.tableMoveHandler); + } + }).render(); + }); + + context.memo('button.link', function () { + return ui.button({ + contents: ui.icon(options.icons.link), + tooltip: lang.link.link + representShortcut('linkDialog.show'), + click: context.createInvokeHandler('linkDialog.show') + }).render(); + }); + + context.memo('button.picture', function () { + return ui.button({ + contents: ui.icon(options.icons.picture), + tooltip: lang.image.image, + click: context.createInvokeHandler('imageDialog.show') + }).render(); + }); + + context.memo('button.video', function () { + return ui.button({ + contents: ui.icon(options.icons.video), + tooltip: lang.video.video, + click: context.createInvokeHandler('videoDialog.show') + }).render(); + }); + + context.memo('button.hr', function () { + return ui.button({ + contents: ui.icon(options.icons.minus), + tooltip: lang.hr.insert + representShortcut('insertHorizontalRule'), + click: context.createInvokeHandler('editor.insertHorizontalRule') + }).render(); + }); + + context.memo('button.fullscreen', function () { + return ui.button({ + className: 'btn-fullscreen', + contents: ui.icon(options.icons.arrowsAlt), + tooltip: lang.options.fullscreen, + click: context.createInvokeHandler('fullscreen.toggle') + }).render(); + }); + + context.memo('button.codeview', function () { + return ui.button({ + className: 'btn-codeview', + contents: ui.icon(options.icons.code), + tooltip: lang.options.codeview, + click: context.createInvokeHandler('codeview.toggle') + }).render(); + }); + + context.memo('button.redo', function () { + return ui.button({ + contents: ui.icon(options.icons.redo), + tooltip: lang.history.redo + representShortcut('redo'), + click: context.createInvokeHandler('editor.redo') + }).render(); + }); + + context.memo('button.undo', function () { + return ui.button({ + contents: ui.icon(options.icons.undo), + tooltip: lang.history.undo + representShortcut('undo'), + click: context.createInvokeHandler('editor.undo') + }).render(); + }); + + context.memo('button.help', function () { + return ui.button({ + contents: ui.icon(options.icons.question), + tooltip: lang.options.help, + click: context.createInvokeHandler('helpDialog.show') + }).render(); + }); + }; + + /** + * image : [ + * ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], + * ['float', ['floatLeft', 'floatRight', 'floatNone' ]], + * ['remove', ['removeMedia']] + * ], + */ + this.addImagePopoverButtons = function () { + // Image Size Buttons + context.memo('button.imageSize100', function () { + return ui.button({ + contents: '<span class="note-fontsize-10">100%</span>', + tooltip: lang.image.resizeFull, + click: context.createInvokeHandler('editor.resize', '1') + }).render(); + }); + context.memo('button.imageSize50', function () { + return ui.button({ + contents: '<span class="note-fontsize-10">50%</span>', + tooltip: lang.image.resizeHalf, + click: context.createInvokeHandler('editor.resize', '0.5') + }).render(); + }); + context.memo('button.imageSize25', function () { + return ui.button({ + contents: '<span class="note-fontsize-10">25%</span>', + tooltip: lang.image.resizeQuarter, + click: context.createInvokeHandler('editor.resize', '0.25') + }).render(); + }); + + // Float Buttons + context.memo('button.floatLeft', function () { + return ui.button({ + contents: ui.icon(options.icons.alignLeft), + tooltip: lang.image.floatLeft, + click: context.createInvokeHandler('editor.floatMe', 'left') + }).render(); + }); + + context.memo('button.floatRight', function () { + return ui.button({ + contents: ui.icon(options.icons.alignRight), + tooltip: lang.image.floatRight, + click: context.createInvokeHandler('editor.floatMe', 'right') + }).render(); + }); + + context.memo('button.floatNone', function () { + return ui.button({ + contents: ui.icon(options.icons.alignJustify), + tooltip: lang.image.floatNone, + click: context.createInvokeHandler('editor.floatMe', 'none') + }).render(); + }); + + // Remove Buttons + context.memo('button.removeMedia', function () { + return ui.button({ + contents: ui.icon(options.icons.trash), + tooltip: lang.image.remove, + click: context.createInvokeHandler('editor.removeMedia') + }).render(); + }); + }; + + this.addLinkPopoverButtons = function () { + context.memo('button.linkDialogShow', function () { + return ui.button({ + contents: ui.icon(options.icons.link), + tooltip: lang.link.edit, + click: context.createInvokeHandler('linkDialog.show') + }).render(); + }); + + context.memo('button.unlink', function () { + return ui.button({ + contents: ui.icon(options.icons.unlink), + tooltip: lang.link.unlink, + click: context.createInvokeHandler('editor.unlink') + }).render(); + }); + }; + + this.build = function ($container, groups) { + for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) { + var group = groups[groupIdx]; + var groupName = group[0]; + var buttons = group[1]; + + var $group = ui.buttonGroup({ + className: 'note-' + groupName + }).render(); + + for (var idx = 0, len = buttons.length; idx < len; idx++) { + var button = context.memo('button.' + buttons[idx]); + if (button) { + $group.append(typeof button === 'function' ? button(context) : button); + } + } + $group.appendTo($container); + } + }; + + this.updateCurrentStyle = function () { + var styleInfo = context.invoke('editor.currentStyle'); + this.updateBtnStates({ + '.note-btn-bold': function () { + return styleInfo['font-bold'] === 'bold'; + }, + '.note-btn-italic': function () { + return styleInfo['font-italic'] === 'italic'; + }, + '.note-btn-underline': function () { + return styleInfo['font-underline'] === 'underline'; + }, + '.note-btn-subscript': function () { + return styleInfo['font-subscript'] === 'subscript'; + }, + '.note-btn-superscript': function () { + return styleInfo['font-superscript'] === 'superscript'; + }, + '.note-btn-strikethrough': function () { + return styleInfo['font-strikethrough'] === 'strikethrough'; + } + }); + + if (styleInfo['font-family']) { + var fontNames = styleInfo['font-family'].split(',').map(function (name) { + return name.replace(/[\'\"]/g, '') + .replace(/\s+$/, '') + .replace(/^\s+/, ''); + }); + var fontName = list.find(fontNames, self.isFontInstalled); + + $toolbar.find('.dropdown-fontname li a').each(function () { + // always compare string to avoid creating another func. + var isChecked = ($(this).data('value') + '') === (fontName + ''); + this.className = isChecked ? 'checked' : ''; + }); + $toolbar.find('.note-current-fontname').text(fontName); + } + + if (styleInfo['font-size']) { + var fontSize = styleInfo['font-size']; + $toolbar.find('.dropdown-fontsize li a').each(function () { + // always compare with string to avoid creating another func. + var isChecked = ($(this).data('value') + '') === (fontSize + ''); + this.className = isChecked ? 'checked' : ''; + }); + $toolbar.find('.note-current-fontsize').text(fontSize); + } + + if (styleInfo['line-height']) { + var lineHeight = styleInfo['line-height']; + $toolbar.find('.dropdown-line-height li a').each(function () { + // always compare with string to avoid creating another func. + var isChecked = ($(this).data('value') + '') === (lineHeight + ''); + this.className = isChecked ? 'checked' : ''; + }); + } + }; + + this.updateBtnStates = function (infos) { + $.each(infos, function (selector, pred) { + ui.toggleBtnActive($toolbar.find(selector), pred()); + }); + }; + + this.tableMoveHandler = function (event) { + var PX_PER_EM = 18; + var $picker = $(event.target.parentNode); // target is mousecatcher + var $dimensionDisplay = $picker.next(); + var $catcher = $picker.find('.note-dimension-picker-mousecatcher'); + var $highlighted = $picker.find('.note-dimension-picker-highlighted'); + var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted'); + + var posOffset; + // HTML5 with jQuery - e.offsetX is undefined in Firefox + if (event.offsetX === undefined) { + var posCatcher = $(event.target).offset(); + posOffset = { + x: event.pageX - posCatcher.left, + y: event.pageY - posCatcher.top + }; + } else { + posOffset = { + x: event.offsetX, + y: event.offsetY + }; + } + + var dim = { + c: Math.ceil(posOffset.x / PX_PER_EM) || 1, + r: Math.ceil(posOffset.y / PX_PER_EM) || 1 + }; + + $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' }); + $catcher.data('value', dim.c + 'x' + dim.r); + + if (3 < dim.c && dim.c < options.insertTableMaxSize.col) { + $unhighlighted.css({ width: dim.c + 1 + 'em'}); + } + + if (3 < dim.r && dim.r < options.insertTableMaxSize.row) { + $unhighlighted.css({ height: dim.r + 1 + 'em'}); + } + + $dimensionDisplay.html(dim.c + ' x ' + dim.r); + }; + }; + + var Toolbar = function (context) { + var ui = $.summernote.ui; + + var $note = context.layoutInfo.note; + var $toolbar = context.layoutInfo.toolbar; + var options = context.options; + + this.shouldInitialize = function () { + return !options.airMode; + }; + + this.initialize = function () { + options.toolbar = options.toolbar || []; + + if (!options.toolbar.length) { + $toolbar.hide(); + } else { + context.invoke('buttons.build', $toolbar, options.toolbar); + } + + if (options.toolbarContainer) { + $toolbar.appendTo(options.toolbarContainer); + } + + $note.on('summernote.keyup summernote.mouseup summernote.change', function () { + context.invoke('buttons.updateCurrentStyle'); + }); + + context.invoke('buttons.updateCurrentStyle'); + }; + + this.destroy = function () { + $toolbar.children().remove(); + }; + + this.updateFullscreen = function (isFullscreen) { + ui.toggleBtnActive($toolbar.find('.btn-fullscreen'), isFullscreen); + }; + + this.updateCodeview = function (isCodeview) { + ui.toggleBtnActive($toolbar.find('.btn-codeview'), isCodeview); + if (isCodeview) { + this.deactivate(); + } else { + this.activate(); + } + }; + + this.activate = function (isIncludeCodeview) { + var $btn = $toolbar.find('button'); + if (!isIncludeCodeview) { + $btn = $btn.not('.btn-codeview'); + } + ui.toggleBtn($btn, true); + }; + + this.deactivate = function (isIncludeCodeview) { + var $btn = $toolbar.find('button'); + if (!isIncludeCodeview) { + $btn = $btn.not('.btn-codeview'); + } + ui.toggleBtn($btn, false); + }; + }; + + var LinkDialog = function (context) { + var self = this; + var ui = $.summernote.ui; + + var $editor = context.layoutInfo.editor; + var options = context.options; + var lang = options.langInfo; + + this.initialize = function () { + var $container = options.dialogsInBody ? $(document.body) : $editor; + + var body = '<div class="form-group">' + + '<label>' + lang.link.textToDisplay + '</label>' + + '<input class="note-link-text form-control" type="text" />' + + '</div>' + + '<div class="form-group">' + + '<label>' + lang.link.url + '</label>' + + '<input class="note-link-url form-control" type="text" value="http://" />' + + '</div>' + + (!options.disableLinkTarget ? + '<div class="checkbox">' + + '<label>' + '<input type="checkbox" checked> ' + lang.link.openInNewWindow + '</label>' + + '</div>' : '' + ); + var footer = '<button href="#" class="btn btn-primary note-link-btn disabled" disabled>' + lang.link.insert + '</button>'; + + this.$dialog = ui.dialog({ + className: 'link-dialog', + title: lang.link.insert, + fade: options.dialogsFade, + body: body, + footer: footer + }).render().appendTo($container); + }; + + this.destroy = function () { + ui.hideDialog(this.$dialog); + this.$dialog.remove(); + }; + + this.bindEnterKey = function ($input, $btn) { + $input.on('keypress', function (event) { + if (event.keyCode === key.code.ENTER) { + $btn.trigger('click'); + } + }); + }; + + /** + * toggle update button + */ + this.toggleLinkBtn = function ($linkBtn, $linkText, $linkUrl) { + ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val()); + }; + + /** + * Show link dialog and set event handlers on dialog controls. + * + * @param {Object} linkInfo + * @return {Promise} + */ + this.showLinkDialog = function (linkInfo) { + return $.Deferred(function (deferred) { + var $linkText = self.$dialog.find('.note-link-text'), + $linkUrl = self.$dialog.find('.note-link-url'), + $linkBtn = self.$dialog.find('.note-link-btn'), + $openInNewWindow = self.$dialog.find('input[type=checkbox]'); + + ui.onDialogShown(self.$dialog, function () { + context.triggerEvent('dialog.shown'); + + // if no url was given, copy text to url + if (!linkInfo.url) { + linkInfo.url = linkInfo.text; + } + + $linkText.val(linkInfo.text); + + var handleLinkTextUpdate = function () { + self.toggleLinkBtn($linkBtn, $linkText, $linkUrl); + // if linktext was modified by keyup, + // stop cloning text from linkUrl + linkInfo.text = $linkText.val(); + }; + + $linkText.on('input', handleLinkTextUpdate).on('paste', function () { + setTimeout(handleLinkTextUpdate, 0); + }); + + var handleLinkUrlUpdate = function () { + self.toggleLinkBtn($linkBtn, $linkText, $linkUrl); + // display same link on `Text to display` input + // when create a new link + if (!linkInfo.text) { + $linkText.val($linkUrl.val()); + } + }; + + $linkUrl.on('input', handleLinkUrlUpdate).on('paste', function () { + setTimeout(handleLinkUrlUpdate, 0); + }).val(linkInfo.url).trigger('focus'); + + self.toggleLinkBtn($linkBtn, $linkText, $linkUrl); + self.bindEnterKey($linkUrl, $linkBtn); + self.bindEnterKey($linkText, $linkBtn); + + $openInNewWindow.prop('checked', linkInfo.isNewWindow); + + $linkBtn.one('click', function (event) { + event.preventDefault(); + + deferred.resolve({ + range: linkInfo.range, + url: $linkUrl.val(), + text: $linkText.val(), + isNewWindow: $openInNewWindow.is(':checked') + }); + self.$dialog.modal('hide'); + }); + }); + + ui.onDialogHidden(self.$dialog, function () { + // detach events + $linkText.off('input paste keypress'); + $linkUrl.off('input paste keypress'); + $linkBtn.off('click'); + + if (deferred.state() === 'pending') { + deferred.reject(); + } + }); + + ui.showDialog(self.$dialog); + }).promise(); + }; + + /** + * @param {Object} layoutInfo + */ + this.show = function () { + var linkInfo = context.invoke('editor.getLinkInfo'); + + context.invoke('editor.saveRange'); + this.showLinkDialog(linkInfo).then(function (linkInfo) { + context.invoke('editor.restoreRange'); + context.invoke('editor.createLink', linkInfo); + }).fail(function () { + context.invoke('editor.restoreRange'); + }); + }; + context.memo('help.linkDialog.show', options.langInfo.help['linkDialog.show']); + }; + + var LinkPopover = function (context) { + var self = this; + var ui = $.summernote.ui; + + var options = context.options; + + this.events = { + 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function () { + self.update(); + }, + 'summernote.dialog.shown': function () { + self.hide(); + } + }; + + this.shouldInitialize = function () { + return !list.isEmpty(options.popover.link); + }; + + this.initialize = function () { + this.$popover = ui.popover({ + className: 'note-link-popover', + callback: function ($node) { + var $content = $node.find('.popover-content'); + $content.prepend('<span><a target="_blank"></a> </span>'); + } + }).render().appendTo('body'); + var $content = this.$popover.find('.popover-content'); + + context.invoke('buttons.build', $content, options.popover.link); + }; + + this.destroy = function () { + this.$popover.remove(); + }; + + this.update = function () { + // Prevent focusing on editable when invoke('code') is executed + if (!context.invoke('editor.hasFocus')) { + this.hide(); + return; + } + + var rng = context.invoke('editor.createRange'); + if (rng.isCollapsed() && rng.isOnAnchor()) { + var anchor = dom.ancestor(rng.sc, dom.isAnchor); + var href = $(anchor).attr('href'); + this.$popover.find('a').attr('href', href).html(href); + + var pos = dom.posFromPlaceholder(anchor); + this.$popover.css({ + display: 'block', + left: pos.left, + top: pos.top + }); + } else { + this.hide(); + } + }; + + this.hide = function () { + this.$popover.hide(); + }; + }; + + var ImageDialog = function (context) { + var self = this; + var ui = $.summernote.ui; + + var $editor = context.layoutInfo.editor; + var options = context.options; + var lang = options.langInfo; + + this.initialize = function () { + var $container = options.dialogsInBody ? $(document.body) : $editor; + + var imageLimitation = ''; + if (options.maximumImageFileSize) { + var unit = Math.floor(Math.log(options.maximumImageFileSize) / Math.log(1024)); + var readableSize = (options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + + ' ' + ' KMGTP'[unit] + 'B'; + imageLimitation = '<small>' + lang.image.maximumFileSize + ' : ' + readableSize + '</small>'; + } + + var body = '<div class="form-group note-group-select-from-files">' + + '<label>' + lang.image.selectFromFiles + '</label>' + + '<input class="note-image-input form-control" type="file" name="files" accept="image/*" multiple="multiple" />' + + imageLimitation + + '</div>' + + '<div class="form-group note-group-image-url" style="overflow:auto;">' + + '<label>' + lang.image.url + '</label>' + + '<input class="note-image-url form-control col-md-12" type="text" />' + + '</div>'; + var footer = '<button href="#" class="btn btn-primary note-image-btn disabled" disabled>' + lang.image.insert + '</button>'; + + this.$dialog = ui.dialog({ + title: lang.image.insert, + fade: options.dialogsFade, + body: body, + footer: footer + }).render().appendTo($container); + }; + + this.destroy = function () { + ui.hideDialog(this.$dialog); + this.$dialog.remove(); + }; + + this.bindEnterKey = function ($input, $btn) { + $input.on('keypress', function (event) { + if (event.keyCode === key.code.ENTER) { + $btn.trigger('click'); + } + }); + }; + + this.show = function () { + context.invoke('editor.saveRange'); + this.showImageDialog().then(function (data) { + // [workaround] hide dialog before restore range for IE range focus + ui.hideDialog(self.$dialog); + context.invoke('editor.restoreRange'); + + if (typeof data === 'string') { // image url + context.invoke('editor.insertImage', data); + } else { // array of files + context.invoke('editor.insertImagesOrCallback', data); + } + }).fail(function () { + context.invoke('editor.restoreRange'); + }); + }; + + /** + * show image dialog + * + * @param {jQuery} $dialog + * @return {Promise} + */ + this.showImageDialog = function () { + return $.Deferred(function (deferred) { + var $imageInput = self.$dialog.find('.note-image-input'), + $imageUrl = self.$dialog.find('.note-image-url'), + $imageBtn = self.$dialog.find('.note-image-btn'); + + ui.onDialogShown(self.$dialog, function () { + context.triggerEvent('dialog.shown'); + + // Cloning imageInput to clear element. + $imageInput.replaceWith($imageInput.clone() + .on('change', function () { + deferred.resolve(this.files || this.value); + }) + .val('') + ); + + $imageBtn.click(function (event) { + event.preventDefault(); + + deferred.resolve($imageUrl.val()); + }); + + $imageUrl.on('keyup paste', function () { + var url = $imageUrl.val(); + ui.toggleBtn($imageBtn, url); + }).val('').trigger('focus'); + self.bindEnterKey($imageUrl, $imageBtn); + }); + + ui.onDialogHidden(self.$dialog, function () { + $imageInput.off('change'); + $imageUrl.off('keyup paste keypress'); + $imageBtn.off('click'); + + if (deferred.state() === 'pending') { + deferred.reject(); + } + }); + + ui.showDialog(self.$dialog); + }); + }; + }; + + var ImagePopover = function (context) { + var ui = $.summernote.ui; + + var options = context.options; + + this.shouldInitialize = function () { + return !list.isEmpty(options.popover.image); + }; + + this.initialize = function () { + this.$popover = ui.popover({ + className: 'note-image-popover' + }).render().appendTo('body'); + var $content = this.$popover.find('.popover-content'); + + context.invoke('buttons.build', $content, options.popover.image); + }; + + this.destroy = function () { + this.$popover.remove(); + }; + + this.update = function (target) { + if (dom.isImg(target)) { + var pos = dom.posFromPlaceholder(target); + this.$popover.css({ + display: 'block', + left: pos.left, + top: pos.top + }); + } else { + this.hide(); + } + }; + + this.hide = function () { + this.$popover.hide(); + }; + }; + + var VideoDialog = function (context) { + var self = this; + var ui = $.summernote.ui; + + var $editor = context.layoutInfo.editor; + var options = context.options; + var lang = options.langInfo; + + this.initialize = function () { + var $container = options.dialogsInBody ? $(document.body) : $editor; + + var body = '<div class="form-group row-fluid">' + + '<label>' + lang.video.url + ' <small class="text-muted">' + lang.video.providers + '</small></label>' + + '<input class="note-video-url form-control span12" type="text" />' + + '</div>'; + var footer = '<button href="#" class="btn btn-primary note-video-btn disabled" disabled>' + lang.video.insert + '</button>'; + + this.$dialog = ui.dialog({ + title: lang.video.insert, + fade: options.dialogsFade, + body: body, + footer: footer + }).render().appendTo($container); + }; + + this.destroy = function () { + ui.hideDialog(this.$dialog); + this.$dialog.remove(); + }; + + this.bindEnterKey = function ($input, $btn) { + $input.on('keypress', function (event) { + if (event.keyCode === key.code.ENTER) { + $btn.trigger('click'); + } + }); + }; + + this.createVideoNode = function (url) { + // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm) + var ytRegExp = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; + var ytMatch = url.match(ytRegExp); + + var igRegExp = /(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/; + var igMatch = url.match(igRegExp); + + var vRegExp = /\/\/vine\.co\/v\/([a-zA-Z0-9]+)/; + var vMatch = url.match(vRegExp); + + var vimRegExp = /\/\/(player\.)?vimeo\.com\/([a-z]*\/)*([0-9]{6,11})[?]?.*/; + var vimMatch = url.match(vimRegExp); + + var dmRegExp = /.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/; + var dmMatch = url.match(dmRegExp); + + var youkuRegExp = /\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/; + var youkuMatch = url.match(youkuRegExp); + + var mp4RegExp = /^.+.(mp4|m4v)$/; + var mp4Match = url.match(mp4RegExp); + + var oggRegExp = /^.+.(ogg|ogv)$/; + var oggMatch = url.match(oggRegExp); + + var webmRegExp = /^.+.(webm)$/; + var webmMatch = url.match(webmRegExp); + + var $video; + if (ytMatch && ytMatch[1].length === 11) { + var youtubeId = ytMatch[1]; + $video = $('<iframe>') + .attr('frameborder', 0) + .attr('src', '//www.youtube.com/embed/' + youtubeId) + .attr('width', '640').attr('height', '360'); + } else if (igMatch && igMatch[0].length) { + $video = $('<iframe>') + .attr('frameborder', 0) + .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/') + .attr('width', '612').attr('height', '710') + .attr('scrolling', 'no') + .attr('allowtransparency', 'true'); + } else if (vMatch && vMatch[0].length) { + $video = $('<iframe>') + .attr('frameborder', 0) + .attr('src', vMatch[0] + '/embed/simple') + .attr('width', '600').attr('height', '600') + .attr('class', 'vine-embed'); + } else if (vimMatch && vimMatch[3].length) { + $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') + .attr('frameborder', 0) + .attr('src', '//player.vimeo.com/video/' + vimMatch[3]) + .attr('width', '640').attr('height', '360'); + } else if (dmMatch && dmMatch[2].length) { + $video = $('<iframe>') + .attr('frameborder', 0) + .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]) + .attr('width', '640').attr('height', '360'); + } else if (youkuMatch && youkuMatch[1].length) { + $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') + .attr('frameborder', 0) + .attr('height', '498') + .attr('width', '510') + .attr('src', '//player.youku.com/embed/' + youkuMatch[1]); + } else if (mp4Match || oggMatch || webmMatch) { + $video = $('<video controls>') + .attr('src', url) + .attr('width', '640').attr('height', '360'); + } else { + // this is not a known video link. Now what, Cat? Now what? + return false; + } + + $video.addClass('note-video-clip'); + + return $video[0]; + }; + + this.show = function () { + var text = context.invoke('editor.getSelectedText'); + context.invoke('editor.saveRange'); + this.showVideoDialog(text).then(function (url) { + // [workaround] hide dialog before restore range for IE range focus + ui.hideDialog(self.$dialog); + context.invoke('editor.restoreRange'); + + // build node + var $node = self.createVideoNode(url); + + if ($node) { + // insert video node + context.invoke('editor.insertNode', $node); + } + }).fail(function () { + context.invoke('editor.restoreRange'); + }); + }; + + /** + * show image dialog + * + * @param {jQuery} $dialog + * @return {Promise} + */ + this.showVideoDialog = function (text) { + return $.Deferred(function (deferred) { + var $videoUrl = self.$dialog.find('.note-video-url'), + $videoBtn = self.$dialog.find('.note-video-btn'); + + ui.onDialogShown(self.$dialog, function () { + context.triggerEvent('dialog.shown'); + + $videoUrl.val(text).on('input', function () { + ui.toggleBtn($videoBtn, $videoUrl.val()); + }).trigger('focus'); + + $videoBtn.click(function (event) { + event.preventDefault(); + + deferred.resolve($videoUrl.val()); + }); + + self.bindEnterKey($videoUrl, $videoBtn); + }); + + ui.onDialogHidden(self.$dialog, function () { + $videoUrl.off('input'); + $videoBtn.off('click'); + + if (deferred.state() === 'pending') { + deferred.reject(); + } + }); + + ui.showDialog(self.$dialog); + }); + }; + }; + + var HelpDialog = function (context) { + var self = this; + var ui = $.summernote.ui; + + var $editor = context.layoutInfo.editor; + var options = context.options; + var lang = options.langInfo; + + this.createShortCutList = function () { + var keyMap = options.keyMap[agent.isMac ? 'mac' : 'pc']; + return Object.keys(keyMap).map(function (key) { + var command = keyMap[key]; + var $row = $('<div><div class="help-list-item"/></div>'); + $row.append($('<label><kbd>' + key + '</kdb></label>').css({ + 'width': 180, + 'margin-right': 10 + })).append($('<span/>').html(context.memo('help.' + command) || command)); + return $row.html(); + }).join(''); + }; + + this.initialize = function () { + var $container = options.dialogsInBody ? $(document.body) : $editor; + + var body = [ + '<p class="text-center">', + '<a href="http://summernote.org/" target="_blank">Summernote 0.8.2</a> · ', + '<a href="https://github.com/summernote/summernote" target="_blank">Project</a> · ', + '<a href="https://github.com/summernote/summernote/issues" target="_blank">Issues</a>', + '</p>' + ].join(''); + + this.$dialog = ui.dialog({ + title: lang.options.help, + fade: options.dialogsFade, + body: this.createShortCutList(), + footer: body, + callback: function ($node) { + $node.find('.modal-body').css({ + 'max-height': 300, + 'overflow': 'scroll' + }); + } + }).render().appendTo($container); + }; + + this.destroy = function () { + ui.hideDialog(this.$dialog); + this.$dialog.remove(); + }; + + /** + * show help dialog + * + * @return {Promise} + */ + this.showHelpDialog = function () { + return $.Deferred(function (deferred) { + ui.onDialogShown(self.$dialog, function () { + context.triggerEvent('dialog.shown'); + deferred.resolve(); + }); + ui.showDialog(self.$dialog); + }).promise(); + }; + + this.show = function () { + context.invoke('editor.saveRange'); + this.showHelpDialog().then(function () { + context.invoke('editor.restoreRange'); + }); + }; + }; + + var AirPopover = function (context) { + var self = this; + var ui = $.summernote.ui; + + var options = context.options; + + var AIR_MODE_POPOVER_X_OFFSET = 20; + + this.events = { + 'summernote.keyup summernote.mouseup summernote.scroll': function () { + self.update(); + }, + 'summernote.change summernote.dialog.shown': function () { + self.hide(); + }, + 'summernote.focusout': function (we, e) { + // [workaround] Firefox doesn't support relatedTarget on focusout + // - Ignore hide action on focus out in FF. + if (agent.isFF) { + return; + } + + if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(self.$popover[0]))) { + self.hide(); + } + } + }; + + this.shouldInitialize = function () { + return options.airMode && !list.isEmpty(options.popover.air); + }; + + this.initialize = function () { + this.$popover = ui.popover({ + className: 'note-air-popover' + }).render().appendTo('body'); + var $content = this.$popover.find('.popover-content'); + + context.invoke('buttons.build', $content, options.popover.air); + }; + + this.destroy = function () { + this.$popover.remove(); + }; + + this.update = function () { + var styleInfo = context.invoke('editor.currentStyle'); + if (styleInfo.range && !styleInfo.range.isCollapsed()) { + var rect = list.last(styleInfo.range.getClientRects()); + if (rect) { + var bnd = func.rect2bnd(rect); + this.$popover.css({ + display: 'block', + left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET, + top: bnd.top + bnd.height + }); + } + } else { + this.hide(); + } + }; + + this.hide = function () { + this.$popover.hide(); + }; + }; + + var HintPopover = function (context) { + var self = this; + var ui = $.summernote.ui; + + var POPOVER_DIST = 5; + var hint = context.options.hint || []; + var direction = context.options.hintDirection || 'bottom'; + var hints = $.isArray(hint) ? hint : [hint]; + + this.events = { + 'summernote.keyup': function (we, e) { + if (!e.isDefaultPrevented()) { + self.handleKeyup(e); + } + }, + 'summernote.keydown': function (we, e) { + self.handleKeydown(e); + }, + 'summernote.dialog.shown': function () { + self.hide(); + } + }; + + this.shouldInitialize = function () { + return hints.length > 0; + }; + + this.initialize = function () { + this.lastWordRange = null; + this.$popover = ui.popover({ + className: 'note-hint-popover', + hideArrow: true, + direction: '' + }).render().appendTo('body'); + + this.$popover.hide(); + + this.$content = this.$popover.find('.popover-content'); + + this.$content.on('click', '.note-hint-item', function () { + self.$content.find('.active').removeClass('active'); + $(this).addClass('active'); + self.replace(); + }); + }; + + this.destroy = function () { + this.$popover.remove(); + }; + + this.selectItem = function ($item) { + this.$content.find('.active').removeClass('active'); + $item.addClass('active'); + + this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2); + }; + + this.moveDown = function () { + var $current = this.$content.find('.note-hint-item.active'); + var $next = $current.next(); + + if ($next.length) { + this.selectItem($next); + } else { + var $nextGroup = $current.parent().next(); + + if (!$nextGroup.length) { + $nextGroup = this.$content.find('.note-hint-group').first(); + } + + this.selectItem($nextGroup.find('.note-hint-item').first()); + } + }; + + this.moveUp = function () { + var $current = this.$content.find('.note-hint-item.active'); + var $prev = $current.prev(); + + if ($prev.length) { + this.selectItem($prev); + } else { + var $prevGroup = $current.parent().prev(); + + if (!$prevGroup.length) { + $prevGroup = this.$content.find('.note-hint-group').last(); + } + + this.selectItem($prevGroup.find('.note-hint-item').last()); + } + }; + + this.replace = function () { + var $item = this.$content.find('.note-hint-item.active'); + + if ($item.length) { + var node = this.nodeFromItem($item); + this.lastWordRange.insertNode(node); + range.createFromNode(node).collapse().select(); + + this.lastWordRange = null; + this.hide(); + context.invoke('editor.focus'); + } + + }; + + this.nodeFromItem = function ($item) { + var hint = hints[$item.data('index')]; + var item = $item.data('item'); + var node = hint.content ? hint.content(item) : item; + if (typeof node === 'string') { + node = dom.createText(node); + } + return node; + }; + + this.createItemTemplates = function (hintIdx, items) { + var hint = hints[hintIdx]; + return items.map(function (item, idx) { + var $item = $('<div class="note-hint-item"/>'); + $item.append(hint.template ? hint.template(item) : item + ''); + $item.data({ + 'index': hintIdx, + 'item': item + }); + + if (hintIdx === 0 && idx === 0) { + $item.addClass('active'); + } + return $item; + }); + }; + + this.handleKeydown = function (e) { + if (!this.$popover.is(':visible')) { + return; + } + + if (e.keyCode === key.code.ENTER) { + e.preventDefault(); + this.replace(); + } else if (e.keyCode === key.code.UP) { + e.preventDefault(); + this.moveUp(); + } else if (e.keyCode === key.code.DOWN) { + e.preventDefault(); + this.moveDown(); + } + }; + + this.searchKeyword = function (index, keyword, callback) { + var hint = hints[index]; + if (hint && hint.match.test(keyword) && hint.search) { + var matches = hint.match.exec(keyword); + hint.search(matches[1], callback); + } else { + callback(); + } + }; + + this.createGroup = function (idx, keyword) { + var $group = $('<div class="note-hint-group note-hint-group-' + idx + '"/>'); + this.searchKeyword(idx, keyword, function (items) { + items = items || []; + if (items.length) { + $group.html(self.createItemTemplates(idx, items)); + self.show(); + } + }); + + return $group; + }; + + this.handleKeyup = function (e) { + if (list.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) { + if (e.keyCode === key.code.ENTER) { + if (this.$popover.is(':visible')) { + return; + } + } + } else { + var wordRange = context.invoke('editor.createRange').getWordRange(); + var keyword = wordRange.toString(); + if (hints.length && keyword) { + this.$content.empty(); + + var bnd = func.rect2bnd(list.last(wordRange.getClientRects())); + if (bnd) { + + this.$popover.hide(); + + this.lastWordRange = wordRange; + + hints.forEach(function (hint, idx) { + if (hint.match.test(keyword)) { + self.createGroup(idx, keyword).appendTo(self.$content); + } + }); + + // set position for popover after group is created + if (direction === 'top') { + this.$popover.css({ + left: bnd.left, + top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST + }); + } else { + this.$popover.css({ + left: bnd.left, + top: bnd.top + bnd.height + POPOVER_DIST + }); + } + + } + } else { + this.hide(); + } + } + }; + + this.show = function () { + this.$popover.show(); + }; + + this.hide = function () { + this.$popover.hide(); + }; + }; + + + $.summernote = $.extend($.summernote, { + version: '0.8.2', + ui: ui, + dom: dom, + + plugins: {}, + + options: { + modules: { + 'editor': Editor, + 'clipboard': Clipboard, + 'dropzone': Dropzone, + 'codeview': Codeview, + 'statusbar': Statusbar, + 'fullscreen': Fullscreen, + 'handle': Handle, + // FIXME: HintPopover must be front of autolink + // - Script error about range when Enter key is pressed on hint popover + 'hintPopover': HintPopover, + 'autoLink': AutoLink, + 'autoSync': AutoSync, + 'placeholder': Placeholder, + 'buttons': Buttons, + 'toolbar': Toolbar, + 'linkDialog': LinkDialog, + 'linkPopover': LinkPopover, + 'imageDialog': ImageDialog, + 'imagePopover': ImagePopover, + 'videoDialog': VideoDialog, + 'helpDialog': HelpDialog, + 'airPopover': AirPopover + }, + + buttons: {}, + + lang: 'en-US', + + // toolbar + toolbar: [ + ['style', ['style']], + ['font', ['bold', 'underline', 'clear']], + ['fontname', ['fontname']], + ['color', ['color']], + ['para', ['ul', 'ol', 'paragraph']], + ['table', ['table']], + ['insert', ['link', 'picture', 'video']], + ['view', ['fullscreen', 'codeview', 'help']] + ], + + // popover + popover: { + image: [ + ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], + ['float', ['floatLeft', 'floatRight', 'floatNone']], + ['remove', ['removeMedia']] + ], + link: [ + ['link', ['linkDialogShow', 'unlink']] + ], + air: [ + ['color', ['color']], + ['font', ['bold', 'underline', 'clear']], + ['para', ['ul', 'paragraph']], + ['table', ['table']], + ['insert', ['link', 'picture']] + ] + }, + + // air mode: inline editor + airMode: false, + + width: null, + height: null, + + focus: false, + tabSize: 4, + styleWithSpan: true, + shortcuts: true, + textareaAutoSync: true, + direction: null, + + styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'], + + fontNames: [ + 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', + 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', + 'Tahoma', 'Times New Roman', 'Verdana' + ], + + fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], + + // pallete colors(n x n) + colors: [ + ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], + ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], + ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], + ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], + ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], + ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], + ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], + ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] + ], + + lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'], + + tableClassName: 'table table-bordered', + + insertTableMaxSize: { + col: 10, + row: 10 + }, + + dialogsInBody: false, + dialogsFade: false, + + maximumImageFileSize: null, + + callbacks: { + onInit: null, + onFocus: null, + onBlur: null, + onEnter: null, + onKeyup: null, + onKeydown: null, + onImageUpload: null, + onImageUploadError: null + }, + + codemirror: { + mode: 'text/html', + htmlMode: true, + lineNumbers: true + }, + + keyMap: { + pc: { + 'ENTER': 'insertParagraph', + 'CTRL+Z': 'undo', + 'CTRL+Y': 'redo', + 'TAB': 'tab', + 'SHIFT+TAB': 'untab', + 'CTRL+B': 'bold', + 'CTRL+I': 'italic', + 'CTRL+U': 'underline', + 'CTRL+SHIFT+S': 'strikethrough', + 'CTRL+BACKSLASH': 'removeFormat', + 'CTRL+SHIFT+L': 'justifyLeft', + 'CTRL+SHIFT+E': 'justifyCenter', + 'CTRL+SHIFT+R': 'justifyRight', + 'CTRL+SHIFT+J': 'justifyFull', + 'CTRL+SHIFT+NUM7': 'insertUnorderedList', + 'CTRL+SHIFT+NUM8': 'insertOrderedList', + 'CTRL+LEFTBRACKET': 'outdent', + 'CTRL+RIGHTBRACKET': 'indent', + 'CTRL+NUM0': 'formatPara', + 'CTRL+NUM1': 'formatH1', + 'CTRL+NUM2': 'formatH2', + 'CTRL+NUM3': 'formatH3', + 'CTRL+NUM4': 'formatH4', + 'CTRL+NUM5': 'formatH5', + 'CTRL+NUM6': 'formatH6', + 'CTRL+ENTER': 'insertHorizontalRule', + 'CTRL+K': 'linkDialog.show' + }, + + mac: { + 'ENTER': 'insertParagraph', + 'CMD+Z': 'undo', + 'CMD+SHIFT+Z': 'redo', + 'TAB': 'tab', + 'SHIFT+TAB': 'untab', + 'CMD+B': 'bold', + 'CMD+I': 'italic', + 'CMD+U': 'underline', + 'CMD+SHIFT+S': 'strikethrough', + 'CMD+BACKSLASH': 'removeFormat', + 'CMD+SHIFT+L': 'justifyLeft', + 'CMD+SHIFT+E': 'justifyCenter', + 'CMD+SHIFT+R': 'justifyRight', + 'CMD+SHIFT+J': 'justifyFull', + 'CMD+SHIFT+NUM7': 'insertUnorderedList', + 'CMD+SHIFT+NUM8': 'insertOrderedList', + 'CMD+LEFTBRACKET': 'outdent', + 'CMD+RIGHTBRACKET': 'indent', + 'CMD+NUM0': 'formatPara', + 'CMD+NUM1': 'formatH1', + 'CMD+NUM2': 'formatH2', + 'CMD+NUM3': 'formatH3', + 'CMD+NUM4': 'formatH4', + 'CMD+NUM5': 'formatH5', + 'CMD+NUM6': 'formatH6', + 'CMD+ENTER': 'insertHorizontalRule', + 'CMD+K': 'linkDialog.show' + } + }, + icons: { + 'align': 'note-icon-align', + 'alignCenter': 'note-icon-align-center', + 'alignJustify': 'note-icon-align-justify', + 'alignLeft': 'note-icon-align-left', + 'alignRight': 'note-icon-align-right', + 'indent': 'note-icon-align-indent', + 'outdent': 'note-icon-align-outdent', + 'arrowsAlt': 'note-icon-arrows-alt', + 'bold': 'note-icon-bold', + 'caret': 'note-icon-caret', + 'circle': 'note-icon-circle', + 'close': 'note-icon-close', + 'code': 'note-icon-code', + 'eraser': 'note-icon-eraser', + 'font': 'note-icon-font', + 'frame': 'note-icon-frame', + 'italic': 'note-icon-italic', + 'link': 'note-icon-link', + 'unlink': 'note-icon-chain-broken', + 'magic': 'note-icon-magic', + 'menuCheck': 'note-icon-check', + 'minus': 'note-icon-minus', + 'orderedlist': 'note-icon-orderedlist', + 'pencil': 'note-icon-pencil', + 'picture': 'note-icon-picture', + 'question': 'note-icon-question', + 'redo': 'note-icon-redo', + 'square': 'note-icon-square', + 'strikethrough': 'note-icon-strikethrough', + 'subscript': 'note-icon-subscript', + 'superscript': 'note-icon-superscript', + 'table': 'note-icon-table', + 'textHeight': 'note-icon-text-height', + 'trash': 'note-icon-trash', + 'underline': 'note-icon-underline', + 'undo': 'note-icon-undo', + 'unorderedlist': 'note-icon-unorderedlist', + 'video': 'note-icon-video' + } + } + }); + +})); diff --git a/public/admin/view/javascript/summernote/summernote.min.js b/public/admin/view/javascript/summernote/summernote.min.js new file mode 100644 index 0000000..9210055 --- /dev/null +++ b/public/admin/view/javascript/summernote/summernote.min.js @@ -0,0 +1,4 @@ +/*! Summernote v0.8.2 | (c) 2013-2015 Alan Hong and other contributors | MIT license */ +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(window.jQuery)}(function($){"use strict";var func=function(){var a=function(a){return function(b){return a===b}},b=function(a,b){return a===b},c=function(a){return function(b,c){return b[a]===c[a]}},d=function(){return!0},e=function(){return!1},f=function(a){return function(){return!a.apply(a,arguments)}},g=function(a,b){return function(c){return a(c)&&b(c)}},h=function(a){return a},i=function(a,b){return function(){return a[b].apply(a,arguments)}},j=0,k=function(a){var b=++j+"";return a?a+b:b},l=function(a){var b=$(document);return{top:a.top+b.scrollTop(),left:a.left+b.scrollLeft(),width:a.right-a.left,height:a.bottom-a.top}},m=function(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[a[c]]=c);return b},n=function(a,b){return b=b||"",b+a.split(".").map(function(a){return a.substring(0,1).toUpperCase()+a.substring(1)}).join("")},o=function(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,c||a.apply(e,f)},h=c&&!d;clearTimeout(d),d=setTimeout(g,b),h&&a.apply(e,f)}};return{eq:a,eq2:b,peq2:c,ok:d,fail:e,self:h,not:f,and:g,invoke:i,uniqueId:k,rect2bnd:l,invertObject:m,namespaceToCamel:n,debounce:o}}(),list=function(){var a=function(a){return a[0]},b=function(a){return a[a.length-1]},c=function(a){return a.slice(0,a.length-1)},d=function(a){return a.slice(1)},e=function(a,b){for(var c=0,d=a.length;d>c;c++){var e=a[c];if(b(e))return e}},f=function(a,b){for(var c=0,d=a.length;d>c;c++)if(!b(a[c]))return!1;return!0},g=function(a,b){return $.inArray(b,a)},h=function(a,b){return-1!==g(a,b)},i=function(a,b){return b=b||func.self,a.reduce(function(a,c){return a+b(c)},0)},j=function(a){for(var b=[],c=-1,d=a.length;++c<d;)b[c]=a[c];return b},k=function(a){return!a||!a.length},l=function(c,e){if(!c.length)return[];var f=d(c);return f.reduce(function(a,c){var d=b(a);return e(b(d),c)?d[d.length]=c:a[a.length]=[c],a},[[a(c)]])},m=function(a){for(var b=[],c=0,d=a.length;d>c;c++)a[c]&&b.push(a[c]);return b},n=function(a){for(var b=[],c=0,d=a.length;d>c;c++)h(b,a[c])||b.push(a[c]);return b},o=function(a,b){var c=g(a,b);return-1===c?null:a[c+1]},p=function(a,b){var c=g(a,b);return-1===c?null:a[c-1]};return{head:a,last:b,initial:c,tail:d,prev:p,next:o,find:e,contains:h,all:f,sum:i,from:j,isEmpty:k,clusterBy:l,compact:m,unique:n}}(),isSupportAmd="function"==typeof define&&define.amd,isFontInstalled=function(a){var b="Comic Sans MS"===a?"Courier New":"Comic Sans MS",c=$("<div>").css({position:"absolute",left:"-9999px",top:"-9999px",fontSize:"200px"}).text("mmmmmmmmmwwwwwww").appendTo(document.body),d=c.css("fontFamily",b).width(),e=c.css("fontFamily",a+","+b).width();return c.remove(),d!==e},userAgent=navigator.userAgent,isMSIE=/MSIE|Trident/i.test(userAgent),browserVersion;if(isMSIE){var matches=/MSIE (\d+[.]\d+)/.exec(userAgent);matches&&(browserVersion=parseFloat(matches[1])),matches=/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(userAgent),matches&&(browserVersion=parseFloat(matches[1]))}var isEdge=/Edge\/\d+/.test(userAgent),hasCodeMirror=!!window.CodeMirror;if(!hasCodeMirror&&isSupportAmd&&"undefined"!=typeof require)if("undefined"!=typeof require.resolve)try{require.resolve("codemirror"),hasCodeMirror=!0}catch(e){}else"undefined"!=typeof eval("require").specified&&(hasCodeMirror=eval("require").specified("codemirror"));var agent={isMac:navigator.appVersion.indexOf("Mac")>-1,isMSIE:isMSIE,isEdge:isEdge,isFF:!isEdge&&/firefox/i.test(userAgent),isPhantom:/PhantomJS/i.test(userAgent),isWebkit:!isEdge&&/webkit/i.test(userAgent),isChrome:!isEdge&&/chrome/i.test(userAgent),isSafari:!isEdge&&/safari/i.test(userAgent),browserVersion:browserVersion,jqueryVersion:parseFloat($.fn.jquery),isSupportAmd:isSupportAmd,hasCodeMirror:hasCodeMirror,isFontInstalled:isFontInstalled,isW3CRangeSupport:!!document.createRange},NBSP_CHAR=String.fromCharCode(160),ZERO_WIDTH_NBSP_CHAR="\ufeff",dom=function(){var a=function(a){return a&&$(a).hasClass("note-editable")},b=function(a){return a&&$(a).hasClass("note-control-sizing")},c=function(a){return a=a.toUpperCase(),function(b){return b&&b.nodeName.toUpperCase()===a}},d=function(a){return a&&3===a.nodeType},e=function(a){return a&&1===a.nodeType},f=function(a){return a&&/^BR|^IMG|^HR|^IFRAME|^BUTTON/.test(a.nodeName.toUpperCase())},g=function(b){return a(b)?!1:b&&/^DIV|^P|^LI|^H[1-7]/.test(b.nodeName.toUpperCase())},h=function(a){return a&&/^H[1-7]/.test(a.nodeName.toUpperCase())},i=c("PRE"),j=c("LI"),k=function(a){return g(a)&&!j(a)},l=c("TABLE"),m=c("DATA"),n=function(a){return!(s(a)||o(a)||p(a)||g(a)||l(a)||r(a)||m(a))},o=function(a){return a&&/^UL|^OL/.test(a.nodeName.toUpperCase())},p=c("HR"),q=function(a){return a&&/^TD|^TH/.test(a.nodeName.toUpperCase())},r=c("BLOCKQUOTE"),s=function(b){return q(b)||r(b)||a(b)},t=c("A"),u=function(a){return n(a)&&!!D(a,g)},v=function(a){return n(a)&&!D(a,g)},w=c("BODY"),x=function(a,b){return a.nextSibling===b||a.previousSibling===b},y=function(a,b){b=b||func.ok;var c=[];return a.previousSibling&&b(a.previousSibling)&&c.push(a.previousSibling),c.push(a),a.nextSibling&&b(a.nextSibling)&&c.push(a.nextSibling),c},z=agent.isMSIE&&agent.browserVersion<11?" ":"<br>",A=function(a){return d(a)?a.nodeValue.length:a?a.childNodes.length:0},B=function(a){var b=A(a);return 0===b?!0:d(a)||1!==b||a.innerHTML!==z?list.all(a.childNodes,d)&&""===a.innerHTML?!0:!1:!0},C=function(a){f(a)||A(a)||(a.innerHTML=z)},D=function(b,c){for(;b;){if(c(b))return b;if(a(b))break;b=b.parentNode}return null},E=function(b,c){for(b=b.parentNode;b&&1===A(b);){if(c(b))return b;if(a(b))break;b=b.parentNode}return null},F=function(b,c){c=c||func.fail;var d=[];return D(b,function(b){return a(b)||d.push(b),c(b)}),d},G=function(a,b){var c=F(a);return list.last(c.filter(b))},H=function(a,b){for(var c=F(a),d=b;d;d=d.parentNode)if($.inArray(d,c)>-1)return d;return null},I=function(a,b){b=b||func.fail;for(var c=[];a&&!b(a);)c.push(a),a=a.previousSibling;return c},J=function(a,b){b=b||func.fail;for(var c=[];a&&!b(a);)c.push(a),a=a.nextSibling;return c},K=function(a,b){var c=[];return b=b||func.ok,function d(e){a!==e&&b(e)&&c.push(e);for(var f=0,g=e.childNodes.length;g>f;f++)d(e.childNodes[f])}(a),c},L=function(a,b){var c=a.parentNode,d=$("<"+b+">")[0];return c.insertBefore(d,a),d.appendChild(a),d},M=function(a,b){var c=b.nextSibling,d=b.parentNode;return c?d.insertBefore(a,c):d.appendChild(a),a},N=function(a,b){return $.each(b,function(b,c){a.appendChild(c)}),a},O=function(a){return 0===a.offset},P=function(a){return a.offset===A(a.node)},Q=function(a){return O(a)||P(a)},R=function(a,b){for(;a&&a!==b;){if(0!==V(a))return!1;a=a.parentNode}return!0},S=function(a,b){if(!b)return!1;for(;a&&a!==b;){if(V(a)!==A(a.parentNode)-1)return!1;a=a.parentNode}return!0},T=function(a,b){return O(a)&&R(a.node,b)},U=function(a,b){return P(a)&&S(a.node,b)},V=function(a){for(var b=0;a=a.previousSibling;)b+=1;return b},W=function(a){return!!(a&&a.childNodes&&a.childNodes.length)},X=function(b,c){var d,e;if(0===b.offset){if(a(b.node))return null;d=b.node.parentNode,e=V(b.node)}else W(b.node)?(d=b.node.childNodes[b.offset-1],e=A(d)):(d=b.node,e=c?0:b.offset-1);return{node:d,offset:e}},Y=function(b,c){var d,e;if(A(b.node)===b.offset){if(a(b.node))return null;d=b.node.parentNode,e=V(b.node)+1}else W(b.node)?(d=b.node.childNodes[b.offset],e=0):(d=b.node,e=c?A(b.node):b.offset+1);return{node:d,offset:e}},Z=function(a,b){return a.node===b.node&&a.offset===b.offset},_=function(a){if(d(a.node)||!W(a.node)||B(a.node))return!0;var b=a.node.childNodes[a.offset-1],c=a.node.childNodes[a.offset];return b&&!f(b)||c&&!f(c)?!1:!0},aa=function(a,b){for(;a;){if(b(a))return a;a=X(a)}return null},ba=function(a,b){for(;a;){if(b(a))return a;a=Y(a)}return null},ca=function(a){if(!d(a.node))return!1;var b=a.node.nodeValue.charAt(a.offset-1);return b&&" "!==b&&b!==NBSP_CHAR},da=function(a,b,c,d){for(var e=a;e&&(c(e),!Z(e,b));){var f=d&&a.node!==e.node&&b.node!==e.node;e=Y(e,f)}},ea=function(a,b){var c=F(b,func.eq(a));return c.map(V).reverse()},fa=function(a,b){for(var c=a,d=0,e=b.length;e>d;d++)c=c.childNodes.length<=b[d]?c.childNodes[c.childNodes.length-1]:c.childNodes[b[d]];return c},ga=function(a,b){var c=b&&b.isSkipPaddingBlankHTML,e=b&&b.isNotSplitEdgePoint;if(Q(a)&&(d(a.node)||e)){if(O(a))return a.node;if(P(a))return a.node.nextSibling}if(d(a.node))return a.node.splitText(a.offset);var f=a.node.childNodes[a.offset],g=M(a.node.cloneNode(!1),a.node);return N(g,J(f)),c||(C(a.node),C(g)),g},ha=function(a,b,c){var d=F(b.node,func.eq(a));return d.length?1===d.length?ga(b,c):d.reduce(function(a,d){return a===b.node&&(a=ga(b,c)),ga({node:d,offset:a?dom.position(a):A(d)},c)}):null},ia=function(a,b){var c,d,e=b?g:s,f=F(a.node,e),h=list.last(f)||a.node;e(h)?(c=f[f.length-2],d=h):(c=h,d=c.parentNode);var i=c&&ha(c,a,{isSkipPaddingBlankHTML:b,isNotSplitEdgePoint:b});return i||d!==a.node||(i=a.node.childNodes[a.offset]),{rightNode:i,container:d}},ja=function(a){return document.createElement(a)},ka=function(a){return document.createTextNode(a)},la=function(a,b){if(a&&a.parentNode){if(a.removeNode)return a.removeNode(b);var c=a.parentNode;if(!b){var d,e,f=[];for(d=0,e=a.childNodes.length;e>d;d++)f.push(a.childNodes[d]);for(d=0,e=f.length;e>d;d++)c.insertBefore(f[d],a)}c.removeChild(a)}},ma=function(b,c){for(;b&&!a(b)&&c(b);){var d=b.parentNode;la(b),b=d}},na=function(a,b){if(a.nodeName.toUpperCase()===b.toUpperCase())return a;var c=ja(b);return a.style.cssText&&(c.style.cssText=a.style.cssText),N(c,list.from(a.childNodes)),M(c,a),la(a),c},oa=c("TEXTAREA"),pa=function(a,b){var c=oa(a[0])?a.val():a.html();return b?c.replace(/[\n\r]/g,""):c},qa=function(a,b){var c=pa(a);if(b){var d=/<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g;c=c.replace(d,function(a,b,c){c=c.toUpperCase();var d=/^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(c)&&!!b,e=/^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(c);return a+(d||e?"\n":"")}),c=$.trim(c)}return c},ra=function(a){var b=$(a),c=b.offset(),d=b.outerHeight(!0);return{left:c.left,top:c.top+d}},sa=function(a,b){Object.keys(b).forEach(function(c){a.on(c,b[c])})},ta=function(a,b){Object.keys(b).forEach(function(c){a.off(c,b[c])})};return{NBSP_CHAR:NBSP_CHAR,ZERO_WIDTH_NBSP_CHAR:ZERO_WIDTH_NBSP_CHAR,blank:z,emptyPara:"<p>"+z+"</p>",makePredByNodeName:c,isEditable:a,isControlSizing:b,isText:d,isElement:e,isVoid:f,isPara:g,isPurePara:k,isHeading:h,isInline:n,isBlock:func.not(n),isBodyInline:v,isBody:w,isParaInline:u,isPre:i,isList:o,isTable:l,isData:m,isCell:q,isBlockquote:r,isBodyContainer:s,isAnchor:t,isDiv:c("DIV"),isLi:j,isBR:c("BR"),isSpan:c("SPAN"),isB:c("B"),isU:c("U"),isS:c("S"),isI:c("I"),isImg:c("IMG"),isTextarea:oa,isEmpty:B,isEmptyAnchor:func.and(t,B),isClosestSibling:x,withClosestSiblings:y,nodeLength:A,isLeftEdgePoint:O,isRightEdgePoint:P,isEdgePoint:Q,isLeftEdgeOf:R,isRightEdgeOf:S,isLeftEdgePointOf:T,isRightEdgePointOf:U,prevPoint:X,nextPoint:Y,isSamePoint:Z,isVisiblePoint:_,prevPointUntil:aa,nextPointUntil:ba,isCharPoint:ca,walkPoint:da,ancestor:D,singleChildAncestor:E,listAncestor:F,lastAncestor:G,listNext:J,listPrev:I,listDescendant:K,commonAncestor:H,wrap:L,insertAfter:M,appendChildNodes:N,position:V,hasChildren:W,makeOffsetPath:ea,fromOffsetPath:fa,splitTree:ha,splitPoint:ia,create:ja,createText:ka,remove:la,removeWhile:ma,replace:na,html:qa,value:pa,posFromPlaceholder:ra,attachEvents:sa,detachEvents:ta}}(),Context=function(a,b){var c=this,d=$.summernote.ui;return this.memos={},this.modules={},this.layoutInfo={},this.options=b,this.initialize=function(){return this.layoutInfo=d.createLayout(a,b),this._initialize(),a.hide(),this},this.destroy=function(){this._destroy(),a.removeData("summernote"),d.removeLayout(a,this.layoutInfo)},this.reset=function(){var a=c.isDisabled();this.code(dom.emptyPara),this._destroy(),this._initialize(),a&&c.disable()},this._initialize=function(){var a=$.extend({},this.options.buttons);Object.keys(a).forEach(function(b){c.memo("button."+b,a[b])});var b=$.extend({},this.options.modules,$.summernote.plugins||{});Object.keys(b).forEach(function(a){c.module(a,b[a],!0)}),Object.keys(this.modules).forEach(function(a){c.initializeModule(a)})},this._destroy=function(){Object.keys(this.modules).reverse().forEach(function(a){c.removeModule(a)}),Object.keys(this.memos).forEach(function(a){c.removeMemo(a)})},this.code=function(b){var c=this.invoke("codeview.isActivated");return void 0===b?(this.invoke("codeview.sync"),c?this.layoutInfo.codable.val():this.layoutInfo.editable.html()):(c?this.layoutInfo.codable.val(b):this.layoutInfo.editable.html(b),a.val(b),this.triggerEvent("change",b),void 0)},this.isDisabled=function(){return"false"===this.layoutInfo.editable.attr("contenteditable")},this.enable=function(){this.layoutInfo.editable.attr("contenteditable",!0),this.invoke("toolbar.activate",!0)},this.disable=function(){this.invoke("codeview.isActivated")&&this.invoke("codeview.deactivate"),this.layoutInfo.editable.attr("contenteditable",!1),this.invoke("toolbar.deactivate",!0)},this.triggerEvent=function(){var b=list.head(arguments),c=list.tail(list.from(arguments)),d=this.options.callbacks[func.namespaceToCamel(b,"on")];d&&d.apply(a[0],c),a.trigger("summernote."+b,c)},this.initializeModule=function(b){var c=this.modules[b];c.shouldInitialize=c.shouldInitialize||func.ok,c.shouldInitialize()&&(c.initialize&&c.initialize(),c.events&&dom.attachEvents(a,c.events))},this.module=function(a,b,c){return 1===arguments.length?this.modules[a]:(this.modules[a]=new b(this),void(c||this.initializeModule(a)))},this.removeModule=function(b){var c=this.modules[b];c.shouldInitialize()&&(c.events&&dom.detachEvents(a,c.events),c.destroy&&c.destroy()),delete this.modules[b]},this.memo=function(a,b){return 1===arguments.length?this.memos[a]:void(this.memos[a]=b)},this.removeMemo=function(a){this.memos[a]&&this.memos[a].destroy&&this.memos[a].destroy(),delete this.memos[a]},this.createInvokeHandler=function(a,b){return function(d){d.preventDefault(),c.invoke(a,b||$(d.target).closest("[data-value]").data("value"))}},this.invoke=function(){var a=list.head(arguments),b=list.tail(list.from(arguments)),c=a.split("."),d=c.length>1,e=d&&list.head(c),f=d?list.last(c):list.head(c),g=this.modules[e||"editor"];return!e&&this[f]?this[f].apply(this,b):g&&g[f]&&g.shouldInitialize()?g[f].apply(g,b):void 0},this.initialize()};$.fn.extend({summernote:function(){var a=$.type(list.head(arguments)),b="string"===a,c="object"===a,d=c?list.head(arguments):{};d=$.extend({},$.summernote.options,d),d.langInfo=$.extend(!0,{},$.summernote.lang["en-US"],$.summernote.lang[d.lang]),d.icons=$.extend(!0,{},$.summernote.options.icons,d.icons),this.each(function(a,b){var c=$(b);if(!c.data("summernote")){var e=new Context(c,d);c.data("summernote",e),c.data("summernote").triggerEvent("init",e.layoutInfo)}});var e=this.first();if(e.length){var f=e.data("summernote");if(b)return f.invoke.apply(f,list.from(arguments));d.focus&&f.invoke("editor.focus")}return this}});var Renderer=function(a,b,c,d){this.render=function(e){var f=$(a);if(c&&c.contents&&f.html(c.contents),c&&c.className&&f.addClass(c.className),c&&c.data&&$.each(c.data,function(a,b){f.attr("data-"+a,b)}),c&&c.click&&f.on("click",c.click),b){var g=f.find(".note-children-container");b.forEach(function(a){a.render(g.length?g:f)})}return d&&d(f,c),c&&c.callback&&c.callback(f),e&&e.append(f),f}},renderer={create:function(a,b){return function(){var c=$.isArray(arguments[0])?arguments[0]:[],d="object"==typeof arguments[1]?arguments[1]:arguments[0];return d&&d.children&&(c=d.children),new Renderer(a,c,d,b)}}},editor=renderer.create('<div class="note-editor note-frame panel panel-default"/>'),toolbar=renderer.create('<div class="note-toolbar panel-heading"/>'),editingArea=renderer.create('<div class="note-editing-area"/>'),codable=renderer.create('<textarea class="note-codable"/>'),editable=renderer.create('<div class="note-editable panel-body" contentEditable="true"/>'),statusbar=renderer.create(['<div class="note-statusbar">',' <div class="note-resizebar">',' <div class="note-icon-bar"/>',' <div class="note-icon-bar"/>',' <div class="note-icon-bar"/>'," </div>","</div>"].join("")),airEditor=renderer.create('<div class="note-editor"/>'),airEditable=renderer.create('<div class="note-editable" contentEditable="true"/>'),buttonGroup=renderer.create('<div class="note-btn-group btn-group">'),button=renderer.create('<button type="button" class="note-btn btn btn-default btn-sm" tabindex="-1">',function(a,b){b&&b.tooltip&&a.attr({title:b.tooltip}).tooltip({container:"body",trigger:"hover",placement:"bottom"})}),dropdown=renderer.create('<div class="dropdown-menu">',function(a,b){var c=$.isArray(b.items)?b.items.map(function(a){var c="string"==typeof a?a:a.value||"",d=b.template?b.template(a):a;return'<li><a href="#" data-value="'+c+'">'+d+"</a></li>"}).join(""):b.items;a.html(c)}),dropdownCheck=renderer.create('<div class="dropdown-menu note-check">',function(a,b){var c=$.isArray(b.items)?b.items.map(function(a){var c="string"==typeof a?a:a.value||"",d=b.template?b.template(a):a;return'<li><a href="#" data-value="'+c+'">'+icon(b.checkClassName)+" "+d+"</a></li>"}).join(""):b.items;a.html(c)}),palette=renderer.create('<div class="note-color-palette"/>',function(a,b){for(var c=[],d=0,e=b.colors.length;e>d;d++){for(var f=b.eventName,g=b.colors[d],h=[],i=0,j=g.length;j>i;i++){var k=g[i];h.push(['<button type="button" class="note-color-btn"','style="background-color:',k,'" ','data-event="',f,'" ','data-value="',k,'" ','title="',k,'" ','data-toggle="button" tabindex="-1"></button>'].join(""))}c.push('<div class="note-color-row">'+h.join("")+"</div>")}a.html(c.join("")),a.find(".note-color-btn").tooltip({container:"body",trigger:"hover",placement:"bottom"})}),dialog=renderer.create('<div class="modal" aria-hidden="false" tabindex="-1"/>',function(a,b){b.fade&&a.addClass("fade"),a.html(['<div class="modal-dialog">',' <div class="modal-content">',b.title?' <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title">'+b.title+"</h4> </div>":"",' <div class="modal-body">'+b.body+"</div>",b.footer?' <div class="modal-footer">'+b.footer+"</div>":""," </div>","</div>"].join(""))}),popover=renderer.create(['<div class="note-popover popover in">',' <div class="arrow"/>',' <div class="popover-content note-children-container"/>',"</div>"].join(""),function(a,b){var c="undefined"!=typeof b.direction?b.direction:"bottom";a.addClass(c),b.hideArrow&&a.find(".arrow").hide()}),icon=function(a,b){return b=b||"i","<"+b+' class="'+a+'"/>'},ui={editor:editor,toolbar:toolbar,editingArea:editingArea,codable:codable,editable:editable,statusbar:statusbar,airEditor:airEditor,airEditable:airEditable,buttonGroup:buttonGroup,button:button,dropdown:dropdown,dropdownCheck:dropdownCheck,palette:palette,dialog:dialog,popover:popover,icon:icon,toggleBtn:function(a,b){a.toggleClass("disabled",!b),a.attr("disabled",!b)},toggleBtnActive:function(a,b){a.toggleClass("active",b)},onDialogShown:function(a,b){a.one("shown.bs.modal",b)},onDialogHidden:function(a,b){a.one("hidden.bs.modal",b)},showDialog:function(a){a.modal("show")},hideDialog:function(a){a.modal("hide")},createLayout:function(a,b){var c=(b.airMode?ui.airEditor([ui.editingArea([ui.airEditable()])]):ui.editor([ui.toolbar(),ui.editingArea([ui.codable(),ui.editable()]),ui.statusbar()])).render();return c.insertAfter(a),{note:a,editor:c,toolbar:c.find(".note-toolbar"),editingArea:c.find(".note-editing-area"),editable:c.find(".note-editable"),codable:c.find(".note-codable"),statusbar:c.find(".note-statusbar")}},removeLayout:function(a,b){a.html(b.editable.html()),b.editor.remove(),a.show()}};$.summernote=$.summernote||{lang:{}},$.extend($.summernote.lang,{"en-US":{font:{bold:"Bold",italic:"Italic",underline:"Underline",clear:"Remove Font Style",height:"Line Height",name:"Font Family",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript",size:"Font Size"},image:{image:"Picture",insert:"Insert Image",resizeFull:"Resize Full",resizeHalf:"Resize Half",resizeQuarter:"Resize Quarter",floatLeft:"Float Left",floatRight:"Float Right",floatNone:"Float None",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Drag image or text here",dropImage:"Drop image or Text",selectFromFiles:"Select from files",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"Image URL",remove:"Remove Image"},video:{video:"Video",videoLink:"Video Link",insert:"Insert Video",url:"Video URL?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)"},link:{link:"Link",insert:"Insert Link",unlink:"Unlink",edit:"Edit",textToDisplay:"Text to display",url:"To what URL should this link go?",openInNewWindow:"Open in new window"},table:{table:"Table"},hr:{insert:"Insert Horizontal Rule"},style:{style:"Style",normal:"Normal",blockquote:"Quote",pre:"Code",h1:"Header 1",h2:"Header 2",h3:"Header 3",h4:"Header 4",h5:"Header 5",h6:"Header 6"},lists:{unordered:"Unordered list",ordered:"Ordered list"},options:{help:"Help",fullscreen:"Full Screen",codeview:"Code View"},paragraph:{paragraph:"Paragraph",outdent:"Outdent",indent:"Indent",left:"Align left",center:"Align center",right:"Align right",justify:"Justify full"},color:{recent:"Recent Color",more:"More Color",background:"Background Color",foreground:"Foreground Color",transparent:"Transparent",setTransparent:"Set transparent",reset:"Reset",resetToDefault:"Reset to default"},shortcut:{shortcuts:"Keyboard shortcuts",close:"Close",textFormatting:"Text formatting",action:"Action",paragraphFormatting:"Paragraph formatting",documentStyle:"Document Style",extraKeys:"Extra keys"},help:{insertParagraph:"Insert Paragraph",undo:"Undoes the last command",redo:"Redoes the last command",tab:"Tab",untab:"Untab",bold:"Set a bold style",italic:"Set a italic style",underline:"Set a underline style",strikethrough:"Set a strikethrough style",removeFormat:"Clean a style",justifyLeft:"Set left align",justifyCenter:"Set center align",justifyRight:"Set right align",justifyFull:"Set full align",insertUnorderedList:"Toggle unordered list",insertOrderedList:"Toggle ordered list",outdent:"Outdent on current paragraph",indent:"Indent on current paragraph",formatPara:"Change current block's format as a paragraph(P tag)",formatH1:"Change current block's format as H1",formatH2:"Change current block's format as H2",formatH3:"Change current block's format as H3",formatH4:"Change current block's format as H4",formatH5:"Change current block's format as H5",formatH6:"Change current block's format as H6",insertHorizontalRule:"Insert horizontal rule","linkDialog.show":"Show Link Dialog"},history:{undo:"Undo",redo:"Redo"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}});var key=function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,NUM0:48,NUM1:49,NUM2:50,NUM3:51,NUM4:52,NUM5:53,NUM6:54,NUM7:55,NUM8:56,B:66,E:69,I:73,J:74,K:75,L:76,R:82,S:83,U:85,V:86,Y:89,Z:90,SLASH:191,LEFTBRACKET:219,BACKSLASH:220,RIGHTBRACKET:221};return{isEdit:function(b){return list.contains([a.BACKSPACE,a.TAB,a.ENTER,a.SPACE],b)},isMove:function(b){return list.contains([a.LEFT,a.UP,a.RIGHT,a.DOWN],b)},nameFromCode:func.invertObject(a),code:a}}(),range=function(){var a=function(a,b){var c,d,e=a.parentElement(),f=document.body.createTextRange(),g=list.from(e.childNodes);for(c=0;c<g.length;c++)if(!dom.isText(g[c])){if(f.moveToElementText(g[c]),f.compareEndPoints("StartToStart",a)>=0)break;d=g[c]}if(0!==c&&dom.isText(g[c-1])){var h=document.body.createTextRange(),i=null;h.moveToElementText(d||e),h.collapse(!d),i=d?d.nextSibling:e.firstChild;var j=a.duplicate();j.setEndPoint("StartToStart",h);for(var k=j.text.replace(/[\r\n]/g,"").length;k>i.nodeValue.length&&i.nextSibling;)k-=i.nodeValue.length,i=i.nextSibling;i.nodeValue;b&&i.nextSibling&&dom.isText(i.nextSibling)&&k===i.nodeValue.length&&(k-=i.nodeValue.length,i=i.nextSibling),e=i,c=k}return{cont:e,offset:c}},b=function(a){var b=function(a,c){var d,e;if(dom.isText(a)){var f=dom.listPrev(a,func.not(dom.isText)),g=list.last(f).previousSibling;d=g||a.parentNode,c+=list.sum(list.tail(f),dom.nodeLength),e=!g}else{if(d=a.childNodes[c]||a,dom.isText(d))return b(d,0);c=0,e=!1}return{node:d,collapseToStart:e,offset:c}},c=document.body.createTextRange(),d=b(a.node,a.offset);return c.moveToElementText(d.node),c.collapse(d.collapseToStart),c.moveStart("character",d.offset),c},c=function(a,d,e,f){this.sc=a,this.so=d,this.ec=e,this.eo=f;var g=function(){if(agent.isW3CRangeSupport){var c=document.createRange();return c.setStart(a,d),c.setEnd(e,f),c}var g=b({node:a,offset:d});return g.setEndPoint("EndToEnd",b({node:e,offset:f})),g};this.getPoints=function(){return{sc:a,so:d,ec:e,eo:f}},this.getStartPoint=function(){return{node:a,offset:d}},this.getEndPoint=function(){return{node:e,offset:f}},this.select=function(){var a=g();if(agent.isW3CRangeSupport){var b=document.getSelection();b.rangeCount>0&&b.removeAllRanges(),b.addRange(a)}else a.select();return this},this.scrollIntoView=function(a){var b=$(a).height();return a.scrollTop+b<this.sc.offsetTop&&(a.scrollTop+=Math.abs(a.scrollTop+b-this.sc.offsetTop)),this},this.normalize=function(){var a=function(a,b){if(dom.isVisiblePoint(a)&&!dom.isEdgePoint(a)||dom.isVisiblePoint(a)&&dom.isRightEdgePoint(a)&&!b||dom.isVisiblePoint(a)&&dom.isLeftEdgePoint(a)&&b||dom.isVisiblePoint(a)&&dom.isBlock(a.node)&&dom.isEmpty(a.node))return a;var c=dom.ancestor(a.node,dom.isBlock);if((dom.isLeftEdgePointOf(a,c)||dom.isVoid(dom.prevPoint(a).node))&&!b||(dom.isRightEdgePointOf(a,c)||dom.isVoid(dom.nextPoint(a).node))&&b){if(dom.isVisiblePoint(a))return a;b=!b}var d=b?dom.nextPointUntil(dom.nextPoint(a),dom.isVisiblePoint):dom.prevPointUntil(dom.prevPoint(a),dom.isVisiblePoint);return d||a},b=a(this.getEndPoint(),!1),d=this.isCollapsed()?b:a(this.getStartPoint(),!0);return new c(d.node,d.offset,b.node,b.offset)},this.nodes=function(a,b){a=a||func.ok;var c=b&&b.includeAncestor,d=b&&b.fullyContains,e=this.getStartPoint(),f=this.getEndPoint(),g=[],h=[];return dom.walkPoint(e,f,function(b){if(!dom.isEditable(b.node)){var e;d?(dom.isLeftEdgePoint(b)&&h.push(b.node),dom.isRightEdgePoint(b)&&list.contains(h,b.node)&&(e=b.node)):e=c?dom.ancestor(b.node,a):b.node,e&&a(e)&&g.push(e)}},!0),list.unique(g)},this.commonAncestor=function(){return dom.commonAncestor(a,e)},this.expand=function(b){var g=dom.ancestor(a,b),h=dom.ancestor(e,b);if(!g&&!h)return new c(a,d,e,f);var i=this.getPoints();return g&&(i.sc=g,i.so=0),h&&(i.ec=h,i.eo=dom.nodeLength(h)),new c(i.sc,i.so,i.ec,i.eo)},this.collapse=function(b){return b?new c(a,d,a,d):new c(e,f,e,f)},this.splitText=function(){var b=a===e,g=this.getPoints();return dom.isText(e)&&!dom.isEdgePoint(this.getEndPoint())&&e.splitText(f),dom.isText(a)&&!dom.isEdgePoint(this.getStartPoint())&&(g.sc=a.splitText(d),g.so=0,b&&(g.ec=g.sc,g.eo=f-d)),new c(g.sc,g.so,g.ec,g.eo)},this.deleteContents=function(){if(this.isCollapsed())return this;var a=this.splitText(),b=a.nodes(null,{fullyContains:!0}),d=dom.prevPointUntil(a.getStartPoint(),function(a){return!list.contains(b,a.node)}),e=[];return $.each(b,function(a,b){var c=b.parentNode;d.node!==c&&1===dom.nodeLength(c)&&e.push(c),dom.remove(b,!1)}),$.each(e,function(a,b){dom.remove(b,!1)}),new c(d.node,d.offset,d.node,d.offset).normalize()};var h=function(b){return function(){var c=dom.ancestor(a,b);return!!c&&c===dom.ancestor(e,b)}};this.isOnEditable=h(dom.isEditable),this.isOnList=h(dom.isList),this.isOnAnchor=h(dom.isAnchor),this.isOnCell=h(dom.isCell),this.isOnData=h(dom.isData),this.isLeftEdgeOf=function(a){if(!dom.isLeftEdgePoint(this.getStartPoint()))return!1;var b=dom.ancestor(this.sc,a);return b&&dom.isLeftEdgeOf(this.sc,b)},this.isCollapsed=function(){return a===e&&d===f},this.wrapBodyInlineWithPara=function(){if(dom.isBodyContainer(a)&&dom.isEmpty(a))return a.innerHTML=dom.emptyPara,new c(a.firstChild,0,a.firstChild,0);var b=this.normalize();if(dom.isParaInline(a)||dom.isPara(a))return b;var d;if(dom.isInline(b.sc)){var e=dom.listAncestor(b.sc,func.not(dom.isInline));d=list.last(e),dom.isInline(d)||(d=e[e.length-2]||b.sc.childNodes[b.so])}else d=b.sc.childNodes[b.so>0?b.so-1:0];var f=dom.listPrev(d,dom.isParaInline).reverse();if(f=f.concat(dom.listNext(d.nextSibling,dom.isParaInline)),f.length){var g=dom.wrap(list.head(f),"p");dom.appendChildNodes(g,list.tail(f))}return this.normalize()},this.insertNode=function(a){var b=this.wrapBodyInlineWithPara().deleteContents(),c=dom.splitPoint(b.getStartPoint(),dom.isInline(a));return c.rightNode?c.rightNode.parentNode.insertBefore(a,c.rightNode):c.container.appendChild(a),a},this.pasteHTML=function(a){var b=$("<div></div>").html(a)[0],c=list.from(b.childNodes),d=this.wrapBodyInlineWithPara().deleteContents();return c.reverse().map(function(a){return d.insertNode(a)}).reverse()},this.toString=function(){var a=g();return agent.isW3CRangeSupport?a.toString():a.text},this.getWordRange=function(a){var b=this.getEndPoint();if(!dom.isCharPoint(b))return this;var d=dom.prevPointUntil(b,function(a){return!dom.isCharPoint(a)});return a&&(b=dom.nextPointUntil(b,function(a){return!dom.isCharPoint(a)})),new c(d.node,d.offset,b.node,b.offset)},this.bookmark=function(b){return{s:{path:dom.makeOffsetPath(b,a),offset:d},e:{path:dom.makeOffsetPath(b,e),offset:f}}},this.paraBookmark=function(b){return{s:{path:list.tail(dom.makeOffsetPath(list.head(b),a)),offset:d},e:{path:list.tail(dom.makeOffsetPath(list.last(b),e)),offset:f}}},this.getClientRects=function(){var a=g();return a.getClientRects()}};return{create:function(a,b,d,e){if(4===arguments.length)return new c(a,b,d,e);if(2===arguments.length)return d=a,e=b,new c(a,b,d,e);var f=this.createFromSelection();return f||1!==arguments.length?f:(f=this.createFromNode(arguments[0]),f.collapse(dom.emptyPara===arguments[0].innerHTML))},createFromSelection:function(){var b,d,e,f;if(agent.isW3CRangeSupport){var g=document.getSelection();if(!g||0===g.rangeCount)return null;if(dom.isBody(g.anchorNode))return null;var h=g.getRangeAt(0);b=h.startContainer,d=h.startOffset,e=h.endContainer,f=h.endOffset}else{var i=document.selection.createRange(),j=i.duplicate();j.collapse(!1);var k=i;k.collapse(!0);var l=a(k,!0),m=a(j,!1);dom.isText(l.node)&&dom.isLeftEdgePoint(l)&&dom.isTextNode(m.node)&&dom.isRightEdgePoint(m)&&m.node.nextSibling===l.node&&(l=m),b=l.cont,d=l.offset,e=m.cont,f=m.offset}return new c(b,d,e,f)},createFromNode:function(a){var b=a,c=0,d=a,e=dom.nodeLength(d);return dom.isVoid(b)&&(c=dom.listPrev(b).length-1,b=b.parentNode),dom.isBR(d)?(e=dom.listPrev(d).length-1,d=d.parentNode):dom.isVoid(d)&&(e=dom.listPrev(d).length,d=d.parentNode),this.create(b,c,d,e)},createFromNodeBefore:function(a){return this.createFromNode(a).collapse(!0)},createFromNodeAfter:function(a){return this.createFromNode(a).collapse()},createFromBookmark:function(a,b){var d=dom.fromOffsetPath(a,b.s.path),e=b.s.offset,f=dom.fromOffsetPath(a,b.e.path),g=b.e.offset;return new c(d,e,f,g)},createFromParaBookmark:function(a,b){var d=a.s.offset,e=a.e.offset,f=dom.fromOffsetPath(list.head(b),a.s.path),g=dom.fromOffsetPath(list.last(b),a.e.path);return new c(f,d,g,e)}}}(),async=function(){var a=function(a){return $.Deferred(function(b){$.extend(new FileReader,{onload:function(a){var c=a.target.result;b.resolve(c)},onerror:function(){b.reject(this)}}).readAsDataURL(a)}).promise()},b=function(a){return $.Deferred(function(b){var c=$("<img>");c.one("load",function(){c.off("error abort"),b.resolve(c)}).one("error abort",function(){c.off("load").detach(),b.reject(c)}).css({display:"none"}).appendTo(document.body).attr("src",a)}).promise()};return{readFileAsDataURL:a,createImage:b +}}(),History=function(a){var b=[],c=-1,d=a[0],e=function(){var b=range.create(d),c={s:{path:[],offset:0},e:{path:[],offset:0}};return{contents:a.html(),bookmark:b?b.bookmark(d):c}},f=function(b){null!==b.contents&&a.html(b.contents),null!==b.bookmark&&range.createFromBookmark(d,b.bookmark).select()};this.rewind=function(){a.html()!==b[c].contents&&this.recordUndo(),c=0,f(b[c])},this.reset=function(){b=[],c=-1,a.html(""),this.recordUndo()},this.undo=function(){a.html()!==b[c].contents&&this.recordUndo(),c>0&&(c--,f(b[c]))},this.redo=function(){b.length-1>c&&(c++,f(b[c]))},this.recordUndo=function(){c++,b.length>c&&(b=b.slice(0,c)),b.push(e())}},Style=function(){var a=function(a,b){if(agent.jqueryVersion<1.9){var c={};return $.each(b,function(b,d){c[d]=a.css(d)}),c}return a.css.call(a,b)};this.fromNode=function(b){var c=["font-family","font-size","text-align","list-style-type","line-height"],d=a(b,c)||{};return d["font-size"]=parseInt(d["font-size"],10),d},this.stylePara=function(a,b){$.each(a.nodes(dom.isPara,{includeAncestor:!0}),function(a,c){$(c).css(b)})},this.styleNodes=function(a,b){a=a.splitText();var c=b&&b.nodeName||"SPAN",d=!(!b||!b.expandClosestSibling),e=!(!b||!b.onlyPartialContains);if(a.isCollapsed())return[a.insertNode(dom.create(c))];var f=dom.makePredByNodeName(c),g=a.nodes(dom.isText,{fullyContains:!0}).map(function(a){return dom.singleChildAncestor(a,f)||dom.wrap(a,c)});if(d){if(e){var h=a.nodes();f=func.and(f,function(a){return list.contains(h,a)})}return g.map(function(a){var b=dom.withClosestSiblings(a,f),c=list.head(b),d=list.tail(b);return $.each(d,function(a,b){dom.appendChildNodes(c,b.childNodes),dom.remove(b)}),list.head(b)})}return g},this.current=function(a){var b=$(dom.isElement(a.sc)?a.sc:a.sc.parentNode),c=this.fromNode(b);try{c=$.extend(c,{"font-bold":document.queryCommandState("bold")?"bold":"normal","font-italic":document.queryCommandState("italic")?"italic":"normal","font-underline":document.queryCommandState("underline")?"underline":"normal","font-subscript":document.queryCommandState("subscript")?"subscript":"normal","font-superscript":document.queryCommandState("superscript")?"superscript":"normal","font-strikethrough":document.queryCommandState("strikethrough")?"strikethrough":"normal"})}catch(d){}if(a.isOnList()){var e=["circle","disc","disc-leading-zero","square"],f=$.inArray(c["list-style-type"],e)>-1;c["list-style"]=f?"unordered":"ordered"}else c["list-style"]="none";var g=dom.ancestor(a.sc,dom.isPara);if(g&&g.style["line-height"])c["line-height"]=g.style.lineHeight;else{var h=parseInt(c["line-height"],10)/parseInt(c["font-size"],10);c["line-height"]=h.toFixed(1)}return c.anchor=a.isOnAnchor()&&dom.ancestor(a.sc,dom.isAnchor),c.ancestors=dom.listAncestor(a.sc,dom.isEditable),c.range=a,c}},Bullet=function(){var a=this;this.insertOrderedList=function(a){this.toggleList("OL",a)},this.insertUnorderedList=function(a){this.toggleList("UL",a)},this.indent=function(a){var b=this,c=range.create(a).wrapBodyInlineWithPara(),d=c.nodes(dom.isPara,{includeAncestor:!0}),e=list.clusterBy(d,func.peq2("parentNode"));$.each(e,function(a,c){var d=list.head(c);dom.isLi(d)?b.wrapList(c,d.parentNode.nodeName):$.each(c,function(a,b){$(b).css("marginLeft",function(a,b){return(parseInt(b,10)||0)+25})})}),c.select()},this.outdent=function(a){var b=this,c=range.create(a).wrapBodyInlineWithPara(),d=c.nodes(dom.isPara,{includeAncestor:!0}),e=list.clusterBy(d,func.peq2("parentNode"));$.each(e,function(a,c){var d=list.head(c);dom.isLi(d)?b.releaseList([c]):$.each(c,function(a,b){$(b).css("marginLeft",function(a,b){return b=parseInt(b,10)||0,b>25?b-25:""})})}),c.select()},this.toggleList=function(b,c){var d=range.create(c).wrapBodyInlineWithPara(),e=d.nodes(dom.isPara,{includeAncestor:!0}),f=d.paraBookmark(e),g=list.clusterBy(e,func.peq2("parentNode"));if(list.find(e,dom.isPurePara)){var h=[];$.each(g,function(c,d){h=h.concat(a.wrapList(d,b))}),e=h}else{var i=d.nodes(dom.isList,{includeAncestor:!0}).filter(function(a){return!$.nodeName(a,b)});i.length?$.each(i,function(a,c){dom.replace(c,b)}):e=this.releaseList(g,!0)}range.createFromParaBookmark(f,e).select()},this.wrapList=function(a,b){var c=list.head(a),d=list.last(a),e=dom.isList(c.previousSibling)&&c.previousSibling,f=dom.isList(d.nextSibling)&&d.nextSibling,g=e||dom.insertAfter(dom.create(b||"UL"),d);return a=a.map(function(a){return dom.isPurePara(a)?dom.replace(a,"LI"):a}),dom.appendChildNodes(g,a),f&&(dom.appendChildNodes(g,list.from(f.childNodes)),dom.remove(f)),a},this.releaseList=function(a,b){var c=[];return $.each(a,function(a,d){var e=list.head(d),f=list.last(d),g=b?dom.lastAncestor(e,dom.isList):e.parentNode,h=g.childNodes.length>1?dom.splitTree(g,{node:f.parentNode,offset:dom.position(f)+1},{isSkipPaddingBlankHTML:!0}):null,i=dom.splitTree(g,{node:e.parentNode,offset:dom.position(e)},{isSkipPaddingBlankHTML:!0});d=b?dom.listDescendant(i,dom.isLi):list.from(i.childNodes).filter(dom.isLi),(b||!dom.isList(g.parentNode))&&(d=d.map(function(a){return dom.replace(a,"P")})),$.each(list.from(d).reverse(),function(a,b){dom.insertAfter(b,g)});var j=list.compact([g,i,h]);$.each(j,function(a,b){var c=[b].concat(dom.listDescendant(b,dom.isList));$.each(c.reverse(),function(a,b){dom.nodeLength(b)||dom.remove(b,!0)})}),c=c.concat(d)}),c}},Typing=function(){var a=new Bullet;this.insertTab=function(a,b){var c=dom.createText(new Array(b+1).join(dom.NBSP_CHAR));a=a.deleteContents(),a.insertNode(c,!0),a=range.create(c,b),a.select()},this.insertParagraph=function(b){var c=range.create(b);c=c.deleteContents(),c=c.wrapBodyInlineWithPara();var d,e=dom.ancestor(c.sc,dom.isPara);if(e){if(dom.isEmpty(e)&&dom.isLi(e))return void a.toggleList(e.parentNode.nodeName);if(dom.isEmpty(e)&&dom.isPara(e)&&dom.isBlockquote(e.parentNode))dom.insertAfter(e,e.parentNode),d=e;else{d=dom.splitTree(e,c.getStartPoint());var f=dom.listDescendant(e,dom.isEmptyAnchor);f=f.concat(dom.listDescendant(d,dom.isEmptyAnchor)),$.each(f,function(a,b){dom.remove(b)}),(dom.isHeading(d)||dom.isPre(d))&&dom.isEmpty(d)&&(d=dom.replace(d,"p"))}}else{var g=c.sc.childNodes[c.so];d=$(dom.emptyPara)[0],g?c.sc.insertBefore(d,g):c.sc.appendChild(d)}range.create(d,0).normalize().select().scrollIntoView(b)}},Table=function(){this.tab=function(a,b){var c=dom.ancestor(a.commonAncestor(),dom.isCell),d=dom.ancestor(c,dom.isTable),e=dom.listDescendant(d,dom.isCell),f=list[b?"prev":"next"](e,c);f&&range.create(f,0).select()},this.createTable=function(a,b,c){for(var d,e=[],f=0;a>f;f++)e.push("<td>"+dom.blank+"</td>");d=e.join("");for(var g,h=[],i=0;b>i;i++)h.push("<tr>"+d+"</tr>");g=h.join("");var j=$("<table>"+g+"</table>");return c&&c.tableClassName&&j.addClass(c.tableClassName),j[0]}},KEY_BOGUS="bogus",Editor=function(a){var b=this,c=a.layoutInfo.note,d=a.layoutInfo.editor,e=a.layoutInfo.editable,f=a.options,g=f.langInfo,h=e[0],i=null,j=new Style,k=new Table,l=new Typing,m=new Bullet,n=new History(e);this.initialize=function(){e.on("keydown",function(c){c.keyCode===key.code.ENTER&&a.triggerEvent("enter",c),a.triggerEvent("keydown",c),c.isDefaultPrevented()||(f.shortcuts?b.handleKeyMap(c):b.preventDefaultEditableShortCuts(c))}).on("keyup",function(b){a.triggerEvent("keyup",b)}).on("focus",function(b){a.triggerEvent("focus",b)}).on("blur",function(b){a.triggerEvent("blur",b)}).on("mousedown",function(b){a.triggerEvent("mousedown",b)}).on("mouseup",function(b){a.triggerEvent("mouseup",b)}).on("scroll",function(b){a.triggerEvent("scroll",b)}).on("paste",function(b){a.triggerEvent("paste",b)}),e.html(dom.html(c)||dom.emptyPara);var g=agent.isMSIE?"DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted":"input";e.on(g,func.debounce(function(){a.triggerEvent("change",e.html())},250)),d.on("focusin",function(b){a.triggerEvent("focusin",b)}).on("focusout",function(b){a.triggerEvent("focusout",b)}),f.airMode||(f.width&&d.outerWidth(f.width),f.height&&e.outerHeight(f.height),f.maxHeight&&e.css("max-height",f.maxHeight),f.minHeight&&e.css("min-height",f.minHeight)),n.recordUndo()},this.destroy=function(){e.off()},this.handleKeyMap=function(b){var c=f.keyMap[agent.isMac?"mac":"pc"],d=[];b.metaKey&&d.push("CMD"),b.ctrlKey&&!b.altKey&&d.push("CTRL"),b.shiftKey&&d.push("SHIFT");var e=key.nameFromCode[b.keyCode];e&&d.push(e);var g=c[d.join("+")];g?(b.preventDefault(),a.invoke(g)):key.isEdit(b.keyCode)&&this.afterCommand()},this.preventDefaultEditableShortCuts=function(a){(a.ctrlKey||a.metaKey)&&list.contains([66,73,85],a.keyCode)&&a.preventDefault()},this.createRange=function(){return this.focus(),range.create(h)},this.saveRange=function(a){i=this.createRange(),a&&i.collapse().select()},this.restoreRange=function(){i&&(i.select(),this.focus())},this.saveTarget=function(a){e.data("target",a)},this.clearTarget=function(){e.removeData("target")},this.restoreTarget=function(){return e.data("target")},this.currentStyle=function(){var a=range.create();return a&&(a=a.normalize()),a?j.current(a):j.fromNode(e)},this.styleFromNode=function(a){return j.fromNode(a)},this.undo=function(){a.triggerEvent("before.command",e.html()),n.undo(),a.triggerEvent("change",e.html())},a.memo("help.undo",g.help.undo),this.redo=function(){a.triggerEvent("before.command",e.html()),n.redo(),a.triggerEvent("change",e.html())},a.memo("help.redo",g.help.redo);for(var o=this.beforeCommand=function(){a.triggerEvent("before.command",e.html()),b.focus()},p=this.afterCommand=function(b){n.recordUndo(),b||a.triggerEvent("change",e.html())},q=["bold","italic","underline","strikethrough","superscript","subscript","justifyLeft","justifyCenter","justifyRight","justifyFull","formatBlock","removeFormat","backColor","foreColor","fontName"],r=0,s=q.length;s>r;r++)this[q[r]]=function(a){return function(b){o(),document.execCommand(a,!1,b),p(!0)}}(q[r]),a.memo("help."+q[r],g.help[q[r]]);this.tab=function(){var a=this.createRange();a.isCollapsed()&&a.isOnCell()?k.tab(a):(o(),l.insertTab(a,f.tabSize),p())},a.memo("help.tab",g.help.tab),this.untab=function(){var a=this.createRange();a.isCollapsed()&&a.isOnCell()&&k.tab(a,!0)},a.memo("help.untab",g.help.untab),this.wrapCommand=function(a){return function(){o(),a.apply(b,arguments),p()}},this.insertParagraph=this.wrapCommand(function(){l.insertParagraph(h)}),a.memo("help.insertParagraph",g.help.insertParagraph),this.insertOrderedList=this.wrapCommand(function(){m.insertOrderedList(h)}),a.memo("help.insertOrderedList",g.help.insertOrderedList),this.insertUnorderedList=this.wrapCommand(function(){m.insertUnorderedList(h)}),a.memo("help.insertUnorderedList",g.help.insertUnorderedList),this.indent=this.wrapCommand(function(){m.indent(h)}),a.memo("help.indent",g.help.indent),this.outdent=this.wrapCommand(function(){m.outdent(h)}),a.memo("help.outdent",g.help.outdent),this.insertImage=function(b,c){return async.createImage(b,c).then(function(a){o(),"function"==typeof c?c(a):("string"==typeof c&&a.attr("data-filename",c),a.css("width",Math.min(e.width(),a.width()))),a.show(),range.create(h).insertNode(a[0]),range.createFromNodeAfter(a[0]).select(),p()}).fail(function(b){a.triggerEvent("image.upload.error",b)})},this.insertImages=function(c){$.each(c,function(c,d){var e=d.name;f.maximumImageFileSize&&f.maximumImageFileSize<d.size?a.triggerEvent("image.upload.error",g.image.maximumFileSizeError):async.readFileAsDataURL(d).then(function(a){return b.insertImage(a,e)}).fail(function(){a.triggerEvent("image.upload.error")})})},this.insertImagesOrCallback=function(b){var c=f.callbacks;c.onImageUpload?a.triggerEvent("image.upload",b):this.insertImages(b)},this.insertNode=this.wrapCommand(function(a){var b=this.createRange();b.insertNode(a),range.createFromNodeAfter(a).select()}),this.insertText=this.wrapCommand(function(a){var b=this.createRange(),c=b.insertNode(dom.createText(a));range.create(c,dom.nodeLength(c)).select()}),this.getSelectedText=function(){var a=this.createRange();return a.isOnAnchor()&&(a=range.createFromNode(dom.ancestor(a.sc,dom.isAnchor))),a.toString()},this.pasteHTML=this.wrapCommand(function(a){var b=this.createRange().pasteHTML(a);range.createFromNodeAfter(list.last(b)).select()}),this.formatBlock=this.wrapCommand(function(a){a=agent.isMSIE?"<"+a+">":a,document.execCommand("FormatBlock",!1,a)}),this.formatPara=function(){this.formatBlock("P")},a.memo("help.formatPara",g.help.formatPara);for(var r=1;6>=r;r++)this["formatH"+r]=function(a){return function(){this.formatBlock("H"+a)}}(r),a.memo("help.formatH"+r,g.help["formatH"+r]);this.fontSize=function(a){var b=this.createRange();if(b&&b.isCollapsed()){var c=j.styleNodes(b),d=list.head(c);$(c).css({"font-size":a+"px"}),d&&!dom.nodeLength(d)&&(d.innerHTML=dom.ZERO_WIDTH_NBSP_CHAR,range.createFromNodeAfter(d.firstChild).select(),e.data(KEY_BOGUS,d))}else o(),$(j.styleNodes(b)).css({"font-size":a+"px"}),p()},this.insertHorizontalRule=this.wrapCommand(function(){var a=this.createRange().insertNode(dom.create("HR"));a.nextSibling&&range.create(a.nextSibling,0).normalize().select()}),a.memo("help.insertHorizontalRule",g.help.insertHorizontalRule),this.removeBogus=function(){var a=e.data(KEY_BOGUS);if(a){var b=list.find(list.from(a.childNodes),dom.isText),c=b.nodeValue.indexOf(dom.ZERO_WIDTH_NBSP_CHAR);-1!==c&&b.deleteData(c,1),dom.isEmpty(a)&&dom.remove(a),e.removeData(KEY_BOGUS)}},this.lineHeight=this.wrapCommand(function(a){j.stylePara(this.createRange(),{lineHeight:a})}),this.unlink=function(){var a=this.createRange();if(a.isOnAnchor()){var b=dom.ancestor(a.sc,dom.isAnchor);a=range.createFromNode(b),a.select(),o(),document.execCommand("unlink"),p()}},this.createLink=this.wrapCommand(function(a){var b=a.url,c=a.text,d=a.isNewWindow,e=a.range||this.createRange(),g=e.toString()!==c;"string"==typeof b&&(b=b.trim()),f.onCreateLink&&(b=f.onCreateLink(b));var h=[];if(g){e=e.deleteContents();var i=e.insertNode($("<A>"+c+"</A>")[0]);h.push(i)}else h=j.styleNodes(e,{nodeName:"A",expandClosestSibling:!0,onlyPartialContains:!0});$.each(h,function(a,c){b=/^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(b)?b:"http://"+b,$(c).attr("href",b),d?$(c).attr("target","_blank"):$(c).removeAttr("target")});var k=range.createFromNodeBefore(list.head(h)),l=k.getStartPoint(),m=range.createFromNodeAfter(list.last(h)),n=m.getEndPoint();range.create(l.node,l.offset,n.node,n.offset).select()}),this.getLinkInfo=function(){var a=this.createRange().expand(dom.isAnchor),b=$(list.head(a.nodes(dom.isAnchor)));return{range:a,text:a.toString(),isNewWindow:b.length?"_blank"===b.attr("target"):!1,url:b.length?b.attr("href"):""}},this.color=this.wrapCommand(function(a){var b=a.foreColor,c=a.backColor;b&&document.execCommand("foreColor",!1,b),c&&document.execCommand("backColor",!1,c)}),this.insertTable=this.wrapCommand(function(a){var b=a.split("x"),c=this.createRange().deleteContents();c.insertNode(k.createTable(b[0],b[1],f))}),this.floatMe=this.wrapCommand(function(a){var b=$(this.restoreTarget());b.css("float",a)}),this.resize=this.wrapCommand(function(a){var b=$(this.restoreTarget());b.css({width:100*a+"%",height:""})}),this.resizeTo=function(a,b,c){var d;if(c){var e=a.y/a.x,f=b.data("ratio");d={width:f>e?a.x:a.y/f,height:f>e?a.x*f:a.y}}else d={width:a.x,height:a.y};b.css(d)},this.removeMedia=this.wrapCommand(function(){var b=$(this.restoreTarget()).detach();a.triggerEvent("media.delete",b,e)}),this.hasFocus=function(){return e.is(":focus")},this.focus=function(){this.hasFocus()||e.focus()},this.isEmpty=function(){return dom.isEmpty(e[0])||dom.emptyPara===e.html()},this.empty=function(){a.invoke("code",dom.emptyPara)}},Clipboard=function(a){var b=this,c=a.layoutInfo.editable;this.events={"summernote.keydown":function(c,d){b.needKeydownHook()&&(d.ctrlKey||d.metaKey)&&d.keyCode===key.code.V&&(a.invoke("editor.saveRange"),b.$paste.focus(),setTimeout(function(){b.pasteByHook()},0))}},this.needKeydownHook=function(){return agent.isMSIE&&agent.browserVersion>10||agent.isFF},this.initialize=function(){this.needKeydownHook()?(this.$paste=$('<div tabindex="-1" />').attr("contenteditable",!0).css({position:"absolute",left:-1e5,opacity:0}),c.before(this.$paste),this.$paste.on("paste",function(b){a.triggerEvent("paste",b)})):c.on("paste",this.pasteByEvent)},this.destroy=function(){this.needKeydownHook()&&(this.$paste.remove(),this.$paste=null)},this.pasteByHook=function(){var b=this.$paste[0].firstChild;if(dom.isImg(b)){for(var c=b.src,d=atob(c.split(",")[1]),e=new Uint8Array(d.length),f=0;f<d.length;f++)e[f]=d.charCodeAt(f);var g=new Blob([e],{type:"image/png"});g.name="clipboard.png",a.invoke("editor.restoreRange"),a.invoke("editor.focus"),a.invoke("editor.insertImagesOrCallback",[g])}else{var h=$("<div />").html(this.$paste.html()).html();a.invoke("editor.restoreRange"),a.invoke("editor.focus"),h&&a.invoke("editor.pasteHTML",h)}this.$paste.empty()},this.pasteByEvent=function(b){var c=b.originalEvent.clipboardData;if(c&&c.items&&c.items.length){var d=list.head(c.items);"file"===d.kind&&-1!==d.type.indexOf("image/")&&a.invoke("editor.insertImagesOrCallback",[d.getAsFile()]),a.invoke("editor.afterCommand")}}},Dropzone=function(a){var b=$(document),c=a.layoutInfo.editor,d=a.layoutInfo.editable,e=a.options,f=e.langInfo,g={},h=$(['<div class="note-dropzone">',' <div class="note-dropzone-message"/>',"</div>"].join("")).prependTo(c),i=function(){Object.keys(g).forEach(function(a){b.off(a.substr(2).toLowerCase(),g[a])}),g={}};this.initialize=function(){e.disableDragAndDrop?(g.onDrop=function(a){a.preventDefault()},b.on("drop",g.onDrop)):this.attachDragAndDropEvent()},this.attachDragAndDropEvent=function(){var e=$(),i=h.find(".note-dropzone-message");g.onDragenter=function(b){var d=a.invoke("codeview.isActivated"),g=c.width()>0&&c.height()>0;d||e.length||!g||(c.addClass("dragover"),h.width(c.width()),h.height(c.height()),i.text(f.image.dragImageHere)),e=e.add(b.target)},g.onDragleave=function(a){e=e.not(a.target),e.length||c.removeClass("dragover")},g.onDrop=function(){e=$(),c.removeClass("dragover")},b.on("dragenter",g.onDragenter).on("dragleave",g.onDragleave).on("drop",g.onDrop),h.on("dragenter",function(){h.addClass("hover"),i.text(f.image.dropImage)}).on("dragleave",function(){h.removeClass("hover"),i.text(f.image.dragImageHere)}),h.on("drop",function(b){var c=b.originalEvent.dataTransfer;c&&c.files&&c.files.length?(b.preventDefault(),d.focus(),a.invoke("editor.insertImagesOrCallback",c.files)):$.each(c.types,function(b,d){var e=c.getData(d);d.toLowerCase().indexOf("text")>-1?a.invoke("editor.pasteHTML",e):$(e).each(function(){a.invoke("editor.insertNode",this)})})}).on("dragover",!1)},this.destroy=function(){i()}},CodeMirror;agent.hasCodeMirror&&(agent.isSupportAmd?require(["codemirror"],function(a){CodeMirror=a}):CodeMirror=window.CodeMirror);var Codeview=function(a){var b=a.layoutInfo.editor,c=a.layoutInfo.editable,d=a.layoutInfo.codable,e=a.options;this.sync=function(){var a=this.isActivated();a&&agent.hasCodeMirror&&d.data("cmEditor").save()},this.isActivated=function(){return b.hasClass("codeview")},this.toggle=function(){this.isActivated()?this.deactivate():this.activate(),a.triggerEvent("codeview.toggled")},this.activate=function(){if(d.val(dom.html(c,e.prettifyHtml)),d.height(c.height()),a.invoke("toolbar.updateCodeview",!0),b.addClass("codeview"),d.focus(),agent.hasCodeMirror){var f=CodeMirror.fromTextArea(d[0],e.codemirror);if(e.codemirror.tern){var g=new CodeMirror.TernServer(e.codemirror.tern);f.ternServer=g,f.on("cursorActivity",function(a){g.updateArgHints(a)})}f.setSize(null,c.outerHeight()),d.data("cmEditor",f)}},this.deactivate=function(){if(agent.hasCodeMirror){var f=d.data("cmEditor");d.val(f.getValue()),f.toTextArea()}var g=dom.value(d,e.prettifyHtml)||dom.emptyPara,h=c.html()!==g;c.html(g),c.height(e.height?d.height():"auto"),b.removeClass("codeview"),h&&a.triggerEvent("change",c.html(),c),c.focus(),a.invoke("toolbar.updateCodeview",!1)},this.destroy=function(){this.isActivated()&&this.deactivate()}},EDITABLE_PADDING=24,Statusbar=function(a){var b=$(document),c=a.layoutInfo.statusbar,d=a.layoutInfo.editable,e=a.options;this.initialize=function(){e.airMode||e.disableResizeEditor||c.on("mousedown",function(a){a.preventDefault(),a.stopPropagation();var c=d.offset().top-b.scrollTop();b.on("mousemove",function(a){var b=a.clientY-(c+EDITABLE_PADDING);b=e.minheight>0?Math.max(b,e.minheight):b,b=e.maxHeight>0?Math.min(b,e.maxHeight):b,d.height(b)}).one("mouseup",function(){b.off("mousemove")})})},this.destroy=function(){c.off(),c.remove()}},Fullscreen=function(a){var b=a.layoutInfo.editor,c=a.layoutInfo.toolbar,d=a.layoutInfo.editable,e=a.layoutInfo.codable,f=$(window),g=$("html, body");this.toggle=function(){var h=function(a){d.css("height",a.h),e.css("height",a.h),e.data("cmeditor")&&e.data("cmeditor").setsize(null,a.h)};b.toggleClass("fullscreen"),this.isFullscreen()?(d.data("orgHeight",d.css("height")),f.on("resize",function(){h({h:f.height()-c.outerHeight()})}).trigger("resize"),g.css("overflow","hidden")):(f.off("resize"),h({h:d.data("orgHeight")}),g.css("overflow","visible")),a.invoke("toolbar.updateFullscreen",this.isFullscreen())},this.isFullscreen=function(){return b.hasClass("fullscreen")}},Handle=function(a){var b=this,c=$(document),d=a.layoutInfo.editingArea,e=a.options;this.events={"summernote.mousedown":function(a,c){b.update(c.target)&&c.preventDefault()},"summernote.keyup summernote.scroll summernote.change summernote.dialog.shown":function(){b.update()}},this.initialize=function(){this.$handle=$(['<div class="note-handle">','<div class="note-control-selection">','<div class="note-control-selection-bg"></div>','<div class="note-control-holder note-control-nw"></div>','<div class="note-control-holder note-control-ne"></div>','<div class="note-control-holder note-control-sw"></div>','<div class="',e.disableResizeImage?"note-control-holder":"note-control-sizing",' note-control-se"></div>',e.disableResizeImage?"":'<div class="note-control-selection-info"></div>',"</div>","</div>"].join("")).prependTo(d),this.$handle.on("mousedown",function(d){if(dom.isControlSizing(d.target)){d.preventDefault(),d.stopPropagation();var e=b.$handle.find(".note-control-selection").data("target"),f=e.offset(),g=c.scrollTop();c.on("mousemove",function(c){a.invoke("editor.resizeTo",{x:c.clientX-f.left,y:c.clientY-(f.top-g)},e,!c.shiftKey),b.update(e[0])}).one("mouseup",function(b){b.preventDefault(),c.off("mousemove"),a.invoke("editor.afterCommand")}),e.data("ratio")||e.data("ratio",e.height()/e.width())}})},this.destroy=function(){this.$handle.remove()},this.update=function(b){var c=dom.isImg(b),d=this.$handle.find(".note-control-selection");if(a.invoke("imagePopover.update",b),c){var e=$(b),f=e.position(),g={w:e.outerWidth(!0),h:e.outerHeight(!0)};d.css({display:"block",left:f.left,top:f.top,width:g.w,height:g.h}).data("target",e);var h=g.w+"x"+g.h;d.find(".note-control-selection-info").text(h),a.invoke("editor.saveTarget",b)}else this.hide();return c},this.hide=function(){a.invoke("editor.clearTarget"),this.$handle.children().hide()}},AutoLink=function(a){var b=this,c="http://",d=/^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i;this.events={"summernote.keyup":function(a,c){c.isDefaultPrevented()||b.handleKeyup(c)},"summernote.keydown":function(a,c){b.handleKeydown(c)}},this.initialize=function(){this.lastWordRange=null},this.destroy=function(){this.lastWordRange=null},this.replace=function(){if(this.lastWordRange){var b=this.lastWordRange.toString(),e=b.match(d);if(e&&(e[1]||e[2])){var f=e[1]?b:c+b,g=$("<a />").html(b).attr("href",f)[0];this.lastWordRange.insertNode(g),this.lastWordRange=null,a.invoke("editor.focus")}}},this.handleKeydown=function(b){if(list.contains([key.code.ENTER,key.code.SPACE],b.keyCode)){var c=a.invoke("editor.createRange").getWordRange();this.lastWordRange=c}},this.handleKeyup=function(a){list.contains([key.code.ENTER,key.code.SPACE],a.keyCode)&&this.replace()}},AutoSync=function(a){var b=a.layoutInfo.note;this.events={"summernote.change":function(){b.val(a.invoke("code"))}},this.shouldInitialize=function(){return dom.isTextarea(b[0])}},Placeholder=function(a){var b=this,c=a.layoutInfo.editingArea,d=a.options;this.events={"summernote.init summernote.change":function(){b.update()},"summernote.codeview.toggled":function(){b.update()}},this.shouldInitialize=function(){return!!d.placeholder},this.initialize=function(){this.$placeholder=$('<div class="note-placeholder">'),this.$placeholder.on("click",function(){a.invoke("focus")}).text(d.placeholder).prependTo(c)},this.destroy=function(){this.$placeholder.remove()},this.update=function(){var b=!a.invoke("codeview.isActivated")&&a.invoke("editor.isEmpty");this.$placeholder.toggle(b)}},Buttons=function(a){var b=this,c=$.summernote.ui,d=a.layoutInfo.toolbar,e=a.options,f=e.langInfo,g=func.invertObject(e.keyMap[agent.isMac?"mac":"pc"]),h=this.representShortcut=function(a){var b=g[a];return e.shortcuts&&b?(agent.isMac&&(b=b.replace("CMD","⌘").replace("SHIFT","⇧")),b=b.replace("BACKSLASH","\\").replace("SLASH","/").replace("LEFTBRACKET","[").replace("RIGHTBRACKET","]")," ("+b+")"):""};this.initialize=function(){this.addToolbarButtons(),this.addImagePopoverButtons(),this.addLinkPopoverButtons(),this.fontInstalledMap={}},this.destroy=function(){delete this.fontInstalledMap},this.isFontInstalled=function(a){return b.fontInstalledMap.hasOwnProperty(a)||(b.fontInstalledMap[a]=agent.isFontInstalled(a)||list.contains(e.fontNamesIgnoreCheck,a)),b.fontInstalledMap[a]},this.addToolbarButtons=function(){a.memo("button.style",function(){return c.buttonGroup([c.button({className:"dropdown-toggle",contents:c.icon(e.icons.magic)+" "+c.icon(e.icons.caret,"span"),tooltip:f.style.style,data:{toggle:"dropdown"}}),c.dropdown({className:"dropdown-style",items:a.options.styleTags,template:function(a){"string"==typeof a&&(a={tag:a,title:f.style.hasOwnProperty(a)?f.style[a]:a});var b=a.tag,c=a.title,d=a.style?' style="'+a.style+'" ':"",e=a.className?' class="'+a.className+'"':"";return"<"+b+d+e+">"+c+"</"+b+">"},click:a.createInvokeHandler("editor.formatBlock")})]).render()}),a.memo("button.bold",function(){return c.button({className:"note-btn-bold",contents:c.icon(e.icons.bold),tooltip:f.font.bold+h("bold"),click:a.createInvokeHandler("editor.bold")}).render()}),a.memo("button.italic",function(){return c.button({className:"note-btn-italic",contents:c.icon(e.icons.italic),tooltip:f.font.italic+h("italic"),click:a.createInvokeHandler("editor.italic")}).render()}),a.memo("button.underline",function(){return c.button({className:"note-btn-underline",contents:c.icon(e.icons.underline),tooltip:f.font.underline+h("underline"),click:a.createInvokeHandler("editor.underline")}).render()}),a.memo("button.clear",function(){return c.button({contents:c.icon(e.icons.eraser),tooltip:f.font.clear+h("removeFormat"),click:a.createInvokeHandler("editor.removeFormat")}).render()}),a.memo("button.strikethrough",function(){return c.button({className:"note-btn-strikethrough",contents:c.icon(e.icons.strikethrough),tooltip:f.font.strikethrough+h("strikethrough"),click:a.createInvokeHandler("editor.strikethrough")}).render()}),a.memo("button.superscript",function(){return c.button({className:"note-btn-superscript",contents:c.icon(e.icons.superscript),tooltip:f.font.superscript,click:a.createInvokeHandler("editor.superscript")}).render()}),a.memo("button.subscript",function(){return c.button({className:"note-btn-subscript",contents:c.icon(e.icons.subscript),tooltip:f.font.subscript,click:a.createInvokeHandler("editor.subscript")}).render()}),a.memo("button.fontname",function(){return c.buttonGroup([c.button({className:"dropdown-toggle",contents:'<span class="note-current-fontname"/> '+c.icon(e.icons.caret,"span"),tooltip:f.font.name,data:{toggle:"dropdown"}}),c.dropdownCheck({className:"dropdown-fontname",checkClassName:e.icons.menuCheck,items:e.fontNames.filter(b.isFontInstalled),template:function(a){return'<span style="font-family:'+a+'">'+a+"</span>"},click:a.createInvokeHandler("editor.fontName")})]).render()}),a.memo("button.fontsize",function(){return c.buttonGroup([c.button({className:"dropdown-toggle",contents:'<span class="note-current-fontsize"/>'+c.icon(e.icons.caret,"span"),tooltip:f.font.size,data:{toggle:"dropdown"}}),c.dropdownCheck({className:"dropdown-fontsize",checkClassName:e.icons.menuCheck,items:e.fontSizes,click:a.createInvokeHandler("editor.fontSize")})]).render()}),a.memo("button.color",function(){return c.buttonGroup({className:"note-color",children:[c.button({className:"note-current-color-button",contents:c.icon(e.icons.font+" note-recent-color"),tooltip:f.color.recent,click:function(b){var c=$(b.currentTarget);a.invoke("editor.color",{backColor:c.attr("data-backColor"),foreColor:c.attr("data-foreColor")})},callback:function(a){var b=a.find(".note-recent-color");b.css("background-color","#FFFF00"),a.attr("data-backColor","#FFFF00")}}),c.button({className:"dropdown-toggle",contents:c.icon(e.icons.caret,"span"),tooltip:f.color.more,data:{toggle:"dropdown"}}),c.dropdown({items:["<li>",'<div class="btn-group">',' <div class="note-palette-title">'+f.color.background+"</div>"," <div>",' <button type="button" class="note-color-reset btn btn-default" data-event="backColor" data-value="inherit">',f.color.transparent," </button>"," </div>",' <div class="note-holder" data-event="backColor"/>',"</div>",'<div class="btn-group">',' <div class="note-palette-title">'+f.color.foreground+"</div>"," <div>",' <button type="button" class="note-color-reset btn btn-default" data-event="removeFormat" data-value="foreColor">',f.color.resetToDefault," </button>"," </div>",' <div class="note-holder" data-event="foreColor"/>',"</div>","</li>"].join(""),callback:function(a){a.find(".note-holder").each(function(){var a=$(this);a.append(c.palette({colors:e.colors,eventName:a.data("event")}).render())})},click:function(b){var c=$(b.target),d=c.data("event"),e=c.data("value");if(d&&e){var f="backColor"===d?"background-color":"color",g=c.closest(".note-color").find(".note-recent-color"),h=c.closest(".note-color").find(".note-current-color-button");g.css(f,e),h.attr("data-"+d,e),a.invoke("editor."+d,e)}}})]}).render()}),a.memo("button.ul",function(){return c.button({contents:c.icon(e.icons.unorderedlist),tooltip:f.lists.unordered+h("insertUnorderedList"),click:a.createInvokeHandler("editor.insertUnorderedList")}).render()}),a.memo("button.ol",function(){return c.button({contents:c.icon(e.icons.orderedlist),tooltip:f.lists.ordered+h("insertOrderedList"),click:a.createInvokeHandler("editor.insertOrderedList")}).render()});var d=c.button({contents:c.icon(e.icons.alignLeft),tooltip:f.paragraph.left+h("justifyLeft"),click:a.createInvokeHandler("editor.justifyLeft")}),g=c.button({contents:c.icon(e.icons.alignCenter),tooltip:f.paragraph.center+h("justifyCenter"),click:a.createInvokeHandler("editor.justifyCenter")}),i=c.button({contents:c.icon(e.icons.alignRight),tooltip:f.paragraph.right+h("justifyRight"),click:a.createInvokeHandler("editor.justifyRight")}),j=c.button({contents:c.icon(e.icons.alignJustify),tooltip:f.paragraph.justify+h("justifyFull"),click:a.createInvokeHandler("editor.justifyFull")}),k=c.button({contents:c.icon(e.icons.outdent),tooltip:f.paragraph.outdent+h("outdent"),click:a.createInvokeHandler("editor.outdent")}),l=c.button({contents:c.icon(e.icons.indent),tooltip:f.paragraph.indent+h("indent"),click:a.createInvokeHandler("editor.indent")});a.memo("button.justifyLeft",func.invoke(d,"render")),a.memo("button.justifyCenter",func.invoke(g,"render")),a.memo("button.justifyRight",func.invoke(i,"render")),a.memo("button.justifyFull",func.invoke(j,"render")),a.memo("button.outdent",func.invoke(k,"render")),a.memo("button.indent",func.invoke(l,"render")),a.memo("button.paragraph",function(){return c.buttonGroup([c.button({className:"dropdown-toggle",contents:c.icon(e.icons.alignLeft)+" "+c.icon(e.icons.caret,"span"),tooltip:f.paragraph.paragraph,data:{toggle:"dropdown"}}),c.dropdown([c.buttonGroup({className:"note-align",children:[d,g,i,j] +}),c.buttonGroup({className:"note-list",children:[k,l]})])]).render()}),a.memo("button.height",function(){return c.buttonGroup([c.button({className:"dropdown-toggle",contents:c.icon(e.icons.textHeight)+" "+c.icon(e.icons.caret,"span"),tooltip:f.font.height,data:{toggle:"dropdown"}}),c.dropdownCheck({items:e.lineHeights,checkClassName:e.icons.menuCheck,className:"dropdown-line-height",click:a.createInvokeHandler("editor.lineHeight")})]).render()}),a.memo("button.table",function(){return c.buttonGroup([c.button({className:"dropdown-toggle",contents:c.icon(e.icons.table)+" "+c.icon(e.icons.caret,"span"),tooltip:f.table.table,data:{toggle:"dropdown"}}),c.dropdown({className:"note-table",items:['<div class="note-dimension-picker">',' <div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"/>',' <div class="note-dimension-picker-highlighted"/>',' <div class="note-dimension-picker-unhighlighted"/>',"</div>",'<div class="note-dimension-display">1 x 1</div>'].join("")})],{callback:function(c){var d=c.find(".note-dimension-picker-mousecatcher");d.css({width:e.insertTableMaxSize.col+"em",height:e.insertTableMaxSize.row+"em"}).mousedown(a.createInvokeHandler("editor.insertTable")).on("mousemove",b.tableMoveHandler)}}).render()}),a.memo("button.link",function(){return c.button({contents:c.icon(e.icons.link),tooltip:f.link.link+h("linkDialog.show"),click:a.createInvokeHandler("linkDialog.show")}).render()}),a.memo("button.picture",function(){return c.button({contents:c.icon(e.icons.picture),tooltip:f.image.image,click:a.createInvokeHandler("imageDialog.show")}).render()}),a.memo("button.video",function(){return c.button({contents:c.icon(e.icons.video),tooltip:f.video.video,click:a.createInvokeHandler("videoDialog.show")}).render()}),a.memo("button.hr",function(){return c.button({contents:c.icon(e.icons.minus),tooltip:f.hr.insert+h("insertHorizontalRule"),click:a.createInvokeHandler("editor.insertHorizontalRule")}).render()}),a.memo("button.fullscreen",function(){return c.button({className:"btn-fullscreen",contents:c.icon(e.icons.arrowsAlt),tooltip:f.options.fullscreen,click:a.createInvokeHandler("fullscreen.toggle")}).render()}),a.memo("button.codeview",function(){return c.button({className:"btn-codeview",contents:c.icon(e.icons.code),tooltip:f.options.codeview,click:a.createInvokeHandler("codeview.toggle")}).render()}),a.memo("button.redo",function(){return c.button({contents:c.icon(e.icons.redo),tooltip:f.history.redo+h("redo"),click:a.createInvokeHandler("editor.redo")}).render()}),a.memo("button.undo",function(){return c.button({contents:c.icon(e.icons.undo),tooltip:f.history.undo+h("undo"),click:a.createInvokeHandler("editor.undo")}).render()}),a.memo("button.help",function(){return c.button({contents:c.icon(e.icons.question),tooltip:f.options.help,click:a.createInvokeHandler("helpDialog.show")}).render()})},this.addImagePopoverButtons=function(){a.memo("button.imageSize100",function(){return c.button({contents:'<span class="note-fontsize-10">100%</span>',tooltip:f.image.resizeFull,click:a.createInvokeHandler("editor.resize","1")}).render()}),a.memo("button.imageSize50",function(){return c.button({contents:'<span class="note-fontsize-10">50%</span>',tooltip:f.image.resizeHalf,click:a.createInvokeHandler("editor.resize","0.5")}).render()}),a.memo("button.imageSize25",function(){return c.button({contents:'<span class="note-fontsize-10">25%</span>',tooltip:f.image.resizeQuarter,click:a.createInvokeHandler("editor.resize","0.25")}).render()}),a.memo("button.floatLeft",function(){return c.button({contents:c.icon(e.icons.alignLeft),tooltip:f.image.floatLeft,click:a.createInvokeHandler("editor.floatMe","left")}).render()}),a.memo("button.floatRight",function(){return c.button({contents:c.icon(e.icons.alignRight),tooltip:f.image.floatRight,click:a.createInvokeHandler("editor.floatMe","right")}).render()}),a.memo("button.floatNone",function(){return c.button({contents:c.icon(e.icons.alignJustify),tooltip:f.image.floatNone,click:a.createInvokeHandler("editor.floatMe","none")}).render()}),a.memo("button.removeMedia",function(){return c.button({contents:c.icon(e.icons.trash),tooltip:f.image.remove,click:a.createInvokeHandler("editor.removeMedia")}).render()})},this.addLinkPopoverButtons=function(){a.memo("button.linkDialogShow",function(){return c.button({contents:c.icon(e.icons.link),tooltip:f.link.edit,click:a.createInvokeHandler("linkDialog.show")}).render()}),a.memo("button.unlink",function(){return c.button({contents:c.icon(e.icons.unlink),tooltip:f.link.unlink,click:a.createInvokeHandler("editor.unlink")}).render()})},this.build=function(b,d){for(var e=0,f=d.length;f>e;e++){for(var g=d[e],h=g[0],i=g[1],j=c.buttonGroup({className:"note-"+h}).render(),k=0,l=i.length;l>k;k++){var m=a.memo("button."+i[k]);m&&j.append("function"==typeof m?m(a):m)}j.appendTo(b)}},this.updateCurrentStyle=function(){var c=a.invoke("editor.currentStyle");if(this.updateBtnStates({".note-btn-bold":function(){return"bold"===c["font-bold"]},".note-btn-italic":function(){return"italic"===c["font-italic"]},".note-btn-underline":function(){return"underline"===c["font-underline"]},".note-btn-subscript":function(){return"subscript"===c["font-subscript"]},".note-btn-superscript":function(){return"superscript"===c["font-superscript"]},".note-btn-strikethrough":function(){return"strikethrough"===c["font-strikethrough"]}}),c["font-family"]){var e=c["font-family"].split(",").map(function(a){return a.replace(/[\'\"]/g,"").replace(/\s+$/,"").replace(/^\s+/,"")}),f=list.find(e,b.isFontInstalled);d.find(".dropdown-fontname li a").each(function(){var a=$(this).data("value")+""==f+"";this.className=a?"checked":""}),d.find(".note-current-fontname").text(f)}if(c["font-size"]){var g=c["font-size"];d.find(".dropdown-fontsize li a").each(function(){var a=$(this).data("value")+""==g+"";this.className=a?"checked":""}),d.find(".note-current-fontsize").text(g)}if(c["line-height"]){var h=c["line-height"];d.find(".dropdown-line-height li a").each(function(){var a=$(this).data("value")+""==h+"";this.className=a?"checked":""})}},this.updateBtnStates=function(a){$.each(a,function(a,b){c.toggleBtnActive(d.find(a),b())})},this.tableMoveHandler=function(a){var b,c=18,d=$(a.target.parentNode),f=d.next(),g=d.find(".note-dimension-picker-mousecatcher"),h=d.find(".note-dimension-picker-highlighted"),i=d.find(".note-dimension-picker-unhighlighted");if(void 0===a.offsetX){var j=$(a.target).offset();b={x:a.pageX-j.left,y:a.pageY-j.top}}else b={x:a.offsetX,y:a.offsetY};var k={c:Math.ceil(b.x/c)||1,r:Math.ceil(b.y/c)||1};h.css({width:k.c+"em",height:k.r+"em"}),g.data("value",k.c+"x"+k.r),3<k.c&&k.c<e.insertTableMaxSize.col&&i.css({width:k.c+1+"em"}),3<k.r&&k.r<e.insertTableMaxSize.row&&i.css({height:k.r+1+"em"}),f.html(k.c+" x "+k.r)}},Toolbar=function(a){var b=$.summernote.ui,c=a.layoutInfo.note,d=a.layoutInfo.toolbar,e=a.options;this.shouldInitialize=function(){return!e.airMode},this.initialize=function(){e.toolbar=e.toolbar||[],e.toolbar.length?a.invoke("buttons.build",d,e.toolbar):d.hide(),e.toolbarContainer&&d.appendTo(e.toolbarContainer),c.on("summernote.keyup summernote.mouseup summernote.change",function(){a.invoke("buttons.updateCurrentStyle")}),a.invoke("buttons.updateCurrentStyle")},this.destroy=function(){d.children().remove()},this.updateFullscreen=function(a){b.toggleBtnActive(d.find(".btn-fullscreen"),a)},this.updateCodeview=function(a){b.toggleBtnActive(d.find(".btn-codeview"),a),a?this.deactivate():this.activate()},this.activate=function(a){var c=d.find("button");a||(c=c.not(".btn-codeview")),b.toggleBtn(c,!0)},this.deactivate=function(a){var c=d.find("button");a||(c=c.not(".btn-codeview")),b.toggleBtn(c,!1)}},LinkDialog=function(a){var b=this,c=$.summernote.ui,d=a.layoutInfo.editor,e=a.options,f=e.langInfo;this.initialize=function(){var a=e.dialogsInBody?$(document.body):d,b='<div class="form-group"><label>'+f.link.textToDisplay+'</label><input class="note-link-text form-control" type="text" /></div><div class="form-group"><label>'+f.link.url+'</label><input class="note-link-url form-control" type="text" value="http://" /></div>'+(e.disableLinkTarget?"":'<div class="checkbox"><label><input type="checkbox" checked> '+f.link.openInNewWindow+"</label></div>"),g='<button href="#" class="btn btn-primary note-link-btn disabled" disabled>'+f.link.insert+"</button>";this.$dialog=c.dialog({className:"link-dialog",title:f.link.insert,fade:e.dialogsFade,body:b,footer:g}).render().appendTo(a)},this.destroy=function(){c.hideDialog(this.$dialog),this.$dialog.remove()},this.bindEnterKey=function(a,b){a.on("keypress",function(a){a.keyCode===key.code.ENTER&&b.trigger("click")})},this.toggleLinkBtn=function(a,b,d){c.toggleBtn(a,b.val()&&d.val())},this.showLinkDialog=function(d){return $.Deferred(function(e){var f=b.$dialog.find(".note-link-text"),g=b.$dialog.find(".note-link-url"),h=b.$dialog.find(".note-link-btn"),i=b.$dialog.find("input[type=checkbox]");c.onDialogShown(b.$dialog,function(){a.triggerEvent("dialog.shown"),d.url||(d.url=d.text),f.val(d.text);var c=function(){b.toggleLinkBtn(h,f,g),d.text=f.val()};f.on("input",c).on("paste",function(){setTimeout(c,0)});var j=function(){b.toggleLinkBtn(h,f,g),d.text||f.val(g.val())};g.on("input",j).on("paste",function(){setTimeout(j,0)}).val(d.url).trigger("focus"),b.toggleLinkBtn(h,f,g),b.bindEnterKey(g,h),b.bindEnterKey(f,h),i.prop("checked",d.isNewWindow),h.one("click",function(a){a.preventDefault(),e.resolve({range:d.range,url:g.val(),text:f.val(),isNewWindow:i.is(":checked")}),b.$dialog.modal("hide")})}),c.onDialogHidden(b.$dialog,function(){f.off("input paste keypress"),g.off("input paste keypress"),h.off("click"),"pending"===e.state()&&e.reject()}),c.showDialog(b.$dialog)}).promise()},this.show=function(){var b=a.invoke("editor.getLinkInfo");a.invoke("editor.saveRange"),this.showLinkDialog(b).then(function(b){a.invoke("editor.restoreRange"),a.invoke("editor.createLink",b)}).fail(function(){a.invoke("editor.restoreRange")})},a.memo("help.linkDialog.show",e.langInfo.help["linkDialog.show"])},LinkPopover=function(a){var b=this,c=$.summernote.ui,d=a.options;this.events={"summernote.keyup summernote.mouseup summernote.change summernote.scroll":function(){b.update()},"summernote.dialog.shown":function(){b.hide()}},this.shouldInitialize=function(){return!list.isEmpty(d.popover.link)},this.initialize=function(){this.$popover=c.popover({className:"note-link-popover",callback:function(a){var b=a.find(".popover-content");b.prepend('<span><a target="_blank"></a> </span>')}}).render().appendTo("body");var b=this.$popover.find(".popover-content");a.invoke("buttons.build",b,d.popover.link)},this.destroy=function(){this.$popover.remove()},this.update=function(){if(!a.invoke("editor.hasFocus"))return void this.hide();var b=a.invoke("editor.createRange");if(b.isCollapsed()&&b.isOnAnchor()){var c=dom.ancestor(b.sc,dom.isAnchor),d=$(c).attr("href");this.$popover.find("a").attr("href",d).html(d);var e=dom.posFromPlaceholder(c);this.$popover.css({display:"block",left:e.left,top:e.top})}else this.hide()},this.hide=function(){this.$popover.hide()}},ImageDialog=function(a){var b=this,c=$.summernote.ui,d=a.layoutInfo.editor,e=a.options,f=e.langInfo;this.initialize=function(){var a=e.dialogsInBody?$(document.body):d,b="";if(e.maximumImageFileSize){var g=Math.floor(Math.log(e.maximumImageFileSize)/Math.log(1024)),h=1*(e.maximumImageFileSize/Math.pow(1024,g)).toFixed(2)+" "+" KMGTP"[g]+"B";b="<small>"+f.image.maximumFileSize+" : "+h+"</small>"}var i='<div class="form-group note-group-select-from-files"><label>'+f.image.selectFromFiles+'</label><input class="note-image-input form-control" type="file" name="files" accept="image/*" multiple="multiple" />'+b+'</div><div class="form-group note-group-image-url" style="overflow:auto;"><label>'+f.image.url+'</label><input class="note-image-url form-control col-md-12" type="text" /></div>',j='<button href="#" class="btn btn-primary note-image-btn disabled" disabled>'+f.image.insert+"</button>";this.$dialog=c.dialog({title:f.image.insert,fade:e.dialogsFade,body:i,footer:j}).render().appendTo(a)},this.destroy=function(){c.hideDialog(this.$dialog),this.$dialog.remove()},this.bindEnterKey=function(a,b){a.on("keypress",function(a){a.keyCode===key.code.ENTER&&b.trigger("click")})},this.show=function(){a.invoke("editor.saveRange"),this.showImageDialog().then(function(d){c.hideDialog(b.$dialog),a.invoke("editor.restoreRange"),"string"==typeof d?a.invoke("editor.insertImage",d):a.invoke("editor.insertImagesOrCallback",d)}).fail(function(){a.invoke("editor.restoreRange")})},this.showImageDialog=function(){return $.Deferred(function(d){var e=b.$dialog.find(".note-image-input"),f=b.$dialog.find(".note-image-url"),g=b.$dialog.find(".note-image-btn");c.onDialogShown(b.$dialog,function(){a.triggerEvent("dialog.shown"),e.replaceWith(e.clone().on("change",function(){d.resolve(this.files||this.value)}).val("")),g.click(function(a){a.preventDefault(),d.resolve(f.val())}),f.on("keyup paste",function(){var a=f.val();c.toggleBtn(g,a)}).val("").trigger("focus"),b.bindEnterKey(f,g)}),c.onDialogHidden(b.$dialog,function(){e.off("change"),f.off("keyup paste keypress"),g.off("click"),"pending"===d.state()&&d.reject()}),c.showDialog(b.$dialog)})}},ImagePopover=function(a){var b=$.summernote.ui,c=a.options;this.shouldInitialize=function(){return!list.isEmpty(c.popover.image)},this.initialize=function(){this.$popover=b.popover({className:"note-image-popover"}).render().appendTo("body");var d=this.$popover.find(".popover-content");a.invoke("buttons.build",d,c.popover.image)},this.destroy=function(){this.$popover.remove()},this.update=function(a){if(dom.isImg(a)){var b=dom.posFromPlaceholder(a);this.$popover.css({display:"block",left:b.left,top:b.top})}else this.hide()},this.hide=function(){this.$popover.hide()}},VideoDialog=function(a){var b=this,c=$.summernote.ui,d=a.layoutInfo.editor,e=a.options,f=e.langInfo;this.initialize=function(){var a=e.dialogsInBody?$(document.body):d,b='<div class="form-group row-fluid"><label>'+f.video.url+' <small class="text-muted">'+f.video.providers+'</small></label><input class="note-video-url form-control span12" type="text" /></div>',g='<button href="#" class="btn btn-primary note-video-btn disabled" disabled>'+f.video.insert+"</button>";this.$dialog=c.dialog({title:f.video.insert,fade:e.dialogsFade,body:b,footer:g}).render().appendTo(a)},this.destroy=function(){c.hideDialog(this.$dialog),this.$dialog.remove()},this.bindEnterKey=function(a,b){a.on("keypress",function(a){a.keyCode===key.code.ENTER&&b.trigger("click")})},this.createVideoNode=function(a){var b,c=/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/,d=a.match(c),e=/(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/,f=a.match(e),g=/\/\/vine\.co\/v\/([a-zA-Z0-9]+)/,h=a.match(g),i=/\/\/(player\.)?vimeo\.com\/([a-z]*\/)*([0-9]{6,11})[?]?.*/,j=a.match(i),k=/.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/,l=a.match(k),m=/\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/,n=a.match(m),o=/^.+.(mp4|m4v)$/,p=a.match(o),q=/^.+.(ogg|ogv)$/,r=a.match(q),s=/^.+.(webm)$/,t=a.match(s);if(d&&11===d[1].length){var u=d[1];b=$("<iframe>").attr("frameborder",0).attr("src","//www.youtube.com/embed/"+u).attr("width","640").attr("height","360")}else if(f&&f[0].length)b=$("<iframe>").attr("frameborder",0).attr("src","https://instagram.com/p/"+f[1]+"/embed/").attr("width","612").attr("height","710").attr("scrolling","no").attr("allowtransparency","true");else if(h&&h[0].length)b=$("<iframe>").attr("frameborder",0).attr("src",h[0]+"/embed/simple").attr("width","600").attr("height","600").attr("class","vine-embed");else if(j&&j[3].length)b=$("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder",0).attr("src","//player.vimeo.com/video/"+j[3]).attr("width","640").attr("height","360");else if(l&&l[2].length)b=$("<iframe>").attr("frameborder",0).attr("src","//www.dailymotion.com/embed/video/"+l[2]).attr("width","640").attr("height","360");else if(n&&n[1].length)b=$("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder",0).attr("height","498").attr("width","510").attr("src","//player.youku.com/embed/"+n[1]);else{if(!(p||r||t))return!1;b=$("<video controls>").attr("src",a).attr("width","640").attr("height","360")}return b.addClass("note-video-clip"),b[0]},this.show=function(){var d=a.invoke("editor.getSelectedText");a.invoke("editor.saveRange"),this.showVideoDialog(d).then(function(d){c.hideDialog(b.$dialog),a.invoke("editor.restoreRange");var e=b.createVideoNode(d);e&&a.invoke("editor.insertNode",e)}).fail(function(){a.invoke("editor.restoreRange")})},this.showVideoDialog=function(d){return $.Deferred(function(e){var f=b.$dialog.find(".note-video-url"),g=b.$dialog.find(".note-video-btn");c.onDialogShown(b.$dialog,function(){a.triggerEvent("dialog.shown"),f.val(d).on("input",function(){c.toggleBtn(g,f.val())}).trigger("focus"),g.click(function(a){a.preventDefault(),e.resolve(f.val())}),b.bindEnterKey(f,g)}),c.onDialogHidden(b.$dialog,function(){f.off("input"),g.off("click"),"pending"===e.state()&&e.reject()}),c.showDialog(b.$dialog)})}},HelpDialog=function(a){var b=this,c=$.summernote.ui,d=a.layoutInfo.editor,e=a.options,f=e.langInfo;this.createShortCutList=function(){var b=e.keyMap[agent.isMac?"mac":"pc"];return Object.keys(b).map(function(c){var d=b[c],e=$('<div><div class="help-list-item"/></div>');return e.append($("<label><kbd>"+c+"</kdb></label>").css({width:180,"margin-right":10})).append($("<span/>").html(a.memo("help."+d)||d)),e.html()}).join("")},this.initialize=function(){var a=e.dialogsInBody?$(document.body):d,b=['<p class="text-center">','<a href="http://summernote.org/" target="_blank">Summernote 0.8.2</a> · ','<a href="https://github.com/summernote/summernote" target="_blank">Project</a> · ','<a href="https://github.com/summernote/summernote/issues" target="_blank">Issues</a>',"</p>"].join("");this.$dialog=c.dialog({title:f.options.help,fade:e.dialogsFade,body:this.createShortCutList(),footer:b,callback:function(a){a.find(".modal-body").css({"max-height":300,overflow:"scroll"})}}).render().appendTo(a)},this.destroy=function(){c.hideDialog(this.$dialog),this.$dialog.remove()},this.showHelpDialog=function(){return $.Deferred(function(d){c.onDialogShown(b.$dialog,function(){a.triggerEvent("dialog.shown"),d.resolve()}),c.showDialog(b.$dialog)}).promise()},this.show=function(){a.invoke("editor.saveRange"),this.showHelpDialog().then(function(){a.invoke("editor.restoreRange")})}},AirPopover=function(a){var b=this,c=$.summernote.ui,d=a.options,e=20;this.events={"summernote.keyup summernote.mouseup summernote.scroll":function(){b.update()},"summernote.change summernote.dialog.shown":function(){b.hide()},"summernote.focusout":function(a,c){agent.isFF||c.relatedTarget&&dom.ancestor(c.relatedTarget,func.eq(b.$popover[0]))||b.hide()}},this.shouldInitialize=function(){return d.airMode&&!list.isEmpty(d.popover.air)},this.initialize=function(){this.$popover=c.popover({className:"note-air-popover"}).render().appendTo("body");var b=this.$popover.find(".popover-content");a.invoke("buttons.build",b,d.popover.air)},this.destroy=function(){this.$popover.remove()},this.update=function(){var b=a.invoke("editor.currentStyle");if(b.range&&!b.range.isCollapsed()){var c=list.last(b.range.getClientRects());if(c){var d=func.rect2bnd(c);this.$popover.css({display:"block",left:Math.max(d.left+d.width/2,0)-e,top:d.top+d.height})}}else this.hide()},this.hide=function(){this.$popover.hide()}},HintPopover=function(a){var b=this,c=$.summernote.ui,d=5,e=a.options.hint||[],f=a.options.hintDirection||"bottom",g=$.isArray(e)?e:[e];this.events={"summernote.keyup":function(a,c){c.isDefaultPrevented()||b.handleKeyup(c)},"summernote.keydown":function(a,c){b.handleKeydown(c)},"summernote.dialog.shown":function(){b.hide()}},this.shouldInitialize=function(){return g.length>0},this.initialize=function(){this.lastWordRange=null,this.$popover=c.popover({className:"note-hint-popover",hideArrow:!0,direction:""}).render().appendTo("body"),this.$popover.hide(),this.$content=this.$popover.find(".popover-content"),this.$content.on("click",".note-hint-item",function(){b.$content.find(".active").removeClass("active"),$(this).addClass("active"),b.replace()})},this.destroy=function(){this.$popover.remove()},this.selectItem=function(a){this.$content.find(".active").removeClass("active"),a.addClass("active"),this.$content[0].scrollTop=a[0].offsetTop-this.$content.innerHeight()/2},this.moveDown=function(){var a=this.$content.find(".note-hint-item.active"),b=a.next();if(b.length)this.selectItem(b);else{var c=a.parent().next();c.length||(c=this.$content.find(".note-hint-group").first()),this.selectItem(c.find(".note-hint-item").first())}},this.moveUp=function(){var a=this.$content.find(".note-hint-item.active"),b=a.prev();if(b.length)this.selectItem(b);else{var c=a.parent().prev();c.length||(c=this.$content.find(".note-hint-group").last()),this.selectItem(c.find(".note-hint-item").last())}},this.replace=function(){var b=this.$content.find(".note-hint-item.active");if(b.length){var c=this.nodeFromItem(b);this.lastWordRange.insertNode(c),range.createFromNode(c).collapse().select(),this.lastWordRange=null,this.hide(),a.invoke("editor.focus")}},this.nodeFromItem=function(a){var b=g[a.data("index")],c=a.data("item"),d=b.content?b.content(c):c;return"string"==typeof d&&(d=dom.createText(d)),d},this.createItemTemplates=function(a,b){var c=g[a];return b.map(function(b,d){var e=$('<div class="note-hint-item"/>');return e.append(c.template?c.template(b):b+""),e.data({index:a,item:b}),0===a&&0===d&&e.addClass("active"),e})},this.handleKeydown=function(a){this.$popover.is(":visible")&&(a.keyCode===key.code.ENTER?(a.preventDefault(),this.replace()):a.keyCode===key.code.UP?(a.preventDefault(),this.moveUp()):a.keyCode===key.code.DOWN&&(a.preventDefault(),this.moveDown()))},this.searchKeyword=function(a,b,c){var d=g[a];if(d&&d.match.test(b)&&d.search){var e=d.match.exec(b);d.search(e[1],c)}else c()},this.createGroup=function(a,c){var d=$('<div class="note-hint-group note-hint-group-'+a+'"/>');return this.searchKeyword(a,c,function(c){c=c||[],c.length&&(d.html(b.createItemTemplates(a,c)),b.show())}),d},this.handleKeyup=function(c){if(list.contains([key.code.ENTER,key.code.UP,key.code.DOWN],c.keyCode)){if(c.keyCode===key.code.ENTER&&this.$popover.is(":visible"))return}else{var e=a.invoke("editor.createRange").getWordRange(),h=e.toString();if(g.length&&h){this.$content.empty();var i=func.rect2bnd(list.last(e.getClientRects()));i&&(this.$popover.hide(),this.lastWordRange=e,g.forEach(function(a,c){a.match.test(h)&&b.createGroup(c,h).appendTo(b.$content)}),"top"===f?this.$popover.css({left:i.left,top:i.top-this.$popover.outerHeight()-d}):this.$popover.css({left:i.left,top:i.top+i.height+d}))}else this.hide()}},this.show=function(){this.$popover.show()},this.hide=function(){this.$popover.hide()}};$.summernote=$.extend($.summernote,{version:"0.8.2",ui:ui,dom:dom,plugins:{},options:{modules:{editor:Editor,clipboard:Clipboard,dropzone:Dropzone,codeview:Codeview,statusbar:Statusbar,fullscreen:Fullscreen,handle:Handle,hintPopover:HintPopover,autoLink:AutoLink,autoSync:AutoSync,placeholder:Placeholder,buttons:Buttons,toolbar:Toolbar,linkDialog:LinkDialog,linkPopover:LinkPopover,imageDialog:ImageDialog,imagePopover:ImagePopover,videoDialog:VideoDialog,helpDialog:HelpDialog,airPopover:AirPopover},buttons:{},lang:"en-US",toolbar:[["style",["style"]],["font",["bold","underline","clear"]],["fontname",["fontname"]],["color",["color"]],["para",["ul","ol","paragraph"]],["table",["table"]],["insert",["link","picture","video"]],["view",["fullscreen","codeview","help"]]],popover:{image:[["imagesize",["imageSize100","imageSize50","imageSize25"]],["float",["floatLeft","floatRight","floatNone"]],["remove",["removeMedia"]]],link:[["link",["linkDialogShow","unlink"]]],air:[["color",["color"]],["font",["bold","underline","clear"]],["para",["ul","paragraph"]],["table",["table"]],["insert",["link","picture"]]]},airMode:!1,width:null,height:null,focus:!1,tabSize:4,styleWithSpan:!0,shortcuts:!0,textareaAutoSync:!0,direction:null,styleTags:["p","blockquote","pre","h1","h2","h3","h4","h5","h6"],fontNames:["Arial","Arial Black","Comic Sans MS","Courier New","Helvetica Neue","Helvetica","Impact","Lucida Grande","Tahoma","Times New Roman","Verdana"],fontSizes:["8","9","10","11","12","14","18","24","36"],colors:[["#000000","#424242","#636363","#9C9C94","#CEC6CE","#EFEFEF","#F7F7F7","#FFFFFF"],["#FF0000","#FF9C00","#FFFF00","#00FF00","#00FFFF","#0000FF","#9C00FF","#FF00FF"],["#F7C6CE","#FFE7CE","#FFEFC6","#D6EFD6","#CEDEE7","#CEE7F7","#D6D6E7","#E7D6DE"],["#E79C9C","#FFC69C","#FFE79C","#B5D6A5","#A5C6CE","#9CC6EF","#B5A5D6","#D6A5BD"],["#E76363","#F7AD6B","#FFD663","#94BD7B","#73A5AD","#6BADDE","#8C7BC6","#C67BA5"],["#CE0000","#E79439","#EFC631","#6BA54A","#4A7B8C","#3984C6","#634AA5","#A54A7B"],["#9C0000","#B56308","#BD9400","#397B21","#104A5A","#085294","#311873","#731842"],["#630000","#7B3900","#846300","#295218","#083139","#003163","#21104A","#4A1031"]],lineHeights:["1.0","1.2","1.4","1.5","1.6","1.8","2.0","3.0"],tableClassName:"table table-bordered",insertTableMaxSize:{col:10,row:10},dialogsInBody:!1,dialogsFade:!1,maximumImageFileSize:null,callbacks:{onInit:null,onFocus:null,onBlur:null,onEnter:null,onKeyup:null,onKeydown:null,onImageUpload:null,onImageUploadError:null},codemirror:{mode:"text/html",htmlMode:!0,lineNumbers:!0},keyMap:{pc:{ENTER:"insertParagraph","CTRL+Z":"undo","CTRL+Y":"redo",TAB:"tab","SHIFT+TAB":"untab","CTRL+B":"bold","CTRL+I":"italic","CTRL+U":"underline","CTRL+SHIFT+S":"strikethrough","CTRL+BACKSLASH":"removeFormat","CTRL+SHIFT+L":"justifyLeft","CTRL+SHIFT+E":"justifyCenter","CTRL+SHIFT+R":"justifyRight","CTRL+SHIFT+J":"justifyFull","CTRL+SHIFT+NUM7":"insertUnorderedList","CTRL+SHIFT+NUM8":"insertOrderedList","CTRL+LEFTBRACKET":"outdent","CTRL+RIGHTBRACKET":"indent","CTRL+NUM0":"formatPara","CTRL+NUM1":"formatH1","CTRL+NUM2":"formatH2","CTRL+NUM3":"formatH3","CTRL+NUM4":"formatH4","CTRL+NUM5":"formatH5","CTRL+NUM6":"formatH6","CTRL+ENTER":"insertHorizontalRule","CTRL+K":"linkDialog.show"},mac:{ENTER:"insertParagraph","CMD+Z":"undo","CMD+SHIFT+Z":"redo",TAB:"tab","SHIFT+TAB":"untab","CMD+B":"bold","CMD+I":"italic","CMD+U":"underline","CMD+SHIFT+S":"strikethrough","CMD+BACKSLASH":"removeFormat","CMD+SHIFT+L":"justifyLeft","CMD+SHIFT+E":"justifyCenter","CMD+SHIFT+R":"justifyRight","CMD+SHIFT+J":"justifyFull","CMD+SHIFT+NUM7":"insertUnorderedList","CMD+SHIFT+NUM8":"insertOrderedList","CMD+LEFTBRACKET":"outdent","CMD+RIGHTBRACKET":"indent","CMD+NUM0":"formatPara","CMD+NUM1":"formatH1","CMD+NUM2":"formatH2","CMD+NUM3":"formatH3","CMD+NUM4":"formatH4","CMD+NUM5":"formatH5","CMD+NUM6":"formatH6","CMD+ENTER":"insertHorizontalRule","CMD+K":"linkDialog.show"}},icons:{align:"note-icon-align",alignCenter:"note-icon-align-center",alignJustify:"note-icon-align-justify",alignLeft:"note-icon-align-left",alignRight:"note-icon-align-right",indent:"note-icon-align-indent",outdent:"note-icon-align-outdent",arrowsAlt:"note-icon-arrows-alt",bold:"note-icon-bold",caret:"note-icon-caret",circle:"note-icon-circle",close:"note-icon-close",code:"note-icon-code",eraser:"note-icon-eraser",font:"note-icon-font",frame:"note-icon-frame",italic:"note-icon-italic",link:"note-icon-link",unlink:"note-icon-chain-broken",magic:"note-icon-magic",menuCheck:"note-icon-check",minus:"note-icon-minus",orderedlist:"note-icon-orderedlist",pencil:"note-icon-pencil",picture:"note-icon-picture",question:"note-icon-question",redo:"note-icon-redo",square:"note-icon-square",strikethrough:"note-icon-strikethrough",subscript:"note-icon-subscript",superscript:"note-icon-superscript",table:"note-icon-table",textHeight:"note-icon-text-height",trash:"note-icon-trash",underline:"note-icon-underline",undo:"note-icon-undo",unorderedlist:"note-icon-unorderedlist",video:"note-icon-video"}}})});
\ No newline at end of file |